mirror of
https://github.com/holub/mame
synced 2025-06-04 20:06:28 +03:00
Merge pull request #2172 from kazblox/master
Additions/improvements to nes driver and softlist
This commit is contained in:
commit
8b9ef0b09e
290
hash/nes.xml
290
hash/nes.xml
@ -8906,6 +8906,31 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="doolybld">
|
||||
<description>Dooly Bravo Land</description>
|
||||
<year>1992</year>
|
||||
<publisher>Daou Infosys</publisher>
|
||||
<info name="serial" value="DIF-001"/>
|
||||
<info name="alt_title" value="둘리 브라보랜드"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<!-- Chip is rather an ASIC UNROM clone with no bus conflict issues(?) -->
|
||||
<!-- For now, lazily asign Camerica BF9093 since we don't account for bus conflicts there -->
|
||||
<feature name="slot" value="bf9093" />
|
||||
<feature name="pcb" value="DAOU-009" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<feature name="u1" value="U1 DIS-DFII001" />
|
||||
<feature name="u2" value="U2 PRG" />
|
||||
<feature name="u3" value="U3 VRAM" />
|
||||
<feature name="u4" value="U4 PAL" />
|
||||
<dataarea name="prg" size="262144">
|
||||
<rom name="0.u2" size="262144" crc="86be4746" sha1="6aaa5521f91f101448e77c996c9802015578400c" offset="00000" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="doordoor">
|
||||
<description>Door Door (Jpn)</description>
|
||||
<year>1985</year>
|
||||
@ -22341,14 +22366,14 @@
|
||||
<info name="alt_title" value="도술동자 구구"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="zemina" />
|
||||
<!-- Generic board! No signature, according to kevtris. Using NES-ZEMINA -->
|
||||
<feature name="pcb" value="NES-ZEMINA" />
|
||||
<!-- No stickers either, confirmed! -->
|
||||
<dataarea name="prg" size="262144">
|
||||
<rom name="0.prg" size="262144" crc="78f00865" sha1="8c9476dc5a6bbbf5604bc3327fa9d0bb0efd76cb" offset="00000" />
|
||||
</dataarea>
|
||||
<!-- Generic board! No signature, according to kevtris. Using ZEMINA -->
|
||||
<feature name="pcb" value="ZEMINA" />
|
||||
<!-- No stickers either, except for "ZM-900" and "ZM-920". Likely production codes? -->
|
||||
<dataarea name="chr" size="131072">
|
||||
<rom name="0.chr" size="131072" crc="fc8c3915" sha1="e79bf2aa4d44243176128452e9f5db7e8d0cc8d1" offset="00000" />
|
||||
<rom name="zm-920" size="131072" crc="fc8c3915" sha1="e79bf2aa4d44243176128452e9f5db7e8d0cc8d1" offset="00000" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="262144">
|
||||
<rom name="zm-900" size="262144" crc="78f00865" sha1="8c9476dc5a6bbbf5604bc3327fa9d0bb0efd76cb" offset="00000" />
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge -->
|
||||
<dataarea name="wram" size="8192">
|
||||
@ -47070,11 +47095,18 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="daou_306" />
|
||||
<feature name="pcb" value="DAOU-306" />
|
||||
<feature name="u1" value="U1 VRAM" />
|
||||
<feature name="u2" value="U2 CHR" />
|
||||
<feature name="u3" value="U3 PRG" />
|
||||
<feature name="u4" value="U4 DIS23CO1" />
|
||||
<feature name="u4" value="U5 PAL" />
|
||||
<!-- PRG chip on Frank Cifaldi's board says "9318" and CHR chip on the same one says "9317". -->
|
||||
<!-- Likely a sort of production code? -->
|
||||
<dataarea name="chr" size="131072">
|
||||
<rom name="ko ko eo deu ben ce (k).chr" size="131072" crc="f3efc194" sha1="00ceef537c9f40f6164f7b697bb29eded9c37d3d" offset="00000" status="baddump" />
|
||||
<rom name="ds-f301 chr.u2" size="131072" crc="f3efc194" sha1="00ceef537c9f40f6164f7b697bb29eded9c37d3d" offset="00000" />
|
||||
</dataarea>
|
||||
<dataarea name="prg" size="131072">
|
||||
<rom name="ko ko eo deu ben ce (k).prg" size="131072" crc="710e3cf9" sha1="45e82bec4a0d4685be20feaacb4c57b4bea09575" offset="00000" status="baddump" />
|
||||
<rom name="ds-f301 prg.u3" size="131072" crc="710e3cf9" sha1="45e82bec4a0d4685be20feaacb4c57b4bea09575" offset="00000" />
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge, battery backed up -->
|
||||
<dataarea name="bwram" size="8192">
|
||||
@ -62144,30 +62176,6 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="skaraok" supported="no">
|
||||
<description>Subor Kara OK</description>
|
||||
<year>19??</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王卡拉OK"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<!-- NESBBS dump marks this as mapper 168 because VirtuaNESEx emulates a completely different one in place of the Racermate mapper. -->
|
||||
<!-- Subor Karaoke, Subor v5.0, and Subor 999 variations appear to use the same mapper implementation, but each one functions slightly different. -->
|
||||
<!-- ex: this has additional PRG paging/VRAM mirroring compared to other carts using the same basic logic. -->
|
||||
<feature name="slot" value="unknown" />
|
||||
<feature name="pcb" value="UNKNOWN" />
|
||||
<dataarea name="prg" size="1048576">
|
||||
<rom name="[subor] karaoke (c).prg" size="1048576" crc="0a9808ae" sha1="57086cc965ba6828082a7c8c4617093ea6c1434a" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge, battery backed up -->
|
||||
<dataarea name="bwram" size="8192">
|
||||
<rom value="0x00" size="8192" offset="0" loadflag="fill" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="musicboxa" cloneof="musicbox">
|
||||
<description>Karaoke (Asia, Chinese)</description>
|
||||
<year>19??</year>
|
||||
@ -69277,24 +69285,23 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="gsdcomp" supported="partial">
|
||||
<!-- Based off Subor v10.0 -->
|
||||
<software name="gsdcomp" cloneof="subor10" supported="partial">
|
||||
<description>GSD Super Student Computer Cartridge (Chi)</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<publisher>Gao Sheng Da</publisher>
|
||||
<info name="alt_title" value="高升达超级学生电脑卡"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="waixing_sgzlz" />
|
||||
<feature name="pcb" value="WAIXING-SGZLZ" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<feature name="peripheral" value="sub_keyboard" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="gsd super student computer cartridge (c).prg" size="524288" crc="b72b17ed" sha1="df3e8c4b79d1998e2932962926679d067da5b40b" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge, battery backed up -->
|
||||
<dataarea name="bwram" size="8192">
|
||||
<rom value="0x00" size="8192" offset="0" loadflag="fill" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
@ -69503,7 +69510,7 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
|
||||
<software name="abm5" supported="partial">
|
||||
<description>ABM Study Card V5.0 (Chi)</description>
|
||||
<year>19??</year>
|
||||
<year>1995?</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_commandos" />
|
||||
@ -69525,8 +69532,8 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
|
||||
<software name="asderp95">
|
||||
<description>ASDER PC-95 (Asia?)</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<year>1995?</year>
|
||||
<publisher>Asder</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_commandos" />
|
||||
<feature name="pcb" value="TXC-MXMDHTWO" />
|
||||
@ -69703,8 +69710,8 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
|
||||
<software name="hongda">
|
||||
<description>Hong Da Study Cartridge (Chi)</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<year>1995?</year>
|
||||
<publisher>Hong Da</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_commandos" />
|
||||
<feature name="pcb" value="TXC-MXMDHTWO" />
|
||||
@ -69830,27 +69837,6 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="xbwzyw" cloneof="subor3" supported="partial">
|
||||
<description>Xiao Ba Wang Zhong Ying Wen Dian Nao Xue Xi Ji III (Chi)</description>
|
||||
<year>19??</year>
|
||||
<publisher>Subor</publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_commandos" />
|
||||
<feature name="pcb" value="TXC-MXMDHTWO" />
|
||||
<feature name="peripheral" value="sub_keyboard" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="xiaobawang zhongyingwen diannao xuexiji iii (unl) (subor) (with dr.mario).prg" size="524288" crc="0930349e" sha1="b769c7bdbd728dc63952d3363d4a1cc44dd8c2f7" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge, battery backed up -->
|
||||
<dataarea name="bwram" size="8192">
|
||||
<rom value="0x00" size="8192" offset="0" loadflag="fill" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cksjdnj">
|
||||
<description>Cang Ku Shi Jia Dong Nao Jin (Chi)</description>
|
||||
<year>19??</year>
|
||||
@ -69917,25 +69903,80 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
|
||||
<!--
|
||||
tszone_fc has documented a lot of Subor versions, some of them has still to be dumped
|
||||
|
||||
Subor v1.0
|
||||
Subor v1.0 [???]
|
||||
Subor v1.1
|
||||
Subor v2.0 [supposed to exist, but yet to be found]
|
||||
Subor v3.0 [at least two versions exist, one with Chinese Chess, another with Dr. Mario]
|
||||
Сюбор v1.0 [based off Subor v3.0, adapted for Russian market]
|
||||
Subor v4.0
|
||||
Subor v5.0 [this seems quite interesting: the main cart can also be combined with two different subcarts!]
|
||||
Subor v6.0
|
||||
Subor v6.0 [minor update of Subor v3.0, likely a pack-in cart?]
|
||||
Subor v7.0
|
||||
Subor v8.0
|
||||
Subor v8.0 [minor update of Subor v6.0, likely a pack-in cart?]
|
||||
Subor v9.0
|
||||
Subor v9.1
|
||||
Subor v10.0 (this shows VI+ on the title screen)
|
||||
Subor v10.0 [minor update of Subor v6.0 (says VI+ on title), likely a pack-in cart?]
|
||||
Subor v11.0 (this shows 999 on the title screen)
|
||||
Subor v12.0 [supposed to exist, but yet to be found]
|
||||
Subor v13.0 (this shows 999 on the title screen, but in different position)
|
||||
Subor v14.0 (this shows Windows(?) 2000 on the title screen)
|
||||
Subor v13.0 [cut down version of Subor v11.0, likely a pack-in cart?]
|
||||
Subor v14.0 (this shows Windows 2000 on the title screen)
|
||||
Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
-->
|
||||
|
||||
<software name="subor13" cloneof="subor11">
|
||||
<description>Subor v13.0 (Chi)</description>
|
||||
<year>2000?</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V13.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="subor2" />
|
||||
<feature name="mirroring" value="horizontal" />
|
||||
<feature name="peripheral" value="sub_keyboard" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="subor v13.0 (c).prg" size="524288" crc="5f693117" sha1="95c1482141e5b0c2e304a872b333f28fca32c360" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="subor11">
|
||||
<description>Subor v11.0 (Chi)</description>
|
||||
<year>2000?</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V11.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="subor2" />
|
||||
<feature name="mirroring" value="horizontal" />
|
||||
<feature name="pcb" value="SB-999(8M)-VILO-CARD" />
|
||||
<feature name="peripheral" value="sub_keyboard" />
|
||||
<dataarea name="prg" size="1048576">
|
||||
<!-- No special label -->
|
||||
<rom name="0.prg" size="1048576" crc="12d61ce8" sha1="628ea259a31600a2a2fe4dd55d0f0d288c48d669" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="subor10">
|
||||
<description>Subor v10.0 (Chi)</description>
|
||||
<year>199?</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V10.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="waixing_sgzlz" />
|
||||
<feature name="pcb" value="WAIXING-SGZLZ" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="subor v10.0 (c).prg" size="524288" crc="6f84076d" sha1="efcd2a421f6ce4cbf0f18fdce9837869d788d551" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="subor8">
|
||||
<description>Subor v8.0 (Chi)</description>
|
||||
@ -69951,16 +69992,51 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge, battery backed up -->
|
||||
<dataarea name="bwram" size="8192">
|
||||
<rom value="0x00" size="8192" offset="0" loadflag="fill" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="subor6">
|
||||
<description>Subor v6.0 (Chi)</description>
|
||||
<year>199?</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V6.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_commandos" />
|
||||
<feature name="pcb" value="TXC-MXMDHTWO" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<feature name="peripheral" value="sub_keyboard" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="subor v6.0 (c).prg" size="524288" crc="85068811" sha1="1c999d3a35f05d0eacc739dfcf9c891641c68dbb" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- This dump doesn't contain any of the supposed subcarts. -->
|
||||
<!-- TODO: Figure out if they actually exist -->
|
||||
<software name="subor5">
|
||||
<description>Subor v5.0 (Chi)</description>
|
||||
<year>1996</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V5.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="subor2" />
|
||||
<feature name="mirroring" value="horizontal" />
|
||||
<feature name="peripheral" value="sub_keyboard" />
|
||||
<dataarea name="prg" size="1048576">
|
||||
<rom name="[subor] yu yin zhi xing sheng ji mu ka (c).prg" size="1048576" crc="40a4c574" sha1="e92aeb559db317cfe4902a535b9bf6d73866c1d0" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="subor4">
|
||||
<description>Subor v4.0 (Chi)</description>
|
||||
<year>19??</year>
|
||||
<year>1995</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V4.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
@ -69970,7 +70046,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
<dataarea name="prg" size="1048576">
|
||||
<rom name="subor v4.0 (19xx)(subor)(cn)(ru)[p][!].prg" size="1048576" crc="41ef9ac4" sha1="3b71320b8bbe46b44cb95735a1bed948db4e436a" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k? VRAM on cartridge -->
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge, battery backed up -->
|
||||
@ -69980,19 +70056,39 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="subor3a" cloneof="subor3" supported="partial">
|
||||
<description>Subor v3.0 (Chi, with Dr. Mario)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V3.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_commandos" />
|
||||
<feature name="pcb" value="TXC-MXMDHTWO" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<feature name="peripheral" value="sub_keyboard" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="xiaobawang zhongyingwen diannao xuexiji iii (unl) (subor) (with dr.mario).prg" size="524288" crc="0930349e" sha1="b769c7bdbd728dc63952d3363d4a1cc44dd8c2f7" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="subor3">
|
||||
<description>Subor v3.0 (Chi)</description>
|
||||
<year>19??</year>
|
||||
<description>Subor v3.0 (Chi, with Chinese Chess)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V3.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="waixing_wxzs2" />
|
||||
<feature name="pcb" value="WAIXING-PS2" />
|
||||
<feature name="mirroring" value="vertical" />
|
||||
<feature name="peripheral" value="sub_keyboard" />
|
||||
<dataarea name="prg" size="524288">
|
||||
<rom name="subor v2.0 (19xx)(subor)(cn)(ru)[p][!].prg" size="524288" crc="6733607a" sha1="d1db84222573f0b1da0a0ed52c1792622e1d8700" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k? VRAM on cartridge -->
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
@ -70000,7 +70096,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
|
||||
<software name="subor11">
|
||||
<description>Subor v1.1 (Chi)</description>
|
||||
<year>19??</year>
|
||||
<year>1993?</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王中英文电脑学习卡(V1.1)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
@ -70023,7 +70119,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
|
||||
<software name="subor1r" cloneof="subor3">
|
||||
<description>Subor v1.0 (Rus)</description>
|
||||
<year>19??</year>
|
||||
<year>1994</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="Сюбор Обучающий Картридж (V1.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
@ -70033,7 +70129,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
<dataarea name="prg" size="131072">
|
||||
<rom name="subor v1.0 (r) [a1].prg" size="131072" crc="82f1fb96" sha1="5da695bea9f4d93c553969dc95dad1ae88a6e478" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k? VRAM on cartridge -->
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge, battery backed up -->
|
||||
@ -70045,7 +70141,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
|
||||
<software name="subor1ra" cloneof="subor3" supported="partial">
|
||||
<description>Subor v1.0 (Rus, Alt)</description>
|
||||
<year>19??</year>
|
||||
<year>1994</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="Сюбор Обучающий Картридж (V1.0)"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
@ -70055,7 +70151,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
<dataarea name="prg" size="131072">
|
||||
<rom name="suborv10 (russian).prg" size="131072" crc="1460ec7b" sha1="86e2ac9f91d2b047c4e472b091667627a7eedaf1" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k? VRAM on cartridge -->
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
</part>
|
||||
@ -70063,7 +70159,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
|
||||
<software name="magistr1" cloneof="subor3">
|
||||
<description>Magistr v1.0 (Rus)</description>
|
||||
<year>19??</year>
|
||||
<year>199?</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_commandos" />
|
||||
@ -70084,7 +70180,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
|
||||
<software name="simbas1" cloneof="subor3">
|
||||
<description>Simba's v1.0 (Rus)</description>
|
||||
<year>19??</year>
|
||||
<year>199?</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<feature name="slot" value="txc_commandos" />
|
||||
@ -70145,6 +70241,28 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="skaraok" supported="no">
|
||||
<description>Subor Karaoke</description>
|
||||
<year>19??</year>
|
||||
<publisher>Subor</publisher>
|
||||
<info name="alt_title" value="小霸王卡拉OK"/>
|
||||
<part name="cart" interface="nes_cart">
|
||||
<!-- Subor Type 2 variant that has yet to be emulated -->
|
||||
<feature name="slot" value="unknown" />
|
||||
<feature name="pcb" value="UNKNOWN" />
|
||||
<dataarea name="prg" size="1048576">
|
||||
<rom name="[subor] karaoke (c).prg" size="1048576" crc="0a9808ae" sha1="57086cc965ba6828082a7c8c4617093ea6c1434a" offset="00000" status="baddump" />
|
||||
</dataarea>
|
||||
<!-- 8k VRAM on cartridge -->
|
||||
<dataarea name="vram" size="8192">
|
||||
</dataarea>
|
||||
<!-- 8k WRAM on cartridge, battery backed up -->
|
||||
<dataarea name="bwram" size="8192">
|
||||
<rom value="0x00" size="8192" offset="0" loadflag="fill" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="rsmxx">
|
||||
<description>Ren Shi Ma Xue Xi v1.0 (Chi)</description>
|
||||
<year>19??</year>
|
||||
|
@ -1932,6 +1932,8 @@ if (BUSES["NES"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/nes/sachen.h",
|
||||
MAME_DIR .. "src/devices/bus/nes/somari.cpp",
|
||||
MAME_DIR .. "src/devices/bus/nes/somari.h",
|
||||
MAME_DIR .. "src/devices/bus/nes/subor.cpp",
|
||||
MAME_DIR .. "src/devices/bus/nes/subor.h",
|
||||
MAME_DIR .. "src/devices/bus/nes/sunsoft.cpp",
|
||||
MAME_DIR .. "src/devices/bus/nes/sunsoft.h",
|
||||
MAME_DIR .. "src/devices/bus/nes/sunsoft_dcs.cpp",
|
||||
|
@ -39,8 +39,6 @@
|
||||
|
||||
#define LOG_MMC(x) do { if (VERBOSE) logerror x; } while (0)
|
||||
|
||||
#define N2A03_DEFAULTCLOCK (21477272.724 / 12)
|
||||
|
||||
//-------------------------------------------------
|
||||
// constructor
|
||||
//-------------------------------------------------
|
||||
@ -642,7 +640,9 @@ static MACHINE_CONFIG_FRAGMENT( vrc6 )
|
||||
// additional sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("addon")
|
||||
|
||||
MCFG_SOUND_ADD("vrc6snd", VRC6, N2A03_DEFAULTCLOCK)
|
||||
// TODO: this is not how VRC6 clock signaling works!
|
||||
// The board uses the CLK pin in reality, not hardcoded NTSC values!
|
||||
MCFG_SOUND_ADD("vrc6snd", VRC6, XTAL_21_4772MHz/12)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 0.5)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -774,7 +774,9 @@ static MACHINE_CONFIG_FRAGMENT( vrc7 )
|
||||
// additional sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("addon")
|
||||
|
||||
MCFG_SOUND_ADD("ym", YM2413, N2A03_DEFAULTCLOCK)
|
||||
// TODO: this is not how VRC7 clock signaling works!
|
||||
// The board uses the CLK pin in reality, not hardcoded NTSC values!
|
||||
MCFG_SOUND_ADD("ym", YM2413, XTAL_21_4772MHz/12)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 0.5)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -216,6 +216,7 @@ SLOT_INTERFACE_START(nes_cart)
|
||||
SLOT_INTERFACE_INTERNAL("daou_306", NES_DAOU306)
|
||||
SLOT_INTERFACE_INTERNAL("subor0", NES_SUBOR0)
|
||||
SLOT_INTERFACE_INTERNAL("subor1", NES_SUBOR1)
|
||||
SLOT_INTERFACE_INTERNAL("subor2", NES_SUBOR2)
|
||||
SLOT_INTERFACE_INTERNAL("cc21", NES_CC21)
|
||||
SLOT_INTERFACE_INTERNAL("xiaozy", NES_XIAOZY)
|
||||
SLOT_INTERFACE_INTERNAL("edu2k", NES_EDU2K)
|
||||
|
@ -55,6 +55,7 @@
|
||||
#include "rexsoft.h"
|
||||
#include "sachen.h"
|
||||
#include "somari.h"
|
||||
#include "subor.h"
|
||||
#include "tengen.h"
|
||||
#include "txc.h"
|
||||
#include "waixing.h"
|
||||
|
@ -691,7 +691,7 @@ void nes_cart_slot_device::call_load_ines()
|
||||
if (!ines20)
|
||||
{
|
||||
logerror("Loaded game in iNES format:\n");
|
||||
logerror("-- Mapper %d\n", mapper);
|
||||
logerror("-- Mapper %u\n", mapper);
|
||||
logerror("-- PRG 0x%x (%d x 16k chunks)\n", prg_size, prg_size / 0x4000);
|
||||
logerror("-- VROM 0x%x (%d x 8k chunks)\n", vrom_size, vrom_size / 0x2000);
|
||||
logerror("-- VRAM 0x%x (%d x 8k chunks)\n", vram_size, vram_size / 0x2000);
|
||||
@ -707,8 +707,8 @@ void nes_cart_slot_device::call_load_ines()
|
||||
else
|
||||
{
|
||||
logerror("Loaded game in Extended iNES format:\n");
|
||||
logerror("-- Mapper: %d\n", mapper);
|
||||
logerror("-- Submapper: %d\n", (header[8] & 0xf0) >> 4);
|
||||
logerror("-- Mapper: %u\n", mapper);
|
||||
logerror("-- Submapper: %u\n", (header[8] & 0xf0) >> 4);
|
||||
logerror("-- PRG 0x%x (%d x 16k chunks)\n", prg_size, prg_size / 0x4000);
|
||||
logerror("-- VROM 0x%x (%d x 8k chunks)\n", vrom_size, vrom_size / 0x2000);
|
||||
logerror("-- VRAM 0x%x (%d x 8k chunks)\n", vram_size, vram_size / 0x2000);
|
||||
|
@ -185,6 +185,7 @@ static const nes_pcb pcb_list[] =
|
||||
{ "daou_306", OPENCORP_DAOU306 },
|
||||
{ "subor0", SUBOR_TYPE0 },
|
||||
{ "subor1", SUBOR_TYPE1 },
|
||||
{ "subor2", SUBOR_TYPE2 },
|
||||
{ "cc21", UNL_CC21 },
|
||||
{ "xiaozy", UNL_XIAOZY },
|
||||
{ "edu2k", UNL_EDU2K },
|
||||
|
@ -113,7 +113,7 @@ enum
|
||||
/* 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,
|
||||
MAGICSERIES_MD, KASING_BOARD, FUTUREMEDIA_BOARD, FUKUTAKE_BOARD, SOMARI_SL12,
|
||||
HENGG_SRICH, HENGG_XHZS, HENGG_SHJY3, SUBOR_TYPE0, SUBOR_TYPE1,
|
||||
HENGG_SRICH, HENGG_XHZS, HENGG_SHJY3, SUBOR_TYPE0, SUBOR_TYPE1, SUBOR_TYPE2,
|
||||
KAISER_KS7058, KAISER_KS7032, KAISER_KS7022, KAISER_KS7017,
|
||||
KAISER_KS7012, KAISER_KS7013B, KAISER_KS202, KAISER_KS7031,
|
||||
KAISER_KS7016, KAISER_KS7037,
|
||||
|
@ -41,8 +41,6 @@ const device_type NES_FUKUTAKE = device_creator<nes_fukutake_device>;
|
||||
const device_type NES_FUTUREMEDIA = device_creator<nes_futuremedia_device>;
|
||||
const device_type NES_MAGSERIES = device_creator<nes_magseries_device>;
|
||||
const device_type NES_DAOU306 = device_creator<nes_daou306_device>;
|
||||
const device_type NES_SUBOR0 = device_creator<nes_subor0_device>;
|
||||
const device_type NES_SUBOR1 = device_creator<nes_subor1_device>;
|
||||
const device_type NES_CC21 = device_creator<nes_cc21_device>;
|
||||
const device_type NES_XIAOZY = device_creator<nes_xiaozy_device>;
|
||||
const device_type NES_EDU2K = device_creator<nes_edu2k_device>;
|
||||
@ -84,16 +82,6 @@ nes_daou306_device::nes_daou306_device(const machine_config &mconfig, const char
|
||||
{
|
||||
}
|
||||
|
||||
nes_subor0_device::nes_subor0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_SUBOR0, "NES Cart Subor Type 0 PCB", tag, owner, clock, "nes_subor0", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
nes_subor1_device::nes_subor1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_SUBOR1, "NES Cart Subor Type 1 PCB", tag, owner, clock, "nes_subor1", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
nes_cc21_device::nes_cc21_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_CC21, "NES Cart CC-21 PCB", tag, owner, clock, "nes_cc21", __FILE__)
|
||||
{
|
||||
@ -236,38 +224,6 @@ void nes_daou306_device::pcb_reset()
|
||||
memset(m_reg, 0, sizeof(m_reg));
|
||||
}
|
||||
|
||||
void nes_subor0_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_reg));
|
||||
}
|
||||
|
||||
void nes_subor0_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg16_89ab(0);
|
||||
prg16_cdef(0x20);
|
||||
chr8(0, m_chr_source);
|
||||
|
||||
memset(m_reg, 0, sizeof(m_reg));
|
||||
}
|
||||
|
||||
void nes_subor1_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_reg));
|
||||
}
|
||||
|
||||
void nes_subor1_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg16_89ab(0);
|
||||
prg16_cdef(0x07);
|
||||
chr8(0, m_chr_source);
|
||||
|
||||
memset(m_reg, 0, sizeof(m_reg));
|
||||
}
|
||||
|
||||
void nes_cc21_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
@ -730,82 +686,6 @@ WRITE8_MEMBER(nes_daou306_device::write_h)
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
Subor bootleg board Type 0
|
||||
|
||||
iNES: mapper 167
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
WRITE8_MEMBER(nes_subor0_device::write_h)
|
||||
{
|
||||
uint8_t subor_helper1, subor_helper2;
|
||||
LOG_MMC(("subor0 write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
m_reg[(offset >> 13) & 0x03] = data;
|
||||
subor_helper1 = ((m_reg[0] ^ m_reg[1]) << 1) & 0x20;
|
||||
subor_helper2 = ((m_reg[2] ^ m_reg[3]) << 0) & 0x1f;
|
||||
|
||||
if (m_reg[1] & 0x08)
|
||||
{
|
||||
subor_helper1 += subor_helper2 & 0xfe;
|
||||
subor_helper2 = subor_helper1;
|
||||
subor_helper1 += 1;
|
||||
}
|
||||
else if (m_reg[1] & 0x04)
|
||||
{
|
||||
subor_helper2 += subor_helper1;
|
||||
subor_helper1 = 0x1f;
|
||||
}
|
||||
else
|
||||
{
|
||||
subor_helper1 += subor_helper2;
|
||||
subor_helper2 = 0x20;
|
||||
}
|
||||
|
||||
prg16_89ab(subor_helper1);
|
||||
prg16_cdef(subor_helper2);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
Subor bootleg board Type 1
|
||||
|
||||
iNES: mapper 166
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
WRITE8_MEMBER(nes_subor1_device::write_h)
|
||||
{
|
||||
uint8_t subor_helper1, subor_helper2;
|
||||
LOG_MMC(("subor1 write_h, offset: %04x, data: %02x\n", offset, data));
|
||||
|
||||
m_reg[(offset >> 13) & 0x03] = data;
|
||||
subor_helper1 = ((m_reg[0] ^ m_reg[1]) << 1) & 0x20;
|
||||
subor_helper2 = ((m_reg[2] ^ m_reg[3]) << 0) & 0x1f;
|
||||
|
||||
if (m_reg[1] & 0x08)
|
||||
{
|
||||
subor_helper1 += subor_helper2 & 0xfe;
|
||||
subor_helper2 = subor_helper1;
|
||||
subor_helper2 += 1;
|
||||
}
|
||||
else if (m_reg[1] & 0x04)
|
||||
{
|
||||
subor_helper2 += subor_helper1;
|
||||
subor_helper1 = 0x1f;
|
||||
}
|
||||
else
|
||||
{
|
||||
subor_helper1 += subor_helper2;
|
||||
subor_helper2 = 0x07;
|
||||
}
|
||||
|
||||
prg16_89ab(subor_helper1);
|
||||
prg16_cdef(subor_helper2);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
Board UNL-CC-21
|
||||
|
@ -118,44 +118,6 @@ private:
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_subor0_device
|
||||
|
||||
class nes_subor0_device : public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_subor0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_h) override;
|
||||
|
||||
virtual void pcb_reset() override;
|
||||
|
||||
private:
|
||||
uint8_t m_reg[4];
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_subor1_device
|
||||
|
||||
class nes_subor1_device : public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_subor1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_h) override;
|
||||
|
||||
virtual void pcb_reset() override;
|
||||
|
||||
private:
|
||||
uint8_t m_reg[4];
|
||||
};
|
||||
|
||||
|
||||
// ======================> nes_cc21_device
|
||||
|
||||
class nes_cc21_device : public nes_nrom_device
|
||||
|
325
src/devices/bus/nes/subor.cpp
Normal file
325
src/devices/bus/nes/subor.cpp
Normal file
@ -0,0 +1,325 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Kaz
|
||||
/***********************************************************************************************************
|
||||
|
||||
NES/Famicom cartridge emulation for Subor PCBs
|
||||
|
||||
TODO:
|
||||
- Implement Type 2 variant for Subor Karaoke.
|
||||
(Subor Karaoke updates banks differently.)
|
||||
- Check and verify CHR banking in Type 2 boards
|
||||
- Investigate connection with DANCE 2000 board; likely made by ex-Subor staff!
|
||||
|
||||
***********************************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "subor.h"
|
||||
|
||||
#ifdef NES_PCB_DEBUG
|
||||
#define VERBOSE 1
|
||||
#else
|
||||
#define VERBOSE 0
|
||||
#endif
|
||||
|
||||
#define LOG_MMC(...) do { if (VERBOSE) logerror(__VA_ARGS__); } while (0)
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type NES_SUBOR0 = device_creator<nes_subor0_device>;
|
||||
const device_type NES_SUBOR1 = device_creator<nes_subor1_device>;
|
||||
const device_type NES_SUBOR2 = device_creator<nes_subor2_device>;
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// nes_subor0_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
nes_subor0_device::nes_subor0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_SUBOR0, "NES Cart Subor Type 0 PCB", tag, owner, clock, "nes_subor0", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// nes_subor1_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
nes_subor1_device::nes_subor1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_SUBOR1, "NES Cart Subor Type 1 PCB", tag, owner, clock, "nes_subor1", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// nes_subor2_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
nes_subor2_device::nes_subor2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nes_nrom_device(mconfig, NES_SUBOR2, "NES Cart Subor Type 2 PCB", tag, owner, clock, "nes_subor2", __FILE__),
|
||||
m_switch_reg(0),
|
||||
m_bank_reg(0),
|
||||
m_chr_banking(0),
|
||||
m_page(0)
|
||||
{
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
device_start
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_subor0_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_reg));
|
||||
}
|
||||
|
||||
void nes_subor1_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
save_item(NAME(m_reg));
|
||||
}
|
||||
|
||||
void nes_subor2_device::device_start()
|
||||
{
|
||||
common_start();
|
||||
|
||||
save_item(NAME(m_switch_reg));
|
||||
save_item(NAME(m_bank_reg));
|
||||
save_item(NAME(m_chr_banking));
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
pcb_reset
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_subor0_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg16_89ab(0);
|
||||
prg16_cdef(0x20);
|
||||
chr8(0, m_chr_source);
|
||||
|
||||
memset(m_reg, 0, sizeof(m_reg));
|
||||
}
|
||||
|
||||
void nes_subor1_device::pcb_reset()
|
||||
{
|
||||
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
|
||||
prg16_89ab(0);
|
||||
prg16_cdef(0x07);
|
||||
chr8(0, m_chr_source);
|
||||
|
||||
memset(m_reg, 0, sizeof(m_reg));
|
||||
}
|
||||
|
||||
void nes_subor2_device::pcb_reset()
|
||||
{
|
||||
m_switch_reg = 0;
|
||||
m_bank_reg = 0;
|
||||
m_chr_banking = true;
|
||||
m_page = 0;
|
||||
|
||||
prg16_89ab(0);
|
||||
prg16_cdef(0);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
mapper specific handlers
|
||||
-------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
Subor educational cartridge board Type 0:
|
||||
iNES Mapper 167
|
||||
|
||||
Subor educational cartridge board Type 1:
|
||||
iNES Mapper 166
|
||||
|
||||
Subor educational cartridge board Type 2:
|
||||
No iNES mapper as of yet.
|
||||
|
||||
Notes on Type 2 variants:
|
||||
Implementation based upon VirtuaNESUp source code
|
||||
and studying VirtuaNESEx. The latter makes the
|
||||
read at 0x5300 return 0x8F, perhaps as a form
|
||||
of copy protection?
|
||||
|
||||
There are two revisions of Type 2 that are
|
||||
currently known;
|
||||
|
||||
Subor v5.0- 16k/32k PRG banking combo
|
||||
|
||||
Subor Karaoke- 32k PRG banking
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------
|
||||
ppu_latch
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_subor2_device::ppu_latch(offs_t offset)
|
||||
{
|
||||
/* CHR banks are conditionally changed midframe */
|
||||
/* If this is split off onto the external PPU latch, every edge case works */
|
||||
if (m_chr_banking)
|
||||
{
|
||||
if ( (m_page == 2) || (m_page == 1 && m_switch_reg == 2) )
|
||||
{
|
||||
chr4_0(1, CHRRAM);
|
||||
}
|
||||
else
|
||||
{
|
||||
chr4_0(0, CHRRAM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
nt
|
||||
-------------------------------------------------*/
|
||||
|
||||
READ8_MEMBER(nes_subor2_device::nt_r)
|
||||
{
|
||||
int page = ((offset & 0xc00) >> 10);
|
||||
|
||||
/* Nametable reads report the current page; this seems to work without issues */
|
||||
m_page = page;
|
||||
|
||||
return m_nt_access[page][offset & 0x3ff];
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
update_banks
|
||||
-------------------------------------------------*/
|
||||
|
||||
void nes_subor2_device::update_banks()
|
||||
{
|
||||
switch (m_switch_reg)
|
||||
{
|
||||
case 0x00:
|
||||
case 0x02:
|
||||
m_chr_banking = true;
|
||||
set_nt_mirroring(PPU_MIRROR_VERT);
|
||||
break;
|
||||
case 0x01:
|
||||
case 0x03:
|
||||
m_chr_banking = true;
|
||||
set_nt_mirroring(PPU_MIRROR_HORZ);
|
||||
break;
|
||||
case 0x05:
|
||||
/* Subor v11.0 needs this, and VirtuaNESEx keeps it specific to this cart */
|
||||
/* But leaving it as it is doesn't seem to be an issue for now */
|
||||
m_chr_banking = false;
|
||||
set_nt_mirroring(PPU_MIRROR_HORZ);
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_switch_reg >= 0x04)
|
||||
{
|
||||
prg32(m_bank_reg);
|
||||
}
|
||||
else
|
||||
{
|
||||
prg16_89ab(m_bank_reg);
|
||||
prg16_cdef(0);
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
read
|
||||
-------------------------------------------------*/
|
||||
|
||||
READ8_MEMBER(nes_subor2_device::read_l)
|
||||
{
|
||||
LOG_MMC("subor2 read_l, offset: %04x\n", offset);
|
||||
|
||||
if (offset == 0x1200)
|
||||
{
|
||||
return 0x8F;
|
||||
}
|
||||
return m_open_bus;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
write
|
||||
-------------------------------------------------*/
|
||||
|
||||
WRITE8_MEMBER(nes_subor0_device::write_h)
|
||||
{
|
||||
uint8_t subor_helper1, subor_helper2;
|
||||
LOG_MMC("subor0 write_h, offset: %04x, data: %02x\n", offset, data);
|
||||
|
||||
m_reg[(offset >> 13) & 0x03] = data;
|
||||
subor_helper1 = ((m_reg[0] ^ m_reg[1]) << 1) & 0x20;
|
||||
subor_helper2 = ((m_reg[2] ^ m_reg[3]) << 0) & 0x1f;
|
||||
|
||||
if (m_reg[1] & 0x08)
|
||||
{
|
||||
subor_helper1 += subor_helper2 & 0xfe;
|
||||
subor_helper2 = subor_helper1;
|
||||
subor_helper1 += 1;
|
||||
}
|
||||
else if (m_reg[1] & 0x04)
|
||||
{
|
||||
subor_helper2 += subor_helper1;
|
||||
subor_helper1 = 0x1f;
|
||||
}
|
||||
else
|
||||
{
|
||||
subor_helper1 += subor_helper2;
|
||||
subor_helper2 = 0x20;
|
||||
}
|
||||
|
||||
prg16_89ab(subor_helper1);
|
||||
prg16_cdef(subor_helper2);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_subor1_device::write_h)
|
||||
{
|
||||
uint8_t subor_helper1, subor_helper2;
|
||||
LOG_MMC("subor1 write_h, offset: %04x, data: %02x\n", offset, data);
|
||||
|
||||
m_reg[(offset >> 13) & 0x03] = data;
|
||||
subor_helper1 = ((m_reg[0] ^ m_reg[1]) << 1) & 0x20;
|
||||
subor_helper2 = ((m_reg[2] ^ m_reg[3]) << 0) & 0x1f;
|
||||
|
||||
if (m_reg[1] & 0x08)
|
||||
{
|
||||
subor_helper1 += subor_helper2 & 0xfe;
|
||||
subor_helper2 = subor_helper1;
|
||||
subor_helper2 += 1;
|
||||
}
|
||||
else if (m_reg[1] & 0x04)
|
||||
{
|
||||
subor_helper2 += subor_helper1;
|
||||
subor_helper1 = 0x1f;
|
||||
}
|
||||
else
|
||||
{
|
||||
subor_helper1 += subor_helper2;
|
||||
subor_helper2 = 0x07;
|
||||
}
|
||||
|
||||
prg16_89ab(subor_helper1);
|
||||
prg16_cdef(subor_helper2);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_subor2_device::write_l)
|
||||
{
|
||||
LOG_MMC("subor2 write_l, offset: %04x, data: %02x\n", offset, data);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x0F00:
|
||||
m_bank_reg = data;
|
||||
update_banks();
|
||||
break;
|
||||
case 0x1100:
|
||||
m_switch_reg = data & 7;
|
||||
update_banks();
|
||||
break;
|
||||
}
|
||||
}
|
78
src/devices/bus/nes/subor.h
Normal file
78
src/devices/bus/nes/subor.h
Normal file
@ -0,0 +1,78 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Kaz
|
||||
#ifndef MAME_BUS_NES_SUBOR_H
|
||||
#define MAME_BUS_NES_SUBOR_H
|
||||
|
||||
#include "nxrom.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> nes_subor0_device
|
||||
|
||||
class nes_subor0_device :
|
||||
public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_subor0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_h) override;
|
||||
|
||||
virtual void pcb_reset() override;
|
||||
|
||||
private:
|
||||
uint8_t m_reg[4];
|
||||
};
|
||||
|
||||
// ======================> nes_subor1_device
|
||||
|
||||
class nes_subor1_device :
|
||||
public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_subor1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_h) override;
|
||||
|
||||
virtual void pcb_reset() override;
|
||||
|
||||
private:
|
||||
uint8_t m_reg[4];
|
||||
};
|
||||
|
||||
// ======================> nes_subor2_device
|
||||
|
||||
class nes_subor2_device :
|
||||
public nes_nrom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_subor2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual DECLARE_READ8_MEMBER(nt_r) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_l) override;
|
||||
virtual DECLARE_READ8_MEMBER(read_l) override;
|
||||
|
||||
virtual void ppu_latch(offs_t offset) override;
|
||||
virtual void pcb_reset() override;
|
||||
|
||||
private:
|
||||
void update_banks();
|
||||
uint8_t m_switch_reg, m_bank_reg, m_chr_banking, m_page;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type NES_SUBOR0;
|
||||
extern const device_type NES_SUBOR1;
|
||||
extern const device_type NES_SUBOR2;
|
||||
|
||||
#endif /* MAME_BUS_NES_SUBOR_H */
|
@ -608,14 +608,14 @@ WRITE8_MEMBER(nes_sunsoft_5_device::write_h)
|
||||
// YM2149F operating in this mode. To use an AY-3-8910 as a substitute,
|
||||
// you would need an external divider to reduce the clock speed by half.
|
||||
|
||||
#define SUN5_NTSC_CLOCK (21477272.724 / 12)
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( sun_5b )
|
||||
|
||||
// additional sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("addon")
|
||||
|
||||
MCFG_SOUND_ADD("ay", YM2149, SUN5_NTSC_CLOCK/2) // divide by 2 for the internal divider
|
||||
// TODO: this is not how Sunsoft 5B clock signaling works!
|
||||
// The board uses the CLK pin in reality, not hardcoded NTSC values!
|
||||
MCFG_SOUND_ADD("ay", YM2149, (XTAL_21_4772MHz/12)/2) // divide by 2 for the internal divider
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -72,7 +72,15 @@ private:
|
||||
|
||||
};
|
||||
|
||||
#define N2A03_DEFAULTCLOCK (21477272.724 / 12)
|
||||
/* These are the official XTAL values and clock rates used by Nintendo for
|
||||
manufacturing throughout the production of the 2A03. PALC_APU_CLOCK is
|
||||
the clock rate devised by UMC(?) for PAL Famicom clone hardware. */
|
||||
|
||||
#define N2A03_NTSC_XTAL XTAL_21_4772MHz
|
||||
#define N2A03_PAL_XTAL XTAL_26_601712MHz
|
||||
#define NTSC_APU_CLOCK (N2A03_NTSC_XTAL/12) /* 1.7897726666... MHz */
|
||||
#define PAL_APU_CLOCK (N2A03_PAL_XTAL/16) /* 1.662607 MHz */
|
||||
#define PALC_APU_CLOCK (N2A03_PAL_XTAL/15) /* 1.77344746666... MHz */
|
||||
|
||||
enum {
|
||||
N2A03_IRQ_LINE = m6502_device::IRQ_LINE,
|
||||
|
@ -79,6 +79,7 @@ const device_type PPU_2C02 = device_creator<ppu2c02_device>;
|
||||
const device_type PPU_2C03B = device_creator<ppu2c03b_device>;
|
||||
const device_type PPU_2C04 = device_creator<ppu2c04_device>;
|
||||
const device_type PPU_2C07 = device_creator<ppu2c07_device>;
|
||||
const device_type PPU_PALC = device_creator<ppupalc_device>;
|
||||
const device_type PPU_2C05_01 = device_creator<ppu2c05_01_device>;
|
||||
const device_type PPU_2C05_02 = device_creator<ppu2c05_02_device>;
|
||||
const device_type PPU_2C05_03 = device_creator<ppu2c05_03_device>;
|
||||
@ -152,6 +153,7 @@ ppu2c0x_device::ppu2c0x_device(const machine_config &mconfig, device_type type,
|
||||
memset(m_palette_ram, 0, ARRAY_LENGTH(m_palette_ram));
|
||||
|
||||
m_scanlines_per_frame = PPU_NTSC_SCANLINES_PER_FRAME;
|
||||
m_vblank_first_scanline = PPU_VBLANK_FIRST_SCANLINE;
|
||||
|
||||
/* usually, no security value... */
|
||||
m_security_value = 0;
|
||||
@ -181,6 +183,13 @@ ppu2c07_device::ppu2c07_device(const machine_config &mconfig, const char *tag, d
|
||||
m_scanlines_per_frame = PPU_PAL_SCANLINES_PER_FRAME;
|
||||
}
|
||||
|
||||
// PAL clones
|
||||
ppupalc_device::ppupalc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : ppu2c0x_device(mconfig, PPU_PALC, "Generic PAL Clone PPU", tag, owner, clock, "ppupalc", __FILE__)
|
||||
{
|
||||
m_scanlines_per_frame = PPU_PAL_SCANLINES_PER_FRAME;
|
||||
m_vblank_first_scanline = PPU_VBLANK_FIRST_SCANLINE_PALC;
|
||||
}
|
||||
|
||||
// The PPU_2C05 variants have different protection value, set at device start, but otherwise are all the same...
|
||||
// Vs. Unisystem (Ninja Jajamaru Kun)
|
||||
ppu2c05_01_device::ppu2c05_01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : ppu2c0x_device(mconfig, PPU_2C05_01, "2C05_01 PPU", tag, owner, clock, "ppu2c05_01", __FILE__)
|
||||
@ -254,6 +263,7 @@ void ppu2c0x_device::device_start()
|
||||
save_item(NAME(m_back_color));
|
||||
save_item(NAME(m_scan_scale));
|
||||
save_item(NAME(m_scanlines_per_frame));
|
||||
save_item(NAME(m_vblank_first_scanline));
|
||||
save_item(NAME(m_regs));
|
||||
save_item(NAME(m_palette_ram));
|
||||
save_item(NAME(m_draw_phase));
|
||||
@ -469,7 +479,7 @@ void ppu2c0x_device::device_timer(emu_timer &timer, device_timer_id id, int para
|
||||
{
|
||||
case TIMER_HBLANK:
|
||||
blanked = (m_regs[PPU_CONTROL1] & (PPU_CONTROL1_BACKGROUND | PPU_CONTROL1_SPRITES)) == 0;
|
||||
vblank = ((m_scanline >= PPU_VBLANK_FIRST_SCANLINE - 1) && (m_scanline < m_scanlines_per_frame - 1)) ? 1 : 0;
|
||||
vblank = ((m_scanline >= m_vblank_first_scanline - 1) && (m_scanline < m_scanlines_per_frame - 1)) ? 1 : 0;
|
||||
|
||||
//update_scanline();
|
||||
|
||||
@ -489,7 +499,7 @@ void ppu2c0x_device::device_timer(emu_timer &timer, device_timer_id id, int para
|
||||
|
||||
case TIMER_SCANLINE:
|
||||
blanked = (m_regs[PPU_CONTROL1] & (PPU_CONTROL1_BACKGROUND | PPU_CONTROL1_SPRITES)) == 0;
|
||||
vblank = ((m_scanline >= PPU_VBLANK_FIRST_SCANLINE - 1) && (m_scanline < m_scanlines_per_frame - 1)) ? 1 : 0;
|
||||
vblank = ((m_scanline >= m_vblank_first_scanline - 1) && (m_scanline < m_scanlines_per_frame - 1)) ? 1 : 0;
|
||||
int next_scanline;
|
||||
|
||||
/* if a callback is available, call it */
|
||||
@ -505,7 +515,7 @@ void ppu2c0x_device::device_timer(emu_timer &timer, device_timer_id id, int para
|
||||
// logerror("starting scanline %d (MAME %d, beam %d)\n", m_scanline, device->m_screen->vpos(), device->m_screen->hpos());
|
||||
|
||||
/* Note: this is called at the _end_ of each scanline */
|
||||
if (m_scanline == PPU_VBLANK_FIRST_SCANLINE)
|
||||
if (m_scanline == m_vblank_first_scanline)
|
||||
{
|
||||
// logerror("vblank starting\n");
|
||||
/* We just entered VBLANK */
|
||||
|
@ -47,33 +47,34 @@ enum
|
||||
// bit definitions for (some of) the registers
|
||||
enum
|
||||
{
|
||||
PPU_CONTROL0_INC = 0x04,
|
||||
PPU_CONTROL0_SPR_SELECT = 0x08,
|
||||
PPU_CONTROL0_CHR_SELECT = 0x10,
|
||||
PPU_CONTROL0_SPRITE_SIZE = 0x20,
|
||||
PPU_CONTROL0_NMI = 0x80,
|
||||
PPU_CONTROL0_INC = 0x04,
|
||||
PPU_CONTROL0_SPR_SELECT = 0x08,
|
||||
PPU_CONTROL0_CHR_SELECT = 0x10,
|
||||
PPU_CONTROL0_SPRITE_SIZE = 0x20,
|
||||
PPU_CONTROL0_NMI = 0x80,
|
||||
|
||||
PPU_CONTROL1_DISPLAY_MONO = 0x01,
|
||||
PPU_CONTROL1_BACKGROUND_L8 = 0x02,
|
||||
PPU_CONTROL1_SPRITES_L8 = 0x04,
|
||||
PPU_CONTROL1_BACKGROUND = 0x08,
|
||||
PPU_CONTROL1_SPRITES = 0x10,
|
||||
PPU_CONTROL1_COLOR_EMPHASIS = 0xe0,
|
||||
PPU_CONTROL1_DISPLAY_MONO = 0x01,
|
||||
PPU_CONTROL1_BACKGROUND_L8 = 0x02,
|
||||
PPU_CONTROL1_SPRITES_L8 = 0x04,
|
||||
PPU_CONTROL1_BACKGROUND = 0x08,
|
||||
PPU_CONTROL1_SPRITES = 0x10,
|
||||
PPU_CONTROL1_COLOR_EMPHASIS = 0xe0,
|
||||
|
||||
PPU_STATUS_8SPRITES = 0x20,
|
||||
PPU_STATUS_SPRITE0_HIT = 0x40,
|
||||
PPU_STATUS_VBLANK = 0x80
|
||||
PPU_STATUS_8SPRITES = 0x20,
|
||||
PPU_STATUS_SPRITE0_HIT = 0x40,
|
||||
PPU_STATUS_VBLANK = 0x80
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PPU_NTSC_SCANLINES_PER_FRAME = 262,
|
||||
PPU_PAL_SCANLINES_PER_FRAME = 312,
|
||||
PPU_NTSC_SCANLINES_PER_FRAME = 262,
|
||||
PPU_PAL_SCANLINES_PER_FRAME = 312,
|
||||
|
||||
PPU_BOTTOM_VISIBLE_SCANLINE = 239,
|
||||
PPU_VBLANK_FIRST_SCANLINE = 241,
|
||||
PPU_VBLANK_LAST_SCANLINE_NTSC = 260,
|
||||
PPU_VBLANK_LAST_SCANLINE_PAL = 310
|
||||
PPU_BOTTOM_VISIBLE_SCANLINE = 239,
|
||||
PPU_VBLANK_FIRST_SCANLINE = 241,
|
||||
PPU_VBLANK_FIRST_SCANLINE_PALC = 291,
|
||||
PPU_VBLANK_LAST_SCANLINE_NTSC = 260,
|
||||
PPU_VBLANK_LAST_SCANLINE_PAL = 310
|
||||
|
||||
// Both the scanline immediately before and immediately after VBLANK
|
||||
// are non-rendering and non-vblank.
|
||||
@ -96,6 +97,8 @@ enum
|
||||
MCFG_PPU2C0X_ADD(_tag, PPU_2C04)
|
||||
#define MCFG_PPU2C07_ADD(_tag) \
|
||||
MCFG_PPU2C0X_ADD(_tag, PPU_2C07)
|
||||
#define MCFG_PPUPALC_ADD(_tag) \
|
||||
MCFG_PPU2C0X_ADD(_tag, PPU_PALC)
|
||||
#define MCFG_PPU2C05_01_ADD(_tag) \
|
||||
MCFG_PPU2C0X_ADD(_tag, PPU_2C05_01)
|
||||
#define MCFG_PPU2C05_02_ADD(_tag) \
|
||||
@ -189,7 +192,7 @@ public:
|
||||
required_device<cpu_device> m_cpu;
|
||||
|
||||
std::unique_ptr<bitmap_ind16> m_bitmap; /* target bitmap */
|
||||
std::unique_ptr<uint8_t[]> m_spriteram; /* sprite ram */
|
||||
std::unique_ptr<uint8_t[]> m_spriteram; /* sprite ram */
|
||||
std::unique_ptr<pen_t[]> m_colortable; /* color table modified at run time */
|
||||
std::unique_ptr<pen_t[]> m_colortable_mono; /* monochromatic color table modified at run time */
|
||||
int m_scanline; /* scanline count */
|
||||
@ -210,9 +213,10 @@ public:
|
||||
int m_sprite_page; /* current sprite page */
|
||||
int m_back_color; /* background color */
|
||||
int m_color_base;
|
||||
uint8_t m_palette_ram[0x20]; /* shouldn't be in main memory! */
|
||||
uint8_t m_palette_ram[0x20]; /* shouldn't be in main memory! */
|
||||
int m_scan_scale; /* scan scale */
|
||||
int m_scanlines_per_frame; /* number of scanlines per frame */
|
||||
int m_vblank_first_scanline; /* the very first scanline where VBLANK occurs */
|
||||
int m_security_value; /* 2C05 protection */
|
||||
int m_tilecount; /* MMC5 can change attributes to subsets of the 34 visible tiles */
|
||||
int m_draw_phase; /* MMC5 uses different regs for BG and OAM */
|
||||
@ -261,6 +265,11 @@ public:
|
||||
ppu2c07_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
};
|
||||
|
||||
class ppupalc_device : public ppu2c0x_device {
|
||||
public:
|
||||
ppupalc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
};
|
||||
|
||||
class ppu2c05_01_device : public ppu2c0x_device {
|
||||
public:
|
||||
ppu2c05_01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
@ -288,6 +297,7 @@ extern const device_type PPU_2C02; // NTSC NES
|
||||
extern const device_type PPU_2C03B; // Playchoice 10
|
||||
extern const device_type PPU_2C04; // Vs. Unisystem
|
||||
extern const device_type PPU_2C07; // PAL NES
|
||||
extern const device_type PPU_PALC; // PAL Clones
|
||||
extern const device_type PPU_2C05_01; // Vs. Unisystem (Ninja Jajamaru Kun)
|
||||
extern const device_type PPU_2C05_02; // Vs. Unisystem (Mighty Bomb Jack)
|
||||
extern const device_type PPU_2C05_03; // Vs. Unisystem (Gumshoe)
|
||||
|
@ -1429,11 +1429,11 @@ MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( dkong3_audio )
|
||||
|
||||
MCFG_CPU_ADD("n2a03a", N2A03,N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("n2a03a", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(dkong3_sound1_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dkong_state, nmi_line_pulse)
|
||||
|
||||
MCFG_CPU_ADD("n2a03b", N2A03,N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("n2a03b", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(dkong3_sound2_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dkong_state, nmi_line_pulse)
|
||||
|
||||
|
@ -311,10 +311,9 @@ GFXDECODE_END
|
||||
|
||||
static MACHINE_CONFIG_START( cham24, cham24_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", N2A03, N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(cham24_map)
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -546,7 +546,7 @@ void famibox_state::machine_start()
|
||||
|
||||
static MACHINE_CONFIG_START( famibox, famibox_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", N2A03, N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(famibox_map)
|
||||
|
||||
/* video hardware */
|
||||
|
@ -1214,7 +1214,7 @@ MACHINE_START_MEMBER(multigam_state,supergm3)
|
||||
|
||||
static MACHINE_CONFIG_START( multigam, multigam_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", N2A03, N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(multigam_map)
|
||||
|
||||
|
||||
|
@ -56,16 +56,16 @@ void nes_state::ppu_nmi(int *ppu_regs)
|
||||
|
||||
static MACHINE_CONFIG_START( nes, nes_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_CLOCK)
|
||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(nes_map)
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60.098)
|
||||
MCFG_SCREEN_REFRESH_RATE(60.0988)
|
||||
// This isn't used so much to calulate the vblank duration (the PPU code tracks that manually) but to determine
|
||||
// the number of cycles in each scanline for the PPU scanline timer. Since the PPU has 20 vblank scanlines + 2
|
||||
// non-rendering scanlines, we compensate. This ends up being 2500 cycles for the non-rendering portion, 2273
|
||||
// cycles for the actual vblank period.
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((113.66/(NTSC_CLOCK/1000000)) * (PPU_VBLANK_LAST_SCANLINE_NTSC-PPU_VBLANK_FIRST_SCANLINE+1+2)))
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((113.66/(NTSC_APU_CLOCK/1000000)) * (PPU_VBLANK_LAST_SCANLINE_NTSC-PPU_VBLANK_FIRST_SCANLINE+1+2)))
|
||||
MCFG_SCREEN_SIZE(32*8, 262)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(nes_state, screen_update_nes)
|
||||
@ -97,15 +97,13 @@ static MACHINE_CONFIG_START( nes, nes_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( nespal, nes )
|
||||
|
||||
/* basic machine hardware */
|
||||
// MCFG_CPU_MODIFY("maincpu")
|
||||
// MCFG_CPU_CLOCK(PAL_CLOCK) // this doesn't get inherited by the APU with DERIVED_CLOCK!
|
||||
// MCFG_CPU_CLOCK(PAL_APU_CLOCK) // this doesn't get inherited by the APU with DERIVED_CLOCK!
|
||||
|
||||
MCFG_CPU_REPLACE("maincpu", N2A03, PAL_CLOCK)
|
||||
MCFG_CPU_REPLACE("maincpu", N2A03, PAL_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(nes_map)
|
||||
|
||||
|
||||
MCFG_DEVICE_REMOVE("ppu")
|
||||
MCFG_PPU2C07_ADD("ppu")
|
||||
MCFG_PPU2C0X_CPU("maincpu")
|
||||
@ -113,33 +111,10 @@ static MACHINE_CONFIG_DERIVED( nespal, nes )
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(53.355)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((106.53/(PAL_CLOCK/1000000)) * (PPU_VBLANK_LAST_SCANLINE_PAL-PPU_VBLANK_FIRST_SCANLINE+1+2)))
|
||||
MCFG_SCREEN_REFRESH_RATE(50.0070)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((106.53/(PAL_APU_CLOCK/1000000)) * (PPU_VBLANK_LAST_SCANLINE_PAL-PPU_VBLANK_FIRST_SCANLINE+1+2)))
|
||||
MCFG_SCREEN_SIZE(32*8, 312)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
|
||||
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( dendy, nes )
|
||||
|
||||
/* basic machine hardware */
|
||||
// MCFG_CPU_MODIFY( "maincpu" )
|
||||
// MCFG_CPU_CLOCK( 26601712/15 ) // this doesn't get inherited by the APU with DERIVED_CLOCK!
|
||||
|
||||
MCFG_CPU_REPLACE("maincpu", N2A03, 26601712/15 )/* 26.601712MHz / 15 == 1.77344746666... MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(nes_map)
|
||||
|
||||
MCFG_DEVICE_REMOVE("ppu")
|
||||
MCFG_PPU2C07_ADD("ppu")
|
||||
MCFG_PPU2C0X_CPU("maincpu")
|
||||
MCFG_PPU2C0X_SET_NMI(nes_state, ppu_nmi)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(50.00697796827)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((106.53/(PAL_CLOCK/1000000)) * (PPU_VBLANK_LAST_SCANLINE_PAL-PPU_VBLANK_FIRST_SCANLINE+1+2)))
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( famicom, nes )
|
||||
@ -154,6 +129,43 @@ static MACHINE_CONFIG_DERIVED( famicom, nes )
|
||||
MCFG_SOFTWARE_LIST_ADD("cass_list", "famicom_cass")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( nespalc, nespal )
|
||||
// MCFG_CPU_MODIFY( "maincpu" )
|
||||
// MCFG_CPU_CLOCK(PALC_APU_CLOCK) // this doesn't get inherited by the APU with DERIVED_CLOCK!
|
||||
|
||||
MCFG_CPU_REPLACE("maincpu", N2A03, PALC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(nes_map)
|
||||
|
||||
/* UMC 6538 and friends -- extends time for rendering dummy scanlines */
|
||||
MCFG_DEVICE_REMOVE("ppu")
|
||||
MCFG_PPUPALC_ADD("ppu")
|
||||
MCFG_PPU2C0X_CPU("maincpu")
|
||||
MCFG_PPU2C0X_SET_NMI(nes_state, ppu_nmi)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(50.0070)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC((113.66/(PALC_APU_CLOCK/1000000)) * (PPU_VBLANK_LAST_SCANLINE_PAL-PPU_VBLANK_FIRST_SCANLINE_PALC+1+2)))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( famipalc, nespalc )
|
||||
MCFG_DEVICE_REMOVE("ctrl1")
|
||||
MCFG_DEVICE_REMOVE("ctrl2")
|
||||
MCFG_NES_CONTROL_PORT_ADD("ctrl1", fc_control_port1_devices, "joypad")
|
||||
MCFG_NES_CONTROL_PORT_ADD("ctrl2", fc_control_port2_devices, "joypad")
|
||||
MCFG_FC_EXPANSION_PORT_ADD("exp", fc_expansion_devices, nullptr)
|
||||
MCFG_NESCTRL_BRIGHTPIXEL_CB(nes_state, bright_pixel)
|
||||
|
||||
MCFG_SOFTWARE_LIST_ADD("cass_list", "famicom_cass")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( suborkbd, famipalc )
|
||||
/* TODO: emulate the parallel port bus! */
|
||||
MCFG_DEVICE_MODIFY("exp")
|
||||
MCFG_SLOT_DEFAULT_OPTION("subor_keyboard")
|
||||
MCFG_SLOT_FIXED(true)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
void nes_state::setup_disk(nes_disksys_device *slot)
|
||||
{
|
||||
if (slot)
|
||||
@ -285,6 +297,13 @@ ROM_START( m82 )
|
||||
ROM_LOAD( "m82_v1_0.bin", 0x10000, 0x4000, CRC(7d56840a) SHA1(cbd2d14fa073273ba58367758f40d67fd8a9106d) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( m82p )
|
||||
/* same as m82 */
|
||||
ROM_REGION( 0x14000, "maincpu", 0 ) /* Main RAM + program banks */
|
||||
/* Banks to be mapped at 0xe000? More investigations needed... */
|
||||
ROM_LOAD( "m82_v1_0.bin", 0x10000, 0x4000, CRC(7d56840a) SHA1(cbd2d14fa073273ba58367758f40d67fd8a9106d) )
|
||||
ROM_END
|
||||
|
||||
// see http://www.disgruntleddesigner.com/chrisc/drpcjr/index.html
|
||||
// and http://www.disgruntleddesigner.com/chrisc/drpcjr/DrPCJrMemMap.txt
|
||||
ROM_START( drpcjr )
|
||||
@ -296,14 +315,30 @@ ROM_START( drpcjr )
|
||||
// ROM_LOAD("drpcjr_v1_5_gg.bin", 0x10000, 0x8000, CRC(98f2033b) SHA1(93c114da787a19279d1a46667c2f69b49e25d4f1) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( iq501 )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
|
||||
ROM_END
|
||||
|
||||
ROM_START( iq502 )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
|
||||
ROM_END
|
||||
|
||||
ROM_START( dendy )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
|
||||
ROM_END
|
||||
|
||||
ROM_START( dendy2 )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
|
||||
ROM_END
|
||||
|
||||
ROM_START( gchinatv )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
|
||||
ROM_END
|
||||
|
||||
ROM_START( sb486 )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
|
||||
ROM_END
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Game driver(s)
|
||||
@ -311,12 +346,37 @@ ROM_END
|
||||
***************************************************************************/
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
||||
CONS( 1985, nes, 0, 0, nes, nes, driver_device, 0, "Nintendo", "Nintendo Entertainment System / Famicom (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1987, nespal, nes, 0, nespal, nes, driver_device, 0, "Nintendo", "Nintendo Entertainment System (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, famicom, nes, 0, famicom, famicom, nes_state, famicom, "Nintendo", "Famicom (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, fds, nes, 0, fds, famicom, nes_state, famicom, "Nintendo", "Famicom (w/ Disk System add-on)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1986, famitwin, nes, 0, famitwin, famicom, nes_state, famicom, "Sharp", "Famicom Twin", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 198?, m82, nes, 0, nes, nes, driver_device, 0, "Nintendo", "M82 Display Unit", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1996, drpcjr, nes, 0, famicom, famicom, nes_state, famicom, "Bung", "Doctor PC Jr", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1992, dendy, nes, 0, dendy, nes, driver_device, 0, "Steepler", "Dendy Classic", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 198?, gchinatv, nes, 0, nespal, nes, driver_device, 0, "Golden China", "Golden China TV Game", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
/* Nintendo Entertainment System hardware */
|
||||
CONS( 1985, nes, 0, 0, nes, nes, driver_device, 0, "Nintendo", "Nintendo Entertainment System / Famicom (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1987, nespal, nes, 0, nespal, nes, driver_device, 0, "Nintendo", "Nintendo Entertainment System (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
// M82 Display Unit
|
||||
// supports up to twelve cartridge slots
|
||||
CONS( 198?, m82, nes, 0, nes, nes, driver_device, 0, "Nintendo", "M82 Display Unit (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 198?, m82p, nes, 0, nespal, nes, driver_device, 0, "Nintendo", "M82 Display Unit (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
/* Famicom hardware */
|
||||
CONS( 1983, famicom, 0, 0, famicom, famicom, nes_state, famicom, "Nintendo", "Famicom", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, fds, famicom, 0, fds, famicom, nes_state, famicom, "Nintendo", "Famicom (w/ Disk System add-on)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1986, famitwin, famicom, 0, famitwin, famicom, nes_state, famicom, "Sharp", "Famicom Twin", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
/* Clone hardware */
|
||||
/* Many knockoffs using derivatives of the UMC board design, later incorporated into single CMOS chips, were manufactured before and past the end of the Famicom's timeline. */
|
||||
|
||||
/* !! PAL clones documented here !! */
|
||||
// Famicom-based
|
||||
CONS( 1992, iq501, 0, 0, famipalc, nes, nes_state, famicom, "Micro Genius", "IQ-501", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1992, iq502, 0, 0, famipalc, nes, nes_state, famicom, "Micro Genius", "IQ-502", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1992, dendy, iq501, 0, famipalc, nes, nes_state, famicom, "Steepler", "Dendy Classic 1", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1992, dendy2, iq502, 0, famipalc, nes, nes_state, famicom, "Steepler", "Dendy Classic 2", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 198?, gchinatv, 0, 0, famipalc, nes, nes_state, famicom, "Golden China", "Golden China TV Game", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
// Subor/Xiao Ba Wang hardware and derivatives
|
||||
// These clones implement a keyboard and a parallel port for printing from a word processor. Later models have mice, PS/2 ports, serial ports and a floppy drive.
|
||||
CONS( 1993, sb486, 0, 0, suborkbd, nes, nes_state, famicom, "Subor", "SB-486", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
/* !! NTSC clones documented here !! */
|
||||
// Famicom-based
|
||||
// Bung hardware
|
||||
// Mice, keyboard, etc, including a floppy drive that allows you to run games with a selection of 4 internal "mappers" available on the system.
|
||||
CONS( 1996, drpcjr, 0, 0, famicom, famicom, nes_state, famicom, "Bung", "Doctor PC Jr", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
@ -303,8 +303,6 @@ Notes & Todo:
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
/* clock frequency */
|
||||
#define N2A03_DEFAULTCLOCK (21477272.724 / 12)
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
@ -654,7 +652,7 @@ static MACHINE_CONFIG_START( playch10, playch10_state )
|
||||
MCFG_CPU_IO_MAP(bios_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("top", playch10_state, playch10_interrupt)
|
||||
|
||||
MCFG_CPU_ADD("cart", N2A03, N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("cart", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(cart_map)
|
||||
|
||||
|
||||
|
@ -648,7 +648,7 @@ static MACHINE_CONFIG_START( punchout, punchout_state )
|
||||
MCFG_CPU_IO_MAP(punchout_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("top", punchout_state, vblank_irq)
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", N2A03, XTAL_21_4772MHz/12)
|
||||
MCFG_CPU_ADD("audiocpu", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(punchout_sound_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("top", punchout_state, nmi_line_pulse)
|
||||
|
||||
@ -681,7 +681,7 @@ static MACHINE_CONFIG_START( punchout, punchout_state )
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
|
||||
|
||||
MCFG_SOUND_ADD("vlm", VLM5030, XTAL_21_4772MHz/6)
|
||||
MCFG_SOUND_ADD("vlm", VLM5030, N2A03_NTSC_XTAL/6)
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, punchout_vlm_map)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -1702,7 +1702,7 @@ INPUT_PORTS_END
|
||||
static MACHINE_CONFIG_START( vsnes, vsnes_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", N2A03,N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(vsnes_cpu1_map)
|
||||
/* some carts also trigger IRQs */
|
||||
MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsnes)
|
||||
@ -1769,10 +1769,10 @@ MACHINE_CONFIG_END
|
||||
static MACHINE_CONFIG_START( vsdual, vsnes_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", N2A03,N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(vsnes_cpu1_map)
|
||||
/* some carts also trigger IRQs */
|
||||
MCFG_CPU_ADD("sub", N2A03,N2A03_DEFAULTCLOCK)
|
||||
MCFG_CPU_ADD("sub", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(vsnes_cpu2_map)
|
||||
/* some carts also trigger IRQs */
|
||||
MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsdual)
|
||||
|
@ -21,12 +21,8 @@
|
||||
CONSTANTS
|
||||
***************************************************************************/
|
||||
|
||||
#define NTSC_CLOCK N2A03_DEFAULTCLOCK /* 1.789772 MHz */
|
||||
#define PAL_CLOCK (26601712.0/16) /* 1.662607 MHz */
|
||||
|
||||
#define NES_BATTERY_SIZE 0x2000
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
@ -29157,13 +29157,18 @@ nprsp //
|
||||
neptunp2 //
|
||||
|
||||
@source:nes.cpp
|
||||
dendy // Dendy (Classic russian famiclone)
|
||||
iq501 // Micro Genius IQ-501
|
||||
iq502 // Micro Genius IQ-502
|
||||
dendy // Dendy Classic (Russian import of IQ-501 famiclone)
|
||||
dendy2 // Dendy Classic 2 (Russian import of IQ-502 famiclone)
|
||||
sb486 // Subor/Xiao Ba Wang SB-486
|
||||
drpcjr // Bung Doctor PC Jr
|
||||
famicom // Nintendo Family Computer (a.k.a. Famicom)
|
||||
famitwin // Sharp Famicom Twin System
|
||||
fds // Nintendo Family Computer (a.k.a. Famicom) + Disk System add-on
|
||||
gchinatv // Golden China TV Game Centre (Chinese famiclone)
|
||||
m82 // Nintendo M82 Display Unit
|
||||
m82p // Nintendo M82 Display Unit PAL
|
||||
nes // Nintendo Entertainment System
|
||||
nespal // Nintendo Entertainment System PAL
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user