trunk/hash/megadriv.xml
| r21443 | r21444 | |
| 26119 | 26119 | </part> |
| 26120 | 26120 | </software> |
| 26121 | 26121 | |
| 26122 | | <software name="xinqig1" cloneof="xinqig"> |
| 26122 | <software name="beggarp"> |
| 26123 | <description>Beggar Prince (USA)</description> |
| 26124 | <year>2005</year> |
| 26125 | <publisher>Super Fighter Team</publisher> |
| 26126 | <part name="cart" interface="megadriv_cart"> |
| 26127 | <feature name="slot" value="rom_beggar" /> |
| 26128 | <dataarea name="rom" size="4194304"> |
| 26129 | <rom name="beggar prince (unl).bin" size="4194304" crc="f3af46cd" sha1="f481b970756c482d8f408c4bab8902172837e7d8" offset="000000" loadflag="load16_word_swap" /> |
| 26130 | </dataarea> |
| 26131 | </part> |
| 26132 | </software> |
| 26133 | |
| 26134 | <software name="xinqig1" cloneof="beggarp"> |
| 26123 | 26135 | <description>Xin Qi Gai Wang Zi (Chi, Alt)</description> |
| 26124 | 26136 | <year>1996</year> |
| 26125 | 26137 | <publisher>C&E</publisher> |
| r21443 | r21444 | |
| 26131 | 26143 | </part> |
| 26132 | 26144 | </software> |
| 26133 | 26145 | |
| 26134 | | <software name="xinqig"> |
| 26146 | <software name="xinqig" cloneof="beggarp"> |
| 26135 | 26147 | <description>Xin Qi Gai Wang Zi (Chi)</description> |
| 26136 | 26148 | <year>1996</year> |
| 26137 | 26149 | <publisher>C&E</publisher> |
| r21443 | r21444 | |
| 26863 | 26875 | </part> |
| 26864 | 26876 | </software> |
| 26865 | 26877 | |
| 26878 | <software name="smw64"> |
| 26879 | <description>Super Mario World 64</description> |
| 26880 | <year>199?</year> |
| 26881 | <publisher><unknown></publisher> |
| 26882 | <part name="cart" interface="megadriv_cart"> |
| 26883 | <feature name="slot" value="rom_smw64" /> |
| 26884 | <dataarea name="rom" size="1048576"> |
| 26885 | <rom name="super mario world 64 (unl).bin" size="1048576" crc="e7ac4161" sha1="2ccf970fffd173f1984e69617c330a8f297f3481" offset="000000" loadflag="load16_word_swap" /> |
| 26886 | </dataarea> |
| 26887 | </part> |
| 26888 | </software> |
| 26889 | |
| 26866 | 26890 | <software name="redcliff"> |
| 26867 | 26891 | <description>The Battle of Red Cliffs - Romance of the Three Kingdoms</description> |
| 26868 | 26892 | <year>199?</year> |
| r21443 | r21444 | |
| 27300 | 27324 | </part> |
| 27301 | 27325 | </software> |
| 27302 | 27326 | |
| 27327 | <software name="chipndal"> |
| 27328 | <description>Chip 'n Dale Rescue Rangers (Rus)</description> |
| 27329 | <year>199?</year> |
| 27330 | <publisher><unknown></publisher> |
| 27331 | <part name="cart" interface="megadriv_cart"> |
| 27332 | <dataarea name="rom" size="468616"> |
| 27333 | <rom name="chip and dale rescue rangers (unl).bin" size="468616" crc="09614862" sha1="d58c3b171ce88638d15df681670a8eb5725210a4" offset="000000" loadflag="load16_word_swap" /> |
| 27334 | </dataarea> |
| 27335 | </part> |
| 27336 | </software> |
| 27337 | |
| 27338 | <software name="chipndl2"> |
| 27339 | <description>Chip 'n Dale Rescue Rangers 2 (Rus)</description> |
| 27340 | <year>199?</year> |
| 27341 | <publisher><unknown></publisher> |
| 27342 | <part name="cart" interface="megadriv_cart"> |
| 27343 | <dataarea name="rom" size="616952"> |
| 27344 | <rom name="chip and dale rescue rangers 2 (unl).bin" size="616952" crc="51eebddc" sha1="21d62ac2307147d733141e22399bb04616f977df" offset="000000" loadflag="load16_word_swap" /> |
| 27345 | </dataarea> |
| 27346 | </part> |
| 27347 | </software> |
| 27348 | |
| 27303 | 27349 | <software name="commconq"> |
| 27304 | 27350 | <description>Command & Conquer (Prototype)</description> |
| 27305 | 27351 | <year>199?</year> |
| r21443 | r21444 | |
| 27344 | 27390 | </part> |
| 27345 | 27391 | </software> |
| 27346 | 27392 | |
| 27393 | <software name="darkwing"> |
| 27394 | <description>Darkwing Duck (Rus)</description> |
| 27395 | <year>199?</year> |
| 27396 | <publisher><unknown></publisher> |
| 27397 | <part name="cart" interface="megadriv_cart"> |
| 27398 | <dataarea name="rom" size="644592"> |
| 27399 | <rom name="darkwing duck (unl).bin" size="644592" crc="922d49ff" sha1="ae238741113de481147ab20baee74d9c723453b5" offset="000000" loadflag="load16_word_swap" /> |
| 27400 | </dataarea> |
| 27401 | </part> |
| 27402 | </software> |
| 27403 | |
| 27347 | 27404 | <software name="deathcal"> |
| 27348 | 27405 | <description>Death Caliber (Rus)</description> |
| 27349 | 27406 | <year>199?</year> |
| r21443 | r21444 | |
| 27390 | 27447 | </part> |
| 27391 | 27448 | </software> |
| 27392 | 27449 | |
| 27450 | <software name="dbfb"> |
| 27451 | <description>Dragon Ball Final Bout (Chi?)</description> |
| 27452 | <year>1998</year> |
| 27453 | <publisher><unknown></publisher> |
| 27454 | <part name="cart" interface="megadriv_cart"> |
| 27455 | <dataarea name="rom" size="2097152"> |
| 27456 | <rom name="dragon ball final bout (unl).bin" size="2097152" crc="63847005" sha1="6014cbf37fbabc51df581f7a93a1f8df09a66665" offset="000000" loadflag="load16_word_swap" /> |
| 27457 | </dataarea> |
| 27458 | </part> |
| 27459 | </software> |
| 27460 | |
| 27461 | <software name="felix"> |
| 27462 | <description>Felix the Cat (Rus)</description> |
| 27463 | <year>199?</year> |
| 27464 | <publisher><unknown></publisher> |
| 27465 | <part name="cart" interface="megadriv_cart"> |
| 27466 | <dataarea name="rom" size="737528"> |
| 27467 | <rom name="felix the cat (unl).bin" size="737528" crc="90c4655c" sha1="6954e0c76a3585d74c7394b574d8e01cf4edb577" offset="000000" loadflag="load16_word_swap" /> |
| 27468 | </dataarea> |
| 27469 | </part> |
| 27470 | </software> |
| 27471 | |
| 27393 | 27472 | <software name="fifa2k2" cloneof="wcs2"> |
| 27394 | 27473 | <description>FIFA World Cup 2002 (Rus)</description> |
| 27395 | 27474 | <year>199?</year> |
| r21443 | r21444 | |
| 27684 | 27763 | <info name="alt_title" value="Mario 3 Вокруг света"/> |
| 27685 | 27764 | <part name="cart" interface="megadriv_cart"> |
| 27686 | 27765 | <dataarea name="rom" size="2097152"> |
| 27687 | | <rom name="mario 3 (unl).bin" size="2097152" crc="69f5b02f" sha1="7c2ebe7c88503bc719d5bcecae183619a7be503c" offset="000000" loadflag="load16_word_swap" /> |
| 27766 | <rom name="mario 3 (unl)[a1].bin" size="2097152" crc="6f630ebd" sha1="167f17f3a9d24f5d3ed1fbf7d7310fae53015258" offset="000000" loadflag="load16_word_swap" /> |
| 27688 | 27767 | </dataarea> |
| 27689 | 27768 | </part> |
| 27690 | 27769 | </software> |
| 27691 | 27770 | |
| 27692 | | <software name="mario4"> |
| 27693 | | <description>Mario 4 - Kosmicheskaya Odissyeya (Rus)</description> |
| 27771 | <software name="mario3d" cloneof="mario3"> |
| 27772 | <description>Mario 3 - Vokrug Sveta (Rus, Demo?)</description> |
| 27694 | 27773 | <year>199?</year> |
| 27695 | 27774 | <publisher><unknown></publisher> |
| 27696 | | <info name="alt_title" value="Mario 4 Космическая одиссея"/> |
| 27775 | <info name="alt_title" value="Mario 3 Вокруг света"/> |
| 27697 | 27776 | <part name="cart" interface="megadriv_cart"> |
| 27698 | 27777 | <dataarea name="rom" size="2097152"> |
| 27699 | | <rom name="mario 4 (unl).bin" size="2097152" crc="96b0ecd9" sha1="6c9444268413b76d698ea432cbceb4cdc9a6cfaf" offset="000000" loadflag="load16_word_swap" /> |
| 27778 | <rom name="mario 3 (unl).bin" size="2097152" crc="69f5b02f" sha1="7c2ebe7c88503bc719d5bcecae183619a7be503c" offset="000000" loadflag="load16_word_swap" /> |
| 27700 | 27779 | </dataarea> |
| 27701 | 27780 | </part> |
| 27702 | 27781 | </software> |
| 27703 | 27782 | |
| 27704 | | <!-- Needs emulation of the protection. --> |
| 27705 | | <software name="smario64" supported="no"> |
| 27706 | | <description>Super Mario World 64</description> |
| 27783 | <software name="mario4"> |
| 27784 | <description>Mario 4 - Kosmicheskaya Odissyeya (Rus)</description> |
| 27707 | 27785 | <year>199?</year> |
| 27708 | 27786 | <publisher><unknown></publisher> |
| 27787 | <info name="alt_title" value="Mario 4 Космическая одиссея"/> |
| 27709 | 27788 | <part name="cart" interface="megadriv_cart"> |
| 27710 | | <dataarea name="rom" size="1048576"> |
| 27711 | | <rom name="super mario world 64 (unl).bin" size="1048576" crc="e7ac4161" sha1="2ccf970fffd173f1984e69617c330a8f297f3481" offset="000000" loadflag="load16_word_swap" /> |
| 27789 | <dataarea name="rom" size="2097152"> |
| 27790 | <rom name="mario 4 (unl).bin" size="2097152" crc="96b0ecd9" sha1="6c9444268413b76d698ea432cbceb4cdc9a6cfaf" offset="000000" loadflag="load16_word_swap" /> |
| 27712 | 27791 | </dataarea> |
| 27713 | 27792 | </part> |
| 27714 | 27793 | </software> |
| 27715 | 27794 | |
| 27716 | | <!-- This can be removed when protected version is emulated correctly --> |
| 27717 | | <software name="smario64h" cloneof="smario64"> |
| 27718 | | <description>Super Mario World 64 (Hacked Protection)</description> |
| 27719 | | <year>199?</year> |
| 27720 | | <publisher><unknown></publisher> |
| 27721 | | <part name="cart" interface="megadriv_cart"> |
| 27722 | | <dataarea name="rom" size="1048576"> |
| 27723 | | <rom name="super mario world 64 (hacked).bin" size="1048576" crc="a20f98aa" sha1="47fd007173419906ecdc7b0efc7d49f42de70c91" offset="000000" loadflag="load16_word_swap" /> |
| 27724 | | </dataarea> |
| 27725 | | </part> |
| 27726 | | </software> |
| 27727 | | |
| 27728 | 27795 | <software name="mgs" cloneof="crkdown"> |
| 27729 | 27796 | <description>Metal Gear Solid (Rus)</description> |
| 27730 | 27797 | <year>199?</year> |
| r21443 | r21444 | |
| 27880 | 27947 | </part> |
| 27881 | 27948 | </software> |
| 27882 | 27949 | |
| 27950 | <software name="samspir2" cloneof="samsho"> |
| 27951 | <description>Samurai Spirits II (Pirate)</description> |
| 27952 | <year>199?</year> |
| 27953 | <publisher><unknown></publisher> |
| 27954 | <part name="cart" interface="megadriv_cart"> |
| 27955 | <dataarea name="rom" size="2097152"> |
| 27956 | <rom name="samurai spirits ii (unl).bin" size="2097152" crc="2942f180" sha1="fe5a6a28542a313f142ba938956fd43187834805" offset="000000" loadflag="load16_word_swap" /> |
| 27957 | </dataarea> |
| 27958 | </part> |
| 27959 | </software> |
| 27960 | |
| 27883 | 27961 | <software name="shrek" cloneof="yogibear"> |
| 27884 | 27962 | <description>Shrek (Rus)</description> |
| 27885 | 27963 | <year>199?</year> |
trunk/src/mess/machine/md_rom.c
| r21443 | r21444 | |
| 27 | 27 | const device_type MD_ROM_SSF2 = &device_creator<md_rom_ssf2_device>; |
| 28 | 28 | const device_type MD_ROM_BUGSLIFE = &device_creator<md_rom_bugslife_device>; |
| 29 | 29 | const device_type MD_ROM_SMOUSE = &device_creator<md_rom_smouse_device>; |
| 30 | const device_type MD_ROM_SMW64 = &device_creator<md_rom_smw64_device>; |
| 30 | 31 | const device_type MD_ROM_SMB = &device_creator<md_rom_smb_device>; |
| 31 | 32 | const device_type MD_ROM_SMB2 = &device_creator<md_rom_smb2_device>; |
| 32 | 33 | const device_type MD_ROM_SBUBL = &device_creator<md_rom_sbubl_device>; |
| r21443 | r21444 | |
| 101 | 102 | { |
| 102 | 103 | } |
| 103 | 104 | |
| 105 | md_rom_smw64_device::md_rom_smw64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 106 | : md_std_rom_device(mconfig, MD_ROM_SMW64, "MD Super Mario World 64", tag, owner, clock) |
| 107 | { |
| 108 | } |
| 109 | |
| 104 | 110 | md_rom_sbubl_device::md_rom_sbubl_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 105 | 111 | : md_std_rom_device(mconfig, MD_ROM_SBUBL, "MD Super Bubble Bobble", tag, owner, clock) |
| 106 | 112 | { |
| r21443 | r21444 | |
| 253 | 259 | save_item(NAME(m_latch)); |
| 254 | 260 | } |
| 255 | 261 | |
| 262 | void md_rom_smw64_device::device_start() |
| 263 | { |
| 264 | m_latch0 = 0xf; |
| 265 | m_latch1 = 0xf; |
| 266 | memset(m_reg, 0, sizeof(m_reg)); |
| 267 | memset(m_ctrl, 0, sizeof(m_ctrl)); |
| 268 | |
| 269 | save_item(NAME(m_latch0)); |
| 270 | save_item(NAME(m_latch1)); |
| 271 | save_item(NAME(m_reg)); |
| 272 | save_item(NAME(m_ctrl)); |
| 273 | } |
| 274 | |
| 256 | 275 | void md_rom_topf_device::device_start() |
| 257 | 276 | { |
| 258 | 277 | m_latch = 0; |
| r21443 | r21444 | |
| 818 | 837 | } |
| 819 | 838 | |
| 820 | 839 | /*------------------------------------------------- |
| 840 | SUPER MARIO WORLD 64 |
| 841 | -------------------------------------------------*/ |
| 842 | |
| 843 | READ16_MEMBER(md_rom_smw64_device::read) |
| 844 | { |
| 845 | // 0x000000-0x0fffff: lower 512KB ROM (up to 0x07ffff) + mirror |
| 846 | // 0x600000-0x6fffff: internal hardware (up to 0x67ffff) + mirror |
| 847 | // Namely, |
| 848 | // * 60xxx = bank1 of the upper 512KB ROM |
| 849 | // * 61xxx = bank2 of the upper 512KB ROM |
| 850 | // * 62xxx = alternate 4KB chunks of 0x0000 ~ 0xffff |
| 851 | // * 63xxx = same as 62xxx |
| 852 | // * 64xxx = returns 0x0000 |
| 853 | // * 65xxx = same as 64xxx |
| 854 | // * 66xxx = CTRL/DATA |
| 855 | // * 67xxx = CTRL/DATA |
| 856 | if (offset < 0x100000/2) |
| 857 | return m_rom[offset & 0x3ffff]; |
| 858 | |
| 859 | if ((offset >= 0x600000/2) && (offset < 0x610000/2)) |
| 860 | return m_rom[(m_latch0 * 0x10000)/2 + (offset & 0x7fff)]; |
| 861 | if ((offset >= 0x610000/2) && (offset < 0x620000/2)) |
| 862 | return m_rom[(m_latch1 * 0x10000)/2 + (offset & 0x7fff)]; |
| 863 | |
| 864 | if ((offset >= 0x620000/2) && (offset < 0x640000/2)) |
| 865 | return (offset & 0x1000/2) ? 0x0000 : 0xffff; |
| 866 | if ((offset >= 0x640000/2) && (offset < 0x660000/2)) |
| 867 | return 0x0000; |
| 868 | |
| 869 | if ((offset >= 0x660000/2) && (offset < 0x670000/2)) |
| 870 | { |
| 871 | offset &= 7; |
| 872 | switch (offset) |
| 873 | { |
| 874 | case 0x0: |
| 875 | case 0x2: |
| 876 | case 0x4: |
| 877 | return m_reg[offset/2]; // DATA1, DATA2, DATA3 |
| 878 | case 0x1: |
| 879 | case 0x3: |
| 880 | case 0x5: |
| 881 | return m_reg[offset/2] + 1; // DATA1+1, DATA2+1, DATA3+1 |
| 882 | case 0x6: |
| 883 | return m_reg[2] + 2; // DATA3+2 |
| 884 | case 0x7: |
| 885 | return m_reg[2] + 3; // DATA3+3 |
| 886 | } |
| 887 | } |
| 888 | if ((offset >= 0x670000/2) && (offset < 0x680000/2)) |
| 889 | { |
| 890 | UINT16 data = (m_ctrl[1] & 0x80) ? ((m_ctrl[2] & 0x40) ? (m_reg[4] & m_reg[5]) : (m_reg[4] ^ 0xff)) : 0x0000; |
| 891 | if (offset & 0x1) // odd offset, return lower 7 bits of the above |
| 892 | return data & 0x7f; |
| 893 | else // even offset, return whole data above, but also update the regs if CTRL3 has 0x80 set |
| 894 | { |
| 895 | if (m_ctrl[2] & 0x80) // update regs if CTRL3 has bit7 set |
| 896 | { |
| 897 | if (m_ctrl[2] & 0x20) |
| 898 | m_reg[2] = (m_reg[5] << 2) & 0xfc; // DATA3 |
| 899 | else |
| 900 | m_reg[0] = ((m_reg[4] << 1) ^ m_reg[3]) & 0xfe; // DATA1 |
| 901 | } |
| 902 | return data; |
| 903 | } |
| 904 | } |
| 905 | |
| 906 | return 0xffff; |
| 907 | } |
| 908 | |
| 909 | WRITE16_MEMBER(md_rom_smw64_device::write) |
| 910 | { |
| 911 | // 0x600000-0x6fffff: internal hardware (up to 0x67ffff) + mirror |
| 912 | // Namely, |
| 913 | // * 62xxx/63xxx = unknown/unmapped |
| 914 | // * 65xxx/66xxx = unknown/unmapped |
| 915 | // * remaining ranges = CTRL/DATA |
| 916 | if ((offset >= 0x600000/2) && (offset < 0x610000/2)) |
| 917 | { |
| 918 | if (offset & 1) |
| 919 | { |
| 920 | if ((m_ctrl[0] & 7) == 0) |
| 921 | m_reg[0] = ((m_reg[0] ^ m_reg[3]) ^ data) & 0xfe; // DATA1 |
| 922 | if ((m_ctrl[0] & 7) == 1) |
| 923 | m_reg[1] = data & 0xfe; // DATA2 |
| 924 | if ((m_ctrl[0] & 7) == 7) |
| 925 | m_latch1 = 8 + ((data & 0x1c) >> 2); // ROM BANKSWITCH $61 |
| 926 | m_reg[3] = data; // DATA4 |
| 927 | } |
| 928 | else |
| 929 | m_ctrl[0] = data; // CTRL1 |
| 930 | } |
| 931 | if ((offset >= 0x610000/2) && (offset < 0x620000/2)) |
| 932 | { |
| 933 | if (offset & 1) |
| 934 | m_ctrl[1] = data; // CTRL2 |
| 935 | } |
| 936 | if ((offset >= 0x640000/2) && (offset < 0x650000/2)) |
| 937 | { |
| 938 | if (offset & 1) |
| 939 | m_reg[5] = data; // DATA6 |
| 940 | else |
| 941 | m_reg[4] = data; // DATA5 |
| 942 | } |
| 943 | if ((offset >= 0x670000/2) && (offset < 0x680000/2)) |
| 944 | { |
| 945 | if (!(offset & 1)) |
| 946 | { |
| 947 | m_ctrl[2] = data; // CTRL3 |
| 948 | if (m_ctrl[1] & 0x80) |
| 949 | m_latch0 = 8 + ((data & 0x1c) >> 2); // ROM BANKSWITCH $60 |
| 950 | } |
| 951 | } |
| 952 | } |
| 953 | |
| 954 | /*------------------------------------------------- |
| 821 | 955 | TOP FIGHTER |
| 822 | 956 | -------------------------------------------------*/ |
| 823 | 957 | |
trunk/src/mess/machine/md_rom.h
| r21443 | r21444 | |
| 369 | 369 | virtual DECLARE_READ16_MEMBER(read_a13); |
| 370 | 370 | }; |
| 371 | 371 | |
| 372 | // ======================> md_rom_smw64_device |
| 373 | |
| 374 | class md_rom_smw64_device : public md_std_rom_device |
| 375 | { |
| 376 | public: |
| 377 | // construction/destruction |
| 378 | md_rom_smw64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 379 | |
| 380 | // device-level overrides |
| 381 | virtual void device_start(); |
| 382 | virtual void device_config_complete() { m_shortname = "md_rom_smw64"; } |
| 383 | |
| 384 | // reading and writing |
| 385 | virtual DECLARE_READ16_MEMBER(read); |
| 386 | virtual DECLARE_WRITE16_MEMBER(write); |
| 387 | |
| 388 | private: |
| 389 | UINT32 m_latch0, m_latch1; |
| 390 | UINT16 m_reg[6]; |
| 391 | UINT16 m_ctrl[3]; |
| 392 | }; |
| 393 | |
| 372 | 394 | // ======================> md_rom_smouse_device |
| 373 | 395 | |
| 374 | 396 | class md_rom_smouse_device : public md_std_rom_device |
| r21443 | r21444 | |
| 484 | 506 | extern const device_type MD_ROM_SBUBL; |
| 485 | 507 | extern const device_type MD_ROM_SMB; |
| 486 | 508 | extern const device_type MD_ROM_SMB2; |
| 509 | extern const device_type MD_ROM_SMW64; |
| 487 | 510 | extern const device_type MD_ROM_SMOUSE; |
| 488 | 511 | extern const device_type MD_ROM_SOULB; |
| 489 | 512 | extern const device_type MD_ROM_SSF2; |
| r21443 | r21444 | |
| 491 | 514 | extern const device_type MD_ROM_TOPF; |
| 492 | 515 | extern const device_type MD_ROM_RADICA; |
| 493 | 516 | |
| 494 | | // this are currently unused... protection is directly patched out! |
| 495 | | extern const device_type MD_ROM_MULAN; |
| 496 | | extern const device_type MD_ROM_POKE2; |
| 497 | | |
| 498 | 517 | #endif |