| 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 |