Merge remote-tracking branch 'upstream/master'

This commit is contained in:
rfka01 2016-09-20 23:13:01 +02:00
commit 631d2f37a6
72 changed files with 4162 additions and 1167 deletions

View File

@ -4075,5 +4075,225 @@
<rom name="domo-kun card-e - b-030 (japan) (strip 2).raw" size="2912" crc="c2a1b026" sha1="169e6510c951509e0c76957927040a4cb696bb0f"/> <rom name="domo-kun card-e - b-030 (japan) (strip 2).raw" size="2912" crc="c2a1b026" sha1="169e6510c951509e0c76957927040a4cb696bb0f"/>
</dataarea> </dataarea>
</part> </part>
</software> </software>
<software name="mpebbu1">
<description>Mario Party-e - Big Boo (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - big boo (usa) (strip 1).raw" size="2912" crc="61a12664" sha1="03add9397085bec4d87366266b754f537b9a1a90"/>
</dataarea>
</part>
</software>
<software name="mpebbu2">
<description>Mario Party-e - Big Boo (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - big boo (usa) (strip 2).raw" size="2912" crc="d7ff0550" sha1="05af90553361c8966614cb0fe7d918fa4b67d828"/>
</dataarea>
</part>
</software>
<software name="mpebsu1">
<description>Mario Party-e - Bowser (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - bowser (usa) (strip 1).raw" size="2912" crc="86cc476e" sha1="06cf1d3e9cec6e054b3c4fc1b2efda07a961c59a"/>
</dataarea>
</part>
</software>
<software name="mpebsu2">
<description>Mario Party-e - Bowser (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - bowser (usa) (strip 2).raw" size="2912" crc="e0f361b9" sha1="e15a91933c3b27c968271bc3c4db855b716309ad"/>
</dataarea>
</part>
</software>
<software name="mpedsu1">
<description>Mario Party-e - Daisy (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - daisy (usa) (strip 1).raw" size="2912" crc="387625dc" sha1="ce95a865bb06560f3cf490ef39aa1e84a2e24e5d"/>
</dataarea>
</part>
</software>
<software name="mpedsu2">
<description>Mario Party-e - Daisy (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - daisy (usa) (strip 2).raw" size="2912" crc="945bfa43" sha1="9e86abf3785574aa1fdbcdf1d6f5ef1edc20728e"/>
</dataarea>
</part>
</software>
<software name="mpegpu1">
<description>Mario Party-e - Graceful Princess Peach (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - graceful princess peach (usa) (strip 1).raw" size="2912" crc="65b5b655" sha1="86e19c5f2b0cdc802c513db5d24aeab39799f6f2"/>
</dataarea>
</part>
</software>
<software name="mpegpu2">
<description>Mario Party-e - Graceful Princess Peach (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - graceful princess peach (usa) (strip 2).raw" size="2912" crc="1ec7515f" sha1="fd36fc576e57b4ff08b8ffaee25ec51a7ea1eef2"/>
</dataarea>
</part>
</software>
<software name="mpelku1">
<description>Mario Party-e - Lakitu (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - lakitu (usa) (strip 1).raw" size="2912" crc="441445b1" sha1="f84de62fbf1503cd983d7dcac7efc36755c92773"/>
</dataarea>
</part>
</software>
<software name="mpelku2">
<description>Mario Party-e - Lakitu (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - lakitu (usa) (strip 2).raw" size="2912" crc="78155c32" sha1="bd56cff29a387a484184b279ecb414f0ec431ff9"/>
</dataarea>
</part>
</software>
<software name="mpeppu1">
<description>Mario Party-e - Princess Peach (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - princess peach (usa) (strip 1).raw" size="2912" crc="85071563" sha1="80f34ec1fb1d1a1359b0a871dea0c38932a4eda4"/>
</dataarea>
</part>
</software>
<software name="mpeppu2">
<description>Mario Party-e - Princess Peach (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - princess peach (usa) (strip 2).raw" size="2912" crc="77a26fa4" sha1="d3418507974cf4a5e6cbfafa6c9f0715e5050778"/>
</dataarea>
</part>
</software>
<software name="mpeslu1">
<description>Mario Party-e - Super Waluigi (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - super waluigi (usa) (strip 1).raw" size="2912" crc="1d84220f" sha1="875ee908d6860cb7df24c406711286f0ea57e52d"/>
</dataarea>
</part>
</software>
<software name="mpeslu2">
<description>Mario Party-e - Super Waluigi (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - super waluigi (usa) (strip 2).raw" size="2912" crc="ed011685" sha1="cd4b60b670839986ee93aafd6c5cb3ef3939ceda"/>
</dataarea>
</part>
</software>
<software name="mpeswu1">
<description>Mario Party-e - Super Wario (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - super wario (usa) (strip 1).raw" size="2912" crc="1fcb520a" sha1="f5dfac00401d3ff3d7bdc4374ff314e9ecca2712"/>
</dataarea>
</part>
</software>
<software name="mpeswu2">
<description>Mario Party-e - Super Wario (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - super wario (usa) (strip 2).raw" size="2912" crc="d36a5317" sha1="0fe068db27d24ea7da4af2e0023d4e372de63efd"/>
</dataarea>
</part>
</software>
<software name="mpewlu1">
<description>Mario Party-e - Waluigi (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - waluigi (usa) (strip 1).raw" size="2912" crc="1276e9e9" sha1="b11ea3bc9498b6a382a6ee3e0c4c6cd8f7821129"/>
</dataarea>
</part>
</software>
<software name="mpewlu2">
<description>Mario Party-e - Waluigi (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - waluigi (usa) (strip 2).raw" size="2912" crc="52858a3c" sha1="72251862b2306b1b8a93c40d36d37b75335397ae"/>
</dataarea>
</part>
</software>
<software name="mpewru1">
<description>Mario Party-e - Wario (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - wario (usa) (strip 1).raw" size="2912" crc="92c8d691" sha1="b31edff7613a6a3ff7622bb21953ab9dbd01803f"/>
</dataarea>
</part>
</software>
<software name="mpewru2">
<description>Mario Party-e - Wario (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - wario (usa) (strip 2).raw" size="2912" crc="f6b909aa" sha1="3170ad31deab34f10098507e7fe57fb20dfeb68c"/>
</dataarea>
</part>
</software>
<software name="mpeysu1">
<description>Mario Party-e - Yoshi (USA) (Strip 1)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - yoshi (usa) (strip 1).raw" size="2912" crc="40ddedb4" sha1="72fa65a855a6c35027375936a8260b37564077f3"/>
</dataarea>
</part>
</software>
<software name="mpeysu2">
<description>Mario Party-e - Yoshi (USA) (Strip 2)</description>
<year>200?</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="ereader">
<dataarea name="rom" size="2912">
<rom name="mario party-e - yoshi (usa) (strip 2).raw" size="2912" crc="bbe400ac" sha1="73974834985a112d8b92b81d0421e5eb7fe67f5b"/>
</dataarea>
</part>
</software>
</softwarelist> </softwarelist>

View File

@ -3093,7 +3093,7 @@
</part> </part>
</software> </software>
<software name="ptennis"> <software name="ptennis" supported="partial">
<description>Power Tennis</description> <description>Power Tennis</description>
<year>1993</year> <year>1993</year>
<publisher>Hudson</publisher> <publisher>Hudson</publisher>

View File

@ -126,6 +126,20 @@
</software> </software>
<!--Barunba -->
<software name="barunba">
<description>Barunba (Tourvision PCE bootleg)</description>
<year>1989</year>
<publisher>bootleg (Tourvision) / Zap / Namcot</publisher>
<part name="cart" interface="tourvision_cart">
<dataarea name="rom" size="1048576">
<!-- 0x80000 matches PCE barnuba -->
<rom name="barunba.bin" size="1048576" crc="1498678e" sha1="8a8e25617425dce2ad66a545b48652d307c91be0" offset="000000" />
</dataarea>
</part>
</software>
<!--Be Ball --> <!--Be Ball -->
<software name="beballa"> <software name="beballa">
<description>Be Ball (alt) (Tourvision PCE bootleg)</description> <description>Be Ball (alt) (Tourvision PCE bootleg)</description>
@ -813,6 +827,20 @@ Notes:
</software> </software>
<!--Power Tennis -->
<software name="ptennis" supported="partial">
<description>Power Tennis (Tourvision PCE bootleg)</description>
<year>1993</year>
<publisher>bootleg (Tourvision) / Hudson Soft</publisher>
<part name="cart" interface="tourvision_cart">
<dataarea name="rom" size="1048576">
<!-- 0x80000 matches PCE ptennis -->
<rom name="power_tennis.bin" size="1048576" crc="dd67515a" sha1="968b7066286ec6f055aa8a21c8e65439ebd9d7ad" offset="000000" />
</dataarea>
</part>
</software>
<!--Puzzle Boy --> <!--Puzzle Boy -->
<software name="puzzlboy"> <software name="puzzlboy">
<description>Puzzle Boy (Tourvision PCE bootleg)</description> <description>Puzzle Boy (Tourvision PCE bootleg)</description>

View File

@ -35744,13 +35744,14 @@ The entries in this section are intended to replace the existing "low-grade" Jap
</software> </software>
<!-- Interactive CD Sampler Discs <!-- Non-redump Interactive CD Sampler discs
TODO: Check if these match the corresponding redump dumps. 'Interactive CD Sampler Disc - Volume 01 (USA, M Rated)' and 'Interactive CD Sampler Disc - Volume 11 (USA)' have not been dumped for redump.org yet.
'Interactive CD Sampler Disc - Volume 06 (USA, EDC)' has EDC while the redump.org version does not; no other obvious differences.
--> -->
<software name="intcdv1m"> <software name="icdsmp1m">
<!-- Unknown source <!-- Unknown source
<rom name="interactive cd sampler volume 1.bin" size="690918816" crc="78449608" sha1="65b45f282b1762590440fbaabac75809a6cbef63"/> <rom name="interactive cd sampler volume 1.bin" size="690918816" crc="78449608" sha1="65b45f282b1762590440fbaabac75809a6cbef63"/>
<rom name="interactive cd sampler volume 1.cue" size="1759" crc="451bdd86" sha1="2b28ae23bb2c85d3edf4fa38ac17dbc6c13f8481"/> <rom name="interactive cd sampler volume 1.cue" size="1759" crc="451bdd86" sha1="2b28ae23bb2c85d3edf4fa38ac17dbc6c13f8481"/>
@ -35765,43 +35766,12 @@ TODO: Check if these match the corresponding redump dumps.
</part> </part>
</software> </software>
<software name="intcdv4"> <software name="icdsmp6a" cloneof="icdsmp6">
<!-- Unknown source
<rom name="interactive cd sampler volume 4.bin" size="692118336" crc="a86f1ae5" sha1="3d66101541737d5167f6604b5709181317acbfb8"/>
<rom name="interactive cd sampler volume 4.cue" size="223" crc="d6b84c58" sha1="e2c383fc8b5c26ee92619d1adac760af0e48e634"/>
-->
<description>Interactive CD Sampler Disc - Volume 04 (USA)</description>
<year>1997</year>
<publisher>Sony Computer Entertainment America</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="interactive cd sampler disc - volume 4" sha1="c558a684a28ccf6afe0d3fc166814539c75863f7"/>
</diskarea>
</part>
</software>
<software name="intcdv5">
<!-- Unknown source
<rom name="interactive cd sampler volume 5 (pbpx-95003).bin" size="508638816" crc="b5c82748" sha1="1f194024c3d9c772ed5a1e9dbdf5ff409c806fbb"/>
<rom name="interactive cd sampler volume 5 (pbpx-95003).cue" size="428" crc="1cd96880" sha1="75e7d01603849b1cf1d57d37b5600a9bce1d03f4"/>
-->
<description>Interactive CD Sampler Disc - Volume 05 (USA)</description>
<year>1997</year>
<publisher>Sony Computer Entertainment America</publisher>
<info name="serial" value="PBPX-95003"/>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="interactive cd sampler disc - volume 5" sha1="f1ce1f4a942af852ee67f98c7d2a3c148d835abb"/>
</diskarea>
</part>
</software>
<software name="intcdv6">
<!-- Unknown source <!-- Unknown source
<rom name="interactive cd sampler volume 6 (pbpx-95004).bin" size="640614240" crc="db7b1f0f" sha1="2d25bce6b5d7218aa6dceff58badf26ccf5aeb39"/> <rom name="interactive cd sampler volume 6 (pbpx-95004).bin" size="640614240" crc="db7b1f0f" sha1="2d25bce6b5d7218aa6dceff58badf26ccf5aeb39"/>
<rom name="interactive cd sampler volume 6 (pbpx-95004).cue" size="300" crc="1184abe8" sha1="194b4412dfcb2a4088a62c516616a1609512d14a"/> <rom name="interactive cd sampler volume 6 (pbpx-95004).cue" size="300" crc="1184abe8" sha1="194b4412dfcb2a4088a62c516616a1609512d14a"/>
--> -->
<description>Interactive CD Sampler Disc - Volume 06 (USA)</description> <description>Interactive CD Sampler Disc 6 (USA, EDC)</description>
<year>1998</year> <year>1998</year>
<publisher>Sony Computer Entertainment America</publisher> <publisher>Sony Computer Entertainment America</publisher>
<info name="serial" value="PBPX-95004"/> <info name="serial" value="PBPX-95004"/>
@ -35812,68 +35782,7 @@ TODO: Check if these match the corresponding redump dumps.
</part> </part>
</software> </software>
<software name="intcdv7"> <software name="icdsmp11">
<!-- Unknown source
<rom name="interactive cd sampler volume 7.bin" size="733160736" crc="ce24e9a1" sha1="7c549f0187da1c1f870973da8492d4d237070326"/>
<rom name="interactive cd sampler volume 7.cue" size="415" crc="69fba598" sha1="7eb50623c569f453e83b413a7988d95e55a8c58c"/>
-->
<description>Interactive CD Sampler Disc - Volume 07 (USA)</description>
<year>1998</year>
<publisher>Sony Computer Entertainment America</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="interactive cd sampler disc - volume 7" sha1="73e8215a98da98d9f2d1468c62354b46af77fa56"/>
</diskarea>
</part>
</software>
<software name="intcdv8">
<!-- Unknown source
<rom name="interactive cd sampler volume 8.bin" size="725135712" crc="ef9b3cee" sha1="d465f074dfb8344d55f4da2a4b5358981d5b6541"/>
<rom name="interactive cd sampler volume 8.cue" size="287" crc="e40136d8" sha1="8bea452b452528c2b429ec5cdc8de20da26e4611"/>
-->
<description>Interactive CD Sampler Disc - Volume 08 (USA)</description>
<year>1998</year>
<publisher>Sony Computer Entertainment America</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="interactive cd sampler disc - volume 8" sha1="8145f022b1f44d2ed7140386acf5b293834fc6c8"/>
</diskarea>
</part>
</software>
<software name="intcdv9">
<!-- Unknown source
<rom name="interactive cd sampler volume 9.bin" size="732615072" crc="473314a1" sha1="ab797ae8e3d6fd0b477c70b609211944be477bb1"/>
<rom name="interactive cd sampler volume 9.cue" size="351" crc="dad567a7" sha1="995ec02b8abea297e6822b1ee1619b7e779800af"/>
-->
<description>Interactive CD Sampler Disc - Volume 09 (USA)</description>
<year>1998</year>
<publisher>Sony Computer Entertainment America</publisher>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="interactive cd sampler disc - volume 9" sha1="4b504a4ce093c255b40f4cc2cf3fb59b4216f501"/>
</diskarea>
</part>
</software>
<software name="intcdv10">
<!-- Unknown source
<rom name="interactive cd sampler volume 10 [pbpx-95011].bin" size="736747536" crc="2af7ed86" sha1="6839c7bb06ab0765a2aef7e67be5a2fbba52d62d"/>
<rom name="interactive cd sampler volume 10 [pbpx-95011].cue" size="429" crc="65f15b6e" sha1="91e2d2d576c488d17e125bf554e7207453f4eb4b"/>
-->
<description>Interactive CD Sampler Disc - Volume 10 (USA)</description>
<year>1999</year>
<publisher>Sony Computer Entertainment America</publisher>
<info name="serial" value="PBPX-95011"/>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
<disk name="interactive cd sampler disc - volume 10" sha1="960319d09f9ca10663f06068a2ff134f343d22ad"/>
</diskarea>
</part>
</software>
<software name="intcdv11">
<!-- Unknown source <!-- Unknown source
<rom name="interactive cd sampler volume 11 [scus-94463].bin" size="504059472" crc="0be789aa" sha1="0a0b125094f344d5552a840485021a2beda58aad"/> <rom name="interactive cd sampler volume 11 [scus-94463].bin" size="504059472" crc="0be789aa" sha1="0a0b125094f344d5552a840485021a2beda58aad"/>
<rom name="interactive cd sampler volume 11 [scus-94463].cue" size="301" crc="9948530c" sha1="95c782d5dca37dfd43b8c754e3a6903f2e665860"/> <rom name="interactive cd sampler volume 11 [scus-94463].cue" size="301" crc="9948530c" sha1="95c782d5dca37dfd43b8c754e3a6903f2e665860"/>

View File

@ -967,6 +967,8 @@ end
buildoptions { buildoptions {
"-Wno-unknown-warning-option", "-Wno-unknown-warning-option",
"-Wno-extern-c-compat", "-Wno-extern-c-compat",
"-Wno-unknown-attributes",
"-Wno-ignored-qualifiers"
} }
end end
else else

View File

@ -48,6 +48,8 @@ project "formats"
MAME_DIR .. "src/lib/formats/dsk_dsk.h", MAME_DIR .. "src/lib/formats/dsk_dsk.h",
MAME_DIR .. "src/lib/formats/td0_dsk.cpp", MAME_DIR .. "src/lib/formats/td0_dsk.cpp",
MAME_DIR .. "src/lib/formats/td0_dsk.h", MAME_DIR .. "src/lib/formats/td0_dsk.h",
MAME_DIR .. "src/lib/formats/hxchfe_dsk.cpp",
MAME_DIR .. "src/lib/formats/hxchfe_dsk.h",
MAME_DIR .. "src/lib/formats/hxcmfm_dsk.cpp", MAME_DIR .. "src/lib/formats/hxcmfm_dsk.cpp",
MAME_DIR .. "src/lib/formats/hxcmfm_dsk.h", MAME_DIR .. "src/lib/formats/hxcmfm_dsk.h",
MAME_DIR .. "src/lib/formats/mfi_dsk.cpp", MAME_DIR .. "src/lib/formats/mfi_dsk.cpp",

View File

@ -3334,6 +3334,8 @@ files {
MAME_DIR .. "src/mame/machine/ngen_kb.cpp", MAME_DIR .. "src/mame/machine/ngen_kb.cpp",
MAME_DIR .. "src/mame/machine/ngen_kb.h", MAME_DIR .. "src/mame/machine/ngen_kb.h",
MAME_DIR .. "src/mame/drivers/octopus.cpp", MAME_DIR .. "src/mame/drivers/octopus.cpp",
MAME_DIR .. "src/mame/machine/octo_kbd.cpp",
MAME_DIR .. "src/mame/machine/octo_kbd.h",
MAME_DIR .. "src/mame/drivers/onyx.cpp", MAME_DIR .. "src/mame/drivers/onyx.cpp",
MAME_DIR .. "src/mame/drivers/okean240.cpp", MAME_DIR .. "src/mame/drivers/okean240.cpp",
MAME_DIR .. "src/mame/drivers/p8k.cpp", MAME_DIR .. "src/mame/drivers/p8k.cpp",

View File

@ -112,6 +112,8 @@ WRITE8_MEMBER(mcd_isa_device::cmd_w)
{ {
case CMD_SET_MODE: case CMD_SET_MODE:
m_mode = data; m_mode = data;
m_buf[0] = 0;
m_buf_count = 1;
break; break;
case CMD_LOCK: case CMD_LOCK:
m_locked = data & 1 ? true : false; m_locked = data & 1 ? true : false;
@ -167,7 +169,8 @@ WRITE8_MEMBER(mcd_isa_device::cmd_w)
m_buf[5] = dec_2_bcd((last >> 16) & 0xff); m_buf[5] = dec_2_bcd((last >> 16) & 0xff);
m_buf[6] = dec_2_bcd((last >> 8) & 0xff); m_buf[6] = dec_2_bcd((last >> 8) & 0xff);
m_buf[7] = dec_2_bcd(last & 0xff); m_buf[7] = dec_2_bcd(last & 0xff);
m_buf_count = 8; m_buf[8] = 0;
m_buf_count = 9;
} }
else else
{ {
@ -183,8 +186,8 @@ WRITE8_MEMBER(mcd_isa_device::cmd_w)
UINT32 start = lba_to_msf(cdrom_get_track_start(m_cdrom_handle, m_curtoctrk)); UINT32 start = lba_to_msf(cdrom_get_track_start(m_cdrom_handle, m_curtoctrk));
UINT32 end = lba_to_msf(cdrom_get_track_start(m_cdrom_handle, m_curtoctrk < tracks ? m_curtoctrk + 1 : 0xaa)); UINT32 end = lba_to_msf(cdrom_get_track_start(m_cdrom_handle, m_curtoctrk < tracks ? m_curtoctrk + 1 : 0xaa));
m_buf[0] = 1; // track type? m_buf[0] = 1; // track type?
m_buf[1] = dec_2_bcd(m_curtoctrk + 1); m_buf[1] = 0; // track num except when reading toc
m_buf[2] = dec_2_bcd(m_curtoctrk + 1); m_buf[2] = dec_2_bcd(m_curtoctrk); // index
m_buf[3] = dec_2_bcd((start >> 16) & 0xff); m_buf[3] = dec_2_bcd((start >> 16) & 0xff);
m_buf[4] = dec_2_bcd((start >> 8) & 0xff); m_buf[4] = dec_2_bcd((start >> 8) & 0xff);
m_buf[5] = dec_2_bcd(start & 0xff); m_buf[5] = dec_2_bcd(start & 0xff);

View File

@ -137,7 +137,16 @@ mainboard8_device::mainboard8_device(const machine_config &mconfig, const char *
m_vaquerro(*this, VAQUERRO_TAG), m_vaquerro(*this, VAQUERRO_TAG),
m_mofetta(*this, MOFETTA_TAG), m_mofetta(*this, MOFETTA_TAG),
m_amigo(*this, AMIGO_TAG), m_amigo(*this, AMIGO_TAG),
m_oso(*this, OSO_TAG) m_oso(*this, OSO_TAG),
m_video(*owner, VDP_TAG), // subdevice of main class
m_sound(*owner, TISOUNDCHIP_TAG),
m_speech(*owner, SPEECHSYN_TAG),
m_gromport(*owner, GROMPORT_TAG),
m_peb(*owner, PERIBOX_TAG),
m_sgrom_idle(true),
m_tsgrom_idle(true),
m_p8grom_idle(true),
m_p3grom_idle(true)
{ {
} }
@ -252,17 +261,33 @@ WRITE_LINE_MEMBER( mainboard8_device::clock_in )
if (gromclk != m_gromclk) // when it changed, propagate to the GROMs if (gromclk != m_gromclk) // when it changed, propagate to the GROMs
{ {
m_gromclk = gromclk; m_gromclk = gromclk;
for (int i=0; i < 8; i++)
// Get some more performance. We only propagate the clock line to
// those GROMs that are not idle.
// Yields about 25% in bench (hoped for more, but well)
if (!m_sgrom_idle)
{ {
if (i < 3) for (int i=0; i < 3; i++) m_sgrom[i]->gclock_in(gromclk);
{ m_gromport->gclock_in(gromclk);
m_sgrom[i]->gclock_in(gromclk); m_sgrom_idle = m_sgrom[0]->idle();
m_p3grom[i]->gclock_in(gromclk); }
}
m_tsgrom[i]->gclock_in(gromclk); if (!m_tsgrom_idle)
m_p8grom[i]->gclock_in(gromclk); {
for (int i=0; i < 8; i++) m_tsgrom[i]->gclock_in(gromclk);
m_tsgrom_idle = m_tsgrom[0]->idle();
}
if (!m_p8grom_idle)
{
for (int i=0; i < 8; i++) m_p8grom[i]->gclock_in(gromclk);
m_p8grom_idle = m_p8grom[0]->idle();
}
if (!m_p3grom_idle)
{
for (int i=0; i < 3; i++) m_p3grom[i]->gclock_in(gromclk);
m_p3grom_idle = m_p3grom[0]->idle();
} }
m_gromport->gclock_in(gromclk);
} }
// Check video for writing // Check video for writing
@ -338,16 +363,23 @@ void mainboard8_device::select_groms()
int lines = (m_dbin_level==ASSERT_LINE)? GROM_M_LINE : 0; int lines = (m_dbin_level==ASSERT_LINE)? GROM_M_LINE : 0;
if (m_A14_set) lines |= GROM_MO_LINE; if (m_A14_set) lines |= GROM_MO_LINE;
if (select & SGMSEL) m_sgrom_idle = false;
if (select & TSGSEL) m_tsgrom_idle = false;
if (select & P8GSEL) m_p8grom_idle = false;
if (select & P3GSEL) m_p3grom_idle = false;
for (int i=0; i < 3; i++)
m_sgrom[i]->set_lines(*m_space, lines, select & SGMSEL);
for (int i=0; i < 8; i++) for (int i=0; i < 8; i++)
{
if (i < 3)
{
m_sgrom[i]->set_lines(*m_space, lines, select & SGMSEL);
m_p3grom[i]->set_lines(*m_space, lines, select & P3GSEL);
}
m_tsgrom[i]->set_lines(*m_space, lines, select & TSGSEL); m_tsgrom[i]->set_lines(*m_space, lines, select & TSGSEL);
for (int i=0; i < 8; i++)
m_p8grom[i]->set_lines(*m_space, lines, select & P8GSEL); m_p8grom[i]->set_lines(*m_space, lines, select & P8GSEL);
}
for (int i=0; i < 3; i++)
m_p3grom[i]->set_lines(*m_space, lines, select & P3GSEL);
// Write to the cartridge port. The GROMs on cartridges are accesses as system GROMs // Write to the cartridge port. The GROMs on cartridges are accesses as system GROMs
if (select & SGMSEL) m_gromport->romgq_line(CLEAR_LINE); if (select & SGMSEL) m_gromport->romgq_line(CLEAR_LINE);
m_gromport->set_gromlines(*m_space, lines, select & SGMSEL); m_gromport->set_gromlines(*m_space, lines, select & SGMSEL);
@ -476,6 +508,7 @@ READ8_MEMBER( mainboard8_device::read )
switch (m_vaquerro->gromcs_out()) switch (m_vaquerro->gromcs_out())
{ {
case SGMSEL: case SGMSEL:
m_sgrom_idle = false;
for (int i=0; i < 3; i++) for (int i=0; i < 3; i++)
{ {
m_sgrom[i]->readz(space, 0, &value); m_sgrom[i]->readz(space, 0, &value);
@ -486,6 +519,7 @@ READ8_MEMBER( mainboard8_device::read )
goto readdone; goto readdone;
case TSGSEL: case TSGSEL:
m_tsgrom_idle = false;
for (int i=0; i < 8; i++) for (int i=0; i < 8; i++)
{ {
m_tsgrom[i]->readz(space, 0, &value); m_tsgrom[i]->readz(space, 0, &value);
@ -495,6 +529,7 @@ READ8_MEMBER( mainboard8_device::read )
goto readdone; goto readdone;
case P8GSEL: case P8GSEL:
m_p8grom_idle = false;
for (int i=0; i < 8; i++) for (int i=0; i < 8; i++)
{ {
m_p8grom[i]->readz(space, 0, &value); m_p8grom[i]->readz(space, 0, &value);
@ -504,6 +539,7 @@ READ8_MEMBER( mainboard8_device::read )
goto readdone; goto readdone;
case P3GSEL: case P3GSEL:
m_p3grom_idle = false;
for (int i=0; i < 3; i++) for (int i=0; i < 3; i++)
{ {
m_p3grom[i]->readz(space, 0, &value); m_p3grom[i]->readz(space, 0, &value);
@ -751,21 +787,6 @@ void mainboard8_device::device_start()
m_p8grom[i] = downcast<tmc0430_device*>(machine().device(glib2[i])); m_p8grom[i] = downcast<tmc0430_device*>(machine().device(glib2[i]));
} }
// Link to speech synthesizer
m_speech = downcast<cd2501ecd_device*>(machine().device(SPEECHSYN_TAG));
// Link to sound chip
m_sound = downcast<sn76496_base_device*>(machine().device(TISOUNDCHIP_TAG));
// Link to video
m_video = downcast<tms9118_device*>(machine().device(VDP_TAG));
// Link to cartridge port
m_gromport = downcast<gromport_device*>(machine().device(GROMPORT_TAG));
// Link to PEB
m_peb = downcast<peribox_device*>(machine().device(PERIBOX_TAG));
// Configure RAM and AMIGO // Configure RAM and AMIGO
m_sram = std::make_unique<UINT8[]>(SRAM_SIZE); m_sram = std::make_unique<UINT8[]>(SRAM_SIZE);
m_dram = std::make_unique<UINT8[]>(DRAM_SIZE); m_dram = std::make_unique<UINT8[]>(DRAM_SIZE);

View File

@ -505,18 +505,16 @@ private:
required_device<amigo_device> m_amigo; required_device<amigo_device> m_amigo;
required_device<oso_device> m_oso; required_device<oso_device> m_oso;
// More devices
required_device<tms9928a_device> m_video;
required_device<sn76496_base_device> m_sound;
required_device<cd2501ecd_device> m_speech;
required_device<gromport_device> m_gromport;
required_device<peribox_device> m_peb;
// Debugging // Debugging
line_state m_last_ready; line_state m_last_ready;
// Video processor
tms9118_device* m_video;
// Sound generator
sn76496_base_device* m_sound;
// Speech processor
cd2501ecd_device* m_speech;
// System GROM library // System GROM library
tmc0430_device* m_sgrom[3]; tmc0430_device* m_sgrom[3];
@ -529,11 +527,11 @@ private:
// Pascal 3 GROM library // Pascal 3 GROM library
tmc0430_device* m_p3grom[3]; tmc0430_device* m_p3grom[3];
// Gromport (cartridge port) // Idle flags for GROMs
gromport_device* m_gromport; bool m_sgrom_idle;
bool m_tsgrom_idle;
// Peripheral box bool m_p8grom_idle;
peribox_device* m_peb; bool m_p3grom_idle;
// Memory // Memory
std::unique_ptr<UINT8[]> m_sram; std::unique_ptr<UINT8[]> m_sram;

View File

@ -87,7 +87,8 @@ ti99_datamux_device::ti99_datamux_device(const machine_config &mconfig, const ch
m_ram16b(nullptr), m_ram16b(nullptr),
m_use32k(false), m_use32k(false),
m_base32k(0), m_base32k(0),
m_console_groms_present(false) m_console_groms_present(false),
m_grom_idle(true)
{ } { }
#define TRACE_READY 0 #define TRACE_READY 0
@ -119,6 +120,7 @@ void ti99_datamux_device::read_all(address_space& space, UINT16 addr, UINT8 *val
} }
// GROMport (GROMs) // GROMport (GROMs)
m_gromport->readz(space, addr, value); m_gromport->readz(space, addr, value);
m_grom_idle = false;
} }
// Video // Video
@ -149,6 +151,7 @@ void ti99_datamux_device::write_all(address_space& space, UINT16 addr, UINT8 val
} }
// GROMport // GROMport
m_gromport->write(space, addr, value); m_gromport->write(space, addr, value);
m_grom_idle = false;
} }
// Cartridge port and sound // Cartridge port and sound
@ -190,6 +193,8 @@ void ti99_datamux_device::setaddress_all(address_space& space, UINT16 addr)
if (a14==ASSERT_LINE) lines |= 2; if (a14==ASSERT_LINE) lines |= 2;
line_state select = isgrom? ASSERT_LINE : CLEAR_LINE; line_state select = isgrom? ASSERT_LINE : CLEAR_LINE;
if (select) m_grom_idle = false;
if (m_console_groms_present) if (m_console_groms_present)
for (int i=0; i < 3; i++) for (int i=0; i < 3; i++)
m_grom[i]->set_lines(space, lines, select); m_grom[i]->set_lines(space, lines, select);
@ -519,14 +524,23 @@ WRITE_LINE_MEMBER( ti99_datamux_device::ready_line )
ready_join(); ready_join();
} }
/* Called from VDP via console. */
WRITE_LINE_MEMBER( ti99_datamux_device::gromclk_in ) WRITE_LINE_MEMBER( ti99_datamux_device::gromclk_in )
{ {
// Don't propagate the clock in idle phase
if (m_grom_idle) return;
// Propagate to the GROMs // Propagate to the GROMs
if (m_console_groms_present) if (m_console_groms_present)
{ {
for (int i=0; i < 3; i++) m_grom[i]->gclock_in(state); for (int i=0; i < 3; i++) m_grom[i]->gclock_in(state);
m_grom_idle = m_grom[0]->idle();
} }
m_gromport->gclock_in(state); m_gromport->gclock_in(state);
// Only ask the gromport when we don't have GROMs in the console
if (!m_console_groms_present)
m_grom_idle = m_gromport->is_grom_idle();
} }
/*************************************************************************** /***************************************************************************

View File

@ -126,6 +126,9 @@ private:
// Console GROMs are available (the HSGPL expects them to be removed) // Console GROMs are available (the HSGPL expects them to be removed)
bool m_console_groms_present; bool m_console_groms_present;
// GROMs are idle, no need to propagate the clock
bool m_grom_idle;
}; };
/******************************************************************************/ /******************************************************************************/

View File

@ -234,6 +234,18 @@ void gromport_device::cartridge_inserted()
} }
} }
/*
Find out whether the GROMs in the cartridge are idle. In that case,
cut the clock line.
*/
bool gromport_device::is_grom_idle()
{
if (m_connector != nullptr)
return m_connector->is_grom_idle();
else
return false;
}
void gromport_device::device_config_complete() void gromport_device::device_config_complete()
{ {
m_connector = static_cast<ti99_cartridge_connector_device*>(subdevices().first()); m_connector = static_cast<ti99_cartridge_connector_device*>(subdevices().first());
@ -347,6 +359,14 @@ WRITE_LINE_MEMBER(single_conn_device::gclock_in)
m_cartridge->gclock_in(state); m_cartridge->gclock_in(state);
} }
/*
Check whether the GROMs are idle.
*/
bool single_conn_device::is_grom_idle()
{
return m_cartridge->is_grom_idle();
}
void single_conn_device::device_start() void single_conn_device::device_start()
{ {
m_cartridge = static_cast<ti99_cartridge_device*>(subdevices().first()); m_cartridge = static_cast<ti99_cartridge_device*>(subdevices().first());
@ -619,6 +639,22 @@ WRITE8_MEMBER(multi_conn_device::cruwrite)
} }
} }
/*
Check whether the GROMs are idle. Just ask the currently
active cartridge.
*/
bool multi_conn_device::is_grom_idle()
{
/* Sanity check. Higher slots are always empty. */
if (m_active_slot >= NUMBER_OF_CARTRIDGE_SLOTS)
return false;
if (m_cartridge[m_active_slot] != nullptr)
return m_cartridge[m_active_slot]->is_grom_idle();
return false;
}
void multi_conn_device::device_start() void multi_conn_device::device_start()
{ {
m_next_free_slot = 0; m_next_free_slot = 0;
@ -818,6 +854,14 @@ WRITE_LINE_MEMBER(gkracker_device::gclock_in)
if (m_cartridge != nullptr) m_cartridge->gclock_in(state); if (m_cartridge != nullptr) m_cartridge->gclock_in(state);
} }
/*
Check whether the GROMs are idle.
*/
bool gkracker_device::is_grom_idle()
{
return (m_cartridge != nullptr)? m_cartridge->is_grom_idle() : false;
}
READ8Z_MEMBER(gkracker_device::readz) READ8Z_MEMBER(gkracker_device::readz)
{ {
if (m_grom_selected) if (m_grom_selected)
@ -1466,6 +1510,11 @@ WRITE_LINE_MEMBER(ti99_cartridge_device::gclock_in)
if (m_pcb != nullptr) m_pcb->gclock_in(state); if (m_pcb != nullptr) m_pcb->gclock_in(state);
} }
bool ti99_cartridge_device::is_grom_idle()
{
return (m_pcb != nullptr)? m_pcb->is_grom_idle() : false;
}
void ti99_cartridge_device::device_config_complete() void ti99_cartridge_device::device_config_complete()
{ {
update_names(); update_names();
@ -1527,6 +1576,7 @@ const device_type TI99CART = &device_creator<ti99_cartridge_device>;
ti99_cartridge_pcb::ti99_cartridge_pcb() ti99_cartridge_pcb::ti99_cartridge_pcb()
: m_cart(nullptr), : m_cart(nullptr),
m_grom_idle(false),
m_grom_size(0), m_grom_size(0),
m_rom_size(0), m_rom_size(0),
m_ram_size(0), m_ram_size(0),
@ -1629,13 +1679,25 @@ WRITE_LINE_MEMBER( ti99_cartridge_pcb::romgq_line )
WRITE8_MEMBER(ti99_cartridge_pcb::set_gromlines) WRITE8_MEMBER(ti99_cartridge_pcb::set_gromlines)
{ {
for (auto& elem : m_grom) for (auto& elem : m_grom)
if (elem != nullptr) elem->set_lines(space, offset, data); {
if (elem != nullptr)
{
elem->set_lines(space, offset, data);
if (data==ASSERT_LINE) m_grom_idle = false;
}
}
} }
WRITE_LINE_MEMBER(ti99_cartridge_pcb::gclock_in) WRITE_LINE_MEMBER(ti99_cartridge_pcb::gclock_in)
{ {
for (auto& elem : m_grom) for (auto& elem : m_grom)
if (elem != nullptr) elem->gclock_in(state); {
if (elem != nullptr)
{
elem->gclock_in(state);
m_grom_idle = elem->idle();
}
}
} }

View File

@ -42,6 +42,7 @@ public:
template<class _Object> static devcb_base &static_set_reset_callback(device_t &device, _Object object) { return downcast<gromport_device &>(device).m_console_reset.set_callback(object); } template<class _Object> static devcb_base &static_set_reset_callback(device_t &device, _Object object) { return downcast<gromport_device &>(device).m_console_reset.set_callback(object); }
void cartridge_inserted(); void cartridge_inserted();
bool is_grom_idle();
protected: protected:
virtual void device_start() override; virtual void device_start() override;
@ -100,6 +101,7 @@ public:
bool is_available() { return m_pcb != nullptr; } bool is_available() { return m_pcb != nullptr; }
void set_slot(int i); void set_slot(int i);
bool is_grom_idle();
protected: protected:
virtual void device_start() override { }; virtual void device_start() override { };
@ -159,8 +161,7 @@ public:
virtual void insert(int index, ti99_cartridge_device* cart) { m_gromport->cartridge_inserted(); }; virtual void insert(int index, ti99_cartridge_device* cart) { m_gromport->cartridge_inserted(); };
virtual void remove(int index) { }; virtual void remove(int index) { };
// UINT16 grom_base(); virtual bool is_grom_idle() =0;
// UINT16 grom_mask();
protected: protected:
ti99_cartridge_connector_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); ti99_cartridge_connector_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
@ -186,6 +187,8 @@ public:
DECLARE_WRITE8_MEMBER(set_gromlines) override; DECLARE_WRITE8_MEMBER(set_gromlines) override;
DECLARE_WRITE_LINE_MEMBER(gclock_in) override; DECLARE_WRITE_LINE_MEMBER(gclock_in) override;
bool is_grom_idle() override;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
@ -221,6 +224,8 @@ public:
void remove(int index) override; void remove(int index) override;
DECLARE_INPUT_CHANGED_MEMBER( switch_changed ); DECLARE_INPUT_CHANGED_MEMBER( switch_changed );
bool is_grom_idle() override;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
@ -258,6 +263,9 @@ public:
void remove(int index) override; void remove(int index) override;
DECLARE_INPUT_CHANGED_MEMBER( gk_changed ); DECLARE_INPUT_CHANGED_MEMBER( gk_changed );
// We may have a cartridge plugged into the GK
bool is_grom_idle() override;
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
@ -317,9 +325,11 @@ protected:
void set_cartridge(ti99_cartridge_device *cart); void set_cartridge(ti99_cartridge_device *cart);
const char* tag() { return m_tag; } const char* tag() { return m_tag; }
void set_tag(const char* tag) { m_tag = tag; } void set_tag(const char* tag) { m_tag = tag; }
bool is_grom_idle() { return m_grom_idle; }
ti99_cartridge_device* m_cart; ti99_cartridge_device* m_cart;
tmc0430_device* m_grom[5]; tmc0430_device* m_grom[5];
bool m_grom_idle;
int m_grom_size; int m_grom_size;
int m_rom_size; int m_rom_size;
int m_ram_size; int m_ram_size;

View File

@ -12,6 +12,7 @@
#include "formats/flopimg.h" #include "formats/flopimg.h"
#include "formats/d88_dsk.h" #include "formats/d88_dsk.h"
#include "formats/dfi_dsk.h" #include "formats/dfi_dsk.h"
#include "formats/hxchfe_dsk.h"
#include "formats/hxcmfm_dsk.h" #include "formats/hxcmfm_dsk.h"
#include "formats/imd_dsk.h" #include "formats/imd_dsk.h"
#include "formats/ipf_dsk.h" #include "formats/ipf_dsk.h"
@ -42,6 +43,7 @@
, \ , \
FLOPPY_D88_FORMAT, \ FLOPPY_D88_FORMAT, \
FLOPPY_DFI_FORMAT, \ FLOPPY_DFI_FORMAT, \
FLOPPY_HFE_FORMAT, \
FLOPPY_IMD_FORMAT, \ FLOPPY_IMD_FORMAT, \
FLOPPY_IPF_FORMAT, \ FLOPPY_IPF_FORMAT, \
FLOPPY_MFI_FORMAT, \ FLOPPY_MFI_FORMAT, \

View File

@ -13,8 +13,6 @@
#define LOGPRINT(x) do { if (VERBOSE) logerror x; if (PRINTF_IDE_COMMANDS) osd_printf_debug x; } while (0) #define LOGPRINT(x) do { if (VERBOSE) logerror x; if (PRINTF_IDE_COMMANDS) osd_printf_debug x; } while (0)
#define TIME_PER_SECTOR_WRITE (attotime::from_usec(100)) #define TIME_PER_SECTOR_WRITE (attotime::from_usec(100))
/* read time <2 breaks primrag2, ==100 breaks bm1stmix */
#define TIME_PER_SECTOR_READ (attotime::from_usec(2))
#define TIME_PER_ROTATION (attotime::from_hz(5400/60)) #define TIME_PER_ROTATION (attotime::from_hz(5400/60))
#define TIME_BETWEEN_SECTORS (attotime::from_nsec(400)) #define TIME_BETWEEN_SECTORS (attotime::from_nsec(400))
@ -415,7 +413,7 @@ void ata_mass_storage_device::fill_buffer()
if (m_sector_count > 0) if (m_sector_count > 0)
{ {
set_dasp(ASSERT_LINE); set_dasp(ASSERT_LINE);
start_busy(TIME_PER_SECTOR_READ, PARAM_COMMAND); start_busy(TIME_BETWEEN_SECTORS, PARAM_COMMAND);
} }
break; break;
} }

View File

@ -211,7 +211,7 @@ WRITE_LINE_MEMBER( tmc0430_device::gclock_in )
if ((m_current_clock_level==CLEAR_LINE) || (oldlevel==ASSERT_LINE)) if ((m_current_clock_level==CLEAR_LINE) || (oldlevel==ASSERT_LINE))
return; return;
if (TRACE_CLOCK) logerror("GROMCLK in, phase=%d, m_add=%d\n", m_phase, m_address); if (TRACE_CLOCK) logerror("GROMCLK in, phase=%d, m_add=%04x\n", m_phase, m_address);
switch (m_phase) switch (m_phase)
{ {

View File

@ -53,6 +53,9 @@ public:
int debug_get_address(); int debug_get_address();
// Allow for checking the state of the GROM so we can turn off the clock
bool idle() { return m_phase == 0; }
protected: protected:
void device_start(void) override; void device_start(void) override;
void device_reset(void) override; void device_reset(void) override;

View File

@ -483,6 +483,16 @@ void scn2674_device::write_command(UINT8 data)
/* read from cursor address to pointer address */ /* read from cursor address to pointer address */
LOG2674(("DELAYED read from cursor address to pointer address %02x\n",data)); LOG2674(("DELAYED read from cursor address to pointer address %02x\n",data));
break; break;
case 0xbf:
/* write from cursor address to pointer address TODO: transfer only during blank*/
for(i = m_cursor_l | (m_cursor_h << 8); i != (m_IR10_display_pointer_address_lower | (m_IR11_display_pointer_address_upper << 8)); i = ((i + 1) & 0xffff))
space().write_byte(i, m_buffer);
space().write_byte(i, m_buffer); // get the last
m_cursor_l = m_IR10_display_pointer_address_lower;
m_cursor_h = m_IR11_display_pointer_address_upper;
LOG2674(("DELAYED write from cursor address to pointer address %02x\n",data));
break;
} }
} }

View File

@ -387,15 +387,18 @@ bool debugger_commands::validate_number_parameter(const char *param, UINT64 *res
bool debugger_commands::validate_boolean_parameter(const char *param, bool *result) bool debugger_commands::validate_boolean_parameter(const char *param, bool *result)
{ {
/* nullptr parameter does nothing and returns no error */ /* nullptr parameter does nothing and returns no error */
if (param == nullptr) if (param == nullptr || strlen(param) == 0)
return true; return true;
/* evaluate the expression; success if no error */ /* evaluate the expression; success if no error */
bool is_true = (strcmp(param, "true") == 0 || strcmp(param, "TRUE") == 0 || strcmp(param, "1") == 0); bool is_true = (core_stricmp(param, "true") == 0 || strcmp(param, "1") == 0);
bool is_false = (strcmp(param, "false") == 0 || strcmp(param, "FALSE") == 0 || strcmp(param, "0") == 0); bool is_false = (core_stricmp(param, "false") == 0 || strcmp(param, "0") == 0);
if (!is_true && !is_false) if (!is_true && !is_false)
{
m_console.printf("Invalid boolean '%s'\n", param);
return false; return false;
}
*result = is_true; *result = is_true;
@ -2482,7 +2485,7 @@ void debugger_commands::execute_trace_internal(int ref, int params, const char *
return; return;
if (!validate_boolean_parameter((params > 2) ? param[2] : nullptr, &detect_loops)) if (!validate_boolean_parameter((params > 2) ? param[2] : nullptr, &detect_loops))
return; return;
if (!debug_command_parameter_command(action = param[3])) if (!debug_command_parameter_command(action = (params > 3) ? param[3] : nullptr))
return; return;
/* open the file */ /* open the file */

View File

@ -81,7 +81,7 @@ enum
XTAL_5_7143MHz = 5714300, /* Cidelsa Destroyer */ XTAL_5_7143MHz = 5714300, /* Cidelsa Destroyer */
XTAL_5_911MHz = 5911000, /* Philips Videopac Plus G7400 */ XTAL_5_911MHz = 5911000, /* Philips Videopac Plus G7400 */
XTAL_5_9904MHz = 5990400, /* Luxor ABC 800 keyboard (Keytronic custom part #48-300-008 is equivalent) */ XTAL_5_9904MHz = 5990400, /* Luxor ABC 800 keyboard (Keytronic custom part #48-300-008 is equivalent) */
XTAL_6MHz = 6000000, /* American Poker II */ XTAL_6MHz = 6000000, /* American Poker II, Taito SJ System */
XTAL_6_144MHz = 6144000, /* Used on Alpha Denshi early 80's games sound board, Casio FP-200 and Namco System 16 */ XTAL_6_144MHz = 6144000, /* Used on Alpha Denshi early 80's games sound board, Casio FP-200 and Namco System 16 */
XTAL_6_5MHz = 6500000, /* Jupiter Ace */ XTAL_6_5MHz = 6500000, /* Jupiter Ace */
XTAL_6_9MHz = 6900000, /* BBN BitGraph CPU */ XTAL_6_9MHz = 6900000, /* BBN BitGraph CPU */

View File

@ -43,7 +43,7 @@ menu_custom_ui::menu_custom_ui(mame_ui_manager &mui, render_container &container
auto lang = mui.machine().options().language(); auto lang = mui.machine().options().language();
const osd::directory::entry *dirent; const osd::directory::entry *dirent;
std::size_t cnt = 0; std::size_t cnt = 0;
while ((dirent = path.next()) != nullptr) while ((dirent = path.next()))
{ {
if (dirent->type == osd::directory::entry::entry_type::DIR && strcmp(dirent->name, ".") != 0 && strcmp(dirent->name, "..") != 0) if (dirent->type == osd::directory::entry::entry_type::DIR && strcmp(dirent->name, ".") != 0 && strcmp(dirent->name, "..") != 0)
{ {
@ -829,6 +829,7 @@ void menu_rgb_ui::populate()
// set filter arrow // set filter arrow
UINT32 arrow_flags = FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW; UINT32 arrow_flags = FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW;
std::string s_text = std::string(m_search).append("_"); std::string s_text = std::string(m_search).append("_");
item_append(_("ARGB Settings"), "", FLAG_DISABLE | FLAG_UI_HEADING, nullptr);
if (m_lock_ref != RGB_ALPHA) if (m_lock_ref != RGB_ALPHA)
{ {
@ -878,9 +879,8 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa
float width, maxwidth = origx2 - origx1; float width, maxwidth = origx2 - origx1;
// top text // top text
std::string topbuf = std::string(m_title).append(_(" - ARGB Settings")); ui().draw_text_full(container(), m_title.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER,
ui().draw_text_full(container(), topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width);
mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER; width += 2 * UI_BOX_LR_BORDER;
maxwidth = std::max(maxwidth, width); maxwidth = std::max(maxwidth, width);
@ -899,41 +899,37 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa
y1 += UI_BOX_TB_BORDER; y1 += UI_BOX_TB_BORDER;
// draw the text within it // draw the text within it
ui().draw_text_full(container(), topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, ui().draw_text_full(container(), m_title.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER,
mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR);
std::string sampletxt(_("Color preview =")); std::string sampletxt(_("Color preview ="));
maxwidth = origx2 - origx1;
ui().draw_text_full(container(), sampletxt.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, ui().draw_text_full(container(), sampletxt.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER,
mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width);
width += 2 * UI_BOX_LR_BORDER; width += 2 * UI_BOX_LR_BORDER;
maxwidth = std::max(maxwidth, width); maxwidth = std::max(origx2 - origx1, width);
// compute our bounds // compute our bounds
x1 -= UI_BOX_LR_BORDER; x1 = 0.5f - 0.5f * maxwidth;
x2 = x1 + width; x2 = x1 + maxwidth;
y1 = origy2 + UI_BOX_TB_BORDER; y1 = origy2 + UI_BOX_TB_BORDER;
y2 = origy2 + bottom; y2 = origy2 + bottom;
// draw a box // draw a box
ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_RED_COLOR); ui().draw_outlined_box(container(), x1, y1, x1 + width, y2, UI_RED_COLOR);
// take off the borders // take off the borders
x1 += UI_BOX_LR_BORDER; x1 += UI_BOX_LR_BORDER;
x2 -= UI_BOX_LR_BORDER;
y1 += UI_BOX_TB_BORDER; y1 += UI_BOX_TB_BORDER;
// draw the normal text // draw the normal text
ui().draw_text_full(container(), sampletxt.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, ui().draw_text_full(container(), sampletxt.c_str(), x1, y1, width - UI_BOX_LR_BORDER, ui::text_layout::CENTER, ui::text_layout::NEVER,
mame_ui_manager::NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr); mame_ui_manager::NORMAL, rgb_t::white, rgb_t::black);
float t_x2 = x1 - UI_BOX_LR_BORDER + maxwidth; x1 += width + UI_BOX_LR_BORDER;
x1 = x2 + 2.0f * UI_BOX_LR_BORDER;
x2 = t_x2;
y1 -= UI_BOX_TB_BORDER; y1 -= UI_BOX_TB_BORDER;
// draw color box
ui().draw_outlined_box(container(), x1, y1, x2, y2, *m_color); ui().draw_outlined_box(container(), x1, y1, x2, y2, *m_color);
} }
//------------------------------------------------- //-------------------------------------------------

View File

@ -129,7 +129,7 @@ void menu_main::populate()
item_append(_("Plugin Options"), "", 0, (void *)PLUGINS); item_append(_("Plugin Options"), "", 0, (void *)PLUGINS);
// add dats menu // add dats menu
if (ui().options().enabled_dats() && mame_machine_manager::instance()->lua()->call_plugin("", "data_list")) if (mame_machine_manager::instance()->lua()->call_plugin("", "data_list"))
item_append(_("External DAT View"), "", 0, (void *)EXTERNAL_DATS); item_append(_("External DAT View"), "", 0, (void *)EXTERNAL_DATS);
item_append(menu_item_type::SEPARATOR); item_append(menu_item_type::SEPARATOR);

View File

@ -44,7 +44,6 @@ const options_entry ui_options::s_option_entries[] =
// misc options // misc options
{ nullptr, nullptr, OPTION_HEADER, "UI MISC OPTIONS" }, { nullptr, nullptr, OPTION_HEADER, "UI MISC OPTIONS" },
{ OPTION_DATS_ENABLED, "1", OPTION_BOOLEAN, "enable DATs support" },
{ OPTION_REMEMBER_LAST, "1", OPTION_BOOLEAN, "reselect in main menu last played game" }, { OPTION_REMEMBER_LAST, "1", OPTION_BOOLEAN, "reselect in main menu last played game" },
{ OPTION_ENLARGE_SNAPS, "1", OPTION_BOOLEAN, "enlarge arts (snapshot, title, etc...) in right panel (keeping aspect ratio)" }, { OPTION_ENLARGE_SNAPS, "1", OPTION_BOOLEAN, "enlarge arts (snapshot, title, etc...) in right panel (keeping aspect ratio)" },
{ OPTION_FORCED4X3, "1", OPTION_BOOLEAN, "force the appearance of the snapshot in the list software to 4:3" }, { OPTION_FORCED4X3, "1", OPTION_BOOLEAN, "force the appearance of the snapshot in the list software to 4:3" },

View File

@ -38,7 +38,6 @@
#define OPTION_UI_PATH "ui_path" #define OPTION_UI_PATH "ui_path"
// core misc options // core misc options
#define OPTION_DATS_ENABLED "dats_enabled"
#define OPTION_REMEMBER_LAST "remember_last" #define OPTION_REMEMBER_LAST "remember_last"
#define OPTION_ENLARGE_SNAPS "enlarge_snaps" #define OPTION_ENLARGE_SNAPS "enlarge_snaps"
#define OPTION_FORCED4X3 "forced4x3" #define OPTION_FORCED4X3 "forced4x3"
@ -102,7 +101,6 @@ public:
const char *ui_path() const { return value(OPTION_UI_PATH); } const char *ui_path() const { return value(OPTION_UI_PATH); }
// Misc options // Misc options
bool enabled_dats() const { return bool_value(OPTION_DATS_ENABLED); }
bool remember_last() const { return bool_value(OPTION_REMEMBER_LAST); } bool remember_last() const { return bool_value(OPTION_REMEMBER_LAST); }
bool enlarge_snaps() const { return bool_value(OPTION_ENLARGE_SNAPS); } bool enlarge_snaps() const { return bool_value(OPTION_ENLARGE_SNAPS); }
bool forced_4x3_snapshot() const { return bool_value(OPTION_FORCED4X3); } bool forced_4x3_snapshot() const { return bool_value(OPTION_FORCED4X3); }

View File

@ -139,11 +139,15 @@ menu_select_game::~menu_select_game()
game_driver const *const driver(isfavorite() ? nullptr : reinterpret_cast<game_driver const *>(get_selection_ref())); game_driver const *const driver(isfavorite() ? nullptr : reinterpret_cast<game_driver const *>(get_selection_ref()));
ui_software_info *const swinfo(isfavorite() ? reinterpret_cast<ui_software_info *>(get_selection_ref()) : nullptr); ui_software_info *const swinfo(isfavorite() ? reinterpret_cast<ui_software_info *>(get_selection_ref()) : nullptr);
if ((FPTR)driver > skip_main_items) if (reinterpret_cast<FPTR>(driver) > skip_main_items)
last_driver = driver->name; last_driver = driver->name;
else if (driver && m_prev_selected)
last_driver = reinterpret_cast<game_driver const *>(m_prev_selected)->name;
if ((FPTR)swinfo > skip_main_items) if (reinterpret_cast<FPTR>(swinfo) > skip_main_items)
last_driver = swinfo->shortname; last_driver = swinfo->shortname;
else if (swinfo && m_prev_selected)
last_driver = reinterpret_cast<ui_software_info *>(m_prev_selected)->shortname;
std::string filter(main_filters::text[main_filters::actual]); std::string filter(main_filters::text[main_filters::actual]);
if (main_filters::actual == FILTER_MANUFACTURER) if (main_filters::actual == FILTER_MANUFACTURER)
@ -168,7 +172,6 @@ void menu_select_game::handle()
m_prev_selected = item[0].ref; m_prev_selected = item[0].ref;
bool check_filter = false; bool check_filter = false;
bool enabled_dats = ui().options().enabled_dats();
// if i have to load datfile, performe an hard reset // if i have to load datfile, performe an hard reset
if (ui_globals::reset) if (ui_globals::reset)
@ -339,7 +342,7 @@ void menu_select_game::handle()
m_search[0] = '\0'; m_search[0] = '\0';
reset(reset_options::SELECT_FIRST); reset(reset_options::SELECT_FIRST);
} }
else if (menu_event->iptkey == IPT_UI_DATS && enabled_dats) else if (menu_event->iptkey == IPT_UI_DATS && mame_machine_manager::instance()->lua()->call_plugin("", "data_list"))
{ {
// handle UI_DATS // handle UI_DATS
if (!isfavorite()) if (!isfavorite())
@ -394,7 +397,7 @@ void menu_select_game::handle()
} }
} }
} }
else if (menu_event->iptkey == IPT_UI_EXPORT && !isfavorite()) else if (menu_event->iptkey == IPT_UI_EXPORT)
{ {
// handle UI_EXPORT // handle UI_EXPORT
inkey_export(); inkey_export();
@ -501,7 +504,7 @@ void menu_select_game::populate()
if (!isfavorite()) if (!isfavorite())
{ {
// if search is not empty, find approximate matches // if search is not empty, find approximate matches
if (m_search[0] != 0 && !isfavorite()) if (m_search[0] != 0)
populate_search(); populate_search();
else else
{ {
@ -1352,8 +1355,23 @@ void menu_select_game::inkey_export()
} }
else else
{ {
list = m_displaylist; if (isfavorite())
{
// iterate over favorites
for (auto & favmap : mame_machine_manager::instance()->favorite().m_list)
{
if (favmap.second.startempty == 1)
list.push_back(favmap.second.driver);
else
return;
}
}
else
{
list = m_displaylist;
}
} }
menu::stack_push<menu_export>(ui(), container(), std::move(list)); menu::stack_push<menu_export>(ui(), container(), std::move(list));
} }

View File

@ -242,7 +242,7 @@ void menu_select_software::handle()
// handle UI_DOWN_FILTER // handle UI_DOWN_FILTER
highlight++; highlight++;
} }
else if (menu_event->iptkey == IPT_UI_DATS && ui().options().enabled_dats()) else if (menu_event->iptkey == IPT_UI_DATS && mame_machine_manager::instance()->lua()->call_plugin("", "data_list"))
{ {
// handle UI_DATS // handle UI_DATS
ui_software_info *ui_swinfo = (ui_software_info *)menu_event->itemref; ui_software_info *ui_swinfo = (ui_software_info *)menu_event->itemref;

View File

@ -22,7 +22,6 @@ std::vector<submenu::option> const submenu::misc_options = {
{ submenu::option_type::HEAD, __("Miscellaneous Options") }, { submenu::option_type::HEAD, __("Miscellaneous Options") },
{ submenu::option_type::UI, __("Re-select last machine played"), OPTION_REMEMBER_LAST }, { submenu::option_type::UI, __("Re-select last machine played"), OPTION_REMEMBER_LAST },
{ submenu::option_type::UI, __("Enlarge images in the right panel"), OPTION_ENLARGE_SNAPS }, { submenu::option_type::UI, __("Enlarge images in the right panel"), OPTION_ENLARGE_SNAPS },
{ submenu::option_type::UI, __("DATs info"), OPTION_DATS_ENABLED },
{ submenu::option_type::EMU, __("Cheats"), OPTION_CHEAT }, { submenu::option_type::EMU, __("Cheats"), OPTION_CHEAT },
{ submenu::option_type::EMU, __("Show mouse pointer"), OPTION_UI_MOUSE }, { submenu::option_type::EMU, __("Show mouse pointer"), OPTION_UI_MOUSE },
{ submenu::option_type::EMU, __("Confirm quit from machines"), OPTION_CONFIRM_QUIT }, { submenu::option_type::EMU, __("Confirm quit from machines"), OPTION_CONFIRM_QUIT },

View File

@ -0,0 +1,691 @@
// license:BSD-3-Clause
// copyright-holders:Michael Zapf
/*
The hfe_format class implements the HFE format that is used for the Lotharek
floppy emulator.
Format definition according to the official document:
File header (0x0000 - 0x01FF, 512 bytes)
----------------------------------------
typedef struct picfileformatheader_
{
UINT8 HEADERSIGNATURE[8]; // 0: "HXCPICFE"
UINT8 formatrevision; // 8: Revision 0
UINT8 number_of_track; // 9: Number of track in the file
UINT8 number_of_side; // 10: Number of valid side (Not used by the emulator)
UINT8 track_encoding; // 11: Track Encoding mode
// (Used for the write support - Please see the list above)
UINT16 bitRate; // 12: Bitrate in Kbit/s. Ex : 250=250000bits/s
// Max value : 500
UINT16 floppyRPM; // 14: Rotation per minute (Not used by the emulator)
UINT8 floppyinterfacemode; // 16: Floppy interface mode. (Please see the list above.)
UINT8 dnu; // 17: Free
UINT16 track_list_offset; // 18: Offset of the track list LUT in block of 512 bytes
// (Ex: 1=0x200)
UINT8 write_allowed; // 20: The Floppy image is write protected ?
UINT8 single_step; // 21: 0xFF : Single Step 0x00 Double Step mode
UINT8 track0s0_altencoding; // 22: 0x00 : Use an alternate track_encoding for track 0 Side 0
UINT8 track0s0_encoding; // 23: alternate track_encoding for track 0 Side 0
UINT8 track0s1_altencoding; // 24: 0x00 : Use an alternate track_encoding for track 0 Side 1
UINT8 track0s1_encoding; // 25: alternate track_encoding for track 0 Side 1
} picfileformatheader;
Byte order for UINT16 is little endian.
floppyintefacemode values are defined in the header file as floppymode_t,
track_encodings are defined as encoding_t
track0s0_encoding is only valid when track0s0_altencoding==0xff
track0s1_encoding is only valid when track0s1_altencoding==0xff
Track offset lookup table (at 0x0200)
-------------------------------------
typedef struct pictrack_
{
UINT16 offset; // Offset of the track data in blocks of 512 bytes (Ex: 2=0x400)
UINT16 track_len; // Length of the track data in byte.
} pictrack;
This table has a size of number_of_track*4 bytes.
Track data
----------
(first possible occurance at 0x0400)
Each track is encoded in a sequence of cell levels which are represented
by bits in the data.
+--------+--------+--------+--------+---- ........ ---+--------+--------+
| Head 0 | Head 1 | Head 0 | Head 1 | Hea ........ 1 | Head 0 | Head 1 |
+--------+--------+--------+--------+---- ........ ---+--------+--------+
| Block 0 | Block 1 | | Block n-1 |
Each block (Head 0 + Head 1) is 0x200 bytes long, with 0x100 bytes for
each head. Block n-1 may be partially filled, e.g. with 64 bytes for
head 0 and 64 bytes for head 1. The contents for head 1 in block n-1
start at offxet 0x100 nevertheless:
+--------+--------+
|]]]] 0 |]]]] 1 |
+--------+--------+
| Block n-1 |
Each byte in the track data is a sequence of cell sample levels
according to the sample rate. Bit order is little endian:
Bits
7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 23 22 21 20 19 18 17 16
0-bits indicate no change, 1-bits indicate flux level change.
To encode the byte 0x4e in MFM at 250 kbit/s, the following data bytes
are used:
Byte: 0 1 0 0 1 1 1 0
MDM encoding: 10 01 00 10 01 01 01 00
Reversed order: 0010 1010 0100 1001 = 2a 49
Interestingly, FM-encoded disks are usually sampled at 250 kbit/s,
like MFM, although FM only delivers 125 kbit/s. This oversampling leads
to zero bits (no change) every two positions. See below for details.
TODO:
- Handle double-stepping for medium.tracks=40, drive.tracks=80
*/
#include "hxchfe_dsk.h"
#define HEADER_LENGTH 512
#define TRACK_TABLE_LENGTH 1024
hfe_format::hfe_format() : floppy_image_format_t(),
m_cylinders(0),
m_heads(0),
m_track_encoding(UNKNOWN_ENCODING),
m_bit_rate(0),
m_floppy_rpm(0),
m_interface_mode(DISABLE_FLOPPYMODE),
m_write_allowed(true),
m_single_step(true),
m_track0s0_has_altencoding(false),
m_track0s0_encoding(UNKNOWN_ENCODING),
m_track0s1_has_altencoding(false),
m_track0s1_encoding(UNKNOWN_ENCODING),
m_selected_mode(DISABLE_FLOPPYMODE),
m_selected_encoding(UNKNOWN_ENCODING)
{
}
const char *hfe_format::name() const
{
return "hfe";
}
const char *hfe_format::description() const
{
return "SDCard HxC Floppy Emulator HFE File format";
}
const char *hfe_format::extensions() const
{
return "hfe";
}
bool hfe_format::supports_save() const
{
return true;
}
int hfe_format::identify(io_generic *io, UINT32 form_factor)
{
UINT8 header[8];
io_generic_read(io, &header, 0, sizeof(header));
if ( memcmp( header, HFE_FORMAT_HEADER, 8 ) ==0) {
return 100;
}
return 0;
}
bool hfe_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
{
UINT8 header[HEADER_LENGTH];
UINT8 track_table[TRACK_TABLE_LENGTH];
int drivecyl, driveheads;
image->get_maximal_geometry(drivecyl, driveheads);
// read header
io_generic_read(io, header, 0, HEADER_LENGTH);
// get values
// Format revision must be 0
if (header[8] != 0)
{
osd_printf_error("hxchfe: Invalid format revision. Expected 0, got %d.\n", header[8]);
return false;
}
m_cylinders = header[9] & 0xff;
m_heads = header[10] & 0xff;
if (drivecyl < m_cylinders)
{
osd_printf_error("hxchfe: Floppy disk has too many tracks for this drive (floppy tracks=%d, drive tracks=%d).\n", m_cylinders, drivecyl);
return false;
}
if (m_cylinders <= drivecyl/2)
{
osd_printf_error("hxchfe: Double stepping not yet supported (floppy tracks=%d, drive tracks=%d).\n", m_cylinders, drivecyl);
return false;
}
m_track_encoding = (encoding_t)(header[11] & 0xff);
if (m_track_encoding > EMU_FM_ENCODING)
{
osd_printf_error("hxchfe: Unknown track encoding %d.\n", m_track_encoding);
return false;
}
m_bit_rate = (header[12] & 0xff) | ((header[13] & 0xff)<<8);
if (m_bit_rate > 500)
{
osd_printf_error("hxchfe: Unsupported bit rate %d.\n", m_bit_rate);
return false;
}
int samplelength = 500000 / m_bit_rate;
// Not used in the HxC emulator
m_floppy_rpm = (header[14] & 0xff) | ((header[15] & 0xff)<<8);
m_interface_mode = (floppymode_t)(header[16] & 0xff);
if (m_interface_mode > S950_HD_FLOPPYMODE)
{
osd_printf_error("hxchfe: Unknown interface mode %d.\n", m_interface_mode);
return false;
}
m_write_allowed = (header[20] != 0);
m_single_step = (header[21] != 0);
m_track0s0_has_altencoding = (header[22] == 0x00);
m_track0s0_encoding = (encoding_t)(header[23] & 0xff);
m_track0s1_has_altencoding = (header[24] == 0x00);
m_track0s1_encoding = (encoding_t)(header[25] & 0xff);
// read track lookup table (multiple of 512)
int table_offset = (header[18] & 0xff) | ((header[19] & 0xff)<<8);
io_generic_read(io, track_table, table_offset<<9, TRACK_TABLE_LENGTH);
for (int i=0; i < m_cylinders; i++)
{
m_cyl_offset[i] = (track_table[4*i] & 0xff) | ((track_table[4*i+1] & 0xff)<<8);
m_cyl_length[i] = (track_table[4*i+2] & 0xff) | ((track_table[4*i+3] & 0xff)<<8);
}
// Load the tracks
dynamic_buffer cylinder_buffer;
for(int cyl=0; cyl < m_cylinders; cyl++)
{
// actual data read
// The HFE format defines an interleave of the two sides per cylinder
// at every 256 bytes
cylinder_buffer.resize(m_cyl_length[cyl]);
io_generic_read(io, &cylinder_buffer[0], m_cyl_offset[cyl]<<9, m_cyl_length[cyl]);
generate_track_from_hfe_bitstream(cyl, 0, samplelength, &cylinder_buffer[0], m_cyl_length[cyl], image);
if (m_heads == 2)
generate_track_from_hfe_bitstream(cyl, 1, samplelength, &cylinder_buffer[0], m_cyl_length[cyl], image);
}
bool success = true;
// Find variant
if (m_track_encoding == ISOIBM_FM_ENCODING || m_track_encoding == EMU_FM_ENCODING)
// FM is for single density
image->set_variant((m_heads==1)? floppy_image::SSSD : floppy_image::DSSD);
else
{
// MFM encoding is for everything else
if (m_track_encoding == ISOIBM_MFM_ENCODING || m_track_encoding == AMIGA_MFM_ENCODING)
{
// Each cylinder contains the samples of both sides, 8 samples per
// byte; the bitRate determines how many samples constitute a cell
// DSDD: 360 KiB (5.25")= 2*40*18*256; 100000 cells/track, 2 us, bit rate = 250 kbit/s
// DSDD: 720 KiB (3.5") = 2*80*18*256; 100000 cells/track, 2 us, 250 kbit/s
// DSHD: 1.4 MiB = 2*80*18*512 bytes; 200000 cells/track, 1 us, 500 kbit/s
// DSED: 2.8 MiB = 2*80*36*512 bytes; 400000 cells/track, 500 ns, 1 Mbit/s
// Use cylinder 1 (cyl 0 may have special encodings)
int cellcount = (m_cyl_length[1] * 8 / 2) * 250 / m_bit_rate;
if (cellcount > 300000)
image->set_variant(floppy_image::DSED);
else
{
if (cellcount > 150000)
image->set_variant(floppy_image::DSHD);
else
{
if (cellcount > 90000)
// We cannot distinguish DSDD from DSQD without knowing the size of the floppy disk
image->set_variant((m_heads==1)? floppy_image::SSDD : floppy_image::DSDD);
}
}
}
else
success = false;
}
return success;
}
void hfe_format::generate_track_from_hfe_bitstream(int cyl, int head, int samplelength, const UINT8 *trackbuf, int track_end, floppy_image *image)
{
// HFE has a minor issue: The track images do not sum up to 200 ms.
// Tracks are samples at 250 kbit/s for both FM and MFM, which yields
// 50000 data bits (100000 samples) for MFM, while FM is twice oversampled
// (4 samples per actual data bit)
// Hence, for both FM and MFM, we need 100000 samples.
// Track length 61B0 (both sides, FM)
// 100 + 100 + ... + 100 + (B0+50) = 3000 + B0 + 50 (pad)
// 100 + 100 + .... + 100 + B0 = 3000 + B0 = 99712 samples (-288)
// Track length 61C0 (both sides, MFM)
// 100 + 100 + ... + 100 + (C0+40) = 3000 + C0 + 40 (pad)
// 100 + 100 + .... + 100 + C0 = 3000 + C0 = 99840 samples (-160)
// Solution: Repeat the last byte until we have enough samples
// Note: We do not call normalize_times here because we're doing the job here
// HFE does not define subtracks; set to 0
// MG_1 / MG_0 are (logical) levels that indicate transition / no change
// MG_A / MG_B are physical flux directions
//
// Cell: | AAAABBBB | = MG_1 = | BBBBAAAA |
// | AAAAAAAA | = MG_0 = | BBBBBBBB |
std::vector<UINT32> &dest = image->get_buffer(cyl, head, 0);
dest.clear();
// Start with MG_A
UINT32 cbit = floppy_image::MG_A;
int offset = 0x100;
if (head==0)
{
offset = 0;
track_end -= 0x0100;
}
UINT8 current = 0;
int time = 0;
dest.push_back(cbit | time);
cbit = floppy_image::MG_B;
// Oversampled FM images (250 kbit/s) start with a 0, where a 1 is
// expected for 125 kbit/s.
// In order to make an oversampled image look like a normally sampled one,
// we position the transition at 500 ns before the cell end.
// The HFE format has a 1 us minimum cell size; this means that a normally
// sampled FM image with 11111... at the begining means
// 125 kbit/s: 1 1 1 1 1...
// 250 kbit/s: 01 01 01 01 01...
// 500 kbit/s: 00010001000100010001...
//
// -500 3500 7500 11500
// +-|---:---|---:-+ | : | : +-|---:---|---:-+ |
// | | : | : | | : | : | | : | : | |
// | | : | : +-|---:---|---:-+ | : | : +-|
// -500 0 2000 4000 6000 8000 10000 12000
//
// 3500 (1) samplelength - 500
// 7500 (1) +samplelength
// 11500 (1) +samplelength
// 15500 (1) +samplelength
//
// Double samples
//
// 1500 (0) samplelength - 500
// 3500 (1) +samplelength
// 5500 (0) +samplelength
// 7500 (1) +samplelength
// 9500 (0) +samplelength
// 11500 (1) +samplelength
time = -500;
// We are creating a sequence of timestamps with flux info
// Note that the flux change occurs in the last quarter of a cell
while (time < 200000000) // one rotation in nanosec
{
current = trackbuf[offset];
for (int j=0; j < 8; j++)
{
time += samplelength;
if ((current & 1)!=0)
{
// Append another transition to the vector
dest.push_back(cbit | time);
// Toggle the cell level
cbit = (cbit == floppy_image::MG_A)? floppy_image::MG_B : floppy_image::MG_A;
}
// HFE uses little-endian bit order
current >>= 1;
}
offset++;
if ((offset & 0xff)==0) offset += 0x100;
// When we have not reached the track end (after 0.2 sec) but run
// out of samples, repeat the last value
if (offset >= track_end) offset = track_end - 1;
}
image->set_write_splice_position(cyl, head, 0, 0);
}
bool hfe_format::save(io_generic *io, floppy_image *image)
{
dynamic_buffer cylbuf;
cylbuf.resize(0x6200);
UINT8 header[HEADER_LENGTH];
UINT8 track_table[TRACK_TABLE_LENGTH];
int track_end = 0x61c0;
int samplelength = 2000;
// Set up header
const char* sig = "HXCPICFE";
memcpy(header, sig, 8);
header[8] = 0;
// Can we change the number of tracks or heads?
image->get_actual_geometry(m_cylinders, m_heads);
header[9] = m_cylinders;
header[10] = m_heads;
// Floppy RPM is not used
header[14] = 0;
header[15] = 0;
// Bit rate and encoding will be set later, they may have changed by
// reformatting. The selected encoding is UNKNOWN_ENCODING unless
// explicitly set
m_track_encoding = m_selected_encoding;
// Take the old mode, unless we have specified a mode
header[16] = (m_selected_mode != DISABLE_FLOPPYMODE)? m_selected_mode : m_interface_mode;
header[17] = 0;
// The track lookup table is located at offset 0x200 (as 512 multiple)
header[18] = 1;
header[19] = 0;
header[20] = m_write_allowed? 0xff : 0x00;
header[21] = m_single_step? 0xff : 0x00;
// TODO: Allow for divergent track 0 format
header[22] = m_track0s0_has_altencoding? 0x00 : 0xff;
header[23] = m_track0s0_encoding;
header[24] = m_track0s1_has_altencoding? 0x00 : 0xff;
header[25] = m_track0s1_encoding;
// Fill the remaining bytes with 0xff
for (int i=26; i < HEADER_LENGTH; i++) header[i] = 0xff;
// Don't write yet; we still have to find out the bit rate.
// We won't have more than 200000 cells on the track
for (int cyl=0; cyl < m_cylinders; cyl++)
{
// After the call, the encoding will be set to FM or MFM
generate_hfe_bitstream_from_track(cyl, 0, samplelength, m_track_encoding, &cylbuf[0], track_end, image);
if (m_heads == 2)
generate_hfe_bitstream_from_track(cyl, 1, samplelength, m_track_encoding, &cylbuf[0], track_end, image);
if (cyl==0)
{
// Complete the header and write it
header[11] = m_track_encoding;
m_bit_rate = 500000/samplelength;
header[12] = m_bit_rate & 0xff;
header[13] = (m_bit_rate >> 8) & 0xff;
// Now write the header
io_generic_write(io, header, 0, HEADER_LENGTH);
// Set up the track lookup table
// We need the encoding value to be sure about the track length
int len = (m_track_encoding==ISOIBM_FM_ENCODING)? 0x61b0 : 0x61c0;
int pos = 0x400;
for (int i=0; i < m_cylinders; i++)
{
m_cyl_offset[i] = (pos >> 9);
m_cyl_length[i] = len;
pos += (len + 0x1ff) & 0xfe00;
track_table[i*4] = m_cyl_offset[i] & 0xff;
track_table[i*4+1] = (m_cyl_offset[i]>>8) & 0xff;
track_table[i*4+2] = len & 0xff;
track_table[i*4+3] = (len>>8) & 0xff;
}
// Set the remainder to 0xff
for (int i=m_cylinders*4; i < TRACK_TABLE_LENGTH; i++)
track_table[i] = 0xff;
io_generic_write(io, track_table, 0x200, TRACK_TABLE_LENGTH);
}
// Write the current cylinder
io_generic_write(io, &cylbuf[0], m_cyl_offset[cyl]<<9, (m_cyl_length[cyl] + 0x1ff) & 0xfe00);
}
return true;
}
void hfe_format::generate_hfe_bitstream_from_track(int cyl, int head, int& samplelength, encoding_t& encoding, UINT8 *cylinder_buffer, int track_end, floppy_image *image)
{
// We are using an own implementation here because the result of the
// parent class method would require some post-processing that we
// can easily avoid.
// See floppy_image_format_t::generate_bitstream_from_track
// as the original code
// No subtracks definded
std::vector<UINT32> &tbuf = image->get_buffer(cyl, head, 0);
if (tbuf.size() <= 1)
{
// Unformatted track
// TODO must handle that according to HFE
int track_size = 200000000/samplelength;
memset(cylinder_buffer, 0, (track_size+7)/8);
return;
}
// Find out whether we have FM or MFM recording, and determine the bit rate.
// This is needed for the format header.
//
// The encoding may have changed by reformatting; we cannot rely on the
// header when loading.
//
// FM: encoding 1 -> flux length = 4 us (min) ambivalent
// encoding 10 -> flux length = 8 us (max) ambivalent
// MFM: encoding 10 -> flux length = 4 us (min, DD) ambivalent
// encoding 100 -> flux length = 6 us (DD) significant
// encoding 1000 -> flux length = 8 us (max, DD) ambivalent
// encoding 10 -> flux length = 2 us (min, HD) significant
// encoding 100 -> flux length = 3 us (max, HD) significant
// If we have MFM, we should very soon detect a flux length of 6 us.
// But if we have FM, how long should we search to be sure?
// We assume that after 2000 us we should have reached the first IDAM,
// which contains a sequence 1001, implying a flux length of 6 us.
// If there was no such flux in that area, this can safely be assumed to be FM.
// Do it only for the first track; the format only supports one encoding.
if (encoding == UNKNOWN_ENCODING)
{
bool mfm_recording = false;
int time0 = 0;
int minflux = 4000;
// Skip the beginning (may have a short cell)
for (int i=2; (i < tbuf.size()-1) && (time0 < 2000000) && !mfm_recording; i++)
{
int time0 = tbuf[i] & floppy_image::TIME_MASK;
int fluxlen = (tbuf[i+1] & floppy_image::TIME_MASK) - time0;
if ((fluxlen < 3500) || (fluxlen > 5500 && fluxlen < 6500))
mfm_recording = true;
if (fluxlen < minflux) minflux = fluxlen;
}
encoding = mfm_recording? ISOIBM_MFM_ENCODING : ISOIBM_FM_ENCODING;
// samplelength = 1000ns => 10^6 cells/sec => 500 kbit/s
// samplelength = 2000ns => 250 kbit/s
// We stay with double sampling at 250 kbit/s for FM
if (minflux < 3500) samplelength = 1000;
else samplelength = 2000;
}
// Start at the write splice
UINT32 splice = image->get_write_splice_position(cyl, head, 0);
int cur_pos = splice;
int cur_entry = 0;
// Fast-forward to the write splice position (always 0 in this format)
while (cur_entry < int(tbuf.size())-1 && (tbuf[cur_entry+1] & floppy_image::TIME_MASK) < cur_pos)
cur_entry++;
int period = samplelength;
int period_adjust_base = period * 0.05;
int min_period = int(samplelength*0.75);
int max_period = int(samplelength*1.25);
int phase_adjust = 0;
int freq_hist = 0;
UINT32 next = 0;
int offset = 0x100;
// Prepare offset for the format storage
if (head==0)
{
offset = 0;
track_end -= 0x0100;
}
UINT8 bit = 0x01;
UINT8 current = 0;
while (next < 200000000) {
int edge = tbuf[cur_entry] & floppy_image::TIME_MASK;
// Start of track? Use next entry.
if (edge==0)
{
cur_pos = 0;
edge = tbuf[++cur_entry] & floppy_image::TIME_MASK;
}
// Wrapped over end?
if (edge < cur_pos) edge += 200000000;
// End of cell
next = cur_pos + period + phase_adjust;
// End of the window is at next; edge is the actual transition
if (edge >= next)
{
// No transition in the window -> 0
phase_adjust = 0;
}
else
{
// Transition in the window -> 1
current |= bit;
int delta = edge - (next - period/2);
phase_adjust = 0.65*delta;
if (delta < 0)
{
if (freq_hist < 0) freq_hist--;
else freq_hist = -1;
}
else
{
if (delta > 0)
{
if(freq_hist > 0) freq_hist++;
else freq_hist = 1;
}
else freq_hist = 0;
}
if (freq_hist)
{
int afh = freq_hist < 0 ? -freq_hist : freq_hist;
if (afh > 1)
{
int aper = period_adjust_base*delta/period;
if (!aper)
aper = freq_hist < 0 ? -1 : 1;
period += aper;
if (period < min_period) period = min_period;
else if (period > max_period) period = max_period;
}
}
}
cur_pos = next;
if(cur_pos >= 200000000) {
cur_pos -= 200000000;
cur_entry = 0;
}
bit = (bit << 1) & 0xff;
if (bit == 0)
{
bit = 0x01;
cylinder_buffer[offset++] = current;
if ((offset & 0xff)==0) offset += 0x100;
current = 0;
}
// Fast-forward to next cell
while (cur_entry < int(tbuf.size())-1 && (tbuf[cur_entry] & floppy_image::TIME_MASK) < cur_pos)
cur_entry++;
// Reaching the end of the track
if (cur_entry == int(tbuf.size())-1 && (tbuf[cur_entry] & floppy_image::TIME_MASK) < cur_pos)
{
// Wrap to index 0 or 1 depending on whether there is a transition exactly at the index hole
cur_entry = (tbuf[int(tbuf.size())-1] & floppy_image::MG_MASK) != (tbuf[0] & floppy_image::MG_MASK) ?
0 : 1;
}
}
// Write the current byte when not done
if (bit != 0x01)
cylinder_buffer[offset] = current;
}
const floppy_format_type FLOPPY_HFE_FORMAT = &floppy_image_format_creator<hfe_format>;

View File

@ -0,0 +1,91 @@
// license:BSD-3-Clause
// copyright-holders:Michael Zapf
/*********************************************************************
formats/hxchfe_dsk.h
HxC Floppy Emulator HFE file format
*********************************************************************/
#ifndef HXCHFE_DSK_H
#define HXCHFE_DSK_H
#include "flopimg.h"
#define HFE_FORMAT_HEADER "HXCPICFE"
enum encoding_t
{
ISOIBM_MFM_ENCODING = 0x00,
AMIGA_MFM_ENCODING,
ISOIBM_FM_ENCODING,
EMU_FM_ENCODING,
UNKNOWN_ENCODING = 0xff
};
enum floppymode_t
{
IBMPC_DD_FLOPPYMODE = 00,
IBMPC_HD_FLOPPYMODE,
ATARIST_DD_FLOPPYMODE,
ATARIST_HD_FLOPPYMODE,
AMIGA_DD_FLOPPYMODE,
AMIGA_HD_FLOPPYMODE,
CPC_DD_FLOPPYMODE,
GENERIC_SHUGART_DD_FLOPPYMODE,
IBMPC_ED_FLOPPYMODE,
MSX2_DD_FLOPPYMODE,
C64_DD_FLOPPYMODE,
EMU_SHUGART_FLOPPYMODE,
S950_DD_FLOPPYMODE,
S950_HD_FLOPPYMODE,
DISABLE_FLOPPYMODE = 0xfe
};
class hfe_format : public floppy_image_format_t
{
public:
hfe_format();
virtual int identify(io_generic *io, UINT32 form_factor) override;
virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image) override;
virtual bool save(io_generic *io, floppy_image *image) override;
virtual const char *name() const override;
virtual const char *description() const override;
virtual const char *extensions() const override;
virtual bool supports_save() const override;
void set_floppy_mode(floppymode_t mode) { m_selected_mode = mode; }
void set_encoding(encoding_t enc) { m_selected_encoding = enc; }
private:
void generate_track_from_hfe_bitstream(int track, int head, int samplelength, const UINT8 *trackbuf, int track_end, floppy_image *image);
void generate_hfe_bitstream_from_track(int track, int head, int& samplelength, encoding_t& encoding, UINT8 *trackbuf, int track_end, floppy_image *image);
// Header fields from the HFE format
int m_cylinders; // Number of track in the file
int m_heads; // Number of valid side
encoding_t m_track_encoding; // Track Encoding mode
int m_bit_rate; // Bitrate in Kbit/s (max: 500)
int m_floppy_rpm; // Rotation per minute
floppymode_t m_interface_mode; // Floppy interface mode.
bool m_write_allowed;
bool m_single_step;
bool m_track0s0_has_altencoding;
encoding_t m_track0s0_encoding; // alternate track_encoding for track 0 Side 0
bool m_track0s1_has_altencoding;
encoding_t m_track0s1_encoding; // alternate track_encoding for track 0 Side 1
int m_cyl_offset[256];
int m_cyl_length[256];
floppymode_t m_selected_mode;
encoding_t m_selected_encoding;
};
extern const floppy_format_type FLOPPY_HFE_FORMAT;
#endif /* HXCHFE_DSK_H */

View File

@ -42,7 +42,7 @@ static INPUT_PORTS_START( qs7 )
INPUT_PORTS_END INPUT_PORTS_END
static ADDRESS_MAP_START( qs7_prog_map, AS_PROGRAM, 16, qs_state ) static ADDRESS_MAP_START( qs7_prog_map, AS_PROGRAM, 16, qs_state )
ADDRESS_MAP_GLOBAL_MASK(0x3ffff) //ADDRESS_MAP_GLOBAL_MASK(0x3ffff)
AM_RANGE(0x00000, 0x3ffff) AM_ROM AM_RANGE(0x00000, 0x3ffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -562,7 +562,8 @@ public:
private: private:
void jamtable_disasm(address_space &space, UINT32 address, UINT32 size); void jamtable_disasm(address_space &space, UINT32 address, UINT32 size);
void jamtable_disasm_command(int ref, int params, const char **param); void jamtable_disasm_command(int ref, int params, const char **param);
void help_command(int ref, int params, const char **param); void threadlist_command(int ref, int params, const char **param);
void chihiro_help_command(int ref, int params, const char **param);
void debug_commands(int ref, int params, const char **param); void debug_commands(int ref, int params, const char **param);
}; };
@ -584,21 +585,23 @@ St. Instr. Comment
/* jamtable disassembler */ /* jamtable disassembler */
void chihiro_state::jamtable_disasm(address_space &space, UINT32 address, UINT32 size) // 0xff000080 == fff00080 void chihiro_state::jamtable_disasm(address_space &space, UINT32 address, UINT32 size) // 0xff000080 == fff00080
{ {
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
offs_t addr = (offs_t)address; offs_t addr = (offs_t)address;
if (!space.device().memory().translate(space.spacenum(), TRANSLATE_READ_DEBUG, addr)) if (!space.device().memory().translate(space.spacenum(), TRANSLATE_READ_DEBUG, addr))
{ {
machine().debugger().console().printf("Address is unmapped.\n"); con.printf("Address is unmapped.\n");
return; return;
} }
while (1) while (1)
{ {
offs_t base = addr; offs_t base = addr;
UINT32 opcode = space.read_byte(addr); UINT32 opcode = cpu.read_byte(space, address, true);
addr++; addr++;
UINT32 op1 = space.read_dword_unaligned(addr); UINT32 op1 = cpu.read_dword(space, address, true);
addr += 4; addr += 4;
UINT32 op2 = space.read_dword_unaligned(addr); UINT32 op2 = cpu.read_dword(space, address, true);
addr += 4; addr += 4;
char sop1[16]; char sop1[16];
@ -619,7 +622,7 @@ void chihiro_state::jamtable_disasm(address_space &space, UINT32 address, UINT32
sprintf(sop1, "%08X", op1); sprintf(sop1, "%08X", op1);
sprintf(pcrel, "%08X", base + 9 + op1); sprintf(pcrel, "%08X", base + 9 + op1);
} }
machine().debugger().console().printf("%08X ", base); con.printf("%08X ", base);
// dl=instr ebx=par1 eax=par2 // dl=instr ebx=par1 eax=par2
switch (opcode) switch (opcode)
{ {
@ -634,39 +637,39 @@ void chihiro_state::jamtable_disasm(address_space &space, UINT32 address, UINT32
// | | Reserved | Bus Number | Device Number | Function Number | Register Number |0|0| // | | Reserved | Bus Number | Device Number | Function Number | Register Number |0|0|
// +-+----------+------------+---------------+-----------------+-----------------+-+-+ // +-+----------+------------+---------------+-----------------+-----------------+-+-+
// 31 - Enable bit // 31 - Enable bit
machine().debugger().console().printf("POKEPCI PCICONF[%s]=%s\n", sop2, sop1); con.printf("POKEPCI PCICONF[%s]=%s\n", sop2, sop1);
break; break;
case 0x02: case 0x02:
machine().debugger().console().printf("OUTB PORT[%s]=%s\n", sop2, sop1); con.printf("OUTB PORT[%s]=%s\n", sop2, sop1);
break; break;
case 0x03: case 0x03:
machine().debugger().console().printf("POKE MEM[%s]=%s\n", sop2, sop1); con.printf("POKE MEM[%s]=%s\n", sop2, sop1);
break; break;
case 0x04: case 0x04:
machine().debugger().console().printf("BNE IF ACC != %s THEN PC=%s\n", sop2, pcrel); con.printf("BNE IF ACC != %s THEN PC=%s\n", sop2, pcrel);
break; break;
case 0x05: case 0x05:
// out cf8,op2 // out cf8,op2
// in acc,cfc // in acc,cfc
machine().debugger().console().printf("PEEKPCI ACC=PCICONF[%s]\n", sop2); con.printf("PEEKPCI ACC=PCICONF[%s]\n", sop2);
break; break;
case 0x06: case 0x06:
machine().debugger().console().printf("AND/OR ACC=(ACC & %s) | %s\n", sop2, sop1); con.printf("AND/OR ACC=(ACC & %s) | %s\n", sop2, sop1);
break; break;
case 0x07: case 0x07:
machine().debugger().console().printf("BRA PC=%s\n", pcrel); con.printf("BRA PC=%s\n", pcrel);
break; break;
case 0x08: case 0x08:
machine().debugger().console().printf("INB ACC=PORT[%s]\n", sop2); con.printf("INB ACC=PORT[%s]\n", sop2);
break; break;
case 0x09: case 0x09:
machine().debugger().console().printf("PEEK ACC=MEM[%s]\n", sop2); con.printf("PEEK ACC=MEM[%s]\n", sop2);
break; break;
case 0xee: case 0xee:
machine().debugger().console().printf("END\n"); con.printf("END\n");
break; break;
default: default:
machine().debugger().console().printf("NOP ????\n"); con.printf("NOP ????\n");
break; break;
} }
if (opcode == 0xee) if (opcode == 0xee)
@ -691,11 +694,44 @@ void chihiro_state::jamtable_disasm_command(int ref, int params, const char **pa
jamtable_disasm(space, (UINT32)addr, (UINT32)size); jamtable_disasm(space, (UINT32)addr, (UINT32)size);
} }
void chihiro_state::help_command(int ref, int params, const char **param) void chihiro_state::threadlist_command(int ref, int params, const char **param)
{ {
machine().debugger().console().printf("Available Chihiro commands:\n"); const UINT32 thlists = 0x8003aae0; // magic address
machine().debugger().console().printf(" chihiro jamdis,<start>,<size> -- Disassemble <size> bytes of JamTable instructions starting at <start>\n"); address_space &space = m_maincpu->space();
machine().debugger().console().printf(" chihiro help -- this list\n"); debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
con.printf("Pri. _KTHREAD Stack Function\n");
con.printf("-------------------------------\n");
for (int pri=0;pri < 16;pri++)
{
UINT32 curr = thlists + pri * 8;
UINT32 next = cpu.read_dword(space, curr, true);
while (next != curr)
{
UINT32 kthrd = next - 0x5c;
UINT32 topstack = cpu.read_dword(space, kthrd + 0x1c, true);
UINT32 tlsdata = cpu.read_dword(space, kthrd + 0x28, true);
UINT32 function;
if (tlsdata == 0)
function = cpu.read_dword(space, topstack - 0x210 - 8, true);
else
function = cpu.read_dword(space, tlsdata - 8, true);
con.printf(" %02d %08x %08x %08x\n", pri, kthrd, topstack, function);
next = cpu.read_dword(space, next, true);
}
}
}
void chihiro_state::chihiro_help_command(int ref, int params, const char **param)
{
debugger_console &con = machine().debugger().console();
con.printf("Available Chihiro commands:\n");
con.printf(" chihiro jamdis,<start>,<size> -- Disassemble <size> bytes of JamTable instructions starting at <start>\n");
con.printf(" chihiro threadlist -- list of currently active threads\n");
con.printf(" chihiro help -- this list\n");
} }
void chihiro_state::debug_commands(int ref, int params, const char **param) void chihiro_state::debug_commands(int ref, int params, const char **param)
@ -704,17 +740,19 @@ void chihiro_state::debug_commands(int ref, int params, const char **param)
return; return;
if (strcmp("jamdis", param[0]) == 0) if (strcmp("jamdis", param[0]) == 0)
jamtable_disasm_command(ref, params - 1, param + 1); jamtable_disasm_command(ref, params - 1, param + 1);
else if (strcmp("threadlist", param[0]) == 0)
threadlist_command(ref, params - 1, param + 1);
else else
help_command(ref, params - 1, param + 1); chihiro_help_command(ref, params - 1, param + 1);
} }
void chihiro_state::hack_eeprom() void chihiro_state::hack_eeprom()
{ {
// 8003b744,3b744=0x90 0x90 // 8003b744,3b744=0x90 0x90
m_maincpu->space(0).write_byte(0x3b744, 0x90); m_maincpu->space(AS_PROGRAM).write_byte(0x3b744, 0x90);
m_maincpu->space(0).write_byte(0x3b745, 0x90); m_maincpu->space(AS_PROGRAM).write_byte(0x3b745, 0x90);
m_maincpu->space(0).write_byte(0x3b766, 0xc9); m_maincpu->space(AS_PROGRAM).write_byte(0x3b766, 0xc9);
m_maincpu->space(0).write_byte(0x3b767, 0xc3); m_maincpu->space(AS_PROGRAM).write_byte(0x3b767, 0xc3);
} }
#define HACK_ITEMS 5 #define HACK_ITEMS 5

View File

@ -1342,7 +1342,6 @@ static MACHINE_CONFIG_DERIVED( dead_cps2, cps2 )
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(dead_cps2_map) MCFG_CPU_PROGRAM_MAP(dead_cps2_map)
MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( gigaman2, cps2 ) static MACHINE_CONFIG_DERIVED( gigaman2, cps2 )
@ -2152,7 +2151,7 @@ ROM_START( batcirj )
ROM_LOAD16_WORD_SWAP( "btc.12m", 0x200000, 0x200000, CRC(418a2e33) SHA1(0642ddff2ab9255f154419da24ba644ed63f34ab) ) ROM_LOAD16_WORD_SWAP( "btc.12m", 0x200000, 0x200000, CRC(418a2e33) SHA1(0642ddff2ab9255f154419da24ba644ed63f34ab) )
ROM_REGION( 0x20, "key", 0 ) ROM_REGION( 0x20, "key", 0 )
ROM_LOAD( "batcirj.key", 0x000000, 0x000014, CRC(2c9d8c55) SHA1(14f0b9b4ddbbb9bc7d2e31f0782a008a6479186c) ) ROM_LOAD( "batcirj.key", 0x000000, 0x000014, CRC(9f9fb965) SHA1(9ea7e255f48ef5eaa89598355292b858f37f342f) )
ROM_END ROM_END
ROM_START( batcira ) ROM_START( batcira )
@ -6062,7 +6061,7 @@ ROM_START( ringdesth )
ROM_LOAD16_WORD_SWAP( "smb.12m", 0x200000, 0x200000, CRC(955b0782) SHA1(ee09500e7b44e923126533613bfe26cdabc7ab5f) ) ROM_LOAD16_WORD_SWAP( "smb.12m", 0x200000, 0x200000, CRC(955b0782) SHA1(ee09500e7b44e923126533613bfe26cdabc7ab5f) )
ROM_REGION( 0x20, "key", 0 ) ROM_REGION( 0x20, "key", 0 )
ROM_LOAD( "ringdest.key", 0x000000, 0x000014, CRC(17f9269c) SHA1(596d94ba937a407da94e85d9c2026a7c7d592173) ) ROM_LOAD( "ringdesth.key", 0x000000, 0x000014, CRC(ffb8d049) SHA1(c6d111412c3960b24a1be5c49fe4ec4d17324e06) )
ROM_END ROM_END
ROM_START( mmancp2u ) ROM_START( mmancp2u )
@ -7576,7 +7575,7 @@ ROM_START( spf2t )
ROM_LOAD16_WORD_SWAP( "pzf.12m", 0x200000, 0x200000, CRC(399d2c7b) SHA1(e849dea97b8d16540415c0d9bbc4f9f4eb755ec4) ) ROM_LOAD16_WORD_SWAP( "pzf.12m", 0x200000, 0x200000, CRC(399d2c7b) SHA1(e849dea97b8d16540415c0d9bbc4f9f4eb755ec4) )
ROM_REGION( 0x20, "key", 0 ) ROM_REGION( 0x20, "key", 0 )
ROM_LOAD( "spf2t.key", 0x000000, 0x000014, CRC(5d7b15e8) SHA1(c14c6b148761856bf83b31b52df83be461ac8d62) ) ROM_LOAD( "spf2t.key", 0x000000, 0x000014, CRC(4c4dc7e3) SHA1(db4f257f6006b2f3cfa7cc70917228d639324513) )
ROM_END ROM_END
ROM_START( spf2tu ) ROM_START( spf2tu )
@ -7601,7 +7600,7 @@ ROM_START( spf2tu )
ROM_LOAD16_WORD_SWAP( "pzf.12m", 0x200000, 0x200000, CRC(399d2c7b) SHA1(e849dea97b8d16540415c0d9bbc4f9f4eb755ec4) ) ROM_LOAD16_WORD_SWAP( "pzf.12m", 0x200000, 0x200000, CRC(399d2c7b) SHA1(e849dea97b8d16540415c0d9bbc4f9f4eb755ec4) )
ROM_REGION( 0x20, "key", 0 ) ROM_REGION( 0x20, "key", 0 )
ROM_LOAD( "spf2t.key", 0x000000, 0x000014, CRC(5d7b15e8) SHA1(c14c6b148761856bf83b31b52df83be461ac8d62) ) ROM_LOAD( "spf2tu.key", 0x000000, 0x000014, CRC(5d7b15e8) SHA1(c14c6b148761856bf83b31b52df83be461ac8d62) )
ROM_END ROM_END
@ -8366,7 +8365,7 @@ ROM_START( ssf2th )
ROM_LOAD16_WORD_SWAP( "sfx.12m", 0x200000, 0x200000, CRC(a05e3aab) SHA1(d4eb9cae66c74e956569fea8b815156fbd420f83) ) ROM_LOAD16_WORD_SWAP( "sfx.12m", 0x200000, 0x200000, CRC(a05e3aab) SHA1(d4eb9cae66c74e956569fea8b815156fbd420f83) )
ROM_REGION( 0x20, "key", 0 ) ROM_REGION( 0x20, "key", 0 )
ROM_LOAD( "ssf2tbh.key", 0x000000, 0x000014, CRC(fddecf4f) SHA1(03fcad05f17edbcf037cad0e5c9acd683f432781) ) ROM_LOAD( "ssf2th.key", 0x000000, 0x000014, CRC(f6ce6a35) SHA1(fc0704cb7f2da70f8d8b83d323c8eab851dfae89) )
ROM_END ROM_END
ROM_START( ssf2xj ) ROM_START( ssf2xj )

View File

@ -989,6 +989,7 @@ static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS_END DEVICE_INPUT_DEFAULTS_END
#endif #endif
// TODO: Fix shift led for mp68a correctly, workaround doesn't work anymore! Shift works though...
TIMER_DEVICE_CALLBACK_MEMBER(didact_state::scan_artwork) TIMER_DEVICE_CALLBACK_MEMBER(didact_state::scan_artwork)
{ {
// LOG(("--->%s()\n", FUNCNAME)); // LOG(("--->%s()\n", FUNCNAME));

View File

@ -22,14 +22,14 @@
#include "emu.h" #include "emu.h"
#include "cpu/mcs48/mcs48.h" #include "cpu/mcs48/mcs48.h"
#define I8048_TAG "i8048" #define I8049_TAG "i8049"
class digijet_state : public driver_device class digijet_state : public driver_device
{ {
public: public:
digijet_state(const machine_config &mconfig, device_type type, const char *tag) digijet_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) : driver_device(mconfig, type, tag)
, m_maincpu(*this, I8048_TAG) , m_maincpu(*this, I8049_TAG)
{ {
} }
@ -39,10 +39,6 @@ public:
virtual void machine_reset() override { } virtual void machine_reset() override { }
}; };
static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, digijet_state )
AM_RANGE(0x0000, 0x07ff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( io_map, AS_IO, 8, digijet_state ) static ADDRESS_MAP_START( io_map, AS_IO, 8, digijet_state )
ADDRESS_MAP_END ADDRESS_MAP_END
@ -51,13 +47,12 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( digijet, digijet_state ) static MACHINE_CONFIG_START( digijet, digijet_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD(I8048_TAG, I8048, XTAL_11MHz) MCFG_CPU_ADD(I8049_TAG, I8049, XTAL_11MHz)
MCFG_CPU_PROGRAM_MAP(program_map)
MCFG_CPU_IO_MAP(io_map) MCFG_CPU_IO_MAP(io_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
ROM_START( digijet ) ROM_START( digijet )
ROM_REGION( 0x800, I8048_TAG, 0 ) ROM_REGION( 0x800, I8049_TAG, 0 )
ROM_LOAD( "vanagon_85_usa_ca.bin", 0x000, 0x800, CRC(2ed7c4c5) SHA1(ae48d8892b44fe76b48bcefd293c15cd47af3fba) ) // Volkswagen Vanagon, 1985, USA, California ROM_LOAD( "vanagon_85_usa_ca.bin", 0x000, 0x800, CRC(2ed7c4c5) SHA1(ae48d8892b44fe76b48bcefd293c15cd47af3fba) ) // Volkswagen Vanagon, 1985, USA, California
ROM_END ROM_END

View File

@ -22,7 +22,7 @@
* Gx831 Pop'n Music 2 (1999.04) * Gx831 Pop'n Music 2 (1999.04)
* Gx980 Pop'n Music 3 (1999.09) * Gx980 Pop'n Music 3 (1999.09)
* *
* ????? Pop'n Stage (1999.11) * GQ970 Pop'n Stage (1999.11)
* Gx970 Pop'n Stage EX (2000.03) * Gx970 Pop'n Stage EX (2000.03)
* *
* Chips: * Chips:
@ -1195,7 +1195,6 @@ INPUT_PORTS_END
//--------- Pop'n Stage //--------- Pop'n Stage
#ifdef UNUSED_DEFINITION
static INPUT_PORTS_START( popnstage ) static INPUT_PORTS_START( popnstage )
PORT_START("BTN1") PORT_START("BTN1")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
@ -1288,7 +1287,6 @@ static INPUT_PORTS_START( popnstage )
PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW3:5" ) PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW3:5" )
PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW3:6" ) PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW3:6" )
INPUT_PORTS_END INPUT_PORTS_END
#endif
#ifdef UNUSED_DEFINITION #ifdef UNUSED_DEFINITION
static INPUT_PORTS_START( popnstex ) static INPUT_PORTS_START( popnstex )
@ -1884,6 +1882,28 @@ ROM_START( popn3 )
ROM_REGION( 0x1000000, "shared", ROMREGION_ERASE00 ) /* K054539 RAM */ ROM_REGION( 0x1000000, "shared", ROMREGION_ERASE00 ) /* K054539 RAM */
ROM_END ROM_END
ROM_START( popnstage )
ROM_REGION( 0x100000, "maincpu", 0 ) /* MC68EC020FG25 MPU */
ROM_LOAD16_BYTE( "970jba01.6a", 0x000000, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "970jba02.8a", 0x000001, 0x80000, NO_DUMP )
ROM_REGION( 0x200000, "gfx1", 0) /* SPRITE */
ROM_LOAD16_BYTE( "970jba03.19a", 0x000000, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "970jba04.20a", 0x000001, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "970jba05.22a", 0x100000, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "970jba06.24a", 0x100001, 0x80000, NO_DUMP )
ROM_REGION( 0x200000, "gfx2", 0 ) /* TILEMAP */
ROM_LOAD16_BYTE( "970jba07.22d", 0x000000, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "970jba08.23d", 0x000001, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "970jba09.25d", 0x100000, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "970jba10.27d", 0x100001, 0x80000, NO_DUMP )
DISK_REGION( "ata:0:hdd:image" ) /* IDE HARD DRIVE */
DISK_IMAGE( "970jba11", 0, SHA1(72e92b73b22a8f35e9faca93211e5acf781e66bb) ) /* GQ970 pop'n stage 1.5 ver1.00 1999/10/15 (C) KONAMI */
ROM_REGION( 0x1000000, "shared", ROMREGION_ERASE00 ) /* K054539 RAM */
ROM_END
#if 0 #if 0
// for reference, these sets have not been verified // for reference, these sets have not been verified
@ -2194,6 +2214,7 @@ GAME( 2002, bmfinal, 0, djmainj, bm6thmix, djmain_state, bmfinal, RO
GAME( 1998, popn1, 0, djmaina, popn1, djmain_state, beatmania, ROT0, "Konami", "Pop'n Music 1 (ver AA-A)", 0 ) GAME( 1998, popn1, 0, djmaina, popn1, djmain_state, beatmania, ROT0, "Konami", "Pop'n Music 1 (ver AA-A)", 0 )
GAME( 1998, popn2, 0, djmainj, popn2, djmain_state, beatmania, ROT0, "Konami", "Pop'n Music 2 (ver JA-A)", 0 ) GAME( 1998, popn2, 0, djmainj, popn2, djmain_state, beatmania, ROT0, "Konami", "Pop'n Music 2 (ver JA-A)", 0 )
GAME( 1998, popn3, 0, djmainj, popn2, djmain_state, beatmania, ROT0, "Konami", "Pop'n Music 3 (ver JA-A)", 0 ) GAME( 1998, popn3, 0, djmainj, popn2, djmain_state, beatmania, ROT0, "Konami", "Pop'n Music 3 (ver JA-A)", 0 )
GAME( 1999, popnstage,0, djmainj, popnstage,djmain_state, beatmania, ROT0, "Konami", "Pop'n Stage (ver JB-A)", MACHINE_NOT_WORKING )
// for reference, these sets have not been verified // for reference, these sets have not been verified
//GAME( 1998, bm3rdmxb, bm3rdmix, djmainj, bm3rdmix, djmain_state, beatmania, ROT0, "Konami", "beatmania 3rd MIX (ver JA-B)", 0 ) //GAME( 1998, bm3rdmxb, bm3rdmix, djmainj, bm3rdmix, djmain_state, beatmania, ROT0, "Konami", "beatmania 3rd MIX (ver JA-B)", 0 )

View File

@ -80,17 +80,153 @@ class flower_state : public driver_device
{ {
public: public:
flower_state(const machine_config &mconfig, device_type type, const char *tag) flower_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) : driver_device(mconfig, type, tag),
m_palette(*this, "palette"),
m_gfxdecode(*this, "gfxdecode"),
m_txvram(*this, "txvram"),
m_bgvram(*this, "bgvram"),
m_fgvram(*this, "fgvram")
{ } { }
required_device<palette_device> m_palette;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<UINT8> m_txvram;
required_shared_ptr<UINT8> m_bgvram;
required_shared_ptr<UINT8> m_fgvram;
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void legacy_tx_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
void legacy_layers_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
}; };
void flower_state::legacy_tx_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
gfx_element *gfx_0 = m_gfxdecode->gfx(0);
int count;
for (count=0;count<32*32;count++)
{
int x = count % 32;
int y = count / 32;
UINT8 tile = m_txvram[count];
UINT8 attr = m_txvram[count+0x400];
if(attr & 0x03) // debug
attr = machine().rand() & 0xfc;
gfx_0->transpen(bitmap,cliprect,tile,attr >> 2,0,0,x*8,y*8,3);
}
for (count=0;count<4*32;count++)
{
int x = count / 32;
int y = count % 32;
UINT8 tile = m_txvram[count];
UINT8 attr = m_txvram[count+0x400];
if(attr & 0x03) // debug
attr = machine().rand() & 0xfc;
gfx_0->transpen(bitmap,cliprect,tile,attr >> 2,0,0,x*8+256,y*8,3);
}
}
void flower_state::legacy_layers_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
gfx_element *gfx_1 = m_gfxdecode->gfx(1);
int count;
for (count=0;count<32*32;count++)
{
int x = count % 16;
int y = count / 16;
UINT8 tile, attr;
tile = m_bgvram[count];
attr = m_bgvram[count+0x100];
if(attr & 0xf) // debug
attr = machine().rand() & 0xf0;
gfx_1->opaque(bitmap,cliprect, tile, attr >> 4, 0, 0, x*16, y*16);
tile = m_fgvram[count];
attr = m_fgvram[count+0x100];
if(attr & 0xf)
attr = machine().rand() & 0xf0;
gfx_1->transpen(bitmap,cliprect, tile, attr >> 4, 0, 0, x*16, y*16, 15);
}
}
UINT32 flower_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
{
legacy_layers_draw(bitmap,cliprect);
legacy_tx_draw(bitmap,cliprect);
return 0;
}
static ADDRESS_MAP_START( shared_map, AS_PROGRAM, 8, flower_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_SHARE("workram")
AM_RANGE(0xa000, 0xa000) AM_WRITENOP
AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE("txvram")
AM_RANGE(0xf000, 0xf1ff) AM_RAM AM_SHARE("bgvram")
AM_RANGE(0xf800, 0xf9ff) AM_RAM AM_SHARE("fgvram")
ADDRESS_MAP_END
static INPUT_PORTS_START( flower ) static INPUT_PORTS_START( flower )
INPUT_PORTS_END INPUT_PORTS_END
static const gfx_layout charlayout =
{
8,8,
RGN_FRAC(1,1),
2,
{ 0, 4 },
{ STEP4(0,1), STEP4(8,1) },
{ STEP8(0,16) },
8*8*2
};
static const gfx_layout tilelayout =
{
16,16,
RGN_FRAC(1,2),
4,
{ 0, 4, RGN_FRAC(1,2), RGN_FRAC(1,2)+4 },
{ STEP4(0,1), STEP4(8,1), STEP4(8*8*2,1), STEP4(8*8*2+8,1) },
{ STEP8(0,16), STEP8(8*8*4,16) },
16*16*2
};
static GFXDECODE_START( flower )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 64 )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 16 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0, 16 )
GFXDECODE_END
static MACHINE_CONFIG_START( flower, flower_state ) static MACHINE_CONFIG_START( flower, flower_state )
MCFG_CPU_ADD("maincpu",Z80,4000000)
MCFG_CPU_PROGRAM_MAP(shared_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", flower_state, irq0_line_hold)
MCFG_CPU_ADD("subcpu",Z80,4000000)
MCFG_CPU_PROGRAM_MAP(shared_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", flower_state, irq0_line_hold)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_UPDATE_DRIVER(flower_state, screen_update)
MCFG_SCREEN_RAW_PARAMS(XTAL_3_579545MHz*2, 442, 0, 288, 263, 16, 240) /* generic NTSC video timing at 256x224 */
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", flower)
MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", 256)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -107,18 +243,18 @@ ROM_START( flower ) /* Komax version */
ROM_REGION( 0x2000, "gfx1", ROMREGION_INVERT ) /* tx layer */ ROM_REGION( 0x2000, "gfx1", ROMREGION_INVERT ) /* tx layer */
ROM_LOAD( "10.13e", 0x0000, 0x2000, CRC(62f9b28c) SHA1(d57d06b99e72a4f68f197a5b6c042c926cc70ca0) ) // FIRST AND SECOND HALF IDENTICAL ROM_LOAD( "10.13e", 0x0000, 0x2000, CRC(62f9b28c) SHA1(d57d06b99e72a4f68f197a5b6c042c926cc70ca0) ) // FIRST AND SECOND HALF IDENTICAL
ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* sprites */ ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* bg layers */
ROM_LOAD( "14.19e", 0x0000, 0x2000, CRC(11b491c5) SHA1(be1c4a0fbe8fd4e124c21e0f700efa0428376691) )
ROM_LOAD( "13.17e", 0x2000, 0x2000, CRC(ea743986) SHA1(bbef4fd0f7d21cc89a52061fa50d7c2ea37287bd) )
ROM_LOAD( "12.16e", 0x4000, 0x2000, CRC(e3779f7f) SHA1(8e12d06b3cdc2fcb7b77cc35f8eca45544cc4873) )
ROM_LOAD( "11.14e", 0x6000, 0x2000, CRC(8801b34f) SHA1(256059fcd16b21e076db1c18fd9669128df1d658) )
ROM_REGION( 0x8000, "gfx3", ROMREGION_INVERT ) /* bg layers */
ROM_LOAD( "8.10e", 0x0000, 0x2000, CRC(f85eb20f) SHA1(699edc970c359143dee6de2a97cc2a552454785b) ) ROM_LOAD( "8.10e", 0x0000, 0x2000, CRC(f85eb20f) SHA1(699edc970c359143dee6de2a97cc2a552454785b) )
ROM_LOAD( "6.7e", 0x2000, 0x2000, CRC(3e97843f) SHA1(4e4e5625dbf78eca97536b1428b2e49ad58c618f) ) ROM_LOAD( "6.7e", 0x2000, 0x2000, CRC(3e97843f) SHA1(4e4e5625dbf78eca97536b1428b2e49ad58c618f) )
ROM_LOAD( "9.12e", 0x4000, 0x2000, CRC(f1d9915e) SHA1(158e1cc8c402f9ae3906363d99f2b25c94c64212) ) ROM_LOAD( "9.12e", 0x4000, 0x2000, CRC(f1d9915e) SHA1(158e1cc8c402f9ae3906363d99f2b25c94c64212) )
ROM_LOAD( "15.9e", 0x6000, 0x2000, CRC(1cad9f72) SHA1(c38dbea266246ed4d47d12bdd8f9fae22a5f8bb8) ) ROM_LOAD( "15.9e", 0x6000, 0x2000, CRC(1cad9f72) SHA1(c38dbea266246ed4d47d12bdd8f9fae22a5f8bb8) )
ROM_REGION( 0x8000, "gfx3", ROMREGION_INVERT ) /* sprites */
ROM_LOAD( "14.19e", 0x0000, 0x2000, CRC(11b491c5) SHA1(be1c4a0fbe8fd4e124c21e0f700efa0428376691) )
ROM_LOAD( "13.17e", 0x2000, 0x2000, CRC(ea743986) SHA1(bbef4fd0f7d21cc89a52061fa50d7c2ea37287bd) )
ROM_LOAD( "12.16e", 0x4000, 0x2000, CRC(e3779f7f) SHA1(8e12d06b3cdc2fcb7b77cc35f8eca45544cc4873) )
ROM_LOAD( "11.14e", 0x6000, 0x2000, CRC(8801b34f) SHA1(256059fcd16b21e076db1c18fd9669128df1d658) )
ROM_REGION( 0x8000, "sound1", 0 ) ROM_REGION( 0x8000, "sound1", 0 )
ROM_LOAD( "4.12a", 0x0000, 0x8000, CRC(851ed9fd) SHA1(5dc048b612e45da529502bf33d968737a7b0a646) ) /* 8-bit samples */ ROM_LOAD( "4.12a", 0x0000, 0x8000, CRC(851ed9fd) SHA1(5dc048b612e45da529502bf33d968737a7b0a646) ) /* 8-bit samples */
@ -126,9 +262,9 @@ ROM_START( flower ) /* Komax version */
ROM_LOAD( "5.16a", 0x0000, 0x4000, CRC(42fa2853) SHA1(cc1e8b8231d6f27f48b05d59390e93ea1c1c0e4c) ) /* volume tables? */ ROM_LOAD( "5.16a", 0x0000, 0x4000, CRC(42fa2853) SHA1(cc1e8b8231d6f27f48b05d59390e93ea1c1c0e4c) ) /* volume tables? */
ROM_REGION( 0x300, "proms", 0 ) /* RGB proms */ ROM_REGION( 0x300, "proms", 0 ) /* RGB proms */
ROM_LOAD( "82s129.k1", 0x0200, 0x0100, CRC(d311ed0d) SHA1(1d530c874aecf93133d610ab3ce668548712913a) ) // r
ROM_LOAD( "82s129.k2", 0x0100, 0x0100, CRC(ababb072) SHA1(a9d46d12534c8662c6b54df94e96907f3a156968) ) // g
ROM_LOAD( "82s129.k3", 0x0000, 0x0100, CRC(5aab7b41) SHA1(8d44639c7c9f1ba34fe9c4e74c8a38b6453f7ac0) ) // b ROM_LOAD( "82s129.k3", 0x0000, 0x0100, CRC(5aab7b41) SHA1(8d44639c7c9f1ba34fe9c4e74c8a38b6453f7ac0) ) // b
ROM_LOAD( "82s129.k2", 0x0100, 0x0100, CRC(ababb072) SHA1(a9d46d12534c8662c6b54df94e96907f3a156968) ) // g
ROM_LOAD( "82s129.k1", 0x0200, 0x0100, CRC(d311ed0d) SHA1(1d530c874aecf93133d610ab3ce668548712913a) ) // r
ROM_REGION( 0x0520, "user1", 0 ) /* Other proms, (zoom table?) */ ROM_REGION( 0x0520, "user1", 0 ) /* Other proms, (zoom table?) */
ROM_LOAD( "82s147.d7", 0x0000, 0x0200, CRC(f0dbb2a7) SHA1(03cd8fd41d6406894c6931e883a9ac6a4a4effc9) ) ROM_LOAD( "82s147.d7", 0x0000, 0x0200, CRC(f0dbb2a7) SHA1(03cd8fd41d6406894c6931e883a9ac6a4a4effc9) )
@ -150,18 +286,19 @@ ROM_START( flowerj ) /* Sega/Alpha version. Sega game number 834-5998 */
ROM_REGION( 0x2000, "gfx1", ROMREGION_INVERT ) /* tx layer */ ROM_REGION( 0x2000, "gfx1", ROMREGION_INVERT ) /* tx layer */
ROM_LOAD( "10.13e", 0x0000, 0x2000, CRC(62f9b28c) SHA1(d57d06b99e72a4f68f197a5b6c042c926cc70ca0) ) // FIRST AND SECOND HALF IDENTICAL ROM_LOAD( "10.13e", 0x0000, 0x2000, CRC(62f9b28c) SHA1(d57d06b99e72a4f68f197a5b6c042c926cc70ca0) ) // FIRST AND SECOND HALF IDENTICAL
ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* sprites */ ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* bg layers */
ROM_LOAD( "14.19e", 0x0000, 0x2000, CRC(11b491c5) SHA1(be1c4a0fbe8fd4e124c21e0f700efa0428376691) )
ROM_LOAD( "13.17e", 0x2000, 0x2000, CRC(ea743986) SHA1(bbef4fd0f7d21cc89a52061fa50d7c2ea37287bd) )
ROM_LOAD( "12.16e", 0x4000, 0x2000, CRC(e3779f7f) SHA1(8e12d06b3cdc2fcb7b77cc35f8eca45544cc4873) )
ROM_LOAD( "11.14e", 0x6000, 0x2000, CRC(8801b34f) SHA1(256059fcd16b21e076db1c18fd9669128df1d658) )
ROM_REGION( 0x8000, "gfx3", ROMREGION_INVERT ) /* bg layers */
ROM_LOAD( "8.10e", 0x0000, 0x2000, CRC(f85eb20f) SHA1(699edc970c359143dee6de2a97cc2a552454785b) ) ROM_LOAD( "8.10e", 0x0000, 0x2000, CRC(f85eb20f) SHA1(699edc970c359143dee6de2a97cc2a552454785b) )
ROM_LOAD( "6.7e", 0x2000, 0x2000, CRC(3e97843f) SHA1(4e4e5625dbf78eca97536b1428b2e49ad58c618f) ) ROM_LOAD( "6.7e", 0x2000, 0x2000, CRC(3e97843f) SHA1(4e4e5625dbf78eca97536b1428b2e49ad58c618f) )
ROM_LOAD( "9.12e", 0x4000, 0x2000, CRC(f1d9915e) SHA1(158e1cc8c402f9ae3906363d99f2b25c94c64212) ) ROM_LOAD( "9.12e", 0x4000, 0x2000, CRC(f1d9915e) SHA1(158e1cc8c402f9ae3906363d99f2b25c94c64212) )
ROM_LOAD( "7.9e", 0x6000, 0x2000, CRC(e350f36c) SHA1(f97204dc95b4000c268afc053a2333c1629e07d8) ) ROM_LOAD( "7.9e", 0x6000, 0x2000, CRC(e350f36c) SHA1(f97204dc95b4000c268afc053a2333c1629e07d8) )
ROM_REGION( 0x8000, "gfx3", ROMREGION_INVERT ) /* sprites */
ROM_LOAD( "14.19e", 0x0000, 0x2000, CRC(11b491c5) SHA1(be1c4a0fbe8fd4e124c21e0f700efa0428376691) )
ROM_LOAD( "13.17e", 0x2000, 0x2000, CRC(ea743986) SHA1(bbef4fd0f7d21cc89a52061fa50d7c2ea37287bd) )
ROM_LOAD( "12.16e", 0x4000, 0x2000, CRC(e3779f7f) SHA1(8e12d06b3cdc2fcb7b77cc35f8eca45544cc4873) )
ROM_LOAD( "11.14e", 0x6000, 0x2000, CRC(8801b34f) SHA1(256059fcd16b21e076db1c18fd9669128df1d658) )
ROM_REGION( 0x8000, "sound1", 0 ) ROM_REGION( 0x8000, "sound1", 0 )
ROM_LOAD( "4.12a", 0x0000, 0x8000, CRC(851ed9fd) SHA1(5dc048b612e45da529502bf33d968737a7b0a646) ) /* 8-bit samples */ ROM_LOAD( "4.12a", 0x0000, 0x8000, CRC(851ed9fd) SHA1(5dc048b612e45da529502bf33d968737a7b0a646) ) /* 8-bit samples */
@ -169,9 +306,9 @@ ROM_START( flowerj ) /* Sega/Alpha version. Sega game number 834-5998 */
ROM_LOAD( "5.16a", 0x0000, 0x4000, CRC(42fa2853) SHA1(cc1e8b8231d6f27f48b05d59390e93ea1c1c0e4c) ) /* volume tables? */ ROM_LOAD( "5.16a", 0x0000, 0x4000, CRC(42fa2853) SHA1(cc1e8b8231d6f27f48b05d59390e93ea1c1c0e4c) ) /* volume tables? */
ROM_REGION( 0x300, "proms", 0 ) /* RGB proms */ ROM_REGION( 0x300, "proms", 0 ) /* RGB proms */
ROM_LOAD( "82s129.k1", 0x0200, 0x0100, CRC(d311ed0d) SHA1(1d530c874aecf93133d610ab3ce668548712913a) ) // r
ROM_LOAD( "82s129.k2", 0x0100, 0x0100, CRC(ababb072) SHA1(a9d46d12534c8662c6b54df94e96907f3a156968) ) // g
ROM_LOAD( "82s129.k3", 0x0000, 0x0100, CRC(5aab7b41) SHA1(8d44639c7c9f1ba34fe9c4e74c8a38b6453f7ac0) ) // b ROM_LOAD( "82s129.k3", 0x0000, 0x0100, CRC(5aab7b41) SHA1(8d44639c7c9f1ba34fe9c4e74c8a38b6453f7ac0) ) // b
ROM_LOAD( "82s129.k2", 0x0100, 0x0100, CRC(ababb072) SHA1(a9d46d12534c8662c6b54df94e96907f3a156968) ) // g
ROM_LOAD( "82s129.k1", 0x0200, 0x0100, CRC(d311ed0d) SHA1(1d530c874aecf93133d610ab3ce668548712913a) ) // r
ROM_REGION( 0x0520, "user1", 0 ) /* Other proms, (zoom table?) */ ROM_REGION( 0x0520, "user1", 0 ) /* Other proms, (zoom table?) */
ROM_LOAD( "82s147.d7", 0x0000, 0x0200, CRC(f0dbb2a7) SHA1(03cd8fd41d6406894c6931e883a9ac6a4a4effc9) ) ROM_LOAD( "82s147.d7", 0x0000, 0x0200, CRC(f0dbb2a7) SHA1(03cd8fd41d6406894c6931e883a9ac6a4a4effc9) )

View File

@ -22,7 +22,7 @@
@MP0905B TMS0970 1977, Parker Brothers Codename Sector @MP0905B TMS0970 1977, Parker Brothers Codename Sector
*MP0057 TMS1000 1978, APH Student Speech+ (same ROM contents as TSI Speech+?) *MP0057 TMS1000 1978, APH Student Speech+ (same ROM contents as TSI Speech+?)
@MP0158 TMS1000 1979, Entex Soccer @MP0158 TMS1000 1979, Entex Soccer
*MP0163 TMS1000 1979, LJN Electronic Concentration @MP0163 TMS1000 1979, A-One LSI Match Number/LJN Electronic Concentration
*MP0168 TMS1000 1979, Conic Basketball/Tandy Sports Arena *MP0168 TMS1000 1979, Conic Basketball/Tandy Sports Arena
@MP0170 TMS1000 1979, Conic Football @MP0170 TMS1000 1979, Conic Football
*MP0230 TMS1000? 1980, Entex Blast It *MP0230 TMS1000? 1980, Entex Blast It
@ -33,7 +33,7 @@
@MP1133 TMS1470 1979, Kosmos Astro @MP1133 TMS1470 1979, Kosmos Astro
@MP1180 TMS1100 1980, Tomy Power House Pinball @MP1180 TMS1100 1980, Tomy Power House Pinball
@MP1181 TMS1100 1979, Conic Football 2 @MP1181 TMS1100 1979, Conic Football 2
*MP1193 TMS1100 1980, Tandy Championship Football (model 60-2150) @MP1193 TMS1100 1980, Tandy Championship Football (model 60-2150)
@MP1204 TMS1100 1980, Entex Baseball 3 (6007) @MP1204 TMS1100 1980, Entex Baseball 3 (6007)
*MP1209 TMS1100 1980, U.S. Games Space Cruiser/Strategy Football *MP1209 TMS1100 1980, U.S. Games Space Cruiser/Strategy Football
@MP1211 TMS1100 1980, Entex Space Invader @MP1211 TMS1100 1980, Entex Space Invader
@ -82,7 +82,7 @@
@M34012 TMS1100 1980, Mattel Dungeons & Dragons - Computer Labyrinth Game @M34012 TMS1100 1980, Mattel Dungeons & Dragons - Computer Labyrinth Game
*M34014 TMS1100 1981, Coleco Bowlatronic *M34014 TMS1100 1981, Coleco Bowlatronic
M34017 TMS1100 1981, MicroVision cartridge: Cosmic Hunter M34017 TMS1100 1981, MicroVision cartridge: Cosmic Hunter
*M34018 TMS1100 1981, Coleco Head to Head Boxing @M34018 TMS1100 1981, Coleco Head to Head Boxing
@M34038 TMS1100 1982, Parker Brothers Lost Treasure @M34038 TMS1100 1982, Parker Brothers Lost Treasure
M34047 TMS1100 1982, MicroVision cartridge: Super Blockbuster M34047 TMS1100 1982, MicroVision cartridge: Super Blockbuster
*M34078A TMS1100 1983, Milton Bradley Arcade Mania *M34078A TMS1100 1983, Milton Bradley Arcade Mania
@ -155,8 +155,10 @@
#include "gjackpot.lh" #include "gjackpot.lh"
#include "gpoker.lh" #include "gpoker.lh"
#include "h2hbaseb.lh" #include "h2hbaseb.lh"
#include "h2hboxing.lh"
#include "h2hfootb.lh" #include "h2hfootb.lh"
#include "lostreas.lh" // clickable #include "lostreas.lh" // clickable
#include "matchnum.lh" // clickable
#include "mathmagi.lh" #include "mathmagi.lh"
#include "mdndclab.lh" // clickable #include "mdndclab.lh" // clickable
#include "merlin.lh" // clickable #include "merlin.lh" // clickable
@ -168,10 +170,11 @@
#include "ssimon.lh" // clickable #include "ssimon.lh" // clickable
#include "ssports4.lh" #include "ssports4.lh"
#include "starwbc.lh" // clickable #include "starwbc.lh" // clickable
#include "stopthie.lh" // clickable #include "stopthief.lh"
#include "tandy12.lh" // clickable #include "tandy12.lh" // clickable
#include "tbreakup.lh" #include "tbreakup.lh"
#include "tc4.lh" #include "tc4.lh"
#include "tcfball.lh"
#include "zodiac.lh" #include "zodiac.lh"
#include "hh_tms1k_test.lh" // common test-layout - use external artwork #include "hh_tms1k_test.lh" // common test-layout - use external artwork
@ -385,6 +388,137 @@ INPUT_CHANGED_MEMBER(hh_tms1k_state::power_button)
***************************************************************************/ ***************************************************************************/
/***************************************************************************
A-One LSI Match Number
* PCB label PT-204 "Pair Card"
* TMS1000NLL MP0163 (die label 1000B, MP0163)
* 2x2-digit 7seg LED displays + 3 LEDs, 1-bit sound
A-One was a subsidiary of Bandai? The PCB serial PT-xxx is same, and the font
used on the boxes for "A-One LSI" is same as "Bandai Electronics" from early-80s.
known releases:
- Japan: Match Number (white case, Queen playing card bezel)
- USA: Electronic Concentration, distributed by LJN (black case, rainbow pattern bezel)
- UK: Electronic Concentration, distributed by Peter Pan Playthings (same as USA version)
***************************************************************************/
class matchnum_state : public hh_tms1k_state
{
public:
matchnum_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_tms1k_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE16_MEMBER(write_r);
DECLARE_WRITE16_MEMBER(write_o);
DECLARE_READ8_MEMBER(read_k);
};
// handlers
void matchnum_state::prepare_display()
{
set_display_segmask(0xf, 0x7f);
display_matrix(8, 4, m_o, m_r);
}
WRITE16_MEMBER(matchnum_state::write_r)
{
// R3-R5,R8-R10: input mux
m_inp_mux = (data >> 3 & 7) | (data >> 5 & 0x38);
// R6,R7: speaker out
m_speaker->level_w(data >> 6 & 3);
// R0-R3: digit/led select
m_r = data;
prepare_display();
}
WRITE16_MEMBER(matchnum_state::write_o)
{
// O0-O6: digit segments A-G
// O7: led data
m_o = data;
prepare_display();
}
READ8_MEMBER(matchnum_state::read_k)
{
// K: multiplexed inputs
return read_inputs(6);
}
// config
static INPUT_PORTS_START( matchnum )
PORT_START("IN.0") // R3
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 16")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 15")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 14")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 13")
PORT_START("IN.1") // R4
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 20")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 19")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 18")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 17")
PORT_START("IN.2") // R5
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_NAME("Change")
PORT_CONFNAME( 0x08, 0x08, "Players" )
PORT_CONFSETTING( 0x08, "1" )
PORT_CONFSETTING( 0x00, "2" )
PORT_START("IN.3") // R8
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 12")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 11")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 10")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 9")
PORT_START("IN.4") // R9
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 8")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 7")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 6")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 5")
PORT_START("IN.5") // R10
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 4")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 3")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 2")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 1")
INPUT_PORTS_END
static const INT16 matchnum_speaker_levels[4] = { 0, 0x7fff, -0x8000, 0 };
static MACHINE_CONFIG_START( matchnum, matchnum_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", TMS1000, 325000) // approximation - RC osc. R=47K, C=47pf
MCFG_TMS1XXX_READ_K_CB(READ8(matchnum_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(matchnum_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(matchnum_state, write_o))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_matchnum)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SPEAKER_LEVELS(4, matchnum_speaker_levels)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
/*************************************************************************** /***************************************************************************
APF Mathemagician APF Mathemagician
@ -976,13 +1110,13 @@ MACHINE_CONFIG_END
* TMS1100NLLE (rev. E!) MP3460 (die label same) * TMS1100NLLE (rev. E!) MP3460 (die label same)
* 2*SN75492N LED display drivers, 9-digit LED grid, 1-bit sound * 2*SN75492N LED display drivers, 9-digit LED grid, 1-bit sound
LED electronic football game. To distinguish between offense and defense,
offense blips (should) appear brighter. The hardware is similar to cqback.
known releases: known releases:
- USA(1): Head to Head Football - USA(1): Head to Head Football
- USA(2): Team Play Football, distributed by Sears - USA(2): Team Play Football, distributed by Sears
LED electronic football game. To distinguish between offense and defense,
offense blips (should) appear brighter. The hardware is similar to cqback.
***************************************************************************/ ***************************************************************************/
class h2hfootb_state : public hh_tms1k_state class h2hfootb_state : public hh_tms1k_state
@ -1228,6 +1362,118 @@ MACHINE_CONFIG_END
/***************************************************************************
Coleco Head to Head Boxing
* TMS1100NLL M34018-N2 (die label M34018)
* 2-digit 7seg LED display, LED grid display, 1-bit sound
This appears to be the last game of Coleco's Head to Head series.
***************************************************************************/
class h2hboxing_state : public hh_tms1k_state
{
public:
h2hboxing_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_tms1k_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE16_MEMBER(write_r);
DECLARE_WRITE16_MEMBER(write_o);
DECLARE_READ8_MEMBER(read_k);
};
// handlers
void h2hboxing_state::prepare_display()
{
set_display_segmask(0x600, 0x7f);
display_matrix(8, 11, m_o, m_r);
}
WRITE16_MEMBER(h2hboxing_state::write_r)
{
// R0-R4: input mux
m_inp_mux = data & 0x1f;
// R8: speaker out
m_speaker->level_w(data >> 8 & 1);
// R0-R7: select led
// R9,R10: select digit
m_r = data & ~0x100;
prepare_display();
}
WRITE16_MEMBER(h2hboxing_state::write_o)
{
// O0-O7: digit segments/led data
m_o = data;
prepare_display();
}
READ8_MEMBER(h2hboxing_state::read_k)
{
// K: multiplexed inputs
return read_inputs(5);
}
// config
static INPUT_PORTS_START( h2hboxing )
PORT_START("IN.0") // R0
PORT_CONFNAME( 0x01, 0x00, "Players" )
PORT_CONFSETTING( 0x00, "1" )
PORT_CONFSETTING( 0x01, "2" )
PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.1") // R1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
PORT_START("IN.2") // R2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
PORT_START("IN.3") // R3
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Punch / Pro")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Block / Amateur")
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.4") // R4
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Punch")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Block")
INPUT_PORTS_END
static MACHINE_CONFIG_START( h2hboxing, h2hboxing_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", TMS1100, 350000) // approximation - RC osc. R=39K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(h2hboxing_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(h2hboxing_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(h2hboxing_state, write_o))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_h2hboxing)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
/*************************************************************************** /***************************************************************************
Coleco Total Control 4 Coleco Total Control 4
@ -3627,16 +3873,16 @@ MACHINE_CONFIG_END
* TMC0904NL CP0904A (die label 4A0970D-04A) * TMC0904NL CP0904A (die label 4A0970D-04A)
* 10 LEDs behind bezel, no sound * 10 LEDs behind bezel, no sound
known releases:
- USA: Comp IV (two versions, different case)
- Europe: Logic 5
- Japan: Pythaligoras
This is small tabletop Mastermind game; a code-breaking game where the player This is small tabletop Mastermind game; a code-breaking game where the player
needs to find out the correct sequence of colours (numbers in our case). needs to find out the correct sequence of colours (numbers in our case).
Press the R key to start, followed by a set of unique numbers and E. Press the R key to start, followed by a set of unique numbers and E.
Refer to the official manual for more information. Refer to the official manual for more information.
known releases:
- USA: Comp IV (two versions, different case)
- Europe: Logic 5
- Japan: Pythaligoras
***************************************************************************/ ***************************************************************************/
class comp4_state : public hh_tms1k_state class comp4_state : public hh_tms1k_state
@ -4821,7 +5067,7 @@ static MACHINE_CONFIG_START( stopthief, stopthief_state )
MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, auto_power_off)) MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, auto_power_off))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_stopthie) MCFG_DEFAULT_LAYOUT(layout_stopthief)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
@ -5171,6 +5417,114 @@ MACHINE_CONFIG_END
/***************************************************************************
Tandy Championship Football (model 60-2150)
* PCB label CYG-316
* TMS1100NLL MP1193 (die label 1100B, MP1193)
* 7-digit 7seg LED display + LED grid, 1-bit sound
Another clone of Mattel Football II. The original manufacturer is unknown.
***************************************************************************/
class tcfball_state : public hh_tms1k_state
{
public:
tcfball_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_tms1k_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE16_MEMBER(write_r);
DECLARE_WRITE16_MEMBER(write_o);
DECLARE_READ8_MEMBER(read_k);
};
// handlers
void tcfball_state::prepare_display()
{
// R8 enables leds, R9 enables digits
UINT16 mask = ((m_r >> 9 & 1) * 0x7f) | ((m_r >> 8 & 1) * 0x780);
UINT16 sel = ((m_r & 0x7f) | (m_r << 7 & 0x780)) & mask;
set_display_segmask(0x77, 0x7f);
set_display_segmask(0x08, 0xff); // R3 has DP
display_matrix(8, 11, m_o, sel);
}
WRITE16_MEMBER(tcfball_state::write_r)
{
// R10: speaker out
m_speaker->level_w(data >> 10 & 1);
// R5-R7: input mux
m_inp_mux = data >> 5 & 7;
// R8+R0-R3: select led
// R9+R0-R6: select digit
m_r = data;
prepare_display();
}
WRITE16_MEMBER(tcfball_state::write_o)
{
// O0-O7: digit segments/led data
m_o = data;
prepare_display();
}
READ8_MEMBER(tcfball_state::read_k)
{
// K: multiplexed inputs
return read_inputs(3);
}
// config
static INPUT_PORTS_START( tcfball )
PORT_START("IN.0") // R5
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
PORT_START("IN.1") // R6
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("Score")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Status")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Pass")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Kick")
PORT_START("IN.2") // R7
PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_CONFNAME( 0x08, 0x00, "Skill Level" )
PORT_CONFSETTING( 0x00, "1" ) // college
PORT_CONFSETTING( 0x08, "2" ) // professional
INPUT_PORTS_END
static MACHINE_CONFIG_START( tcfball, tcfball_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", TMS1100, 375000) // approximation - RC osc. R=56K, C=24pf
MCFG_TMS1XXX_READ_K_CB(READ8(tcfball_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tcfball_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tcfball_state, write_o))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_tcfball)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
/*************************************************************************** /***************************************************************************
Tandy Radio Shack Computerized Arcade (1981, 1982, 1995) Tandy Radio Shack Computerized Arcade (1981, 1982, 1995)
@ -5333,7 +5687,7 @@ MACHINE_CONFIG_END
/*************************************************************************** /***************************************************************************
TSI Speech+ Telesensory Systems, Inc.(TSI) Speech+
* TMS1000 MCU, label TMS1007NL (die label 1000B, 1007A) * TMS1000 MCU, label TMS1007NL (die label 1000B, 1007A)
* TSI S14001A speech chip, GI S14007-A 2KB maskrom for samples * TSI S14001A speech chip, GI S14007-A 2KB maskrom for samples
* 9-digit 7seg LED display * 9-digit 7seg LED display
@ -5671,7 +6025,7 @@ MACHINE_CONFIG_END
known releases: known releases:
- World: Ditto - World: Ditto
- USA: Electronic Pocket Repeat (model 60-2152/60-2468A), distributed by Tandy - USA: Electronic Pocket Repeat (model 60-2152/60-2468A), distributed by Tandy
model 60-2482 from 1996 is assumed to be a clone of Tiger Copycat Jr. note: 1996 model 60-2482 MCU is a Z8, and is assumed to be a clone of Tiger Copycat Jr.
***************************************************************************/ ***************************************************************************/
@ -6201,6 +6555,17 @@ MACHINE_CONFIG_END
***************************************************************************/ ***************************************************************************/
ROM_START( matchnum )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "mp0163", 0x0000, 0x0400, CRC(37507600) SHA1(b1d4d8ea563e97ef378b42c44cb3ea4eb6abe0d2) )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1000_common2_micro.pla", 0, 867, CRC(d33da3cf) SHA1(13c4ebbca227818db75e6db0d45b66ba5e207776) )
ROM_REGION( 365, "maincpu:opla", 0 )
ROM_LOAD( "tms1000_matchnum_output.pla", 0, 365, CRC(da29670c) SHA1(bcec28bf25dc8c81d08851ad8a3f4e89f413017a) )
ROM_END
ROM_START( mathmagi ) ROM_START( mathmagi )
ROM_REGION( 0x0800, "maincpu", 0 ) ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "mp1030", 0x0000, 0x0800, CRC(a81d7ccb) SHA1(4756ce42f1ea28ce5fe6498312f8306f10370969) ) ROM_LOAD( "mp1030", 0x0000, 0x0800, CRC(a81d7ccb) SHA1(4756ce42f1ea28ce5fe6498312f8306f10370969) )
@ -6267,6 +6632,17 @@ ROM_START( h2hbaseb )
ROM_END ROM_END
ROM_START( h2hboxing )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "m34018", 0x0000, 0x0800, CRC(e26a11a3) SHA1(aa2735088d709fa8d9188c4fb7982a53e3a8c1bc) )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common1_micro.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
ROM_REGION( 365, "maincpu:opla", 0 )
ROM_LOAD( "tms1100_h2hboxing_output.pla", 0, 365, CRC(ffb0e63d) SHA1(31ee3f779270a23f05f9ad508283d2569ef069f1) )
ROM_END
ROM_START( tc4 ) ROM_START( tc4 )
ROM_REGION( 0x1000, "maincpu", 0 ) ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mp7334", 0x0000, 0x1000, CRC(923f3821) SHA1(a9ae342d7ff8dae1dedcd1e4984bcfae68586581) ) ROM_LOAD( "mp7334", 0x0000, 0x1000, CRC(923f3821) SHA1(a9ae342d7ff8dae1dedcd1e4984bcfae68586581) )
@ -6585,7 +6961,7 @@ ROM_START( mmerlin )
ROM_END ROM_END
ROM_START( stopthie ) ROM_START( stopthief )
ROM_REGION( 0x1000, "maincpu", 0 ) ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) ) ROM_LOAD( "mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) )
@ -6594,12 +6970,12 @@ ROM_START( stopthie )
ROM_REGION( 1982, "maincpu:mpla", 0 ) ROM_REGION( 1982, "maincpu:mpla", 0 )
ROM_LOAD( "tms0980_common1_micro.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) ) ROM_LOAD( "tms0980_common1_micro.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
ROM_REGION( 352, "maincpu:opla", 0 ) ROM_REGION( 352, "maincpu:opla", 0 )
ROM_LOAD( "tms0980_stopthie_output.pla", 0, 352, CRC(680ca1c1) SHA1(dea6365f2e6b50a52f1a8f1d8417176b905d2bc9) ) ROM_LOAD( "tms0980_stopthief_output.pla", 0, 352, CRC(680ca1c1) SHA1(dea6365f2e6b50a52f1a8f1d8417176b905d2bc9) )
ROM_REGION( 157, "maincpu:spla", 0 ) ROM_REGION( 157, "maincpu:spla", 0 )
ROM_LOAD( "tms0980_common1_segment.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) ) ROM_LOAD( "tms0980_common1_segment.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
ROM_END ROM_END
ROM_START( stopthiep ) ROM_START( stopthiefp )
ROM_REGION( 0x1000, "maincpu", 0 ) ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD16_WORD( "us4341385", 0x0000, 0x1000, CRC(07aec38a) SHA1(0a3d0956495c0d6d9ea771feae6c14a473a800dc) ) // from patent US4341385, data should be correct (it included checksums) ROM_LOAD16_WORD( "us4341385", 0x0000, 0x1000, CRC(07aec38a) SHA1(0a3d0956495c0d6d9ea771feae6c14a473a800dc) ) // from patent US4341385, data should be correct (it included checksums)
@ -6608,7 +6984,7 @@ ROM_START( stopthiep )
ROM_REGION( 1982, "maincpu:mpla", 0 ) ROM_REGION( 1982, "maincpu:mpla", 0 )
ROM_LOAD( "tms0980_common1_micro.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) ) ROM_LOAD( "tms0980_common1_micro.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
ROM_REGION( 352, "maincpu:opla", 0 ) ROM_REGION( 352, "maincpu:opla", 0 )
ROM_LOAD( "tms0980_stopthie_output.pla", 0, 352, CRC(680ca1c1) SHA1(dea6365f2e6b50a52f1a8f1d8417176b905d2bc9) ) ROM_LOAD( "tms0980_stopthief_output.pla", 0, 352, CRC(680ca1c1) SHA1(dea6365f2e6b50a52f1a8f1d8417176b905d2bc9) )
ROM_REGION( 157, "maincpu:spla", 0 ) ROM_REGION( 157, "maincpu:spla", 0 )
ROM_LOAD( "tms0980_common1_segment.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) ) ROM_LOAD( "tms0980_common1_segment.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
ROM_END ROM_END
@ -6647,6 +7023,17 @@ ROM_START( lostreas )
ROM_END ROM_END
ROM_START( tcfball )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "mp1193", 0x0000, 0x0800, CRC(7d9f446f) SHA1(bb6af47b42d989494f21475a73f072cddf58c99f) )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
ROM_REGION( 365, "maincpu:opla", 0 )
ROM_LOAD( "tms1100_tcfball_output.pla", 0, 365, CRC(26b2996e) SHA1(df0e706c552bf74123aa65e71b0c9b4d33cddb2b) )
ROM_END
ROM_START( tandy12 ) ROM_START( tandy12 )
ROM_REGION( 0x0800, "maincpu", 0 ) ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "cd7282sl", 0x0000, 0x0800, CRC(a10013dd) SHA1(42ebd3de3449f371b99937f9df39c240d15ac686) ) ROM_LOAD( "cd7282sl", 0x0000, 0x0800, CRC(a10013dd) SHA1(42ebd3de3449f371b99937f9df39c240d15ac686) )
@ -6682,16 +7069,6 @@ ROM_START( copycat )
ROM_LOAD( "tms1000_copycat_output.pla", 0, 365, CRC(b1d0c96d) SHA1(ac1a003eab3f69e09e9050cb24ea17211e0523fe) ) ROM_LOAD( "tms1000_copycat_output.pla", 0, 365, CRC(b1d0c96d) SHA1(ac1a003eab3f69e09e9050cb24ea17211e0523fe) )
ROM_END ROM_END
ROM_START( ditto )
ROM_REGION( 0x0200, "maincpu", 0 )
ROM_LOAD( "mp1801", 0x0000, 0x0200, CRC(cee6043b) SHA1(4ec334be6835688413637ff9d9d7a5f0d61eba27) )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1000_ditto_micro.pla", 0, 867, CRC(2710d8ef) SHA1(cb7a13bfabedad43790de753844707fe829baed0) )
ROM_REGION( 365, "maincpu:opla", 0 )
ROM_LOAD( "tms1000_ditto_output.pla", 0, 365, CRC(2b708a27) SHA1(e95415e51ffbe5da3bde1484fcd20467dde9f09a) )
ROM_END
ROM_START( copycatm2 ) ROM_START( copycatm2 )
ROM_REGION( 0x0200, "maincpu", 0 ) ROM_REGION( 0x0200, "maincpu", 0 )
ROM_LOAD( "mp3005n", 0x0000, 0x0200, CRC(a87649cb) SHA1(14ef7967a80578885f0b905772c3bb417b5b3255) ) ROM_LOAD( "mp3005n", 0x0000, 0x0200, CRC(a87649cb) SHA1(14ef7967a80578885f0b905772c3bb417b5b3255) )
@ -6703,6 +7080,17 @@ ROM_START( copycatm2 )
ROM_END ROM_END
ROM_START( ditto )
ROM_REGION( 0x0200, "maincpu", 0 )
ROM_LOAD( "mp1801", 0x0000, 0x0200, CRC(cee6043b) SHA1(4ec334be6835688413637ff9d9d7a5f0d61eba27) )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1000_ditto_micro.pla", 0, 867, CRC(2710d8ef) SHA1(cb7a13bfabedad43790de753844707fe829baed0) )
ROM_REGION( 365, "maincpu:opla", 0 )
ROM_LOAD( "tms1000_ditto_output.pla", 0, 365, CRC(2b708a27) SHA1(e95415e51ffbe5da3bde1484fcd20467dde9f09a) )
ROM_END
ROM_START( tbreakup ) ROM_START( tbreakup )
ROM_REGION( 0x0400, "maincpu", 0 ) ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "mp2726a", 0x0000, 0x0400, CRC(1f7c28e2) SHA1(164cda4eb3f0b1d20955212a197c9aadf8d18a06) ) ROM_LOAD( "mp2726a", 0x0000, 0x0400, CRC(1f7c28e2) SHA1(164cda4eb3f0b1d20955212a197c9aadf8d18a06) )
@ -6738,6 +7126,8 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
CONS( 1979, matchnum, 0, 0, matchnum, matchnum, driver_device, 0, "A-One LSI", "Match Number", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
COMP( 1980, mathmagi, 0, 0, mathmagi, mathmagi, driver_device, 0, "APF Electronics Inc.", "Mathemagician", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW ) COMP( 1980, mathmagi, 0, 0, mathmagi, mathmagi, driver_device, 0, "APF Electronics Inc.", "Mathemagician", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
CONS( 1978, amaztron, 0, 0, amaztron, amaztron, driver_device, 0, "Coleco", "Amaze-A-Tron", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // *** CONS( 1978, amaztron, 0, 0, amaztron, amaztron, driver_device, 0, "Coleco", "Amaze-A-Tron", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // ***
@ -6745,6 +7135,7 @@ COMP( 1979, zodiac, 0, 0, zodiac, zodiac, driver_device, 0, "Col
CONS( 1978, cqback, 0, 0, cqback, cqback, driver_device, 0, "Coleco", "Electronic Quarterback", MACHINE_SUPPORTS_SAVE ) CONS( 1978, cqback, 0, 0, cqback, cqback, driver_device, 0, "Coleco", "Electronic Quarterback", MACHINE_SUPPORTS_SAVE )
CONS( 1980, h2hfootb, 0, 0, h2hfootb, h2hfootb, driver_device, 0, "Coleco", "Head to Head Football", MACHINE_SUPPORTS_SAVE ) CONS( 1980, h2hfootb, 0, 0, h2hfootb, h2hfootb, driver_device, 0, "Coleco", "Head to Head Football", MACHINE_SUPPORTS_SAVE )
CONS( 1980, h2hbaseb, 0, 0, h2hbaseb, h2hbaseb, driver_device, 0, "Coleco", "Head to Head Baseball", MACHINE_SUPPORTS_SAVE ) CONS( 1980, h2hbaseb, 0, 0, h2hbaseb, h2hbaseb, driver_device, 0, "Coleco", "Head to Head Baseball", MACHINE_SUPPORTS_SAVE )
CONS( 1981, h2hboxing, 0, 0, h2hboxing, h2hboxing, driver_device, 0, "Coleco", "Head to Head Boxing", MACHINE_SUPPORTS_SAVE )
CONS( 1981, tc4, 0, 0, tc4, tc4, driver_device, 0, "Coleco", "Total Control 4", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1981, tc4, 0, 0, tc4, tc4, driver_device, 0, "Coleco", "Total Control 4", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1979, cnfball, 0, 0, cnfball, cnfball, driver_device, 0, "Conic", "Electronic Football (Conic, TMS1000 version)", MACHINE_SUPPORTS_SAVE ) CONS( 1979, cnfball, 0, 0, cnfball, cnfball, driver_device, 0, "Conic", "Electronic Football (Conic, TMS1000 version)", MACHINE_SUPPORTS_SAVE )
@ -6781,13 +7172,14 @@ CONS( 1979, bigtrak, 0, 0, bigtrak, bigtrak, driver_device, 0, "Mil
CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) // *** CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) // ***
CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin - The Electronic Wizard", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin - The Electronic Wizard", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, stopthie, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", MACHINE_SUPPORTS_SAVE ) // *** CONS( 1979, stopthief, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", MACHINE_SUPPORTS_SAVE ) // ***
CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // *** CONS( 1979, stopthiefp,stopthief,0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // ***
CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", MACHINE_SUPPORTS_SAVE ) CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", MACHINE_SUPPORTS_SAVE )
CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", MACHINE_SUPPORTS_SAVE ) CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", MACHINE_SUPPORTS_SAVE )
CONS( 1982, mmerlin, 0, 0, mmerlin, mmerlin, driver_device, 0, "Parker Brothers", "Master Merlin", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1982, mmerlin, 0, 0, mmerlin, mmerlin, driver_device, 0, "Parker Brothers", "Master Merlin", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1982, lostreas, 0, 0, lostreas, lostreas, driver_device, 0, "Parker Brothers", "Lost Treasure - The Electronic Deep-Sea Diving Game (Electronic Dive-Control Center)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // *** CONS( 1982, lostreas, 0, 0, lostreas, lostreas, driver_device, 0, "Parker Brothers", "Lost Treasure - The Electronic Deep-Sea Diving Game (Electronic Dive-Control Center)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // ***
CONS( 1980, tcfball, 0, 0, tcfball, tcfball, driver_device, 0, "Tandy Radio Shack", "Championship Football (model 60-2150)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // some of the minigames: *** CONS( 1981, tandy12, 0, 0, tandy12, tandy12, driver_device, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // some of the minigames: ***
COMP( 1976, speechp, 0, 0, speechp, speechp, driver_device, 0, "Telesensory Systems, Inc.", "Speech+", MACHINE_SUPPORTS_SAVE ) COMP( 1976, speechp, 0, 0, speechp, speechp, driver_device, 0, "Telesensory Systems, Inc.", "Speech+", MACHINE_SUPPORTS_SAVE )

View File

@ -2876,6 +2876,8 @@ INPUT_PORTS_END
ROMX_LOAD( "700a01(gchgchmp).22g", 0x000000, 0x080000, CRC(39ebb0ca) SHA1(9aab8c637dd2be84d79007e52f108abe92bf29dd), ROM_BIOS(2) ) \ ROMX_LOAD( "700a01(gchgchmp).22g", 0x000000, 0x080000, CRC(39ebb0ca) SHA1(9aab8c637dd2be84d79007e52f108abe92bf29dd), ROM_BIOS(2) ) \
ROM_SYSTEM_BIOS( 2, "dsem2", "Found on Dancing Stage Euro Mix 2" ) \ ROM_SYSTEM_BIOS( 2, "dsem2", "Found on Dancing Stage Euro Mix 2" ) \
ROMX_LOAD( "700b01.22g", 0x0000000, 0x080000, CRC(6cf852af) SHA1(a2421d0a494892c0e71003c96995ce8f945064dd), ROM_BIOS(3) ) \ ROMX_LOAD( "700b01.22g", 0x0000000, 0x080000, CRC(6cf852af) SHA1(a2421d0a494892c0e71003c96995ce8f945064dd), ROM_BIOS(3) ) \
ROM_REGION( 0x8000, "mcu", 0 ) \
ROM_LOAD( "hd6473644h.18e", 0, 0x8000, NO_DUMP) \
ROM_REGION( 0x40, "h8_response", 0 ) \ ROM_REGION( 0x40, "h8_response", 0 ) \
ROMX_LOAD( "h8a01.bin", 0x000000, 0x000040, CRC(131e0359) SHA1(967f66578ebc0cf6b044d71af09b59bce1f4a1d0), ROM_BIOS(1) ) \ ROMX_LOAD( "h8a01.bin", 0x000000, 0x000040, CRC(131e0359) SHA1(967f66578ebc0cf6b044d71af09b59bce1f4a1d0), ROM_BIOS(1) ) \
ROMX_LOAD( "h8a01.bin", 0x000000, 0x000040, CRC(131e0359) SHA1(967f66578ebc0cf6b044d71af09b59bce1f4a1d0), ROM_BIOS(2) ) \ ROMX_LOAD( "h8a01.bin", 0x000000, 0x000040, CRC(131e0359) SHA1(967f66578ebc0cf6b044d71af09b59bce1f4a1d0), ROM_BIOS(2) ) \

View File

@ -2565,6 +2565,81 @@ ROM_START( scudplusa ) /* step 1.5, Sega game ID# is 833-13260 SCUD PLUS, ROM b
ROM_END ROM_END
ROM_START( vf3 ) /* step 1.0, Sega game ID# is 833-12712, ROM board ID# 834-12821 */ ROM_START( vf3 ) /* step 1.0, Sega game ID# is 833-12712, ROM board ID# 834-12821 */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19227d.17", 0x600006, 0x080000, CRC(8b650966) SHA1(a21627c353d65b4c80e1b10f1d864380a15bec91) )
ROM_LOAD64_WORD_SWAP( "epr-19228d.18", 0x600004, 0x080000, CRC(a2470c78) SHA1(7691fc259676e49a1aaa50efdd7c74c5e996fcf9) )
ROM_LOAD64_WORD_SWAP( "epr-19229d.19", 0x600002, 0x080000, CRC(6773f715) SHA1(84122773bdf53c2b427c5f515d125fb9e787e36c) )
ROM_LOAD64_WORD_SWAP( "epr-19230d.20", 0x600000, 0x080000, CRC(43c08240) SHA1(eae684b6c1f4d32c9149b3b8a14c1ad9b21b8d8a) )
// CROM0
ROM_LOAD64_WORD_SWAP( "mpr-19193.1", 0x800006, 0x400000, CRC(7bab33d2) SHA1(243a09959f3c4311070f1de760ee63958cd47660) )
ROM_LOAD64_WORD_SWAP( "mpr-19194.2", 0x800004, 0x400000, CRC(66254702) SHA1(843ac4f6791f312f3138f8f38d38c8e4d2bab305) )
ROM_LOAD64_WORD_SWAP( "mpr-19195.3", 0x800002, 0x400000, CRC(bd5e27a3) SHA1(778c67bf7b5c7e3ae52fe12308a81b095563f52b) )
ROM_LOAD64_WORD_SWAP( "mpr-19196.4", 0x800000, 0x400000, CRC(f386b850) SHA1(168d21382359acb8f1d52d722de8c6b9a9210378) )
// CROM1
ROM_LOAD64_WORD_SWAP( "mpr-19197.5", 0x1800006, 0x400000, CRC(a22d76c9) SHA1(ad2d67a62436ccc6479e2a218ab09d2fc22c367d) )
ROM_LOAD64_WORD_SWAP( "mpr-19198.6", 0x1800004, 0x400000, CRC(d8ee5032) SHA1(3e9274142874ace76dba2bc9b5351cfdfb3a50cd) )
ROM_LOAD64_WORD_SWAP( "mpr-19199.7", 0x1800002, 0x400000, CRC(9f80d6fe) SHA1(97b9076d413e28d00e9c45fcc7dad6f534ca8874) )
ROM_LOAD64_WORD_SWAP( "mpr-19200.8", 0x1800000, 0x400000, CRC(74941091) SHA1(914db3955f355779147d86446f5976121191ea6d) )
// CROM2
ROM_LOAD64_WORD_SWAP( "mpr-19201.9", 0x2800006, 0x400000, CRC(7c4a8c31) SHA1(473b7bef932d7d54a5dc06bd80d286f2e2e96d44) )
ROM_LOAD64_WORD_SWAP( "mpr-19202.10", 0x2800004, 0x400000, CRC(aaa086c6) SHA1(01871c8e5454aed80e907fde199cfb23a57aa1c2) )
ROM_LOAD64_WORD_SWAP( "mpr-19203.11", 0x2800002, 0x400000, CRC(0afa6334) SHA1(1bb70e823fb6e05df069cbfafed2e57bda8776b9) )
ROM_LOAD64_WORD_SWAP( "mpr-19204.12", 0x2800000, 0x400000, CRC(2f93310a) SHA1(3dfc5b72a78967d7772da4098adb41f18b5294d4) )
// CROM3
ROM_LOAD64_WORD_SWAP( "mpr-19205.13", 0x3800006, 0x400000, CRC(199c328e) SHA1(1ef1f09ff1f5253bf03e06c5b6e42be9599b9ea5) )
ROM_LOAD64_WORD_SWAP( "mpr-19206.14", 0x3800004, 0x400000, CRC(71a98d73) SHA1(dda617f9f5f986e3369fa3d3090c423eefdf913c) )
ROM_LOAD64_WORD_SWAP( "mpr-19207.15", 0x3800002, 0x400000, CRC(2ce1612d) SHA1(736f559d460f0069c7a2d5ba7cddf9135737d6e2) )
ROM_LOAD64_WORD_SWAP( "mpr-19208.16", 0x3800000, 0x400000, CRC(08f30f71) SHA1(393525b19cdecddfbd62c6209203db5f3edfd9a8) )
// mirror CROM0 to CROM
ROM_COPY("user1", 0x800000, 0x000000, 0x600000)
ROM_REGION( 0x1000000, "user3", 0 ) /* Video ROMs Part 1 */
ROM_LOAD_VROM( "mpr-19211.26", 0x000002, 0x200000, CRC(9c8f5df1) SHA1(d47c8bd0189c8e617a3ed9f75ee3812a229f56c0) )
ROM_LOAD_VROM( "mpr-19212.27", 0x000000, 0x200000, CRC(75036234) SHA1(01a20a6a62408017bff8f2e76dbd21c00275bc70) )
ROM_LOAD_VROM( "mpr-19213.28", 0x000006, 0x200000, CRC(67b123cf) SHA1(b84c4f83c25edcc8ac929d3f9cf51da713045071) )
ROM_LOAD_VROM( "mpr-19214.29", 0x000004, 0x200000, CRC(a6f5576b) SHA1(e994b3ef8e6eb07e8f3bbe474410c06d6c42354b) )
ROM_LOAD_VROM( "mpr-19215.30", 0x00000a, 0x200000, CRC(c6fd9f0d) SHA1(1f3299706d6ac73836c069a7ed2866d412f60369) )
ROM_LOAD_VROM( "mpr-19216.31", 0x000008, 0x200000, CRC(201bb1ed) SHA1(7ffd72ff56159529d74f01f8da0ba4798f109806) )
ROM_LOAD_VROM( "mpr-19217.32", 0x00000e, 0x200000, CRC(4dadd41a) SHA1(7a1e0908962afcfc737132478c0e45d153d94ecb) )
ROM_LOAD_VROM( "mpr-19218.33", 0x00000c, 0x200000, CRC(cff91953) SHA1(41e95704a65958377c3bbd9d00d90a5ad4552f66) )
ROM_REGION( 0x1000000, "user4", 0 ) /* Video ROMs Part 2 */
ROM_LOAD_VROM( "mpr-19219.34", 0x000002, 0x200000, CRC(c610d521) SHA1(cb146fe78d89176e9dd5c773644614cdc2ef57ce) )
ROM_LOAD_VROM( "mpr-19220.35", 0x000000, 0x200000, CRC(e62924d0) SHA1(4d1ac11a5977a4e9cf942c9f1204960c0a895347) )
ROM_LOAD_VROM( "mpr-19221.36", 0x000006, 0x200000, CRC(24f83e3c) SHA1(c587428fa47e849881bf45487af086db6b09264e) )
ROM_LOAD_VROM( "mpr-19222.37", 0x000004, 0x200000, CRC(61a6aa7d) SHA1(cc26020b2f904f68822111073b595ee0cc8b2e0c) )
ROM_LOAD_VROM( "mpr-19223.38", 0x00000a, 0x200000, CRC(1a8c1980) SHA1(43b8efb019c8a20fe38f95050fe60dfe9bf322f0) )
ROM_LOAD_VROM( "mpr-19224.39", 0x000008, 0x200000, CRC(0a79a1bd) SHA1(1df71cf77ea8611462380a449eb99199664b3da3) )
ROM_LOAD_VROM( "mpr-19225.40", 0x00000e, 0x200000, CRC(91a985eb) SHA1(5a842a260e4a78f5463222db44f13b068fa70b23) )
ROM_LOAD_VROM( "mpr-19226.41", 0x00000c, 0x200000, CRC(00091722) SHA1(ef86db36b4b91a66b3e401c3c91735b9d28da2e2) )
ROM_REGION( 0x100000, "audiocpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "epr-19231.21", 0x080000, 0x080000, CRC(b416fe96) SHA1(b508eb6802072a8d4f8fdc7ca4fba6c6a4aaadae) )
ROM_REGION( 0x800000, "samples", 0 ) /* SCSP samples */
ROM_LOAD( "mpr-19209.22", 0x000000, 0x400000, CRC(3715e38c) SHA1(b11dbf8a5840990e9697c53b4796cd70ad91f6a1) )
ROM_LOAD( "mpr-19210.24", 0x400000, 0x400000, CRC(c03d6502) SHA1(4ca49fe5dd5105ca5f78f4740477beb64137d4be) )
ROM_REGION( 0x20000, "cpu2", 0 ) /* Z80 code */
ROM_FILL( 0x000000, 0x20000, 0x0000 )
ROM_REGION( 0x800000, "dsb", 0 ) /* DSB samples */
ROM_FILL( 0x000000, 0x800000, 0x0000 )
ROM_REGION( 0x80000, "scsp1", 0 ) /* first SCSP's RAM */
ROM_FILL( 0x000000, 0x80000, 0x0000 )
ROM_REGION( 0x80000, "scsp2", 0 ) /* second SCSP's RAM */
ROM_FILL( 0x000000, 0x80000, 0x0000 )
ROM_END
ROM_START( vf3c ) /* step 1.0, Sega game ID# is 833-12712, ROM board ID# 834-12821 */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */ ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM // CROM
ROM_LOAD64_WORD_SWAP( "epr-19227c.17", 0x600006, 0x080000, CRC(a7df4d75) SHA1(1b1186227f830556c5e2b6ca4c2bf20673b22f94) ) ROM_LOAD64_WORD_SWAP( "epr-19227c.17", 0x600006, 0x080000, CRC(a7df4d75) SHA1(1b1186227f830556c5e2b6ca4c2bf20673b22f94) )
@ -6060,7 +6135,8 @@ DRIVER_INIT_MEMBER(model3_state,lamachin)
/* Model 3 Step 1.0 */ /* Model 3 Step 1.0 */
GAME( 1996, vf3, 0, model3_10, model3, model3_state, vf3, ROT0, "Sega", "Virtua Fighter 3 (Revision C)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1996, vf3, 0, model3_10, model3, model3_state, vf3, ROT0, "Sega", "Virtua Fighter 3 (Revision D)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, vf3c, vf3, model3_10, model3, model3_state, vf3, ROT0, "Sega", "Virtua Fighter 3 (Revision C)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, vf3a, vf3, model3_10, model3, model3_state, vf3, ROT0, "Sega", "Virtua Fighter 3 (Revision A)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1996, vf3a, vf3, model3_10, model3, model3_state, vf3, ROT0, "Sega", "Virtua Fighter 3 (Revision A)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, vf3tb, vf3, model3_10, model3, model3_state, model3_10, ROT0, "Sega", "Virtua Fighter 3 Team Battle", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1996, vf3tb, vf3, model3_10, model3, model3_state, model3_10, ROT0, "Sega", "Virtua Fighter 3 Team Battle", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, bass, 0, model3_10, bass, model3_state, bass, ROT0, "Sega", "Sega Bass Fishing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1997, bass, 0, model3_10, bass, model3_state, bass, ROT0, "Sega", "Sega Bass Fishing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )

View File

@ -2701,7 +2701,8 @@ ROM_START( puzlclub )
ROM_LOAD( "pc1-c4.bin", 0x80000, 0x20000, CRC(f1c95296) SHA1(f093c4227b4f6f524a76d0b9409c2c6ce33e560b) ) ROM_LOAD( "pc1-c4.bin", 0x80000, 0x20000, CRC(f1c95296) SHA1(f093c4227b4f6f524a76d0b9409c2c6ce33e560b) )
ROM_LOAD( "pc1-c5.bin", 0xa0000, 0x20000, CRC(bc443c27) SHA1(af841b6a2b783b0d9b9bbc33083afbb56e8bff69) ) ROM_LOAD( "pc1-c5.bin", 0xa0000, 0x20000, CRC(bc443c27) SHA1(af841b6a2b783b0d9b9bbc33083afbb56e8bff69) )
ROM_LOAD( "pc1-c6.bin", 0xc0000, 0x20000, CRC(ec0a3dc5) SHA1(a5148e99f3198196fd635ff4ac0275393e6f7033) ) ROM_LOAD( "pc1-c6.bin", 0xc0000, 0x20000, CRC(ec0a3dc5) SHA1(a5148e99f3198196fd635ff4ac0275393e6f7033) )
ROM_LOAD( "pc1-c7.bin", 0xe0000, 0x20000, NO_DUMP ) // title screen gfxs are here, might not exist.
ROM_REGION( 0x100000, "gfx3", ROMREGION_ERASEFF ) /* sprites */ ROM_REGION( 0x100000, "gfx3", ROMREGION_ERASEFF ) /* sprites */
/* no sprites */ /* no sprites */
ROM_END ROM_END

View File

@ -115,7 +115,14 @@ Its BIOS performs POST and halts as there's no keyboard.
#include "machine/mc146818.h" #include "machine/mc146818.h"
#include "machine/i8255.h" #include "machine/i8255.h"
#include "machine/wd_fdc.h" #include "machine/wd_fdc.h"
#include "machine/i8251.h"
#include "machine/clock.h"
#include "imagedev/floppy.h" #include "imagedev/floppy.h"
#include "machine/pit8253.h"
#include "sound/speaker.h"
#include "machine/octo_kbd.h"
#include "machine/bankdev.h"
#include "machine/ram.h"
class octopus_state : public driver_device class octopus_state : public driver_device
{ {
@ -135,10 +142,19 @@ public:
m_fdc(*this, "fdc"), m_fdc(*this, "fdc"),
m_floppy0(*this, "fdc:0"), m_floppy0(*this, "fdc:0"),
m_floppy1(*this, "fdc:1"), m_floppy1(*this, "fdc:1"),
m_current_dma(-1) m_kb_uart(*this, "keyboard"),
m_pit(*this, "pit"),
m_speaker(*this, "speaker"),
m_z80_bankdev(*this, "z80_bank"),
m_ram(*this, "main_ram"),
m_current_dma(-1),
m_speaker_active(false),
m_beep_active(false),
m_z80_active(false)
{ } { }
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override;
virtual void video_start() override; virtual void video_start() override;
SCN2674_DRAW_CHARACTER_MEMBER(display_pixels); SCN2674_DRAW_CHARACTER_MEMBER(display_pixels);
DECLARE_READ8_MEMBER(vram_r); DECLARE_READ8_MEMBER(vram_r);
@ -158,6 +174,13 @@ public:
DECLARE_WRITE8_MEMBER(gpo_w); DECLARE_WRITE8_MEMBER(gpo_w);
DECLARE_READ8_MEMBER(vidcontrol_r); DECLARE_READ8_MEMBER(vidcontrol_r);
DECLARE_WRITE8_MEMBER(vidcontrol_w); DECLARE_WRITE8_MEMBER(vidcontrol_w);
DECLARE_READ8_MEMBER(z80_io_r);
DECLARE_WRITE8_MEMBER(z80_io_w);
IRQ_CALLBACK_MEMBER(x86_irq_cb);
DECLARE_WRITE_LINE_MEMBER(spk_w);
DECLARE_WRITE_LINE_MEMBER(spk_freq_w);
DECLARE_WRITE_LINE_MEMBER(beep_w);
DECLARE_WRITE_LINE_MEMBER(dack0_w) { m_dma1->hack_w(state ? 0 : 1); } // for all unused DMA channel? DECLARE_WRITE_LINE_MEMBER(dack0_w) { m_dma1->hack_w(state ? 0 : 1); } // for all unused DMA channel?
DECLARE_WRITE_LINE_MEMBER(dack1_w) { if(!state) m_current_dma = 1; else if(m_current_dma == 1) m_current_dma = -1; } // HD DECLARE_WRITE_LINE_MEMBER(dack1_w) { if(!state) m_current_dma = 1; else if(m_current_dma == 1) m_current_dma = -1; } // HD
@ -167,6 +190,15 @@ public:
DECLARE_WRITE_LINE_MEMBER(dack5_w) { if(!state) m_current_dma = 5; else if(m_current_dma == 5) m_current_dma = -1; } // Floppy DECLARE_WRITE_LINE_MEMBER(dack5_w) { if(!state) m_current_dma = 5; else if(m_current_dma == 5) m_current_dma = -1; } // Floppy
DECLARE_WRITE_LINE_MEMBER(dack6_w) { m_dma1->hack_w(state ? 0 : 1); } DECLARE_WRITE_LINE_MEMBER(dack6_w) { m_dma1->hack_w(state ? 0 : 1); }
DECLARE_WRITE_LINE_MEMBER(dack7_w) { m_dma1->hack_w(state ? 0 : 1); } DECLARE_WRITE_LINE_MEMBER(dack7_w) { m_dma1->hack_w(state ? 0 : 1); }
enum
{
BEEP_TIMER = 100
};
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
private: private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu; required_device<cpu_device> m_subcpu;
@ -181,6 +213,11 @@ private:
required_device<fd1793_t> m_fdc; required_device<fd1793_t> m_fdc;
required_device<floppy_connector> m_floppy0; required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1; required_device<floppy_connector> m_floppy1;
required_device<i8251_device> m_kb_uart;
required_device<pit8253_device> m_pit;
required_device<speaker_sound_device> m_speaker;
required_device<address_map_bank_device> m_z80_bankdev;
required_device<ram_device> m_ram;
UINT8 m_hd_bank; // HD bank select UINT8 m_hd_bank; // HD bank select
UINT8 m_fd_bank; // Floppy bank select UINT8 m_fd_bank; // Floppy bank select
@ -190,21 +227,25 @@ private:
UINT8 m_cntl; // RTC / FDC control (PPI port B) UINT8 m_cntl; // RTC / FDC control (PPI port B)
UINT8 m_gpo; // General purpose outputs (PPI port C) UINT8 m_gpo; // General purpose outputs (PPI port C)
UINT8 m_vidctrl; UINT8 m_vidctrl;
bool m_speaker_active;
bool m_beep_active;
bool m_speaker_level;
bool m_z80_active;
emu_timer* m_timer_beep;
}; };
static ADDRESS_MAP_START( octopus_mem, AS_PROGRAM, 8, octopus_state ) static ADDRESS_MAP_START( octopus_mem, AS_PROGRAM, 8, octopus_state )
ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x00000, 0x1ffff) AM_RAMBANK("main_ram_bank")
AM_RANGE(0x00000, 0x1ffff) AM_RAM
// second 128kB for 256kB system // second 128kB for 256kB system
// expansion RAM, up to 512kB extra // expansion RAM, up to 512kB extra
AM_RANGE(0x20000, 0xcffff) AM_NOP AM_RANGE(0x20000, 0xcffff) AM_NOP
AM_RANGE(0xd0000, 0xdffff) AM_RAM AM_SHARE("vram") AM_RANGE(0xd0000, 0xdffff) AM_RAM AM_SHARE("vram")
AM_RANGE(0xe0000, 0xe3fff) AM_NOP AM_RANGE(0xe0000, 0xe3fff) AM_NOP
AM_RANGE(0xe4000, 0xe5fff) AM_RAM AM_SHARE("fram") AM_RANGE(0xe4000, 0xe5fff) AM_RAM AM_SHARE("fram")
AM_RANGE(0xe6000, 0xf3fff) AM_NOP AM_RANGE(0xe6000, 0xe7fff) AM_ROM AM_REGION("chargen",0)
AM_RANGE(0xf4000, 0xf5fff) AM_ROM AM_REGION("chargen",0) AM_RANGE(0xe8000, 0xfbfff) AM_NOP
AM_RANGE(0xf6000, 0xfbfff) AM_NOP
AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("user1",0) AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("user1",0)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -215,10 +256,10 @@ static ADDRESS_MAP_START( octopus_io, AS_IO, 8, octopus_state )
AM_RANGE(0x20, 0x20) AM_READ_PORT("DSWA") AM_RANGE(0x20, 0x20) AM_READ_PORT("DSWA")
AM_RANGE(0x21, 0x2f) AM_READWRITE(system_r, system_w) AM_RANGE(0x21, 0x2f) AM_READWRITE(system_r, system_w)
AM_RANGE(0x31, 0x33) AM_READWRITE(bank_sel_r, bank_sel_w) AM_RANGE(0x31, 0x33) AM_READWRITE(bank_sel_r, bank_sel_w)
// 0x50-51: Keyboard (i8251) AM_RANGE(0x50, 0x50) AM_DEVREADWRITE("keyboard", i8251_device, data_r, data_w)
AM_RANGE(0x50, 0x51) AM_NOP AM_RANGE(0x51, 0x51) AM_DEVREADWRITE("keyboard", i8251_device, status_r, control_w)
// 0x70-73: HD controller // 0x70-73: HD controller
// 0x80-83: serial timers (i8253) AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("pit", pit8253_device, read, write)
// 0xa0-a3: serial interface (Z80 SIO/2) // 0xa0-a3: serial interface (Z80 SIO/2)
AM_RANGE(0xb0, 0xb1) AM_DEVREADWRITE("pic_master", pic8259_device, read, write) AM_RANGE(0xb0, 0xb1) AM_DEVREADWRITE("pic_master", pic8259_device, read, write)
AM_RANGE(0xb4, 0xb5) AM_DEVREADWRITE("pic_slave", pic8259_device, read, write) AM_RANGE(0xb4, 0xb5) AM_DEVREADWRITE("pic_slave", pic8259_device, read, write)
@ -236,11 +277,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( octopus_sub_mem, AS_PROGRAM, 8, octopus_state ) static ADDRESS_MAP_START( octopus_sub_mem, AS_PROGRAM, 8, octopus_state )
ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0xffff) AM_DEVREADWRITE("z80_bank", address_map_bank_device, read8, write8)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( octopus_sub_io, AS_IO, 8, octopus_state ) static ADDRESS_MAP_START( octopus_sub_io, AS_IO, 8, octopus_state )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0xffff) AM_READWRITE(z80_io_r, z80_io_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( octopus_vram, AS_0, 8, octopus_state ) static ADDRESS_MAP_START( octopus_vram, AS_0, 8, octopus_state )
@ -275,6 +317,15 @@ static INPUT_PORTS_START( octopus )
PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
INPUT_PORTS_END INPUT_PORTS_END
void octopus_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch(id)
{
case BEEP_TIMER: // switch off speaker
m_beep_active = false;
break;
}
}
WRITE8_MEMBER(octopus_state::vram_w) WRITE8_MEMBER(octopus_state::vram_w)
{ {
@ -319,6 +370,7 @@ WRITE8_MEMBER(octopus_state::bank_sel_w)
break; break;
case 2: case 2:
m_z80_bank = data; m_z80_bank = data;
m_z80_bankdev->set_bank(m_z80_bank & 0x0f);
logerror("Z80/RAM bank = %i\n",data); logerror("Z80/RAM bank = %i\n",data);
break; break;
} }
@ -332,7 +384,15 @@ WRITE8_MEMBER(octopus_state::bank_sel_w)
// 0x28: write: Z80 enable // 0x28: write: Z80 enable
WRITE8_MEMBER(octopus_state::system_w) WRITE8_MEMBER(octopus_state::system_w)
{ {
logerror("SYS: System control offset %i data %02x\n",offset,data); logerror("SYS: System control offset %i data %02x\n",offset+1,data);
switch(offset)
{
case 7: // enable Z80, halt 8088
m_subcpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
m_z80_active = true;
break;
}
} }
READ8_MEMBER(octopus_state::system_r) READ8_MEMBER(octopus_state::system_r)
@ -340,12 +400,26 @@ READ8_MEMBER(octopus_state::system_r)
switch(offset) switch(offset)
{ {
case 0: case 0:
return 0x1f; // do bits 0-4 mean anything? Language? return 0x1f; // do bits 0-4 mean anything? Language DIPs?
} }
return 0xff; return 0xff;
} }
// Any I/O cycle relinquishes control of the bus
READ8_MEMBER(octopus_state::z80_io_r)
{
z80_io_w(space,offset,0);
return 0x00;
}
WRITE8_MEMBER(octopus_state::z80_io_w)
{
m_subcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_z80_active = false;
}
// RTC/FDC control - PPI port B // RTC/FDC control - PPI port B
// bit4-5: write precomp. // bit4-5: write precomp.
// bit6-7: drive select // bit6-7: drive select
@ -416,6 +490,32 @@ WRITE8_MEMBER(octopus_state::vidcontrol_w)
m_fdc->set_unscaled_clock((data & 0x08) ? XTAL_16MHz / 16 : XTAL_16MHz / 8); m_fdc->set_unscaled_clock((data & 0x08) ? XTAL_16MHz / 16 : XTAL_16MHz / 8);
} }
// Sound hardware
// Sound level provided by i8253 timer 2
// Enabled by /DTR signal from i8251
// 100ms beep triggered by pulsing /CTS signal low on i8251
WRITE_LINE_MEMBER(octopus_state::spk_w)
{
m_speaker_active = !state;
m_speaker->level_w(((m_speaker_active || m_beep_active) && m_speaker_level) ? 1 : 0);
}
WRITE_LINE_MEMBER(octopus_state::spk_freq_w)
{
m_speaker_level = state;
m_speaker->level_w(((m_speaker_active || m_beep_active) && m_speaker_level) ? 1 : 0);
}
WRITE_LINE_MEMBER(octopus_state::beep_w)
{
if(!state) // active low
{
m_beep_active = true;
m_speaker->level_w(((m_speaker_active || m_beep_active) && m_speaker_level) ? 1 : 0);
m_timer_beep->adjust(attotime::from_msec(100));
}
}
READ8_MEMBER(octopus_state::dma_read) READ8_MEMBER(octopus_state::dma_read)
{ {
UINT8 byte; UINT8 byte;
@ -442,11 +542,32 @@ WRITE_LINE_MEMBER( octopus_state::dma_hrq_changed )
m_dma2->hack_w(state); m_dma2->hack_w(state);
} }
// Any interrupt will also give bus control back to the 8088
IRQ_CALLBACK_MEMBER(octopus_state::x86_irq_cb)
{
m_subcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_z80_active = false;
return m_pic1->inta_cb(device,irqline);
}
void octopus_state::machine_start()
{
m_timer_beep = timer_alloc(BEEP_TIMER);
// install extra RAM
if(m_ram->size() > 0x20000)
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"extra_ram_bank");
}
void octopus_state::machine_reset() void octopus_state::machine_reset()
{ {
m_subcpu->set_input_line(INPUT_LINE_HALT,ASSERT_LINE); // halt Z80 to start with m_subcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); // halt Z80 to start with
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_z80_active = false;
m_current_dma = -1; m_current_dma = -1;
m_current_drive = 0; m_current_drive = 0;
membank("main_ram_bank")->set_base(m_ram->pointer());
} }
void octopus_state::video_start() void octopus_state::video_start()
@ -477,12 +598,16 @@ static SLOT_INTERFACE_START( octopus_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
SLOT_INTERFACE_END SLOT_INTERFACE_END
static SLOT_INTERFACE_START(keyboard)
SLOT_INTERFACE("octopus", OCTOPUS_KEYBOARD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( octopus, octopus_state ) static MACHINE_CONFIG_START( octopus, octopus_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu",I8088, XTAL_24MHz / 3) // 8MHz MCFG_CPU_ADD("maincpu",I8088, XTAL_24MHz / 3) // 8MHz
MCFG_CPU_PROGRAM_MAP(octopus_mem) MCFG_CPU_PROGRAM_MAP(octopus_mem)
MCFG_CPU_IO_MAP(octopus_io) MCFG_CPU_IO_MAP(octopus_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic_master", pic8259_device, inta_cb) MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(octopus_state, x86_irq_cb)
MCFG_CPU_ADD("subcpu",Z80, XTAL_24MHz / 4) // 6MHz MCFG_CPU_ADD("subcpu",Z80, XTAL_24MHz / 4) // 6MHz
MCFG_CPU_PROGRAM_MAP(octopus_sub_mem) MCFG_CPU_PROGRAM_MAP(octopus_sub_mem)
@ -533,17 +658,39 @@ static MACHINE_CONFIG_START( octopus, octopus_state )
MCFG_I8255_OUT_PORTB_CB(WRITE8(octopus_state,cntl_w)) MCFG_I8255_OUT_PORTB_CB(WRITE8(octopus_state,cntl_w))
MCFG_I8255_OUT_PORTC_CB(WRITE8(octopus_state,gpo_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(octopus_state,gpo_w))
MCFG_MC146818_ADD("rtc", XTAL_32_768kHz) MCFG_MC146818_ADD("rtc", XTAL_32_768kHz)
MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic_slave",pic8259_device, ir4_w)) MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic_slave",pic8259_device, ir2_w))
// Keyboard UART
MCFG_DEVICE_ADD("keyboard", I8251, 0)
MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE("pic_slave",pic8259_device, ir4_w))
MCFG_I8251_DTR_HANDLER(WRITELINE(octopus_state,spk_w))
MCFG_I8251_RTS_HANDLER(WRITELINE(octopus_state,beep_w))
MCFG_RS232_PORT_ADD("keyboard_port", keyboard, "octopus")
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("keyboard", i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(DEVWRITELINE("keyboard", i8251_device, write_dsr))
MCFG_DEVICE_ADD("keyboard_clock_rx", CLOCK, 9600 * 64)
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("keyboard",i8251_device,write_rxc))
MCFG_DEVICE_ADD("keyboard_clock_tx", CLOCK, 1200 * 64)
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("keyboard",i8251_device,write_txc))
MCFG_FD1793_ADD("fdc",XTAL_16MHz / 8) MCFG_FD1793_ADD("fdc",XTAL_16MHz / 8)
MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("pic_master",pic8259_device, ir5_w)) MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("pic_master",pic8259_device, ir5_w))
MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("dma2",am9517a_device, dreq1_w)) MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("dma2",am9517a_device, dreq1_w))
MCFG_FLOPPY_DRIVE_ADD("fdc:0", octopus_floppies, "525dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:0", octopus_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", octopus_floppies, "525dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", octopus_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_DEVICE_ADD("pit", PIT8253, 0)
MCFG_PIT8253_CLK0(500) // DART channel A
MCFG_PIT8253_CLK1(500) // DART channel B
MCFG_PIT8253_CLK2(2457500) // speaker frequency
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(octopus_state,spk_freq_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
// TODO: add components // TODO: add components
// i8253 PIT timer (speaker output, serial timing, other stuff too?) // i8253 PIT timer (speaker output, serial timing, other stuff too?)
// i8251 serial controller (keyboard)
// Centronics parallel interface // Centronics parallel interface
// Z80SIO/2 (serial) // Z80SIO/2 (serial)
// Winchester HD controller (Xebec/SASI compatible? uses TTL logic) // Winchester HD controller (Xebec/SASI compatible? uses TTL logic)
@ -564,6 +711,16 @@ static MACHINE_CONFIG_START( octopus, octopus_state )
MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(octopus_state, display_pixels) MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(octopus_state, display_pixels)
MCFG_DEVICE_ADDRESS_MAP(AS_0, octopus_vram) MCFG_DEVICE_ADDRESS_MAP(AS_0, octopus_vram)
MCFG_DEVICE_ADD("z80_bank", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(octopus_mem)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000)
MCFG_RAM_ADD("main_ram")
MCFG_RAM_DEFAULT_SIZE("128K")
MCFG_RAM_EXTRA_OPTIONS("256K")
MACHINE_CONFIG_END MACHINE_CONFIG_END
/* ROM definition */ /* ROM definition */

View File

@ -298,6 +298,7 @@ void overdriv_state::machine_start()
save_item(NAME(m_sprite_colorbase)); save_item(NAME(m_sprite_colorbase));
save_item(NAME(m_zoom_colorbase)); save_item(NAME(m_zoom_colorbase));
save_item(NAME(m_road_colorbase)); save_item(NAME(m_road_colorbase));
save_item(NAME(m_fake_timer));
} }
void overdriv_state::machine_reset() void overdriv_state::machine_reset()

View File

@ -591,12 +591,67 @@ void sat_console_state::nvram_init(nvram_device &nvram, void *data, size_t size)
memcpy(data, init, sizeof(init)); memcpy(data, init, sizeof(init));
} }
void saturn_state::debug_scuirq_command(int ref, int params, const char **param)
{
debugger_console con = machine().debugger().console();
const char *const irqnames[16] = {
"VBlank-in", "VBlank-out", "HBlank-in", "Timer 0", "Timer 1", "SCU DSP end", "Sound request", "SMPC", "Pad", "DMA lv 2", "DMA lv 1", "DMA lv 0", "DMA illegal", "VDP1 end", "A-Bus" };
for(int irq_lv = 0;irq_lv<16;irq_lv++)
con.printf("%s irq enabled: %s\n",irqnames[irq_lv],(m_scu.ism & (1 << irq_lv)) == 0 ? "1" : "0");
}
void saturn_state::debug_scudma_command(int ref, int params, const char **param)
{
debugger_console con = machine().debugger().console();
for(int ch=0;ch<3;ch++)
{
con.printf("DMA LV%02d: src = %08x dst = %08x size = %08x\n",ch,m_scu.src[ch],m_scu.dst[ch],m_scu.size[ch]);
con.printf(" adds: src = %08x dst = %08x\n",m_scu.src_add[ch],m_scu.dst_add[ch]);
con.printf("indirect: index = %08x\n",m_scu.index[ch]);
con.printf(" enable: mask = %08x start factor = %08x\n",m_scu.enable_mask[ch],m_scu.start_factor[ch]);
}
}
void saturn_state::debug_help_command(int ref, int params, const char **param)
{
debugger_console con = machine().debugger().console();
con.printf("Available Saturn commands:\n");
con.printf(" saturn scudma -- pretty prints current state of SCU DMA registers\n");
con.printf(" saturn scuirq -- pretty prints current state of SCU IRQ registers\n");
con.printf(" saturn help -- this list\n");
}
void saturn_state::debug_commands(int ref, int params, const char **param)
{
if (params < 1)
return;
if (strcmp("scudma", param[0]) == 0)
debug_scudma_command(ref, params - 1, param + 1);
else if(strcmp("scuirq", param[0]) == 0)
debug_scuirq_command(ref, params - 1, param + 1);
else if(strcmp("help", param[0]) == 0)
debug_help_command(ref, params - 1, param + 1);
}
MACHINE_START_MEMBER(sat_console_state, saturn) MACHINE_START_MEMBER(sat_console_state, saturn)
{ {
system_time systime; system_time systime;
machine().base_datetime(systime); machine().base_datetime(systime);
if (machine().debug_flags & DEBUG_FLAG_ENABLED)
{
//printf("HI!\n");
using namespace std::placeholders;
machine().debugger().console().register_command("saturn", CMDFLAG_NONE, 0, 1, 4, std::bind(&saturn_state::debug_commands, this, _1, _2, _3));
}
machine().device<scsp_device>("scsp")->set_ram_base(m_sound_ram); machine().device<scsp_device>("scsp")->set_ram_base(m_sound_ram);
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x02400000, 0x027fffff, read32_delegate(FUNC(sat_console_state::saturn_null_ram_r),this), write32_delegate(FUNC(sat_console_state::saturn_null_ram_w),this)); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x02400000, 0x027fffff, read32_delegate(FUNC(sat_console_state::saturn_null_ram_r),this), write32_delegate(FUNC(sat_console_state::saturn_null_ram_w),this));

View File

@ -1526,6 +1526,32 @@ ROM_START( nibbler6 ) /* revision 6 */
ROM_LOAD( "g-0959-45.ic53", 0x1000, 0x0800, CRC(33189917) SHA1(01a1b1693db0172609780daeb60430fa0c8bcec2) ) ROM_LOAD( "g-0959-45.ic53", 0x1000, 0x0800, CRC(33189917) SHA1(01a1b1693db0172609780daeb60430fa0c8bcec2) )
ROM_END ROM_END
ROM_START( nibblera ) /* revision ??? */
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "2732.ic12", 0x3000, 0x1000, CRC(e569937b) SHA1(6ee9aa528cc3f0685153b3170f41b9a665d358e0) )
ROM_LOAD( "2732.ic07", 0x4000, 0x1000, CRC(7f9d715c) SHA1(59fbdbb55dceaa86235911589395fa5243e44afe) )
ROM_LOAD( "2732.ic08", 0x5000, 0x1000, CRC(e46eb1c9) SHA1(b70a14085985096eb6650f3d06343a20d75e61b5) )
ROM_LOAD( "2732.ic09", 0x6000, 0x1000, CRC(a599df10) SHA1(68ee8b5199ec24409fcbb40c887a1eec44c68dcf) )
ROM_LOAD( "2732.ic10", 0x7000, 0x1000, BAD_DUMP CRC(746e94cd) SHA1(284696722857900760d35f1f8ef53290deddac20) ) // FIXED BITS (xxx1xxxx)
ROM_LOAD( "2732.ic14", 0x8000, 0x1000, CRC(48ec4af0) SHA1(9b4b80c288d5ade998c0bbcfc3868c9dcd438707) )
ROM_RELOAD( 0xf000, 0x1000 ) /* for the reset and interrupt vectors */
ROM_LOAD( "2732.ic15", 0x9000, 0x1000, CRC(7205fb8d) SHA1(bc341bc11a383aa8b8dd7b2be851907a3ec56f8b) )
ROM_LOAD( "2732.ic16", 0xa000, 0x1000, CRC(4bb39815) SHA1(1755c28d7d300524ab839aedcc744254544e9c19) )
ROM_LOAD( "2732.ic17", 0xb000, 0x1000, CRC(ed680f19) SHA1(b44203585f32ebe2a3bf0597eac7c0faa7e81a92) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "2732.ic50", 0x0000, 0x1000, CRC(01d4d0c2) SHA1(5a8026210a872351ce4e39e27f6479d3ca0689e2) )
ROM_LOAD( "2732.ic51", 0x1000, 0x1000, CRC(feff7faf) SHA1(50005502578a4ea9b9c8f36998670b787d2d0b20) )
ROM_REGION( 0x0040, "proms", 0 )
ROM_LOAD( "g-0708-05.ic7", 0x0000, 0x0020, CRC(a5709ff3) SHA1(fbd07b756235f2d03aea3d777ca741ade54be200) ) /* foreground colors */
ROM_LOAD( "g-0708-04.ic6", 0x0020, 0x0020, CRC(dacd592d) SHA1(c7709c680e2764885a40bc256d07dffc9e827cd6) ) /* background colors */
ROM_REGION( 0x1800, "snk6502", ROMREGION_ERASEFF ) /* sound ROMs */
ROM_LOAD( "2732.ic52", 0x0800, 0x0800, CRC(cabe6c34) SHA1(664ab47555d4c05189d797836f34045f00ac119e) )
ROM_LOAD( "2732.ic53", 0x1000, 0x0800, CRC(33189917) SHA1(01a1b1693db0172609780daeb60430fa0c8bcec2) ) // missing in set
ROM_END
ROM_START( nibblerp ) /* revision 6 + extra soundrom */ ROM_START( nibblerp ) /* revision 6 + extra soundrom */
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ic12", 0x3000, 0x1000, CRC(ac6a802b) SHA1(ac1072e30994f13097663dc24d9d1dc35a95d874) ) ROM_LOAD( "ic12", 0x3000, 0x1000, CRC(ac6a802b) SHA1(ac1072e30994f13097663dc24d9d1dc35a95d874) )
@ -1602,5 +1628,6 @@ GAME( 1982, pballoonr,pballoon, pballoon, pballoon, driver_device, 0, ROT90, "SN
GAME( 1982, nibbler, 0, nibbler, nibbler, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 9)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, nibbler, 0, nibbler, nibbler, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 9)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, nibbler8, nibbler, nibbler, nibbler8, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 8)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, nibbler8, nibbler, nibbler, nibbler8, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 8)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, nibbler6, nibbler, nibbler, nibbler6, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 6)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, nibbler6, nibbler, nibbler, nibbler6, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 6)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, nibblera, nibbler, nibbler, nibbler, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev ?)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, nibblerp, nibbler, nibbler, nibbler6, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (Pioneer Balloon conversion)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, nibblerp, nibbler, nibbler, nibbler6, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (Pioneer Balloon conversion)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, nibblero, nibbler, nibbler, nibbler8, driver_device, 0, ROT90, "Rock-Ola (Olympia license)", "Nibbler (Olympia - rev 8)", MACHINE_SUPPORTS_SAVE ) GAME( 1983, nibblero, nibbler, nibbler, nibbler8, driver_device, 0, ROT90, "Rock-Ola (Olympia license)", "Nibbler (Olympia - rev 8)", MACHINE_SUPPORTS_SAVE )

View File

@ -263,7 +263,7 @@ TODO:
static ADDRESS_MAP_START( cpu1_map, AS_PROGRAM, 8, stfight_state ) static ADDRESS_MAP_START( cpu1_map, AS_PROGRAM, 8, stfight_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") /* sf02.bin */ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank") /* sf02.bin */
AM_RANGE(0xc000, 0xc0ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0xc000, 0xc0ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0xc100, 0xc1ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext") AM_RANGE(0xc100, 0xc1ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
AM_RANGE(0xc200, 0xc200) AM_READ_PORT("P1") AM_RANGE(0xc200, 0xc200) AM_READ_PORT("P1")

View File

@ -1266,7 +1266,7 @@ static INPUT_PORTS_START( superqix )
PORT_DIPSETTING( 0x40, "80%" ) PORT_DIPSETTING( 0x40, "80%" )
PORT_DIPSETTING( 0x00, "85%" ) PORT_DIPSETTING( 0x00, "85%" )
PORT_START("SYSTEM") PORT_START("SYSTEM") /* Port 0 of MCU, might also be readable by z80 at io 0x0418 (nmi ack read port) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
@ -1274,8 +1274,13 @@ static INPUT_PORTS_START( superqix )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) // doesn't work in bootleg PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) // doesn't work in bootleg
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */
/* The bits 0xc0 above is known to be WRONG from tracing:
bit 6 connects to whatever bit 7 is connected to on AY-3-8910 #1 @3P Port A
bit 7 connects to whatever bit 7 is connected to on AY-3-8910 #1 @3P Port B
however what those ay bits actually each connect to (semaphores? service button?) is currently unknown
*/
PORT_START("P1") PORT_START("P1") /* AY-3-8910 #1 @3P Port A */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
@ -1285,7 +1290,7 @@ static INPUT_PORTS_START( superqix )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") /* ??? */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") /* ??? */
PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
PORT_START("P2") PORT_START("P2") /* AY-3-8910 #1 @3P Port B */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
@ -1405,12 +1410,12 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( sqix, superqix_state ) static MACHINE_CONFIG_START( sqix, superqix_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 12000000/2) /* 6 MHz */ MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz/2) /* 6 MHz */
MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(sqix_port_map) MCFG_CPU_IO_MAP(sqix_port_map)
MCFG_CPU_PERIODIC_INT_DRIVER(superqix_state, sqix_timer_irq, 4*60) /* ??? */ MCFG_CPU_PERIODIC_INT_DRIVER(superqix_state, sqix_timer_irq, 4*60) /* ??? */
MCFG_CPU_ADD("mcu", I8751, 12000000/3) /* ??? */ MCFG_CPU_ADD("mcu", I8751, XTAL_12MHz/3) /* TODO: VERIFY DIVISOR, is this 3mhz or 4mhz? */
MCFG_CPU_IO_MAP(sqix_mcu_io_map) MCFG_CPU_IO_MAP(sqix_mcu_io_map)
MCFG_QUANTUM_PERFECT_CPU("maincpu") MCFG_QUANTUM_PERFECT_CPU("maincpu")
@ -1435,12 +1440,14 @@ static MACHINE_CONFIG_START( sqix, superqix_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ay1", AY8910, 12000000/8) MCFG_SOUND_ADD("ay1", AY8910, XTAL_12MHz/8) // AY-3-8910 @3P, outputs directly tied together
MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_READ_CB(IOPORT("P1")) MCFG_AY8910_PORT_A_READ_CB(IOPORT("P1"))
MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, in4_mcu_r)) /* port Bread */ MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, in4_mcu_r)) /* port Bread */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_SOUND_ADD("ay2", AY8910, 12000000/8) MCFG_SOUND_ADD("ay2", AY8910, XTAL_12MHz/8) // AY-3-8910 @3M, outputs directly tied together
MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW2")) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW2"))
MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, sqix_from_mcu_r)) /* port Bread */ MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, sqix_from_mcu_r)) /* port Bread */
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(superqix_state,sqix_z80_mcu_w)) /* port Bwrite */ MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(superqix_state,sqix_z80_mcu_w)) /* port Bwrite */
@ -1483,11 +1490,13 @@ static MACHINE_CONFIG_START( sqix_nomcu, superqix_state )
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ay1", AY8910, 12000000/8) MCFG_SOUND_ADD("ay1", AY8910, 12000000/8)
MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT) // ?
MCFG_AY8910_PORT_A_READ_CB(IOPORT("P1")) MCFG_AY8910_PORT_A_READ_CB(IOPORT("P1"))
MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, in4_mcu_r)) MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, in4_mcu_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_SOUND_ADD("ay2", AY8910, 12000000/8) MCFG_SOUND_ADD("ay2", AY8910, 12000000/8)
MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT) // ?
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW2")) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW2"))
MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, bootleg_in0_r)) /* port Bread */ MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, bootleg_in0_r)) /* port Bread */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)

View File

@ -517,9 +517,6 @@ READ16_MEMBER(taitogn_state::hack1_r)
// Lifted from zn.c // Lifted from zn.c
static const UINT8 tt10[ 8 ] = { 0x80, 0x20, 0x38, 0x08, 0xf1, 0x03, 0xfe, 0xfc };
static const UINT8 tt16[ 8 ] = { 0xc0, 0x04, 0xf9, 0xe1, 0x60, 0x70, 0xf2, 0x02 };
READ8_MEMBER(taitogn_state::znsecsel_r) READ8_MEMBER(taitogn_state::znsecsel_r)
{ {
return m_n_znsecsel; return m_n_znsecsel;
@ -671,18 +668,16 @@ static MACHINE_CONFIG_START( coh3002t, taitogn_state )
MCFG_DEVICE_ADD("cat702_1", CAT702, 0) MCFG_DEVICE_ADD("cat702_1", CAT702, 0)
MCFG_CAT702_DATAOUT_HANDLER(WRITELINE(taitogn_state, cat702_1_dataout)) MCFG_CAT702_DATAOUT_HANDLER(WRITELINE(taitogn_state, cat702_1_dataout))
MCFG_CAT702_TRANSFORM_TABLE(tt10)
MCFG_DEVICE_ADD("cat702_2", CAT702, 0) MCFG_DEVICE_ADD("cat702_2", CAT702, 0)
MCFG_CAT702_DATAOUT_HANDLER(WRITELINE(taitogn_state, cat702_2_dataout)) MCFG_CAT702_DATAOUT_HANDLER(WRITELINE(taitogn_state, cat702_2_dataout))
MCFG_CAT702_TRANSFORM_TABLE(tt16)
MCFG_DEVICE_ADD("zndip", ZNDIP, 0) MCFG_DEVICE_ADD("zndip", ZNDIP, 0)
MCFG_ZNDIP_DATAOUT_HANDLER(WRITELINE(taitogn_state, zndip_dataout)) MCFG_ZNDIP_DATAOUT_HANDLER(WRITELINE(taitogn_state, zndip_dataout))
MCFG_ZNDIP_DSR_HANDLER(DEVWRITELINE("maincpu:sio0", psxsio0_device, write_dsr)) MCFG_ZNDIP_DSR_HANDLER(DEVWRITELINE("maincpu:sio0", psxsio0_device, write_dsr))
MCFG_ZNDIP_DATA_HANDLER(IOPORT(":DSW")) MCFG_ZNDIP_DATA_HANDLER(IOPORT(":DSW"))
MCFG_AT28C16_ADD( "at28c16", 0 ) MCFG_DEVICE_ADD("at28c16", AT28C16, 0)
MCFG_DEVICE_ADD("rf5c296", RF5C296, 0) MCFG_DEVICE_ADD("rf5c296", RF5C296, 0)
MCFG_RF5C296_SLOT(":pccard") MCFG_RF5C296_SLOT(":pccard")
@ -849,7 +844,11 @@ INPUT_PORTS_END
#define TAITOGNET_BIOS \ #define TAITOGNET_BIOS \
ROM_REGION32_LE( 0x080000, "maincpu:rom", 0 ) \ ROM_REGION32_LE( 0x080000, "maincpu:rom", 0 ) \
ROM_LOAD( "coh-3002t.353", 0x000000, 0x080000, CRC(03967fa7) SHA1(0e17fec2286e4e25deb23d40e41ce0986f373d49) ) \ ROM_LOAD( "m534002c-60.ic353", 0x000000, 0x080000, CRC(03967fa7) SHA1(0e17fec2286e4e25deb23d40e41ce0986f373d49) ) \
ROM_REGION( 0x8, "cat702_1", 0) \
ROM_LOAD( "tt10.ic652", 0x000000, 0x000008, CRC(235510b1) SHA1(2cc02113207a8f0b078152d31ce6503411750e70) ) \
ROM_REGION( 0x8, "cat702_2", 0) \
ROM_LOAD( "tt16", 0x000000, 0x000008, CRC(6bb167b3) SHA1(9dcba08f10775a9adf2b1f382c947460edd3d239) ) \
ROM_REGION( 0x2000, "mcu", 0 ) \ ROM_REGION( 0x2000, "mcu", 0 ) \
ROM_LOAD( "upd78081.655", 0x0000, 0x2000, NO_DUMP ) /* internal rom :( */ \ ROM_LOAD( "upd78081.655", 0x0000, 0x2000, NO_DUMP ) /* internal rom :( */ \
ROM_REGION16_BE( 0x200000, "biosflash", 0 ) \ ROM_REGION16_BE( 0x200000, "biosflash", 0 ) \
@ -862,7 +861,7 @@ INPUT_PORTS_END
ROM_REGION32_LE( 0x600000, "zsg2", 0) \ ROM_REGION32_LE( 0x600000, "zsg2", 0) \
ROM_FILL( 0, 0x600000, 0xff) ROM_FILL( 0, 0x600000, 0xff)
ROM_START( taitogn ) ROM_START( coh3002t )
TAITOGNET_BIOS TAITOGNET_BIOS
ROM_END ROM_END
@ -1073,35 +1072,35 @@ ROM_END
/* A dummy driver, so that the bios can be debugged, and to serve as */ /* A dummy driver, so that the bios can be debugged, and to serve as */
/* parent for the coh-3002t.353 file, so that we do not have to include */ /* parent for the coh-3002t.353 file, so that we do not have to include */
/* it in every zip file */ /* it in every zip file */
GAME( 1997, taitogn, 0, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Taito GNET", MACHINE_IS_BIOS_ROOT ) GAME( 1997, coh3002t, 0, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Taito GNET", MACHINE_IS_BIOS_ROOT )
GAME( 1998, chaoshea, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Chaos Heat (V2.09O)", MACHINE_IMPERFECT_SOUND ) GAME( 1998, chaoshea, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Chaos Heat (V2.09O)", MACHINE_IMPERFECT_SOUND )
GAME( 1998, chaosheaj,chaoshea, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Chaos Heat (V2.08J)", MACHINE_IMPERFECT_SOUND ) GAME( 1998, chaosheaj,chaoshea, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Chaos Heat (V2.08J)", MACHINE_IMPERFECT_SOUND )
GAME( 1998, raycris, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Ray Crisis (V2.03J)", MACHINE_IMPERFECT_SOUND ) GAME( 1998, raycris, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Ray Crisis (V2.03J)", MACHINE_IMPERFECT_SOUND )
GAME( 1999, spuzbobl, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Super Puzzle Bobble (V2.05O)", MACHINE_IMPERFECT_SOUND ) GAME( 1999, spuzbobl, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Super Puzzle Bobble (V2.05O)", MACHINE_IMPERFECT_SOUND )
GAME( 1999, spuzboblj,spuzbobl, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Super Puzzle Bobble (V2.04J)", MACHINE_IMPERFECT_SOUND ) GAME( 1999, spuzboblj,spuzbobl, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Super Puzzle Bobble (V2.04J)", MACHINE_IMPERFECT_SOUND )
GAME( 1999, gobyrc, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Go By RC (V2.03O)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // analog controls, needs mcu emulation GAME( 1999, gobyrc, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Go By RC (V2.03O)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // analog controls, needs mcu emulation
GAME( 1999, rcdego, gobyrc, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "RC De Go (V2.03J)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // " GAME( 1999, rcdego, gobyrc, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "RC De Go (V2.03J)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // "
GAME( 1999, flipmaze, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "MOSS / Taito", "Flip Maze (V2.04J)", MACHINE_IMPERFECT_SOUND ) GAME( 1999, flipmaze, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "MOSS / Taito", "Flip Maze (V2.04J)", MACHINE_IMPERFECT_SOUND )
GAME( 2001, shikigam, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Alfa System / Taito", "Shikigami no Shiro (V2.03J)", MACHINE_IMPERFECT_SOUND ) GAME( 2001, shikigam, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT270, "Alfa System / Taito", "Shikigami no Shiro (V2.03J)", MACHINE_IMPERFECT_SOUND )
GAME( 2003, sianniv, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Taito", "Space Invaders Anniversary (V2.02J)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // IRQ at the wrong time GAME( 2003, sianniv, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT270, "Taito", "Space Invaders Anniversary (V2.02J)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // IRQ at the wrong time
GAME( 2003, kollon, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Kollon (V2.04J)", MACHINE_IMPERFECT_SOUND ) GAME( 2003, kollon, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Kollon (V2.04J)", MACHINE_IMPERFECT_SOUND )
GAME( 2003, kollonc, kollon, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Kollon (V2.04JC)", MACHINE_IMPERFECT_SOUND ) GAME( 2003, kollonc, kollon, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Kollon (V2.04JC)", MACHINE_IMPERFECT_SOUND )
GAME( 1999, otenamih, taitogn, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success", "Otenami Haiken (V2.04J)", 0 ) GAME( 1999, otenamih, coh3002t, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success", "Otenami Haiken (V2.04J)", 0 )
GAME( 2005, otenamhf, taitogn, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success / Warashi", "Otenami Haiken Final (V2.07JC)", 0 ) GAME( 2005, otenamhf, coh3002t, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success / Warashi", "Otenami Haiken Final (V2.07JC)", 0 )
GAME( 2000, psyvaria, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Success", "Psyvariar -Medium Unit- (V2.04J)", MACHINE_IMPERFECT_SOUND ) GAME( 2000, psyvaria, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT270, "Success", "Psyvariar -Medium Unit- (V2.04J)", MACHINE_IMPERFECT_SOUND )
GAME( 2000, psyvarrv, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Success", "Psyvariar -Revision- (V2.04J)", MACHINE_IMPERFECT_SOUND ) GAME( 2000, psyvarrv, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT270, "Success", "Psyvariar -Revision- (V2.04J)", MACHINE_IMPERFECT_SOUND )
GAME( 2000, zokuoten, taitogn, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success", "Zoku Otenamihaiken (V2.03J)", 0 ) // boots the soundcpu without any valid code, causing an infinite NMI loop (currently circumvented) GAME( 2000, zokuoten, coh3002t, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success", "Zoku Otenamihaiken (V2.03J)", 0 ) // boots the soundcpu without any valid code, causing an infinite NMI loop (currently circumvented)
GAME( 2004, zooo, taitogn, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success", "Zooo (V2.01J)", 0 ) GAME( 2004, zooo, coh3002t, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success", "Zooo (V2.01J)", 0 )
GAME( 1999, mahjngoh, taitogn, coh3002t_mp, coh3002t_mp, driver_device, 0, ROT0, "Warashi / Mahjong Kobo / Taito", "Mahjong Oh (V2.06J)", MACHINE_IMPERFECT_SOUND ) GAME( 1999, mahjngoh, coh3002t, coh3002t_mp, coh3002t_mp, driver_device, 0, ROT0, "Warashi / Mahjong Kobo / Taito", "Mahjong Oh (V2.06J)", MACHINE_IMPERFECT_SOUND )
GAME( 2001, usagi, taitogn, coh3002t_mp, coh3002t_mp, driver_device, 0, ROT0, "Warashi / Mahjong Kobo / Taito", "Usagi (V2.02J)", MACHINE_IMPERFECT_SOUND ) GAME( 2001, usagi, coh3002t, coh3002t_mp, coh3002t_mp, driver_device, 0, ROT0, "Warashi / Mahjong Kobo / Taito", "Usagi (V2.02J)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // missing transparencies, see MT #06258
GAME( 2000, soutenry, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi", "Soutenryu (V2.07J)", MACHINE_IMPERFECT_SOUND ) GAME( 2000, soutenry, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi", "Soutenryu (V2.07J)", MACHINE_IMPERFECT_SOUND )
GAME( 2000, shanghss, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi", "Shanghai Shoryu Sairin (V2.03J)", MACHINE_IMPERFECT_SOUND ) GAME( 2000, shanghss, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi", "Shanghai Shoryu Sairin (V2.03J)", MACHINE_IMPERFECT_SOUND )
GAME( 2002, shangtou, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi / Sunsoft / Taito", "Shanghai Sangokuhai Tougi (Ver 2.01J)", MACHINE_IMPERFECT_SOUND ) GAME( 2002, shangtou, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi / Sunsoft / Taito", "Shanghai Sangokuhai Tougi (Ver 2.01J)", MACHINE_IMPERFECT_SOUND )
GAME( 2001, nightrai, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Takumi", "Night Raid (V2.03J)", MACHINE_IMPERFECT_SOUND ) GAME( 2001, nightrai, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Takumi", "Night Raid (V2.03J)", MACHINE_IMPERFECT_SOUND )
GAME( 2001, otenki, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Takumi", "Otenki Kororin (V2.01J)", MACHINE_IMPERFECT_SOUND ) GAME( 2001, otenki, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Takumi", "Otenki Kororin (V2.01J)", MACHINE_IMPERFECT_SOUND )
GAME( 2002, xiistag, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Triangle Service", "XII Stag (V2.01J)", MACHINE_IMPERFECT_SOUND ) GAME( 2002, xiistag, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT270, "Triangle Service", "XII Stag (V2.01J)", MACHINE_IMPERFECT_SOUND )

View File

@ -175,14 +175,21 @@ TODO:
WRITE8_MEMBER(taitosj_state::taitosj_sndnmi_msk_w) WRITE8_MEMBER(taitosj_state::taitosj_sndnmi_msk_w)
{ {
m_sndnmi_disable = data & 0x01; m_sndnmi_disable = (data & 1);
if ((m_sound_cmd_written && (!m_sndnmi_disable)) || m_sound_semaphore)
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
else
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
} }
WRITE8_MEMBER(taitosj_state::sound_command_w) WRITE8_MEMBER(taitosj_state::sound_command_w)
{ {
m_sound_cmd_ack = true; m_sound_cmd_written = true;
m_soundlatch->write(space,0,data); m_soundlatch->write(space,0,data);
if (!m_sndnmi_disable) m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); if ((m_sound_cmd_written && (!m_sndnmi_disable)) || m_sound_semaphore)
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
else
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
} }
@ -192,9 +199,13 @@ WRITE8_MEMBER(taitosj_state::input_port_4_f0_w)
} }
// EPORT2 // EPORT2
WRITE8_MEMBER(taitosj_state::sound_semaphore_assert_w) WRITE8_MEMBER(taitosj_state::sound_semaphore_w)
{ {
m_sound_semaphore = (data & 1) == 1; m_sound_semaphore = (data & 1);
if ((m_sound_cmd_written && (!m_sndnmi_disable)) || m_sound_semaphore)
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
else
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
} }
CUSTOM_INPUT_MEMBER(taitosj_state::input_port_4_f0_r) CUSTOM_INPUT_MEMBER(taitosj_state::input_port_4_f0_r)
@ -233,7 +244,7 @@ static ADDRESS_MAP_START( taitosj_main_nomcu_map, AS_PROGRAM, 8, taitosj_state )
AM_RANGE(0xd508, 0xd508) AM_MIRROR(0x00f0) AM_WRITE(taitosj_collision_reg_clear_w) AM_RANGE(0xd508, 0xd508) AM_MIRROR(0x00f0) AM_WRITE(taitosj_collision_reg_clear_w)
AM_RANGE(0xd509, 0xd50a) AM_MIRROR(0x00f0) AM_WRITEONLY AM_SHARE("gfxpointer") AM_RANGE(0xd509, 0xd50a) AM_MIRROR(0x00f0) AM_WRITEONLY AM_SHARE("gfxpointer")
AM_RANGE(0xd50b, 0xd50b) AM_MIRROR(0x00f0) AM_WRITE(sound_command_w) AM_RANGE(0xd50b, 0xd50b) AM_MIRROR(0x00f0) AM_WRITE(sound_command_w)
AM_RANGE(0xd50c, 0xd50c) AM_MIRROR(0x00f0) AM_WRITE(sound_semaphore_assert_w) AM_RANGE(0xd50c, 0xd50c) AM_MIRROR(0x00f0) AM_WRITE(sound_semaphore_w)
AM_RANGE(0xd50d, 0xd50d) AM_MIRROR(0x00f0) AM_WRITEONLY /*watchdog_reset_w*/ /* Bio Attack sometimes resets after you die */ AM_RANGE(0xd50d, 0xd50d) AM_MIRROR(0x00f0) AM_WRITEONLY /*watchdog_reset_w*/ /* Bio Attack sometimes resets after you die */
AM_RANGE(0xd50e, 0xd50e) AM_MIRROR(0x00f0) AM_WRITE(taitosj_bankswitch_w) AM_RANGE(0xd50e, 0xd50e) AM_MIRROR(0x00f0) AM_WRITE(taitosj_bankswitch_w)
AM_RANGE(0xd50f, 0xd50f) AM_MIRROR(0x00f0) AM_WRITENOP AM_RANGE(0xd50f, 0xd50f) AM_MIRROR(0x00f0) AM_WRITENOP
@ -305,7 +316,7 @@ static ADDRESS_MAP_START( kikstart_main_map, AS_PROGRAM, 8, taitosj_state )
AM_RANGE(0xd508, 0xd508) AM_WRITE(taitosj_collision_reg_clear_w) AM_RANGE(0xd508, 0xd508) AM_WRITE(taitosj_collision_reg_clear_w)
AM_RANGE(0xd509, 0xd50a) AM_WRITEONLY AM_SHARE("gfxpointer") AM_RANGE(0xd509, 0xd50a) AM_WRITEONLY AM_SHARE("gfxpointer")
AM_RANGE(0xd50b, 0xd50b) AM_WRITE(sound_command_w) AM_RANGE(0xd50b, 0xd50b) AM_WRITE(sound_command_w)
AM_RANGE(0xd50c, 0xd50c) AM_WRITE(sound_semaphore_assert_w) AM_RANGE(0xd50c, 0xd50c) AM_WRITE(sound_semaphore_w)
AM_RANGE(0xd50d, 0xd50d) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0xd50d, 0xd50d) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xd50e, 0xd50e) AM_WRITE(taitosj_bankswitch_w) AM_RANGE(0xd50e, 0xd50e) AM_WRITE(taitosj_bankswitch_w)
AM_RANGE(0xd600, 0xd600) AM_WRITEONLY AM_SHARE("video_mode") AM_RANGE(0xd600, 0xd600) AM_WRITEONLY AM_SHARE("video_mode")
@ -316,14 +327,14 @@ ADDRESS_MAP_END
// RD5000 // RD5000
READ8_MEMBER(taitosj_state::sound_command_r) READ8_MEMBER(taitosj_state::sound_command_r)
{ {
m_sound_cmd_ack = false; m_sound_cmd_written = false;
return m_soundlatch->read(space,0); return m_soundlatch->read(space,0);
} }
// RD5001 // RD5001
READ8_MEMBER(taitosj_state::sound_status_r) READ8_MEMBER(taitosj_state::sound_status_r)
{ {
return (m_sound_cmd_ack == true ? 8 : 0) | (m_sound_semaphore == true ? 4 : 0) | 3; return (m_sound_cmd_written == true ? 8 : 0) | (m_sound_semaphore == true ? 4 : 0) | 3;
} }
// WR5000 // WR5000
@ -336,6 +347,10 @@ WRITE8_MEMBER(taitosj_state::sound_command_ack_w)
WRITE8_MEMBER(taitosj_state::sound_semaphore_clear_w) WRITE8_MEMBER(taitosj_state::sound_semaphore_clear_w)
{ {
m_sound_semaphore = false; m_sound_semaphore = false;
if ((m_sound_cmd_written && (!m_sndnmi_disable)) || m_sound_semaphore)
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
else
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
} }
@ -1749,17 +1764,17 @@ WRITE8_MEMBER(taitosj_state::dac_vol_w)
static MACHINE_CONFIG_START( nomcu, taitosj_state ) static MACHINE_CONFIG_START( nomcu, taitosj_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80,8000000/2) /* 4 MHz */ MCFG_CPU_ADD("maincpu",Z80,XTAL_8MHz/2) /* 8 MHz / 2, on CPU board */
MCFG_CPU_PROGRAM_MAP(taitosj_main_nomcu_map) MCFG_CPU_PROGRAM_MAP(taitosj_main_nomcu_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", taitosj_state, irq0_line_hold) MCFG_CPU_VBLANK_INT_DRIVER("screen", taitosj_state, irq0_line_hold)
MCFG_CPU_ADD("audiocpu", Z80,6000000/2) /* 3 MHz */ MCFG_CPU_ADD("audiocpu", Z80,XTAL_6MHz/2) /* 6 MHz / 2, on GAME board */
MCFG_CPU_PROGRAM_MAP(taitosj_audio_map) MCFG_CPU_PROGRAM_MAP(taitosj_audio_map)
/* interrupts: */ /* interrupts: */
/* - no interrupts synced with vblank */ /* - no interrupts synced with vblank */
/* - NMI triggered by the main CPU */ /* - NMI triggered by the main CPU */
/* - periodic IRQ, with frequency 6000000/(4*16*16*10*16) = 36.621 Hz, */ /* - periodic IRQ, with frequency 6000000/(4*16*16*10*16) = 36.621 Hz, */
MCFG_CPU_PERIODIC_INT_DRIVER(taitosj_state, irq0_line_hold, (double)6000000/(4*16*16*10*16)) MCFG_CPU_PERIODIC_INT_DRIVER(taitosj_state, irq0_line_hold, (double)XTAL_6MHz/(4*16*16*10*16))
/* video hardware */ /* video hardware */
@ -1780,21 +1795,30 @@ static MACHINE_CONFIG_START( nomcu, taitosj_state )
MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_SOUND_ADD("ay1", AY8910, 6000000/4) MCFG_SOUND_ADD("ay1", AY8910, XTAL_6MHz/4) // 6mhz/4 on GAME board, AY-3-8910 @ IC53 (this is the only AY which uses proper mixing resistors, the 3 below have outputs tied together)
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW2")) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW2"))
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW3")) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW3"))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
MCFG_SOUND_ADD("ay2", AY8910, 6000000/4) MCFG_SOUND_ADD("ay2", AY8910, XTAL_6MHz/4) // 6mhz/4 on GAME board, AY-3-8910 @ IC51
MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitosj_state, dac_out_w)) /* port Awrite */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitosj_state, dac_out_w)) /* port Awrite */
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(taitosj_state, dac_vol_w)) /* port Bwrite */ MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(taitosj_state, dac_vol_w)) /* port Bwrite */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
MCFG_SOUND_ADD("ay3", AY8910, 6000000/4) MCFG_SOUND_ADD("ay3", AY8910, XTAL_6MHz/4) // 6mhz/4 on GAME board, AY-3-8910 @ IC49
MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitosj_state, input_port_4_f0_w)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitosj_state, input_port_4_f0_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
MCFG_SOUND_ADD("ay4", AY8910, 6000000/4) MCFG_SOUND_ADD("ay4", AY8910, XTAL_6MHz/4) // 6mhz/4 on GAME board, AY-3-8910 @ IC50
MCFG_AY8910_OUTPUT_TYPE(AY8910_SINGLE_OUTPUT)
/* TODO: Implement ay4 Port A bits 0 and 1 which connect to a 7416 open
collector inverter, to selectively tie none, either or both of two
capacitors between the ay4 audio output signal and ground, or between
audio output signal and high-z (i.e. do nothing).
Bio Attack uses this?
*/
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(taitosj_state, taitosj_sndnmi_msk_w)) /* port Bwrite */ MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(taitosj_state, taitosj_sndnmi_msk_w)) /* port Bwrite */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
@ -1810,7 +1834,7 @@ static MACHINE_CONFIG_DERIVED( mcu, nomcu )
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(taitosj_main_mcu_map) MCFG_CPU_PROGRAM_MAP(taitosj_main_mcu_map)
MCFG_CPU_ADD("mcu", M68705,3000000) /* xtal is 3MHz, divided by 4 internally */ MCFG_CPU_ADD("mcu", M68705,XTAL_3MHz) /* xtal is 3MHz, divided by 4 internally */
MCFG_CPU_PROGRAM_MAP(taitosj_mcu_map) MCFG_CPU_PROGRAM_MAP(taitosj_mcu_map)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) MCFG_QUANTUM_TIME(attotime::from_hz(6000))
@ -2700,7 +2724,8 @@ ROM_END
void taitosj_state::reset_common() void taitosj_state::reset_common()
{ {
m_sndnmi_disable = 1; m_sndnmi_disable = false; // ay-3-8910 resets all registers to 0 on reset
m_sound_semaphore = false;
m_input_port_4_f0 = 0; m_input_port_4_f0 = 0;
/* start in 1st gear */ /* start in 1st gear */
m_kikstart_gears[0] = 0x02; m_kikstart_gears[0] = 0x02;
@ -2712,6 +2737,8 @@ void taitosj_state::reset_common()
void taitosj_state::init_common() void taitosj_state::init_common()
{ {
save_item(NAME(m_sndnmi_disable)); save_item(NAME(m_sndnmi_disable));
save_item(NAME(m_sound_cmd_written));
save_item(NAME(m_sound_semaphore));
save_item(NAME(m_input_port_4_f0)); save_item(NAME(m_input_port_4_f0));
save_item(NAME(m_kikstart_gears)); save_item(NAME(m_kikstart_gears));
save_item(NAME(m_dac_out)); save_item(NAME(m_dac_out));

View File

@ -24,6 +24,7 @@
* Ankoku Densetu (Legendary Axe II) * Ankoku Densetu (Legendary Axe II)
Armed-F (?) Armed-F (?)
Ballistix (186) Ballistix (186)
Barunba (39)
* Batman * Batman
Be Ball (93) Be Ball (93)
* Blodia * Blodia
@ -64,7 +65,7 @@
Kato & Ken (42) Kato & Ken (42)
Kiki Kaikai (120) Kiki Kaikai (120)
Legend Of Hero Tomna (56) Legend Of Hero Tomna (56)
Makyo Densetsu - The Legenary Axe (?) Makyo Densetsu - The Legenary Axe (40)
Mesopotamia (197) Mesopotamia (197)
Mizubaku Daibouken Liquid Kids (10) (marketed as "Parasol Stars II") Mizubaku Daibouken Liquid Kids (10) (marketed as "Parasol Stars II")
Mr. Heli (23) Mr. Heli (23)
@ -83,6 +84,7 @@
* Power Golf * Power Golf
Power League IV (?) Power League IV (?)
Power Sports (199) Power Sports (199)
Power Tennis (183)
Pro Yakyuu World Stadium '91 (192) Pro Yakyuu World Stadium '91 (192)
Psycho Chaser (14) Psycho Chaser (14)
Puzzle Boy (57) Puzzle Boy (57)
@ -106,7 +108,7 @@
Tatsujin (31) Tatsujin (31)
Terra Cresta II (27) Terra Cresta II (27)
The NewZealand Story (11) The NewZealand Story (11)
Thunder Blade (?) Thunder Blade (34)
* Tiger Road * Tiger Road
* Titan * Titan
Toy Shop Boys (51) Toy Shop Boys (51)

View File

@ -12,10 +12,14 @@ public:
vis_state(const machine_config &mconfig, device_type type, const char *tag) vis_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_mb(*this, "mb") m_mb(*this, "mb"),
m_pic1(*this, "mb:pic8259_slave"),
m_vga(*this, "vga")
{ } { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<at_mb_device> m_mb; required_device<at_mb_device> m_mb;
required_device<pic8259_device> m_pic1;
required_device<vga_device> m_vga;
DECLARE_READ8_MEMBER(sysctl_r); DECLARE_READ8_MEMBER(sysctl_r);
DECLARE_WRITE8_MEMBER(sysctl_w); DECLARE_WRITE8_MEMBER(sysctl_w);
@ -23,24 +27,27 @@ public:
DECLARE_WRITE8_MEMBER(unk_w); DECLARE_WRITE8_MEMBER(unk_w);
DECLARE_READ8_MEMBER(unk2_r); DECLARE_READ8_MEMBER(unk2_r);
DECLARE_READ8_MEMBER(unk3_r); DECLARE_READ8_MEMBER(unk3_r);
DECLARE_READ8_MEMBER(cdrom_r); DECLARE_READ8_MEMBER(pad_r);
DECLARE_WRITE8_MEMBER(cdrom_w); DECLARE_WRITE8_MEMBER(pad_w);
DECLARE_READ8_MEMBER(vga_r);
DECLARE_WRITE8_MEMBER(vga_w);
protected: protected:
void machine_reset() override; void machine_reset() override;
private: private:
UINT8 m_sysctl; UINT8 m_sysctl;
UINT8 m_unkidx; UINT8 m_unkidx;
UINT8 m_unk[16]; UINT8 m_unk[16];
UINT8 m_cdcmd, m_cdstat; UINT8 m_pad[4];
UINT8 m_crtcidx;
UINT8 m_gfxidx;
}; };
void vis_state::machine_reset() void vis_state::machine_reset()
{ {
m_cdcmd = 0;
m_cdstat = 0;
m_sysctl = 0; m_sysctl = 0;
} }
//chipset registers?
READ8_MEMBER(vis_state::unk_r) READ8_MEMBER(vis_state::unk_r)
{ {
if(offset) if(offset)
@ -61,11 +68,71 @@ READ8_MEMBER(vis_state::unk2_r)
return 0x40; return 0x40;
} }
//memory card reader?
READ8_MEMBER(vis_state::unk3_r) READ8_MEMBER(vis_state::unk3_r)
{ {
return 0x00; return 0x00;
} }
READ8_MEMBER(vis_state::pad_r)
{
if(offset == 2)
return 0xde;
return 0;
}
WRITE8_MEMBER(vis_state::pad_w)
{
switch(offset)
{
case 1:
if(data == 0x10)
m_pic1->ir1_w(CLEAR_LINE);
else if(data == 0x16)
m_pic1->ir1_w(ASSERT_LINE);
}
m_pad[offset] = data;
}
READ8_MEMBER(vis_state::vga_r)
{
if(offset < 0x10)
return m_vga->port_03b0_r(space, offset, mem_mask);
else if(offset < 0x20)
return m_vga->port_03c0_r(space, offset - 0x10, mem_mask);
else
return m_vga->port_03d0_r(space, offset - 0x20, mem_mask);
}
WRITE8_MEMBER(vis_state::vga_w)
{
switch(offset)
{
case 0x1e:
m_gfxidx = data;
break;
case 0x1f:
if(m_gfxidx == 0x05)
data |= 0x40;
break;
case 0x04:
case 0x24:
m_crtcidx = data;
break;
case 0x05:
case 0x25:
if(m_crtcidx == 0x14)
data |= 0x40;
break;
}
if(offset < 0x10)
m_vga->port_03b0_w(space, offset, data, mem_mask);
else if(offset < 0x20)
m_vga->port_03c0_w(space, offset - 0x10, data, mem_mask);
else
m_vga->port_03d0_w(space, offset - 0x20, data, mem_mask);
}
READ8_MEMBER(vis_state::sysctl_r) READ8_MEMBER(vis_state::sysctl_r)
{ {
return m_sysctl; return m_sysctl;
@ -82,8 +149,10 @@ WRITE8_MEMBER(vis_state::sysctl_w)
static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, vis_state ) static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, vis_state )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x09ffff) AM_RAM AM_RANGE(0x000000, 0x09ffff) AM_RAM
AM_RANGE(0x0a0000, 0x0bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffff)
AM_RANGE(0x0d8000, 0x0fffff) AM_ROM AM_REGION("bios", 0xd8000) AM_RANGE(0x0d8000, 0x0fffff) AM_ROM AM_REGION("bios", 0xd8000)
AM_RANGE(0x100000, 0x15ffff) AM_RAM AM_RANGE(0x100000, 0x15ffff) AM_RAM
AM_RANGE(0x300000, 0x3fffff) AM_ROM AM_REGION("bios", 0)
AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("bios", 0xf0000) AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("bios", 0xf0000)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -93,7 +162,9 @@ static ADDRESS_MAP_START( at16_io, AS_IO, 16, vis_state )
AM_RANGE(0x006a, 0x006b) AM_READ8(unk2_r, 0x00ff) AM_RANGE(0x006a, 0x006b) AM_READ8(unk2_r, 0x00ff)
AM_RANGE(0x0092, 0x0093) AM_READWRITE8(sysctl_r, sysctl_w, 0x00ff) AM_RANGE(0x0092, 0x0093) AM_READWRITE8(sysctl_r, sysctl_w, 0x00ff)
AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map) AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map)
AM_RANGE(0x023c, 0x023f) AM_READWRITE8(pad_r, pad_w, 0xffff)
AM_RANGE(0x031a, 0x031b) AM_READ8(unk3_r, 0x00ff) AM_RANGE(0x031a, 0x031b) AM_READ8(unk3_r, 0x00ff)
AM_RANGE(0x03b0, 0x03df) AM_READWRITE8(vga_r, vga_w, 0xffff)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_START( vis, vis_state ) static MACHINE_CONFIG_START( vis, vis_state )
@ -106,8 +177,8 @@ static MACHINE_CONFIG_START( vis, vis_state )
MCFG_DEVICE_ADD("mb", AT_MB, 0) MCFG_DEVICE_ADD("mb", AT_MB, 0)
MCFG_ISA16_SLOT_ADD("mb:isabus","vga", pc_isa16_cards, "clgd542x", true)
MCFG_ISA16_SLOT_ADD("mb:isabus","mcd", pc_isa16_cards, "mcd", true) MCFG_ISA16_SLOT_ADD("mb:isabus","mcd", pc_isa16_cards, "mcd", true)
MCFG_FRAGMENT_ADD(pcvideo_vga)
MACHINE_CONFIG_END MACHINE_CONFIG_END
ROM_START(vis) ROM_START(vis)

View File

@ -189,6 +189,8 @@ MACHINE_CONFIG_END
Machine driver(s) Machine driver(s)
***************************************************************************/ ***************************************************************************/
#define ROM_LOAD_BIOS(bios,name,offset,length,hash) \
ROMX_LOAD(name, offset, length, hash, ROM_BIOS(bios+1)) /* Note '+1' */
ROM_START( xbox ) ROM_START( xbox )
ROM_REGION( 0x400, "mcpx", 0 ) ROM_REGION( 0x400, "mcpx", 0 )
@ -197,7 +199,14 @@ ROM_START( xbox )
ROM_LOAD( "mcpx_1_1.bin", 0x200, 0x200, CRC(94ce376b) SHA1(6c875f17f773aaec51eb434068bb6c657c4343c0) ) ROM_LOAD( "mcpx_1_1.bin", 0x200, 0x200, CRC(94ce376b) SHA1(6c875f17f773aaec51eb434068bb6c657c4343c0) )
ROM_REGION( 0x100000, "bios", 0) ROM_REGION( 0x100000, "bios", 0)
ROM_LOAD( "4134_1024k.bin", 0x000000, 0x100000, CRC(49d8055a) SHA1(d46cef771a63dc8024fe36d7ab5b959087ac999f) ) ROM_SYSTEM_BIOS(0, "bios0", "Chihiro Bios 4134 1024k") \
ROM_LOAD_BIOS(0, "4134_1024k.bin", 0x000000, 0x100000, CRC(49d8055a) SHA1(d46cef771a63dc8024fe36d7ab5b959087ac999f)) \
ROM_SYSTEM_BIOS(1, "bios1", "Chihiro Bios 3944 1024k") \
ROM_LOAD_BIOS(1, "3944_1024k.bin", 0x000000, 0x100000, CRC(32a9ecb6) SHA1(67054fc88bda94e33e86f1b19be60efec0724fb6)) \
ROM_SYSTEM_BIOS(2, "bios2", "Chihiro Bios 4034 1024k") \
ROM_LOAD_BIOS(2, "4034_1024k.bin", 0x000000, 0x100000, CRC(0d6fc88f) SHA1(ab676b712204fb1728bf89f9cd541a8f5a64ab97)) \
ROM_SYSTEM_BIOS(3, "bios3", "Chihiro Bios 4817 1024k") \
ROM_LOAD_BIOS(3, "4817_1024k.bin", 0x000000, 0x100000, CRC(3f30863a) SHA1(dc955bd4d3ca71e01214a49e5d0aba615270c03c))
ROM_COPY( "mcpx", 1, 0x3fe00, 0x1ff) ROM_COPY( "mcpx", 1, 0x3fe00, 0x1ff)
ROM_COPY( "mcpx", 1, 0x7fe00, 0x1ff) ROM_COPY( "mcpx", 1, 0x7fe00, 0x1ff)
ROM_COPY( "mcpx", 1, 0xbfe00, 0x1ff) ROM_COPY( "mcpx", 1, 0xbfe00, 0x1ff)
@ -205,9 +214,6 @@ ROM_START( xbox )
ROM_REGION( 0x1000000, "tbp", 0 ) // To Be Processed, of course ROM_REGION( 0x1000000, "tbp", 0 ) // To Be Processed, of course
ROM_LOAD( "3944_1024k.bin", 0x000000, 0x100000, CRC(32a9ecb6) SHA1(67054fc88bda94e33e86f1b19be60efec0724fb6) )
ROM_LOAD( "4034_1024k.bin", 0x000000, 0x100000, CRC(0d6fc88f) SHA1(ab676b712204fb1728bf89f9cd541a8f5a64ab97) )
ROM_LOAD( "4817_1024k.bin", 0x000000, 0x100000, CRC(3f30863a) SHA1(dc955bd4d3ca71e01214a49e5d0aba615270c03c) )
ROM_LOAD( "5101_256k.bin", 0x000000, 0x040000, CRC(e8a9224e) SHA1(5108e1025f48071c07a6823661d708c66dee97a9) ) ROM_LOAD( "5101_256k.bin", 0x000000, 0x040000, CRC(e8a9224e) SHA1(5108e1025f48071c07a6823661d708c66dee97a9) )
ROM_LOAD( "xbox-5530.bin", 0x000000, 0x040000, CRC(9569c4d3) SHA1(40fa73277013be3168135e1768b09623a987ff63) ) ROM_LOAD( "xbox-5530.bin", 0x000000, 0x040000, CRC(9569c4d3) SHA1(40fa73277013be3168135e1768b09623a987ff63) )
ROM_LOAD( "xbox-5713.bin", 0x040000, 0x040000, CRC(58fd8173) SHA1(8b7ccc4648ccd78cdb7b65cfca09621eaf2d4238) ) ROM_LOAD( "xbox-5713.bin", 0x040000, 0x040000, CRC(58fd8173) SHA1(8b7ccc4648ccd78cdb7b65cfca09621eaf2d4238) )

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,10 @@
#include "machine/315-5881_crypt.h" #include "machine/315-5881_crypt.h"
#include "machine/315-5838_317-0229_comp.h" #include "machine/315-5838_317-0229_comp.h"
#include "debug/debugcon.h"
#include "debug/debugcmd.h"
#include "debugger.h"
#define MAX_FILTERS (24) #define MAX_FILTERS (24)
#define MAX_BLOCKS (200) #define MAX_BLOCKS (200)
#define MAX_DIR_SIZE (256*1024) #define MAX_DIR_SIZE (256*1024)
@ -685,6 +689,11 @@ public:
DECLARE_READ8_MEMBER( stv_SMPC_r ); DECLARE_READ8_MEMBER( stv_SMPC_r );
DECLARE_WRITE8_MEMBER( stv_SMPC_w ); DECLARE_WRITE8_MEMBER( stv_SMPC_w );
void debug_scudma_command(int ref, int params, const char **param);
void debug_scuirq_command(int ref, int params, const char **param);
void debug_help_command(int ref, int params, const char **param);
void debug_commands(int ref, int params, const char **param);
}; };

View File

@ -34,7 +34,6 @@ public:
typedef void (taitosj_state::*copy_layer_func_t)(bitmap_ind16 &, typedef void (taitosj_state::*copy_layer_func_t)(bitmap_ind16 &,
const rectangle &, int, int *, rectangle *); const rectangle &, int, int *, rectangle *);
UINT8 m_sndnmi_disable;
UINT8 m_input_port_4_f0; UINT8 m_input_port_4_f0;
UINT8 m_kikstart_gears[2]; UINT8 m_kikstart_gears[2];
INT8 m_dac_out; INT8 m_dac_out;
@ -63,8 +62,9 @@ public:
UINT8 m_spacecr_prot_value; UINT8 m_spacecr_prot_value;
UINT8 m_protection_value; UINT8 m_protection_value;
UINT32 m_address; UINT32 m_address;
bool m_sound_cmd_ack; bool m_sndnmi_disable; // AKA "CIOB0" on schematic, bit 0 of AY-3-8910 @ IC50 Port B
bool m_sound_semaphore; bool m_sound_cmd_written; // 74ls74 1/2 @ GAME BOARD IC42
bool m_sound_semaphore; // 74ls74 2/2 @ GAME BOARD IC42
bitmap_ind16 m_layer_bitmap[3]; bitmap_ind16 m_layer_bitmap[3];
bitmap_ind16 m_sprite_sprite_collbitmap1; bitmap_ind16 m_sprite_sprite_collbitmap1;
bitmap_ind16 m_sprite_sprite_collbitmap2; bitmap_ind16 m_sprite_sprite_collbitmap2;
@ -75,7 +75,7 @@ public:
DECLARE_WRITE8_MEMBER(sound_command_w); DECLARE_WRITE8_MEMBER(sound_command_w);
DECLARE_READ8_MEMBER(sound_command_r); DECLARE_READ8_MEMBER(sound_command_r);
DECLARE_READ8_MEMBER(sound_status_r); DECLARE_READ8_MEMBER(sound_status_r);
DECLARE_WRITE8_MEMBER(sound_semaphore_assert_w); DECLARE_WRITE8_MEMBER(sound_semaphore_w);
DECLARE_WRITE8_MEMBER(sound_semaphore_clear_w); DECLARE_WRITE8_MEMBER(sound_semaphore_clear_w);
DECLARE_WRITE8_MEMBER(taitosj_bankswitch_w); DECLARE_WRITE8_MEMBER(taitosj_bankswitch_w);
DECLARE_READ8_MEMBER(taitosj_fake_data_r); DECLARE_READ8_MEMBER(taitosj_fake_data_r);

View File

@ -108,41 +108,41 @@
<screen index="0"> <screen index="0">
<bounds left="0" top="0" right="4" bottom="3" /> <bounds left="0" top="0" right="4" bottom="3" />
</screen> </screen>
<bezel name="lamp0" element="BET"> <bezel name="lamp0" element="BET" inputtag="IN0-0" inputmask="0x01">
<bounds x="3.0" y="3.45" width="0.40" height="0.24" /> <bounds x="3.0" y="3.45" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp1" element="DEAL"> <bezel name="lamp1" element="DEAL" inputtag="IN0-0" inputmask="0x08">
<bounds x="2.5" y="3.45" width="0.40" height="0.24" /> <bounds x="2.5" y="3.45" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp2" element="HOLD"> <bezel name="lamp2" element="HOLD" inputtag="IN0-2" inputmask="0x01">
<bounds x="0.0" y="3.13" width="0.40" height="0.24" /> <bounds x="0.0" y="3.13" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp3" element="D-UP"> <bezel name="lamp3" element="D-UP" inputtag="IN0-0" inputmask="0x04">
<bounds x="1.5" y="3.45" width="0.40" height="0.24" /> <bounds x="1.5" y="3.45" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp4" element="BIG"> <bezel name="lamp4" element="BIG" inputtag="IN0-1" inputmask="0x08">
<bounds x="0.5" y="3.45" width="0.40" height="0.24" /> <bounds x="0.5" y="3.45" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp2" element="HOLD"> <bezel name="lamp2" element="HOLD" inputtag="IN0-2" inputmask="0x02">
<bounds x="0.5" y="3.13" width="0.40" height="0.24" /> <bounds x="0.5" y="3.13" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp2" element="HOLD"> <bezel name="lamp2" element="HOLD" inputtag="IN0-2" inputmask="0x04">
<bounds x="1.0" y="3.13" width="0.40" height="0.24" /> <bounds x="1.0" y="3.13" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp2" element="HOLD"> <bezel name="lamp2" element="HOLD" inputtag="IN0-2" inputmask="0x08">
<bounds x="1.5" y="3.13" width="0.40" height="0.24" /> <bounds x="1.5" y="3.13" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp2" element="HOLD"> <bezel name="lamp2" element="HOLD" inputtag="IN0-2" inputmask="0x10">
<bounds x="2.0" y="3.13" width="0.40" height="0.24" /> <bounds x="2.0" y="3.13" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp3" element="TAKE"> <bezel name="lamp3" element="TAKE" inputtag="IN0-1" inputmask="0x04">
<bounds x="2.0" y="3.45" width="0.40" height="0.24" /> <bounds x="2.0" y="3.45" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp4" element="SMALL"> <bezel name="lamp4" element="SMALL" inputtag="IN0-1" inputmask="0x10">
<bounds x="1.0" y="3.45" width="0.40" height="0.24" /> <bounds x="1.0" y="3.45" width="0.40" height="0.24" />
</bezel> </bezel>
<bezel name="lamp2" element="CANCEL"> <bezel name="lamp2" element="CANCEL" inputtag="IN0-0" inputmask="0x10">
<bounds x="0.0" y="3.45" width="0.40" height="0.24" /> <bounds x="0.0" y="3.45" width="0.40" height="0.24" />
</bezel> </bezel>
</view> </view>
</mamelayout> </mamelayout>

View File

@ -0,0 +1,118 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="static_white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
<element name="disk_white"><disk><color red="0.8" green="0.8" blue="0.8" /></disk></element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.2" blue="0.22" /></led7seg>
</element>
<element name="seg" defstate="0">
<rect state="0"><color red="0.1" green="0.02" blue="0.022" /></rect>
<rect state="1"><color red="1.0" green="0.2" blue="0.22" /></rect>
</element>
<element name="led" defstate="0">
<disk state="0"><color red="0.1" green="0.02" blue="0.022" /></disk>
<disk state="1"><color red="1.0" green="0.2" blue="0.22" /></disk>
</element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="4.4" right="43.7" top="0.3" bottom="38.7" />
<!-- bezel and digits -->
<bezel element="static_white"><bounds x="6.8" y="1.8" width="35.4" height="35.4" /></bezel>
<bezel element="static_black"><bounds x="7.6" y="2.6" width="33.8" height="33.8" /></bezel>
<bezel element="static_white"><bounds x="8.6" y="3.6" width="31.8" height="31.8" /></bezel>
<bezel element="static_black"><bounds x="9" y="4" width="31" height="31" /></bezel>
<bezel element="static_white"><bounds x="9.8" y="4.8" width="29.4" height="29.4" /></bezel>
<bezel element="static_white"><bounds x="4.3" y="15" width="10" height="9" /></bezel>
<bezel element="static_black"><bounds x="4.8" y="15.4" width="10" height="8.2" /></bezel>
<bezel element="static_black"><bounds x="10" y="5" width="29" height="29" /></bezel>
<bezel element="disk_white"><bounds x="5.8" y="0.8" width="3" height="3" /></bezel>
<bezel element="disk_white"><bounds x="40.2" y="0.8" width="3" height="3" /></bezel>
<bezel element="disk_white"><bounds x="5.8" y="35.2" width="3" height="3" /></bezel>
<bezel element="disk_white"><bounds x="40.2" y="35.2" width="3" height="3" /></bezel>
<bezel name="digit9" element="digit"><bounds x="6" y="20.4" width="3" height="2" /><orientation rotate="270" /></bezel>
<bezel name="digit10" element="digit"><bounds x="6" y="16.6" width="3" height="2" /><orientation rotate="270" /></bezel>
<!-- led grid -->
<bezel name="9.7" element="seg"><bounds x="20" y="7" width="4" height="1" /></bezel>
<bezel name="7.1" element="seg"><bounds x="20" y="10" width="4" height="1" /></bezel>
<bezel name="6.1" element="seg"><bounds x="20" y="13" width="4" height="1" /></bezel>
<bezel name="5.1" element="seg"><bounds x="20" y="16" width="4" height="1" /></bezel>
<bezel name="4.1" element="seg"><bounds x="20" y="19" width="4" height="1" /></bezel>
<bezel name="3.1" element="seg"><bounds x="20" y="22" width="4" height="1" /></bezel>
<bezel name="2.1" element="seg"><bounds x="20" y="25" width="4" height="1" /></bezel>
<bezel name="1.1" element="seg"><bounds x="20" y="28" width="4" height="1" /></bezel>
<bezel name="0.1" element="seg"><bounds x="20" y="31" width="4" height="1" /></bezel>
<bezel name="9.7" element="led"><bounds x="21" y="6.5" width="2" height="2" /></bezel>
<bezel name="7.1" element="led"><bounds x="21" y="9.5" width="2" height="2" /></bezel>
<bezel name="6.1" element="led"><bounds x="21" y="12.5" width="2" height="2" /></bezel>
<bezel name="5.1" element="led"><bounds x="21" y="15.5" width="2" height="2" /></bezel>
<bezel name="4.1" element="led"><bounds x="21" y="18.5" width="2" height="2" /></bezel>
<bezel name="3.1" element="led"><bounds x="21" y="21.5" width="2" height="2" /></bezel>
<bezel name="2.1" element="led"><bounds x="21" y="24.5" width="2" height="2" /></bezel>
<bezel name="1.1" element="led"><bounds x="21" y="27.5" width="2" height="2" /></bezel>
<bezel name="0.1" element="led"><bounds x="21" y="30.5" width="2" height="2" /></bezel>
<bezel name="10.7" element="seg"><bounds x="25" y="7" width="4" height="1" /></bezel>
<bezel name="7.3" element="seg"><bounds x="25" y="10" width="4" height="1" /></bezel>
<bezel name="6.3" element="seg"><bounds x="25" y="13" width="4" height="1" /></bezel>
<bezel name="5.3" element="seg"><bounds x="25" y="16" width="4" height="1" /></bezel>
<bezel name="4.3" element="seg"><bounds x="25" y="19" width="4" height="1" /></bezel>
<bezel name="3.3" element="seg"><bounds x="25" y="22" width="4" height="1" /></bezel>
<bezel name="2.3" element="seg"><bounds x="25" y="25" width="4" height="1" /></bezel>
<bezel name="1.3" element="seg"><bounds x="25" y="28" width="4" height="1" /></bezel>
<bezel name="0.3" element="seg"><bounds x="25" y="31" width="4" height="1" /></bezel>
<bezel name="10.7" element="led"><bounds x="26" y="6.5" width="2" height="2" /></bezel>
<bezel name="7.3" element="led"><bounds x="26" y="9.5" width="2" height="2" /></bezel>
<bezel name="6.3" element="led"><bounds x="26" y="12.5" width="2" height="2" /></bezel>
<bezel name="5.3" element="led"><bounds x="26" y="15.5" width="2" height="2" /></bezel>
<bezel name="4.3" element="led"><bounds x="26" y="18.5" width="2" height="2" /></bezel>
<bezel name="3.3" element="led"><bounds x="26" y="21.5" width="2" height="2" /></bezel>
<bezel name="2.3" element="led"><bounds x="26" y="24.5" width="2" height="2" /></bezel>
<bezel name="1.3" element="led"><bounds x="26" y="27.5" width="2" height="2" /></bezel>
<bezel name="0.3" element="led"><bounds x="26" y="30.5" width="2" height="2" /></bezel>
<bezel name="7.0" element="seg"><bounds x="19" y="8" width="1" height="2" /></bezel>
<bezel name="6.0" element="seg"><bounds x="19" y="11" width="1" height="2" /></bezel>
<bezel name="5.0" element="seg"><bounds x="19" y="14" width="1" height="2" /></bezel>
<bezel name="4.0" element="seg"><bounds x="19" y="17" width="1" height="2" /></bezel>
<bezel name="3.0" element="seg"><bounds x="19" y="20" width="1" height="2" /></bezel>
<bezel name="2.0" element="seg"><bounds x="19" y="23" width="1" height="2" /></bezel>
<bezel name="1.0" element="seg"><bounds x="19" y="26" width="1" height="2" /></bezel>
<bezel name="0.0" element="seg"><bounds x="19" y="29" width="1" height="2" /></bezel>
<bezel name="7.2" element="seg"><bounds x="24" y="8" width="1" height="2" /></bezel>
<bezel name="6.2" element="seg"><bounds x="24" y="11" width="1" height="2" /></bezel>
<bezel name="5.2" element="seg"><bounds x="24" y="14" width="1" height="2" /></bezel>
<bezel name="4.2" element="seg"><bounds x="24" y="17" width="1" height="2" /></bezel>
<bezel name="3.2" element="seg"><bounds x="24" y="20" width="1" height="2" /></bezel>
<bezel name="2.2" element="seg"><bounds x="24" y="23" width="1" height="2" /></bezel>
<bezel name="1.2" element="seg"><bounds x="24" y="26" width="1" height="2" /></bezel>
<bezel name="0.2" element="seg"><bounds x="24" y="29" width="1" height="2" /></bezel>
<bezel name="7.4" element="seg"><bounds x="29" y="8" width="1" height="2" /></bezel>
<bezel name="6.4" element="seg"><bounds x="29" y="11" width="1" height="2" /></bezel>
<bezel name="5.4" element="seg"><bounds x="29" y="14" width="1" height="2" /></bezel>
<bezel name="4.4" element="seg"><bounds x="29" y="17" width="1" height="2" /></bezel>
<bezel name="3.4" element="seg"><bounds x="29" y="20" width="1" height="2" /></bezel>
<bezel name="2.4" element="seg"><bounds x="29" y="23" width="1" height="2" /></bezel>
<bezel name="1.4" element="seg"><bounds x="29" y="26" width="1" height="2" /></bezel>
<bezel name="0.4" element="seg"><bounds x="29" y="29" width="1" height="2" /></bezel>
</view>
</mamelayout>

View File

@ -0,0 +1,129 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<element name="static_orange"><rect><color red="0.9" green="0.4" blue="0.1" /></rect></element>
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="static_black2"><rect><color red="0.2" green="0.2" blue="0.2" /></rect></element>
<element name="static_white"><rect><color red="0.9" green="0.9" blue="0.9" /></rect></element>
<element name="hl" defstate="0">
<text string=" ">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
<bounds x="0.07" y="0.07" width="0.86" height="0.86" />
<color red="0.0" green="0.0" blue="0.0" />
</disk>
</element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.2" blue="0.22" /></led7seg>
</element>
<element name="led" defstate="0">
<disk state="0"><color red="0.2" green="0.04" blue="0.05" /></disk>
<disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk>
</element>
<element name="text_change">
<rect><color red="0.9" green="0.9" blue="0.9" /></rect>
<text string="CHANGE"><color red="0.15" green="0.15" blue="0.15" /></text>
</element>
<element name="text_q">
<rect><color red="0.9" green="0.9" blue="0.9" /></rect>
<text string="Q"><color red="0.9" green="0.4" blue="0.1" /></text>
</element>
<element name="text_t1"><text string="MATCH"><color red="0.9" green="0.4" blue="0.1" /></text></element>
<element name="text_t2"><text string="NUMBER"><color red="0.9" green="0.4" blue="0.1" /></text></element>
<element name="text_l1"><text string="ERROR"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l2"><text string="CHANGE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<element name="text_l3"><text string="4 REMAINING"><color red="0.8" green="0.8" blue="0.8" /></text></element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="41" top="17" bottom="103" />
<!-- top part -->
<bezel element="static_white"><bounds x="-1" y="16" width="43" height="14" /></bezel>
<bezel element="static_black"><bounds x="1" y="18" width="39" height="11" /></bezel>
<bezel name="digit1" element="digit"><bounds x="2" y="19" width="6" height="9" /></bezel>
<bezel name="digit0" element="digit"><bounds x="8" y="19" width="6" height="9" /></bezel>
<bezel name="digit3" element="digit"><bounds x="27" y="19" width="6" height="9" /></bezel>
<bezel name="digit2" element="digit"><bounds x="33" y="19" width="6" height="9" /></bezel>
<bezel element="text_t1"><bounds x="11" y="20" width="19" height="3" /></bezel>
<bezel element="text_t2"><bounds x="11" y="23" width="19" height="3" /></bezel>
<bezel element="text_l1"><bounds x="1" y="35" width="9" height="2" /></bezel>
<bezel element="text_l2"><bounds x="11" y="35" width="19" height="2" /></bezel>
<bezel element="text_l3"><bounds x="28" y="35" width="15" height="2" /></bezel>
<bezel name="1.7" element="led"><bounds x="4.5" y="32" width="2" height="2" /></bezel>
<bezel name="3.7" element="led"><bounds x="19.5" y="32" width="2" height="2" /></bezel>
<bezel name="2.7" element="led"><bounds x="34.5" y="32" width="2" height="2" /></bezel>
<!-- face buttons -->
<bezel element="static_orange"><bounds x="-1" y="40" width="43" height="51" /></bezel>
<bezel element="static_white"><bounds x="1" y="41" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="11" y="41" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="21" y="41" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="31" y="41" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="1" y="51" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="11" y="51" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="21" y="51" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="31" y="51" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="1" y="61" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="11" y="61" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="21" y="61" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="31" y="61" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="1" y="71" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="11" y="71" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="21" y="71" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="31" y="71" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="1" y="81" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="11" y="81" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="21" y="81" width="9" height="9" /></bezel>
<bezel element="static_white"><bounds x="31" y="81" width="9" height="9" /></bezel>
<bezel element="text_q"><bounds x="2" y="42" width="7" height="7" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x08"><bounds x="1" y="41" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x04"><bounds x="11" y="41" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x02"><bounds x="21" y="41" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x01"><bounds x="31" y="41" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="1" y="51" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="11" y="51" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="21" y="51" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="31" y="51" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="1" y="61" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="11" y="61" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="21" y="61" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="31" y="61" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="1" y="71" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="11" y="71" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="21" y="71" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="31" y="71" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="1" y="81" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="11" y="81" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="21" y="81" width="9" height="9" /><color alpha="0.15" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="31" y="81" width="9" height="9" /><color alpha="0.15" /></bezel>
<!-- bottom part -->
<bezel element="static_white"><bounds x="-1" y="92" width="43" height="12" /></bezel>
<bezel element="text_change"><bounds x="33" y="93" width="8" height="2" /></bezel>
<bezel element="static_black2"><bounds x="34" y="96" width="6" height="6" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="34" y="96" width="6" height="6" /><color alpha="0.25" /></bezel>
</view>
</mamelayout>

View File

@ -1,23 +1,47 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<mamelayout version="2"> <mamelayout version="2">
<element name="pcb">
<image file="md6802.png" />
</element>
<element name="redled" defstate="0"> <element name="redled" defstate="0">
<disk state="1"> <disk state="1">
<color red="1.0" green="0.0" blue="0.0" /> <color red="1.0" green="0.0" blue="0.0" />
</disk> </disk>
</element> </element>
<element name="button" defstate="1"/> <element name="button" defstate="1">
<disk state="0">
<color red="1.0" green="1.0" blue="1.0" />
</disk>
</element>
<element name="digit" defstate="1"> <element name="digit" defstate="1">
<led7seg> <led7seg>
<color red="0.75" green="0.0" blue="0.0" /> <color red="0.75" green="0.0" blue="0.0" />
</led7seg> </led7seg>
</element> </element>
<element name="text_shift"><text string="SHIFT"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_reset"><text string="RESET"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_0"><text string="0 ADR"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_1"><text string="1 STA"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_2"><text string="2 EXF"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_3"><text string="3 CLR"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_4"><text string="4 RUN"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_5"><text string="5 BPS"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_6"><text string="6 EXB"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_7"><text string="7 SP"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_8"><text string="8 SST"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_9"><text string="9 USERV"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_A"><text string="A MOV"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_B"><text string="B USERJ"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_C"><text string="C CON"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_D"><text string="D"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_E"><text string="E LOAD"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_F"><text string="F FLAG"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_terminal"><text string="Terminal"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<element name="text_md6802"><text string="Mikrodator 6802"><color red="0.7" green="0.7" blue="0.7" /></text></element>
<view name="Full Artwork"> <view name="Full Artwork">
<backdrop element="pcb"> <bounds left="0" top="0" right="800" bottom="869"/>
<bounds left="0" top="0" right="800" bottom="869" />
</backdrop> <bezel element="text_md6802"><bounds x="150" y="200" width="150" height="20" /></bezel>
<bezel name="led1" element="redled"> <bezel name="led1" element="redled">
<bounds x="290" y="668" width="15" height="15"/> <bounds x="290" y="668" width="15" height="15"/>
</bezel> </bezel>
@ -46,80 +70,98 @@
<bezel element="button" inputtag="LINE3" inputmask="0x01"> <bezel element="button" inputtag="LINE3" inputmask="0x01">
<bounds x="345" y="555" width="70" height="60" /> <bounds x="345" y="555" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_C"><bounds x="355" y="535" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x02"> <bezel element="button" inputtag="LINE3" inputmask="0x02">
<bounds x="425" y="555" width="70" height="60" /> <bounds x="425" y="555" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_D"><bounds x="435" y="535" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x04"> <bezel element="button" inputtag="LINE3" inputmask="0x04">
<bounds x="505" y="555" width="70" height="60" /> <bounds x="505" y="555" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_E"><bounds x="515" y="535" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x08"> <bezel element="button" inputtag="LINE3" inputmask="0x08">
<bounds x="585" y="555" width="70" height="60" /> <bounds x="585" y="555" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_F"><bounds x="595" y="535" width="50" height="20" /></bezel>
<!-- Buttons --> <!-- Buttons -->
<!-- Row 1 : 8 9 A B --> <!-- Row 1 : 8 9 A B -->
<bezel element="button" inputtag="LINE2" inputmask="0x01"> <bezel element="button" inputtag="LINE2" inputmask="0x01">
<bounds x="345" y="635" width="70" height="60" /> <bounds x="345" y="635" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_8"><bounds x="355" y="615" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x02"> <bezel element="button" inputtag="LINE2" inputmask="0x02">
<bounds x="425" y="635" width="70" height="60" /> <bounds x="425" y="635" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_9"><bounds x="435" y="615" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x04"> <bezel element="button" inputtag="LINE2" inputmask="0x04">
<bounds x="505" y="635" width="70" height="60" /> <bounds x="505" y="635" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_A"><bounds x="515" y="615" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x08"> <bezel element="button" inputtag="LINE2" inputmask="0x08">
<bounds x="585" y="635" width="70" height="60" /> <bounds x="585" y="635" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_B"><bounds x="595" y="615" width="50" height="20" /></bezel>
<!-- Buttons --> <!-- Buttons -->
<!-- Row 2 : SHIFT 4 5 6 7 --> <!-- Row 2 : SHIFT 4 5 6 7 -->
<bezel element="button" inputtag="LINE4" inputmask="0x08"> <bezel element="button" inputtag="LINE4" inputmask="0x08">
<bounds x="265" y="715" width="70" height="60" /> <bounds x="265" y="715" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_shift"><bounds x="275" y="695" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x01"> <bezel element="button" inputtag="LINE1" inputmask="0x01">
<bounds x="345" y="715" width="70" height="60" /> <bounds x="345" y="715" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_4"><bounds x="355" y="695" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x02"> <bezel element="button" inputtag="LINE1" inputmask="0x02">
<bounds x="425" y="715" width="70" height="60" /> <bounds x="425" y="715" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_5"><bounds x="435" y="695" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x04"> <bezel element="button" inputtag="LINE1" inputmask="0x04">
<bounds x="505" y="715" width="70" height="60" /> <bounds x="505" y="715" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_6"><bounds x="515" y="695" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x08"> <bezel element="button" inputtag="LINE1" inputmask="0x08">
<bounds x="585" y="715" width="70" height="60" /> <bounds x="585" y="715" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_7"><bounds x="595" y="695" width="50" height="20" /></bezel>
<!-- Buttons --> <!-- Buttons -->
<!-- Row 3 : RESET 0 1 2 3 --> <!-- Row 3 : RESET 0 1 2 3 -->
<bezel element="button" inputtag="LINE4" inputmask="0x04"> <bezel element="button" inputtag="LINE4" inputmask="0x04">
<bounds x="265" y="795" width="70" height="60" /> <bounds x="265" y="795" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_reset"><bounds x="275" y="775" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x01"> <bezel element="button" inputtag="LINE0" inputmask="0x01">
<bounds x="345" y="795" width="70" height="60" /> <bounds x="345" y="795" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_0"><bounds x="355" y="775" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x02"> <bezel element="button" inputtag="LINE0" inputmask="0x02">
<bounds x="425" y="795" width="70" height="60" /> <bounds x="425" y="795" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_1"><bounds x="435" y="775" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x04"> <bezel element="button" inputtag="LINE0" inputmask="0x04">
<bounds x="505" y="795" width="70" height="60" /> <bounds x="505" y="795" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_2"><bounds x="515" y="775" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x08"> <bezel element="button" inputtag="LINE0" inputmask="0x08">
<bounds x="585" y="795" width="70" height="60" /> <bounds x="585" y="795" width="70" height="60" />
</bezel> </bezel>
<bezel element="text_3"><bounds x="595" y="775" width="50" height="20" /></bezel>
</view> </view>
</mamelayout> </mamelayout>

View File

@ -1,18 +1,55 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<mamelayout version="2"> <mamelayout version="2">
<element name="pcb"> <element name="redled" defstate="0">
<image file="mp68A.png" /> <disk state="0"><color red="0.3" green="0.0" blue="0.0" /></disk>
<disk state="1"><color red="1.0" green="0.0" blue="0.0" /></disk>
</element>
<element name="button" defstate="1">
<rect state="0"><color red="0.3" green="0.3" blue="0.3" /></rect>
<rect state="1"><color red="0.6" green="0.6" blue="0.6" /></rect>
</element> </element>
<element name="button" defstate="1"/>
<element name="digit" defstate="1"> <element name="digit" defstate="1">
<led7seg> <led7seg><color red="0.75" green="0.0" blue="0.0" /></led7seg>
<color red="0.75" green="0.0" blue="0.0" />
</led7seg>
</element> </element>
<element name="text_shift"><text string="*"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_reset"><text string="RES"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_0"> <text string="0"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_ADR"><text string="ADR"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_1"> <text string="1"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_STA"><text string="STA"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_2"> <text string="2"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_EXF"><text string="EXF"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_3"> <text string="3"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_CLR"><text string="CLR"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_4"> <text string="4"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_RUN"><text string="RUN"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_5"> <text string="5"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_STO"><text string="STO"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_6"> <text string="6"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_EXB"><text string="EXB"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_7"> <text string="7"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_REL"> <text string="REL"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_8"> <text string="8"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_SST"> <text string="SST"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_9"> <text string="9"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_BPR"> <text string="BPR"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_A"> <text string="A"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_MOV"> <text string="MOV"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_B"> <text string="B"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_REC"> <text string="REC"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_C"> <text string="C"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_REG"> <text string="REG"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_D"> <text string="D"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_BPS"> <text string="BPS"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_E"> <text string="E"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_PRM"> <text string="PRM"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<element name="text_F"> <text string="F"><color red="1.0" green="1.0" blue="0.0" /></text></element>
<element name="text_PLA"> <text string="PLA"><color red="1.0" green="0.0" blue="0.0" /></text></element>
<view name="Full Artwork"> <view name="Full Artwork">
<backdrop element="pcb"> <bounds left="0" top="0" right="840" bottom="1105" />
<bounds left="0" top="0" right="840" bottom="1105" />
</backdrop>
<bezel name="digit0" element="digit"> <bezel name="digit0" element="digit">
<bounds left="70" top="840" right="100" bottom="885" /> <bounds left="70" top="840" right="100" bottom="885" />
</bezel> </bezel>
@ -35,82 +72,117 @@
<!-- Buttons --> <!-- Buttons -->
<!-- Row 3 : C D E F --> <!-- Row 3 : C D E F -->
<bezel element="button" inputtag="LINE0" inputmask="0x10"> <bezel element="button" inputtag="LINE0" inputmask="0x10">
<bounds x="240" y="750" width="85" height="85"/> <bounds x="240" y="750" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_REG"><bounds x="255" y="760" width="50" height="30" /></bezel>
<bezel element="text_C"><bounds x="255" y="795" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x20"> <bezel element="button" inputtag="LINE0" inputmask="0x20">
<bounds x="325" y="750" width="85" height="85"/> <bounds x="325" y="750" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_BPS"><bounds x="340" y="760" width="50" height="30" /></bezel>
<bezel element="text_D"><bounds x="340" y="795" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x40"> <bezel element="button" inputtag="LINE0" inputmask="0x40">
<bounds x="410" y="750" width="85" height="85"/> <bounds x="410" y="750" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_PRM"><bounds x="425" y="760" width="50" height="30" /></bezel>
<bezel element="text_E"><bounds x="425" y="795" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x80"> <bezel element="button" inputtag="LINE0" inputmask="0x80">
<bounds x="495" y="750" width="85" height="85"/> <bounds x="495" y="750" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_PLA"><bounds x="510" y="760" width="50" height="30" /></bezel>
<bezel element="text_F"><bounds x="510" y="795" width="50" height="30" /></bezel>
<!-- Buttons --> <!-- Buttons -->
<!-- Row 2 : 8 9 A B --> <!-- Row 2 : 8 9 A B -->
<bezel element="button" inputtag="LINE1" inputmask="0x01"> <bezel element="button" inputtag="LINE1" inputmask="0x01">
<bounds x="240" y="835" width="85" height="85"/> <bounds x="240" y="835" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_SST"><bounds x="255" y="845" width="50" height="30" /></bezel>
<bezel element="text_8"><bounds x="255" y="880" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x02"> <bezel element="button" inputtag="LINE1" inputmask="0x02">
<bounds x="325" y="835" width="85" height="85"/> <bounds x="325" y="835" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_BPR"><bounds x="340" y="845" width="50" height="30" /></bezel>
<bezel element="text_9"><bounds x="340" y="880" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x04"> <bezel element="button" inputtag="LINE1" inputmask="0x04">
<bounds x="410" y="835" width="85" height="85"/> <bounds x="410" y="835" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_MOV"><bounds x="425" y="845" width="50" height="30" /></bezel>
<bezel element="text_A"><bounds x="425" y="880" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x08"> <bezel element="button" inputtag="LINE1" inputmask="0x08">
<bounds x="495" y="835" width="85" height="85"/> <bounds x="495" y="835" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_REC"><bounds x="510" y="845" width="50" height="30" /></bezel>
<bezel element="text_B"><bounds x="510" y="880" width="50" height="30" /></bezel>
<!-- Buttons --> <!-- Buttons -->
<!-- Row 1 : SHIFT 4 5 6 7 --> <!-- Row 1 : SHIFT 4 5 6 7 -->
<bezel element="button" inputtag="LINE4" inputmask="0x08"> <bezel element="button" inputtag="LINE4" inputmask="0x08">
<bounds x="155" y="920" width="85" height="85"/> <bounds x="155" y="920" width="80" height="80"/>
</bezel> </bezel>
<bezel name="led1" element="redled"><bounds x="185" y="945" width="15" height="15" /></bezel>
<bezel element="text_shift"><bounds x="170" y="965" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x10"> <bezel element="button" inputtag="LINE2" inputmask="0x10">
<bounds x="240" y="920" width="85" height="85"/> <bounds x="240" y="920" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_RUN"><bounds x="255" y="930" width="50" height="30" /></bezel>
<bezel element="text_4"><bounds x="255" y="965" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x20"> <bezel element="button" inputtag="LINE2" inputmask="0x20">
<bounds x="325" y="920" width="85" height="85"/> <bounds x="325" y="920" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_STO"><bounds x="340" y="930" width="50" height="30" /></bezel>
<bezel element="text_5"><bounds x="340" y="965" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x40"> <bezel element="button" inputtag="LINE2" inputmask="0x40">
<bounds x="410" y="920" width="85" height="85"/> <bounds x="410" y="920" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_EXB"><bounds x="425" y="930" width="50" height="30" /></bezel>
<bezel element="text_6"><bounds x="425" y="965" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x80"> <bezel element="button" inputtag="LINE2" inputmask="0x80">
<bounds x="495" y="920" width="85" height="85"/> <bounds x="495" y="920" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_REL"><bounds x="510" y="930" width="50" height="30" /></bezel>
<bezel element="text_7"><bounds x="510" y="965" width="50" height="30" /></bezel>
<!-- Buttons --> <!-- Buttons -->
<!-- Row 0 : RESET 0 1 2 3 --> <!-- Row 0 : RESET 0 1 2 3 -->
<bezel element="button" inputtag="LINE4" inputmask="0x04"> <bezel element="button" inputtag="LINE4" inputmask="0x04">
<bounds x="155" y="1005" width="85" height="85"/> <bounds x="155" y="1005" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_reset"><bounds x="170" y="1050" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x01"> <bezel element="button" inputtag="LINE3" inputmask="0x01">
<bounds x="240" y="1005" width="85" height="85"/> <bounds x="240" y="1005" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_ADR"><bounds x="255" y="1015" width="50" height="30" /></bezel>
<bezel element="text_0"><bounds x="255" y="1050" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x02"> <bezel element="button" inputtag="LINE3" inputmask="0x02">
<bounds x="325" y="1005" width="85" height="85"/> <bounds x="325" y="1005" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_STA"><bounds x="340" y="1015" width="50" height="30" /></bezel>
<bezel element="text_1"><bounds x="340" y="1050" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x04"> <bezel element="button" inputtag="LINE3" inputmask="0x04">
<bounds x="410" y="1005" width="85" height="85"/> <bounds x="410" y="1005" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_EXF"><bounds x="425" y="1015" width="50" height="30" /></bezel>
<bezel element="text_2"><bounds x="425" y="1050" width="50" height="30" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x08"> <bezel element="button" inputtag="LINE3" inputmask="0x08">
<bounds x="495" y="1005" width="85" height="85"/> <bounds x="495" y="1005" width="80" height="80"/>
</bezel> </bezel>
<bezel element="text_CLR"><bounds x="510" y="1015" width="50" height="30" /></bezel>
<bezel element="text_3"><bounds x="510" y="1050" width="50" height="30" /></bezel>
</view> </view>
</mamelayout> </mamelayout>

139
src/mame/layout/tcfball.lay Normal file
View File

@ -0,0 +1,139 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="static_white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
<element name="static_green"><rect><color red="0.1" green="0.5" blue="0.2" /></rect></element>
<element name="text_down">
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
<text string="DOWN"><color red="0.7" green="0.2" blue="0.3" /></text>
</element>
<element name="text_home">
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
<text string="HOME"><color red="0.7" green="0.2" blue="0.3" /></text>
</element>
<element name="text_yards">
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
<text string="YARDS TO GO"><color red="0.7" green="0.2" blue="0.3" /></text>
</element>
<element name="text_time">
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
<text string="TIME REMAINING"><color red="0.7" green="0.2" blue="0.3" /></text>
</element>
<element name="text_field">
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
<text string="FIELD POSITION"><color red="0.7" green="0.2" blue="0.3" /></text>
</element>
<element name="text_visitor">
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
<text string="VISITOR"><color red="0.7" green="0.2" blue="0.3" /></text>
</element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.25" blue="0.26" /></led7seg>
</element>
<element name="seg" defstate="0">
<rect state="0"><color red="0.13" green="0.0325" blue="0.0338" /></rect>
<rect state="1"><color red="1.0" green="0.25" blue="0.26" /></rect>
</element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="183" top="-2" bottom="109" />
<bezel element="static_green"><bounds x="-1" y="-3" width="185" height="113" /></bezel>
<!-- score/status panel -->
<bezel element="static_white"><bounds x="2" y="0" width="179" height="48" /></bezel>
<bezel element="static_black"><bounds x="4" y="11" width="175" height="26" /></bezel>
<bezel name="digit6" element="digit"><bounds x="19.5" y="16.5" width="12" height="15" /></bezel>
<bezel name="digit5" element="digit"><bounds x="35.5" y="16.5" width="12" height="15" /></bezel>
<bezel name="digit4" element="digit"><bounds x="67.5" y="16.5" width="12" height="15" /></bezel>
<bezel name="digit3" element="digit"><bounds x="83.5" y="16.5" width="12" height="15" /></bezel>
<bezel name="digit2" element="digit"><bounds x="99.5" y="16.5" width="12" height="15" /></bezel>
<bezel name="digit1" element="digit"><bounds x="131.5" y="16.5" width="12" height="15" /></bezel>
<bezel name="digit0" element="digit"><bounds x="147.5" y="16.5" width="12" height="15" /></bezel>
<bezel element="static_white"><bounds x="58" y="1" width="2" height="46" /></bezel>
<bezel element="static_white"><bounds x="123" y="1" width="2" height="46" /></bezel>
<bezel element="text_down"><bounds x="4" y="1" width="54" height="9" /></bezel>
<bezel element="text_field"><bounds x="58" y="1" width="67" height="9" /></bezel>
<bezel element="text_yards"><bounds x="124" y="1" width="56" height="9" /></bezel>
<bezel element="text_home"><bounds x="4" y="38" width="54" height="9" /></bezel>
<bezel element="text_time"><bounds x="58" y="38" width="67" height="9" /></bezel>
<bezel element="text_visitor"><bounds x="124" y="38" width="56" height="9" /></bezel>
<!-- playing field -->
<bezel element="static_white"><bounds x="-1" y="53" width="185" height="54" /></bezel>
<bezel element="static_black"><bounds x="2" y="55" width="19" height="50" /></bezel>
<bezel element="static_black"><bounds x="22" y="55" width="19" height="50" /></bezel>
<bezel element="static_black"><bounds x="42" y="55" width="19" height="50" /></bezel>
<bezel element="static_black"><bounds x="62" y="55" width="19" height="50" /></bezel>
<bezel element="static_black"><bounds x="82" y="55" width="19" height="50" /></bezel>
<bezel element="static_black"><bounds x="102" y="55" width="19" height="50" /></bezel>
<bezel element="static_black"><bounds x="122" y="55" width="19" height="50" /></bezel>
<bezel element="static_black"><bounds x="142" y="55" width="19" height="50" /></bezel>
<bezel element="static_black"><bounds x="162" y="55" width="19" height="50" /></bezel>
<bezel element="static_white"><bounds x="0" y="71" width="183" height="1" /></bezel>
<bezel element="static_white"><bounds x="0" y="88" width="183" height="1" /></bezel>
<bezel element="static_black"><bounds x="3.5" y="56" width="16" height="48" /></bezel>
<bezel element="static_black"><bounds x="23.5" y="56" width="16" height="48" /></bezel>
<bezel element="static_black"><bounds x="43.5" y="56" width="16" height="48" /></bezel>
<bezel element="static_black"><bounds x="63.5" y="56" width="16" height="48" /></bezel>
<bezel element="static_black"><bounds x="83.5" y="56" width="16" height="48" /></bezel>
<bezel element="static_black"><bounds x="103.5" y="56" width="16" height="48" /></bezel>
<bezel element="static_black"><bounds x="123.5" y="56" width="16" height="48" /></bezel>
<bezel element="static_black"><bounds x="143.5" y="56" width="16" height="48" /></bezel>
<bezel element="static_black"><bounds x="163.5" y="56" width="16" height="48" /></bezel>
<bezel name="9.7" element="seg"><bounds x="7" y="62" width="9" height="2" /></bezel>
<bezel name="8.7" element="seg"><bounds x="7" y="79" width="9" height="2" /></bezel>
<bezel name="7.7" element="seg"><bounds x="7" y="96" width="9" height="2" /></bezel>
<bezel name="9.6" element="seg"><bounds x="27" y="62" width="9" height="2" /></bezel>
<bezel name="8.6" element="seg"><bounds x="27" y="79" width="9" height="2" /></bezel>
<bezel name="7.6" element="seg"><bounds x="27" y="96" width="9" height="2" /></bezel>
<bezel name="9.5" element="seg"><bounds x="47" y="62" width="9" height="2" /></bezel>
<bezel name="8.5" element="seg"><bounds x="47" y="79" width="9" height="2" /></bezel>
<bezel name="7.5" element="seg"><bounds x="47" y="96" width="9" height="2" /></bezel>
<bezel name="9.4" element="seg"><bounds x="67" y="62" width="9" height="2" /></bezel>
<bezel name="8.4" element="seg"><bounds x="67" y="79" width="9" height="2" /></bezel>
<bezel name="7.4" element="seg"><bounds x="67" y="96" width="9" height="2" /></bezel>
<bezel name="9.3" element="seg"><bounds x="87" y="62" width="9" height="2" /></bezel>
<bezel name="8.3" element="seg"><bounds x="87" y="79" width="9" height="2" /></bezel>
<bezel name="7.3" element="seg"><bounds x="87" y="96" width="9" height="2" /></bezel>
<bezel name="9.2" element="seg"><bounds x="107" y="62" width="9" height="2" /></bezel>
<bezel name="8.2" element="seg"><bounds x="107" y="79" width="9" height="2" /></bezel>
<bezel name="7.2" element="seg"><bounds x="107" y="96" width="9" height="2" /></bezel>
<bezel name="9.1" element="seg"><bounds x="127" y="62" width="9" height="2" /></bezel>
<bezel name="8.1" element="seg"><bounds x="127" y="79" width="9" height="2" /></bezel>
<bezel name="7.1" element="seg"><bounds x="127" y="96" width="9" height="2" /></bezel>
<bezel name="9.0" element="seg"><bounds x="147" y="62" width="9" height="2" /></bezel>
<bezel name="8.0" element="seg"><bounds x="147" y="79" width="9" height="2" /></bezel>
<bezel name="7.0" element="seg"><bounds x="147" y="96" width="9" height="2" /></bezel>
<bezel name="10.2" element="seg"><bounds x="167" y="62" width="9" height="2" /></bezel>
<bezel name="10.1" element="seg"><bounds x="167" y="79" width="9" height="2" /></bezel>
<bezel name="10.0" element="seg"><bounds x="167" y="96" width="9" height="2" /></bezel>
</view>
</mamelayout>

View File

@ -90,13 +90,28 @@ const device_type CAT702 = &device_creator<cat702_device>;
cat702_device::cat702_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : cat702_device::cat702_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, CAT702, "CAT702", tag, owner, clock, "cat702", __FILE__), device_t(mconfig, CAT702, "CAT702", tag, owner, clock, "cat702", __FILE__),
m_transform(nullptr), m_region(*this, DEVICE_SELF),
m_dataout_handler(*this) m_dataout_handler(*this)
{ {
} }
void cat702_device::device_start() void cat702_device::device_start()
{ {
memset(m_transform, 0xff, sizeof(m_transform));
if (!m_region.found())
{
logerror("cat702(%s):region not found\n", tag());
}
else if (m_region->bytes() != sizeof(m_transform))
{
logerror("cat702(%s):region length 0x%x expected 0x%x\n", tag(), m_region->bytes(), sizeof(m_transform));
}
else
{
memcpy(m_transform, m_region->base(), sizeof(m_transform));
}
m_dataout_handler.resolve_safe(); m_dataout_handler.resolve_safe();
save_item(NAME(m_select)); save_item(NAME(m_select));
@ -160,11 +175,6 @@ void cat702_device::apply_sbox(const UINT8 *sbox)
m_state = r; m_state = r;
} }
void cat702_device::static_set_transform_table(device_t &device, const UINT8 *transform)
{
downcast<cat702_device &>(device).m_transform = transform;
}
WRITE_LINE_MEMBER(cat702_device::write_select) WRITE_LINE_MEMBER(cat702_device::write_select)
{ {
if (m_select != state) if (m_select != state)
@ -215,9 +225,3 @@ WRITE_LINE_MEMBER(cat702_device::write_datain)
{ {
m_datain = state; m_datain = state;
} }
void cat702_device::device_validity_check(validity_checker &valid) const
{
if (m_transform == nullptr)
osd_printf_error("No transform table provided\n");
}

View File

@ -14,11 +14,6 @@ extern const device_type CAT702;
#define MCFG_CAT702_DATAOUT_HANDLER(_devcb) \ #define MCFG_CAT702_DATAOUT_HANDLER(_devcb) \
devcb = &cat702_device::set_dataout_handler(*device, DEVCB_##_devcb); devcb = &cat702_device::set_dataout_handler(*device, DEVCB_##_devcb);
#define MCFG_CAT702_TRANSFORM_TABLE(_table) \
cat702_device::static_set_transform_table(*device, _table);
class validity_checker;
class cat702_device : public device_t class cat702_device : public device_t
{ {
public: public:
@ -26,7 +21,6 @@ public:
// static configuration helpers // static configuration helpers
template<class _Object> static devcb_base &set_dataout_handler(device_t &device, _Object object) { return downcast<cat702_device &>(device).m_dataout_handler.set_callback(object); } template<class _Object> static devcb_base &set_dataout_handler(device_t &device, _Object object) { return downcast<cat702_device &>(device).m_dataout_handler.set_callback(object); }
static void static_set_transform_table(device_t &device, const UINT8 *transform); // TODO: region
DECLARE_WRITE_LINE_MEMBER(write_select); DECLARE_WRITE_LINE_MEMBER(write_select);
DECLARE_WRITE_LINE_MEMBER(write_datain); DECLARE_WRITE_LINE_MEMBER(write_datain);
@ -34,14 +28,15 @@ public:
protected: protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_validity_check(validity_checker &valid) const override;
private: private:
UINT8 compute_sbox_coef(int sel, int bit); UINT8 compute_sbox_coef(int sel, int bit);
void apply_bit_sbox(int sel); void apply_bit_sbox(int sel);
void apply_sbox(const UINT8 *sbox); void apply_sbox(const UINT8 *sbox);
const UINT8 *m_transform; optional_memory_region m_region;
UINT8 m_transform[8];
int m_select; int m_select;
int m_clock; int m_clock;
int m_datain; int m_datain;

View File

@ -704,17 +704,18 @@ static void cps2_decrypt(running_machine &machine, UINT16 *rom, UINT16 *dec, int
// decrypt the opcodes // decrypt the opcodes
for (a = i; a < length/2 && a < upper_limit/2; a += 0x10000) for (a = i; a < length/2; a += 0x10000)
{ {
dec[a] = feistel(rom[a], fn2_groupA, fn2_groupB, if (a >= lower_limit && a <= upper_limit)
&sboxes2[0*4], &sboxes2[1*4], &sboxes2[2*4], &sboxes2[3*4], {
key2[0], key2[1], key2[2], key2[3]); dec[a] = feistel(rom[a], fn2_groupA, fn2_groupB,
} &sboxes2[0 * 4], &sboxes2[1 * 4], &sboxes2[2 * 4], &sboxes2[3 * 4],
// copy the unencrypted part key2[0], key2[1], key2[2], key2[3]);
while (a < length/2) }
{ else
dec[a] = rom[a]; {
a += 0x10000; dec[a] = rom[a];
}
} }
} }
} }
@ -767,25 +768,25 @@ DRIVER_INIT_MEMBER(cps_state,cps2crypt)
// decoded[4] == watchdog instruction third word // decoded[4] == watchdog instruction third word
// decoded[5] == watchdog instruction second word // decoded[5] == watchdog instruction second word
// decoded[6] == watchdog instruction first word // decoded[6] == watchdog instruction first word
// decoded[7] == 0x4000 // decoded[7] == 0x4000 (bits 8 to 23 of CPS2 object output address)
// decoded[8] == 0x0900 // decoded[8] == 0x0900
if (decoded[9] == 0xffff) if (decoded[9] == 0xffff)
{ {
// On a dead board, the only encrypted range is actually FF0000-FFFFFF. // On a dead board, the only encrypted range is actually FF0000-FFFFFF.
// It doesn't start from 0, and it's the upper half of a 128kB bank. // It doesn't start from 0, and it's the upper half of a 128kB bank.
upper = 0xffffffff; upper = 0xffffff;
lower = 0xff0000; lower = 0xff0000;
} }
else else
{ {
// This matches two thirds of the old values upper = (((~decoded[9] & 0x3ff) << 14) | 0x3fff) + 1;
upper = (((decoded[9] ^ 0x3f0) << 14) | 0x3ffff) + 1;
lower = 0; lower = 0;
} }
logerror("cps2 decrypt 0x%08x,0x%08x,0x%08x,0x%08x\n", key[0], key[1], lower, upper);
// we have a proper key so use it to decrypt // we have a proper key so use it to decrypt
if (lower != 0xff0000) // don't run the decrypt on 'dead key' games for now cps2_decrypt(machine(), (UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, memregion("maincpu")->bytes(), key, lower / 2, upper / 2);
cps2_decrypt(machine(), (UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, memregion("maincpu")->bytes(), key, lower, upper);
} }
} }

View File

@ -184,7 +184,9 @@ ROM_START( lk201 )
// 23-001s9-00.bin is for the newer LK201 version (green LEDs, Motorola 6805) // 23-001s9-00.bin is for the newer LK201 version (green LEDs, Motorola 6805)
ROM_LOAD( "23-001s9-00.bin", 0x0000, 0x2000, CRC(be293c51) SHA1(a11ae004d2d6055d7279da3560c3e56610a19fdb) ) ROM_LOAD( "23-001s9-00.bin", 0x0000, 0x2000, CRC(be293c51) SHA1(a11ae004d2d6055d7279da3560c3e56610a19fdb) )
// 23-004M1 or 23-004M2 are in the older LK201 keyboard with red LEDs (8051) // 23-004M1 or 23-004M2 are in the older LK201 keyboard with red LEDs (8051 or 8051H respectively, same code on both?)
ROM_REGION( 0x1000, "i8051cpu", 0 )
ROM_LOAD( "23-004m2.8051h.e1", 0x0000, 0x1000, CRC(35dd04c6) SHA1(9744c561d76fe85afaccc7a2485ce2865236873a) )
ROM_END ROM_END
@ -207,11 +209,11 @@ ADDRESS_MAP_END
//------------------------------------------------- //-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( lk201 ) static MACHINE_CONFIG_FRAGMENT( lk201 )
MCFG_CPU_ADD(LK201_CPU_TAG, M68HC05EG, 4000000) // actually 68HC05C4, clock verified by Lord_Nightmare MCFG_CPU_ADD(LK201_CPU_TAG, M68HC05EG, XTAL_4MHz) // actually 68HC05C4, clock verified by Lord_Nightmare
MCFG_CPU_PROGRAM_MAP(lk201_map) MCFG_CPU_PROGRAM_MAP(lk201_map)
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD(LK201_SPK_TAG, BEEP, 2000) MCFG_SOUND_ADD(LK201_SPK_TAG, BEEP, 2000) // clocked by a 555 timer at E8, the volume of the beep is controllable by: (8051 model) P2.0 thru P2.3, or (6805 model) the upper 4 bits of the LED data latch
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -266,7 +268,49 @@ const tiny_rom_entry *lk201_device::device_rom_region() const
INPUT_PORTS_START( lk201 ) INPUT_PORTS_START( lk201 )
PORT_START("KBD0") /*
Actual membrane part number (from later 6805-based LK201 keyboard): 54-15172
Matrix Rows to bit translation, from schematic page 20 ( http://bitsavers.trailing-edge.com/pdf/dec/terminal/lk201/MP01395_LK201_Schematic_Oct83.pdf )
Bit D0 - Column P3-3
D1 - Column P3-7
D2 - Column P3-8
D3 - Column P3-12
D4 - Column P2-8
D5 - Column P1-2
D6 - Column P3-11
D7 - Column P1-3
Keyboard Matrix
---------------
Row select
| Columns SwitchID by bit Columns Key by bit
| D5 D7 D4 D0 D1 D2 D3 D6 D5 D7 D4 D0 D1 D2 D3 D6
V V V V V V V V V V V V V V V V V
P1-6 --- E99 E00 B01 C01 D01 E01 D99 --- N/C ` Z A Q 1 N/C
P1-7 --- G99 D00 B00 B02 C02 D02 E02 --- F1 TAB <> X S W 2
P1-9 --- --- G01 B03 C03 D03 E03 G00 --- --- F3 C D E 3 F2
P1-10 A99 C99 A10 --- --- --- --- C00 COMP CTRL N/C --- --- --- --- CAPS
P1-11 --- G02 E04 A0406 B04 C04 D04 G03 --- F4 4 SPACE V F R F5
P2-2 --- --- G05 B05 C05 D05 E05 G04 --- --- F6 B G T 5 N/C
P2-3 --- --- G06 B06 C06 D06 E06 G07 --- --- F7 N H Y 6 F8
P2-4 --- --- G09 B07 C07 D07 E07 G08 --- --- F10 M J U 7 F9
P2-5 --- B9911 --- --- --- --- --- --- --- SHFT --- --- --- --- --- ---
P2-6 --- --- G10 B08 C08 D08 E08 G11 --- --- N/C , K I 8 F11
P2-9 --- --- G13 B09 C09 D09 E09 G12 --- --- F13 . L O 9 F12
P2-10 --- G14 E10 B10 C10 D13 D10 E13 --- F14 0 / ; N/C P BKSP(DEL)
P2-11 G15 E16 D16 C12 B16 C13 D12 E12 HELP FIND SLCT \ LEFT RETN ] =
P3-2 G16 E17 D17 A17 B13 C11 D11 E11 DO INST PREV N/C N/C ' [ -
P3-4 E18 E20 C17 A20 B20 C20 D20 D18 RMVE PF1 UP k0 k1 k4 k7 NEXT
P3-5 --- G20 D21 A21 B21 B18 C21 E21 --- F17 k8 N/C k2 RGHT k5 PF2
P3-6 --- G21 D22 A22 B22 C22 B17 E22 --- F18 k9 k. k3 k6 DOWN PF3
P3-9 --- --- G23 A23 C23 D23 E23 G22 --- --- F20 kRTN k, k- PF4 F19
--- = No matrix switch at all
N/C = switch present, but officially unused?
*/
PORT_START("KBD0") // Row P2-5
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
@ -274,176 +318,176 @@ INPUT_PORTS_START( lk201 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) // B99 and B11
PORT_START("KBD1") PORT_START("KBD1") // Row P1-10
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) // A10, exists but no key above this position (right compose?)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Compose") PORT_CODE(KEYCODE_LALT) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Compose") PORT_CODE(KEYCODE_LALT) // A99
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) // C00, does not toggle/physically lock
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) // C99
PORT_START("KBD2") PORT_START("KBD2") // Row P1-6
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) // B01
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) // C01
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) // D01
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1") PORT_CODE(KEYCODE_1) // E01
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tilde") PORT_CODE(KEYCODE_TILDE) // E00 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tilde") PORT_CODE(KEYCODE_TILDE) // E00
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) // D99, exists but no key above this position
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) // E99, exists but no key above this position
PORT_START("KBD3") PORT_START("KBD3") // Row P1-7
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("<") PORT_CODE(KEYCODE_BACKSLASH2) // B00 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("<") PORT_CODE(KEYCODE_BACKSLASH2) // B00
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) // B02
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("S") PORT_CODE(KEYCODE_S) // C02
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) // D02
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) // D00
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2") PORT_CODE(KEYCODE_2) // E02
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Hold Screen (F1)") PORT_CODE(KEYCODE_F1) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Hold Screen (F1)") PORT_CODE(KEYCODE_F1) // G99
PORT_START("KBD4") PORT_START("KBD4") // Row P1-9
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C) // B03
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("D") PORT_CODE(KEYCODE_D) // C03
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E) // D03
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3") PORT_CODE(KEYCODE_3) // E03
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Setup (F3)") PORT_CODE(KEYCODE_PAUSE) // SET UP = Pause on PC PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Setup (F3)") PORT_CODE(KEYCODE_F3) // G01
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Print Screen (F2)") PORT_CODE(KEYCODE_F2) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Print Screen (F2)") PORT_CODE(KEYCODE_F2) // G00
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("KBD5") PORT_START("KBD5") // Row P1-11
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) // A04 and A06
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V) // B04
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) // C04
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R) // D04
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4") PORT_CODE(KEYCODE_4) // E04
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Break (F5)") PORT_CODE(KEYCODE_F5) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Break (F5)") PORT_CODE(KEYCODE_F5) // G03
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Data / Talk (F4)") PORT_CODE(KEYCODE_F4) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Data / Talk (F4)") PORT_CODE(KEYCODE_F4) // G02
PORT_START("KBD6") PORT_START("KBD6") // Row P2-2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) // B05
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("G") PORT_CODE(KEYCODE_G) // C05
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T") PORT_CODE(KEYCODE_T) // D05
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5") PORT_CODE(KEYCODE_5) // E05
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Interrupt (F6) [X]") PORT_CODE(KEYCODE_F6) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Interrupt (F6) [X]") PORT_CODE(KEYCODE_F6) // G05
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) // G04, exists but no key above this position (between F5 and F6)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("KBD7") PORT_START("KBD7") // Row P2-3
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N) // B06
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H") PORT_CODE(KEYCODE_H) // C06
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) // D06
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6") PORT_CODE(KEYCODE_6) // E06
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Resume (F7) [Fortsetzen]") PORT_CODE(KEYCODE_F7) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Resume (F7) [Fortsetzen]") PORT_CODE(KEYCODE_F7) // G06
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Cancel (F8) [Zuruecknehmen]") PORT_CODE(KEYCODE_F8) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Cancel (F8) [Zuruecknehmen]") PORT_CODE(KEYCODE_F8) // G07
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("KBD8") PORT_START("KBD8") // Row P2-4
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M") PORT_CODE(KEYCODE_M) // B07
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J") PORT_CODE(KEYCODE_J) // C07
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U") PORT_CODE(KEYCODE_U) // D07
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7") PORT_CODE(KEYCODE_7) // E07
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Exit (F10) [Fertig]") PORT_CODE(KEYCODE_F10) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Exit (F10) [Fertig]") PORT_CODE(KEYCODE_F10) // G09
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Main Screen (F9) [Hauptbild]") PORT_CODE(KEYCODE_F9) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Main Screen (F9) [Hauptbild]") PORT_CODE(KEYCODE_F9) // G08
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("KBD9") PORT_START("KBD9") // Row P2-6
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) // B08
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K") PORT_CODE(KEYCODE_K) // C08
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I) // D08
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8") PORT_CODE(KEYCODE_8) // E08
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) // G10, exists but no key above this position (between F10 and F11)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ESC (F11)") PORT_CODE(KEYCODE_F11) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ESC (F11)") PORT_CODE(KEYCODE_F11) // G11
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("KBD10") PORT_START("KBD10") // Row P2-9
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) // B09
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("L") PORT_CODE(KEYCODE_L) // C09
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O) // D09
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9") PORT_CODE(KEYCODE_9) // E09
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LF (F13)") PORT_CODE(KEYCODE_F13) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LF (F13)") PORT_CODE(KEYCODE_F13) // G13
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("BS (F12)") PORT_CODE(KEYCODE_F12) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("BS (F12)") PORT_CODE(KEYCODE_F12) // G12
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("KBD11") PORT_START("KBD11") // Row P2-10
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH) // B10
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) // C10
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // FIXME - duplicate "Return" PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // D13, exists but no key(?) above this position (under the upper half of the 'Return' key), DOES register as return; NOT LISTED on older schematic but definitely appears on the physical membrane of the later 6805 keyboard!
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) // D10
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) // E10
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete <X") PORT_CODE(KEYCODE_BACKSPACE) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete <X") PORT_CODE(KEYCODE_BACKSPACE) // E13
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Additional Options (F14) [Zusaetze]") PORT_CODE(KEYCODE_PRTSCR) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Additional Options (F14) [Zusaetze]") PORT_CODE(KEYCODE_PRTSCR) // G14
PORT_START("KBD12") PORT_START("KBD12") // Row P2-11
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) // C12
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) // B16
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) // C13
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) // D12
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Select") PORT_CODE(KEYCODE_DEL) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Select") PORT_CODE(KEYCODE_DEL) // D16
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Help (F15)") PORT_CODE(KEYCODE_RALT) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Help (F15)") PORT_CODE(KEYCODE_RALT) // G15
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS) // E12
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Find") PORT_CODE(KEYCODE_INSERT) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Find") PORT_CODE(KEYCODE_INSERT) // E16
PORT_START("KBD13") PORT_START("KBD13") // Row P3-2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) // A17, exists but no key above this position (below the 'Down Arrow')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) // B13, exists but no key above this position (right of right shift, 'whoami' or 'linefeed' key on decwriter?)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("'") PORT_CODE(KEYCODE_QUOTE) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("'") PORT_CODE(KEYCODE_QUOTE) // C11
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) // D11
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Previous [^]") PORT_CODE(KEYCODE_END) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Previous [^]") PORT_CODE(KEYCODE_END) // D17
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Do (F16) [Ausfuehren]") PORT_CODE(KEYCODE_RCONTROL) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Do (F16) [Ausfuehren]") PORT_CODE(KEYCODE_RCONTROL) // G16
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) // E11
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert Here") PORT_CODE(KEYCODE_HOME) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert Here") PORT_CODE(KEYCODE_HOME) // E17
PORT_START("KBD14") PORT_START("KBD14") // Row P3-4
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 0") PORT_CODE(KEYCODE_0_PAD) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 0") PORT_CODE(KEYCODE_0_PAD) // A20
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 1") PORT_CODE(KEYCODE_1_PAD) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 1") PORT_CODE(KEYCODE_1_PAD) // B20
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 4") PORT_CODE(KEYCODE_4_PAD) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 4") PORT_CODE(KEYCODE_4_PAD) // C20
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 7") PORT_CODE(KEYCODE_7_PAD) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 7") PORT_CODE(KEYCODE_7_PAD) // D20
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) // C17
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Remove") PORT_CODE(KEYCODE_PGUP) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Remove") PORT_CODE(KEYCODE_PGUP) // E18
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Next [v]") PORT_CODE(KEYCODE_PGDN) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Next [v]") PORT_CODE(KEYCODE_PGDN) // D18
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF1") PORT_CODE(KEYCODE_NUMLOCK) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF1") PORT_CODE(KEYCODE_NUMLOCK) // E20
PORT_START("KBD15") PORT_START("KBD15") // Row P3-5
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // FIXME - duplicate "Num 0" PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // A21, exists AND WORKS (as '0') but no key above this position (under right side of 'Keypad 0' key, maybe intended as a '00' key,)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 2") PORT_CODE(KEYCODE_2_PAD) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 2") PORT_CODE(KEYCODE_2_PAD) // B21
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) // B18
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 5") PORT_CODE(KEYCODE_5_PAD) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 5") PORT_CODE(KEYCODE_5_PAD) // C21
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 8") PORT_CODE(KEYCODE_8_PAD) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 8") PORT_CODE(KEYCODE_8_PAD) // D21
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF2") PORT_CODE(KEYCODE_SLASH_PAD) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF2") PORT_CODE(KEYCODE_SLASH_PAD) // E21
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F17") PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F17") // G20
PORT_START("KBD16") PORT_START("KBD16") // Row P3-6
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num .") PORT_CODE(KEYCODE_DEL_PAD) // "." on num.pad PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num .") PORT_CODE(KEYCODE_DEL_PAD) // A22
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 3") PORT_CODE(KEYCODE_3_PAD) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 3") PORT_CODE(KEYCODE_3_PAD) // B22
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 6") PORT_CODE(KEYCODE_6_PAD) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 6") PORT_CODE(KEYCODE_6_PAD) // C22
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) // B17
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 9") PORT_CODE(KEYCODE_9_PAD) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 9") PORT_CODE(KEYCODE_9_PAD) // D22
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF3") PORT_CODE(KEYCODE_ASTERISK) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF3") PORT_CODE(KEYCODE_ASTERISK) // E22
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F18") PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F18") // G21
PORT_START("KBD17") PORT_START("KBD17") // Row P3-9
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER_PAD) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER_PAD) // A23
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num ,") PORT_CODE(KEYCODE_PLUS_PAD) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num ,") PORT_CODE(KEYCODE_PLUS_PAD) // C23
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // PORT_NAME("Num -") = duplicate...see KBD13 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num -") // D23
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF4") PORT_CODE(KEYCODE_MINUS_PAD) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF4") PORT_CODE(KEYCODE_MINUS_PAD) // E23
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20") PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20") // G23
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F19") PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F19") // G22
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END

View File

@ -118,14 +118,14 @@ really exist.
#include "emu.h" #include "emu.h"
#include "ns10crypt.h" #include "ns10crypt.h"
constexpr device_type CHOCOVDR_DECRYPTER = &device_creator<chocovdr_decrypter_device>; const device_type CHOCOVDR_DECRYPTER = &device_creator<chocovdr_decrypter_device>;
constexpr device_type GAMSHARA_DECRYPTER = &device_creator<gamshara_decrypter_device>; const device_type GAMSHARA_DECRYPTER = &device_creator<gamshara_decrypter_device>;
constexpr device_type GJSPACE_DECRYPTER = &device_creator<gjspace_decrypter_device>; const device_type GJSPACE_DECRYPTER = &device_creator<gjspace_decrypter_device>;
constexpr device_type KNPUZZLE_DECRYPTER = &device_creator<knpuzzle_decrypter_device>; const device_type KNPUZZLE_DECRYPTER = &device_creator<knpuzzle_decrypter_device>;
constexpr device_type KONOTAKO_DECRYPTER = &device_creator<konotako_decrypter_device>; const device_type KONOTAKO_DECRYPTER = &device_creator<konotako_decrypter_device>;
constexpr device_type MRDRILR2_DECRYPTER = &device_creator<mrdrilr2_decrypter_device>; const device_type MRDRILR2_DECRYPTER = &device_creator<mrdrilr2_decrypter_device>;
constexpr device_type NFLCLSFB_DECRYPTER = &device_creator<nflclsfb_decrypter_device>; const device_type NFLCLSFB_DECRYPTER = &device_creator<nflclsfb_decrypter_device>;
constexpr device_type STARTRGN_DECRYPTER = &device_creator<startrgn_decrypter_device>; const device_type STARTRGN_DECRYPTER = &device_creator<startrgn_decrypter_device>;
// base class // base class
@ -161,7 +161,7 @@ ns10_decrypter_device::~ns10_decrypter_device()
constexpr int UNKNOWN {16}; constexpr int UNKNOWN {16};
constexpr int U {UNKNOWN}; constexpr int U {UNKNOWN};
// this could perfectly be part of the per-game logic but, with only one known type-1 game, we cannot say anything definitive // this could perfectly be part of the per-game logic but, with only one known type-1 game, we cannot say anything definitive
constexpr int ns10_type1_decrypter_device::initSbox[16] {U,U,U,0,4,9,U,U,U,8,U,1,U,9,U,5}; const int ns10_type1_decrypter_device::initSbox[16] {U,U,U,0,4,9,U,U,U,8,U,1,U,9,U,5};
ns10_type1_decrypter_device::ns10_type1_decrypter_device(device_type type, const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) ns10_type1_decrypter_device::ns10_type1_decrypter_device(device_type type, const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: ns10_decrypter_device(type, mconfig, tag, owner, clock) : ns10_decrypter_device(type, mconfig, tag, owner, clock)
@ -211,7 +211,7 @@ void ns10_type1_decrypter_device::device_start()
// type-2 decrypter // type-2 decrypter
// this could perfectly be part of the per-game logic; by now, only gamshara seems to use it, so we keep it global // this could perfectly be part of the per-game logic; by now, only gamshara seems to use it, so we keep it global
constexpr int ns10_type2_decrypter_device::initSbox[16] {0,12,13,6,2,4,9,8,11,1,7,15,10,5,14,3}; const int ns10_type2_decrypter_device::initSbox[16] {0,12,13,6,2,4,9,8,11,1,7,15,10,5,14,3};
ns10_type2_decrypter_device::ns10_type2_decrypter_device(device_type type, const ns10_crypto_logic &logic, const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) ns10_type2_decrypter_device::ns10_type2_decrypter_device(device_type type, const ns10_crypto_logic &logic, const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: ns10_decrypter_device(type, mconfig, tag, owner, clock) : ns10_decrypter_device(type, mconfig, tag, owner, clock)

View File

@ -0,0 +1,264 @@
// license:BSD-3-Clause
// copyright-holders:Barry Rodewald
#include "machine/octo_kbd.h"
#include "machine/keyboard.ipp"
octopus_keyboard_device::octopus_keyboard_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock)
: buffered_rs232_device(mconfig, OCTOPUS_KEYBOARD, "Octopus Keyboard", tag, owner, 0, "octopus_kb", __FILE__)
, device_matrix_keyboard_interface(mconfig, *this, "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7", "LINE8", "LINE9", "LINEA", "LINEB", "LINEC", "LINED", "LINEE", "LINEF")
{
}
void octopus_keyboard_device::received_byte(UINT8 data)
{
// TODO: figure out received data format (used for Shift Lock and Caps Lock LEDs)
printf("KBD: Received byte %02x\n",data);
}
void octopus_keyboard_device::key_make(UINT8 row, UINT8 column)
{
if (row != 0x0eU)
typematic_start(row, column, attotime::from_msec(m_delay), attotime::from_msec(m_repeat));
else
typematic_restart(attotime::from_msec(m_delay), attotime::from_msec(m_repeat));
transmit_byte((row << 3) | column);
}
void octopus_keyboard_device::key_repeat(UINT8 row, UINT8 column)
{
transmit_byte((row << 3) | column);
}
void octopus_keyboard_device::key_break(UINT8 row, UINT8 column)
{
device_matrix_keyboard_interface::key_break(row, column);
transmit_byte(0x80U | (row << 3) | column);
}
static INPUT_PORTS_START( octopus_keyboard )
// 0x00
PORT_START("LINE0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7 \'") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n')
PORT_START("LINE1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2 \"") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F22") //PORT_CODE(KEYCODE_SPACE)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F25")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z')
// 0x10
PORT_START("LINE2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("] }") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("^ ~") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('^') PORT_CHAR('~')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F13")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F30")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F28")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_2)
PORT_START("LINE3")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F23")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F26")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
// 0x20
PORT_START("LINE4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F11") PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F31")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F29")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_START("LINE5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift Lock") PORT_CODE(KEYCODE_LALT)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Cntrl") PORT_CODE(KEYCODE_LCONTROL)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F24")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F27")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
// 0x30
PORT_START("LINE6")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(": *") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@ \\") PORT_CHAR('@') PORT_CHAR('\\')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("- =") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F12") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_START("LINE7")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F9") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m')
// 0x40
PORT_START("LINE8")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Line Feed") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(10)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F15")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 0") PORT_CODE(KEYCODE_0_PAD)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 1") PORT_CODE(KEYCODE_1_PAD)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 4") PORT_CODE(KEYCODE_4_PAD)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F32")
PORT_START("LINE9")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F19")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 8") PORT_CODE(KEYCODE_8_PAD)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v')
// 0x50
PORT_START("LINEA")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F16")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F17")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 2") PORT_CODE(KEYCODE_2_PAD)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 5") PORT_CODE(KEYCODE_5_PAD)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("LINEB")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 $") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 9") PORT_CODE(KEYCODE_9_PAD)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c')
// 0x60
PORT_START("LINEC")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Del") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_") PORT_CHAR('_')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\ |") PORT_CODE(KEYCODE_BACKSLASH)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F14")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad .") PORT_CODE(KEYCODE_DEL_PAD)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 3") PORT_CODE(KEYCODE_3_PAD)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 6") PORT_CODE(KEYCODE_6_PAD)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Rep")
PORT_START("LINED")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3 \xE2\x82\xA4") PORT_CODE(KEYCODE_3) PORT_CHAR('3')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F21")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x')
// 0x70
PORT_START("LINEE")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 )") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F10") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_START("LINEF")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F18")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Numpad 7") PORT_CODE(KEYCODE_7_PAD)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b')
INPUT_PORTS_END
ioport_constructor octopus_keyboard_device::device_input_ports() const
{
return INPUT_PORTS_NAME(octopus_keyboard);
}
void octopus_keyboard_device::device_start()
{
buffered_rs232_device::device_start();
save_item(NAME(m_delay));
save_item(NAME(m_repeat));
save_item(NAME(m_enabled));
}
void octopus_keyboard_device::device_reset()
{
buffered_rs232_device::device_reset();
set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1);
set_rcv_rate(1200);
set_tra_rate(9600);
receive_register_reset();
transmit_register_reset();
m_enabled = 0;
m_delay = 500; // 3*100+200
m_repeat = 110; // 4^2*5+30
stop_processing();
reset_key_state();
typematic_stop();
clear_fifo();
output_dcd(0);
output_dsr(0);
output_cts(0);
output_rxd(1);
start_processing(attotime::from_hz(9600));
}
void octopus_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
device_matrix_keyboard_interface::device_timer(timer, id, param, ptr);
buffered_rs232_device::device_timer(timer, id, param, ptr);
}
const device_type OCTOPUS_KEYBOARD = &device_creator<octopus_keyboard_device>;

View File

@ -0,0 +1,32 @@
// license:BSD-3-Clause
// copyright-holders:Barry Rodewald
#ifndef OCTO_KBD_H
#define OCTO_KBD_H
#include "bus/rs232/keyboard.h"
class octopus_keyboard_device : public buffered_rs232_device<16U>, protected device_matrix_keyboard_interface<16U>
{
public:
octopus_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ioport_constructor device_input_ports() const override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void key_make(UINT8 row, UINT8 column) override;
virtual void key_repeat(UINT8 row, UINT8 column) override;
virtual void key_break(UINT8 row, UINT8 column) override;
private:
virtual void received_byte(UINT8 data) override;
int m_delay; // keypress delay after initial press
int m_repeat; // keypress repeat rate
UINT8 m_enabled; // keyboard enabled?
};
extern const device_type OCTOPUS_KEYBOARD;
#endif // OCTO_KBD_H

View File

@ -75,6 +75,9 @@ DRIVER_INIT_MEMBER(stfight_state,cshooter)
void stfight_state::machine_start() void stfight_state::machine_start()
{ {
membank("mainbank")->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000);
membank("mainbank")->set_entry(0);
save_item(NAME(m_fm_data)); save_item(NAME(m_fm_data));
save_item(NAME(m_cpu_to_mcu_data)); save_item(NAME(m_cpu_to_mcu_data));
save_item(NAME(m_cpu_to_mcu_empty)); save_item(NAME(m_cpu_to_mcu_empty));
@ -102,27 +105,21 @@ void stfight_state::machine_reset()
// Coin signals are active low // Coin signals are active low
m_coin_state = 3; m_coin_state = 3;
// initialise ROM bank
stfight_bank_w(m_maincpu->space(AS_PROGRAM), 0, 0);
} }
// It's entirely possible that this bank is never switched out // It's entirely possible that this bank is never switched out
// - in fact I don't even know how/where it's switched in! // - in fact I don't even know how/where it's switched in!
WRITE8_MEMBER(stfight_state::stfight_bank_w) WRITE8_MEMBER(stfight_state::stfight_bank_w)
{ {
UINT8 *ROM2 = memregion("maincpu")->base() + 0x10000; UINT8 bank_num = 0;
UINT16 bank_num;
bank_num = 0;
if(data & 0x80) if(data & 0x80)
bank_num |= 0x8000; bank_num |= 2;
if(data & 0x04) if(data & 0x04)
bank_num |= 0x4000; bank_num |= 1;
membank("bank1")->set_base(&ROM2[bank_num]); membank("mainbank")->set_entry(bank_num);
} }
/* /*

View File

@ -23,80 +23,87 @@
void xbox_base_state::dump_string_command(int ref, int params, const char **param) void xbox_base_state::dump_string_command(int ref, int params, const char **param)
{ {
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space(); address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1) if (params < 1)
return; return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return; return;
offs_t address = (offs_t)addr; address = (offs_t)addr;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
{ {
machine().debugger().console().printf("Address is unmapped.\n"); con.printf("Address is unmapped.\n");
return; return;
} }
address = (offs_t)addr;
UINT32 length = space.read_word_unaligned(address); UINT32 length = cpu.read_word(space, address, true);
UINT32 maximumlength = space.read_word_unaligned(address + 2); UINT32 maximumlength = cpu.read_word(space, address + 2, true);
offs_t buffer = space.read_dword_unaligned(address + 4); offs_t buffer = cpu.read_dword(space, address + 4, true);
machine().debugger().console().printf("Length %d word\n", length); con.printf("Length %d word\n", length);
machine().debugger().console().printf("MaximumLength %d word\n", maximumlength); con.printf("MaximumLength %d word\n", maximumlength);
machine().debugger().console().printf("Buffer %08X byte* ", buffer); con.printf("Buffer %08X byte* ", buffer);
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, buffer))
{
machine().debugger().console().printf("\nBuffer is unmapped.\n");
return;
}
if (length > 256) if (length > 256)
length = 256; length = 256;
for (int a = 0; a < length; a++) for (int a = 0; a < length; a++)
{ {
UINT8 c = space.read_byte(buffer + a); UINT8 c = cpu.read_byte(space, buffer + a, true);
machine().debugger().console().printf("%c", c); con.printf("%c", c);
} }
machine().debugger().console().printf("\n"); con.printf("\n");
} }
void xbox_base_state::dump_process_command(int ref, int params, const char **param) void xbox_base_state::dump_process_command(int ref, int params, const char **param)
{ {
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space(); address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1) if (params < 1)
return; return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return; return;
offs_t address = (offs_t)addr; address = (offs_t)addr;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
{ {
machine().debugger().console().printf("Address is unmapped.\n"); con.printf("Address is unmapped.\n");
return; return;
} }
machine().debugger().console().printf("ReadyListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address), space.read_dword_unaligned(address + 4)); address = (offs_t)addr;
machine().debugger().console().printf("ThreadListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 8), space.read_dword_unaligned(address + 12));
machine().debugger().console().printf("StackCount %d dword\n", space.read_dword_unaligned(address + 16)); con.printf("ReadyListHead {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address, true), cpu.read_dword(space, address + 4, true));
machine().debugger().console().printf("ThreadQuantum %d dword\n", space.read_dword_unaligned(address + 20)); con.printf("ThreadListHead {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 8, true), cpu.read_dword(space, address + 12, true));
machine().debugger().console().printf("BasePriority %d byte\n", space.read_byte(address + 24)); con.printf("StackCount %d dword\n", cpu.read_dword(space, address + 16, true));
machine().debugger().console().printf("DisableBoost %d byte\n", space.read_byte(address + 25)); con.printf("ThreadQuantum %d dword\n", cpu.read_dword(space, address + 20, true));
machine().debugger().console().printf("DisableQuantum %d byte\n", space.read_byte(address + 26)); con.printf("BasePriority %d byte\n", cpu.read_byte(space, address + 24, true));
machine().debugger().console().printf("_padding %d byte\n", space.read_byte(address + 27)); con.printf("DisableBoost %d byte\n", cpu.read_byte(space, address + 25, true));
con.printf("DisableQuantum %d byte\n", cpu.read_byte(space, address + 26, true));
con.printf("_padding %d byte\n", cpu.read_byte(space, address + 27, true));
} }
void xbox_base_state::dump_list_command(int ref, int params, const char **param) void xbox_base_state::dump_list_command(int ref, int params, const char **param)
{ {
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space(); address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1) if (params < 1)
return; return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return; return;
@ -110,26 +117,27 @@ void xbox_base_state::dump_list_command(int ref, int params, const char **param)
} }
UINT64 start = addr; UINT64 start = addr;
offs_t address = (offs_t)addr; address = (offs_t)addr;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
{ {
machine().debugger().console().printf("Address is unmapped.\n"); con.printf("Address is unmapped.\n");
return; return;
} }
address = (offs_t)addr;
if (params >= 2) if (params >= 2)
machine().debugger().console().printf("Entry Object\n"); con.printf("Entry Object\n");
else else
machine().debugger().console().printf("Entry\n"); con.printf("Entry\n");
UINT64 old; UINT64 old;
for (int num = 0; num < 32; num++) for (int num = 0; num < 32; num++)
{ {
if (params >= 2) if (params >= 2)
machine().debugger().console().printf("%08X %08X\n", (UINT32)addr, (offs_t)addr - offset); con.printf("%08X %08X\n", (UINT32)addr, (offs_t)addr - offset);
else else
machine().debugger().console().printf("%08X\n", (UINT32)addr); con.printf("%08X\n", (UINT32)addr);
old = addr; old = addr;
addr = space.read_dword_unaligned(address); addr = cpu.read_dword(space, address, true);
if (addr == start) if (addr == start)
break; break;
if (addr == old) if (addr == old)
@ -137,99 +145,102 @@ void xbox_base_state::dump_list_command(int ref, int params, const char **param)
address = (offs_t)addr; address = (offs_t)addr;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
break; break;
address = (offs_t)addr;
} }
} }
void xbox_base_state::dump_dpc_command(int ref, int params, const char **param) void xbox_base_state::dump_dpc_command(int ref, int params, const char **param)
{ {
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space(); address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1) if (params < 1)
return; return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return; return;
offs_t address = (offs_t)addr; address = (offs_t)addr;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
{ {
machine().debugger().console().printf("Address is unmapped.\n"); con.printf("Address is unmapped.\n");
return; return;
} }
machine().debugger().console().printf("Type %d word\n", space.read_word_unaligned(address)); address = (offs_t)addr;
machine().debugger().console().printf("Inserted %d byte\n", space.read_byte(address + 2)); con.printf("Type %d word\n", cpu.read_word(space, address, true));
machine().debugger().console().printf("Padding %d byte\n", space.read_byte(address + 3)); con.printf("Inserted %d byte\n", cpu.read_byte(space, address + 2, true));
machine().debugger().console().printf("DpcListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 4), space.read_dword_unaligned(address + 8)); con.printf("Padding %d byte\n", cpu.read_byte(space, address + 3, true));
machine().debugger().console().printf("DeferredRoutine %08X dword\n", space.read_dword_unaligned(address + 12)); con.printf("DpcListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 4, true), cpu.read_dword(space, address + 8, true));
machine().debugger().console().printf("DeferredContext %08X dword\n", space.read_dword_unaligned(address + 16)); con.printf("DeferredRoutine %08X dword\n", cpu.read_dword(space, address + 12, true));
machine().debugger().console().printf("SystemArgument1 %08X dword\n", space.read_dword_unaligned(address + 20)); con.printf("DeferredContext %08X dword\n", cpu.read_dword(space, address + 16, true));
machine().debugger().console().printf("SystemArgument2 %08X dword\n", space.read_dword_unaligned(address + 24)); con.printf("SystemArgument1 %08X dword\n", cpu.read_dword(space, address + 20, true));
con.printf("SystemArgument2 %08X dword\n", cpu.read_dword(space, address + 24, true));
} }
void xbox_base_state::dump_timer_command(int ref, int params, const char **param) void xbox_base_state::dump_timer_command(int ref, int params, const char **param)
{ {
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space(); address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1) if (params < 1)
return; return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return; return;
offs_t address = (offs_t)addr; address = (offs_t)addr;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
{ {
machine().debugger().console().printf("Address is unmapped.\n"); con.printf("Address is unmapped.\n");
return; return;
} }
machine().debugger().console().printf("Header.Type %d byte\n", space.read_byte(address)); address = (offs_t)addr;
machine().debugger().console().printf("Header.Absolute %d byte\n", space.read_byte(address + 1)); con.printf("Header.Type %d byte\n", cpu.read_byte(space, address, true));
machine().debugger().console().printf("Header.Size %d byte\n", space.read_byte(address + 2)); con.printf("Header.Absolute %d byte\n", cpu.read_byte(space, address + 1, true));
machine().debugger().console().printf("Header.Inserted %d byte\n", space.read_byte(address + 3)); con.printf("Header.Size %d byte\n", cpu.read_byte(space, address + 2, true));
machine().debugger().console().printf("Header.SignalState %08X dword\n", space.read_dword_unaligned(address + 4)); con.printf("Header.Inserted %d byte\n", cpu.read_byte(space, address + 3, true));
machine().debugger().console().printf("Header.WaitListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 8), space.read_dword_unaligned(address + 12)); con.printf("Header.SignalState %08X dword\n", cpu.read_dword(space, address + 4, true));
machine().debugger().console().printf("%s", string_format("DueTime %I64x qword\n", (INT64)space.read_qword_unaligned(address + 16)).c_str()); con.printf("Header.WaitListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 8, true), cpu.read_dword(space, address + 12, true));
machine().debugger().console().printf("TimerListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 24), space.read_dword_unaligned(address + 28)); con.printf("%s", string_format("DueTime %I64x qword\n", (INT64)cpu.read_qword(space, address + 16, true)).c_str());
machine().debugger().console().printf("Dpc %08X dword\n", space.read_dword_unaligned(address + 32)); con.printf("TimerListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 24, true), cpu.read_dword(space, address + 28, true));
machine().debugger().console().printf("Period %d dword\n", space.read_dword_unaligned(address + 36)); con.printf("Dpc %08X dword\n", cpu.read_dword(space, address + 32, true));
con.printf("Period %d dword\n", cpu.read_dword(space, address + 36, true));
} }
void xbox_base_state::curthread_command(int ref, int params, const char **param) void xbox_base_state::curthread_command(int ref, int params, const char **param)
{ {
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space(); address_space &space = m_maincpu->space();
offs_t address;
UINT64 fsbase = m_maincpu->state_int(44); UINT64 fsbase = m_maincpu->state_int(44); // base of FS register
offs_t address = (offs_t)fsbase + 0x28; address = (offs_t)fsbase + 0x28;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
{ {
machine().debugger().console().printf("Address is unmapped.\n"); con.printf("Address is unmapped.\n");
return; return;
} }
address = (offs_t)fsbase + 0x28;
UINT32 kthrd = space.read_dword_unaligned(address); UINT32 kthrd = cpu.read_dword(space, address, true);
machine().debugger().console().printf("Current thread is %08X\n", kthrd); con.printf("Current thread is %08X\n", kthrd);
address = (offs_t)kthrd + 0x1c; address = (offs_t)kthrd + 0x1c;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) UINT32 topstack = cpu.read_dword(space, address, true);
return; con.printf("Current thread stack top is %08X\n", topstack);
UINT32 topstack = space.read_dword_unaligned(address);
machine().debugger().console().printf("Current thread stack top is %08X\n", topstack);
address = (offs_t)kthrd + 0x28; address = (offs_t)kthrd + 0x28;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) UINT32 tlsdata = cpu.read_dword(space, address, true);
return;
UINT32 tlsdata = space.read_dword_unaligned(address);
if (tlsdata == 0) if (tlsdata == 0)
address = (offs_t)topstack - 0x210 - 8; address = (offs_t)topstack - 0x210 - 8;
else else
address = (offs_t)tlsdata - 8; address = (offs_t)tlsdata - 8;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) con.printf("Current thread function is %08X\n", cpu.read_dword(space, address, true));
return;
machine().debugger().console().printf("Current thread function is %08X\n", space.read_dword_unaligned(address));
} }
void xbox_base_state::generate_irq_command(int ref, int params, const char **param) void xbox_base_state::generate_irq_command(int ref, int params, const char **param)
@ -249,20 +260,22 @@ void xbox_base_state::generate_irq_command(int ref, int params, const char **par
void xbox_base_state::nv2a_combiners_command(int ref, int params, const char **param) void xbox_base_state::nv2a_combiners_command(int ref, int params, const char **param)
{ {
debugger_console &con = machine().debugger().console();
int en = nvidia_nv2a->toggle_register_combiners_usage(); int en = nvidia_nv2a->toggle_register_combiners_usage();
if (en != 0) if (en != 0)
machine().debugger().console().printf("Register combiners enabled\n"); con.printf("Register combiners enabled\n");
else else
machine().debugger().console().printf("Register combiners disabled\n"); con.printf("Register combiners disabled\n");
} }
void xbox_base_state::waitvblank_command(int ref, int params, const char **param) void xbox_base_state::waitvblank_command(int ref, int params, const char **param)
{ {
debugger_console &con = machine().debugger().console();
int en = nvidia_nv2a->toggle_wait_vblank_support(); int en = nvidia_nv2a->toggle_wait_vblank_support();
if (en != 0) if (en != 0)
machine().debugger().console().printf("Vblank method enabled\n"); con.printf("Vblank method enabled\n");
else else
machine().debugger().console().printf("Vblank method disabled\n"); con.printf("Vblank method disabled\n");
} }
void xbox_base_state::grab_texture_command(int ref, int params, const char **param) void xbox_base_state::grab_texture_command(int ref, int params, const char **param)
@ -350,20 +363,22 @@ void xbox_base_state::vprogdis_command(int ref, int params, const char **param)
void xbox_base_state::help_command(int ref, int params, const char **param) void xbox_base_state::help_command(int ref, int params, const char **param)
{ {
machine().debugger().console().printf("Available Xbox commands:\n"); debugger_console &con = machine().debugger().console();
machine().debugger().console().printf(" xbox dump_string,<address> -- Dump _STRING object at <address>\n");
machine().debugger().console().printf(" xbox dump_process,<address> -- Dump _PROCESS object at <address>\n"); con.printf("Available Xbox commands:\n");
machine().debugger().console().printf(" xbox dump_list,<address>[,<offset>] -- Dump _LIST_ENTRY chain starting at <address>\n"); con.printf(" xbox dump_string,<address> -- Dump _STRING object at <address>\n");
machine().debugger().console().printf(" xbox dump_dpc,<address> -- Dump _KDPC object at <address>\n"); con.printf(" xbox dump_process,<address> -- Dump _PROCESS object at <address>\n");
machine().debugger().console().printf(" xbox dump_timer,<address> -- Dump _KTIMER object at <address>\n"); con.printf(" xbox dump_list,<address>[,<offset>] -- Dump _LIST_ENTRY chain starting at <address>\n");
machine().debugger().console().printf(" xbox curthread -- Print information about current thread\n"); con.printf(" xbox dump_dpc,<address> -- Dump _KDPC object at <address>\n");
machine().debugger().console().printf(" xbox irq,<number> -- Generate interrupt with irq number 0-15\n"); con.printf(" xbox dump_timer,<address> -- Dump _KTIMER object at <address>\n");
machine().debugger().console().printf(" xbox nv2a_combiners -- Toggle use of register combiners\n"); con.printf(" xbox curthread -- Print information about current thread\n");
machine().debugger().console().printf(" xbox waitvblank -- Toggle support for wait vblank method\n"); con.printf(" xbox irq,<number> -- Generate interrupt with irq number 0-15\n");
machine().debugger().console().printf(" xbox grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\n"); con.printf(" xbox nv2a_combiners -- Toggle use of register combiners\n");
machine().debugger().console().printf(" xbox grab_vprog,<filename> -- save current vertex program instruction slots to <filename>\n"); con.printf(" xbox waitvblank -- Toggle support for wait vblank method\n");
machine().debugger().console().printf(" xbox vprogdis,<address>,<length>[,<type>] -- disassemble <lenght> vertex program instructions at <address> of <type>\n"); con.printf(" xbox grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\n");
machine().debugger().console().printf(" xbox help -- this list\n"); con.printf(" xbox grab_vprog,<filename> -- save current vertex program instruction slots to <filename>\n");
con.printf(" xbox vprogdis,<address>,<length>[,<type>] -- disassemble <lenght> vertex program instructions at <address> of <type>\n");
con.printf(" xbox help -- this list\n");
} }
void xbox_base_state::xbox_debug_commands(int ref, int params, const char **param) void xbox_base_state::xbox_debug_commands(int ref, int params, const char **param)

View File

@ -936,6 +936,9 @@ hr16b //
mmt8 // mmt8 //
sr16 // sr16 //
@source:alesis_qs.cpp
alesqs7 //
@source:alg.cpp @source:alg.cpp
alg_bios // alg_bios //
aplatoon // (c) 199? Nova? aplatoon // (c) 199? Nova?
@ -11015,6 +11018,7 @@ hmcompmx // GX858 (c) 1999
popn1 // GX803 (c) 1998 (Asia) popn1 // GX803 (c) 1998 (Asia)
popn2 // GX831 (c) 1998 (Japan) popn2 // GX831 (c) 1998 (Japan)
popn3 // GX980 (c) 1999 (Japan) popn3 // GX980 (c) 1999 (Japan)
popnstage // GQ970 (c) 1999 (Japan)
@source:dkong.cpp @source:dkong.cpp
8ballact // (c) 1984 Seatongrove Ltd (Magic Eletronics USA license) 8ballact // (c) 1984 Seatongrove Ltd (Magic Eletronics USA license)
@ -14164,8 +14168,10 @@ fxmcr165 // Gakken
gjackpot // Gakken gjackpot // Gakken
gpoker // Gakken gpoker // Gakken
h2hbaseb // Coleco h2hbaseb // Coleco
h2hboxing // Coleco
h2hfootb // Coleco h2hfootb // Coleco
lostreas // Parker Bros lostreas // Parker Bros
matchnum // A-One
mathmagi // APF mathmagi // APF
mdndclab // Mattel mdndclab // Mattel
merlin // Parker Bros merlin // Parker Bros
@ -14179,11 +14185,12 @@ ssimon // Milton Bradley
ssports4 // US Games ssports4 // US Games
starwbc // Kenner starwbc // Kenner
starwbcp // Kenner (patent) starwbcp // Kenner (patent)
stopthie // Parker Bros stopthief // Parker Bros
stopthiep // Parker Bros (patent) stopthiefp // Parker Bros (patent)
tandy12 // Tandy Radio Shack tandy12 // Tandy Radio Shack
tbreakup // Tomy tbreakup // Tomy
tc4 // Coleco tc4 // Coleco
tcfball // Tandy Radio Shack
zodiac // Coleco zodiac // Coleco
@source:hh_ucom4.cpp @source:hh_ucom4.cpp
@ -20466,6 +20473,7 @@ swtrilgy // 1998.11 Star Wars Trilogy Arcade
swtrilgya // swtrilgya //
vf3 // 1996.09 Virtua Fighter 3 vf3 // 1996.09 Virtua Fighter 3
vf3a // vf3a //
vf3c //
vf3tb // 1997.10 Virtua Fighter 3tb vf3tb // 1997.10 Virtua Fighter 3tb
von2 // 1998.03 Dennou Senki Virtual-On Oratorio Tangram von2 // 1998.03 Dennou Senki Virtual-On Oratorio Tangram
von254g // 1999.05 Dennou Senki Virtual-On Oratorio Tangram ver.5.4 von254g // 1999.05 Dennou Senki Virtual-On Oratorio Tangram ver.5.4
@ -33549,6 +33557,7 @@ fantasyu // (c) 1981 Rock-Ola
nibbler // (c) 1982 Rock-ola (version 9) nibbler // (c) 1982 Rock-ola (version 9)
nibbler6 // (c) 1982 Rock-ola (vresion 6) nibbler6 // (c) 1982 Rock-ola (vresion 6)
nibbler8 // (c) 1982 Rock-ola (version 8) nibbler8 // (c) 1982 Rock-ola (version 8)
nibblera // (c) 1982 Rock-ola (version ?)
nibblero // (c) 1983 Olympia/Rock-Ola (version 8) nibblero // (c) 1983 Olympia/Rock-Ola (version 8)
nibblerp // (c) 1982 Rock-ola (pballoon conversion) nibblerp // (c) 1982 Rock-ola (pballoon conversion)
pballoon // (c) 1982 SNK pballoon // (c) 1982 SNK
@ -34872,6 +34881,7 @@ topland // B62 (c) 1988 Taito Corporation Japan (World)
@source:taitogn.cpp @source:taitogn.cpp
chaoshea // 1998.10 Chaos Heat (V2.09O) chaoshea // 1998.10 Chaos Heat (V2.09O)
chaosheaj // 1998.10 Chaos Heat (V2.08J) chaosheaj // 1998.10 Chaos Heat (V2.08J)
coh3002t //
flipmaze // 1999.09 Flip Maze (V2.04J) flipmaze // 1999.09 Flip Maze (V2.04J)
gobyrc // 1999.?? Go By RC (V2.03O) gobyrc // 1999.?? Go By RC (V2.03O)
kollon // 2003.11 Kollon (V2.04J) kollon // 2003.11 Kollon (V2.04J)
@ -34892,7 +34902,6 @@ sianniv // 2003.10 Space Invaders Anniversary (V2.02J)
soutenry // 2001.02 Soutenryu (V2.07J) soutenry // 2001.02 Soutenryu (V2.07J)
spuzbobl // 1999.?? Super Puzzle Bobble (V2.05O) spuzbobl // 1999.?? Super Puzzle Bobble (V2.05O)
spuzboblj // 1999.03 Super Puzzle Bobble (Japan) spuzboblj // 1999.03 Super Puzzle Bobble (Japan)
taitogn //
usagi // 2001.12 Usagi (V2.02J) usagi // 2001.12 Usagi (V2.02J)
xiistag // 2002.07 XII Stag (V2.01J) xiistag // 2002.07 XII Stag (V2.01J)
zokuoten // 2000.12 Zoku Otenamihaiken (V2.03J) zokuoten // 2000.12 Zoku Otenamihaiken (V2.03J)
@ -37587,10 +37596,7 @@ zexall // zexall z80 test suite with kevtris' preloader
@source:zn.cpp @source:zn.cpp
1on1gov // 1 on 1 Government (JAPAN) 1on1gov // 1 on 1 Government (JAPAN)
acpsx //
aerofgts // Aero Fighters Special (TAIWAN) aerofgts // Aero Fighters Special (TAIWAN)
atluspsx //
atpsx //
bam2 // Bust a Move 2 (JAPANESE ROM ver. 1999/07/17 10:00:00) bam2 // Bust a Move 2 (JAPANESE ROM ver. 1999/07/17 10:00:00)
beastrzr // Beastorizer (USA) beastrzr // Beastorizer (USA)
beastrzrb // Beastorizer (USA Bootleg) beastrzrb // Beastorizer (USA Bootleg)
@ -37604,8 +37610,15 @@ brvbladea // Brave Blade (ASIA)
brvbladej // Brave Blade (JAPAN) brvbladej // Brave Blade (JAPAN)
brvbladeu // Brave Blade (USA) brvbladeu // Brave Blade (USA)
cbaj // Cool Boaders Arcade Jam cbaj // Cool Boaders Arcade Jam
cpzn1 // coh1000a //
cpzn2 // coh1000c //
coh1000t //
coh1000w //
coh1001l //
coh1002v //
coh1002e //
coh1002m //
coh3002c //
doapp // Dead Or Alive ++ (JAPAN) doapp // Dead Or Alive ++ (JAPAN)
flamegun // Flame Gunner (USA) flamegun // Flame Gunner (USA)
flamegunj // Flame Gunner (JAPAN) flamegunj // Flame Gunner (JAPAN)
@ -37632,12 +37645,11 @@ lpadv // Logic Pro Adventure (JAPAN)
mfjump // Monster Farm Jump (JAPAN) mfjump // Monster Farm Jump (JAPAN)
mgcldate // Magical Date (JAPAN Ver 2.02J) mgcldate // Magical Date (JAPAN Ver 2.02J)
mgcldtex // Magical Date EX (JAPAN Ver 2.01J) mgcldtex // Magical Date EX (JAPAN Ver 2.01J)
nbajamex // NBA Jam Extreme nbajamex // NBA Jam Extreme (ver. 1.10I)
nbajamexa // nbajamexa // NBA Jam Extreme (ver. 1.04)
plsmaswd // Plasma Sword (USA 980316) plsmaswd // Plasma Sword (USA 980316)
plsmaswda // Plasma Sword (ASIA 980316) plsmaswda // Plasma Sword (ASIA 980316)
primrag2 // Primal Rage 2 primrag2 // Primal Rage 2
psarc95 //
psyforce // Psychic Force (Ver 2.4O) psyforce // Psychic Force (Ver 2.4O)
psyforcej // Psychic Force (Ver 2.4J) psyforcej // Psychic Force (Ver 2.4J)
psyforcex // Psychic Force EX (Ver 2.0J) psyforcex // Psychic Force EX (Ver 2.0J)
@ -37676,18 +37688,15 @@ stargladj // Star Gladiator (JAPAN 960627)
stargld2 // Star Gladiator 2 (JAPAN 980316) stargld2 // Star Gladiator 2 (JAPAN 980316)
strider2 // Strider 2 (USA 991213) strider2 // Strider 2 (USA 991213)
strider2a // Strider 2 (ASIA 991213) strider2a // Strider 2 (ASIA 991213)
taitofx1 //
tblkkuzu // The Block Kuzushi (JAPAN) tblkkuzu // The Block Kuzushi (JAPAN)
techromn // Tech Romancer (EURO 980914) techromn // Tech Romancer (EURO 980914)
techromnu // Tech Romancer (USA 980914) techromnu // Tech Romancer (USA 980914)
tecmowcm // Tecmo World Cup Millennium (JAPAN) tecmowcm // Tecmo World Cup Millennium (JAPAN)
tgmj // Tetris The Grand Master (JAPAN 980710) tgmj // Tetris The Grand Master (JAPAN 980710)
tondemo // Tondemo Crisis (JAPAN) tondemo // Tondemo Crisis (JAPAN)
tps //
ts2 // Battle Arena Toshinden 2 (USA 951124) ts2 // Battle Arena Toshinden 2 (USA 951124)
ts2a // Battle Arena Toshinden 2 (USA 951124) ts2a // Battle Arena Toshinden 2 (USA 951124)
ts2j // Battle Arena Toshinden 2 (JAPAN 951124) ts2j // Battle Arena Toshinden 2 (JAPAN 951124)
vspsx //
@source:zodiack.cpp @source:zodiack.cpp
bounty // (c) 1982 Orca bounty // (c) 1982 Orca