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"/>
</dataarea>
</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>

View File

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

View File

@ -126,6 +126,20 @@
</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 -->
<software name="beballa">
<description>Be Ball (alt) (Tourvision PCE bootleg)</description>
@ -813,6 +827,20 @@ Notes:
</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 -->
<software name="puzzlboy">
<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>
<!-- 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
<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"/>
@ -35765,43 +35766,12 @@ TODO: Check if these match the corresponding redump dumps.
</part>
</software>
<software name="intcdv4">
<!-- 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">
<software name="icdsmp6a" cloneof="icdsmp6">
<!-- 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).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>
<publisher>Sony Computer Entertainment America</publisher>
<info name="serial" value="PBPX-95004"/>
@ -35812,68 +35782,7 @@ TODO: Check if these match the corresponding redump dumps.
</part>
</software>
<software name="intcdv7">
<!-- 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">
<software name="icdsmp11">
<!-- 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].cue" size="301" crc="9948530c" sha1="95c782d5dca37dfd43b8c754e3a6903f2e665860"/>

View File

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

View File

@ -48,6 +48,8 @@ project "formats"
MAME_DIR .. "src/lib/formats/dsk_dsk.h",
MAME_DIR .. "src/lib/formats/td0_dsk.cpp",
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.h",
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.h",
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/okean240.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:
m_mode = data;
m_buf[0] = 0;
m_buf_count = 1;
break;
case CMD_LOCK:
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[6] = dec_2_bcd((last >> 8) & 0xff);
m_buf[7] = dec_2_bcd(last & 0xff);
m_buf_count = 8;
m_buf[8] = 0;
m_buf_count = 9;
}
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 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[1] = dec_2_bcd(m_curtoctrk + 1);
m_buf[2] = dec_2_bcd(m_curtoctrk + 1);
m_buf[1] = 0; // track num except when reading toc
m_buf[2] = dec_2_bcd(m_curtoctrk); // index
m_buf[3] = dec_2_bcd((start >> 16) & 0xff);
m_buf[4] = dec_2_bcd((start >> 8) & 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_mofetta(*this, MOFETTA_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
{
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)
{
m_sgrom[i]->gclock_in(gromclk);
m_p3grom[i]->gclock_in(gromclk);
}
m_tsgrom[i]->gclock_in(gromclk);
m_p8grom[i]->gclock_in(gromclk);
for (int i=0; i < 3; i++) m_sgrom[i]->gclock_in(gromclk);
m_gromport->gclock_in(gromclk);
m_sgrom_idle = m_sgrom[0]->idle();
}
if (!m_tsgrom_idle)
{
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
@ -338,16 +363,23 @@ void mainboard8_device::select_groms()
int lines = (m_dbin_level==ASSERT_LINE)? GROM_M_LINE : 0;
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++)
{
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);
for (int i=0; i < 8; i++)
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
if (select & SGMSEL) m_gromport->romgq_line(CLEAR_LINE);
m_gromport->set_gromlines(*m_space, lines, select & SGMSEL);
@ -476,6 +508,7 @@ READ8_MEMBER( mainboard8_device::read )
switch (m_vaquerro->gromcs_out())
{
case SGMSEL:
m_sgrom_idle = false;
for (int i=0; i < 3; i++)
{
m_sgrom[i]->readz(space, 0, &value);
@ -486,6 +519,7 @@ READ8_MEMBER( mainboard8_device::read )
goto readdone;
case TSGSEL:
m_tsgrom_idle = false;
for (int i=0; i < 8; i++)
{
m_tsgrom[i]->readz(space, 0, &value);
@ -495,6 +529,7 @@ READ8_MEMBER( mainboard8_device::read )
goto readdone;
case P8GSEL:
m_p8grom_idle = false;
for (int i=0; i < 8; i++)
{
m_p8grom[i]->readz(space, 0, &value);
@ -504,6 +539,7 @@ READ8_MEMBER( mainboard8_device::read )
goto readdone;
case P3GSEL:
m_p3grom_idle = false;
for (int i=0; i < 3; i++)
{
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]));
}
// 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
m_sram = std::make_unique<UINT8[]>(SRAM_SIZE);
m_dram = std::make_unique<UINT8[]>(DRAM_SIZE);

View File

@ -505,18 +505,16 @@ private:
required_device<amigo_device> m_amigo;
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
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
tmc0430_device* m_sgrom[3];
@ -529,11 +527,11 @@ private:
// Pascal 3 GROM library
tmc0430_device* m_p3grom[3];
// Gromport (cartridge port)
gromport_device* m_gromport;
// Peripheral box
peribox_device* m_peb;
// Idle flags for GROMs
bool m_sgrom_idle;
bool m_tsgrom_idle;
bool m_p8grom_idle;
bool m_p3grom_idle;
// Memory
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_use32k(false),
m_base32k(0),
m_console_groms_present(false)
m_console_groms_present(false),
m_grom_idle(true)
{ }
#define TRACE_READY 0
@ -119,6 +120,7 @@ void ti99_datamux_device::read_all(address_space& space, UINT16 addr, UINT8 *val
}
// GROMport (GROMs)
m_gromport->readz(space, addr, value);
m_grom_idle = false;
}
// Video
@ -149,6 +151,7 @@ void ti99_datamux_device::write_all(address_space& space, UINT16 addr, UINT8 val
}
// GROMport
m_gromport->write(space, addr, value);
m_grom_idle = false;
}
// 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;
line_state select = isgrom? ASSERT_LINE : CLEAR_LINE;
if (select) m_grom_idle = false;
if (m_console_groms_present)
for (int i=0; i < 3; i++)
m_grom[i]->set_lines(space, lines, select);
@ -519,14 +524,23 @@ WRITE_LINE_MEMBER( ti99_datamux_device::ready_line )
ready_join();
}
/* Called from VDP via console. */
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
if (m_console_groms_present)
{
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);
// 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)
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()
{
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);
}
/*
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()
{
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()
{
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);
}
/*
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)
{
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);
}
bool ti99_cartridge_device::is_grom_idle()
{
return (m_pcb != nullptr)? m_pcb->is_grom_idle() : false;
}
void ti99_cartridge_device::device_config_complete()
{
update_names();
@ -1527,6 +1576,7 @@ const device_type TI99CART = &device_creator<ti99_cartridge_device>;
ti99_cartridge_pcb::ti99_cartridge_pcb()
: m_cart(nullptr),
m_grom_idle(false),
m_grom_size(0),
m_rom_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)
{
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)
{
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); }
void cartridge_inserted();
bool is_grom_idle();
protected:
virtual void device_start() override;
@ -100,6 +101,7 @@ public:
bool is_available() { return m_pcb != nullptr; }
void set_slot(int i);
bool is_grom_idle();
protected:
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 remove(int index) { };
// UINT16 grom_base();
// UINT16 grom_mask();
virtual bool is_grom_idle() =0;
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);
@ -186,6 +187,8 @@ public:
DECLARE_WRITE8_MEMBER(set_gromlines) override;
DECLARE_WRITE_LINE_MEMBER(gclock_in) override;
bool is_grom_idle() override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
@ -221,6 +224,8 @@ public:
void remove(int index) override;
DECLARE_INPUT_CHANGED_MEMBER( switch_changed );
bool is_grom_idle() override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
@ -258,6 +263,9 @@ public:
void remove(int index) override;
DECLARE_INPUT_CHANGED_MEMBER( gk_changed );
// We may have a cartridge plugged into the GK
bool is_grom_idle() override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
@ -317,9 +325,11 @@ protected:
void set_cartridge(ti99_cartridge_device *cart);
const char* tag() { return m_tag; }
void set_tag(const char* tag) { m_tag = tag; }
bool is_grom_idle() { return m_grom_idle; }
ti99_cartridge_device* m_cart;
tmc0430_device* m_grom[5];
bool m_grom_idle;
int m_grom_size;
int m_rom_size;
int m_ram_size;

View File

@ -12,6 +12,7 @@
#include "formats/flopimg.h"
#include "formats/d88_dsk.h"
#include "formats/dfi_dsk.h"
#include "formats/hxchfe_dsk.h"
#include "formats/hxcmfm_dsk.h"
#include "formats/imd_dsk.h"
#include "formats/ipf_dsk.h"
@ -42,6 +43,7 @@
, \
FLOPPY_D88_FORMAT, \
FLOPPY_DFI_FORMAT, \
FLOPPY_HFE_FORMAT, \
FLOPPY_IMD_FORMAT, \
FLOPPY_IPF_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 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_BETWEEN_SECTORS (attotime::from_nsec(400))
@ -415,7 +413,7 @@ void ata_mass_storage_device::fill_buffer()
if (m_sector_count > 0)
{
set_dasp(ASSERT_LINE);
start_busy(TIME_PER_SECTOR_READ, PARAM_COMMAND);
start_busy(TIME_BETWEEN_SECTORS, PARAM_COMMAND);
}
break;
}

View File

@ -211,7 +211,7 @@ WRITE_LINE_MEMBER( tmc0430_device::gclock_in )
if ((m_current_clock_level==CLEAR_LINE) || (oldlevel==ASSERT_LINE))
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)
{

View File

@ -53,6 +53,9 @@ public:
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:
void device_start(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 */
LOG2674(("DELAYED read from cursor address to pointer address %02x\n",data));
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)
{
/* nullptr parameter does nothing and returns no error */
if (param == nullptr)
if (param == nullptr || strlen(param) == 0)
return true;
/* evaluate the expression; success if no error */
bool is_true = (strcmp(param, "true") == 0 || strcmp(param, "TRUE") == 0 || strcmp(param, "1") == 0);
bool is_false = (strcmp(param, "false") == 0 || strcmp(param, "FALSE") == 0 || strcmp(param, "0") == 0);
bool is_true = (core_stricmp(param, "true") == 0 || strcmp(param, "1") == 0);
bool is_false = (core_stricmp(param, "false") == 0 || strcmp(param, "0") == 0);
if (!is_true && !is_false)
{
m_console.printf("Invalid boolean '%s'\n", param);
return false;
}
*result = is_true;
@ -2482,7 +2485,7 @@ void debugger_commands::execute_trace_internal(int ref, int params, const char *
return;
if (!validate_boolean_parameter((params > 2) ? param[2] : nullptr, &detect_loops))
return;
if (!debug_command_parameter_command(action = param[3]))
if (!debug_command_parameter_command(action = (params > 3) ? param[3] : nullptr))
return;
/* open the file */

View File

@ -81,7 +81,7 @@ enum
XTAL_5_7143MHz = 5714300, /* Cidelsa Destroyer */
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_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_5MHz = 6500000, /* Jupiter Ace */
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();
const osd::directory::entry *dirent;
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)
{
@ -829,6 +829,7 @@ void menu_rgb_ui::populate()
// set filter arrow
UINT32 arrow_flags = FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW;
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)
{
@ -878,9 +879,8 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa
float width, maxwidth = origx2 - origx1;
// top text
std::string topbuf = std::string(m_title).append(_(" - ARGB Settings"));
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, nullptr);
ui().draw_text_full(container(), m_title.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);
width += 2 * UI_BOX_LR_BORDER;
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;
// 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,
mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
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);
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,
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;
maxwidth = std::max(maxwidth, width);
maxwidth = std::max(origx2 - origx1, width);
// compute our bounds
x1 -= UI_BOX_LR_BORDER;
x2 = x1 + width;
x1 = 0.5f - 0.5f * maxwidth;
x2 = x1 + maxwidth;
y1 = origy2 + UI_BOX_TB_BORDER;
y2 = origy2 + bottom;
// 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
x1 += UI_BOX_LR_BORDER;
x2 -= UI_BOX_LR_BORDER;
y1 += UI_BOX_TB_BORDER;
// draw the normal text
ui().draw_text_full(container(), sampletxt.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER,
mame_ui_manager::NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr);
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);
float t_x2 = x1 - UI_BOX_LR_BORDER + maxwidth;
x1 = x2 + 2.0f * UI_BOX_LR_BORDER;
x2 = t_x2;
x1 += width + UI_BOX_LR_BORDER;
y1 -= UI_BOX_TB_BORDER;
// draw color box
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);
// 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(menu_item_type::SEPARATOR);

View File

@ -44,7 +44,6 @@ const options_entry ui_options::s_option_entries[] =
// 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_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" },

View File

@ -38,7 +38,6 @@
#define OPTION_UI_PATH "ui_path"
// core misc options
#define OPTION_DATS_ENABLED "dats_enabled"
#define OPTION_REMEMBER_LAST "remember_last"
#define OPTION_ENLARGE_SNAPS "enlarge_snaps"
#define OPTION_FORCED4X3 "forced4x3"
@ -102,7 +101,6 @@ public:
const char *ui_path() const { return value(OPTION_UI_PATH); }
// Misc options
bool enabled_dats() const { return bool_value(OPTION_DATS_ENABLED); }
bool remember_last() const { return bool_value(OPTION_REMEMBER_LAST); }
bool enlarge_snaps() const { return bool_value(OPTION_ENLARGE_SNAPS); }
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()));
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;
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;
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]);
if (main_filters::actual == FILTER_MANUFACTURER)
@ -168,7 +172,6 @@ void menu_select_game::handle()
m_prev_selected = item[0].ref;
bool check_filter = false;
bool enabled_dats = ui().options().enabled_dats();
// if i have to load datfile, performe an hard reset
if (ui_globals::reset)
@ -339,7 +342,7 @@ void menu_select_game::handle()
m_search[0] = '\0';
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
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
inkey_export();
@ -501,7 +504,7 @@ void menu_select_game::populate()
if (!isfavorite())
{
// if search is not empty, find approximate matches
if (m_search[0] != 0 && !isfavorite())
if (m_search[0] != 0)
populate_search();
else
{
@ -1352,8 +1355,23 @@ void menu_select_game::inkey_export()
}
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));
}

View File

@ -242,7 +242,7 @@ void menu_select_software::handle()
// handle UI_DOWN_FILTER
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
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::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, __("DATs info"), OPTION_DATS_ENABLED },
{ submenu::option_type::EMU, __("Cheats"), OPTION_CHEAT },
{ submenu::option_type::EMU, __("Show mouse pointer"), OPTION_UI_MOUSE },
{ 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
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
ADDRESS_MAP_END

View File

@ -562,7 +562,8 @@ public:
private:
void jamtable_disasm(address_space &space, UINT32 address, UINT32 size);
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);
};
@ -584,21 +585,23 @@ St. Instr. Comment
/* jamtable disassembler */
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;
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;
}
while (1)
{
offs_t base = addr;
UINT32 opcode = space.read_byte(addr);
UINT32 opcode = cpu.read_byte(space, address, true);
addr++;
UINT32 op1 = space.read_dword_unaligned(addr);
UINT32 op1 = cpu.read_dword(space, address, true);
addr += 4;
UINT32 op2 = space.read_dword_unaligned(addr);
UINT32 op2 = cpu.read_dword(space, address, true);
addr += 4;
char sop1[16];
@ -619,7 +622,7 @@ void chihiro_state::jamtable_disasm(address_space &space, UINT32 address, UINT32
sprintf(sop1, "%08X", op1);
sprintf(pcrel, "%08X", base + 9 + op1);
}
machine().debugger().console().printf("%08X ", base);
con.printf("%08X ", base);
// dl=instr ebx=par1 eax=par2
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|
// +-+----------+------------+---------------+-----------------+-----------------+-+-+
// 31 - Enable bit
machine().debugger().console().printf("POKEPCI PCICONF[%s]=%s\n", sop2, sop1);
con.printf("POKEPCI PCICONF[%s]=%s\n", sop2, sop1);
break;
case 0x02:
machine().debugger().console().printf("OUTB PORT[%s]=%s\n", sop2, sop1);
con.printf("OUTB PORT[%s]=%s\n", sop2, sop1);
break;
case 0x03:
machine().debugger().console().printf("POKE MEM[%s]=%s\n", sop2, sop1);
con.printf("POKE MEM[%s]=%s\n", sop2, sop1);
break;
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;
case 0x05:
// out cf8,op2
// in acc,cfc
machine().debugger().console().printf("PEEKPCI ACC=PCICONF[%s]\n", sop2);
con.printf("PEEKPCI ACC=PCICONF[%s]\n", sop2);
break;
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;
case 0x07:
machine().debugger().console().printf("BRA PC=%s\n", pcrel);
con.printf("BRA PC=%s\n", pcrel);
break;
case 0x08:
machine().debugger().console().printf("INB ACC=PORT[%s]\n", sop2);
con.printf("INB ACC=PORT[%s]\n", sop2);
break;
case 0x09:
machine().debugger().console().printf("PEEK ACC=MEM[%s]\n", sop2);
con.printf("PEEK ACC=MEM[%s]\n", sop2);
break;
case 0xee:
machine().debugger().console().printf("END\n");
con.printf("END\n");
break;
default:
machine().debugger().console().printf("NOP ????\n");
con.printf("NOP ????\n");
break;
}
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);
}
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");
machine().debugger().console().printf(" chihiro jamdis,<start>,<size> -- Disassemble <size> bytes of JamTable instructions starting at <start>\n");
machine().debugger().console().printf(" chihiro help -- this list\n");
const UINT32 thlists = 0x8003aae0; // magic address
address_space &space = m_maincpu->space();
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)
@ -704,17 +740,19 @@ void chihiro_state::debug_commands(int ref, int params, const char **param)
return;
if (strcmp("jamdis", param[0]) == 0)
jamtable_disasm_command(ref, params - 1, param + 1);
else if (strcmp("threadlist", param[0]) == 0)
threadlist_command(ref, params - 1, param + 1);
else
help_command(ref, params - 1, param + 1);
chihiro_help_command(ref, params - 1, param + 1);
}
void chihiro_state::hack_eeprom()
{
// 8003b744,3b744=0x90 0x90
m_maincpu->space(0).write_byte(0x3b744, 0x90);
m_maincpu->space(0).write_byte(0x3b745, 0x90);
m_maincpu->space(0).write_byte(0x3b766, 0xc9);
m_maincpu->space(0).write_byte(0x3b767, 0xc3);
m_maincpu->space(AS_PROGRAM).write_byte(0x3b744, 0x90);
m_maincpu->space(AS_PROGRAM).write_byte(0x3b745, 0x90);
m_maincpu->space(AS_PROGRAM).write_byte(0x3b766, 0xc9);
m_maincpu->space(AS_PROGRAM).write_byte(0x3b767, 0xc3);
}
#define HACK_ITEMS 5

View File

@ -1342,7 +1342,6 @@ static MACHINE_CONFIG_DERIVED( dead_cps2, cps2 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(dead_cps2_map)
MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
MACHINE_CONFIG_END
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_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_START( batcira )
@ -6062,7 +6061,7 @@ ROM_START( ringdesth )
ROM_LOAD16_WORD_SWAP( "smb.12m", 0x200000, 0x200000, CRC(955b0782) SHA1(ee09500e7b44e923126533613bfe26cdabc7ab5f) )
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_START( mmancp2u )
@ -7576,7 +7575,7 @@ ROM_START( spf2t )
ROM_LOAD16_WORD_SWAP( "pzf.12m", 0x200000, 0x200000, CRC(399d2c7b) SHA1(e849dea97b8d16540415c0d9bbc4f9f4eb755ec4) )
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_START( spf2tu )
@ -7601,7 +7600,7 @@ ROM_START( spf2tu )
ROM_LOAD16_WORD_SWAP( "pzf.12m", 0x200000, 0x200000, CRC(399d2c7b) SHA1(e849dea97b8d16540415c0d9bbc4f9f4eb755ec4) )
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
@ -8366,7 +8365,7 @@ ROM_START( ssf2th )
ROM_LOAD16_WORD_SWAP( "sfx.12m", 0x200000, 0x200000, CRC(a05e3aab) SHA1(d4eb9cae66c74e956569fea8b815156fbd420f83) )
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_START( ssf2xj )

View File

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

View File

@ -22,14 +22,14 @@
#include "emu.h"
#include "cpu/mcs48/mcs48.h"
#define I8048_TAG "i8048"
#define I8049_TAG "i8049"
class digijet_state : public driver_device
{
public:
digijet_state(const machine_config &mconfig, device_type type, const char *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 { }
};
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 )
ADDRESS_MAP_END
@ -51,13 +47,12 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( digijet, digijet_state )
/* basic machine hardware */
MCFG_CPU_ADD(I8048_TAG, I8048, XTAL_11MHz)
MCFG_CPU_PROGRAM_MAP(program_map)
MCFG_CPU_ADD(I8049_TAG, I8049, XTAL_11MHz)
MCFG_CPU_IO_MAP(io_map)
MACHINE_CONFIG_END
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_END

View File

@ -22,7 +22,7 @@
* Gx831 Pop'n Music 2 (1999.04)
* 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)
*
* Chips:
@ -1195,7 +1195,6 @@ INPUT_PORTS_END
//--------- Pop'n Stage
#ifdef UNUSED_DEFINITION
static INPUT_PORTS_START( popnstage )
PORT_START("BTN1")
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( 0x01, 0x01, "SW3:6" )
INPUT_PORTS_END
#endif
#ifdef UNUSED_DEFINITION
static INPUT_PORTS_START( popnstex )
@ -1884,6 +1882,28 @@ ROM_START( popn3 )
ROM_REGION( 0x1000000, "shared", ROMREGION_ERASE00 ) /* K054539 RAM */
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
// 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, 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( 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
//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:
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 )
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 )
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
@ -107,18 +243,18 @@ ROM_START( flower ) /* Komax version */
ROM_REGION( 0x2000, "gfx1", ROMREGION_INVERT ) /* tx layer */
ROM_LOAD( "10.13e", 0x0000, 0x2000, CRC(62f9b28c) SHA1(d57d06b99e72a4f68f197a5b6c042c926cc70ca0) ) // FIRST AND SECOND HALF IDENTICAL
ROM_REGION( 0x8000, "gfx2", 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, "gfx3", ROMREGION_INVERT ) /* bg layers */
ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* bg layers */
ROM_LOAD( "8.10e", 0x0000, 0x2000, CRC(f85eb20f) SHA1(699edc970c359143dee6de2a97cc2a552454785b) )
ROM_LOAD( "6.7e", 0x2000, 0x2000, CRC(3e97843f) SHA1(4e4e5625dbf78eca97536b1428b2e49ad58c618f) )
ROM_LOAD( "9.12e", 0x4000, 0x2000, CRC(f1d9915e) SHA1(158e1cc8c402f9ae3906363d99f2b25c94c64212) )
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_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_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.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_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_LOAD( "10.13e", 0x0000, 0x2000, CRC(62f9b28c) SHA1(d57d06b99e72a4f68f197a5b6c042c926cc70ca0) ) // FIRST AND SECOND HALF IDENTICAL
ROM_REGION( 0x8000, "gfx2", 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, "gfx3", ROMREGION_INVERT ) /* bg layers */
ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* bg layers */
ROM_LOAD( "8.10e", 0x0000, 0x2000, CRC(f85eb20f) SHA1(699edc970c359143dee6de2a97cc2a552454785b) )
ROM_LOAD( "6.7e", 0x2000, 0x2000, CRC(3e97843f) SHA1(4e4e5625dbf78eca97536b1428b2e49ad58c618f) )
ROM_LOAD( "9.12e", 0x4000, 0x2000, CRC(f1d9915e) SHA1(158e1cc8c402f9ae3906363d99f2b25c94c64212) )
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_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_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.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_LOAD( "82s147.d7", 0x0000, 0x0200, CRC(f0dbb2a7) SHA1(03cd8fd41d6406894c6931e883a9ac6a4a4effc9) )

View File

@ -22,7 +22,7 @@
@MP0905B TMS0970 1977, Parker Brothers Codename Sector
*MP0057 TMS1000 1978, APH Student Speech+ (same ROM contents as TSI Speech+?)
@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
@MP0170 TMS1000 1979, Conic Football
*MP0230 TMS1000? 1980, Entex Blast It
@ -33,7 +33,7 @@
@MP1133 TMS1470 1979, Kosmos Astro
@MP1180 TMS1100 1980, Tomy Power House Pinball
@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)
*MP1209 TMS1100 1980, U.S. Games Space Cruiser/Strategy Football
@MP1211 TMS1100 1980, Entex Space Invader
@ -82,7 +82,7 @@
@M34012 TMS1100 1980, Mattel Dungeons & Dragons - Computer Labyrinth Game
*M34014 TMS1100 1981, Coleco Bowlatronic
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
M34047 TMS1100 1982, MicroVision cartridge: Super Blockbuster
*M34078A TMS1100 1983, Milton Bradley Arcade Mania
@ -155,8 +155,10 @@
#include "gjackpot.lh"
#include "gpoker.lh"
#include "h2hbaseb.lh"
#include "h2hboxing.lh"
#include "h2hfootb.lh"
#include "lostreas.lh" // clickable
#include "matchnum.lh" // clickable
#include "mathmagi.lh"
#include "mdndclab.lh" // clickable
#include "merlin.lh" // clickable
@ -168,10 +170,11 @@
#include "ssimon.lh" // clickable
#include "ssports4.lh"
#include "starwbc.lh" // clickable
#include "stopthie.lh" // clickable
#include "stopthief.lh"
#include "tandy12.lh" // clickable
#include "tbreakup.lh"
#include "tc4.lh"
#include "tcfball.lh"
#include "zodiac.lh"
#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
@ -976,13 +1110,13 @@ MACHINE_CONFIG_END
* TMS1100NLLE (rev. E!) MP3460 (die label same)
* 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:
- USA(1): Head to Head Football
- 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
@ -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
@ -3627,16 +3873,16 @@ MACHINE_CONFIG_END
* TMC0904NL CP0904A (die label 4A0970D-04A)
* 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
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.
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
@ -4821,7 +5067,7 @@ static MACHINE_CONFIG_START( stopthief, stopthief_state )
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_DEFAULT_LAYOUT(layout_stopthie)
MCFG_DEFAULT_LAYOUT(layout_stopthief)
/* sound hardware */
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)
@ -5333,7 +5687,7 @@ MACHINE_CONFIG_END
/***************************************************************************
TSI Speech+
Telesensory Systems, Inc.(TSI) Speech+
* TMS1000 MCU, label TMS1007NL (die label 1000B, 1007A)
* TSI S14001A speech chip, GI S14007-A 2KB maskrom for samples
* 9-digit 7seg LED display
@ -5671,7 +6025,7 @@ MACHINE_CONFIG_END
known releases:
- World: Ditto
- 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_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "mp1030", 0x0000, 0x0800, CRC(a81d7ccb) SHA1(4756ce42f1ea28ce5fe6498312f8306f10370969) )
@ -6267,6 +6632,17 @@ ROM_START( h2hbaseb )
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_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mp7334", 0x0000, 0x1000, CRC(923f3821) SHA1(a9ae342d7ff8dae1dedcd1e4984bcfae68586581) )
@ -6585,7 +6961,7 @@ ROM_START( mmerlin )
ROM_END
ROM_START( stopthie )
ROM_START( stopthief )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) )
@ -6594,12 +6970,12 @@ ROM_START( stopthie )
ROM_REGION( 1982, "maincpu:mpla", 0 )
ROM_LOAD( "tms0980_common1_micro.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
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_LOAD( "tms0980_common1_segment.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
ROM_END
ROM_START( stopthiep )
ROM_START( stopthiefp )
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)
@ -6608,7 +6984,7 @@ ROM_START( stopthiep )
ROM_REGION( 1982, "maincpu:mpla", 0 )
ROM_LOAD( "tms0980_common1_micro.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
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_LOAD( "tms0980_common1_segment.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
ROM_END
@ -6647,6 +7023,17 @@ ROM_START( lostreas )
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_REGION( 0x0800, "maincpu", 0 )
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_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_REGION( 0x0200, "maincpu", 0 )
ROM_LOAD( "mp3005n", 0x0000, 0x0200, CRC(a87649cb) SHA1(14ef7967a80578885f0b905772c3bb417b5b3255) )
@ -6703,6 +7080,17 @@ ROM_START( copycatm2 )
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_REGION( 0x0400, "maincpu", 0 )
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 */
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 )
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( 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( 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( 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( 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, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // ***
CONS( 1979, stopthief, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", MACHINE_SUPPORTS_SAVE ) // ***
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, 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, 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: ***
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) ) \
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) ) \
ROM_REGION( 0x8000, "mcu", 0 ) \
ROM_LOAD( "hd6473644h.18e", 0, 0x8000, NO_DUMP) \
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(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_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 */
// CROM
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 */
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, 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 )

View File

@ -2701,7 +2701,8 @@ ROM_START( puzlclub )
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-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 */
/* no sprites */
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/i8255.h"
#include "machine/wd_fdc.h"
#include "machine/i8251.h"
#include "machine/clock.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
{
@ -135,10 +142,19 @@ public:
m_fdc(*this, "fdc"),
m_floppy0(*this, "fdc:0"),
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_start() override;
virtual void video_start() override;
SCN2674_DRAW_CHARACTER_MEMBER(display_pixels);
DECLARE_READ8_MEMBER(vram_r);
@ -158,6 +174,13 @@ public:
DECLARE_WRITE8_MEMBER(gpo_w);
DECLARE_READ8_MEMBER(vidcontrol_r);
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(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(dack6_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:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu;
@ -181,6 +213,11 @@ private:
required_device<fd1793_t> m_fdc;
required_device<floppy_connector> m_floppy0;
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_fd_bank; // Floppy bank select
@ -190,21 +227,25 @@ private:
UINT8 m_cntl; // RTC / FDC control (PPI port B)
UINT8 m_gpo; // General purpose outputs (PPI port C)
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 )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000, 0x1ffff) AM_RAM
AM_RANGE(0x00000, 0x1ffff) AM_RAMBANK("main_ram_bank")
// second 128kB for 256kB system
// expansion RAM, up to 512kB extra
AM_RANGE(0x20000, 0xcffff) AM_NOP
AM_RANGE(0xd0000, 0xdffff) AM_RAM AM_SHARE("vram")
AM_RANGE(0xe0000, 0xe3fff) AM_NOP
AM_RANGE(0xe4000, 0xe5fff) AM_RAM AM_SHARE("fram")
AM_RANGE(0xe6000, 0xf3fff) AM_NOP
AM_RANGE(0xf4000, 0xf5fff) AM_ROM AM_REGION("chargen",0)
AM_RANGE(0xf6000, 0xfbfff) AM_NOP
AM_RANGE(0xe6000, 0xe7fff) AM_ROM AM_REGION("chargen",0)
AM_RANGE(0xe8000, 0xfbfff) AM_NOP
AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("user1",0)
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(0x21, 0x2f) AM_READWRITE(system_r, system_w)
AM_RANGE(0x31, 0x33) AM_READWRITE(bank_sel_r, bank_sel_w)
// 0x50-51: Keyboard (i8251)
AM_RANGE(0x50, 0x51) AM_NOP
AM_RANGE(0x50, 0x50) AM_DEVREADWRITE("keyboard", i8251_device, data_r, data_w)
AM_RANGE(0x51, 0x51) AM_DEVREADWRITE("keyboard", i8251_device, status_r, control_w)
// 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)
AM_RANGE(0xb0, 0xb1) AM_DEVREADWRITE("pic_master", 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 )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0xffff) AM_DEVREADWRITE("z80_bank", address_map_bank_device, read8, write8)
ADDRESS_MAP_END
static ADDRESS_MAP_START( octopus_sub_io, AS_IO, 8, octopus_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0xffff) AM_READWRITE(z80_io_r, z80_io_w)
ADDRESS_MAP_END
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 ) )
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)
{
@ -319,6 +370,7 @@ WRITE8_MEMBER(octopus_state::bank_sel_w)
break;
case 2:
m_z80_bank = data;
m_z80_bankdev->set_bank(m_z80_bank & 0x0f);
logerror("Z80/RAM bank = %i\n",data);
break;
}
@ -332,7 +384,15 @@ WRITE8_MEMBER(octopus_state::bank_sel_w)
// 0x28: write: Z80 enable
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)
@ -340,12 +400,26 @@ READ8_MEMBER(octopus_state::system_r)
switch(offset)
{
case 0:
return 0x1f; // do bits 0-4 mean anything? Language?
return 0x1f; // do bits 0-4 mean anything? Language DIPs?
}
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
// bit4-5: write precomp.
// 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);
}
// 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)
{
UINT8 byte;
@ -442,11 +542,32 @@ WRITE_LINE_MEMBER( octopus_state::dma_hrq_changed )
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()
{
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_drive = 0;
membank("main_ram_bank")->set_base(m_ram->pointer());
}
void octopus_state::video_start()
@ -477,12 +598,16 @@ static SLOT_INTERFACE_START( octopus_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
SLOT_INTERFACE_END
static SLOT_INTERFACE_START(keyboard)
SLOT_INTERFACE("octopus", OCTOPUS_KEYBOARD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( octopus, octopus_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",I8088, XTAL_24MHz / 3) // 8MHz
MCFG_CPU_PROGRAM_MAP(octopus_mem)
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_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_PORTC_CB(WRITE8(octopus_state,gpo_w))
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_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("pic_master",pic8259_device, ir5_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: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
// i8253 PIT timer (speaker output, serial timing, other stuff too?)
// i8251 serial controller (keyboard)
// Centronics parallel interface
// Z80SIO/2 (serial)
// 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_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
/* ROM definition */

View File

@ -298,6 +298,7 @@ void overdriv_state::machine_start()
save_item(NAME(m_sprite_colorbase));
save_item(NAME(m_zoom_colorbase));
save_item(NAME(m_road_colorbase));
save_item(NAME(m_fake_timer));
}
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));
}
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)
{
system_time 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);
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_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_REGION( 0x10000, "maincpu", 0 )
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, 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, 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( 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 )
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(0xc100, 0xc1ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
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( 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( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
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( 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 */
/* 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( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) 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_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( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) 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 )
/* 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_IO_MAP(sqix_port_map)
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_QUANTUM_PERFECT_CPU("maincpu")
@ -1435,12 +1440,14 @@ static MACHINE_CONFIG_START( sqix, superqix_state )
/* sound hardware */
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_B_READ_CB(READ8(superqix_state, in4_mcu_r)) /* port Bread */
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_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 */
@ -1483,11 +1490,13 @@ static MACHINE_CONFIG_START( sqix_nomcu, superqix_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
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_B_READ_CB(READ8(superqix_state, in4_mcu_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
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_B_READ_CB(READ8(superqix_state, bootleg_in0_r)) /* port Bread */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)

View File

@ -517,9 +517,6 @@ READ16_MEMBER(taitogn_state::hack1_r)
// 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)
{
return m_n_znsecsel;
@ -671,18 +668,16 @@ static MACHINE_CONFIG_START( coh3002t, taitogn_state )
MCFG_DEVICE_ADD("cat702_1", CAT702, 0)
MCFG_CAT702_DATAOUT_HANDLER(WRITELINE(taitogn_state, cat702_1_dataout))
MCFG_CAT702_TRANSFORM_TABLE(tt10)
MCFG_DEVICE_ADD("cat702_2", CAT702, 0)
MCFG_CAT702_DATAOUT_HANDLER(WRITELINE(taitogn_state, cat702_2_dataout))
MCFG_CAT702_TRANSFORM_TABLE(tt16)
MCFG_DEVICE_ADD("zndip", ZNDIP, 0)
MCFG_ZNDIP_DATAOUT_HANDLER(WRITELINE(taitogn_state, zndip_dataout))
MCFG_ZNDIP_DSR_HANDLER(DEVWRITELINE("maincpu:sio0", psxsio0_device, write_dsr))
MCFG_ZNDIP_DATA_HANDLER(IOPORT(":DSW"))
MCFG_AT28C16_ADD( "at28c16", 0 )
MCFG_DEVICE_ADD("at28c16", AT28C16, 0)
MCFG_DEVICE_ADD("rf5c296", RF5C296, 0)
MCFG_RF5C296_SLOT(":pccard")
@ -849,7 +844,11 @@ INPUT_PORTS_END
#define TAITOGNET_BIOS \
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_LOAD( "upd78081.655", 0x0000, 0x2000, NO_DUMP ) /* internal rom :( */ \
ROM_REGION16_BE( 0x200000, "biosflash", 0 ) \
@ -862,7 +861,7 @@ INPUT_PORTS_END
ROM_REGION32_LE( 0x600000, "zsg2", 0) \
ROM_FILL( 0, 0x600000, 0xff)
ROM_START( taitogn )
ROM_START( coh3002t )
TAITOGNET_BIOS
ROM_END
@ -1073,35 +1072,35 @@ ROM_END
/* 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 */
/* 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, raycris, taitogn, 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( 1998, raycris, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Ray Crisis (V2.03J)", 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, 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, flipmaze, taitogn, 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( 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, kollon, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Kollon (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, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT270, "Alfa System / Taito", "Shikigami no Shiro (V2.03J)", MACHINE_IMPERFECT_SOUND )
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, 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( 1999, otenamih, taitogn, 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( 2000, psyvaria, taitogn, 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, 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( 2004, zooo, taitogn, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success", "Zooo (V2.01J)", 0 )
GAME( 1999, otenamih, coh3002t, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success", "Otenami Haiken (V2.04J)", 0 )
GAME( 2005, otenamhf, coh3002t, coh3002t, coh3002t, taitogn_state, coh3002t_nz, ROT0, "Success / Warashi", "Otenami Haiken Final (V2.07JC)", 0 )
GAME( 2000, psyvaria, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT270, "Success", "Psyvariar -Medium Unit- (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, 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, 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( 2001, usagi, taitogn, coh3002t_mp, coh3002t_mp, driver_device, 0, ROT0, "Warashi / Mahjong Kobo / Taito", "Usagi (V2.02J)", MACHINE_IMPERFECT_SOUND )
GAME( 2000, soutenry, taitogn, 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( 2002, shangtou, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi / Sunsoft / Taito", "Shanghai Sangokuhai Tougi (Ver 2.01J)", 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, 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, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi", "Soutenryu (V2.07J)", 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, 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, otenki, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Takumi", "Otenki Kororin (V2.01J)", MACHINE_IMPERFECT_SOUND )
GAME( 2001, nightrai, coh3002t, coh3002t, coh3002t, driver_device, 0, ROT0, "Takumi", "Night Raid (V2.03J)", 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)
{
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)
{
m_sound_cmd_ack = true;
m_sound_cmd_written = true;
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
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)
@ -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(0xd509, 0xd50a) AM_MIRROR(0x00f0) AM_WRITEONLY AM_SHARE("gfxpointer")
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(0xd50e, 0xd50e) AM_MIRROR(0x00f0) AM_WRITE(taitosj_bankswitch_w)
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(0xd509, 0xd50a) AM_WRITEONLY AM_SHARE("gfxpointer")
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(0xd50e, 0xd50e) AM_WRITE(taitosj_bankswitch_w)
AM_RANGE(0xd600, 0xd600) AM_WRITEONLY AM_SHARE("video_mode")
@ -316,14 +327,14 @@ ADDRESS_MAP_END
// RD5000
READ8_MEMBER(taitosj_state::sound_command_r)
{
m_sound_cmd_ack = false;
m_sound_cmd_written = false;
return m_soundlatch->read(space,0);
}
// RD5001
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
@ -336,6 +347,10 @@ WRITE8_MEMBER(taitosj_state::sound_command_ack_w)
WRITE8_MEMBER(taitosj_state::sound_semaphore_clear_w)
{
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 )
/* 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_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)
/* interrupts: */
/* - no interrupts synced with vblank */
/* - NMI triggered by the main CPU */
/* - 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 */
@ -1780,21 +1795,30 @@ static MACHINE_CONFIG_START( nomcu, taitosj_state )
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_B_READ_CB(IOPORT("DSW3"))
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_B_WRITE_CB(WRITE8(taitosj_state, dac_vol_w)) /* port Bwrite */
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_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_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
@ -1810,7 +1834,7 @@ static MACHINE_CONFIG_DERIVED( mcu, nomcu )
MCFG_CPU_MODIFY("maincpu")
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_QUANTUM_TIME(attotime::from_hz(6000))
@ -2700,7 +2724,8 @@ ROM_END
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;
/* start in 1st gear */
m_kikstart_gears[0] = 0x02;
@ -2712,6 +2737,8 @@ void taitosj_state::reset_common()
void taitosj_state::init_common()
{
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_kikstart_gears));
save_item(NAME(m_dac_out));

View File

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

View File

@ -12,10 +12,14 @@ public:
vis_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
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<at_mb_device> m_mb;
required_device<pic8259_device> m_pic1;
required_device<vga_device> m_vga;
DECLARE_READ8_MEMBER(sysctl_r);
DECLARE_WRITE8_MEMBER(sysctl_w);
@ -23,24 +27,27 @@ public:
DECLARE_WRITE8_MEMBER(unk_w);
DECLARE_READ8_MEMBER(unk2_r);
DECLARE_READ8_MEMBER(unk3_r);
DECLARE_READ8_MEMBER(cdrom_r);
DECLARE_WRITE8_MEMBER(cdrom_w);
DECLARE_READ8_MEMBER(pad_r);
DECLARE_WRITE8_MEMBER(pad_w);
DECLARE_READ8_MEMBER(vga_r);
DECLARE_WRITE8_MEMBER(vga_w);
protected:
void machine_reset() override;
private:
UINT8 m_sysctl;
UINT8 m_unkidx;
UINT8 m_unk[16];
UINT8 m_cdcmd, m_cdstat;
UINT8 m_pad[4];
UINT8 m_crtcidx;
UINT8 m_gfxidx;
};
void vis_state::machine_reset()
{
m_cdcmd = 0;
m_cdstat = 0;
m_sysctl = 0;
}
//chipset registers?
READ8_MEMBER(vis_state::unk_r)
{
if(offset)
@ -61,11 +68,71 @@ READ8_MEMBER(vis_state::unk2_r)
return 0x40;
}
//memory card reader?
READ8_MEMBER(vis_state::unk3_r)
{
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)
{
return m_sysctl;
@ -82,8 +149,10 @@ WRITE8_MEMBER(vis_state::sysctl_w)
static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, vis_state )
ADDRESS_MAP_UNMAP_HIGH
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(0x100000, 0x15ffff) AM_RAM
AM_RANGE(0x300000, 0x3fffff) AM_ROM AM_REGION("bios", 0)
AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("bios", 0xf0000)
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(0x0092, 0x0093) AM_READWRITE8(sysctl_r, sysctl_w, 0x00ff)
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(0x03b0, 0x03df) AM_READWRITE8(vga_r, vga_w, 0xffff)
ADDRESS_MAP_END
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_ISA16_SLOT_ADD("mb:isabus","vga", pc_isa16_cards, "clgd542x", true)
MCFG_ISA16_SLOT_ADD("mb:isabus","mcd", pc_isa16_cards, "mcd", true)
MCFG_FRAGMENT_ADD(pcvideo_vga)
MACHINE_CONFIG_END
ROM_START(vis)

View File

@ -189,6 +189,8 @@ MACHINE_CONFIG_END
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_REGION( 0x400, "mcpx", 0 )
@ -197,7 +199,14 @@ ROM_START( xbox )
ROM_LOAD( "mcpx_1_1.bin", 0x200, 0x200, CRC(94ce376b) SHA1(6c875f17f773aaec51eb434068bb6c657c4343c0) )
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, 0x7fe00, 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_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( "xbox-5530.bin", 0x000000, 0x040000, CRC(9569c4d3) SHA1(40fa73277013be3168135e1768b09623a987ff63) )
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-5838_317-0229_comp.h"
#include "debug/debugcon.h"
#include "debug/debugcmd.h"
#include "debugger.h"
#define MAX_FILTERS (24)
#define MAX_BLOCKS (200)
#define MAX_DIR_SIZE (256*1024)
@ -685,6 +689,11 @@ public:
DECLARE_READ8_MEMBER( stv_SMPC_r );
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 &,
const rectangle &, int, int *, rectangle *);
UINT8 m_sndnmi_disable;
UINT8 m_input_port_4_f0;
UINT8 m_kikstart_gears[2];
INT8 m_dac_out;
@ -63,8 +62,9 @@ public:
UINT8 m_spacecr_prot_value;
UINT8 m_protection_value;
UINT32 m_address;
bool m_sound_cmd_ack;
bool m_sound_semaphore;
bool m_sndnmi_disable; // AKA "CIOB0" on schematic, bit 0 of AY-3-8910 @ IC50 Port B
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_sprite_sprite_collbitmap1;
bitmap_ind16 m_sprite_sprite_collbitmap2;
@ -75,7 +75,7 @@ public:
DECLARE_WRITE8_MEMBER(sound_command_w);
DECLARE_READ8_MEMBER(sound_command_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(taitosj_bankswitch_w);
DECLARE_READ8_MEMBER(taitosj_fake_data_r);

View File

@ -108,41 +108,41 @@
<screen index="0">
<bounds left="0" top="0" right="4" bottom="3" />
</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" />
</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" />
</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" />
</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" />
</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" />
</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" />
</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" />
</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" />
</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" />
</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" />
</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" />
</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" />
</bezel>
</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"?>
<mamelayout version="2">
<element name="pcb">
<image file="md6802.png" />
</element>
<element name="redled" defstate="0">
<disk state="1">
<color red="1.0" green="0.0" blue="0.0" />
</disk>
</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">
<led7seg>
<color red="0.75" green="0.0" blue="0.0" />
</led7seg>
</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">
<backdrop element="pcb">
<bounds left="0" top="0" right="800" bottom="869" />
</backdrop>
<bounds left="0" top="0" right="800" bottom="869"/>
<bezel element="text_md6802"><bounds x="150" y="200" width="150" height="20" /></bezel>
<bezel name="led1" element="redled">
<bounds x="290" y="668" width="15" height="15"/>
</bezel>
@ -46,80 +70,98 @@
<bezel element="button" inputtag="LINE3" inputmask="0x01">
<bounds x="345" y="555" width="70" height="60" />
</bezel>
<bezel element="text_C"><bounds x="355" y="535" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x02">
<bounds x="425" y="555" width="70" height="60" />
</bezel>
<bezel element="text_D"><bounds x="435" y="535" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x04">
<bounds x="505" y="555" width="70" height="60" />
</bezel>
<bezel element="text_E"><bounds x="515" y="535" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE3" inputmask="0x08">
<bounds x="585" y="555" width="70" height="60" />
</bezel>
<bezel element="text_F"><bounds x="595" y="535" width="50" height="20" /></bezel>
<!-- Buttons -->
<!-- Row 1 : 8 9 A B -->
<bezel element="button" inputtag="LINE2" inputmask="0x01">
<bounds x="345" y="635" width="70" height="60" />
</bezel>
<bezel element="text_8"><bounds x="355" y="615" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x02">
<bounds x="425" y="635" width="70" height="60" />
</bezel>
<bezel element="text_9"><bounds x="435" y="615" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x04">
<bounds x="505" y="635" width="70" height="60" />
</bezel>
<bezel element="text_A"><bounds x="515" y="615" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE2" inputmask="0x08">
<bounds x="585" y="635" width="70" height="60" />
</bezel>
<bezel element="text_B"><bounds x="595" y="615" width="50" height="20" /></bezel>
<!-- Buttons -->
<!-- Row 2 : SHIFT 4 5 6 7 -->
<bezel element="button" inputtag="LINE4" inputmask="0x08">
<bounds x="265" y="715" width="70" height="60" />
</bezel>
<bezel element="text_shift"><bounds x="275" y="695" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x01">
<bounds x="345" y="715" width="70" height="60" />
</bezel>
<bezel element="text_4"><bounds x="355" y="695" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x02">
<bounds x="425" y="715" width="70" height="60" />
</bezel>
<bezel element="text_5"><bounds x="435" y="695" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x04">
<bounds x="505" y="715" width="70" height="60" />
</bezel>
<bezel element="text_6"><bounds x="515" y="695" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE1" inputmask="0x08">
<bounds x="585" y="715" width="70" height="60" />
</bezel>
<bezel element="text_7"><bounds x="595" y="695" width="50" height="20" /></bezel>
<!-- Buttons -->
<!-- Row 3 : RESET 0 1 2 3 -->
<bezel element="button" inputtag="LINE4" inputmask="0x04">
<bounds x="265" y="795" width="70" height="60" />
</bezel>
<bezel element="text_reset"><bounds x="275" y="775" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x01">
<bounds x="345" y="795" width="70" height="60" />
</bezel>
<bezel element="text_0"><bounds x="355" y="775" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x02">
<bounds x="425" y="795" width="70" height="60" />
</bezel>
<bezel element="text_1"><bounds x="435" y="775" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x04">
<bounds x="505" y="795" width="70" height="60" />
</bezel>
<bezel element="text_2"><bounds x="515" y="775" width="50" height="20" /></bezel>
<bezel element="button" inputtag="LINE0" inputmask="0x08">
<bounds x="585" y="795" width="70" height="60" />
</bezel>
<bezel element="text_3"><bounds x="595" y="775" width="50" height="20" /></bezel>
</view>
</mamelayout>

View File

@ -1,18 +1,55 @@
<?xml version="1.0"?>
<mamelayout version="2">
<element name="pcb">
<image file="mp68A.png" />
<element name="redled" defstate="0">
<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 name="button" defstate="1"/>
<element name="digit" defstate="1">
<led7seg>
<color red="0.75" green="0.0" blue="0.0" />
</led7seg>
<led7seg><color red="0.75" green="0.0" blue="0.0" /></led7seg>
</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">
<backdrop element="pcb">
<bounds left="0" top="0" right="840" bottom="1105" />
</backdrop>
<bounds left="0" top="0" right="840" bottom="1105" />
<bezel name="digit0" element="digit">
<bounds left="70" top="840" right="100" bottom="885" />
</bezel>
@ -35,82 +72,117 @@
<!-- Buttons -->
<!-- Row 3 : C D E F -->
<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 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">
<bounds x="325" y="750" width="85" height="85"/>
<bounds x="325" y="750" width="80" height="80"/>
</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">
<bounds x="410" y="750" width="85" height="85"/>
<bounds x="410" y="750" width="80" height="80"/>
</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">
<bounds x="495" y="750" width="85" height="85"/>
<bounds x="495" y="750" width="80" height="80"/>
</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 -->
<!-- Row 2 : 8 9 A B -->
<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 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">
<bounds x="325" y="835" width="85" height="85"/>
<bounds x="325" y="835" width="80" height="80"/>
</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">
<bounds x="410" y="835" width="85" height="85"/>
<bounds x="410" y="835" width="80" height="80"/>
</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">
<bounds x="495" y="835" width="85" height="85"/>
<bounds x="495" y="835" width="80" height="80"/>
</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 -->
<!-- Row 1 : SHIFT 4 5 6 7 -->
<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 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">
<bounds x="240" y="920" width="85" height="85"/>
<bounds x="240" y="920" width="80" height="80"/>
</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">
<bounds x="325" y="920" width="85" height="85"/>
<bounds x="325" y="920" width="80" height="80"/>
</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">
<bounds x="410" y="920" width="85" height="85"/>
<bounds x="410" y="920" width="80" height="80"/>
</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">
<bounds x="495" y="920" width="85" height="85"/>
<bounds x="495" y="920" width="80" height="80"/>
</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 -->
<!-- Row 0 : RESET 0 1 2 3 -->
<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 element="text_reset"><bounds x="170" y="1050" width="50" height="30" /></bezel>
<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 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">
<bounds x="325" y="1005" width="85" height="85"/>
<bounds x="325" y="1005" width="80" height="80"/>
</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">
<bounds x="410" y="1005" width="85" height="85"/>
<bounds x="410" y="1005" width="80" height="80"/>
</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">
<bounds x="495" y="1005" width="85" height="85"/>
<bounds x="495" y="1005" width="80" height="80"/>
</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>
</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) :
device_t(mconfig, CAT702, "CAT702", tag, owner, clock, "cat702", __FILE__),
m_transform(nullptr),
m_region(*this, DEVICE_SELF),
m_dataout_handler(*this)
{
}
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();
save_item(NAME(m_select));
@ -160,11 +175,6 @@ void cat702_device::apply_sbox(const UINT8 *sbox)
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)
{
if (m_select != state)
@ -215,9 +225,3 @@ WRITE_LINE_MEMBER(cat702_device::write_datain)
{
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) \
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
{
public:
@ -26,7 +21,6 @@ public:
// 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); }
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_datain);
@ -34,14 +28,15 @@ public:
protected:
virtual void device_start() override;
virtual void device_validity_check(validity_checker &valid) const override;
private:
UINT8 compute_sbox_coef(int sel, int bit);
void apply_bit_sbox(int sel);
void apply_sbox(const UINT8 *sbox);
const UINT8 *m_transform;
optional_memory_region m_region;
UINT8 m_transform[8];
int m_select;
int m_clock;
int m_datain;

View File

@ -704,17 +704,18 @@ static void cps2_decrypt(running_machine &machine, UINT16 *rom, UINT16 *dec, int
// 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,
&sboxes2[0*4], &sboxes2[1*4], &sboxes2[2*4], &sboxes2[3*4],
key2[0], key2[1], key2[2], key2[3]);
}
// copy the unencrypted part
while (a < length/2)
{
dec[a] = rom[a];
a += 0x10000;
if (a >= lower_limit && a <= upper_limit)
{
dec[a] = feistel(rom[a], fn2_groupA, fn2_groupB,
&sboxes2[0 * 4], &sboxes2[1 * 4], &sboxes2[2 * 4], &sboxes2[3 * 4],
key2[0], key2[1], key2[2], key2[3]);
}
else
{
dec[a] = rom[a];
}
}
}
}
@ -767,25 +768,25 @@ DRIVER_INIT_MEMBER(cps_state,cps2crypt)
// decoded[4] == watchdog instruction third word
// decoded[5] == watchdog instruction second 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
if (decoded[9] == 0xffff)
{
// 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.
upper = 0xffffffff;
upper = 0xffffff;
lower = 0xff0000;
}
else
{
// This matches two thirds of the old values
upper = (((decoded[9] ^ 0x3f0) << 14) | 0x3ffff) + 1;
upper = (((~decoded[9] & 0x3ff) << 14) | 0x3fff) + 1;
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
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, upper);
cps2_decrypt(machine(), (UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, memregion("maincpu")->bytes(), key, lower / 2, upper / 2);
}
}

View File

@ -184,7 +184,9 @@ ROM_START( lk201 )
// 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) )
// 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
@ -207,11 +209,11 @@ ADDRESS_MAP_END
//-------------------------------------------------
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_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)
MACHINE_CONFIG_END
@ -266,7 +268,49 @@ const tiny_rom_entry *lk201_device::device_rom_region() const
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( 0x02, 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( 0x20, 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( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Compose") PORT_CODE(KEYCODE_LALT)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL)
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) // A99
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) // C99
PORT_START("KBD2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1") PORT_CODE(KEYCODE_1)
PORT_START("KBD2") // Row P1-6
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) // C01
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) // E01
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( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, 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 ) // 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( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("S") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB)
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) // C02
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) // D00
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( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Hold Screen (F1)") PORT_CODE(KEYCODE_F1)
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) // G99
PORT_START("KBD4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("D") PORT_CODE(KEYCODE_D)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3") PORT_CODE(KEYCODE_3)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Setup (F3)") PORT_CODE(KEYCODE_PAUSE) // SET UP = Pause on PC
PORT_START("KBD4") // Row P1-9
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) // C03
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) // E03
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( 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_START("KBD5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4") PORT_CODE(KEYCODE_4)
PORT_START("KBD5") // Row P1-11
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) // B04
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) // D04
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( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Break (F5)") PORT_CODE(KEYCODE_F5)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Data / Talk (F4)") PORT_CODE(KEYCODE_F4)
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) // G02
PORT_START("KBD6")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("G") PORT_CODE(KEYCODE_G)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T") PORT_CODE(KEYCODE_T)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5") PORT_CODE(KEYCODE_5)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Interrupt (F6) [X]") PORT_CODE(KEYCODE_F6)
PORT_START("KBD6") // Row P2-2
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) // C05
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) // E05
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( 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_START("KBD7")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H") PORT_CODE(KEYCODE_H)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6") PORT_CODE(KEYCODE_6)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Resume (F7) [Fortsetzen]") PORT_CODE(KEYCODE_F7)
PORT_START("KBD7") // Row P2-3
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) // C06
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) // E06
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( 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_START("KBD8")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M") PORT_CODE(KEYCODE_M)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J") PORT_CODE(KEYCODE_J)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U") PORT_CODE(KEYCODE_U)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7") PORT_CODE(KEYCODE_7)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Exit (F10) [Fertig]") PORT_CODE(KEYCODE_F10)
PORT_START("KBD8") // Row P2-4
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) // C07
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) // E07
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( 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_START("KBD9")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K") PORT_CODE(KEYCODE_K)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8") PORT_CODE(KEYCODE_8)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("KBD9") // Row P2-6
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) // C08
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) // E08
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( 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_START("KBD10")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("L") PORT_CODE(KEYCODE_L)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9") PORT_CODE(KEYCODE_9)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LF (F13)") PORT_CODE(KEYCODE_F13)
PORT_START("KBD10") // Row P2-9
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) // C09
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) // E09
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( 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_START("KBD11")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";") PORT_CODE(KEYCODE_COLON)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // FIXME - duplicate "Return"
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0)
PORT_START("KBD11") // Row P2-10
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) // C10
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) // D10
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( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete <X") PORT_CODE(KEYCODE_BACKSPACE)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Additional Options (F14) [Zusaetze]") PORT_CODE(KEYCODE_PRTSCR)
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) // G14
PORT_START("KBD12")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Select") PORT_CODE(KEYCODE_DEL)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Help (F15)") PORT_CODE(KEYCODE_RALT)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Find") PORT_CODE(KEYCODE_INSERT)
PORT_START("KBD12") // Row P2-11
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) // B16
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) // D12
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) // G15
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) // E16
PORT_START("KBD13")
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("'") PORT_CODE(KEYCODE_QUOTE)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Previous [^]") PORT_CODE(KEYCODE_END)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Do (F16) [Ausfuehren]") PORT_CODE(KEYCODE_RCONTROL)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert Here") PORT_CODE(KEYCODE_HOME)
PORT_START("KBD13") // Row P3-2
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 ) // 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) // C11
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) // D17
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) // E11
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert Here") PORT_CODE(KEYCODE_HOME) // E17
PORT_START("KBD14")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 0") PORT_CODE(KEYCODE_0_PAD)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 1") PORT_CODE(KEYCODE_1_PAD)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 4") PORT_CODE(KEYCODE_4_PAD)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 7") PORT_CODE(KEYCODE_7_PAD)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Remove") PORT_CODE(KEYCODE_PGUP)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Next [v]") PORT_CODE(KEYCODE_PGDN)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF1") PORT_CODE(KEYCODE_NUMLOCK)
PORT_START("KBD14") // Row P3-4
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) // B20
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) // D20
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) // E18
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) // E20
PORT_START("KBD15")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // FIXME - duplicate "Num 0"
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 2") PORT_CODE(KEYCODE_2_PAD)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 5") PORT_CODE(KEYCODE_5_PAD)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 8") PORT_CODE(KEYCODE_8_PAD)
PORT_START("KBD15") // Row P3-5
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) // B21
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) // C21
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( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF2") PORT_CODE(KEYCODE_SLASH_PAD)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F17")
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") // G20
PORT_START("KBD16")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num .") PORT_CODE(KEYCODE_DEL_PAD) // "." on num.pad
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 3") PORT_CODE(KEYCODE_3_PAD)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 6") PORT_CODE(KEYCODE_6_PAD)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 9") PORT_CODE(KEYCODE_9_PAD)
PORT_START("KBD16") // Row P3-6
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) // B22
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) // B17
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( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF3") PORT_CODE(KEYCODE_ASTERISK)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F18")
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") // G21
PORT_START("KBD17")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER_PAD)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num ,") PORT_CODE(KEYCODE_PLUS_PAD)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // PORT_NAME("Num -") = duplicate...see KBD13
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF4") PORT_CODE(KEYCODE_MINUS_PAD)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20")
PORT_START("KBD17") // Row P3-9
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) // C23
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) // E23
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20") // G23
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 )
INPUT_PORTS_END

View File

@ -118,14 +118,14 @@ really exist.
#include "emu.h"
#include "ns10crypt.h"
constexpr device_type CHOCOVDR_DECRYPTER = &device_creator<chocovdr_decrypter_device>;
constexpr device_type GAMSHARA_DECRYPTER = &device_creator<gamshara_decrypter_device>;
constexpr device_type GJSPACE_DECRYPTER = &device_creator<gjspace_decrypter_device>;
constexpr device_type KNPUZZLE_DECRYPTER = &device_creator<knpuzzle_decrypter_device>;
constexpr device_type KONOTAKO_DECRYPTER = &device_creator<konotako_decrypter_device>;
constexpr device_type MRDRILR2_DECRYPTER = &device_creator<mrdrilr2_decrypter_device>;
constexpr device_type NFLCLSFB_DECRYPTER = &device_creator<nflclsfb_decrypter_device>;
constexpr device_type STARTRGN_DECRYPTER = &device_creator<startrgn_decrypter_device>;
const device_type CHOCOVDR_DECRYPTER = &device_creator<chocovdr_decrypter_device>;
const device_type GAMSHARA_DECRYPTER = &device_creator<gamshara_decrypter_device>;
const device_type GJSPACE_DECRYPTER = &device_creator<gjspace_decrypter_device>;
const device_type KNPUZZLE_DECRYPTER = &device_creator<knpuzzle_decrypter_device>;
const device_type KONOTAKO_DECRYPTER = &device_creator<konotako_decrypter_device>;
const device_type MRDRILR2_DECRYPTER = &device_creator<mrdrilr2_decrypter_device>;
const device_type NFLCLSFB_DECRYPTER = &device_creator<nflclsfb_decrypter_device>;
const device_type STARTRGN_DECRYPTER = &device_creator<startrgn_decrypter_device>;
// base class
@ -161,7 +161,7 @@ ns10_decrypter_device::~ns10_decrypter_device()
constexpr int UNKNOWN {16};
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
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_decrypter_device(type, mconfig, tag, owner, clock)
@ -211,7 +211,7 @@ void ns10_type1_decrypter_device::device_start()
// 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
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_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()
{
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_cpu_to_mcu_data));
save_item(NAME(m_cpu_to_mcu_empty));
@ -102,27 +105,21 @@ void stfight_state::machine_reset()
// Coin signals are active low
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
// - in fact I don't even know how/where it's switched in!
WRITE8_MEMBER(stfight_state::stfight_bank_w)
{
UINT8 *ROM2 = memregion("maincpu")->base() + 0x10000;
UINT16 bank_num;
bank_num = 0;
UINT8 bank_num = 0;
if(data & 0x80)
bank_num |= 0x8000;
bank_num |= 2;
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)
{
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1)
return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return;
offs_t address = (offs_t)addr;
address = (offs_t)addr;
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;
}
address = (offs_t)addr;
UINT32 length = space.read_word_unaligned(address);
UINT32 maximumlength = space.read_word_unaligned(address + 2);
offs_t buffer = space.read_dword_unaligned(address + 4);
machine().debugger().console().printf("Length %d word\n", length);
machine().debugger().console().printf("MaximumLength %d word\n", maximumlength);
machine().debugger().console().printf("Buffer %08X byte* ", buffer);
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, buffer))
{
machine().debugger().console().printf("\nBuffer is unmapped.\n");
return;
}
UINT32 length = cpu.read_word(space, address, true);
UINT32 maximumlength = cpu.read_word(space, address + 2, true);
offs_t buffer = cpu.read_dword(space, address + 4, true);
con.printf("Length %d word\n", length);
con.printf("MaximumLength %d word\n", maximumlength);
con.printf("Buffer %08X byte* ", buffer);
if (length > 256)
length = 256;
for (int a = 0; a < length; a++)
{
UINT8 c = space.read_byte(buffer + a);
machine().debugger().console().printf("%c", c);
UINT8 c = cpu.read_byte(space, buffer + a, true);
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)
{
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1)
return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return;
offs_t address = (offs_t)addr;
address = (offs_t)addr;
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;
}
machine().debugger().console().printf("ReadyListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address), space.read_dword_unaligned(address + 4));
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));
machine().debugger().console().printf("ThreadQuantum %d dword\n", space.read_dword_unaligned(address + 20));
machine().debugger().console().printf("BasePriority %d byte\n", space.read_byte(address + 24));
machine().debugger().console().printf("DisableBoost %d byte\n", space.read_byte(address + 25));
machine().debugger().console().printf("DisableQuantum %d byte\n", space.read_byte(address + 26));
machine().debugger().console().printf("_padding %d byte\n", space.read_byte(address + 27));
address = (offs_t)addr;
con.printf("ReadyListHead {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address, true), cpu.read_dword(space, address + 4, true));
con.printf("ThreadListHead {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 8, true), cpu.read_dword(space, address + 12, true));
con.printf("StackCount %d dword\n", cpu.read_dword(space, address + 16, true));
con.printf("ThreadQuantum %d dword\n", cpu.read_dword(space, address + 20, true));
con.printf("BasePriority %d byte\n", cpu.read_byte(space, address + 24, true));
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)
{
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1)
return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return;
@ -110,26 +117,27 @@ void xbox_base_state::dump_list_command(int ref, int params, const char **param)
}
UINT64 start = addr;
offs_t address = (offs_t)addr;
address = (offs_t)addr;
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;
}
address = (offs_t)addr;
if (params >= 2)
machine().debugger().console().printf("Entry Object\n");
con.printf("Entry Object\n");
else
machine().debugger().console().printf("Entry\n");
con.printf("Entry\n");
UINT64 old;
for (int num = 0; num < 32; num++)
{
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
machine().debugger().console().printf("%08X\n", (UINT32)addr);
con.printf("%08X\n", (UINT32)addr);
old = addr;
addr = space.read_dword_unaligned(address);
addr = cpu.read_dword(space, address, true);
if (addr == start)
break;
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;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
break;
address = (offs_t)addr;
}
}
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();
UINT64 addr;
offs_t address;
if (params < 1)
return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return;
offs_t address = (offs_t)addr;
address = (offs_t)addr;
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;
}
machine().debugger().console().printf("Type %d word\n", space.read_word_unaligned(address));
machine().debugger().console().printf("Inserted %d byte\n", space.read_byte(address + 2));
machine().debugger().console().printf("Padding %d byte\n", space.read_byte(address + 3));
machine().debugger().console().printf("DpcListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 4), space.read_dword_unaligned(address + 8));
machine().debugger().console().printf("DeferredRoutine %08X dword\n", space.read_dword_unaligned(address + 12));
machine().debugger().console().printf("DeferredContext %08X dword\n", space.read_dword_unaligned(address + 16));
machine().debugger().console().printf("SystemArgument1 %08X dword\n", space.read_dword_unaligned(address + 20));
machine().debugger().console().printf("SystemArgument2 %08X dword\n", space.read_dword_unaligned(address + 24));
address = (offs_t)addr;
con.printf("Type %d word\n", cpu.read_word(space, address, true));
con.printf("Inserted %d byte\n", cpu.read_byte(space, address + 2, true));
con.printf("Padding %d byte\n", cpu.read_byte(space, address + 3, true));
con.printf("DpcListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 4, true), cpu.read_dword(space, address + 8, true));
con.printf("DeferredRoutine %08X dword\n", cpu.read_dword(space, address + 12, true));
con.printf("DeferredContext %08X dword\n", cpu.read_dword(space, address + 16, true));
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)
{
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space();
UINT64 addr;
offs_t address;
if (params < 1)
return;
UINT64 addr;
if (!machine().debugger().commands().validate_number_parameter(param[0], &addr))
return;
offs_t address = (offs_t)addr;
address = (offs_t)addr;
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;
}
machine().debugger().console().printf("Header.Type %d byte\n", space.read_byte(address));
machine().debugger().console().printf("Header.Absolute %d byte\n", space.read_byte(address + 1));
machine().debugger().console().printf("Header.Size %d byte\n", space.read_byte(address + 2));
machine().debugger().console().printf("Header.Inserted %d byte\n", space.read_byte(address + 3));
machine().debugger().console().printf("Header.SignalState %08X dword\n", space.read_dword_unaligned(address + 4));
machine().debugger().console().printf("Header.WaitListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 8), space.read_dword_unaligned(address + 12));
machine().debugger().console().printf("%s", string_format("DueTime %I64x qword\n", (INT64)space.read_qword_unaligned(address + 16)).c_str());
machine().debugger().console().printf("TimerListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 24), space.read_dword_unaligned(address + 28));
machine().debugger().console().printf("Dpc %08X dword\n", space.read_dword_unaligned(address + 32));
machine().debugger().console().printf("Period %d dword\n", space.read_dword_unaligned(address + 36));
address = (offs_t)addr;
con.printf("Header.Type %d byte\n", cpu.read_byte(space, address, true));
con.printf("Header.Absolute %d byte\n", cpu.read_byte(space, address + 1, true));
con.printf("Header.Size %d byte\n", cpu.read_byte(space, address + 2, true));
con.printf("Header.Inserted %d byte\n", cpu.read_byte(space, address + 3, true));
con.printf("Header.SignalState %08X dword\n", cpu.read_dword(space, address + 4, true));
con.printf("Header.WaitListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 8, true), cpu.read_dword(space, address + 12, true));
con.printf("%s", string_format("DueTime %I64x qword\n", (INT64)cpu.read_qword(space, address + 16, true)).c_str());
con.printf("TimerListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 24, true), cpu.read_dword(space, address + 28, true));
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)
{
debugger_cpu &cpu = machine().debugger().cpu();
debugger_console &con = machine().debugger().console();
address_space &space = m_maincpu->space();
offs_t address;
UINT64 fsbase = m_maincpu->state_int(44);
offs_t address = (offs_t)fsbase + 0x28;
UINT64 fsbase = m_maincpu->state_int(44); // base of FS register
address = (offs_t)fsbase + 0x28;
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;
}
address = (offs_t)fsbase + 0x28;
UINT32 kthrd = space.read_dword_unaligned(address);
machine().debugger().console().printf("Current thread is %08X\n", kthrd);
UINT32 kthrd = cpu.read_dword(space, address, true);
con.printf("Current thread is %08X\n", kthrd);
address = (offs_t)kthrd + 0x1c;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
return;
UINT32 topstack = space.read_dword_unaligned(address);
machine().debugger().console().printf("Current thread stack top is %08X\n", topstack);
UINT32 topstack = cpu.read_dword(space, address, true);
con.printf("Current thread stack top is %08X\n", topstack);
address = (offs_t)kthrd + 0x28;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
return;
UINT32 tlsdata = space.read_dword_unaligned(address);
UINT32 tlsdata = cpu.read_dword(space, address, true);
if (tlsdata == 0)
address = (offs_t)topstack - 0x210 - 8;
else
address = (offs_t)tlsdata - 8;
if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address))
return;
machine().debugger().console().printf("Current thread function is %08X\n", space.read_dword_unaligned(address));
con.printf("Current thread function is %08X\n", cpu.read_dword(space, address, true));
}
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)
{
debugger_console &con = machine().debugger().console();
int en = nvidia_nv2a->toggle_register_combiners_usage();
if (en != 0)
machine().debugger().console().printf("Register combiners enabled\n");
con.printf("Register combiners enabled\n");
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)
{
debugger_console &con = machine().debugger().console();
int en = nvidia_nv2a->toggle_wait_vblank_support();
if (en != 0)
machine().debugger().console().printf("Vblank method enabled\n");
con.printf("Vblank method enabled\n");
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)
@ -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)
{
machine().debugger().console().printf("Available Xbox commands:\n");
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");
machine().debugger().console().printf(" xbox dump_list,<address>[,<offset>] -- Dump _LIST_ENTRY chain starting at <address>\n");
machine().debugger().console().printf(" xbox dump_dpc,<address> -- Dump _KDPC object at <address>\n");
machine().debugger().console().printf(" xbox dump_timer,<address> -- Dump _KTIMER object at <address>\n");
machine().debugger().console().printf(" xbox curthread -- Print information about current thread\n");
machine().debugger().console().printf(" xbox irq,<number> -- Generate interrupt with irq number 0-15\n");
machine().debugger().console().printf(" xbox nv2a_combiners -- Toggle use of register combiners\n");
machine().debugger().console().printf(" xbox waitvblank -- Toggle support for wait vblank method\n");
machine().debugger().console().printf(" xbox grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\n");
machine().debugger().console().printf(" xbox grab_vprog,<filename> -- save current vertex program instruction slots to <filename>\n");
machine().debugger().console().printf(" xbox vprogdis,<address>,<length>[,<type>] -- disassemble <lenght> vertex program instructions at <address> of <type>\n");
machine().debugger().console().printf(" xbox help -- this list\n");
debugger_console &con = machine().debugger().console();
con.printf("Available Xbox commands:\n");
con.printf(" xbox dump_string,<address> -- Dump _STRING object at <address>\n");
con.printf(" xbox dump_process,<address> -- Dump _PROCESS object at <address>\n");
con.printf(" xbox dump_list,<address>[,<offset>] -- Dump _LIST_ENTRY chain starting at <address>\n");
con.printf(" xbox dump_dpc,<address> -- Dump _KDPC object at <address>\n");
con.printf(" xbox dump_timer,<address> -- Dump _KTIMER object at <address>\n");
con.printf(" xbox curthread -- Print information about current thread\n");
con.printf(" xbox irq,<number> -- Generate interrupt with irq number 0-15\n");
con.printf(" xbox nv2a_combiners -- Toggle use of register combiners\n");
con.printf(" xbox waitvblank -- Toggle support for wait vblank method\n");
con.printf(" xbox grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\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)

View File

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