Previous 199869 Revisions Next

r22514 Wednesday 24th April, 2013 at 06:36:07 UTC by Fabio Priuli
(MESS) nes.c: Fixed remaining known bootleg PCBs (mostly SMB2 FDS conversions) and
improved FFE mappers (I'd be more interested into actually emulating the copier but this is
all we got at the moment...) . nw.

Also, backing up some wip code for other pcbs that still does not produce any useful result.
[hash]nes.xml
[src/mess/includes]nes.h
[src/mess/machine]nes.c nes_bandai.c nes_bandai.h nes_bootleg.c nes_bootleg.h nes_jy.c nes_legacy.c nes_legacy.h nes_pcb.c nes_slot.h nes_somari.c nes_somari.h

trunk/hash/nes.xml
r22513r22514
5099950999
5100051000   <!-- TC-031 is unknown. Possibly "Bridge", an unreleased proto -->
5100151001
51002   <software name="chuugokt" supported="no">
51002   <software name="chuugokt" supported="partial">
5100351003      <description>Chuugoku Taitei (Tw)</description>
5100451004      <year>19??</year>
5100551005      <publisher>Sachen</publisher>
5100651006      <info name="serial" value="TC-032"/>
5100751007      <info name="alt_title" value="中國大亨"/>
5100851008      <part name="cart" interface="nes_cart">
51009         <feature name="slot" value="somari" />
51010         <feature name="pcb" value="SOMERITEAM-SL-12" />
51009         <feature name="slot" value="txrom" />
51010         <feature name="pcb" value="NES-TLROM" />   <!-- Original header was mapper 116, but it's not a SOMARI pcb... -->
5101151011         <dataarea name="chr" size="131072">
5101251012            <rom name="chuugoku taitei (asia) (unl).chr" size="131072" crc="d9203c08" sha1="b32ef62e4583b216aea84f7d0da0269c01b61e26" offset="00000" status="baddump" />
5101351013         </dataarea>
5101451014         <dataarea name="prg" size="262144">
5101551015            <rom name="chuugoku taitei (asia) (unl).prg" size="262144" crc="3acdcc64" sha1="32436a43d3c371ab7aa6bb5165f60ca5c006a60e" offset="00000" status="baddump" />
5101651016         </dataarea>
51017         <!-- 8k WRAM on cartridge -->
51018         <dataarea name="wram" size="8192">
51019         </dataarea>
5101751020      </part>
5101851021   </software>
5101951022
r22513r22514
6308563088      </part>
6308663089   </software>
6308763090
63088   <software name="bballfds" supported="no">
63089      <description>Baseball (Asia, FDS conversion?)</description>
63090      <year>19??</year>
63091      <publisher>&lt;unknown&gt;</publisher>
63092      <part name="cart" interface="nes_cart">
63093         <feature name="slot" value="unknown" />
63094         <feature name="pcb" value="UNKNOWN" /> <!-- mapper 253?!? -->
63095         <dataarea name="prg" size="81920">
63096            <rom name="baseball.prg" size="81920" crc="30296e0c" sha1="61ccce33b50ab1d6aab46cb52ee1ecaaaa3fdf0c" offset="00000" status="baddump" />
63097         </dataarea>
63098         <!-- 8k VRAM on cartridge -->
63099         <dataarea name="vram" size="8192">
63100         </dataarea>
63101         <!-- 8k WRAM on cartridge -->
63102         <dataarea name="wram" size="8192">
63103         </dataarea>
63104      </part>
63105   </software>
63106
6310763091   <software name="maribaby">
6310863092      <description>Mario Baby ~ Bio Miracle Bokutte Upa (Asia, FDS conversion)</description>
6310963093      <year>19??</year>
r22513r22514
6317163155      </part>
6317263156   </software>
6317363157
63174<!-- FIXME: which board should use this game?? -->
63175   <software name="cluclud" supported="no">
63176      <description>Clu Clu Land D (Asia, FDS conversion)</description>
63177      <year>19??</year>
63178      <publisher>&lt;pirate&gt;</publisher>
63179      <part name="cart" interface="nes_cart">
63180         <feature name="slot" value="unknown" />
63181         <feature name="pcb" value="UNKNOWN" />
63182         <dataarea name="chr" size="8192">
63183            <rom name="clu clu land d (j) (fds conversion).chr" size="8192" crc="64a75549" sha1="7c950e89e6df0915820fe0c3e6750c085a8aaf83" offset="00000" status="baddump" />
63184         </dataarea>
63185         <dataarea name="prg" size="32768">
63186            <rom name="clu clu land d (j) (fds conversion).prg" size="32768" crc="84594123" sha1="54fce5fbfbb3ae47ce3a62f9092c0ff204cf1cec" offset="00000" status="baddump" />
63187         </dataarea>
63188      </part>
63189   </software>
63190
6319163158   <software name="dokidoki">
6319263159      <description>Doki Doki Panic (Asia, FDS conversion)</description>
6319363160      <year>19??</year>
r22513r22514
6331063277      </part>
6331163278   </software>
6331263279
63313   <software name="iceclfds" supported="no">
63314      <description>Ice Climber (Asia, FDS conversion)</description>
63280   <software name="meikyfds">
63281      <description>Meikyuu Jiin Dababa (Asia, FDS conversion)</description>
6331563282      <year>19??</year>
6331663283      <publisher>&lt;pirate&gt;</publisher>
6331763284      <part name="cart" interface="nes_cart">
63318         <feature name="slot" value="nrom" />
63319         <feature name="pcb" value="NES-NROM-256" />
63285         <feature name="slot" value="whirl2706" />
63286         <feature name="pcb" value="WHIRLWIND-2706" />
63287         <feature name="mirroring" value="vertical" />
63288         <dataarea name="prg" size="131072">
63289            <rom name="meikyuu jiin dababa (fds conversion) (unl).prg" size="131072" crc="d8012992" sha1="5f0943dc8145542abc70bf20e4754b3c08653399" offset="00000" status="baddump" />
63290         </dataarea>
63291         <!-- 8k VRAM on cartridge -->
63292         <dataarea name="vram" size="8192">
63293         </dataarea>
63294      </part>
63295   </software>
63296
63297   <software name="montyfds">
63298      <description>Monty no Doki Doki Daidassou (Asia, FDS conversion)</description>
63299      <year>19??</year>
63300      <publisher>&lt;pirate&gt;</publisher>
63301      <part name="cart" interface="nes_cart">
63302         <feature name="slot" value="unl_lh32" />
63303         <feature name="pcb" value="UNL-LH32" />
63304         <feature name="mirroring" value="vertical" />
63305         <dataarea name="prg" size="131072">
63306            <rom name="monty no doki doki daidassou (fds conversion)(unl)[u][!].prg" size="131072" crc="09e3dcb4" sha1="ffb4706e49b826c6cdd12e502e8ae94fc9810b7f" offset="00000" status="baddump" />
63307         </dataarea>
63308         <!-- 8k VRAM on cartridge -->
63309         <dataarea name="vram" size="8192">
63310         </dataarea>
63311         <!-- 8k WRAM on cartridge -->
63312         <dataarea name="wram" size="8192">
63313         </dataarea>
63314      </part>
63315   </software>
63316
63317   <software name="prowrfds">
63318      <description>ProWres - Famicom Wrestling Association (Asia, FDS conversion)</description>
63319      <year>19??</year>
63320      <publisher>&lt;pirate&gt;</publisher>
63321      <part name="cart" interface="nes_cart">
63322         <feature name="slot" value="unl_bb" />
63323         <feature name="pcb" value="UNL-BB" />
63324         <feature name="mirroring" value="vertical" />
63325         <dataarea name="chr" size="16384">
63326            <rom name="prowres (fds conversion, le05 simplified)(unl)[u][!].chr" size="16384" crc="58d4719f" sha1="372c4873696578ab56bdc8ec8133099194a864b7" offset="00000" status="baddump" />
63327         </dataarea>
6332063328         <dataarea name="prg" size="32768">
63321            <rom name="ice climber (j) (fds conversion).prg" size="32768" crc="d8ec6353" sha1="7409b32043a0d23b5b44b96f14214bef5ba4d9ca" offset="00000" status="baddump" />
63329            <rom name="prowres (fds conversion, le05 simplified)(unl)[u][!].prg" size="32768" crc="7d219257" sha1="d46a9d1752204069cb4e0cc04338b5aa4ca54568" offset="00000" status="baddump" />
6332263330         </dataarea>
63331      </part>
63332   </software>
63333
63334   <software name="smb2lf" cloneof="smb2fds">
63335      <description>Super Mario Bros. 2 (LF36)</description>
63336      <year>19??</year>
63337      <publisher>&lt;pirate&gt;</publisher>
63338      <part name="cart" interface="nes_cart">
63339         <feature name="slot" value="smb2j" />
63340         <feature name="pcb" value="BTL-SMB2C" />
63341         <feature name="mirroring" value="vertical" />
63342         <dataarea name="chr" size="8192">
63343            <rom name="super mario bros. 2 (j) (lf36).chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
63344         </dataarea>
63345         <dataarea name="prg" size="81920">
63346            <rom name="super mario bros. 2 (j) (lf36).prg" size="81920" crc="25e0b714" sha1="7e7711b911f10b4ef325b7b25a770e1de188fe27" offset="00000" status="baddump" />
63347         </dataarea>
63348      </part>
63349   </software>
63350
63351   <software name="smb2k" cloneof="smb2fds">
63352      <description>Super Mario Bros. 2 (Kaiser)</description>
63353      <year>19??</year>
63354      <publisher>&lt;pirate&gt;</publisher>
63355      <part name="cart" interface="nes_cart">
63356         <feature name="slot" value="ks7032" />
63357         <feature name="pcb" value="UNL-KS7032" />
63358         <feature name="mirroring" value="vertical" />
63359         <dataarea name="prg" size="131072">
63360            <rom name="super mario bros. 2 (j) (kaiser).prg" size="131072" crc="281326ed" sha1="dc8ddb78cbb575623b701954df951f05e81388ea" offset="00000" status="baddump" />
63361         </dataarea>
6332363362         <!-- 8k VRAM on cartridge -->
6332463363         <dataarea name="vram" size="8192">
6332563364         </dataarea>
6332663365      </part>
6332763366   </software>
6332863367
63329   <software name="icehfds" supported="no">
63330      <description>Ice Hockey (Asia, FDS conversion)</description>
63368   <software name="smb2h" cloneof="smb">
63369      <description>Super Mario Bros. 2 (Super Mario Bros. Pirate)</description>
6333163370      <year>19??</year>
6333263371      <publisher>&lt;pirate&gt;</publisher>
6333363372      <part name="cart" interface="nes_cart">
6333463373         <feature name="slot" value="nrom" />
6333563374         <feature name="pcb" value="NES-NROM-256" />
63375         <feature name="mirroring" value="vertical" />
6333663376         <dataarea name="chr" size="8192">
63337            <rom name="ice hockey (j) (fds conversion).chr" size="8192" crc="f10fc90a" sha1="1a2a657267de1f5bdf284d1b69ed7d4895dfb281" offset="00000" status="baddump" />
63377            <rom name="super mario bros. (title hack) (unl).chr" size="8192" crc="b5a7524b" sha1="791b1c93d58c5d94df803449a2ce3e118d1adc50" offset="00000" status="baddump" />
6333863378         </dataarea>
6333963379         <dataarea name="prg" size="32768">
63340            <rom name="ice hockey (j) (fds conversion).prg" size="32768" crc="c02e5f1f" sha1="5244c2d123e02914590791c9ffc5e4f945d801ff" offset="00000" status="baddump" />
63380            <rom name="super mario bros. (title hack) (unl).prg" size="32768" crc="ae15ebae" sha1="dc5bbe66886c0934c16a9cdedbf474f6bc5215a1" offset="00000" status="baddump" />
6334163381         </dataarea>
6334263382      </part>
6334363383   </software>
6334463384
63345   <software name="meikyfds">
63346      <description>Meikyuu Jiin Dababa (Asia, FDS conversion)</description>
63385   <software name="smb2m" cloneof="smb">
63386      <description>Super Mario Bros Malee 2</description>
6334763387      <year>19??</year>
6334863388      <publisher>&lt;pirate&gt;</publisher>
6334963389      <part name="cart" interface="nes_cart">
63350         <feature name="slot" value="whirl2706" />
63351         <feature name="pcb" value="WHIRLWIND-2706" />
63390         <feature name="slot" value="mmalee2" />
63391         <feature name="pcb" value="BTL-MARIO1-MALEE2" />
6335263392         <feature name="mirroring" value="vertical" />
63393         <dataarea name="chr" size="8192">
63394            <rom name="super mario bros malee 2 (unl) [u].chr" size="8192" crc="b5a7524b" sha1="791b1c93d58c5d94df803449a2ce3e118d1adc50" offset="00000" status="baddump" />
63395         </dataarea>
63396         <dataarea name="prg" size="34816">
63397            <rom name="super mario bros malee 2 (unl) [u].prg0" size="32768" crc="ddf910b2" sha1="3977f975b2db0fba6cce8621d7d49a2b86ff2c43" offset="0x0000" status="baddump" />
63398            <rom name="super mario bros malee 2 (unl) [u].prg1" size="2048" crc="2ee84bd0" sha1="51239bdc89ee3f1b7c9b17a63bff1fc20a36b244" offset="0x8000" status="baddump" />
63399         </dataarea>
63400         <!-- 2k WRAM on cartridge -->
63401         <dataarea name="wram" size="2048">
63402         </dataarea>
63403      </part>
63404   </software>
63405
63406   <software name="smb2fdsa" cloneof="smb2fds">
63407      <description>Super Mario Bros. 2 (FDS conversion)</description>
63408      <year>19??</year>
63409      <publisher>&lt;pirate&gt;</publisher>
63410      <part name="cart" interface="nes_cart">
63411         <feature name="slot" value="smb2ja" />
63412         <feature name="pcb" value="BTL-SMB2A" />
63413         <feature name="mirroring" value="vertical" />
63414         <dataarea name="chr" size="8192">
63415            <rom name="super mario bros 2 (lost levels) (unl).chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
63416         </dataarea>
63417         <dataarea name="prg" size="65536">
63418            <rom name="super mario bros 2 (lost levels) (unl).prg" size="65536" crc="bead254c" sha1="167e2b9629edefadea54564accaeceb4c08afc55" offset="00000" status="baddump" />
63419         </dataarea>
63420      </part>
63421   </software>
63422
63423   <software name="smb2fdsb" cloneof="smb2fds">
63424      <description>Super Mario Bros. 2 (FDS conversion, Alt PCB)</description>
63425      <year>19??</year>
63426      <publisher>&lt;pirate&gt;</publisher>
63427      <part name="cart" interface="nes_cart">
63428         <feature name="slot" value="smb2jb" />
63429         <feature name="pcb" value="BTL-SMB2B" />
63430         <feature name="mirroring" value="vertical" />
6335363431         <dataarea name="prg" size="131072">
63354            <rom name="meikyuu jiin dababa (fds conversion) (unl).prg" size="131072" crc="d8012992" sha1="5f0943dc8145542abc70bf20e4754b3c08653399" offset="00000" status="baddump" />
63432            <rom name="super mario bros. (alt levels).prg" size="131072" crc="313491ed" sha1="0ffe5aa3fbee72601bd629849a30379937d170d7" offset="00000" status="baddump" />
6335563433         </dataarea>
6335663434         <!-- 8k VRAM on cartridge -->
6335763435         <dataarea name="vram" size="8192">
r22513r22514
6335963437      </part>
6336063438   </software>
6336163439
63362   <software name="montyfds">
63363      <description>Monty no Doki Doki Daidassou (Asia, FDS conversion)</description>
63440   <software name="tobidfds">
63441      <description>Tobidase Daisakusen (Asia, FDS conversion)</description>
6336463442      <year>19??</year>
6336563443      <publisher>&lt;pirate&gt;</publisher>
6336663444      <part name="cart" interface="nes_cart">
63367         <feature name="slot" value="unl_lh32" />
63368         <feature name="pcb" value="UNL-LH32" />
63445         <feature name="slot" value="tobidase" />
63446         <feature name="pcb" value="BTL-TOBIDASEDAISAKUSEN" />
6336963447         <feature name="mirroring" value="vertical" />
63370         <dataarea name="prg" size="131072">
63371            <rom name="monty no doki doki daidassou (fds conversion)(unl)[u][!].prg" size="131072" crc="09e3dcb4" sha1="ffb4706e49b826c6cdd12e502e8ae94fc9810b7f" offset="00000" status="baddump" />
63448         <dataarea name="prg" size="98304">
63449            <rom name="tobidase daisakusen (fds conversion).prg" size="98304" crc="ee82b3ea" sha1="7fcf28158dfb991aa47d35fdec1512a7947c989e" offset="00000" status="baddump" />
6337263450         </dataarea>
6337363451         <!-- 8k VRAM on cartridge -->
6337463452         <dataarea name="vram" size="8192">
6337563453         </dataarea>
63454      </part>
63455   </software>
63456
63457   <software name="vballfdsa" cloneof="volley" supported="no">
63458      <description>Volleyball (Asia, FDS conversion, Alt)</description>
63459      <year>19??</year>
63460      <publisher>&lt;pirate&gt;</publisher>
63461      <part name="cart" interface="nes_cart">
63462         <feature name="slot" value="smb2j" />
63463         <feature name="pcb" value="UNL-SMB2J" />
63464         <dataarea name="chr" size="8192">
63465            <rom name="volleyball (fds conversion) (unl) [u].chr" size="8192" crc="0101a6fb" sha1="fd7338e3802b897172f0f22e7f5a191bc68dd6d2" offset="00000" status="baddump" />
63466         </dataarea>
63467         <dataarea name="prg" size="32768">
63468            <rom name="volleyball (fds conversion) (unl) [u].prg" size="32768" crc="d4fb2cd8" sha1="56cacee106de0116857421081c778ebc9d480aa0" offset="00000" status="baddump" />
63469         </dataarea>
63470      </part>
63471   </software>
63472
63473   <software name="zanacfds">
63474      <description>Zanac (Asia, FDS conversion)</description>
63475      <year>19??</year>
63476      <publisher>Whirlwind Manu</publisher>
63477      <part name="cart" interface="nes_cart">
63478         <feature name="slot" value="09034a" />
63479         <feature name="pcb" value="UNL-SMB2J" />
63480         <dataarea name="prg" size="49152">
63481            <rom name="zanac (kaiser) (fds conversion) (unl).prg0" size="32768" crc="e485c52f" sha1="257dffd53691b70b26bd2b6770dd7ca38f2b917a" offset="0x0000" status="baddump" />
63482            <rom name="zanac (kaiser) (fds conversion) (unl).prg1" size="16384" crc="bedba7cc" sha1="8d759c768b7e93ca852f107f4ce48c2c979fd618" offset="0x8000" status="baddump" />
63483         </dataarea>
63484         <!-- 8k VRAM on cartridge -->
63485         <dataarea name="vram" size="8192">
63486         </dataarea>
63487      </part>
63488   </software>
63489
63490   <software name="zanacfdsa" cloneof="zanacfds">
63491      <description>Zanac (Asia, FDS conversion, Alt)</description>
63492      <year>19??</year>
63493      <publisher>Kaiser</publisher>
63494      <part name="cart" interface="nes_cart">
63495         <feature name="slot" value="ks7012" />
63496         <feature name="pcb" value="UNL-KS7012" />
63497         <dataarea name="prg" size="65536">
63498            <rom name="zanac (kaiser) (fds conversion) (unl).prg" size="65536" crc="e912ce65" sha1="a92278c445cf02c88652a608327a48f59fe83979" offset="00000" status="baddump" />
63499         </dataarea>
63500         <!-- 8k VRAM on cartridge -->
63501         <dataarea name="vram" size="8192">
63502         </dataarea>
6337663503         <!-- 8k WRAM on cartridge -->
6337763504         <dataarea name="wram" size="8192">
6337863505         </dataarea>
6337963506      </part>
6338063507   </software>
6338163508
63382   <software name="othelfds" supported="no">
63383      <description>Othello (Asia, FDS conversion)</description>
63509
63510<!-- Are these supposed to work? -->
63511
63512
63513   <software name="bballfds" supported="no">
63514      <description>Baseball (Asia, FDS conversion?)</description>
6338463515      <year>19??</year>
63516      <publisher>&lt;unknown&gt;</publisher>
63517      <part name="cart" interface="nes_cart">
63518         <feature name="slot" value="unknown" />
63519         <feature name="pcb" value="UNKNOWN" /> <!-- mapper 253?!? -->
63520         <dataarea name="prg" size="81920">
63521            <rom name="baseball.prg" size="81920" crc="30296e0c" sha1="61ccce33b50ab1d6aab46cb52ee1ecaaaa3fdf0c" offset="00000" status="baddump" />
63522         </dataarea>
63523         <!-- 8k VRAM on cartridge -->
63524         <dataarea name="vram" size="8192">
63525         </dataarea>
63526         <!-- 8k WRAM on cartridge -->
63527         <dataarea name="wram" size="8192">
63528         </dataarea>
63529      </part>
63530   </software>
63531
63532<!-- FIXME: which board should use this game?? -->
63533   <software name="cluclud" supported="no">
63534      <description>Clu Clu Land D (Asia, FDS conversion)</description>
63535      <year>19??</year>
6338563536      <publisher>&lt;pirate&gt;</publisher>
6338663537      <part name="cart" interface="nes_cart">
63538         <feature name="slot" value="test" />
63539         <feature name="pcb" value="UNKNOWN" />
63540         <dataarea name="chr" size="8192">
63541            <rom name="clu clu land d (j) (fds conversion).chr" size="8192" crc="64a75549" sha1="7c950e89e6df0915820fe0c3e6750c085a8aaf83" offset="00000" status="baddump" />
63542         </dataarea>
63543         <dataarea name="prg" size="32768">
63544            <rom name="clu clu land d (j) (fds conversion).prg" size="32768" crc="84594123" sha1="54fce5fbfbb3ae47ce3a62f9092c0ff204cf1cec" offset="00000" status="baddump" />
63545         </dataarea>
63546      </part>
63547   </software>
63548
63549   <software name="iceclfds" supported="no">
63550      <description>Ice Climber (Asia, FDS conversion)</description>
63551      <year>19??</year>
63552      <publisher>&lt;pirate&gt;</publisher>
63553      <part name="cart" interface="nes_cart">
6338763554         <feature name="slot" value="nrom" />
6338863555         <feature name="pcb" value="NES-NROM-256" />
63556         <dataarea name="prg" size="32768">
63557            <rom name="ice climber (j) (fds conversion).prg" size="32768" crc="d8ec6353" sha1="7409b32043a0d23b5b44b96f14214bef5ba4d9ca" offset="00000" status="baddump" />
63558         </dataarea>
63559         <!-- 8k VRAM on cartridge -->
63560         <dataarea name="vram" size="8192">
63561         </dataarea>
63562      </part>
63563   </software>
63564
63565   <software name="icehfds" supported="no">
63566      <description>Ice Hockey (Asia, FDS conversion)</description>
63567      <year>19??</year>
63568      <publisher>&lt;pirate&gt;</publisher>
63569      <part name="cart" interface="nes_cart">
63570         <feature name="slot" value="nrom" />
63571         <feature name="pcb" value="NES-NROM-256" />
6338963572         <dataarea name="chr" size="8192">
63390            <rom name="othello (j) (fds conversion).chr" size="8192" crc="2f7856c8" sha1="4b48c4f4782ab8e13cba6073e3c7e19f51017774" offset="00000" status="baddump" />
63573            <rom name="ice hockey (j) (fds conversion).chr" size="8192" crc="f10fc90a" sha1="1a2a657267de1f5bdf284d1b69ed7d4895dfb281" offset="00000" status="baddump" />
6339163574         </dataarea>
6339263575         <dataarea name="prg" size="32768">
63393            <rom name="othello (j) (fds conversion).prg" size="32768" crc="55976042" sha1="6f7f626d3666c9890b62e64b3b5b40fd65ccc208" offset="00000" status="baddump" />
63576            <rom name="ice hockey (j) (fds conversion).prg" size="32768" crc="c02e5f1f" sha1="5244c2d123e02914590791c9ffc5e4f945d801ff" offset="00000" status="baddump" />
6339463577         </dataarea>
6339563578      </part>
6339663579   </software>
6339763580
63398   <software name="prowrfds">
63399      <description>ProWres - Famicom Wrestling Association (Asia, FDS conversion)</description>
63581   <software name="othelfds" supported="no">
63582      <description>Othello (Asia, FDS conversion)</description>
6340063583      <year>19??</year>
6340163584      <publisher>&lt;pirate&gt;</publisher>
6340263585      <part name="cart" interface="nes_cart">
63403         <feature name="slot" value="unl_bb" />
63404         <feature name="pcb" value="UNL-BB" />
63405         <feature name="mirroring" value="vertical" />
63406         <dataarea name="chr" size="16384">
63407            <rom name="prowres (fds conversion, le05 simplified)(unl)[u][!].chr" size="16384" crc="58d4719f" sha1="372c4873696578ab56bdc8ec8133099194a864b7" offset="00000" status="baddump" />
63586         <feature name="slot" value="nrom" />
63587         <feature name="pcb" value="NES-NROM-256" />
63588         <dataarea name="chr" size="8192">
63589            <rom name="othello (j) (fds conversion).chr" size="8192" crc="2f7856c8" sha1="4b48c4f4782ab8e13cba6073e3c7e19f51017774" offset="00000" status="baddump" />
6340863590         </dataarea>
6340963591         <dataarea name="prg" size="32768">
63410            <rom name="prowres (fds conversion, le05 simplified)(unl)[u][!].prg" size="32768" crc="7d219257" sha1="d46a9d1752204069cb4e0cc04338b5aa4ca54568" offset="00000" status="baddump" />
63592            <rom name="othello (j) (fds conversion).prg" size="32768" crc="55976042" sha1="6f7f626d3666c9890b62e64b3b5b40fd65ccc208" offset="00000" status="baddump" />
6341163593         </dataarea>
6341263594      </part>
6341363595   </software>
r22513r22514
6349563677      </part>
6349663678   </software>
6349763679
63498   <software name="tobidfds">
63499      <description>Tobidase Daisakusen (Asia, FDS conversion)</description>
63680   <software name="smb2fdsc" cloneof="smb2fds" supported="no">
63681      <description>Super Mario Bros. 2 (FDS pirate, Alt 3)</description>
6350063682      <year>19??</year>
6350163683      <publisher>&lt;pirate&gt;</publisher>
6350263684      <part name="cart" interface="nes_cart">
63503         <feature name="slot" value="tobidase" />
63504         <feature name="pcb" value="BTL-TOBIDASEDAISAKUSEN" />
63685         <feature name="slot" value="smb2j" />
63686         <feature name="pcb" value="UNL-SMB2J" />
6350563687         <feature name="mirroring" value="vertical" />
63506         <dataarea name="prg" size="98304">
63507            <rom name="tobidase daisakusen (fds conversion).prg" size="98304" crc="ee82b3ea" sha1="7fcf28158dfb991aa47d35fdec1512a7947c989e" offset="00000" status="baddump" />
63688         <dataarea name="chr" size="8192">
63689            <rom name="super mario bros. 2j (unl) [u].chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
6350863690         </dataarea>
63509         <!-- 8k VRAM on cartridge -->
63510         <dataarea name="vram" size="8192">
63691         <dataarea name="prg" size="81920">
63692            <rom name="super mario bros. 2j (unl) [u].prg" size="81920" crc="04f65d2f" sha1="1168f5f0642dc5473c1fa5ff6ca3091cd33da860" offset="00000" status="baddump" />
6351163693         </dataarea>
6351263694      </part>
6351363695   </software>
r22513r22514
6356363745      </part>
6356463746   </software>
6356563747
63566   <software name="vballfdsa" cloneof="volley" supported="no">
63567      <description>Volleyball (Asia, FDS conversion, Alt)</description>
63568      <year>19??</year>
63569      <publisher>&lt;pirate&gt;</publisher>
63570      <part name="cart" interface="nes_cart">
63571         <feature name="slot" value="smb2j" />
63572         <feature name="pcb" value="UNL-SMB2J" />
63573         <dataarea name="chr" size="8192">
63574            <rom name="volleyball (fds conversion) (unl) [u].chr" size="8192" crc="0101a6fb" sha1="fd7338e3802b897172f0f22e7f5a191bc68dd6d2" offset="00000" status="baddump" />
63575         </dataarea>
63576         <dataarea name="prg" size="32768">
63577            <rom name="volleyball (fds conversion) (unl) [u].prg" size="32768" crc="d4fb2cd8" sha1="56cacee106de0116857421081c778ebc9d480aa0" offset="00000" status="baddump" />
63578         </dataarea>
63579      </part>
63580   </software>
6358163748
63582   <software name="zanacfds" supported="no">
63583      <description>Zanac (Asia, FDS conversion)</description>
63584      <year>19??</year>
63585      <publisher>Whirlwind Manu</publisher>
63586      <part name="cart" interface="nes_cart">
63587         <feature name="slot" value="smb2j" />
63588         <feature name="pcb" value="UNL-SMB2J" />
63589         <dataarea name="prg" size="49152">
63590            <rom name="zanac (kaiser) (fds conversion) (unl).prg0" size="32768" crc="e485c52f" sha1="257dffd53691b70b26bd2b6770dd7ca38f2b917a" offset="0x0000" status="baddump" />
63591            <rom name="zanac (kaiser) (fds conversion) (unl).prg1" size="16384" crc="bedba7cc" sha1="8d759c768b7e93ca852f107f4ce48c2c979fd618" offset="0x8000" status="baddump" />
63592         </dataarea>
63593         <!-- 8k VRAM on cartridge -->
63594         <dataarea name="vram" size="8192">
63595         </dataarea>
63596      </part>
63597   </software>
63598
63599   <software name="zanacfdsa" cloneof="zanacfds">
63600      <description>Zanac (Asia, FDS conversion, Alt)</description>
63601      <year>19??</year>
63602      <publisher>Kaiser</publisher>
63603      <part name="cart" interface="nes_cart">
63604         <feature name="slot" value="ks7012" />
63605         <feature name="pcb" value="UNL-KS7012" />
63606         <dataarea name="prg" size="65536">
63607            <rom name="zanac (kaiser) (fds conversion) (unl).prg" size="65536" crc="e912ce65" sha1="a92278c445cf02c88652a608327a48f59fe83979" offset="00000" status="baddump" />
63608         </dataarea>
63609         <!-- 8k VRAM on cartridge -->
63610         <dataarea name="vram" size="8192">
63611         </dataarea>
63612         <!-- 8k WRAM on cartridge -->
63613         <dataarea name="wram" size="8192">
63614         </dataarea>
63615      </part>
63616   </software>
63617
6361863749<!-- DR PCJR -->
6361963750
6362063751   <software name="architct">
r22513r22514
6928569416      </part>
6928669417   </software>
6928769418
69288   <software name="smb2fdsa" cloneof="smb2fds">
69289      <description>Super Mario Bros. 2 (FDS pirate, Alt)</description>
69290      <year>19??</year>
69291      <publisher>&lt;pirate&gt;</publisher>
69292      <part name="cart" interface="nes_cart">
69293         <feature name="slot" value="smb2ja" />
69294         <feature name="pcb" value="BTL-SMB2A" />
69295         <feature name="mirroring" value="vertical" />
69296         <dataarea name="chr" size="8192">
69297            <rom name="super mario bros 2 (lost levels) (unl).chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
69298         </dataarea>
69299         <dataarea name="prg" size="65536">
69300            <rom name="super mario bros 2 (lost levels) (unl).prg" size="65536" crc="bead254c" sha1="167e2b9629edefadea54564accaeceb4c08afc55" offset="00000" status="baddump" />
69301         </dataarea>
69302      </part>
69303   </software>
69304
69305   <software name="smb2fdsb" cloneof="smb2fds" supported="partial">
69306      <description>Super Mario Bros. 2 (FDS pirate, Alt 2)</description>
69307      <year>19??</year>
69308      <publisher>&lt;pirate&gt;</publisher>
69309      <part name="cart" interface="nes_cart">
69310         <feature name="slot" value="smb2jb" />
69311         <feature name="pcb" value="BTL-SMB2B" />
69312         <feature name="mirroring" value="vertical" />
69313         <dataarea name="prg" size="131072">
69314            <rom name="super mario bros. (alt levels).prg" size="131072" crc="313491ed" sha1="0ffe5aa3fbee72601bd629849a30379937d170d7" offset="00000" status="baddump" />
69315         </dataarea>
69316         <!-- 8k VRAM on cartridge -->
69317         <dataarea name="vram" size="8192">
69318         </dataarea>
69319      </part>
69320   </software>
69321
69322   <software name="smb2fdsc" cloneof="smb2fds" supported="no">
69323      <description>Super Mario Bros. 2 (FDS pirate, Alt 3)</description>
69324      <year>19??</year>
69325      <publisher>&lt;pirate&gt;</publisher>
69326      <part name="cart" interface="nes_cart">
69327         <feature name="slot" value="smb2jc" />
69328         <feature name="pcb" value="UNL-SMB2J" />
69329         <feature name="mirroring" value="vertical" />
69330         <dataarea name="chr" size="8192">
69331            <rom name="super mario bros. 2j (unl) [u].chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
69332         </dataarea>
69333         <dataarea name="prg" size="81920">
69334            <rom name="super mario bros. 2j (unl) [u].prg" size="81920" crc="04f65d2f" sha1="1168f5f0642dc5473c1fa5ff6ca3091cd33da860" offset="00000" status="baddump" />
69335         </dataarea>
69336      </part>
69337   </software>
69338
69339   <software name="smb2lf" cloneof="smb2fds" supported="no">
69340      <description>Super Mario Bros. 2 (LF36)</description>
69341      <year>19??</year>
69342      <publisher>&lt;pirate&gt;</publisher>
69343      <part name="cart" interface="nes_cart">
69344         <feature name="slot" value="smb2jc" />
69345         <feature name="pcb" value="BTL-SMB2C" />
69346         <feature name="mirroring" value="vertical" />
69347         <dataarea name="chr" size="8192">
69348            <rom name="super mario bros. 2 (j) (lf36).chr" size="8192" crc="f9fe2697" sha1="f5ec342a44c909d99d46ae311a4b77ed00e645eb" offset="00000" status="baddump" />
69349         </dataarea>
69350         <dataarea name="prg" size="81920">
69351            <rom name="super mario bros. 2 (j) (lf36).prg" size="81920" crc="25e0b714" sha1="7e7711b911f10b4ef325b7b25a770e1de188fe27" offset="00000" status="baddump" />
69352         </dataarea>
69353      </part>
69354   </software>
69355
69356   <software name="smb2k" cloneof="smb2fds">
69357      <description>Super Mario Bros. 2 (Kaiser)</description>
69358      <year>19??</year>
69359      <publisher>&lt;pirate&gt;</publisher>
69360      <part name="cart" interface="nes_cart">
69361         <feature name="slot" value="ks7032" />
69362         <feature name="pcb" value="UNL-KS7032" />
69363         <feature name="mirroring" value="vertical" />
69364         <dataarea name="prg" size="131072">
69365            <rom name="super mario bros. 2 (j) (kaiser).prg" size="131072" crc="281326ed" sha1="dc8ddb78cbb575623b701954df951f05e81388ea" offset="00000" status="baddump" />
69366         </dataarea>
69367         <!-- 8k VRAM on cartridge -->
69368         <dataarea name="vram" size="8192">
69369         </dataarea>
69370      </part>
69371   </software>
69372
69373   <software name="smb2h" cloneof="smb">
69374      <description>Super Mario Bros. 2 (Super Mario Bros. Pirate)</description>
69375      <year>19??</year>
69376      <publisher>&lt;pirate&gt;</publisher>
69377      <part name="cart" interface="nes_cart">
69378         <feature name="slot" value="nrom" />
69379         <feature name="pcb" value="NES-NROM-256" />
69380         <feature name="mirroring" value="vertical" />
69381         <dataarea name="chr" size="8192">
69382            <rom name="super mario bros. (title hack) (unl).chr" size="8192" crc="b5a7524b" sha1="791b1c93d58c5d94df803449a2ce3e118d1adc50" offset="00000" status="baddump" />
69383         </dataarea>
69384         <dataarea name="prg" size="32768">
69385            <rom name="super mario bros. (title hack) (unl).prg" size="32768" crc="ae15ebae" sha1="dc5bbe66886c0934c16a9cdedbf474f6bc5215a1" offset="00000" status="baddump" />
69386         </dataarea>
69387      </part>
69388   </software>
69389
69390   <software name="smb2m" cloneof="smb" supported="no">
69391      <description>Super Mario Bros Malee 2 (Super Mario Bros. Pirate)</description>
69392      <year>19??</year>
69393      <publisher>&lt;pirate&gt;</publisher>
69394      <part name="cart" interface="nes_cart">
69395         <feature name="slot" value="mmalee2" />
69396         <feature name="pcb" value="BTL-MARIO1-MALEE2" />
69397         <feature name="mirroring" value="vertical" />
69398         <dataarea name="chr" size="8192">
69399            <rom name="super mario bros malee 2 (unl) [u].chr" size="8192" crc="b5a7524b" sha1="791b1c93d58c5d94df803449a2ce3e118d1adc50" offset="00000" status="baddump" />
69400         </dataarea>
69401         <dataarea name="prg" size="34816">
69402            <rom name="super mario bros malee 2 (unl) [u].prg0" size="32768" crc="ddf910b2" sha1="3977f975b2db0fba6cce8621d7d49a2b86ff2c43" offset="0x0000" status="baddump" />
69403            <rom name="super mario bros malee 2 (unl) [u].prg1" size="2048" crc="2ee84bd0" sha1="51239bdc89ee3f1b7c9b17a63bff1fc20a36b244" offset="0x8000" status="baddump" />
69404         </dataarea>
69405         <!-- 2k WRAM on cartridge -->
69406         <dataarea name="wram" size="2048">
69407         </dataarea>
69408      </part>
69409   </software>
69410
6941169419<!-- could this be a hack?!? -->
6941269420   <software name="smb3h" cloneof="smb3">
6941369421      <description>Super Mario Bros. 3 (Pirate)</description>
trunk/src/mess/machine/nes_bootleg.c
r22513r22514
4949const device_type NES_SMB2J = &device_creator<nes_smb2j_device>;
5050const device_type NES_SMB2JA = &device_creator<nes_smb2ja_device>;
5151const device_type NES_SMB2JB = &device_creator<nes_smb2jb_device>;
52const device_type NES_SMB2JC = &device_creator<nes_smb2jc_device>;
52const device_type NES_09034A = &device_creator<nes_09034a_device>;
5353const device_type NES_TOBIDASE = &device_creator<nes_tobidase_device>;
5454const device_type NES_LH32 = &device_creator<nes_lh32_device>;
5555const device_type NES_LH10 = &device_creator<nes_lh10_device>;
r22513r22514
110110{
111111}
112112
113nes_smb2jc_device::nes_smb2jc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
114               : nes_nrom_device(mconfig, NES_SMB2JC, "NES Cart Super Mario Bros. 2 Jpn (Alt 3) PCB", tag, owner, clock, "nes_smb2jc", __FILE__)
113nes_09034a_device::nes_09034a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
114               : nes_nrom_device(mconfig, NES_09034A, "NES Cart 09-034A PCB", tag, owner, clock, "nes_09034a", __FILE__)
115115{
116116}
117117
r22513r22514
287287void nes_smb2j_device::device_start()
288288{
289289   common_start();
290   save_item(NAME(m_irq_enable));
291   save_item(NAME(m_irq_count));
290292}
291293
292294void nes_smb2j_device::pcb_reset()
293295{
294296   m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
295   prg32(0);
296297   chr8(0, m_chr_source);
298   prg8_89(1);
299   prg8_ab(0);
300   prg8_cd(0);
301   prg8_ef(9);
302   
303   m_irq_enable = 0;
304   m_irq_count = 0;
297305}
298306
299307void nes_smb2ja_device::device_start()
r22513r22514
336344   m_irq_count = 0;
337345}
338346
339void nes_smb2jc_device::device_start()
347void nes_09034a_device::device_start()
340348{
341349   common_start();
342   save_item(NAME(m_irq_enable));
343   save_item(NAME(m_irq_count));
344   save_item(NAME(m_prg_base));
350   save_item(NAME(m_reg));
345351}
346352
347void nes_smb2jc_device::pcb_reset()
353void nes_09034a_device::pcb_reset()
348354{
349355   m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
356   prg32(0);
350357   chr8(0, m_chr_source);
351   prg8_89(1);
352   prg8_ab(0);
353   prg8_cd(0);
354   prg8_ef(9);
355
356   m_irq_enable = 0;
357   m_irq_count = 0;
358   m_prg_base = 1;
358   m_reg = 0;
359359}
360360
361
362361void nes_tobidase_device::device_start()
363362{
364363   common_start();
r22513r22514
889888 Games: Super Mario Bros. 2 Pirate (LF36)
890889
891890 iNES: mapper 43
891 
892 In MESS: Supported.
892893
893 This is actually strange. There is one variant of
894 mappers 43 games which maps the PRG linearly from
895 0x5000 to 0xffff and then can switch the upper 32K
896 part (0x8000-0xffff). These are games with 80K of
897 PRG (SMB2 conversions only? also the Zanac FDS even
898 if has smaller PRG?).
899 Then there is a second variant (Volleyball FDS) with
900 only 32K of PRG which do not switches PRG (no 0x4200
901 writes) and probably mirrors lower 12K in 0x5000-0x7fff.
902 The Zanac FDS conversion might not belong to this
903 board...
904
905 In any case, for the moment we split the two variants
906 in smb2j and smb2jc!
907
908 In MESS: Unsupported? The only image I found is not working
909 (not even in NEStopia). Partially supported the
910 smb2jc variant (to be investigated...)
911
912894 -------------------------------------------------*/
913895
914/* This PCB can map PRG RAM to 0x8000-0xdfff like MMC5 */
915void nes_smb2j_device::prgram_bank8_x(int start, int bank)
896void nes_smb2j_device::hblank_irq(int scanline, int vblank, int blanked)
916897{
917   assert(start < 4);
918   assert(bank >= 0);
919
920   bank &= (m_prgram_size / 0x2000) - 1;
921
922   // PRG RAM is mapped after PRG ROM
923   m_prg_bank[start] = m_prg_chunks + bank;
924   m_prg_bank_mem[start]->set_entry(m_prg_bank[start]);
925}
926
927WRITE8_MEMBER(nes_smb2j_device::write_h)
928{
929   int bank = (((offset >> 8) & 0x03) * 0x20) + (offset & 0x1f);
930
931   LOG_MMC(("smb2j_w, offset: %04x, data: %02x\n", offset, data));
932
933   set_nt_mirroring((offset & 0x2000) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
934
935   if (offset & 0x0800)
936   {
937      if (offset & 0x1000)
938      {
939         if (bank * 2 >= m_prg_chunks)
940         {
941            prgram_bank8_x(2, 0);
942            prgram_bank8_x(3, 0);
943         }
944         else
945         {
946            LOG_MMC(("smb2j_w, selecting upper 16KB bank of #%02x\n", bank));
947            prg16_cdef(2 * bank + 1);
948         }
949      }
950      else
951      {
952         if (bank * 2 >= m_prg_chunks)
953         {
954            prgram_bank8_x(0, 0);
955            prgram_bank8_x(1, 0);
956         }
957         else
958         {
959            LOG_MMC(("smb2j_w, selecting lower 16KB bank of #%02x\n", bank));
960            prg16_89ab(2 * bank);
961         }
962      }
963   }
964   else
965   {
966      if (bank * 2 >= m_prg_chunks)
967      {
968         prgram_bank8_x(0, 0);
969         prgram_bank8_x(1, 0);
970         prgram_bank8_x(2, 0);
971         prgram_bank8_x(3, 0);
972      }
973      else
974      {
975         LOG_MMC(("smb2j_w, selecting 32KB bank #%02x\n", bank));
976         prg32(bank);
977      }
978   }
979}
980
981
982void nes_smb2jc_device::hblank_irq(int scanline, int vblank, int blanked)
983{
984898   if (m_irq_enable)
985899   {
986      if ((0xfff - m_irq_count) <= 114)
900      if ((0xfff - m_irq_count) < 114)
987901      {
988         m_irq_count = (m_irq_count + 1) & 0xfff;
902         m_irq_count = (m_irq_count + 114) & 0xfff;
989903         m_irq_enable = 0;
990904         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
991905      }
r22513r22514
993907         m_irq_count += 114;
994908   }
995909}
996WRITE8_MEMBER(nes_smb2jc_device::write_l)
910
911WRITE8_MEMBER(nes_smb2j_device::write_l)
997912{
998   LOG_MMC(("smb2jc write_l, offset: %04x, data: %02x\n", offset, data));
913   LOG_MMC(("smb2j write_l, offset: %04x, data: %02x\n", offset, data));
999914   offset += 0x100;
915   
916   if (offset == 0x122)   // $4122
917      m_irq_enable = data & 3;   // maybe also m_irq_count = 0?!?
918}
1000919
1001   if (offset == 0x122)
920WRITE8_MEMBER(nes_smb2j_device::write_h)
921{
922   LOG_MMC(("smb2j write_h, offset: %04x, data: %02x\n", offset, data));
923   
924   if (offset == 0x122)   // $8122 too?
1002925      m_irq_enable = data & 3;
1003926}
1004927
1005WRITE8_MEMBER(nes_smb2jc_device::write_ex)
928WRITE8_MEMBER(nes_smb2j_device::write_ex)
1006929{
1007   LOG_MMC(("smb2jc write_ex, offset: %04x, data: %02x\n", offset, data));
1008
930   LOG_MMC(("smb2j write_ex, offset: %04x, data: %02x\n", offset, data));
931   
1009932   if (offset == 2)
1010933   {
1011934      int temp = 0;
1012
935     
1013936      // According to hardware tests
1014937      if (data & 1)
1015938         temp = 3;
1016939      else
1017940         temp = 4 + ((data & 7) >> 1);
1018
941     
1019942      prg8_cd(temp);
1020943   }
1021944}
1022945
1023READ8_MEMBER(nes_smb2jc_device::read_l)
946READ8_MEMBER(nes_smb2j_device::read_l)
1024947{
1025   LOG_MMC(("smb2jc read_l, offset: %04x\n", offset));
948   LOG_MMC(("smb2j read_l, offset: %04x\n", offset));
1026949   offset += 0x100;
1027
950   
1028951   if (offset >= 0x1000)
1029952      return m_prg[0x10000 + (offset & 0x0fff)];
1030
1031   return ((offset + 0x4000) & 0xff00) >> 8;
953   
954   return ((offset + 0x4000) & 0xff00) >> 8;   // open bus
1032955}
1033956
1034READ8_MEMBER(nes_smb2jc_device::read_m)
957READ8_MEMBER(nes_smb2j_device::read_m)
1035958{
1036   LOG_MMC(("smb2jc read_m, offset: %04x\n", offset));
959   LOG_MMC(("smb2j read_m, offset: %04x\n", offset));
1037960   return m_prg[0x4000 + offset];
1038961}
1039962
r22513r22514
11071030{
11081031   if (m_irq_enable)
11091032   {
1110      if (m_irq_count < 0x1000)
1033      if ((0xfff - m_irq_count) < 114)
11111034      {
1112         if ((0x1000 - m_irq_count) <= 114)
1113            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
1114         else
1115            m_irq_count += 114;
1035         m_irq_count = (m_irq_count + 114) & 0xfff;
1036         m_irq_enable = 0;
1037         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
11161038      }
11171039      else
11181040         m_irq_count += 114;
1119
1120      m_irq_count &= 0xffff;   // according to docs is 16bit counter -> it wraps only after 0xffff?
11211041   }
11221042}
11231043
r22513r22514
11611081}
11621082
11631083/*-------------------------------------------------
1084 
1085 (UNL-)09-034A
1086 
1087 Games: Zanac FDS conversion with two PRG chips and
1088 no CHRROM (apparently also a Volleyball FDS conversion
1089 but the ones we have do not seem to be on this hw
1090 Originally dumps were marked as UNL-SMB2J pcb
11641091
1092 
1093 iNES:
1094 
1095 In MESS: Supported (for Zanac)
1096 
1097 -------------------------------------------------*/
1098
1099WRITE8_MEMBER(nes_09034a_device::write_ex)
1100{
1101   LOG_MMC(("09-034a write_ex, offset: %04x, data: %02x\n", offset, data));
1102   
1103   if (offset == 7)   // $4027
1104   {
1105      m_reg = data & 1;
1106      if (m_chr_source == CHRRAM)      // zanac has no CHRROM and is wired differently so to access the second PRG chip
1107         m_reg += 4;
1108   }
1109}
1110
1111READ8_MEMBER(nes_09034a_device::read_m)
1112{
1113   LOG_MMC(("09-034a read_m, offset: %04x\n", offset));
1114   return m_prg[(m_reg * 0x2000) + offset];
1115}
1116
1117/*-------------------------------------------------
1118
11651119 Bootleg Board used for FDS conversion
11661120
11671121 Games: Tobidase Daisakusen (FDS conversion)
trunk/src/mess/machine/nes_bootleg.h
r22513r22514
160160public:
161161   // construction/destruction
162162   nes_smb2j_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
163
163   
164164   // device-level overrides
165165   virtual void device_start();
166   virtual DECLARE_READ8_MEMBER(read_l);
167   virtual DECLARE_READ8_MEMBER(read_m);
168   virtual DECLARE_WRITE8_MEMBER(write_ex);
169   virtual DECLARE_WRITE8_MEMBER(write_l);
166170   virtual DECLARE_WRITE8_MEMBER(write_h);
167
171   
172   virtual void hblank_irq(int scanline, int vblank, int blanked);
168173   virtual void pcb_reset();
169
174   
170175private:
171   void prgram_bank8_x(int start, int bank);
176   UINT16 m_irq_count;
177   int m_irq_enable;
172178};
173179
174180
r22513r22514
217223};
218224
219225
220// ======================> nes_smb2jc_device
226// ======================> nes_09034a_device
221227
222class nes_smb2jc_device : public nes_nrom_device
228class nes_09034a_device : public nes_nrom_device
223229{
224230public:
225231   // construction/destruction
226   nes_smb2jc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
227
232   nes_09034a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
233   
228234   // device-level overrides
229235   virtual void device_start();
230   virtual DECLARE_READ8_MEMBER(read_l);
236   virtual DECLARE_WRITE8_MEMBER(write_ex);
231237   virtual DECLARE_READ8_MEMBER(read_m);
232   virtual DECLARE_WRITE8_MEMBER(write_ex);
233   virtual DECLARE_WRITE8_MEMBER(write_l);
234
235   virtual void hblank_irq(int scanline, int vblank, int blanked);
238   
236239   virtual void pcb_reset();
237
240   
238241private:
239   UINT16 m_irq_count;
240   int m_irq_enable;
241   UINT8 m_prg_base;
242   UINT8 m_reg;
242243};
243244
244245
r22513r22514
421422extern const device_type NES_SMB2J;
422423extern const device_type NES_SMB2JA;
423424extern const device_type NES_SMB2JB;
424extern const device_type NES_SMB2JC;
425extern const device_type NES_09034A;
425426extern const device_type NES_TOBIDASE;
426427extern const device_type NES_LH32;
427428extern const device_type NES_LH10;
trunk/src/mess/machine/nes_bandai.c
r22513r22514
127127void nes_oekakids_device::device_start()
128128{
129129   common_start();
130   save_item(NAME(m_latch));
131   save_item(NAME(m_reg));
130132}
131133
132134void nes_oekakids_device::pcb_reset()
133135{
134   m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
135136   prg32(0);
136   chr8(0, m_chr_source);
137   chr4_0(0, CHRRAM);
138   chr4_4(3, CHRRAM);
139   set_nt_mirroring(PPU_MIRROR_LOW);
140   m_latch = 0;
141   m_reg = 0;
137142}
138143
139144void nes_lz93d50_device::device_start()
r22513r22514
230235
231236 -------------------------------------------------*/
232237
238
239WRITE8_MEMBER(nes_oekakids_device::nt_w)
240{
241   int page = ((offset & 0xc00) >> 10);
242
243#if 0
244   if (offset < 0x1000 && (m_latch != (offset & 0x300) >> 8))
245   {
246      m_latch = (offset & 0x300) >> 8;
247      update_chr();
248   }
249#endif
250   
251   m_nt_access[page][offset & 0x3ff] = data;
252}
253
254READ8_MEMBER(nes_oekakids_device::nt_r)
255{
256   int page = ((offset & 0xc00) >> 10);
257   
258#if 0
259   if (offset < 0x1000 && (m_latch != (offset & 0x300) >> 8))
260   {
261      m_latch = (offset & 0x300) >> 8;
262      update_chr();
263   }
264#endif
265   
266   return m_nt_access[page][offset & 0x3ff];
267}
268
269void nes_oekakids_device::update_chr()
270{   
271   chr4_0(m_reg | m_latch, CHRRAM);
272   chr4_4(m_reg | 0x03, CHRRAM);
273}
274
275// this only monitors accesses to $2007 while we would need to monitor accesses to $2006...
276void nes_oekakids_device::ppu_latch(offs_t offset)
277{
278#if 0
279   if ((offset & 0x3000) == 0x2000)
280   {
281      m_latch = (offset & 0x300) >> 8;
282      update_chr();
283   }
284#endif
285}
286
233287WRITE8_MEMBER(nes_oekakids_device::write_h)
234288{
235289   LOG_MMC(("oeka kids write_h, offset: %04x, data: %02x\n", offset, data));
236290
237291   prg32(data);
238   chr4_0(0x00 | (data & 0x04), CHRRAM);
239   chr4_4(0x03 | (data & 0x04), CHRRAM);
292   m_reg = (data & 0x04);
293   update_chr();
240294}
241295
242296/*-------------------------------------------------
trunk/src/mess/machine/nes_bandai.h
r22513r22514
3434   // device-level overrides
3535   virtual void device_start();
3636   virtual DECLARE_WRITE8_MEMBER(write_h);
37   virtual DECLARE_READ8_MEMBER(nt_r);
38   virtual DECLARE_WRITE8_MEMBER(nt_w);
3739
3840   virtual void pcb_reset();
3941
42   virtual void ppu_latch(offs_t offset);
43
4044   // TODO: add oeka kids controller emulation
45protected:
46   void update_chr();
47   UINT8 m_reg, m_latch;
4148};
4249
4350
trunk/src/mess/machine/nes.c
r22513r22514
166166         space.install_read_handler(0x8000, 0xffff, read8_delegate(FUNC(nes_cart_slot_device::read_h), (nes_cart_slot_device *)m_cartslot));
167167      }
168168
169      if (m_cartslot->get_pcb_id() == BTL_SMB2JB || m_cartslot->get_pcb_id() == UNL_AC08 || m_cartslot->get_pcb_id() == BTL_SMB2JC)
169      if (m_cartslot->get_pcb_id() == BTL_SMB2JB || m_cartslot->get_pcb_id() == UNL_AC08 || m_cartslot->get_pcb_id() == UNL_SMB2J || m_cartslot->get_pcb_id() == BTL_09034A)
170170      {
171171         logerror("write_ex installed!\n");
172172         space.install_write_handler(0x4020, 0x40ff, write8_delegate(FUNC(nes_cart_slot_device::write_ex), (nes_cart_slot_device *)m_cartslot));
trunk/src/mess/machine/nes_slot.h
r22513r22514
101101   UNL_43272, UNL_TF1201, UNL_CITYFIGHT,
102102   /* Bootleg boards */
103103   BTL_SMB2JA, BTL_MARIOBABY, BTL_AISENSHINICOL, BTL_TOBIDASE,
104   BTL_SMB2JB, BTL_SMB2JC, BTL_SMB3, BTL_SBROS11, BTL_DRAGONNINJA,
104   BTL_SMB2JB, BTL_09034A, BTL_SMB3, BTL_SBROS11, BTL_DRAGONNINJA,
105105   BTL_PIKACHUY2K, BTL_SHUIGUAN,
106106   /* Misc: these are needed to convert mappers to boards, I will sort them later */
107107   OPENCORP_DAOU306, HES_BOARD, SVISION16_BOARD, RUMBLESTATION_BOARD, JYCOMPANY_A, JYCOMPANY_B, JYCOMPANY_C,
r22513r22514
118118   KAY_BOARD, HOSENKAN_BOARD, NITRA_TDA, GOUDER_37017, NANJING_BOARD,
119119   WHIRLWIND_2706,
120120   /* FFE boards, for mappers 6, 8, 17 */
121   FFE3_BOARD, FFE4_BOARD, FFE8_BOARD,
121   FFE3_BOARD, FFE4_BOARD, FFE8_BOARD, TEST_BOARD,
122122   /* Unsupported (for place-holder boards, with no working emulation) & no-board (at init) */
123123   UNSUPPORTED_BOARD, UNKNOWN_BOARD, NO_BOARD
124124};
trunk/src/mess/machine/nes_legacy.c
r22513r22514
7878void nes_ffe4_device::device_start()
7979{
8080   common_start();
81   
82   m_exram = auto_alloc_array_clear(machine(), UINT8, 0x8000);
83   save_pointer(NAME(m_exram), 0x8000);
84   save_item(NAME(m_exram_enabled));
85   save_item(NAME(m_exram_bank));
86
8187   save_item(NAME(m_irq_enable));
8288   save_item(NAME(m_irq_count));
8389   save_item(NAME(m_latch));
r22513r22514
9096   prg16_cdef(7);
9197   chr8(0, m_chr_source);
9298
99   m_exram_enabled = 0;
100   m_exram_bank = 0;
101
93102   m_latch = 0;
94103   m_irq_enable = 0;
95104   m_irq_count = 0;
r22513r22514
103112   prg16_cdef(0xff);
104113   chr8(0, m_chr_source);
105114
115   // extra vram is not used by this board, so these will remain always zero
116   m_exram_enabled = 0;
117   m_exram_bank = 0;
118
106119   m_latch = 0;
107120   m_irq_enable = 0;
108121   m_irq_count = 0;
r22513r22514
158171      if ((0xffff - m_irq_count) < 114)
159172      {
160173         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
161         m_irq_count = 0xffff;
174         m_irq_count = 0;
162175         m_irq_enable = 0;
163176      }
164      m_irq_count -= 114;
177      m_irq_count += 114;
165178   }
166179}
167180
r22513r22514
180193         break;
181194
182195      case 0x401:
183         m_irq_enable = data & 0x01;
196         m_irq_enable = 0;
184197         break;
185198      case 0x402:
186199         m_irq_count = (m_irq_count & 0xff00) | data;
r22513r22514
192205   }
193206}
194207
208WRITE8_MEMBER(nes_ffe4_device::chr_w)
209{
210   int bank = offset >> 10;
211   if (m_exram_enabled)
212      m_exram[(m_exram_bank * 0x2000) + (bank * 0x400) + (offset & 0x3ff)] = data;
213
214   if (m_chr_src[bank] == CHRRAM)
215      m_chr_access[bank][offset & 0x3ff] = data;
216}
217
218READ8_MEMBER(nes_ffe4_device::chr_r)
219{
220   int bank = offset >> 10;
221   if (m_exram_enabled)
222      return m_exram[(m_exram_bank * 0x2000) + (bank * 0x400) + (offset & 0x3ff)];
223
224   return m_chr_access[bank][offset & 0x3ff];
225}
226
227
195228WRITE8_MEMBER(nes_ffe4_device::write_h)
196229{
197230   LOG_MMC(("mapper6 write_h, offset: %04x, data: %02x\n", offset, data));
r22513r22514
199232   if (!m_latch)  // when in "FFE mode" we are forced to use CHRRAM/EXRAM bank?
200233   {
201234      prg16_89ab(data >> 2);
202      // chr8(data & 0x03, ???);
203      // due to lack of info on the exact behavior, we simply act as if m_latch=1
204      if (m_chr_source == CHRROM)
205         chr8(data & 0x03, CHRROM);
235
236      // This part is not fully documented, so we proceed a bit blindly...
237      if (data & 0x03 == 0)
238      {
239         m_exram_enabled = 0;
240         chr8(0, CHRRAM);
241      }
242      else
243      {
244         m_exram_enabled = 1;
245         m_exram_bank = data & 0x03;
246      }
206247   }
207   else if (m_chr_source == CHRROM)            // otherwise, we can use CHRROM (when present)
248   else // otherwise, we use CHRROM (shall we check if it's present?)
208249      chr8(data, CHRROM);
209250}
210251
r22513r22514
215256 Known Boards: FFE8 Copier Board
216257 Games: Hacked versions of games
217258
218 In MESS: Supported?. IRQ support is just a guess (used to
219 use MMC3 IRQ but it was wrong and it never enabled it)
259 In MESS: Partially Supported.
220260
221261 -------------------------------------------------*/
222262
r22513r22514
234274         break;
235275
236276      case 0x401:
237         m_irq_enable = data & 0x01;
277         m_irq_enable = 0;
238278         break;
239279      case 0x402:
240280         m_irq_count = (m_irq_count & 0xff00) | data;
trunk/src/mess/machine/nes_legacy.h
r22513r22514
3333   virtual void device_start();
3434   virtual DECLARE_WRITE8_MEMBER(write_l);
3535   virtual DECLARE_WRITE8_MEMBER(write_h);
36   virtual DECLARE_READ8_MEMBER(chr_r);
37   virtual DECLARE_WRITE8_MEMBER(chr_w);
3638
3739   virtual void hblank_irq(int scanline, int vblank, int blanked);
3840   virtual void pcb_reset();
r22513r22514
4244   int m_irq_enable;
4345
4446   UINT8 m_latch;
47   UINT8 *m_exram;
48   int m_exram_enabled;
49   int m_exram_bank;
4550};
4651
4752
trunk/src/mess/machine/nes_jy.c
r22513r22514
163163   switch (offset & 0xff8)
164164   {
165165      case 0xfd0:
166         m_chr_latch[BIT(offset, 12)] = (bank & 0x4);
167         if ((m_reg[0] & 0x18) == 0x08)      // 4KB mode is the only one using these latches!
168            update_chr_latches();
169         break;
166170      case 0xfe8:
167//          m_chr_latch[BIT(offset, 12)] = ((bank & 0x4) | 0x2) & (offset >> 4);
171         m_chr_latch[BIT(offset, 12)] = (bank & 0x4) | 0x2;
172         if ((m_reg[0] & 0x18) == 0x08)      // 4KB mode is the only one using these latches!
173            update_chr_latches();
168174         break;
169175   }
170176
171   if ((m_reg[0] & 0x18) == 0x08)      // 4KB mode is the only one using these latches!
172      update_chr_latches();
173177
174178   return val;
175179}
r22513r22514
199203
200204   if (m_irq_up)
201205   {
202      if ((m_irq_prescale & m_irq_prescale_mask) == m_irq_prescale)
206      if ((m_irq_prescale & m_irq_prescale_mask) == m_irq_prescale_mask)
203207      {
204208         clock = TRUE;
205209         m_irq_prescale = (m_irq_prescale_mask == 7) ? (m_irq_prescale & 0xf8) : 0;
r22513r22514
363367   {
364368      // Block mode enabled: in this case lower bits select a 256KB page inside CHRROM
365369      // and the low bytes of m_mmc_vrom_bank select the banks inside such a page
366      int mode = (m_reg[0] & 0x18) >> 3;
367      m_extra_chr_mask = 0x00ff >> (mode ^ 0x3);
368      m_extra_chr_bank = ((m_reg[3] & 1) | ((m_reg[3] & 0x18) >> 2)) << (mode + 5);
370      m_extra_chr_bank = ((m_reg[3] & 1) | ((m_reg[3] & 0x18) >> 2));
371      switch (m_reg[0] & 0x18)
372      {
373         case 0x00: m_extra_chr_bank <<= 5; m_extra_chr_mask = 0x1f; break;
374         case 0x08: m_extra_chr_bank <<= 6; m_extra_chr_mask = 0x3f; break;
375         case 0x10: m_extra_chr_bank <<= 7; m_extra_chr_mask = 0x7f; break;
376         case 0x18: m_extra_chr_bank <<= 8; m_extra_chr_mask = 0xff; break;
377      }
369378   }
370379}
371380
r22513r22514
506515               break;
507516            case 2:
508517               m_irq_enable = 0;
509                  break;
518               break;
510519            case 3:
511520               m_irq_enable = 1;
512521               break;
trunk/src/mess/machine/nes_pcb.c
r22513r22514
193193   { "smb2j",            UNL_SMB2J },
194194   { "smb2ja",           BTL_SMB2JA },
195195   { "smb2jb",           BTL_SMB2JB },
196   { "smb2jc",           BTL_SMB2JC },  // really?
196   { "09034a",           BTL_09034A },
197197   { "tobidase",         BTL_TOBIDASE },  // mapper 120
198198   { "dbz5",             REXSOFT_DBZ5 },
199199   { "sl1632",           REXSOFT_SL1632 },
r22513r22514
307307   { "unl_dance",        UNSUPPORTED_BOARD },
308308   { "bmc_hik_kof",      UNSUPPORTED_BOARD },
309309   { "onebus",           UNSUPPORTED_BOARD },
310   { "test",             TEST_BOARD },
310311   { "unknown",          UNKNOWN_BOARD }  //  a few pirate dumps uses the wrong mapper...
311312};
312313
trunk/src/mess/machine/nes_somari.c
r22513r22514
2525
2626#define LOG_MMC(x) do { if (VERBOSE) logerror x; } while (0)
2727
28#define SOMARI_VRC2_MODE 0
29#define SOMARI_MMC3_MODE 1
30#define SOMARI_MMC1_MODE 2
31#define SOMARI_MMC1_MODE_AGAIN 3
2832
33
2934//-------------------------------------------------
3035//  constructor
3136//-------------------------------------------------
r22513r22514
5358   save_item(NAME(m_prg_mask));
5459   save_item(NAME(m_chr_base));
5560   save_item(NAME(m_chr_mask));
61   save_item(NAME(m_mmc3_mirror_reg));
5662
5763   save_item(NAME(m_irq_enable));
5864   save_item(NAME(m_irq_count));
r22513r22514
6773   // VRC2
6874   save_item(NAME(m_vrc_prg_bank));
6975   save_item(NAME(m_vrc_vrom_bank));
76   save_item(NAME(m_vrc_mirror_reg));
7077}
7178
7279void nes_somari_device::pcb_reset()
r22513r22514
8491   m_latch = 0;
8592   m_mmc_prg_bank[0] = 0x3c;
8693   m_mmc_prg_bank[1] = 0x3d;
87   m_mmc_prg_bank[2] = 0xfe;
88   m_mmc_prg_bank[3] = 0xff;
94   m_mmc_prg_bank[2] = 0x3e;
95   m_mmc_prg_bank[3] = 0x3f;
8996   m_mmc_vrom_bank[0] = 0x00;
9097   m_mmc_vrom_bank[1] = 0x01;
9198   m_mmc_vrom_bank[2] = 0x04;
r22513r22514
144151 -------------------------------------------------*/
145152
146153// MMC1 Mode emulation
147void nes_somari_device::mmc1_set_prg()
148{
149   UINT8 prg_mode = m_mmc1_reg[0] & 0x0c;
150   UINT8 prg_offset = m_mmc1_reg[1] & 0x10;
151
152   switch (prg_mode)
153   {
154      case 0x00:
155      case 0x04:
156         prg32((prg_offset + m_mmc1_reg[3]) >> 1);
157         break;
158      case 0x08:
159         prg16_89ab(prg_offset + 0);
160         prg16_cdef(prg_offset + m_mmc1_reg[3]);
161         break;
162      case 0x0c:
163         prg16_89ab(prg_offset + m_mmc1_reg[3]);
164         prg16_cdef(prg_offset + 0x0f);
165         break;
166   }
167}
168
169void nes_somari_device::mmc1_set_chr()
170{
171   UINT8 chr_mode = BIT(m_mmc1_reg[0], 4);
172
173   if (chr_mode)
174   {
175      chr4_0(m_mmc1_reg[1] & 0x1f, m_chr_source);
176      chr4_4(m_mmc1_reg[2] & 0x1f, m_chr_source);
177   }
178   else
179      chr8((m_mmc1_reg[1] & 0x1f) >> 1, m_chr_source);
180}
181
182154WRITE8_MEMBER(nes_somari_device::mmc1_w)
183155{
184156   assert(m_board_mode == 2);
r22513r22514
189161      m_mmc1_latch = 0;
190162
191163      m_mmc1_reg[0] |= 0x0c;
192      mmc1_set_prg();
164      update_prg();
193165      return;
194166   }
195167
r22513r22514
203175
204176   if (m_count == 5)
205177   {
206      switch (offset & 0x6000)
207      {
208         case 0x0000:
209            m_mmc1_reg[0] = m_mmc1_latch;
210            switch (m_mmc1_reg[0] & 0x03)
211            {
212               case 0: set_nt_mirroring(PPU_MIRROR_LOW); break;
213               case 1: set_nt_mirroring(PPU_MIRROR_HIGH); break;
214               case 2: set_nt_mirroring(PPU_MIRROR_VERT); break;
215               case 3: set_nt_mirroring(PPU_MIRROR_HORZ); break;
216            }
217            mmc1_set_chr();
218            mmc1_set_prg();
219            break;
220         case 0x2000:
221            m_mmc1_reg[1] = m_mmc1_latch;
222            mmc1_set_chr();
223            mmc1_set_prg();
224            break;
225         case 0x4000:
226            m_mmc1_reg[2] = m_mmc1_latch;
227            mmc1_set_chr();
228            break;
229         case 0x6000:
230            m_mmc1_reg[3] = m_mmc1_latch;
231            mmc1_set_prg();
232            break;
233      }
234
178      m_mmc1_reg[(offset & 0x6000) >> 13] = m_mmc1_latch;
179      update_mirror();
180      update_prg();
181      update_chr();
182     
235183      m_count = 0;
236184   }
237185}
r22513r22514
250198         m_latch = data;
251199
252200         if (mmc_helper & 0x40)
253            set_prg(m_prg_base, m_prg_mask);
201            update_prg();
254202
255203         if (mmc_helper & 0x80)
256            set_chr(m_chr_source, m_chr_base, m_chr_mask);
204            update_chr();
257205         break;
258206
259207      case 0x0001:
r22513r22514
263211            case 0: case 1:
264212            case 2: case 3: case 4: case 5:
265213               m_mmc_vrom_bank[cmd] = data;
266               set_chr(m_chr_source, m_chr_base, m_chr_mask);
214               update_chr();
267215               break;
268216            case 6:
269217            case 7:
270               m_mmc_prg_bank[cmd - 6] = data;
271               set_prg(m_prg_base, m_prg_mask);
218               m_mmc_prg_bank[cmd - 6] = data & 0x3f;
219               update_prg();
272220               break;
273221         }
274222         break;
275223
276224      case 0x2000:
277         set_nt_mirroring(BIT(data, 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
225         m_mmc3_mirror_reg = data & 1;
226         update_mirror();
278227         break;
279228      case 0x2001: break;
280229      case 0x4000: m_irq_count_latch = data; break;
r22513r22514
294243   switch (offset & 0x7000)
295244   {
296245      case 0x0000:
297         m_vrc_prg_bank[0] = data;
298         prg8_89(m_vrc_prg_bank[0]);
246         m_vrc_prg_bank[0] = data & 0x1f;
247         update_prg();
299248         break;
300249
301250      case 0x1000:
302         switch (data & 0x03)
303         {
304            case 0x00: set_nt_mirroring(PPU_MIRROR_VERT); break;
305            case 0x01: set_nt_mirroring(PPU_MIRROR_HORZ); break;
306            case 0x02: set_nt_mirroring(PPU_MIRROR_LOW); break;
307            case 0x03: set_nt_mirroring(PPU_MIRROR_HIGH); break;
308         }
251         m_vrc_mirror_reg = data & 1;
252         update_mirror();
309253         break;
310254
311255      case 0x2000:
312         m_vrc_prg_bank[1] = data;
313         prg8_ab(m_vrc_prg_bank[1]);
256         m_vrc_prg_bank[1] = data & 0x1f;
257         update_prg();
314258         break;
315259
316260      case 0x3000:
317261      case 0x4000:
318262      case 0x5000:
319263      case 0x6000:
264         // this makes no sense for vrc2 and breaks somari, but it's ok for garousp!!
320265         bank = ((offset & 0x7000) - 0x3000) / 0x0800 + BIT(offset, 1);
321266         shift = BIT(offset, 2) * 4;
322267         data = (data & 0x0f) << shift;
323         m_vrc_vrom_bank[bank] = data | m_chr_base;
324         chr1_x(bank, m_vrc_vrom_bank[bank], CHRROM);
268         m_vrc_vrom_bank[bank] = data;
269
270         update_chr();
325271         break;
326272   }
327273}
328274
275
276void nes_somari_device::update_prg()
277{
278   switch (m_board_mode)
279   {
280      case SOMARI_VRC2_MODE:
281         prg8_89(m_vrc_prg_bank[0]);
282         prg8_ab(m_vrc_prg_bank[1]);
283         prg8_cd(0x3e);
284         prg8_ef(0x3f);
285         break;
286      case SOMARI_MMC3_MODE:
287         {
288            UINT8 prg_flip = (m_latch & 0x40) ? 2 : 0;           
289            prg8_x(0, m_mmc_prg_bank[0 ^ prg_flip]);
290            prg8_x(1, m_mmc_prg_bank[1]);
291            prg8_x(2, m_mmc_prg_bank[2 ^ prg_flip]);
292            prg8_x(3, m_mmc_prg_bank[3]);
293         }
294         break;
295      case SOMARI_MMC1_MODE:
296//      case SOMARI_MMC1_MODE_AGAIN:
297         {
298            UINT8 prg_offset = m_mmc1_reg[1] & 0x10;
299
300            switch (m_mmc1_reg[0] & 0x0c)
301            {
302               case 0x00:
303               case 0x04:
304                  prg32((prg_offset + m_mmc1_reg[3]) >> 1);
305                  break;
306               case 0x08:
307                  prg16_89ab(prg_offset + 0);
308                  prg16_cdef(prg_offset + m_mmc1_reg[3]);
309                  break;
310               case 0x0c:
311                  prg16_89ab(prg_offset + m_mmc1_reg[3]);
312                  prg16_cdef(prg_offset + 0x0f);
313                  break;
314            }
315         }
316         break;
317   }
318}
319
320void nes_somari_device::update_chr()
321{
322   switch (m_board_mode)
323   {
324      case SOMARI_VRC2_MODE:
325         for (int i = 0; i < 8; i++)
326            chr1_x(i, m_chr_base | m_vrc_vrom_bank[i], CHRROM);
327         break;
328      case SOMARI_MMC3_MODE:
329         {
330            UINT8 chr_page = (m_latch & 0x80) >> 5;
331            chr1_x(chr_page ^ 0, m_chr_base | ((m_mmc_vrom_bank[0] & ~0x01)), CHRROM);
332            chr1_x(chr_page ^ 1, m_chr_base | ((m_mmc_vrom_bank[0] |  0x01)), CHRROM);
333            chr1_x(chr_page ^ 2, m_chr_base | ((m_mmc_vrom_bank[1] & ~0x01)), CHRROM);
334            chr1_x(chr_page ^ 3, m_chr_base | ((m_mmc_vrom_bank[1] |  0x01)), CHRROM);
335            chr1_x(chr_page ^ 4, m_chr_base | (m_mmc_vrom_bank[2]), CHRROM);
336            chr1_x(chr_page ^ 5, m_chr_base | (m_mmc_vrom_bank[3]), CHRROM);
337            chr1_x(chr_page ^ 6, m_chr_base | (m_mmc_vrom_bank[4]), CHRROM);
338            chr1_x(chr_page ^ 7, m_chr_base | (m_mmc_vrom_bank[5]), CHRROM);
339         }
340         break;
341      case SOMARI_MMC1_MODE:
342//      case SOMARI_MMC1_MODE_AGAIN:
343         if (BIT(m_mmc1_reg[0], 4))
344         {
345            chr4_0(m_mmc1_reg[1] & 0x1f, CHRROM);
346            chr4_4(m_mmc1_reg[2] & 0x1f, CHRROM);
347         }
348         else
349            chr8((m_mmc1_reg[1] & 0x1f) >> 1, CHRROM);
350         break;
351   }
352}
353
354void nes_somari_device::update_mirror()
355{
356   switch (m_board_mode)
357   {
358      case SOMARI_VRC2_MODE:
359         set_nt_mirroring(m_vrc_mirror_reg ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
360         break;
361      case SOMARI_MMC3_MODE:
362         set_nt_mirroring(m_mmc3_mirror_reg ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
363         break;
364      case SOMARI_MMC1_MODE:
365//      case SOMARI_MMC1_MODE_AGAIN:
366         switch (m_mmc1_reg[0] & 0x03)
367         {
368            case 0x00: set_nt_mirroring(PPU_MIRROR_LOW); break;
369            case 0x01: set_nt_mirroring(PPU_MIRROR_HIGH); break;
370            case 0x02: set_nt_mirroring(PPU_MIRROR_VERT); break;
371            case 0x03: set_nt_mirroring(PPU_MIRROR_HORZ); break;
372         }
373         break;
374   }
375}
376
377
329378WRITE8_MEMBER(nes_somari_device::write_h)
330379{
331380   LOG_MMC(("somari write_h, mode %d, offset: %04x, data: %02x\n", m_board_mode, offset, data));
332381
333382   switch (m_board_mode)
334383   {
335      case 0x00: vrc2_w(space, offset, data, mem_mask); break;
336      case 0x01: mmc3_w(space, offset, data, mem_mask); break;
337      case 0x02: mmc1_w(space, offset, data, mem_mask); break;
384      case SOMARI_VRC2_MODE: vrc2_w(space, offset, data, mem_mask); break;
385      case SOMARI_MMC3_MODE: mmc3_w(space, offset, data, mem_mask); break;
386      case SOMARI_MMC1_MODE: mmc1_w(space, offset, data, mem_mask); break;
338387   }
339388}
340389
r22513r22514
342391{
343392   switch (m_board_mode)
344393   {
345      case 0x00:
346         prg8_89(m_vrc_prg_bank[0]);
347         prg8_ab(m_vrc_prg_bank[1]);
348         for (int i = 0; i < 8; i++)
349            chr1_x(i, m_vrc_vrom_bank[i], CHRROM);
394      case SOMARI_VRC2_MODE:
350395         break;
351      case 0x01:
352         set_prg(m_prg_base, m_prg_mask);
353         set_chr(m_chr_source, m_chr_base, m_chr_mask);
396      case SOMARI_MMC3_MODE:
354397         break;
355      case 0x02:
356         mmc1_set_prg();
357         mmc1_set_chr();
398      case SOMARI_MMC1_MODE:
358399         break;
359400   }
401   update_mirror();
402   update_prg();
403   update_chr();
360404}
361405
362WRITE8_MEMBER(nes_somari_device::write_l)
406WRITE8_MEMBER(nes_somari_device::write_m)
363407{
364   LOG_MMC(("somari write_l, offset: %04x, data: %02x\n", offset, data));
365   offset += 0x100;
408   LOG_MMC(("somari write_m, offset: %04x, data: %02x\n", offset, data));
366409
367410   if (offset & 0x100)
368411   {
trunk/src/mess/machine/nes_somari.h
r22513r22514
1414
1515   // device-level overrides
1616   virtual void device_start();
17   virtual DECLARE_WRITE8_MEMBER(write_l);
17   virtual DECLARE_WRITE8_MEMBER(write_l) { write_m(space, offset + 0x100, data, mem_mask); }
18   virtual DECLARE_WRITE8_MEMBER(write_m);
1819   virtual DECLARE_WRITE8_MEMBER(mmc1_w);
1920   virtual DECLARE_WRITE8_MEMBER(mmc3_w);
2021   virtual DECLARE_WRITE8_MEMBER(vrc2_w);
r22513r22514
2223
2324   virtual void pcb_reset();
2425private:
25   void mmc1_set_prg();
26   void mmc1_set_chr();
26   void update_prg();
27   void update_chr();
28   void update_mirror();
2729   void bank_update_switchmode();
2830
2931   UINT8 m_board_mode;
3032
3133   // MMC3 - inherited from txrom
34   UINT8 m_mmc3_mirror_reg;
3235
3336   // MMC1
3437   UINT8 m_count;
r22513r22514
3841   // VRC2
3942   UINT8 m_vrc_prg_bank[2];
4043   UINT8 m_vrc_vrom_bank[8];
44   UINT8 m_vrc_mirror_reg;
4145};
4246
4347
trunk/src/mess/includes/nes.h
r22513r22514
279279   SLOT_INTERFACE_INTERNAL("smb2j",            NES_SMB2J)
280280   SLOT_INTERFACE_INTERNAL("smb2ja",           NES_SMB2JA)
281281   SLOT_INTERFACE_INTERNAL("smb2jb",           NES_SMB2JB)
282   SLOT_INTERFACE_INTERNAL("smb2jc",           NES_SMB2JC)   // really?
282   SLOT_INTERFACE_INTERNAL("09034a",           NES_09034A)
283283   SLOT_INTERFACE_INTERNAL("tobidase",         NES_TOBIDASE) // mapper 120
284284   SLOT_INTERFACE_INTERNAL("mmalee2",          NES_MMALEE)    // mapper 55?
285285   SLOT_INTERFACE_INTERNAL("unl_2708",         NES_2708)    // mapper 103
r22513r22514
396396   SLOT_INTERFACE_INTERNAL("ffe3",             NES_FFE3)
397397   SLOT_INTERFACE_INTERNAL("ffe4",             NES_FFE4)
398398   SLOT_INTERFACE_INTERNAL("ffe8",             NES_FFE8)
399SLOT_INTERFACE_INTERNAL("test",             NES_NROM)
399400//
400401   SLOT_INTERFACE_INTERNAL("unknown",          NES_NROM)  //  a few pirate dumps uses the wrong mapper...
401402SLOT_INTERFACE_END

Previous 199869 Revisions Next


© 1997-2024 The MAME Team