mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
(MESS) nes.c: Fixed remaining known bootleg PCBs (mostly SMB2 FDS conversions) and
improved FFE mappers (I'd be more interested into actually emulating the copier but this is all we got at the moment...) . nw. Also, backing up some wip code for other pcbs that still does not produce any useful result.
This commit is contained in:
parent
6154d88f09
commit
2a6e803a9e
546
hash/nes.xml
546
hash/nes.xml
@ -50999,21 +50999,24 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
|
||||
|
||||
<!-- TC-031 is unknown. Possibly "Bridge", an unreleased proto -->
|
||||
|
||||
<software name="chuugokt" supported="no">
|
||||
<software name="chuugokt" supported="partial">
|
||||
<description>Chuugoku Taitei (Tw)</description>
|
||||
<year>19??</year>
|
||||
<publisher>Sachen</publisher>
|
||||
<info name="serial" value="TC-032"/>
|
||||
<info name="alt_title" value="中國大亨"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="somari" />
|
||||
<feature name="pcb" value="SOMERITEAM-SL-12" />
|
||||
<feature name="slot" value="txrom" />
|
||||
<feature name="pcb" value="NES-TLROM" /> <!-- Original header was mapper 116, but it's not a SOMARI pcb... -->
|
||||
<dataarea name="chr" size="131072">
|
||||
<rom name="chuugoku taitei (asia) (unl).chr" size="131072" crc="d9203c08" sha1="b32ef62e4583b216aea84f7d0da0269c01b61e26" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="262144">
|
||||
<rom name="chuugoku taitei (asia) (unl).prg" size="262144" crc="3acdcc64" sha1="32436a43d3c371ab7aa6bb5165f60ca5c006a60e" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge -->
|
||||
<dataarea name="wram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
@ -63085,25 +63088,6 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="bballfds" supported="no">
|
||||
<description>Baseball (Asia, FDS conversion?)</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="unknown" />
|
||||
<feature name="pcb" value="UNKNOWN" /> <!-- mapper 253?!? -->
|
||||
<dataarea name="prg" size="81920">
|
||||
<rom name="baseball.prg" size="81920" crc="30296e0c" sha1="61ccce33b50ab1d6aab46cb52ee1ecaaaa3fdf0c" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge -->
|
||||
<dataarea name="wram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="maribaby">
|
||||
<description>Mario Baby ~ Bio Miracle Bokutte Upa (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
@ -63171,23 +63155,6 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- FIXME: which board should use this game?? -->
|
||||
<software name="cluclud" supported="no">
|
||||
<description>Clu Clu Land D (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="unknown" />
|
||||
<feature name="pcb" value="UNKNOWN" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="clu clu land d (j) (fds conversion).chr" size="8192" crc="64a75549" sha1="7c950e89e6df0915820fe0c3e6750c085a8aaf83" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="clu clu land d (j) (fds conversion).prg" size="32768" crc="84594123" sha1="54fce5fbfbb3ae47ce3a62f9092c0ff204cf1cec" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dokidoki">
|
||||
<description>Doki Doki Panic (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
@ -63310,38 +63277,6 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="iceclfds" supported="no">
|
||||
<description>Ice Climber (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="nrom" />
|
||||
<feature name="pcb" value="NES-NROM-256" />
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="ice climber (j) (fds conversion).prg" size="32768" crc="d8ec6353" sha1="7409b32043a0d23b5b44b96f14214bef5ba4d9ca" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="icehfds" supported="no">
|
||||
<description>Ice Hockey (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="nrom" />
|
||||
<feature name="pcb" value="NES-NROM-256" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="ice hockey (j) (fds conversion).chr" size="8192" crc="f10fc90a" sha1="1a2a657267de1f5bdf284d1b69ed7d4895dfb281" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="ice hockey (j) (fds conversion).prg" size="32768" crc="c02e5f1f" sha1="5244c2d123e02914590791c9ffc5e4f945d801ff" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="meikyfds">
|
||||
<description>Meikyuu Jiin Dababa (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
@ -63379,22 +63314,6 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="othelfds" supported="no">
|
||||
<description>Othello (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="nrom" />
|
||||
<feature name="pcb" value="NES-NROM-256" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="othello (j) (fds conversion).chr" size="8192" crc="2f7856c8" sha1="4b48c4f4782ab8e13cba6073e3c7e19f51017774" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="othello (j) (fds conversion).prg" size="32768" crc="55976042" sha1="6f7f626d3666c9890b62e64b3b5b40fd65ccc208" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="prowrfds">
|
||||
<description>ProWres - Famicom Wrestling Association (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
@ -63412,6 +63331,269 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2lf" cloneof="smb2fds">
|
||||
<description>Super Mario Bros. 2 (LF36)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2j" />
|
||||
<feature name="pcb" value="BTL-SMB2C" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros. 2 (j) (lf36).chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="81920">
|
||||
<rom name="super mario bros. 2 (j) (lf36).prg" size="81920" crc="25e0b714" sha1="7e7711b911f10b4ef325b7b25a770e1de188fe27" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2k" cloneof="smb2fds">
|
||||
<description>Super Mario Bros. 2 (Kaiser)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="ks7032" />
|
||||
<feature name="pcb" value="UNL-KS7032" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="prg" size="131072">
|
||||
<rom name="super mario bros. 2 (j) (kaiser).prg" size="131072" crc="281326ed" sha1="dc8ddb78cbb575623b701954df951f05e81388ea" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2h" cloneof="smb">
|
||||
<description>Super Mario Bros. 2 (Super Mario Bros. Pirate)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="nrom" />
|
||||
<feature name="pcb" value="NES-NROM-256" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros. (title hack) (unl).chr" size="8192" crc="b5a7524b" sha1="791b1c93d58c5d94df803449a2ce3e118d1adc50" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="super mario bros. (title hack) (unl).prg" size="32768" crc="ae15ebae" sha1="dc5bbe66886c0934c16a9cdedbf474f6bc5215a1" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2m" cloneof="smb">
|
||||
<description>Super Mario Bros Malee 2</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="mmalee2" />
|
||||
<feature name="pcb" value="BTL-MARIO1-MALEE2" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros malee 2 (unl) [u].chr" size="8192" crc="b5a7524b" sha1="791b1c93d58c5d94df803449a2ce3e118d1adc50" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="34816">
|
||||
<rom name="super mario bros malee 2 (unl) [u].prg0" size="32768" crc="ddf910b2" sha1="3977f975b2db0fba6cce8621d7d49a2b86ff2c43" offset="0x0000" status="baddump" />
|
||||
<rom name="super mario bros malee 2 (unl) [u].prg1" size="2048" crc="2ee84bd0" sha1="51239bdc89ee3f1b7c9b17a63bff1fc20a36b244" offset="0x8000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 2k WRAM on cartridge -->
|
||||
<dataarea name="wram" size="2048">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2fdsa" cloneof="smb2fds">
|
||||
<description>Super Mario Bros. 2 (FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2ja" />
|
||||
<feature name="pcb" value="BTL-SMB2A" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros 2 (lost levels) (unl).chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="65536">
|
||||
<rom name="super mario bros 2 (lost levels) (unl).prg" size="65536" crc="bead254c" sha1="167e2b9629edefadea54564accaeceb4c08afc55" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2fdsb" cloneof="smb2fds">
|
||||
<description>Super Mario Bros. 2 (FDS conversion, Alt PCB)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2jb" />
|
||||
<feature name="pcb" value="BTL-SMB2B" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="prg" size="131072">
|
||||
<rom name="super mario bros. (alt levels).prg" size="131072" crc="313491ed" sha1="0ffe5aa3fbee72601bd629849a30379937d170d7" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="tobidfds">
|
||||
<description>Tobidase Daisakusen (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="tobidase" />
|
||||
<feature name="pcb" value="BTL-TOBIDASEDAISAKUSEN" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="prg" size="98304">
|
||||
<rom name="tobidase daisakusen (fds conversion).prg" size="98304" crc="ee82b3ea" sha1="7fcf28158dfb991aa47d35fdec1512a7947c989e" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="vballfdsa" cloneof="volley" supported="no">
|
||||
<description>Volleyball (Asia, FDS conversion, Alt)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2j" />
|
||||
<feature name="pcb" value="UNL-SMB2J" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="volleyball (fds conversion) (unl) [u].chr" size="8192" crc="0101a6fb" sha1="fd7338e3802b897172f0f22e7f5a191bc68dd6d2" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="volleyball (fds conversion) (unl) [u].prg" size="32768" crc="d4fb2cd8" sha1="56cacee106de0116857421081c778ebc9d480aa0" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="zanacfds">
|
||||
<description>Zanac (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher>Whirlwind Manu</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="09034a" />
|
||||
<feature name="pcb" value="UNL-SMB2J" />
|
||||
<dataarea name="prg" size="49152">
|
||||
<rom name="zanac (kaiser) (fds conversion) (unl).prg0" size="32768" crc="e485c52f" sha1="257dffd53691b70b26bd2b6770dd7ca38f2b917a" offset="0x0000" status="baddump" />
|
||||
<rom name="zanac (kaiser) (fds conversion) (unl).prg1" size="16384" crc="bedba7cc" sha1="8d759c768b7e93ca852f107f4ce48c2c979fd618" offset="0x8000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="zanacfdsa" cloneof="zanacfds">
|
||||
<description>Zanac (Asia, FDS conversion, Alt)</description>
|
||||
<year>19??</year>
|
||||
<publisher>Kaiser</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="ks7012" />
|
||||
<feature name="pcb" value="UNL-KS7012" />
|
||||
<dataarea name="prg" size="65536">
|
||||
<rom name="zanac (kaiser) (fds conversion) (unl).prg" size="65536" crc="e912ce65" sha1="a92278c445cf02c88652a608327a48f59fe83979" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge -->
|
||||
<dataarea name="wram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
|
||||
<!-- Are these supposed to work? -->
|
||||
|
||||
|
||||
<software name="bballfds" supported="no">
|
||||
<description>Baseball (Asia, FDS conversion?)</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="unknown" />
|
||||
<feature name="pcb" value="UNKNOWN" /> <!-- mapper 253?!? -->
|
||||
<dataarea name="prg" size="81920">
|
||||
<rom name="baseball.prg" size="81920" crc="30296e0c" sha1="61ccce33b50ab1d6aab46cb52ee1ecaaaa3fdf0c" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge -->
|
||||
<dataarea name="wram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- FIXME: which board should use this game?? -->
|
||||
<software name="cluclud" supported="no">
|
||||
<description>Clu Clu Land D (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="test" />
|
||||
<feature name="pcb" value="UNKNOWN" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="clu clu land d (j) (fds conversion).chr" size="8192" crc="64a75549" sha1="7c950e89e6df0915820fe0c3e6750c085a8aaf83" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="clu clu land d (j) (fds conversion).prg" size="32768" crc="84594123" sha1="54fce5fbfbb3ae47ce3a62f9092c0ff204cf1cec" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="iceclfds" supported="no">
|
||||
<description>Ice Climber (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="nrom" />
|
||||
<feature name="pcb" value="NES-NROM-256" />
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="ice climber (j) (fds conversion).prg" size="32768" crc="d8ec6353" sha1="7409b32043a0d23b5b44b96f14214bef5ba4d9ca" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="icehfds" supported="no">
|
||||
<description>Ice Hockey (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="nrom" />
|
||||
<feature name="pcb" value="NES-NROM-256" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="ice hockey (j) (fds conversion).chr" size="8192" crc="f10fc90a" sha1="1a2a657267de1f5bdf284d1b69ed7d4895dfb281" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="ice hockey (j) (fds conversion).prg" size="32768" crc="c02e5f1f" sha1="5244c2d123e02914590791c9ffc5e4f945d801ff" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="othelfds" supported="no">
|
||||
<description>Othello (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="nrom" />
|
||||
<feature name="pcb" value="NES-NROM-256" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="othello (j) (fds conversion).chr" size="8192" crc="2f7856c8" sha1="4b48c4f4782ab8e13cba6073e3c7e19f51017774" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="othello (j) (fds conversion).prg" size="32768" crc="55976042" sha1="6f7f626d3666c9890b62e64b3b5b40fd65ccc208" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spingpon" supported="no">
|
||||
<description>Smash Ping Pong (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
@ -63495,19 +63677,19 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="tobidfds">
|
||||
<description>Tobidase Daisakusen (Asia, FDS conversion)</description>
|
||||
<software name="smb2fdsc" cloneof="smb2fds" supported="no">
|
||||
<description>Super Mario Bros. 2 (FDS pirate, Alt 3)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="tobidase" />
|
||||
<feature name="pcb" value="BTL-TOBIDASEDAISAKUSEN" />
|
||||
<feature name="slot" value="smb2j" />
|
||||
<feature name="pcb" value="UNL-SMB2J" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="prg" size="98304">
|
||||
<rom name="tobidase daisakusen (fds conversion).prg" size="98304" crc="ee82b3ea" sha1="7fcf28158dfb991aa47d35fdec1512a7947c989e" offset="00000" status="baddump" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros. 2j (unl) [u].chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
<dataarea name="prg" size="81920">
|
||||
<rom name="super mario bros. 2j (unl) [u].prg" size="81920" crc="04f65d2f" sha1="1168f5f0642dc5473c1fa5ff6ca3091cd33da860" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -63563,57 +63745,6 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="vballfdsa" cloneof="volley" supported="no">
|
||||
<description>Volleyball (Asia, FDS conversion, Alt)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2j" />
|
||||
<feature name="pcb" value="UNL-SMB2J" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="volleyball (fds conversion) (unl) [u].chr" size="8192" crc="0101a6fb" sha1="fd7338e3802b897172f0f22e7f5a191bc68dd6d2" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="volleyball (fds conversion) (unl) [u].prg" size="32768" crc="d4fb2cd8" sha1="56cacee106de0116857421081c778ebc9d480aa0" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="zanacfds" supported="no">
|
||||
<description>Zanac (Asia, FDS conversion)</description>
|
||||
<year>19??</year>
|
||||
<publisher>Whirlwind Manu</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2j" />
|
||||
<feature name="pcb" value="UNL-SMB2J" />
|
||||
<dataarea name="prg" size="49152">
|
||||
<rom name="zanac (kaiser) (fds conversion) (unl).prg0" size="32768" crc="e485c52f" sha1="257dffd53691b70b26bd2b6770dd7ca38f2b917a" offset="0x0000" status="baddump" />
|
||||
<rom name="zanac (kaiser) (fds conversion) (unl).prg1" size="16384" crc="bedba7cc" sha1="8d759c768b7e93ca852f107f4ce48c2c979fd618" offset="0x8000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="zanacfdsa" cloneof="zanacfds">
|
||||
<description>Zanac (Asia, FDS conversion, Alt)</description>
|
||||
<year>19??</year>
|
||||
<publisher>Kaiser</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="ks7012" />
|
||||
<feature name="pcb" value="UNL-KS7012" />
|
||||
<dataarea name="prg" size="65536">
|
||||
<rom name="zanac (kaiser) (fds conversion) (unl).prg" size="65536" crc="e912ce65" sha1="a92278c445cf02c88652a608327a48f59fe83979" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge -->
|
||||
<dataarea name="wram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- DR PCJR -->
|
||||
|
||||
@ -69285,129 +69416,6 @@ resulting in tons of glitches? -->
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2fdsa" cloneof="smb2fds">
|
||||
<description>Super Mario Bros. 2 (FDS pirate, Alt)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2ja" />
|
||||
<feature name="pcb" value="BTL-SMB2A" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros 2 (lost levels) (unl).chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="65536">
|
||||
<rom name="super mario bros 2 (lost levels) (unl).prg" size="65536" crc="bead254c" sha1="167e2b9629edefadea54564accaeceb4c08afc55" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2fdsb" cloneof="smb2fds" supported="partial">
|
||||
<description>Super Mario Bros. 2 (FDS pirate, Alt 2)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2jb" />
|
||||
<feature name="pcb" value="BTL-SMB2B" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="prg" size="131072">
|
||||
<rom name="super mario bros. (alt levels).prg" size="131072" crc="313491ed" sha1="0ffe5aa3fbee72601bd629849a30379937d170d7" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2fdsc" cloneof="smb2fds" supported="no">
|
||||
<description>Super Mario Bros. 2 (FDS pirate, Alt 3)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2jc" />
|
||||
<feature name="pcb" value="UNL-SMB2J" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros. 2j (unl) [u].chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="81920">
|
||||
<rom name="super mario bros. 2j (unl) [u].prg" size="81920" crc="04f65d2f" sha1="1168f5f0642dc5473c1fa5ff6ca3091cd33da860" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2lf" cloneof="smb2fds" supported="no">
|
||||
<description>Super Mario Bros. 2 (LF36)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="smb2jc" />
|
||||
<feature name="pcb" value="BTL-SMB2C" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros. 2 (j) (lf36).chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="81920">
|
||||
<rom name="super mario bros. 2 (j) (lf36).prg" size="81920" crc="25e0b714" sha1="7e7711b911f10b4ef325b7b25a770e1de188fe27" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2k" cloneof="smb2fds">
|
||||
<description>Super Mario Bros. 2 (Kaiser)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="ks7032" />
|
||||
<feature name="pcb" value="UNL-KS7032" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="prg" size="131072">
|
||||
<rom name="super mario bros. 2 (j) (kaiser).prg" size="131072" crc="281326ed" sha1="dc8ddb78cbb575623b701954df951f05e81388ea" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2h" cloneof="smb">
|
||||
<description>Super Mario Bros. 2 (Super Mario Bros. Pirate)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="nrom" />
|
||||
<feature name="pcb" value="NES-NROM-256" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros. (title hack) (unl).chr" size="8192" crc="b5a7524b" sha1="791b1c93d58c5d94df803449a2ce3e118d1adc50" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="32768">
|
||||
<rom name="super mario bros. (title hack) (unl).prg" size="32768" crc="ae15ebae" sha1="dc5bbe66886c0934c16a9cdedbf474f6bc5215a1" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="smb2m" cloneof="smb" supported="no">
|
||||
<description>Super Mario Bros Malee 2 (Super Mario Bros. Pirate)</description>
|
||||
<year>19??</year>
|
||||
<publisher><pirate></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="mmalee2" />
|
||||
<feature name="pcb" value="BTL-MARIO1-MALEE2" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<dataarea name="chr" size="8192">
|
||||
<rom name="super mario bros malee 2 (unl) [u].chr" size="8192" crc="b5a7524b" sha1="791b1c93d58c5d94df803449a2ce3e118d1adc50" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="34816">
|
||||
<rom name="super mario bros malee 2 (unl) [u].prg0" size="32768" crc="ddf910b2" sha1="3977f975b2db0fba6cce8621d7d49a2b86ff2c43" offset="0x0000" status="baddump" />
|
||||
<rom name="super mario bros malee 2 (unl) [u].prg1" size="2048" crc="2ee84bd0" sha1="51239bdc89ee3f1b7c9b17a63bff1fc20a36b244" offset="0x8000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 2k WRAM on cartridge -->
|
||||
<dataarea name="wram" size="2048">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- could this be a hack?!? -->
|
||||
<software name="smb3h" cloneof="smb3">
|
||||
<description>Super Mario Bros. 3 (Pirate)</description>
|
||||
|
@ -279,7 +279,7 @@ static SLOT_INTERFACE_START(nes_cart)
|
||||
SLOT_INTERFACE_INTERNAL("smb2j", NES_SMB2J)
|
||||
SLOT_INTERFACE_INTERNAL("smb2ja", NES_SMB2JA)
|
||||
SLOT_INTERFACE_INTERNAL("smb2jb", NES_SMB2JB)
|
||||
SLOT_INTERFACE_INTERNAL("smb2jc", NES_SMB2JC) // really?
|
||||
SLOT_INTERFACE_INTERNAL("09034a", NES_09034A)
|
||||
SLOT_INTERFACE_INTERNAL("tobidase", NES_TOBIDASE) // mapper 120
|
||||
SLOT_INTERFACE_INTERNAL("mmalee2", NES_MMALEE) // mapper 55?
|
||||
SLOT_INTERFACE_INTERNAL("unl_2708", NES_2708) // mapper 103
|
||||
@ -396,6 +396,7 @@ static SLOT_INTERFACE_START(nes_cart)
|
||||
SLOT_INTERFACE_INTERNAL("ffe3", NES_FFE3)
|
||||
SLOT_INTERFACE_INTERNAL("ffe4", NES_FFE4)
|
||||
SLOT_INTERFACE_INTERNAL("ffe8", NES_FFE8)
|
||||
SLOT_INTERFACE_INTERNAL("test", NES_NROM)
|
||||
//
|
||||
SLOT_INTERFACE_INTERNAL("unknown", NES_NROM) // a few pirate dumps uses the wrong mapper...
|
||||
SLOT_INTERFACE_END
|
||||
|
@ -166,7 +166,7 @@ void nes_state::machine_start()
|
||||
space.install_read_handler(0x8000, 0xffff, read8_delegate(FUNC(nes_cart_slot_device::read_h), (nes_cart_slot_device *)m_cartslot));
|
||||
}
|
||||
|
||||
if (m_cartslot->get_pcb_id() == BTL_SMB2JB || m_cartslot->get_pcb_id() == UNL_AC08 || m_cartslot->get_pcb_id() == BTL_SMB2JC)
|
||||
if (m_cartslot->get_pcb_id() == BTL_SMB2JB || m_cartslot->get_pcb_id() == UNL_AC08 || m_cartslot->get_pcb_id() == UNL_SMB2J || m_cartslot->get_pcb_id() == BTL_09034A)
|
||||
{
|
||||
logerror("write_ex installed!\n");
|
||||
space.install_write_handler(0x4020, 0x40ff, write8_delegate(FUNC(nes_cart_slot_device::write_ex), (nes_cart_slot_device *)m_cartslot));
|
||||
|
@ -127,13 +127,18 @@ void nes_karaokestudio_device::pcb_reset()
|
||||
void nes_oekakids_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_latch));
|
||||
save_item(NAME(m_reg));
|
||||
}
|
||||
|
||||
void nes_oekakids_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg32(0);
|
||||
chr8(0, m_chr_source);
|
||||
chr4_0(0, CHRRAM);
|
||||
chr4_4(3, CHRRAM);
|
||||
set_nt_mirroring(PPU_MIRROR_LOW);
|
||||
m_latch = 0;
|
||||
m_reg = 0;
|
||||
}
|
||||
|
||||
void nes_lz93d50_device::device_start()
|
||||
@ -230,13 +235,62 @@ WRITE8_MEMBER(nes_karaokestudio_device::write_h)
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
|
||||
WRITE8_MEMBER(nes_oekakids_device::nt_w)
|
||||
{
|
||||
int page = ((offset & 0xc00) >> 10);
|
||||
|
||||
#if 0
|
||||
if (offset < 0x1000 && (m_latch != (offset & 0x300) >> 8))
|
||||
{
|
||||
m_latch = (offset & 0x300) >> 8;
|
||||
update_chr();
|
||||
}
|
||||
#endif
|
||||
|
||||
m_nt_access[page][offset & 0x3ff] = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(nes_oekakids_device::nt_r)
|
||||
{
|
||||
int page = ((offset & 0xc00) >> 10);
|
||||
|
||||
#if 0
|
||||
if (offset < 0x1000 && (m_latch != (offset & 0x300) >> 8))
|
||||
{
|
||||
m_latch = (offset & 0x300) >> 8;
|
||||
update_chr();
|
||||
}
|
||||
#endif
|
||||
|
||||
return m_nt_access[page][offset & 0x3ff];
|
||||
}
|
||||
|
||||
void nes_oekakids_device::update_chr()
|
||||
{
|
||||
chr4_0(m_reg | m_latch, CHRRAM);
|
||||
chr4_4(m_reg | 0x03, CHRRAM);
|
||||
}
|
||||
|
||||
// this only monitors accesses to $2007 while we would need to monitor accesses to $2006...
|
||||
void nes_oekakids_device::ppu_latch(offs_t offset)
|
||||
{
|
||||
#if 0
|
||||
if ((offset & 0x3000) == 0x2000)
|
||||
{
|
||||
m_latch = (offset & 0x300) >> 8;
|
||||
update_chr();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_oekakids_device::write_h)
|
||||
{
|
||||
LOG_MMC(("oeka kids write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
prg32(data);
|
||||
chr4_0(0x00 | (data & 0x04), CHRRAM);
|
||||
chr4_4(0x03 | (data & 0x04), CHRRAM);
|
||||
m_reg = (data & 0x04);
|
||||
update_chr();
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
@ -34,10 +34,17 @@ public:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual DECLARE_WRITE8_MEMBER(write_h);
|
||||
virtual DECLARE_READ8_MEMBER(nt_r);
|
||||
virtual DECLARE_WRITE8_MEMBER(nt_w);
|
||||
|
||||
virtual void pcb_reset();
|
||||
|
||||
virtual void ppu_latch(offs_t offset);
|
||||
|
||||
// TODO: add oeka kids controller emulation
|
||||
protected:
|
||||
void update_chr();
|
||||
UINT8 m_reg, m_latch;
|
||||
};
|
||||
|
||||
|
||||
|
@ -49,7 +49,7 @@ const device_type NES_WHIRLWIND_2706 = &device_creator<nes_whirl2706_device>;
|
||||
const device_type NES_SMB2J = &device_creator<nes_smb2j_device>;
|
||||
const device_type NES_SMB2JA = &device_creator<nes_smb2ja_device>;
|
||||
const device_type NES_SMB2JB = &device_creator<nes_smb2jb_device>;
|
||||
const device_type NES_SMB2JC = &device_creator<nes_smb2jc_device>;
|
||||
const device_type NES_09034A = &device_creator<nes_09034a_device>;
|
||||
const device_type NES_TOBIDASE = &device_creator<nes_tobidase_device>;
|
||||
const device_type NES_LH32 = &device_creator<nes_lh32_device>;
|
||||
const device_type NES_LH10 = &device_creator<nes_lh10_device>;
|
||||
@ -110,8 +110,8 @@ nes_smb2jb_device::nes_smb2jb_device(const machine_config &mconfig, const char *
|
||||
{
|
||||
}
|
||||
|
||||
nes_smb2jc_device::nes_smb2jc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: nes_nrom_device(mconfig, NES_SMB2JC, "NES Cart Super Mario Bros. 2 Jpn (Alt 3) PCB", tag, owner, clock, "nes_smb2jc", __FILE__)
|
||||
nes_09034a_device::nes_09034a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: nes_nrom_device(mconfig, NES_09034A, "NES Cart 09-034A PCB", tag, owner, clock, "nes_09034a", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
@ -287,13 +287,21 @@ void nes_whirl2706_device::pcb_reset()
|
||||
void nes_smb2j_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_irq_enable));
|
||||
save_item(NAME(m_irq_count));
|
||||
}
|
||||
|
||||
void nes_smb2j_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg32(0);
|
||||
chr8(0, m_chr_source);
|
||||
prg8_89(1);
|
||||
prg8_ab(0);
|
||||
prg8_cd(0);
|
||||
prg8_ef(9);
|
||||
|
||||
m_irq_enable = 0;
|
||||
m_irq_count = 0;
|
||||
}
|
||||
|
||||
void nes_smb2ja_device::device_start()
|
||||
@ -336,29 +344,20 @@ void nes_smb2jb_device::pcb_reset()
|
||||
m_irq_count = 0;
|
||||
}
|
||||
|
||||
void nes_smb2jc_device::device_start()
|
||||
void nes_09034a_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_irq_enable));
|
||||
save_item(NAME(m_irq_count));
|
||||
save_item(NAME(m_prg_base));
|
||||
save_item(NAME(m_reg));
|
||||
}
|
||||
|
||||
void nes_smb2jc_device::pcb_reset()
|
||||
void nes_09034a_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg32(0);
|
||||
chr8(0, m_chr_source);
|
||||
prg8_89(1);
|
||||
prg8_ab(0);
|
||||
prg8_cd(0);
|
||||
prg8_ef(9);
|
||||
|
||||
m_irq_enable = 0;
|
||||
m_irq_count = 0;
|
||||
m_prg_base = 1;
|
||||
m_reg = 0;
|
||||
}
|
||||
|
||||
|
||||
void nes_tobidase_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
@ -889,103 +888,18 @@ READ8_MEMBER(nes_whirl2706_device::read_m)
|
||||
Games: Super Mario Bros. 2 Pirate (LF36)
|
||||
|
||||
iNES: mapper 43
|
||||
|
||||
This is actually strange. There is one variant of
|
||||
mappers 43 games which maps the PRG linearly from
|
||||
0x5000 to 0xffff and then can switch the upper 32K
|
||||
part (0x8000-0xffff). These are games with 80K of
|
||||
PRG (SMB2 conversions only? also the Zanac FDS even
|
||||
if has smaller PRG?).
|
||||
Then there is a second variant (Volleyball FDS) with
|
||||
only 32K of PRG which do not switches PRG (no 0x4200
|
||||
writes) and probably mirrors lower 12K in 0x5000-0x7fff.
|
||||
The Zanac FDS conversion might not belong to this
|
||||
board...
|
||||
|
||||
In any case, for the moment we split the two variants
|
||||
in smb2j and smb2jc!
|
||||
|
||||
In MESS: Unsupported? The only image I found is not working
|
||||
(not even in NEStopia). Partially supported the
|
||||
smb2jc variant (to be investigated...)
|
||||
|
||||
In MESS: Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
/* This PCB can map PRG RAM to 0x8000-0xdfff like MMC5 */
|
||||
void nes_smb2j_device::prgram_bank8_x(int start, int bank)
|
||||
{
|
||||
assert(start < 4);
|
||||
assert(bank >= 0);
|
||||
|
||||
bank &= (m_prgram_size / 0x2000) - 1;
|
||||
|
||||
// PRG RAM is mapped after PRG ROM
|
||||
m_prg_bank[start] = m_prg_chunks + bank;
|
||||
m_prg_bank_mem[start]->set_entry(m_prg_bank[start]);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_smb2j_device::write_h)
|
||||
{
|
||||
int bank = (((offset >> 8) & 0x03) * 0x20) + (offset & 0x1f);
|
||||
|
||||
LOG_MMC(("smb2j_w, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
set_nt_mirroring((offset & 0x2000) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
|
||||
if (offset & 0x0800)
|
||||
{
|
||||
if (offset & 0x1000)
|
||||
{
|
||||
if (bank * 2 >= m_prg_chunks)
|
||||
{
|
||||
prgram_bank8_x(2, 0);
|
||||
prgram_bank8_x(3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_MMC(("smb2j_w, selecting upper 16KB bank of #%02x\n", bank));
|
||||
prg16_cdef(2 * bank + 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bank * 2 >= m_prg_chunks)
|
||||
{
|
||||
prgram_bank8_x(0, 0);
|
||||
prgram_bank8_x(1, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_MMC(("smb2j_w, selecting lower 16KB bank of #%02x\n", bank));
|
||||
prg16_89ab(2 * bank);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bank * 2 >= m_prg_chunks)
|
||||
{
|
||||
prgram_bank8_x(0, 0);
|
||||
prgram_bank8_x(1, 0);
|
||||
prgram_bank8_x(2, 0);
|
||||
prgram_bank8_x(3, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_MMC(("smb2j_w, selecting 32KB bank #%02x\n", bank));
|
||||
prg32(bank);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void nes_smb2jc_device::hblank_irq(int scanline, int vblank, int blanked)
|
||||
void nes_smb2j_device::hblank_irq(int scanline, int vblank, int blanked)
|
||||
{
|
||||
if (m_irq_enable)
|
||||
{
|
||||
if ((0xfff - m_irq_count) <= 114)
|
||||
if ((0xfff - m_irq_count) < 114)
|
||||
{
|
||||
m_irq_count = (m_irq_count + 1) & 0xfff;
|
||||
m_irq_count = (m_irq_count + 114) & 0xfff;
|
||||
m_irq_enable = 0;
|
||||
machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
|
||||
}
|
||||
@ -993,47 +907,56 @@ void nes_smb2jc_device::hblank_irq(int scanline, int vblank, int blanked)
|
||||
m_irq_count += 114;
|
||||
}
|
||||
}
|
||||
WRITE8_MEMBER(nes_smb2jc_device::write_l)
|
||||
{
|
||||
LOG_MMC(("smb2jc write_l, offset: %04x, data: %02x\n", offset, data));
|
||||
offset += 0x100;
|
||||
|
||||
if (offset == 0x122)
|
||||
WRITE8_MEMBER(nes_smb2j_device::write_l)
|
||||
{
|
||||
LOG_MMC(("smb2j write_l, offset: %04x, data: %02x\n", offset, data));
|
||||
offset += 0x100;
|
||||
|
||||
if (offset == 0x122) // $4122
|
||||
m_irq_enable = data & 3; // maybe also m_irq_count = 0?!?
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_smb2j_device::write_h)
|
||||
{
|
||||
LOG_MMC(("smb2j write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
if (offset == 0x122) // $8122 too?
|
||||
m_irq_enable = data & 3;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_smb2jc_device::write_ex)
|
||||
WRITE8_MEMBER(nes_smb2j_device::write_ex)
|
||||
{
|
||||
LOG_MMC(("smb2jc write_ex, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
LOG_MMC(("smb2j write_ex, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
if (offset == 2)
|
||||
{
|
||||
int temp = 0;
|
||||
|
||||
|
||||
// According to hardware tests
|
||||
if (data & 1)
|
||||
temp = 3;
|
||||
else
|
||||
temp = 4 + ((data & 7) >> 1);
|
||||
|
||||
|
||||
prg8_cd(temp);
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(nes_smb2jc_device::read_l)
|
||||
READ8_MEMBER(nes_smb2j_device::read_l)
|
||||
{
|
||||
LOG_MMC(("smb2jc read_l, offset: %04x\n", offset));
|
||||
LOG_MMC(("smb2j read_l, offset: %04x\n", offset));
|
||||
offset += 0x100;
|
||||
|
||||
|
||||
if (offset >= 0x1000)
|
||||
return m_prg[0x10000 + (offset & 0x0fff)];
|
||||
|
||||
return ((offset + 0x4000) & 0xff00) >> 8;
|
||||
|
||||
return ((offset + 0x4000) & 0xff00) >> 8; // open bus
|
||||
}
|
||||
|
||||
READ8_MEMBER(nes_smb2jc_device::read_m)
|
||||
READ8_MEMBER(nes_smb2j_device::read_m)
|
||||
{
|
||||
LOG_MMC(("smb2jc read_m, offset: %04x\n", offset));
|
||||
LOG_MMC(("smb2j read_m, offset: %04x\n", offset));
|
||||
return m_prg[0x4000 + offset];
|
||||
}
|
||||
|
||||
@ -1107,17 +1030,14 @@ void nes_smb2jb_device::hblank_irq(int scanline, int vblank, int blanked)
|
||||
{
|
||||
if (m_irq_enable)
|
||||
{
|
||||
if (m_irq_count < 0x1000)
|
||||
if ((0xfff - m_irq_count) < 114)
|
||||
{
|
||||
if ((0x1000 - m_irq_count) <= 114)
|
||||
machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
|
||||
else
|
||||
m_irq_count += 114;
|
||||
m_irq_count = (m_irq_count + 114) & 0xfff;
|
||||
m_irq_enable = 0;
|
||||
machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
|
||||
}
|
||||
else
|
||||
m_irq_count += 114;
|
||||
|
||||
m_irq_count &= 0xffff; // according to docs is 16bit counter -> it wraps only after 0xffff?
|
||||
}
|
||||
}
|
||||
|
||||
@ -1160,6 +1080,40 @@ WRITE8_MEMBER(nes_smb2jb_device::write_ex)
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
(UNL-)09-034A
|
||||
|
||||
Games: Zanac FDS conversion with two PRG chips and
|
||||
no CHRROM (apparently also a Volleyball FDS conversion
|
||||
but the ones we have do not seem to be on this hw
|
||||
Originally dumps were marked as UNL-SMB2J pcb
|
||||
|
||||
|
||||
iNES:
|
||||
|
||||
In MESS: Supported (for Zanac)
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
WRITE8_MEMBER(nes_09034a_device::write_ex)
|
||||
{
|
||||
LOG_MMC(("09-034a write_ex, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
if (offset == 7) // $4027
|
||||
{
|
||||
m_reg = data & 1;
|
||||
if (m_chr_source == CHRRAM) // zanac has no CHRROM and is wired differently so to access the second PRG chip
|
||||
m_reg += 4;
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(nes_09034a_device::read_m)
|
||||
{
|
||||
LOG_MMC(("09-034a read_m, offset: %04x\n", offset));
|
||||
return m_prg[(m_reg * 0x2000) + offset];
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
Bootleg Board used for FDS conversion
|
||||
|
@ -160,15 +160,21 @@ class nes_smb2j_device : public nes_nrom_device
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_smb2j_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual DECLARE_READ8_MEMBER(read_l);
|
||||
virtual DECLARE_READ8_MEMBER(read_m);
|
||||
virtual DECLARE_WRITE8_MEMBER(write_ex);
|
||||
virtual DECLARE_WRITE8_MEMBER(write_l);
|
||||
virtual DECLARE_WRITE8_MEMBER(write_h);
|
||||
|
||||
|
||||
virtual void hblank_irq(int scanline, int vblank, int blanked);
|
||||
virtual void pcb_reset();
|
||||
|
||||
|
||||
private:
|
||||
void prgram_bank8_x(int start, int bank);
|
||||
UINT16 m_irq_count;
|
||||
int m_irq_enable;
|
||||
};
|
||||
|
||||
|
||||
@ -217,28 +223,23 @@ private:
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_smb2jc_device
|
||||
// ======================> nes_09034a_device
|
||||
|
||||
class nes_smb2jc_device : public nes_nrom_device
|
||||
class nes_09034a_device : public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_smb2jc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
nes_09034a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual DECLARE_READ8_MEMBER(read_l);
|
||||
virtual DECLARE_READ8_MEMBER(read_m);
|
||||
virtual DECLARE_WRITE8_MEMBER(write_ex);
|
||||
virtual DECLARE_WRITE8_MEMBER(write_l);
|
||||
|
||||
virtual void hblank_irq(int scanline, int vblank, int blanked);
|
||||
virtual DECLARE_READ8_MEMBER(read_m);
|
||||
|
||||
virtual void pcb_reset();
|
||||
|
||||
|
||||
private:
|
||||
UINT16 m_irq_count;
|
||||
int m_irq_enable;
|
||||
UINT8 m_prg_base;
|
||||
UINT8 m_reg;
|
||||
};
|
||||
|
||||
|
||||
@ -421,7 +422,7 @@ extern const device_type NES_WHIRLWIND_2706;
|
||||
extern const device_type NES_SMB2J;
|
||||
extern const device_type NES_SMB2JA;
|
||||
extern const device_type NES_SMB2JB;
|
||||
extern const device_type NES_SMB2JC;
|
||||
extern const device_type NES_09034A;
|
||||
extern const device_type NES_TOBIDASE;
|
||||
extern const device_type NES_LH32;
|
||||
extern const device_type NES_LH10;
|
||||
|
@ -163,13 +163,17 @@ READ8_MEMBER(nes_jy_typea_device::chr_r)
|
||||
switch (offset & 0xff8)
|
||||
{
|
||||
case 0xfd0:
|
||||
m_chr_latch[BIT(offset, 12)] = (bank & 0x4);
|
||||
if ((m_reg[0] & 0x18) == 0x08) // 4KB mode is the only one using these latches!
|
||||
update_chr_latches();
|
||||
break;
|
||||
case 0xfe8:
|
||||
// m_chr_latch[BIT(offset, 12)] = ((bank & 0x4) | 0x2) & (offset >> 4);
|
||||
m_chr_latch[BIT(offset, 12)] = (bank & 0x4) | 0x2;
|
||||
if ((m_reg[0] & 0x18) == 0x08) // 4KB mode is the only one using these latches!
|
||||
update_chr_latches();
|
||||
break;
|
||||
}
|
||||
|
||||
if ((m_reg[0] & 0x18) == 0x08) // 4KB mode is the only one using these latches!
|
||||
update_chr_latches();
|
||||
|
||||
return val;
|
||||
}
|
||||
@ -199,7 +203,7 @@ void nes_jy_typea_device::irq_clock(int mode, int blanked)
|
||||
|
||||
if (m_irq_up)
|
||||
{
|
||||
if ((m_irq_prescale & m_irq_prescale_mask) == m_irq_prescale)
|
||||
if ((m_irq_prescale & m_irq_prescale_mask) == m_irq_prescale_mask)
|
||||
{
|
||||
clock = TRUE;
|
||||
m_irq_prescale = (m_irq_prescale_mask == 7) ? (m_irq_prescale & 0xf8) : 0;
|
||||
@ -363,9 +367,14 @@ void nes_jy_typea_device::update_extra_chr()
|
||||
{
|
||||
// Block mode enabled: in this case lower bits select a 256KB page inside CHRROM
|
||||
// and the low bytes of m_mmc_vrom_bank select the banks inside such a page
|
||||
int mode = (m_reg[0] & 0x18) >> 3;
|
||||
m_extra_chr_mask = 0x00ff >> (mode ^ 0x3);
|
||||
m_extra_chr_bank = ((m_reg[3] & 1) | ((m_reg[3] & 0x18) >> 2)) << (mode + 5);
|
||||
m_extra_chr_bank = ((m_reg[3] & 1) | ((m_reg[3] & 0x18) >> 2));
|
||||
switch (m_reg[0] & 0x18)
|
||||
{
|
||||
case 0x00: m_extra_chr_bank <<= 5; m_extra_chr_mask = 0x1f; break;
|
||||
case 0x08: m_extra_chr_bank <<= 6; m_extra_chr_mask = 0x3f; break;
|
||||
case 0x10: m_extra_chr_bank <<= 7; m_extra_chr_mask = 0x7f; break;
|
||||
case 0x18: m_extra_chr_bank <<= 8; m_extra_chr_mask = 0xff; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -506,7 +515,7 @@ WRITE8_MEMBER(nes_jy_typea_device::write_h)
|
||||
break;
|
||||
case 2:
|
||||
m_irq_enable = 0;
|
||||
break;
|
||||
break;
|
||||
case 3:
|
||||
m_irq_enable = 1;
|
||||
break;
|
||||
|
@ -78,6 +78,12 @@ void nes_ffe3_device::pcb_reset()
|
||||
void nes_ffe4_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
|
||||
m_exram = auto_alloc_array_clear(machine(), UINT8, 0x8000);
|
||||
save_pointer(NAME(m_exram), 0x8000);
|
||||
save_item(NAME(m_exram_enabled));
|
||||
save_item(NAME(m_exram_bank));
|
||||
|
||||
save_item(NAME(m_irq_enable));
|
||||
save_item(NAME(m_irq_count));
|
||||
save_item(NAME(m_latch));
|
||||
@ -90,6 +96,9 @@ void nes_ffe4_device::pcb_reset()
|
||||
prg16_cdef(7);
|
||||
chr8(0, m_chr_source);
|
||||
|
||||
m_exram_enabled = 0;
|
||||
m_exram_bank = 0;
|
||||
|
||||
m_latch = 0;
|
||||
m_irq_enable = 0;
|
||||
m_irq_count = 0;
|
||||
@ -103,6 +112,10 @@ void nes_ffe8_device::pcb_reset()
|
||||
prg16_cdef(0xff);
|
||||
chr8(0, m_chr_source);
|
||||
|
||||
// extra vram is not used by this board, so these will remain always zero
|
||||
m_exram_enabled = 0;
|
||||
m_exram_bank = 0;
|
||||
|
||||
m_latch = 0;
|
||||
m_irq_enable = 0;
|
||||
m_irq_count = 0;
|
||||
@ -158,10 +171,10 @@ void nes_ffe4_device::hblank_irq(int scanline, int vblank, int blanked)
|
||||
if ((0xffff - m_irq_count) < 114)
|
||||
{
|
||||
machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
|
||||
m_irq_count = 0xffff;
|
||||
m_irq_count = 0;
|
||||
m_irq_enable = 0;
|
||||
}
|
||||
m_irq_count -= 114;
|
||||
m_irq_count += 114;
|
||||
}
|
||||
}
|
||||
|
||||
@ -180,7 +193,7 @@ WRITE8_MEMBER(nes_ffe4_device::write_l)
|
||||
break;
|
||||
|
||||
case 0x401:
|
||||
m_irq_enable = data & 0x01;
|
||||
m_irq_enable = 0;
|
||||
break;
|
||||
case 0x402:
|
||||
m_irq_count = (m_irq_count & 0xff00) | data;
|
||||
@ -192,6 +205,26 @@ WRITE8_MEMBER(nes_ffe4_device::write_l)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_ffe4_device::chr_w)
|
||||
{
|
||||
int bank = offset >> 10;
|
||||
if (m_exram_enabled)
|
||||
m_exram[(m_exram_bank * 0x2000) + (bank * 0x400) + (offset & 0x3ff)] = data;
|
||||
|
||||
if (m_chr_src[bank] == CHRRAM)
|
||||
m_chr_access[bank][offset & 0x3ff] = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(nes_ffe4_device::chr_r)
|
||||
{
|
||||
int bank = offset >> 10;
|
||||
if (m_exram_enabled)
|
||||
return m_exram[(m_exram_bank * 0x2000) + (bank * 0x400) + (offset & 0x3ff)];
|
||||
|
||||
return m_chr_access[bank][offset & 0x3ff];
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(nes_ffe4_device::write_h)
|
||||
{
|
||||
LOG_MMC(("mapper6 write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
@ -199,12 +232,20 @@ WRITE8_MEMBER(nes_ffe4_device::write_h)
|
||||
if (!m_latch) // when in "FFE mode" we are forced to use CHRRAM/EXRAM bank?
|
||||
{
|
||||
prg16_89ab(data >> 2);
|
||||
// chr8(data & 0x03, ???);
|
||||
// due to lack of info on the exact behavior, we simply act as if m_latch=1
|
||||
if (m_chr_source == CHRROM)
|
||||
chr8(data & 0x03, CHRROM);
|
||||
|
||||
// This part is not fully documented, so we proceed a bit blindly...
|
||||
if (data & 0x03 == 0)
|
||||
{
|
||||
m_exram_enabled = 0;
|
||||
chr8(0, CHRRAM);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_exram_enabled = 1;
|
||||
m_exram_bank = data & 0x03;
|
||||
}
|
||||
}
|
||||
else if (m_chr_source == CHRROM) // otherwise, we can use CHRROM (when present)
|
||||
else // otherwise, we use CHRROM (shall we check if it's present?)
|
||||
chr8(data, CHRROM);
|
||||
}
|
||||
|
||||
@ -215,8 +256,7 @@ WRITE8_MEMBER(nes_ffe4_device::write_h)
|
||||
Known Boards: FFE8 Copier Board
|
||||
Games: Hacked versions of games
|
||||
|
||||
In MESS: Supported?. IRQ support is just a guess (used to
|
||||
use MMC3 IRQ but it was wrong and it never enabled it)
|
||||
In MESS: Partially Supported.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -234,7 +274,7 @@ WRITE8_MEMBER(nes_ffe8_device::write_l)
|
||||
break;
|
||||
|
||||
case 0x401:
|
||||
m_irq_enable = data & 0x01;
|
||||
m_irq_enable = 0;
|
||||
break;
|
||||
case 0x402:
|
||||
m_irq_count = (m_irq_count & 0xff00) | data;
|
||||
|
@ -33,6 +33,8 @@ public:
|
||||
virtual void device_start();
|
||||
virtual DECLARE_WRITE8_MEMBER(write_l);
|
||||
virtual DECLARE_WRITE8_MEMBER(write_h);
|
||||
virtual DECLARE_READ8_MEMBER(chr_r);
|
||||
virtual DECLARE_WRITE8_MEMBER(chr_w);
|
||||
|
||||
virtual void hblank_irq(int scanline, int vblank, int blanked);
|
||||
virtual void pcb_reset();
|
||||
@ -42,6 +44,9 @@ protected:
|
||||
int m_irq_enable;
|
||||
|
||||
UINT8 m_latch;
|
||||
UINT8 *m_exram;
|
||||
int m_exram_enabled;
|
||||
int m_exram_bank;
|
||||
};
|
||||
|
||||
|
||||
|
@ -193,7 +193,7 @@ static const nes_pcb pcb_list[] =
|
||||
{ "smb2j", UNL_SMB2J },
|
||||
{ "smb2ja", BTL_SMB2JA },
|
||||
{ "smb2jb", BTL_SMB2JB },
|
||||
{ "smb2jc", BTL_SMB2JC }, // really?
|
||||
{ "09034a", BTL_09034A },
|
||||
{ "tobidase", BTL_TOBIDASE }, // mapper 120
|
||||
{ "dbz5", REXSOFT_DBZ5 },
|
||||
{ "sl1632", REXSOFT_SL1632 },
|
||||
@ -307,6 +307,7 @@ static const nes_pcb pcb_list[] =
|
||||
{ "unl_dance", UNSUPPORTED_BOARD },
|
||||
{ "bmc_hik_kof", UNSUPPORTED_BOARD },
|
||||
{ "onebus", UNSUPPORTED_BOARD },
|
||||
{ "test", TEST_BOARD },
|
||||
{ "unknown", UNKNOWN_BOARD } // a few pirate dumps uses the wrong mapper...
|
||||
};
|
||||
|
||||
|
@ -101,7 +101,7 @@ enum
|
||||
UNL_43272, UNL_TF1201, UNL_CITYFIGHT,
|
||||
/* Bootleg boards */
|
||||
BTL_SMB2JA, BTL_MARIOBABY, BTL_AISENSHINICOL, BTL_TOBIDASE,
|
||||
BTL_SMB2JB, BTL_SMB2JC, BTL_SMB3, BTL_SBROS11, BTL_DRAGONNINJA,
|
||||
BTL_SMB2JB, BTL_09034A, BTL_SMB3, BTL_SBROS11, BTL_DRAGONNINJA,
|
||||
BTL_PIKACHUY2K, BTL_SHUIGUAN,
|
||||
/* Misc: these are needed to convert mappers to boards, I will sort them later */
|
||||
OPENCORP_DAOU306, HES_BOARD, SVISION16_BOARD, RUMBLESTATION_BOARD, JYCOMPANY_A, JYCOMPANY_B, JYCOMPANY_C,
|
||||
@ -118,7 +118,7 @@ enum
|
||||
KAY_BOARD, HOSENKAN_BOARD, NITRA_TDA, GOUDER_37017, NANJING_BOARD,
|
||||
WHIRLWIND_2706,
|
||||
/* FFE boards, for mappers 6, 8, 17 */
|
||||
FFE3_BOARD, FFE4_BOARD, FFE8_BOARD,
|
||||
FFE3_BOARD, FFE4_BOARD, FFE8_BOARD, TEST_BOARD,
|
||||
/* Unsupported (for place-holder boards, with no working emulation) & no-board (at init) */
|
||||
UNSUPPORTED_BOARD, UNKNOWN_BOARD, NO_BOARD
|
||||
};
|
||||
|
@ -25,6 +25,11 @@
|
||||
|
||||
#define LOG_MMC(x) do { if (VERBOSE) logerror x; } while (0)
|
||||
|
||||
#define SOMARI_VRC2_MODE 0
|
||||
#define SOMARI_MMC3_MODE 1
|
||||
#define SOMARI_MMC1_MODE 2
|
||||
#define SOMARI_MMC1_MODE_AGAIN 3
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// constructor
|
||||
@ -53,6 +58,7 @@ void nes_somari_device::device_start()
|
||||
save_item(NAME(m_prg_mask));
|
||||
save_item(NAME(m_chr_base));
|
||||
save_item(NAME(m_chr_mask));
|
||||
save_item(NAME(m_mmc3_mirror_reg));
|
||||
|
||||
save_item(NAME(m_irq_enable));
|
||||
save_item(NAME(m_irq_count));
|
||||
@ -67,6 +73,7 @@ void nes_somari_device::device_start()
|
||||
// VRC2
|
||||
save_item(NAME(m_vrc_prg_bank));
|
||||
save_item(NAME(m_vrc_vrom_bank));
|
||||
save_item(NAME(m_vrc_mirror_reg));
|
||||
}
|
||||
|
||||
void nes_somari_device::pcb_reset()
|
||||
@ -84,8 +91,8 @@ void nes_somari_device::pcb_reset()
|
||||
m_latch = 0;
|
||||
m_mmc_prg_bank[0] = 0x3c;
|
||||
m_mmc_prg_bank[1] = 0x3d;
|
||||
m_mmc_prg_bank[2] = 0xfe;
|
||||
m_mmc_prg_bank[3] = 0xff;
|
||||
m_mmc_prg_bank[2] = 0x3e;
|
||||
m_mmc_prg_bank[3] = 0x3f;
|
||||
m_mmc_vrom_bank[0] = 0x00;
|
||||
m_mmc_vrom_bank[1] = 0x01;
|
||||
m_mmc_vrom_bank[2] = 0x04;
|
||||
@ -144,41 +151,6 @@ void nes_somari_device::pcb_reset()
|
||||
-------------------------------------------------*/
|
||||
|
||||
// MMC1 Mode emulation
|
||||
void nes_somari_device::mmc1_set_prg()
|
||||
{
|
||||
UINT8 prg_mode = m_mmc1_reg[0] & 0x0c;
|
||||
UINT8 prg_offset = m_mmc1_reg[1] & 0x10;
|
||||
|
||||
switch (prg_mode)
|
||||
{
|
||||
case 0x00:
|
||||
case 0x04:
|
||||
prg32((prg_offset + m_mmc1_reg[3]) >> 1);
|
||||
break;
|
||||
case 0x08:
|
||||
prg16_89ab(prg_offset + 0);
|
||||
prg16_cdef(prg_offset + m_mmc1_reg[3]);
|
||||
break;
|
||||
case 0x0c:
|
||||
prg16_89ab(prg_offset + m_mmc1_reg[3]);
|
||||
prg16_cdef(prg_offset + 0x0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void nes_somari_device::mmc1_set_chr()
|
||||
{
|
||||
UINT8 chr_mode = BIT(m_mmc1_reg[0], 4);
|
||||
|
||||
if (chr_mode)
|
||||
{
|
||||
chr4_0(m_mmc1_reg[1] & 0x1f, m_chr_source);
|
||||
chr4_4(m_mmc1_reg[2] & 0x1f, m_chr_source);
|
||||
}
|
||||
else
|
||||
chr8((m_mmc1_reg[1] & 0x1f) >> 1, m_chr_source);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_somari_device::mmc1_w)
|
||||
{
|
||||
assert(m_board_mode == 2);
|
||||
@ -189,7 +161,7 @@ WRITE8_MEMBER(nes_somari_device::mmc1_w)
|
||||
m_mmc1_latch = 0;
|
||||
|
||||
m_mmc1_reg[0] |= 0x0c;
|
||||
mmc1_set_prg();
|
||||
update_prg();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -203,35 +175,11 @@ WRITE8_MEMBER(nes_somari_device::mmc1_w)
|
||||
|
||||
if (m_count == 5)
|
||||
{
|
||||
switch (offset & 0x6000)
|
||||
{
|
||||
case 0x0000:
|
||||
m_mmc1_reg[0] = m_mmc1_latch;
|
||||
switch (m_mmc1_reg[0] & 0x03)
|
||||
{
|
||||
case 0: set_nt_mirroring(PPU_MIRROR_LOW); break;
|
||||
case 1: set_nt_mirroring(PPU_MIRROR_HIGH); break;
|
||||
case 2: set_nt_mirroring(PPU_MIRROR_VERT); break;
|
||||
case 3: set_nt_mirroring(PPU_MIRROR_HORZ); break;
|
||||
}
|
||||
mmc1_set_chr();
|
||||
mmc1_set_prg();
|
||||
break;
|
||||
case 0x2000:
|
||||
m_mmc1_reg[1] = m_mmc1_latch;
|
||||
mmc1_set_chr();
|
||||
mmc1_set_prg();
|
||||
break;
|
||||
case 0x4000:
|
||||
m_mmc1_reg[2] = m_mmc1_latch;
|
||||
mmc1_set_chr();
|
||||
break;
|
||||
case 0x6000:
|
||||
m_mmc1_reg[3] = m_mmc1_latch;
|
||||
mmc1_set_prg();
|
||||
break;
|
||||
}
|
||||
|
||||
m_mmc1_reg[(offset & 0x6000) >> 13] = m_mmc1_latch;
|
||||
update_mirror();
|
||||
update_prg();
|
||||
update_chr();
|
||||
|
||||
m_count = 0;
|
||||
}
|
||||
}
|
||||
@ -250,10 +198,10 @@ WRITE8_MEMBER(nes_somari_device::mmc3_w)
|
||||
m_latch = data;
|
||||
|
||||
if (mmc_helper & 0x40)
|
||||
set_prg(m_prg_base, m_prg_mask);
|
||||
update_prg();
|
||||
|
||||
if (mmc_helper & 0x80)
|
||||
set_chr(m_chr_source, m_chr_base, m_chr_mask);
|
||||
update_chr();
|
||||
break;
|
||||
|
||||
case 0x0001:
|
||||
@ -263,18 +211,19 @@ WRITE8_MEMBER(nes_somari_device::mmc3_w)
|
||||
case 0: case 1:
|
||||
case 2: case 3: case 4: case 5:
|
||||
m_mmc_vrom_bank[cmd] = data;
|
||||
set_chr(m_chr_source, m_chr_base, m_chr_mask);
|
||||
update_chr();
|
||||
break;
|
||||
case 6:
|
||||
case 7:
|
||||
m_mmc_prg_bank[cmd - 6] = data;
|
||||
set_prg(m_prg_base, m_prg_mask);
|
||||
m_mmc_prg_bank[cmd - 6] = data & 0x3f;
|
||||
update_prg();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x2000:
|
||||
set_nt_mirroring(BIT(data, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
m_mmc3_mirror_reg = data & 1;
|
||||
update_mirror();
|
||||
break;
|
||||
case 0x2001: break;
|
||||
case 0x4000: m_irq_count_latch = data; break;
|
||||
@ -294,47 +243,147 @@ WRITE8_MEMBER(nes_somari_device::vrc2_w)
|
||||
switch (offset & 0x7000)
|
||||
{
|
||||
case 0x0000:
|
||||
m_vrc_prg_bank[0] = data;
|
||||
prg8_89(m_vrc_prg_bank[0]);
|
||||
m_vrc_prg_bank[0] = data & 0x1f;
|
||||
update_prg();
|
||||
break;
|
||||
|
||||
case 0x1000:
|
||||
switch (data & 0x03)
|
||||
{
|
||||
case 0x00: set_nt_mirroring(PPU_MIRROR_VERT); break;
|
||||
case 0x01: set_nt_mirroring(PPU_MIRROR_HORZ); break;
|
||||
case 0x02: set_nt_mirroring(PPU_MIRROR_LOW); break;
|
||||
case 0x03: set_nt_mirroring(PPU_MIRROR_HIGH); break;
|
||||
}
|
||||
m_vrc_mirror_reg = data & 1;
|
||||
update_mirror();
|
||||
break;
|
||||
|
||||
case 0x2000:
|
||||
m_vrc_prg_bank[1] = data;
|
||||
prg8_ab(m_vrc_prg_bank[1]);
|
||||
m_vrc_prg_bank[1] = data & 0x1f;
|
||||
update_prg();
|
||||
break;
|
||||
|
||||
case 0x3000:
|
||||
case 0x4000:
|
||||
case 0x5000:
|
||||
case 0x6000:
|
||||
// this makes no sense for vrc2 and breaks somari, but it's ok for garousp!!
|
||||
bank = ((offset & 0x7000) - 0x3000) / 0x0800 + BIT(offset, 1);
|
||||
shift = BIT(offset, 2) * 4;
|
||||
data = (data & 0x0f) << shift;
|
||||
m_vrc_vrom_bank[bank] = data | m_chr_base;
|
||||
chr1_x(bank, m_vrc_vrom_bank[bank], CHRROM);
|
||||
m_vrc_vrom_bank[bank] = data;
|
||||
|
||||
update_chr();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void nes_somari_device::update_prg()
|
||||
{
|
||||
switch (m_board_mode)
|
||||
{
|
||||
case SOMARI_VRC2_MODE:
|
||||
prg8_89(m_vrc_prg_bank[0]);
|
||||
prg8_ab(m_vrc_prg_bank[1]);
|
||||
prg8_cd(0x3e);
|
||||
prg8_ef(0x3f);
|
||||
break;
|
||||
case SOMARI_MMC3_MODE:
|
||||
{
|
||||
UINT8 prg_flip = (m_latch & 0x40) ? 2 : 0;
|
||||
prg8_x(0, m_mmc_prg_bank[0 ^ prg_flip]);
|
||||
prg8_x(1, m_mmc_prg_bank[1]);
|
||||
prg8_x(2, m_mmc_prg_bank[2 ^ prg_flip]);
|
||||
prg8_x(3, m_mmc_prg_bank[3]);
|
||||
}
|
||||
break;
|
||||
case SOMARI_MMC1_MODE:
|
||||
// case SOMARI_MMC1_MODE_AGAIN:
|
||||
{
|
||||
UINT8 prg_offset = m_mmc1_reg[1] & 0x10;
|
||||
|
||||
switch (m_mmc1_reg[0] & 0x0c)
|
||||
{
|
||||
case 0x00:
|
||||
case 0x04:
|
||||
prg32((prg_offset + m_mmc1_reg[3]) >> 1);
|
||||
break;
|
||||
case 0x08:
|
||||
prg16_89ab(prg_offset + 0);
|
||||
prg16_cdef(prg_offset + m_mmc1_reg[3]);
|
||||
break;
|
||||
case 0x0c:
|
||||
prg16_89ab(prg_offset + m_mmc1_reg[3]);
|
||||
prg16_cdef(prg_offset + 0x0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void nes_somari_device::update_chr()
|
||||
{
|
||||
switch (m_board_mode)
|
||||
{
|
||||
case SOMARI_VRC2_MODE:
|
||||
for (int i = 0; i < 8; i++)
|
||||
chr1_x(i, m_chr_base | m_vrc_vrom_bank[i], CHRROM);
|
||||
break;
|
||||
case SOMARI_MMC3_MODE:
|
||||
{
|
||||
UINT8 chr_page = (m_latch & 0x80) >> 5;
|
||||
chr1_x(chr_page ^ 0, m_chr_base | ((m_mmc_vrom_bank[0] & ~0x01)), CHRROM);
|
||||
chr1_x(chr_page ^ 1, m_chr_base | ((m_mmc_vrom_bank[0] | 0x01)), CHRROM);
|
||||
chr1_x(chr_page ^ 2, m_chr_base | ((m_mmc_vrom_bank[1] & ~0x01)), CHRROM);
|
||||
chr1_x(chr_page ^ 3, m_chr_base | ((m_mmc_vrom_bank[1] | 0x01)), CHRROM);
|
||||
chr1_x(chr_page ^ 4, m_chr_base | (m_mmc_vrom_bank[2]), CHRROM);
|
||||
chr1_x(chr_page ^ 5, m_chr_base | (m_mmc_vrom_bank[3]), CHRROM);
|
||||
chr1_x(chr_page ^ 6, m_chr_base | (m_mmc_vrom_bank[4]), CHRROM);
|
||||
chr1_x(chr_page ^ 7, m_chr_base | (m_mmc_vrom_bank[5]), CHRROM);
|
||||
}
|
||||
break;
|
||||
case SOMARI_MMC1_MODE:
|
||||
// case SOMARI_MMC1_MODE_AGAIN:
|
||||
if (BIT(m_mmc1_reg[0], 4))
|
||||
{
|
||||
chr4_0(m_mmc1_reg[1] & 0x1f, CHRROM);
|
||||
chr4_4(m_mmc1_reg[2] & 0x1f, CHRROM);
|
||||
}
|
||||
else
|
||||
chr8((m_mmc1_reg[1] & 0x1f) >> 1, CHRROM);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void nes_somari_device::update_mirror()
|
||||
{
|
||||
switch (m_board_mode)
|
||||
{
|
||||
case SOMARI_VRC2_MODE:
|
||||
set_nt_mirroring(m_vrc_mirror_reg ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
break;
|
||||
case SOMARI_MMC3_MODE:
|
||||
set_nt_mirroring(m_mmc3_mirror_reg ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
|
||||
break;
|
||||
case SOMARI_MMC1_MODE:
|
||||
// case SOMARI_MMC1_MODE_AGAIN:
|
||||
switch (m_mmc1_reg[0] & 0x03)
|
||||
{
|
||||
case 0x00: set_nt_mirroring(PPU_MIRROR_LOW); break;
|
||||
case 0x01: set_nt_mirroring(PPU_MIRROR_HIGH); break;
|
||||
case 0x02: set_nt_mirroring(PPU_MIRROR_VERT); break;
|
||||
case 0x03: set_nt_mirroring(PPU_MIRROR_HORZ); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(nes_somari_device::write_h)
|
||||
{
|
||||
LOG_MMC(("somari write_h, mode %d, offset: %04x, data: %02x\n", m_board_mode, offset, data));
|
||||
|
||||
switch (m_board_mode)
|
||||
{
|
||||
case 0x00: vrc2_w(space, offset, data, mem_mask); break;
|
||||
case 0x01: mmc3_w(space, offset, data, mem_mask); break;
|
||||
case 0x02: mmc1_w(space, offset, data, mem_mask); break;
|
||||
case SOMARI_VRC2_MODE: vrc2_w(space, offset, data, mem_mask); break;
|
||||
case SOMARI_MMC3_MODE: mmc3_w(space, offset, data, mem_mask); break;
|
||||
case SOMARI_MMC1_MODE: mmc1_w(space, offset, data, mem_mask); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -342,27 +391,21 @@ void nes_somari_device::bank_update_switchmode()
|
||||
{
|
||||
switch (m_board_mode)
|
||||
{
|
||||
case 0x00:
|
||||
prg8_89(m_vrc_prg_bank[0]);
|
||||
prg8_ab(m_vrc_prg_bank[1]);
|
||||
for (int i = 0; i < 8; i++)
|
||||
chr1_x(i, m_vrc_vrom_bank[i], CHRROM);
|
||||
case SOMARI_VRC2_MODE:
|
||||
break;
|
||||
case 0x01:
|
||||
set_prg(m_prg_base, m_prg_mask);
|
||||
set_chr(m_chr_source, m_chr_base, m_chr_mask);
|
||||
case SOMARI_MMC3_MODE:
|
||||
break;
|
||||
case 0x02:
|
||||
mmc1_set_prg();
|
||||
mmc1_set_chr();
|
||||
case SOMARI_MMC1_MODE:
|
||||
break;
|
||||
}
|
||||
update_mirror();
|
||||
update_prg();
|
||||
update_chr();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_somari_device::write_l)
|
||||
WRITE8_MEMBER(nes_somari_device::write_m)
|
||||
{
|
||||
LOG_MMC(("somari write_l, offset: %04x, data: %02x\n", offset, data));
|
||||
offset += 0x100;
|
||||
LOG_MMC(("somari write_m, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
if (offset & 0x100)
|
||||
{
|
||||
|
@ -14,7 +14,8 @@ public:
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual DECLARE_WRITE8_MEMBER(write_l);
|
||||
virtual DECLARE_WRITE8_MEMBER(write_l) { write_m(space, offset + 0x100, data, mem_mask); }
|
||||
virtual DECLARE_WRITE8_MEMBER(write_m);
|
||||
virtual DECLARE_WRITE8_MEMBER(mmc1_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(mmc3_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(vrc2_w);
|
||||
@ -22,13 +23,15 @@ public:
|
||||
|
||||
virtual void pcb_reset();
|
||||
private:
|
||||
void mmc1_set_prg();
|
||||
void mmc1_set_chr();
|
||||
void update_prg();
|
||||
void update_chr();
|
||||
void update_mirror();
|
||||
void bank_update_switchmode();
|
||||
|
||||
UINT8 m_board_mode;
|
||||
|
||||
// MMC3 - inherited from txrom
|
||||
UINT8 m_mmc3_mirror_reg;
|
||||
|
||||
// MMC1
|
||||
UINT8 m_count;
|
||||
@ -38,6 +41,7 @@ private:
|
||||
// VRC2
|
||||
UINT8 m_vrc_prg_bank[2];
|
||||
UINT8 m_vrc_vrom_bank[8];
|
||||
UINT8 m_vrc_mirror_reg;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user