Previous | 199869 Revisions | Next |
r20696 Sunday 3rd February, 2013 at 13:13:52 UTC by Fabio Priuli |
---|
(MESS) megadriv.c: many updates to cart handling [Fabio Priuli] - updated carts to be slot devices - simplified loading and bankswitch mechanism - added support for real Sonic & Knuckles lock-on emulation (you can combine it freely with other carts, through the -cart2 slot which gets added automatically) - remove need for "pcb_type" feature from xml softlist, since the new "slot" feature is enough - moved SVP emulation to src/mess/ in view of conversion to a slot device as well |
[hash] | megadriv.xml |
[src/mame] | mame.mak |
[src/mame/drivers] | hshavoc.c megadrvb.c megatech.c |
[src/mame/includes] | megadriv.h |
[src/mame/machine] | |
[src/mess] | mess.mak |
[src/mess/drivers] | megadriv.c |
[src/mess/includes] | md.h* |
[src/mess/machine] | md_eeprom.c* md_eeprom.h* md_jcart.c* md_jcart.h* md_rom.c* md_rom.h* md_sk.c* md_sk.h* md_slot.c* md_slot.h* md_stm95.c* md_stm95.h* megasvp.c* |
r20695 | r20696 | |
---|---|---|
225 | 225 | <publisher>Electronic Arts</publisher> |
226 | 226 | <part name="cart" interface="megadriv_cart"> |
227 | 227 | <feature name="pcb_type" value="SEGA-SRAM" /> |
228 | <feature name="slot" value="rom_sram" /> | |
228 | 229 | <dataarea name="rom" size="4194304"> |
229 | 230 | <rom name="nhl94_hl9402" size="1048576" crc="acecd225" sha1="5a11c7e3c925a6e256d2000b292ad7aa530bda0f" offset="000000" /> |
230 | 231 | </dataarea> |
r20695 | r20696 | |
248 | 249 | <publisher>Electronic Arts</publisher> |
249 | 250 | <part name="cart" interface="megadriv_cart"> |
250 | 251 | <feature name="pcb_type" value="SEGA-SRAM" /> |
252 | <feature name="slot" value="rom_sram" /> | |
251 | 253 | <dataarea name="rom" size="4194304"> |
252 | 254 | <rom name="pga_tour_golf_pgt04" size="1048576" crc="8d980bb4" sha1="89b50dae5c88f633458a6faeb4ee288fcc94c1b1" offset="000000" /> |
253 | 255 | </dataarea> |
r20695 | r20696 | |
508 | 510 | <info name="serial" value="G-4503"/> |
509 | 511 | <part name="cart" interface="megadriv_cart"> |
510 | 512 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
513 | <feature name="slot" value="rom_eeprom" /> | |
511 | 514 | <feature name="pcb" value="171-5878" /> |
512 | 515 | <feature name="ic1" value="MPR-12750A-T" /> |
513 | 516 | <feature name="ic2" value="X24CO1P" /> |
r20695 | r20696 | |
560 | 563 | <publisher>Sega</publisher> |
561 | 564 | <part name="cart" interface="megadriv_cart"> |
562 | 565 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
566 | <feature name="slot" value="rom_eeprom" /> | |
563 | 567 | <feature name="pcb" value="171-6584A" /> |
564 | 568 | <feature name="ic1" value="MPR-16211-SM" /> |
565 | 569 | <feature name="ic2" value="74HC32N" /> |
r20695 | r20696 | |
676 | 680 | <publisher>Codemasters</publisher> |
677 | 681 | <part name="cart" interface="megadriv_cart"> |
678 | 682 | <feature name="pcb_type" value="CM-JCART-SEPROM" /> |
683 | <feature name="slot" value="rom_codemast" /> | |
679 | 684 | <feature name="pcb" value="SRJCV2-1" /> |
680 | 685 | <dataarea name="rom" size="1048576"> |
681 | 686 | <rom name="mdm_2bead.bin" size="1048576" crc="42bfb7eb" sha1="ab29077a6a5c2ccc777b0bf22f4d5908401f4d47" offset="000000" loadflag="load16_word_swap" /> |
r20695 | r20696 | |
689 | 694 | <publisher>Codemasters</publisher> |
690 | 695 | <part name="cart" interface="megadriv_cart"> |
691 | 696 | <feature name="pcb_type" value="CM-JCART-SEPROM" /> |
697 | <feature name="slot" value="rom_mm96" /> | |
692 | 698 | <feature name="pcb" value="SRJCV2-2" /> |
693 | 699 | <dataarea name="rom" size="1048576"> |
694 | 700 | <rom name="mm96mdeddb.bin" size="1048576" crc="23319d0d" sha1="e8ff759679a0df2b3f9ece37ef686f248d3cf37b" offset="000000" loadflag="load16_word_swap" /> |
r20695 | r20696 | |
703 | 709 | <publisher>Codemasters</publisher> |
704 | 710 | <part name="cart" interface="megadriv_cart"> |
705 | 711 | <feature name="pcb_type" value="CM-JCART" /> |
712 | <feature name="slot" value="rom_jcart" /> | |
706 | 713 | <feature name="pcb" value="SRJCV1-2" /> |
707 | 714 | <dataarea name="rom" size="1048576"> |
708 | 715 | <rom name="mdst6636.bin" size="1048576" crc="94e505b2" sha1="4c830ace4590294bb374b4cab71ebebf44d9a07a" offset="000000" loadflag="load16_word_swap" /> |
r20695 | r20696 | |
717 | 724 | <publisher>Sega</publisher> |
718 | 725 | <part name="cart" interface="megadriv_cart"> |
719 | 726 | <feature name="pcb_type" value="SEGA-SRAM" /> |
727 | <feature name="slot" value="rom_sram" /> | |
720 | 728 | <feature name="pcb" value="171-5921" /> |
721 | 729 | <feature name="ic1" value="MPR-12851A S40" /> |
722 | 730 | <feature name="ic2" value="MPR-12852A-S" /> |
r20695 | r20696 | |
738 | 746 | <publisher>Sega</publisher> |
739 | 747 | <part name="cart" interface="megadriv_cart"> |
740 | 748 | <feature name="pcb_type" value="SEGA-SRAM" /> |
749 | <feature name="slot" value="rom_sram" /> | |
741 | 750 | <feature name="pcb" value="171-6278A" /> |
742 | 751 | <feature name="ic1" value="MPR-16933-H" /> |
743 | 752 | <feature name="ic2" value="GM76C88ALK-15" /> |
r20695 | r20696 | |
770 | 779 | <publisher>Sega</publisher> |
771 | 780 | <part name="cart" interface="megadriv_cart"> |
772 | 781 | <feature name="pcb_type" value="SEGA-SRAM" /> |
782 | <feature name="slot" value="rom_sram" /> | |
773 | 783 | <feature name="pcb" value="171-6278A" /> |
774 | 784 | <feature name="ic1" value="MPR-17512-U" /> |
775 | 785 | <feature name="ic2" value="GM76C88ALK-15" /> |
r20695 | r20696 | |
789 | 799 | <publisher>Sega</publisher> |
790 | 800 | <part name="cart" interface="megadriv_cart"> |
791 | 801 | <feature name="pcb_type" value="SEGA-SRAM" /> |
802 | <feature name="slot" value="rom_sram" /> | |
792 | 803 | <feature name="pcb" value="171-6278A" /> |
793 | 804 | <dataarea name="rom" size="2097152"> |
794 | 805 | <rom name="mpr-17513.ic1" size="2097152" crc="08dc1ead" sha1="7890074018f165eeb1281d81039fb07ccde7d197" offset="000000" loadflag="load16_word_swap" /> |
r20695 | r20696 | |
804 | 815 | <publisher>Sega</publisher> |
805 | 816 | <part name="cart" interface="megadriv_cart"> |
806 | 817 | <feature name="pcb_type" value="SEGA-SRAM" /> |
818 | <feature name="slot" value="rom_sram" /> | |
807 | 819 | <feature name="pcb" value="171-6278A" /> |
808 | 820 | <dataarea name="rom" size="2097152"> |
809 | 821 | <rom name="mpr-17514.ic1" size="2097152" crc="332b9ecd" sha1="65c8b7ab94b05812d009b4bebda3c49891a6bfbe" offset="000000" loadflag="load16_word_swap" /> |
r20695 | r20696 | |
819 | 831 | <publisher>Sega</publisher> |
820 | 832 | <part name="cart" interface="megadriv_cart"> |
821 | 833 | <feature name="pcb_type" value="SEGA-FRAM" /> |
834 | <feature name="slot" value="rom_fram" /> | |
822 | 835 | <feature name="pcb" value="171-6658A" /> |
823 | 836 | <feature name="ic1" value="MPR-16342-S" /> |
824 | 837 | <feature name="ic2" value="FM1208S-200CC" /> |
r20695 | r20696 | |
843 | 856 | <info name="alt_title" value="ソニック・ザ・ヘッジホッグ3"/> |
844 | 857 | <part name="cart" interface="megadriv_cart"> |
845 | 858 | <feature name="pcb_type" value="SEGA-FRAM" /> |
859 | <feature name="slot" value="rom_fram" /> | |
846 | 860 | <feature name="pcb" value="171-6658A" /> |
847 | 861 | <dataarea name="rom" size="2097152"> |
848 | 862 | <rom name="mpr-16343.ic1" size="2097152" crc="f4951d1f" sha1="7b98b21b7274233e962132bc22a7ccdf548c0ddb" offset="000000" loadflag="load16_word_swap" /> |
r20695 | r20696 | |
902 | 916 | <publisher>Sega</publisher> |
903 | 917 | <part name="cart" interface="megadriv_cart"> |
904 | 918 | <feature name="pcb_type" value="SEGA-SRAM" /> |
919 | <feature name="slot" value="rom_sram" /> | |
905 | 920 | <feature name="pcb" value="171-6583B" /> |
906 | 921 | <feature name="ic1" value="MPR-17720-SM" /> |
907 | 922 | <feature name="ic2" value="MPR-17720-SM" /> |
r20695 | r20696 | |
963 | 978 | <publisher>Sega</publisher> |
964 | 979 | <part name="cart" interface="megadriv_cart"> |
965 | 980 | <feature name="pcb_type" value="SEGA-SRAM" /> |
981 | <feature name="slot" value="rom_sram" /> | |
966 | 982 | <feature name="pcb" value="171-6278A" /> |
967 | 983 | <dataarea name="rom" size="2097152"> |
968 | 984 | <rom name="mpr-18090.ic1" size="2097152" crc="52c7252b" sha1="4352ae7ba1316e4384c4632be80f2fe277443f51" offset="000000" loadflag="load16_word_swap" /> |
r20695 | r20696 | |
1052 | 1068 | <feature name="pcb" value="171-6304A" /> |
1053 | 1069 | <feature name="ic1" value="MPR-14860-T" /> |
1054 | 1070 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
1071 | <feature name="slot" value="rom_eeprom" /> | |
1055 | 1072 | <dataarea name="rom" size="524288"> |
1056 | 1073 | <rom name="mpr-14860.ic1" size="524288" crc="4fef37c8" sha1="eb4aca22f8b5837a0a0b10491c46714948b09844" offset="000000" loadflag="load16_word_swap" /> |
1057 | 1074 | </dataarea> |
r20695 | r20696 | |
1272 | 1289 | <info name="alt_title" value="Landstalker (Box)"/> |
1273 | 1290 | <part name="cart" interface="megadriv_cart"> |
1274 | 1291 | <feature name="pcb_type" value="SEGA-SRAM" /> |
1292 | <feature name="slot" value="rom_sram" /> | |
1275 | 1293 | <feature name="pcb" value="171-6278A" /> |
1276 | 1294 | <feature name="ic1" value="MPR-15976-S" /> |
1277 | 1295 | <feature name="ic2" value="MB8464A-10LL" /> |
r20695 | r20696 | |
1349 | 1367 | <publisher>Electronic Arts</publisher> |
1350 | 1368 | <part name="cart" interface="megadriv_cart"> |
1351 | 1369 | <feature name="pcb_type" value="SEGA-SRAM" /> |
1370 | <feature name="slot" value="rom_sram" /> | |
1352 | 1371 | <feature name="pcb" value="P10002 REV J" /> |
1353 | 1372 | <feature name="u1" value="FIFA95B1 SOCCER" /> |
1354 | 1373 | <feature name="u2" value="GM76C88ALK-15" /> |
r20695 | r20696 | |
1575 | 1594 | <info name="alt_title" value="A列車で行こうMD ~ A Ressha de Ikou MD (Box)"/> |
1576 | 1595 | <part name="cart" interface="megadriv_cart"> |
1577 | 1596 | <feature name="pcb_type" value="SEGA-SRAM" /> |
1597 | <feature name="slot" value="rom_sram" /> | |
1578 | 1598 | <dataarea name="rom" size="524288"> |
1579 | 1599 | <rom name="a ressha de ikou md (jpn).bin" size="524288" crc="3d45de4f" sha1="d0d0aaad68978fd15c5857773141ae639de1abc7" offset="000000" loadflag="load16_word_swap" /> |
1580 | 1600 | </dataarea> |
r20695 | r20696 | |
1683 | 1703 | <info name="alt_title" value="アドバンスド大戦略 -ドイツ電撃作戦-"/> |
1684 | 1704 | <part name="cart" interface="megadriv_cart"> |
1685 | 1705 | <feature name="pcb_type" value="SEGA-SRAM" /> |
1706 | <feature name="slot" value="rom_sram" /> | |
1686 | 1707 | <dataarea name="rom" size="1048576"> |
1687 | 1708 | <rom name="mpr-13842a.bin" size="1048576" crc="e0d5e18a" sha1="842430c0465d810576e75851023929fec873580d" offset="000000" loadflag="load16_word_swap" /> |
1688 | 1709 | </dataarea> |
r20695 | r20696 | |
1917 | 1938 | <publisher>Koei</publisher> |
1918 | 1939 | <part name="cart" interface="megadriv_cart"> |
1919 | 1940 | <feature name="pcb_type" value="SEGA-SRAM" /> |
1941 | <feature name="slot" value="rom_sram" /> | |
1920 | 1942 | <dataarea name="rom" size="1048576"> |
1921 | 1943 | <rom name="aerobiz (usa).bin" size="1048576" crc="cfaa9bce" sha1="104ad3c6f5aaba08270faf427991d6a256c6e67c" offset="000000" loadflag="load16_word_swap" /> |
1922 | 1944 | </dataarea> |
r20695 | r20696 | |
1934 | 1956 | <info name="alt_title" value="エアーマネジメント 大空に賭ける"/> |
1935 | 1957 | <part name="cart" interface="megadriv_cart"> |
1936 | 1958 | <feature name="pcb_type" value="SEGA-SRAM" /> |
1959 | <feature name="slot" value="rom_sram" /> | |
1937 | 1960 | <dataarea name="rom" size="1048576"> |
1938 | 1961 | <rom name="air management - oozora ni kakeru (jpn).bin" size="1048576" crc="b3db0c71" sha1="b4e5752453cb3e4b3f6cb4fd9ad6473b4b8addd4" offset="000000" loadflag="load16_word_swap" /> |
1939 | 1962 | </dataarea> |
r20695 | r20696 | |
1948 | 1971 | <publisher>Koei</publisher> |
1949 | 1972 | <part name="cart" interface="megadriv_cart"> |
1950 | 1973 | <feature name="pcb_type" value="SEGA-SRAM" /> |
1974 | <feature name="slot" value="rom_sram" /> | |
1951 | 1975 | <dataarea name="rom" size="1048576"> |
1952 | 1976 | <rom name="aerobiz supersonic (usa).bin" size="1048576" crc="9377f1b5" sha1="f29b148c052f50a89e3b877ce027a0d5aaa387d1" offset="000000" loadflag="load16_word_swap" /> |
1953 | 1977 | </dataarea> |
r20695 | r20696 | |
1965 | 1989 | <info name="alt_title" value="エアーマネジメントII 航空王をめざせ"/> |
1966 | 1990 | <part name="cart" interface="megadriv_cart"> |
1967 | 1991 | <feature name="pcb_type" value="SEGA-SRAM" /> |
1992 | <feature name="slot" value="rom_sram" /> | |
1968 | 1993 | <dataarea name="rom" size="1048576"> |
1969 | 1994 | <rom name="air management ii - koukuuou o mezase (jpn).bin" size="1048576" crc="4582817b" sha1="6ed89fc3302023bc95c2bba0d45fe1d30e1c5d86" offset="000000" loadflag="load16_word_swap" /> |
1970 | 1995 | </dataarea> |
r20695 | r20696 | |
2633 | 2658 | <publisher>Sega</publisher> |
2634 | 2659 | <part name="cart" interface="megadriv_cart"> |
2635 | 2660 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2661 | <feature name="slot" value="rom_sram" /> | |
2636 | 2662 | <dataarea name="rom" size="2097152"> |
2637 | 2663 | <rom name="atp tour (euro).bin" size="2097152" crc="1a3da8c5" sha1="c5fe0fe967369e9d9e855fd3c7826c8f583c49e3" offset="000000" loadflag="load16_word_swap" /> |
2638 | 2664 | </dataarea> |
r20695 | r20696 | |
2647 | 2673 | <publisher>Sega</publisher> |
2648 | 2674 | <part name="cart" interface="megadriv_cart"> |
2649 | 2675 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2676 | <feature name="slot" value="rom_sram" /> | |
2650 | 2677 | <dataarea name="rom" size="2097152"> |
2651 | 2678 | <rom name="atp tour championship tennis (prototype - aug 02, 1994).bin" size="2097152" crc="686a9fa1" sha1="3e29c757cedf2334d830f4375242c066f83e0d36" offset="000000" loadflag="load16_word_swap" /> |
2652 | 2679 | </dataarea> |
r20695 | r20696 | |
2661 | 2688 | <publisher>Sega</publisher> |
2662 | 2689 | <part name="cart" interface="megadriv_cart"> |
2663 | 2690 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2691 | <feature name="slot" value="rom_sram" /> | |
2664 | 2692 | <dataarea name="rom" size="2097152"> |
2665 | 2693 | <rom name="atp tour championship tennis (prototype - aug 05, 1994).bin" size="2097152" crc="a1fef967" sha1="9fae94e52de4bde42ac45f0e3d3964ccd094b375" offset="000000" loadflag="load16_word_swap" /> |
2666 | 2694 | </dataarea> |
r20695 | r20696 | |
2675 | 2703 | <publisher>Sega</publisher> |
2676 | 2704 | <part name="cart" interface="megadriv_cart"> |
2677 | 2705 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2706 | <feature name="slot" value="rom_sram" /> | |
2678 | 2707 | <dataarea name="rom" size="2097152"> |
2679 | 2708 | <rom name="atp tour championship tennis (prototype - aug 08, 1994).bin" size="2097152" crc="e6398864" sha1="2cade1465fd5a835523b688bb675f67a7012e67d" offset="000000" loadflag="load16_word_swap" /> |
2680 | 2709 | </dataarea> |
r20695 | r20696 | |
2690 | 2719 | <publisher>Sega</publisher> |
2691 | 2720 | <part name="cart" interface="megadriv_cart"> |
2692 | 2721 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2722 | <feature name="slot" value="rom_sram" /> | |
2693 | 2723 | <dataarea name="rom" size="2097152"> |
2694 | 2724 | <rom name="atp tour championship tennis (prototype - jul 19, 1994).bin" size="2097152" crc="cb927488" sha1="e0e94be5c1f76465151cf6c6357d67ba68170676" offset="000000" loadflag="load16_word_swap" /> |
2695 | 2725 | </dataarea> |
r20695 | r20696 | |
2704 | 2734 | <publisher>Sega</publisher> |
2705 | 2735 | <part name="cart" interface="megadriv_cart"> |
2706 | 2736 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2737 | <feature name="slot" value="rom_sram" /> | |
2707 | 2738 | <dataarea name="rom" size="2097152"> |
2708 | 2739 | <rom name="atp tour championship tennis (prototype - jul 23, 1994).bin" size="2097152" crc="a15d5051" sha1="88005e79f325e20c804e04a7a310a6d19b7f7cce" offset="000000" loadflag="load16_word_swap" /> |
2709 | 2740 | </dataarea> |
r20695 | r20696 | |
2731 | 2762 | <publisher>Sega</publisher> |
2732 | 2763 | <part name="cart" interface="megadriv_cart"> |
2733 | 2764 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2765 | <feature name="slot" value="rom_sram" /> | |
2734 | 2766 | <dataarea name="rom" size="2097152"> |
2735 | 2767 | <rom name="atp tour championship tennis (prototype - may 09, 1994).bin" size="2097152" crc="b17a8dbc" sha1="dbaa2f60df5811026539d1f4c6ad50b596b1356a" offset="000000" loadflag="load16_word_swap" /> |
2736 | 2768 | </dataarea> |
r20695 | r20696 | |
2745 | 2777 | <publisher>Sega</publisher> |
2746 | 2778 | <part name="cart" interface="megadriv_cart"> |
2747 | 2779 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2780 | <feature name="slot" value="rom_sram" /> | |
2748 | 2781 | <dataarea name="rom" size="2097152"> |
2749 | 2782 | <rom name="atp tour championship tennis (prototype - sep 08, 1994).bin" size="2097152" crc="b83f4ca4" sha1="c2e277d1cf4fa9def71014dc7cf6ebe34d521281" offset="000000" loadflag="load16_word_swap" /> |
2750 | 2783 | </dataarea> |
r20695 | r20696 | |
2759 | 2792 | <publisher>Sega</publisher> |
2760 | 2793 | <part name="cart" interface="megadriv_cart"> |
2761 | 2794 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2795 | <feature name="slot" value="rom_sram" /> | |
2762 | 2796 | <dataarea name="rom" size="2097152"> |
2763 | 2797 | <rom name="atp tour championship tennis (usa).bin" size="2097152" crc="8c822884" sha1="1ccd027cac63ee56b24a54a84706646d22d0b610" offset="000000" loadflag="load16_word_swap" /> |
2764 | 2798 | </dataarea> |
r20695 | r20696 | |
2831 | 2865 | <info name="alt_title" value="アイルトン・セナ スーパーモナコGP II"/> |
2832 | 2866 | <part name="cart" interface="megadriv_cart"> |
2833 | 2867 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2868 | <feature name="slot" value="rom_sram" /> | |
2834 | 2869 | <dataarea name="rom" size="1048576"> |
2835 | 2870 | <rom name="mpr-14861.bin" size="1048576" crc="60af0f76" sha1="373fb1744170a114ef99802db987bc9aae009032" offset="000000" loadflag="load16_word_swap" /> |
2836 | 2871 | </dataarea> |
r20695 | r20696 | |
2845 | 2880 | <publisher>Sega</publisher> |
2846 | 2881 | <part name="cart" interface="megadriv_cart"> |
2847 | 2882 | <feature name="pcb_type" value="SEGA-SRAM" /> |
2883 | <feature name="slot" value="rom_sram" /> | |
2848 | 2884 | <dataarea name="rom" size="1048576"> |
2849 | 2885 | <rom name="ayrton senna's super monaco gp ii (usa).bin" size="1048576" crc="eac8ded6" sha1="1ee87744d86c4bdd4958cc70d77538351aa206e6" offset="000000" loadflag="load16_word_swap" /> |
2850 | 2886 | </dataarea> |
r20695 | r20696 | |
2975 | 3011 | <info name="alt_title" value="バハムート戦記"/> |
2976 | 3012 | <part name="cart" interface="megadriv_cart"> |
2977 | 3013 | <feature name="pcb_type" value="SEGA-SRAM" /> |
3014 | <feature name="slot" value="rom_sram" /> | |
2978 | 3015 | <dataarea name="rom" size="524288"> |
2979 | 3016 | <rom name="mpr-13677.bin" size="524288" crc="b1e268da" sha1="cee49b613298e060d938de523dfcbb27e790b5af" offset="000000" loadflag="load16_word_swap" /> |
2980 | 3017 | </dataarea> |
r20695 | r20696 | |
3048 | 3085 | <publisher>Accolade</publisher> |
3049 | 3086 | <part name="cart" interface="megadriv_cart"> |
3050 | 3087 | <feature name="pcb_type" value="SEGA-SRAM" /> |
3088 | <feature name="slot" value="rom_sram" /> | |
3051 | 3089 | <dataarea name="rom" size="2097152"> |
3052 | 3090 | <rom name="barkley shut up and jam! 2 (usa).bin" size="2097152" crc="321bb6bd" sha1="b13f13ccc1a21dacd295f30c66695bf97bbeff8d" offset="000000" loadflag="load16_word_swap" /> |
3053 | 3091 | </dataarea> |
r20695 | r20696 | |
3636 | 3674 | <publisher>Electronic Arts</publisher> |
3637 | 3675 | <part name="cart" interface="megadriv_cart"> |
3638 | 3676 | <feature name="pcb_type" value="SEGA-SRAM" /> |
3677 | <feature name="slot" value="rom_sram" /> | |
3639 | 3678 | <dataarea name="rom" size="1048576"> |
3640 | 3679 | <rom name="bwcf01.bin" size="1048576" crc="3ed83362" sha1="2bbb454900ac99172a2d72d1e6f96a96b8d6840b" offset="000000" loadflag="load16_word_swap" /> |
3641 | 3680 | </dataarea> |
r20695 | r20696 | |
3650 | 3689 | <publisher>Electronic Arts</publisher> |
3651 | 3690 | <part name="cart" interface="megadriv_cart"> |
3652 | 3691 | <feature name="pcb_type" value="SEGA-SRAM" /> |
3692 | <feature name="slot" value="rom_sram" /> | |
3653 | 3693 | <dataarea name="rom" size="2097152"> |
3654 | 3694 | <rom name="bill walsh college football 95 (usa).bin" size="2097152" crc="a582f45a" sha1="2ae000f45474b3cdedd08eeca7f5e195959ba689" offset="000000" loadflag="load16_word_swap" /> |
3655 | 3695 | </dataarea> |
r20695 | r20696 | |
3783 | 3823 | <info name="alt_title" value="ブルーアルマナック"/> |
3784 | 3824 | <part name="cart" interface="megadriv_cart"> |
3785 | 3825 | <feature name="pcb_type" value="SEGA-SRAM" /> |
3826 | <feature name="slot" value="rom_sram" /> | |
3786 | 3827 | <dataarea name="rom" size="1048576"> |
3787 | 3828 | <rom name="blue almanac (jpn).bin" size="1048576" crc="7222ebb3" sha1="0be0d4d3e192beb4106c0a95c1fb0aec952c3917" offset="000000" loadflag="load16_word_swap" /> |
3788 | 3829 | </dataarea> |
r20695 | r20696 | |
4070 | 4111 | <publisher>Accolade</publisher> |
4071 | 4112 | <part name="cart" interface="megadriv_cart"> |
4072 | 4113 | <feature name="pcb_type" value="SEGA-SRAM" /> |
4114 | <feature name="slot" value="rom_sram" /> | |
4073 | 4115 | <dataarea name="rom" size="2097152"> |
4074 | 4116 | <rom name="brett hull hockey '95 (usa).bin" size="2097152" crc="f7775a09" sha1="bcc9d8a737b5b6ccc5ddcd5906202508e4307f79" offset="000000" loadflag="load16_word_swap" /> |
4075 | 4117 | </dataarea> |
r20695 | r20696 | |
4107 | 4149 | <publisher>Codemasters</publisher> |
4108 | 4150 | <part name="cart" interface="megadriv_cart"> |
4109 | 4151 | <feature name="pcb_type" value="CM-SEPROM" /> |
4152 | <feature name="slot" value="rom_blara" /> | |
4110 | 4153 | <dataarea name="rom" size="1048576"> |
4111 | 4154 | <rom name="brian lara cricket 96 (euro) (april 1996).bin" size="1048576" crc="fe52f7e1" sha1="3e1ef39e9008a4a55fd57b25948668c8c52ba9e3" offset="000000" loadflag="load16_word_swap" /> |
4112 | 4155 | </dataarea> |
r20695 | r20696 | |
4119 | 4162 | <publisher>Codemasters</publisher> |
4120 | 4163 | <part name="cart" interface="megadriv_cart"> |
4121 | 4164 | <feature name="pcb_type" value="CM-SEPROM" /> |
4165 | <feature name="slot" value="rom_blara" /> | |
4122 | 4166 | <dataarea name="rom" size="1048576"> |
4123 | 4167 | <rom name="mdbl_9844.bin" size="1048576" crc="fa3024af" sha1="0b08788a0f8214c5d07b8e2293f0b954dd05bef5" offset="000000" loadflag="load16_word_swap" /> |
4124 | 4168 | </dataarea> |
r20695 | r20696 | |
4944 | 4988 | <publisher>Electronic Arts</publisher> |
4945 | 4989 | <part name="cart" interface="megadriv_cart"> |
4946 | 4990 | <feature name="pcb_type" value="SEGA-SRAM" /> |
4991 | <feature name="slot" value="rom_sram" /> | |
4947 | 4992 | <dataarea name="rom" size="2097152"> |
4948 | 4993 | <rom name="coach k college basketball (usa).bin" size="2097152" crc="67c309c6" sha1="8ff5d7a7fcc47f030a3ea69f4534d9c892f58ce2" offset="000000" loadflag="load16_word_swap" /> |
4949 | 4994 | </dataarea> |
r20695 | r20696 | |
4969 | 5014 | <publisher>Electronic Arts</publisher> |
4970 | 5015 | <part name="cart" interface="megadriv_cart"> |
4971 | 5016 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5017 | <feature name="slot" value="rom_sram" /> | |
4972 | 5018 | <dataarea name="rom" size="2097152"> |
4973 | 5019 | <rom name="college football usa 97 (usa).bin" size="2097152" crc="2ebb90a3" sha1="9b93035ecdc2b6f0815281764ef647f2de039e7b" offset="000000" loadflag="load16_word_swap" /> |
4974 | 5020 | </dataarea> |
r20695 | r20696 | |
4983 | 5029 | <publisher>Sega</publisher> |
4984 | 5030 | <part name="cart" interface="megadriv_cart"> |
4985 | 5031 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5032 | <feature name="slot" value="rom_sram" /> | |
4986 | 5033 | <dataarea name="rom" size="2097152"> |
4987 | 5034 | <rom name="college football's national championship (usa).bin" size="2097152" crc="172c5dbb" sha1="a3db8661e160e07b09bca03ba0d20ba4e80a4c59" offset="000000" loadflag="load16_word_swap" /> |
4988 | 5035 | </dataarea> |
r20695 | r20696 | |
4997 | 5044 | <publisher>Sega</publisher> |
4998 | 5045 | <part name="cart" interface="megadriv_cart"> |
4999 | 5046 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5047 | <feature name="slot" value="rom_sram" /> | |
5000 | 5048 | <dataarea name="rom" size="2097152"> |
5001 | 5049 | <rom name="college football's national championship (prototype - apr 13, 1994).bin" size="2097152" crc="d9772def" sha1="2eb0daad82caff6bcefb438297a2d701c99173c5" offset="000000" loadflag="load16_word_swap" /> |
5002 | 5050 | </dataarea> |
r20695 | r20696 | |
5011 | 5059 | <publisher>Sega</publisher> |
5012 | 5060 | <part name="cart" interface="megadriv_cart"> |
5013 | 5061 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5062 | <feature name="slot" value="rom_sram" /> | |
5014 | 5063 | <dataarea name="rom" size="2097152"> |
5015 | 5064 | <rom name="college football's national championship (prototype - apr 18, 1994).bin" size="2097152" crc="e0a1705f" sha1="ea19e141c64cc4abc6e7d7eea7bbb6783569a05a" offset="000000" loadflag="load16_word_swap" /> |
5016 | 5065 | </dataarea> |
r20695 | r20696 | |
5025 | 5074 | <publisher>Sega</publisher> |
5026 | 5075 | <part name="cart" interface="megadriv_cart"> |
5027 | 5076 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5077 | <feature name="slot" value="rom_sram" /> | |
5028 | 5078 | <dataarea name="rom" size="2097152"> |
5029 | 5079 | <rom name="college football's national championship (prototype - apr 19, 1994).bin" size="2097152" crc="d5fe66c3" sha1="9961db2c46f0189c419da2e335e6ca974eaa5379" offset="000000" loadflag="load16_word_swap" /> |
5030 | 5080 | </dataarea> |
r20695 | r20696 | |
5039 | 5089 | <publisher>Sega</publisher> |
5040 | 5090 | <part name="cart" interface="megadriv_cart"> |
5041 | 5091 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5092 | <feature name="slot" value="rom_sram" /> | |
5042 | 5093 | <dataarea name="rom" size="2097152"> |
5043 | 5094 | <rom name="college football's national championship (prototype - apr 29, 1994).bin" size="2097152" crc="99da1973" sha1="11e333a326ea71f77b816add76defc8f2846710d" offset="000000" loadflag="load16_word_swap" /> |
5044 | 5095 | </dataarea> |
r20695 | r20696 | |
5053 | 5104 | <publisher>Sega</publisher> |
5054 | 5105 | <part name="cart" interface="megadriv_cart"> |
5055 | 5106 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5107 | <feature name="slot" value="rom_sram" /> | |
5056 | 5108 | <dataarea name="rom" size="2097152"> |
5057 | 5109 | <rom name="college football's national championship (prototype - jun 01, 1994).bin" size="2097152" crc="994dbc8f" sha1="99e5ec2705fac1566e47fd813d6cf5b5e7f7daf4" offset="000000" loadflag="load16_word_swap" /> |
5058 | 5110 | </dataarea> |
r20695 | r20696 | |
5067 | 5119 | <publisher>Sega</publisher> |
5068 | 5120 | <part name="cart" interface="megadriv_cart"> |
5069 | 5121 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5122 | <feature name="slot" value="rom_sram" /> | |
5070 | 5123 | <dataarea name="rom" size="2097152"> |
5071 | 5124 | <rom name="college football's national championship (prototype - jun 03, 1994).bin" size="2097152" crc="9ca29321" sha1="1e155744a1c089cd2332c27cdad48e7f243c2fc8" offset="000000" loadflag="load16_word_swap" /> |
5072 | 5125 | </dataarea> |
r20695 | r20696 | |
5081 | 5134 | <publisher>Sega</publisher> |
5082 | 5135 | <part name="cart" interface="megadriv_cart"> |
5083 | 5136 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5137 | <feature name="slot" value="rom_sram" /> | |
5084 | 5138 | <dataarea name="rom" size="2097152"> |
5085 | 5139 | <rom name="college football's national championship (prototype - jun 07, 1994).bin" size="2097152" crc="b40b791e" sha1="334daa4f48dea4d85145fcd1bfb03f522532a9ae" offset="000000" loadflag="load16_word_swap" /> |
5086 | 5140 | </dataarea> |
r20695 | r20696 | |
5095 | 5149 | <publisher>Sega</publisher> |
5096 | 5150 | <part name="cart" interface="megadriv_cart"> |
5097 | 5151 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5152 | <feature name="slot" value="rom_sram" /> | |
5098 | 5153 | <dataarea name="rom" size="2097152"> |
5099 | 5154 | <rom name="college football's national championship (prototype - jun 08, 1994).bin" size="2097152" crc="d008debc" sha1="1b69304213ef1732c0b9b2f059179a7cf18b2c75" offset="000000" loadflag="load16_word_swap" /> |
5100 | 5155 | </dataarea> |
r20695 | r20696 | |
5109 | 5164 | <publisher>Sega</publisher> |
5110 | 5165 | <part name="cart" interface="megadriv_cart"> |
5111 | 5166 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5167 | <feature name="slot" value="rom_sram" /> | |
5112 | 5168 | <dataarea name="rom" size="2097152"> |
5113 | 5169 | <rom name="college football's national championship (prototype - jun 14, 1994).bin" size="2097152" crc="ecef7de7" sha1="923ce9034f37167b65aec97e160f6fe34ea2da33" offset="000000" loadflag="load16_word_swap" /> |
5114 | 5170 | </dataarea> |
r20695 | r20696 | |
5123 | 5179 | <publisher>Sega</publisher> |
5124 | 5180 | <part name="cart" interface="megadriv_cart"> |
5125 | 5181 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5182 | <feature name="slot" value="rom_sram" /> | |
5126 | 5183 | <dataarea name="rom" size="2097152"> |
5127 | 5184 | <rom name="college football's national championship (prototype - jun 15, 1994).bin" size="2097152" crc="c7e5a998" sha1="c9d010a0ffccecc2c01412daf64bf1b0eaf5055e" offset="000000" loadflag="load16_word_swap" /> |
5128 | 5185 | </dataarea> |
r20695 | r20696 | |
5137 | 5194 | <publisher>Sega</publisher> |
5138 | 5195 | <part name="cart" interface="megadriv_cart"> |
5139 | 5196 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5197 | <feature name="slot" value="rom_sram" /> | |
5140 | 5198 | <dataarea name="rom" size="2097152"> |
5141 | 5199 | <rom name="college football's national championship (prototype - jun 18, 1994).bin" size="2097152" crc="74988a9d" sha1="164e3fc32aa295b0d87e1508dd5fe75f9a7cadb9" offset="000000" loadflag="load16_word_swap" /> |
5142 | 5200 | </dataarea> |
r20695 | r20696 | |
5151 | 5209 | <publisher>Sega</publisher> |
5152 | 5210 | <part name="cart" interface="megadriv_cart"> |
5153 | 5211 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5212 | <feature name="slot" value="rom_sram" /> | |
5154 | 5213 | <dataarea name="rom" size="2097152"> |
5155 | 5214 | <rom name="college football's national championship (prototype - jun 20, 1994).bin" size="2097152" crc="898c17fa" sha1="4b30eea2fb1187cf3c9150f9dee5b5b9571c76f5" offset="000000" loadflag="load16_word_swap" /> |
5156 | 5215 | </dataarea> |
r20695 | r20696 | |
5165 | 5224 | <publisher>Sega</publisher> |
5166 | 5225 | <part name="cart" interface="megadriv_cart"> |
5167 | 5226 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5227 | <feature name="slot" value="rom_sram" /> | |
5168 | 5228 | <dataarea name="rom" size="2097152"> |
5169 | 5229 | <rom name="college football's national championship (prototype - may 03, 1994).bin" size="2097152" crc="db1a3f66" sha1="d9db6ecb032fd88443d0575b01e61cb4aeea5703" offset="000000" loadflag="load16_word_swap" /> |
5170 | 5230 | </dataarea> |
r20695 | r20696 | |
5179 | 5239 | <publisher>Sega</publisher> |
5180 | 5240 | <part name="cart" interface="megadriv_cart"> |
5181 | 5241 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5242 | <feature name="slot" value="rom_sram" /> | |
5182 | 5243 | <dataarea name="rom" size="2097152"> |
5183 | 5244 | <rom name="college football's national championship (prototype - may 06, 1994).bin" size="2097152" crc="0a538e75" sha1="ee673500aef188ca7cf086fb1cf616b58896fdcb" offset="000000" loadflag="load16_word_swap" /> |
5184 | 5245 | </dataarea> |
r20695 | r20696 | |
5193 | 5254 | <publisher>Sega</publisher> |
5194 | 5255 | <part name="cart" interface="megadriv_cart"> |
5195 | 5256 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5257 | <feature name="slot" value="rom_sram" /> | |
5196 | 5258 | <dataarea name="rom" size="2097152"> |
5197 | 5259 | <rom name="college football's national championship (prototype - may 11, 1994 - a).bin" size="2097152" crc="ce65b294" sha1="b16e953b695148b8284f87be566774379c4c2453" offset="000000" loadflag="load16_word_swap" /> |
5198 | 5260 | </dataarea> |
r20695 | r20696 | |
5207 | 5269 | <publisher>Sega</publisher> |
5208 | 5270 | <part name="cart" interface="megadriv_cart"> |
5209 | 5271 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5272 | <feature name="slot" value="rom_sram" /> | |
5210 | 5273 | <dataarea name="rom" size="2097152"> |
5211 | 5274 | <rom name="college football's national championship (prototype - may 17, 1994 - a).bin" size="2097152" crc="8cfd4c86" sha1="01ed2026a930383d926d71192b2a8f9417dfb245" offset="000000" loadflag="load16_word_swap" /> |
5212 | 5275 | </dataarea> |
r20695 | r20696 | |
5221 | 5284 | <publisher>Sega</publisher> |
5222 | 5285 | <part name="cart" interface="megadriv_cart"> |
5223 | 5286 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5287 | <feature name="slot" value="rom_sram" /> | |
5224 | 5288 | <dataarea name="rom" size="2097152"> |
5225 | 5289 | <rom name="college football's national championship (prototype - may 20, 1994).bin" size="2097152" crc="f285385e" sha1="0b26c5748e976a64c02864e1934f2b50f6953cba" offset="000000" loadflag="load16_word_swap" /> |
5226 | 5290 | </dataarea> |
r20695 | r20696 | |
5235 | 5299 | <publisher>Sega</publisher> |
5236 | 5300 | <part name="cart" interface="megadriv_cart"> |
5237 | 5301 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5302 | <feature name="slot" value="rom_sram" /> | |
5238 | 5303 | <dataarea name="rom" size="2097152"> |
5239 | 5304 | <rom name="college football's national championship (prototype - may 25, 1994).bin" size="2097152" crc="482e334a" sha1="e2fb264a11e08d57acf2756688880cd6fc353aba" offset="000000" loadflag="load16_word_swap" /> |
5240 | 5305 | </dataarea> |
r20695 | r20696 | |
5249 | 5314 | <publisher>Sega</publisher> |
5250 | 5315 | <part name="cart" interface="megadriv_cart"> |
5251 | 5316 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5317 | <feature name="slot" value="rom_sram" /> | |
5252 | 5318 | <dataarea name="rom" size="2097152"> |
5253 | 5319 | <rom name="college football's national championship (prototype - may 31, 1994).bin" size="2097152" crc="c6766745" sha1="157b65be9d946c46f77a90e4a5847fa41f2692b9" offset="000000" loadflag="load16_word_swap" /> |
5254 | 5320 | </dataarea> |
r20695 | r20696 | |
5263 | 5329 | <publisher>Sega</publisher> |
5264 | 5330 | <part name="cart" interface="megadriv_cart"> |
5265 | 5331 | <feature name="pcb_type" value="SEGA-SRAM" /> |
5332 | <feature name="slot" value="rom_sram" /> | |
5266 | 5333 | <dataarea name="rom" size="2097152"> |
5267 | 5334 | <rom name="college football's national championship ii (usa).bin" size="2097152" crc="65b64413" sha1="9609f9934a80dba183dab603ae07f445f02b919d" offset="000000" loadflag="load16_word_swap" /> |
5268 | 5335 | </dataarea> |
r20695 | r20696 | |
5277 | 5344 | <publisher>Acclaim Entertainment</publisher> |
5278 | 5345 | <part name="cart" interface="megadriv_cart"> |
5279 | 5346 | <feature name="pcb_type" value="CSLAM" /> |
5347 | <feature name="slot" value="rom_cslam" /> | |
5280 | 5348 | <dataarea name="rom" size="4194304"> |
5281 | 5349 | <rom name="college slam (usa).bin" size="4194304" crc="96a42431" sha1="0dbbe740b14077fe8648955f7e17965ea25f382a" offset="000000" loadflag="load16_word_swap" /> |
5282 | 5350 | </dataarea> |
r20695 | r20696 | |
6538 | 6606 | <publisher>Virgin Interactive</publisher> |
6539 | 6607 | <part name="cart" interface="megadriv_cart"> |
6540 | 6608 | <feature name="pcb_type" value="SEGA-SRAM" /> |
6609 | <feature name="slot" value="rom_sram" /> | |
6541 | 6610 | <dataarea name="rom" size="1048576"> |
6542 | 6611 | <rom name="dino dini's soccer (euro).bin" size="1048576" crc="4608f53a" sha1="49d4a654dd2f393e43a363ed171e73cd4c8ff4f4" offset="000000" loadflag="load16_word_swap" /> |
6543 | 6612 | </dataarea> |
r20695 | r20696 | |
6712 | 6781 | <publisher><unknown></publisher> |
6713 | 6782 | <part name="cart" interface="megadriv_cart"> |
6714 | 6783 | <feature name="pcb_type" value="SEGA-SRAM" /> |
6784 | <feature name="slot" value="rom_sram" /> | |
6715 | 6785 | <dataarea name="rom" size="786432"> |
6716 | 6786 | <rom name="dominus (usa) (prototype).bin" size="786432" crc="30006ebd" sha1="fde8160bf51575463e81cbd0b5d12fb5d49eb695" offset="000000" loadflag="load16_word_swap" /> |
6717 | 6787 | </dataarea> |
r20695 | r20696 | |
6927 | 6997 | <info name="alt_title" value="ドラゴンスレイヤー英雄伝説"/> |
6928 | 6998 | <part name="cart" interface="megadriv_cart"> |
6929 | 6999 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7000 | <feature name="slot" value="rom_sram" /> | |
6930 | 7001 | <dataarea name="rom" size="2097152"> |
6931 | 7002 | <rom name="dragon slayer - eiyuu densetsu (jpn).bin" size="2097152" crc="01bc1604" sha1="f67c9139bbc93f171e274a5cd3fba66480cd8244" offset="000000" loadflag="load16_word_swap" /> |
6932 | 7003 | </dataarea> |
r20695 | r20696 | |
6944 | 7015 | <info name="alt_title" value="ドラゴンスレイヤー英雄伝説II"/> |
6945 | 7016 | <part name="cart" interface="megadriv_cart"> |
6946 | 7017 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7018 | <feature name="slot" value="rom_sram" /> | |
6947 | 7019 | <dataarea name="rom" size="2097152"> |
6948 | 7020 | <rom name="dragon slayer - eiyuu densetsu ii (jpn).bin" size="2097152" crc="46924dc3" sha1="79b6201301acb5d9e9c56dcf65a9bcf9d9a931ab" offset="000000" loadflag="load16_word_swap" /> |
6949 | 7021 | </dataarea> |
r20695 | r20696 | |
7033 | 7105 | <publisher>Tec Toy</publisher> |
7034 | 7106 | <part name="cart" interface="megadriv_cart"> |
7035 | 7107 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7108 | <feature name="slot" value="rom_sram" /> | |
7036 | 7109 | <dataarea name="rom" size="4194304"> |
7037 | 7110 | <rom name="duke nukem 3d (bra).bin" size="4194304" crc="6bd2accb" sha1="a4663f2b96787a92db604a92491fa27e2b5ced9e" offset="000000" loadflag="load16_word_swap" /> |
7038 | 7111 | </dataarea> |
r20695 | r20696 | |
7080 | 7153 | <publisher>Sega</publisher> |
7081 | 7154 | <part name="cart" interface="megadriv_cart"> |
7082 | 7155 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7156 | <feature name="slot" value="rom_sram" /> | |
7083 | 7157 | <dataarea name="rom" size="1048576"> |
7084 | 7158 | <rom name="dungeons & dragons - warriors of the eternal sun (euro, usa).bin" size="1048576" crc="af4a9cd7" sha1="9135f7fda03ef7da92dfade9c0df75808214f693" offset="000000" loadflag="load16_word_swap" /> |
7085 | 7159 | </dataarea> |
r20695 | r20696 | |
7122 | 7196 | <publisher>Sega</publisher> |
7123 | 7197 | <part name="cart" interface="megadriv_cart"> |
7124 | 7198 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7199 | <feature name="slot" value="rom_sram" /> | |
7125 | 7200 | <dataarea name="rom" size="2621440"> |
7126 | 7201 | <rom name="dyna brothers 2 - sega channel special (jpn).bin" size="2621440" crc="ba3554bc" sha1="8e10298dfff521397f0e82d1787e701d6928750b" offset="000000" loadflag="load16_word_swap" /> |
7127 | 7202 | </dataarea> |
r20695 | r20696 | |
7538 | 7613 | <publisher>Electronic Arts</publisher> |
7539 | 7614 | <part name="cart" interface="megadriv_cart"> |
7540 | 7615 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7616 | <feature name="slot" value="rom_sram" /> | |
7541 | 7617 | <dataarea name="rom" size="2097152"> |
7542 | 7618 | <rom name="swed9584.bin" size="2097152" crc="e10a25c0" sha1="5f2c8303099ce13fe1e5760b7ef598a2967bfa8d" offset="000000" loadflag="load16_word_swap" /> |
7543 | 7619 | </dataarea> |
r20695 | r20696 | |
7552 | 7628 | <publisher>Electronic Arts</publisher> |
7553 | 7629 | <part name="cart" interface="megadriv_cart"> |
7554 | 7630 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7631 | <feature name="slot" value="rom_sram" /> | |
7555 | 7632 | <dataarea name="rom" size="2097152"> |
7556 | 7633 | <rom name="elitserien 96 (sweden).bin" size="2097152" crc="9821d0a3" sha1="085fb8e6f0d2ff0f399de5c57eb13d9c9325dbae" offset="000000" loadflag="load16_word_swap" /> |
7557 | 7634 | </dataarea> |
r20695 | r20696 | |
7758 | 7835 | <publisher>Sony Imagesoft</publisher> |
7759 | 7836 | <part name="cart" interface="megadriv_cart"> |
7760 | 7837 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7838 | <feature name="slot" value="rom_sram" /> | |
7761 | 7839 | <dataarea name="rom" size="2097152"> |
7762 | 7840 | <rom name="espn national hockey night (usa).bin" size="2097152" crc="1d08828c" sha1="cfd65e3ffb17e1718356ef8de7c527e2c9fd8940" offset="000000" loadflag="load16_word_swap" /> |
7763 | 7841 | </dataarea> |
r20695 | r20696 | |
7772 | 7850 | <publisher>Sony Imagesoft</publisher> |
7773 | 7851 | <part name="cart" interface="megadriv_cart"> |
7774 | 7852 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7853 | <feature name="slot" value="rom_sram" /> | |
7775 | 7854 | <dataarea name="rom" size="2097152"> |
7776 | 7855 | <rom name="espn national hockey night (usa) (beta).bin" size="2097152" crc="a427814a" sha1="c890fc232ca46a9499bb4e3107a519ae2d8edb81" offset="000000" loadflag="load16_word_swap" /> |
7777 | 7856 | </dataarea> |
r20695 | r20696 | |
7786 | 7865 | <publisher>Sony Imagesoft</publisher> |
7787 | 7866 | <part name="cart" interface="megadriv_cart"> |
7788 | 7867 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7868 | <feature name="slot" value="rom_sram" /> | |
7789 | 7869 | <dataarea name="rom" size="2097152"> |
7790 | 7870 | <rom name="espn speed world (usa).bin" size="2097152" crc="f50be478" sha1="9400a2ee865f11d68c766059318d6fe69987d89b" offset="000000" loadflag="load16_word_swap" /> |
7791 | 7871 | </dataarea> |
r20695 | r20696 | |
7800 | 7880 | <publisher>Sony Imagesoft</publisher> |
7801 | 7881 | <part name="cart" interface="megadriv_cart"> |
7802 | 7882 | <feature name="pcb_type" value="SEGA-SRAM" /> |
7883 | <feature name="slot" value="rom_sram" /> | |
7803 | 7884 | <dataarea name="rom" size="2097152"> |
7804 | 7885 | <rom name="espn sunday night nfl (usa).bin" size="2097152" crc="61e9c309" sha1="03f8c8805ebd4313c8a7d76b34121339bad33f89" offset="000000" loadflag="load16_word_swap" /> |
7805 | 7886 | </dataarea> |
r20695 | r20696 | |
7922 | 8003 | <publisher>Renovation</publisher> |
7923 | 8004 | <part name="cart" interface="megadriv_cart"> |
7924 | 8005 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8006 | <feature name="slot" value="rom_sram" /> | |
7925 | 8007 | <dataarea name="rom" size="1048576"> |
7926 | 8008 | <rom name="exile (usa).bin" size="1048576" crc="1b569dc2" sha1="28377e9a68c2dcdfdb4133c2eb0b634aec552958" offset="000000" loadflag="load16_word_swap" /> |
7927 | 8009 | </dataarea> |
r20695 | r20696 | |
7939 | 8021 | <info name="alt_title" value="エグザイル ~時の狭間へ~"/> |
7940 | 8022 | <part name="cart" interface="megadriv_cart"> |
7941 | 8023 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8024 | <feature name="slot" value="rom_sram" /> | |
7942 | 8025 | <dataarea name="rom" size="1048576"> |
7943 | 8026 | <rom name="exile - toki no hazama e (jpn).bin" size="1048576" crc="880bf311" sha1="14ef77cbf6c023365e168f54456d5486679292ef" offset="000000" loadflag="load16_word_swap" /> |
7944 | 8027 | </dataarea> |
r20695 | r20696 | |
8091 | 8174 | <publisher>Tengen</publisher> |
8092 | 8175 | <part name="cart" interface="megadriv_cart"> |
8093 | 8176 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8177 | <feature name="slot" value="rom_sram" /> | |
8094 | 8178 | <dataarea name="rom" size="1048576"> |
8095 | 8179 | <rom name="mpr-15834.bin" size="1048576" crc="fbdd4520" sha1="a8327157f6537f4cd5daaff648864e8e0bf945f1" offset="000000" loadflag="load16_word_swap" /> |
8096 | 8180 | </dataarea> |
r20695 | r20696 | |
8141 | 8225 | <info name="alt_title" value="エフワン サーカス エムディ"/> |
8142 | 8226 | <part name="cart" interface="megadriv_cart"> |
8143 | 8227 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8228 | <feature name="slot" value="rom_sram" /> | |
8144 | 8229 | <dataarea name="rom" size="524288"> |
8145 | 8230 | <rom name="f1 circus md (jpn).bin" size="524288" crc="5d30befb" sha1="2efb8d46163e785a57421e726991328024ecd2a7" offset="000000" loadflag="load16_word_swap" /> |
8146 | 8231 | </dataarea> |
r20695 | r20696 | |
8227 | 8312 | <info name="alt_title" value="ファステスト・ワン"/> |
8228 | 8313 | <part name="cart" interface="megadriv_cart"> |
8229 | 8314 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8315 | <feature name="slot" value="rom_sram" /> | |
8230 | 8316 | <dataarea name="rom" size="524288"> |
8231 | 8317 | <rom name="fastest 1 (jpn).bin" size="524288" crc="bb43f0de" sha1="837a19b4b821076f1cd01d53d90b4553a0252340" offset="000000" loadflag="load16_word_swap" /> |
8232 | 8318 | </dataarea> |
r20695 | r20696 | |
8382 | 8468 | <publisher>Chuanpu Technologies</publisher> |
8383 | 8469 | <part name="cart" interface="megadriv_cart"> |
8384 | 8470 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8471 | <feature name="slot" value="rom_sram" /> | |
8385 | 8472 | <dataarea name="rom" size="2097152"> |
8386 | 8473 | <rom name="unknown chinese game 1 (chi).bin" size="2097152" crc="dfacb9ff" sha1="4283bb9aec05098b9f6b1739e1b02c1bb1f8242f" offset="000000" loadflag="load16_word_swap" /> |
8387 | 8474 | </dataarea> |
r20695 | r20696 | |
8473 | 8560 | <publisher><unlicensed></publisher> |
8474 | 8561 | <part name="cart" interface="megadriv_cart"> |
8475 | 8562 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8563 | <feature name="slot" value="rom_sram" /> | |
8476 | 8564 | <dataarea name="rom" size="2097152"> |
8477 | 8565 | <rom name="futbol argentino 98 - pasion de multitudes (unl).bin" size="2097152" crc="5c015888" sha1="44adb1cf6c1ce6e53314dc336168c5cf3313a739" offset="000000" loadflag="load16_word_swap" /> |
8478 | 8566 | </dataarea> |
r20695 | r20696 | |
8487 | 8575 | <publisher>Electronic Arts</publisher> |
8488 | 8576 | <part name="cart" interface="megadriv_cart"> |
8489 | 8577 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8578 | <feature name="slot" value="rom_sram" /> | |
8490 | 8579 | <dataarea name="rom" size="2097152"> |
8491 | 8580 | <rom name="fifa01.bin" size="2097152" crc="bad30ffa" sha1="a7fcfe478b368d7d33bcbca65245f5faed9a1e07" offset="000000" loadflag="load16_word_swap" /> |
8492 | 8581 | </dataarea> |
r20695 | r20696 | |
8501 | 8590 | <publisher><unlicensed></publisher> |
8502 | 8591 | <part name="cart" interface="megadriv_cart"> |
8503 | 8592 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8593 | <feature name="slot" value="rom_sram" /> | |
8504 | 8594 | <dataarea name="rom" size="2097152"> |
8505 | 8595 | <rom name="fifa soccer 99 (pirate) (unl).bin" size="2097152" crc="c5c5a4b0" sha1="2c8c1dc0aaa711e3ab3fe0d74b79184f33127350" offset="000000" loadflag="load16_word_swap" /> |
8506 | 8596 | </dataarea> |
r20695 | r20696 | |
8526 | 8616 | <publisher>Electronic Arts</publisher> |
8527 | 8617 | <part name="cart" interface="megadriv_cart"> |
8528 | 8618 | <feature name="pcb_type" value="SEGA-SRAM" /> |
8619 | <feature name="slot" value="rom_sram" /> | |
8529 | 8620 | <dataarea name="rom" size="2097152"> |
8530 | 8621 | <rom name="fifa 98 - road to world cup (euro).bin" size="2097152" crc="96947f57" sha1="6613f13da5494aaaba3222ed5e730ec9ce3c09a7" offset="000000" loadflag="load16_word_swap" /> |
8531 | 8622 | </dataarea> |
r20695 | r20696 | |
8806 | 8897 | <publisher>Acclaim Entertainment</publisher> |
8807 | 8898 | <part name="cart" interface="megadriv_cart"> |
8808 | 8899 | <feature name="pcb_type" value="CSLAM" /> |
8900 | <feature name="slot" value="rom_cslam" /> | |
8809 | 8901 | <dataarea name="rom" size="4194304"> |
8810 | 8902 | <rom name="frank thomas big hurt baseball (euro, usa).bin" size="4194304" crc="863e0950" sha1="9c978aaab10e16be59558561b07a0c610c74b43e" offset="000000" loadflag="load16_word_swap" /> |
8811 | 8903 | </dataarea> |
r20695 | r20696 | |
9035 | 9127 | <publisher>Koei</publisher> |
9036 | 9128 | <part name="cart" interface="megadriv_cart"> |
9037 | 9129 | <feature name="pcb_type" value="SEGA-SRAM" /> |
9130 | <feature name="slot" value="rom_sram" /> | |
9038 | 9131 | <dataarea name="rom" size="1048576"> |
9039 | 9132 | <rom name="gemfire (usa).bin" size="1048576" crc="3d36135b" sha1="98da5fdec3147edb75210ccf662601e502e23c31" offset="000000" loadflag="load16_word_swap" /> |
9040 | 9133 | </dataarea> |
r20695 | r20696 | |
9052 | 9145 | <info name="alt_title" value="ロイヤルブラッド"/> |
9053 | 9146 | <part name="cart" interface="megadriv_cart"> |
9054 | 9147 | <feature name="pcb_type" value="SEGA-SRAM" /> |
9148 | <feature name="slot" value="rom_sram" /> | |
9055 | 9149 | <dataarea name="rom" size="1048576"> |
9056 | 9150 | <rom name="royal blood (jpn).bin" size="1048576" crc="0e0107f1" sha1="914f684f085927257020ffaa1ca536ec057e1603" offset="000000" loadflag="load16_word_swap" /> |
9057 | 9151 | </dataarea> |
r20695 | r20696 | |
9102 | 9196 | <publisher>Koei</publisher> |
9103 | 9197 | <part name="cart" interface="megadriv_cart"> |
9104 | 9198 | <feature name="pcb_type" value="SEGA-SRAM" /> |
9199 | <feature name="slot" value="rom_sram" /> | |
9105 | 9200 | <dataarea name="rom" size="1048576"> |
9106 | 9201 | <rom name="genghis khan ii - clan of the gray wolf (usa).bin" size="1048576" crc="87a281ae" sha1="4c1151413a261ad271543eeb64f512053f261a35" offset="000000" loadflag="load16_word_swap" /> |
9107 | 9202 | </dataarea> |
r20695 | r20696 | |
9119 | 9214 | <info name="alt_title" value="蒼き狼と白き牝鹿 元朝秘史"/> |
9120 | 9215 | <part name="cart" interface="megadriv_cart"> |
9121 | 9216 | <feature name="pcb_type" value="SEGA-SRAM" /> |
9217 | <feature name="slot" value="rom_sram" /> | |
9122 | 9218 | <dataarea name="rom" size="1310720"> |
9123 | 9219 | <rom name="aoki ookami to shiroki meshika - genchou hishi (jpn).bin" size="1310720" crc="10be1d93" sha1="0de0f798f636285da2b4d248f9894bf975b45304" offset="000000" loadflag="load16_word_swap" /> |
9124 | 9220 | </dataarea> |
r20695 | r20696 | |
9503 | 9599 | <info name="alt_title" value="グレイテスト ヘビーウェイツ"/> |
9504 | 9600 | <part name="cart" interface="megadriv_cart"> |
9505 | 9601 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
9602 | <feature name="slot" value="rom_eeprom" /> | |
9506 | 9603 | <dataarea name="rom" size="2097152"> |
9507 | 9604 | <rom name="greatest heavyweights (jpn).bin" size="2097152" crc="7ef8b162" sha1="1d5fe812df75e0dc1ff379c563058e078b839a09" offset="000000" loadflag="load16_word_swap" /> |
9508 | 9605 | </dataarea> |
r20695 | r20696 | |
9515 | 9612 | <publisher>Sega</publisher> |
9516 | 9613 | <part name="cart" interface="megadriv_cart"> |
9517 | 9614 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
9615 | <feature name="slot" value="rom_eeprom" /> | |
9518 | 9616 | <dataarea name="rom" size="2097152"> |
9519 | 9617 | <rom name="greatest heavyweights (usa).bin" size="2097152" crc="6e3621d5" sha1="4ef7aec80003aab0e1d2260b7fc0d22d63d90038" offset="000000" loadflag="load16_word_swap" /> |
9520 | 9618 | </dataarea> |
r20695 | r20696 | |
9696 | 9794 | <publisher>Accolade</publisher> |
9697 | 9795 | <part name="cart" interface="megadriv_cart"> |
9698 | 9796 | <feature name="pcb_type" value="SEGA-SRAM" /> |
9797 | <feature name="slot" value="rom_sram" /> | |
9699 | 9798 | <dataarea name="rom" size="2097152"> |
9700 | 9799 | <rom name="hardball '94 (euro, usa).bin" size="2097152" crc="ea9c4878" sha1="eceeecb3d520f9b350e41d0dd010abefbcfbbdab" offset="000000" loadflag="load16_word_swap" /> |
9701 | 9800 | </dataarea> |
r20695 | r20696 | |
9945 | 10044 | <info name="alt_title" value="ハイブリッド・フロント"/> |
9946 | 10045 | <part name="cart" interface="megadriv_cart"> |
9947 | 10046 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10047 | <feature name="slot" value="rom_sram" /> | |
9948 | 10048 | <dataarea name="rom" size="2097152"> |
9949 | 10049 | <rom name="hybrid front, the (jpn).bin" size="2097152" crc="a1f1cfe7" sha1="ed592c78ef60d91a6c5723d11cd553d3798524e1" offset="000000" loadflag="load16_word_swap" /> |
9950 | 10050 | </dataarea> |
r20695 | r20696 | |
9959 | 10059 | <publisher>Sega</publisher> |
9960 | 10060 | <part name="cart" interface="megadriv_cart"> |
9961 | 10061 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10062 | <feature name="slot" value="rom_sram" /> | |
9962 | 10063 | <dataarea name="rom" size="3145728"> |
9963 | 10064 | <rom name="hybrid front, the (jpn) (beta).bin" size="3145728" crc="04f02687" sha1="b6e72b69a22869f966c52e7d58d146bc48b5eb84" offset="000000" loadflag="load16_word_swap" /> |
9964 | 10065 | </dataarea> |
r20695 | r20696 | |
10056 | 10157 | <publisher>Electronic Arts</publisher> |
10057 | 10158 | <part name="cart" interface="megadriv_cart"> |
10058 | 10159 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10160 | <feature name="slot" value="rom_sram" /> | |
10059 | 10161 | <dataarea name="rom" size="2097152"> |
10060 | 10162 | <rom name="img international tour tennis (euro, usa).bin" size="2097152" crc="e04ffc2b" sha1="1f1b410d17b39851785dee3eee332fff489db395" offset="000000" loadflag="load16_word_swap" /> |
10061 | 10163 | </dataarea> |
r20695 | r20696 | |
10354 | 10456 | <info name="alt_title" value="Jリーグ・オフィシャルTVゲームプロストライカー ~ J.League Pro Striker (Box)"/> |
10355 | 10457 | <part name="cart" interface="megadriv_cart"> |
10356 | 10458 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10459 | <feature name="slot" value="rom_sram" /> | |
10357 | 10460 | <dataarea name="rom" size="1048576"> |
10358 | 10461 | <rom name="j. league pro striker (jpn) (v1.3).bin" size="1048576" crc="2d5b7a11" sha1="1e437182fab2980156b101a53623c3c2f27c3a6c" offset="000000" loadflag="load16_word_swap" /> |
10359 | 10462 | </dataarea> |
r20695 | r20696 | |
10372 | 10475 | <info name="alt_title" value="Jリーグ・オフィシャルTVゲームプロストライカー ~ J.League Pro Striker (Box)"/> |
10373 | 10476 | <part name="cart" interface="megadriv_cart"> |
10374 | 10477 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10478 | <feature name="slot" value="rom_sram" /> | |
10375 | 10479 | <dataarea name="rom" size="1048576"> |
10376 | 10480 | <rom name="j. league pro striker (jpn) (v1.0).bin" size="1048576" crc="ec229156" sha1="d3dcc24e50373234988061d3ef56c16d28e580ad" offset="000000" loadflag="load16_word_swap" /> |
10377 | 10481 | </dataarea> |
r20695 | r20696 | |
10390 | 10494 | <info name="alt_title" value="Jリーグ・オフィシャルTVゲームプロストライカー2"/> |
10391 | 10495 | <part name="cart" interface="megadriv_cart"> |
10392 | 10496 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10497 | <feature name="slot" value="rom_sram" /> | |
10393 | 10498 | <dataarea name="rom" size="2097152"> |
10394 | 10499 | <rom name="mpr-16857.bin" size="2097152" crc="9fe71002" sha1="924f1ae3d90bec7326a5531cd1d598cdeba30d36" offset="000000" loadflag="load16_word_swap" /> |
10395 | 10500 | </dataarea> |
r20695 | r20696 | |
10407 | 10512 | <info name="alt_title" value="プロストライカー ファイナルステージ"/> |
10408 | 10513 | <part name="cart" interface="megadriv_cart"> |
10409 | 10514 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10515 | <feature name="slot" value="rom_sram" /> | |
10410 | 10516 | <dataarea name="rom" size="2097152"> |
10411 | 10517 | <rom name="j. league pro striker final stage (jpn).bin" size="2097152" crc="e35e25fb" sha1="74e4a3ac4b93e25ace6ec8c3818e0df2390cffa2" offset="000000" loadflag="load16_word_swap" /> |
10412 | 10518 | </dataarea> |
r20695 | r20696 | |
10424 | 10530 | <info name="alt_title" value="Jリーグ・オフィシャルTVゲーム プロストライカー 完全版"/> |
10425 | 10531 | <part name="cart" interface="megadriv_cart"> |
10426 | 10532 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10533 | <feature name="slot" value="rom_sram" /> | |
10427 | 10534 | <dataarea name="rom" size="1048576"> |
10428 | 10535 | <rom name="mpr-16267.bin" size="1048576" crc="0abed379" sha1="7cfd8c9119d0565ee9a7708dc46bb34dd3258e37" offset="000000" loadflag="load16_word_swap" /> |
10429 | 10536 | </dataarea> |
r20695 | r20696 | |
10439 | 10546 | <publisher>Accolade</publisher> |
10440 | 10547 | <part name="cart" interface="megadriv_cart"> |
10441 | 10548 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10549 | <feature name="slot" value="rom_sram" /> | |
10442 | 10550 | <dataarea name="rom" size="1048576"> |
10443 | 10551 | <rom name="jack nicklaus' power challenge golf (euro, usa).bin" size="1048576" crc="5545e909" sha1="8d7edfe87da732ecd9820a6afbb9c5700cce43b2" offset="000000" loadflag="load16_word_swap" /> |
10444 | 10552 | </dataarea> |
r20695 | r20696 | |
10543 | 10651 | <info name="alt_title" value="日本プロ麻雀連盟公認 雀皇登龍門"/> |
10544 | 10652 | <part name="cart" interface="megadriv_cart"> |
10545 | 10653 | <feature name="pcb_type" value="SEGA-SRAM" /> |
10654 | <feature name="slot" value="rom_sram" /> | |
10546 | 10655 | <dataarea name="rom" size="1048576"> |
10547 | 10656 | <rom name="janou touryuumon (jpn).bin" size="1048576" crc="b5ef97c6" sha1="4f307e0146e944fbbd4537f5cdc5da136204fc9b" offset="000000" loadflag="load16_word_swap" /> |
10548 | 10657 | </dataarea> |
r20695 | r20696 | |
11174 | 11283 | <info name="alt_title" value="機動警察パトレイバー 98式起動せよ!"/> |
11175 | 11284 | <part name="cart" interface="megadriv_cart"> |
11176 | 11285 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11286 | <feature name="slot" value="rom_sram" /> | |
11177 | 11287 | <dataarea name="rom" size="524288"> |
11178 | 11288 | <rom name="kidou keisatsu patlabor - 98-shiki kidou seyo! (jpn).bin" size="524288" crc="21a0e749" sha1="5595422530e6891042a4a005d11b79af7f09fe9b" offset="000000" loadflag="load16_word_swap" /> |
11179 | 11289 | </dataarea> |
r20695 | r20696 | |
11191 | 11301 | <info name="alt_title" value="闘技王キングコロッサス"/> |
11192 | 11302 | <part name="cart" interface="megadriv_cart"> |
11193 | 11303 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11304 | <feature name="slot" value="rom_sram" /> | |
11194 | 11305 | <dataarea name="rom" size="1048576"> |
11195 | 11306 | <rom name="mpr-14929.bin" size="1048576" crc="ffe7b3c7" sha1="92bfb3548ebff18eedebe07751bf2170f95780d7" offset="000000" loadflag="load16_word_swap" /> |
11196 | 11307 | </dataarea> |
r20695 | r20696 | |
11291 | 11402 | <info name="alt_title" value="騎士伝説"/> |
11292 | 11403 | <part name="cart" interface="megadriv_cart"> |
11293 | 11404 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11405 | <feature name="slot" value="rom_sram" /> | |
11294 | 11406 | <dataarea name="rom" size="1572864"> |
11295 | 11407 | <rom name="kishi densetsu (jpn).bin" size="1572864" crc="22e1f04a" sha1="2884f79b8f717fc9e244dac0fb441bdc44c68203" offset="000000" loadflag="load16_word_swap" /> |
11296 | 11408 | </dataarea> |
r20695 | r20696 | |
11377 | 11489 | <publisher>Electronic Arts</publisher> |
11378 | 11490 | <part name="cart" interface="megadriv_cart"> |
11379 | 11491 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11492 | <feature name="slot" value="rom_sram" /> | |
11380 | 11493 | <dataarea name="rom" size="2097152"> |
11381 | 11494 | <rom name="la russa baseball 95 (usa, aus).bin" size="2097152" crc="3f848a92" sha1="0e73742113aa3f0aa5b010bb847569589cd3a5b0" offset="000000" loadflag="load16_word_swap" /> |
11382 | 11495 | </dataarea> |
r20695 | r20696 | |
11402 | 11515 | <publisher>Sega</publisher> |
11403 | 11516 | <part name="cart" interface="megadriv_cart"> |
11404 | 11517 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11518 | <feature name="slot" value="rom_sram" /> | |
11405 | 11519 | <dataarea name="rom" size="2097152"> |
11406 | 11520 | <rom name="landstalker - the treasures of king nole (euro).bin" size="2097152" crc="e3c65277" sha1="9fbadc86319936855831ecd096d82d716b304215" offset="000000" loadflag="load16_word_swap" /> |
11407 | 11521 | </dataarea> |
r20695 | r20696 | |
11416 | 11530 | <publisher>Sega</publisher> |
11417 | 11531 | <part name="cart" interface="megadriv_cart"> |
11418 | 11532 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11533 | <feature name="slot" value="rom_sram" /> | |
11419 | 11534 | <dataarea name="rom" size="2097152"> |
11420 | 11535 | <rom name="landstalker - die schatze von konig nolo (germany).bin" size="2097152" crc="10fedb8f" sha1="b0b447158cabb562e6bf4c0b829ed938b34afb52" offset="000000" loadflag="load16_word_swap" /> |
11421 | 11536 | </dataarea> |
r20695 | r20696 | |
11433 | 11548 | <info name="alt_title" value="ランドストーカー ~皇帝の財宝~"/> |
11434 | 11549 | <part name="cart" interface="megadriv_cart"> |
11435 | 11550 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11551 | <feature name="slot" value="rom_sram" /> | |
11436 | 11552 | <dataarea name="rom" size="2097152"> |
11437 | 11553 | <rom name="landstalker - koutei no zaihou (jpn).bin" size="2097152" crc="60d4cedb" sha1="cdbc7cd9ceb181cad9e49b641ff717072546f0d9" offset="000000" loadflag="load16_word_swap" /> |
11438 | 11554 | </dataarea> |
r20695 | r20696 | |
11448 | 11564 | <info name="alt_title" value="Landstalker (Box)"/> |
11449 | 11565 | <part name="cart" interface="megadriv_cart"> |
11450 | 11566 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11567 | <feature name="slot" value="rom_sram" /> | |
11451 | 11568 | <dataarea name="rom" size="2097152"> |
11452 | 11569 | <rom name="landstalker (usa).bin" size="2097152" crc="fbbb5b97" sha1="24345e29427b000b90df778965dd8834300a9dde" offset="000000" loadflag="load16_word_swap" /> |
11453 | 11570 | </dataarea> |
r20695 | r20696 | |
11462 | 11579 | <publisher>Sega</publisher> |
11463 | 11580 | <part name="cart" interface="megadriv_cart"> |
11464 | 11581 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11582 | <feature name="slot" value="rom_sram" /> | |
11465 | 11583 | <dataarea name="rom" size="2097152"> |
11466 | 11584 | <rom name="landstalker (usa) (beta).bin" size="2097152" crc="70483d03" sha1="dfca19397479852584d4ac6fcbe27412f9bc1af0" offset="000000" loadflag="load16_word_swap" /> |
11467 | 11585 | </dataarea> |
r20695 | r20696 | |
11479 | 11597 | <info name="alt_title" value="ラングリッサー"/> |
11480 | 11598 | <part name="cart" interface="megadriv_cart"> |
11481 | 11599 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11600 | <feature name="slot" value="rom_sram" /> | |
11482 | 11601 | <dataarea name="rom" size="524288"> |
11483 | 11602 | <rom name="mpr-13845.bin" size="524288" crc="b6ea5016" sha1="cc67c5a3b91e706b495eb561a95a038fff72b5da" offset="000000" loadflag="load16_word_swap" /> |
11484 | 11603 | </dataarea> |
r20695 | r20696 | |
11496 | 11615 | <info name="alt_title" value="ラングリッサーII"/> |
11497 | 11616 | <part name="cart" interface="megadriv_cart"> |
11498 | 11617 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11618 | <feature name="slot" value="rom_sram" /> | |
11499 | 11619 | <dataarea name="rom" size="2097152"> |
11500 | 11620 | <rom name="langrisser ii (jpn) (v1.2).bin" size="2097152" crc="4967c9f9" sha1="167944091348c89ce43dfa4854f8a51ed7276dde" offset="000000" loadflag="load16_word_swap" /> |
11501 | 11621 | </dataarea> |
r20695 | r20696 | |
11510 | 11630 | <publisher>NCS</publisher> |
11511 | 11631 | <part name="cart" interface="megadriv_cart"> |
11512 | 11632 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11633 | <feature name="slot" value="rom_sram" /> | |
11513 | 11634 | <dataarea name="rom" size="2097152"> |
11514 | 11635 | <rom name="langrisser ii (jpn) (v1.1).bin" size="2097152" crc="0caa0593" sha1="4ba6591dfd85aa75ffe8dc21137a9291aa7f5603" offset="000000" loadflag="load16_word_swap" /> |
11515 | 11636 | </dataarea> |
r20695 | r20696 | |
11524 | 11645 | <publisher>NCS</publisher> |
11525 | 11646 | <part name="cart" interface="megadriv_cart"> |
11526 | 11647 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11648 | <feature name="slot" value="rom_sram" /> | |
11527 | 11649 | <dataarea name="rom" size="2097152"> |
11528 | 11650 | <rom name="langrisser ii (jpn).bin" size="2097152" crc="7f891dfc" sha1="4bbc2502784a61eedf45eca5303dc68062964ff4" offset="000000" loadflag="load16_word_swap" /> |
11529 | 11651 | </dataarea> |
r20695 | r20696 | |
11741 | 11863 | <publisher>Koei</publisher> |
11742 | 11864 | <part name="cart" interface="megadriv_cart"> |
11743 | 11865 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11866 | <feature name="slot" value="rom_sram" /> | |
11744 | 11867 | <dataarea name="rom" size="2097152"> |
11745 | 11868 | <rom name="liberty or death (usa).bin" size="2097152" crc="2adb0364" sha1="c0ddfc2149cd84fbb0c5860b98c3a16f6000b85e" offset="000000" loadflag="load16_word_swap" /> |
11746 | 11869 | </dataarea> |
r20695 | r20696 | |
11758 | 11881 | <info name="alt_title" value="ライト クルセイダー"/> |
11759 | 11882 | <part name="cart" interface="megadriv_cart"> |
11760 | 11883 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11884 | <feature name="slot" value="rom_sram" /> | |
11761 | 11885 | <dataarea name="rom" size="2097152"> |
11762 | 11886 | <rom name="light crusader (jpn).bin" size="2097152" crc="237076a4" sha1="2b8c0931c33c143d41ef7cff6a8dbb9b8351d613" offset="000000" loadflag="load16_word_swap" /> |
11763 | 11887 | </dataarea> |
r20695 | r20696 | |
11772 | 11896 | <publisher>Sega</publisher> |
11773 | 11897 | <part name="cart" interface="megadriv_cart"> |
11774 | 11898 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11899 | <feature name="slot" value="rom_sram" /> | |
11775 | 11900 | <dataarea name="rom" size="2097152"> |
11776 | 11901 | <rom name="light crusader (kor).bin" size="2097152" crc="6d0cbcb2" sha1="0f018f95b4933bb5b3b3a91cee8b9a8ecb376942" offset="000000" loadflag="load16_word_swap" /> |
11777 | 11902 | </dataarea> |
r20695 | r20696 | |
11786 | 11911 | <publisher>Sega</publisher> |
11787 | 11912 | <part name="cart" interface="megadriv_cart"> |
11788 | 11913 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11914 | <feature name="slot" value="rom_sram" /> | |
11789 | 11915 | <dataarea name="rom" size="2097152"> |
11790 | 11916 | <rom name="light crusader (prototype - jun 08, 1995).bin" size="2097152" crc="e350ccfa" sha1="0bf26dba5324471532db776da1ee4c0c06add1e5" offset="000000" loadflag="load16_word_swap" /> |
11791 | 11917 | </dataarea> |
r20695 | r20696 | |
11800 | 11926 | <publisher>Sega</publisher> |
11801 | 11927 | <part name="cart" interface="megadriv_cart"> |
11802 | 11928 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11929 | <feature name="slot" value="rom_sram" /> | |
11803 | 11930 | <dataarea name="rom" size="2097152"> |
11804 | 11931 | <rom name="light crusader (usa).bin" size="2097152" crc="beb715dc" sha1="df58fbcbede4b9659740b5505641d4cc7dd1b7f8" offset="000000" loadflag="load16_word_swap" /> |
11805 | 11932 | </dataarea> |
r20695 | r20696 | |
11853 | 11980 | <info name="alt_title" value="ロードモナーク とことん戦闘伝説"/> |
11854 | 11981 | <part name="cart" interface="megadriv_cart"> |
11855 | 11982 | <feature name="pcb_type" value="SEGA-SRAM" /> |
11983 | <feature name="slot" value="rom_sram" /> | |
11856 | 11984 | <dataarea name="rom" size="2097152"> |
11857 | 11985 | <rom name="lord monarch - tokoton sentou densetsu (jpn).bin" size="2097152" crc="238bf5db" sha1="9b5c71d70de132c8ba6f2adfdeba43077f76ac3e" offset="000000" loadflag="load16_word_swap" /> |
11858 | 11986 | </dataarea> |
r20695 | r20696 | |
11955 | 12083 | <publisher>Electronic Arts</publisher> |
11956 | 12084 | <part name="cart" interface="megadriv_cart"> |
11957 | 12085 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12086 | <feature name="slot" value="rom_sram" /> | |
11958 | 12087 | <dataarea name="rom" size="2097152"> |
11959 | 12088 | <rom name="madden nfl '94 (euro, usa).bin" size="2097152" crc="d14b811b" sha1="856d68d3e8589df3452096434feef823684d11eb" offset="000000" loadflag="load16_word_swap" /> |
11960 | 12089 | </dataarea> |
r20695 | r20696 | |
11969 | 12098 | <publisher>Electronic Arts</publisher> |
11970 | 12099 | <part name="cart" interface="megadriv_cart"> |
11971 | 12100 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12101 | <feature name="slot" value="rom_sram" /> | |
11972 | 12102 | <dataarea name="rom" size="2097152"> |
11973 | 12103 | <rom name="madden nfl 95 (euro, usa).bin" size="2097152" crc="db0be0c2" sha1="41cde6211da87a8e61e2ffd42cef5de588f9b9fc" offset="000000" loadflag="load16_word_swap" /> |
11974 | 12104 | </dataarea> |
r20695 | r20696 | |
11983 | 12113 | <publisher>Electronic Arts</publisher> |
11984 | 12114 | <part name="cart" interface="megadriv_cart"> |
11985 | 12115 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12116 | <feature name="slot" value="rom_sram" /> | |
11986 | 12117 | <dataarea name="rom" size="2097152"> |
11987 | 12118 | <rom name="madden nfl 96 (euro, usa).bin" size="2097152" crc="f126918b" sha1="35a4241eed51f10de2e63c843f162ce5d92c70a2" offset="000000" loadflag="load16_word_swap" /> |
11988 | 12119 | </dataarea> |
r20695 | r20696 | |
11997 | 12128 | <publisher>Electronic Arts</publisher> |
11998 | 12129 | <part name="cart" interface="megadriv_cart"> |
11999 | 12130 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12131 | <feature name="slot" value="rom_sram" /> | |
12000 | 12132 | <dataarea name="rom" size="2097152"> |
12001 | 12133 | <rom name="madden nfl 97 (euro, usa).bin" size="2097152" crc="c4b4e112" sha1="63544d2a0230be102f2558c03a74855fc712b865" offset="000000" loadflag="load16_word_swap" /> |
12002 | 12134 | </dataarea> |
r20695 | r20696 | |
12025 | 12157 | <info name="alt_title" value="魔導物語I"/> |
12026 | 12158 | <part name="cart" interface="megadriv_cart"> |
12027 | 12159 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12160 | <feature name="slot" value="rom_sram" /> | |
12028 | 12161 | <dataarea name="rom" size="2097152"> |
12029 | 12162 | <rom name="madou monogatari i (jpn).bin" size="2097152" crc="dd82c401" sha1="143456600e44f543796cf6ade77830115a8f2f99" offset="000000" loadflag="load16_word_swap" /> |
12030 | 12163 | </dataarea> |
r20695 | r20696 | |
12352 | 12485 | <publisher>Renovation</publisher> |
12353 | 12486 | <part name="cart" interface="megadriv_cart"> |
12354 | 12487 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12488 | <feature name="slot" value="rom_sram" /> | |
12355 | 12489 | <dataarea name="rom" size="524288"> |
12356 | 12490 | <rom name="master of monsters (usa).bin" size="524288" crc="91354820" sha1="28f38617911a99504542b30f70c0d9c81996ef65" offset="000000" loadflag="load16_word_swap" /> |
12357 | 12491 | </dataarea> |
r20695 | r20696 | |
12369 | 12503 | <info name="alt_title" value="マスター・オブ・モンスターズ"/> |
12370 | 12504 | <part name="cart" interface="megadriv_cart"> |
12371 | 12505 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12506 | <feature name="slot" value="rom_sram" /> | |
12372 | 12507 | <dataarea name="rom" size="524288"> |
12373 | 12508 | <rom name="mpr-14120.bin" size="524288" crc="d51ee8c2" sha1="ca62d376be5cc7b944bbe9b5f2610f8bb55a2fed" offset="000000" loadflag="load16_word_swap" /> |
12374 | 12509 | </dataarea> |
r20695 | r20696 | |
12400 | 12535 | <info name="alt_title" value="魔天の創滅"/> |
12401 | 12536 | <part name="cart" interface="megadriv_cart"> |
12402 | 12537 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12538 | <feature name="slot" value="rom_sram" /> | |
12403 | 12539 | <dataarea name="rom" size="1048576"> |
12404 | 12540 | <rom name="maten no soumetsu (jpn).bin" size="1048576" crc="b804a105" sha1="31bc44b019310e18174eb5e1a6d8e7d351103e4e" offset="000000" loadflag="load16_word_swap" /> |
12405 | 12541 | </dataarea> |
r20695 | r20696 | |
12620 | 12756 | <publisher>Capcom</publisher> |
12621 | 12757 | <part name="cart" interface="megadriv_cart"> |
12622 | 12758 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
12759 | <feature name="slot" value="rom_eeprom" /> | |
12623 | 12760 | <dataarea name="rom" size="2097152"> |
12624 | 12761 | <rom name="mega man - the wily wars (euro).bin" size="2097152" crc="dcf6e8b2" sha1="ea9ae2043c97db716a8d31ee90e581c3d75f4e3e" offset="000000" loadflag="load16_word_swap" /> |
12625 | 12762 | </dataarea> |
r20695 | r20696 | |
12635 | 12772 | <info name="alt_title" value="ロックマン メガワールド"/> |
12636 | 12773 | <part name="cart" interface="megadriv_cart"> |
12637 | 12774 | <feature name="pcb_type" value="SEGA-SRAM" /> |
12775 | <feature name="slot" value="rom_sram" /> | |
12638 | 12776 | <dataarea name="rom" size="2097152"> |
12639 | 12777 | <rom name="rockman mega world (jpn).bin" size="2097152" crc="4d87235e" sha1="4dfcf5c07106f6db4d8b7e73a053bb46a21686c3" offset="000000" loadflag="load16_word_swap" /> |
12640 | 12778 | </dataarea> |
r20695 | r20696 | |
12959 | 13097 | <publisher>Codemasters</publisher> |
12960 | 13098 | <part name="cart" interface="megadriv_cart"> |
12961 | 13099 | <feature name="pcb_type" value="CM-JCART-SEPROM" /> |
13100 | <feature name="slot" value="rom_mm96" /> | |
12962 | 13101 | <dataarea name="rom" size="1048576"> |
12963 | 13102 | <rom name="mm96md7cc3.bin" size="1048576" crc="7492b1de" sha1="9f47fcc7bb2f5921cb1c3beb06b668ffb292cb08" offset="000000" loadflag="load16_word_swap" /> |
12964 | 13103 | </dataarea> |
r20695 | r20696 | |
12971 | 13110 | <publisher>Codemasters</publisher> |
12972 | 13111 | <part name="cart" interface="megadriv_cart"> |
12973 | 13112 | <feature name="pcb_type" value="CM-JCART-SEPROM" /> |
13113 | <feature name="slot" value="rom_codemast" /> | |
12974 | 13114 | <dataarea name="rom" size="1048576"> |
12975 | 13115 | <rom name="micro machines 2 - turbo tournament (euro) (j-cart) (alt).bin" size="1048576" crc="01c22a5d" sha1="cb5fb33212592809639b37c2babd72a7953fa102" offset="000000" loadflag="load16_word_swap" /> |
12976 | 13116 | </dataarea> |
r20695 | r20696 | |
12983 | 13123 | <publisher>Codemasters</publisher> |
12984 | 13124 | <part name="cart" interface="megadriv_cart"> |
12985 | 13125 | <feature name="pcb_type" value="CM-JCART-SEPROM" /> |
13126 | <feature name="slot" value="rom_codemast" /> | |
12986 | 13127 | <dataarea name="rom" size="1048576"> |
12987 | 13128 | <rom name="micro machines military (euro) (j-cart).bin" size="1048576" crc="b3abb15e" sha1="6d3df64ab8bb0b559f216adca62d1cdd74704a26" offset="000000" loadflag="load16_word_swap" /> |
12988 | 13129 | </dataarea> |
r20695 | r20696 | |
13279 | 13420 | <info name="alt_title" value="超球界ミラクルナイン"/> |
13280 | 13421 | <part name="cart" interface="megadriv_cart"> |
13281 | 13422 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13423 | <feature name="slot" value="rom_sram" /> | |
13282 | 13424 | <dataarea name="rom" size="2097152"> |
13283 | 13425 | <rom name="chou kyuukai miracle nine (jpn).bin" size="2097152" crc="6d8c2206" sha1="af2fd89dc7fb4ac0647c09edff462c7ae92dc771" offset="000000" loadflag="load16_word_swap" /> |
13284 | 13426 | </dataarea> |
r20695 | r20696 | |
13326 | 13468 | <publisher>Electronic Arts</publisher> |
13327 | 13469 | <part name="cart" interface="megadriv_cart"> |
13328 | 13470 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13471 | <feature name="slot" value="rom_sram" /> | |
13329 | 13472 | <dataarea name="rom" size="2097152"> |
13330 | 13473 | <rom name="mlbpa baseball (usa).bin" size="2097152" crc="14a8064d" sha1="5a85c659db9dd7485ed1463a252f0941346aba24" offset="000000" loadflag="load16_word_swap" /> |
13331 | 13474 | </dataarea> |
r20695 | r20696 | |
13365 | 13508 | <info name="alt_title" value="モンスターワールドIV"/> |
13366 | 13509 | <part name="cart" interface="megadriv_cart"> |
13367 | 13510 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13511 | <feature name="slot" value="rom_sram" /> | |
13368 | 13512 | <dataarea name="rom" size="2097152"> |
13369 | 13513 | <rom name="monster world iv (jpn).bin" size="2097152" crc="36a3aaa4" sha1="46ba5e8775a2223fe5056f54555d9caa7d04f4e1" offset="000000" loadflag="load16_word_swap" /> |
13370 | 13514 | </dataarea> |
r20695 | r20696 | |
13672 | 13816 | <info name="alt_title" value="中嶋 悟 監修F-1 グランプリ"/> |
13673 | 13817 | <part name="cart" interface="megadriv_cart"> |
13674 | 13818 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13819 | <feature name="slot" value="rom_sram" /> | |
13675 | 13820 | <dataarea name="rom" size="1048576"> |
13676 | 13821 | <rom name="nakajima satoru kanshuu f1 grand prix (jpn).bin" size="1048576" crc="93be47cf" sha1="e108342d53e1542d572d2e45524efbfe9d5dc964" offset="000000" loadflag="load16_word_swap" /> |
13677 | 13822 | </dataarea> |
r20695 | r20696 | |
13703 | 13848 | <info name="alt_title" value="中嶋 悟 監修 エフワンスーパーライセンス"/> |
13704 | 13849 | <part name="cart" interface="megadriv_cart"> |
13705 | 13850 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13851 | <feature name="slot" value="rom_sram" /> | |
13706 | 13852 | <dataarea name="rom" size="1048576"> |
13707 | 13853 | <rom name="nakajima satoru kanshuu f1 super license (jpn).bin" size="1048576" crc="8774bc79" sha1="ad5456259890bcb32098f82f14a1d5355af83f7e" offset="000000" loadflag="load16_word_swap" /> |
13708 | 13854 | </dataarea> |
r20695 | r20696 | |
13718 | 13864 | <info name="alt_title" value="NBA Action '94 (Box)"/> |
13719 | 13865 | <part name="cart" interface="megadriv_cart"> |
13720 | 13866 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13867 | <feature name="slot" value="rom_sram" /> | |
13721 | 13868 | <dataarea name="rom" size="2097152"> |
13722 | 13869 | <rom name="nba action (usa).bin" size="2097152" crc="99c348ba" sha1="e2b5290d656219636e2422fcf93424ae602c4d29" offset="000000" loadflag="load16_word_swap" /> |
13723 | 13870 | </dataarea> |
r20695 | r20696 | |
13743 | 13890 | <publisher>Sega</publisher> |
13744 | 13891 | <part name="cart" interface="megadriv_cart"> |
13745 | 13892 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13893 | <feature name="slot" value="rom_sram" /> | |
13746 | 13894 | <dataarea name="rom" size="2097152"> |
13747 | 13895 | <rom name="nba action (prototype - jan 16, 1994).bin" size="2097152" crc="fe43c79d" sha1="da6fcc1d7069e315797dd40a89e21963ab766b9e" offset="000000" loadflag="load16_word_swap" /> |
13748 | 13896 | </dataarea> |
r20695 | r20696 | |
13757 | 13905 | <publisher>Sega</publisher> |
13758 | 13906 | <part name="cart" interface="megadriv_cart"> |
13759 | 13907 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13908 | <feature name="slot" value="rom_sram" /> | |
13760 | 13909 | <dataarea name="rom" size="2097152"> |
13761 | 13910 | <rom name="nba action (prototype - jan 27, 1994) (broken - c08 missing).bin" size="2097152" crc="176a4bc5" sha1="d5a6fbf8fe19bf70631a847e6b5e6a35878c7ae8" offset="000000" loadflag="load16_word_swap" /> |
13762 | 13911 | </dataarea> |
r20695 | r20696 | |
13772 | 13921 | <info name="alt_title" value="NBA Action '95 Starring David Robinson (Box)"/> |
13773 | 13922 | <part name="cart" interface="megadriv_cart"> |
13774 | 13923 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13924 | <feature name="slot" value="rom_sram" /> | |
13775 | 13925 | <dataarea name="rom" size="2097152"> |
13776 | 13926 | <rom name="nba action '95 starring david robinson (euro, usa).bin" size="2097152" crc="aa7006d6" sha1="34e2df219e09c24c95c588a37d2a2c5e15814d68" offset="000000" loadflag="load16_word_swap" /> |
13777 | 13927 | </dataarea> |
r20695 | r20696 | |
13786 | 13936 | <publisher>Sega</publisher> |
13787 | 13937 | <part name="cart" interface="megadriv_cart"> |
13788 | 13938 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13939 | <feature name="slot" value="rom_sram" /> | |
13789 | 13940 | <dataarea name="rom" size="2097152"> |
13790 | 13941 | <rom name="nba action '95 (prototype - dec 02, 1994 - b).bin" size="2097152" crc="04bf6f6e" sha1="42c55adad0249bb09350d1ac7c9bfb737ed091c8" offset="000000" loadflag="load16_word_swap" /> |
13791 | 13942 | </dataarea> |
r20695 | r20696 | |
13800 | 13951 | <publisher>Sega</publisher> |
13801 | 13952 | <part name="cart" interface="megadriv_cart"> |
13802 | 13953 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13954 | <feature name="slot" value="rom_sram" /> | |
13803 | 13955 | <dataarea name="rom" size="2097152"> |
13804 | 13956 | <rom name="nba action '95 (prototype - dec 09, 1994).bin" size="2097152" crc="2b198487" sha1="2c34500bf06bbac610e8fca45db48382e32c8807" offset="000000" loadflag="load16_word_swap" /> |
13805 | 13957 | </dataarea> |
r20695 | r20696 | |
13814 | 13966 | <publisher>Sega</publisher> |
13815 | 13967 | <part name="cart" interface="megadriv_cart"> |
13816 | 13968 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13969 | <feature name="slot" value="rom_sram" /> | |
13817 | 13970 | <dataarea name="rom" size="2097152"> |
13818 | 13971 | <rom name="nba action '95 (prototype - dec 15, 1994).bin" size="2097152" crc="10a3b46d" sha1="c3f88b334af683e8ac98cafafa9abf4dfe65a4b7" offset="000000" loadflag="load16_word_swap" /> |
13819 | 13972 | </dataarea> |
r20695 | r20696 | |
13828 | 13981 | <publisher>Sega</publisher> |
13829 | 13982 | <part name="cart" interface="megadriv_cart"> |
13830 | 13983 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13984 | <feature name="slot" value="rom_sram" /> | |
13831 | 13985 | <dataarea name="rom" size="2097152"> |
13832 | 13986 | <rom name="nba action '95 (prototype - dec 22, 1994 - a).bin" size="2097152" crc="f92ba323" sha1="35f7436fa15591234edcb6fe72da24d091963d30" offset="000000" loadflag="load16_word_swap" /> |
13833 | 13987 | </dataarea> |
r20695 | r20696 | |
13842 | 13996 | <publisher>Sega</publisher> |
13843 | 13997 | <part name="cart" interface="megadriv_cart"> |
13844 | 13998 | <feature name="pcb_type" value="SEGA-SRAM" /> |
13999 | <feature name="slot" value="rom_sram" /> | |
13845 | 14000 | <dataarea name="rom" size="2097152"> |
13846 | 14001 | <rom name="nba action '95 (prototype - dec 24, 1994 - a).bin" size="2097152" crc="ddb04550" sha1="248e67cad67118a1449de308bac0437641bda3ec" offset="000000" loadflag="load16_word_swap" /> |
13847 | 14002 | </dataarea> |
r20695 | r20696 | |
13856 | 14011 | <publisher>Sega</publisher> |
13857 | 14012 | <part name="cart" interface="megadriv_cart"> |
13858 | 14013 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14014 | <feature name="slot" value="rom_sram" /> | |
13859 | 14015 | <dataarea name="rom" size="2097152"> |
13860 | 14016 | <rom name="nba action '95 (prototype - dec 29, 1994).bin" size="2097152" crc="dcebe32a" sha1="2604a03c1dc59538a82e32bcc6f8a995bd8af609" offset="000000" loadflag="load16_word_swap" /> |
13861 | 14017 | </dataarea> |
r20695 | r20696 | |
13870 | 14026 | <publisher>Sega</publisher> |
13871 | 14027 | <part name="cart" interface="megadriv_cart"> |
13872 | 14028 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14029 | <feature name="slot" value="rom_sram" /> | |
13873 | 14030 | <dataarea name="rom" size="2097152"> |
13874 | 14031 | <rom name="nba action '95 (prototype - dec 30, 1994).bin" size="2097152" crc="d87956c9" sha1="4ddbe2f458915db0da45fa490d653f2d94ec1263" offset="000000" loadflag="load16_word_swap" /> |
13875 | 14032 | </dataarea> |
r20695 | r20696 | |
13884 | 14041 | <publisher>Sega</publisher> |
13885 | 14042 | <part name="cart" interface="megadriv_cart"> |
13886 | 14043 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14044 | <feature name="slot" value="rom_sram" /> | |
13887 | 14045 | <dataarea name="rom" size="2097152"> |
13888 | 14046 | <rom name="nba action '95 (prototype - dec 31, 1994).bin" size="2097152" crc="582a378f" sha1="ba08a3f042f96b4b3bb889bbacb6a5e13b114f0c" offset="000000" loadflag="load16_word_swap" /> |
13889 | 14047 | </dataarea> |
r20695 | r20696 | |
13898 | 14056 | <publisher>Sega</publisher> |
13899 | 14057 | <part name="cart" interface="megadriv_cart"> |
13900 | 14058 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14059 | <feature name="slot" value="rom_sram" /> | |
13901 | 14060 | <dataarea name="rom" size="2097152"> |
13902 | 14061 | <rom name="nba action '95 (prototype - feb 01, 1995).bin" size="2097152" crc="2c02a79d" sha1="3dbc1a80005eb6783feeb4d3604d382d1cf688bc" offset="000000" loadflag="load16_word_swap" /> |
13903 | 14062 | </dataarea> |
r20695 | r20696 | |
13913 | 14072 | <publisher>Sega</publisher> |
13914 | 14073 | <part name="cart" interface="megadriv_cart"> |
13915 | 14074 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14075 | <feature name="slot" value="rom_sram" /> | |
13916 | 14076 | <dataarea name="rom" size="2094238"> |
13917 | 14077 | <rom name="nba action '95 (prototype - feb 1, 1995).bin" size="2094238" crc="c4a0a624" sha1="58c88d26baffd0f68c2b5d95284323ba99db9b5a" offset="000000" loadflag="load16_word_swap" /> |
13918 | 14078 | </dataarea> |
r20695 | r20696 | |
13927 | 14087 | <publisher>Sega</publisher> |
13928 | 14088 | <part name="cart" interface="megadriv_cart"> |
13929 | 14089 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14090 | <feature name="slot" value="rom_sram" /> | |
13930 | 14091 | <dataarea name="rom" size="2089456"> |
13931 | 14092 | <rom name="nba action '95 (prototype - feb 2, 1995).bin" size="2089456" crc="a9167903" sha1="3a5a95a79b1b2da0b35e8cde02d8645fe474fdde" offset="000000" loadflag="load16_word_swap" /> |
13932 | 14093 | </dataarea> |
r20695 | r20696 | |
13941 | 14102 | <publisher>Sega</publisher> |
13942 | 14103 | <part name="cart" interface="megadriv_cart"> |
13943 | 14104 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14105 | <feature name="slot" value="rom_sram" /> | |
13944 | 14106 | <dataarea name="rom" size="2097152"> |
13945 | 14107 | <rom name="nba action '95 (prototype - jan 03, 1995).bin" size="2097152" crc="374af160" sha1="b50be710436a3cb1f7644fdfac5d5098cd9dbb2b" offset="000000" loadflag="load16_word_swap" /> |
13946 | 14108 | </dataarea> |
r20695 | r20696 | |
13955 | 14117 | <publisher>Sega</publisher> |
13956 | 14118 | <part name="cart" interface="megadriv_cart"> |
13957 | 14119 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14120 | <feature name="slot" value="rom_sram" /> | |
13958 | 14121 | <dataarea name="rom" size="2097152"> |
13959 | 14122 | <rom name="nba action '95 (prototype - jan 08, 1995).bin" size="2097152" crc="0a6b7b9e" sha1="3a60332ee684ff8accd96aef404346e66e267b6f" offset="000000" loadflag="load16_word_swap" /> |
13960 | 14123 | </dataarea> |
r20695 | r20696 | |
13969 | 14132 | <publisher>Sega</publisher> |
13970 | 14133 | <part name="cart" interface="megadriv_cart"> |
13971 | 14134 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14135 | <feature name="slot" value="rom_sram" /> | |
13972 | 14136 | <dataarea name="rom" size="2097152"> |
13973 | 14137 | <rom name="nba action '95 (prototype - jan 12, 1995).bin" size="2097152" crc="b47ff025" sha1="9f6a2ea386d383aee3be06d6b74fda67b1ebd960" offset="000000" loadflag="load16_word_swap" /> |
13974 | 14138 | </dataarea> |
r20695 | r20696 | |
13983 | 14147 | <publisher>Sega</publisher> |
13984 | 14148 | <part name="cart" interface="megadriv_cart"> |
13985 | 14149 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14150 | <feature name="slot" value="rom_sram" /> | |
13986 | 14151 | <dataarea name="rom" size="2097152"> |
13987 | 14152 | <rom name="nba action '95 (prototype - jan 15, 1995 - a).bin" size="2097152" crc="9c6a1f27" sha1="2fdb8879d50d963d984c280cab2e279b9479081f" offset="000000" loadflag="load16_word_swap" /> |
13988 | 14153 | </dataarea> |
r20695 | r20696 | |
13997 | 14162 | <publisher>Sega</publisher> |
13998 | 14163 | <part name="cart" interface="megadriv_cart"> |
13999 | 14164 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14165 | <feature name="slot" value="rom_sram" /> | |
14000 | 14166 | <dataarea name="rom" size="2097152"> |
14001 | 14167 | <rom name="nba action '95 (prototype - jan 21, 1995).bin" size="2097152" crc="e337bdfb" sha1="591288688956cec3d0aca3dd099b3e0985ca947a" offset="000000" loadflag="load16_word_swap" /> |
14002 | 14168 | </dataarea> |
r20695 | r20696 | |
14011 | 14177 | <publisher>Sega</publisher> |
14012 | 14178 | <part name="cart" interface="megadriv_cart"> |
14013 | 14179 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14180 | <feature name="slot" value="rom_sram" /> | |
14014 | 14181 | <dataarea name="rom" size="2097152"> |
14015 | 14182 | <rom name="nba action '95 (prototype - jan 22, 1995 - b).bin" size="2097152" crc="7bd7ca47" sha1="f219274a65c31d76a2d6633b7e7cf65462850f47" offset="000000" loadflag="load16_word_swap" /> |
14016 | 14183 | </dataarea> |
r20695 | r20696 | |
14025 | 14192 | <publisher>Sega</publisher> |
14026 | 14193 | <part name="cart" interface="megadriv_cart"> |
14027 | 14194 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14195 | <feature name="slot" value="rom_sram" /> | |
14028 | 14196 | <dataarea name="rom" size="2097152"> |
14029 | 14197 | <rom name="nba action '95 (prototype - jan 24, 1995 - b).bin" size="2097152" crc="15abcf41" sha1="eb99f0e1cac800f94743fde873448e56edb46333" offset="000000" loadflag="load16_word_swap" /> |
14030 | 14198 | </dataarea> |
r20695 | r20696 | |
14039 | 14207 | <publisher>Sega</publisher> |
14040 | 14208 | <part name="cart" interface="megadriv_cart"> |
14041 | 14209 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14210 | <feature name="slot" value="rom_sram" /> | |
14042 | 14211 | <dataarea name="rom" size="2089360"> |
14043 | 14212 | <rom name="nba action '95 (prototype - jan 27, 1995 - a).bin" size="2089360" crc="79c7fb00" sha1="90c246dcb8ccea0f30ae5582b610721fc802f937" offset="000000" loadflag="load16_word_swap" /> |
14044 | 14213 | </dataarea> |
r20695 | r20696 | |
14053 | 14222 | <publisher>Sega</publisher> |
14054 | 14223 | <part name="cart" interface="megadriv_cart"> |
14055 | 14224 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14225 | <feature name="slot" value="rom_sram" /> | |
14056 | 14226 | <dataarea name="rom" size="2089360"> |
14057 | 14227 | <rom name="nba action '95 (prototype - jan 27, 1995 - b).bin" size="2089360" crc="ef7f608b" sha1="32104d3585dcbf190904accdb9528f0b7105eb4b" offset="000000" loadflag="load16_word_swap" /> |
14058 | 14228 | </dataarea> |
r20695 | r20696 | |
14067 | 14237 | <publisher>Sega</publisher> |
14068 | 14238 | <part name="cart" interface="megadriv_cart"> |
14069 | 14239 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14240 | <feature name="slot" value="rom_sram" /> | |
14070 | 14241 | <dataarea name="rom" size="2097152"> |
14071 | 14242 | <rom name="nba action '95 (prototype - jan 28, 1995 - a).bin" size="2097152" crc="57c2c69c" sha1="f1affb6e01ca23b67aee9e1c1767f9ec13849823" offset="000000" loadflag="load16_word_swap" /> |
14072 | 14243 | </dataarea> |
r20695 | r20696 | |
14081 | 14252 | <publisher>Sega</publisher> |
14082 | 14253 | <part name="cart" interface="megadriv_cart"> |
14083 | 14254 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14255 | <feature name="slot" value="rom_sram" /> | |
14084 | 14256 | <dataarea name="rom" size="2089374"> |
14085 | 14257 | <rom name="nba action '95 (prototype - jan 28, 1995).bin" size="2089374" crc="97d7075d" sha1="dd1256efa397a56d461e2bc7aec9f72aff9b04fb" offset="000000" loadflag="load16_word_swap" /> |
14086 | 14258 | </dataarea> |
r20695 | r20696 | |
14095 | 14267 | <publisher>Sega</publisher> |
14096 | 14268 | <part name="cart" interface="megadriv_cart"> |
14097 | 14269 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14270 | <feature name="slot" value="rom_sram" /> | |
14098 | 14271 | <dataarea name="rom" size="2097152"> |
14099 | 14272 | <rom name="nba action '95 (prototype - jan 30, 1995).bin" size="2097152" crc="2fac80b2" sha1="ab90daf9791fa7347fb8f040e27f91b6bae46e1e" offset="000000" loadflag="load16_word_swap" /> |
14100 | 14273 | </dataarea> |
r20695 | r20696 | |
14109 | 14282 | <publisher>Sega</publisher> |
14110 | 14283 | <part name="cart" interface="megadriv_cart"> |
14111 | 14284 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14285 | <feature name="slot" value="rom_sram" /> | |
14112 | 14286 | <dataarea name="rom" size="2097152"> |
14113 | 14287 | <rom name="nba action '95 (prototype - nov 18, 1994).bin" size="2097152" crc="2d411e4b" sha1="492776fc2659091d435a79588efcdd8e06d3cd0b" offset="000000" loadflag="load16_word_swap" /> |
14114 | 14288 | </dataarea> |
r20695 | r20696 | |
14123 | 14297 | <publisher>Sega</publisher> |
14124 | 14298 | <part name="cart" interface="megadriv_cart"> |
14125 | 14299 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14300 | <feature name="slot" value="rom_sram" /> | |
14126 | 14301 | <dataarea name="rom" size="2097152"> |
14127 | 14302 | <rom name="nba action '95 (prototype - nov 23, 1994 - a).bin" size="2097152" crc="4650cfcc" sha1="0eee2e7296e3eed5dbf85954ce14a53622ae3d64" offset="000000" loadflag="load16_word_swap" /> |
14128 | 14303 | </dataarea> |
r20695 | r20696 | |
14170 | 14345 | <publisher>Arena</publisher> |
14171 | 14346 | <part name="cart" interface="megadriv_cart"> |
14172 | 14347 | <feature name="pcb_type" value="NBAJAM" /> |
14348 | <feature name="slot" value="rom_nbajam" /> | |
14173 | 14349 | <dataarea name="rom" size="2097152"> |
14174 | 14350 | <rom name="nba jam (euro, usa) (v1.1).bin" size="2097152" crc="eb8360e6" sha1="55f2b26a932c69b2c7cb4f24f56b43f24f113a7c" offset="000000" loadflag="load16_word_swap" /> |
14175 | 14351 | </dataarea> |
r20695 | r20696 | |
14182 | 14358 | <publisher>Arena</publisher> |
14183 | 14359 | <part name="cart" interface="megadriv_cart"> |
14184 | 14360 | <feature name="pcb_type" value="NBAJAM" /> |
14361 | <feature name="slot" value="rom_nbajam" /> | |
14185 | 14362 | <dataarea name="rom" size="2097152"> |
14186 | 14363 | <rom name="s285_ver_1.00.bin" size="2097152" crc="10fa248f" sha1="99c5bc57fdea7f9df0cd8dec54160b162342344d" offset="000000" loadflag="load16_word_swap" /> |
14187 | 14364 | </dataarea> |
r20695 | r20696 | |
14197 | 14374 | <info name="alt_title" value="NBA ジャム"/> |
14198 | 14375 | <part name="cart" interface="megadriv_cart"> |
14199 | 14376 | <feature name="pcb_type" value="NBAJAM" /> |
14377 | <feature name="slot" value="rom_nbajam" /> | |
14200 | 14378 | <dataarea name="rom" size="2097152"> |
14201 | 14379 | <rom name="nba jam (jpn).bin" size="2097152" crc="a6c6305a" sha1="2a88b2e1ecf115fa6246397d829448b755a5385e" offset="000000" loadflag="load16_word_swap" /> |
14202 | 14380 | </dataarea> |
r20695 | r20696 | |
14210 | 14388 | <info name="alt_title" value="NBA ジャム"/> |
14211 | 14389 | <part name="cart" interface="megadriv_cart"> |
14212 | 14390 | <feature name="pcb_type" value="NBAJAM" /> |
14391 | <feature name="slot" value="rom_nbajam" /> | |
14213 | 14392 | <feature name="pcb" value="171-6568C" /> |
14214 | 14393 | <feature name="pcb2" value="837-9952" /> |
14215 | 14394 | <feature name="ic1" value="27c4000" /> |
r20695 | r20696 | |
14253 | 14432 | <info name="alt_title" value="NBA ジャム トーナメントエディション"/> |
14254 | 14433 | <part name="cart" interface="megadriv_cart"> |
14255 | 14434 | <feature name="pcb_type" value="NBAJAMTE" /> |
14435 | <feature name="slot" value="rom_nbajamte" /> | |
14256 | 14436 | <dataarea name="rom" size="3145728"> |
14257 | 14437 | <rom name="nba jam tournament edition (world).bin" size="3145728" crc="e9ffcb37" sha1="ddbf09c5e6ed5d528ef5ec816129a332c685f103" offset="000000" loadflag="load16_word_swap" /> |
14258 | 14438 | </dataarea> |
r20695 | r20696 | |
14265 | 14445 | <publisher>Acclaim Entertainment</publisher> |
14266 | 14446 | <part name="cart" interface="megadriv_cart"> |
14267 | 14447 | <feature name="pcb_type" value="NBAJAMTE" /> |
14448 | <feature name="slot" value="rom_nbajamte" /> | |
14268 | 14449 | <dataarea name="rom" size="3145728"> |
14269 | 14450 | <rom name="nba jam tournament edition (world) (fixed).bin" size="3145728" crc="6e25ebf0" sha1="0f5bb5d5352fe2ebe4b4051a1dd9b9fde4b505ab" offset="000000" loadflag="load16_word_swap" /> |
14270 | 14451 | </dataarea> |
r20695 | r20696 | |
14277 | 14458 | <publisher>Electronic Arts</publisher> |
14278 | 14459 | <part name="cart" interface="megadriv_cart"> |
14279 | 14460 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14461 | <feature name="slot" value="rom_sram" /> | |
14280 | 14462 | <dataarea name="rom" size="2097152"> |
14281 | 14463 | <rom name="nba live 95 (euro, usa).bin" size="2097152" crc="66018abc" sha1="f86bc9601751ac94119ab2f3ecce2029d5678f01" offset="000000" loadflag="load16_word_swap" /> |
14282 | 14464 | </dataarea> |
r20695 | r20696 | |
14302 | 14484 | <publisher>Electronic Arts</publisher> |
14303 | 14485 | <part name="cart" interface="megadriv_cart"> |
14304 | 14486 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14487 | <feature name="slot" value="rom_sram" /> | |
14305 | 14488 | <dataarea name="rom" size="2097152"> |
14306 | 14489 | <rom name="nba live 96 (euro, usa).bin" size="2097152" crc="49de0062" sha1="5fca106c839d3dea11cbf6842d1d7650db06ca72" offset="000000" loadflag="load16_word_swap" /> |
14307 | 14490 | </dataarea> |
r20695 | r20696 | |
14316 | 14499 | <publisher>Electronic Arts</publisher> |
14317 | 14500 | <part name="cart" interface="megadriv_cart"> |
14318 | 14501 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14502 | <feature name="slot" value="rom_sram" /> | |
14319 | 14503 | <dataarea name="rom" size="2097152"> |
14320 | 14504 | <rom name="nba live 97 (euro, usa).bin" size="2097152" crc="7024843a" sha1="1671451ab4ab6991e13db70671054c0f2c652a95" offset="000000" loadflag="load16_word_swap" /> |
14321 | 14505 | </dataarea> |
r20695 | r20696 | |
14386 | 14570 | <info name="alt_title" value="NBAプロバスケットボール'94"/> |
14387 | 14571 | <part name="cart" interface="megadriv_cart"> |
14388 | 14572 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14573 | <feature name="slot" value="rom_sram" /> | |
14389 | 14574 | <dataarea name="rom" size="2097152"> |
14390 | 14575 | <rom name="nba pro basketball '94 (jpn).bin" size="2097152" crc="eea19bce" sha1="99c91fe3a5401e84e7b3fd2218dcb3aeaf10db74" offset="000000" loadflag="load16_word_swap" /> |
14391 | 14576 | </dataarea> |
r20695 | r20696 | |
14400 | 14585 | <publisher>Electronic Arts</publisher> |
14401 | 14586 | <part name="cart" interface="megadriv_cart"> |
14402 | 14587 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14588 | <feature name="slot" value="rom_sram" /> | |
14403 | 14589 | <dataarea name="rom" size="2097152"> |
14404 | 14590 | <rom name="nba showdown '94 (euro, usa).bin" size="2097152" crc="160b7090" sha1="3134a3cb63115d2e16e63a76c2708cdaecab83e4" offset="000000" loadflag="load16_word_swap" /> |
14405 | 14591 | </dataarea> |
r20695 | r20696 | |
14415 | 14601 | <publisher>Electronic Arts</publisher> |
14416 | 14602 | <part name="cart" interface="megadriv_cart"> |
14417 | 14603 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14604 | <feature name="slot" value="rom_sram" /> | |
14418 | 14605 | <dataarea name="rom" size="2097152"> |
14419 | 14606 | <rom name="nba showdown '94 (usa) (beta).bin" size="2097152" crc="6643a308" sha1="e804ca0f4da505056f0813f00df9b139248f59af" offset="000000" status="baddump" loadflag="load16_word_swap" /> |
14420 | 14607 | </dataarea> |
r20695 | r20696 | |
14429 | 14616 | <publisher>Mindscape</publisher> |
14430 | 14617 | <part name="cart" interface="megadriv_cart"> |
14431 | 14618 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14619 | <feature name="slot" value="rom_sram" /> | |
14432 | 14620 | <dataarea name="rom" size="1572864"> |
14433 | 14621 | <rom name="ncaa final four basketball (usa).bin" size="1572864" crc="ed0c1303" sha1="29021b8c3bbcc62606c692a3de90d4e7a71b6361" offset="000000" loadflag="load16_word_swap" /> |
14434 | 14622 | </dataarea> |
r20695 | r20696 | |
14443 | 14631 | <publisher>Mindscape</publisher> |
14444 | 14632 | <part name="cart" interface="megadriv_cart"> |
14445 | 14633 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14634 | <feature name="slot" value="rom_sram" /> | |
14446 | 14635 | <dataarea name="rom" size="1048576"> |
14447 | 14636 | <rom name="ncaa football (usa).bin" size="1048576" crc="081012f0" sha1="227e3c650d01c35a80de8a3ef9b18f96c07ecd38" offset="000000" loadflag="load16_word_swap" /> |
14448 | 14637 | </dataarea> |
r20695 | r20696 | |
14474 | 14663 | <info name="alt_title" value="デビルズコース"/> |
14475 | 14664 | <part name="cart" interface="megadriv_cart"> |
14476 | 14665 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14666 | <feature name="slot" value="rom_sram" /> | |
14477 | 14667 | <dataarea name="rom" size="1572864"> |
14478 | 14668 | <rom name="new 3d golf simulation devil's course (jpn).bin" size="1572864" crc="bd090c67" sha1="4509c10ab263175c605111c72c6c63c57321046a" offset="000000" loadflag="load16_word_swap" /> |
14479 | 14669 | </dataarea> |
r20695 | r20696 | |
14491 | 14681 | <info name="alt_title" value="遥かなるオーガスタ"/> |
14492 | 14682 | <part name="cart" interface="megadriv_cart"> |
14493 | 14683 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14684 | <feature name="slot" value="rom_sram" /> | |
14494 | 14685 | <dataarea name="rom" size="1572864"> |
14495 | 14686 | <rom name="mpr-16076.bin" size="1572864" crc="d2a9bf92" sha1="d023f9fc5d7c7f2873a5bf79f6035111b78cdd5d" offset="000000" loadflag="load16_word_swap" /> |
14496 | 14687 | </dataarea> |
r20695 | r20696 | |
14508 | 14699 | <info name="alt_title" value="ワイアラエの奇蹟"/> |
14509 | 14700 | <part name="cart" interface="megadriv_cart"> |
14510 | 14701 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14702 | <feature name="slot" value="rom_sram" /> | |
14511 | 14703 | <dataarea name="rom" size="1572864"> |
14512 | 14704 | <rom name="new 3d golf simulation waialae no kiseki (jpn).bin" size="1572864" crc="cbe2c1f6" sha1="5d78c5cf3a514275a7df6d9fdbd708584b42e697" offset="000000" loadflag="load16_word_swap" /> |
14513 | 14705 | </dataarea> |
r20695 | r20696 | |
14522 | 14714 | <publisher>Sega</publisher> |
14523 | 14715 | <part name="cart" interface="megadriv_cart"> |
14524 | 14716 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14717 | <feature name="slot" value="rom_sram" /> | |
14525 | 14718 | <dataarea name="rom" size="2097152"> |
14526 | 14719 | <rom name="nfl '95 (euro, usa).bin" size="2097152" crc="b58e4a81" sha1="327249456f96ccb3e9758c0162c5f3e3f389072f" offset="000000" loadflag="load16_word_swap" /> |
14527 | 14720 | </dataarea> |
r20695 | r20696 | |
14646 | 14839 | <publisher>Sega</publisher> |
14647 | 14840 | <part name="cart" interface="megadriv_cart"> |
14648 | 14841 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14842 | <feature name="slot" value="rom_sram" /> | |
14649 | 14843 | <dataarea name="rom" size="2097152"> |
14650 | 14844 | <rom name="nfl '95 (prototype - sep 01, 1994).bin" size="2097152" crc="9240fcaa" sha1="ea1126f9cade3ec680dd029af10a5268cd5afa72" offset="000000" loadflag="load16_word_swap" /> |
14651 | 14845 | </dataarea> |
r20695 | r20696 | |
14660 | 14854 | <publisher>Sega</publisher> |
14661 | 14855 | <part name="cart" interface="megadriv_cart"> |
14662 | 14856 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14857 | <feature name="slot" value="rom_sram" /> | |
14663 | 14858 | <dataarea name="rom" size="2097152"> |
14664 | 14859 | <rom name="nfl '95 (prototype - sep 02, 1994).bin" size="2097152" crc="ff049a49" sha1="83c70177164e418b988ed9144d9d12c0e7052c3b" offset="000000" loadflag="load16_word_swap" /> |
14665 | 14860 | </dataarea> |
r20695 | r20696 | |
14674 | 14869 | <publisher>Sega</publisher> |
14675 | 14870 | <part name="cart" interface="megadriv_cart"> |
14676 | 14871 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14872 | <feature name="slot" value="rom_sram" /> | |
14677 | 14873 | <dataarea name="rom" size="2097152"> |
14678 | 14874 | <rom name="nfl '95 (prototype - sep 04, 1994).bin" size="2097152" crc="60604d40" sha1="c07558f34b7480e063eb60126fc33fba36ae3daa" offset="000000" loadflag="load16_word_swap" /> |
14679 | 14875 | </dataarea> |
r20695 | r20696 | |
14688 | 14884 | <publisher>Sega</publisher> |
14689 | 14885 | <part name="cart" interface="megadriv_cart"> |
14690 | 14886 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14887 | <feature name="slot" value="rom_sram" /> | |
14691 | 14888 | <dataarea name="rom" size="2097152"> |
14692 | 14889 | <rom name="nfl '95 (prototype - sep 05, 1994 - b).bin" size="2097152" crc="123985a5" sha1="f25cbabd3f6284387e66eaa72fa4124f3768121e" offset="000000" loadflag="load16_word_swap" /> |
14693 | 14890 | </dataarea> |
r20695 | r20696 | |
14702 | 14899 | <publisher>Sega</publisher> |
14703 | 14900 | <part name="cart" interface="megadriv_cart"> |
14704 | 14901 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14902 | <feature name="slot" value="rom_sram" /> | |
14705 | 14903 | <dataarea name="rom" size="2097152"> |
14706 | 14904 | <rom name="nfl '95 (prototype - sep 05, 1994).bin" size="2097152" crc="dbdf61ac" sha1="787f8093d8a5c55ee9dcaa49925752169527fa62" offset="000000" loadflag="load16_word_swap" /> |
14707 | 14905 | </dataarea> |
r20695 | r20696 | |
14716 | 14914 | <publisher>Sega</publisher> |
14717 | 14915 | <part name="cart" interface="megadriv_cart"> |
14718 | 14916 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14917 | <feature name="slot" value="rom_sram" /> | |
14719 | 14918 | <dataarea name="rom" size="2097152"> |
14720 | 14919 | <rom name="nfl '95 (prototype - sep 06, 1994).bin" size="2097152" crc="624b8699" sha1="59c548514bee4be7a5e6e3483ac3122d410a7e4e" offset="000000" loadflag="load16_word_swap" /> |
14721 | 14920 | </dataarea> |
r20695 | r20696 | |
14730 | 14929 | <publisher>Sega</publisher> |
14731 | 14930 | <part name="cart" interface="megadriv_cart"> |
14732 | 14931 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14932 | <feature name="slot" value="rom_sram" /> | |
14733 | 14933 | <dataarea name="rom" size="2097152"> |
14734 | 14934 | <rom name="nfl '95 (prototype - sep 07, 1994).bin" size="2097152" crc="ae8aa4be" sha1="ddf2b988bc035a0736ed3a1d7c8e6aa8cd2625f8" offset="000000" loadflag="load16_word_swap" /> |
14735 | 14935 | </dataarea> |
r20695 | r20696 | |
14744 | 14944 | <publisher>Sega</publisher> |
14745 | 14945 | <part name="cart" interface="megadriv_cart"> |
14746 | 14946 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14947 | <feature name="slot" value="rom_sram" /> | |
14747 | 14948 | <dataarea name="rom" size="2097152"> |
14748 | 14949 | <rom name="nfl '95 (prototype - sep 08, 1994).bin" size="2097152" crc="22c5e289" sha1="f8689fd01dedced28ca417bf7ff8a9eea9973c3d" offset="000000" loadflag="load16_word_swap" /> |
14749 | 14950 | </dataarea> |
r20695 | r20696 | |
14758 | 14959 | <publisher>Sega</publisher> |
14759 | 14960 | <part name="cart" interface="megadriv_cart"> |
14760 | 14961 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14962 | <feature name="slot" value="rom_sram" /> | |
14761 | 14963 | <dataarea name="rom" size="2097152"> |
14762 | 14964 | <rom name="nfl '95 (prototype - sep 09, 1994).bin" size="2097152" crc="55df1066" sha1="2ba79a9a638894abbcd0702ba380b68ccaebb50f" offset="000000" loadflag="load16_word_swap" /> |
14763 | 14965 | </dataarea> |
r20695 | r20696 | |
14772 | 14974 | <publisher>Sega</publisher> |
14773 | 14975 | <part name="cart" interface="megadriv_cart"> |
14774 | 14976 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14977 | <feature name="slot" value="rom_sram" /> | |
14775 | 14978 | <dataarea name="rom" size="2097152"> |
14776 | 14979 | <rom name="nfl '95 (prototype - sep 11, 1994 - b).bin" size="2097152" crc="111ac6a0" sha1="2e3e044bd6061002444bdc4bbe5de1f8c8417ce6" offset="000000" loadflag="load16_word_swap" /> |
14777 | 14980 | </dataarea> |
r20695 | r20696 | |
14786 | 14989 | <publisher>Sega</publisher> |
14787 | 14990 | <part name="cart" interface="megadriv_cart"> |
14788 | 14991 | <feature name="pcb_type" value="SEGA-SRAM" /> |
14992 | <feature name="slot" value="rom_sram" /> | |
14789 | 14993 | <dataarea name="rom" size="2097152"> |
14790 | 14994 | <rom name="nfl '95 (prototype - sep 11, 1994).bin" size="2097152" crc="21614c4f" sha1="91babf6f0d86e19e82c3f045d01e99ea9fe0253c" offset="000000" loadflag="load16_word_swap" /> |
14791 | 14995 | </dataarea> |
r20695 | r20696 | |
14800 | 15004 | <publisher>Sega</publisher> |
14801 | 15005 | <part name="cart" interface="megadriv_cart"> |
14802 | 15006 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15007 | <feature name="slot" value="rom_sram" /> | |
14803 | 15008 | <dataarea name="rom" size="2097152"> |
14804 | 15009 | <rom name="nfl 98 (usa).bin" size="2097152" crc="f73ec54c" sha1="27ea0133251e96c091b5a96024eb099cdca21e40" offset="000000" loadflag="load16_word_swap" /> |
14805 | 15010 | </dataarea> |
r20695 | r20696 | |
14828 | 15033 | <info name="alt_title" value="NFL プロフットボール'94"/> |
14829 | 15034 | <part name="cart" interface="megadriv_cart"> |
14830 | 15035 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15036 | <feature name="slot" value="rom_sram" /> | |
14831 | 15037 | <dataarea name="rom" size="2097152"> |
14832 | 15038 | <rom name="nfl football '94 (jpn).bin" size="2097152" crc="e490dc4a" sha1="a530a93d124ccecfbf54f0534b6d3269026e5988" offset="000000" loadflag="load16_word_swap" /> |
14833 | 15039 | </dataarea> |
r20695 | r20696 | |
14845 | 15051 | <info name="alt_title" value="NFLクォーターバッククラブ'95"/> |
14846 | 15052 | <part name="cart" interface="megadriv_cart"> |
14847 | 15053 | <feature name="pcb_type" value="NBAJAMTE" /> |
15054 | <feature name="slot" value="rom_nbajamte" /> | |
14848 | 15055 | <dataarea name="rom" size="3145728"> |
14849 | 15056 | <rom name="nfl quarterback club (world).bin" size="3145728" crc="94542eaf" sha1="60744af955df83278f119df3478baeebd735a26c" offset="000000" loadflag="load16_word_swap" /> |
14850 | 15057 | </dataarea> |
r20695 | r20696 | |
14857 | 15064 | <publisher>Acclaim Entertainment</publisher> |
14858 | 15065 | <part name="cart" interface="megadriv_cart"> |
14859 | 15066 | <feature name="pcb_type" value="NFLQB96" /> |
15067 | <feature name="slot" value="rom_nflqb96" /> | |
14860 | 15068 | <dataarea name="rom" size="4194304"> |
14861 | 15069 | <rom name="nfl quarterback club 96 (euro, usa).bin" size="4194304" crc="d5a37cab" sha1="2948419532a6079404f05348bc4bbf2dd989622d" offset="000000" loadflag="load16_word_swap" /> |
14862 | 15070 | </dataarea> |
r20695 | r20696 | |
14883 | 15091 | <info name="alt_title" value="NHK大河ドラマ 太平記"/> |
14884 | 15092 | <part name="cart" interface="megadriv_cart"> |
14885 | 15093 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15094 | <feature name="slot" value="rom_sram" /> | |
14886 | 15095 | <dataarea name="rom" size="1048576"> |
14887 | 15096 | <rom name="nhk taiga drama - taiheiki (jpn).bin" size="1048576" crc="09fbb30e" sha1="67358048fc9bc93d8835af852bc437124e015a61" offset="000000" loadflag="load16_word_swap" /> |
14888 | 15097 | </dataarea> |
r20695 | r20696 | |
14897 | 15106 | <publisher>Electronic Arts</publisher> |
14898 | 15107 | <part name="cart" interface="megadriv_cart"> |
14899 | 15108 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15109 | <feature name="slot" value="rom_sram" /> | |
14900 | 15110 | <dataarea name="rom" size="2097152"> |
14901 | 15111 | <rom name="nhl 95 (euro, usa).bin" size="2097152" crc="e8ee917e" sha1="09e87b076aa4cd6f057a1d65bb50fd889b509b44" offset="000000" loadflag="load16_word_swap" /> |
14902 | 15112 | </dataarea> |
r20695 | r20696 | |
14922 | 15132 | <publisher>Electronic Arts</publisher> |
14923 | 15133 | <part name="cart" interface="megadriv_cart"> |
14924 | 15134 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15135 | <feature name="slot" value="rom_sram" /> | |
14925 | 15136 | <dataarea name="rom" size="2097152"> |
14926 | 15137 | <rom name="nhl 97 (euro, usa).bin" size="2097152" crc="f067c103" sha1="8a90d7921ab8380c0abb0b5515a6b9f96ca6023c" offset="000000" loadflag="load16_word_swap" /> |
14927 | 15138 | </dataarea> |
r20695 | r20696 | |
14947 | 15158 | <publisher>Sega</publisher> |
14948 | 15159 | <part name="cart" interface="megadriv_cart"> |
14949 | 15160 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15161 | <feature name="slot" value="rom_sram" /> | |
14950 | 15162 | <dataarea name="rom" size="2097152"> |
14951 | 15163 | <rom name="nhl all-star hockey '95 (usa).bin" size="2097152" crc="e6c0218b" sha1="f2069295f99b5d50444668cfa9d4216d988d5f46" offset="000000" loadflag="load16_word_swap" /> |
14952 | 15164 | </dataarea> |
r20695 | r20696 | |
14961 | 15173 | <publisher>Sega</publisher> |
14962 | 15174 | <part name="cart" interface="megadriv_cart"> |
14963 | 15175 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15176 | <feature name="slot" value="rom_sram" /> | |
14964 | 15177 | <dataarea name="rom" size="2097146"> |
14965 | 15178 | <rom name="nhl all-star hockey '95 (prototype - dec 01, 1994 - b).bin" size="2097146" crc="c209d720" sha1="ff9e08e779ed07f0d055ba7ba34d602c5e6f892d" offset="000000" loadflag="load16_word_swap" /> |
14966 | 15179 | </dataarea> |
r20695 | r20696 | |
14975 | 15188 | <publisher>Sega</publisher> |
14976 | 15189 | <part name="cart" interface="megadriv_cart"> |
14977 | 15190 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15191 | <feature name="slot" value="rom_sram" /> | |
14978 | 15192 | <dataarea name="rom" size="2097146"> |
14979 | 15193 | <rom name="nhl all-star hockey '95 (prototype - dec 01, 1994).bin" size="2097146" crc="112e4cb3" sha1="212449ee98b48e3aa8e7bee5791e6359f10f06de" offset="000000" loadflag="load16_word_swap" /> |
14980 | 15194 | </dataarea> |
r20695 | r20696 | |
14989 | 15203 | <publisher>Sega</publisher> |
14990 | 15204 | <part name="cart" interface="megadriv_cart"> |
14991 | 15205 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15206 | <feature name="slot" value="rom_sram" /> | |
14992 | 15207 | <dataarea name="rom" size="2097146"> |
14993 | 15208 | <rom name="nhl all-star hockey '95 (prototype - dec 02, 1994).bin" size="2097146" crc="01d6a6c7" sha1="130f95bccd159234c117890b0412b415b43161a9" offset="000000" loadflag="load16_word_swap" /> |
14994 | 15209 | </dataarea> |
r20695 | r20696 | |
15058 | 15273 | <publisher>Sega</publisher> |
15059 | 15274 | <part name="cart" interface="megadriv_cart"> |
15060 | 15275 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15276 | <feature name="slot" value="rom_sram" /> | |
15061 | 15277 | <dataarea name="rom" size="2097146"> |
15062 | 15278 | <rom name="nhl all-star hockey '95 (prototype - nov 23, 1994).bin" size="2097146" crc="88d4fc38" sha1="4550baf4f39ff20aacb52aade9d03598c47ce1b2" offset="000000" loadflag="load16_word_swap" /> |
15063 | 15279 | </dataarea> |
r20695 | r20696 | |
15072 | 15288 | <publisher>Sega</publisher> |
15073 | 15289 | <part name="cart" interface="megadriv_cart"> |
15074 | 15290 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15291 | <feature name="slot" value="rom_sram" /> | |
15075 | 15292 | <dataarea name="rom" size="2097146"> |
15076 | 15293 | <rom name="nhl all-star hockey '95 (prototype - nov 27, 1994).bin" size="2097146" crc="658ffe52" sha1="c36c767bc1cfcc3301ca84fa37bc22bfb1e3678d" offset="000000" loadflag="load16_word_swap" /> |
15077 | 15294 | </dataarea> |
r20695 | r20696 | |
15086 | 15303 | <publisher>Sega</publisher> |
15087 | 15304 | <part name="cart" interface="megadriv_cart"> |
15088 | 15305 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15306 | <feature name="slot" value="rom_sram" /> | |
15089 | 15307 | <dataarea name="rom" size="2097146"> |
15090 | 15308 | <rom name="nhl all-star hockey '95 (prototype - nov 28, 1994).bin" size="2097146" crc="51ad0056" sha1="5e54fe1f0a3dee5a9cec0722ab9eb5f17b6862db" offset="000000" loadflag="load16_word_swap" /> |
15091 | 15309 | </dataarea> |
r20695 | r20696 | |
15100 | 15318 | <publisher>Sega</publisher> |
15101 | 15319 | <part name="cart" interface="megadriv_cart"> |
15102 | 15320 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15321 | <feature name="slot" value="rom_sram" /> | |
15103 | 15322 | <dataarea name="rom" size="2097146"> |
15104 | 15323 | <rom name="nhl all-star hockey '95 (prototype - nov 29, 1994).bin" size="2097146" crc="a060a60b" sha1="574bbf1b0890ca46fbee9e3f211060f15c02d037" offset="000000" loadflag="load16_word_swap" /> |
15105 | 15324 | </dataarea> |
r20695 | r20696 | |
15158 | 15377 | <publisher>Electronic Arts</publisher> |
15159 | 15378 | <part name="cart" interface="megadriv_cart"> |
15160 | 15379 | <feature name="pcb_type" value="NHLPA" /> |
15380 | <feature name="slot" value="rom_nhlpa" /> | |
15161 | 15381 | <dataarea name="rom" size="524288"> |
15162 | 15382 | <rom name="h9306.bin" size="524288" crc="f361d0bf" sha1="2ab048fc7209df28b00ef47f2f686f5b7208466e" offset="000000" loadflag="load16_word_swap" /> |
15163 | 15383 | </dataarea> |
r20695 | r20696 | |
15170 | 15390 | <publisher>Electronic Arts</publisher> |
15171 | 15391 | <part name="cart" interface="megadriv_cart"> |
15172 | 15392 | <feature name="pcb_type" value="NHLPA" /> |
15393 | <feature name="slot" value="rom_nhlpa" /> | |
15173 | 15394 | <dataarea name="rom" size="524288"> |
15174 | 15395 | <rom name="nhlpa hockey 93 (euro, usa).bin" size="524288" crc="cbbf4262" sha1="8efc1cacb079ea223966dda065c16c49e584cac2" offset="000000" loadflag="load16_word_swap" /> |
15175 | 15396 | </dataarea> |
r20695 | r20696 | |
15204 | 15425 | <publisher>Tec Toy</publisher> |
15205 | 15426 | <part name="cart" interface="megadriv_cart"> |
15206 | 15427 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15428 | <feature name="slot" value="rom_sram" /> | |
15207 | 15429 | <dataarea name="rom" size="2097152"> |
15208 | 15430 | <rom name="nightmare circus (bra).bin" size="2097152" crc="06da3217" sha1="3c80ff5ba54abe4702a3bb7d812571d3dc50c00f" offset="000000" loadflag="load16_word_swap" /> |
15209 | 15431 | </dataarea> |
r20695 | r20696 | |
15218 | 15440 | <publisher>Tec Toy</publisher> |
15219 | 15441 | <part name="cart" interface="megadriv_cart"> |
15220 | 15442 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15443 | <feature name="slot" value="rom_sram" /> | |
15221 | 15444 | <dataarea name="rom" size="2097152"> |
15222 | 15445 | <rom name="nightmare circus (bra) (alt).bin" size="2097152" crc="31de5a94" sha1="61b7d25e15011d379d07a8dad4f8c5bb5f75e29f" offset="000000" loadflag="load16_word_swap" /> |
15223 | 15446 | </dataarea> |
r20695 | r20696 | |
15246 | 15469 | <info name="alt_title" value="日刊スポーツ プロ野球VAN"/> |
15247 | 15470 | <part name="cart" interface="megadriv_cart"> |
15248 | 15471 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15472 | <feature name="slot" value="rom_sram" /> | |
15249 | 15473 | <dataarea name="rom" size="524288"> |
15250 | 15474 | <rom name="nikkan sports pro yakyuu van (jpn).bin" size="524288" crc="c3655a59" sha1="d29f7e70feae3b4f1b423026b7a124514ee48dcf" offset="000000" loadflag="load16_word_swap" /> |
15251 | 15475 | </dataarea> |
r20695 | r20696 | |
15299 | 15523 | <info name="alt_title" value="信長の野望 武将風雲録"/> |
15300 | 15524 | <part name="cart" interface="megadriv_cart"> |
15301 | 15525 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15526 | <feature name="slot" value="rom_sram" /> | |
15302 | 15527 | <dataarea name="rom" size="1048576"> |
15303 | 15528 | <rom name="mpr-14456.bin" size="1048576" crc="30bf8637" sha1="1ed50cae48405ec8ad9257df3d445521e60636d8" offset="000000" loadflag="load16_word_swap" /> |
15304 | 15529 | </dataarea> |
r20695 | r20696 | |
15316 | 15541 | <info name="alt_title" value="信長の野望 覇王伝"/> |
15317 | 15542 | <part name="cart" interface="megadriv_cart"> |
15318 | 15543 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15544 | <feature name="slot" value="rom_sram" /> | |
15319 | 15545 | <dataarea name="rom" size="2097152"> |
15320 | 15546 | <rom name="nobunaga no yabou - haouden (jpn).bin" size="2097152" crc="96c01fc6" sha1="9246a29b25e276dc1f7edfae87229549cf87d92e" offset="000000" loadflag="load16_word_swap" /> |
15321 | 15547 | </dataarea> |
r20695 | r20696 | |
15330 | 15556 | <publisher>Koei</publisher> |
15331 | 15557 | <part name="cart" interface="megadriv_cart"> |
15332 | 15558 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15559 | <feature name="slot" value="rom_sram" /> | |
15333 | 15560 | <dataarea name="rom" size="524288"> |
15334 | 15561 | <rom name="nobunaga's ambition (usa).bin" size="524288" crc="b9bc07bc" sha1="394c6b46a9e9b9177a135fd8fd43392eb1099666" offset="000000" loadflag="load16_word_swap" /> |
15335 | 15562 | </dataarea> |
r20695 | r20696 | |
15347 | 15574 | <info name="alt_title" value="信長の野望 全・国・版"/> |
15348 | 15575 | <part name="cart" interface="megadriv_cart"> |
15349 | 15576 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15577 | <feature name="slot" value="rom_sram" /> | |
15350 | 15578 | <dataarea name="rom" size="524288"> |
15351 | 15579 | <rom name="nobunaga no yabou - zenkoku ban (jpn).bin" size="524288" crc="1381b313" sha1="a1f64afbf3bcdc85b61bce96454105128ca6746a" offset="000000" loadflag="load16_word_swap" /> |
15352 | 15580 | </dataarea> |
r20695 | r20696 | |
15543 | 15771 | <publisher>Koei</publisher> |
15544 | 15772 | <part name="cart" interface="megadriv_cart"> |
15545 | 15773 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15774 | <feature name="slot" value="rom_sram" /> | |
15546 | 15775 | <dataarea name="rom" size="1048576"> |
15547 | 15776 | <rom name="operation europe - path to victory 1939-45 (usa).bin" size="1048576" crc="e7cba1d8" sha1="e2e484c6db2bb058d04288b4dfea0ed199108d24" offset="000000" loadflag="load16_word_swap" /> |
15548 | 15777 | </dataarea> |
r20695 | r20696 | |
15560 | 15789 | <info name="alt_title" value="ヨーロッパ戦線"/> |
15561 | 15790 | <part name="cart" interface="megadriv_cart"> |
15562 | 15791 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15792 | <feature name="slot" value="rom_sram" /> | |
15563 | 15793 | <dataarea name="rom" size="1048576"> |
15564 | 15794 | <rom name="europa sensen (jpn).bin" size="1048576" crc="b0416c60" sha1="d382f977ea3071f133a947ceb3528904e72f9bc9" offset="000000" loadflag="load16_word_swap" /> |
15565 | 15795 | </dataarea> |
r20695 | r20696 | |
15704 | 15934 | <publisher><unknown></publisher> |
15705 | 15935 | <part name="cart" interface="megadriv_cart"> |
15706 | 15936 | <feature name="pcb_type" value="SEGA-SRAM" /> |
15937 | <feature name="slot" value="rom_sram" /> | |
15707 | 15938 | <dataarea name="rom" size="1048576"> |
15708 | 15939 | <rom name="junker's high (jpn) (beta) (bad dump).bin" size="1048576" crc="23534949" sha1="81a9b6d29878b4e9313a887b5349c12846b9d77f" offset="000000" status="baddump" loadflag="load16_word_swap" /> |
15709 | 15940 | </dataarea> |
r20695 | r20696 | |
15801 | 16032 | <publisher>Koei</publisher> |
15802 | 16033 | <part name="cart" interface="megadriv_cart"> |
15803 | 16034 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16035 | <feature name="slot" value="rom_sram" /> | |
15804 | 16036 | <dataarea name="rom" size="1048576"> |
15805 | 16037 | <rom name="pacific theater of operations (usa).bin" size="1048576" crc="d9d4c6e2" sha1="41d1d1956104133388b4ea69792fccca8013524a" offset="000000" loadflag="load16_word_swap" /> |
15806 | 16038 | </dataarea> |
r20695 | r20696 | |
15818 | 16050 | <info name="alt_title" value="提督の決断"/> |
15819 | 16051 | <part name="cart" interface="megadriv_cart"> |
15820 | 16052 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16053 | <feature name="slot" value="rom_sram" /> | |
15821 | 16054 | <dataarea name="rom" size="1048576"> |
15822 | 16055 | <rom name="teitoku no ketsudan (jpn).bin" size="1048576" crc="9b08e4e4" sha1="adc4c03636dbd8ca5449a8a66c6a7b7ef281893a" offset="000000" loadflag="load16_word_swap" /> |
15823 | 16056 | </dataarea> |
r20695 | r20696 | |
15940 | 16173 | <publisher>Sega</publisher> |
15941 | 16174 | <part name="cart" interface="megadriv_cart"> |
15942 | 16175 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16176 | <feature name="slot" value="rom_sram" /> | |
15943 | 16177 | <dataarea name="rom" size="2097152"> |
15944 | 16178 | <rom name="pebble beach golf links (euro).bin" size="2097152" crc="6cfc7297" sha1="53e8e8f11fb9950732409b770b7d9c8dabe85a19" offset="000000" loadflag="load16_word_swap" /> |
15945 | 16179 | </dataarea> |
r20695 | r20696 | |
15954 | 16188 | <publisher>Sega</publisher> |
15955 | 16189 | <part name="cart" interface="megadriv_cart"> |
15956 | 16190 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16191 | <feature name="slot" value="rom_sram" /> | |
15957 | 16192 | <dataarea name="rom" size="2097152"> |
15958 | 16193 | <rom name="pebble beach golf links (usa).bin" size="2097152" crc="95823c43" sha1="c9971710651056b8211b9bbd68eb5d1569e39e1f" offset="000000" loadflag="load16_word_swap" /> |
15959 | 16194 | </dataarea> |
r20695 | r20696 | |
15971 | 16206 | <info name="alt_title" value="ペブルビーチの波濤"/> |
15972 | 16207 | <part name="cart" interface="megadriv_cart"> |
15973 | 16208 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16209 | <feature name="slot" value="rom_sram" /> | |
15974 | 16210 | <dataarea name="rom" size="1572864"> |
15975 | 16211 | <rom name="new 3d golf simulation pebble beach no hatou (jpn).bin" size="1572864" crc="96ed2e5d" sha1="dee8430f4f15b4d04e1e3c0cc9d7d7f55ca1ad7b" offset="000000" loadflag="load16_word_swap" /> |
15976 | 16212 | </dataarea> |
r20695 | r20696 | |
15986 | 16222 | <info name="alt_title" value="Pelé II - World Tournament Soccer (USA Box)"/> |
15987 | 16223 | <part name="cart" interface="megadriv_cart"> |
15988 | 16224 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16225 | <feature name="slot" value="rom_sram" /> | |
15989 | 16226 | <dataarea name="rom" size="2097152"> |
15990 | 16227 | <rom name="pele ii - world tournament soccer (euro, usa).bin" size="2097152" crc="05a486e9" sha1="96498065545ed122aa29471d762a2ae1362b2dea" offset="000000" loadflag="load16_word_swap" /> |
15991 | 16228 | </dataarea> |
r20695 | r20696 | |
16001 | 16238 | <publisher>Accolade</publisher> |
16002 | 16239 | <part name="cart" interface="megadriv_cart"> |
16003 | 16240 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16241 | <feature name="slot" value="rom_sram" /> | |
16004 | 16242 | <dataarea name="rom" size="1048576"> |
16005 | 16243 | <rom name="pele! (euro, usa).bin" size="1048576" crc="5a8abe51" sha1="c0a91e2d10b98174faa647fb732c335d7438abf7" offset="000000" loadflag="load16_word_swap" /> |
16006 | 16244 | </dataarea> |
r20695 | r20696 | |
16052 | 16290 | <publisher>Electronic Arts</publisher> |
16053 | 16291 | <part name="cart" interface="megadriv_cart"> |
16054 | 16292 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16293 | <feature name="slot" value="rom_sram" /> | |
16055 | 16294 | <dataarea name="rom" size="1048576"> |
16056 | 16295 | <rom name="euro03.bin" size="1048576" crc="8ca45acd" sha1="640615be6891a8457d94bb81b0e8e1fa7c5119a8" offset="000000" loadflag="load16_word_swap" /> |
16057 | 16296 | </dataarea> |
r20695 | r20696 | |
16066 | 16305 | <publisher>Electronic Arts</publisher> |
16067 | 16306 | <part name="cart" interface="megadriv_cart"> |
16068 | 16307 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16308 | <feature name="slot" value="rom_sram" /> | |
16069 | 16309 | <dataarea name="rom" size="2097152"> |
16070 | 16310 | <rom name="pga9601.bin" size="2097152" crc="9698bbde" sha1="abc2a8d773724cd8fb1aeae483f5ca72f47e77fa" offset="000000" loadflag="load16_word_swap" /> |
16071 | 16311 | </dataarea> |
r20695 | r20696 | |
16102 | 16342 | <publisher>Electronic Arts</publisher> |
16103 | 16343 | <part name="cart" interface="megadriv_cart"> |
16104 | 16344 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16345 | <feature name="slot" value="rom_sram" /> | |
16105 | 16346 | <dataarea name="rom" size="1048576"> |
16106 | 16347 | <rom name="pga tour golf ii (euro, usa) (v1.1).bin" size="1048576" crc="e82b8606" sha1="12d5236a4ff23c5b1e4f452b3abd3d48e6e55314" offset="000000" loadflag="load16_word_swap" /> |
16107 | 16348 | </dataarea> |
r20695 | r20696 | |
16119 | 16360 | <info name="alt_title" value="PGAツアーゴルフII"/> |
16120 | 16361 | <part name="cart" interface="megadriv_cart"> |
16121 | 16362 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16363 | <feature name="slot" value="rom_sram" /> | |
16122 | 16364 | <dataarea name="rom" size="1048576"> |
16123 | 16365 | <rom name="pga tour golf ii (jpn).bin" size="1048576" crc="c05b7a4a" sha1="a5896f2f019530929194a6d80828d18b859b9174" offset="000000" loadflag="load16_word_swap" /> |
16124 | 16366 | </dataarea> |
r20695 | r20696 | |
16133 | 16375 | <publisher>Electronic Arts</publisher> |
16134 | 16376 | <part name="cart" interface="megadriv_cart"> |
16135 | 16377 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16378 | <feature name="slot" value="rom_sram" /> | |
16136 | 16379 | <dataarea name="rom" size="2097152"> |
16137 | 16380 | <rom name="pga tour golf iii (euro, usa).bin" size="2097152" crc="aeb3f65f" sha1="702707efcbfe229f6e190f2b6c71b6f53ae9ec36" offset="000000" loadflag="load16_word_swap" /> |
16138 | 16381 | </dataarea> |
r20695 | r20696 | |
16147 | 16390 | <publisher>Sega</publisher> |
16148 | 16391 | <part name="cart" interface="megadriv_cart"> |
16149 | 16392 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16393 | <feature name="slot" value="rom_sram" /> | |
16150 | 16394 | <dataarea name="rom" size="786432"> |
16151 | 16395 | <rom name="phantasy star ii (euro, usa).bin" size="786432" crc="0d07d0ef" sha1="fcd032ded2235171f51db316ad1b7688fbbdafe4" offset="000000" loadflag="load16_word_swap" /> |
16152 | 16396 | </dataarea> |
r20695 | r20696 | |
16161 | 16405 | <publisher>Tec Toy</publisher> |
16162 | 16406 | <part name="cart" interface="megadriv_cart"> |
16163 | 16407 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16408 | <feature name="slot" value="rom_sram" /> | |
16164 | 16409 | <dataarea name="rom" size="786432"> |
16165 | 16410 | <rom name="phantasy star ii (bra).bin" size="786432" crc="e6688b66" sha1="ab62fac112cb4dd1f19cb973bd7952b161f6d100" offset="000000" loadflag="load16_word_swap" /> |
16166 | 16411 | </dataarea> |
r20695 | r20696 | |
16178 | 16423 | <info name="alt_title" value="ファンタシースターII 還らざる時の終わりに"/> |
16179 | 16424 | <part name="cart" interface="megadriv_cart"> |
16180 | 16425 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16426 | <feature name="slot" value="rom_sram" /> | |
16181 | 16427 | <dataarea name="rom" size="786432"> |
16182 | 16428 | <rom name="mpr-12140+mpr-12181+mpr-12182.bin" size="786432" crc="bec8eb5a" sha1="fc186c681e110723b4be5590f242c73d5004c8a7" offset="000000" loadflag="load16_word_swap" /> |
16183 | 16429 | </dataarea> |
r20695 | r20696 | |
16280 | 16526 | <publisher>Sega</publisher> |
16281 | 16527 | <part name="cart" interface="megadriv_cart"> |
16282 | 16528 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16529 | <feature name="slot" value="rom_sram" /> | |
16283 | 16530 | <dataarea name="rom" size="786432"> |
16284 | 16531 | <rom name="phantasy star iii - generations of doom (euro, usa, kor).bin" size="786432" crc="c6b42b0f" sha1="59d4914e652672fd1e453c76b8250d17e8ca154e" offset="000000" loadflag="load16_word_swap" /> |
16285 | 16532 | </dataarea> |
r20695 | r20696 | |
16294 | 16541 | <publisher>Tec Toy</publisher> |
16295 | 16542 | <part name="cart" interface="megadriv_cart"> |
16296 | 16543 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16544 | <feature name="slot" value="rom_sram" /> | |
16297 | 16545 | <dataarea name="rom" size="786432"> |
16298 | 16546 | <rom name="phantasy star iii - generations of doom (bra).bin" size="786432" crc="2e9b4c23" sha1="59ccfc6b85b95666d0e2c85e3e08c847c4a7ad34" offset="000000" loadflag="load16_word_swap" /> |
16299 | 16547 | </dataarea> |
r20695 | r20696 | |
16311 | 16559 | <info name="alt_title" value="ファンタシースターIII 時の継承者"/> |
16312 | 16560 | <part name="cart" interface="megadriv_cart"> |
16313 | 16561 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16562 | <feature name="slot" value="rom_sram" /> | |
16314 | 16563 | <dataarea name="rom" size="786432"> |
16315 | 16564 | <rom name="phantasy star iii - toki no keishousha (jpn).bin" size="786432" crc="6c48c06f" sha1="68b0f8e73dea5dca1b6ac8c0e12bc1d9761edf32" offset="000000" loadflag="load16_word_swap" /> |
16316 | 16565 | </dataarea> |
r20695 | r20696 | |
16326 | 16575 | <info name="alt_title" value="Phantasy Star IV (Box)"/> |
16327 | 16576 | <part name="cart" interface="megadriv_cart"> |
16328 | 16577 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16578 | <feature name="slot" value="rom_sram" /> | |
16329 | 16579 | <dataarea name="rom" size="3145728"> |
16330 | 16580 | <rom name="phantasy star iv (usa).bin" size="3145728" crc="fe236442" sha1="bc7ff6d6a8408f38562bc610f24645cad6c42629" offset="000000" loadflag="load16_word_swap" /> |
16331 | 16581 | </dataarea> |
r20695 | r20696 | |
16342 | 16592 | <info name="alt_title" value="Phantasy Star IV (Box)"/> |
16343 | 16593 | <part name="cart" interface="megadriv_cart"> |
16344 | 16594 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16595 | <feature name="slot" value="rom_sram" /> | |
16345 | 16596 | <dataarea name="rom" size="3145728"> |
16346 | 16597 | <rom name="phantasy star iv (euro).bin" size="3145728" crc="389c2968" sha1="f055fc02142334ea798c696ec8d4c262ca28d847" offset="000000" loadflag="load16_word_swap" /> |
16347 | 16598 | </dataarea> |
r20695 | r20696 | |
16359 | 16610 | <info name="alt_title" value="ァンタシースター ~千年紀の終りに~"/> |
16360 | 16611 | <part name="cart" interface="megadriv_cart"> |
16361 | 16612 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16613 | <feature name="slot" value="rom_sram" /> | |
16362 | 16614 | <dataarea name="rom" size="3145728"> |
16363 | 16615 | <rom name="phantasy star - sennenki no owari ni (jpn).bin" size="3145728" crc="f0bfad42" sha1="9d330d5e395b7caae11fae92f71d259b8391904b" offset="000000" loadflag="load16_word_swap" /> |
16364 | 16616 | </dataarea> |
r20695 | r20696 | |
16373 | 16625 | <publisher>Sega</publisher> |
16374 | 16626 | <part name="cart" interface="megadriv_cart"> |
16375 | 16627 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16628 | <feature name="slot" value="rom_sram" /> | |
16376 | 16629 | <dataarea name="rom" size="3145728"> |
16377 | 16630 | <rom name="phantasy star iv (prototype - aug 15, 1994).bin" size="3145728" crc="60137f25" sha1="81fe74c288bcf97b70758442c520ec47308cfcee" offset="000000" loadflag="load16_word_swap" /> |
16378 | 16631 | </dataarea> |
r20695 | r20696 | |
16387 | 16640 | <publisher>Sega</publisher> |
16388 | 16641 | <part name="cart" interface="megadriv_cart"> |
16389 | 16642 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16643 | <feature name="slot" value="rom_sram" /> | |
16390 | 16644 | <dataarea name="rom" size="3145728"> |
16391 | 16645 | <rom name="phantasy star iv (prototype - jun 08, 1994).bin" size="3145728" crc="dc2e1c0a" sha1="d72b9d68cfb54b4221f3a2416eac30a94accd427" offset="000000" loadflag="load16_word_swap" /> |
16392 | 16646 | </dataarea> |
r20695 | r20696 | |
16401 | 16655 | <publisher>Sega</publisher> |
16402 | 16656 | <part name="cart" interface="megadriv_cart"> |
16403 | 16657 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16658 | <feature name="slot" value="rom_sram" /> | |
16404 | 16659 | <dataarea name="rom" size="3145728"> |
16405 | 16660 | <rom name="phantasy star iv (prototype - may 30, 1994).bin" size="3145728" crc="b32b17e1" sha1="803877f317eeaaec57af07451a5ccf9309db513c" offset="000000" loadflag="load16_word_swap" /> |
16406 | 16661 | </dataarea> |
r20695 | r20696 | |
16415 | 16670 | <publisher>Sega</publisher> |
16416 | 16671 | <part name="cart" interface="megadriv_cart"> |
16417 | 16672 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16673 | <feature name="slot" value="rom_sram" /> | |
16418 | 16674 | <dataarea name="rom" size="3145728"> |
16419 | 16675 | <rom name="phantasy star iv (prototype - nov 07, 1994).bin" size="3145728" crc="bda29cdf" sha1="e0c3de9991a03fd48dc85caae6415aaac016ab4a" offset="000000" loadflag="load16_word_swap" /> |
16420 | 16676 | </dataarea> |
r20695 | r20696 | |
16429 | 16685 | <publisher>Sega</publisher> |
16430 | 16686 | <part name="cart" interface="megadriv_cart"> |
16431 | 16687 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16688 | <feature name="slot" value="rom_sram" /> | |
16432 | 16689 | <dataarea name="rom" size="3145728"> |
16433 | 16690 | <rom name="phantasy star iv (prototype - oct 27, 1994).bin" size="3145728" crc="12a2590a" sha1="6720d3afcd28cad06ac15749843d2a6995f403dc" offset="000000" loadflag="load16_word_swap" /> |
16434 | 16691 | </dataarea> |
r20695 | r20696 | |
16556 | 16813 | <publisher>Microprose</publisher> |
16557 | 16814 | <part name="cart" interface="megadriv_cart"> |
16558 | 16815 | <feature name="pcb_type" value="SEGA-SRAM" /> |
16816 | <feature name="slot" value="rom_sram" /> | |
16559 | 16817 | <dataarea name="rom" size="1048576"> |
16560 | 16818 | <rom name="pirates! gold (usa).bin" size="1048576" crc="ed50e75c" sha1="ea597dbefc8f804524606af3c1c4fe6ba55e86e9" offset="000000" loadflag="load16_word_swap" /> |
16561 | 16819 | </dataarea> |
r20695 | r20696 | |
16653 | 16911 | <publisher><unlicensed></publisher> |
16654 | 16912 | <part name="cart" interface="megadriv_cart"> |
16655 | 16913 | <feature name="pcb_type" value="POKEMON" /> |
16914 | <feature name="slot" value="rom_poke" /> | |
16656 | 16915 | <dataarea name="rom" size="2097152"> |
16657 | 16916 | <rom name="pocket monsters (unl).bin" size="2097152" crc="f68f6367" sha1="d10de935e099c520384c986b1f00fd5e72d64e03" offset="000000" loadflag="load16_word_swap" /> |
16658 | 16917 | </dataarea> |
r20695 | r20696 | |
16676 | 16935 | <publisher><unlicensed></publisher> |
16677 | 16936 | <part name="cart" interface="megadriv_cart"> |
16678 | 16937 | <feature name="pcb_type" value="POKEMON2" /> |
16938 | <feature name="slot" value="rom_poke2" /> | |
16679 | 16939 | <dataarea name="rom" size="2097152"> |
16680 | 16940 | <rom name="pocket monsters 2 (unl).bin" size="2097152" crc="30f7031f" sha1="dae100dfaee1b5b7816731cb2f43bcda3da273b7" offset="000000" loadflag="load16_word_swap" /> |
16681 | 16941 | </dataarea> |
r20695 | r20696 | |
16760 | 17020 | <info name="alt_title" value="パワーモンガー"/> |
16761 | 17021 | <part name="cart" interface="megadriv_cart"> |
16762 | 17022 | <feature name="pcb_type" value="SEGA-SRAM" /> |
17023 | <feature name="slot" value="rom_sram" /> | |
16763 | 17024 | <dataarea name="rom" size="1048576"> |
16764 | 17025 | <rom name="power monger (jpn, kor).bin" size="1048576" crc="553289b3" sha1="f0a48f25d87f7a6d17ff76f5e29ea7be2d430ce4" offset="000000" loadflag="load16_word_swap" /> |
16765 | 17026 | </dataarea> |
r20695 | r20696 | |
16810 | 17071 | <publisher>Sega</publisher> |
16811 | 17072 | <part name="cart" interface="megadriv_cart"> |
16812 | 17073 | <feature name="pcb_type" value="SEGA-SRAM" /> |
17074 | <feature name="slot" value="rom_sram" /> | |
16813 | 17075 | <dataarea name="rom" size="1048576"> |
16814 | 17076 | <rom name="mpr-18473.bin" size="1048576" crc="303b889f" sha1="2916e5ef628e077cde87be873e0ea2507ef5c844" offset="000000" loadflag="load16_word_swap" /> |
16815 | 17077 | </dataarea> |
r20695 | r20696 | |
16824 | 17086 | <publisher>Sega</publisher> |
16825 | 17087 | <part name="cart" interface="megadriv_cart"> |
16826 | 17088 | <feature name="pcb_type" value="SEGA-SRAM" /> |
17089 | <feature name="slot" value="rom_sram" /> | |
16827 | 17090 | <dataarea name="rom" size="1048576"> |
16828 | 17091 | <rom name="premier manager 97 (euro).bin" size="1048576" crc="fccbf69b" sha1="e2df3b48170e1a7bde46af2adbf939803e267e13" offset="000000" loadflag="load16_word_swap" /> |
16829 | 17092 | </dataarea> |
r20695 | r20696 | |
16849 | 17112 | <publisher>Sega</publisher> |
16850 | 17113 | <part name="cart" interface="megadriv_cart"> |
16851 | 17114 | <feature name="pcb_type" value="SEGA-SRAM" /> |
17115 | <feature name="slot" value="rom_sram" /> | |
16852 | 17116 | <dataarea name="rom" size="2097152"> |
16853 | 17117 | <rom name="prime time nfl starring deion sanders (usa).bin" size="2097152" crc="5aa53cbc" sha1="7d7a5a920ac30831556b58caac66f4a8dde1632a" offset="000000" loadflag="load16_word_swap" /> |
16854 | 17118 | </dataarea> |
r20695 | r20696 | |
17493 | 17757 | <info name="alt_title" value="乱世の覇者"/> |
17494 | 17758 | <part name="cart" interface="megadriv_cart"> |
17495 | 17759 | <feature name="pcb_type" value="SEGA-SRAM" /> |
17760 | <feature name="slot" value="rom_sram" /> | |
17496 | 17761 | <dataarea name="rom" size="1048576"> |
17497 | 17762 | <rom name="ransei no hasha (jpn).bin" size="1048576" crc="a9a0083d" sha1="7c431e26226b99d09d61c4dc64131b2d81ae870e" offset="000000" loadflag="load16_word_swap" /> |
17498 | 17763 | </dataarea> |
r20695 | r20696 | |
17581 | 17846 | <info name="alt_title" value="レンタヒーロー"/> |
17582 | 17847 | <part name="cart" interface="megadriv_cart"> |
17583 | 17848 | <feature name="pcb_type" value="SEGA-SRAM" /> |
17849 | <feature name="slot" value="rom_sram" /> | |
17584 | 17850 | <dataarea name="rom" size="1048576"> |
17585 | 17851 | <rom name="mpr-14187.bin" size="1048576" crc="2e515f82" sha1="a07e4d56c9842e1177df9016fb9478060dc4c1c6" offset="000000" loadflag="load16_word_swap" /> |
17586 | 17852 | </dataarea> |
r20695 | r20696 | |
17763 | 18029 | <publisher>Electronic Arts</publisher> |
17764 | 18030 | <part name="cart" interface="megadriv_cart"> |
17765 | 18031 | <feature name="pcb_type" value="NHLPA" /> |
18032 | <feature name="slot" value="rom_nhlpa" /> | |
17766 | 18033 | <dataarea name="rom" size="1048576"> |
17767 | 18034 | <rom name="rin09.bin" size="1048576" crc="41fcc497" sha1="84851ce4527761b8d74ce581c19e15d0dd17f368" offset="000000" loadflag="load16_word_swap" /> |
17768 | 18035 | </dataarea> |
r20695 | r20696 | |
18221 | 18488 | <publisher>Koei</publisher> |
18222 | 18489 | <part name="cart" interface="megadriv_cart"> |
18223 | 18490 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18491 | <feature name="slot" value="rom_sram" /> | |
18224 | 18492 | <dataarea name="rom" size="1048576"> |
18225 | 18493 | <rom name="romance of the three kingdoms ii (usa).bin" size="1048576" crc="3d842478" sha1="89fc2203b0369565124184690a5a5037ac9c54d7" offset="000000" loadflag="load16_word_swap" /> |
18226 | 18494 | </dataarea> |
r20695 | r20696 | |
18238 | 18506 | <info name="alt_title" value="三国志II"/> |
18239 | 18507 | <part name="cart" interface="megadriv_cart"> |
18240 | 18508 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18509 | <feature name="slot" value="rom_sram" /> | |
18241 | 18510 | <dataarea name="rom" size="1048576"> |
18242 | 18511 | <rom name="mpr-14455.bin" size="1048576" crc="437ba326" sha1="d9a912caacaa476a890564f62b6ce9cc8f60496e" offset="000000" loadflag="load16_word_swap" /> |
18243 | 18512 | </dataarea> |
r20695 | r20696 | |
18252 | 18521 | <publisher>Koei</publisher> |
18253 | 18522 | <part name="cart" interface="megadriv_cart"> |
18254 | 18523 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18524 | <feature name="slot" value="rom_sram" /> | |
18255 | 18525 | <dataarea name="rom" size="1310720"> |
18256 | 18526 | <rom name="romance of the three kingdoms iii - dragon of destiny (usa).bin" size="1310720" crc="7e41c8fe" sha1="a47b0ac13ef8229fbfc89216c8ecb66d72f6f73a" offset="000000" loadflag="load16_word_swap" /> |
18257 | 18527 | </dataarea> |
r20695 | r20696 | |
18269 | 18539 | <info name="alt_title" value="三国志III"/> |
18270 | 18540 | <part name="cart" interface="megadriv_cart"> |
18271 | 18541 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18542 | <feature name="slot" value="rom_sram" /> | |
18272 | 18543 | <dataarea name="rom" size="1572864"> |
18273 | 18544 | <rom name="sangokushi iii (jpn).bin" size="1572864" crc="a8de6aea" sha1="c85d03a6bcfeccc66ea3fa3cbda006c83576815f" offset="000000" loadflag="load16_word_swap" /> |
18274 | 18545 | </dataarea> |
r20695 | r20696 | |
18405 | 18676 | <publisher><unknown></publisher> |
18406 | 18677 | <part name="cart" interface="megadriv_cart"> |
18407 | 18678 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18679 | <feature name="slot" value="rom_sram" /> | |
18408 | 18680 | <dataarea name="rom" size="1048576"> |
18409 | 18681 | <rom name="san guo zhi lie zhuan - luan shi qun ying (chi).bin" size="1048576" crc="3b5cc398" sha1="7aaa0cc1dafaa14e6d62d6c1dbd462e69617bf7e" offset="000000" loadflag="load16_word_swap" /> |
18410 | 18682 | </dataarea> |
r20695 | r20696 | |
18447 | 18719 | <info name="alt_title" value="三国志列伝 乱世の英雄たち"/> |
18448 | 18720 | <part name="cart" interface="megadriv_cart"> |
18449 | 18721 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18722 | <feature name="slot" value="rom_sram" /> | |
18450 | 18723 | <dataarea name="rom" size="1048576"> |
18451 | 18724 | <rom name="sangokushi retsuden - ransei no eiyuutachi (jpn).bin" size="1048576" crc="0f56785a" sha1="9b79f91060e68b9f6f48c8a5f38bc9873d03c4a9" offset="000000" loadflag="load16_word_swap" /> |
18452 | 18725 | </dataarea> |
r20695 | r20696 | |
18560 | 18833 | <publisher>Renegade</publisher> |
18561 | 18834 | <part name="cart" interface="megadriv_cart"> |
18562 | 18835 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18836 | <feature name="slot" value="rom_sram" /> | |
18563 | 18837 | <dataarea name="rom" size="524288"> |
18564 | 18838 | <rom name="mpr-16014.bin" size="524288" crc="f9b396b8" sha1="2ee1ad4aac354b6d227b16976f0875f4625ff604" offset="000000" loadflag="load16_word_swap" /> |
18565 | 18839 | </dataarea> |
r20695 | r20696 | |
18574 | 18848 | <publisher>Renegade</publisher> |
18575 | 18849 | <part name="cart" interface="megadriv_cart"> |
18576 | 18850 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18851 | <feature name="slot" value="rom_sram" /> | |
18577 | 18852 | <dataarea name="rom" size="524288"> |
18578 | 18853 | <rom name="sensible soccer (beta).bin" size="524288" crc="ef52664d" sha1="c12a644cf81886050a4ae108b17b3c742055f5c3" offset="000000" loadflag="load16_word_swap" /> |
18579 | 18854 | </dataarea> |
r20695 | r20696 | |
18589 | 18864 | <info name="alt_title" value="International Sensible Soccer - Limited Edition: World Champions (Box)"/> |
18590 | 18865 | <part name="cart" interface="megadriv_cart"> |
18591 | 18866 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18867 | <feature name="slot" value="rom_sram" /> | |
18592 | 18868 | <dataarea name="rom" size="524288"> |
18593 | 18869 | <rom name="sensible soccer - international edition (euro).bin" size="524288" crc="04e3bcca" sha1="b88833ba92e084d4433e2b22eeb67e71ed36cd5c" offset="000000" loadflag="load16_word_swap" /> |
18594 | 18870 | </dataarea> |
r20695 | r20696 | |
18689 | 18965 | <publisher>Sega</publisher> |
18690 | 18966 | <part name="cart" interface="megadriv_cart"> |
18691 | 18967 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18968 | <feature name="slot" value="rom_sram" /> | |
18692 | 18969 | <dataarea name="rom" size="2097152"> |
18693 | 18970 | <rom name="shadowrun (usa).bin" size="2097152" crc="fbb92909" sha1="a06a281d39e845bff446a541b2ff48e1d93143c2" offset="000000" loadflag="load16_word_swap" /> |
18694 | 18971 | </dataarea> |
r20695 | r20696 | |
18703 | 18980 | <publisher><unknown></publisher> |
18704 | 18981 | <part name="cart" interface="megadriv_cart"> |
18705 | 18982 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18983 | <feature name="slot" value="rom_sram" /> | |
18706 | 18984 | <dataarea name="rom" size="2097152"> |
18707 | 18985 | <rom name="shadowrun (jpn).bin" size="2097152" crc="d32199f7" sha1="e28bb51227abcc71aaf18d445d3651054247c662" offset="000000" loadflag="load16_word_swap" /> |
18708 | 18986 | </dataarea> |
r20695 | r20696 | |
18717 | 18995 | <publisher>Sega</publisher> |
18718 | 18996 | <part name="cart" interface="megadriv_cart"> |
18719 | 18997 | <feature name="pcb_type" value="SEGA-SRAM" /> |
18998 | <feature name="slot" value="rom_sram" /> | |
18720 | 18999 | <dataarea name="rom" size="2097152"> |
18721 | 19000 | <rom name="shadowrun (prototype - dec 28, 1993).bin" size="2097152" crc="2455add2" sha1="2d52cb444802ae6fda8d50b1af5fab10826bc00d" offset="000000" loadflag="load16_word_swap" /> |
18722 | 19001 | </dataarea> |
r20695 | r20696 | |
18731 | 19010 | <publisher>Sega</publisher> |
18732 | 19011 | <part name="cart" interface="megadriv_cart"> |
18733 | 19012 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19013 | <feature name="slot" value="rom_sram" /> | |
18734 | 19014 | <dataarea name="rom" size="2097152"> |
18735 | 19015 | <rom name="shadowrun (prototype - dec 31, 1993).bin" size="2097152" crc="bbb5e2fa" sha1="4bb4f490ff22c380df471b63faeb8835f9cf5cb6" offset="000000" loadflag="load16_word_swap" /> |
18736 | 19016 | </dataarea> |
r20695 | r20696 | |
18745 | 19025 | <publisher>Sega</publisher> |
18746 | 19026 | <part name="cart" interface="megadriv_cart"> |
18747 | 19027 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19028 | <feature name="slot" value="rom_sram" /> | |
18748 | 19029 | <dataarea name="rom" size="2097152"> |
18749 | 19030 | <rom name="shadowrun (prototype - jan 25, 1994 - c).bin" size="2097152" crc="6e2bbca8" sha1="37b0aecf9d72fa662cadec9c2eba9bbe6fea35d2" offset="000000" loadflag="load16_word_swap" /> |
18750 | 19031 | </dataarea> |
r20695 | r20696 | |
18759 | 19040 | <publisher>Sega</publisher> |
18760 | 19041 | <part name="cart" interface="megadriv_cart"> |
18761 | 19042 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19043 | <feature name="slot" value="rom_sram" /> | |
18762 | 19044 | <dataarea name="rom" size="2097152"> |
18763 | 19045 | <rom name="shadowrun (prototype - jan 25, 1994).bin" size="2097152" crc="2a964bcd" sha1="01591ae041031a4820caeb0bfcb1772e8b633352" offset="000000" loadflag="load16_word_swap" /> |
18764 | 19046 | </dataarea> |
r20695 | r20696 | |
18853 | 19135 | <publisher>Sega</publisher> |
18854 | 19136 | <part name="cart" interface="megadriv_cart"> |
18855 | 19137 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19138 | <feature name="slot" value="rom_sram" /> | |
18856 | 19139 | <dataarea name="rom" size="1572864"> |
18857 | 19140 | <rom name="shining force (usa).bin" size="1572864" crc="e0594abe" sha1="7cbb3ed31c982750d70a273b9561a9e1b2c04eea" offset="000000" loadflag="load16_word_swap" /> |
18858 | 19141 | </dataarea> |
r20695 | r20696 | |
18867 | 19150 | <publisher>Sega</publisher> |
18868 | 19151 | <part name="cart" interface="megadriv_cart"> |
18869 | 19152 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19153 | <feature name="slot" value="rom_sram" /> | |
18870 | 19154 | <dataarea name="rom" size="1572864"> |
18871 | 19155 | <rom name="shining force (usa) (beta).bin" size="1572864" crc="ce67143a" sha1="f026c9243431c9c2d4b0660e340158816a22b869" offset="000000" loadflag="load16_word_swap" /> |
18872 | 19156 | </dataarea> |
r20695 | r20696 | |
18884 | 19168 | <info name="alt_title" value="シャイニング・フォース ~神々の遺産~"/> |
18885 | 19169 | <part name="cart" interface="megadriv_cart"> |
18886 | 19170 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19171 | <feature name="slot" value="rom_sram" /> | |
18887 | 19172 | <dataarea name="rom" size="1572864"> |
18888 | 19173 | <rom name="shining force - kamigami no isan (jpn).bin" size="1572864" crc="9378fbcd" sha1="ef8afbdc9af931d9da34d72efc8a76f0d5f4379d" offset="000000" loadflag="load16_word_swap" /> |
18889 | 19174 | </dataarea> |
r20695 | r20696 | |
18901 | 19186 | <info name="alt_title" value="シャイニング・フォースII 「古えの封印」"/> |
18902 | 19187 | <part name="cart" interface="megadriv_cart"> |
18903 | 19188 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19189 | <feature name="slot" value="rom_sram" /> | |
18904 | 19190 | <dataarea name="rom" size="2097152"> |
18905 | 19191 | <rom name="shining force ii - koe no fuuin (jpn).bin" size="2097152" crc="0288f3e1" sha1="8e1f1a510af4d43716d9ee34d47becf907dec147" offset="000000" loadflag="load16_word_swap" /> |
18906 | 19192 | </dataarea> |
r20695 | r20696 | |
18915 | 19201 | <publisher>Sega</publisher> |
18916 | 19202 | <part name="cart" interface="megadriv_cart"> |
18917 | 19203 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19204 | <feature name="slot" value="rom_sram" /> | |
18918 | 19205 | <dataarea name="rom" size="2097152"> |
18919 | 19206 | <rom name="shining force ii (prototype - apr 04, 1994).bin" size="2097152" crc="5843670c" sha1="cd98c45ec170ce72fabe2237cc55dc4f0b6aa884" offset="000000" loadflag="load16_word_swap" /> |
18920 | 19207 | </dataarea> |
r20695 | r20696 | |
18929 | 19216 | <publisher>Sega</publisher> |
18930 | 19217 | <part name="cart" interface="megadriv_cart"> |
18931 | 19218 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19219 | <feature name="slot" value="rom_sram" /> | |
18932 | 19220 | <dataarea name="rom" size="2097152"> |
18933 | 19221 | <rom name="shining force ii (prototype - jun 07, 1994).bin" size="2097152" crc="03b68bba" sha1="caeb48ed31991614c21121bf7d7a899aea946a81" offset="000000" loadflag="load16_word_swap" /> |
18934 | 19222 | </dataarea> |
r20695 | r20696 | |
18943 | 19231 | <publisher>Sega</publisher> |
18944 | 19232 | <part name="cart" interface="megadriv_cart"> |
18945 | 19233 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19234 | <feature name="slot" value="rom_sram" /> | |
18946 | 19235 | <dataarea name="rom" size="2097152"> |
18947 | 19236 | <rom name="shining force ii (usa).bin" size="2097152" crc="4815e075" sha1="22defc2e8e6c1dbb20421b906796538725b3d893" offset="000000" loadflag="load16_word_swap" /> |
18948 | 19237 | </dataarea> |
r20695 | r20696 | |
18957 | 19246 | <publisher>Sega</publisher> |
18958 | 19247 | <part name="cart" interface="megadriv_cart"> |
18959 | 19248 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19249 | <feature name="slot" value="rom_sram" /> | |
18960 | 19250 | <dataarea name="rom" size="1048576"> |
18961 | 19251 | <rom name="shining in the darkness (euro, usa).bin" size="1048576" crc="4d2785bc" sha1="4e10c90199d6edd2030a4ba1c42c7c166bf309ec" offset="000000" loadflag="load16_word_swap" /> |
18962 | 19252 | </dataarea> |
r20695 | r20696 | |
18971 | 19261 | <publisher>Tec Toy</publisher> |
18972 | 19262 | <part name="cart" interface="megadriv_cart"> |
18973 | 19263 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19264 | <feature name="slot" value="rom_sram" /> | |
18974 | 19265 | <dataarea name="rom" size="1048576"> |
18975 | 19266 | <rom name="shining in the darkness (bra).bin" size="1048576" crc="3ee2bbc4" sha1="08c6e884d48329c45d9f090aeea03efd4c1918c0" offset="000000" loadflag="load16_word_swap" /> |
18976 | 19267 | </dataarea> |
r20695 | r20696 | |
18988 | 19279 | <info name="alt_title" value="シャイニング&ザ・ダクネス"/> |
18989 | 19280 | <part name="cart" interface="megadriv_cart"> |
18990 | 19281 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19282 | <feature name="slot" value="rom_sram" /> | |
18991 | 19283 | <dataarea name="rom" size="1048576"> |
18992 | 19284 | <rom name="mpr-13807.bin" size="1048576" crc="496af51c" sha1="c09ff5bcee1a29a48c65be4ad584708b85ca549b" offset="000000" loadflag="load16_word_swap" /> |
18993 | 19285 | </dataarea> |
r20695 | r20696 | |
19386 | 19678 | <publisher>Sega</publisher> |
19387 | 19679 | <part name="cart" interface="megadriv_cart"> |
19388 | 19680 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19681 | <feature name="slot" value="rom_sram" /> | |
19389 | 19682 | <dataarea name="rom" size="2097152"> |
19390 | 19683 | <rom name="mpr-17499.bin" size="2097152" crc="a30ebdb1" sha1="110a61671b83fe17fba768ab85b535ca1cc6d7ea" offset="000000" loadflag="load16_word_swap" /> |
19391 | 19684 | </dataarea> |
r20695 | r20696 | |
19400 | 19693 | <publisher>Atlus</publisher> |
19401 | 19694 | <part name="cart" interface="megadriv_cart"> |
19402 | 19695 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19696 | <feature name="slot" value="rom_sram" /> | |
19403 | 19697 | <dataarea name="rom" size="2097152"> |
19404 | 19698 | <rom name="crusader of centy (usa).bin" size="2097152" crc="41858f6f" sha1="bf2e8d122f4670865bedbc305ef991ee5f52d647" offset="000000" loadflag="load16_word_swap" /> |
19405 | 19699 | </dataarea> |
r20695 | r20696 | |
19417 | 19711 | <info name="alt_title" value="新創世紀ラグナセンティ"/> |
19418 | 19712 | <part name="cart" interface="megadriv_cart"> |
19419 | 19713 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19714 | <feature name="slot" value="rom_sram" /> | |
19420 | 19715 | <dataarea name="rom" size="2097152"> |
19421 | 19716 | <rom name="shin souseiki ragnacenty (jpn).bin" size="2097152" crc="6a3f5ae2" sha1="e0df9f3cb64beb3ea921653eccdd45aca6abc0aa" offset="000000" loadflag="load16_word_swap" /> |
19422 | 19717 | </dataarea> |
r20695 | r20696 | |
19443 | 19738 | <publisher>Sega</publisher> |
19444 | 19739 | <part name="cart" interface="megadriv_cart"> |
19445 | 19740 | <feature name="pcb_type" value="SEGA-SRAM" /> |
19741 | <feature name="slot" value="rom_sram" /> | |
19446 | 19742 | <dataarea name="rom" size="2097152"> |
19447 | 19743 | <rom name="ragnacenty (kor).bin" size="2097152" crc="77b5b10b" sha1="40265aae1b43f004434194038d32ca6b4841707d" offset="000000" loadflag="load16_word_swap" /> |
19448 | 19744 | </dataarea> |
r20695 | r20696 | |
19459 | 19755 | <info name="release" value="19941018 (JPN)"/> |
19460 | 19756 | <info name="alt_title" value="ソニック&ナックルズ"/> |
19461 | 19757 | <part name="cart" interface="megadriv_cart"> |
19462 | <dataarea name="rom" size="2097152"> | |
19758 | <feature name="slot" value="rom_sk" /> | |
19759 | <dataarea name="rom" size="3407872"> | |
19463 | 19760 | <rom name="mpr-16910-u.ic1" size="2097152" crc="0658f691" sha1="88d6499d874dcb5721ff58d76fe1b9af811192e3" offset="000000" loadflag="load16_word_swap" /> |
19761 | <rom name="mpr-16911-s.ic2" size="262144" crc="4dcfd55c" sha1="70429f1d80503a0632f603bf762fe0bbaa881d22" offset="0x300000" loadflag="load16_word_swap" /> | |
19464 | 19762 | </dataarea> |
19465 | 19763 | </part> |
19466 | 19764 | </software> |
r20695 | r20696 | |
19587 | 19885 | </part> |
19588 | 19886 | </software> |
19589 | 19887 | |
19590 | <software name="sks1"> | |
19591 | <description>Sonic & Knuckles + Sonic the Hedgehog (World)</description> | |
19592 | <year>199?</year> | |
19593 | <publisher><unknown></publisher> | |
19594 | <part name="cart" interface="megadriv_cart"> | |
19595 | <dataarea name="rom" size="2621440"> | |
19596 | <!-- rom name="sonic & knuckles + sonic the hedgehog (world).bin" size="2621440" crc="e01f6ed5" sha1="a3084262f5af481df1a5c5ab03c4862551a53c91" offset="000000" loadflag="load16_word_swap" /--> | |
19597 | <rom name="mpr-16910-u.ic1" size="2097152" crc="0658f691" sha1="88d6499d874dcb5721ff58d76fe1b9af811192e3" offset="000000" loadflag="load16_word_swap" /> | |
19598 | <rom name="mpr-13913.ic1" size="524288" crc="f9394e97" sha1="6ddb7de1e17e7f6cdb88927bd906352030daa194" offset="0x200000" loadflag="load16_word_swap" /> | |
19599 | </dataarea> | |
19600 | </part> | |
19601 | </software> | |
19602 | ||
19603 | <software name="sks2"> | |
19604 | <description>Sonic & Knuckles + Sonic the Hedgehog 2 (World)</description> | |
19605 | <year>199?</year> | |
19606 | <publisher><unknown></publisher> | |
19607 | <part name="cart" interface="megadriv_cart"> | |
19608 | <dataarea name="rom" size="3407872"> | |
19609 | <!-- rom name="sonic & knuckles + sonic the hedgehog 2 (world).bin" size="3407872" crc="2ac1e7c6" sha1="6cd0537a3aee0e012bb86d5837ddff9342595004" offset="000000" loadflag="load16_word_swap" /--> | |
19610 | <rom name="mpr-16910-u.ic1" size="2097152" crc="0658f691" sha1="88d6499d874dcb5721ff58d76fe1b9af811192e3" offset="000000" loadflag="load16_word_swap" /> | |
19611 | <rom name="mpr-16911-s.ic2" size="262144" crc="4dcfd55c" sha1="70429f1d80503a0632f603bf762fe0bbaa881d22" offset="0x300000" loadflag="load16_word_swap" /> | |
19612 | <rom name="mpr-15000a.bin" size="1048576" crc="7b905383" sha1="8bca5dcef1af3e00098666fd892dc1c2a76333f9" offset="0x200000" loadflag="load16_word_swap" /> | |
19613 | </dataarea> | |
19614 | </part> | |
19615 | </software> | |
19616 | ||
19617 | 19888 | <software name="knucklp" cloneof="sks2"> |
19618 | 19889 | <description>Knuckles in Sonic 2 (Prototype 0524, 19940527, 10.46)</description> |
19619 | 19890 | <year>199?</year> |
r20695 | r20696 | |
19625 | 19896 | </part> |
19626 | 19897 | </software> |
19627 | 19898 | |
19628 | <software name="sks3"> | |
19629 | <description>Sonic & Knuckles + Sonic the Hedgehog 3 (World)</description> | |
19630 | <year>199?</year> | |
19631 | <publisher><unknown></publisher> | |
19632 | <part name="cart" interface="megadriv_cart"> | |
19633 | <dataarea name="rom" size="4194304"> | |
19634 | <!-- rom name="sonic & knuckles + sonic the hedgehog 3 (world).bin" size="4194304" crc="63522553" sha1="cfbf98c36c776677290a872547ac47c53d2761d6" offset="000000" loadflag="load16_word_swap" /--> | |
19635 | <rom name="mpr-16910-u.ic1" size="2097152" crc="0658f691" sha1="88d6499d874dcb5721ff58d76fe1b9af811192e3" offset="000000" loadflag="load16_word_swap" /> | |
19636 | <rom name="sonic the hedgehog 3 (usa).bin" size="2097152" crc="9bc192ce" sha1="75e9c4705259d84112b3e697a6c00a0813d47d71" offset="0x200000" loadflag="load16_word_swap" /> | |
19637 | </dataarea> | |
19638 | </part> | |
19639 | </software> | |
19640 | ||
19641 | 19899 | <software name="skp12" cloneof="sk"> |
19642 | 19900 | <description>Sonic & Knuckles (Prototype 0525, 19940525, 15.28)</description> |
19643 | 19901 | <year>1994</year> |
r20695 | r20696 | |
19655 | 19913 | <publisher><unknown></publisher> |
19656 | 19914 | <part name="cart" interface="megadriv_cart"> |
19657 | 19915 | <feature name="pcb_type" value="SEGA-FRAM" /> |
19916 | <feature name="slot" value="rom_fram" /> | |
19658 | 19917 | <dataarea name="rom" size="4194304"> |
19659 | 19918 | <rom name="sonic 3c (prototype 0408 - apr 08, 1994, 17.29).bin" size="4194304" crc="59d23df5" sha1="5f96ddccff1e95d82201687b939973c642a05394" offset="000000" loadflag="load16_word_swap" /> |
19660 | 19919 | </dataarea> |
r20695 | r20696 | |
19669 | 19928 | <publisher><unknown></publisher> |
19670 | 19929 | <part name="cart" interface="megadriv_cart"> |
19671 | 19930 | <feature name="pcb_type" value="SEGA-FRAM" /> |
19931 | <feature name="slot" value="rom_fram" /> | |
19672 | 19932 | <dataarea name="rom" size="4194304"> |
19673 | 19933 | <rom name="sonic 3c (prototype 0517 - may 17, 1994, 17.08).bin" size="4194304" crc="766c4b81" sha1="d6012af0f7856476892982e50b3d512d606dcb96" offset="000000" loadflag="load16_word_swap" /> |
19674 | 19934 | </dataarea> |
r20695 | r20696 | |
20053 | 20313 | <publisher><unlicensed></publisher> |
20054 | 20314 | <part name="cart" interface="megadriv_cart"> |
20055 | 20315 | <feature name="pcb_type" value="SEGA-FRAM" /> |
20316 | <feature name="slot" value="rom_fram" /> | |
20056 | 20317 | <dataarea name="rom" size="2097152"> |
20057 | 20318 | <rom name="sonic the hedgehog 3 (pirate).bin" size="2097152" crc="c818f6fd" sha1="bc2b67803bbba89a456a464e679cde4b4bb567fb" offset="000000" loadflag="load16_word_swap" /> |
20058 | 20319 | </dataarea> |
r20695 | r20696 | |
20067 | 20328 | <publisher>Sega</publisher> |
20068 | 20329 | <part name="cart" interface="megadriv_cart"> |
20069 | 20330 | <feature name="pcb_type" value="SEGA-FRAM" /> |
20331 | <feature name="slot" value="rom_fram" /> | |
20070 | 20332 | <dataarea name="rom" size="2097152"> |
20071 | 20333 | <rom name="sonic the hedgehog 3 (usa).bin" size="2097152" crc="9bc192ce" sha1="75e9c4705259d84112b3e697a6c00a0813d47d71" offset="000000" loadflag="load16_word_swap" /> |
20072 | 20334 | </dataarea> |
r20695 | r20696 | |
20081 | 20343 | <publisher>Treco</publisher> |
20082 | 20344 | <part name="cart" interface="megadriv_cart"> |
20083 | 20345 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20346 | <feature name="slot" value="rom_sram" /> | |
20084 | 20347 | <dataarea name="rom" size="1048576"> |
20085 | 20348 | <rom name="sorcerer's kingdom (usa) (v1.1).bin" size="1048576" crc="bb1fc9ce" sha1="87759abb603f1f97c2e136682dc78eea545338ce" offset="000000" loadflag="load16_word_swap" /> |
20086 | 20349 | </dataarea> |
r20695 | r20696 | |
20095 | 20358 | <publisher>Treco</publisher> |
20096 | 20359 | <part name="cart" interface="megadriv_cart"> |
20097 | 20360 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20361 | <feature name="slot" value="rom_sram" /> | |
20098 | 20362 | <dataarea name="rom" size="1048576"> |
20099 | 20363 | <rom name="sorcerer's kingdom (usa).bin" size="1048576" crc="cbe6c1ea" sha1="57322c1714fd4e42e1a10d56bfd795bcbc3380d7" offset="000000" loadflag="load16_word_swap" /> |
20100 | 20364 | </dataarea> |
r20695 | r20696 | |
20112 | 20376 | <info name="alt_title" value="ソーサルキングダム"/> |
20113 | 20377 | <part name="cart" interface="megadriv_cart"> |
20114 | 20378 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20379 | <feature name="slot" value="rom_sram" /> | |
20115 | 20380 | <dataarea name="rom" size="1048576"> |
20116 | 20381 | <rom name="sorcer kingdom (jpn).bin" size="1048576" crc="944135ca" sha1="16394aebece9d03f43505eab0827889e1c61857f" offset="000000" loadflag="load16_word_swap" /> |
20117 | 20382 | </dataarea> |
r20695 | r20696 | |
20129 | 20394 | <info name="alt_title" value="ソーサリアン"/> |
20130 | 20395 | <part name="cart" interface="megadriv_cart"> |
20131 | 20396 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20397 | <feature name="slot" value="rom_sram" /> | |
20132 | 20398 | <dataarea name="rom" size="524288"> |
20133 | 20399 | <rom name="mpr-12906.bin" size="524288" crc="a143a8c5" sha1="cbd7f0693a0d127138977da7cdf5a7f9440dfd43" offset="000000" loadflag="load16_word_swap" /> |
20134 | 20400 | </dataarea> |
r20695 | r20696 | |
20407 | 20673 | <publisher>Sega</publisher> |
20408 | 20674 | <part name="cart" interface="megadriv_cart"> |
20409 | 20675 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
20676 | <feature name="slot" value="rom_eeprom" /> | |
20410 | 20677 | <dataarea name="rom" size="1048576"> |
20411 | 20678 | <rom name="sports talk baseball (usa).bin" size="1048576" crc="0deb79c2" sha1="e223513d9bcecb49a6798720f3195dbd1c34681c" offset="000000" loadflag="load16_word_swap" /> |
20412 | 20679 | </dataarea> |
r20695 | r20696 | |
20455 | 20722 | <info name="alt_title" value="スタークルーザー"/> |
20456 | 20723 | <part name="cart" interface="megadriv_cart"> |
20457 | 20724 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20725 | <feature name="slot" value="rom_sram" /> | |
20458 | 20726 | <dataarea name="rom" size="524288"> |
20459 | 20727 | <rom name="star cruiser (jpn).bin" size="524288" crc="2b75b52f" sha1="cb099ecde141beffdfed6bb7f1d3dc6340da81d1" offset="000000" loadflag="load16_word_swap" /> |
20460 | 20728 | </dataarea> |
r20695 | r20696 | |
20491 | 20759 | <publisher>Sega</publisher> |
20492 | 20760 | <part name="cart" interface="megadriv_cart"> |
20493 | 20761 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20762 | <feature name="slot" value="rom_sram" /> | |
20494 | 20763 | <dataarea name="rom" size="2097152"> |
20495 | 20764 | <rom name="star trek - the next generation - echoes from the past (usa) (v1.1).bin" size="2097152" crc="ef840ef2" sha1="fe72aff307182dc6970048e88eaa5f03348781f5" offset="000000" loadflag="load16_word_swap" /> |
20496 | 20765 | </dataarea> |
r20695 | r20696 | |
20505 | 20774 | <publisher>Sega</publisher> |
20506 | 20775 | <part name="cart" interface="megadriv_cart"> |
20507 | 20776 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20777 | <feature name="slot" value="rom_sram" /> | |
20508 | 20778 | <dataarea name="rom" size="2097152"> |
20509 | 20779 | <rom name="star trek - the next generation - echoes from the past (usa).bin" size="2097152" crc="272153fb" sha1="ca0cf81784262fe6c00502cb495ede7daf3685c0" offset="000000" loadflag="load16_word_swap" /> |
20510 | 20780 | </dataarea> |
r20695 | r20696 | |
20520 | 20790 | <publisher>Sega</publisher> |
20521 | 20791 | <part name="cart" interface="megadriv_cart"> |
20522 | 20792 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20793 | <feature name="slot" value="rom_sram" /> | |
20523 | 20794 | <dataarea name="rom" size="2097152"> |
20524 | 20795 | <rom name="star trek - the next generation - echoes from the past (prototype - dec 28, 1994).bin" size="2097152" crc="3ba670f9" sha1="b3f800ae3009296614d1b0943b4245b4510a30f0" offset="000000" loadflag="load16_word_swap" /> |
20525 | 20796 | </dataarea> |
r20695 | r20696 | |
20535 | 20806 | <publisher>Sega</publisher> |
20536 | 20807 | <part name="cart" interface="megadriv_cart"> |
20537 | 20808 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20809 | <feature name="slot" value="rom_sram" /> | |
20538 | 20810 | <dataarea name="rom" size="2097152"> |
20539 | 20811 | <rom name="star trek - the next generation - echoes from the past (prototype - dec 29, 1994).bin" size="2097152" crc="316bbc43" sha1="e01d14c9dc9cd63800a793350e88af5de71b699b" offset="000000" loadflag="load16_word_swap" /> |
20540 | 20812 | </dataarea> |
r20695 | r20696 | |
20549 | 20821 | <publisher>Sega</publisher> |
20550 | 20822 | <part name="cart" interface="megadriv_cart"> |
20551 | 20823 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20824 | <feature name="slot" value="rom_sram" /> | |
20552 | 20825 | <dataarea name="rom" size="2097152"> |
20553 | 20826 | <rom name="star trek - the next generation - echoes from the past (prototype - jan 03, 1994).bin" size="2097152" crc="cac86b68" sha1="c6d702396d090b80fa1bb86b5079870de1c2dd70" offset="000000" loadflag="load16_word_swap" /> |
20554 | 20827 | </dataarea> |
r20695 | r20696 | |
20563 | 20836 | <publisher>Sega</publisher> |
20564 | 20837 | <part name="cart" interface="megadriv_cart"> |
20565 | 20838 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20839 | <feature name="slot" value="rom_sram" /> | |
20566 | 20840 | <dataarea name="rom" size="2097152"> |
20567 | 20841 | <rom name="star trek - the next generation - echoes from the past (prototype - jan 10, 1994).bin" size="2097152" crc="d138ca3e" sha1="4ed46dc5faafa8e92c753fcad5f37dd7c563e28c" offset="000000" loadflag="load16_word_swap" /> |
20568 | 20842 | </dataarea> |
r20695 | r20696 | |
20577 | 20851 | <publisher>Sega</publisher> |
20578 | 20852 | <part name="cart" interface="megadriv_cart"> |
20579 | 20853 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20854 | <feature name="slot" value="rom_sram" /> | |
20580 | 20855 | <dataarea name="rom" size="2097152"> |
20581 | 20856 | <rom name="star trek - the next generation - echoes from the past (prototype - jan 18, 1994).bin" size="2097152" crc="d8dab97a" sha1="94a7b71aada60f0a622f6156a31f22700c484505" offset="000000" loadflag="load16_word_swap" /> |
20582 | 20857 | </dataarea> |
r20695 | r20696 | |
20591 | 20866 | <publisher>Sega</publisher> |
20592 | 20867 | <part name="cart" interface="megadriv_cart"> |
20593 | 20868 | <feature name="pcb_type" value="SEGA-SRAM" /> |
20869 | <feature name="slot" value="rom_sram" /> | |
20594 | 20870 | <dataarea name="rom" size="2097152"> |
20595 | 20871 | <rom name="star trek - the next generation - echoes from the past (prototype - jan 25, 1994).bin" size="2097152" crc="63f29e6f" sha1="7e1b9bd971088d083c4f9447ae5daff50bcc67c2" offset="000000" loadflag="load16_word_swap" /> |
20596 | 20872 | </dataarea> |
r20695 | r20696 | |
20721 | 20997 | <publisher>Sega</publisher> |
20722 | 20998 | <part name="cart" interface="megadriv_cart"> |
20723 | 20999 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21000 | <feature name="slot" value="rom_sram" /> | |
20724 | 21001 | <dataarea name="rom" size="3145728"> |
20725 | 21002 | <rom name="mpr-17588+mpr-17606.bin" size="3145728" crc="1110b0db" sha1="178ef742dad227d4128fa81dddb116bad0cabe1d" offset="000000" loadflag="load16_word_swap" /> |
20726 | 21003 | </dataarea> |
r20695 | r20696 | |
20735 | 21012 | <publisher>Sega</publisher> |
20736 | 21013 | <part name="cart" interface="megadriv_cart"> |
20737 | 21014 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21015 | <feature name="slot" value="rom_sram" /> | |
20738 | 21016 | <dataarea name="rom" size="3145728"> |
20739 | 21017 | <rom name="story of thor, the (germany).bin" size="3145728" crc="fa20d011" sha1="a82ffb7c4bf4b0f89f42a9cdc6600bc5bac1c854" offset="000000" loadflag="load16_word_swap" /> |
20740 | 21018 | </dataarea> |
r20695 | r20696 | |
20752 | 21030 | <info name="alt_title" value="ストーリー オブ トア 〜光を継ぐ者〜"/> |
20753 | 21031 | <part name="cart" interface="megadriv_cart"> |
20754 | 21032 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21033 | <feature name="slot" value="rom_sram" /> | |
20755 | 21034 | <dataarea name="rom" size="3145728"> |
20756 | 21035 | <rom name="story of thor, the - hikari o tsugumono (jpn).bin" size="3145728" crc="4f39783c" sha1="54296f5cf1917c568bb29b0086641c282b8884bd" offset="000000" loadflag="load16_word_swap" /> |
20757 | 21036 | </dataarea> |
r20695 | r20696 | |
20779 | 21058 | <publisher>Sega</publisher> |
20780 | 21059 | <part name="cart" interface="megadriv_cart"> |
20781 | 21060 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21061 | <feature name="slot" value="rom_sram" /> | |
20782 | 21062 | <dataarea name="rom" size="3145728"> |
20783 | 21063 | <rom name="story of thor, the (kor).bin" size="3145728" crc="ee1603c5" sha1="e0a43fb3d6da940b1fda449753bffae637a802cd" offset="000000" loadflag="load16_word_swap" /> |
20784 | 21064 | </dataarea> |
r20695 | r20696 | |
20793 | 21073 | <publisher>Sega</publisher> |
20794 | 21074 | <part name="cart" interface="megadriv_cart"> |
20795 | 21075 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21076 | <feature name="slot" value="rom_sram" /> | |
20796 | 21077 | <dataarea name="rom" size="3145728"> |
20797 | 21078 | <rom name="story of thor, the (prototype - oct 04, 1994).bin" size="3145728" crc="9e486f91" sha1="499dd47c325874a231a8d8430aca0bb6feeb3dcd" offset="000000" loadflag="load16_word_swap" /> |
20798 | 21079 | </dataarea> |
r20695 | r20696 | |
20807 | 21088 | <publisher>Sega</publisher> |
20808 | 21089 | <part name="cart" interface="megadriv_cart"> |
20809 | 21090 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21091 | <feature name="slot" value="rom_sram" /> | |
20810 | 21092 | <dataarea name="rom" size="3145728"> |
20811 | 21093 | <rom name="story of thor, the (prototype - oct 17, 1994).bin" size="3145728" crc="aa43d34a" sha1="e4b25941aefb58073784616acf7ca7458b213bee" offset="000000" loadflag="load16_word_swap" /> |
20812 | 21094 | </dataarea> |
r20695 | r20696 | |
20821 | 21103 | <publisher>Sega</publisher> |
20822 | 21104 | <part name="cart" interface="megadriv_cart"> |
20823 | 21105 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21106 | <feature name="slot" value="rom_sram" /> | |
20824 | 21107 | <dataarea name="rom" size="3145728"> |
20825 | 21108 | <rom name="beyond oasis (prototype - nov 01, 1994).bin" size="3145728" crc="fa59f847" sha1="cb0606faeab0398244d4721d71cf7e1c5724a9ef" offset="000000" loadflag="load16_word_swap" /> |
20826 | 21109 | </dataarea> |
r20695 | r20696 | |
20835 | 21118 | <publisher>Sega</publisher> |
20836 | 21119 | <part name="cart" interface="megadriv_cart"> |
20837 | 21120 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21121 | <feature name="slot" value="rom_sram" /> | |
20838 | 21122 | <dataarea name="rom" size="3145728"> |
20839 | 21123 | <rom name="story of thor, the (spain).bin" size="3145728" crc="4631f941" sha1="0fcc02355176e1c96043f4d827a3ff88d2d272df" offset="000000" loadflag="load16_word_swap" /> |
20840 | 21124 | </dataarea> |
r20695 | r20696 | |
20849 | 21133 | <publisher>Sega</publisher> |
20850 | 21134 | <part name="cart" interface="megadriv_cart"> |
20851 | 21135 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21136 | <feature name="slot" value="rom_sram" /> | |
20852 | 21137 | <dataarea name="rom" size="3145728"> |
20853 | 21138 | <rom name="beyond oasis (usa).bin" size="3145728" crc="c4728225" sha1="2944910c07c02eace98c17d78d07bef7859d386a" offset="000000" loadflag="load16_word_swap" /> |
20854 | 21139 | </dataarea> |
r20695 | r20696 | |
21255 | 21540 | <publisher>Sega</publisher> |
21256 | 21541 | <part name="cart" interface="megadriv_cart"> |
21257 | 21542 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21543 | <feature name="slot" value="rom_sram" /> | |
21258 | 21544 | <dataarea name="rom" size="2097152"> |
21259 | 21545 | <rom name="striker (euro).bin" size="2097152" crc="cc5d7ab2" sha1="9917c35a263cc9bd922d55bf59d01bc2733b4e24" offset="000000" loadflag="load16_word_swap" /> |
21260 | 21546 | </dataarea> |
r20695 | r20696 | |
21269 | 21555 | <publisher>Sega</publisher> |
21270 | 21556 | <part name="cart" interface="megadriv_cart"> |
21271 | 21557 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21558 | <feature name="slot" value="rom_sram" /> | |
21272 | 21559 | <dataarea name="rom" size="2097152"> |
21273 | 21560 | <rom name="striker (euro) (beta).bin" size="2097152" crc="c10b270e" sha1="128395e635e948005e89c7f4a6cd5b209be1ffbc" offset="000000" loadflag="load16_word_swap" /> |
21274 | 21561 | </dataarea> |
r20695 | r20696 | |
21432 | 21719 | <info name="alt_title" value="スーパー大戦略"/> |
21433 | 21720 | <part name="cart" interface="megadriv_cart"> |
21434 | 21721 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21722 | <feature name="slot" value="rom_sram" /> | |
21435 | 21723 | <dataarea name="rom" size="524288"> |
21436 | 21724 | <rom name="mpr-12477.bin" size="524288" crc="d50a166f" sha1="56d9366b50cea65b16ed621b9a5bf355ef89e6b5" offset="000000" loadflag="load16_word_swap" /> |
21437 | 21725 | </dataarea> |
r20695 | r20696 | |
21510 | 21798 | <publisher>Sega</publisher> |
21511 | 21799 | <part name="cart" interface="megadriv_cart"> |
21512 | 21800 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21801 | <feature name="slot" value="rom_sram" /> | |
21513 | 21802 | <dataarea name="rom" size="524288"> |
21514 | 21803 | <rom name="super hydlide (euro).bin" size="524288" crc="1fe2d90b" sha1="6c0a4b72b90ecfe8c324691bc6e54243746043c1" offset="000000" loadflag="load16_word_swap" /> |
21515 | 21804 | </dataarea> |
r20695 | r20696 | |
21538 | 21827 | <publisher>Seismic</publisher> |
21539 | 21828 | <part name="cart" interface="megadriv_cart"> |
21540 | 21829 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21830 | <feature name="slot" value="rom_sram" /> | |
21541 | 21831 | <dataarea name="rom" size="524288"> |
21542 | 21832 | <rom name="super hydlide (usa).bin" size="524288" crc="1335ddaa" sha1="5ff65139c7e10539dd5a12bdf56073504c998471" offset="000000" loadflag="load16_word_swap" /> |
21543 | 21833 | </dataarea> |
r20695 | r20696 | |
21552 | 21842 | <publisher>U.S. Gold</publisher> |
21553 | 21843 | <part name="cart" interface="megadriv_cart"> |
21554 | 21844 | <feature name="pcb_type" value="SEGA-SRAM" /> |
21845 | <feature name="slot" value="rom_sram" /> | |
21555 | 21846 | <dataarea name="rom" size="524288"> |
21556 | 21847 | <rom name="mpr-15420.bin" size="524288" crc="f43793ff" sha1="4e270b13a399d78d919157e50ab11f4645aa6d32" offset="000000" loadflag="load16_word_swap" /> |
21557 | 21848 | </dataarea> |
r20695 | r20696 | |
21732 | 22023 | <publisher>Capcom</publisher> |
21733 | 22024 | <part name="cart" interface="megadriv_cart"> |
21734 | 22025 | <feature name="pcb_type" value="SSF2" /> |
21735 | <dataarea name="rom" size="20971520"> | |
22026 | <feature name="slot" value="rom_ssf2" /> | |
22027 | <dataarea name="rom" size="9437184"> | |
21736 | 22028 | <rom name="super street fighter ii - the new challengers (euro).bin" size="5242880" crc="682c192f" sha1="56768a0524fa13fcd76474c8bb89b995bb471847" offset="00000" loadflag="load16_word_swap" /> |
21737 | 22029 | </dataarea> |
21738 | 22030 | </part> |
r20695 | r20696 | |
21747 | 22039 | <info name="alt_title" value="スーパーストリートファイターII The New Challengers"/> |
21748 | 22040 | <part name="cart" interface="megadriv_cart"> |
21749 | 22041 | <feature name="pcb_type" value="SSF2" /> |
21750 | <dataarea name="rom" size="20971520"> | |
22042 | <feature name="slot" value="rom_ssf2" /> | |
22043 | <dataarea name="rom" size="5242880"> | |
21751 | 22044 | <rom name="super street fighter ii - the new challengers (jpn).bin" size="5242880" crc="d8eeb2bd" sha1="24c8634f59a481118f8350125fa6e00d33e04c95" offset="00000" loadflag="load16_word_swap" /> |
21752 | 22045 | </dataarea> |
21753 | 22046 | </part> |
r20695 | r20696 | |
21759 | 22052 | <publisher>Capcom</publisher> |
21760 | 22053 | <part name="cart" interface="megadriv_cart"> |
21761 | 22054 | <feature name="pcb_type" value="SSF2" /> |
21762 | <dataarea name="rom" size="20971520"> | |
22055 | <feature name="slot" value="rom_ssf2" /> | |
22056 | <dataarea name="rom" size="5242880"> | |
21763 | 22057 | <rom name="super street fighter ii - the new challengers (usa).bin" size="5242880" crc="165defbf" sha1="9ce6e69db9d28386f7542dacd3e3ead28eacf2a4" offset="00000" loadflag="load16_word_swap" /> |
21764 | 22058 | </dataarea> |
21765 | 22059 | </part> |
r20695 | r20696 | |
21857 | 22151 | <info name="alt_title" value="サージングオーラ"/> |
21858 | 22152 | <part name="cart" interface="megadriv_cart"> |
21859 | 22153 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22154 | <feature name="slot" value="rom_sram" /> | |
21860 | 22155 | <dataarea name="rom" size="2097152"> |
21861 | 22156 | <rom name="surging aura (jpn).bin" size="2097152" crc="65ac1d2b" sha1="9f14cd11cfa499cdd58248de81db30f9308326e5" offset="000000" loadflag="load16_word_swap" /> |
21862 | 22157 | </dataarea> |
r20695 | r20696 | |
21932 | 22227 | <publisher>Sega</publisher> |
21933 | 22228 | <part name="cart" interface="megadriv_cart"> |
21934 | 22229 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22230 | <feature name="slot" value="rom_sram" /> | |
21935 | 22231 | <dataarea name="rom" size="655360"> |
21936 | 22232 | <rom name="mpr-13430+mpr-13431.bin" size="655360" crc="ea1bc9ab" sha1="c18fc75e0c5fa0e98c8664903e978ec4f73ef5d2" offset="000000" loadflag="load16_word_swap" /> |
21937 | 22233 | </dataarea> |
r20695 | r20696 | |
21949 | 22245 | <info name="alt_title" value="ヴァーミリオン"/> |
21950 | 22246 | <part name="cart" interface="megadriv_cart"> |
21951 | 22247 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22248 | <feature name="slot" value="rom_sram" /> | |
21952 | 22249 | <dataarea name="rom" size="655360"> |
21953 | 22250 | <rom name="vermilion (jpn).bin" size="655360" crc="e400dfc3" sha1="697fb165051179a2bbca77c8cfd0c929e334f8c1" offset="000000" loadflag="load16_word_swap" /> |
21954 | 22251 | </dataarea> |
r20695 | r20696 | |
22047 | 22344 | <info name="alt_title" value="太閤立志伝"/> |
22048 | 22345 | <part name="cart" interface="megadriv_cart"> |
22049 | 22346 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22347 | <feature name="slot" value="rom_sram" /> | |
22050 | 22348 | <dataarea name="rom" size="1310720"> |
22051 | 22349 | <rom name="taikou risshiden (jpn).bin" size="1310720" crc="f96fe15b" sha1="a96d6492d4e89687d970bc010eb0b93ee2481a44" offset="000000" loadflag="load16_word_swap" /> |
22052 | 22350 | </dataarea> |
r20695 | r20696 | |
22245 | 22543 | <publisher>Tecmo</publisher> |
22246 | 22544 | <part name="cart" interface="megadriv_cart"> |
22247 | 22545 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22546 | <feature name="slot" value="rom_sram" /> | |
22248 | 22547 | <dataarea name="rom" size="1048576"> |
22249 | 22548 | <rom name="tecmo super baseball (usa).bin" size="1048576" crc="227a1178" sha1="f2ecc7b32cef29f22eb4a21a22be122bd4bad212" offset="000000" loadflag="load16_word_swap" /> |
22250 | 22549 | </dataarea> |
r20695 | r20696 | |
22259 | 22558 | <publisher>Tecmo</publisher> |
22260 | 22559 | <part name="cart" interface="megadriv_cart"> |
22261 | 22560 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22561 | <feature name="slot" value="rom_sram" /> | |
22262 | 22562 | <dataarea name="rom" size="1048576"> |
22263 | 22563 | <rom name="tecmo super bowl (usa) (october 1993).bin" size="1048576" crc="21f27d34" sha1="8d34ffac312caeac853876415c74ab6fe63d8dc2" offset="000000" loadflag="load16_word_swap" /> |
22264 | 22564 | </dataarea> |
r20695 | r20696 | |
22273 | 22573 | <publisher>Tecmo</publisher> |
22274 | 22574 | <part name="cart" interface="megadriv_cart"> |
22275 | 22575 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22576 | <feature name="slot" value="rom_sram" /> | |
22276 | 22577 | <dataarea name="rom" size="1048576"> |
22277 | 22578 | <rom name="tecmo super bowl (usa) (september 1993).bin" size="1048576" crc="bd5933ee" sha1="529b8e86b97c326592540f5e427198a205c127d0" offset="000000" loadflag="load16_word_swap" /> |
22278 | 22579 | </dataarea> |
r20695 | r20696 | |
22290 | 22591 | <info name="alt_title" value="テクモスーパーボウル"/> |
22291 | 22592 | <part name="cart" interface="megadriv_cart"> |
22292 | 22593 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22594 | <feature name="slot" value="rom_sram" /> | |
22293 | 22595 | <dataarea name="rom" size="1048576"> |
22294 | 22596 | <rom name="tecmo super bowl (jpn).bin" size="1048576" crc="90c6e20c" sha1="477880e7976ac0f7203fddabba4a6e8799aa604d" offset="000000" loadflag="load16_word_swap" /> |
22295 | 22597 | </dataarea> |
r20695 | r20696 | |
22305 | 22607 | <publisher>Tecmo</publisher> |
22306 | 22608 | <part name="cart" interface="megadriv_cart"> |
22307 | 22609 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22610 | <feature name="slot" value="rom_sram" /> | |
22308 | 22611 | <dataarea name="rom" size="2097152"> |
22309 | 22612 | <rom name="tecmo super bowl ii - special edition (usa).bin" size="2097152" crc="0a0e67d8" sha1="5fadb2a0e780ec868671b0e888fad5d7c203f59f" offset="000000" loadflag="load16_word_swap" /> |
22310 | 22613 | </dataarea> |
r20695 | r20696 | |
22322 | 22625 | <info name="alt_title" value="テクモ スーパーボウルII スペシャルエディション"/> |
22323 | 22626 | <part name="cart" interface="megadriv_cart"> |
22324 | 22627 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22628 | <feature name="slot" value="rom_sram" /> | |
22325 | 22629 | <dataarea name="rom" size="2097152"> |
22326 | 22630 | <rom name="tecmo super bowl ii - special edition (jpn).bin" size="2097152" crc="32fb633d" sha1="cb9e8cc1651b719054f05e1e1a9e0fbbc3876ebd" offset="000000" loadflag="load16_word_swap" /> |
22327 | 22631 | </dataarea> |
r20695 | r20696 | |
22336 | 22640 | <publisher>Tecmo</publisher> |
22337 | 22641 | <part name="cart" interface="megadriv_cart"> |
22338 | 22642 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22643 | <feature name="slot" value="rom_sram" /> | |
22339 | 22644 | <dataarea name="rom" size="2097152"> |
22340 | 22645 | <rom name="tecmo super bowl iii - final edition (usa).bin" size="2097152" crc="aae4089f" sha1="d5d1609cdf72d98f5e5daa47a9585ae7ca87a410" offset="000000" loadflag="load16_word_swap" /> |
22341 | 22646 | </dataarea> |
r20695 | r20696 | |
22350 | 22655 | <publisher>Tecmo</publisher> |
22351 | 22656 | <part name="cart" interface="megadriv_cart"> |
22352 | 22657 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22658 | <feature name="slot" value="rom_sram" /> | |
22353 | 22659 | <dataarea name="rom" size="1048576"> |
22354 | 22660 | <rom name="tecmo super hockey (usa).bin" size="1048576" crc="5f86ddc9" sha1="4d4fd22d2fafd7e56790029be9b02e61995df11c" offset="000000" loadflag="load16_word_swap" /> |
22355 | 22661 | </dataarea> |
r20695 | r20696 | |
22364 | 22670 | <publisher>Tecmo</publisher> |
22365 | 22671 | <part name="cart" interface="megadriv_cart"> |
22366 | 22672 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22673 | <feature name="slot" value="rom_sram" /> | |
22367 | 22674 | <dataarea name="rom" size="1048576"> |
22368 | 22675 | <rom name="tecmo super nba basketball (usa).bin" size="1048576" crc="53913991" sha1="ac7aa724d6464fbd8e3144a49f3821ff6e42f67a" offset="000000" loadflag="load16_word_swap" /> |
22369 | 22676 | </dataarea> |
r20695 | r20696 | |
22381 | 22688 | <info name="alt_title" value="テクモ スーパーNBAバスケットボール"/> |
22382 | 22689 | <part name="cart" interface="megadriv_cart"> |
22383 | 22690 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22691 | <feature name="slot" value="rom_sram" /> | |
22384 | 22692 | <dataarea name="rom" size="1048576"> |
22385 | 22693 | <rom name="tecmo super nba basketball (jpn).bin" size="1048576" crc="79f33eb6" sha1="07f160e6eb7e358f54e4fdabfc95bb5525c57fc9" offset="000000" loadflag="load16_word_swap" /> |
22386 | 22694 | </dataarea> |
r20695 | r20696 | |
22531 | 22839 | <info name="alt_title" value="TEL・TELスタジアム"/> |
22532 | 22840 | <part name="cart" interface="megadriv_cart"> |
22533 | 22841 | <feature name="pcb_type" value="SEGA-SRAM" /> |
22842 | <feature name="slot" value="rom_sram" /> | |
22534 | 22843 | <dataarea name="rom" size="524288"> |
22535 | 22844 | <rom name="md-tsd.bin" size="524288" crc="54cf8c29" sha1="2924ed0b4266edddbb981f97acb93bbdf90494e6" offset="000000" loadflag="load16_word_swap" /> |
22536 | 22845 | </dataarea> |
r20695 | r20696 | |
22849 | 23158 | <publisher>American Softworks</publisher> |
22850 | 23159 | <part name="cart" interface="megadriv_cart"> |
22851 | 23160 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23161 | <feature name="slot" value="rom_sram" /> | |
22852 | 23162 | <dataarea name="rom" size="1048576"> |
22853 | 23163 | <rom name="tnn bass tournament of champions (usa).bin" size="1048576" crc="c83ffa1b" sha1="f76acb6d5da07377685d42daf1ce4ca53be5d6b9" offset="000000" loadflag="load16_word_swap" /> |
22854 | 23164 | </dataarea> |
r20695 | r20696 | |
22863 | 23173 | <publisher>American Softworks</publisher> |
22864 | 23174 | <part name="cart" interface="megadriv_cart"> |
22865 | 23175 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23176 | <feature name="slot" value="rom_sram" /> | |
22866 | 23177 | <dataarea name="rom" size="2097152"> |
22867 | 23178 | <rom name="tnn outdoors bass tournament '96 (usa).bin" size="2097152" crc="5c523c0b" sha1="0ca72f28e88675066c466246977143599240b09f" offset="000000" loadflag="load16_word_swap" /> |
22868 | 23179 | </dataarea> |
r20695 | r20696 | |
23024 | 23335 | <publisher>Electronic Arts</publisher> |
23025 | 23336 | <part name="cart" interface="megadriv_cart"> |
23026 | 23337 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23338 | <feature name="slot" value="rom_sram" /> | |
23027 | 23339 | <dataarea name="rom" size="1048576"> |
23028 | 23340 | <rom name="tony la russa baseball (usa, aus).bin" size="1048576" crc="24629c78" sha1="0e3f7ebf8661cac9bd7a0c5af64f260e7b5f0a0b" offset="000000" loadflag="load16_word_swap" /> |
23029 | 23341 | </dataarea> |
r20695 | r20696 | |
23156 | 23468 | <publisher>Renovation</publisher> |
23157 | 23469 | <part name="cart" interface="megadriv_cart"> |
23158 | 23470 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23471 | <feature name="slot" value="rom_sram" /> | |
23159 | 23472 | <dataarea name="rom" size="1048576"> |
23160 | 23473 | <rom name="traysia (usa).bin" size="1048576" crc="96184f4f" sha1="ff0efe6da308919f843a7593e8af7fae82160b0b" offset="000000" loadflag="load16_word_swap" /> |
23161 | 23474 | </dataarea> |
r20695 | r20696 | |
23173 | 23486 | <info name="alt_title" value="港のトレイジア"/> |
23174 | 23487 | <part name="cart" interface="megadriv_cart"> |
23175 | 23488 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23489 | <feature name="slot" value="rom_sram" /> | |
23176 | 23490 | <dataarea name="rom" size="1048576"> |
23177 | 23491 | <rom name="minato no traysia (jpn).bin" size="1048576" crc="bd89fd09" sha1="dea227a41a5ba28f8c8ea75cba12965bbc5ff8da" offset="000000" loadflag="load16_word_swap" /> |
23178 | 23492 | </dataarea> |
r20695 | r20696 | |
23187 | 23501 | <publisher>Electronic Arts</publisher> |
23188 | 23502 | <part name="cart" interface="megadriv_cart"> |
23189 | 23503 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23504 | <feature name="slot" value="rom_sram" /> | |
23190 | 23505 | <dataarea name="rom" size="4194304"> |
23191 | 23506 | <rom name="triple play '96 (usa).bin" size="4194304" crc="f1748e91" sha1="c0981b524d5e1c5368f9e74a4ce9c57d87fe323a" offset="000000" loadflag="load16_word_swap" /> |
23192 | 23507 | </dataarea> |
r20695 | r20696 | |
23201 | 23516 | <publisher>Electronic Arts</publisher> |
23202 | 23517 | <part name="cart" interface="megadriv_cart"> |
23203 | 23518 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23519 | <feature name="slot" value="rom_sram" /> | |
23204 | 23520 | <dataarea name="rom" size="4194304"> |
23205 | 23521 | <rom name="triple play gold (usa).bin" size="4194304" crc="bbe69017" sha1="007bee242384db1887c5831657470584ff77a163" offset="000000" loadflag="load16_word_swap" /> |
23206 | 23522 | </dataarea> |
r20695 | r20696 | |
23215 | 23531 | <publisher>Electronic Arts</publisher> |
23216 | 23532 | <part name="cart" interface="megadriv_cart"> |
23217 | 23533 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23534 | <feature name="slot" value="rom_sram" /> | |
23218 | 23535 | <dataarea name="rom" size="4194304"> |
23219 | 23536 | <rom name="triple play gold (usa) (alt).bin" size="4194304" crc="a89638a0" sha1="cb7f4b9b89fbf6162d7d4182229c8ac473f91cf4" offset="000000" loadflag="load16_word_swap" /> |
23220 | 23537 | </dataarea> |
r20695 | r20696 | |
23254 | 23571 | <publisher>Tradewest</publisher> |
23255 | 23572 | <part name="cart" interface="megadriv_cart"> |
23256 | 23573 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23574 | <feature name="slot" value="rom_sram" /> | |
23257 | 23575 | <dataarea name="rom" size="2097152"> |
23258 | 23576 | <rom name="troy aikman nfl football (usa).bin" size="2097152" crc="015f2713" sha1="820efb4a4d3d29036911d9077bb6c0a4ce7f36d4" offset="000000" loadflag="load16_word_swap" /> |
23259 | 23577 | </dataarea> |
r20695 | r20696 | |
23501 | 23819 | <publisher>Koei</publisher> |
23502 | 23820 | <part name="cart" interface="megadriv_cart"> |
23503 | 23821 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23822 | <feature name="slot" value="rom_sram" /> | |
23504 | 23823 | <dataarea name="rom" size="1048576"> |
23505 | 23824 | <rom name="uncharted waters (usa).bin" size="1048576" crc="4edaec59" sha1="a76cf7dd06784cba15fa0c3be0ae92cba71ccade" offset="000000" loadflag="load16_word_swap" /> |
23506 | 23825 | </dataarea> |
r20695 | r20696 | |
23518 | 23837 | <info name="alt_title" value="大航海時代"/> |
23519 | 23838 | <part name="cart" interface="megadriv_cart"> |
23520 | 23839 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23840 | <feature name="slot" value="rom_sram" /> | |
23521 | 23841 | <dataarea name="rom" size="1048576"> |
23522 | 23842 | <rom name="daikoukai jidai (jpn).bin" size="1048576" crc="5a652458" sha1="a4552b23079b161da9ad47ac7cb9c4ecb3731967" offset="000000" loadflag="load16_word_swap" /> |
23523 | 23843 | </dataarea> |
r20695 | r20696 | |
23532 | 23852 | <publisher>Koei</publisher> |
23533 | 23853 | <part name="cart" interface="megadriv_cart"> |
23534 | 23854 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23855 | <feature name="slot" value="rom_sram" /> | |
23535 | 23856 | <dataarea name="rom" size="2097152"> |
23536 | 23857 | <rom name="uncharted waters - new horizons (usa).bin" size="2097152" crc="ead69824" sha1="9fd375cd212a132db24c40a8977c50d0f7b81524" offset="000000" loadflag="load16_word_swap" /> |
23537 | 23858 | </dataarea> |
r20695 | r20696 | |
23549 | 23870 | <info name="alt_title" value="大航海時代II"/> |
23550 | 23871 | <part name="cart" interface="megadriv_cart"> |
23551 | 23872 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23873 | <feature name="slot" value="rom_sram" /> | |
23552 | 23874 | <dataarea name="rom" size="2097152"> |
23553 | 23875 | <rom name="daikoukai jidai ii (jpn).bin" size="2097152" crc="e040f0da" sha1="74f61092067d82127cae3306d5a66d3efe946bc3" offset="000000" loadflag="load16_word_swap" /> |
23554 | 23876 | </dataarea> |
r20695 | r20696 | |
23588 | 23910 | <publisher>Accolade</publisher> |
23589 | 23911 | <part name="cart" interface="megadriv_cart"> |
23590 | 23912 | <feature name="pcb_type" value="SEGA-SRAM" /> |
23913 | <feature name="slot" value="rom_sram" /> | |
23591 | 23914 | <dataarea name="rom" size="2097152"> |
23592 | 23915 | <rom name="unnecessary roughness 95 (usa).bin" size="2097152" crc="9920e7b7" sha1="7e100cb56c30498c1fee3867ff3612567287b656" offset="000000" loadflag="load16_word_swap" /> |
23593 | 23916 | </dataarea> |
r20695 | r20696 | |
23959 | 24282 | <publisher>Electronic Arts</publisher> |
23960 | 24283 | <part name="cart" interface="megadriv_cart"> |
23961 | 24284 | <feature name="pcb_type" value="SEGA-SRAM" /> |
24285 | <feature name="slot" value="rom_sram" /> | |
23962 | 24286 | <dataarea name="rom" size="1048576"> |
23963 | 24287 | <rom name="virtual pinball (euro, usa).bin" size="1048576" crc="d63473aa" sha1="cd066bb54e0a4c21821639728893462b0218597e" offset="000000" loadflag="load16_word_swap" /> |
23964 | 24288 | </dataarea> |
r20695 | r20696 | |
23976 | 24300 | <info name="alt_title" value="ヴィクセン357"/> |
23977 | 24301 | <part name="cart" interface="megadriv_cart"> |
23978 | 24302 | <feature name="pcb_type" value="SEGA-SRAM" /> |
24303 | <feature name="slot" value="rom_sram" /> | |
23979 | 24304 | <dataarea name="rom" size="1048576"> |
23980 | 24305 | <rom name="vixen 357 (jpn).bin" size="1048576" crc="3afa2d7b" sha1="460037301df0d67947bd17eddb38a3011896cb43" offset="000000" loadflag="load16_word_swap" /> |
23981 | 24306 | </dataarea> |
r20695 | r20696 | |
24013 | 24338 | <info name="alt_title" value="Wacky Worlds Creativity Studio (Box)"/> |
24014 | 24339 | <part name="cart" interface="megadriv_cart"> |
24015 | 24340 | <feature name="pcb_type" value="SEGA-SRAM" /> |
24341 | <feature name="slot" value="rom_sram" /> | |
24016 | 24342 | <dataarea name="rom" size="1048576"> |
24017 | 24343 | <rom name="wacky worlds (usa).bin" size="1048576" crc="8af4552d" sha1="e331c57ce6a176ab9ff1461e9423514756c5558d" offset="000000" loadflag="load16_word_swap" /> |
24018 | 24344 | </dataarea> |
r20695 | r20696 | |
24157 | 24483 | <publisher>Micronet</publisher> |
24158 | 24484 | <part name="cart" interface="megadriv_cart"> |
24159 | 24485 | <feature name="pcb_type" value="SEGA-SRAM" /> |
24486 | <feature name="slot" value="rom_sram" /> | |
24160 | 24487 | <dataarea name="rom" size="1048576"> |
24161 | 24488 | <rom name="warrior of rome ii (usa).bin" size="1048576" crc="cd8c472a" sha1="fe4e3684212f1e695bdf4a4c41999fac773259f4" offset="000000" loadflag="load16_word_swap" /> |
24162 | 24489 | </dataarea> |
r20695 | r20696 | |
24174 | 24501 | <info name="alt_title" value="シーザーの野望II"/> |
24175 | 24502 | <part name="cart" interface="megadriv_cart"> |
24176 | 24503 | <feature name="pcb_type" value="SEGA-SRAM" /> |
24504 | <feature name="slot" value="rom_sram" /> | |
24177 | 24505 | <dataarea name="rom" size="1048576"> |
24178 | 24506 | <rom name="caesar no yabou ii (jpn).bin" size="1048576" crc="4f327b3a" sha1="cdb2f47bde3ff412c7b1f560637f2ccec023980f" offset="000000" loadflag="load16_word_swap" /> |
24179 | 24507 | </dataarea> |
r20695 | r20696 | |
24188 | 24516 | <publisher>Treco</publisher> |
24189 | 24517 | <part name="cart" interface="megadriv_cart"> |
24190 | 24518 | <feature name="pcb_type" value="SEGA-SRAM" /> |
24519 | <feature name="slot" value="rom_sram" /> | |
24191 | 24520 | <dataarea name="rom" size="524288"> |
24192 | 24521 | <rom name="warsong (usa).bin" size="524288" crc="4b680285" sha1="9b13a85f39b3f4cc31f54077df29bbe812405a08" offset="000000" loadflag="load16_word_swap" /> |
24193 | 24522 | </dataarea> |
r20695 | r20696 | |
24213 | 24542 | <publisher>Time Warner Interactive</publisher> |
24214 | 24543 | <part name="cart" interface="megadriv_cart"> |
24215 | 24544 | <feature name="pcb_type" value="SEGA-SRAM" /> |
24545 | <feature name="slot" value="rom_sram" /> | |
24216 | 24546 | <dataarea name="rom" size="2097152"> |
24217 | 24547 | <rom name="wayne gretzky and the nhlpa all-stars (euro, usa).bin" size="2097152" crc="c2c13b81" sha1="0b068f684e206139bcd592daba4613cbf634dd56" offset="000000" loadflag="load16_word_swap" /> |
24218 | 24548 | </dataarea> |
r20695 | r20696 | |
24525 | 24855 | <publisher>Sega</publisher> |
24526 | 24856 | <part name="cart" interface="megadriv_cart"> |
24527 | 24857 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
24858 | <feature name="slot" value="rom_eeprom" /> | |
24528 | 24859 | <dataarea name="rom" size="786432"> |
24529 | 24860 | <rom name="mpr-14556.bin" size="786432" crc="1592f5b0" sha1="87a968f773c7e807e647c0737132457b06b78276" offset="000000" loadflag="load16_word_swap" /> |
24530 | 24861 | </dataarea> |
r20695 | r20696 | |
24540 | 24871 | <info name="alt_title" value="ワンダーボーイV モンスターワールドIII"/> |
24541 | 24872 | <part name="cart" interface="megadriv_cart"> |
24542 | 24873 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
24874 | <feature name="slot" value="rom_eeprom" /> | |
24543 | 24875 | <dataarea name="rom" size="655360"> |
24544 | 24876 | <rom name="wonder boy v - monster world iii (jpn, kor).bin" size="655360" crc="45a50f96" sha1="1582f159e1969ff0541319a9bd7e6f7a53505d01" offset="000000" loadflag="load16_word_swap" /> |
24545 | 24877 | </dataarea> |
r20695 | r20696 | |
24552 | 24884 | <publisher>Tec Toy</publisher> |
24553 | 24885 | <part name="cart" interface="megadriv_cart"> |
24554 | 24886 | <feature name="pcb_type" value="SEGA-EEPROM" /> |
24887 | <feature name="slot" value="rom_eeprom" /> | |
24555 | 24888 | <dataarea name="rom" size="1048576"> |
24556 | 24889 | <rom name="turma da monica na terra dos monstros (bra).bin" size="1048576" crc="f8288de1" sha1="80fc2a6a6b8b943f781598094f3b5a5fe4f05ede" offset="000000" loadflag="load16_word_swap" /> |
24557 | 24890 | </dataarea> |
r20695 | r20696 | |
24895 | 25228 | <publisher>U.S. Gold</publisher> |
24896 | 25229 | <part name="cart" interface="megadriv_cart"> |
24897 | 25230 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25231 | <feature name="slot" value="rom_sram" /> | |
24898 | 25232 | <dataarea name="rom" size="1048576"> |
24899 | 25233 | <rom name="world cup usa 94 (euro, usa, kor).bin" size="1048576" crc="0171b47f" sha1="af0e8fada3db7e746aef2c0070deb19602c6d32a" offset="000000" loadflag="load16_word_swap" /> |
24900 | 25234 | </dataarea> |
r20695 | r20696 | |
25189 | 25523 | <publisher>Sega</publisher> |
25190 | 25524 | <part name="cart" interface="megadriv_cart"> |
25191 | 25525 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25526 | <feature name="slot" value="rom_sram" /> | |
25192 | 25527 | <dataarea name="rom" size="3145728"> |
25193 | 25528 | <rom name="world series baseball '95 (usa).bin" size="3145728" crc="25130077" sha1="878e9fdbbc0b20b27f25d56e4087efbde1e8979a" offset="000000" loadflag="load16_word_swap" /> |
25194 | 25529 | </dataarea> |
r20695 | r20696 | |
25225 | 25560 | <publisher>Sega</publisher> |
25226 | 25561 | <part name="cart" interface="megadriv_cart"> |
25227 | 25562 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25563 | <feature name="slot" value="rom_sram" /> | |
25228 | 25564 | <dataarea name="rom" size="3145728"> |
25229 | 25565 | <rom name="world series baseball '95 (prototype - dec 28, 1994 - sb).bin" size="3145728" crc="9e6dbc7c" sha1="5cd3e9cff259cc8d1d6d43be4c1abc5a938f7979" offset="000000" loadflag="load16_word_swap" /> |
25230 | 25566 | </dataarea> |
r20695 | r20696 | |
25239 | 25575 | <publisher>Sega</publisher> |
25240 | 25576 | <part name="cart" interface="megadriv_cart"> |
25241 | 25577 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25578 | <feature name="slot" value="rom_sram" /> | |
25242 | 25579 | <dataarea name="rom" size="3145728"> |
25243 | 25580 | <rom name="world series baseball '95 (prototype - feb 02, 1995).bin" size="3145728" crc="a947fe5c" sha1="7049bfd6797a0b45cccc5241d748a76f68ca6257" offset="000000" loadflag="load16_word_swap" /> |
25244 | 25581 | </dataarea> |
r20695 | r20696 | |
25253 | 25590 | <publisher>Sega</publisher> |
25254 | 25591 | <part name="cart" interface="megadriv_cart"> |
25255 | 25592 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25593 | <feature name="slot" value="rom_sram" /> | |
25256 | 25594 | <dataarea name="rom" size="3145728"> |
25257 | 25595 | <rom name="world series baseball '95 (prototype - feb 03, 1995).bin" size="3145728" crc="1f3754fc" sha1="2d70804a21c93f8e1c2267404ee0d92905a4a50c" offset="000000" loadflag="load16_word_swap" /> |
25258 | 25596 | </dataarea> |
r20695 | r20696 | |
25267 | 25605 | <publisher>Sega</publisher> |
25268 | 25606 | <part name="cart" interface="megadriv_cart"> |
25269 | 25607 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25608 | <feature name="slot" value="rom_sram" /> | |
25270 | 25609 | <dataarea name="rom" size="3145728"> |
25271 | 25610 | <rom name="world series baseball '95 (prototype - feb 07, 1995).bin" size="3145728" crc="e4056559" sha1="9d729e57d6c137fb409646725933ff623f78863e" offset="000000" loadflag="load16_word_swap" /> |
25272 | 25611 | </dataarea> |
r20695 | r20696 | |
25281 | 25620 | <publisher>Sega</publisher> |
25282 | 25621 | <part name="cart" interface="megadriv_cart"> |
25283 | 25622 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25623 | <feature name="slot" value="rom_sram" /> | |
25284 | 25624 | <dataarea name="rom" size="3145728"> |
25285 | 25625 | <rom name="world series baseball '95 (prototype - feb 09, 1995 - b).bin" size="3145728" crc="33bb9eda" sha1="18ae5ad695dabfb9ddbe3dd66e2a0582eb5987c8" offset="000000" loadflag="load16_word_swap" /> |
25286 | 25626 | </dataarea> |
r20695 | r20696 | |
25295 | 25635 | <publisher>Sega</publisher> |
25296 | 25636 | <part name="cart" interface="megadriv_cart"> |
25297 | 25637 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25638 | <feature name="slot" value="rom_sram" /> | |
25298 | 25639 | <dataarea name="rom" size="3145728"> |
25299 | 25640 | <rom name="world series baseball '95 (prototype - feb 09, 1995).bin" size="3145728" crc="83be98cf" sha1="3c17b99184097e5f968b6f2fb2fc31d25c924971" offset="000000" loadflag="load16_word_swap" /> |
25300 | 25641 | </dataarea> |
r20695 | r20696 | |
25309 | 25650 | <publisher>Sega</publisher> |
25310 | 25651 | <part name="cart" interface="megadriv_cart"> |
25311 | 25652 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25653 | <feature name="slot" value="rom_sram" /> | |
25312 | 25654 | <dataarea name="rom" size="3145728"> |
25313 | 25655 | <rom name="world series baseball '95 (prototype - feb 11, 1995).bin" size="3145728" crc="a0664fe9" sha1="d6dbe744b0970a1e6e0d0c5d7d5c8ad6ece06c8a" offset="000000" loadflag="load16_word_swap" /> |
25314 | 25656 | </dataarea> |
r20695 | r20696 | |
25323 | 25665 | <publisher>Sega</publisher> |
25324 | 25666 | <part name="cart" interface="megadriv_cart"> |
25325 | 25667 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25668 | <feature name="slot" value="rom_sram" /> | |
25326 | 25669 | <dataarea name="rom" size="3145728"> |
25327 | 25670 | <rom name="world series baseball '95 (prototype - feb 12, 1995).bin" size="3145728" crc="45da8f18" sha1="dd1df8b0ee600d5bef5460cd8e036b66bfe39394" offset="000000" loadflag="load16_word_swap" /> |
25328 | 25671 | </dataarea> |
r20695 | r20696 | |
25337 | 25680 | <publisher>Sega</publisher> |
25338 | 25681 | <part name="cart" interface="megadriv_cart"> |
25339 | 25682 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25683 | <feature name="slot" value="rom_sram" /> | |
25340 | 25684 | <dataarea name="rom" size="3145728"> |
25341 | 25685 | <rom name="world series baseball '95 (prototype - feb 13, 1995).bin" size="3145728" crc="9f30ae30" sha1="c5e594842430b824e37993ee8902fd99a2d5086e" offset="000000" loadflag="load16_word_swap" /> |
25342 | 25686 | </dataarea> |
r20695 | r20696 | |
25351 | 25695 | <publisher>Sega</publisher> |
25352 | 25696 | <part name="cart" interface="megadriv_cart"> |
25353 | 25697 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25698 | <feature name="slot" value="rom_sram" /> | |
25354 | 25699 | <dataarea name="rom" size="3145728"> |
25355 | 25700 | <rom name="world series baseball '95 (prototype - feb 14, 1995).bin" size="3145728" crc="f300a857" sha1="6271037557f92943ac1a363b42f816b9fd8ca8cb" offset="000000" loadflag="load16_word_swap" /> |
25356 | 25701 | </dataarea> |
r20695 | r20696 | |
25365 | 25710 | <publisher>Sega</publisher> |
25366 | 25711 | <part name="cart" interface="megadriv_cart"> |
25367 | 25712 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25713 | <feature name="slot" value="rom_sram" /> | |
25368 | 25714 | <dataarea name="rom" size="3145728"> |
25369 | 25715 | <rom name="world series baseball '95 (prototype - jan 01, 1995 - tst).bin" size="3145728" crc="c7574372" sha1="b9d6cf1a3e342f0e7e0c36a47e92869a6c2bda6d" offset="000000" loadflag="load16_word_swap" /> |
25370 | 25716 | </dataarea> |
r20695 | r20696 | |
25379 | 25725 | <publisher>Sega</publisher> |
25380 | 25726 | <part name="cart" interface="megadriv_cart"> |
25381 | 25727 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25728 | <feature name="slot" value="rom_sram" /> | |
25382 | 25729 | <dataarea name="rom" size="3145728"> |
25383 | 25730 | <rom name="world series baseball '95 (prototype - jan 03, 1995 - tst).bin" size="3145728" crc="498363f7" sha1="1c97922c9632e99fda30465341fe39627611d538" offset="000000" loadflag="load16_word_swap" /> |
25384 | 25731 | </dataarea> |
r20695 | r20696 | |
25393 | 25740 | <publisher>Sega</publisher> |
25394 | 25741 | <part name="cart" interface="megadriv_cart"> |
25395 | 25742 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25743 | <feature name="slot" value="rom_sram" /> | |
25396 | 25744 | <dataarea name="rom" size="3145728"> |
25397 | 25745 | <rom name="world series baseball '95 (prototype - jan 05, 1995).bin" size="3145728" crc="1820abfb" sha1="956313af554f82ca10052c8c182493284c0567fd" offset="000000" loadflag="load16_word_swap" /> |
25398 | 25746 | </dataarea> |
r20695 | r20696 | |
25407 | 25755 | <publisher>Sega</publisher> |
25408 | 25756 | <part name="cart" interface="megadriv_cart"> |
25409 | 25757 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25758 | <feature name="slot" value="rom_sram" /> | |
25410 | 25759 | <dataarea name="rom" size="3145728"> |
25411 | 25760 | <rom name="world series baseball '95 (prototype - jan 09, 1995 - tst).bin" size="3145728" crc="3de7cdbc" sha1="fde563a0b84e6d6f39498964e237d500196a449a" offset="000000" loadflag="load16_word_swap" /> |
25412 | 25761 | </dataarea> |
r20695 | r20696 | |
25421 | 25770 | <publisher>Sega</publisher> |
25422 | 25771 | <part name="cart" interface="megadriv_cart"> |
25423 | 25772 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25773 | <feature name="slot" value="rom_sram" /> | |
25424 | 25774 | <dataarea name="rom" size="3145728"> |
25425 | 25775 | <rom name="world series baseball '95 (prototype - jan 10, 1995).bin" size="3145728" crc="ac2772b0" sha1="0fbc4f86ef7dcca024d9e62568288f8792850797" offset="000000" loadflag="load16_word_swap" /> |
25426 | 25776 | </dataarea> |
r20695 | r20696 | |
25446 | 25796 | <publisher>Sega</publisher> |
25447 | 25797 | <part name="cart" interface="megadriv_cart"> |
25448 | 25798 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25799 | <feature name="slot" value="rom_sram" /> | |
25449 | 25800 | <dataarea name="rom" size="3145728"> |
25450 | 25801 | <rom name="world series baseball '95 (prototype - jan 16, 1995).bin" size="3145728" crc="f0e22b21" sha1="d2428f24a615a3557c51cbcb750f381cd0db5c50" offset="000000" loadflag="load16_word_swap" /> |
25451 | 25802 | </dataarea> |
r20695 | r20696 | |
25471 | 25822 | <publisher>Sega</publisher> |
25472 | 25823 | <part name="cart" interface="megadriv_cart"> |
25473 | 25824 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25825 | <feature name="slot" value="rom_sram" /> | |
25474 | 25826 | <dataarea name="rom" size="3145728"> |
25475 | 25827 | <rom name="world series baseball '95 (prototype - jan 20, 1995).bin" size="3145728" crc="16c15e46" sha1="91e5d6a7c703d3b47886bc05100ab278b89e2ebd" offset="000000" loadflag="load16_word_swap" /> |
25476 | 25828 | </dataarea> |
r20695 | r20696 | |
25485 | 25837 | <publisher>Sega</publisher> |
25486 | 25838 | <part name="cart" interface="megadriv_cart"> |
25487 | 25839 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25840 | <feature name="slot" value="rom_sram" /> | |
25488 | 25841 | <dataarea name="rom" size="3145728"> |
25489 | 25842 | <rom name="world series baseball '95 (prototype - jan 25, 1995).bin" size="3145728" crc="b45d9e33" sha1="124fa734eee59420f98fc61e0368dbf1ea9ed255" offset="000000" loadflag="load16_word_swap" /> |
25490 | 25843 | </dataarea> |
r20695 | r20696 | |
25499 | 25852 | <publisher>Sega</publisher> |
25500 | 25853 | <part name="cart" interface="megadriv_cart"> |
25501 | 25854 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25855 | <feature name="slot" value="rom_sram" /> | |
25502 | 25856 | <dataarea name="rom" size="3145728"> |
25503 | 25857 | <rom name="world series baseball '95 (prototype - jan 30, 1995).bin" size="3145728" crc="6aa76a9d" sha1="eac7dc5656e27e4c95dfc8b04db85c1c4967b2d5" offset="000000" loadflag="load16_word_swap" /> |
25504 | 25858 | </dataarea> |
r20695 | r20696 | |
25513 | 25867 | <publisher>Sega</publisher> |
25514 | 25868 | <part name="cart" interface="megadriv_cart"> |
25515 | 25869 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25870 | <feature name="slot" value="rom_sram" /> | |
25516 | 25871 | <dataarea name="rom" size="3145728"> |
25517 | 25872 | <rom name="world series baseball '96 (usa).bin" size="3145728" crc="04ee8272" sha1="f91eeedbadd277904f821dfaae9e46f6078ff207" offset="000000" loadflag="load16_word_swap" /> |
25518 | 25873 | </dataarea> |
r20695 | r20696 | |
25527 | 25882 | <publisher>Sega</publisher> |
25528 | 25883 | <part name="cart" interface="megadriv_cart"> |
25529 | 25884 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25885 | <feature name="slot" value="rom_sram" /> | |
25530 | 25886 | <dataarea name="rom" size="3145728"> |
25531 | 25887 | <rom name="world series baseball '98 (usa).bin" size="3145728" crc="05b1ab53" sha1="0881077fd253d19d43ad45de6089d66e75d856b3" offset="000000" loadflag="load16_word_swap" /> |
25532 | 25888 | </dataarea> |
r20695 | r20696 | |
25541 | 25897 | <publisher>Sega</publisher> |
25542 | 25898 | <part name="cart" interface="megadriv_cart"> |
25543 | 25899 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25900 | <feature name="slot" value="rom_sram" /> | |
25544 | 25901 | <dataarea name="rom" size="2097152"> |
25545 | 25902 | <rom name="world series baseball (usa).bin" size="2097152" crc="57c1d5ec" sha1="e63cbd1f00eac2ccd2ee0290e7bf1bb47c1288e4" offset="000000" loadflag="load16_word_swap" /> |
25546 | 25903 | </dataarea> |
r20695 | r20696 | |
25566 | 25923 | <publisher>Sega</publisher> |
25567 | 25924 | <part name="cart" interface="megadriv_cart"> |
25568 | 25925 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25926 | <feature name="slot" value="rom_sram" /> | |
25569 | 25927 | <dataarea name="rom" size="2097152"> |
25570 | 25928 | <rom name="world series baseball (prototype - dec 26, 1993).bin" size="2097152" crc="472e6a58" sha1="763dcaf06befe2a95963f9d41393eacf151d5a97" offset="000000" loadflag="load16_word_swap" /> |
25571 | 25929 | </dataarea> |
r20695 | r20696 | |
25580 | 25938 | <publisher>Sega</publisher> |
25581 | 25939 | <part name="cart" interface="megadriv_cart"> |
25582 | 25940 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25941 | <feature name="slot" value="rom_sram" /> | |
25583 | 25942 | <dataarea name="rom" size="2097152"> |
25584 | 25943 | <rom name="world series baseball (prototype - dec 29, 1993).bin" size="2097152" crc="ed949936" sha1="fda84389295622191f29b9e0fc94673891fa782a" offset="000000" loadflag="load16_word_swap" /> |
25585 | 25944 | </dataarea> |
r20695 | r20696 | |
25594 | 25953 | <publisher>Sega</publisher> |
25595 | 25954 | <part name="cart" interface="megadriv_cart"> |
25596 | 25955 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25956 | <feature name="slot" value="rom_sram" /> | |
25597 | 25957 | <dataarea name="rom" size="2097152"> |
25598 | 25958 | <rom name="world series baseball (prototype - feb 18, 1994).bin" size="2097152" crc="3cadfc50" sha1="63af6038d8904d33ef3ab50820e6df84b44b7ada" offset="000000" loadflag="load16_word_swap" /> |
25599 | 25959 | </dataarea> |
r20695 | r20696 | |
25608 | 25968 | <publisher>Sega</publisher> |
25609 | 25969 | <part name="cart" interface="megadriv_cart"> |
25610 | 25970 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25971 | <feature name="slot" value="rom_sram" /> | |
25611 | 25972 | <dataarea name="rom" size="2097152"> |
25612 | 25973 | <rom name="world series baseball (prototype - jan 03, 1994).bin" size="2097152" crc="4b53f035" sha1="449092852822a842a607f40a5685ac73d94f4a93" offset="000000" loadflag="load16_word_swap" /> |
25613 | 25974 | </dataarea> |
r20695 | r20696 | |
25622 | 25983 | <publisher>Sega</publisher> |
25623 | 25984 | <part name="cart" interface="megadriv_cart"> |
25624 | 25985 | <feature name="pcb_type" value="SEGA-SRAM" /> |
25986 | <feature name="slot" value="rom_sram" /> | |
25625 | 25987 | <dataarea name="rom" size="2097152"> |
25626 | 25988 | <rom name="world series baseball (prototype - jan 06, 1994).bin" size="2097152" crc="b07de2d3" sha1="4622f2a90007c923f87455a8fd6472b66c44f16c" offset="000000" loadflag="load16_word_swap" /> |
25627 | 25989 | </dataarea> |
r20695 | r20696 | |
25636 | 25998 | <publisher>Sega</publisher> |
25637 | 25999 | <part name="cart" interface="megadriv_cart"> |
25638 | 26000 | <feature name="pcb_type" value="SEGA-SRAM" /> |
26001 | <feature name="slot" value="rom_sram" /> | |
25639 | 26002 | <dataarea name="rom" size="2097152"> |
25640 | 26003 | <rom name="world series baseball (prototype - jan 16, 1994).bin" size="2097152" crc="5322133e" sha1="d72d21e5295aaa2be1e14dba382c3cca25eec6ac" offset="000000" loadflag="load16_word_swap" /> |
25641 | 26004 | </dataarea> |
r20695 | r20696 | |
25661 | 26024 | <publisher>Sega</publisher> |
25662 | 26025 | <part name="cart" interface="megadriv_cart"> |
25663 | 26026 | <feature name="pcb_type" value="SEGA-SRAM" /> |
26027 | <feature name="slot" value="rom_sram" /> | |
25664 | 26028 | <dataarea name="rom" size="2097152"> |
25665 | 26029 | <rom name="world series baseball (prototype - may 27, 1994).bin" size="2097152" crc="e473728a" sha1="ecbf253f2363a1ac5c3797eb80ffee08a8629ae8" offset="000000" loadflag="load16_word_swap" /> |
25666 | 26030 | </dataarea> |
r20695 | r20696 | |
25723 | 26087 | <info name="alt_title" value="レッスル ウォー"/> |
25724 | 26088 | <part name="cart" interface="megadriv_cart"> |
25725 | 26089 | <feature name="pcb_type" value="SEGA-SRAM" /> |
26090 | <feature name="slot" value="rom_sram" /> | |
25726 | 26091 | <dataarea name="rom" size="524288"> |
25727 | 26092 | <rom name="wrestle war (jpn) (beta).bin" size="524288" crc="1cdee87b" sha1="65c4815c6271bb7d526d84dac1bf177741e35364" offset="000000" loadflag="load16_word_swap" /> |
25728 | 26093 | </dataarea> |
r20695 | r20696 | |
25737 | 26102 | <publisher>Ming</publisher> |
25738 | 26103 | <part name="cart" interface="megadriv_cart"> |
25739 | 26104 | <feature name="pcb_type" value="SEGA-SRAM" /> |
26105 | <feature name="slot" value="rom_sram" /> | |
25740 | 26106 | <dataarea name="rom" size="2097152"> |
25741 | 26107 | <rom name="wu kong wai zhuan (chi) (unl).bin" size="2097152" crc="880a916e" sha1="dd4d7f7433ab82680d7d36124beca0bacebcd6e4" offset="000000" loadflag="load16_word_swap" /> |
25742 | 26108 | </dataarea> |
r20695 | r20696 | |
26110 | 26476 | <publisher>C&E</publisher> |
26111 | 26477 | <part name="cart" interface="megadriv_cart"> |
26112 | 26478 | <feature name="pcb_type" value="BEGGAR" /> |
26479 | <feature name="slot" value="rom_beggar" /> | |
26113 | 26480 | <dataarea name="rom" size="4194304"> |
26114 | 26481 | <rom name="xin qi gai wang zi (chi) (alt) (unl).bin" size="4194304" crc="da5a4bfe" sha1="75f8003a6388814c1880347882b244549da62158" offset="000000" loadflag="load16_word_swap" /> |
26115 | 26482 | </dataarea> |
r20695 | r20696 | |
26122 | 26489 | <publisher>C&E</publisher> |
26123 | 26490 | <part name="cart" interface="megadriv_cart"> |
26124 | 26491 | <feature name="pcb_type" value="BEGGAR" /> |
26492 | <feature name="slot" value="rom_beggar" /> | |
26125 | 26493 | <dataarea name="rom" size="4194304"> |
26126 | 26494 | <rom name="xin qi gai wang zi (chi) (unl).bin" size="4194304" crc="dd2f38b5" sha1="4a7494d8601149f43ba7e3595a0b2340cde2e9ba" offset="000000" loadflag="load16_word_swap" /> |
26127 | 26495 | </dataarea> |
r20695 | r20696 | |
26180 | 26548 | <publisher>Renovation</publisher> |
26181 | 26549 | <part name="cart" interface="megadriv_cart"> |
26182 | 26550 | <feature name="pcb_type" value="SEGA-SRAM" /> |
26551 | <feature name="slot" value="rom_sram" /> | |
26183 | 26552 | <dataarea name="rom" size="1048576"> |
26184 | 26553 | <rom name="ys iii (usa).bin" size="1048576" crc="ea27976e" sha1="b3331b41a9a5e2c3f4fb3b64c5b005037a3b6fdd" offset="000000" loadflag="load16_word_swap" /> |
26185 | 26554 | </dataarea> |
r20695 | r20696 | |
26197 | 26566 | <info name="alt_title" value="ワンダラーズ フロム イース"/> |
26198 | 26567 | <part name="cart" interface="megadriv_cart"> |
26199 | 26568 | <feature name="pcb_type" value="SEGA-SRAM" /> |
26569 | <feature name="slot" value="rom_sram" /> | |
26200 | 26570 | <dataarea name="rom" size="1048576"> |
26201 | 26571 | <rom name="ys - wanderers from ys (jpn).bin" size="1048576" crc="52da4e76" sha1="28dc01d5dde8d569bae3fafce2af55ee9b836454" offset="000000" loadflag="load16_word_swap" /> |
26202 | 26572 | </dataarea> |
r20695 | r20696 | |
26239 | 26609 | <info name="alt_title" value="幽☆遊☆白書 外伝"/> |
26240 | 26610 | <part name="cart" interface="megadriv_cart"> |
26241 | 26611 | <feature name="pcb_type" value="SEGA-SRAM" /> |
26612 | <feature name="slot" value="rom_sram" /> | |
26242 | 26613 | <dataarea name="rom" size="2097152"> |
26243 | 26614 | <rom name="yuu yuu hakusho gaiden (jpn).bin" size="2097152" crc="7dc98176" sha1="274b86709b509852ca004ceaa244f3ae1d455c50" offset="000000" loadflag="load16_word_swap" /> |
26244 | 26615 | </dataarea> |
r20695 | r20696 | |
26256 | 26627 | <info name="alt_title" value="斬 夜叉円舞曲"/> |
26257 | 26628 | <part name="cart" interface="megadriv_cart"> |
26258 | 26629 | <feature name="pcb_type" value="SEGA-SRAM" /> |
26630 | <feature name="slot" value="rom_sram" /> | |
26259 | 26631 | <dataarea name="rom" size="524288"> |
26260 | 26632 | <rom name="zan yasha enbukyoku (jpn).bin" size="524288" crc="637fe8f3" sha1="f1ea9a88233b76e3df32526be0b64fb653c13b7d" offset="000000" loadflag="load16_word_swap" /> |
26261 | 26633 | </dataarea> |
r20695 | r20696 | |
26489 | 26861 | <year>199?</year> |
26490 | 26862 | <publisher><unlicensed></publisher> |
26491 | 26863 | <part name="cart" interface="megadriv_cart"> |
26492 | <feature name="pcb_type" value="12IN1" /> | |
26493 | <dataarea name="rom" size="20971520"> | |
26864 | <feature name="pcb_type" value="MC_12IN1" /> | |
26865 | <feature name="slot" value="rom_mcpir" /> | |
26866 | <dataarea name="rom" size="2097152"> | |
26494 | 26867 | <rom name="12-in-1 (unl).bin" size="2097152" crc="a98bf454" sha1="7313c20071de0ab1cd84ac1352cb0ed1c4a4afa8" offset="00000" loadflag="load16_word_swap" /> |
26495 | 26868 | </dataarea> |
26496 | 26869 | </part> |
r20695 | r20696 | |
26501 | 26874 | <year>199?</year> |
26502 | 26875 | <publisher><unknown></publisher> |
26503 | 26876 | <part name="cart" interface="megadriv_cart"> |
26504 | <feature name="pcb_type" value="12IN1" /> | |
26505 | <dataarea name="rom" size="20971520"> | |
26877 | <feature name="pcb_type" value="MC_12IN1" /> | |
26878 | <feature name="slot" value="rom_mcpir" /> | |
26879 | <dataarea name="rom" size="2097152"> | |
26506 | 26880 | <rom name="4-in-1 (pirate).bin" size="2097152" crc="be72857b" sha1="2aceca16f13d6a7a6a1bff8543d31bded179df3b" offset="00000" loadflag="load16_word_swap" /> |
26507 | 26881 | </dataarea> |
26508 | 26882 | </part> |
r20695 | r20696 | |
26514 | 26888 | <publisher><unlicensed></publisher> |
26515 | 26889 | <part name="cart" interface="megadriv_cart"> |
26516 | 26890 | <feature name="pcb_type" value="BUGSLIFE" /> |
26891 | <feature name="slot" value="rom_bugs" /> | |
26517 | 26892 | <dataarea name="rom" size="1048576"> |
26518 | 26893 | <rom name="bug's life, a (unl).bin" size="1048576" crc="10458e09" sha1="b620c2bebd5bab39bc9258a925169b4c93614599" offset="000000" loadflag="load16_word_swap" /> |
26519 | 26894 | </dataarea> |
r20695 | r20696 | |
26537 | 26912 | <publisher><unlicensed></publisher> |
26538 | 26913 | <part name="cart" interface="megadriv_cart"> |
26539 | 26914 | <feature name="pcb_type" value="CHINFIGHT3" /> |
26540 | <dataarea name="rom" size="20971520"> | |
26915 | <feature name="slot" value="rom_chinf3" /> | |
26916 | <dataarea name="rom" size="2097152"> | |
26541 | 26917 | <rom name="chinese fighter iii (unl).bin" size="2097152" crc="e833bc6e" sha1="ecca9d2d21c8e27fc7584d53f557fdd8b4cbffa7" offset="000000" loadflag="load16_word_swap" /> |
26542 | 26918 | </dataarea> |
26543 | 26919 | </part> |
r20695 | r20696 | |
26549 | 26925 | <publisher>Realtec</publisher> |
26550 | 26926 | <part name="cart" interface="megadriv_cart"> |
26551 | 26927 | <feature name="pcb_type" value="REALTEC" /> |
26552 | <dataarea name="rom" size="20971520"> | |
26928 | <feature name="slot" value="rom_realtec" /> | |
26929 | <dataarea name="rom" size="524288"> | |
26553 | 26930 | <rom name="earth defense (usa) (unl).bin" size="524288" crc="3519c422" sha1="9bf4cda850495d7811df578592289018862df575" offset="00000" loadflag="load16_word_swap" /> |
26554 | 26931 | </dataarea> |
26555 | 26932 | </part> |
r20695 | r20696 | |
26561 | 26938 | <publisher>Realtec</publisher> |
26562 | 26939 | <part name="cart" interface="megadriv_cart"> |
26563 | 26940 | <feature name="pcb_type" value="REALTEC" /> |
26564 | <dataarea name="rom" size="20971520"> | |
26941 | <feature name="slot" value="rom_realtec" /> | |
26942 | <dataarea name="rom" size="524288"> | |
26565 | 26943 | <rom name="funny world & balloon boy (usa) (unl).bin" size="524288" crc="a82f05f0" sha1="17481c8327433bfce8f7bae493fc044194e400a4" offset="00000" loadflag="load16_word_swap" /> |
26566 | 26944 | </dataarea> |
26567 | 26945 | </part> |
26568 | 26946 | </software> |
26569 | 26947 | |
26570 | 26948 | <!-- // this contains only the first bank, so most of the games are missing --> |
26571 | <software name="golden10"> | |
26572 | <description>Golden 10 in 1</description> | |
26949 | <software name="golden10" supported="partial"> | |
26950 | <description>Golden 10 in 1 (Incomplete Dump)</description> | |
26573 | 26951 | <year>199?</year> |
26574 | 26952 | <publisher><unlicensed></publisher> |
26575 | 26953 | <part name="cart" interface="megadriv_cart"> |
26576 | <feature name="pcb_type" value="12IN1" /> | |
26577 | <dataarea name="rom" size="20971520"> | |
26954 | <feature name="pcb_type" value="MC_12IN1" /> | |
26955 | <feature name="slot" value="rom_mcpir" /> | |
26956 | <dataarea name="rom" size="1048576"> | |
26578 | 26957 | <rom name="golden 10-in-1 (bad dump).bin" size="1048576" crc="4fa3f82b" sha1="04edbd35fe4916f61b516016b492352d96a8de7f" offset="00000" status="baddump" loadflag="load16_word_swap" /> |
26579 | 26958 | </dataarea> |
26580 | 26959 | </part> |
r20695 | r20696 | |
26586 | 26965 | <publisher><unlicensed></publisher> |
26587 | 26966 | <part name="cart" interface="megadriv_cart"> |
26588 | 26967 | <feature name="pcb_type" value="MULAN" /> |
26968 | <feature name="slot" value="rom_mulan" /> | |
26589 | 26969 | <dataarea name="rom" size="2097152"> |
26590 | 26970 | <rom name="hua mu lan - mulan (chi) (unl).bin" size="2097152" crc="796882b8" sha1="d8936c1023db646e1e20f9208b68271afbd6dbf4" offset="000000" loadflag="load16_word_swap" /> |
26591 | 26971 | </dataarea> |
r20695 | r20696 | |
26598 | 26978 | <publisher><unlicensed></publisher> |
26599 | 26979 | <part name="cart" interface="megadriv_cart"> |
26600 | 26980 | <feature name="pcb_type" value="SMOUSE" /> |
26981 | <feature name="slot" value="rom_smouse" /> | |
26601 | 26982 | <dataarea name="rom" size="524288"> |
26602 | 26983 | <rom name="huan le tao qi shu - smart mouse (chi) (unl).bin" size="524288" crc="decdf740" sha1="df7a2527875317406b466175f0614d343dd32117" offset="000000" loadflag="load16_word_swap" /> |
26603 | 26984 | </dataarea> |
r20695 | r20696 | |
26610 | 26991 | <publisher><unlicensed></publisher> |
26611 | 26992 | <part name="cart" interface="megadriv_cart"> |
26612 | 26993 | <feature name="pcb_type" value="KOF98" /> |
26994 | <feature name="slot" value="rom_kof98" /> | |
26613 | 26995 | <dataarea name="rom" size="2097152"> |
26614 | 26996 | <rom name="king of fighters '98, the (unl).bin" size="2097152" crc="cbc38eea" sha1="aeee33bfc2c440b6b861ac0d1b9bc9bface24861" offset="000000" loadflag="load16_word_swap" /> |
26615 | 26997 | </dataarea> |
r20695 | r20696 | |
26622 | 27004 | <publisher><unlicensed></publisher> |
26623 | 27005 | <part name="cart" interface="megadriv_cart"> |
26624 | 27006 | <feature name="pcb_type" value="KOF99" /> |
27007 | <feature name="slot" value="rom_kof99" /> | |
26625 | 27008 | <dataarea name="rom" size="3145728"> |
26626 | 27009 | <rom name="the king of fighters 99 (unl).bin" size="3145728" crc="54638c11" sha1="cdef3008dec2ce1a214af8b9cb000053671a3c36" offset="000000" loadflag="load16_word_swap" /> |
26627 | 27010 | </dataarea> |
r20695 | r20696 | |
26634 | 27017 | <year>199?</year> |
26635 | 27018 | <publisher><unlicensed></publisher> |
26636 | 27019 | <part name="cart" interface="megadriv_cart"> |
27020 | <feature name="pcb_type" value="KOF99" /> | |
27021 | <feature name="slot" value="rom_kof99" /> | |
26637 | 27022 | <dataarea name="rom" size="3145728"> |
26638 | 27023 | <rom name="king of fighters 99 (unl).bin" size="3145728" crc="ab82afbe" sha1="3947f8b784eb00fba6a9fdd0584c9f70fdff5944" offset="000000" loadflag="load16_word_swap" /> |
26639 | 27024 | </dataarea> |
r20695 | r20696 | |
26646 | 27031 | <publisher><unlicensed></publisher> |
26647 | 27032 | <part name="cart" interface="megadriv_cart"> |
26648 | 27033 | <feature name="pcb_type" value="ELFWOR" /> |
27034 | <feature name="slot" value="rom_elfwor" /> | |
26649 | 27035 | <dataarea name="rom" size="1048576"> |
26650 | 27036 | <rom name="elf wor (chi) (unl).bin" size="1048576" crc="e24ac6b2" sha1="5fc4591fbb1acc64e184466c7b6287c7f64e0b7a" offset="000000" loadflag="load16_word_swap" /> |
26651 | 27037 | </dataarea> |
r20695 | r20696 | |
26658 | 27044 | <publisher><unlicensed></publisher> |
26659 | 27045 | <part name="cart" interface="megadriv_cart"> |
26660 | 27046 | <feature name="pcb_type" value="LIONK2" /> |
27047 | <feature name="slot" value="rom_lion2" /> | |
26661 | 27048 | <dataarea name="rom" size="2097152"> |
26662 | 27049 | <rom name="shi zi wang ii - the lion king ii, the (chi) (unl).bin" size="2097152" crc="aff46765" sha1="5649fa1fbfb28d58b0608e8ebc5dc7bd5c4c9678" offset="000000" loadflag="load16_word_swap" /> |
26663 | 27050 | </dataarea> |
r20695 | r20696 | |
26671 | 27058 | <info name="alt_title" value="Shi Zi Wang 3 - The Lion King 3 (Box?)"/> |
26672 | 27059 | <part name="cart" interface="megadriv_cart"> |
26673 | 27060 | <feature name="pcb_type" value="LIONK3" /> |
26674 | <dataarea name="rom" size="20971520"> | |
27061 | <feature name="slot" value="rom_lion3" /> | |
27062 | <dataarea name="rom" size="4194304"> | |
26675 | 27063 | <rom name="shi zi wang 3 - the lion king 3 (chi) (unl).bin" size="2097152" crc="c004219d" sha1="54ffd355b0805741f58329fa38ed3d9f8f7c80ca" offset="00000" loadflag="load16_word_swap" /> |
27064 | <rom size="2097152" offset="0x200000" loadflag="reload" /> | |
26676 | 27065 | </dataarea> |
26677 | 27066 | </part> |
26678 | 27067 | </software> |
r20695 | r20696 | |
26683 | 27072 | <publisher><unlicensed></publisher> |
26684 | 27073 | <part name="cart" interface="megadriv_cart"> |
26685 | 27074 | <feature name="pcb_type" value="MJLOVER" /> |
27075 | <feature name="slot" value="rom_mjlov" /> | |
26686 | 27076 | <dataarea name="rom" size="1048576"> |
26687 | 27077 | <rom name="ma jiang qing ren - ji ma jiang zhi (chi) (unl).bin" size="1048576" crc="ddd02ba4" sha1="fe9ec21bd206ad1a178c54a2fee80b553c478fc4" offset="000000" loadflag="load16_word_swap" /> |
26688 | 27078 | </dataarea> |
r20695 | r20696 | |
26695 | 27085 | <publisher><unlicensed></publisher> |
26696 | 27086 | <part name="cart" interface="megadriv_cart"> |
26697 | 27087 | <feature name="pcb_type" value="MJLOVER" /> |
27088 | <feature name="slot" value="rom_mjlov" /> | |
26698 | 27089 | <dataarea name="rom" size="1048576"> |
26699 | 27090 | <rom name="mahjong lover (unl).bin" size="1048576" crc="f6c2cff2" sha1="80d0635083351f62e708538d4b31278d07170a73" offset="000000" loadflag="load16_word_swap" /> |
26700 | 27091 | </dataarea> |
r20695 | r20696 | |
26707 | 27098 | <publisher><unlicensed></publisher> |
26708 | 27099 | <part name="cart" interface="megadriv_cart"> |
26709 | 27100 | <feature name="pcb_type" value="KAIJU" /> |
26710 | <dataarea name="rom" size="20971520"> | |
27101 | <feature name="slot" value="rom_pokestad" /> | |
27102 | <dataarea name="rom" size="2097152"> | |
26711 | 27103 | <rom name="pokemon stadium (unl).bin" size="2097152" crc="fe187c5d" sha1="f65af5d86aba33bd3f4f91a0cd7428778bcceedf" offset="00000" loadflag="load16_word_swap" /> |
26712 | 27104 | </dataarea> |
26713 | 27105 | </part> |
r20695 | r20696 | |
26719 | 27111 | <publisher><unlicensed></publisher> |
26720 | 27112 | <part name="cart" interface="megadriv_cart"> |
26721 | 27113 | <feature name="pcb_type" value="ROCKMANX3" /> |
27114 | <feature name="slot" value="rom_rx3" /> | |
26722 | 27115 | <dataarea name="rom" size="2097152"> |
26723 | 27116 | <rom name="rockman x3 (unl).bin" size="2097152" crc="3ee639f0" sha1="37024d0088fab1d76c082014663c58921cdf33df" offset="000000" loadflag="load16_word_swap" /> |
26724 | 27117 | </dataarea> |
r20695 | r20696 | |
26731 | 27124 | <publisher><unlicensed></publisher> |
26732 | 27125 | <part name="cart" interface="megadriv_cart"> |
26733 | 27126 | <feature name="pcb_type" value="SOULBLAD" /> |
27127 | <feature name="slot" value="rom_soulb" /> | |
26734 | 27128 | <dataarea name="rom" size="4194304"> |
26735 | 27129 | <rom name="soul blade (unl).bin" size="4194304" crc="f26f88d1" sha1="7714e01819ab4a0f424d7e306e9f891031d053a8" offset="000000" loadflag="load16_word_swap" /> |
26736 | 27130 | </dataarea> |
r20695 | r20696 | |
26742 | 27136 | <year>199?</year> |
26743 | 27137 | <publisher><unlicensed></publisher> |
26744 | 27138 | <part name="cart" interface="megadriv_cart"> |
26745 | <feature name="pcb_type" value="SOULBLAD" /> | |
26746 | 27139 | <dataarea name="rom" size="3145728"> |
26747 | 27140 | <rom name="soul blade (unl)[p].bin" size="3145728" crc="dd1c7a79" sha1="4bb00b8b42fb50e8d3be092516370fdf1bfc49e1" offset="000000" loadflag="load16_word_swap" /> |
26748 | 27141 | </dataarea> |
r20695 | r20696 | |
26755 | 27148 | <publisher><unlicensed></publisher> |
26756 | 27149 | <part name="cart" interface="megadriv_cart"> |
26757 | 27150 | <feature name="pcb_type" value="SQUIRRELK" /> |
27151 | <feature name="slot" value="rom_squir" /> | |
26758 | 27152 | <dataarea name="rom" size="1048576"> |
26759 | 27153 | <rom name="squirrel king (chi) (unl).bin" size="1048576" crc="b8261ff5" sha1="2a561b6e47c93272fe5947084837d9f6f514ed38" offset="000000" loadflag="load16_word_swap" /> |
26760 | 27154 | </dataarea> |
r20695 | r20696 | |
26767 | 27161 | <publisher><unknown></publisher> |
26768 | 27162 | <part name="cart" interface="megadriv_cart"> |
26769 | 27163 | <feature name="pcb_type" value="MC_SUP15IN1" /> |
26770 | <dataarea name="rom" size="20971520"> | |
27164 | <feature name="slot" value="rom_mcpir" /> | |
27165 | <dataarea name="rom" size="2097152"> | |
26771 | 27166 | <rom name="super 15-in-1 (pirate).bin" size="2097152" crc="6d17dfff" sha1="6b2a6de2622735f6d56c6c9c01f74daa90e355cb" offset="00000" loadflag="load16_word_swap" /> |
26772 | 27167 | </dataarea> |
26773 | 27168 | </part> |
r20695 | r20696 | |
26779 | 27174 | <publisher><unknown></publisher> |
26780 | 27175 | <part name="cart" interface="megadriv_cart"> |
26781 | 27176 | <feature name="pcb_type" value="MC_SUP19IN1" /> |
26782 | <dataarea name="rom" size="20971520"> | |
27177 | <feature name="slot" value="rom_mcpir" /> | |
27178 | <dataarea name="rom" size="4194304"> | |
26783 | 27179 | <rom name="super 19-in-1 (pirate).bin" size="4194304" crc="0ad2b342" sha1="e1c041ba69da087c428dcda16850159f3caebd4b" offset="00000" loadflag="load16_word_swap" /> |
26784 | 27180 | </dataarea> |
26785 | 27181 | </part> |
r20695 | r20696 | |
26791 | 27187 | <publisher><unlicensed></publisher> |
26792 | 27188 | <part name="cart" interface="megadriv_cart"> |
26793 | 27189 | <feature name="pcb_type" value="SBUBBOB" /> |
27190 | <feature name="slot" value="rom_sbubl" /> | |
26794 | 27191 | <dataarea name="rom" size="1048576"> |
26795 | 27192 | <rom name="super bubble bobble (chi) (unl).bin" size="1048576" crc="4820a161" sha1="03f40c14624f1522d6e3105997d14e8eaba12257" offset="000000" loadflag="load16_word_swap" /> |
26796 | 27193 | </dataarea> |
r20695 | r20696 | |
26803 | 27200 | <publisher><unlicensed></publisher> |
26804 | 27201 | <part name="cart" interface="megadriv_cart"> |
26805 | 27202 | <feature name="pcb_type" value="SDK99" /> |
26806 | <dataarea name="rom" size="20971520"> | |
27203 | <feature name="slot" value="rom_lion3" /> | |
27204 | <dataarea name="rom" size="4194304"> | |
26807 | 27205 | <rom name="super donkey kong 99 (unl) (protected).bin" size="3145728" crc="43be4dd5" sha1="5d3c84bd18f821b20212941a6f7a1a272eb0d7e3" offset="00000" loadflag="load16_word_swap" /> |
27206 | <rom size="1048576" offset="0x300000" loadflag="reload" /> | |
26808 | 27207 | </dataarea> |
26809 | 27208 | </part> |
26810 | 27209 | </software> |
r20695 | r20696 | |
26815 | 27214 | <publisher><unlicensed></publisher> |
26816 | 27215 | <part name="cart" interface="megadriv_cart"> |
26817 | 27216 | <feature name="pcb_type" value="SKINGKONG" /> |
26818 | <dataarea name="rom" size="20971520"> | |
27217 | <feature name="slot" value="rom_lion3" /> | |
27218 | <dataarea name="rom" size="4194304"> | |
26819 | 27219 | <rom name="super king kong 99 (unl).bin" size="2097152" crc="413dfee2" sha1="6973598d77a755beafff31ce85595f9610f8afa5" offset="00000" loadflag="load16_word_swap" /> |
27220 | <rom size="2097152" offset="0x200000" loadflag="reload" /> | |
26820 | 27221 | </dataarea> |
26821 | 27222 | </part> |
26822 | 27223 | </software> |
r20695 | r20696 | |
26827 | 27228 | <publisher><unlicensed></publisher> |
26828 | 27229 | <part name="cart" interface="megadriv_cart"> |
26829 | 27230 | <feature name="pcb_type" value="SMB2" /> |
27231 | <feature name="slot" value="rom_smb2" /> | |
26830 | 27232 | <dataarea name="rom" size="2097152"> |
26831 | 27233 | <rom name="super mario 2 1998 (unl).bin" size="2097152" crc="f7e1b3e1" sha1="de10115ce6a7eb416de9cd167df9cf24e34687b1" offset="000000" loadflag="load16_word_swap" /> |
26832 | 27234 | </dataarea> |
r20695 | r20696 | |
26839 | 27241 | <publisher><unlicensed></publisher> |
26840 | 27242 | <part name="cart" interface="megadriv_cart"> |
26841 | 27243 | <feature name="pcb_type" value="SMB" /> |
27244 | <feature name="slot" value="rom_smb" /> | |
26842 | 27245 | <dataarea name="rom" size="2097152"> |
26843 | 27246 | <rom name="super mario bros. (unl).bin" size="2097152" crc="9cfa2bd8" sha1="5011e16f0ab3a6487a1406b85c6090ad2d1fe345" offset="000000" loadflag="load16_word_swap" /> |
26844 | 27247 | </dataarea> |
r20695 | r20696 | |
26851 | 27254 | <publisher><unlicensed></publisher> |
26852 | 27255 | <part name="cart" interface="megadriv_cart"> |
26853 | 27256 | <feature name="pcb_type" value="REDCLIFF" /> |
26854 | <dataarea name="rom" size="20971520"> | |
27257 | <feature name="slot" value="rom_redcl" /> | |
27258 | <dataarea name="rom" size="2097158"> | |
26855 | 27259 | <rom name="the battle of red cliffs - romance of the three kingdoms (unl).bin" size="2097157" crc="44463492" sha1="244334583fde808a56059c0b0eef77742c18274d" offset="00000" loadflag="load16_word_swap" /> |
26856 | 27260 | </dataarea> |
26857 | 27261 | </part> |
r20695 | r20696 | |
26874 | 27278 | <publisher><unlicensed></publisher> |
26875 | 27279 | <part name="cart" interface="megadriv_cart"> |
26876 | 27280 | <feature name="pcb_type" value="TOPFIGHTER" /> |
26877 | <dataarea name="rom" size="20971520"> | |
27281 | <feature name="slot" value="rom_topf" /> | |
27282 | <dataarea name="rom" size="2097152"> | |
26878 | 27283 | <rom name="top fighter 2000 mk viii (unl).bin" size="2097152" crc="f75519dc" sha1="617be8de1444ae0c6610d73967f3f0e67541b05a" offset="00000" loadflag="load16_word_swap" /> |
26879 | 27284 | </dataarea> |
26880 | 27285 | </part> |
r20695 | r20696 | |
26885 | 27290 | <year>199?</year> |
26886 | 27291 | <publisher><unlicensed></publisher> |
26887 | 27292 | <part name="cart" interface="megadriv_cart"> |
26888 | <feature name="pcb_type" value="TOPFIGHTER" /> | |
26889 | <dataarea name="rom" size="20971520"> | |
27293 | <dataarea name="rom" size="2097152"> | |
26890 | 27294 | <rom name="top fighter 2005 (unl).bin" size="2097152" crc="174defe6" sha1="e2b8ee109d2302778f7a77563045613b0636d470" offset="00000" loadflag="load16_word_swap" /> |
26891 | 27295 | </dataarea> |
26892 | 27296 | </part> |
26893 | 27297 | </software> |
26894 | 27298 | |
26895 | <software name="whacacri"> | |
27299 | <software name="whacacri" supported="partial"> | |
26896 | 27300 | <description>Whac-a-Critter (USA)</description> |
26897 | 27301 | <year>1993</year> |
26898 | 27302 | <publisher>Realtec</publisher> |
26899 | 27303 | <part name="cart" interface="megadriv_cart"> |
26900 | 27304 | <feature name="pcb_type" value="REALTEC" /> |
26901 | <dataarea name="rom" size="20971520"> | |
27305 | <feature name="slot" value="rom_realtec" /> | |
27306 | <dataarea name="rom" size="524288"> | |
26902 | 27307 | <rom name="whac-a-critter (usa) (unl).bin" size="524288" crc="1bdd02b8" sha1="4b45801b112a641fee936e41a31728ee7aa2f834" offset="00000" loadflag="load16_word_swap" /> |
26903 | 27308 | </dataarea> |
26904 | 27309 | </part> |
r20695 | r20696 | |
26910 | 27315 | <publisher>Radica Games ~ Sega</publisher> |
26911 | 27316 | <part name="cart" interface="megadriv_cart"> |
26912 | 27317 | <feature name="pcb_type" value="RADICA" /> |
27318 | <feature name="slot" value="rom_radica" /> | |
26913 | 27319 | <dataarea name="rom" size="4194304"> |
26914 | 27320 | <rom name="radicav1.bin" size="4194304" crc="3b4c8438" sha1="5ed9c053f9ebc8d4bf571d57e562cf347585d158" offset="000000" /> |
26915 | 27321 | </dataarea> |
r20695 | r20696 | |
26922 | 27328 | <publisher>Radica Games ~ Capcom</publisher> |
26923 | 27329 | <part name="cart" interface="megadriv_cart"> |
26924 | 27330 | <feature name="pcb_type" value="RADICA" /> |
27331 | <feature name="slot" value="rom_radica" /> | |
26925 | 27332 | <dataarea name="rom" size="4194304"> |
26926 | 27333 | <rom name="radicasf.bin" size="4194304" crc="868afb44" sha1="f4339e36272c18b1d49aa4095127ed18e0961df6" offset="000000" /> |
26927 | 27334 | </dataarea> |
r20695 | r20696 | |
26931 | 27338 | <!-- Are these unprotected versions legit? or were they hacked to work with emus? --> |
26932 | 27339 | |
26933 | 27340 | <software name="chinf3a" cloneof="chinf3"> |
26934 | <description>Chinese Fighter III (Chi, | |
27341 | <description>Chinese Fighter III (Chi, Unprotected?)</description> | |
26935 | 27342 | <year>199?</year> |
26936 | 27343 | <publisher><unlicensed></publisher> |
26937 | 27344 | <part name="cart" interface="megadriv_cart"> |
r20695 | r20696 | |
26942 | 27349 | </software> |
26943 | 27350 | |
26944 | 27351 | <software name="kof98a" cloneof="kof98"> |
26945 | <description> | |
27352 | <description>K.O.F 98' (Unprotected?)</description> | |
26946 | 27353 | <year>199?</year> |
26947 | 27354 | <publisher><unlicensed></publisher> |
26948 | 27355 | <part name="cart" interface="megadriv_cart"> |
r20695 | r20696 | |
27040 | 27447 | <publisher><unknown></publisher> |
27041 | 27448 | <part name="cart" interface="megadriv_cart"> |
27042 | 27449 | <feature name="pcb_type" value="SEGA-SRAM" /> |
27450 | <feature name="slot" value="rom_sram" /> | |
27043 | 27451 | <dataarea name="rom" size="2097152"> |
27044 | 27452 | <rom name="duke_nukem_3d.bin" size="2097152" crc="13e93c0d" sha1="14ce7438a379973c8d66b0cc365d05a04d94f7dd" offset="000000" loadflag="load16_word_swap" /> |
27045 | 27453 | </dataarea> |
r20695 | r20696 | |
27066 | 27474 | <info name="alt_title" value="Shi Zi Wang 3 - The Lion King 3 (Box?)"/> |
27067 | 27475 | <part name="cart" interface="megadriv_cart"> |
27068 | 27476 | <feature name="pcb_type" value="LIONK3" /> |
27069 | <dataarea name="rom" size="20971520"> | |
27477 | <feature name="slot" value="rom_lion3" /> | |
27478 | <dataarea name="rom" size="4194304"> | |
27070 | 27479 | <rom name="lion_king_3.bin" size="2097152" crc="87e86943" sha1="0ef55dc45536963c8748192a4cb4864a87b03102" offset="000000" loadflag="load16_word_swap" /> |
27480 | <rom size="2097152" offset="0x200000" loadflag="reload" /> | |
27071 | 27481 | </dataarea> |
27072 | 27482 | </part> |
27073 | 27483 | </software> |
r20695 | r20696 | |
27078 | 27488 | <publisher><unlicensed></publisher> |
27079 | 27489 | <info name="alt_title" value="Shi Zi Wang 3 - The Lion King 3 (Box?)"/> |
27080 | 27490 | <part name="cart" interface="megadriv_cart"> |
27081 | <dataarea name="rom" size="2097152 | |
27491 | <dataarea name="rom" size="2097152"> | |
27082 | 27492 | <rom name="lion king 3 (unl).bin" size="2097152" crc="8e0555e4" sha1="dc34164d74d9b6542adef6838250793d023cd942" offset="00000" loadflag="load16_word_swap" /> |
27083 | 27493 | </dataarea> |
27084 | 27494 | </part> |
r20695 | r20696 | |
28157 | 28567 | <sharedfeat name="compatibility" value="PAL" /> |
28158 | 28568 | <sharedfeat name="addon" value="SVP" /> |
28159 | 28569 | <part name="cart" interface="megadriv_cart"> |
28570 | <feature name="slot" value="rom_svp" /> | |
28160 | 28571 | <dataarea name="rom" size="2097152"> |
28161 | 28572 | <rom name="mpr-16420.bin" size="2097152" crc="9624d4ef" sha1="2c3812f8a010571e51269a33a989598787d27c2d" offset="000000" loadflag="load16_word_swap" /> |
28162 | 28573 | </dataarea> |
r20695 | r20696 | |
28174 | 28585 | <sharedfeat name="compatibility" value="EUR-JPN" /> |
28175 | 28586 | <sharedfeat name="addon" value="SVP" /> |
28176 | 28587 | <part name="cart" interface="megadriv_cart"> |
28588 | <feature name="slot" value="rom_svp" /> | |
28177 | 28589 | <dataarea name="rom" size="2097152"> |
28178 | 28590 | <rom name="mpr-16389.bin" size="2097152" crc="53a293b5" sha1="0ad38a3ab1cc99edac72184f8ae420e13df5cac6" offset="000000" loadflag="load16_word_swap" /> |
28179 | 28591 | </dataarea> |
r20695 | r20696 | |
28188 | 28600 | <sharedfeat name="compatibility" value="NTSC-U" /> |
28189 | 28601 | <sharedfeat name="addon" value="SVP" /> |
28190 | 28602 | <part name="cart" interface="megadriv_cart"> |
28603 | <feature name="slot" value="rom_svp" /> | |
28191 | 28604 | <dataarea name="rom" size="2097152"> |
28192 | 28605 | <rom name="virtua racing (usa).bin" size="2097152" crc="7e1a324a" sha1="ff969ae53120cc4e7cb1a8a7e47458f2eb8a2165" offset="000000" loadflag="load16_word_swap" /> |
28193 | 28606 | </dataarea> |
r20695 | r20696 | |
---|---|---|
1257 | 1257 | $(MACHINE)/megacd.o \ |
1258 | 1258 | $(MACHINE)/megacdcd.o \ |
1259 | 1259 | $(MACHINE)/mega32x.o \ |
1260 | $(MACHINE)/megasvp.o \ | |
1261 | 1260 | $(MACHINE)/megavdp.o \ |
1262 | $(MACHINE)/md_cart.o \ | |
1263 | 1261 | $(DRIVERS)/megadrvb.o \ |
1264 | 1262 | $(DRIVERS)/megaplay.o \ |
1265 | 1263 | $(DRIVERS)/megatech.o \ |
r20695 | r20696 | |
---|---|---|
23 | 23 | #define MASTER_CLOCK_PAL 53203424 |
24 | 24 | #define SEGACD_CLOCK 12500000 |
25 | 25 | |
26 | #define MD_CPU_REGION_SIZE 0x800000 | |
26 | 27 | |
27 | #define MAX_MD_CART_SIZE 0x800000 | |
28 | ||
29 | /* where a fresh copy of rom is stashed for reset and banking setup */ | |
30 | #define VIRGIN_COPY_GEN 0xd00000 | |
31 | ||
32 | #define MD_CPU_REGION_SIZE (MAX_MD_CART_SIZE + VIRGIN_COPY_GEN) | |
33 | ||
34 | 28 | extern int sega_cd_connected; |
35 | 29 | |
36 | 30 | |
r20695 | r20696 | |
41 | 35 | INPUT_PORTS_EXTERN( megadri6 ); |
42 | 36 | INPUT_PORTS_EXTERN( ssf2mdb ); |
43 | 37 | INPUT_PORTS_EXTERN( mk3mdb ); |
44 | INPUT_PORTS_EXTERN( megdsvp ); | |
45 | 38 | |
46 | 39 | MACHINE_CONFIG_EXTERN( megadriv_timers ); |
47 | 40 | MACHINE_CONFIG_EXTERN( md_ntsc ); |
48 | 41 | MACHINE_CONFIG_EXTERN( md_pal ); |
49 | 42 | MACHINE_CONFIG_EXTERN( md_svp ); |
50 | 43 | |
51 | MACHINE_CONFIG_EXTERN( megdsvppal ); | |
52 | MACHINE_CONFIG_EXTERN( megadriv ); | |
53 | MACHINE_CONFIG_EXTERN( megadpal ); | |
54 | MACHINE_CONFIG_EXTERN( megdsvp ); | |
55 | 44 | MACHINE_CONFIG_EXTERN( genesis_32x ); |
56 | 45 | MACHINE_CONFIG_EXTERN( genesis_32x_pal ); |
57 | 46 | MACHINE_CONFIG_EXTERN( genesis_scd ); |
r20695 | r20696 | |
61 | 50 | MACHINE_CONFIG_EXTERN( genesis_32x_scd ); |
62 | 51 | MACHINE_CONFIG_EXTERN( md_bootleg ); // for topshoot.c & hshavoc.c |
63 | 52 | |
64 | extern UINT16* megadriv_backupram; | |
65 | extern int megadriv_backupram_length; | |
53 | extern cpu_device *_svp_cpu; | |
66 | 54 | |
67 | 55 | extern UINT8 megatech_bios_port_cc_dc_r(running_machine &machine, int offset, int ctrl); |
68 | 56 | extern void megadriv_stop_scanline_timer(running_machine &machine); |
r20695 | r20696 | |
384 | 372 | int ssf2_lastoff, ssf2_lastdata; |
385 | 373 | }; |
386 | 374 | |
387 | class md_ | |
375 | class md_havoc_state : public md_base_state | |
388 | 376 | { |
389 | 377 | public: |
390 | md_ | |
378 | md_havoc_state(const machine_config &mconfig, device_type type, const char *tag) | |
391 | 379 | : md_base_state(mconfig, type, tag) { } |
392 | 380 | |
393 | emu_timer *m_mess_io_timeout[3]; | |
394 | int m_mess_io_stage[3]; | |
395 | UINT8 m_jcart_io_data[2]; | |
396 | ||
397 | megadriv_cart m_md_cart; | |
398 | ||
399 | 381 | DECLARE_DRIVER_INIT(hshavoc); |
400 | DECLARE_DRIVER_INIT(topshoot); | |
401 | ||
402 | DECLARE_DRIVER_INIT(genesis); | |
403 | DECLARE_DRIVER_INIT(mess_md_common); | |
404 | DECLARE_DRIVER_INIT(md_eur); | |
405 | DECLARE_DRIVER_INIT(md_jpn); | |
406 | ||
407 | 382 | }; |
408 | 383 | |
409 | 384 | |
410 | class mdsvp_state : public md_cons_state | |
411 | { | |
412 | public: | |
413 | mdsvp_state(const machine_config &mconfig, device_type type, const char *tag) | |
414 | : md_cons_state(mconfig, type, tag) { } | |
415 | ||
416 | UINT8 *m_iram; // IRAM (0-0x7ff) | |
417 | UINT8 *m_dram; // [0x20000]; | |
418 | UINT32 m_pmac_read[6]; // read modes/addrs for PM0-PM5 | |
419 | UINT32 m_pmac_write[6]; // write ... | |
420 | PAIR m_pmc; | |
421 | UINT32 m_emu_status; | |
422 | UINT16 m_XST; // external status, mapped at a15000 and a15002 on 68k side. | |
423 | UINT16 m_XST2; // status of XST (bit1 set when 68k writes to XST) | |
424 | }; | |
425 | ||
426 | ADDRESS_MAP_EXTERN( svp_ssp_map, driver_device ); | |
427 | ADDRESS_MAP_EXTERN( svp_ext_map, driver_device ); | |
428 | extern void svp_init(running_machine &machine); | |
429 | extern cpu_device *_svp_cpu; | |
430 | ||
431 | ||
432 | ||
433 | 385 | UINT8 megadrive_io_read_data_port_3button(running_machine &machine, int portnum); |
434 | 386 | |
435 | 387 | class _32x_state : public md_base_state |
r20695 | r20696 | |
459 | 411 | { } |
460 | 412 | }; |
461 | 413 | |
462 | ||
463 | /*----------- defined in machine/md_cart.c -----------*/ | |
464 | ||
465 | MACHINE_CONFIG_EXTERN( genesis_cartslot ); | |
466 | 414 | MACHINE_CONFIG_EXTERN( _32x_cartslot ); |
467 | MACHINE_CONFIG_EXTERN( pico_cartslot ); | |
468 | MACHINE_START( md_sram ); | |
469 | 415 | |
416 | ||
470 | 417 | /*----------- defined in drivers/megadriv.c -----------*/ |
471 | 418 | |
472 | 419 | /* These are needed to handle J-Cart inputs */ |
r20695 | r20696 | |
---|---|---|
599 | 599 | { |
600 | 600 | if (!mame_stricmp("genesis", pcb_name)) |
601 | 601 | { |
602 | printf("%s is genesis\n", mt_cart->tag); | |
602 | mame_printf_debug("%s is genesis\n", mt_cart->tag); | |
603 | 603 | state->m_cart_is_genesis[this_cart->slot] = 1; |
604 | 604 | } |
605 | 605 | else if (!mame_stricmp("sms", pcb_name)) |
606 | 606 | { |
607 | printf("%s is sms\n", mt_cart->tag); | |
607 | mame_printf_debug("%s is sms\n", mt_cart->tag); | |
608 | 608 | state->m_cart_is_genesis[this_cart->slot] = 0; |
609 | 609 | } |
610 | 610 | else |
611 | 611 | { |
612 | printf("%s is invalid\n", mt_cart->tag); | |
612 | mame_printf_debug("%s is invalid\n", mt_cart->tag); | |
613 | 613 | } |
614 | 614 | |
615 | 615 | } |
r20695 | r20696 | |
---|---|---|
115 | 115 | |
116 | 116 | #endif |
117 | 117 | |
118 | DRIVER_INIT_MEMBER(md_ | |
118 | DRIVER_INIT_MEMBER(md_havoc_state,hshavoc) | |
119 | 119 | { |
120 | 120 | int x; |
121 | 121 | UINT16 *src = (UINT16 *)machine().root_device().memregion("maincpu")->base(); |
r20695 | r20696 | |
227 | 227 | |
228 | 228 | |
229 | 229 | |
230 | GAME( 1993, hshavoc, 0, md_bootleg, hshavoc, md_cons_state, hshavoc, ROT0, "Data East", "High Seas Havoc",GAME_NOT_WORKING ) | |
231 | //GAME( 1993, hshavoc2, hshavoc, md_bootleg, hshavoc, md_cons_state, genesis, ROT0, "Data East", "High Seas Havoc (Genesis ROM)",GAME_NOT_WORKING ) | |
230 | GAME( 1993, hshavoc, 0, md_bootleg, hshavoc, md_havoc_state, hshavoc, ROT0, "Data East", "High Seas Havoc",GAME_NOT_WORKING ) | |
231 | //GAME( 1993, hshavoc2, hshavoc, md_bootleg, hshavoc, md_havoc_state, genesis, ROT0, "Data East", "High Seas Havoc (Genesis ROM)",GAME_NOT_WORKING ) |
r20695 | r20696 | |
---|---|---|
763 | 763 | DRIVER_INIT_CALL(megadriv); |
764 | 764 | } |
765 | 765 | |
766 | DRIVER_INIT_MEMBER(md_ | |
766 | DRIVER_INIT_MEMBER(md_boot_state,topshoot) | |
767 | 767 | { |
768 | 768 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x200050, 0x200051, FUNC(topshoot_200051_r) ); |
769 | 769 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x200042, 0x200043, "IN0"); |
r20695 | r20696 | |
785 | 785 | GAME( 1996, mk3mdb, 0, megadrvb, mk3mdb, md_boot_state, mk3mdb, ROT0, "bootleg / Midway", "Mortal Kombat 3 (bootleg of Megadrive version)", 0) |
786 | 786 | GAME( 1994, ssf2mdb, 0, megadrvb, ssf2mdb, md_boot_state, ssf2mdb, ROT0, "bootleg / Capcom", "Super Street Fighter II - The New Challengers (bootleg of Japanese MegaDrive version)", 0) |
787 | 787 | GAME( 1993, srmdb, 0, megadrvb, srmdb, md_boot_state, srmdb, ROT0, "bootleg / Konami", "Sunset Riders (bootleg of Megadrive version)", 0) |
788 | GAME( 1995, topshoot, 0, md_bootleg, topshoot, md_ | |
788 | GAME( 1995, topshoot, 0, md_bootleg, topshoot, md_boot_state, topshoot, ROT0, "Sun Mixing", "Top Shooter", 0) |
r20695 | r20696 | |
---|---|---|
1 | /*************************************************************************** | |
2 | ||
3 | megadriv.c | |
4 | ||
5 | Machine file to handle emulation of the Sega Mega Drive & Genesis in MESS. | |
6 | ||
7 | i2c games mapping table: | |
8 | ||
9 | game name | SDA_IN | SDA_OUT | SCL | SIZE_MASK | PAGE_MASK | | |
10 | ----------------------------------|------------|------------|------------|----------------|-----------| | |
11 | NBA Jam | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x00ff (24C02) | 0x03 | xx | |
12 | NBA Jam TE | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x00ff (24C02) | 0x03 | xx | |
13 | NBA Jam TE (32x) | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x00ff (24C02) | 0x03 | | |
14 | NFL Quarterback Club | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x00ff (24C02) | 0x03 | xx | |
15 | NFL Quarterback Club 96 | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x07ff (24C16) | 0x07 | xx | |
16 | College Slam | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x1fff (24C64) | 0x07 | xx | |
17 | Frank Thomas Big Hurt Baseball | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x1fff (24C64) | 0x07 | xx | |
18 | NHLPA Hockey 93 | 0x200001-7 | 0x200001-7 | 0x200001-6 | 0x007f (24C01) | 0x03 | xx | |
19 | Rings of Power | 0x200001-7 | 0x200001-7 | 0x200001-6 | 0x007f (24C01) | 0x03 | xx | |
20 | Evander Holyfield's Boxing | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx | |
21 | Greatest Heavyweights of the Ring | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx | |
22 | Wonder Boy V | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx | |
23 | Sports Talk Baseball | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx | |
24 | Megaman - the Wily Wars | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx ** | |
25 | Micro Machines 2 | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x03ff (24C08) | 0x0f | | |
26 | Micro Machines Military | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x03ff (24C08) | 0x0f | | |
27 | Micro Machines 96 | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x07ff (24C16) | 0x0f | | |
28 | Brian Lara Cricket 96 | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x1fff (24C64) | 0x??* | | |
29 | ----------------------------------|------------|------------|------------|----------------|-----------| | |
30 | ||
31 | * Notes: check these | |
32 | ** original Rockman Mega World (J) set uses normal backup RAM | |
33 | ||
34 | 2008-09: Moved here cart code and custom mapper handlers. Hopefully, | |
35 | it will make painless the future merging with HazeMD | |
36 | 2008-10: Fixed SRAM, matching as much as possible HazeMD. Some game is | |
37 | not detected, however. E.g. Sonic 3. Also some games seem false | |
38 | positives (e.g. Wonderboy 5: according to its headers it should | |
39 | have 1byte of SRAM). Better detection routines would be welcome. | |
40 | 2009-06: Changed SRAM code, fixing more games, including Sonic 3. The | |
41 | false positives seem only some of the games using EEPROM. Todo | |
42 | list in mess/drivers/genesis.c includes EEPROM emulation. | |
43 | ||
44 | ***************************************************************************/ | |
45 | ||
46 | ||
47 | #include "emu.h" | |
48 | #include "formats/imageutl.h" | |
49 | #include "cpu/m68000/m68000.h" | |
50 | ||
51 | #include "imagedev/cartslot.h" | |
52 | #include "includes/megadriv.h" | |
53 | ||
54 | ||
55 | /* PCB */ | |
56 | enum | |
57 | { | |
58 | SEGA_STD = 0, | |
59 | ||
60 | SEGA_SRAM, SEGA_FRAM, | |
61 | ||
62 | CM_JCART, CM_JCART_SEPROM, /* Codemasters PCB (J-Carts and SEPROM) */ | |
63 | ||
64 | SSF2, /* Super Street Fighter 2 */ | |
65 | GAME_KANDUME, /* Game no Kandume Otokuyou */ | |
66 | BEGGAR, /* Xin Qigai Wangzi uses different sram start address and has no valid header */ | |
67 | ||
68 | // EEPROM | |
69 | SEGA_EEPROM, /* Wonder Boy V / Evander Holyfield's Boxing / Greatest Heavyweights of the Ring / Sports Talk Baseball / Megaman */ | |
70 | NBA_JAM, /* NBA Jam */ | |
71 | NBA_JAM_TE, /* NBA Jam TE / NFL Quarterback Club */ | |
72 | NFL_QB_96, /* NFL Quarterback Club '96 */ | |
73 | C_SLAM, /* College Slam / Frank Thomas Big Hurt Baseball */ | |
74 | EA_NHLPA, /* NHLPA Hockey 93 / Rings of Power */ | |
75 | CODE_MASTERS, /* Micro Machines 2 / Military / 96 / Brian Lara Cricket 96 */ | |
76 | ||
77 | MC_SUP19IN1, /* Super 19 in 1 */ | |
78 | MC_SUP15IN1, /* Super 15 in 1 */ | |
79 | MC_12IN1, /* 12 in 1 and a few more multicarts */ | |
80 | BUGSLIFE, /* A Bug's Life */ | |
81 | CHINFIGHT3, /* Chinese Fighters 3 */ | |
82 | ELFWOR, /* Linghuan Daoshi Super Magician */ | |
83 | KOF98, /* King of Fighters '98 */ | |
84 | KOF99, /* King of Fighters '99 */ | |
85 | LIONK2, /* Lion King 2 */ | |
86 | LIONK3, /* Lion King 3 */ | |
87 | SKINGKONG, /* Super King Kong 99 */ | |
88 | SDK99, /* Super Donkey Kong 99 */ | |
89 | MJLOVER, /* Mahjong Lover */ | |
90 | MULAN, /* Hua Mu Lan - Mulan */ | |
91 | POKEMON, /* Pocket Monster */ | |
92 | POKEMON2, /* Pocket Monster 2 */ | |
93 | KAIJU, /* Pokemon Stadium */ | |
94 | RADICA, /* Radica TV games.. these probably should be a separate driver since they are a separate 'console' */ | |
95 | REALTEC, /* Whac a Critter/Mallet legend, Defend the Earth, Funnyworld/Ballonboy */ | |
96 | REDCLIFF, /* Romance of the Three Kingdoms - Battle of Red Cliffs, already decoded from .mdx format */ | |
97 | REDCL_EN, /* The encoded version... */ | |
98 | ROCKMANX3, /* Rockman X3 */ | |
99 | SMB, /* Super Mario Bros. */ | |
100 | SMB2, /* Super Mario Bros. 2 */ | |
101 | SMOUSE, /* Smart Mouse */ | |
102 | SOULBLAD, /* Soul Blade */ | |
103 | SQUIRRELK, /* Squirrel King */ | |
104 | SBUBBOB, /* Super Bubble Bobble */ | |
105 | TOPFIGHTER, /* Top Fighter 2000 MK VIII */ | |
106 | PSOLAR /* Pier Solar */ | |
107 | }; | |
108 | ||
109 | struct md_pcb | |
110 | { | |
111 | const char *pcb_name; | |
112 | int pcb_id; | |
113 | }; | |
114 | ||
115 | // Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it | |
116 | static const md_pcb pcb_list[] = | |
117 | { | |
118 | {"SEGA-EEPROM", SEGA_EEPROM}, | |
119 | {"SEGA-SRAM", SEGA_SRAM}, | |
120 | {"SEGA-FRAM", SEGA_FRAM}, | |
121 | ||
122 | {"CM-JCART", CM_JCART}, | |
123 | {"CM-JCART-SEPROM", CM_JCART_SEPROM}, | |
124 | {"CM-SEPROM", CODE_MASTERS}, | |
125 | ||
126 | {"SSF2", SSF2}, | |
127 | {"GAMEKANDUME", GAME_KANDUME}, | |
128 | {"BEGGAR", BEGGAR}, | |
129 | ||
130 | {"NBAJAM", NBA_JAM}, | |
131 | {"NBAJAMTE", NBA_JAM_TE}, | |
132 | {"NFLQB96", NFL_QB_96}, | |
133 | {"CSLAM", C_SLAM}, | |
134 | {"NHLPA", EA_NHLPA}, | |
135 | ||
136 | {"LIONK3", LIONK3}, | |
137 | {"SDK99", SDK99}, | |
138 | {"SKINGKONG", SKINGKONG}, | |
139 | {"REDCLIFF", REDCL_EN}, | |
140 | {"RADICA", RADICA}, | |
141 | {"KOF98", KOF98}, | |
142 | {"KOF99", KOF99}, | |
143 | {"SOULBLAD", SOULBLAD}, | |
144 | {"MJLOVER", MJLOVER}, | |
145 | {"SQUIRRELK", SQUIRRELK}, | |
146 | {"SMOUSE", SMOUSE}, | |
147 | {"SMB", SMB}, | |
148 | {"SMB2", SMB2}, | |
149 | {"KAIJU", KAIJU}, | |
150 | {"CHINFIGHT3", CHINFIGHT3}, | |
151 | {"LIONK2", LIONK2}, | |
152 | {"BUGSLIFE", BUGSLIFE}, | |
153 | {"ELFWOR", ELFWOR}, | |
154 | {"ROCKMANX3", ROCKMANX3}, | |
155 | {"SBUBBOB", SBUBBOB}, | |
156 | {"REALTEC", REALTEC}, | |
157 | {"MC_SUP19IN1", MC_SUP19IN1}, | |
158 | {"MC_SUP15IN1", MC_SUP15IN1}, | |
159 | {"MC_12IN1", MC_12IN1}, | |
160 | {"TOPFIGHTER", TOPFIGHTER}, | |
161 | {"POKEMON", POKEMON}, | |
162 | {"POKEMON2", POKEMON2}, | |
163 | {"MULAN", MULAN}, | |
164 | {"PSOLAR", PSOLAR} | |
165 | }; | |
166 | ||
167 | static int md_get_pcb_id(const char *pcb) | |
168 | { | |
169 | int i; | |
170 | ||
171 | for (i = 0; i < ARRAY_LENGTH(pcb_list); i++) | |
172 | { | |
173 | if (!mame_stricmp(pcb_list[i].pcb_name, pcb)) | |
174 | return pcb_list[i].pcb_id; | |
175 | } | |
176 | ||
177 | return SEGA_STD; | |
178 | } | |
179 | ||
180 | ||
181 | /************************************* | |
182 | * | |
183 | * Handlers for custom mappers | |
184 | * | |
185 | *************************************/ | |
186 | ||
187 | /************************************* | |
188 | * Super Street Fighter II | |
189 | *************************************/ | |
190 | static WRITE16_HANDLER( genesis_ssf2_bank_w ) | |
191 | { | |
192 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
193 | UINT8 *ROM = state->memregion("maincpu")->base(); | |
194 | ||
195 | if ((state->m_md_cart.ssf2_lastoff != offset) || (state->m_md_cart.ssf2_lastdata != data)) | |
196 | { | |
197 | state->m_md_cart.ssf2_lastoff = offset; | |
198 | state->m_md_cart.ssf2_lastdata = data; | |
199 | switch (offset << 1) | |
200 | { | |
201 | case 0x00: /* write protect register */ // this is not a write protect, but seems to do nothing useful but reset bank0 after the checksum test (red screen otherwise) | |
202 | if (data == 2) | |
203 | { | |
204 | memcpy(ROM + 0x000000, ROM + 0x400000 + (((data & 0xf) - 2) * 0x080000), 0x080000); | |
205 | } | |
206 | break; | |
207 | case 0x02: /* 0x080000 - 0x0FFFFF */ | |
208 | memcpy(ROM + 0x080000, ROM + 0x400000 + ((data & 0xf) * 0x080000), 0x080000); | |
209 | break; | |
210 | case 0x04: /* 0x100000 - 0x17FFFF */ | |
211 | memcpy(ROM + 0x100000, ROM + 0x400000 + ((data & 0xf) * 0x080000), 0x080000); | |
212 | break; | |
213 | case 0x06: /* 0x180000 - 0x1FFFFF */ | |
214 | memcpy(ROM + 0x180000, ROM + 0x400000 + ((data & 0xf) * 0x080000), 0x080000); | |
215 | break; | |
216 | case 0x08: /* 0x200000 - 0x27FFFF */ | |
217 | memcpy(ROM + 0x200000, ROM + 0x400000 + ((data & 0xf) * 0x080000), 0x080000); | |
218 | break; | |
219 | case 0x0a: /* 0x280000 - 0x2FFFFF */ | |
220 | memcpy(ROM + 0x280000, ROM + 0x400000 + ((data & 0xf) * 0x080000), 0x080000); | |
221 | break; | |
222 | case 0x0c: /* 0x300000 - 0x37FFFF */ | |
223 | memcpy(ROM + 0x300000, ROM + 0x400000 + ((data & 0xf) * 0x080000), 0x080000); | |
224 | break; | |
225 | case 0x0e: /* 0x380000 - 0x3FFFFF */ | |
226 | memcpy(ROM + 0x380000, ROM + 0x400000 + ((data & 0xf) * 0x080000), 0x080000); | |
227 | break; | |
228 | } | |
229 | } | |
230 | } | |
231 | ||
232 | /************************************* | |
233 | * Lion King 3, Super King Kong 99 | |
234 | * & Super Donkey Kong 99 | |
235 | *************************************/ | |
236 | #ifdef UNUSED_FUNCTION | |
237 | static WRITE16_HANDLER( l3alt_pdat_w ) | |
238 | { | |
239 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
240 | state->m_md_cart.l3alt_pdat = data; | |
241 | } | |
242 | ||
243 | static WRITE16_HANDLER( l3alt_pcmd_w ) | |
244 | { | |
245 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
246 | state->m_md_cart.l3alt_pcmd = data; | |
247 | } | |
248 | #endif | |
249 | ||
250 | static READ16_HANDLER( l3alt_prot_r ) | |
251 | { | |
252 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
253 | int retdata = 0; | |
254 | ||
255 | offset &= 0x07; | |
256 | ||
257 | switch (offset) | |
258 | { | |
259 | case 2: | |
260 | ||
261 | switch (state->m_md_cart.l3alt_pcmd) | |
262 | { | |
263 | case 1: | |
264 | retdata = state->m_md_cart.l3alt_pdat >> 1; | |
265 | break; | |
266 | ||
267 | case 2: | |
268 | retdata = state->m_md_cart.l3alt_pdat >> 4; | |
269 | retdata |= (state->m_md_cart.l3alt_pdat & 0x0f) << 4; | |
270 | break; | |
271 | ||
272 | default: | |
273 | /* printf("unk prot case %d\n", l3alt_pcmd); */ | |
274 | retdata = (BIT(state->m_md_cart.l3alt_pdat, 7) << 0); | |
275 | retdata |= (BIT(state->m_md_cart.l3alt_pdat, 6) << 1); | |
276 | retdata |= (BIT(state->m_md_cart.l3alt_pdat, 5) << 2); | |
277 | retdata |= (BIT(state->m_md_cart.l3alt_pdat, 4) << 3); | |
278 | retdata |= (BIT(state->m_md_cart.l3alt_pdat, 3) << 4); | |
279 | retdata |= (BIT(state->m_md_cart.l3alt_pdat, 2) << 5); | |
280 | retdata |= (BIT(state->m_md_cart.l3alt_pdat, 1) << 6); | |
281 | retdata |= (BIT(state->m_md_cart.l3alt_pdat, 0) << 7); | |
282 | break; | |
283 | } | |
284 | break; | |
285 | ||
286 | default: | |
287 | logerror("protection read, unknown offset\n"); | |
288 | break; | |
289 | } | |
290 | ||
291 | /* printf("%06x: l3alt_pdat_w %04x l3alt_pcmd_w %04x return %04x\n", activecpu_get_pc(), l3alt_pdat, l3alt_pcmd, retdata); */ | |
292 | ||
293 | return retdata; | |
294 | } | |
295 | ||
296 | static WRITE16_HANDLER( l3alt_prot_w ) | |
297 | { | |
298 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
299 | offset &= 0x7; | |
300 | ||
301 | switch (offset) | |
302 | { | |
303 | case 0x0: | |
304 | state->m_md_cart.l3alt_pdat = data; | |
305 | break; | |
306 | case 0x1: | |
307 | state->m_md_cart.l3alt_pcmd = data; | |
308 | break; | |
309 | default: | |
310 | logerror("protection write, unknown offst\n"); | |
311 | break; | |
312 | } | |
313 | } | |
314 | ||
315 | static WRITE16_HANDLER( l3alt_bank_w ) | |
316 | { | |
317 | offset &= 0x7; | |
318 | ||
319 | switch (offset) | |
320 | { | |
321 | case 0: | |
322 | { | |
323 | UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base(); | |
324 | /* printf("%06x data %04x\n",activecpu_get_pc(), data); */ | |
325 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN + (data & 0xffff) * 0x8000], 0x8000); | |
326 | } | |
327 | break; | |
328 | ||
329 | default: | |
330 | logerror("unk bank w\n"); | |
331 | break; | |
332 | ||
333 | } | |
334 | ||
335 | } | |
336 | ||
337 | /************************************* | |
338 | * Whac a Critter/Mallet Legend, | |
339 | * Defend the Earth, Funnyworld/Ballonboy | |
340 | *************************************/ | |
341 | static WRITE16_HANDLER( realtec_402000_w ) | |
342 | { | |
343 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
344 | state->m_md_cart.realtec_bank_addr = 0; | |
345 | state->m_md_cart.realtec_bank_size = (data >> 8) & 0x1f; | |
346 | } | |
347 | ||
348 | static WRITE16_HANDLER( realtec_400000_w ) | |
349 | { | |
350 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
351 | int bankdata = (data >> 9) & 0x7; | |
352 | ||
353 | UINT8 *ROM = state->memregion("maincpu")->base(); | |
354 | ||
355 | state->m_md_cart.realtec_old_bank_addr = state->m_md_cart.realtec_bank_addr; | |
356 | state->m_md_cart.realtec_bank_addr = (state->m_md_cart.realtec_bank_addr & 0x7) | bankdata << 3; | |
357 | ||
358 | memcpy(ROM, ROM + (state->m_md_cart.realtec_bank_addr * 0x20000) + 0x400000, state->m_md_cart.realtec_bank_size * 0x20000); | |
359 | memcpy(ROM + state->m_md_cart.realtec_bank_size * 0x20000, ROM + (state->m_md_cart.realtec_bank_addr * 0x20000) + 0x400000, state->m_md_cart.realtec_bank_size * 0x20000); | |
360 | } | |
361 | ||
362 | static WRITE16_HANDLER( realtec_404000_w ) | |
363 | { | |
364 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
365 | int bankdata = (data >> 8) & 0x3; | |
366 | UINT8 *ROM = state->memregion("maincpu")->base(); | |
367 | ||
368 | state->m_md_cart.realtec_old_bank_addr = state->m_md_cart.realtec_bank_addr; | |
369 | state->m_md_cart.realtec_bank_addr = (state->m_md_cart.realtec_bank_addr & 0xf8) | bankdata; | |
370 | ||
371 | if (state->m_md_cart.realtec_old_bank_addr != state->m_md_cart.realtec_bank_addr) | |
372 | { | |
373 | memcpy(ROM, ROM + (state->m_md_cart.realtec_bank_addr * 0x20000)+ 0x400000, state->m_md_cart.realtec_bank_size * 0x20000); | |
374 | memcpy(ROM + state->m_md_cart.realtec_bank_size * 0x20000, ROM + (state->m_md_cart.realtec_bank_addr * 0x20000) + 0x400000, state->m_md_cart.realtec_bank_size * 0x20000); | |
375 | } | |
376 | } | |
377 | ||
378 | /************************************* | |
379 | * Chinese Fighters 3 | |
380 | *************************************/ | |
381 | static WRITE16_HANDLER( chifi3_bank_w ) | |
382 | { | |
383 | UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base(); | |
384 | ||
385 | if (data == 0xf100) // *hit player | |
386 | { | |
387 | int x; | |
388 | for (x = 0; x < 0x100000; x += 0x10000) | |
389 | { | |
390 | memcpy(ROM + x, ROM + 0x410000, 0x10000); | |
391 | } | |
392 | } | |
393 | else if (data == 0xd700) // title screen.. | |
394 | { | |
395 | int x; | |
396 | for (x = 0; x < 0x100000; x += 0x10000) | |
397 | { | |
398 | memcpy(ROM + x, ROM + 0x470000, 0x10000); | |
399 | } | |
400 | } | |
401 | else if (data == 0xd300) // character hits floor | |
402 | { | |
403 | int x; | |
404 | for (x = 0; x < 0x100000; x += 0x10000) | |
405 | { | |
406 | memcpy(ROM + x, ROM + 0x430000, 0x10000); | |
407 | } | |
408 | } | |
409 | else if (data == 0x0000) | |
410 | { | |
411 | int x; | |
412 | for (x = 0; x < 0x100000; x += 0x10000) | |
413 | { | |
414 | memcpy(ROM + x, ROM + 0x400000 + x, 0x10000); | |
415 | } | |
416 | } | |
417 | else | |
418 | { | |
419 | logerror("%06x chifi3, bankw? %04x %04x\n", space.device().safe_pc(), offset, data); | |
420 | } | |
421 | ||
422 | } | |
423 | ||
424 | static READ16_HANDLER( chifi3_prot_r ) | |
425 | { | |
426 | UINT32 retdat; | |
427 | ||
428 | /* not 100% correct, there may be some relationship between the reads here | |
429 | and the writes made at the start of the game.. */ | |
430 | ||
431 | /* | |
432 | 04dc10 chifi3, prot_r? 2800 | |
433 | 04cefa chifi3, prot_r? 65262 | |
434 | */ | |
435 | ||
436 | if (space.device().safe_pc() == 0x01782) // makes 'VS' screen appear | |
437 | { | |
438 | retdat = space.device().state().state_int(M68K_D3) & 0xff; | |
439 | retdat <<= 8; | |
440 | return retdat; | |
441 | } | |
442 | else if (space.device().safe_pc() == 0x1c24) // background gfx etc. | |
443 | { | |
444 | retdat = space.device().state().state_int(M68K_D3) & 0xff; | |
445 | retdat <<= 8; | |
446 | return retdat; | |
447 | } | |
448 | else if (space.device().safe_pc() == 0x10c4a) // unknown | |
449 | { | |
450 | return space.machine().rand(); | |
451 | } | |
452 | else if (space.device().safe_pc() == 0x10c50) // unknown | |
453 | { | |
454 | return space.machine().rand(); | |
455 | } | |
456 | else if (space.device().safe_pc() == 0x10c52) // relates to the game speed.. | |
457 | { | |
458 | retdat = space.device().state().state_int(M68K_D4) & 0xff; | |
459 | retdat <<= 8; | |
460 | return retdat; | |
461 | } | |
462 | else if (space.device().safe_pc() == 0x061ae) | |
463 | { | |
464 | retdat = space.device().state().state_int(M68K_D3) & 0xff; | |
465 | retdat <<= 8; | |
466 | return retdat; | |
467 | } | |
468 | else if (space.device().safe_pc() == 0x061b0) | |
469 | { | |
470 | retdat = space.device().state().state_int(M68K_D3) & 0xff; | |
471 | retdat <<= 8; | |
472 | return retdat; | |
473 | } | |
474 | else | |
475 | { | |
476 | logerror("%06x chifi3, prot_r? %04x\n", space.device().safe_pc(), offset); | |
477 | } | |
478 | ||
479 | return 0; | |
480 | } | |
481 | ||
482 | /************************************* | |
483 | * Super 19 in 1 & Super 15 in 1 | |
484 | *************************************/ | |
485 | static WRITE16_HANDLER( s19in1_bank ) | |
486 | { | |
487 | UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base(); | |
488 | memcpy(ROM + 0x000000, ROM + 0x400000 + ((offset << 1) * 0x10000), 0x80000); | |
489 | } | |
490 | ||
491 | /************************************* | |
492 | * Kaiju? (Pokemon Stadium) | |
493 | *************************************/ | |
494 | static WRITE16_HANDLER( kaiju_bank_w ) | |
495 | { | |
496 | UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base(); | |
497 | memcpy(ROM + 0x000000, ROM + 0x400000 + (data & 0x7f) * 0x8000, 0x8000); | |
498 | } | |
499 | ||
500 | /************************************* | |
501 | * Soulblade | |
502 | *************************************/ | |
503 | static READ16_HANDLER( soulb_400006_r ) | |
504 | { | |
505 | // printf("%06x soulb_400006_r\n",space.device().safe_pc()); | |
506 | return 0xf000; | |
507 | } | |
508 | ||
509 | static READ16_HANDLER( soulb_400002_r ) | |
510 | { | |
511 | // printf("%06x soulb_400002_r\n",space.device().safe_pc()); | |
512 | return 0x9800; | |
513 | } | |
514 | ||
515 | static READ16_HANDLER( soulb_400004_r ) | |
516 | { | |
517 | // return 0x9800; | |
518 | // printf("%06x soulb_400004_r\n",space.device().safe_pc()); | |
519 | // | |
520 | return 0xc900; | |
521 | //aa | |
522 | //c9 | |
523 | } | |
524 | ||
525 | /************************************* | |
526 | * Mahjong Lover | |
527 | *************************************/ | |
528 | static READ16_HANDLER( mjlovr_prot_1_r ) | |
529 | { | |
530 | return 0x9000; | |
531 | } | |
532 | ||
533 | static READ16_HANDLER( mjlovr_prot_2_r ) | |
534 | { | |
535 | return 0xd300; | |
536 | } | |
537 | ||
538 | /************************************* | |
539 | * Super Mario Bros | |
540 | *************************************/ | |
541 | static READ16_HANDLER( smbro_prot_r ) | |
542 | { | |
543 | return 0xc; | |
544 | } | |
545 | ||
546 | ||
547 | /************************************* | |
548 | * Smart Mouse | |
549 | *************************************/ | |
550 | static READ16_HANDLER( smous_prot_r ) | |
551 | { | |
552 | switch (offset) | |
553 | { | |
554 | case 0: return 0x5500; | |
555 | case 1: return 0x0f00; | |
556 | case 2: return 0xaa00; | |
557 | case 3: return 0xf000; | |
558 | } | |
559 | ||
560 | return -1; | |
561 | } | |
562 | ||
563 | /************************************* | |
564 | * Super Bubble Bobble MD | |
565 | *************************************/ | |
566 | static READ16_HANDLER( sbub_extra1_r ) | |
567 | { | |
568 | return 0x5500; | |
569 | } | |
570 | ||
571 | static READ16_HANDLER( sbub_extra2_r ) | |
572 | { | |
573 | return 0x0f00; | |
574 | } | |
575 | ||
576 | /************************************* | |
577 | * King of Fighters 99 | |
578 | *************************************/ | |
579 | static READ16_HANDLER( kof99_A13002_r ) | |
580 | { | |
581 | // write 02 to a13002.. shift right 1? | |
582 | return 0x01; | |
583 | } | |
584 | ||
585 | static READ16_HANDLER( kof99_00A1303E_r ) | |
586 | { | |
587 | // write 3e to a1303e.. shift right 1? | |
588 | return 0x1f; | |
589 | } | |
590 | ||
591 | static READ16_HANDLER( kof99_A13000_r ) | |
592 | { | |
593 | // no write, startup check, chinese message if != 0 | |
594 | return 0x0; | |
595 | } | |
596 | ||
597 | /************************************* | |
598 | * Radica controllers | |
599 | *************************************/ | |
600 | static READ16_HANDLER( radica_bank_select ) | |
601 | { | |
602 | int bank = offset & 0x3f; | |
603 | UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base(); | |
604 | memcpy(ROM, ROM + 0x400000 + (bank * 0x10000), 0x400000); | |
605 | return 0; | |
606 | } | |
607 | ||
608 | /************************************* | |
609 | * ROTK Red Cliff | |
610 | *************************************/ | |
611 | static READ16_HANDLER( redclif_prot_r ) | |
612 | { | |
613 | return -0x56 << 8; | |
614 | } | |
615 | ||
616 | static READ16_HANDLER( redclif_prot2_r ) | |
617 | { | |
618 | return 0x55 << 8; | |
619 | } | |
620 | ||
621 | /************************************* | |
622 | * Squirrel King | |
623 | *************************************/ | |
624 | static READ16_HANDLER( squirrel_king_extra_r ) | |
625 | { | |
626 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
627 | return state->m_md_cart.squirrel_king_extra; | |
628 | } | |
629 | ||
630 | static WRITE16_HANDLER( squirrel_king_extra_w ) | |
631 | { | |
632 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
633 | state->m_md_cart.squirrel_king_extra = data; | |
634 | } | |
635 | ||
636 | /************************************* | |
637 | * Lion King 2 | |
638 | *************************************/ | |
639 | static READ16_HANDLER( lion2_prot1_r ) | |
640 | { | |
641 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
642 | return state->m_md_cart.lion2_prot1_data; | |
643 | } | |
644 | ||
645 | static READ16_HANDLER( lion2_prot2_r ) | |
646 | { | |
647 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
648 | return state->m_md_cart.lion2_prot2_data; | |
649 | } | |
650 | ||
651 | static WRITE16_HANDLER ( lion2_prot1_w ) | |
652 | { | |
653 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
654 | state->m_md_cart.lion2_prot1_data = data; | |
655 | } | |
656 | ||
657 | static WRITE16_HANDLER ( lion2_prot2_w ) | |
658 | { | |
659 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
660 | state->m_md_cart.lion2_prot2_data = data; | |
661 | } | |
662 | ||
663 | /************************************* | |
664 | * Rockman X3 | |
665 | *************************************/ | |
666 | static READ16_HANDLER( rx3_extra_r ) | |
667 | { | |
668 | return 0xc; | |
669 | } | |
670 | ||
671 | /************************************* | |
672 | * King of Fighters 98 | |
673 | *************************************/ | |
674 | static READ16_HANDLER( kof98_aa_r ) | |
675 | { | |
676 | return 0xaa00; | |
677 | } | |
678 | ||
679 | static READ16_HANDLER( kof98_0a_r ) | |
680 | { | |
681 | return 0x0a00; | |
682 | } | |
683 | ||
684 | static READ16_HANDLER( kof98_00_r ) | |
685 | { | |
686 | return 0x0000; | |
687 | } | |
688 | ||
689 | /************************************* | |
690 | * Super Mario Bros 2 | |
691 | *************************************/ | |
692 | static READ16_HANDLER( smb2_extra_r ) | |
693 | { | |
694 | return 0xa; | |
695 | } | |
696 | ||
697 | /************************************* | |
698 | * A Bug's Life | |
699 | *************************************/ | |
700 | static READ16_HANDLER( bugl_extra_r ) | |
701 | { | |
702 | return 0x28; | |
703 | } | |
704 | ||
705 | /************************************* | |
706 | * Linghuan Daoshi Super Magician | |
707 | * (internal game name Elf Wor) | |
708 | *************************************/ | |
709 | static READ16_HANDLER( elfwor_400000_r ) | |
710 | { | |
711 | return 0x5500; | |
712 | } | |
713 | ||
714 | static READ16_HANDLER( elfwor_400002_r ) | |
715 | { | |
716 | return 0x0f00; | |
717 | } | |
718 | ||
719 | static READ16_HANDLER( elfwor_400004_r ) | |
720 | { | |
721 | return 0xc900; | |
722 | } | |
723 | ||
724 | static READ16_HANDLER( elfwor_400006_r ) | |
725 | { | |
726 | return 0x1800; | |
727 | } | |
728 | ||
729 | /************************************* | |
730 | * Top Fighter - there is more to | |
731 | * this.. No display at startup etc.. | |
732 | *************************************/ | |
733 | static READ16_HANDLER( topfig_6BD294_r ) /* colours on title screen */ | |
734 | { | |
735 | static int x = -1; | |
736 | ||
737 | /* | |
738 | cpu #0 (PC=00177192): unmapped program memory word write to 006BD240 = 00A8 & 00FF | |
739 | cpu #0 (PC=0017719A): unmapped program memory word write to 006BD2D2 = 0098 & 00FF | |
740 | cpu #0 (PC=001771A2): unmapped program memory word read from 006BD294 & 00FF | |
741 | */ | |
742 | ||
743 | if (space.device().safe_pc()==0x1771a2) return 0x50; | |
744 | else | |
745 | { | |
746 | x++; | |
747 | logerror("%06x topfig_6BD294_r %04x\n",space.device().safe_pc(), x); | |
748 | return x; | |
749 | } | |
750 | } | |
751 | ||
752 | static READ16_HANDLER( topfig_6F5344_r ) // after char select | |
753 | { | |
754 | static int x = -1; | |
755 | ||
756 | if (space.device().safe_pc()==0x4C94E) | |
757 | { | |
758 | return space.machine().device("maincpu")->state().state_int((M68K_D0)) & 0xff; | |
759 | } | |
760 | else | |
761 | { | |
762 | x++; | |
763 | logerror("%06x topfig_6F5344_r %04x\n",space.device().safe_pc(), x); | |
764 | return x; | |
765 | } | |
766 | } | |
767 | ||
768 | static WRITE16_HANDLER( topfig_bank_w ) | |
769 | { | |
770 | UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base(); | |
771 | if (data == 0x002a) | |
772 | { | |
773 | memcpy(ROM + 0x060000, ROM + 0x570000, 0x8000); // == 0x2e*0x8000?! | |
774 | // printf("%06x offset %06x, data %04x\n",space.device().safe_pc(), offset, data); | |
775 | ||
776 | } | |
777 | else if (data==0x0035) // characters ingame | |
778 | { | |
779 | memcpy(ROM + 0x020000, ROM + 0x5a8000, 0x8000); // == 0x35*0x8000 | |
780 | } | |
781 | else if (data==0x000f) // special moves | |
782 | { | |
783 | memcpy(ROM + 0x058000, ROM + 0x478000, 0x8000); // == 0xf*0x8000 | |
784 | } | |
785 | else if (data==0x0000) | |
786 | { | |
787 | memcpy(ROM + 0x060000, ROM + 0x460000, 0x8000); | |
788 | memcpy(ROM + 0x020000, ROM + 0x420000, 0x8000); | |
789 | memcpy(ROM + 0x058000, ROM + 0x458000, 0x8000); | |
790 | // printf("%06x offset %06x, data %04x\n",space.device().safe_pc(), offset, data); | |
791 | } | |
792 | else | |
793 | { | |
794 | logerror("%06x offset %06x, data %04x\n", space.device().safe_pc(), offset, data); | |
795 | } | |
796 | ||
797 | } | |
798 | ||
799 | static READ16_HANDLER( topfig_645B44_r ) | |
800 | { | |
801 | //cpu #0 (PC=0004DE00): unmapped program memory word write to 00689B80 = 004A & 00FF | |
802 | //cpu #0 (PC=0004DE08): unmapped program memory word write to 00 = 00B5 & 00FF | |
803 | //cpu #0 (PC=0004DE0C): unmapped program memory word read from 00645B44 & 00FF | |
804 | ||
805 | return 0x9f;//0x25; | |
806 | } | |
807 | ||
808 | //cpu #0 (PC=0004CBAE): unmapped program memory word read from 006A35D4 & 00FF -- wants regD7 | |
809 | ||
810 | ||
811 | ||
812 | /************************************* | |
813 | * 12 in 1 and other multigame carts | |
814 | *************************************/ | |
815 | static WRITE16_HANDLER( mc_12in1_bank_w ) | |
816 | { | |
817 | UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base(); | |
818 | logerror("offset %06x", offset << 17); | |
819 | memcpy(ROM + 0x000000, ROM + VIRGIN_COPY_GEN + ((offset & 0x3f) << 17), 0x100000); | |
820 | } | |
821 | ||
822 | ||
823 | ||
824 | /************************************* | |
825 | * Stub for TMSS bios bank | |
826 | *************************************/ | |
827 | static WRITE16_HANDLER( genesis_TMSS_bank_w ) | |
828 | { | |
829 | /* this probably should do more, like make Genesis V2 'die' if the SEGA string is not written promptly */ | |
830 | } | |
831 | ||
832 | /************************************* | |
833 | * Pier Solar banking | |
834 | *************************************/ | |
835 | ||
836 | static WRITE16_HANDLER( psolar_bank_w ) | |
837 | { | |
838 | UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base(); | |
839 | logerror("switch bank %02x, page %02x\n",offset, data); | |
840 | memcpy(&ROM[0x280000 + (0x80000 * offset)], &ROM[VIRGIN_COPY_GEN + (0x80000 * (data&0x0f))], 0x80000); | |
841 | } | |
842 | ||
843 | static WRITE16_HANDLER( psolar_unk_w ) | |
844 | { | |
845 | logerror("A13001 write %02x\n", data); | |
846 | } | |
847 | ||
848 | static int psolar_rdcnt = 0; | |
849 | ||
850 | static READ16_HANDLER( psolar_hack_r ) | |
851 | { | |
852 | // ugly hack until we don't know much about game protection | |
853 | // first 3 reads from 15e6 return 0x00000010, then normal 0x00018010 value for crc check | |
854 | UINT16 res; | |
855 | if (psolar_rdcnt < 6) { | |
856 | psolar_rdcnt++; | |
857 | if (offset) | |
858 | res = 0x10; | |
859 | else | |
860 | res = 0x00; | |
861 | } else { | |
862 | if (offset) | |
863 | res = 0x8010; | |
864 | else | |
865 | res = 0x0001; | |
866 | } | |
867 | logerror("read 0x15e6 %d\n",psolar_rdcnt); | |
868 | return res; | |
869 | } | |
870 | /************************************* | |
871 | * | |
872 | * Handlers for SRAM & EEPROM | |
873 | * | |
874 | *************************************/ | |
875 | ||
876 | /************************************* | |
877 | * SRAM | |
878 | *************************************/ | |
879 | static READ16_HANDLER( genesis_sram_read ) | |
880 | { | |
881 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
882 | UINT8 *ROM; | |
883 | int rom_offset; | |
884 | ||
885 | if (state->m_md_cart.sram_active) | |
886 | return state->m_md_cart.sram[offset]; | |
887 | else | |
888 | { | |
889 | ROM = state->memregion("maincpu")->base(); | |
890 | rom_offset = state->m_md_cart.sram_start + (offset << 1); | |
891 | ||
892 | return (UINT16) ROM[rom_offset] | (ROM[rom_offset + 1] << 8); | |
893 | } | |
894 | } | |
895 | ||
896 | static WRITE16_HANDLER( genesis_sram_write ) | |
897 | { | |
898 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
899 | if (state->m_md_cart.sram_active) | |
900 | { | |
901 | if (!state->m_md_cart.sram_readonly) | |
902 | state->m_md_cart.sram[offset] = data; | |
903 | } | |
904 | } | |
905 | ||
906 | static void install_sram_rw_handlers(running_machine &machine, bool mask_addr) | |
907 | { | |
908 | md_cons_state *state = machine.driver_data<md_cons_state>(); | |
909 | device_image_interface *image = dynamic_cast<device_image_interface *>(machine.device("cart")); | |
910 | // if sram_start/end come from the cart header, they might be incorrect! from softlist, they are fine. | |
911 | UINT32 mask = mask_addr ? 0x3fffff : 0xffffff; | |
912 | ||
913 | mame_printf_debug("Allocing %d bytes for sram\n", state->m_md_cart.sram_end - state->m_md_cart.sram_start + 1); | |
914 | state->m_md_cart.sram = auto_alloc_array(machine, UINT16, (state->m_md_cart.sram_end - state->m_md_cart.sram_start + 1) / sizeof(UINT16)); | |
915 | image->battery_load(state->m_md_cart.sram, state->m_md_cart.sram_end - state->m_md_cart.sram_start + 1, 0xff); // Dino Dini's Soccer needs backup RAM to be 1fill | |
916 | memcpy(megadriv_backupram, state->m_md_cart.sram, state->m_md_cart.sram_end - state->m_md_cart.sram_start + 1); | |
917 | ||
918 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(state->m_md_cart.sram_start & mask, state->m_md_cart.sram_end & mask, FUNC(genesis_sram_read)); | |
919 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(state->m_md_cart.sram_start & mask, state->m_md_cart.sram_end & mask, FUNC(genesis_sram_write)); | |
920 | state->m_md_cart.sram_handlers_installed = 1; | |
921 | } | |
922 | ||
923 | static WRITE16_HANDLER( genesis_sram_toggle ) | |
924 | { | |
925 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
926 | ||
927 | /* unsure if this is actually supposed to toggle or just switch on? | |
928 | Yet to encounter game that utilizes */ | |
929 | state->m_md_cart.sram_active = (data & 1) ? 1 : 0; | |
930 | state->m_md_cart.sram_readonly = (data & 2) ? 1 : 0; | |
931 | ||
932 | if (state->m_md_cart.sram_active && !state->m_md_cart.sram_handlers_installed) | |
933 | install_sram_rw_handlers(space.machine(), TRUE); | |
934 | } | |
935 | ||
936 | static READ16_HANDLER( sega_6658a_reg_r ) | |
937 | { | |
938 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
939 | return state->m_md_cart.sram_active; | |
940 | } | |
941 | ||
942 | static WRITE16_HANDLER( sega_6658a_reg_w ) | |
943 | { | |
944 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
945 | if (data == 1) | |
946 | state->m_md_cart.sram_active = 1; | |
947 | if (data == 0) | |
948 | state->m_md_cart.sram_active = 0; | |
949 | } | |
950 | ||
951 | /************************************* | |
952 | * I2C EEPROM | |
953 | * bare minimum handlings | |
954 | * TODO: supports proper device interfacing and parameter change! | |
955 | *************************************/ | |
956 | ||
957 | static READ16_HANDLER( nba_jam_eeprom_r ) | |
958 | { | |
959 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
960 | // state->m_md_cart.i2c_mem = (i2cmem_sda_read(space.machine().device("i2cmem")) & 1); | |
961 | return state->m_md_cart.i2c_mem & 1; | |
962 | } | |
963 | ||
964 | static WRITE16_HANDLER( nba_jam_eeprom_w ) | |
965 | { | |
966 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
967 | state->m_md_cart.i2c_clk = (data & 0x0002) >> 1; | |
968 | state->m_md_cart.i2c_mem = (data & 0x0001); | |
969 | ||
970 | // i2cmem_sda_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_clk); | |
971 | // i2cmem_scl_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_mem); | |
972 | } | |
973 | ||
974 | static READ16_HANDLER( nba_jam_te_eeprom_r ) | |
975 | { | |
976 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
977 | // state->m_md_cart.i2c_mem = (i2cmem_sda_read(space.machine().device("i2cmem")) & 1); | |
978 | return (state->m_md_cart.i2c_mem & 1); | |
979 | } | |
980 | ||
981 | static WRITE16_HANDLER( nba_jam_te_eeprom_w ) | |
982 | { | |
983 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
984 | state->m_md_cart.i2c_clk = ((data & 0x0100) >> 8); | |
985 | state->m_md_cart.i2c_mem = data & 0x0001; | |
986 | ||
987 | // i2cmem_sda_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_clk); | |
988 | // i2cmem_scl_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_mem); | |
989 | } | |
990 | ||
991 | static READ16_HANDLER( ea_nhlpa_eeprom_r ) | |
992 | { | |
993 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
994 | // state->m_md_cart.i2c_mem = (i2cmem_sda_read(space.machine().device("i2cmem")) & 1); | |
995 | return (state->m_md_cart.i2c_mem & 1) << 7; | |
996 | } | |
997 | ||
998 | static WRITE16_HANDLER( ea_nhlpa_eeprom_w ) | |
999 | { | |
1000 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
1001 | state->m_md_cart.i2c_clk = ((data & 0x0040) >> 6); | |
1002 | state->m_md_cart.i2c_mem = ((data & 0x0080) >> 7); | |
1003 | ||
1004 | // i2cmem_sda_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_clk); | |
1005 | // i2cmem_scl_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_mem); | |
1006 | } | |
1007 | ||
1008 | /* TODO: identical as NBA Jam, used as kludge */ | |
1009 | static READ16_HANDLER( wboy_v_eeprom_r ) | |
1010 | { | |
1011 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
1012 | // state->m_md_cart.i2c_mem = (i2cmem_sda_read(space.machine().device("i2cmem")) & 1); | |
1013 | return ~state->m_md_cart.i2c_mem & 1; | |
1014 | } | |
1015 | ||
1016 | static WRITE16_HANDLER( wboy_v_eeprom_w ) | |
1017 | { | |
1018 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
1019 | state->m_md_cart.i2c_clk = (data & 0x0002) >> 1; | |
1020 | state->m_md_cart.i2c_mem = (data & 0x0001); | |
1021 | ||
1022 | // i2cmem_sda_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_clk); | |
1023 | // i2cmem_scl_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_mem); | |
1024 | } | |
1025 | ||
1026 | static READ16_HANDLER( codemasters_eeprom_r ) | |
1027 | { | |
1028 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
1029 | // state->m_md_cart.i2c_mem = (i2cmem_sda_read(space.machine().device("i2cmem")) & 1); | |
1030 | return (state->m_md_cart.i2c_mem & 1) << 7; | |
1031 | } | |
1032 | ||
1033 | static WRITE16_HANDLER( codemasters_eeprom_w ) | |
1034 | { | |
1035 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
1036 | state->m_md_cart.i2c_clk = (data & 0x0200) >> 9; | |
1037 | state->m_md_cart.i2c_mem = (data & 0x0100) >> 8; | |
1038 | ||
1039 | // i2cmem_sda_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_clk); | |
1040 | // i2cmem_scl_write(space.machine().device("i2cmem"), state->m_md_cart.i2c_mem); | |
1041 | } | |
1042 | ||
1043 | /* ST M95320 32Kbit serial EEPROM implementation */ | |
1044 | ||
1045 | #define M95320_SIZE 0x1000 | |
1046 | enum STMSTATE | |
1047 | { | |
1048 | IDLE = 0, | |
1049 | CMD_WRSR, | |
1050 | CMD_RDSR, | |
1051 | M95320_CMD_READ, | |
1052 | CMD_WRITE, | |
1053 | READING, | |
1054 | WRITING | |
1055 | }; | |
1056 | ||
1057 | class stm95_device | |
1058 | { | |
1059 | public: | |
1060 | stm95_device() : stm_state(IDLE), stream_pos(0) {}; | |
1061 | UINT8 *eeprom_data; | |
1062 | void set_cs_line(int); | |
1063 | void set_halt_line(int state) {}; // not implemented | |
1064 | void set_si_line(int); | |
1065 | void set_sck_line(int state); | |
1066 | int get_so_line(void); | |
1067 | protected: | |
1068 | int latch; | |
1069 | int reset_line; | |
1070 | int sck_line; | |
1071 | int WEL; | |
1072 | ||
1073 | STMSTATE stm_state; | |
1074 | int stream_pos; | |
1075 | int stream_data; | |
1076 | int eeprom_addr; | |
1077 | }; | |
1078 | ||
1079 | void stm95_device::set_cs_line(int state) | |
1080 | { | |
1081 | reset_line = state; | |
1082 | if (reset_line != CLEAR_LINE) | |
1083 | { | |
1084 | stream_pos = 0; | |
1085 | stm_state = IDLE; | |
1086 | } | |
1087 | } | |
1088 | ||
1089 | void stm95_device::set_si_line(int state) | |
1090 | { | |
1091 | latch = state; | |
1092 | } | |
1093 | ||
1094 | int stm95_device::get_so_line(void) | |
1095 | { | |
1096 | if (stm_state == READING || stm_state == CMD_RDSR) | |
1097 | return (stream_data >> 8) & 1; | |
1098 | else | |
1099 | return 0; | |
1100 | } | |
1101 | ||
1102 | void stm95_device::set_sck_line(int state) | |
1103 | { | |
1104 | if (reset_line == CLEAR_LINE) | |
1105 | { | |
1106 | if (state == ASSERT_LINE && sck_line == CLEAR_LINE) | |
1107 | { | |
1108 | switch (stm_state) | |
1109 | { | |
1110 | case IDLE: | |
1111 | stream_data = (stream_data << 1) | (latch ? 1 : 0); | |
1112 | stream_pos++; | |
1113 | if (stream_pos == 8) | |
1114 | { | |
1115 | stream_pos = 0; | |
1116 | //printf("STM95 EEPROM: got cmd %02X\n", stream_data&0xff); | |
1117 | switch(stream_data & 0xff) | |
1118 | { | |
1119 | case 0x01: // write status register | |
1120 | if (WEL != 0) | |
1121 | stm_state = CMD_WRSR; | |
1122 | WEL = 0; | |
1123 | break; | |
1124 | case 0x02: // write | |
1125 | if (WEL != 0) | |
1126 | stm_state = CMD_WRITE; | |
1127 | stream_data = 0; | |
1128 | WEL = 0; | |
1129 | break; | |
1130 | case 0x03: // read | |
1131 | stm_state = M95320_CMD_READ; | |
1132 | stream_data = 0; | |
1133 | break; | |
1134 | case 0x04: // write disable | |
1135 | WEL = 0; | |
1136 | break; | |
1137 | case 0x05: // read status register | |
1138 | stm_state = CMD_RDSR; | |
1139 | stream_data = WEL<<1; | |
1140 | break; | |
1141 | case 0x06: // write enable | |
1142 | WEL = 1; | |
1143 | break; | |
1144 | default: | |
1145 | logerror("STM95 EEPROM: unknown cmd %02X\n", stream_data&0xff); | |
1146 | } | |
1147 | } | |
1148 | break; | |
1149 | case CMD_WRSR: | |
1150 | stream_pos++; // just skip, don't care block protection | |
1151 | if (stream_pos == 8) | |
1152 | { | |
1153 | stm_state = IDLE; | |
1154 | stream_pos = 0; | |
1155 | } | |
1156 | break; | |
1157 | case CMD_RDSR: | |
1158 | stream_data = stream_data<<1; | |
1159 | stream_pos++; | |
1160 | if (stream_pos == 8) | |
1161 | { | |
1162 | stm_state = IDLE; | |
1163 | stream_pos = 0; | |
1164 | } | |
1165 | break; | |
1166 | case M95320_CMD_READ: | |
1167 | stream_data = (stream_data << 1) | (latch ? 1 : 0); | |
1168 | stream_pos++; | |
1169 | if (stream_pos == 16) | |
1170 | { | |
1171 | eeprom_addr = stream_data & (M95320_SIZE - 1); | |
1172 | stream_data = eeprom_data[eeprom_addr]; | |
1173 | stm_state = READING; | |
1174 | stream_pos = 0; | |
1175 | } | |
1176 | break; | |
1177 | case READING: | |
1178 | stream_data = stream_data<<1; | |
1179 | stream_pos++; | |
1180 | if (stream_pos == 8) | |
1181 | { | |
1182 | if (++eeprom_addr == M95320_SIZE) | |
1183 | eeprom_addr = 0; | |
1184 | stream_data |= eeprom_data[eeprom_addr]; | |
1185 | stream_pos = 0; | |
1186 | } | |
1187 | break; | |
1188 | case CMD_WRITE: | |
1189 | stream_data = (stream_data << 1) | (latch ? 1 : 0); | |
1190 | stream_pos++; | |
1191 | if (stream_pos == 16) | |
1192 | { | |
1193 | eeprom_addr = stream_data & (M95320_SIZE - 1); | |
1194 | stm_state = WRITING; | |
1195 | stream_pos = 0; | |
1196 | } | |
1197 | break; | |
1198 | case WRITING: | |
1199 | stream_data = (stream_data << 1) | (latch ? 1 : 0); | |
1200 | stream_pos++; | |
1201 | if (stream_pos == 8) | |
1202 | { | |
1203 | eeprom_data[eeprom_addr] = stream_data; | |
1204 | if (++eeprom_addr == M95320_SIZE) | |
1205 | eeprom_addr = 0; | |
1206 | stream_pos = 0; | |
1207 | } | |
1208 | break; | |
1209 | } | |
1210 | } | |
1211 | } | |
1212 | sck_line = state; | |
1213 | } | |
1214 | ||
1215 | stm95_device STM95; | |
1216 | ||
1217 | static READ16_HANDLER( psolar_eeprom_r ) | |
1218 | { | |
1219 | return STM95.get_so_line() & 1; | |
1220 | } | |
1221 | ||
1222 | static WRITE16_HANDLER( psolar_eeprom_w ) | |
1223 | { | |
1224 | STM95.set_si_line(data & 0x01); | |
1225 | STM95.set_cs_line((data & 0x08)?ASSERT_LINE:CLEAR_LINE); | |
1226 | STM95.set_halt_line((data & 0x04)?ASSERT_LINE:CLEAR_LINE); | |
1227 | STM95.set_sck_line((data & 0x02)?ASSERT_LINE:CLEAR_LINE); | |
1228 | } | |
1229 | ||
1230 | /************************************* | |
1231 | * | |
1232 | * Machine driver reset | |
1233 | * | |
1234 | *************************************/ | |
1235 | ||
1236 | static void setup_megadriv_custom_mappers(running_machine &machine) | |
1237 | { | |
1238 | md_cons_state *state = machine.driver_data<md_cons_state>(); | |
1239 | UINT32 mirroraddr; | |
1240 | UINT8 *ROM = state->memregion("maincpu")->base(); | |
1241 | ||
1242 | switch (state->m_md_cart.type) | |
1243 | { | |
1244 | case CM_JCART: | |
1245 | case CM_JCART_SEPROM: | |
1246 | /* Codemasters PCB (J-Carts) */ | |
1247 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x38fffe, 0x38ffff, FUNC(jcart_ctrl_r)); | |
1248 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x38fffe, 0x38ffff, FUNC(jcart_ctrl_w)); | |
1249 | break; | |
1250 | ||
1251 | case SSF2: | |
1252 | memcpy(&ROM[0x800000], &ROM[VIRGIN_COPY_GEN + 0x400000], 0x100000); | |
1253 | memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x400000); | |
1254 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x400000); | |
1255 | ||
1256 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa130f0, 0xa130ff, FUNC(genesis_ssf2_bank_w)); | |
1257 | break; | |
1258 | ||
1259 | case LIONK3: | |
1260 | case SKINGKONG: | |
1261 | state->m_md_cart.l3alt_pdat = state->m_md_cart.l3alt_pcmd = 0; | |
1262 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x200000); /* default rom */ | |
1263 | memcpy(&ROM[0x200000], &ROM[VIRGIN_COPY_GEN], 0x200000); /* default rom */ | |
1264 | ||
1265 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0x600000, 0x6fffff, FUNC(l3alt_prot_r), FUNC(l3alt_prot_w)); | |
1266 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x700000, 0x7fffff, FUNC(l3alt_bank_w)); | |
1267 | break; | |
1268 | ||
1269 | case SDK99: | |
1270 | state->m_md_cart.l3alt_pdat = state->m_md_cart.l3alt_pcmd = 0; | |
1271 | ||
1272 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x300000); /* default rom */ | |
1273 | memcpy(&ROM[0x300000], &ROM[VIRGIN_COPY_GEN], 0x100000); /* default rom */ | |
1274 | ||
1275 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0x600000, 0x6fffff, FUNC(l3alt_prot_r), FUNC(l3alt_prot_w)); | |
1276 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x700000, 0x7fffff, FUNC(l3alt_bank_w)); | |
1277 | break; | |
1278 | ||
1279 | case REDCLIFF: | |
1280 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x400001, FUNC(redclif_prot2_r)); | |
1281 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400004, 0x400005, FUNC(redclif_prot_r)); | |
1282 | break; | |
1283 | ||
1284 | case REDCL_EN: | |
1285 | for (int x = VIRGIN_COPY_GEN; x < VIRGIN_COPY_GEN + 0x200005; x++) | |
1286 | ROM[x] ^= 0x40; | |
1287 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN + 4], 0x200000); /* default rom */ | |
1288 | ||
1289 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x400001, FUNC(redclif_prot2_r)); | |
1290 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400004, 0x400005, FUNC(redclif_prot_r)); | |
1291 | break; | |
1292 | ||
1293 | case RADICA: | |
1294 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x400000); | |
1295 | memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x400000); // keep a copy for later banking.. making use of huge ROM_REGION allocated to genesis driver | |
1296 | memcpy(&ROM[0x800000], &ROM[VIRGIN_COPY_GEN], 0x400000); // wraparound banking (from hazemd code) | |
1297 | ||
1298 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa13000, 0xa1307f, FUNC(radica_bank_select)); | |
1299 | break; | |
1300 | ||
1301 | case KOF99: | |
1302 | //memcpy(&ROM[0x000000],&ROM[VIRGIN_COPY_GEN],0x300000); | |
1303 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa13000, 0xa13001, FUNC(kof99_A13000_r)); | |
1304 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa13002, 0xa13003, FUNC(kof99_A13002_r)); | |
1305 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa1303e, 0xa1303f, FUNC(kof99_00A1303E_r)); | |
1306 | break; | |
1307 | ||
1308 | case SOULBLAD: | |
1309 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400002, 0x400003, FUNC(soulb_400002_r)); | |
1310 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400004, 0x400005, FUNC(soulb_400004_r)); | |
1311 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400006, 0x400007, FUNC(soulb_400006_r)); | |
1312 | break; | |
1313 | ||
1314 | case MJLOVER: | |
1315 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x400001, FUNC(mjlovr_prot_1_r)); | |
1316 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x401000, 0x401001, FUNC(mjlovr_prot_2_r)); | |
1317 | break; | |
1318 | ||
1319 | case SQUIRRELK: | |
1320 | state->m_md_cart.squirrel_king_extra = 0; | |
1321 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x400007, FUNC(squirrel_king_extra_r)); | |
1322 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x400000, 0x400007, FUNC(squirrel_king_extra_w)); | |
1323 | break; | |
1324 | ||
1325 | case SMOUSE: | |
1326 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x400007, FUNC(smous_prot_r)); | |
1327 | break; | |
1328 | ||
1329 | case SMB: | |
1330 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa13000, 0xa13001, FUNC(smbro_prot_r)); | |
1331 | break; | |
1332 | ||
1333 | case SMB2: | |
1334 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa13000, 0xa13001, FUNC(smb2_extra_r)); | |
1335 | break; | |
1336 | ||
1337 | case KAIJU: | |
1338 | memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x200000); | |
1339 | memcpy(&ROM[0x600000], &ROM[VIRGIN_COPY_GEN], 0x200000); | |
1340 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x200000); | |
1341 | ||
1342 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x700000, 0x7fffff, FUNC(kaiju_bank_w)); | |
1343 | break; | |
1344 | ||
1345 | case CHINFIGHT3: | |
1346 | memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x200000); | |
1347 | memcpy(&ROM[0x600000], &ROM[VIRGIN_COPY_GEN], 0x200000); | |
1348 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x200000); | |
1349 | ||
1350 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x4fffff, FUNC(chifi3_prot_r)); | |
1351 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x600000, 0x6fffff, FUNC(chifi3_bank_w)); | |
1352 | break; | |
1353 | ||
1354 | case LIONK2: | |
1355 | state->m_md_cart.lion2_prot1_data = state->m_md_cart.lion2_prot2_data = 0; | |
1356 | ||
1357 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400002, 0x400003, FUNC(lion2_prot1_r)); | |
1358 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400006, 0x400007, FUNC(lion2_prot2_r)); | |
1359 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x400000, 0x400001, FUNC(lion2_prot1_w)); | |
1360 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x400004, 0x400005, FUNC(lion2_prot2_w)); | |
1361 | break; | |
1362 | ||
1363 | case BUGSLIFE: | |
1364 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa13000, 0xa13001, FUNC(bugl_extra_r)); | |
1365 | break; | |
1366 | ||
1367 | case ELFWOR: | |
1368 | /* It return (0x55 @ 0x400000 OR 0xc9 @ 0x400004) AND (0x0f @ 0x400002 OR 0x18 @ 0x400006). It is probably best to add handlers for all 4 addresses. */ | |
1369 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x400001, FUNC(elfwor_400000_r)); | |
1370 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400002, 0x400003, FUNC(elfwor_400002_r)); | |
1371 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400004, 0x400005, FUNC(elfwor_400004_r)); | |
1372 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400006, 0x400007, FUNC(elfwor_400006_r)); | |
1373 | break; | |
1374 | ||
1375 | case ROCKMANX3: | |
1376 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa13000, 0xa13001, FUNC(rx3_extra_r)); | |
1377 | break; | |
1378 | ||
1379 | case SBUBBOB: | |
1380 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x400001, FUNC(sbub_extra1_r)); | |
1381 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400002, 0x400003, FUNC(sbub_extra2_r)); | |
1382 | break; | |
1383 | ||
1384 | case KOF98: | |
1385 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x480000, 0x480001, FUNC(kof98_aa_r)); | |
1386 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x4800e0, 0x4800e1, FUNC(kof98_aa_r)); | |
1387 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x4824a0, 0x4824a1, FUNC(kof98_aa_r)); | |
1388 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x488880, 0x488881, FUNC(kof98_aa_r)); | |
1389 | ||
1390 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x4a8820, 0x4a8821, FUNC(kof98_0a_r)); | |
1391 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x4f8820, 0x4f8821, FUNC(kof98_00_r)); | |
1392 | break; | |
1393 | ||
1394 | case REALTEC: | |
1395 | /* Realtec mapper!*/ | |
1396 | state->m_md_cart.realtec_bank_addr = state->m_md_cart.realtec_bank_size = 0; | |
1397 | state->m_md_cart.realtec_old_bank_addr = -1; | |
1398 | ||
1399 | memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x80000); | |
1400 | ||
1401 | for (mirroraddr = 0; mirroraddr < 0x400000; mirroraddr += 0x2000) | |
1402 | memcpy(ROM + mirroraddr, ROM + VIRGIN_COPY_GEN + 0x7e000, 0x002000); /* copy last 8kb across the whole rom region */ | |
1403 | ||
1404 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x400000, 0x400001, FUNC(realtec_400000_w)); | |
1405 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x402000, 0x402001, FUNC(realtec_402000_w)); | |
1406 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x404000, 0x404001, FUNC(realtec_404000_w)); | |
1407 | break; | |
1408 | ||
1409 | case MC_SUP19IN1: | |
1410 | memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x400000); // allow hard reset to menu | |
1411 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa13000, 0xa13039, FUNC(s19in1_bank)); | |
1412 | break; | |
1413 | ||
1414 | case MC_SUP15IN1: | |
1415 | memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x200000); // allow hard reset to menu | |
1416 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa13000, 0xa13039, FUNC(s19in1_bank)); | |
1417 | break; | |
1418 | ||
1419 | case MC_12IN1: | |
1420 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x400000); /* default rom */ | |
1421 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa13000, 0xa1303f, FUNC(mc_12in1_bank_w)); | |
1422 | break; | |
1423 | ||
1424 | case TOPFIGHTER: | |
1425 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x400000); /* default rom */ | |
1426 | ||
1427 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x6f5344, 0x6f5345, FUNC(topfig_6F5344_r) ); | |
1428 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x6bd294, 0x6bd295, FUNC(topfig_6BD294_r) ); | |
1429 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x645b44, 0x645b45, FUNC(topfig_645B44_r) ); | |
1430 | ||
1431 | /* readd */ | |
1432 | //machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x689b80, 0x689b81, FUNC(MWA16_NOP)); | |
1433 | //machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x6d8b02, 0x6d8b03, FUNC(MWA16_NOP)); | |
1434 | ||
1435 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x700000, 0x7fffff, FUNC(topfig_bank_w) ); | |
1436 | break; | |
1437 | case PSOLAR: | |
1438 | memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x400000); | |
1439 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa13002, 0xa13007, FUNC(psolar_bank_w)); | |
1440 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa13000, 0xa13001, FUNC(psolar_unk_w)); | |
1441 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x0015e6, 0x0015e9, FUNC(psolar_hack_r)); | |
1442 | psolar_rdcnt = 0; | |
1443 | break; | |
1444 | } | |
1445 | ||
1446 | /* games whose protection gets patched out */ | |
1447 | ||
1448 | if (state->m_md_cart.type == POKEMON) | |
1449 | { | |
1450 | /*todo: emulate protection instead | |
1451 | 0DD19E:47F8 | |
1452 | 0DD1A0:FFF0 | |
1453 | 0DD1A2:4E63 | |
1454 | 0DD46E:4EF8 | |
1455 | 0DD470:0300 | |
1456 | 0DD49C:6002 | |
1457 | */ | |
1458 | ||
1459 | /* | |
1460 | ||
1461 | you need to return 1 @ 0xa13002 and 0???1f @ 0xa1303E (it does word reads). | |
1462 | ||
1463 | */ | |
1464 | UINT16 *ROM16 = (UINT16 *)machine.root_device().memregion("maincpu")->base(); | |
1465 | ||
1466 | ROM16[0x0dd19e/2] = 0x47F8; | |
1467 | ROM16[0x0dd1a0/2] = 0xFFF0; | |
1468 | ROM16[0x0dd1a2/2] = 0x4E63; | |
1469 | ROM16[0x0dd46e/2] = 0x4EF8; | |
1470 | ROM16[0x0dd470/2] = 0x0300; | |
1471 | ROM16[0x0dd49c/2] = 0x6002; | |
1472 | } | |
1473 | ||
1474 | if (state->m_md_cart.type == POKEMON2) | |
1475 | { | |
1476 | /*todo: emulate protection instead | |
1477 | 006036:E000 | |
1478 | 002540:6026 | |
1479 | 001ED0:6026 | |
1480 | 002476:6022 | |
1481 | ||
1482 | */ | |
1483 | UINT16 *ROM16 = (UINT16 *)machine.root_device().memregion("maincpu")->base(); | |
1484 | ||
1485 | ROM16[0x06036/2] = 0xE000; | |
1486 | ROM16[0x02540/2] = 0x6026; | |
1487 | ROM16[0x01ED0/2] = 0x6026; | |
1488 | ROM16[0x02476/2] = 0x6022; | |
1489 | ||
1490 | ROM16[0x7E300/2] = 0x60FE; | |
1491 | } | |
1492 | ||
1493 | if (state->m_md_cart.type == MULAN) | |
1494 | { | |
1495 | /*todo: emulate protection instead | |
1496 | 006036:E000 | |
1497 | +more? | |
1498 | ||
1499 | */ | |
1500 | // ROM[0x01ED0/2] = 0xE000; | |
1501 | // ROM[0x02540/2] = 0xE000; | |
1502 | ||
1503 | UINT16 *ROM16 = (UINT16 *)machine.root_device().memregion("maincpu")->base(); | |
1504 | ||
1505 | ROM16[0x06036/2] = 0xE000; | |
1506 | } | |
1507 | ||
1508 | /* install NOP handler for TMSS */ | |
1509 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa14000, 0xa14003, FUNC(genesis_TMSS_bank_w)); | |
1510 | } | |
1511 | ||
1512 | static void setup_megadriv_sram(device_image_interface &image) | |
1513 | { | |
1514 | running_machine &machine = image.device().machine(); | |
1515 | md_cons_state *state = machine.driver_data<md_cons_state>(); | |
1516 | UINT8 *ROM = state->memregion("maincpu")->base(); | |
1517 | megadriv_backupram = NULL; | |
1518 | state->m_md_cart.sram = NULL; | |
1519 | state->m_md_cart.sram_start = state->m_md_cart.sram_end = 0; | |
1520 | state->m_md_cart.has_serial_eeprom = 0; | |
1521 | state->m_md_cart.sram_detected = 0; | |
1522 | state->m_md_cart.sram_handlers_installed = 0; | |
1523 | state->m_md_cart.sram_readonly = 0; | |
1524 | state->m_md_cart.sram_active = 0; | |
1525 | ||
1526 | /* install SRAM & i2c handlers for the specific type of cart */ | |
1527 | switch (state->m_md_cart.type) | |
1528 | { | |
1529 | // These types only come from xml | |
1530 | // TODO: Eventually megadriv_backupram should point to the allocated cart:sram region! | |
1531 | // For now, we only use the region as a placeholder to carry size info... | |
1532 | case SEGA_SRAM: | |
1533 | state->m_md_cart.sram_start = 0x200000; | |
1534 | state->m_md_cart.sram_end = state->m_md_cart.sram_start + image.get_software_region_length("sram") - 1; | |
1535 | state->m_md_cart.sram_detected = 1; | |
1536 | megadriv_backupram = (UINT16*) (ROM + state->m_md_cart.sram_start); | |
1537 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa130f0, 0xa130f1, FUNC(genesis_sram_toggle)); | |
1538 | if (state->m_md_cart.last_loaded_image_length <= state->m_md_cart.sram_start) | |
1539 | { | |
1540 | state->m_md_cart.sram_active = 1; | |
1541 | install_sram_rw_handlers(machine, FALSE); | |
1542 | } | |
1543 | break; | |
1544 | ||
1545 | case BEGGAR: | |
1546 | state->m_md_cart.sram_start = 0x400000; | |
1547 | state->m_md_cart.sram_end = state->m_md_cart.sram_start + 0xffff; | |
1548 | state->m_md_cart.sram_detected = 1; | |
1549 | state->m_md_cart.sram_active = 1; | |
1550 | megadriv_backupram = (UINT16*) (ROM + state->m_md_cart.sram_start); | |
1551 | install_sram_rw_handlers(machine, FALSE); | |
1552 | break; | |
1553 | ||
1554 | case SEGA_FRAM: | |
1555 | state->m_md_cart.sram_start = 0x200000; | |
1556 | state->m_md_cart.sram_end = state->m_md_cart.sram_start + image.get_software_region_length("fram") - 1; | |
1557 | state->m_md_cart.sram_detected = 1; | |
1558 | megadriv_backupram = (UINT16*) (ROM + state->m_md_cart.sram_start); | |
1559 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa130f0, 0xa130f1, FUNC(sega_6658a_reg_r)); | |
1560 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa130f0, 0xa130f1, FUNC(sega_6658a_reg_w)); | |
1561 | install_sram_rw_handlers(machine, FALSE); | |
1562 | break; | |
1563 | ||
1564 | // These types might come either from xml or from old-styele loading | |
1565 | case SEGA_EEPROM: | |
1566 | state->m_md_cart.has_serial_eeprom = 1; | |
1567 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0x200000, 0x200001, FUNC(wboy_v_eeprom_r), FUNC(wboy_v_eeprom_w)); | |
1568 | break; | |
1569 | ||
1570 | case NBA_JAM: | |
1571 | state->m_md_cart.has_serial_eeprom = 1; | |
1572 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0x200000, 0x200001, FUNC(nba_jam_eeprom_r), FUNC(nba_jam_eeprom_w)); | |
1573 | break; | |
1574 | ||
1575 | case NBA_JAM_TE: | |
1576 | case NFL_QB_96: | |
1577 | case C_SLAM: // same handling but different sizes | |
1578 | state->m_md_cart.has_serial_eeprom = 1; | |
1579 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0x200000, 0x200001, FUNC(nba_jam_te_eeprom_r), FUNC(nba_jam_te_eeprom_w)); | |
1580 | break; | |
1581 | ||
1582 | case EA_NHLPA: | |
1583 | state->m_md_cart.has_serial_eeprom = 1; | |
1584 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0x200000, 0x200001, FUNC(ea_nhlpa_eeprom_r), FUNC(ea_nhlpa_eeprom_w)); | |
1585 | break; | |
1586 | ||
1587 | case CODE_MASTERS: | |
1588 | case CM_JCART_SEPROM: | |
1589 | state->m_md_cart.has_serial_eeprom = 1; | |
1590 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x300000, 0x300001, FUNC(codemasters_eeprom_w)); | |
1591 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x380000, 0x380001, FUNC(codemasters_eeprom_r)); | |
1592 | break; | |
1593 | case PSOLAR: | |
1594 | state->m_md_cart.sram_start = 0x800000; | |
1595 | state->m_md_cart.sram_end = state->m_md_cart.sram_start + M95320_SIZE - 1; | |
1596 | state->m_md_cart.sram = auto_alloc_array(machine, UINT16, M95320_SIZE / sizeof(UINT16)); | |
1597 | image.battery_load(state->m_md_cart.sram, M95320_SIZE, 0xff); | |
1598 | STM95.eeprom_data = (UINT8*)state->m_md_cart.sram; | |
1599 | ||
1600 | state->m_md_cart.has_serial_eeprom = 1; | |
1601 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa13008, 0xa13009, FUNC(psolar_eeprom_w)); | |
1602 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xa1300a, 0xa1300b, FUNC(psolar_eeprom_r)); | |
1603 | break; | |
1604 | } | |
1605 | ||
1606 | // If the cart is not of a special type, we check the header. Unfortunately, there are ROMs without correct info in the header, | |
1607 | // hence we do the mapping anyway, but we activate SRAM later only if the game will access it. | |
1608 | if (!state->m_md_cart.sram_detected && !state->m_md_cart.has_serial_eeprom) | |
1609 | { | |
1610 | /* check if cart has battery save */ | |
1611 | if (ROM[0x1b1] == 'R' && ROM[0x1b0] == 'A') | |
1612 | { | |
1613 | /* SRAM info found in header */ | |
1614 | state->m_md_cart.sram_start = (ROM[0x1b5] << 24 | ROM[0x1b4] << 16 | ROM[0x1b7] << 8 | ROM[0x1b6]); | |
1615 | state->m_md_cart.sram_end = (ROM[0x1b9] << 24 | ROM[0x1b8] << 16 | ROM[0x1bb] << 8 | ROM[0x1ba]); | |
1616 | ||
1617 | if ((state->m_md_cart.sram_start > state->m_md_cart.sram_end) || ((state->m_md_cart.sram_end - state->m_md_cart.sram_start) >= 0x10000)) // we assume at most 64k of SRAM (HazeMD uses at most 64k). is this correct? | |
1618 | state->m_md_cart.sram_end = state->m_md_cart.sram_start + 0x0FFFF; | |
1619 | ||
1620 | /* for some games using serial EEPROM, difference between SRAM | |
1621 | end to start is 0 or 1. Currently EEPROM is not emulated. */ | |
1622 | if ((state->m_md_cart.sram_end - state->m_md_cart.sram_start) < 2) | |
1623 | state->m_md_cart.has_serial_eeprom = 1; | |
1624 | else | |
1625 | state->m_md_cart.sram_detected = 1; | |
1626 | } | |
1627 | else | |
1628 | { | |
1629 | /* set default SRAM positions, with size = 64k */ | |
1630 | state->m_md_cart.sram_start = 0x200000; | |
1631 | state->m_md_cart.sram_end = state->m_md_cart.sram_start + 0xffff; | |
1632 | } | |
1633 | ||
1634 | if (state->m_md_cart.sram_start & 1) | |
1635 | state->m_md_cart.sram_start -= 1; | |
1636 | ||
1637 | if (!(state->m_md_cart.sram_end & 1)) | |
1638 | state->m_md_cart.sram_end += 1; | |
1639 | ||
1640 | /* calculate backup RAM location */ | |
1641 | megadriv_backupram = (UINT16*) (ROM + (state->m_md_cart.sram_start & 0x3fffff)); | |
1642 | ||
1643 | if (state->m_md_cart.sram_detected) | |
1644 | logerror("SRAM detected from header: starting location %X - SRAM Length %X\n", state->m_md_cart.sram_start, state->m_md_cart.sram_end - state->m_md_cart.sram_start + 1); | |
1645 | ||
1646 | /* Enable SRAM handlers only if the game does not use EEPROM. */ | |
1647 | if (!state->m_md_cart.has_serial_eeprom) | |
1648 | { | |
1649 | /* Info from DGen: If SRAM does not overlap main ROM, set it active by | |
1650 | default since a few games can't manage to properly switch it on/off. */ | |
1651 | if (state->m_md_cart.last_loaded_image_length <= state->m_md_cart.sram_start) | |
1652 | state->m_md_cart.sram_active = 1; | |
1653 | ||
1654 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xa130f0, 0xa130f1, FUNC(genesis_sram_toggle)); | |
1655 | //printf("res: start %x, end %x, det %d, active %d\n", state->m_md_cart.sram_start, state->m_md_cart.sram_end, state->m_md_cart.sram_detected, state->m_md_cart.sram_active); | |
1656 | ||
1657 | /* Sonic 1 included in Sonic Classics doesn't have SRAM and | |
1658 | does lots of ROM access at this range, then only install read/ | |
1659 | write handlers if SRAM is active to not slow down emulation. */ | |
1660 | if (state->m_md_cart.sram_active) | |
1661 | install_sram_rw_handlers(machine, TRUE); | |
1662 | } | |
1663 | } | |
1664 | } | |
1665 | ||
1666 | /************************************* | |
1667 | * | |
1668 | * CART HANDLING | |
1669 | * | |
1670 | *************************************/ | |
1671 | ||
1672 | ||
1673 | /************************************* | |
1674 | * Helper function: Memcmp for both | |
1675 | * endianness | |
1676 | *************************************/ | |
1677 | ||
1678 | static int allendianmemcmp(const void *s1, const void *s2, size_t n) | |
1679 | { | |
1680 | const unsigned char *realbuf; | |
1681 | ||
1682 | #ifdef LSB_FIRST | |
1683 | unsigned char flippedbuf[64]; | |
1684 | unsigned int i; | |
1685 | ||
1686 | if ((n & 1) || (n > 63)) return -1 ; // don't want odd sized buffers or too large a compare | |
1687 | for (i = 0; i < n; i++) flippedbuf[i] = *((char *)s2 + (i ^ 1)); | |
1688 | realbuf = flippedbuf; | |
1689 | ||
1690 | #else | |
1691 | ||
1692 | realbuf = (unsigned char *)s2; | |
1693 | ||
1694 | #endif | |
1695 | return memcmp(s1,realbuf,n); | |
1696 | } | |
1697 | ||
1698 | ||
1699 | /************************************* | |
1700 | * Helper function: Detect SMD file | |
1701 | *************************************/ | |
1702 | ||
1703 | /* code taken directly from GoodGEN by Cowering */ | |
1704 | static int genesis_is_funky_SMD(unsigned char *buf,unsigned int len) | |
1705 | { | |
1706 | /* aq quiz */ | |
1707 | if (!strncmp("UZ(-01 ", (const char *) &buf[0xf0], 8)) | |
1708 | return 1; | |
1709 | ||
1710 | /* Phelios USA redump */ | |
1711 | /* target earth */ | |
1712 | /* klax (namcot) */ | |
1713 | if (buf[0x2080] == ' ' && buf[0x0080] == 'S' && buf[0x2081] == 'E' && buf[0x0081] == 'G') | |
1714 | return 1; | |
1715 | ||
1716 | /* jap baseball 94 */ | |
1717 | if (!strncmp("OL R-AEAL", (const char *) &buf[0xf0], 9)) | |
1718 | return 1; | |
1719 | ||
1720 | /* devilish Mahjong Tower */ | |
1721 | if (!strncmp("optrEtranet", (const char *) &buf[0xf3], 11)) | |
1722 | return 1; | |
1723 | ||
1724 | /* golden axe 2 beta */ | |
1725 | if (buf[0x0100] == 0x3c && buf[0x0101] == 0 && buf[0x0102] == 0 && buf[0x0103] == 0x3c) | |
1726 | return 1; | |
1727 | ||
1728 | /* omega race */ | |
1729 | if (!strncmp("OEARC ", (const char *) &buf[0x90], 8)) | |
1730 | return 1; | |
1731 | ||
1732 | /* budokan beta */ | |
1733 | if ((len >= 0x6708+8) && !strncmp(" NTEBDKN", (const char *) &buf[0x6708], 8)) | |
1734 | return 1; | |
1735 | ||
1736 | /* cdx pro 1.8 bios */ | |
1737 | if (!strncmp("so fCXP", (const char *) &buf[0x2c0], 7)) | |
1738 | return 1; | |
1739 | ||
1740 | /* ishido (hacked) */ | |
1741 | if (!strncmp("sio-Wyo ", (const char *) &buf[0x0090], 8)) | |
1742 | return 1; | |
1743 | ||
1744 | /* onslaught */ | |
1745 | if (!strncmp("SS CAL ", (const char *) &buf[0x0088], 8)) | |
1746 | return 1; | |
1747 | ||
1748 | /* tram terror pirate */ | |
1749 | if ((len >= 0x3648 + 8) && !strncmp("SG NEPIE", (const char *) &buf[0x3648], 8)) | |
1750 | return 1; | |
1751 | ||
1752 | /* breath of fire 3 chinese */ | |
1753 | if (buf[0x0007] == 0x1c && buf[0x0008] == 0x0a && buf[0x0009] == 0xb8 && buf[0x000a] == 0x0a) | |
1754 | return 1; | |
1755 | ||
1756 | /*tetris pirate */ | |
1757 | if ((len >= 0x1cbe + 5) && !strncmp("@TTI>", (const char *) &buf[0x1cbe], 5)) | |
1758 | return 1; | |
1759 | ||
1760 | return 0; | |
1761 | } | |
1762 | ||
1763 | /* code taken directly from GoodGEN by Cowering */ | |
1764 | static int genesis_is_SMD(unsigned char *buf,unsigned int len) | |
1765 | { | |
1766 | if (buf[0x2080] == 'S' && buf[0x80] == 'E' && buf[0x2081] == 'G' && buf[0x81] == 'A') | |
1767 | return 1; | |
1768 | return genesis_is_funky_SMD(buf,len); | |
1769 | } | |
1770 | ||
1771 | /************************************* | |
1772 | * Loading a cart image *not* from | |
1773 | * softlist | |
1774 | *************************************/ | |
1775 | ||
1776 | static int megadrive_load_nonlist(device_image_interface &image) | |
1777 | { | |
1778 | md_cons_state *state = image.device().machine().driver_data<md_cons_state>(); | |
1779 | unsigned char *ROM, *rawROM, *tmpROMnew, *tmpROM, *secondhalf; | |
1780 | int relocate, length, ptr, x; | |
1781 | #ifdef LSB_FIRST | |
1782 | unsigned char fliptemp; | |
1783 | #endif | |
1784 | ||
1785 | // STEP 1: determine the file type (SMD? MD? BIN?) | |
1786 | rawROM = state->memregion("maincpu")->base(); | |
1787 | ROM = rawROM /*+ 512 */; | |
1788 | ||
1789 | state->m_md_cart.last_loaded_image_length = -1; | |
1790 | ||
1791 | length = image.fread( rawROM + 0x2000, 0x800000); | |
1792 | ||
1793 | logerror("image length = 0x%x\n", length); | |
1794 | ||
1795 | /* is this a SMD file? */ | |
1796 | if (genesis_is_SMD(&rawROM[0x2200], (unsigned)length)) | |
1797 | { | |
1798 | // printf("SMD!\n"); | |
1799 | tmpROMnew = ROM; | |
1800 | tmpROM = ROM + 0x2000 + 512; | |
1801 | ||
1802 | for (ptr = 0; ptr < MAX_MD_CART_SIZE / (8192); ptr += 2) | |
1803 | { | |
1804 | for (x = 0; x < 8192; x++) | |
1805 | { | |
1806 | *tmpROMnew++ = *(tmpROM + ((ptr + 1) * 8192) + x); | |
1807 | *tmpROMnew++ = *(tmpROM + ((ptr + 0) * 8192) + x); | |
1808 | } | |
1809 | } | |
1810 | ||
1811 | #ifdef LSB_FIRST | |
1812 | tmpROMnew = ROM; | |
1813 | for (ptr = 0; ptr < length; ptr += 2) | |
1814 | { | |
1815 | fliptemp = tmpROMnew[ptr]; | |
1816 | tmpROMnew[ptr] = tmpROMnew[ptr + 1]; | |
1817 | tmpROMnew[ptr + 1] = fliptemp; | |
1818 | } | |
1819 | #endif | |
1820 | state->m_md_cart.last_loaded_image_length = length - 512; | |
1821 | memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data */ | |
1822 | ||
1823 | relocate = 0; | |
1824 | ||
1825 | } | |
1826 | /* is this a MD file? */ | |
1827 | else if ((rawROM[0x2080] == 'E') && (rawROM[0x2081] == 'A') && | |
1828 | (rawROM[0x2082] == 'M' || rawROM[0x2082] == 'G')) | |
1829 | { | |
1830 | // printf("MD!\n"); | |
1831 | tmpROMnew = global_alloc_array(unsigned char, length); | |
1832 | secondhalf = &tmpROMnew[length >> 1]; | |
1833 | ||
1834 | if (!tmpROMnew) | |
1835 | { | |
1836 | logerror("Memory allocation failed reading roms!\n"); | |
1837 | return IMAGE_INIT_FAIL; | |
1838 | } | |
1839 | ||
1840 | memcpy(tmpROMnew, ROM + 0x2000, length); | |
1841 | for (ptr = 0; ptr < length; ptr += 2) | |
1842 | { | |
1843 | ROM[ptr] = secondhalf[ptr >> 1]; | |
1844 | ROM[ptr + 1] = tmpROMnew[ptr >> 1]; | |
1845 | } | |
1846 | global_free(tmpROMnew); | |
1847 | ||
1848 | #ifdef LSB_FIRST | |
1849 | for (ptr = 0; ptr < length; ptr += 2) | |
1850 | { | |
1851 | fliptemp = ROM[ptr]; | |
1852 | ROM[ptr] = ROM[ptr+1]; | |
1853 | ROM[ptr+1] = fliptemp; | |
1854 | } | |
1855 | #endif | |
1856 | state->m_md_cart.last_loaded_image_length = length; | |
1857 | memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data */ | |
1858 | relocate = 0; | |
1859 | ||
1860 | } | |
1861 | /* BIN it is, then */ | |
1862 | else | |
1863 | { | |
1864 | relocate = 0x2000; | |
1865 | state->m_md_cart.last_loaded_image_length = length; | |
1866 | ||
1867 | for (ptr = 0; ptr < MAX_MD_CART_SIZE + relocate; ptr += 2) /* mangle bytes for little endian machines */ | |
1868 | { | |
1869 | #ifdef LSB_FIRST | |
1870 | int temp = ROM[relocate + ptr]; | |
1871 | ||
1872 | ROM[ptr] = ROM[relocate + ptr + 1]; | |
1873 | ROM[ptr + 1] = temp; | |
1874 | #else | |
1875 | ROM[ptr] = ROM[relocate + ptr]; | |
1876 | ROM[ptr + 1] = ROM[relocate + ptr + 1]; | |
1877 | #endif | |
1878 | } | |
1879 | ||
1880 | memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data */ | |
1881 | } | |
1882 | ||
1883 | // STEP 2: determine the cart type (to deal with pirate mappers & eeprom) | |
1884 | ||
1885 | /* Default cartridge type */ | |
1886 | state->m_md_cart.type = SEGA_STD; | |
1887 | ||
1888 | /* Detect carts which need additional handlers */ | |
1889 | { | |
1890 | static const unsigned char smouse_sig[] = { 0x4d, 0xf9, 0x00, 0x40, 0x00, 0x02 }, | |
1891 | mjlover_sig[] = { 0x13, 0xf9, 0x00, 0x40, 0x00, 0x00 }, // move.b ($400000).l,($FFFF0C).l (partial) | |
1892 | squir_sig[] = { 0x26, 0x79, 0x00, 0xff, 0x00, 0xfa }, | |
1893 | bugsl_sig[] = { 0x20, 0x12, 0x13, 0xc0, 0x00, 0xff }, | |
1894 | sbub_sig[] = { 0x0c, 0x39, 0x00, 0x55, 0x00, 0x40 }, // cmpi.b #$55,($400000).l | |
1895 | lk3_sig[] = { 0x0c, 0x01, 0x00, 0x30, 0x66, 0xe4 }, | |
1896 | sdk_sig[] = { 0x48, 0xe7, 0xff, 0xfe, 0x52, 0x79 }, | |
1897 | redcliff_sig[] = { 0x10, 0x39, 0x00, 0x40, 0x00, 0x04 }, // move.b ($400004).l,d0 | |
1898 | redcl_en_sig[] = { 0x50, 0x79, 0x40, 0x00, 0x40, 0x44 }, // move.b ($400004).l,d0 | |
1899 | smb_sig[] = { 0x20, 0x4d, 0x41, 0x52, 0x49, 0x4f }, | |
1900 | smb2_sig[] = { 0x4e, 0xb9, 0x00, 0x0f, 0x25, 0x84 }, | |
1901 | kaiju_sig[] = { 0x19, 0x7c, 0x00, 0x01, 0x00, 0x00 }, | |
1902 | chifi3_sig[] = { 0xb6, 0x16, 0x66, 0x00, 0x00, 0x4a }, | |
1903 | lionk2_sig[] = { 0x26, 0x79, 0x00, 0xff, 0x00, 0xf4 }, | |
1904 | rx3_sig[] = { 0x66, 0x00, 0x00, 0x0e, 0x30, 0x3c }, | |
1905 | kof98_sig[] = { 0x9b, 0xfc, 0x00, 0x00, 0x4a, 0x00 }, | |
1906 | s15in1_sig[] = { 0x22, 0x3c, 0x00, 0xa1, 0x30, 0x00 }, | |
1907 | kof99_sig[] = { 0x20, 0x3c, 0x30, 0x00, 0x00, 0xa1 }, // move.l #$300000A1,d0 | |
1908 | radica_sig[] = { 0x4e, 0xd0, 0x30, 0x39, 0x00, 0xa1 }, // jmp (a0) move.w ($a130xx),d0 | |
1909 | soulb_sig[] = { 0x33, 0xfc, 0x00, 0x0c, 0x00, 0xff }, // move.w #$C,($FF020A).l (what happens if check fails) | |
1910 | s19in1_sig[] = { 0x13, 0xc0, 0x00, 0xa1, 0x30, 0x38 }, | |
1911 | rockman_sig[] = { 0xea, 0x80 }; | |
1912 | ||
1913 | switch (state->m_md_cart.last_loaded_image_length) | |
1914 | { | |
1915 | case 0x80000: | |
1916 | if (!allendianmemcmp(&ROM[0x08c8], &smouse_sig[0], sizeof(smouse_sig))) | |
1917 | state->m_md_cart.type = SMOUSE; | |
1918 | ||
1919 | if (!allendianmemcmp((char *)&ROM[0x7e30e], "SEGA", 4) || | |
1920 | !allendianmemcmp((char *)&ROM[0x7e100], "SEGA", 4) || | |
1921 | !allendianmemcmp((char *)&ROM[0x7e1e6], "SEGA", 4)) | |
1922 | state->m_md_cart.type = REALTEC; | |
1923 | ||
1924 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-50396", 10)) // NHLPA Hockey 93 | |
1925 | state->m_md_cart.type = EA_NHLPA; | |
1926 | ||
1927 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM MK-1215", 10)) // Evander Holyfield | |
1928 | state->m_md_cart.type = SEGA_EEPROM; | |
1929 | ||
1930 | break; | |
1931 | ||
1932 | case 0xc0000: | |
1933 | ||
1934 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM G-4060 ", 8)) // Wonder Boy V | |
1935 | state->m_md_cart.type = SEGA_EEPROM; | |
1936 | ||
1937 | break; | |
1938 | ||
1939 | case 0x100000: | |
1940 | if (!allendianmemcmp(&ROM[0x01b24], &mjlover_sig[0], sizeof(mjlover_sig))) | |
1941 | state->m_md_cart.type = MJLOVER; | |
1942 | ||
1943 | if (!allendianmemcmp(&ROM[0x03b4], &squir_sig[0], sizeof(squir_sig))) | |
1944 | state->m_md_cart.type = SQUIRRELK; | |
1945 | ||
1946 | if (!allendianmemcmp(&ROM[0xee0d0], &bugsl_sig[0], sizeof(bugsl_sig))) | |
1947 | state->m_md_cart.type = BUGSLIFE; | |
1948 | ||
1949 | if (!allendianmemcmp((char *)&ROM[0x0172], "GAME : ELF WOR", 14)) | |
1950 | state->m_md_cart.type = ELFWOR; | |
1951 | ||
1952 | if (!allendianmemcmp(&ROM[0x123e4], &sbub_sig[0], sizeof(sbub_sig))) | |
1953 | state->m_md_cart.type = SBUBBOB; | |
1954 | ||
1955 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-50176", 10)) // Rings of Power | |
1956 | state->m_md_cart.type = EA_NHLPA; | |
1957 | ||
1958 | if (!allendianmemcmp((char *)&ROM[0x0180], "MK 00001211-00", 14)) // Sports Talk Baseball | |
1959 | state->m_md_cart.type = SEGA_EEPROM; | |
1960 | ||
1961 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-120096-", 12)) // Micro Machines 2 | |
1962 | state->m_md_cart.type = CODE_MASTERS; | |
1963 | ||
1964 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-120146-", 12)) // Brian Lara Cricket 96 / Shane Wayne Cricket 96 | |
1965 | state->m_md_cart.type = CODE_MASTERS; | |
1966 | ||
1967 | if (!allendianmemcmp((char *)&ROM[0x0190], "OJKRPTBVFCA ", 0x10)) // Micro Machines '96 / Military TODO: better way to recognize these? | |
1968 | state->m_md_cart.type = CODE_MASTERS; | |
1969 | break; | |
1970 | ||
1971 | case 0x200000: | |
1972 | if (!allendianmemcmp(&ROM[0x18c6], &lk3_sig[0], sizeof(lk3_sig))) | |
1973 | state->m_md_cart.type = LIONK3; | |
1974 | ||
1975 | if (!allendianmemcmp(&ROM[0x220], &sdk_sig[0], sizeof(sdk_sig))) | |
1976 | state->m_md_cart.type = SKINGKONG; | |
1977 | ||
1978 | if (!allendianmemcmp(&ROM[0xce560], &redcliff_sig[0], sizeof(redcliff_sig))) | |
1979 | state->m_md_cart.type = REDCLIFF; | |
1980 | ||
1981 | if (!allendianmemcmp(&ROM[0xc8cb0], &smb_sig[0], sizeof(smb_sig))) | |
1982 | state->m_md_cart.type = SMB; | |
1983 | ||
1984 | if (!allendianmemcmp(&ROM[0xf24d6], &smb2_sig[0], sizeof(smb2_sig))) | |
1985 | state->m_md_cart.type = SMB2; | |
1986 | ||
1987 | if (!allendianmemcmp(&ROM[0x674e], &kaiju_sig[0], sizeof(kaiju_sig))) | |
1988 | state->m_md_cart.type = KAIJU; | |
1989 | ||
1990 | if (!allendianmemcmp(&ROM[0x1780], &chifi3_sig[0], sizeof(chifi3_sig))) | |
1991 | state->m_md_cart.type = CHINFIGHT3; | |
1992 | ||
1993 | if (!allendianmemcmp(&ROM[0x03c2], &lionk2_sig[0], sizeof(lionk2_sig))) | |
1994 | state->m_md_cart.type = LIONK2; | |
1995 | ||
1996 | if (!allendianmemcmp(&ROM[0xc8b90], &rx3_sig[0], sizeof(rx3_sig))) | |
1997 | state->m_md_cart.type = ROCKMANX3; | |
1998 | ||
1999 | if (!allendianmemcmp(&ROM[0x56ae2], &kof98_sig[0], sizeof(kof98_sig))) | |
2000 | state->m_md_cart.type = KOF98; | |
2001 | ||
2002 | if (!allendianmemcmp(&ROM[0x17bb2], &s15in1_sig[0], sizeof(s15in1_sig))) | |
2003 | state->m_md_cart.type = MC_SUP15IN1; | |
2004 | ||
2005 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-081326 ", 12)) // NBA Jam | |
2006 | state->m_md_cart.type = NBA_JAM; | |
2007 | ||
2008 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM MK-1228", 10)) // Greatest Heavyweight of the Ring | |
2009 | state->m_md_cart.type = SEGA_EEPROM; | |
2010 | ||
2011 | if ((!allendianmemcmp((char *)&ROM[0x0180], "GM T-12046", 10)) || // Mega Man | |
2012 | (!allendianmemcmp((char *)&ROM[0x0180], "GM T-12053", 10) && !allendianmemcmp(&ROM[0x18e], &rockman_sig[0], sizeof(rockman_sig)))) // / Rock Man (EEPROM version) | |
2013 | state->m_md_cart.type = SEGA_EEPROM; | |
2014 | ||
2015 | break; | |
2016 | ||
2017 | case 0x200005: | |
2018 | if (!allendianmemcmp(&ROM[0xce564], &redcl_en_sig[0], sizeof(redcliff_sig))) | |
2019 | state->m_md_cart.type = REDCL_EN; | |
2020 | break; | |
2021 | ||
2022 | case 0x300000: | |
2023 | if (!allendianmemcmp(&ROM[0x220], &sdk_sig[0], sizeof(sdk_sig))) | |
2024 | state->m_md_cart.type = SDK99; | |
2025 | ||
2026 | if (!allendianmemcmp(&ROM[0x1fd0d2], &kof99_sig[0], sizeof(kof99_sig))) | |
2027 | state->m_md_cart.type = KOF99; | |
2028 | ||
2029 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-81406", 10)) // NBA Jam TE | |
2030 | state->m_md_cart.type = NBA_JAM_TE; | |
2031 | ||
2032 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-081276 ", 12)) // NFL Quarterback Club | |
2033 | state->m_md_cart.type = NBA_JAM_TE; | |
2034 | ||
2035 | break; | |
2036 | ||
2037 | case 0x400000: | |
2038 | if (!allendianmemcmp(&ROM[0x3c031c], &radica_sig[0], sizeof(radica_sig)) || | |
2039 | !allendianmemcmp(&ROM[0x3f031c], &radica_sig[0], sizeof(radica_sig))) // ssf+gng + radica vol1 | |
2040 | state->m_md_cart.type = RADICA; | |
2041 | ||
2042 | if (!allendianmemcmp(&ROM[0x028460], &soulb_sig[0], sizeof(soulb_sig))) | |
2043 | state->m_md_cart.type = SOULBLAD; | |
2044 | ||
2045 | if (!allendianmemcmp(&ROM[0x1e700], &s19in1_sig[0], sizeof(s19in1_sig))) | |
2046 | state->m_md_cart.type = MC_SUP19IN1; | |
2047 | ||
2048 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-081586-", 12)) // NFL Quarterback Club 96 | |
2049 | state->m_md_cart.type = NFL_QB_96; | |
2050 | ||
2051 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-081576 ", 12)) // College Slam | |
2052 | state->m_md_cart.type = C_SLAM; | |
2053 | ||
2054 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-81476", 10)) // Big Hurt Baseball | |
2055 | state->m_md_cart.type = C_SLAM; | |
2056 | ||
2057 | break; | |
2058 | ||
2059 | case 0x500000: | |
2060 | if (!allendianmemcmp((char *)&ROM[0x0120], "SUPER STREET FIGHTER2 ", 22)) | |
2061 | state->m_md_cart.type = SSF2; | |
2062 | break; | |
2063 | case 0x800000: | |
2064 | if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-574023-", 12)) // Pier Solar | |
2065 | state->m_md_cart.type = PSOLAR; | |
2066 | break; | |
2067 | default: | |
2068 | break; | |
2069 | } | |
2070 | } | |
2071 | ||
2072 | return IMAGE_INIT_PASS; | |
2073 | } | |
2074 | ||
2075 | static DEVICE_IMAGE_DISPLAY_INFO(megadriv) | |
2076 | { | |
2077 | const char *compatibility = image.get_feature("compatibility"); | |
2078 | const char *chips = image.get_feature("addon"); | |
2079 | int md_region = megadrive_region_export + (megadrive_region_pal << 1); | |
2080 | ||
2081 | if (chips) | |
2082 | { | |
2083 | if (!mame_stricmp(chips, "SVP") && (image.device().machine().device<cpu_device>("svp") == NULL)) | |
2084 | { | |
2085 | mame_printf_warning("This software requires emulation of the SVP CPU to work.\n"); | |
2086 | mame_printf_warning("It might not work in the system you are using.\n"); | |
2087 | } | |
2088 | } | |
2089 | ||
2090 | if (compatibility) | |
2091 | { | |
2092 | if (!mame_stricmp(compatibility, "PAL") && (md_region != 3)) | |
2093 | { | |
2094 | mame_printf_warning("This software requires a PAL console to work.\n"); | |
2095 | mame_printf_warning("It might not work in the system you are using.\n"); | |
2096 | } | |
2097 | if (!mame_stricmp(compatibility, "NTSC-J") && (md_region != 0)) | |
2098 | { | |
2099 | mame_printf_warning("This software requires a JPN console to work.\n"); | |
2100 | mame_printf_warning("It might not work in the system you are using.\n"); | |
2101 | } | |
2102 | if (!mame_stricmp(compatibility, "NTSC-U") && (md_region != 1)) | |
2103 | { | |
2104 | mame_printf_warning("This software requires a USA console to work.\n"); | |
2105 | mame_printf_warning("It might not work in the system you are using.\n"); | |
2106 | } | |
2107 | if (!mame_stricmp(compatibility, "EUR-JPN") && (md_region != 0 && md_region != 3)) | |
2108 | { | |
2109 | mame_printf_warning("This software requires a PAL or a JPN console to work.\n"); | |
2110 | mame_printf_warning("It might not work in the system you are using.\n"); | |
2111 | } | |
2112 | } | |
2113 | } | |
2114 | ||
2115 | ||
2116 | /************************************* | |
2117 | * Loading a cart image from softlist | |
2118 | *************************************/ | |
2119 | ||
2120 | static int megadrive_load_list(device_image_interface &image) | |
2121 | { | |
2122 | md_cons_state *state = image.device().machine().driver_data<md_cons_state>(); | |
2123 | UINT8 *ROM = state->memregion("maincpu")->base(); | |
2124 | UINT32 length = image.get_software_region_length("rom"); | |
2125 | const char *pcb_name; | |
2126 | memcpy(ROM, image.get_software_region("rom"), length); | |
2127 | ||
2128 | state->m_md_cart.last_loaded_image_length = length; | |
2129 | ||
2130 | if ((pcb_name = image.get_feature("pcb_type")) == NULL) | |
2131 | state->m_md_cart.type = SEGA_STD; | |
2132 | else | |
2133 | state->m_md_cart.type = md_get_pcb_id(pcb_name); | |
2134 | ||
2135 | memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data */ | |
2136 | ||
2137 | return IMAGE_INIT_PASS; | |
2138 | } | |
2139 | ||
2140 | static DEVICE_IMAGE_LOAD( genesis_cart ) | |
2141 | { | |
2142 | md_cons_state *state = image.device().machine().driver_data<md_cons_state>(); | |
2143 | state->m_md_cart.type = SEGA_STD; | |
2144 | int res; | |
2145 | ||
2146 | // STEP 1: load the file image and keep a copy for later banking | |
2147 | // STEP 2: identify the cart type | |
2148 | // The two steps are carried out differently if we are loading from a list or not | |
2149 | if (image.software_entry() == NULL) | |
2150 | res = megadrive_load_nonlist(image); | |
2151 | else | |
2152 | res = megadrive_load_list(image); | |
2153 | ||
2154 | logerror("cart type: %d\n", state->m_md_cart.type); | |
2155 | ||
2156 | if (res == IMAGE_INIT_PASS) | |
2157 | { | |
2158 | // STEP 3: install memory handlers for this type of cart | |
2159 | setup_megadriv_custom_mappers(image.device().machine()); | |
2160 | ||
2161 | // STEP 4: take care of SRAM. | |
2162 | setup_megadriv_sram(image); | |
2163 | ||
2164 | return IMAGE_INIT_PASS; | |
2165 | } | |
2166 | else | |
2167 | return IMAGE_INIT_FAIL; | |
2168 | } | |
2169 | ||
2170 | /******* SRAM saving *******/ | |
2171 | ||
2172 | static void genesis_machine_stop(running_machine &machine) | |
2173 | { | |
2174 | device_image_interface *image = dynamic_cast<device_image_interface *>(machine.device("cart")); | |
2175 | md_cons_state *state = machine.driver_data<md_cons_state>(); | |
2176 | ||
2177 | /* Write out the battery file if necessary */ | |
2178 | if (state->m_md_cart.sram != NULL) | |
2179 | { | |
2180 | mame_printf_debug("Saving sram\n"); | |
2181 | image->battery_save(state->m_md_cart.sram, state->m_md_cart.sram_end - state->m_md_cart.sram_start + 1); | |
2182 | } | |
2183 | } | |
2184 | ||
2185 | MACHINE_START( md_sram ) | |
2186 | { | |
2187 | machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(genesis_machine_stop), &machine)); | |
2188 | } | |
2189 | ||
2190 | /******* 32X image loading *******/ | |
2191 | ||
2192 | // FIXME: non-softlist loading should keep using ROM_CART_LOAD in the ROM definitions, | |
2193 | // once we better integrate softlist with the old loading procedures | |
2194 | static DEVICE_IMAGE_LOAD( _32x_cart ) | |
2195 | { | |
2196 | UINT32 length; | |
2197 | UINT8 *temp_copy; | |
2198 | UINT16 *ROM16; | |
2199 | UINT32 *ROM32; | |
2200 | int i; | |
2201 | ||
2202 | if (image.software_entry() == NULL) | |
2203 | { | |
2204 | length = image.length(); | |
2205 | temp_copy = auto_alloc_array(image.device().machine(), UINT8, length); | |
2206 | image.fread( temp_copy, length); | |
2207 | } | |
2208 | else | |
2209 | { | |
2210 | length = image.get_software_region_length("rom"); | |
2211 | temp_copy = auto_alloc_array(image.device().machine(), UINT8, length); | |
2212 | memcpy(temp_copy, image.get_software_region("rom"), length); | |
2213 | } | |
2214 | ||
2215 | /* Copy the cart image in the locations the driver expects */ | |
2216 | // Notice that, by using pick_integer, we are sure the code works on both LE and BE machines | |
2217 | ROM16 = (UINT16 *) image.device().machine().root_device().memregion("gamecart")->base(); | |
2218 | for (i = 0; i < length; i += 2) | |
2219 | ROM16[i / 2] = pick_integer_be(temp_copy, i, 2); | |
2220 | ||
2221 | ROM32 = (UINT32 *) image.device().machine().root_device().memregion("gamecart_sh2")->base(); | |
2222 | for (i = 0; i < length; i += 4) | |
2223 | ROM32[i / 4] = pick_integer_be(temp_copy, i, 4); | |
2224 | ||
2225 | ROM16 = (UINT16 *) image.device().machine().root_device().memregion("maincpu")->base(); | |
2226 | for (i = 0x00; i < length; i += 2) | |
2227 | ROM16[i / 2] = pick_integer_be(temp_copy, i, 2); | |
2228 | ||
2229 | auto_free(image.device().machine(), temp_copy); | |
2230 | ||
2231 | return IMAGE_INIT_PASS; | |
2232 | } | |
2233 | ||
2234 | /******* Cart getinfo *******/ | |
2235 | ||
2236 | MACHINE_CONFIG_FRAGMENT( genesis_cartslot ) | |
2237 | MCFG_CARTSLOT_ADD("cart") | |
2238 | MCFG_CARTSLOT_EXTENSION_LIST("smd,bin,md,gen") | |
2239 | MCFG_CARTSLOT_MANDATORY | |
2240 | MCFG_CARTSLOT_INTERFACE("megadriv_cart") | |
2241 | MCFG_CARTSLOT_LOAD(genesis_cart) | |
2242 | MCFG_CARTSLOT_DISPLAY_INFO(megadriv) | |
2243 | MCFG_SOFTWARE_LIST_ADD("cart_list","megadriv") | |
2244 | MACHINE_CONFIG_END | |
2245 | ||
2246 | MACHINE_CONFIG_FRAGMENT( _32x_cartslot ) | |
2247 | MCFG_CARTSLOT_ADD("cart") | |
2248 | MCFG_CARTSLOT_EXTENSION_LIST("32x,bin") | |
2249 | MCFG_CARTSLOT_MANDATORY | |
2250 | MCFG_CARTSLOT_INTERFACE("_32x_cart") | |
2251 | MCFG_CARTSLOT_LOAD(_32x_cart) | |
2252 | MCFG_SOFTWARE_LIST_ADD("cart_list","32x") | |
2253 | MACHINE_CONFIG_END | |
2254 | ||
2255 | MACHINE_CONFIG_FRAGMENT( pico_cartslot ) | |
2256 | MCFG_CARTSLOT_ADD("cart") | |
2257 | MCFG_CARTSLOT_EXTENSION_LIST("bin") | |
2258 | MCFG_CARTSLOT_MANDATORY | |
2259 | MCFG_CARTSLOT_INTERFACE("pico_cart") | |
2260 | MCFG_CARTSLOT_LOAD(genesis_cart) | |
2261 | MCFG_SOFTWARE_LIST_ADD("cart_list","pico") | |
2262 | MACHINE_CONFIG_END |
r20695 | r20696 | |
---|---|---|
1 | /* Megadrive SVP emulation (Virtua Racing) */ | |
2 | ||
3 | #include "includes/megadriv.h" | |
4 | ||
5 | ||
6 | ||
7 | /* SVP (virtua racing) */ | |
8 | cpu_device *_svp_cpu; | |
9 | ||
10 | ||
11 | /****************************************** SVP related *****************************************/ | |
12 | ||
13 | /* | |
14 | * Emulator of memory controller in SVP chip | |
15 | * | |
16 | * Copyright 2008, Grazvydas Ignotas | |
17 | * based on RE work by Tasco Deluxe | |
18 | * | |
19 | * SSP1601 EXT registers are mapped as I/O ports due to their function | |
20 | * (they are interfaced through external bus), and are named as follows | |
21 | * (these are unofficial names, official ones are unknown): | |
22 | * EXT0: PM0 - programmable register 0 | |
23 | * EXT1: PM1 - ... 1 | |
24 | * EXT2: PM2 - ... 2 | |
25 | * EXT3: XST - external status. Can also act as PM. | |
26 | * EXT4: PM4 - ... 4 | |
27 | * EXT5: (unused) | |
28 | * EXT6: PMC - programmable memory register control (PMAC). | |
29 | * EXT7: AL - although internal to SSP1601, it still causes bus access | |
30 | * | |
31 | * Depending on GPO bits in status register, PM0, PM1, PM2 and XST can act as | |
32 | * external status registers, os as programmable memory registers. PM4 always | |
33 | * acts as PM register (independent on GPO bits). | |
34 | */ | |
35 | ||
36 | ||
37 | #define SSP_PMC_HAVE_ADDR 1 // address written to PMAC, waiting for mode | |
38 | #define SSP_PMC_SET 2 // PMAC is set, PMx can be programmed | |
39 | ||
40 | static int get_inc(int mode) | |
41 | { | |
42 | int inc = (mode >> 11) & 7; | |
43 | if (inc != 0) { | |
44 | if (inc != 7) inc--; | |
45 | inc = 1 << inc; // 0 1 2 4 8 16 32 128 | |
46 | if (mode & 0x8000) inc = -inc; // decrement mode | |
47 | } | |
48 | return inc; | |
49 | } | |
50 | ||
51 | INLINE void overwrite_write(UINT16 *dst, UINT16 d) | |
52 | { | |
53 | if (d & 0xf000) { *dst &= ~0xf000; *dst |= d & 0xf000; } | |
54 | if (d & 0x0f00) { *dst &= ~0x0f00; *dst |= d & 0x0f00; } | |
55 | if (d & 0x00f0) { *dst &= ~0x00f0; *dst |= d & 0x00f0; } | |
56 | if (d & 0x000f) { *dst &= ~0x000f; *dst |= d & 0x000f; } | |
57 | } | |
58 | ||
59 | static UINT32 pm_io(address_space &space, int reg, int write, UINT32 d) | |
60 | { | |
61 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
62 | if (state->m_emu_status & SSP_PMC_SET) | |
63 | { | |
64 | state->m_pmac_read[write ? reg + 6 : reg] = state->m_pmc.d; | |
65 | state->m_emu_status &= ~SSP_PMC_SET; | |
66 | return 0; | |
67 | } | |
68 | ||
69 | // just in case | |
70 | if (state->m_emu_status & SSP_PMC_HAVE_ADDR) { | |
71 | state->m_emu_status &= ~SSP_PMC_HAVE_ADDR; | |
72 | } | |
73 | ||
74 | if (reg == 4 || (space.device().state().state_int(SSP_ST) & 0x60)) | |
75 | { | |
76 | #define CADDR ((((mode<<16)&0x7f0000)|addr)<<1) | |
77 | UINT16 *dram = (UINT16 *)state->m_dram; | |
78 | if (write) | |
79 | { | |
80 | int mode = state->m_pmac_write[reg]>>16; | |
81 | int addr = state->m_pmac_write[reg]&0xffff; | |
82 | if ((mode & 0x43ff) == 0x0018) // DRAM | |
83 | { | |
84 | int inc = get_inc(mode); | |
85 | if (mode & 0x0400) { | |
86 | overwrite_write(&dram[addr], d); | |
87 | } else dram[addr] = d; | |
88 | state->m_pmac_write[reg] += inc; | |
89 | } | |
90 | else if ((mode & 0xfbff) == 0x4018) // DRAM, cell inc | |
91 | { | |
92 | if (mode & 0x0400) { | |
93 | overwrite_write(&dram[addr], d); | |
94 | } else dram[addr] = d; | |
95 | state->m_pmac_write[reg] += (addr&1) ? 31 : 1; | |
96 | } | |
97 | else if ((mode & 0x47ff) == 0x001c) // IRAM | |
98 | { | |
99 | int inc = get_inc(mode); | |
100 | ((UINT16 *)state->m_iram)[addr&0x3ff] = d; | |
101 | state->m_pmac_write[reg] += inc; | |
102 | } | |
103 | else | |
104 | { | |
105 | logerror("ssp FIXME: PM%i unhandled write mode %04x, [%06x] %04x\n", | |
106 | reg, mode, CADDR, d); | |
107 | } | |
108 | } | |
109 | else | |
110 | { | |
111 | int mode = state->m_pmac_read[reg]>>16; | |
112 | int addr = state->m_pmac_read[reg]&0xffff; | |
113 | if ((mode & 0xfff0) == 0x0800) // ROM, inc 1, verified to be correct | |
114 | { | |
115 | UINT16 *ROM = (UINT16 *) space.machine().root_device().memregion("maincpu")->base(); | |
116 | state->m_pmac_read[reg] += 1; | |
117 | d = ROM[addr|((mode&0xf)<<16)]; | |
118 | } | |
119 | else if ((mode & 0x47ff) == 0x0018) // DRAM | |
120 | { | |
121 | int inc = get_inc(mode); | |
122 | d = dram[addr]; | |
123 | state->m_pmac_read[reg] += inc; | |
124 | } | |
125 | else | |
126 | { | |
127 | logerror("ssp FIXME: PM%i unhandled read mode %04x, [%06x]\n", | |
128 | reg, mode, CADDR); | |
129 | d = 0; | |
130 | } | |
131 | } | |
132 | ||
133 | // PMC value corresponds to last PMR accessed (not sure). | |
134 | state->m_pmc.d = state->m_pmac_read[write ? reg + 6 : reg]; | |
135 | ||
136 | return d; | |
137 | } | |
138 | ||
139 | return (UINT32)-1; | |
140 | } | |
141 | ||
142 | static READ16_HANDLER( read_PM0 ) | |
143 | { | |
144 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
145 | UINT32 d = pm_io(space, 0, 0, 0); | |
146 | if (d != (UINT32)-1) return d; | |
147 | d = state->m_XST2; | |
148 | state->m_XST2 &= ~2; // ? | |
149 | return d; | |
150 | } | |
151 | ||
152 | static WRITE16_HANDLER( write_PM0 ) | |
153 | { | |
154 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
155 | UINT32 r = pm_io(space, 0, 1, data); | |
156 | if (r != (UINT32)-1) return; | |
157 | state->m_XST2 = data; // ? | |
158 | } | |
159 | ||
160 | static READ16_HANDLER( read_PM1 ) | |
161 | { | |
162 | UINT32 r = pm_io(space, 1, 0, 0); | |
163 | if (r != (UINT32)-1) return r; | |
164 | logerror("svp: PM1 acces in non PM mode?\n"); | |
165 | return 0; | |
166 | } | |
167 | ||
168 | static WRITE16_HANDLER( write_PM1 ) | |
169 | { | |
170 | UINT32 r = pm_io(space, 1, 1, data); | |
171 | if (r != (UINT32)-1) return; | |
172 | logerror("svp: PM1 acces in non PM mode?\n"); | |
173 | } | |
174 | ||
175 | static READ16_HANDLER( read_PM2 ) | |
176 | { | |
177 | UINT32 r = pm_io(space, 2, 0, 0); | |
178 | if (r != (UINT32)-1) return r; | |
179 | logerror("svp: PM2 acces in non PM mode?\n"); | |
180 | return 0; | |
181 | } | |
182 | ||
183 | static WRITE16_HANDLER( write_PM2 ) | |
184 | { | |
185 | UINT32 r = pm_io(space, 2, 1, data); | |
186 | if (r != (UINT32)-1) return; | |
187 | logerror("svp: PM2 acces in non PM mode?\n"); | |
188 | } | |
189 | ||
190 | static READ16_HANDLER( read_XST ) | |
191 | { | |
192 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
193 | UINT32 d = pm_io(space, 3, 0, 0); | |
194 | if (d != (UINT32)-1) return d; | |
195 | ||
196 | return state->m_XST; | |
197 | } | |
198 | ||
199 | static WRITE16_HANDLER( write_XST ) | |
200 | { | |
201 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
202 | UINT32 r = pm_io(space, 3, 1, data); | |
203 | if (r != (UINT32)-1) return; | |
204 | ||
205 | state->m_XST2 |= 1; | |
206 | state->m_XST = data; | |
207 | } | |
208 | ||
209 | static READ16_HANDLER( read_PM4 ) | |
210 | { | |
211 | return pm_io(space, 4, 0, 0); | |
212 | } | |
213 | ||
214 | static WRITE16_HANDLER( write_PM4 ) | |
215 | { | |
216 | pm_io(space, 4, 1, data); | |
217 | } | |
218 | ||
219 | static READ16_HANDLER( read_PMC ) | |
220 | { | |
221 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
222 | if (state->m_emu_status & SSP_PMC_HAVE_ADDR) { | |
223 | state->m_emu_status |= SSP_PMC_SET; | |
224 | state->m_emu_status &= ~SSP_PMC_HAVE_ADDR; | |
225 | return ((state->m_pmc.w.l << 4) & 0xfff0) | ((state->m_pmc.w.l >> 4) & 0xf); | |
226 | } else { | |
227 | state->m_emu_status |= SSP_PMC_HAVE_ADDR; | |
228 | return state->m_pmc.w.l; | |
229 | } | |
230 | } | |
231 | ||
232 | static WRITE16_HANDLER( write_PMC ) | |
233 | { | |
234 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
235 | if (state->m_emu_status & SSP_PMC_HAVE_ADDR) { | |
236 | state->m_emu_status |= SSP_PMC_SET; | |
237 | state->m_emu_status &= ~SSP_PMC_HAVE_ADDR; | |
238 | state->m_pmc.w.h = data; | |
239 | } else { | |
240 | state->m_emu_status |= SSP_PMC_HAVE_ADDR; | |
241 | state->m_pmc.w.l = data; | |
242 | } | |
243 | } | |
244 | ||
245 | static READ16_HANDLER( read_AL ) | |
246 | { | |
247 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
248 | state->m_emu_status &= ~(SSP_PMC_SET|SSP_PMC_HAVE_ADDR); | |
249 | return 0; | |
250 | } | |
251 | ||
252 | static WRITE16_HANDLER( write_AL ) | |
253 | { | |
254 | } | |
255 | ||
256 | ||
257 | ||
258 | static READ16_HANDLER( svp_68k_io_r ) | |
259 | { | |
260 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
261 | UINT32 d; | |
262 | switch (offset) | |
263 | { | |
264 | // 0xa15000, 0xa15002 | |
265 | case 0: | |
266 | case 1: return state->m_XST; | |
267 | // 0xa15004 | |
268 | case 2: d = state->m_XST2; state->m_XST2 &= ~1; return d; | |
269 | default: logerror("unhandled SVP reg read @ %x\n", offset<<1); | |
270 | } | |
271 | return 0; | |
272 | } | |
273 | ||
274 | static WRITE16_HANDLER( svp_68k_io_w ) | |
275 | { | |
276 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
277 | switch (offset) | |
278 | { | |
279 | // 0xa15000, 0xa15002 | |
280 | case 0: | |
281 | case 1: state->m_XST = data; state->m_XST2 |= 2; break; | |
282 | // 0xa15006 | |
283 | case 3: break; // possibly halts SSP1601 | |
284 | default: logerror("unhandled SVP reg write %04x @ %x\n", data, offset<<1); | |
285 | } | |
286 | } | |
287 | ||
288 | static READ16_HANDLER( svp_68k_cell1_r ) | |
289 | { | |
290 | // this is rewritten 68k test code | |
291 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
292 | UINT32 a1 = offset; | |
293 | a1 = (a1 & 0x7001) | ((a1 & 0x3e) << 6) | ((a1 & 0xfc0) >> 5); | |
294 | return ((UINT16 *)state->m_dram)[a1]; | |
295 | } | |
296 | ||
297 | static READ16_HANDLER( svp_68k_cell2_r ) | |
298 | { | |
299 | // this is rewritten 68k test code | |
300 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
301 | UINT32 a1 = offset; | |
302 | a1 = (a1 & 0x7801) | ((a1 & 0x1e) << 6) | ((a1 & 0x7e0) >> 4); | |
303 | return ((UINT16 *)state->m_dram)[a1]; | |
304 | } | |
305 | ||
306 | ADDRESS_MAP_START( svp_ssp_map, AS_PROGRAM, 16, driver_device ) | |
307 | AM_RANGE(0x0000, 0x03ff) AM_ROMBANK("bank3") | |
308 | AM_RANGE(0x0400, 0xffff) AM_ROMBANK("bank4") | |
309 | ADDRESS_MAP_END | |
310 | ||
311 | ADDRESS_MAP_START( svp_ext_map, AS_IO, 16, driver_device ) | |
312 | ADDRESS_MAP_GLOBAL_MASK(0xf) | |
313 | AM_RANGE(0*2, 0*2+1) AM_READWRITE_LEGACY(read_PM0, write_PM0) | |
314 | AM_RANGE(1*2, 1*2+1) AM_READWRITE_LEGACY(read_PM1, write_PM1) | |
315 | AM_RANGE(2*2, 2*2+1) AM_READWRITE_LEGACY(read_PM2, write_PM2) | |
316 | AM_RANGE(3*2, 3*2+1) AM_READWRITE_LEGACY(read_XST, write_XST) | |
317 | AM_RANGE(4*2, 4*2+1) AM_READWRITE_LEGACY(read_PM4, write_PM4) | |
318 | AM_RANGE(6*2, 6*2+1) AM_READWRITE_LEGACY(read_PMC, write_PMC) | |
319 | AM_RANGE(7*2, 7*2+1) AM_READWRITE_LEGACY(read_AL, write_AL) | |
320 | ADDRESS_MAP_END | |
321 | ||
322 | ||
323 | /* emulate testmode plug */ | |
324 | static UINT8 megadrive_io_read_data_port_svp(running_machine &machine, int portnum) | |
325 | { | |
326 | if (portnum == 0 && machine.root_device().ioport("MEMORY_TEST")->read_safe(0x00)) | |
327 | { | |
328 | return (megadrive_io_data_regs[0] & 0xc0); | |
329 | } | |
330 | return megadrive_io_read_data_port_3button(machine, portnum); | |
331 | } | |
332 | ||
333 | ||
334 | static READ16_HANDLER( svp_speedup_r ) | |
335 | { | |
336 | space.device().execute().spin_until_time(attotime::from_usec(100)); | |
337 | return 0x0425; | |
338 | } | |
339 | ||
340 | ||
341 | void svp_init(running_machine &machine) | |
342 | { | |
343 | mdsvp_state *state = machine.driver_data<mdsvp_state>(); | |
344 | UINT8 *ROM; | |
345 | ||
346 | memset(state->m_pmac_read, 0, ARRAY_LENGTH(state->m_pmac_read)); | |
347 | memset(state->m_pmac_write, 0, ARRAY_LENGTH(state->m_pmac_write)); | |
348 | state->m_pmc.d = 0; | |
349 | state->m_pmc.w.l = 0; | |
350 | state->m_pmc.w.h = 0; | |
351 | state->m_emu_status = 0; | |
352 | state->m_XST = 0; | |
353 | state->m_XST2 = 0; | |
354 | ||
355 | /* SVP stuff */ | |
356 | state->m_dram = auto_alloc_array(machine, UINT8, 0x20000); | |
357 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_ram(0x300000, 0x31ffff, state->m_dram); | |
358 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0xa15000, 0xa150ff, FUNC(svp_68k_io_r), FUNC(svp_68k_io_w)); | |
359 | // "cell arrange" 1 and 2 | |
360 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x390000, 0x39ffff, FUNC(svp_68k_cell1_r)); | |
361 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x3a0000, 0x3affff, FUNC(svp_68k_cell2_r)); | |
362 | ||
363 | machine.device("svp")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x438, 0x438, FUNC(svp_speedup_r)); | |
364 | ||
365 | state->m_iram = auto_alloc_array(machine, UINT8, 0x800); | |
366 | state->membank("bank3")->set_base(state->m_iram); | |
367 | /* SVP ROM just shares m68k region.. */ | |
368 | ROM = state->memregion("maincpu")->base(); | |
369 | state->membank("bank4")->set_base(ROM + 0x800); | |
370 | ||
371 | megadrive_io_read_data_port_ptr = megadrive_io_read_data_port_svp; | |
372 | } |
r20695 | r20696 | |
---|---|---|
30 | 30 | #include "sound/2612intf.h" |
31 | 31 | |
32 | 32 | #include "sound/dac.h" |
33 | #include "sound/sn76496.h" | |
33 | 34 | |
34 | #include "sound/sn76496.h" | |
35 | 35 | #include "imagedev/chd_cd.h" |
36 | #include "imagedev/cartslot.h" | |
37 | #include "formats/imageutl.h" | |
38 | ||
36 | 39 | #include "includes/megadriv.h" |
37 | 40 | #include "machine/nvram.h" |
38 | 41 | #include "cpu/ssp1601/ssp1601.h" |
r20695 | r20696 | |
40 | 43 | #include "machine/megavdp.h" |
41 | 44 | |
42 | 45 | |
46 | MACHINE_CONFIG_EXTERN( megadriv ); | |
43 | 47 | |
44 | 48 | |
45 | 49 | static cpu_device *_genesis_snd_z80_cpu; |
46 | 50 | int genesis_other_hacks = 0; // misc hacks |
47 | 51 | |
48 | 52 | timer_device* megadriv_scanline_timer; |
53 | cpu_device *_svp_cpu; | |
49 | 54 | |
50 | 55 | struct genesis_z80_vars |
51 | 56 | { |
r20695 | r20696 | |
318 | 323 | { |
319 | 324 | UINT8 retdata, helper = (megadrive_io_ctrl_regs[portnum] & 0x7f) | 0x80; // bit 7 always comes from megadrive_io_data_regs |
320 | 325 | static const char *const pad3names[] = { "PAD1", "PAD2", "IN0", "UNK" }; |
321 | ||
326 | ||
322 | 327 | if (megadrive_io_data_regs[portnum] & 0x40) |
323 | 328 | { |
324 | 329 | /* here we read B, C & the directional buttons */ |
r20695 | r20696 | |
885 | 890 | |
886 | 891 | |
887 | 892 | |
888 | INPUT_PORTS_START( megdsvp ) | |
889 | PORT_INCLUDE( megadriv ) | |
890 | 893 | |
891 | PORT_START("MEMORY_TEST") /* special memtest mode */ | |
892 | /* Region setting for Console */ | |
893 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Test ) ) | |
894 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
895 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) | |
896 | INPUT_PORTS_END | |
897 | ||
898 | MACHINE_CONFIG_FRAGMENT( md_svp ) | |
899 | MCFG_CPU_ADD("svp", SSP1601, MASTER_CLOCK_NTSC / 7 * 3) /* ~23 MHz (guessed) */ | |
900 | MCFG_CPU_PROGRAM_MAP(svp_ssp_map) | |
901 | MCFG_CPU_IO_MAP(svp_ext_map) | |
902 | MACHINE_CONFIG_END | |
903 | ||
904 | MACHINE_CONFIG_DERIVED( megdsvp, megadriv ) | |
905 | ||
906 | MCFG_CPU_ADD("svp", SSP1601, MASTER_CLOCK_NTSC / 7 * 3) /* ~23 MHz (guessed) */ | |
907 | MCFG_CPU_PROGRAM_MAP(svp_ssp_map) | |
908 | MCFG_CPU_IO_MAP(svp_ext_map) | |
909 | /* IRQs are not used by this CPU */ | |
910 | MACHINE_CONFIG_END | |
911 | ||
912 | MACHINE_CONFIG_DERIVED( megdsvppal, megadpal ) | |
913 | ||
914 | MCFG_CPU_ADD("svp", SSP1601, MASTER_CLOCK_PAL / 7 * 3) /* ~23 MHz (guessed) */ | |
915 | MCFG_CPU_PROGRAM_MAP(svp_ssp_map) | |
916 | MCFG_CPU_IO_MAP(svp_ext_map) | |
917 | /* IRQs are not used by this CPU */ | |
918 | MACHINE_CONFIG_END | |
919 | ||
920 | ||
921 | ||
922 | ||
923 | ||
924 | 894 | SCREEN_UPDATE_RGB32(megadriv) |
925 | 895 | { |
926 | 896 | sega_genesis_vdp_device *vdp = screen.machine().device<sega_genesis_vdp_device>("gen_vdp"); // yuck |
r20695 | r20696 | |
1030 | 1000 | |
1031 | 1001 | |
1032 | 1002 | |
1033 | UINT16* megadriv_backupram; | |
1034 | int megadriv_backupram_length; | |
1003 | static UINT16* megadriv_backupram; | |
1004 | static int megadriv_backupram_length; | |
1035 | 1005 | |
1036 | 1006 | static NVRAM_HANDLER( megadriv ) |
1037 | 1007 | { |
r20695 | r20696 | |
1190 | 1160 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker",0.25) /* 3.58 MHz */ |
1191 | 1161 | MACHINE_CONFIG_END |
1192 | 1162 | |
1193 | MACHINE_CONFIG_START( megadriv, md_ | |
1163 | MACHINE_CONFIG_START( megadriv, md_base_state ) | |
1194 | 1164 | MCFG_FRAGMENT_ADD(md_ntsc) |
1195 | 1165 | MACHINE_CONFIG_END |
1196 | 1166 | |
r20695 | r20696 | |
1245 | 1215 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker",0.25) /* 3.58 MHz */ |
1246 | 1216 | MACHINE_CONFIG_END |
1247 | 1217 | |
1248 | MACHINE_CONFIG_START( megadpal, md_ | |
1218 | MACHINE_CONFIG_START( megadpal, md_base_state ) | |
1249 | 1219 | MCFG_FRAGMENT_ADD(md_pal) |
1250 | 1220 | MACHINE_CONFIG_END |
1251 | 1221 | |
r20695 | r20696 | |
1295 | 1265 | |
1296 | 1266 | MACHINE_CONFIG_END |
1297 | 1267 | |
1268 | ||
1269 | ||
1270 | /******* 32X image loading *******/ | |
1271 | ||
1272 | // FIXME: non-softlist loading should keep using ROM_CART_LOAD in the ROM definitions, | |
1273 | // once we better integrate softlist with the old loading procedures | |
1274 | static DEVICE_IMAGE_LOAD( _32x_cart ) | |
1275 | { | |
1276 | UINT32 length; | |
1277 | UINT8 *temp_copy; | |
1278 | UINT16 *ROM16; | |
1279 | UINT32 *ROM32; | |
1280 | int i; | |
1281 | ||
1282 | if (image.software_entry() == NULL) | |
1283 | { | |
1284 | length = image.length(); | |
1285 | temp_copy = auto_alloc_array(image.device().machine(), UINT8, length); | |
1286 | image.fread(temp_copy, length); | |
1287 | } | |
1288 | else | |
1289 | { | |
1290 | length = image.get_software_region_length("rom"); | |
1291 | temp_copy = auto_alloc_array(image.device().machine(), UINT8, length); | |
1292 | memcpy(temp_copy, image.get_software_region("rom"), length); | |
1293 | } | |
1294 | ||
1295 | /* Copy the cart image in the locations the driver expects */ | |
1296 | // Notice that, by using pick_integer, we are sure the code works on both LE and BE machines | |
1297 | ROM16 = (UINT16 *) image.device().machine().root_device().memregion("gamecart")->base(); | |
1298 | for (i = 0; i < length; i += 2) | |
1299 | ROM16[i / 2] = pick_integer_be(temp_copy, i, 2); | |
1300 | ||
1301 | ROM32 = (UINT32 *) image.device().machine().root_device().memregion("gamecart_sh2")->base(); | |
1302 | for (i = 0; i < length; i += 4) | |
1303 | ROM32[i / 4] = pick_integer_be(temp_copy, i, 4); | |
1304 | ||
1305 | ROM16 = (UINT16 *) image.device().machine().root_device().memregion("maincpu")->base(); | |
1306 | for (i = 0x00; i < length; i += 2) | |
1307 | ROM16[i / 2] = pick_integer_be(temp_copy, i, 2); | |
1308 | ||
1309 | auto_free(image.device().machine(), temp_copy); | |
1310 | ||
1311 | return IMAGE_INIT_PASS; | |
1312 | } | |
1313 | ||
1314 | ||
1315 | MACHINE_CONFIG_FRAGMENT( _32x_cartslot ) | |
1316 | MCFG_CARTSLOT_ADD("cart") | |
1317 | MCFG_CARTSLOT_EXTENSION_LIST("32x,bin") | |
1318 | MCFG_CARTSLOT_MANDATORY | |
1319 | MCFG_CARTSLOT_INTERFACE("_32x_cart") | |
1320 | MCFG_CARTSLOT_LOAD(_32x_cart) | |
1321 | MCFG_SOFTWARE_LIST_ADD("cart_list","32x") | |
1322 | MACHINE_CONFIG_END | |
1323 | ||
1324 | ||
1325 | ||
1298 | 1326 | struct cdrom_interface scd_cdrom = |
1299 | 1327 | { |
1300 | 1328 | "scd_cdrom", |
r20695 | r20696 | |
1362 | 1390 | _svp_cpu = machine().device<cpu_device>("svp"); |
1363 | 1391 | if (_svp_cpu != NULL) |
1364 | 1392 | { |
1365 | printf("SVP (cpu) found '%s'\n", _svp_cpu->tag() | |
1393 | printf("SVP (cpu) found '%s'\n", _svp_cpu->tag()); | |
1366 | 1394 | } |
1367 | 1395 | |
1368 | 1396 | machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(md_base_state::genesis_int_callback),this)); |
r20695 | r20696 | |
1405 | 1433 | } |
1406 | 1434 | mame_printf_debug("\n"); |
1407 | 1435 | } |
1408 | ||
1409 | /* if we have an SVP cpu then do some extra initilization for it */ | |
1410 | if (_svp_cpu != NULL) | |
1411 | { | |
1412 | svp_init(machine()); | |
1413 | } | |
1414 | ||
1415 | ||
1416 | 1436 | } |
1417 | 1437 | |
1418 | 1438 | DRIVER_INIT_MEMBER(md_base_state,megadriv_c2) |
r20695 | r20696 | |
---|---|---|
1 | 1 | |
2 | 2 | #include "emu.h" |
3 | #include "includes/megadriv.h" | |
3 | #include "includes/md.h" | |
4 | #include "machine/md_slot.h" | |
5 | #include "machine/md_rom.h" | |
6 | //#include "machine/md_svp.h" | |
7 | #include "machine/md_sk.h" | |
8 | #include "machine/md_eeprom.h" | |
9 | #include "machine/md_jcart.h" | |
10 | #include "machine/md_stm95.h" | |
4 | 11 | |
5 | class pico_state : public md_cons_state | |
6 | { | |
7 | public: | |
8 | pico_state(const machine_config &mconfig, device_type type, const char *tag) | |
9 | : md_cons_state(mconfig, type, tag) { } | |
10 | 12 | |
11 | UINT8 m_page_register; | |
12 | }; | |
13 | ||
14 | 13 | /************************************* |
15 | 14 | * |
16 | 15 | * Input handlers |
r20695 | r20696 | |
24 | 23 | state->m_mess_io_stage[(int)(FPTR)ptr] = -1; |
25 | 24 | } |
26 | 25 | |
27 | /* J-Cart controller port */ | |
28 | WRITE16_HANDLER( jcart_ctrl_w ) | |
29 | { | |
30 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
31 | state->m_jcart_io_data[0] = (data & 1) << 6; | |
32 | state->m_jcart_io_data[1] = (data & 1) << 6; | |
33 | } | |
34 | ||
35 | READ16_HANDLER( jcart_ctrl_r ) | |
36 | { | |
37 | md_cons_state *state = space.machine().driver_data<md_cons_state>(); | |
38 | UINT16 retdata = 0; | |
39 | UINT8 joy[2]; | |
40 | ||
41 | if (state->m_jcart_io_data[0] & 0x40) | |
42 | { | |
43 | joy[0] = state->ioport("JCART3_3B")->read_safe(0); | |
44 | joy[1] = state->ioport("JCART4_3B")->read_safe(0); | |
45 | retdata = (state->m_jcart_io_data[0] & 0x40) | joy[0] | (joy[1] << 8); | |
46 | } | |
47 | else | |
48 | { | |
49 | joy[0] = ((state->ioport("JCART3_3B")->read_safe(0) & 0xc0) >> 2) | | |
50 | (state->ioport("JCART3_3B")->read_safe(0) & 0x03); | |
51 | joy[1] = ((state->ioport("JCART4_3B")->read_safe(0) & 0xc0) >> 2) | | |
52 | (state->ioport("JCART4_3B")->read_safe(0) & 0x03); | |
53 | retdata = (state->m_jcart_io_data[0] & 0x40) | joy[0] | (joy[1] << 8); | |
54 | } | |
55 | return retdata; | |
56 | } | |
57 | ||
58 | 26 | static void mess_init_6buttons_pad(running_machine &machine) |
59 | 27 | { |
60 | 28 | md_cons_state *state = machine.driver_data<md_cons_state>(); |
r20695 | r20696 | |
147 | 115 | /* Otherwise it's a 3 buttons Joypad */ |
148 | 116 | else |
149 | 117 | { |
150 | if (megadrive_io_data_regs[portnum] & 0x40) | |
118 | // handle test input for SVP test | |
119 | if (portnum == 0 && machine.root_device().ioport("MEMORY_TEST")->read_safe(0x00)) | |
151 | 120 | { |
121 | retdata = (megadrive_io_data_regs[0] & 0xc0); | |
122 | } | |
123 | else if (megadrive_io_data_regs[portnum] & 0x40) | |
124 | { | |
152 | 125 | /* here we read B, C & the directional buttons */ |
153 | 126 | retdata = (megadrive_io_data_regs[portnum] & helper_3b) | |
154 | 127 | (((state->ioport(pad3names[portnum])->read_safe(0) & 0x3f) | 0x40) & ~helper_3b); |
r20695 | r20696 | |
226 | 199 | PORT_CONFNAME( 0xf0, 0x00, "Player 2 Controller" ) |
227 | 200 | PORT_CONFSETTING( 0x00, "Joystick 3 Buttons" ) |
228 | 201 | PORT_CONFSETTING( 0x10, "Joystick 6 Buttons" ) |
229 | PORT_CONFNAME( 0xf00, 0x00, "Player 3 Controller (J-Cart)" ) | |
230 | PORT_CONFSETTING( 0x00, "Joystick 3 Buttons" ) | |
231 | PORT_CONFNAME( 0xf000, 0x00, "Player 4 Controller (J-Cart)" ) | |
232 | PORT_CONFSETTING( 0x00, "Joystick 3 Buttons" ) | |
233 | 202 | |
234 | 203 | PORT_START("PAD1_3B") /* Joypad 1 (3 button + start) NOT READ DIRECTLY */ |
235 | 204 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x00) |
r20695 | r20696 | |
251 | 220 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 A") PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) |
252 | 221 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0xf0, EQUALS, 0x00) |
253 | 222 | |
254 | PORT_START("JCART3_3B") /* Joypad 3 on J-Cart (3 button + start) */ | |
255 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) PORT_CONDITION("CTRLSEL", 0xf00, EQUALS, 0x00) | |
256 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) PORT_CONDITION("CTRLSEL", 0xf00, EQUALS, 0x00) | |
257 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) PORT_CONDITION("CTRLSEL", 0xf00, EQUALS, 0x00) | |
258 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) PORT_CONDITION("CTRLSEL", 0xf00, EQUALS, 0x00) | |
259 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 B") PORT_CONDITION("CTRLSEL", 0xf00, EQUALS, 0x00) | |
260 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_NAME("P3 C") PORT_CONDITION("CTRLSEL", 0xf00, EQUALS, 0x00) | |
261 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 A") PORT_CONDITION("CTRLSEL", 0xf00, EQUALS, 0x00) | |
262 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(3) PORT_CONDITION("CTRLSEL", 0xf00, EQUALS, 0x00) | |
263 | ||
264 | PORT_START("JCART4_3B") /* Joypad 4 on J-Cart (3 button + start) */ | |
265 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x00) | |
266 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x00) | |
267 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x00) | |
268 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x00) | |
269 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_NAME("P4 B") PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x00) | |
270 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_NAME("P4 C") PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x00) | |
271 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_NAME("P4 A") PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x00) | |
272 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(4) PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x00) | |
273 | ||
274 | 223 | PORT_START("PAD1_6B") /* Joypad 1 (6 button + start + mode) NOT READ DIRECTLY */ |
275 | 224 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) |
276 | 225 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x0f, EQUALS, 0x01) |
r20695 | r20696 | |
317 | 266 | |
318 | 267 | static MACHINE_START( ms_megadriv ) |
319 | 268 | { |
269 | md_cons_state *state = machine.driver_data<md_cons_state>(); | |
270 | ||
320 | 271 | mess_init_6buttons_pad(machine); |
321 | MACHINE_START_CALL( md_sram ); | |
272 | ||
273 | // small hack, until SVP is converted to be a slot device | |
274 | if (machine.device<cpu_device>("svp") != NULL) | |
275 | svp_init(machine); | |
276 | else | |
277 | { | |
278 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7fffff, read16_delegate(FUNC(device_md_cart_interface::read),state->m_slotcart->m_cart), write16_delegate(FUNC(device_md_cart_interface::write),state->m_slotcart->m_cart)); | |
279 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16_delegate(FUNC(device_md_cart_interface::read_a13),state->m_slotcart->m_cart), write16_delegate(FUNC(device_md_cart_interface::write_a13),state->m_slotcart->m_cart)); | |
280 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(device_md_cart_interface::read_a15),state->m_slotcart->m_cart), write16_delegate(FUNC(device_md_cart_interface::write_a15),state->m_slotcart->m_cart)); | |
281 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(device_md_cart_interface::write_tmss_bank),state->m_slotcart->m_cart)); | |
282 | } | |
322 | 283 | } |
323 | 284 | |
324 | 285 | static MACHINE_RESET( ms_megadriv ) |
r20695 | r20696 | |
326 | 287 | MACHINE_RESET_CALL( megadriv ); |
327 | 288 | } |
328 | 289 | |
290 | static SLOT_INTERFACE_START(md_cart) | |
291 | SLOT_INTERFACE_INTERNAL("rom", MD_STD_ROM) | |
292 | SLOT_INTERFACE_INTERNAL("rom_svp", MD_STD_ROM) | |
293 | // SLOT_INTERFACE_INTERNAL("rom_svp", MD_ROM_SVP) // not ready yet... | |
294 | SLOT_INTERFACE_INTERNAL("rom_sk", MD_ROM_SK) | |
295 | // NVRAM handling | |
296 | SLOT_INTERFACE_INTERNAL("rom_sram", MD_ROM_SRAM) | |
297 | SLOT_INTERFACE_INTERNAL("rom_sramsafe", MD_ROM_SRAM) | |
298 | SLOT_INTERFACE_INTERNAL("rom_fram", MD_ROM_FRAM) | |
299 | SLOT_INTERFACE_INTERNAL("rom_beggar", MD_ROM_BEGGAR) | |
300 | // EEPROM handling (not supported fully yet) | |
301 | SLOT_INTERFACE_INTERNAL("rom_eeprom", MD_STD_EEPROM) | |
302 | SLOT_INTERFACE_INTERNAL("rom_nbajam", MD_EEPROM_NBAJAM) | |
303 | SLOT_INTERFACE_INTERNAL("rom_nbajamte", MD_EEPROM_NBAJAMTE) | |
304 | SLOT_INTERFACE_INTERNAL("rom_nflqb", MD_EEPROM_NFLQB) | |
305 | SLOT_INTERFACE_INTERNAL("rom_cslam", MD_EEPROM_CSLAM) | |
306 | SLOT_INTERFACE_INTERNAL("rom_nhlpa", MD_EEPROM_NHLPA) | |
307 | SLOT_INTERFACE_INTERNAL("rom_blara", MD_EEPROM_BLARA) | |
308 | // J-Cart controller (Sampras Tennis) | |
309 | SLOT_INTERFACE_INTERNAL("rom_jcart", MD_JCART) | |
310 | // J-Cart controller + EEPROM handling (not supported fully yet) | |
311 | SLOT_INTERFACE_INTERNAL("rom_codemast", MD_SEPROM_CODEMAST) | |
312 | SLOT_INTERFACE_INTERNAL("rom_mm96", MD_SEPROM_MM96) | |
313 | // STM95 EEPROM | |
314 | SLOT_INTERFACE_INTERNAL("rom_stm95", MD_EEPROM_STM95) | |
315 | // unique bankswitch | |
316 | SLOT_INTERFACE_INTERNAL("rom_ssf2", MD_ROM_SSF2) | |
317 | SLOT_INTERFACE_INTERNAL("rom_radica", MD_ROM_RADICA) | |
318 | // pirate mappers (protection and/or bankswitch) | |
319 | SLOT_INTERFACE_INTERNAL("rom_bugs", MD_ROM_BUGSLIFE) | |
320 | SLOT_INTERFACE_INTERNAL("rom_chinf3", MD_ROM_CHINF3) | |
321 | SLOT_INTERFACE_INTERNAL("rom_elfwor", MD_ROM_ELFWOR) | |
322 | SLOT_INTERFACE_INTERNAL("rom_kof98", MD_ROM_KOF98) | |
323 | SLOT_INTERFACE_INTERNAL("rom_kof99", MD_ROM_KOF99) | |
324 | SLOT_INTERFACE_INTERNAL("rom_lion2", MD_ROM_LION2) | |
325 | SLOT_INTERFACE_INTERNAL("rom_lion3", MD_ROM_LION3) | |
326 | SLOT_INTERFACE_INTERNAL("rom_mcpir", MD_ROM_MCPIR) | |
327 | SLOT_INTERFACE_INTERNAL("rom_mjlov", MD_ROM_MJLOV) | |
328 | SLOT_INTERFACE_INTERNAL("rom_pokestad", MD_ROM_POKESTAD) | |
329 | SLOT_INTERFACE_INTERNAL("rom_realtec", MD_ROM_REALTEC) | |
330 | SLOT_INTERFACE_INTERNAL("rom_redcl", MD_ROM_REDCL) | |
331 | SLOT_INTERFACE_INTERNAL("rom_rx3", MD_ROM_RX3) | |
332 | SLOT_INTERFACE_INTERNAL("rom_sbubl", MD_ROM_SBUBL) | |
333 | SLOT_INTERFACE_INTERNAL("rom_smb", MD_ROM_SMB) | |
334 | SLOT_INTERFACE_INTERNAL("rom_smb2", MD_ROM_SMB2) | |
335 | SLOT_INTERFACE_INTERNAL("rom_smouse", MD_ROM_SMOUSE) | |
336 | SLOT_INTERFACE_INTERNAL("rom_soulb", MD_ROM_SOULB) | |
337 | SLOT_INTERFACE_INTERNAL("rom_squir", MD_ROM_SQUIR) | |
338 | SLOT_INTERFACE_INTERNAL("rom_topf", MD_ROM_TOPF) | |
339 | // these have protection patched out, instead of emulated! | |
340 | SLOT_INTERFACE_INTERNAL("rom_mulan", MD_STD_ROM) | |
341 | SLOT_INTERFACE_INTERNAL("rom_poke", MD_STD_ROM) | |
342 | SLOT_INTERFACE_INTERNAL("rom_poke2", MD_STD_ROM) | |
343 | SLOT_INTERFACE_END | |
344 | ||
329 | 345 | static MACHINE_CONFIG_START( ms_megadriv, md_cons_state ) |
330 | 346 | MCFG_FRAGMENT_ADD( md_ntsc ) |
331 | 347 | MCFG_NVRAM_HANDLER_CLEAR() |
r20695 | r20696 | |
333 | 349 | MCFG_MACHINE_START( ms_megadriv ) |
334 | 350 | MCFG_MACHINE_RESET( ms_megadriv ) |
335 | 351 | |
336 | MCFG_FRAGMENT_ADD( genesis_cartslot ) | |
352 | MCFG_MD_CARTRIDGE_ADD("mdslot", md_cart, NULL, NULL) | |
353 | MCFG_SOFTWARE_LIST_ADD("cart_list","megadriv") | |
337 | 354 | MACHINE_CONFIG_END |
338 | 355 | |
339 | 356 | static MACHINE_CONFIG_START( ms_megadpal, md_cons_state ) |
r20695 | r20696 | |
343 | 360 | MCFG_MACHINE_START( ms_megadriv ) |
344 | 361 | MCFG_MACHINE_RESET( ms_megadriv ) |
345 | 362 | |
346 | MCFG_FRAGMENT_ADD( genesis_cartslot ) | |
363 | MCFG_MD_CARTRIDGE_ADD("mdslot", md_cart, NULL, NULL) | |
364 | MCFG_SOFTWARE_LIST_ADD("cart_list","megadriv") | |
347 | 365 | MACHINE_CONFIG_END |
348 | 366 | |
349 | static MACHINE_CONFIG_START( ms_megdsvp, mdsvp_state ) | |
350 | MCFG_FRAGMENT_ADD( md_ntsc ) | |
351 | MCFG_FRAGMENT_ADD( md_svp ) | |
352 | MCFG_NVRAM_HANDLER_CLEAR() | |
353 | 367 | |
354 | MCFG_MACHINE_START( ms_megadriv ) | |
355 | MCFG_MACHINE_RESET( ms_megadriv ) | |
356 | 368 | |
357 | MCFG_FRAGMENT_ADD( genesis_cartslot ) | |
358 | MACHINE_CONFIG_END | |
359 | 369 | |
360 | static MACHINE_CONFIG_START( ms_megdsvppal, mdsvp_state ) | |
361 | MCFG_FRAGMENT_ADD( md_pal ) | |
362 | MCFG_FRAGMENT_ADD( md_svp ) | |
363 | MCFG_NVRAM_HANDLER_CLEAR() | |
364 | ||
365 | MCFG_MACHINE_START( ms_megadriv ) | |
366 | MCFG_MACHINE_RESET( ms_megadriv ) | |
367 | ||
368 | MCFG_FRAGMENT_ADD( genesis_cartslot ) | |
369 | MACHINE_CONFIG_END | |
370 | ||
371 | ||
372 | ||
373 | ||
374 | 370 | /************************************* |
375 | 371 | * |
376 | 372 | * ROM definition(s) |
r20695 | r20696 | |
640 | 636 | ROM_LOAD( "32x_s_bios.bin", 0x000000, 0x000400, CRC(bfda1fe5) SHA1(4103668c1bbd66c5e24558e73d4f3f92061a109a) ) |
641 | 637 | ROM_END |
642 | 638 | |
639 | /****************************************** SVP emulation *****************************************/ | |
643 | 640 | |
641 | INPUT_PORTS_START( megdsvp ) | |
642 | PORT_INCLUDE( megadriv ) | |
643 | ||
644 | PORT_START("MEMORY_TEST") /* special memtest mode */ | |
645 | /* Region setting for Console */ | |
646 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Test ) ) | |
647 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) | |
648 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) | |
649 | INPUT_PORTS_END | |
650 | ||
651 | ||
652 | static MACHINE_CONFIG_START( megdsvp, mdsvp_state ) | |
653 | MCFG_FRAGMENT_ADD( md_ntsc ) | |
654 | MCFG_NVRAM_HANDLER_CLEAR() | |
655 | ||
656 | MCFG_CPU_ADD("svp", SSP1601, MASTER_CLOCK_NTSC / 7 * 3) /* ~23 MHz (guessed) */ | |
657 | MCFG_CPU_PROGRAM_MAP(svp_ssp_map) | |
658 | MCFG_CPU_IO_MAP(svp_ext_map) | |
659 | /* IRQs are not used by this CPU */ | |
660 | ||
661 | MCFG_MACHINE_START( ms_megadriv ) | |
662 | MCFG_MACHINE_RESET( ms_megadriv ) | |
663 | ||
664 | MCFG_MD_CARTRIDGE_ADD("mdslot", md_cart, NULL, NULL) | |
665 | MCFG_SOFTWARE_LIST_ADD("cart_list","megadriv") | |
666 | MACHINE_CONFIG_END | |
667 | ||
668 | static MACHINE_CONFIG_START( megdsvp_pal, mdsvp_state ) | |
669 | MCFG_FRAGMENT_ADD( md_pal ) | |
670 | MCFG_NVRAM_HANDLER_CLEAR() | |
671 | ||
672 | MCFG_CPU_ADD("svp", SSP1601, MASTER_CLOCK_PAL / 7 * 3) /* ~23 MHz (guessed) */ | |
673 | MCFG_CPU_PROGRAM_MAP(svp_ssp_map) | |
674 | MCFG_CPU_IO_MAP(svp_ext_map) | |
675 | /* IRQs are not used by this CPU */ | |
676 | ||
677 | MCFG_MACHINE_START( ms_megadriv ) | |
678 | MCFG_MACHINE_RESET( ms_megadriv ) | |
679 | ||
680 | MCFG_MD_CARTRIDGE_ADD("mdslot", md_cart, NULL, NULL) | |
681 | MCFG_SOFTWARE_LIST_ADD("cart_list","megadriv") | |
682 | MACHINE_CONFIG_END | |
683 | ||
684 | ||
644 | 685 | /****************************************** PICO emulation ****************************************/ |
645 | 686 | |
646 | 687 | /* |
r20695 | r20696 | |
828 | 869 | INPUT_PORTS_END |
829 | 870 | |
830 | 871 | |
872 | static SLOT_INTERFACE_START(pico_cart) | |
873 | SLOT_INTERFACE_INTERNAL("rom", MD_STD_ROM) | |
874 | SLOT_INTERFACE_END | |
875 | ||
876 | static MACHINE_START(pico) | |
877 | { | |
878 | pico_state *state = machine.driver_data<pico_state>(); | |
879 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7fffff, read16_delegate(FUNC(device_md_cart_interface::read),state->m_picocart->m_cart), write16_delegate(FUNC(device_md_cart_interface::write),state->m_picocart->m_cart)); | |
880 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16_delegate(FUNC(device_md_cart_interface::read_a13),state->m_picocart->m_cart), write16_delegate(FUNC(device_md_cart_interface::write_a13),state->m_picocart->m_cart)); | |
881 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(device_md_cart_interface::read_a15),state->m_picocart->m_cart), write16_delegate(FUNC(device_md_cart_interface::write_a15),state->m_picocart->m_cart)); | |
882 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(device_md_cart_interface::write_tmss_bank),state->m_picocart->m_cart)); | |
883 | } | |
884 | ||
831 | 885 | static MACHINE_CONFIG_START( pico, pico_state ) |
832 | 886 | MCFG_FRAGMENT_ADD( md_ntsc ) |
833 | 887 | MCFG_NVRAM_HANDLER_CLEAR() |
r20695 | r20696 | |
837 | 891 | |
838 | 892 | MCFG_DEVICE_REMOVE("genesis_snd_z80") |
839 | 893 | |
894 | MCFG_MACHINE_START( pico ) | |
840 | 895 | MCFG_MACHINE_RESET( ms_megadriv ) |
841 | 896 | |
842 | MCFG_FRAGMENT_ADD( pico_cartslot ) | |
897 | MCFG_PICO_CARTRIDGE_ADD("picoslot", pico_cart, NULL, NULL) | |
898 | MCFG_SOFTWARE_LIST_ADD("cart_list","pico") | |
843 | 899 | MACHINE_CONFIG_END |
844 | 900 | |
845 | 901 | static MACHINE_CONFIG_START( picopal, pico_state ) |
r20695 | r20696 | |
851 | 907 | |
852 | 908 | MCFG_DEVICE_REMOVE("genesis_snd_z80") |
853 | 909 | |
910 | MCFG_MACHINE_START( pico ) | |
854 | 911 | MCFG_MACHINE_RESET( ms_megadriv ) |
855 | 912 | |
856 | MCFG_FRAGMENT_ADD( pico_cartslot ) | |
913 | MCFG_PICO_CARTRIDGE_ADD("picoslot", pico_cart, NULL, NULL) | |
914 | MCFG_SOFTWARE_LIST_ADD("cart_list","pico") | |
857 | 915 | MACHINE_CONFIG_END |
858 | 916 | |
859 | 917 | |
r20695 | r20696 | |
886 | 944 | |
887 | 945 | // these should not exist, the SVP hardware is in the cart and should be installed dynamically when selected from the Software List |
888 | 946 | // this however involves installing entire CPUs at run/load time and I don't think we can do that. |
889 | CONS( 1993, gensvp, genesis, 0, ms_megdsvp, md, md_cons_state, genesis, "Sega", "Genesis (USA, NTSC, for SVP cart)", 0) | |
890 | CONS( 1990, mdsvp, genesis, 0, ms_megdsvppal, md, md_cons_state, md_eur, "Sega", "Mega Drive (Europe, PAL, for SVP cart)", 0) | |
891 | CONS( 1988, mdsvpj, genesis, 0, ms_megdsvp, md, md_cons_state, md_jpn, "Sega", "Mega Drive (Japan, NTSC, for SVP cart)", 0) | |
947 | CONS( 1993, gensvp, genesis, 0, megdsvp, md, md_cons_state, genesis, "Sega", "Genesis (USA, NTSC, for SVP cart)", 0) | |
948 | CONS( 1990, mdsvp, genesis, 0, megdsvp_pal, md, md_cons_state, md_eur, "Sega", "Mega Drive (Europe, PAL, for SVP cart)", 0) | |
949 | CONS( 1988, mdsvpj, genesis, 0, megdsvp, md, md_cons_state, md_jpn, "Sega", "Mega Drive (Japan, NTSC, for SVP cart)", 0) | |
892 | 950 | |
893 | 951 | // the 32X plugged in the cart slot, games plugged into the 32x. Maybe it should be handled as an expansion device? |
894 | 952 | CONS( 1994, 32x, 0, 0, ms_32x, md, md_cons_state, genesis, "Sega", "Genesis with 32X (USA, NTSC)", GAME_NOT_WORKING ) |
r20695 | r20696 | |
---|---|---|
455 | 455 | $(MAME_MACHINE)/megacd.o \ |
456 | 456 | $(MAME_MACHINE)/megacdcd.o \ |
457 | 457 | $(MAME_MACHINE)/mega32x.o \ |
458 | $(MAME_MACHINE)/megasvp.o \ | |
459 | 458 | $(MAME_MACHINE)/megavdp.o \ |
460 | 459 | $(MAME_MACHINE)/dc.o \ |
461 | 460 | $(MAME_DRIVERS)/naomi.o \ |
r20695 | r20696 | |
1617 | 1616 | |
1618 | 1617 | $(MESSOBJ)/sega.a: \ |
1619 | 1618 | $(MESS_DRIVERS)/sg1000.o \ |
1620 | $(MAME_MACHINE)/md_cart.o \ | |
1619 | $(MESS_MACHINE)/md_slot.o \ | |
1620 | $(MESS_MACHINE)/md_rom.o \ | |
1621 | $(MESS_MACHINE)/md_sk.o \ | |
1622 | $(MESS_MACHINE)/md_eeprom.o \ | |
1623 | $(MESS_MACHINE)/md_jcart.o \ | |
1624 | $(MESS_MACHINE)/md_stm95.o \ | |
1625 | $(MESS_MACHINE)/megasvp.o \ | |
1621 | 1626 | $(MESS_DRIVERS)/megadriv.o \ |
1622 | 1627 | $(MESS_DRIVERS)/dccons.o \ |
1623 | 1628 | $(MAME_MACHINE)/gdrom.o \ |
r0 | r20696 | |
---|---|---|
1 | /*************************************************************************** | |
2 | ||
3 | ||
4 | MegaDrive / Genesis Cart + STM95 EEPROM device | |
5 | ||
6 | ||
7 | Emulation by MetalliC, converted to slot by Fabio Priuli | |
8 | ||
9 | ||
10 | TO DO: split STM95 to a separate device... | |
11 | ||
12 | ***************************************************************************/ | |
13 | ||
14 | ||
15 | #include "emu.h" | |
16 | #include "machine/md_stm95.h" | |
17 | ||
18 | ||
19 | void stm95_eeprom_device::set_cs_line(int state) | |
20 | { | |
21 | reset_line = state; | |
22 | if (reset_line != CLEAR_LINE) | |
23 | { | |
24 | stream_pos = 0; | |
25 | stm_state = IDLE; | |
26 | } | |
27 | } | |
28 | ||
29 | void stm95_eeprom_device::set_si_line(int state) | |
30 | { | |
31 | latch = state; | |
32 | } | |
33 | ||
34 | int stm95_eeprom_device::get_so_line(void) | |
35 | { | |
36 | if (stm_state == READING || stm_state == CMD_RDSR) | |
37 | return (stream_data >> 8) & 1; | |
38 | else | |
39 | return 0; | |
40 | } | |
41 | ||
42 | void stm95_eeprom_device::set_sck_line(int state) | |
43 | { | |
44 | if (reset_line == CLEAR_LINE) | |
45 | { | |
46 | if (state == ASSERT_LINE && sck_line == CLEAR_LINE) | |
47 | { | |
48 | switch (stm_state) | |
49 | { | |
50 | case IDLE: | |
51 | stream_data = (stream_data << 1) | (latch ? 1 : 0); | |
52 | stream_pos++; | |
53 | if (stream_pos == 8) | |
54 | { | |
55 | stream_pos = 0; | |
56 | //printf("STM95 EEPROM: got cmd %02X\n", stream_data&0xff); | |
57 | switch(stream_data & 0xff) | |
58 | { | |
59 | case 0x01: // write status register | |
60 | if (WEL != 0) | |
61 | stm_state = CMD_WRSR; | |
62 | WEL = 0; | |
63 | break; | |
64 | case 0x02: // write | |
65 | if (WEL != 0) | |
66 | stm_state = CMD_WRITE; | |
67 | stream_data = 0; | |
68 | WEL = 0; | |
69 | break; | |
70 | case 0x03: // read | |
71 | stm_state = M95320_CMD_READ; | |
72 | stream_data = 0; | |
73 | break; | |
74 | case 0x04: // write disable | |
75 | WEL = 0; | |
76 | break; | |
77 | case 0x05: // read status register | |
78 | stm_state = CMD_RDSR; | |
79 | stream_data = WEL<<1; | |
80 | break; | |
81 | case 0x06: // write enable | |
82 | WEL = 1; | |
83 | break; | |
84 | default: | |
85 | logerror("STM95 EEPROM: unknown cmd %02X\n", stream_data&0xff); | |
86 | } | |
87 | } | |
88 | break; | |
89 | case CMD_WRSR: | |
90 | stream_pos++; // just skip, don't care block protection | |
91 | if (stream_pos == 8) | |
92 | { | |
93 | stm_state = IDLE; | |
94 | stream_pos = 0; | |
95 | } | |
96 | break; | |
97 | case CMD_RDSR: | |
98 | stream_data = stream_data<<1; | |
99 | stream_pos++; | |
100 | if (stream_pos == 8) | |
101 | { | |
102 | stm_state = IDLE; | |
103 | stream_pos = 0; | |
104 | } | |
105 | break; | |
106 | case M95320_CMD_READ: | |
107 | stream_data = (stream_data << 1) | (latch ? 1 : 0); | |
108 | stream_pos++; | |
109 | if (stream_pos == 16) | |
110 | { | |
111 | eeprom_addr = stream_data & (M95320_SIZE - 1); | |
112 | stream_data = eeprom_data[eeprom_addr]; | |
113 | stm_state = READING; | |
114 | stream_pos = 0; | |
115 | } | |
116 | break; | |
117 | case READING: | |
118 | stream_data = stream_data<<1; | |
119 | stream_pos++; | |
120 | if (stream_pos == 8) | |
121 | { | |
122 | if (++eeprom_addr == M95320_SIZE) | |
123 | eeprom_addr = 0; | |
124 | stream_data |= eeprom_data[eeprom_addr]; | |
125 | stream_pos = 0; | |
126 | } | |
127 | break; | |
128 | case CMD_WRITE: | |
129 | stream_data = (stream_data << 1) | (latch ? 1 : 0); | |
130 | stream_pos++; | |
131 | if (stream_pos == 16) | |
132 | { | |
133 | eeprom_addr = stream_data & (M95320_SIZE - 1); | |
134 | stm_state = WRITING; | |
135 | stream_pos = 0; | |
136 | } | |
137 | break; | |
138 | case WRITING: | |
139 | stream_data = (stream_data << 1) | (latch ? 1 : 0); | |
140 | stream_pos++; | |
141 | if (stream_pos == 8) | |
142 | { | |
143 | eeprom_data[eeprom_addr] = stream_data; | |
144 | if (++eeprom_addr == M95320_SIZE) | |
145 | eeprom_addr = 0; | |
146 | stream_pos = 0; | |
147 | } | |
148 | break; | |
149 | } | |
150 | } | |
151 | } | |
152 | sck_line = state; | |
153 | } | |
154 | ||
155 | ||
156 | ||
157 | //------------------------------------------------- | |
158 | // md_rom_device - constructor | |
159 | //------------------------------------------------- | |
160 | ||
161 | const device_type MD_EEPROM_STM95 = &device_creator<md_eeprom_stm95_device>; | |
162 | ||
163 | ||
164 | md_eeprom_stm95_device::md_eeprom_stm95_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) | |
165 | : device_t(mconfig, type, name, tag, owner, clock), | |
166 | device_md_cart_interface( mconfig, *this ) | |
167 | { | |
168 | } | |
169 | ||
170 | md_eeprom_stm95_device::md_eeprom_stm95_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
171 | : device_t(mconfig, MD_EEPROM_STM95, "MD Cart + EEPROM STM95", tag, owner, clock), | |
172 | device_md_cart_interface( mconfig, *this ) | |
173 | { | |
174 | } | |
175 | ||
176 | ||
177 | void md_eeprom_stm95_device::device_start() | |
178 | { | |
179 | m_rdcnt = 0; | |
180 | m_bank[0] = 0; | |
181 | m_bank[1] = 0; | |
182 | m_bank[2] = 0; | |
183 | nvram_alloc(machine(), M95320_SIZE); | |
184 | m_stm95.eeprom_data = (UINT8*)get_nvram_base(); | |
185 | } | |
186 | ||
187 | /*------------------------------------------------- | |
188 | mapper specific handlers | |
189 | -------------------------------------------------*/ | |
190 | ||
191 | READ16_MEMBER(md_eeprom_stm95_device::read) | |
192 | { | |
193 | if (offset == 0x0015e6/2 || offset == 0x0015e8/2) | |
194 | { | |
195 | // ugly hack until we don't know much about game protection | |
196 | // first 3 reads from 15e6 return 0x00000010, then normal 0x00018010 value for crc check | |
197 | UINT16 res; | |
198 | offset -= 0x0015e6/2; | |
199 | logerror("read 0x15e6 %d\n", m_rdcnt); | |
200 | if (m_rdcnt < 6) | |
201 | { | |
202 | m_rdcnt++; | |
203 | res = offset ? 0x10 : 0; | |
204 | } | |
205 | else | |
206 | res = offset ? 0x8010 : 0x0001; | |
207 | return res; | |
208 | } | |
209 | if (offset < 0x280000/2) | |
210 | return m_rom[offset]; | |
211 | else // last 0x180000 are bankswitched | |
212 | { | |
213 | UINT8 bank = (offset - 0x280000/2) >> 18; | |
214 | return m_rom[(offset & 0x7ffff/2) + (m_bank[bank] * 0x80000)/2]; | |
215 | } | |
216 | } | |
217 | ||
218 | READ16_MEMBER(md_eeprom_stm95_device::read_a13) | |
219 | { | |
220 | if (offset == 0x0a/2) | |
221 | { | |
222 | return m_stm95.get_so_line() & 1; | |
223 | } | |
224 | return 0xffff; | |
225 | } | |
226 | ||
227 | WRITE16_MEMBER(md_eeprom_stm95_device::write_a13) | |
228 | { | |
229 | if (offset == 0x00/2) | |
230 | { | |
231 | logerror("A13001 write %02x\n", data); | |
232 | } | |
233 | else if (offset < 0x08/2) | |
234 | { | |
235 | m_bank[offset - 1] = data & 0x0f; | |
236 | } | |
237 | else if (offset < 0x0a/2) | |
238 | { | |
239 | m_stm95.set_si_line(BIT(data, 0)); | |
240 | m_stm95.set_sck_line(BIT(data, 1)); | |
241 | m_stm95.set_halt_line(BIT(data, 2)); | |
242 | m_stm95.set_cs_line(BIT(data, 3)); | |
243 | } | |
244 | } | |
245 |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
r0 | r20696 | |
---|---|---|
1 | #ifndef __MD_STM95_H | |
2 | #define __MD_STM95_H | |
3 | ||
4 | #include "machine/md_slot.h" | |
5 | ||
6 | //************************************************************************** | |
7 | // TYPE DEFINITIONS | |
8 | //************************************************************************** | |
9 | ||
10 | /* ST M95320 32Kbit serial EEPROM implementation */ | |
11 | // TO DO: STM95 should be made a separate EEPROM device and this should be merged with md_eeprom.c! | |
12 | ||
13 | #define M95320_SIZE 0x1000 | |
14 | ||
15 | enum STMSTATE | |
16 | { | |
17 | IDLE = 0, | |
18 | CMD_WRSR, | |
19 | CMD_RDSR, | |
20 | M95320_CMD_READ, | |
21 | CMD_WRITE, | |
22 | READING, | |
23 | WRITING | |
24 | }; | |
25 | ||
26 | class stm95_eeprom_device | |
27 | { | |
28 | public: | |
29 | stm95_eeprom_device() : | |
30 | stm_state(IDLE), | |
31 | stream_pos(0) | |
32 | {}; | |
33 | ||
34 | UINT8 *eeprom_data; | |
35 | void set_cs_line(int); | |
36 | void set_halt_line(int state) {}; // not implemented | |
37 | void set_si_line(int); | |
38 | void set_sck_line(int state); | |
39 | int get_so_line(void); | |
40 | ||
41 | protected: | |
42 | int latch; | |
43 | int reset_line; | |
44 | int sck_line; | |
45 | int WEL; | |
46 | ||
47 | STMSTATE stm_state; | |
48 | int stream_pos; | |
49 | int stream_data; | |
50 | int eeprom_addr; | |
51 | }; | |
52 | ||
53 | ||
54 | // ======================> md_eeprom_stm95_device | |
55 | ||
56 | class md_eeprom_stm95_device : public device_t, | |
57 | public device_md_cart_interface | |
58 | { | |
59 | public: | |
60 | // construction/destruction | |
61 | md_eeprom_stm95_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); | |
62 | md_eeprom_stm95_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
63 | ||
64 | // device-level overrides | |
65 | virtual void device_start(); | |
66 | virtual void device_config_complete() { m_shortname = "md_eeprom_stm95"; } | |
67 | ||
68 | // reading and writing | |
69 | virtual DECLARE_READ16_MEMBER(read); | |
70 | virtual DECLARE_READ16_MEMBER(read_a13); | |
71 | virtual DECLARE_WRITE16_MEMBER(write_a13); | |
72 | ||
73 | private: | |
74 | UINT8 m_bank[3]; | |
75 | int m_rdcnt; | |
76 | ||
77 | stm95_eeprom_device m_stm95; | |
78 | }; | |
79 | ||
80 | ||
81 | // device type definition | |
82 | extern const device_type MD_EEPROM_STM95; | |
83 | ||
84 | #endif |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
r0 | r20696 | |
---|---|---|
1 | /*********************************************************************************************************** | |
2 | ||
3 | ||
4 | MegaDrive cart emulation | |
5 | (through slot devices) | |
6 | ||
7 | The driver exposes address ranges | |
8 | 0x000000-0x7fffff to read/write (typically cart data, possibly banked, and some protection) | |
9 | 0x130000-0x1300ff to read_a13/write_a13 (typically SRAM toggling or protection) | |
10 | 0x150000-0x1500ff to read_a15/write_a15 (for SVP registers, not converted yet to slots) | |
11 | ||
12 | currently available slot devices: | |
13 | md_rom: standard carts + carts with NVRAM (SRAM/FRAM) + pirate carts with protection & bankswitch | |
14 | md_eeprom: carts + I2C EEPROM (EEPROM device hooked up only, support to be completed) | |
15 | md_jcart: Codemasters J-Cart & J-Cart+SEPROM (again, EEPROM device hooked up only, support to be completed) | |
16 | md_sk: Sonic & Knuckles pass-thorugh cart (enables a second slot to mount any other cart) | |
17 | md_stm95: cart + STM95 EEPROM (e.g. Pier Solar) | |
18 | ||
19 | TODO: currently read access in 0x000000-0x7fffff are not masked (so we assume that no game attempts to | |
20 | read beyond its ROM size). A regression test is pending to identify which games need this and mirror | |
21 | them properly (Eke's doc states ROM data should be mirrored), but none of the ~120 games I tried | |
22 | attempted that and a testcase would be appreciated | |
23 | ||
24 | ***********************************************************************************************************/ | |
25 | ||
26 | ||
27 | #include "emu.h" | |
28 | #include "machine/md_slot.h" | |
29 | ||
30 | //************************************************************************** | |
31 | // GLOBAL VARIABLES | |
32 | //************************************************************************** | |
33 | ||
34 | const device_type MD_CART_SLOT = &device_creator<md_cart_slot_device>; | |
35 | const device_type PICO_CART_SLOT = &device_creator<pico_cart_slot_device>; | |
36 | const device_type MD_SUBCART_SLOT = &device_creator<md_subcart_slot_device>; | |
37 | ||
38 | ||
39 | //************************************************************************** | |
40 | // MD cartridges Interface | |
41 | //************************************************************************** | |
42 | ||
43 | //------------------------------------------------- | |
44 | // device_md_cart_interface - constructor | |
45 | //------------------------------------------------- | |
46 | ||
47 | device_md_cart_interface::device_md_cart_interface(const machine_config &mconfig, device_t &device) | |
48 | : device_slot_card_interface(mconfig, device), | |
49 | m_rom(NULL), | |
50 | m_nvram(NULL), | |
51 | m_rom_size(0), | |
52 | m_nvram_size(0) | |
53 | { | |
54 | } | |
55 | ||
56 | ||
57 | //------------------------------------------------- | |
58 | // ~device_md_cart_interface - destructor | |
59 | //------------------------------------------------- | |
60 | ||
61 | device_md_cart_interface::~device_md_cart_interface() | |
62 | { | |
63 | } | |
64 | ||
65 | //------------------------------------------------- | |
66 | // rom_alloc - alloc the space for the cart | |
67 | //------------------------------------------------- | |
68 | ||
69 | void device_md_cart_interface::rom_alloc(running_machine &machine, size_t size) | |
70 | { | |
71 | if (m_rom == NULL) | |
72 | { | |
73 | m_rom = auto_alloc_array_clear(machine, UINT16, size/sizeof(UINT16)); | |
74 | m_rom_size = size; | |
75 | } | |
76 | } | |
77 | ||
78 | ||
79 | //------------------------------------------------- | |
80 | // nvram_alloc - alloc the space for the nvram | |
81 | //------------------------------------------------- | |
82 | ||
83 | void device_md_cart_interface::nvram_alloc(running_machine &machine, size_t size) | |
84 | { | |
85 | if (m_nvram == NULL) | |
86 | { | |
87 | m_nvram = auto_alloc_array_clear(machine, UINT16, size/sizeof(UINT16)); | |
88 | m_nvram_size = size; | |
89 | } | |
90 | } | |
91 | ||
92 | ||
93 | //************************************************************************** | |
94 | // LIVE DEVICE | |
95 | //************************************************************************** | |
96 | ||
97 | //------------------------------------------------- | |
98 | // base_md_cart_slot_device - constructor | |
99 | //------------------------------------------------- | |
100 | base_md_cart_slot_device::base_md_cart_slot_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) : | |
101 | device_t(mconfig, type, name, tag, owner, clock), | |
102 | device_image_interface(mconfig, *this), | |
103 | device_slot_interface(mconfig, *this), | |
104 | m_type(SEGA_STD) | |
105 | { | |
106 | } | |
107 | ||
108 | md_cart_slot_device::md_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : | |
109 | base_md_cart_slot_device(mconfig, MD_CART_SLOT, "MD Cartridge Slot", tag, owner, clock) | |
110 | { | |
111 | } | |
112 | ||
113 | md_subcart_slot_device::md_subcart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : | |
114 | base_md_cart_slot_device(mconfig, MD_SUBCART_SLOT, "MD Cartridge SubSlot", tag, owner, clock) | |
115 | { | |
116 | } | |
117 | ||
118 | pico_cart_slot_device::pico_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : | |
119 | base_md_cart_slot_device(mconfig, PICO_CART_SLOT, "Pico Cartridge Slot", tag, owner, clock) | |
120 | { | |
121 | } | |
122 | ||
123 | //------------------------------------------------- | |
124 | // base_md_cart_slot_device - destructor | |
125 | //------------------------------------------------- | |
126 | ||
127 | base_md_cart_slot_device::~base_md_cart_slot_device() | |
128 | { | |
129 | } | |
130 | ||
131 | //------------------------------------------------- | |
132 | // device_start - device-specific startup | |
133 | //------------------------------------------------- | |
134 | ||
135 | void base_md_cart_slot_device::device_start() | |
136 | { | |
137 | m_cart = dynamic_cast<device_md_cart_interface *>(get_card_device()); | |
138 | } | |
139 | ||
140 | //------------------------------------------------- | |
141 | // device_config_complete - perform any | |
142 | // operations now that the configuration is | |
143 | // complete | |
144 | //------------------------------------------------- | |
145 | ||
146 | void base_md_cart_slot_device::device_config_complete() | |
147 | { | |
148 | // set brief and instance name | |
149 | update_names(); | |
150 | } | |
151 | ||
152 | ||
153 | //------------------------------------------------- | |
154 | // MD PCB | |
155 | //------------------------------------------------- | |
156 | ||
157 | ||
158 | struct md_slot | |
159 | { | |
160 | int pcb_id; | |
161 | const char *slot_option; | |
162 | }; | |
163 | ||
164 | // Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it | |
165 | static const md_slot slot_list[] = | |
166 | { | |
167 | { SEGA_SK, "rom_sk" }, | |
168 | { SEGA_STD, "rom_svp"}, | |
169 | // { SEGA_SVP, "rom_svp"}, // not ready yet... | |
170 | ||
171 | { SEGA_SRAM, "rom_sram" }, | |
172 | { SEGA_FRAM, "rom_fram" }, | |
173 | { BEGGAR, "rom_beggar"}, | |
174 | ||
175 | { SEGA_EEPROM, "rom_eeprom" }, | |
176 | { NBA_JAM, "rom_nbajam" }, | |
177 | { NBA_JAM_TE, "rom_nbajamte" }, | |
178 | { NFL_QB_96, "rom_nflqb" }, | |
179 | { C_SLAM, "rom_cslam" }, | |
180 | { EA_NHLPA, "rom_nhlpa" }, | |
181 | { BRIAN_LARA, "rom_blara" }, | |
182 | ||
183 | { CM_JCART, "rom_jcart" }, | |
184 | { CODE_MASTERS, "rom_codemast" }, | |
185 | { CM_MM96, "rom_mm96" }, | |
186 | ||
187 | { PSOLAR, "rom_stm95"}, | |
188 | ||
189 | { SSF2, "rom_ssf2" }, | |
190 | { RADICA, "rom_radica" }, | |
191 | // { GAME_KANDUME, "rom_gkand" }, // what's needed by this? | |
192 | ||
193 | { BUGSLIFE, "rom_bugs" }, | |
194 | { CHINFIGHT3, "rom_chinf3" }, | |
195 | { ELFWOR, "rom_elfwor" }, | |
196 | { KAIJU, "rom_pokestad" }, | |
197 | { KOF98, "rom_kof98" }, | |
198 | { KOF99, "rom_kof99" }, | |
199 | { LIONK2, "rom_lion2" }, | |
200 | { LIONK3, "rom_lion3" }, | |
201 | { MC_PIRATE, "rom_mcpir" }, | |
202 | { MJLOVER, "rom_mjlov" }, | |
203 | { MULAN, "rom_mulan"}, | |
204 | { POKEMON, "rom_poke"}, | |
205 | { POKEMON2, "rom_poke2"}, | |
206 | { REALTEC, "rom_realtec" }, | |
207 | { REDCL_EN, "rom_redcl" }, | |
208 | { REDCLIFF, "rom_redcl" }, | |
209 | { ROCKMANX3, "rom_rx3" }, | |
210 | { SBUBBOB, "rom_sbubl" }, | |
211 | { SMB, "rom_smb" }, | |
212 | { SMB2, "rom_smb2" }, | |
213 | { SMOUSE, "rom_smouse" }, | |
214 | { SOULBLAD, "rom_soulblad" }, | |
215 | { SQUIRRELK, "rom_squir" }, | |
216 | { TOPFIGHTER, "rom_topf" }, | |
217 | ||
218 | { SEGA_SRAM_FULLPATH, "rom_sram" }, | |
219 | { SEGA_SRAM_FALLBACK, "rom_sramsafe" } | |
220 | }; | |
221 | ||
222 | static int md_get_pcb_id(const char *slot) | |
223 | { | |
224 | for (int i = 0; i < ARRAY_LENGTH(slot_list); i++) | |
225 | { | |
226 | if (!mame_stricmp(slot_list[i].slot_option, slot)) | |
227 | return slot_list[i].pcb_id; | |
228 | } | |
229 | ||
230 | return SEGA_STD; | |
231 | } | |
232 | ||
233 | static const char *md_get_slot(int type) | |
234 | { | |
235 | for (int i = 0; i < ARRAY_LENGTH(slot_list); i++) | |
236 | { | |
237 | if (slot_list[i].pcb_id == type) | |
238 | return slot_list[i].slot_option; | |
239 | } | |
240 | ||
241 | return "rom"; | |
242 | } | |
243 | ||
244 | ||
245 | /*------------------------------------------------- | |
246 | SRAM handling | |
247 | -------------------------------------------------*/ | |
248 | ||
249 | /*------------------------------------------------- | |
250 | call load | |
251 | -------------------------------------------------*/ | |
252 | ||
253 | ||
254 | bool base_md_cart_slot_device::call_load() | |
255 | { | |
256 | if (m_cart) | |
257 | { | |
258 | m_type = SEGA_STD; | |
259 | int res; | |
260 | ||
261 | // STEP 1: load the file image and keep a copy for later banking | |
262 | // STEP 2: identify the cart type | |
263 | // The two steps are carried out differently if we are loading from a list or not | |
264 | if (software_entry() == NULL) | |
265 | res = load_nonlist(); | |
266 | else | |
267 | res = load_list(); | |
268 | ||
269 | //printf("cart type: %d\n", m_type); | |
270 | ||
271 | if (res == IMAGE_INIT_PASS) | |
272 | { | |
273 | // STEP 3: install memory handlers for this type of cart | |
274 | setup_custom_mappers(); | |
275 | ||
276 | // STEP 4: take care of SRAM. | |
277 | setup_nvram(); | |
278 | ||
279 | if (m_cart->get_nvram_size()) | |
280 | battery_load(m_cart->get_nvram_base(), m_cart->get_nvram_size(), 0xff); | |
281 | } | |
282 | ||
283 | return res; | |
284 | ||
285 | } | |
286 | ||
287 | return IMAGE_INIT_PASS; | |
288 | } | |
289 | ||
290 | ||
291 | int base_md_cart_slot_device::load_list() | |
292 | { | |
293 | UINT16 *ROM; | |
294 | UINT32 length = get_software_region_length("rom"); | |
295 | const char *slot_name; | |
296 | ||
297 | m_cart->rom_alloc(machine(), length); | |
298 | ROM = m_cart->get_rom_base(); | |
299 | memcpy(ROM, get_software_region("rom"), length); | |
300 | ||
301 | if ((slot_name = get_feature("slot")) == NULL) | |
302 | m_type = SEGA_STD; | |
303 | else | |
304 | m_type = md_get_pcb_id(slot_name); | |
305 | ||
306 | return IMAGE_INIT_PASS; | |
307 | } | |
308 | ||
309 | ||
310 | /************************************* | |
311 | * Helper function: Detect SMD file | |
312 | *************************************/ | |
313 | ||
314 | /* code taken directly from GoodGEN by Cowering */ | |
315 | static int genesis_is_SMD(unsigned char *buf,unsigned int len) | |
316 | { | |
317 | if (buf[0x2080] == 'S' && buf[0x80] == 'E' && buf[0x2081] == 'G' && buf[0x81] == 'A') | |
318 | return 1; | |
319 | ||
320 | /* aq quiz */ | |
321 | if (!strncmp("UZ(-01 ", (const char *) &buf[0xf0], 8)) | |
322 | return 1; | |
323 | ||
324 | /* Phelios USA redump */ | |
325 | /* target earth */ | |
326 | /* klax (namcot) */ | |
327 | if (buf[0x2080] == ' ' && buf[0x0080] == 'S' && buf[0x2081] == 'E' && buf[0x0081] == 'G') | |
328 | return 1; | |
329 | ||
330 | /* jap baseball 94 */ | |
331 | if (!strncmp("OL R-AEAL", (const char *) &buf[0xf0], 9)) | |
332 | return 1; | |
333 | ||
334 | /* devilish Mahjong Tower */ | |
335 | if (!strncmp("optrEtranet", (const char *) &buf[0xf3], 11)) | |
336 | return 1; | |
337 | ||
338 | /* golden axe 2 beta */ | |
339 | if (buf[0x0100] == 0x3c && buf[0x0101] == 0 && buf[0x0102] == 0 && buf[0x0103] == 0x3c) | |
340 | return 1; | |
341 | ||
342 | /* omega race */ | |
343 | if (!strncmp("OEARC ", (const char *) &buf[0x90], 8)) | |
344 | return 1; | |
345 | ||
346 | /* budokan beta */ | |
347 | if ((len >= 0x6708 + 8) && !strncmp(" NTEBDKN", (const char *) &buf[0x6708], 8)) | |
348 | return 1; | |
349 | ||
350 | /* cdx pro 1.8 bios */ | |
351 | if (!strncmp("so fCXP", (const char *) &buf[0x2c0], 7)) | |
352 | return 1; | |
353 | ||
354 | /* ishido (hacked) */ | |
355 | if (!strncmp("sio-Wyo ", (const char *) &buf[0x0090], 8)) | |
356 | return 1; | |
357 | ||
358 | /* onslaught */ | |
359 | if (!strncmp("SS CAL ", (const char *) &buf[0x0088], 8)) | |
360 | return 1; | |
361 | ||
362 | /* tram terror pirate */ | |
363 | if ((len >= 0x3648 + 8) && !strncmp("SG NEPIE", (const char *) &buf[0x3648], 8)) | |
364 | return 1; | |
365 | ||
366 | /* breath of fire 3 chinese */ | |
367 | if (buf[0x0007] == 0x1c && buf[0x0008] == 0x0a && buf[0x0009] == 0xb8 && buf[0x000a] == 0x0a) | |
368 | return 1; | |
369 | ||
370 | /*tetris pirate */ | |
371 | if ((len >= 0x1cbe + 5) && !strncmp("@TTI>", (const char *) &buf[0x1cbe], 5)) | |
372 | return 1; | |
373 | ||
374 | return 0; | |
375 | } | |
376 | ||
377 | /************************************* | |
378 | * Loading a cart image *not* from | |
379 | * softlist | |
380 | *************************************/ | |
381 | ||
382 | int base_md_cart_slot_device::load_nonlist() | |
383 | { | |
384 | unsigned char *ROM, *tmpROM; | |
385 | UINT32 len = length(); | |
386 | ||
387 | // this contains an hack for SSF2: its current bankswitch code needs larger rom space to work | |
388 | m_cart->rom_alloc(machine(), (len == 0x500000) ? 0x900000 : len); | |
389 | ||
390 | ROM = (unsigned char *)m_cart->get_rom_base(); | |
391 | tmpROM = global_alloc_array(unsigned char, len); | |
392 | ||
393 | // STEP 1: determine the file type (SMD? MD? BIN?) | |
394 | fread(tmpROM, len); | |
395 | ||
396 | /* is this a SMD file? */ | |
397 | if (genesis_is_SMD(&tmpROM[0x200], len)) | |
398 | { | |
399 | mame_printf_debug("SMD!\n"); | |
400 | ||
401 | for (int ptr = 0; ptr < (len - 0x200) / 0x2000; ptr += 2) | |
402 | { | |
403 | for (int x = 0; x < 0x2000; x++) | |
404 | { | |
405 | *ROM++ = *(tmpROM + 0x200 + ((ptr + 1) * 0x2000) + x); | |
406 | *ROM++ = *(tmpROM + 0x200 + ((ptr + 0) * 0x2000) + x); | |
407 | } | |
408 | } | |
409 | ||
410 | len -= 0x200; | |
411 | } | |
412 | /* is this a MD file? */ | |
413 | else if ((tmpROM[0x80] == 'E') && (tmpROM[0x81] == 'A') && (tmpROM[0x82] == 'M' || tmpROM[0x82] == 'G')) | |
414 | { | |
415 | mame_printf_debug("MD!\n"); | |
416 | ||
417 | for (int ptr = 0; ptr < len; ptr += 2) | |
418 | { | |
419 | ROM[ptr] = tmpROM[(len >> 1) + (ptr >> 1)]; | |
420 | ROM[ptr + 1] = tmpROM[(ptr >> 1)]; | |
421 | } | |
422 | } | |
423 | /* BIN it is, then */ | |
424 | else | |
425 | { | |
426 | fseek(0, SEEK_SET); | |
427 | fread(ROM, len); | |
428 | } | |
429 | ||
430 | global_free(tmpROM); | |
431 | ||
432 | // STEP 2: determine the cart type (to deal with pirate mappers & eeprom) | |
433 | m_type = get_cart_type(ROM, len); | |
434 | ||
435 | #ifdef LSB_FIRST | |
436 | unsigned char fliptemp; | |
437 | // is this really needed nowadays? | |
438 | for (int ptr = 0; ptr < len; ptr += 2) | |
439 | { | |
440 | fliptemp = ROM[ptr]; | |
441 | ROM[ptr] = ROM[ptr+1]; | |
442 | ROM[ptr+1] = fliptemp; | |
443 | } | |
444 | #endif | |
445 | ||
446 | return IMAGE_INIT_PASS; | |
447 | } | |
448 | ||
449 | /*------------------------------------------------- | |
450 | call_unloadload | |
451 | -------------------------------------------------*/ | |
452 | ||
453 | void base_md_cart_slot_device::call_unload() | |
454 | { | |
455 | if (m_cart->get_nvram_size()) | |
456 | battery_save(m_cart->get_nvram_base(), m_cart->get_nvram_size()); | |
457 | } | |
458 | ||
459 | ||
460 | void base_md_cart_slot_device::setup_custom_mappers() | |
461 | { | |
462 | UINT16 *ROM16 = m_cart->get_rom_base(); | |
463 | ||
464 | switch (m_type) | |
465 | { | |
466 | case SSF2: | |
467 | // copy the image in 0x400000-0x900000 and keep the beginning for bankswitch | |
468 | for (int x = 0x500000/2; x > 0; x--) | |
469 | ROM16[x + 0x400000/2 - 1] = ROM16[x - 1]; | |
470 | for (int x = 0; x < 0x400000/2; x++) | |
471 | ROM16[x] = ROM16[x + 0x400000/2]; | |
472 | break; | |
473 | case REDCL_EN: | |
474 | // decrypt | |
475 | for (int x = 0; x < 0x200000/2; x++) | |
476 | ROM16[x] = ROM16[x + 2] ^ 0x4040; | |
477 | break; | |
478 | ||
479 | // patch out protection in a bunch of titles... | |
480 | case POKEMON: | |
481 | /*todo: emulate protection instead | |
482 | 0dd19e:47f8 | |
483 | 0dd1a0:fff0 | |
484 | 0dd1a2:4e63 | |
485 | 0dd46e:4ef8 | |
486 | 0dd470:0300 | |
487 | 0dd49c:6002 | |
488 | */ | |
489 | /* you need to return 1 @ 0xa13002 and 0???1f @ 0xa1303e (it does word reads). */ | |
490 | ROM16[0x0dd19e/2] = 0x47f8; | |
491 | ROM16[0x0dd1a0/2] = 0xfff0; | |
492 | ROM16[0x0dd1a2/2] = 0x4e63; | |
493 | ROM16[0x0dd46e/2] = 0x4ef8; | |
494 | ROM16[0x0dd470/2] = 0x0300; | |
495 | ROM16[0x0dd49c/2] = 0x6002; | |
496 | break; | |
497 | case POKEMON2: | |
498 | /*todo: emulate protection instead | |
499 | 006036:e000 | |
500 | 002540:6026 | |
501 | 001ed0:6026 | |
502 | 002476:6022 | |
503 | */ | |
504 | ROM16[0x06036/2] = 0xe000; | |
505 | ROM16[0x02540/2] = 0x6026; | |
506 | ROM16[0x01ed0/2] = 0x6026; | |
507 | ROM16[0x02476/2] = 0x6022; | |
508 | ROM16[0x7e300/2] = 0x60fe; | |
509 | break; | |
510 | case MULAN: | |
511 | /*todo: emulate protection instead | |
512 | 006036:e000 | |
513 | +more? | |
514 | */ | |
515 | // ROM16[0x01ed0/2] = 0xe000; | |
516 | // ROM16[0x02540/2] = 0xe000; | |
517 | ROM16[0x06036/2] = 0xe000; | |
518 | break; | |
519 | } | |
520 | } | |
521 | ||
522 | void base_md_cart_slot_device::setup_nvram() | |
523 | { | |
524 | UINT8 *ROM = (UINT8 *)m_cart->get_rom_base(); | |
525 | m_cart->m_nvram_readonly = 0; | |
526 | m_cart->m_nvram_active = 0; | |
527 | m_cart->m_nvram_handlers_installed = 0; | |
528 | ||
529 | /* install SRAM & i2c handlers for the specific type of cart */ | |
530 | switch (m_type) | |
531 | { | |
532 | // These types only come from fullpath loading | |
533 | case SEGA_SRAM_FULLPATH: | |
534 | m_cart->m_nvram_start = (ROM[0x1b5] << 24 | ROM[0x1b4] << 16 | ROM[0x1b7] << 8 | ROM[0x1b6]); | |
535 | m_cart->m_nvram_end = (ROM[0x1b9] << 24 | ROM[0x1b8] << 16 | ROM[0x1bb] << 8 | ROM[0x1ba]); | |
536 | logerror("SRAM detected from header: starting location %X - SRAM Length %X\n", m_cart->m_nvram_start, m_cart->m_nvram_end - m_cart->m_nvram_start + 1); | |
537 | ||
538 | // We assume at most 64k of SRAM. is this correct? | |
539 | if ((m_cart->m_nvram_start > m_cart->m_nvram_end) || ((m_cart->m_nvram_end - m_cart->m_nvram_start) >= 0x10000)) | |
540 | m_cart->m_nvram_end = m_cart->m_nvram_start + 0xffff; | |
541 | ||
542 | if (m_cart->m_nvram_start & 1) | |
543 | m_cart->m_nvram_start -= 1; | |
544 | ||
545 | if (!(m_cart->m_nvram_end & 1)) | |
546 | m_cart->m_nvram_end += 1; | |
547 | ||
548 | m_cart->nvram_alloc(machine(), m_cart->m_nvram_end - m_cart->m_nvram_start + 1); | |
549 | if (m_cart->m_rom_size <= m_cart->m_nvram_start) | |
550 | m_cart->m_nvram_active = 1; | |
551 | m_cart->m_nvram_handlers_installed = 1; | |
552 | // don't trust too much header? | |
553 | m_cart->m_nvram_start &= 0x3fffff; | |
554 | m_cart->m_nvram_end &= 0x3fffff; | |
555 | break; | |
556 | case SEGA_SRAM_FALLBACK: | |
557 | m_cart->m_nvram_start = 0x200000; | |
558 | m_cart->m_nvram_end = m_cart->m_nvram_start + 0xffff; | |
559 | m_cart->nvram_alloc(machine(), m_cart->m_nvram_end - m_cart->m_nvram_start + 1); | |
560 | if (m_cart->m_rom_size <= m_cart->m_nvram_start) | |
561 | m_cart->m_nvram_active = 1; | |
562 | break; | |
563 | ||
564 | // These types only come from softlist loading | |
565 | case SEGA_SRAM: | |
566 | m_cart->m_nvram_start = 0x200000; | |
567 | m_cart->m_nvram_end = m_cart->m_nvram_start + get_software_region_length("sram") - 1; | |
568 | m_cart->nvram_alloc(machine(), m_cart->m_nvram_end - m_cart->m_nvram_start + 1); | |
569 | if (m_cart->m_rom_size <= m_cart->m_nvram_start) | |
570 | m_cart->m_nvram_active = 1; | |
571 | m_cart->m_nvram_handlers_installed = 1; | |
572 | break; | |
573 | case SEGA_FRAM: | |
574 | m_cart->m_nvram_start = 0x200000; | |
575 | m_cart->m_nvram_end = m_cart->m_nvram_start + get_software_region_length("fram") - 1; | |
576 | m_cart->nvram_alloc(machine(), m_cart->m_nvram_end - m_cart->m_nvram_start + 1); | |
577 | m_cart->m_nvram_active = 1; | |
578 | m_cart->m_nvram_handlers_installed = 1; | |
579 | break; | |
580 | ||
581 | // These types might come from both (pending proper id routines) | |
582 | case BEGGAR: | |
583 | m_cart->m_nvram_start = 0x400000; | |
584 | m_cart->m_nvram_end = m_cart->m_nvram_start + 0xffff; | |
585 | m_cart->nvram_alloc(machine(), m_cart->m_nvram_end - m_cart->m_nvram_start + 1); | |
586 | m_cart->m_nvram_active = 1; | |
587 | m_cart->m_nvram_handlers_installed = 1; | |
588 | break; | |
589 | } | |
590 | } | |
591 | ||
592 | ||
593 | ||
594 | /*------------------------------------------------- | |
595 | call softlist load | |
596 | -------------------------------------------------*/ | |
597 | ||
598 | bool base_md_cart_slot_device::call_softlist_load(char *swlist, char *swname, rom_entry *start_entry) | |
599 | { | |
600 | load_software_part_region(this, swlist, swname, start_entry ); | |
601 | return TRUE; | |
602 | } | |
603 | ||
604 | int base_md_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) | |
605 | { | |
606 | int type = SEGA_STD; | |
607 | ||
608 | /* Detect carts which need additional handlers */ | |
609 | static const unsigned char smouse_sig[] = { 0x4d, 0xf9, 0x00, 0x40, 0x00, 0x02 }, | |
610 | mjlover_sig[] = { 0x13, 0xf9, 0x00, 0x40, 0x00, 0x00 }, // move.b ($400000).l,($FFFF0C).l (partial) | |
611 | squir_sig[] = { 0x26, 0x79, 0x00, 0xff, 0x00, 0xfa }, | |
612 | bugsl_sig[] = { 0x20, 0x12, 0x13, 0xc0, 0x00, 0xff }, | |
613 | sbub_sig[] = { 0x0c, 0x39, 0x00, 0x55, 0x00, 0x40 }, // cmpi.b #$55,($400000).l | |
614 | lk3_sig[] = { 0x0c, 0x01, 0x00, 0x30, 0x66, 0xe4 }, | |
615 | sdk_sig[] = { 0x48, 0xe7, 0xff, 0xfe, 0x52, 0x79 }, | |
616 | redcliff_sig[] = { 0x10, 0x39, 0x00, 0x40, 0x00, 0x04 }, // move.b ($400004).l,d0 | |
617 | redcl_en_sig[] = { 0x50, 0x79, 0x40, 0x00, 0x40, 0x44 }, // move.b ($400004).l,d0 | |
618 | smb_sig[] = { 0x20, 0x4d, 0x41, 0x52, 0x49, 0x4f }, | |
619 | smb2_sig[] = { 0x4e, 0xb9, 0x00, 0x0f, 0x25, 0x84 }, | |
620 | kaiju_sig[] = { 0x19, 0x7c, 0x00, 0x01, 0x00, 0x00 }, | |
621 | chifi3_sig[] = { 0xb6, 0x16, 0x66, 0x00, 0x00, 0x4a }, | |
622 | lionk2_sig[] = { 0x26, 0x79, 0x00, 0xff, 0x00, 0xf4 }, | |
623 | rx3_sig[] = { 0x66, 0x00, 0x00, 0x0e, 0x30, 0x3c }, | |
624 | kof98_sig[] = { 0x9b, 0xfc, 0x00, 0x00, 0x4a, 0x00 }, | |
625 | s15in1_sig[] = { 0x22, 0x3c, 0x00, 0xa1, 0x30, 0x00 }, | |
626 | kof99_sig[] = { 0x20, 0x3c, 0x30, 0x00, 0x00, 0xa1 }, // move.l #$300000A1,d0 | |
627 | radica_sig[] = { 0x4e, 0xd0, 0x30, 0x39, 0x00, 0xa1 }, // jmp (a0) move.w ($a130xx),d0 | |
628 | soulb_sig[] = { 0x33, 0xfc, 0x00, 0x0c, 0x00, 0xff }, // move.w #$C,($FF020A).l (what happens if check fails) | |
629 | s19in1_sig[] = { 0x13, 0xc0, 0x00, 0xa1, 0x30, 0x38 }, | |
630 | rockman_sig[] = { 0xea, 0x80 }; | |
631 | ||
632 | switch (len) | |
633 | { | |
634 | case 0x80000: | |
635 | if (!memcmp(&ROM[0x08c8], smouse_sig, sizeof(smouse_sig))) | |
636 | type = SMOUSE; | |
637 | ||
638 | if (!memcmp((char *)&ROM[0x7e30e], "SEGA", 4) || | |
639 | !memcmp((char *)&ROM[0x7e100], "SEGA", 4) || | |
640 | !memcmp((char *)&ROM[0x7e1e6], "SEGA", 4)) | |
641 | type = REALTEC; | |
642 | ||
643 | if (!memcmp((char *)&ROM[0x0180], "GM T-50396", 10)) // NHLPA Hockey 93 | |
644 | type = EA_NHLPA; | |
645 | ||
646 | if (!memcmp((char *)&ROM[0x0180], "GM MK-1215", 10)) // Evander Holyfield | |
647 | type = SEGA_EEPROM; | |
648 | break; | |
649 | ||
650 | case 0xc0000: | |
651 | ||
652 | if (!memcmp((char *)&ROM[0x0180], "GM G-4060 ", 8)) // Wonder Boy V | |
653 | type = SEGA_EEPROM; | |
654 | break; | |
655 | ||
656 | case 0x100000: | |
657 | if (!memcmp(&ROM[0x01b24], mjlover_sig, sizeof(mjlover_sig))) | |
658 | type = MJLOVER; | |
659 | ||
660 | if (!memcmp(&ROM[0x03b4], squir_sig, sizeof(squir_sig))) | |
661 | type = SQUIRRELK; | |
662 | ||
663 | if (!memcmp(&ROM[0xee0d0], bugsl_sig, sizeof(bugsl_sig))) | |
664 | type = BUGSLIFE; | |
665 | ||
666 | if (!memcmp((char *)&ROM[0x0172], "GAME : ELF WOR", 14)) | |
667 | type = ELFWOR; | |
668 | ||
669 | if (!memcmp(&ROM[0x123e4], sbub_sig, sizeof(sbub_sig))) | |
670 | type = SBUBBOB; | |
671 | ||
672 | if (!memcmp((char *)&ROM[0x0180], "GM T-50176", 10)) // Rings of Power | |
673 | type = EA_NHLPA; | |
674 | ||
675 | if (!memcmp((char *)&ROM[0x0180], "MK 00001211-00", 14)) // Sports Talk Baseball | |
676 | type = SEGA_EEPROM; | |
677 | ||
678 | if (!memcmp((char *)&ROM[0x0180], "GM T-120096-", 12)) // Micro Machines 2 | |
679 | type = CODE_MASTERS; | |
680 | ||
681 | if (!memcmp((char *)&ROM[0x0180], "GM T-120146-", 12)) // Brian Lara Cricket 96 / Shane Wayne Cricket 96 | |
682 | type = BRIAN_LARA; | |
683 | ||
684 | if (!memcmp((char *)&ROM[0x0190], "OJKRPTBVFCA ", 0x10)) // Micro Machines '96 / Military TODO: better way to recognize these? | |
685 | type = CODE_MASTERS; | |
686 | break; | |
687 | ||
688 | case 0x200000: | |
689 | if (!memcmp(&ROM[0x18c6], lk3_sig, sizeof(lk3_sig))) | |
690 | type = LIONK3; | |
691 | ||
692 | if (!memcmp(&ROM[0x220], sdk_sig, sizeof(sdk_sig))) | |
693 | type = LIONK3; | |
694 | ||
695 | if (!memcmp(&ROM[0xce560], redcliff_sig, sizeof(redcliff_sig))) | |
696 | type = REDCLIFF; | |
697 | ||
698 | if (!memcmp(&ROM[0xc8cb0], smb_sig, sizeof(smb_sig))) | |
699 | type = SMB; | |
700 | ||
701 | if (!memcmp(&ROM[0xf24d6], smb2_sig, sizeof(smb2_sig))) | |
702 | type = SMB2; | |
703 | ||
704 | if (!memcmp(&ROM[0x674e], kaiju_sig, sizeof(kaiju_sig))) | |
705 | type = KAIJU; | |
706 | ||
707 | if (!memcmp(&ROM[0x1780], chifi3_sig, sizeof(chifi3_sig))) | |
708 | type = CHINFIGHT3; | |
709 | ||
710 | if (!memcmp(&ROM[0x03c2], lionk2_sig, sizeof(lionk2_sig))) | |
711 | type = LIONK2; | |
712 | ||
713 | if (!memcmp(&ROM[0xc8b90], rx3_sig, sizeof(rx3_sig))) | |
714 | type = ROCKMANX3; | |
715 | ||
716 | if (!memcmp(&ROM[0x56ae2], kof98_sig, sizeof(kof98_sig))) | |
717 | type = KOF98; | |
718 | ||
719 | if (!memcmp(&ROM[0x17bb2], s15in1_sig, sizeof(s15in1_sig))) | |
720 | type = MC_PIRATE; | |
721 | ||
722 | if (!memcmp((char *)&ROM[0x0180], "GM T-081326 ", 12)) // NBA Jam | |
723 | type = NBA_JAM; | |
724 | ||
725 | if (!memcmp((char *)&ROM[0x0180], "GM MK-1228", 10)) // Greatest Heavyweight of the Ring | |
726 | type = SEGA_EEPROM; | |
727 | ||
728 | if ((!memcmp((char *)&ROM[0x0180], "GM T-12046", 10)) || // Mega Man | |
729 | (!memcmp((char *)&ROM[0x0180], "GM T-12053", 10) && !memcmp(&ROM[0x18e], rockman_sig, sizeof(rockman_sig)))) // / Rock Man (EEPROM version) | |
730 | type = SEGA_EEPROM; | |
731 | ||
732 | break; | |
733 | ||
734 | case 0x200005: | |
735 | if (!memcmp(&ROM[0xce564], redcl_en_sig, sizeof(redcliff_sig))) | |
736 | type = REDCL_EN; | |
737 | break; | |
738 | ||
739 | case 0x300000: | |
740 | if (!memcmp(&ROM[0x220], sdk_sig, sizeof(sdk_sig))) | |
741 | type = LIONK3; | |
742 | ||
743 | if (!memcmp(&ROM[0x1fd0d2], kof99_sig, sizeof(kof99_sig))) | |
744 | type = KOF99; | |
745 | ||
746 | if (!memcmp((char *)&ROM[0x0180], "GM T-81406", 10)) // NBA Jam TE | |
747 | type = NBA_JAM_TE; | |
748 | ||
749 | if (!memcmp((char *)&ROM[0x0180], "GM T-081276 ", 12)) // NFL Quarterback Club | |
750 | type = NBA_JAM_TE; | |
751 | ||
752 | break; | |
753 | ||
754 | case 0x400000: | |
755 | if (!memcmp(&ROM[0x3c031c], radica_sig, sizeof(radica_sig)) || | |
756 | !memcmp(&ROM[0x3f031c], radica_sig, sizeof(radica_sig))) // ssf+gng + radica vol1 | |
757 | type = RADICA; | |
758 | ||
759 | if (!memcmp(&ROM[0x028460], soulb_sig, sizeof(soulb_sig))) | |
760 | type = SOULBLAD; | |
761 | ||
762 | if (!memcmp(&ROM[0x1e700], s19in1_sig, sizeof(s19in1_sig))) | |
763 | type = MC_PIRATE; | |
764 | ||
765 | if (!memcmp((char *)&ROM[0x0180], "GM T-081586-", 12)) // NFL Quarterback Club 96 | |
766 | type = NFL_QB_96; | |
767 | ||
768 | if (!memcmp((char *)&ROM[0x0180], "GM T-081576 ", 12)) // College Slam | |
769 | type = C_SLAM; | |
770 | ||
771 | if (!memcmp((char *)&ROM[0x0180], "GM T-81476", 10)) // Big Hurt Baseball | |
772 | type = C_SLAM; | |
773 | ||
774 | break; | |
775 | ||
776 | case 0x500000: | |
777 | if (!memcmp((char *)&ROM[0x0120], "SUPER STREET FIGHTER2 ", 22)) | |
778 | type = SSF2; | |
779 | break; | |
780 | ||
781 | case 0x800000: | |
782 | if (!memcmp((char *)&ROM[0x0180], "GM T-574023-", 12)) // Pier Solar | |
783 | type = PSOLAR; | |
784 | break; | |
785 | ||
786 | default: | |
787 | break; | |
788 | } | |
789 | ||
790 | //check for SRAM among the general carts | |
791 | if (type == SEGA_STD) | |
792 | { | |
793 | // If the cart is not of a special type, we check the header for SRAM. | |
794 | if (ROM[0x1b1] == 'R' && ROM[0x1b0] == 'A') | |
795 | { | |
796 | UINT32 start, end; | |
797 | start = (ROM[0x1b5] << 24 | ROM[0x1b4] << 16 | ROM[0x1b7] << 8 | ROM[0x1b6]); | |
798 | end = (ROM[0x1b9] << 24 | ROM[0x1b8] << 16 | ROM[0x1bb] << 8 | ROM[0x1ba]); | |
799 | logerror("SRAM detected from header: starting location %X - SRAM Length %X\n", start, end - start + 1); | |
800 | ||
801 | // For some games using serial EEPROM, difference between SRAM end to start is 0 or 1. | |
802 | // Carts with EEPROM should have been already detected above, but better safe than sorry | |
803 | if (end - start < 2) | |
804 | type = SEGA_EEPROM; | |
805 | else | |
806 | type = SEGA_SRAM_FULLPATH; | |
807 | } | |
808 | else | |
809 | { | |
810 | // Unfortunately, there are ROMs without correct info in the header, | |
811 | // Hence, when loading from fullpath we do the SRAM mapping anyway... | |
812 | // but treat it in a custom way | |
813 | type = SEGA_SRAM_FALLBACK; | |
814 | } | |
815 | } | |
816 | ||
817 | return type; | |
818 | } | |
819 | /*------------------------------------------------- | |
820 | get default card software | |
821 | -------------------------------------------------*/ | |
822 | ||
823 | const char * base_md_cart_slot_device::get_default_card_software(const machine_config &config, emu_options &options) | |
824 | { | |
825 | const char *slot_string = "rom"; | |
826 | ||
827 | if (open_image_file(options)) | |
828 | { | |
829 | UINT32 len = core_fsize(m_file); | |
830 | UINT8 *ROM = global_alloc_array(UINT8, len); | |
831 | int type; | |
832 | ||
833 | core_fread(m_file, ROM, len); | |
834 | ||
835 | type = get_cart_type(ROM, len); | |
836 | slot_string = md_get_slot(type); | |
837 | ||
838 | global_free(ROM); | |
839 | clear(); | |
840 | ||
841 | return slot_string; | |
842 | } | |
843 | else | |
844 | return software_get_default_slot(config, options, this, "rom"); | |
845 | } | |
846 | ||
847 | ||
848 | ||
849 | /*------------------------------------------------- | |
850 | read | |
851 | -------------------------------------------------*/ | |
852 | ||
853 | READ16_MEMBER(base_md_cart_slot_device::read) | |
854 | { | |
855 | if (m_cart) | |
856 | return m_cart->read(space, offset); | |
857 | else | |
858 | return 0xffff; | |
859 | } | |
860 | ||
861 | READ16_MEMBER(base_md_cart_slot_device::read_a13) | |
862 | { | |
863 | if (m_cart) | |
864 | return m_cart->read_a13(space, offset); | |
865 | else | |
866 | return 0xffff; | |
867 | } | |
868 | ||
869 | READ16_MEMBER(base_md_cart_slot_device::read_a15) | |
870 | { | |
871 | if (m_cart) | |
872 | return m_cart->read_a15(space, offset); | |
873 | else | |
874 | return 0xffff; | |
875 | } | |
876 | ||
877 | ||
878 | /*------------------------------------------------- | |
879 | write | |
880 | -------------------------------------------------*/ | |
881 | ||
882 | WRITE16_MEMBER(base_md_cart_slot_device::write) | |
883 | { | |
884 | if (m_cart) | |
885 | m_cart->write(space, offset, data); | |
886 | } | |
887 | ||
888 | WRITE16_MEMBER(base_md_cart_slot_device::write_a13) | |
889 | { | |
890 | if (m_cart) | |
891 | m_cart->write_a13(space, offset, data); | |
892 | } | |
893 | ||
894 | WRITE16_MEMBER(base_md_cart_slot_device::write_a15) | |
895 | { | |
896 | if (m_cart) | |
897 | m_cart->write_a15(space, offset, data); | |
898 | } | |
899 |
Added: svn:eol-style + native Added: svn:mime-type + text/plain |
r0 | r20696 | |
---|---|---|
1 | #ifndef __MD_SLOT_H | |
2 | #define __MD_SLOT_H | |
3 | ||
4 | /*************************************************************************** | |
5 | TYPE DEFINITIONS | |
6 | ***************************************************************************/ | |
7 | ||
8 | ||
9 | /* PCB */ | |
10 | enum | |
11 | { | |
12 | SEGA_STD = 0, | |
13 | ||
14 | // Cart + Slot Expansion | |
15 | SEGA_SK, /* Sonic & Knuckles pass-through cart */ | |
16 | ||
17 | // Cart + SVP | |
18 | SEGA_SVP, /* Virtua Racing */ | |
19 | ||
20 | // Cart + NVRAM | |
21 | SEGA_SRAM, SEGA_FRAM, | |
22 | BEGGAR, /* Xin Qigai Wangzi uses different sram start address and has no valid header */ | |
23 | ||
24 | // EEPROM | |
25 | SEGA_EEPROM, /* Wonder Boy V / Evander Holyfield's Boxing / Greatest Heavyweights of the Ring / Sports Talk Baseball / Megaman */ | |
26 | NBA_JAM, /* NBA Jam */ | |
27 | NBA_JAM_TE, /* NBA Jam TE / NFL Quarterback Club */ | |
28 | NFL_QB_96, /* NFL Quarterback Club '96 */ | |
29 | C_SLAM, /* College Slam / Frank Thomas Big Hurt Baseball */ | |
30 | EA_NHLPA, /* NHLPA Hockey 93 / Rings of Power */ | |
31 | BRIAN_LARA, /* Brian Lara Cricket 96 */ | |
32 | PSOLAR, /* Pier Solar (STM95 EEPROM) */ | |
33 | ||
34 | // J-Cart | |
35 | CM_JCART, /* Pete Sampras Tennis */ | |
36 | CODE_MASTERS, /* Micro Machines 2 / Military (J-Cart + SEPROM) */ | |
37 | CM_MM96, /* Micro Machines 96 (J-Cart + SEPROM, diff I2C model) */ | |
38 | ||
39 | // Various | |
40 | SSF2, /* Super Street Fighter 2 */ | |
41 | GAME_KANDUME, /* Game no Kandume Otokuyou */ | |
42 | RADICA, /* Radica TV games.. these probably should be a separate driver since they are a separate 'console' */ | |
43 | ||
44 | BUGSLIFE, /* A Bug's Life */ | |
45 | CHINFIGHT3, /* Chinese Fighters 3 */ | |
46 | ELFWOR, /* Linghuan Daoshi Super Magician */ | |
47 | KAIJU, /* Pokemon Stadium */ | |
48 | KOF98, /* King of Fighters '98 */ | |
49 | KOF99, /* King of Fighters '99 */ | |
50 | LIONK2, /* Lion King 2 */ | |
51 | LIONK3, /* Lion King 3, Super Donkey Kong 99, Super King Kong 99 */ | |
52 | MC_PIRATE, /* Super 19 in 1, Super 15 in 1, 12 in 1 and a few more multicarts */ | |
53 | MJLOVER, /* Mahjong Lover */ | |
54 | MULAN, /* Hua Mu Lan - Mulan */ | |
55 | POKEMON, /* Pocket Monster */ | |
56 | POKEMON2, /* Pocket Monster 2 */ | |
57 | REALTEC, /* Whac a Critter/Mallet legend, Defend the Earth, Funnyworld/Ballonboy */ | |
58 | REDCLIFF, /* Romance of the Three Kingdoms - Battle of Red Cliffs, already decoded from .mdx format */ | |
59 | REDCL_EN, /* The encoded version... */ | |
60 | ROCKMANX3, /* Rockman X3 */ | |
61 | SBUBBOB, /* Super Bubble Bobble */ | |
62 | SMB, /* Super Mario Bros. */ | |
63 | SMB2, /* Super Mario Bros. 2 */ | |
64 | SMOUSE, /* Smart Mouse */ | |
65 | SOULBLAD, /* Soul Blade */ | |
66 | SQUIRRELK, /* Squirrel King */ | |
67 | TOPFIGHTER, /* Top Fighter 2000 MK VIII */ | |
68 | ||
69 | // when loading from fullpath, we need to treat SRAM in custom way | |
70 | SEGA_SRAM_FULLPATH, | |
71 | SEGA_SRAM_FALLBACK | |
72 | }; | |
73 | ||
74 | ||
75 | // ======================> md_cart_interface | |
76 | ||
77 | struct md_cart_interface | |
78 | { | |
79 | }; | |
80 | ||
81 | ||
82 | // ======================> device_md_cart_interface | |
83 | ||
84 | class device_md_cart_interface : public device_slot_card_interface | |
85 | { | |
86 | public: | |
87 | // construction/destruction | |
88 | device_md_cart_interface(const machine_config &mconfig, device_t &device); | |
89 | virtual ~device_md_cart_interface(); | |
90 | ||
91 | // reading and writing | |
92 | virtual DECLARE_READ16_MEMBER(read) { return 0xffff; } | |
93 | virtual DECLARE_WRITE16_MEMBER(write) {} | |
94 | virtual DECLARE_READ16_MEMBER(read_a13) { return 0xffff; }; | |
95 | virtual DECLARE_WRITE16_MEMBER(write_a13) {}; | |
96 | virtual DECLARE_READ16_MEMBER(read_a15) { return 0xffff; }; | |
97 | virtual DECLARE_WRITE16_MEMBER(write_a15) {}; | |
98 | ||
99 | /* this probably should do more, like make Genesis V2 'die' if the SEGA string is not written promptly */ | |
100 | virtual DECLARE_WRITE16_MEMBER(write_tmss_bank) { logerror("Write to TMSS bank: offset %x data %x\n", 0xa14000 + (offset << 1), data); }; | |
101 | ||
102 | virtual void rom_alloc(running_machine &machine, size_t size); | |
103 | virtual void nvram_alloc(running_machine &machine, size_t size); | |
104 | virtual UINT16* get_rom_base() { return m_rom; }; | |
105 | virtual UINT16* get_nvram_base() { return m_nvram; }; | |
106 | virtual UINT32 get_rom_size() { return m_rom_size; }; | |
107 | virtual UINT32 get_nvram_size() { return m_nvram_size; }; | |
108 | ||
109 | int m_nvram_start, m_nvram_end; | |
110 | int m_nvram_active, m_nvram_readonly; | |
111 | ||
112 | // when loading from fullpath, we create NVRAM even if not set in the header | |
113 | // however in this case we access it only if the game turn it on | |
114 | // the variable below is basically needed to track this... | |
115 | int m_nvram_handlers_installed; | |
116 | ||
117 | // internal state | |
118 | UINT16 *m_rom; | |
119 | UINT16 *m_nvram; | |
120 | UINT32 m_rom_size; | |
121 | UINT32 m_nvram_size; | |
122 | }; | |
123 | ||
124 | ||
125 | // ======================> base_md_cart_slot_device | |
126 | ||
127 | class base_md_cart_slot_device : public device_t, | |
128 | public md_cart_interface, | |
129 | public device_image_interface, | |
130 | public device_slot_interface | |
131 | { | |
132 | public: | |
133 | // construction/destruction | |
134 | base_md_cart_slot_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); | |
135 | virtual ~base_md_cart_slot_device(); | |
136 | ||
137 | // device-level overrides | |
138 | virtual void device_start(); | |
139 | virtual void device_config_complete(); | |
140 | ||
141 | // image-level overrides | |
142 | virtual bool call_load(); | |
143 | virtual void call_unload(); | |
144 | virtual bool call_softlist_load(char *swlist, char *swname, rom_entry *start_entry); | |
145 | ||
146 | virtual int load_list(); | |
147 | virtual int load_nonlist(); | |
148 | virtual int get_cart_type(UINT8 *ROM, UINT32 len); | |
149 | ||
150 | ||
151 | virtual void setup_custom_mappers(); | |
152 | virtual void setup_nvram(); | |
153 | ||
154 | virtual iodevice_t image_type() const { return IO_CARTSLOT; } | |
155 | virtual bool is_readable() const { return 1; } | |
156 | virtual bool is_writeable() const { return 0; } | |
157 | virtual bool is_creatable() const { return 0; } | |
158 | virtual bool must_be_loaded() const { return 1; } | |
159 | virtual bool is_reset_on_load() const { return 0; } | |
160 | virtual const option_guide *create_option_guide() const { return NULL; } | |
161 | ||
162 | // slot interface overrides | |
163 | virtual const char * get_default_card_software(const machine_config &config, emu_options &options); | |
164 | ||
165 | // reading and writing | |
166 | virtual DECLARE_READ16_MEMBER(read); | |
167 | virtual DECLARE_WRITE16_MEMBER(write); | |
168 | virtual DECLARE_READ16_MEMBER(read_a13); | |
169 | virtual DECLARE_WRITE16_MEMBER(write_a13); | |
170 | virtual DECLARE_READ16_MEMBER(read_a15); | |
171 | virtual DECLARE_WRITE16_MEMBER(write_a15); | |
172 | ||
173 | // FIXME: | |
174 | // this should be private, but then there is some problem installing delegates in the driver... | |
175 | //private: | |
176 | ||
177 | device_md_cart_interface* m_cart; | |
178 | ||
179 | int m_type; | |
180 | }; | |
181 | ||
182 | // ======================> md_cart_slot_device | |
183 | ||
184 | class md_cart_slot_device : public base_md_cart_slot_device | |
185 | { | |
186 | public: | |
187 | // construction/destruction | |
188 | md_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
189 | virtual const char *image_interface() const { return "megadriv_cart"; } | |
190 | virtual const char *file_extensions() const { return "smd,bin,md,gen"; } | |
191 | }; | |
192 | ||
193 | ||
194 | // ======================> md_subcart_slot_device | |
195 | ||
196 | class md_subcart_slot_device : public base_md_cart_slot_device | |
197 | { | |
198 | public: | |
199 | // construction/destruction | |
200 | md_subcart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
201 | virtual bool must_be_loaded() const { return 0; } | |
202 | virtual const char *image_interface() const { return "megadriv_cart"; } | |
203 | virtual const char *file_extensions() const { return "smd,bin,md,gen"; } | |
204 | }; | |
205 | ||
206 | ||
207 | // ======================> pico_cart_slot_device | |
208 | ||
209 | class pico_cart_slot_device : public base_md_cart_slot_device | |
210 | { | |
211 | public: | |
212 | // construction/destruction | |
213 | pico_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
214 | virtual const char *image_interface() const { return "pico_cart"; } | |
215 | virtual const char *file_extensions() const { return "bin,md"; } | |
216 | }; | |
217 | ||
218 | ||
219 | // device type definition | |
220 | extern const device_type MD_CART_SLOT; | |
221 | extern const device_type MD_SUBCART_SLOT; // needed to allow S&K pass-through to have non-mandatory cart | |
222 | extern const device_type PICO_CART_SLOT; | |
223 | ||
224 | ||
225 | /*************************************************************************** | |
226 | DEVICE CONFIGURATION MACROS | |
227 | ***************************************************************************/ | |
228 | ||
229 | #define MCFG_MD_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot,_def_inp) \ | |
230 | MCFG_DEVICE_ADD(_tag, MD_CART_SLOT, 0) \ | |
231 | MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) | |
232 | ||
233 | #define MCFG_MDSUB_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot,_def_inp) \ | |
234 | MCFG_DEVICE_ADD(_tag, MD_SUBCART_SLOT, 0) \ | |
235 | MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) | |
236 | ||
237 | #define MCFG_PICO_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot,_def_inp) \ | |
238 | MCFG_DEVICE_ADD(_tag, PICO_CART_SLOT, 0) \ | |
239 | MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) | |
240 | ||
241 | ||
242 | #endif |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
r0 | r20696 | |
---|---|---|
1 | /*********************************************************************************************************** | |
2 | ||
3 | ||
4 | MegaDrive / Genesis cart+EEPROM emulation | |
5 | ||
6 | ||
7 | TODO: proper EEPROM emulation, still not worked on (just hooked up the I2C device) | |
8 | ||
9 | ||
10 | i2c games mapping table: | |
11 | ||
12 | game name | SDA_IN | SDA_OUT | SCL | SIZE_MASK | PAGE_MASK | | |
13 | ----------------------------------|------------|------------|------------|----------------|-----------| | |
14 | NBA Jam | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x00ff (24C02) | 0x03 | xx | |
15 | NBA Jam TE | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x00ff (24C02) | 0x03 | xx | |
16 | NBA Jam TE (32x) | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x00ff (24C02) | 0x03 | | |
17 | NFL Quarterback Club | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x00ff (24C02) | 0x03 | xx | |
18 | NFL Quarterback Club 96 | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x07ff (24C16) | 0x07 | xx | |
19 | College Slam | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x1fff (24C64) | 0x07 | xx | |
20 | Frank Thomas Big Hurt Baseball | 0x200001-0 | 0x200001-0 | 0x200000-0 | 0x1fff (24C64) | 0x07 | xx | |
21 | NHLPA Hockey 93 | 0x200001-7 | 0x200001-7 | 0x200001-6 | 0x007f (24C01) | 0x03 | xx | |
22 | Rings of Power | 0x200001-7 | 0x200001-7 | 0x200001-6 | 0x007f (24C01) | 0x03 | xx | |
23 | Evander Holyfield's Boxing | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx | |
24 | Greatest Heavyweights of the Ring | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx | |
25 | Wonder Boy V | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx | |
26 | Sports Talk Baseball | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx | |
27 | Megaman - the Wily Wars | 0x200001-0 | 0x200001-0 | 0x200001-1 | 0x007f (24C01) | 0x03 | xx ** | |
28 | Micro Machines 2 | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x03ff (24C08) | 0x0f | | |
29 | Micro Machines Military | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x03ff (24C08) | 0x0f | | |
30 | Micro Machines 96 | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x07ff (24C16) | 0x0f | | |
31 | Brian Lara Cricket 96 | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x1fff (24C64) | 0x??* | | |
32 | ----------------------------------|------------|------------|------------|----------------|-----------| | |
33 | ||
34 | * Notes: check these | |
35 | ** original Rockman Mega World (J) set uses normal backup RAM | |
36 | ||
37 | ||
38 | Micro Machines 2, Micro Machines Military, Micro Machines 96 are emulated in md_jcart | |
39 | ||
40 | ***********************************************************************************************************/ | |
41 | ||
42 | ||
43 | ||
44 | #include "emu.h" | |
45 | #include "machine/md_eeprom.h" | |
46 | ||
47 | ||
48 | //------------------------------------------------- | |
49 | // md_rom_device - constructor | |
50 | //------------------------------------------------- | |
51 | ||
52 | const device_type MD_STD_EEPROM = &device_creator<md_std_eeprom_device>; | |
53 | const device_type MD_EEPROM_NBAJAM = &device_creator<md_eeprom_nbajam_device>; | |
54 | const device_type MD_EEPROM_NBAJAMTE = &device_creator<md_eeprom_nbajamte_device>; | |
55 | const device_type MD_EEPROM_NFLQB = &device_creator<md_eeprom_nflqb_device>; | |
56 | const device_type MD_EEPROM_CSLAM = &device_creator<md_eeprom_cslam_device>; | |
57 | const device_type MD_EEPROM_NHLPA = &device_creator<md_eeprom_nhlpa_device>; | |
58 | const device_type MD_EEPROM_BLARA = &device_creator<md_eeprom_blara_device>; | |
59 | ||
60 | ||
61 | md_std_eeprom_device::md_std_eeprom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) | |
62 | : device_t(mconfig, type, name, tag, owner, clock), | |
63 | device_md_cart_interface( mconfig, *this ), | |
64 | m_i2cmem(*this, "i2cmem") | |
65 | { | |
66 | } | |
67 | ||
68 | md_std_eeprom_device::md_std_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
69 | : device_t(mconfig, MD_STD_EEPROM, "MD Standard cart + EEPROM", tag, owner, clock), | |
70 | device_md_cart_interface( mconfig, *this ), | |
71 | m_i2cmem(*this, "i2cmem") | |
72 | { | |
73 | } | |
74 | ||
75 | md_eeprom_nbajam_device::md_eeprom_nbajam_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
76 | : md_std_eeprom_device(mconfig, MD_EEPROM_NBAJAM, "MD NBA Jam", tag, owner, clock) | |
77 | { | |
78 | } | |
79 | ||
80 | md_eeprom_nbajamte_device::md_eeprom_nbajamte_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
81 | : md_std_eeprom_device(mconfig, MD_EEPROM_NBAJAMTE, "MD NBA Jam TE (and a few more)", tag, owner, clock) | |
82 | { | |
83 | } | |
84 | ||
85 | md_eeprom_cslam_device::md_eeprom_cslam_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
86 | : md_std_eeprom_device(mconfig, MD_EEPROM_CSLAM, "MD College Slam", tag, owner, clock) | |
87 | { | |
88 | } | |
89 | ||
90 | md_eeprom_nflqb_device::md_eeprom_nflqb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
91 | : md_std_eeprom_device(mconfig, MD_EEPROM_NFLQB, "MD NFL Quarterback 96", tag, owner, clock) | |
92 | { | |
93 | } | |
94 | ||
95 | md_eeprom_nhlpa_device::md_eeprom_nhlpa_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
96 | : md_std_eeprom_device(mconfig, MD_EEPROM_NHLPA, "MD NHLPA 93", tag, owner, clock) | |
97 | { | |
98 | } | |
99 | ||
100 | md_eeprom_blara_device::md_eeprom_blara_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
101 | : md_std_eeprom_device(mconfig, MD_EEPROM_BLARA, "MD Brian Lara", tag, owner, clock) | |
102 | { | |
103 | } | |
104 | ||
105 | ||
106 | //------------------------------------------------- | |
107 | // SERIAL I2C DEVICE | |
108 | //------------------------------------------------- | |
109 | ||
110 | static const i2cmem_interface md_24c01_i2cmem_interface = | |
111 | { | |
112 | I2CMEM_SLAVE_ADDRESS, 0, 0x80 | |
113 | }; | |
114 | ||
115 | ||
116 | static const i2cmem_interface md_24c02_i2cmem_interface = | |
117 | { | |
118 | I2CMEM_SLAVE_ADDRESS, 0, 0x100 | |
119 | }; | |
120 | ||
121 | ||
122 | static const i2cmem_interface md_24c16_i2cmem_interface = | |
123 | { | |
124 | I2CMEM_SLAVE_ADDRESS, 0, 0x800 | |
125 | }; | |
126 | ||
127 | ||
128 | static const i2cmem_interface md_24c64_i2cmem_interface = | |
129 | { | |
130 | I2CMEM_SLAVE_ADDRESS, 0, 0x2000 | |
131 | }; | |
132 | ||
133 | ||
134 | // MD_STD_EEPROM & MD_EEPROM_NHLPA | |
135 | MACHINE_CONFIG_FRAGMENT( md_i2c_24c01 ) | |
136 | MCFG_I2CMEM_ADD("i2cmem", md_24c01_i2cmem_interface) | |
137 | MACHINE_CONFIG_END | |
138 | ||
139 | // MD_EEPROM_NBAJAM & MD_EEPROM_NBAJAMTE | |
140 | MACHINE_CONFIG_FRAGMENT( md_i2c_24c02 ) | |
141 | MCFG_I2CMEM_ADD("i2cmem", md_24c02_i2cmem_interface) | |
142 | MACHINE_CONFIG_END | |
143 | ||
144 | // MD_EEPROM_NFLQB | |
145 | MACHINE_CONFIG_FRAGMENT( md_i2c_24c16 ) | |
146 | MCFG_I2CMEM_ADD("i2cmem", md_24c16_i2cmem_interface) | |
147 | MACHINE_CONFIG_END | |
148 | ||
149 | // MD_EEPROM_CSLAM & MD_EEPROM_BLARA | |
150 | MACHINE_CONFIG_FRAGMENT( md_i2c_24c64 ) | |
151 | MCFG_I2CMEM_ADD("i2cmem", md_24c64_i2cmem_interface) | |
152 | MACHINE_CONFIG_END | |
153 | ||
154 | ||
155 | //------------------------------------------------- | |
156 | // machine_config_additions - device-specific | |
157 | // machine configurations | |
158 | //------------------------------------------------- | |
159 | ||
160 | machine_config_constructor md_std_eeprom_device::device_mconfig_additions() const | |
161 | { | |
162 | return MACHINE_CONFIG_NAME( md_i2c_24c01 ); | |
163 | } | |
164 | ||
165 | machine_config_constructor md_eeprom_nbajam_device::device_mconfig_additions() const | |
166 | { | |
167 | return MACHINE_CONFIG_NAME( md_i2c_24c02 ); | |
168 | } | |
169 | ||
170 | machine_config_constructor md_eeprom_nbajamte_device::device_mconfig_additions() const | |
171 | { | |
172 | return MACHINE_CONFIG_NAME( md_i2c_24c02 ); | |
173 | } | |
174 | ||
175 | machine_config_constructor md_eeprom_cslam_device::device_mconfig_additions() const | |
176 | { | |
177 | return MACHINE_CONFIG_NAME( md_i2c_24c64 ); | |
178 | } | |
179 | ||
180 | machine_config_constructor md_eeprom_nflqb_device::device_mconfig_additions() const | |
181 | { | |
182 | return MACHINE_CONFIG_NAME( md_i2c_24c16 ); | |
183 | } | |
184 | ||
185 | machine_config_constructor md_eeprom_nhlpa_device::device_mconfig_additions() const | |
186 | { | |
187 | return MACHINE_CONFIG_NAME( md_i2c_24c01 ); | |
188 | } | |
189 | ||
190 | machine_config_constructor md_eeprom_blara_device::device_mconfig_additions() const | |
191 | { | |
192 | return MACHINE_CONFIG_NAME( md_i2c_24c64 ); | |
193 | } | |
194 | ||
195 | ||
196 | void md_std_eeprom_device::device_start() | |
197 | { | |
198 | m_i2c_mem = 0; | |
199 | m_i2c_clk = 0; | |
200 | save_item(NAME(m_i2c_mem)); | |
201 | save_item(NAME(m_i2c_clk)); | |
202 | } | |
203 | ||
204 | /*------------------------------------------------- | |
205 | mapper specific handlers | |
206 | -------------------------------------------------*/ | |
207 | ||
208 | /*------------------------------------------------- | |
209 | CART + EEPROM | |
210 | -------------------------------------------------*/ | |
211 | ||
212 | READ16_MEMBER(md_std_eeprom_device::read) | |
213 | { | |
214 | if (offset == 0x200000/2) | |
215 | { | |
216 | m_i2c_mem = i2cmem_sda_read(m_i2cmem); | |
217 | return ~m_i2c_mem & 1; | |
218 | } | |
219 | return m_rom[offset]; | |
220 | } | |
221 | ||
222 | WRITE16_MEMBER(md_std_eeprom_device::write) | |
223 | { | |
224 | if (offset == 0x200000/2) | |
225 | { | |
226 | m_i2c_clk = BIT(data, 1); | |
227 | m_i2c_mem = BIT(data, 0); | |
228 | i2cmem_scl_write(m_i2cmem, m_i2c_clk); | |
229 | i2cmem_sda_write(m_i2cmem, m_i2c_mem); | |
230 | } | |
231 | } | |
232 | ||
233 | READ16_MEMBER(md_eeprom_nbajam_device::read) | |
234 | { | |
235 | if (offset == 0x200000/2) | |
236 | { | |
237 | m_i2c_mem = i2cmem_sda_read(m_i2cmem); | |
238 | return m_i2c_mem & 1; | |
239 | } | |
240 | return m_rom[offset]; | |
241 | } | |
242 | ||
243 | WRITE16_MEMBER(md_eeprom_nbajam_device::write) | |
244 | { | |
245 | if (offset == 0x200000/2) | |
246 | { | |
247 | m_i2c_clk = BIT(data, 1); | |
248 | m_i2c_mem = BIT(data, 0); | |
249 | i2cmem_scl_write(m_i2cmem, m_i2c_clk); | |
250 | i2cmem_sda_write(m_i2cmem, m_i2c_mem); | |
251 | } | |
252 | } | |
253 | ||
254 | READ16_MEMBER(md_eeprom_nbajamte_device::read) | |
255 | { | |
256 | if (offset == 0x200000/2) | |
257 | { | |
258 | m_i2c_mem = i2cmem_sda_read(m_i2cmem); | |
259 | return m_i2c_mem & 1; | |
260 | } | |
261 | return m_rom[offset]; | |
262 | } | |
263 | ||
264 | WRITE16_MEMBER(md_eeprom_nbajamte_device::write) | |
265 | { | |
266 | if (offset == 0x200000/2) | |
267 | { | |
268 | m_i2c_clk = BIT(data, 8); | |
269 | m_i2c_mem = BIT(data, 0); | |
270 | i2cmem_scl_write(m_i2cmem, m_i2c_clk); | |
271 | i2cmem_sda_write(m_i2cmem, m_i2c_mem); | |
272 | } | |
273 | } | |
274 | ||
275 | // same as NBAJAMTE above... derived class? | |
276 | READ16_MEMBER(md_eeprom_cslam_device::read) | |
277 | { | |
278 | if (offset == 0x200000/2) | |
279 | { | |
280 | m_i2c_mem = i2cmem_sda_read(m_i2cmem); | |
281 | return m_i2c_mem & 1; | |
282 | } | |
283 | return m_rom[offset]; | |
284 | } | |
285 | ||
286 | WRITE16_MEMBER(md_eeprom_cslam_device::write) | |
287 | { | |
288 | if (offset == 0x200000/2) | |
289 | { | |
290 | m_i2c_clk = BIT(data, 8); | |
291 | m_i2c_mem = BIT(data, 0); | |
292 | i2cmem_scl_write(m_i2cmem, m_i2c_clk); | |
293 | i2cmem_sda_write(m_i2cmem, m_i2c_mem); | |
294 | } | |
295 | } | |
296 | ||
297 | // same as NBAJAMTE above... derived class? | |
298 | READ16_MEMBER(md_eeprom_nflqb_device::read) | |
299 | { | |
300 | if (offset == 0x200000/2) | |
301 | { | |
302 | m_i2c_mem = i2cmem_sda_read(m_i2cmem); | |
303 | return m_i2c_mem & 1; | |
304 | } | |
305 | return m_rom[offset]; | |
306 | } | |
307 | ||
308 | WRITE16_MEMBER(md_eeprom_nflqb_device::write) | |
309 | { | |
310 | if (offset == 0x200000/2) | |
311 | { | |
312 | m_i2c_clk = BIT(data, 8); | |
313 | m_i2c_mem = BIT(data, 0); | |
314 | i2cmem_scl_write(m_i2cmem, m_i2c_clk); | |
315 | i2cmem_sda_write(m_i2cmem, m_i2c_mem); | |
316 | } | |
317 | } | |
318 | ||
319 | READ16_MEMBER(md_eeprom_nhlpa_device::read) | |
320 | { | |
321 | if (offset == 0x200000/2) | |
322 | { | |
323 | m_i2c_mem = i2cmem_sda_read(m_i2cmem); | |
324 | return (m_i2c_mem & 1) << 7; | |
325 | } | |
326 | return m_rom[offset]; | |
327 | } | |
328 | ||
329 | WRITE16_MEMBER(md_eeprom_nhlpa_device::write) | |
330 | { | |
331 | if (offset == 0x200000/2) | |
332 | { | |
333 | m_i2c_clk = BIT(data, 6); | |
334 | m_i2c_mem = BIT(data, 7); | |
335 | i2cmem_scl_write(m_i2cmem, m_i2c_clk); | |
336 | i2cmem_sda_write(m_i2cmem, m_i2c_mem); | |
337 | } | |
338 | } | |
339 | ||
340 | READ16_MEMBER(md_eeprom_blara_device::read) | |
341 | { | |
342 | if (offset == 0x380000/2) | |
343 | { | |
344 | m_i2c_mem = i2cmem_sda_read(m_i2cmem); | |
345 | return (m_i2c_mem & 1) << 7; | |
346 | } | |
347 | return m_rom[offset]; | |
348 | } | |
349 | ||
350 | WRITE16_MEMBER(md_eeprom_blara_device::write) | |
351 | { | |
352 | if (offset == 0x380000/2) | |
353 | { | |
354 | m_i2c_clk = BIT(data, 9); | |
355 | m_i2c_mem = BIT(data, 8); | |
356 | i2cmem_scl_write(m_i2cmem, m_i2c_clk); | |
357 | i2cmem_sda_write(m_i2cmem, m_i2c_mem); | |
358 | } | |
359 | } | |
360 |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
r0 | r20696 | |
---|---|---|
1 | #ifndef __MD_EEPROM_H | |
2 | #define __MD_EEPROM_H | |
3 | ||
4 | #include "machine/md_slot.h" | |
5 | #include "machine/i2cmem.h" | |
6 | ||
7 | ||
8 | //************************************************************************** | |
9 | // TYPE DEFINITIONS | |
10 | //************************************************************************** | |
11 | ||
12 | // ======================> md_std_eeprom_device | |
13 | ||
14 | class md_std_eeprom_device : public device_t, | |
15 | public device_md_cart_interface | |
16 | { | |
17 | public: | |
18 | // construction/destruction | |
19 | md_std_eeprom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); | |
20 | md_std_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
21 | ||
22 | // device-level overrides | |
23 | virtual void device_start(); | |
24 | virtual void device_config_complete() { m_shortname = "md_std_eeprom"; } | |
25 | virtual machine_config_constructor device_mconfig_additions() const; | |
26 | ||
27 | // reading and writing | |
28 | virtual DECLARE_READ16_MEMBER(read); | |
29 | virtual DECLARE_WRITE16_MEMBER(write); | |
30 | ||
31 | required_device<i2cmem_device> m_i2cmem; | |
32 | UINT8 m_i2c_mem, m_i2c_clk; | |
33 | }; | |
34 | ||
35 | // ======================> md_eeprom_nbajam_device | |
36 | ||
37 | class md_eeprom_nbajam_device : public md_std_eeprom_device | |
38 | { | |
39 | public: | |
40 | // construction/destruction | |
41 | md_eeprom_nbajam_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
42 | ||
43 | // device-level overrides | |
44 | virtual void device_config_complete() { m_shortname = "md_eeprom_nbajam"; } | |
45 | virtual machine_config_constructor device_mconfig_additions() const; | |
46 | ||
47 | // reading and writing | |
48 | virtual DECLARE_READ16_MEMBER(read); | |
49 | virtual DECLARE_WRITE16_MEMBER(write); | |
50 | }; | |
51 | ||
52 | // ======================> md_eeprom_nbajamte_device | |
53 | ||
54 | class md_eeprom_nbajamte_device : public md_std_eeprom_device | |
55 | { | |
56 | public: | |
57 | // construction/destruction | |
58 | md_eeprom_nbajamte_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
59 | ||
60 | // device-level overrides | |
61 | virtual void device_config_complete() { m_shortname = "md_eeprom_nbajamte"; } | |
62 | virtual machine_config_constructor device_mconfig_additions() const; | |
63 | ||
64 | // reading and writing | |
65 | virtual DECLARE_READ16_MEMBER(read); | |
66 | virtual DECLARE_WRITE16_MEMBER(write); | |
67 | }; | |
68 | ||
69 | // ======================> md_eeprom_cslam_device (same read/write as nbajamte, but different I2C type) | |
70 | ||
71 | class md_eeprom_cslam_device : public md_std_eeprom_device | |
72 | { | |
73 | public: | |
74 | // construction/destruction | |
75 | md_eeprom_cslam_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
76 | ||
77 | // device-level overrides | |
78 | virtual void device_config_complete() { m_shortname = "md_eeprom_cslam"; } | |
79 | virtual machine_config_constructor device_mconfig_additions() const; | |
80 | ||
81 | // reading and writing | |
82 | virtual DECLARE_READ16_MEMBER(read); | |
83 | virtual DECLARE_WRITE16_MEMBER(write); | |
84 | }; | |
85 | ||
86 | // ======================> md_eeprom_nflqb_device (same read/write as nbajamte, but different I2C type) | |
87 | ||
88 | class md_eeprom_nflqb_device : public md_std_eeprom_device | |
89 | { | |
90 | public: | |
91 | // construction/destruction | |
92 | md_eeprom_nflqb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
93 | ||
94 | // device-level overrides | |
95 | virtual void device_config_complete() { m_shortname = "md_eeprom_nflqb"; } | |
96 | virtual machine_config_constructor device_mconfig_additions() const; | |
97 | ||
98 | // reading and writing | |
99 | virtual DECLARE_READ16_MEMBER(read); | |
100 | virtual DECLARE_WRITE16_MEMBER(write); | |
101 | }; | |
102 | ||
103 | // ======================> md_eeprom_nhlpa_device | |
104 | ||
105 | class md_eeprom_nhlpa_device : public md_std_eeprom_device | |
106 | { | |
107 | public: | |
108 | // construction/destruction | |
109 | md_eeprom_nhlpa_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
110 | ||
111 | // device-level overrides | |
112 | virtual void device_config_complete() { m_shortname = "md_eeprom_nhlpa"; } | |
113 | virtual machine_config_constructor device_mconfig_additions() const; | |
114 | ||
115 | // reading and writing | |
116 | virtual DECLARE_READ16_MEMBER(read); | |
117 | virtual DECLARE_WRITE16_MEMBER(write); | |
118 | }; | |
119 | ||
120 | // ======================> md_eeprom_blara_device (same read/write as codemast, but different I2C type) | |
121 | ||
122 | class md_eeprom_blara_device : public md_std_eeprom_device | |
123 | { | |
124 | public: | |
125 | // construction/destruction | |
126 | md_eeprom_blara_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
127 | ||
128 | // device-level overrides | |
129 | virtual void device_config_complete() { m_shortname = "md_eeprom_blara"; } | |
130 | virtual machine_config_constructor device_mconfig_additions() const; | |
131 | ||
132 | // reading and writing | |
133 | virtual DECLARE_READ16_MEMBER(read); | |
134 | virtual DECLARE_WRITE16_MEMBER(write); | |
135 | }; | |
136 | ||
137 | ||
138 | // device type definition | |
139 | extern const device_type MD_STD_EEPROM; | |
140 | extern const device_type MD_EEPROM_NBAJAM; | |
141 | extern const device_type MD_EEPROM_NBAJAMTE; | |
142 | extern const device_type MD_EEPROM_CSLAM; | |
143 | extern const device_type MD_EEPROM_NFLQB; | |
144 | extern const device_type MD_EEPROM_NHLPA; | |
145 | extern const device_type MD_EEPROM_BLARA; | |
146 | ||
147 | #endif |
Added: svn:eol-style + native Added: svn:mime-type + text/plain |
r0 | r20696 | |
---|---|---|
1 | /*********************************************************************************************************** | |
2 | ||
3 | ||
4 | Sonic & Knuckles pass-thorugh cart emulation | |
5 | ||
6 | ||
7 | TODO: currently we only support loading of base carts with no bankswitch or protection... | |
8 | shall we support other as well? | |
9 | ||
10 | ||
11 | ***********************************************************************************************************/ | |
12 | ||
13 | ||
14 | ||
15 | ||
16 | #include "emu.h" | |
17 | #include "machine/md_sk.h" | |
18 | #include "machine/md_rom.h" | |
19 | ||
20 | ||
21 | //------------------------------------------------- | |
22 | // md_rom_device - constructor | |
23 | //------------------------------------------------- | |
24 | ||
25 | const device_type MD_ROM_SK = &device_creator<md_rom_sk_device>; | |
26 | ||
27 | ||
28 | md_rom_sk_device::md_rom_sk_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) | |
29 | : device_t(mconfig, type, name, tag, owner, clock), | |
30 | device_md_cart_interface( mconfig, *this ), | |
31 | m_exp(*this, "subslot") | |
32 | { | |
33 | } | |
34 | ||
35 | md_rom_sk_device::md_rom_sk_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
36 | : device_t(mconfig, MD_ROM_SK, "MD Sonic & Knuckles", tag, owner, clock), | |
37 | device_md_cart_interface( mconfig, *this ), | |
38 | m_exp(*this, "subslot") | |
39 | { | |
40 | } | |
41 | ||
42 | ||
43 | void md_rom_sk_device::device_start() | |
44 | { | |
45 | } | |
46 | ||
47 | /*------------------------------------------------- | |
48 | mapper specific handlers | |
49 | -------------------------------------------------*/ | |
50 | ||
51 | READ16_MEMBER(md_rom_sk_device::read) | |
52 | { | |
53 | if (m_exp->m_cart != NULL && m_exp->m_cart->get_rom_base() != NULL && offset >= 0x200000/2 && offset < (0x200000 + m_exp->m_cart->get_rom_size())/2) | |
54 | return m_exp->m_cart->m_rom[offset - 0x200000/2]; | |
55 | return m_rom[offset]; | |
56 | } | |
57 | ||
58 | WRITE16_MEMBER(md_rom_sk_device::write) | |
59 | { | |
60 | // should there be anything here? | |
61 | } | |
62 | ||
63 | //------------------------------------------------- | |
64 | // MACHINE_CONFIG_FRAGMENT( sk_slot ) | |
65 | //------------------------------------------------- | |
66 | ||
67 | static SLOT_INTERFACE_START(sk_sub_cart) | |
68 | SLOT_INTERFACE_INTERNAL("rom", MD_STD_ROM) | |
69 | SLOT_INTERFACE_INTERNAL("rom_svp", MD_STD_ROM) | |
70 | SLOT_INTERFACE_INTERNAL("rom_sram", MD_ROM_SRAM) | |
71 | SLOT_INTERFACE_INTERNAL("rom_sramsafe", MD_ROM_SRAM) | |
72 | SLOT_INTERFACE_INTERNAL("rom_fram", MD_ROM_FRAM) | |
73 | // add all types?? | |
74 | SLOT_INTERFACE_END | |
75 | ||
76 | static MACHINE_CONFIG_FRAGMENT( sk_slot ) | |
77 | MCFG_MDSUB_CARTRIDGE_ADD("subslot", sk_sub_cart, NULL, NULL) | |
78 | MACHINE_CONFIG_END | |
79 | ||
80 | ||
81 | //------------------------------------------------- | |
82 | // machine_config_additions - device-specific | |
83 | // machine configurations | |
84 | //------------------------------------------------- | |
85 | ||
86 | machine_config_constructor md_rom_sk_device::device_mconfig_additions() const | |
87 | { | |
88 | return MACHINE_CONFIG_NAME( sk_slot ); | |
89 | } | |
90 |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
r0 | r20696 | |
---|---|---|
1 | #ifndef __MD_SK_H | |
2 | #define __MD_SK_H | |
3 | ||
4 | #include "machine/md_slot.h" | |
5 | ||
6 | ||
7 | // ======================> md_rom_sk_device | |
8 | ||
9 | class md_rom_sk_device : public device_t, | |
10 | public device_md_cart_interface | |
11 | { | |
12 | public: | |
13 | // construction/destruction | |
14 | md_rom_sk_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); | |
15 | md_rom_sk_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
16 | ||
17 | // device-level overrides | |
18 | virtual void device_start(); | |
19 | virtual void device_config_complete() { m_shortname = "md_rom_sk"; } | |
20 | virtual machine_config_constructor device_mconfig_additions() const; | |
21 | ||
22 | // reading and writing | |
23 | virtual DECLARE_READ16_MEMBER(read); | |
24 | virtual DECLARE_WRITE16_MEMBER(write); | |
25 | ||
26 | private: | |
27 | required_device<md_subcart_slot_device> m_exp; | |
28 | }; | |
29 | ||
30 | ||
31 | // device type definition | |
32 | extern const device_type MD_ROM_SK; | |
33 | ||
34 | #endif |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
r0 | r20696 | |
---|---|---|
1 | /* Megadrive SVP emulation (Virtua Racing) */ | |
2 | ||
3 | #include "includes/md.h" | |
4 | ||
5 | ||
6 | /****************************************** SVP related *****************************************/ | |
7 | ||
8 | /* | |
9 | * Emulator of memory controller in SVP chip | |
10 | * | |
11 | * Copyright 2008, Grazvydas Ignotas | |
12 | * based on RE work by Tasco Deluxe | |
13 | * | |
14 | * SSP1601 EXT registers are mapped as I/O ports due to their function | |
15 | * (they are interfaced through external bus), and are named as follows | |
16 | * (these are unofficial names, official ones are unknown): | |
17 | * EXT0: PM0 - programmable register 0 | |
18 | * EXT1: PM1 - ... 1 | |
19 | * EXT2: PM2 - ... 2 | |
20 | * EXT3: XST - external status. Can also act as PM. | |
21 | * EXT4: PM4 - ... 4 | |
22 | * EXT5: (unused) | |
23 | * EXT6: PMC - programmable memory register control (PMAC). | |
24 | * EXT7: AL - although internal to SSP1601, it still causes bus access | |
25 | * | |
26 | * Depending on GPO bits in status register, PM0, PM1, PM2 and XST can act as | |
27 | * external status registers, os as programmable memory registers. PM4 always | |
28 | * acts as PM register (independent on GPO bits). | |
29 | */ | |
30 | ||
31 | ||
32 | #define SSP_PMC_HAVE_ADDR 1 // address written to PMAC, waiting for mode | |
33 | #define SSP_PMC_SET 2 // PMAC is set, PMx can be programmed | |
34 | ||
35 | static int get_inc(int mode) | |
36 | { | |
37 | int inc = (mode >> 11) & 7; | |
38 | if (inc != 0) { | |
39 | if (inc != 7) inc--; | |
40 | inc = 1 << inc; // 0 1 2 4 8 16 32 128 | |
41 | if (mode & 0x8000) inc = -inc; // decrement mode | |
42 | } | |
43 | return inc; | |
44 | } | |
45 | ||
46 | INLINE void overwrite_write(UINT16 *dst, UINT16 d) | |
47 | { | |
48 | if (d & 0xf000) { *dst &= ~0xf000; *dst |= d & 0xf000; } | |
49 | if (d & 0x0f00) { *dst &= ~0x0f00; *dst |= d & 0x0f00; } | |
50 | if (d & 0x00f0) { *dst &= ~0x00f0; *dst |= d & 0x00f0; } | |
51 | if (d & 0x000f) { *dst &= ~0x000f; *dst |= d & 0x000f; } | |
52 | } | |
53 | ||
54 | static UINT32 pm_io(address_space &space, int reg, int write, UINT32 d) | |
55 | { | |
56 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
57 | if (state->m_emu_status & SSP_PMC_SET) | |
58 | { | |
59 | state->m_pmac_read[write ? reg + 6 : reg] = state->m_pmc.d; | |
60 | state->m_emu_status &= ~SSP_PMC_SET; | |
61 | return 0; | |
62 | } | |
63 | ||
64 | // just in case | |
65 | if (state->m_emu_status & SSP_PMC_HAVE_ADDR) { | |
66 | state->m_emu_status &= ~SSP_PMC_HAVE_ADDR; | |
67 | } | |
68 | ||
69 | if (reg == 4 || (space.device().state().state_int(SSP_ST) & 0x60)) | |
70 | { | |
71 | #define CADDR ((((mode<<16)&0x7f0000)|addr)<<1) | |
72 | UINT16 *dram = (UINT16 *)state->m_dram; | |
73 | if (write) | |
74 | { | |
75 | int mode = state->m_pmac_write[reg]>>16; | |
76 | int addr = state->m_pmac_write[reg]&0xffff; | |
77 | if ((mode & 0x43ff) == 0x0018) // DRAM | |
78 | { | |
79 | int inc = get_inc(mode); | |
80 | if (mode & 0x0400) { | |
81 | overwrite_write(&dram[addr], d); | |
82 | } else dram[addr] = d; | |
83 | state->m_pmac_write[reg] += inc; | |
84 | } | |
85 | else if ((mode & 0xfbff) == 0x4018) // DRAM, cell inc | |
86 | { | |
87 | if (mode & 0x0400) { | |
88 | overwrite_write(&dram[addr], d); | |
89 | } else dram[addr] = d; | |
90 | state->m_pmac_write[reg] += (addr&1) ? 31 : 1; | |
91 | } | |
92 | else if ((mode & 0x47ff) == 0x001c) // IRAM | |
93 | { | |
94 | int inc = get_inc(mode); | |
95 | ((UINT16 *)state->m_iram)[addr&0x3ff] = d; | |
96 | state->m_pmac_write[reg] += inc; | |
97 | } | |
98 | else | |
99 | { | |
100 | logerror("ssp FIXME: PM%i unhandled write mode %04x, [%06x] %04x\n", | |
101 | reg, mode, CADDR, d); | |
102 | } | |
103 | } | |
104 | else | |
105 | { | |
106 | int mode = state->m_pmac_read[reg]>>16; | |
107 | int addr = state->m_pmac_read[reg]&0xffff; | |
108 | if ((mode & 0xfff0) == 0x0800) // ROM, inc 1, verified to be correct | |
109 | { | |
110 | UINT16 *ROM = (UINT16 *) space.machine().root_device().memregion("maincpu")->base(); | |
111 | state->m_pmac_read[reg] += 1; | |
112 | d = ROM[addr|((mode&0xf)<<16)]; | |
113 | } | |
114 | else if ((mode & 0x47ff) == 0x0018) // DRAM | |
115 | { | |
116 | int inc = get_inc(mode); | |
117 | d = dram[addr]; | |
118 | state->m_pmac_read[reg] += inc; | |
119 | } | |
120 | else | |
121 | { | |
122 | logerror("ssp FIXME: PM%i unhandled read mode %04x, [%06x]\n", | |
123 | reg, mode, CADDR); | |
124 | d = 0; | |
125 | } | |
126 | } | |
127 | ||
128 | // PMC value corresponds to last PMR accessed (not sure). | |
129 | state->m_pmc.d = state->m_pmac_read[write ? reg + 6 : reg]; | |
130 | ||
131 | return d; | |
132 | } | |
133 | ||
134 | return (UINT32)-1; | |
135 | } | |
136 | ||
137 | static READ16_HANDLER( read_PM0 ) | |
138 | { | |
139 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
140 | UINT32 d = pm_io(space, 0, 0, 0); | |
141 | if (d != (UINT32)-1) return d; | |
142 | d = state->m_XST2; | |
143 | state->m_XST2 &= ~2; // ? | |
144 | return d; | |
145 | } | |
146 | ||
147 | static WRITE16_HANDLER( write_PM0 ) | |
148 | { | |
149 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
150 | UINT32 r = pm_io(space, 0, 1, data); | |
151 | if (r != (UINT32)-1) return; | |
152 | state->m_XST2 = data; // ? | |
153 | } | |
154 | ||
155 | static READ16_HANDLER( read_PM1 ) | |
156 | { | |
157 | UINT32 r = pm_io(space, 1, 0, 0); | |
158 | if (r != (UINT32)-1) return r; | |
159 | logerror("svp: PM1 acces in non PM mode?\n"); | |
160 | return 0; | |
161 | } | |
162 | ||
163 | static WRITE16_HANDLER( write_PM1 ) | |
164 | { | |
165 | UINT32 r = pm_io(space, 1, 1, data); | |
166 | if (r != (UINT32)-1) return; | |
167 | logerror("svp: PM1 acces in non PM mode?\n"); | |
168 | } | |
169 | ||
170 | static READ16_HANDLER( read_PM2 ) | |
171 | { | |
172 | UINT32 r = pm_io(space, 2, 0, 0); | |
173 | if (r != (UINT32)-1) return r; | |
174 | logerror("svp: PM2 acces in non PM mode?\n"); | |
175 | return 0; | |
176 | } | |
177 | ||
178 | static WRITE16_HANDLER( write_PM2 ) | |
179 | { | |
180 | UINT32 r = pm_io(space, 2, 1, data); | |
181 | if (r != (UINT32)-1) return; | |
182 | logerror("svp: PM2 acces in non PM mode?\n"); | |
183 | } | |
184 | ||
185 | static READ16_HANDLER( read_XST ) | |
186 | { | |
187 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
188 | UINT32 d = pm_io(space, 3, 0, 0); | |
189 | if (d != (UINT32)-1) return d; | |
190 | ||
191 | return state->m_XST; | |
192 | } | |
193 | ||
194 | static WRITE16_HANDLER( write_XST ) | |
195 | { | |
196 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
197 | UINT32 r = pm_io(space, 3, 1, data); | |
198 | if (r != (UINT32)-1) return; | |
199 | ||
200 | state->m_XST2 |= 1; | |
201 | state->m_XST = data; | |
202 | } | |
203 | ||
204 | static READ16_HANDLER( read_PM4 ) | |
205 | { | |
206 | return pm_io(space, 4, 0, 0); | |
207 | } | |
208 | ||
209 | static WRITE16_HANDLER( write_PM4 ) | |
210 | { | |
211 | pm_io(space, 4, 1, data); | |
212 | } | |
213 | ||
214 | static READ16_HANDLER( read_PMC ) | |
215 | { | |
216 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
217 | if (state->m_emu_status & SSP_PMC_HAVE_ADDR) { | |
218 | state->m_emu_status |= SSP_PMC_SET; | |
219 | state->m_emu_status &= ~SSP_PMC_HAVE_ADDR; | |
220 | return ((state->m_pmc.w.l << 4) & 0xfff0) | ((state->m_pmc.w.l >> 4) & 0xf); | |
221 | } else { | |
222 | state->m_emu_status |= SSP_PMC_HAVE_ADDR; | |
223 | return state->m_pmc.w.l; | |
224 | } | |
225 | } | |
226 | ||
227 | static WRITE16_HANDLER( write_PMC ) | |
228 | { | |
229 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
230 | if (state->m_emu_status & SSP_PMC_HAVE_ADDR) { | |
231 | state->m_emu_status |= SSP_PMC_SET; | |
232 | state->m_emu_status &= ~SSP_PMC_HAVE_ADDR; | |
233 | state->m_pmc.w.h = data; | |
234 | } else { | |
235 | state->m_emu_status |= SSP_PMC_HAVE_ADDR; | |
236 | state->m_pmc.w.l = data; | |
237 | } | |
238 | } | |
239 | ||
240 | static READ16_HANDLER( read_AL ) | |
241 | { | |
242 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
243 | state->m_emu_status &= ~(SSP_PMC_SET|SSP_PMC_HAVE_ADDR); | |
244 | return 0; | |
245 | } | |
246 | ||
247 | static WRITE16_HANDLER( write_AL ) | |
248 | { | |
249 | } | |
250 | ||
251 | ||
252 | ||
253 | static READ16_HANDLER( svp_68k_io_r ) | |
254 | { | |
255 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
256 | UINT32 d; | |
257 | switch (offset) | |
258 | { | |
259 | // 0xa15000, 0xa15002 | |
260 | case 0: | |
261 | case 1: return state->m_XST; | |
262 | // 0xa15004 | |
263 | case 2: d = state->m_XST2; state->m_XST2 &= ~1; return d; | |
264 | default: logerror("unhandled SVP reg read @ %x\n", offset<<1); | |
265 | } | |
266 | return 0; | |
267 | } | |
268 | ||
269 | static WRITE16_HANDLER( svp_68k_io_w ) | |
270 | { | |
271 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
272 | switch (offset) | |
273 | { | |
274 | // 0xa15000, 0xa15002 | |
275 | case 0: | |
276 | case 1: state->m_XST = data; state->m_XST2 |= 2; break; | |
277 | // 0xa15006 | |
278 | case 3: break; // possibly halts SSP1601 | |
279 | default: logerror("unhandled SVP reg write %04x @ %x\n", data, offset<<1); | |
280 | } | |
281 | } | |
282 | ||
283 | static READ16_HANDLER( svp_68k_cell1_r ) | |
284 | { | |
285 | // this is rewritten 68k test code | |
286 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
287 | UINT32 a1 = offset; | |
288 | a1 = (a1 & 0x7001) | ((a1 & 0x3e) << 6) | ((a1 & 0xfc0) >> 5); | |
289 | return ((UINT16 *)state->m_dram)[a1]; | |
290 | } | |
291 | ||
292 | static READ16_HANDLER( svp_68k_cell2_r ) | |
293 | { | |
294 | // this is rewritten 68k test code | |
295 | mdsvp_state *state = space.machine().driver_data<mdsvp_state>(); | |
296 | UINT32 a1 = offset; | |
297 | a1 = (a1 & 0x7801) | ((a1 & 0x1e) << 6) | ((a1 & 0x7e0) >> 4); | |
298 | return ((UINT16 *)state->m_dram)[a1]; | |
299 | } | |
300 | ||
301 | ADDRESS_MAP_START( svp_ssp_map, AS_PROGRAM, 16, driver_device ) | |
302 | AM_RANGE(0x0000, 0x03ff) AM_ROMBANK("bank3") | |
303 | AM_RANGE(0x0400, 0xffff) AM_ROMBANK("bank4") | |
304 | ADDRESS_MAP_END | |
305 | ||
306 | ADDRESS_MAP_START( svp_ext_map, AS_IO, 16, driver_device ) | |
307 | ADDRESS_MAP_GLOBAL_MASK(0xf) | |
308 | AM_RANGE(0*2, 0*2+1) AM_READWRITE_LEGACY(read_PM0, write_PM0) | |
309 | AM_RANGE(1*2, 1*2+1) AM_READWRITE_LEGACY(read_PM1, write_PM1) | |
310 | AM_RANGE(2*2, 2*2+1) AM_READWRITE_LEGACY(read_PM2, write_PM2) | |
311 | AM_RANGE(3*2, 3*2+1) AM_READWRITE_LEGACY(read_XST, write_XST) | |
312 | AM_RANGE(4*2, 4*2+1) AM_READWRITE_LEGACY(read_PM4, write_PM4) | |
313 | AM_RANGE(6*2, 6*2+1) AM_READWRITE_LEGACY(read_PMC, write_PMC) | |
314 | AM_RANGE(7*2, 7*2+1) AM_READWRITE_LEGACY(read_AL, write_AL) | |
315 | ADDRESS_MAP_END | |
316 | ||
317 | ||
318 | static READ16_HANDLER( svp_speedup_r ) | |
319 | { | |
320 | space.device().execute().spin_until_time(attotime::from_usec(100)); | |
321 | return 0x0425; | |
322 | } | |
323 | ||
324 | ||
325 | void svp_init(running_machine &machine) | |
326 | { | |
327 | mdsvp_state *state = machine.driver_data<mdsvp_state>(); | |
328 | UINT8 *ROM = state->memregion("maincpu")->base(); | |
329 | ||
330 | memset(state->m_pmac_read, 0, ARRAY_LENGTH(state->m_pmac_read)); | |
331 | memset(state->m_pmac_write, 0, ARRAY_LENGTH(state->m_pmac_write)); | |
332 | state->m_pmc.d = 0; | |
333 | state->m_pmc.w.l = 0; | |
334 | state->m_pmc.w.h = 0; | |
335 | state->m_emu_status = 0; | |
336 | state->m_XST = 0; | |
337 | state->m_XST2 = 0; | |
338 | ||
339 | /* SVP stuff */ | |
340 | state->m_dram = auto_alloc_array(machine, UINT8, 0x20000); | |
341 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_ram(0x300000, 0x31ffff, state->m_dram); | |
342 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0xa15000, 0xa150ff, FUNC(svp_68k_io_r), FUNC(svp_68k_io_w)); | |
343 | // "cell arrange" 1 and 2 | |
344 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x390000, 0x39ffff, FUNC(svp_68k_cell1_r)); | |
345 | machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x3a0000, 0x3affff, FUNC(svp_68k_cell2_r)); | |
346 | ||
347 | machine.device("svp")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x438, 0x438, FUNC(svp_speedup_r)); | |
348 | ||
349 | if (state->m_slotcart->m_cart->get_rom_base() != NULL) | |
350 | memcpy(ROM, state->m_slotcart->m_cart->get_rom_base(), state->m_slotcart->m_cart->get_rom_size()); | |
351 | ||
352 | state->m_iram = auto_alloc_array(machine, UINT8, 0x800); | |
353 | state->membank("bank3")->set_base(state->m_iram); | |
354 | /* SVP ROM just shares m68k region.. */ | |
355 | state->membank("bank4")->set_base(ROM + 0x800); | |
356 | } |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
r0 | r20696 | |
---|---|---|
1 | /*********************************************************************************************************** | |
2 | ||
3 | ||
4 | MegaDrive / Genesis cart emulation | |
5 | ||
6 | ||
7 | Here we emulate bankswitch / protection / NVRAM found on generic carts with no additional hardware | |
8 | ||
9 | ||
10 | ***********************************************************************************************************/ | |
11 | ||
12 | #include "emu.h" | |
13 | #include "machine/md_rom.h" | |
14 | #include "cpu/m68000/m68000.h" | |
15 | ||
16 | ||
17 | //------------------------------------------------- | |
18 | // md_rom_device - constructor | |
19 | //------------------------------------------------- | |
20 | ||
21 | // BASE CARTS + NVRAM | |
22 | const device_type MD_STD_ROM = &device_creator<md_std_rom_device>; | |
23 | const device_type MD_ROM_SRAM = &device_creator<md_rom_sram_device>; | |
24 | const device_type MD_ROM_FRAM = &device_creator<md_rom_fram_device>; | |
25 | ||
26 | // BASE CARTS + PROTECTION / BANKSWITCH | |
27 | const device_type MD_ROM_SSF2 = &device_creator<md_rom_ssf2_device>; | |
28 | const device_type MD_ROM_BUGSLIFE = &device_creator<md_rom_bugslife_device>; | |
29 | const device_type MD_ROM_SMOUSE = &device_creator<md_rom_smouse_device>; | |
30 | const device_type MD_ROM_SMB = &device_creator<md_rom_smb_device>; | |
31 | const device_type MD_ROM_SMB2 = &device_creator<md_rom_smb2_device>; | |
32 | const device_type MD_ROM_SBUBL = &device_creator<md_rom_sbubl_device>; | |
33 | const device_type MD_ROM_RX3 = &device_creator<md_rom_rx3_device>; | |
34 | const device_type MD_ROM_MJLOV = &device_creator<md_rom_mjlov_device>; | |
35 | const device_type MD_ROM_KOF98 = &device_creator<md_rom_kof98_device>; | |
36 | const device_type MD_ROM_KOF99 = &device_creator<md_rom_kof99_device>; | |
37 | const device_type MD_ROM_SOULB = &device_creator<md_rom_soulb_device>; | |
38 | const device_type MD_ROM_CHINF3 = &device_creator<md_rom_chinf3_device>; | |
39 | const device_type MD_ROM_ELFWOR = &device_creator<md_rom_elfwor_device>; | |
40 | const device_type MD_ROM_LION2 = &device_creator<md_rom_lion2_device>; | |
41 | const device_type MD_ROM_LION3 = &device_creator<md_rom_lion3_device>; | |
42 | const device_type MD_ROM_MCPIR = &device_creator<md_rom_mcpirate_device>; | |
43 | const device_type MD_ROM_POKESTAD = &device_creator<md_rom_pokestad_device>; | |
44 | const device_type MD_ROM_REALTEC = &device_creator<md_rom_realtec_device>; | |
45 | const device_type MD_ROM_REDCL = &device_creator<md_rom_redcl_device>; | |
46 | const device_type MD_ROM_SQUIR = &device_creator<md_rom_squir_device>; | |
47 | const device_type MD_ROM_TOPF = &device_creator<md_rom_topf_device>; | |
48 | const device_type MD_ROM_RADICA = &device_creator<md_rom_radica_device>; | |
49 | const device_type MD_ROM_BEGGAR = &device_creator<md_rom_beggar_device>; | |
50 | ||
51 | // below ones are currently unused, because the protection is patched out | |
52 | const device_type MD_ROM_MULAN = &device_creator<md_std_rom_device>; | |
53 | const device_type MD_ROM_POKE = &device_creator<md_std_rom_device>; | |
54 | const device_type MD_ROM_POKE2 = &device_creator<md_std_rom_device>; | |
55 | ||
56 | ||
57 | md_std_rom_device::md_std_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) | |
58 | : device_t(mconfig, type, name, tag, owner, clock), | |
59 | device_md_cart_interface( mconfig, *this ) | |
60 | { | |
61 | } | |
62 | ||
63 | md_std_rom_device::md_std_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
64 | : device_t(mconfig, MD_STD_ROM, "MD Standard cart", tag, owner, clock), | |
65 | device_md_cart_interface( mconfig, *this ) | |
66 | { | |
67 | } | |
68 | ||
69 | md_rom_sram_device::md_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
70 | : md_std_rom_device(mconfig, MD_ROM_SRAM, "MD Standard cart + SRAM", tag, owner, clock) | |
71 | { | |
72 | } | |
73 | ||
74 | md_rom_beggar_device::md_rom_beggar_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
75 | : md_std_rom_device(mconfig, MD_ROM_BEGGAR, "MD Xin Qigai Wangzi", tag, owner, clock) | |
76 | { | |
77 | } | |
78 | ||
79 | md_rom_fram_device::md_rom_fram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
80 | : md_std_rom_device(mconfig, MD_ROM_FRAM, "MD Standard cart + FRAM", tag, owner, clock) | |
81 | { | |
82 | } | |
83 | ||
84 | md_rom_ssf2_device::md_rom_ssf2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
85 | : md_std_rom_device(mconfig, MD_ROM_SSF2, "MD Super SF2", tag, owner, clock) | |
86 | { | |
87 | } | |
88 | ||
89 | md_rom_mcpirate_device::md_rom_mcpirate_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
90 | : md_std_rom_device(mconfig, MD_ROM_MCPIR, "MD Pirate Multicarts (Various)", tag, owner, clock) | |
91 | { | |
92 | } | |
93 | ||
94 | md_rom_bugslife_device::md_rom_bugslife_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
95 | : md_std_rom_device(mconfig, MD_ROM_BUGSLIFE, "MD A Bug's Life", tag, owner, clock) | |
96 | { | |
97 | } | |
98 | ||
99 | md_rom_smouse_device::md_rom_smouse_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
100 | : md_std_rom_device(mconfig, MD_ROM_SMOUSE, "MD Huan Le Tao Qi Shu / Smart Mouse", tag, owner, clock) | |
101 | { | |
102 | } | |
103 | ||
104 | md_rom_smb_device::md_rom_smb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
105 | : md_std_rom_device(mconfig, MD_ROM_SMB, "MD Super Mario Bros.", tag, owner, clock) | |
106 | { | |
107 | } | |
108 | ||
109 | md_rom_smb2_device::md_rom_smb2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
110 | : md_std_rom_device(mconfig, MD_ROM_SMB2, "MD Super Mario Bros. 2", tag, owner, clock) | |
111 | { | |
112 | } | |
113 | ||
114 | md_rom_sbubl_device::md_rom_sbubl_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
115 | : md_std_rom_device(mconfig, MD_ROM_SBUBL, "MD Super Bubble Bobble", tag, owner, clock) | |
116 | { | |
117 | } | |
118 | ||
119 | md_rom_rx3_device::md_rom_rx3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
120 | : md_std_rom_device(mconfig, MD_ROM_SMB2, "MD Rockman X3", tag, owner, clock) | |
121 | { | |
122 | } | |
123 | ||
124 | md_rom_mjlov_device::md_rom_mjlov_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
125 | : md_std_rom_device(mconfig, MD_ROM_MJLOV, "MD Ma Jiang Qing Ren / Mahjong Lover", tag, owner, clock) | |
126 | { | |
127 | } | |
128 | ||
129 | md_rom_kof98_device::md_rom_kof98_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
130 | : md_std_rom_device(mconfig, MD_ROM_KOF98, "MD KOF 98", tag, owner, clock) | |
131 | { | |
132 | } | |
133 | ||
134 | md_rom_kof99_device::md_rom_kof99_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
135 | : md_std_rom_device(mconfig, MD_ROM_KOF99, "MD KOF 99", tag, owner, clock) | |
136 | { | |
137 | } | |
138 | ||
139 | md_rom_soulb_device::md_rom_soulb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
140 | : md_std_rom_device(mconfig, MD_ROM_SOULB, "MD Soul Blade", tag, owner, clock) | |
141 | { | |
142 | } | |
143 | ||
144 | md_rom_chinf3_device::md_rom_chinf3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
145 | : md_std_rom_device(mconfig, MD_ROM_CHINF3, "MD Chinese Fighter 3", tag, owner, clock) | |
146 | { | |
147 | } | |
148 | ||
149 | md_rom_elfwor_device::md_rom_elfwor_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
150 | : md_std_rom_device(mconfig, MD_ROM_ELFWOR, "MD Linghuan Daoshi Super Magician / Elf Wor", tag, owner, clock) | |
151 | { | |
152 | } | |
153 | ||
154 | md_rom_lion2_device::md_rom_lion2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
155 | : md_std_rom_device(mconfig, MD_ROM_LION2, "MD Lion King 2", tag, owner, clock) | |
156 | { | |
157 | } | |
158 | ||
159 | md_rom_lion3_device::md_rom_lion3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
160 | : md_std_rom_device(mconfig, MD_ROM_LION3, "MD Lion King 3", tag, owner, clock) | |
161 | { | |
162 | } | |
163 | ||
164 | md_rom_pokestad_device::md_rom_pokestad_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
165 | : md_std_rom_device(mconfig, MD_ROM_POKESTAD, "MD Pokemon Stadium", tag, owner, clock) | |
166 | { | |
167 | } | |
168 | ||
169 | md_rom_realtec_device::md_rom_realtec_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
170 | : md_std_rom_device(mconfig, MD_ROM_REALTEC, "MD Realtec", tag, owner, clock) | |
171 | { | |
172 | } | |
173 | ||
174 | md_rom_redcl_device::md_rom_redcl_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
175 | : md_std_rom_device(mconfig, MD_ROM_REDCL, "MD Redcliff", tag, owner, clock) | |
176 | { | |
177 | } | |
178 | ||
179 | md_rom_squir_device::md_rom_squir_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
180 | : md_std_rom_device(mconfig, MD_ROM_SQUIR, "MD Squirrel King", tag, owner, clock) | |
181 | { | |
182 | } | |
183 | ||
184 | md_rom_topf_device::md_rom_topf_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
185 | : md_std_rom_device(mconfig, MD_ROM_TOPF, "MD Top Fighter", tag, owner, clock) | |
186 | { | |
187 | } | |
188 | ||
189 | md_rom_radica_device::md_rom_radica_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
190 | : md_std_rom_device(mconfig, MD_ROM_RADICA, "MD Radica TV games", tag, owner, clock) | |
191 | { | |
192 | } | |
193 | ||
194 | //------------------------------------------------- | |
195 | // device_start - device-specific startup | |
196 | //------------------------------------------------- | |
197 | ||
198 | void md_rom_ssf2_device::device_start() | |
199 | { | |
200 | for (int i = 0; i < 7; i++) | |
201 | m_bank[i] = i; | |
202 | m_lastoff = -1; | |
203 | m_lastdata = -1; | |
204 | save_item(NAME(m_bank)); | |
205 | save_item(NAME(m_lastoff)); | |
206 | save_item(NAME(m_lastdata)); | |
207 | } | |
208 | ||
209 | void md_rom_mcpirate_device::device_start() | |
210 | { | |
211 | m_bank = 0; | |
212 | save_item(NAME(m_bank)); | |
213 | } | |
214 | ||
215 | void md_rom_chinf3_device::device_start() | |
216 | { | |
217 | m_bank = 0; | |
218 | save_item(NAME(m_bank)); | |
219 | } | |
220 | ||
221 | void md_rom_lion2_device::device_start() | |
222 | { | |
223 | m_prot1_data = 0; | |
224 | m_prot2_data = 0; | |
225 | save_item(NAME(m_prot1_data)); | |
226 | save_item(NAME(m_prot2_data)); | |
227 | } | |
228 | ||
229 | void md_rom_lion3_device::device_start() | |
230 | { | |
231 | m_prot_data = 0; | |
232 | m_prot_cmd = 0; | |
233 | m_bank = 0; | |
234 | save_item(NAME(m_prot_data)); | |
235 | save_item(NAME(m_prot_cmd)); | |
236 | save_item(NAME(m_bank)); | |
237 | } | |
238 | ||
239 | void md_rom_pokestad_device::device_start() | |
240 | { | |
241 | m_bank = 0; | |
242 | save_item(NAME(m_bank)); | |
243 | } | |
244 | ||
245 | void md_rom_realtec_device::device_start() | |
246 | { | |
247 | m_bank_addr = 0; | |
248 | m_bank_size = 0; | |
249 | m_old_bank_addr = -1; | |
250 | save_item(NAME(m_bank_addr)); | |
251 | save_item(NAME(m_bank_size)); | |
252 | save_item(NAME(m_old_bank_addr)); | |
253 | } | |
254 | ||
255 | void md_rom_squir_device::device_start() | |
256 | { | |
257 | m_latch = 0; | |
258 | save_item(NAME(m_latch)); | |
259 | } | |
260 | ||
261 | void md_rom_topf_device::device_start() | |
262 | { | |
263 | m_latch = 0; | |
264 | m_bank[0] = m_bank[1] = m_bank[2] = 0; | |
265 | save_item(NAME(m_latch)); | |
266 | save_item(NAME(m_bank)); | |
267 | } | |
268 | ||
269 | void md_rom_radica_device::device_start() | |
270 | { | |
271 | m_bank = 0; | |
272 | save_item(NAME(m_bank)); | |
273 | } | |
274 | ||
275 | /*------------------------------------------------- | |
276 | mapper specific handlers | |
277 | -------------------------------------------------*/ | |
278 | ||
279 | /*------------------------------------------------- | |
280 | CART + SRAM | |
281 | -------------------------------------------------*/ | |
282 | ||
283 | READ16_MEMBER(md_rom_sram_device::read) | |
284 | { | |
285 | offset <<= 1; | |
286 | // since a lot of generic carts ends up here if loaded from fullpath | |
287 | // we access nvram only if m_nvram_handlers_installed has been turned on | |
288 | if (m_nvram_handlers_installed) | |
289 | { | |
290 | if (offset >= m_nvram_start && offset < m_nvram_end && m_nvram_active) | |
291 | return m_nvram[(offset - m_nvram_start)/2]; | |
292 | } | |
293 | return m_rom[offset/2]; | |
294 | } | |
295 | ||
296 | WRITE16_MEMBER(md_rom_sram_device::write) | |
297 | { | |
298 | // since a lot of generic carts ends up here if loaded from fullpath | |
299 | // we access nvram only if m_nvram_handlers_installed has been turned on | |
300 | if (m_nvram_handlers_installed) | |
301 | { | |
302 | offset <<= 1; | |
303 | if (offset >= m_nvram_start && offset <= m_nvram_end && m_nvram_active && !m_nvram_readonly) | |
304 | m_nvram[(offset - m_nvram_start)/2] = data; | |
305 | } | |
306 | } | |
307 | ||
308 | WRITE16_MEMBER(md_rom_sram_device::write_a13) | |
309 | { | |
310 | offset <<= 1; | |
311 | if (offset == 0xf) | |
312 | { | |
313 | /* unsure if this is actually supposed to toggle or just switch on? yet to encounter game that uses this */ | |
314 | m_nvram_active = BIT(data, 0); | |
315 | m_nvram_readonly = BIT(data, 1); | |
316 | ||
317 | // since a lot of generic carts ends up here if loaded from fullpath | |
318 | // we turn on nvram (with m_nvram_handlers_installed) only if they toggle it on by writing here! | |
319 | if (m_nvram_active && !m_nvram_handlers_installed) | |
320 | m_nvram_handlers_installed = 1; | |
321 | } | |
322 | } | |
323 | ||
324 | /*------------------------------------------------- | |
325 | BEGGAR PRINCE / XIN QIGAI WANGZI [same as above, but diff start/end... merge?] | |
326 | -------------------------------------------------*/ | |
327 | ||
328 | READ16_MEMBER(md_rom_beggar_device::read) | |
329 | { | |
330 | offset <<= 1; | |
331 | if (offset >= m_nvram_start && offset < m_nvram_end && m_nvram_active) | |
332 | return m_nvram[(offset - m_nvram_start)/2]; | |
333 | return m_rom[offset/2]; | |
334 | } | |
335 | ||
336 | WRITE16_MEMBER(md_rom_beggar_device::write) | |
337 | { | |
338 | offset <<= 1; | |
339 | if (offset >= m_nvram_start && offset <= m_nvram_end && m_nvram_active && !m_nvram_readonly) | |
340 | m_nvram[(offset - m_nvram_start)/2] = data; | |
341 | } | |
342 | ||
343 | WRITE16_MEMBER(md_rom_beggar_device::write_a13) | |
344 | { | |
345 | offset <<= 1; | |
346 | if (offset == 0xf) | |
347 | { | |
348 | /* unsure if this is actually supposed to toggle or just switch on? yet to encounter game that uses this */ | |
349 | m_nvram_active = BIT(data, 0); | |
350 | m_nvram_readonly = BIT(data, 1); | |
351 | } | |
352 | } | |
353 | ||
354 | /*------------------------------------------------- | |
355 | CART + FRAM [almost same as SRAM... merge common parts?] | |
356 | -------------------------------------------------*/ | |
357 | ||
358 | READ16_MEMBER(md_rom_fram_device::read) | |
359 | { | |
360 | offset <<= 1; | |
361 | if (offset >= m_nvram_start && offset < m_nvram_end && m_nvram_active) | |
362 | return m_nvram[(offset - m_nvram_start)/2]; | |
363 | return m_rom[offset/2]; | |
364 | } | |
365 | ||
366 | WRITE16_MEMBER(md_rom_fram_device::write_a13) | |
367 | { | |
368 | offset <<= 1; | |
369 | if (offset == 0xf) | |
370 | m_nvram_active = BIT(data, 0); | |
371 | } | |
372 | ||
373 | ||
374 | READ16_MEMBER(md_rom_fram_device::read_a13) | |
375 | { | |
376 | if (offset == 0xf) | |
377 | return m_nvram_active; | |
378 | else | |
379 | return 0xffff; | |
380 | } | |
381 | ||
382 | /*------------------------------------------------- | |
383 | SUPER STREET FIGHTERS 2 | |
384 | -------------------------------------------------*/ | |
385 | ||
386 | READ16_MEMBER(md_rom_ssf2_device::read) | |
387 | { | |
388 | if (offset < 0x400000/2) | |
389 | return m_rom[offset]; | |
390 | else | |
391 | return 0xffff; | |
392 | } | |
393 | ||
394 | // I'm not very fond of the code below... | |
395 | WRITE16_MEMBER(md_rom_ssf2_device::write_a13) | |
396 | { | |
397 | if (offset >= 0xf0/2) | |
398 | { | |
399 | offset -= 0xf0/2; | |
400 | if ((m_lastoff != offset) || (m_lastdata != data)) | |
401 | { | |
402 | m_lastoff = offset; | |
403 | m_lastdata = data; | |
404 | if (offset) // bank 0 is not modified | |
405 | { | |
406 | UINT16 *ROM = get_rom_base(); | |
407 | m_bank[offset] = data & 0xf; | |
408 | memcpy(ROM + offset * 0x080000/2, ROM + 0x400000/2 + (m_bank[offset] * 0x080000)/2, 0x080000); | |
409 | } | |
410 | } | |
411 | } | |
412 | } | |
413 | ||
414 | /*------------------------------------------------- | |
415 | PIRATE MULTICARTS | |
416 | -------------------------------------------------*/ | |
417 | ||
418 | READ16_MEMBER(md_rom_mcpirate_device::read) | |
419 | { | |
420 | if (offset < 0x400000/2) | |
421 | { | |
422 | return m_rom[offset + (m_bank * 0x10000)/2]; | |
423 | } | |
424 | else | |
425 | { | |
426 | return read(space, offset - 0x400000/2, 0xffff); | |
427 | } | |
428 | } | |
429 | ||
430 | WRITE16_MEMBER(md_rom_mcpirate_device::write_a13) | |
431 | { | |
432 | offset <<= 1; | |
433 | if (offset < 0x40) | |
434 | m_bank = offset; | |
435 | } | |
436 | ||
437 | /*------------------------------------------------- | |
438 | A BUG'S LIFE | |
439 | -------------------------------------------------*/ | |
440 | ||
441 | READ16_MEMBER(md_rom_bugslife_device::read_a13) | |
442 | { | |
443 | if (offset == 0) | |
444 | return 0x28; | |
445 | else | |
446 | return 0xffff; | |
447 | } | |
448 | ||
449 | /*------------------------------------------------- | |
450 | CHINESE FIGHTER 3 | |
451 | -------------------------------------------------*/ | |
452 | ||
453 | READ16_MEMBER(md_rom_chinf3_device::read) | |
454 | { | |
455 | if (offset < 0x100000/2) | |
456 | { | |
457 | if (!m_bank) | |
458 | return m_rom[offset & 0xfffff/2]; | |
459 | else | |
460 | return m_rom[(offset & 0xffff/2) + (m_bank * 0x10000)/2]; | |
461 | } | |
462 | ||
463 | // PROTECTION in 0x400000 - 0x4fffff | |
464 | /* not 100% correct, there may be some relationship between the reads here | |
465 | and the writes made at the start of the game.. */ | |
466 | if (offset >= 0x400000/2 && offset < 0x500000/2) | |
467 | { | |
468 | UINT32 retdat = 0; | |
469 | /* | |
470 | 04dc10 chifi3, prot_r? 2800 | |
471 | 04cefa chifi3, prot_r? 65262 | |
472 | */ | |
473 | if (space.machine().device("maincpu")->safe_pc() == 0x01782) // makes 'VS' screen appear | |
474 | { | |
475 | retdat = space.machine().device("maincpu")->state().state_int(M68K_D3) & 0xff; | |
476 | retdat <<= 8; | |
477 | return retdat; | |
478 | } | |
479 | else if (space.machine().device("maincpu")->safe_pc() == 0x1c24) // background gfx etc. | |
480 | { | |
481 | retdat = space.machine().device("maincpu")->state().state_int(M68K_D3) & 0xff; | |
482 | retdat <<= 8; | |
483 | return retdat; | |
484 | } | |
485 | else if (space.machine().device("maincpu")->safe_pc() == 0x10c4a) // unknown | |
486 | { | |
487 | return space.machine().rand(); | |
488 | } | |
489 | else if (space.machine().device("maincpu")->safe_pc() == 0x10c50) // unknown | |
490 | { | |
491 | return space.machine().rand(); | |
492 | } | |
493 | else if (space.machine().device("maincpu")->safe_pc() == 0x10c52) // relates to the game speed.. | |
494 | { | |
495 | retdat = space.machine().device("maincpu")->state().state_int(M68K_D4) & 0xff; | |
496 | retdat <<= 8; | |
497 | return retdat; | |
498 | } | |
499 | else if (space.machine().device("maincpu")->safe_pc() == 0x061ae) | |
500 | { | |
501 | retdat = space.machine().device("maincpu")->state().state_int(M68K_D3) & 0xff; | |
502 | retdat <<= 8; | |
503 | return retdat; | |
504 | } | |
505 | else if (space.machine().device("maincpu")->safe_pc() == 0x061b0) | |
506 | { | |
507 | retdat = space.machine().device("maincpu")->state().state_int(M68K_D3) & 0xff; | |
508 | retdat <<= 8; | |
509 | return retdat; | |
510 | } | |
511 | else | |
512 | { | |
513 | logerror("%06x chifi3, prot_r? %04x\n", space.machine().device("maincpu")->safe_pc(), offset); | |
514 | } | |
515 | return 0; | |
516 | } | |
517 | ||
518 | return m_rom[offset & 0x1fffff/2]; | |
519 | } | |
520 | ||
521 | WRITE16_MEMBER(md_rom_chinf3_device::write) | |
522 | { | |
523 | if (offset >= 0x600000/2 && offset < 0x700000/2) | |
524 | { | |
525 | if (data == 0xf100) // *hit player | |
526 | m_bank = 1; | |
527 | else if (data == 0xd700) // title screen.. | |
528 | m_bank = 7; | |
529 | else if (data == 0xd300) // character hits floor | |
530 | m_bank = 3; | |
531 | else if (data == 0x0000) | |
532 | m_bank = 0; | |
533 | else | |
534 | logerror("%06x chifi3, bankw? %04x %04x\n", space.device().safe_pc(), offset, data); | |
535 | } | |
536 | } | |
537 | ||
538 | /*------------------------------------------------- | |
539 | LINGHUAN DAOSHI SUPER MAGICIAN / ELF WOR | |
540 | -------------------------------------------------*/ | |
541 | ||
542 | READ16_MEMBER(md_rom_elfwor_device::read) | |
543 | { | |
544 | /* It returns (0x55 @ 0x400000 OR 0xc9 @ 0x400004) AND (0x0f @ 0x400002 OR 0x18 @ 0x400006). | |
545 | It is probably best to add handlers for all 4 addresses. */ | |
546 | if (offset == 0x400000/2) return 0x5500; | |
547 | if (offset == 0x400002/2) return 0x0f00; | |
548 | if (offset == 0x400004/2) return 0xc900; | |
549 | if (offset == 0x400006/2) return 0x1800; | |
550 | return m_rom[offset]; | |
551 | } | |
552 | ||
553 | /*------------------------------------------------- | |
554 | HUAN LE TAO QI SHU / SMART MOUSE | |
555 | -------------------------------------------------*/ | |
556 | ||
557 | READ16_MEMBER(md_rom_smouse_device::read) | |
558 | { | |
559 | if (offset == 0x400000/2) return 0x5500; | |
560 | if (offset == 0x400002/2) return 0x0f00; | |
561 | if (offset == 0x400004/2) return 0xaa00; | |
562 | if (offset == 0x400006/2) return 0xf000; | |
563 | return m_rom[offset]; | |
564 | } | |
565 | ||
566 | /*------------------------------------------------- | |
567 | KOF98 | |
568 | -------------------------------------------------*/ | |
569 | ||
570 | READ16_MEMBER(md_rom_kof98_device::read) | |
571 | { | |
572 | if (offset == 0x480000/2) return 0xaa00; | |
573 | if (offset == 0x4800e0/2) return 0xaa00; | |
574 | if (offset == 0x4824a0/2) return 0xaa00; | |
575 | if (offset == 0x488880/2) return 0xaa00; | |
576 | if (offset == 0x4a8820/2) return 0x0a00; | |
577 | if (offset == 0x4f8820/2) return 0x0000; | |
578 | return m_rom[offset]; | |
579 | } | |
580 | ||
581 | /*------------------------------------------------- | |
582 | KOF 99 | |
583 | -------------------------------------------------*/ | |
584 | // gfx glitch with the new code... uninitialized ram somewhere? | |
585 | READ16_MEMBER(md_rom_kof99_device::read_a13) | |
586 | { | |
587 | if (offset == 0x00/2) return 0x00; // startup protection check, chinese message if != 0 | |
588 | if (offset == 0x02/2) return 0x01; // write 02 to a13002.. shift right 1? | |
589 | if (offset == 0x3e/2) return 0x1f; // write 3e to a1303e.. shift right 1? | |
590 | else return 0xffff; | |
591 | } | |
592 | ||
593 | /*------------------------------------------------- | |
594 | LION KING 2 | |
595 | -------------------------------------------------*/ | |
596 | ||
597 | READ16_MEMBER(md_rom_lion2_device::read) | |
598 | { | |
599 | if (offset == 0x400002/2) return m_prot1_data; | |
600 | if (offset == 0x400006/2) return m_prot2_data; | |
601 | return m_rom[offset]; | |
602 | } | |
603 | ||
604 | WRITE16_MEMBER(md_rom_lion2_device::write) | |
605 | { | |
606 | if (offset == 0x400000/2) m_prot1_data = data; | |
607 | if (offset == 0x400004/2) m_prot2_data = data; | |
608 | } | |
609 | ||
610 | /*------------------------------------------------- | |
611 | LION KING 3 | |
612 | -------------------------------------------------*/ | |
613 | ||
614 | READ16_MEMBER(md_rom_lion3_device::read) | |
615 | { | |
616 | if (offset < 0x8000/2) | |
617 | return m_rom[offset + (m_bank * 0x8000)/2]; | |
618 | else if (offset >= 0x600000/2 && offset < 0x700000/2) | |
619 | { | |
620 | UINT16 retdata = 0; | |
621 | switch (offset & 0x7) | |
622 | { | |
623 | case 2: | |
624 | if (m_prot_cmd == 0) | |
625 | retdata = (m_prot_data << 1); | |
626 | else if (m_prot_cmd == 1) | |
627 | retdata = (m_prot_data >> 1); | |
628 | else if (m_prot_cmd == 2) | |
629 | { | |
630 | retdata = m_prot_data >> 4; | |
631 | retdata |= (m_prot_data & 0x0f) << 4; | |
632 | } | |
633 | else | |
634 | { | |
635 | /* printf("unk prot case %d\n", m_prot_cmd); */ | |
636 | retdata = (BIT(m_prot_data, 7) << 0); | |
637 | retdata |= (BIT(m_prot_data, 6) << 1); | |
638 | retdata |= (BIT(m_prot_data, 5) << 2); | |
639 | retdata |= (BIT(m_prot_data, 4) << 3); | |
640 | retdata |= (BIT(m_prot_data, 3) << 4); | |
641 | retdata |= (BIT(m_prot_data, 2) << 5); | |
642 | retdata |= (BIT(m_prot_data, 1) << 6); | |
643 | retdata |= (BIT(m_prot_data, 0) << 7); | |
644 | } | |
645 | break; | |
646 | ||
647 | default: | |
648 | logerror("protection read, unknown offset %x\n", offset & 0x7); | |
649 | break; | |
650 | } | |
651 | return retdata; | |
652 | } | |
653 | ||
654 | return m_rom[offset]; | |
655 | } | |
656 | ||
657 | WRITE16_MEMBER(md_rom_lion3_device::write) | |
658 | { | |
659 | if (offset >= 0x600000/2 && offset < 0x700000/2) | |
660 | { | |
661 | switch (offset & 0x7) | |
662 | { | |
663 | case 0x0: | |
664 | m_prot_data = data; | |
665 | break; | |
666 | case 0x1: | |
667 | m_prot_cmd = data; | |
668 | break; | |
669 | default: | |
670 | logerror("protection write, unknown offset %d\n", offset & 0x7); | |
671 | break; | |
672 | } | |
673 | } | |
674 | if (offset >= 0x700000/2 && offset < 0x800000/2) | |
675 | { | |
676 | switch (offset & 0x7) | |
677 | { | |
678 | case 0x0: | |
679 | m_bank = data & 0xffff; | |
680 | break; | |
681 | default: | |
682 | logerror("bank write, unknown offset %d\n", offset & 0x7); | |
683 | break; | |
684 | } | |
685 | } | |
686 | } | |
687 | ||
688 | /*------------------------------------------------- | |
689 | MA JIANG QING REN / MAHJONG LOVER | |
690 | -------------------------------------------------*/ | |
691 | ||
692 | READ16_MEMBER(md_rom_mjlov_device::read) | |
693 | { | |
694 | if (offset == 0x400000/2) return 0x9000; | |
695 | if (offset == 0x401000/2) return 0xd300; | |
696 | return m_rom[offset]; | |
697 | } | |
698 | ||
699 | ||
700 | /*------------------------------------------------- | |
701 | SUPER BUBBLE BOBBLE MD | |
702 | -------------------------------------------------*/ | |
703 | ||
704 | READ16_MEMBER(md_rom_sbubl_device::read) | |
705 | { | |
706 | if (offset == 0x400000/2) return 0x5500; | |
707 | if (offset == 0x400002/2) return 0x0f00; | |
708 | return m_rom[offset]; | |
709 | } | |
710 | ||
711 | /*------------------------------------------------- | |
712 | SOUL BLADE | |
713 | -------------------------------------------------*/ | |
714 | ||
715 | READ16_MEMBER(md_rom_soulb_device::read) | |
716 | { | |
717 | if (offset == 0x400002/2) return 0x9800; | |
718 | if (offset == 0x400004/2) return 0xc900; | |
719 | if (offset == 0x400006/2) return 0xf000; | |
720 | return m_rom[offset]; | |
721 | } | |
722 | ||
723 | /*------------------------------------------------- | |
724 | POKEMON STADIUM / KAIJU | |
725 | -------------------------------------------------*/ | |
726 | ||
727 | READ16_MEMBER(md_rom_pokestad_device::read) | |
728 | { | |
729 | if (offset < 0x8000/2) | |
730 | return m_rom[offset + (m_bank * 0x8000)/2]; | |
731 | return m_rom[offset]; | |
732 | } | |
733 | ||
734 | WRITE16_MEMBER(md_rom_pokestad_device::write) | |
735 | { | |
736 | if (offset >= 0x700000/2 && offset < 0x800000/2) | |
737 | m_bank = data & 0x7f; | |
738 | } | |
739 | ||
740 | /*------------------------------------------------- | |
741 | REALTEC | |
742 | -------------------------------------------------*/ | |
743 | ||
744 | READ16_MEMBER(md_rom_realtec_device::read) | |
745 | { | |
746 | if (offset < (m_bank_size * 0x20000)) // two banks of same (variable) size at the bottom of the rom | |
747 | return m_rom[offset + (m_bank_addr * 0x20000)/2]; | |
748 | return m_rom[(offset & 0x1fff/2) + 0x7e000/2]; // otherwise it accesses the final 8k of the image | |
749 | } | |
750 | ||
751 | WRITE16_MEMBER(md_rom_realtec_device::write) | |
752 | { | |
753 | if (offset == 0x400000/2) | |
754 | { | |
755 | m_old_bank_addr = m_bank_addr; | |
756 | m_bank_addr = (m_bank_addr & 0x7) | ((data >> 9) & 0x7) << 3; | |
757 | } | |
758 | if (offset == 0x402000/2) | |
759 | { | |
760 | m_bank_addr = 0; | |
761 | m_bank_size = (data >> 8) & 0x1f; | |
762 | } | |
763 | if (offset == 0x404000/2) | |
764 | { | |
765 | m_old_bank_addr = m_bank_addr; | |
766 | m_bank_addr = (m_bank_addr & 0xf8) | ((data >> 8) & 0x3); | |
767 | } | |
768 | } | |
769 | ||
770 | /*------------------------------------------------- | |
771 | RED CLIFF | |
772 | -------------------------------------------------*/ | |
773 | ||
774 | READ16_MEMBER(md_rom_redcl_device::read) | |
775 | { | |
776 | if (offset == 0x400000/2) return 0x55 << 8; | |
777 | if (offset == 0x400004/2) return -0x56 << 8; | |
778 | return m_rom[offset]; | |
779 | } | |
780 | ||
781 | /*------------------------------------------------- | |
782 | ROCKMAN X3 | |
783 | -------------------------------------------------*/ | |
784 | ||
785 | READ16_MEMBER(md_rom_rx3_device::read_a13) | |
786 | { | |
787 | if (offset == 0) | |
788 | return 0x0c; | |
789 | else | |
790 | return 0xffff; | |
791 | } | |
792 | ||
793 | /*------------------------------------------------- | |
794 | SQUIRREL KING | |
795 | -------------------------------------------------*/ | |
796 | ||
797 | READ16_MEMBER(md_rom_squir_device::read) | |
798 | { | |
799 | if ((offset >= 0x400000/2) && (offset < 0x400008/2)) | |
800 | return m_latch; | |
801 | return m_rom[offset]; | |
802 | } | |
803 | ||
804 | WRITE16_MEMBER(md_rom_squir_device::write) | |
805 | { | |
806 | if (offset >= 0x400000/2 && offset < 0x400008/2) | |
807 | m_latch = data; | |
808 | } | |
809 | ||
810 | /*------------------------------------------------- | |
811 | SUPER MARIO BROS | |
812 | -------------------------------------------------*/ | |
813 | ||
814 | READ16_MEMBER(md_rom_smb_device::read_a13) | |
815 | { | |
816 | if (offset == 0) | |
817 | return 0x0c; | |
818 | else | |
819 | return 0xffff; | |
820 | } | |
821 | ||
822 | /*------------------------------------------------- | |
823 | SUPER MARIO BROS 2 | |
824 | -------------------------------------------------*/ | |
825 | ||
826 | READ16_MEMBER(md_rom_smb2_device::read_a13) | |
827 | { | |
828 | if (offset == 0) | |
829 | return 0x0a; | |
830 | else | |
831 | return 0xffff; | |
832 | } | |
833 | ||
834 | /*------------------------------------------------- | |
835 | TOP FIGHTER | |
836 | -------------------------------------------------*/ | |
837 | ||
838 | READ16_MEMBER(md_rom_topf_device::read) | |
839 | { | |
840 | //cpu #0 (PC=0004CBAE): unmapped program memory word read from 006A35D4 & 00FF -- wants regD7 | |
841 | if (offset == 0x645b44/2) | |
842 | { | |
843 | //cpu #0 (PC=0004DE00): unmapped program memory word write to 00689B80 = 004A & 00FF | |
844 | //cpu #0 (PC=0004DE08): unmapped program memory word write to 00 = 00B5 & 00FF | |
845 | //cpu #0 (PC=0004DE0C): unmapped program memory word read from 00645B44 & 00FF | |
846 | ||
847 | return 0x9f;//0x25; | |
848 | } | |
849 | if (offset == 0x6bd294/2) | |
850 | { | |
851 | /* | |
852 | cpu #0 (PC=00177192): unmapped program memory word write to 006BD240 = 00A8 & 00FF | |
853 | cpu #0 (PC=0017719A): unmapped program memory word write to 006BD2D2 = 0098 & 00FF | |
854 | cpu #0 (PC=001771A2): unmapped program memory word read from 006BD294 & 00FF | |
855 | */ | |
856 | ||
857 | if (space.device().safe_pc()==0x1771a2) return 0x50; | |
858 | else | |
859 | { | |
860 | m_latch++; | |
861 | logerror("%06x topfig_6BD294_r %04x\n",space.device().safe_pc(), m_latch); | |
862 | return m_latch; | |
863 | } | |
864 | } | |
865 | if (offset == 0x6f5344/2) | |
866 | { | |
867 | if (space.device().safe_pc()==0x4C94E) | |
868 | return space.machine().device("maincpu")->state().state_int((M68K_D0)) & 0xff; | |
869 | else | |
870 | { | |
871 | m_latch++; | |
872 | logerror("%06x topfig_6F5344_r %04x\n", space.device().safe_pc(), m_latch); | |
873 | return m_latch; | |
874 | } | |
875 | } | |
876 | ||
877 | if (offset >= 0x20000/2 && offset < 0x28000/2) | |
878 | return m_rom[offset + (m_bank[0] * 0x188000)/2]; | |
879 | ||
880 | if (offset >= 0x58000/2 && offset < 0x60000/2) | |
881 | return m_rom[offset + (m_bank[1] * 0x20000)/2]; | |
882 | ||
883 | if (offset >= 0x60000/2 && offset < 0x68000/2) | |
884 | return m_rom[offset + (m_bank[2] * 0x110000)/2]; | |
885 | ||
886 | return m_rom[offset]; | |
887 | } | |
888 | ||
889 | WRITE16_MEMBER(md_rom_topf_device::write) | |
890 | { | |
891 | if (offset >= 0x700000/2 && offset < 0x800000/2) | |
892 | { | |
893 | if (data == 0x002a) | |
894 | m_bank[2] = 1; // == 0x2e*0x8000?! | |
895 | else if (data==0x0035) // characters ingame | |
896 | m_bank[0] = 1; // == 0x35*0x8000 | |
897 | else if (data==0x000f) // special moves | |
898 | m_bank[1] = 1; // == 0xf*0x8000 | |
899 | else if (data==0x0000) | |
900 | { | |
901 | m_bank[0] = 0; | |
902 | m_bank[1] = 0; | |
903 | m_bank[2] = 0; | |
904 | } | |
905 | else | |
906 | logerror("%06x offset %06x, data %04x\n", space.device().safe_pc(), offset, data); | |
907 | } | |
908 | } | |
909 | ||
910 | /*------------------------------------------------- | |
911 | RADICA TV GAMES [to be split...] | |
912 | -------------------------------------------------*/ | |
913 | ||
914 | READ16_MEMBER(md_rom_radica_device::read) | |
915 | { | |
916 | return m_rom[m_bank * 0x10000/2 + offset]; | |
917 | } | |
918 | ||
919 | READ16_MEMBER(md_rom_radica_device::read_a13) | |
920 | { | |
921 | if (offset < 0x80) | |
922 | m_bank = offset & 0x3f; | |
923 | return 0; | |
924 | } |
Added: svn:eol-style + native Added: svn:mime-type + text/plain |
r0 | r20696 | |
---|---|---|
1 | #ifndef __MD_ROM_H | |
2 | #define __MD_ROM_H | |
3 | ||
4 | #include "machine/md_slot.h" | |
5 | ||
6 | ||
7 | //************************************************************************** | |
8 | // TYPE DEFINITIONS | |
9 | //************************************************************************** | |
10 | ||
11 | // ======================> md_std_rom_device | |
12 | ||
13 | class md_std_rom_device : public device_t, | |
14 | public device_md_cart_interface | |
15 | { | |
16 | public: | |
17 | // construction/destruction | |
18 | md_std_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); | |
19 | md_std_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
20 | ||
21 | // device-level overrides | |
22 | virtual void device_start() {}; | |
23 | virtual void device_config_complete() { m_shortname = "md_std_rom"; } | |
24 | ||
25 | // reading and writing | |
26 | virtual DECLARE_READ16_MEMBER(read) { return m_rom[offset]; }; | |
27 | virtual DECLARE_WRITE16_MEMBER(write) { }; | |
28 | }; | |
29 | ||
30 | // ======================> md_rom_sram_device | |
31 | ||
32 | class md_rom_sram_device : public md_std_rom_device | |
33 | { | |
34 | public: | |
35 | // construction/destruction | |
36 | md_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
37 | ||
38 | // device-level overrides | |
39 | virtual void device_config_complete() { m_shortname = "md_rom_sram"; } | |
40 | ||
41 | // reading and writing | |
42 | virtual DECLARE_READ16_MEMBER(read); | |
43 | virtual DECLARE_WRITE16_MEMBER(write); | |
44 | virtual DECLARE_WRITE16_MEMBER(write_a13); | |
45 | }; | |
46 | ||
47 | // ======================> md_rom_beggar_device | |
48 | ||
49 | class md_rom_beggar_device : public md_std_rom_device | |
50 | { | |
51 | public: | |
52 | // construction/destruction | |
53 | md_rom_beggar_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
54 | ||
55 | // device-level overrides | |
56 | virtual void device_config_complete() { m_shortname = "md_rom_beggar"; } | |
57 | ||
58 | // reading and writing | |
59 | virtual DECLARE_READ16_MEMBER(read); | |
60 | virtual DECLARE_WRITE16_MEMBER(write); | |
61 | virtual DECLARE_WRITE16_MEMBER(write_a13); | |
62 | }; | |
63 | ||
64 | // ======================> md_rom_fram_device | |
65 | ||
66 | class md_rom_fram_device : public md_std_rom_device | |
67 | { | |
68 | public: | |
69 | // construction/destruction | |
70 | md_rom_fram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
71 | ||
72 | // device-level overrides | |
73 | virtual void device_config_complete() { m_shortname = "md_rom_fram"; } | |
74 | ||
75 | // reading and writing | |
76 | virtual DECLARE_READ16_MEMBER(read); | |
77 | virtual DECLARE_READ16_MEMBER(read_a13); | |
78 | virtual DECLARE_WRITE16_MEMBER(write_a13); | |
79 | }; | |
80 | ||
81 | // ======================> md_rom_ssf2_device | |
82 | ||
83 | class md_rom_ssf2_device : public md_std_rom_device | |
84 | { | |
85 | public: | |
86 | // construction/destruction | |
87 | md_rom_ssf2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
88 | ||
89 | // device-level overrides | |
90 | virtual void device_start(); | |
91 | virtual void device_config_complete() { m_shortname = "md_rom_ssf2"; } | |
92 | ||
93 | // reading and writing | |
94 | virtual DECLARE_READ16_MEMBER(read); | |
95 | virtual DECLARE_WRITE16_MEMBER(write_a13); | |
96 | ||
97 | private: | |
98 | UINT8 m_bank[16]; | |
99 | int m_lastoff, m_lastdata; | |
100 | }; | |
101 | ||
102 | // ======================> md_rom_mcpirate_device | |
103 | ||
104 | class md_rom_mcpirate_device : public md_std_rom_device | |
105 | { | |
106 | public: | |
107 | // construction/destruction | |
108 | md_rom_mcpirate_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
109 | ||
110 | // device-level overrides | |
111 | virtual void device_start(); | |
112 | virtual void device_config_complete() { m_shortname = "md_rom_mcpirate"; } | |
113 | ||
114 | // reading and writing | |
115 | virtual DECLARE_READ16_MEMBER(read); | |
116 | virtual DECLARE_WRITE16_MEMBER(write_a13); | |
117 | ||
118 | private: | |
119 | UINT8 m_bank; | |
120 | }; | |
121 | ||
122 | ||
123 | // ======================> md_rom_bugslife_device | |
124 | ||
125 | class md_rom_bugslife_device : public md_std_rom_device | |
126 | { | |
127 | public: | |
128 | // construction/destruction | |
129 | md_rom_bugslife_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
130 | ||
131 | // device-level overrides | |
132 | virtual void device_config_complete() { m_shortname = "md_rom_bugslife"; } | |
133 | ||
134 | // reading and writing | |
135 | virtual DECLARE_READ16_MEMBER(read_a13); | |
136 | }; | |
137 | ||
138 | // ======================> md_rom_chinf3_device | |
139 | ||
140 | class md_rom_chinf3_device : public md_std_rom_device | |
141 | { | |
142 | public: | |
143 | // construction/destruction | |
144 | md_rom_chinf3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
145 | ||
146 | // device-level overrides | |
147 | virtual void device_start(); | |
148 | virtual void device_config_complete() { m_shortname = "md_rom_chinf3"; } | |
149 | ||
150 | // reading and writing | |
151 | virtual DECLARE_READ16_MEMBER(read); | |
152 | virtual DECLARE_WRITE16_MEMBER(write); | |
153 | ||
154 | private: | |
155 | int m_bank; | |
156 | }; | |
157 | ||
158 | // ======================> md_rom_elfwor_device | |
159 | ||
160 | class md_rom_elfwor_device : public md_std_rom_device | |
161 | { | |
162 | public: | |
163 | // construction/destruction | |
164 | md_rom_elfwor_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
165 | ||
166 | // device-level overrides | |
167 | virtual void device_config_complete() { m_shortname = "md_rom_elfwor"; } | |
168 | ||
169 | // reading and writing | |
170 | virtual DECLARE_READ16_MEMBER(read); | |
171 | }; | |
172 | ||
173 | // ======================> md_rom_kof98_device | |
174 | ||
175 | class md_rom_kof98_device : public md_std_rom_device | |
176 | { | |
177 | public: | |
178 | // construction/destruction | |
179 | md_rom_kof98_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
180 | ||
181 | // device-level overrides | |
182 | virtual void device_config_complete() { m_shortname = "md_rom_kof98"; } | |
183 | ||
184 | // reading and writing | |
185 | virtual DECLARE_READ16_MEMBER(read); | |
186 | }; | |
187 | ||
188 | // ======================> md_rom_kof99_device | |
189 | ||
190 | class md_rom_kof99_device : public md_std_rom_device | |
191 | { | |
192 | public: | |
193 | // construction/destruction | |
194 | md_rom_kof99_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
195 | ||
196 | // device-level overrides | |
197 | virtual void device_config_complete() { m_shortname = "md_rom_kof99"; } | |
198 | ||
199 | // reading and writing | |
200 | virtual DECLARE_READ16_MEMBER(read_a13); | |
201 | }; | |
202 | ||
203 | // ======================> md_rom_lion2_device | |
204 | ||
205 | class md_rom_lion2_device : public md_std_rom_device | |
206 | { | |
207 | public: | |
208 | // construction/destruction | |
209 | md_rom_lion2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
210 | ||
211 | // device-level overrides | |
212 | virtual void device_start(); | |
213 | virtual void device_config_complete() { m_shortname = "md_rom_lion2"; } | |
214 | ||
215 | // reading and writing | |
216 | virtual DECLARE_READ16_MEMBER(read); | |
217 | virtual DECLARE_WRITE16_MEMBER(write); | |
218 | ||
219 | private: | |
220 | UINT16 m_prot1_data, m_prot2_data; | |
221 | }; | |
222 | ||
223 | // ======================> md_rom_lion3_device | |
224 | ||
225 | class md_rom_lion3_device : public md_std_rom_device | |
226 | { | |
227 | public: | |
228 | // construction/destruction | |
229 | md_rom_lion3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
230 | ||
231 | // device-level overrides | |
232 | virtual void device_start(); | |
233 | virtual void device_config_complete() { m_shortname = "md_rom_lion3"; } | |
234 | ||
235 | // reading and writing | |
236 | virtual DECLARE_READ16_MEMBER(read); | |
237 | virtual DECLARE_WRITE16_MEMBER(write); | |
238 | ||
239 | private: | |
240 | UINT8 m_prot_data, m_prot_cmd; | |
241 | UINT16 m_bank; | |
242 | }; | |
243 | ||
244 | // ======================> md_rom_mjlov_device | |
245 | ||
246 | class md_rom_mjlov_device : public md_std_rom_device | |
247 | { | |
248 | public: | |
249 | // construction/destruction | |
250 | md_rom_mjlov_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
251 | ||
252 | // device-level overrides | |
253 | virtual void device_config_complete() { m_shortname = "md_rom_mjlov"; } | |
254 | ||
255 | // reading and writing | |
256 | virtual DECLARE_READ16_MEMBER(read); | |
257 | }; | |
258 | ||
259 | // ======================> md_rom_pokestad_device | |
260 | ||
261 | class md_rom_pokestad_device : public md_std_rom_device | |
262 | { | |
263 | public: | |
264 | // construction/destruction | |
265 | md_rom_pokestad_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
266 | ||
267 | // device-level overrides | |
268 | virtual void device_start(); | |
269 | virtual void device_config_complete() { m_shortname = "md_rom_pokestad"; } | |
270 | ||
271 | // reading and writing | |
272 | virtual DECLARE_READ16_MEMBER(read); | |
273 | virtual DECLARE_WRITE16_MEMBER(write); | |
274 | ||
275 | private: | |
276 | UINT8 m_bank; | |
277 | }; | |
278 | ||
279 | // ======================> md_rom_realtec_device | |
280 | ||
281 | class md_rom_realtec_device : public md_std_rom_device | |
282 | { | |
283 | public: | |
284 | // construction/destruction | |
285 | md_rom_realtec_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
286 | ||
287 | // device-level overrides | |
288 | virtual void device_start(); | |
289 | virtual void device_config_complete() { m_shortname = "md_rom_realtec"; } | |
290 | ||
291 | // reading and writing | |
292 | virtual DECLARE_READ16_MEMBER(read); | |
293 | virtual DECLARE_WRITE16_MEMBER(write); | |
294 | ||
295 | private: | |
296 | UINT16 m_bank_addr, m_bank_size, m_old_bank_addr; | |
297 | }; | |
298 | ||
299 | // ======================> md_rom_redcl_device | |
300 | ||
301 | class md_rom_redcl_device : public md_std_rom_device | |
302 | { | |
303 | public: | |
304 | // construction/destruction | |
305 | md_rom_redcl_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
306 | ||
307 | // device-level overrides | |
308 | virtual void device_config_complete() { m_shortname = "md_rom_redcl"; } | |
309 | ||
310 | // reading and writing | |
311 | virtual DECLARE_READ16_MEMBER(read); | |
312 | }; | |
313 | ||
314 | // ======================> md_rom_rx3_device | |
315 | ||
316 | class md_rom_rx3_device : public md_std_rom_device | |
317 | { | |
318 | public: | |
319 | // construction/destruction | |
320 | md_rom_rx3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
321 | ||
322 | // device-level overrides | |
323 | virtual void device_config_complete() { m_shortname = "md_rom_rx3"; } | |
324 | ||
325 | // reading and writing | |
326 | virtual DECLARE_READ16_MEMBER(read_a13); | |
327 | }; | |
328 | ||
329 | // ======================> md_rom_sbubl_device | |
330 | ||
331 | class md_rom_sbubl_device : public md_std_rom_device | |
332 | { | |
333 | public: | |
334 | // construction/destruction | |
335 | md_rom_sbubl_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
336 | ||
337 | // device-level overrides | |
338 | virtual void device_config_complete() { m_shortname = "md_rom_sbubl"; } | |
339 | ||
340 | // reading and writing | |
341 | virtual DECLARE_READ16_MEMBER(read); | |
342 | }; | |
343 | ||
344 | // ======================> md_rom_smb_device | |
345 | ||
346 | class md_rom_smb_device : public md_std_rom_device | |
347 | { | |
348 | public: | |
349 | // construction/destruction | |
350 | md_rom_smb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
351 | ||
352 | // device-level overrides | |
353 | virtual void device_config_complete() { m_shortname = "md_rom_smb"; } | |
354 | ||
355 | // reading and writing | |
356 | virtual DECLARE_READ16_MEMBER(read_a13); | |
357 | }; | |
358 | ||
359 | // ======================> md_rom_smb2_device | |
360 | ||
361 | class md_rom_smb2_device : public md_std_rom_device | |
362 | { | |
363 | public: | |
364 | // construction/destruction | |
365 | md_rom_smb2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
366 | ||
367 | // device-level overrides | |
368 | virtual void device_config_complete() { m_shortname = "md_rom_smb2"; } | |
369 | ||
370 | // reading and writing | |
371 | virtual DECLARE_READ16_MEMBER(read_a13); | |
372 | }; | |
373 | ||
374 | // ======================> md_rom_smouse_device | |
375 | ||
376 | class md_rom_smouse_device : public md_std_rom_device | |
377 | { | |
378 | public: | |
379 | // construction/destruction | |
380 | md_rom_smouse_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
381 | ||
382 | // device-level overrides | |
383 | virtual void device_config_complete() { m_shortname = "md_rom_smouse"; } | |
384 | ||
385 | // reading and writing | |
386 | virtual DECLARE_READ16_MEMBER(read); | |
387 | }; | |
388 | ||
389 | ||
390 | // ======================> md_rom_soulb_device | |
391 | ||
392 | class md_rom_soulb_device : public md_std_rom_device | |
393 | { | |
394 | public: | |
395 | // construction/destruction | |
396 | md_rom_soulb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
397 | ||
398 | // device-level overrides | |
399 | virtual void device_config_complete() { m_shortname = "md_rom_soulb"; } | |
400 | ||
401 | // reading and writing | |
402 | virtual DECLARE_READ16_MEMBER(read); | |
403 | }; | |
404 | ||
405 | // ======================> md_rom_squir_device | |
406 | ||
407 | class md_rom_squir_device : public md_std_rom_device | |
408 | { | |
409 | public: | |
410 | // construction/destruction | |
411 | md_rom_squir_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
412 | ||
413 | // device-level overrides | |
414 | virtual void device_start(); | |
415 | virtual void device_config_complete() { m_shortname = "md_rom_squir"; } | |
416 | ||
417 | // reading and writing | |
418 | virtual DECLARE_READ16_MEMBER(read); | |
419 | virtual DECLARE_WRITE16_MEMBER(write); | |
420 | ||
421 | private: | |
422 | UINT16 m_latch; | |
423 | }; | |
424 | ||
425 | // ======================> md_rom_topf_device | |
426 | ||
427 | class md_rom_topf_device : public md_std_rom_device | |
428 | { | |
429 | public: | |
430 | // construction/destruction | |
431 | md_rom_topf_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
432 | ||
433 | // device-level overrides | |
434 | virtual void device_start(); | |
435 | virtual void device_config_complete() { m_shortname = "md_rom_topf"; } | |
436 | ||
437 | // reading and writing | |
438 | virtual DECLARE_READ16_MEMBER(read); | |
439 | virtual DECLARE_WRITE16_MEMBER(write); | |
440 | ||
441 | private: | |
442 | UINT16 m_latch; | |
443 | UINT8 m_bank[3]; | |
444 | }; | |
445 | ||
446 | // ======================> md_rom_radica_device | |
447 | ||
448 | class md_rom_radica_device : public md_std_rom_device | |
449 | { | |
450 | public: | |
451 | // construction/destruction | |
452 | md_rom_radica_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
453 | ||
454 | // device-level overrides | |
455 | virtual void device_start(); | |
456 | virtual void device_config_complete() { m_shortname = "md_rom_radica"; } | |
457 | ||
458 | // reading and writing | |
459 | virtual DECLARE_READ16_MEMBER(read); | |
460 | virtual DECLARE_READ16_MEMBER(read_a13); | |
461 | ||
462 | private: | |
463 | UINT8 m_bank; | |
464 | }; | |
465 | ||
466 | ||
467 | ||
468 | // device type definition | |
469 | extern const device_type MD_STD_ROM; | |
470 | extern const device_type MD_ROM_SRAM; | |
471 | extern const device_type MD_ROM_FRAM; | |
472 | extern const device_type MD_ROM_BEGGAR; | |
473 | extern const device_type MD_ROM_BUGSLIFE; | |
474 | extern const device_type MD_ROM_CHINF3; | |
475 | extern const device_type MD_ROM_ELFWOR; | |
476 | extern const device_type MD_ROM_KOF98; | |
477 | extern const device_type MD_ROM_KOF99; | |
478 | extern const device_type MD_ROM_LION2; | |
479 | extern const device_type MD_ROM_LION3; | |
480 | extern const device_type MD_ROM_MCPIR; | |
481 | extern const device_type MD_ROM_MJLOV; | |
482 | extern const device_type MD_ROM_POKESTAD; | |
483 | extern const device_type MD_ROM_REALTEC; | |
484 | extern const device_type MD_ROM_REDCL; | |
485 | extern const device_type MD_ROM_RX3; | |
486 | extern const device_type MD_ROM_SBUBL; | |
487 | extern const device_type MD_ROM_SMB; | |
488 | extern const device_type MD_ROM_SMB2; | |
489 | extern const device_type MD_ROM_SMOUSE; | |
490 | extern const device_type MD_ROM_SOULB; | |
491 | extern const device_type MD_ROM_SSF2; | |
492 | extern const device_type MD_ROM_SQUIR; | |
493 | extern const device_type MD_ROM_TOPF; | |
494 | extern const device_type MD_ROM_RADICA; | |
495 | ||
496 | // this are currently unused... protection is directly patched out! | |
497 | extern const device_type MD_ROM_MULAN; | |
498 | extern const device_type MD_ROM_POKE; | |
499 | extern const device_type MD_ROM_POKE2; | |
500 | ||
501 | #endif |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
r0 | r20696 | |
---|---|---|
1 | /*********************************************************************************************************** | |
2 | ||
3 | ||
4 | MegaDrive / Genesis J-Cart (+SEPROM) emulation | |
5 | ||
6 | ||
7 | i2c games mapping table: | |
8 | ||
9 | game name | SDA_IN | SDA_OUT | SCL | SIZE_MASK | PAGE_MASK | | |
10 | ----------------------------------|------------|------------|------------|----------------|-----------| | |
11 | Micro Machines 2 | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x03ff (24C08) | 0x0f | | |
12 | Micro Machines Military | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x03ff (24C08) | 0x0f | | |
13 | Micro Machines 96 | 0x380001-7 | 0x300000-0*| 0x300000-1*| 0x07ff (24C16) | 0x0f | | |
14 | ----------------------------------|------------|------------|------------|----------------|-----------| | |
15 | ||
16 | * Notes: check these | |
17 | ||
18 | ||
19 | TODO: proper SEPROM emulation, still not worked on (just hooked up the I2C device) | |
20 | ||
21 | ***********************************************************************************************************/ | |
22 | ||
23 | ||
24 | ||
25 | #include "emu.h" | |
26 | #include "machine/md_jcart.h" | |
27 | ||
28 | ||
29 | //------------------------------------------------- | |
30 | // md_rom_device - constructor | |
31 | //------------------------------------------------- | |
32 | ||
33 | const device_type MD_JCART = &device_creator<md_jcart_device>; | |
34 | const device_type MD_SEPROM_CODEMAST = &device_creator<md_seprom_codemast_device>; | |
35 | const device_type MD_SEPROM_MM96 = &device_creator<md_seprom_mm96_device>; | |
36 | ||
37 | // Sampras, Super Skidmarks? | |
38 | md_jcart_device::md_jcart_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) | |
39 | : device_t(mconfig, type, name, tag, owner, clock), | |
40 | device_md_cart_interface( mconfig, *this ), | |
41 | m_jcart3(*this, "JCART3"), | |
42 | m_jcart4(*this, "JCART4") | |
43 | { | |
44 | } | |
45 | ||
46 | md_jcart_device::md_jcart_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
47 | : device_t(mconfig, MD_JCART, "MD J-Cart games", tag, owner, clock), | |
48 | device_md_cart_interface( mconfig, *this ), | |
49 | m_jcart3(*this, "JCART3"), | |
50 | m_jcart4(*this, "JCART4") | |
51 | { | |
52 | } | |
53 | ||
54 | // Micro Machines 2, Micro Machines Military | |
55 | md_seprom_codemast_device::md_seprom_codemast_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) | |
56 | : md_jcart_device(mconfig, type, name, tag, owner, clock), | |
57 | m_i2cmem(*this, "i2cmem") | |
58 | { | |
59 | } | |
60 | ||
61 | md_seprom_codemast_device::md_seprom_codemast_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
62 | : md_jcart_device(mconfig, MD_SEPROM_CODEMAST, "MD J-Cart games + SEPROM", tag, owner, clock), | |
63 | m_i2cmem(*this, "i2cmem") | |
64 | { | |
65 | } | |
66 | ||
67 | // Micro Machines 96 | |
68 | md_seprom_mm96_device::md_seprom_mm96_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) | |
69 | : md_seprom_codemast_device(mconfig, MD_SEPROM_MM96, "MD Micro Machine 96", tag, owner, clock) | |
70 | { | |
71 | } | |
72 | ||
73 | ||
74 | //------------------------------------------------- | |
75 | // SERIAL I2C DEVICE | |
76 | //------------------------------------------------- | |
77 | ||
78 | static const i2cmem_interface md_24c08_i2cmem_interface = | |
79 | { | |
80 | I2CMEM_SLAVE_ADDRESS, 0, 0x400 | |
81 | }; | |
82 | ||
83 | static const i2cmem_interface md_24c16a_i2cmem_interface = | |
84 | { | |
85 | I2CMEM_SLAVE_ADDRESS, 0, 0x800 | |
86 | }; | |
87 | ||
88 | // MD_SEPROM_CODEMAST | |
89 | MACHINE_CONFIG_FRAGMENT( md_i2c_24c08 ) | |
90 | MCFG_I2CMEM_ADD("i2cmem", md_24c08_i2cmem_interface) | |
91 | MACHINE_CONFIG_END | |
92 | ||
93 | // MD_SEPROM_MM96 | |
94 | MACHINE_CONFIG_FRAGMENT( md_i2c_24c16a ) | |
95 | MCFG_I2CMEM_ADD("i2cmem", md_24c16a_i2cmem_interface) | |
96 | MACHINE_CONFIG_END | |
97 | ||
98 | ||
99 | //------------------------------------------------- | |
100 | // machine_config_additions - device-specific | |
101 | // machine configurations | |
102 | //------------------------------------------------- | |
103 | ||
104 | machine_config_constructor md_seprom_codemast_device::device_mconfig_additions() const | |
105 | { | |
106 | return MACHINE_CONFIG_NAME( md_i2c_24c08 ); | |
107 | } | |
108 | ||
109 | machine_config_constructor md_seprom_mm96_device::device_mconfig_additions() const | |
110 | { | |
111 | return MACHINE_CONFIG_NAME( md_i2c_24c16a ); | |
112 | } | |
113 | ||
114 | ||
115 | static INPUT_PORTS_START( jcart_ipt ) | |
116 | ||
117 | PORT_START("JCART3") /* Joypad 3 on J-Cart (3 button + start) */ | |
118 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) | |
119 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) | |
120 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) | |
121 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) | |
122 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 B") | |
123 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_NAME("P3 C") | |
124 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 A") | |
125 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(3) | |
126 | ||
127 | PORT_START("JCART4") /* Joypad 4 on J-Cart (3 button + start) */ | |
128 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) | |
129 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) | |
130 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) | |
131 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) | |
132 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_NAME("P4 B") | |
133 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_NAME("P4 C") | |
134 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_NAME("P4 A") | |
135 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START ) PORT_PLAYER(4) | |
136 | ||
137 | INPUT_PORTS_END | |
138 | ||
139 | ioport_constructor md_jcart_device::device_input_ports() const | |
140 | { | |
141 | return INPUT_PORTS_NAME( jcart_ipt ); | |
142 | } | |
143 | ||
144 | ||
145 | void md_jcart_device::device_start() | |
146 | { | |
147 | m_jcart_io_data[0] = 0; | |
148 | m_jcart_io_data[1] = 0; | |
149 | save_item(NAME(m_jcart_io_data)); | |
150 | } | |
151 | ||
152 | void md_seprom_codemast_device::device_start() | |
153 | { | |
154 | m_i2c_mem = 0; | |
155 | m_i2c_clk = 0; | |
156 | m_jcart_io_data[0] = 0; | |
157 | m_jcart_io_data[1] = 0; | |
158 | save_item(NAME(m_i2c_mem)); | |
159 | save_item(NAME(m_i2c_clk)); | |
160 | save_item(NAME(m_jcart_io_data)); | |
161 | } | |
162 | ||
163 | ||
164 | /*------------------------------------------------- | |
165 | mapper specific handlers | |
166 | -------------------------------------------------*/ | |
167 | ||
168 | /*------------------------------------------------- | |
169 | J-CART ONLY (Pete Sampras Tennis) | |
170 | -------------------------------------------------*/ | |
171 | ||
172 | READ16_MEMBER(md_jcart_device::read) | |
173 | { | |
174 | if (offset == 0x38fffe/2) | |
175 | { | |
176 | UINT8 joy[2]; | |
177 | ||
178 | if (m_jcart_io_data[0] & 0x40) | |
179 | { | |
180 | joy[0] = m_jcart3->read_safe(0); | |
181 | joy[1] = m_jcart4->read_safe(0); | |
182 | return (m_jcart_io_data[0] & 0x40) | joy[0] | (joy[1] << 8); | |
183 | } | |
184 | else | |
185 | { | |
186 | joy[0] = ((m_jcart3->read_safe(0) & 0xc0) >> 2) | (m_jcart3->read_safe(0) & 0x03); | |
187 | joy[1] = ((m_jcart4->read_safe(0) & 0xc0) >> 2) | (m_jcart4->read_safe(0) & 0x03); | |
188 | return (m_jcart_io_data[0] & 0x40) | joy[0] | (joy[1] << 8); | |
189 | } | |
190 | } | |
191 | return m_rom[offset]; | |
192 | } | |
193 | ||
194 | WRITE16_MEMBER(md_jcart_device::write) | |
195 | { | |
196 | if (offset == 0x38fffe/2) | |
197 | { | |
198 | m_jcart_io_data[0] = (data & 1) << 6; | |
199 | m_jcart_io_data[1] = (data & 1) << 6; | |
200 | } | |
201 | } | |
202 | ||
203 | /*------------------------------------------------- | |
204 | J-CART + SEPROM | |
205 | -------------------------------------------------*/ | |
206 | ||
207 | READ16_MEMBER(md_seprom_codemast_device::read) | |
208 | { | |
209 | if (offset == 0x380000/2) | |
210 | { | |
211 | m_i2c_mem = i2cmem_sda_read(m_i2cmem); | |
212 | return (m_i2c_mem & 1) << 7; | |
213 | } | |
214 | if (offset == 0x38fffe/2) | |
215 | { | |
216 | UINT8 joy[2]; | |
217 | ||
218 | if (m_jcart_io_data[0] & 0x40) | |
219 | { | |
220 | joy[0] = m_jcart3->read_safe(0); | |
221 | joy[1] = m_jcart4->read_safe(0); | |
222 | return (m_jcart_io_data[0] & 0x40) | joy[0] | (joy[1] << 8); | |
223 | } | |
224 | else | |
225 | { | |
226 | joy[0] = ((m_jcart3->read_safe(0) & 0xc0) >> 2) | (m_jcart3->read_safe(0) & 0x03); | |
227 | joy[1] = ((m_jcart4->read_safe(0) & 0xc0) >> 2) | (m_jcart4->read_safe(0) & 0x03); | |
228 | return (m_jcart_io_data[0] & 0x40) | joy[0] | (joy[1] << 8); | |
229 | } | |
230 | } | |
231 | return m_rom[offset]; | |
232 | } | |
233 | ||
234 | WRITE16_MEMBER(md_seprom_codemast_device::write) | |
235 | { | |
236 | if (offset == 0x380000/2) | |
237 | { | |
238 | m_i2c_clk = BIT(data, 9); | |
239 | m_i2c_mem = BIT(data, 8); | |
240 | i2cmem_scl_write(m_i2cmem, m_i2c_clk); | |
241 | i2cmem_sda_write(m_i2cmem, m_i2c_mem); | |
242 | } | |
243 | if (offset == 0x38fffe/2) | |
244 | { | |
245 | m_jcart_io_data[0] = (data & 1) << 6; | |
246 | m_jcart_io_data[1] = (data & 1) << 6; | |
247 | } | |
248 | } | |
249 |
Added: svn:eol-style + native Added: svn:mime-type + text/plain |
r0 | r20696 | |
---|---|---|
1 | #ifndef __MD_JCART_H | |
2 | #define __MD_JCART_H | |
3 | ||
4 | #include "machine/md_slot.h" | |
5 | #include "machine/i2cmem.h" | |
6 | ||
7 | ||
8 | //************************************************************************** | |
9 | // TYPE DEFINITIONS | |
10 | //************************************************************************** | |
11 | ||
12 | // ======================> md_jcart_device | |
13 | ||
14 | class md_jcart_device : public device_t, | |
15 | public device_md_cart_interface | |
16 | { | |
17 | public: | |
18 | // construction/destruction | |
19 | md_jcart_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); | |
20 | md_jcart_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
21 | ||
22 | // device-level overrides | |
23 | virtual void device_start(); | |
24 | virtual void device_config_complete() { m_shortname = "md_jcart"; } | |
25 | virtual ioport_constructor device_input_ports() const; | |
26 | ||
27 | // reading and writing | |
28 | virtual DECLARE_READ16_MEMBER(read); | |
29 | virtual DECLARE_WRITE16_MEMBER(write); | |
30 | ||
31 | required_ioport m_jcart3; | |
32 | required_ioport m_jcart4; | |
33 | ||
34 | private: | |
35 | UINT8 m_jcart_io_data[2]; | |
36 | }; | |
37 | ||
38 | // ======================> md_seprom_codemast_device | |
39 | ||
40 | class md_seprom_codemast_device : public md_jcart_device | |
41 | { | |
42 | public: | |
43 | // construction/destruction | |
44 | md_seprom_codemast_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); | |
45 | md_seprom_codemast_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
46 | ||
47 | // device-level overrides | |
48 | virtual void device_start(); | |
49 | virtual void device_config_complete() { m_shortname = "md_seprom_codemast"; } | |
50 | virtual machine_config_constructor device_mconfig_additions() const; | |
51 | ||
52 | // reading and writing | |
53 | virtual DECLARE_READ16_MEMBER(read); | |
54 | virtual DECLARE_WRITE16_MEMBER(write); | |
55 | ||
56 | required_device<i2cmem_device> m_i2cmem; | |
57 | ||
58 | private: | |
59 | UINT8 m_jcart_io_data[2]; | |
60 | UINT8 m_i2c_mem, m_i2c_clk; | |
61 | }; | |
62 | ||
63 | // ======================> md_seprom_mm96_device (same read/write as codemast, but different I2C type) | |
64 | ||
65 | class md_seprom_mm96_device : public md_seprom_codemast_device | |
66 | { | |
67 | public: | |
68 | // construction/destruction | |
69 | md_seprom_mm96_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); | |
70 | ||
71 | // device-level overrides | |
72 | virtual void device_config_complete() { m_shortname = "md_seprom_mm96"; } | |
73 | virtual machine_config_constructor device_mconfig_additions() const; | |
74 | }; | |
75 | ||
76 | ||
77 | ||
78 | // device type definition | |
79 | extern const device_type MD_JCART; | |
80 | extern const device_type MD_SEPROM_CODEMAST; | |
81 | extern const device_type MD_SEPROM_MM96; | |
82 | ||
83 | #endif |
Added: svn:eol-style + native Added: svn:mime-type + text/plain |
r0 | r20696 | |
---|---|---|
1 | #ifndef __MD__ | |
2 | #define __MD__ | |
3 | ||
4 | // Temporary include file to handle SVP add-on, until converted to a proper slot device | |
5 | // Afterwards, these classes can be moved back to mess/drivers/megadriv.c! | |
6 | ||
7 | #include "includes/megadriv.h" | |
8 | #include "machine/md_slot.h" | |
9 | ||
10 | class md_cons_state : public md_base_state | |
11 | { | |
12 | public: | |
13 | md_cons_state(const machine_config &mconfig, device_type type, const char *tag) | |
14 | : md_base_state(mconfig, type, tag), | |
15 | m_slotcart(*this, "mdslot") | |
16 | { } | |
17 | ||
18 | emu_timer *m_mess_io_timeout[3]; | |
19 | int m_mess_io_stage[3]; | |
20 | ||
21 | optional_device<md_cart_slot_device> m_slotcart; | |
22 | ||
23 | DECLARE_DRIVER_INIT(mess_md_common); | |
24 | DECLARE_DRIVER_INIT(genesis); | |
25 | DECLARE_DRIVER_INIT(md_eur); | |
26 | DECLARE_DRIVER_INIT(md_jpn); | |
27 | }; | |
28 | ||
29 | class mdsvp_state : public md_cons_state | |
30 | { | |
31 | public: | |
32 | mdsvp_state(const machine_config &mconfig, device_type type, const char *tag) | |
33 | : md_cons_state(mconfig, type, tag) { } | |
34 | ||
35 | UINT8 *m_iram; // IRAM (0-0x7ff) | |
36 | UINT8 *m_dram; // [0x20000]; | |
37 | UINT32 m_pmac_read[6]; // read modes/addrs for PM0-PM5 | |
38 | UINT32 m_pmac_write[6]; // write ... | |
39 | PAIR m_pmc; | |
40 | UINT32 m_emu_status; | |
41 | UINT16 m_XST; // external status, mapped at a15000 and a15002 on 68k side. | |
42 | UINT16 m_XST2; // status of XST (bit1 set when 68k writes to XST) | |
43 | }; | |
44 | ||
45 | class pico_state : public md_cons_state | |
46 | { | |
47 | public: | |
48 | pico_state(const machine_config &mconfig, device_type type, const char *tag) | |
49 | : md_cons_state(mconfig, type, tag), | |
50 | m_picocart(*this, "picoslot") { } | |
51 | ||
52 | optional_device<pico_cart_slot_device> m_picocart; | |
53 | UINT8 m_page_register; | |
54 | }; | |
55 | ||
56 | ||
57 | ||
58 | ADDRESS_MAP_EXTERN( svp_ssp_map, driver_device ); | |
59 | ADDRESS_MAP_EXTERN( svp_ext_map, driver_device ); | |
60 | extern void svp_init(running_machine &machine); | |
61 | extern cpu_device *_svp_cpu; | |
62 | ||
63 | ||
64 | #endif |
Added: svn:mime-type + text/plain Added: svn:eol-style + native |
Previous | 199869 Revisions | Next |