Merge pull request #2172 from kazblox/master

Additions/improvements to nes driver and softlist
This commit is contained in:
R. Belmont 2017-03-21 15:23:29 -04:00 committed by GitHub
commit 8b9ef0b09e
26 changed files with 797 additions and 341 deletions

View File

@ -8906,6 +8906,31 @@
</part> </part>
</software> </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"> <software name="doordoor">
<description>Door Door (Jpn)</description> <description>Door Door (Jpn)</description>
<year>1985</year> <year>1985</year>
@ -22341,14 +22366,14 @@
<info name="alt_title" value="도술동자 구구"/> <info name="alt_title" value="도술동자 구구"/>
<part name="cart" interface="nes_cart"> <part name="cart" interface="nes_cart">
<feature name="slot" value="zemina" /> <feature name="slot" value="zemina" />
<!-- Generic board! No signature, according to kevtris. Using NES-ZEMINA --> <!-- Generic board! No signature, according to kevtris. Using ZEMINA -->
<feature name="pcb" value="NES-ZEMINA" /> <feature name="pcb" value="ZEMINA" />
<!-- No stickers either, confirmed! --> <!-- No stickers either, except for "ZM-900" and "ZM-920". Likely production codes? -->
<dataarea name="prg" size="262144">
<rom name="0.prg" size="262144" crc="78f00865" sha1="8c9476dc5a6bbbf5604bc3327fa9d0bb0efd76cb" offset="00000" />
</dataarea>
<dataarea name="chr" size="131072"> <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> </dataarea>
<!-- 8k WRAM on cartridge --> <!-- 8k WRAM on cartridge -->
<dataarea name="wram" size="8192"> <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"> <part name="cart" interface="nes_cart">
<feature name="slot" value="daou_306" /> <feature name="slot" value="daou_306" />
<feature name="pcb" 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"> <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>
<dataarea name="prg" size="131072"> <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> </dataarea>
<!-- 8k WRAM on cartridge, battery backed up --> <!-- 8k WRAM on cartridge, battery backed up -->
<dataarea name="bwram" size="8192"> <dataarea name="bwram" size="8192">
@ -62144,30 +62176,6 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</part> </part>
</software> </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"> <software name="musicboxa" cloneof="musicbox">
<description>Karaoke (Asia, Chinese)</description> <description>Karaoke (Asia, Chinese)</description>
<year>19??</year> <year>19??</year>
@ -69277,24 +69285,23 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
</part> </part>
</software> </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> <description>GSD Super Student Computer Cartridge (Chi)</description>
<year>19??</year> <year>19??</year>
<publisher>&lt;unknown&gt;</publisher> <publisher>Gao Sheng Da</publisher>
<info name="alt_title" value="高升达超级学生电脑卡"/> <info name="alt_title" value="高升达超级学生电脑卡"/>
<part name="cart" interface="nes_cart"> <part name="cart" interface="nes_cart">
<feature name="slot" value="waixing_sgzlz" /> <feature name="slot" value="waixing_sgzlz" />
<feature name="pcb" 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"> <dataarea name="prg" size="524288">
<rom name="gsd super student computer cartridge (c).prg" size="524288" crc="b72b17ed" sha1="df3e8c4b79d1998e2932962926679d067da5b40b" offset="00000" status="baddump" /> <rom name="gsd super student computer cartridge (c).prg" size="524288" crc="b72b17ed" sha1="df3e8c4b79d1998e2932962926679d067da5b40b" offset="00000" status="baddump" />
</dataarea> </dataarea>
<!-- 8k VRAM on cartridge --> <!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192"> <dataarea name="vram" size="8192">
</dataarea> </dataarea>
<!-- 8k WRAM on cartridge, battery backed up -->
<dataarea name="bwram" size="8192">
<rom value="0x00" size="8192" offset="0" loadflag="fill" />
</dataarea>
</part> </part>
</software> </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"> <software name="abm5" supported="partial">
<description>ABM Study Card V5.0 (Chi)</description> <description>ABM Study Card V5.0 (Chi)</description>
<year>19??</year> <year>1995?</year>
<publisher>&lt;unknown&gt;</publisher> <publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="nes_cart"> <part name="cart" interface="nes_cart">
<feature name="slot" value="txc_commandos" /> <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"> <software name="asderp95">
<description>ASDER PC-95 (Asia?)</description> <description>ASDER PC-95 (Asia?)</description>
<year>19??</year> <year>1995?</year>
<publisher>&lt;unknown&gt;</publisher> <publisher>Asder</publisher>
<part name="cart" interface="nes_cart"> <part name="cart" interface="nes_cart">
<feature name="slot" value="txc_commandos" /> <feature name="slot" value="txc_commandos" />
<feature name="pcb" value="TXC-MXMDHTWO" /> <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"> <software name="hongda">
<description>Hong Da Study Cartridge (Chi)</description> <description>Hong Da Study Cartridge (Chi)</description>
<year>19??</year> <year>1995?</year>
<publisher>&lt;unknown&gt;</publisher> <publisher>Hong Da</publisher>
<part name="cart" interface="nes_cart"> <part name="cart" interface="nes_cart">
<feature name="slot" value="txc_commandos" /> <feature name="slot" value="txc_commandos" />
<feature name="pcb" value="TXC-MXMDHTWO" /> <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> </part>
</software> </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"> <software name="cksjdnj">
<description>Cang Ku Shi Jia Dong Nao Jin (Chi)</description> <description>Cang Ku Shi Jia Dong Nao Jin (Chi)</description>
<year>19??</year> <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 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 v1.1
Subor v2.0 [supposed to exist, but yet to be found] 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] 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 v4.0
Subor v5.0 [this seems quite interesting: the main cart can also be combined with two different subcarts!] 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 v7.0
Subor v8.0 Subor v8.0 [minor update of Subor v6.0, likely a pack-in cart?]
Subor v9.0 Subor v9.0
Subor v9.1 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 v11.0 (this shows 999 on the title screen)
Subor v12.0 [supposed to exist, but yet to be found] 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 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 v14.0 (this shows Windows 2000 on the title screen)
Subor v15.0 (this shows Windows 2002 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"> <software name="subor8">
<description>Subor v8.0 (Chi)</description> <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 --> <!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192"> <dataarea name="vram" size="8192">
</dataarea> </dataarea>
<!-- 8k WRAM on cartridge, battery backed up --> </part>
<dataarea name="bwram" size="8192"> </software>
<rom value="0x00" size="8192" offset="0" loadflag="fill" />
<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> </dataarea>
</part> </part>
</software> </software>
<software name="subor4"> <software name="subor4">
<description>Subor v4.0 (Chi)</description> <description>Subor v4.0 (Chi)</description>
<year>19??</year> <year>1995</year>
<publisher>Subor</publisher> <publisher>Subor</publisher>
<info name="alt_title" value="小霸王中英文电脑学习卡(V4.0)"/> <info name="alt_title" value="小霸王中英文电脑学习卡(V4.0)"/>
<part name="cart" interface="nes_cart"> <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"> <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" /> <rom name="subor v4.0 (19xx)(subor)(cn)(ru)[p][!].prg" size="1048576" crc="41ef9ac4" sha1="3b71320b8bbe46b44cb95735a1bed948db4e436a" offset="00000" status="baddump" />
</dataarea> </dataarea>
<!-- 8k? VRAM on cartridge --> <!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192"> <dataarea name="vram" size="8192">
</dataarea> </dataarea>
<!-- 8k WRAM on cartridge, battery backed up --> <!-- 8k WRAM on cartridge, battery backed up -->
@ -69980,19 +70056,39 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
</part> </part>
</software> </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"> <software name="subor3">
<description>Subor v3.0 (Chi)</description> <description>Subor v3.0 (Chi, with Chinese Chess)</description>
<year>19??</year> <year>1994</year>
<publisher>Subor</publisher> <publisher>Subor</publisher>
<info name="alt_title" value="小霸王中英文电脑学习卡(V3.0)"/> <info name="alt_title" value="小霸王中英文电脑学习卡(V3.0)"/>
<part name="cart" interface="nes_cart"> <part name="cart" interface="nes_cart">
<feature name="slot" value="waixing_wxzs2" /> <feature name="slot" value="waixing_wxzs2" />
<feature name="pcb" value="WAIXING-PS2" /> <feature name="pcb" value="WAIXING-PS2" />
<feature name="mirroring" value="vertical" />
<feature name="peripheral" value="sub_keyboard" /> <feature name="peripheral" value="sub_keyboard" />
<dataarea name="prg" size="524288"> <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" /> <rom name="subor v2.0 (19xx)(subor)(cn)(ru)[p][!].prg" size="524288" crc="6733607a" sha1="d1db84222573f0b1da0a0ed52c1792622e1d8700" offset="00000" status="baddump" />
</dataarea> </dataarea>
<!-- 8k? VRAM on cartridge --> <!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192"> <dataarea name="vram" size="8192">
</dataarea> </dataarea>
</part> </part>
@ -70000,7 +70096,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
<software name="subor11"> <software name="subor11">
<description>Subor v1.1 (Chi)</description> <description>Subor v1.1 (Chi)</description>
<year>19??</year> <year>1993?</year>
<publisher>Subor</publisher> <publisher>Subor</publisher>
<info name="alt_title" value="小霸王中英文电脑学习卡(V1.1)"/> <info name="alt_title" value="小霸王中英文电脑学习卡(V1.1)"/>
<part name="cart" interface="nes_cart"> <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"> <software name="subor1r" cloneof="subor3">
<description>Subor v1.0 (Rus)</description> <description>Subor v1.0 (Rus)</description>
<year>19??</year> <year>1994</year>
<publisher>Subor</publisher> <publisher>Subor</publisher>
<info name="alt_title" value="Сюбор Обучающий Картридж (V1.0)"/> <info name="alt_title" value="Сюбор Обучающий Картридж (V1.0)"/>
<part name="cart" interface="nes_cart"> <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"> <dataarea name="prg" size="131072">
<rom name="subor v1.0 (r) [a1].prg" size="131072" crc="82f1fb96" sha1="5da695bea9f4d93c553969dc95dad1ae88a6e478" offset="00000" status="baddump" /> <rom name="subor v1.0 (r) [a1].prg" size="131072" crc="82f1fb96" sha1="5da695bea9f4d93c553969dc95dad1ae88a6e478" offset="00000" status="baddump" />
</dataarea> </dataarea>
<!-- 8k? VRAM on cartridge --> <!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192"> <dataarea name="vram" size="8192">
</dataarea> </dataarea>
<!-- 8k WRAM on cartridge, battery backed up --> <!-- 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"> <software name="subor1ra" cloneof="subor3" supported="partial">
<description>Subor v1.0 (Rus, Alt)</description> <description>Subor v1.0 (Rus, Alt)</description>
<year>19??</year> <year>1994</year>
<publisher>Subor</publisher> <publisher>Subor</publisher>
<info name="alt_title" value="Сюбор Обучающий Картридж (V1.0)"/> <info name="alt_title" value="Сюбор Обучающий Картридж (V1.0)"/>
<part name="cart" interface="nes_cart"> <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"> <dataarea name="prg" size="131072">
<rom name="suborv10 (russian).prg" size="131072" crc="1460ec7b" sha1="86e2ac9f91d2b047c4e472b091667627a7eedaf1" offset="00000" status="baddump" /> <rom name="suborv10 (russian).prg" size="131072" crc="1460ec7b" sha1="86e2ac9f91d2b047c4e472b091667627a7eedaf1" offset="00000" status="baddump" />
</dataarea> </dataarea>
<!-- 8k? VRAM on cartridge --> <!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192"> <dataarea name="vram" size="8192">
</dataarea> </dataarea>
</part> </part>
@ -70063,7 +70159,7 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
<software name="magistr1" cloneof="subor3"> <software name="magistr1" cloneof="subor3">
<description>Magistr v1.0 (Rus)</description> <description>Magistr v1.0 (Rus)</description>
<year>19??</year> <year>199?</year>
<publisher>&lt;unknown&gt;</publisher> <publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="nes_cart"> <part name="cart" interface="nes_cart">
<feature name="slot" value="txc_commandos" /> <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"> <software name="simbas1" cloneof="subor3">
<description>Simba's v1.0 (Rus)</description> <description>Simba's v1.0 (Rus)</description>
<year>19??</year> <year>199?</year>
<publisher>&lt;unknown&gt;</publisher> <publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="nes_cart"> <part name="cart" interface="nes_cart">
<feature name="slot" value="txc_commandos" /> <feature name="slot" value="txc_commandos" />
@ -70145,6 +70241,28 @@ Subor v15.0 (this shows Windows 2002 on the title screen)
</part> </part>
</software> </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"> <software name="rsmxx">
<description>Ren Shi Ma Xue Xi v1.0 (Chi)</description> <description>Ren Shi Ma Xue Xi v1.0 (Chi)</description>
<year>19??</year> <year>19??</year>

View File

@ -1932,6 +1932,8 @@ if (BUSES["NES"]~=null) then
MAME_DIR .. "src/devices/bus/nes/sachen.h", MAME_DIR .. "src/devices/bus/nes/sachen.h",
MAME_DIR .. "src/devices/bus/nes/somari.cpp", MAME_DIR .. "src/devices/bus/nes/somari.cpp",
MAME_DIR .. "src/devices/bus/nes/somari.h", 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.cpp",
MAME_DIR .. "src/devices/bus/nes/sunsoft.h", MAME_DIR .. "src/devices/bus/nes/sunsoft.h",
MAME_DIR .. "src/devices/bus/nes/sunsoft_dcs.cpp", MAME_DIR .. "src/devices/bus/nes/sunsoft_dcs.cpp",

View File

@ -39,8 +39,6 @@
#define LOG_MMC(x) do { if (VERBOSE) logerror x; } while (0) #define LOG_MMC(x) do { if (VERBOSE) logerror x; } while (0)
#define N2A03_DEFAULTCLOCK (21477272.724 / 12)
//------------------------------------------------- //-------------------------------------------------
// constructor // constructor
//------------------------------------------------- //-------------------------------------------------
@ -642,7 +640,9 @@ static MACHINE_CONFIG_FRAGMENT( vrc6 )
// additional sound hardware // additional sound hardware
MCFG_SPEAKER_STANDARD_MONO("addon") 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) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 0.5)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -774,7 +774,9 @@ static MACHINE_CONFIG_FRAGMENT( vrc7 )
// additional sound hardware // additional sound hardware
MCFG_SPEAKER_STANDARD_MONO("addon") 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) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 0.5)
MACHINE_CONFIG_END MACHINE_CONFIG_END

View File

@ -216,6 +216,7 @@ SLOT_INTERFACE_START(nes_cart)
SLOT_INTERFACE_INTERNAL("daou_306", NES_DAOU306) SLOT_INTERFACE_INTERNAL("daou_306", NES_DAOU306)
SLOT_INTERFACE_INTERNAL("subor0", NES_SUBOR0) SLOT_INTERFACE_INTERNAL("subor0", NES_SUBOR0)
SLOT_INTERFACE_INTERNAL("subor1", NES_SUBOR1) SLOT_INTERFACE_INTERNAL("subor1", NES_SUBOR1)
SLOT_INTERFACE_INTERNAL("subor2", NES_SUBOR2)
SLOT_INTERFACE_INTERNAL("cc21", NES_CC21) SLOT_INTERFACE_INTERNAL("cc21", NES_CC21)
SLOT_INTERFACE_INTERNAL("xiaozy", NES_XIAOZY) SLOT_INTERFACE_INTERNAL("xiaozy", NES_XIAOZY)
SLOT_INTERFACE_INTERNAL("edu2k", NES_EDU2K) SLOT_INTERFACE_INTERNAL("edu2k", NES_EDU2K)

View File

@ -55,6 +55,7 @@
#include "rexsoft.h" #include "rexsoft.h"
#include "sachen.h" #include "sachen.h"
#include "somari.h" #include "somari.h"
#include "subor.h"
#include "tengen.h" #include "tengen.h"
#include "txc.h" #include "txc.h"
#include "waixing.h" #include "waixing.h"

View File

@ -691,7 +691,7 @@ void nes_cart_slot_device::call_load_ines()
if (!ines20) if (!ines20)
{ {
logerror("Loaded game in iNES format:\n"); 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("-- 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("-- 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); 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 else
{ {
logerror("Loaded game in Extended iNES format:\n"); logerror("Loaded game in Extended iNES format:\n");
logerror("-- Mapper: %d\n", mapper); logerror("-- Mapper: %u\n", mapper);
logerror("-- Submapper: %d\n", (header[8] & 0xf0) >> 4); logerror("-- Submapper: %u\n", (header[8] & 0xf0) >> 4);
logerror("-- PRG 0x%x (%d x 16k chunks)\n", prg_size, prg_size / 0x4000); 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("-- 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); logerror("-- VRAM 0x%x (%d x 8k chunks)\n", vram_size, vram_size / 0x2000);

View File

@ -185,6 +185,7 @@ static const nes_pcb pcb_list[] =
{ "daou_306", OPENCORP_DAOU306 }, { "daou_306", OPENCORP_DAOU306 },
{ "subor0", SUBOR_TYPE0 }, { "subor0", SUBOR_TYPE0 },
{ "subor1", SUBOR_TYPE1 }, { "subor1", SUBOR_TYPE1 },
{ "subor2", SUBOR_TYPE2 },
{ "cc21", UNL_CC21 }, { "cc21", UNL_CC21 },
{ "xiaozy", UNL_XIAOZY }, { "xiaozy", UNL_XIAOZY },
{ "edu2k", UNL_EDU2K }, { "edu2k", UNL_EDU2K },

View File

@ -113,7 +113,7 @@ enum
/* Misc: these are needed to convert mappers to boards, I will sort them later */ /* 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, OPENCORP_DAOU306, HES_BOARD, SVISION16_BOARD, RUMBLESTATION_BOARD, JYCOMPANY_A, JYCOMPANY_B, JYCOMPANY_C,
MAGICSERIES_MD, KASING_BOARD, FUTUREMEDIA_BOARD, FUKUTAKE_BOARD, SOMARI_SL12, 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_KS7058, KAISER_KS7032, KAISER_KS7022, KAISER_KS7017,
KAISER_KS7012, KAISER_KS7013B, KAISER_KS202, KAISER_KS7031, KAISER_KS7012, KAISER_KS7013B, KAISER_KS202, KAISER_KS7031,
KAISER_KS7016, KAISER_KS7037, KAISER_KS7016, KAISER_KS7037,

View File

@ -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_FUTUREMEDIA = device_creator<nes_futuremedia_device>;
const device_type NES_MAGSERIES = device_creator<nes_magseries_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_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_CC21 = device_creator<nes_cc21_device>;
const device_type NES_XIAOZY = device_creator<nes_xiaozy_device>; const device_type NES_XIAOZY = device_creator<nes_xiaozy_device>;
const device_type NES_EDU2K = device_creator<nes_edu2k_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_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__) : 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)); 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() void nes_cc21_device::device_start()
{ {
common_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 Board UNL-CC-21

View File

@ -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 // ======================> nes_cc21_device
class nes_cc21_device : public nes_nrom_device class nes_cc21_device : public nes_nrom_device

View 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;
}
}

View 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 */

View File

@ -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, // 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. // 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 ) static MACHINE_CONFIG_FRAGMENT( sun_5b )
// additional sound hardware // additional sound hardware
MCFG_SPEAKER_STANDARD_MONO("addon") 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) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END

View File

@ -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 { enum {
N2A03_IRQ_LINE = m6502_device::IRQ_LINE, N2A03_IRQ_LINE = m6502_device::IRQ_LINE,

View File

@ -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_2C03B = device_creator<ppu2c03b_device>;
const device_type PPU_2C04 = device_creator<ppu2c04_device>; const device_type PPU_2C04 = device_creator<ppu2c04_device>;
const device_type PPU_2C07 = device_creator<ppu2c07_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_01 = device_creator<ppu2c05_01_device>;
const device_type PPU_2C05_02 = device_creator<ppu2c05_02_device>; const device_type PPU_2C05_02 = device_creator<ppu2c05_02_device>;
const device_type PPU_2C05_03 = device_creator<ppu2c05_03_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)); memset(m_palette_ram, 0, ARRAY_LENGTH(m_palette_ram));
m_scanlines_per_frame = PPU_NTSC_SCANLINES_PER_FRAME; m_scanlines_per_frame = PPU_NTSC_SCANLINES_PER_FRAME;
m_vblank_first_scanline = PPU_VBLANK_FIRST_SCANLINE;
/* usually, no security value... */ /* usually, no security value... */
m_security_value = 0; 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; 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... // The PPU_2C05 variants have different protection value, set at device start, but otherwise are all the same...
// Vs. Unisystem (Ninja Jajamaru Kun) // 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__) 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_back_color));
save_item(NAME(m_scan_scale)); save_item(NAME(m_scan_scale));
save_item(NAME(m_scanlines_per_frame)); save_item(NAME(m_scanlines_per_frame));
save_item(NAME(m_vblank_first_scanline));
save_item(NAME(m_regs)); save_item(NAME(m_regs));
save_item(NAME(m_palette_ram)); save_item(NAME(m_palette_ram));
save_item(NAME(m_draw_phase)); 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: case TIMER_HBLANK:
blanked = (m_regs[PPU_CONTROL1] & (PPU_CONTROL1_BACKGROUND | PPU_CONTROL1_SPRITES)) == 0; 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(); //update_scanline();
@ -489,7 +499,7 @@ void ppu2c0x_device::device_timer(emu_timer &timer, device_timer_id id, int para
case TIMER_SCANLINE: case TIMER_SCANLINE:
blanked = (m_regs[PPU_CONTROL1] & (PPU_CONTROL1_BACKGROUND | PPU_CONTROL1_SPRITES)) == 0; 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; int next_scanline;
/* if a callback is available, call it */ /* 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()); // 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 */ /* 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"); // logerror("vblank starting\n");
/* We just entered VBLANK */ /* We just entered VBLANK */

View File

@ -47,33 +47,34 @@ enum
// bit definitions for (some of) the registers // bit definitions for (some of) the registers
enum enum
{ {
PPU_CONTROL0_INC = 0x04, PPU_CONTROL0_INC = 0x04,
PPU_CONTROL0_SPR_SELECT = 0x08, PPU_CONTROL0_SPR_SELECT = 0x08,
PPU_CONTROL0_CHR_SELECT = 0x10, PPU_CONTROL0_CHR_SELECT = 0x10,
PPU_CONTROL0_SPRITE_SIZE = 0x20, PPU_CONTROL0_SPRITE_SIZE = 0x20,
PPU_CONTROL0_NMI = 0x80, PPU_CONTROL0_NMI = 0x80,
PPU_CONTROL1_DISPLAY_MONO = 0x01, PPU_CONTROL1_DISPLAY_MONO = 0x01,
PPU_CONTROL1_BACKGROUND_L8 = 0x02, PPU_CONTROL1_BACKGROUND_L8 = 0x02,
PPU_CONTROL1_SPRITES_L8 = 0x04, PPU_CONTROL1_SPRITES_L8 = 0x04,
PPU_CONTROL1_BACKGROUND = 0x08, PPU_CONTROL1_BACKGROUND = 0x08,
PPU_CONTROL1_SPRITES = 0x10, PPU_CONTROL1_SPRITES = 0x10,
PPU_CONTROL1_COLOR_EMPHASIS = 0xe0, PPU_CONTROL1_COLOR_EMPHASIS = 0xe0,
PPU_STATUS_8SPRITES = 0x20, PPU_STATUS_8SPRITES = 0x20,
PPU_STATUS_SPRITE0_HIT = 0x40, PPU_STATUS_SPRITE0_HIT = 0x40,
PPU_STATUS_VBLANK = 0x80 PPU_STATUS_VBLANK = 0x80
}; };
enum enum
{ {
PPU_NTSC_SCANLINES_PER_FRAME = 262, PPU_NTSC_SCANLINES_PER_FRAME = 262,
PPU_PAL_SCANLINES_PER_FRAME = 312, PPU_PAL_SCANLINES_PER_FRAME = 312,
PPU_BOTTOM_VISIBLE_SCANLINE = 239, PPU_BOTTOM_VISIBLE_SCANLINE = 239,
PPU_VBLANK_FIRST_SCANLINE = 241, PPU_VBLANK_FIRST_SCANLINE = 241,
PPU_VBLANK_LAST_SCANLINE_NTSC = 260, PPU_VBLANK_FIRST_SCANLINE_PALC = 291,
PPU_VBLANK_LAST_SCANLINE_PAL = 310 PPU_VBLANK_LAST_SCANLINE_NTSC = 260,
PPU_VBLANK_LAST_SCANLINE_PAL = 310
// Both the scanline immediately before and immediately after VBLANK // Both the scanline immediately before and immediately after VBLANK
// are non-rendering and non-vblank. // are non-rendering and non-vblank.
@ -96,6 +97,8 @@ enum
MCFG_PPU2C0X_ADD(_tag, PPU_2C04) MCFG_PPU2C0X_ADD(_tag, PPU_2C04)
#define MCFG_PPU2C07_ADD(_tag) \ #define MCFG_PPU2C07_ADD(_tag) \
MCFG_PPU2C0X_ADD(_tag, PPU_2C07) MCFG_PPU2C0X_ADD(_tag, PPU_2C07)
#define MCFG_PPUPALC_ADD(_tag) \
MCFG_PPU2C0X_ADD(_tag, PPU_PALC)
#define MCFG_PPU2C05_01_ADD(_tag) \ #define MCFG_PPU2C05_01_ADD(_tag) \
MCFG_PPU2C0X_ADD(_tag, PPU_2C05_01) MCFG_PPU2C0X_ADD(_tag, PPU_2C05_01)
#define MCFG_PPU2C05_02_ADD(_tag) \ #define MCFG_PPU2C05_02_ADD(_tag) \
@ -189,7 +192,7 @@ public:
required_device<cpu_device> m_cpu; required_device<cpu_device> m_cpu;
std::unique_ptr<bitmap_ind16> m_bitmap; /* target bitmap */ 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; /* color table modified at run time */
std::unique_ptr<pen_t[]> m_colortable_mono; /* monochromatic 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 */ int m_scanline; /* scanline count */
@ -210,9 +213,10 @@ public:
int m_sprite_page; /* current sprite page */ int m_sprite_page; /* current sprite page */
int m_back_color; /* background color */ int m_back_color; /* background color */
int m_color_base; 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_scan_scale; /* scan scale */
int m_scanlines_per_frame; /* number of scanlines per frame */ 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_security_value; /* 2C05 protection */
int m_tilecount; /* MMC5 can change attributes to subsets of the 34 visible tiles */ 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 */ 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); 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 { class ppu2c05_01_device : public ppu2c0x_device {
public: public:
ppu2c05_01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 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_2C03B; // Playchoice 10
extern const device_type PPU_2C04; // Vs. Unisystem extern const device_type PPU_2C04; // Vs. Unisystem
extern const device_type PPU_2C07; // PAL NES 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_01; // Vs. Unisystem (Ninja Jajamaru Kun)
extern const device_type PPU_2C05_02; // Vs. Unisystem (Mighty Bomb Jack) extern const device_type PPU_2C05_02; // Vs. Unisystem (Mighty Bomb Jack)
extern const device_type PPU_2C05_03; // Vs. Unisystem (Gumshoe) extern const device_type PPU_2C05_03; // Vs. Unisystem (Gumshoe)

View File

@ -1429,11 +1429,11 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_FRAGMENT( dkong3_audio ) 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_PROGRAM_MAP(dkong3_sound1_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dkong_state, nmi_line_pulse) 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_PROGRAM_MAP(dkong3_sound2_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dkong_state, nmi_line_pulse) MCFG_CPU_VBLANK_INT_DRIVER("screen", dkong_state, nmi_line_pulse)

View File

@ -311,10 +311,9 @@ GFXDECODE_END
static MACHINE_CONFIG_START( cham24, cham24_state ) static MACHINE_CONFIG_START( cham24, cham24_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", N2A03, N2A03_DEFAULTCLOCK) MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
MCFG_CPU_PROGRAM_MAP(cham24_map) MCFG_CPU_PROGRAM_MAP(cham24_map)
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_REFRESH_RATE(60)

View File

@ -546,7 +546,7 @@ void famibox_state::machine_start()
static MACHINE_CONFIG_START( famibox, famibox_state ) static MACHINE_CONFIG_START( famibox, famibox_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", N2A03, N2A03_DEFAULTCLOCK) MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
MCFG_CPU_PROGRAM_MAP(famibox_map) MCFG_CPU_PROGRAM_MAP(famibox_map)
/* video hardware */ /* video hardware */

View File

@ -1214,7 +1214,7 @@ MACHINE_START_MEMBER(multigam_state,supergm3)
static MACHINE_CONFIG_START( multigam, multigam_state ) static MACHINE_CONFIG_START( multigam, multigam_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", N2A03, N2A03_DEFAULTCLOCK) MCFG_CPU_ADD("maincpu", N2A03, NTSC_APU_CLOCK)
MCFG_CPU_PROGRAM_MAP(multigam_map) MCFG_CPU_PROGRAM_MAP(multigam_map)

View File

@ -56,16 +56,16 @@ void nes_state::ppu_nmi(int *ppu_regs)
static MACHINE_CONFIG_START( nes, nes_state ) static MACHINE_CONFIG_START( nes, nes_state )
/* basic machine hardware */ /* 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_CPU_PROGRAM_MAP(nes_map)
MCFG_SCREEN_ADD("screen", RASTER) 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 // 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 // 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 // non-rendering scanlines, we compensate. This ends up being 2500 cycles for the non-rendering portion, 2273
// cycles for the actual vblank period. // 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_SIZE(32*8, 262)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1)
MCFG_SCREEN_UPDATE_DRIVER(nes_state, screen_update_nes) MCFG_SCREEN_UPDATE_DRIVER(nes_state, screen_update_nes)
@ -97,15 +97,13 @@ static MACHINE_CONFIG_START( nes, nes_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( nespal, nes ) static MACHINE_CONFIG_DERIVED( nespal, nes )
/* basic machine hardware */ /* basic machine hardware */
// MCFG_CPU_MODIFY("maincpu") // 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_CPU_PROGRAM_MAP(nes_map)
MCFG_DEVICE_REMOVE("ppu") MCFG_DEVICE_REMOVE("ppu")
MCFG_PPU2C07_ADD("ppu") MCFG_PPU2C07_ADD("ppu")
MCFG_PPU2C0X_CPU("maincpu") MCFG_PPU2C0X_CPU("maincpu")
@ -113,33 +111,10 @@ static MACHINE_CONFIG_DERIVED( nespal, nes )
/* video hardware */ /* video hardware */
MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_REFRESH_RATE(53.355) MCFG_SCREEN_REFRESH_RATE(50.0070)
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_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_SIZE(32*8, 312)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 30*8-1) 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 MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( famicom, nes ) static MACHINE_CONFIG_DERIVED( famicom, nes )
@ -154,6 +129,43 @@ static MACHINE_CONFIG_DERIVED( famicom, nes )
MCFG_SOFTWARE_LIST_ADD("cass_list", "famicom_cass") MCFG_SOFTWARE_LIST_ADD("cass_list", "famicom_cass")
MACHINE_CONFIG_END 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) void nes_state::setup_disk(nes_disksys_device *slot)
{ {
if (slot) if (slot)
@ -285,6 +297,13 @@ ROM_START( m82 )
ROM_LOAD( "m82_v1_0.bin", 0x10000, 0x4000, CRC(7d56840a) SHA1(cbd2d14fa073273ba58367758f40d67fd8a9106d) ) ROM_LOAD( "m82_v1_0.bin", 0x10000, 0x4000, CRC(7d56840a) SHA1(cbd2d14fa073273ba58367758f40d67fd8a9106d) )
ROM_END 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 // see http://www.disgruntleddesigner.com/chrisc/drpcjr/index.html
// and http://www.disgruntleddesigner.com/chrisc/drpcjr/DrPCJrMemMap.txt // and http://www.disgruntleddesigner.com/chrisc/drpcjr/DrPCJrMemMap.txt
ROM_START( drpcjr ) ROM_START( drpcjr )
@ -296,14 +315,30 @@ ROM_START( drpcjr )
// ROM_LOAD("drpcjr_v1_5_gg.bin", 0x10000, 0x8000, CRC(98f2033b) SHA1(93c114da787a19279d1a46667c2f69b49e25d4f1) ) // ROM_LOAD("drpcjr_v1_5_gg.bin", 0x10000, 0x8000, CRC(98f2033b) SHA1(93c114da787a19279d1a46667c2f69b49e25d4f1) )
ROM_END 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_START( dendy )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
ROM_END ROM_END
ROM_START( dendy2 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
ROM_END
ROM_START( gchinatv ) ROM_START( gchinatv )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
ROM_END ROM_END
ROM_START( sb486 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) /* Main RAM */
ROM_END
/*************************************************************************** /***************************************************************************
Game driver(s) Game driver(s)
@ -311,12 +346,37 @@ ROM_END
***************************************************************************/ ***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ /* 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 ) /* Nintendo Entertainment System hardware */
CONS( 1983, famicom, nes, 0, famicom, famicom, nes_state, famicom, "Nintendo", "Famicom (NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) CONS( 1985, nes, 0, 0, nes, nes, driver_device, 0, "Nintendo", "Nintendo Entertainment System / 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( 1987, nespal, nes, 0, nespal, nes, driver_device, 0, "Nintendo", "Nintendo Entertainment System (PAL)", 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 ) // M82 Display Unit
CONS( 198?, m82, nes, 0, nes, nes, driver_device, 0, "Nintendo", "M82 Display Unit", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // supports up to twelve cartridge slots
CONS( 1996, drpcjr, nes, 0, famicom, famicom, nes_state, famicom, "Bung", "Doctor PC Jr", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) 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( 1992, dendy, nes, 0, dendy, nes, driver_device, 0, "Steepler", "Dendy Classic", MACHINE_IMPERFECT_GRAPHICS | 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 )
CONS( 198?, gchinatv, nes, 0, nespal, nes, driver_device, 0, "Golden China", "Golden China TV Game", MACHINE_IMPERFECT_GRAPHICS | 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 )

View File

@ -303,8 +303,6 @@ Notes & Todo:
#include "screen.h" #include "screen.h"
#include "speaker.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_IO_MAP(bios_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("top", playch10_state, playch10_interrupt) 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) MCFG_CPU_PROGRAM_MAP(cart_map)

View File

@ -648,7 +648,7 @@ static MACHINE_CONFIG_START( punchout, punchout_state )
MCFG_CPU_IO_MAP(punchout_io_map) MCFG_CPU_IO_MAP(punchout_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("top", punchout_state, vblank_irq) 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_PROGRAM_MAP(punchout_sound_map)
MCFG_CPU_VBLANK_INT_DRIVER("top", punchout_state, nmi_line_pulse) 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("soundlatch")
MCFG_GENERIC_LATCH_8_ADD("soundlatch2") 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_DEVICE_ADDRESS_MAP(AS_0, punchout_vlm_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END

View File

@ -1702,7 +1702,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( vsnes, vsnes_state ) static MACHINE_CONFIG_START( vsnes, vsnes_state )
/* basic machine hardware */ /* 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) MCFG_CPU_PROGRAM_MAP(vsnes_cpu1_map)
/* some carts also trigger IRQs */ /* some carts also trigger IRQs */
MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsnes) MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsnes)
@ -1769,10 +1769,10 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( vsdual, vsnes_state ) static MACHINE_CONFIG_START( vsdual, vsnes_state )
/* basic machine hardware */ /* 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) MCFG_CPU_PROGRAM_MAP(vsnes_cpu1_map)
/* some carts also trigger IRQs */ /* 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) MCFG_CPU_PROGRAM_MAP(vsnes_cpu2_map)
/* some carts also trigger IRQs */ /* some carts also trigger IRQs */
MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsdual) MCFG_MACHINE_RESET_OVERRIDE(vsnes_state,vsdual)

View File

@ -21,12 +21,8 @@
CONSTANTS CONSTANTS
***************************************************************************/ ***************************************************************************/
#define NTSC_CLOCK N2A03_DEFAULTCLOCK /* 1.789772 MHz */
#define PAL_CLOCK (26601712.0/16) /* 1.662607 MHz */
#define NES_BATTERY_SIZE 0x2000 #define NES_BATTERY_SIZE 0x2000
/*************************************************************************** /***************************************************************************
TYPE DEFINITIONS TYPE DEFINITIONS
***************************************************************************/ ***************************************************************************/

View File

@ -29157,13 +29157,18 @@ nprsp //
neptunp2 // neptunp2 //
@source:nes.cpp @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 drpcjr // Bung Doctor PC Jr
famicom // Nintendo Family Computer (a.k.a. Famicom) famicom // Nintendo Family Computer (a.k.a. Famicom)
famitwin // Sharp Famicom Twin System famitwin // Sharp Famicom Twin System
fds // Nintendo Family Computer (a.k.a. Famicom) + Disk System add-on fds // Nintendo Family Computer (a.k.a. Famicom) + Disk System add-on
gchinatv // Golden China TV Game Centre (Chinese famiclone) gchinatv // Golden China TV Game Centre (Chinese famiclone)
m82 // Nintendo M82 Display Unit m82 // Nintendo M82 Display Unit
m82p // Nintendo M82 Display Unit PAL
nes // Nintendo Entertainment System nes // Nintendo Entertainment System
nespal // Nintendo Entertainment System PAL nespal // Nintendo Entertainment System PAL