summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hash/bbc_flop_6502.xml8
-rw-r--r--hash/bbc_rom.xml272
-rw-r--r--hash/electron_rom.xml56
-rw-r--r--regtests/jedutil/baseline/gal16v8/gal16v8_simple_mode_2.txt25
-rw-r--r--regtests/jedutil/eqns/WinCUPL/gal16v8/gal16v8_simple_mode_2.pld41
-rw-r--r--regtests/jedutil/jeds/gal16v8/gal16v8_simple_mode_2.jed27
-rw-r--r--scripts/src/bus.lua4
-rw-r--r--scripts/target/mame/arcade.lua1
-rw-r--r--src/devices/bus/bbc/1mhzbus/1mhzbus.cpp2
-rw-r--r--src/devices/bus/bbc/1mhzbus/cisco.cpp267
-rw-r--r--src/devices/bus/bbc/1mhzbus/cisco.h60
-rw-r--r--src/devices/bus/bbc/internal/we32kram.cpp6
-rw-r--r--src/devices/bus/bbc/tube/tube.cpp4
-rw-r--r--src/devices/bus/bbc/tube/tube_6502.cpp185
-rw-r--r--src/devices/bus/bbc/tube/tube_6502.h50
-rw-r--r--src/devices/bus/coco/coco_ide.cpp249
-rw-r--r--src/devices/bus/coco/coco_ide.h62
-rw-r--r--src/devices/bus/coco/cococart.cpp2
-rw-r--r--src/devices/cpu/i8008/i8008.cpp6
-rw-r--r--src/devices/cpu/i8008/i8008.h2
-rw-r--r--src/mame/arcade.flt1
-rw-r--r--src/mame/drivers/alvg.cpp304
-rw-r--r--src/mame/drivers/astrcorp.cpp43
-rw-r--r--src/mame/drivers/bbc.cpp83
-rw-r--r--src/mame/drivers/capcom.cpp26
-rw-r--r--src/mame/drivers/de_2.cpp2
-rw-r--r--src/mame/drivers/fidel_chesster.cpp2
-rw-r--r--src/mame/drivers/fidel_desdis.cpp2
-rw-r--r--src/mame/drivers/fidel_phantom.cpp402
-rw-r--r--src/mame/drivers/goldnpkr.cpp63
-rw-r--r--src/mame/drivers/hh_amis2k.cpp43
-rw-r--r--src/mame/drivers/hh_cop400.cpp227
-rw-r--r--src/mame/drivers/hh_cops1.cpp55
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp461
-rw-r--r--src/mame/drivers/hh_melps4.cpp42
-rw-r--r--src/mame/drivers/hh_pic16.cpp188
-rw-r--r--src/mame/drivers/hh_pps41.cpp128
-rw-r--r--src/mame/drivers/hh_sm510.cpp16
-rw-r--r--src/mame/drivers/hh_tms1k.cpp1105
-rw-r--r--src/mame/drivers/hh_ucom4.cpp253
-rw-r--r--src/mame/drivers/indiana.cpp5
-rw-r--r--src/mame/drivers/k1003.cpp1
-rw-r--r--src/mame/drivers/merit.cpp16
-rw-r--r--src/mame/drivers/mod8.cpp1
-rw-r--r--src/mame/drivers/namcos22.cpp10
-rw-r--r--src/mame/drivers/pmc.cpp33
-rw-r--r--src/mame/drivers/rbmk.cpp33
-rw-r--r--src/mame/drivers/s6.cpp125
-rw-r--r--src/mame/drivers/s6a.cpp501
-rw-r--r--src/mame/drivers/s7.cpp11
-rw-r--r--src/mame/drivers/sacstate.cpp1
-rw-r--r--src/mame/drivers/spike.cpp10
-rw-r--r--src/mame/drivers/stv.cpp4
-rw-r--r--src/mame/drivers/tispeak.cpp51
-rw-r--r--src/mame/drivers/tispellb.cpp23
-rw-r--r--src/mame/includes/bbc.h7
-rw-r--r--src/mame/includes/hh_tms1k.h19
-rw-r--r--src/mame/layout/blastit.lay65
-rw-r--r--src/mame/layout/fidel_cphantom.lay713
-rw-r--r--src/mame/layout/s6a.lay8
-rw-r--r--src/mame/layout/vidchal.lay4
-rw-r--r--src/mame/machine/decopincpu.cpp17
-rw-r--r--src/mame/machine/decopincpu.h9
-rw-r--r--src/mame/mame.lst17
-rw-r--r--src/osd/sdl/video.cpp8
-rw-r--r--src/tools/jedutil.cpp54
66 files changed, 4539 insertions, 1982 deletions
diff --git a/hash/bbc_flop_6502.xml b/hash/bbc_flop_6502.xml
index 2f99ac61814..bca7f48c8c4 100644
--- a/hash/bbc_flop_6502.xml
+++ b/hash/bbc_flop_6502.xml
@@ -154,7 +154,13 @@ Acorn BBC Micro - 6502 2nd Processor Discs
<part name="flop1" interface="floppy_5_25">
<feature name="part_id" value="P-System (1)"/>
<dataarea name="flop" size="204800">
- <rom name="Acornsoft p-System.ssd" size="204800" crc="7f880ffb" sha1="2dc9a1905a60e2f40194639c2997e335cfd8a536"/>
+ <rom name="Acornsoft P-System(1).ssd" size="204800" crc="7f880ffb" sha1="2dc9a1905a60e2f40194639c2997e335cfd8a536"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <feature name="part_id" value="P-System (2)"/>
+ <dataarea name="flop" size="204800">
+ <rom name="Acornsoft P-System(2).ssd" size="204800" crc="c3fe04cc" sha1="cc6b0f42bcd66bafd225b1f2faaefd758266922d"/>
</dataarea>
</part>
</software>
diff --git a/hash/bbc_rom.xml b/hash/bbc_rom.xml
index d6fb140dc07..a455a0a6e88 100644
--- a/hash/bbc_rom.xml
+++ b/hash/bbc_rom.xml
@@ -815,7 +815,19 @@ license:CC0
</part>
</software>
- <software name="adfs151">
+ <software name="adfs150">
+ <description>Acorn ADFS 1.50</description>
+ <year>1984</year>
+ <publisher>Acorn</publisher>
+ <sharedfeat name="compatibility" value="M"/>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="Acorn-ADFS-1.50.rom" size="16384" crc="10583dfe" sha1="7557e99be10d81c0395df2dc6c2f8e2f95896c29"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adfs151" cloneof="adfs150">
<description>Acorn ADFS 1.51 (patched)</description>
<year>2002</year>
<publisher>Acorn / J.G.Harston</publisher>
@@ -827,7 +839,7 @@ license:CC0
</part>
</software>
- <software name="adfs152">
+ <software name="adfs152" cloneof="adfs150">
<description>Acorn ADFS 1.52 (patched)</description>
<year>2005</year>
<publisher>Acorn / J.G.Harston</publisher>
@@ -839,7 +851,7 @@ license:CC0
</part>
</software>
- <software name="adfs153">
+ <software name="adfs153" cloneof="adfs150">
<description>Acorn ADFS 1.53 (IDE)</description>
<year>2005</year>
<publisher>Acorn / J.G.Harston</publisher>
@@ -851,7 +863,7 @@ license:CC0
</part>
</software>
- <software name="adfs156">
+ <software name="adfs156" cloneof="adfs150">
<description>Acorn ADFS 1.56 (patched)</description>
<year>2016</year>
<publisher>Acorn / J.G.Harston</publisher>
@@ -863,7 +875,7 @@ license:CC0
</part>
</software>
- <software name="adfs157">
+ <software name="adfs157" cloneof="adfs150">
<description>Acorn ADFS 1.57 (MMC)</description>
<year>2016</year>
<publisher>Acorn / J.G.Harston</publisher>
@@ -1367,6 +1379,18 @@ license:CC0
</part>
</software>
+ <software name="amxsupm351" cloneof="amxsupm3">
+ <description>AMX Super Rom M3.51</description>
+ <year>1986</year>
+ <publisher>Advanced Memory Systems</publisher>
+ <sharedfeat name="compatibility" value="M"/>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="AMXMouseSupport-M3.51.rom" size="16384" crc="e13faa4f" sha1="f0e1a31a4f4b563762c3a4e0d84e17cecdba4542"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="amxsupm3">
<description>AMX Super Rom M3.61</description>
<year>1986</year>
@@ -2122,12 +2146,12 @@ license:CC0
<publisher>Beebugsoft</publisher>
<part name="rom1" interface="bbc_rom">
<dataarea name="rom" size="16384">
- <rom name="BeebugC-1.4-1.rom" size="16384" crc="551a9d9e" sha1="f006fd9a19ba1c239bc68d4003a2b79c9ad3823a"/>
+ <rom name="BeebugC(lang)-1.4-1.rom" size="16384" crc="551a9d9e" sha1="f006fd9a19ba1c239bc68d4003a2b79c9ad3823a"/>
</dataarea>
</part>
<part name="rom2" interface="bbc_rom">
<dataarea name="rom" size="16384">
- <rom name="BeebugC-1.4-2.rom" size="16384" crc="ef7fb5ed" sha1="601560a7ebca4142de0a802db6ac575a4fef8ef5"/>
+ <rom name="BeebugC(comp)-1.4-2.rom" size="16384" crc="ef7fb5ed" sha1="601560a7ebca4142de0a802db6ac575a4fef8ef5"/>
</dataarea>
</part>
</software>
@@ -2138,12 +2162,12 @@ license:CC0
<publisher>Beebugsoft</publisher>
<part name="rom1" interface="bbc_rom">
<dataarea name="rom" size="16384">
- <rom name="BeebugC-1.5-1.rom" size="16384" crc="6d8f1a0f" sha1="fe4a74f19a2d6cde65bf7665170a52c11f39d56c"/>
+ <rom name="BeebugC(lang)-1.5-1.rom" size="16384" crc="6d8f1a0f" sha1="fe4a74f19a2d6cde65bf7665170a52c11f39d56c"/>
</dataarea>
</part>
<part name="rom2" interface="bbc_rom">
<dataarea name="rom" size="16384">
- <rom name="BeebugC-1.5-2.rom" size="16384" crc="7a894882" sha1="bbdf207326c2d46f473346d489150b3931129533"/>
+ <rom name="BeebugC(comp)-1.5-2.rom" size="16384" crc="7a894882" sha1="bbdf207326c2d46f473346d489150b3931129533"/>
</dataarea>
</part>
</software>
@@ -3741,6 +3765,17 @@ license:CC0
</part>
</software>
+ <software name="dfsaid">
+ <description>DFS-AID</description>
+ <year>1985</year>
+ <publisher>Lincoln Microsystems</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="DFS-AID-1.0.rom" size="8192" crc="8738336c" sha1="fba4fbe9461bd3aa67a0567e7397e7d34012f56f"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="diagram3112" cloneof="diagram">
<description>Diagram S/N:3112</description>
<year>1985</year>
@@ -4291,6 +4326,17 @@ license:CC0
</part>
</software>
+ <software name="edit">
+ <description>Edit 1.00</description>
+ <year>1984</year>
+ <publisher>Acorn</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="Edit-1.00.rom" size="16384" crc="aa4a804e" sha1="2460b237399e6451a90018cb756c5bfc4382c1d2"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="edword102" cloneof="edword">
<description>Edword 1.02</description>
<year>1982</year>
@@ -5902,6 +5948,22 @@ license:CC0
</part>
</software>
+ <software name="iwordh" cloneof="iword">
+ <description>Inter-Word 1.02 [hack]</description>
+ <year>1986</year>
+ <publisher>Computer Concepts</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="InterWord-1.02-1hi.rom" size="16384" crc="76a40640" sha1="3db99482451d2c94d3b76c7941b1d8bde4ca3f8d"/>
+ </dataarea>
+ </part>
+ <part name="rom2" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="InterWord-1.02-2lo.rom" size="16384" crc="0d8c6671" sha1="039e7e28867e11b44d3093b8ffdd82302f64bc96"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="iworda1" cloneof="iword">
<description>Inter-Word 1.O2 [alt1]</description>
<year>1986</year>
@@ -5960,8 +6022,8 @@ license:CC0
</part>
</software>
- <software name="kenda">
- <description>Kenda Professional DMFS with PADS 1.02</description>
+ <software name="kenda102" cloneof="kenda">
+ <description>Kenda DMFS - PADS 1.02</description>
<year>1985</year>
<publisher>Kenda Electronic Systems</publisher>
<sharedfeat name="compatibility" value="B"/>
@@ -5975,6 +6037,21 @@ license:CC0
</part>
</software>
+ <software name="kenda">
+ <description>Mighty Oak DMFS 1.04 - KSSL</description>
+ <year>1985</year>
+ <publisher>Kenda Electronic Systems</publisher>
+ <sharedfeat name="compatibility" value="B"/>
+ <sharedfeat name="fdc_default" value="kenda"/>
+ <part name="rom1" interface="bbc_rom">
+ <feature name="slot" value="dfse00" />
+ <dataarea name="rom" size="8192">
+ <rom name="Kenda-1.04.rom" size="8192" crc="1c0013de" sha1="7845a69dd8d05cf905f8e11ad3abeebb4b0b187d"/>
+ </dataarea>
+ <dataarea name="ram" size="2048" />
+ </part>
+ </software>
+
<software name="kermit025" cloneof="kermit">
<description>Kermit 0.25</description>
<year>1985</year>
@@ -6775,6 +6852,22 @@ license:CC0
</part>
</software>
+ <software name="microloop" supported="no">
+ <description>Micro Loop</description>
+ <year>1985</year>
+ <publisher>Micro Medical</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="MicroLoop_ML_UTILS.rom" size="16384" crc="e9a4fb41" sha1="9e8e47b599d34d48170bdb7e57e2d1d8cc36aec1"/>
+ </dataarea>
+ </part>
+ <part name="rom2" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="MicroLoop_ML.rom" size="16384" crc="f959aea4" sha1="4429c0602714b1214f9053bec421ad4d488f494c"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="micromon">
<description>Micromon</description>
<year>1983</year>
@@ -7624,6 +7717,19 @@ license:CC0
</part>
</software>
+ <software name="pcbdesign">
+ <description>PCB Designer 1.00</description>
+ <year>1988</year>
+ <publisher>Watford Electronics</publisher>
+ <info name="author" value="Lee Rayner"/>
+ <part name="rom1" interface="bbc_rom">
+ <feature name="slot" value="palqst" />
+ <dataarea name="rom" size="32768">
+ <rom name="PCB_Designer-1.00.rom" size="32768" crc="ca9fc89d" sha1="724123d28372ac3b3ee0aaca1aa953948e186cd1"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="pendown">
<description>PenDown 1.13</description>
<year>1986</year>
@@ -7713,6 +7819,39 @@ license:CC0
</part>
</software>
+ <software name="pigrom100" cloneof="pigrom">
+ <description>Pig ROM 1.00</description>
+ <year>198?</year>
+ <publisher>Buggery Soft</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="PigROM-1.00.rom" size="8192" crc="c522b844" sha1="d04e1e099758d497f00546b92247f4e731694693"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pigrom">
+ <description>Pig ROM 1.10</description>
+ <year>198?</year>
+ <publisher>Buggery Soft</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="PigROM-1.10.rom" size="8192" crc="c51143d4" sha1="a021e3bb306d3a5b3bcdfbf80c198db018f3cd90"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="plotmta3_180" cloneof="plotmta3">
+ <description>Plotmate A3 1.80</description>
+ <year>1986</year>
+ <publisher>Linear Graphics</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="PlotmateA3-1.80.rom" size="16384" crc="e80f30dc" sha1="70e1ac2749177d725aba94d74ae1f22335c0d580"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="plotmta3">
<description>Plotmate A3 2.00</description>
<year>1986</year>
@@ -7878,8 +8017,8 @@ license:CC0
</part>
</software>
- <software name="prntctrl">
- <description>Printer Controller</description>
+ <software name="prntctrl10" cloneof="prntctrl">
+ <description>Printer Controller 1.0</description>
<year>1985</year>
<publisher>Micone Computer Systems</publisher>
<part name="rom1" interface="bbc_rom">
@@ -7889,6 +8028,17 @@ license:CC0
</part>
</software>
+ <software name="prntctrl">
+ <description>Printer Controller 2.0(e)</description>
+ <year>1986</year>
+ <publisher>Micone Computer Systems</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="PrinterController-2.0e.rom" size="8192" crc="e6a0add0" sha1="6a09696605aa10fa46cca6f9f4b6172dffa94f7c"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="prntmcan">
<description>Printmaster (Canon) 1.08</description>
<year>1984</year>
@@ -8104,6 +8254,17 @@ license:CC0
</part>
</software>
+ <software name="probe6">
+ <description>Probe 6.01</description>
+ <year>1986</year>
+ <publisher>Altra</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="Probe-6.01.rom" size="16384" crc="a96597e5" sha1="7ad711e4a92500f3c12bee446921d700764171d4"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="procyon">
<description>Procyon 1.81</description>
<year>1985</year>
@@ -8487,7 +8648,7 @@ license:CC0
<year>1985</year>
<publisher>Vine Micros</publisher>
<info name="usage" value="Requires Acorn 1770 FDC" />
- <sharedfeat name="compatibility" value="B"/>
+ <sharedfeat name="compatibility" value="B,B+"/>
<part name="rom1" interface="bbc_rom">
<dataarea name="rom" size="8192">
<rom name="Replay-1770A-1.17.rom" size="8192" crc="8bc3f04f" sha1="f2ebd0574faf75254ac3d22c07eb2441bbb4bec2"/>
@@ -8495,6 +8656,19 @@ license:CC0
</part>
</software>
+ <software name="replay1770w" supported="no">
+ <description>Replay System WD1770W 1.28</description>
+ <year>1986</year>
+ <publisher>Vine Micros</publisher>
+ <info name="usage" value="Requires Watford Electronics DDB2 1772 FDC" />
+ <sharedfeat name="compatibility" value="B"/>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="Replay-1770W-1.28.rom" size="8192" crc="d8c0c076" sha1="33d125f055d34a54bb7e7ac3f19816ab8aed1235"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="replay2" supported="no">
<description>Replay System Mk2 2.00</description>
<year>1988</year>
@@ -8697,6 +8871,17 @@ license:CC0
</part>
</software>
+ <software name="rx8" supported="no">
+ <description>RX-8 2.2</description>
+ <year>1990</year>
+ <publisher>Technical Software</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="RX-8-2.2.rom" size="16384" crc="b0039b56" sha1="9c9d2375135560bda3779585b0a28ac45200dd46"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="satpic3" supported="no">
<description>SatPic 3.0 (Timestep)</description>
<year>1986</year>
@@ -8741,6 +8926,17 @@ license:CC0
</part>
</software>
+ <software name="scorpion">
+ <description>Scorpion Terminal Emulator 1.2</description>
+ <year>198?</year>
+ <publisher>Micro-Robotics</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="Scorpion-1.2.rom" size="16384" crc="a94ce961" sha1="48209f00cd176cfbb443df52a9a57f36b67ea744"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="scrnprnt020" cloneof="scrnprnt">
<description>Screenprint 0.20</description>
<year>1987</year>
@@ -8987,9 +9183,9 @@ license:CC0
</software>
<software name="slave">
- <description>Slave 1.34</description>
+ <description>Slave+ 1.34</description>
<year>1985</year>
- <publisher>A&amp;F Software</publisher>
+ <publisher>Microman Computers</publisher>
<part name="rom1" interface="bbc_rom">
<dataarea name="rom" size="16384">
<rom name="Slave-1.34.rom" size="16384" crc="ccc0817f" sha1="b92e8690c8f3f3740fbd40bc479a1e52289d9fb1"/>
@@ -9254,6 +9450,17 @@ license:CC0
</part>
</software>
+ <software name="squeak">
+ <description>Squeak MDPT 1.20</description>
+ <year>1987</year>
+ <publisher>Aldoda International</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="SqueakMDPT-1.20.rom" size="16384" crc="df8099d2" sha1="fb67fbacbb6fdd3cf8de0f18eb26ff292629bf66"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="starbasekt" cloneof="starbase">
<description>StarBASE 2.00 (Keyteam)</description>
<year>1984</year>
@@ -10635,6 +10842,17 @@ license:CC0
</part>
</software>
+ <software name="trace">
+ <description>Trace Disassembler 1.00</description>
+ <year>198?</year>
+ <publisher>Solidisk</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="Trace-1.00.rom" size="8192" crc="c7b4819f" sha1="d5500389c1fa5e391816af015f1fc61e417702c0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="trckball">
<description>Trackerball 0.01</description>
<year>1985</year>
@@ -10757,6 +10975,17 @@ license:CC0
</part>
</software>
+ <software name="uclterm">
+ <description>UCL Terminal Emulator 3.54</description>
+ <year>1984</year>
+ <publisher>University College London</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="UCL_Terminal-3.54.rom" size="8192" crc="b5513ee7" sha1="26eeea109f19a8a4429a7bd6683d6344f589a0ca"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="ultrcalc">
<description>Ultracalc</description>
<year>1982</year>
@@ -12261,4 +12490,15 @@ license:CC0
</part>
</software>
+ <software name="znos">
+ <description>ZNOS 1.01</description>
+ <year>1986</year>
+ <publisher>SJ Research</publisher>
+ <part name="rom1" interface="bbc_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="ZNOS-1.01.rom" size="8192" crc="a660728f" sha1="fe6b2986355d7be30bbbdc695fb51f16774f8503"/>
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/electron_rom.xml b/hash/electron_rom.xml
index 647bc2cb341..c766febdf57 100644
--- a/hash/electron_rom.xml
+++ b/hash/electron_rom.xml
@@ -369,6 +369,18 @@ license:CC0
</part>
</software>
+ <software name="ample">
+ <description>AMPLE Nucleus ID 60205</description>
+ <year>1986</year>
+ <publisher>Hybrid Technology</publisher>
+ <info name="usage" value="Requires Music 5000"/>
+ <part name="rom" interface="electron_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="AMPLENucleus-1.10-60205.rom" size="16384" crc="b6417662" sha1="261eabfd72f2aa63d86c8ce3a94f5c822aca2d71"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="arm100" cloneof="arm">
<description>Advanced ROM Manager v1.00</description>
<year>1986</year>
@@ -503,6 +515,17 @@ license:CC0
</part>
</software>
+ <software name="i2c" supported="no">
+ <description>I2C (4 U) 3.1E</description>
+ <year>2018</year>
+ <publisher>Martin Barr</publisher>
+ <part name="rom" interface="electron_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="I2C-3.1E.rom" size="16384" crc="8e31ea35" sha1="749a877480561d78b546e9541e66f8d774e56dfe"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="matrix">
<description>Matrix</description>
<year>1986</year>
@@ -747,6 +770,22 @@ license:CC0
</part>
</software>
+ <software name="stopress">
+ <description>AMX Stop Press</description>
+ <year>1989</year>
+ <publisher>Slogger</publisher>
+ <part name="rom1" interface="electron_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="AMXStopPress-1.9.rom" size="16384" crc="900716e1" sha1="1d6d219c51e8a2be305e69b8fecaa76d992d5ba2"/>
+ </dataarea>
+ </part>
+ <part name="rom2" interface="electron_rom">
+ <dataarea name="rom" size="16384">
+ <rom name="AMXStopPressSupport-1.9.rom" size="16384" crc="21cb5808" sha1="8d2fd8b39492654fa32453c0936a70e15d97d736"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="t2c3">
<description>T2C3 v1.00</description>
<year>1985</year>
@@ -769,6 +808,17 @@ license:CC0
</part>
</software>
+ <software name="t2cu200" cloneof="t2cu">
+ <description>T2CU v2.00</description>
+ <year>1987</year>
+ <publisher>Slogger</publisher>
+ <part name="rom" interface="electron_rom">
+ <dataarea name="rom" size="8192">
+ <rom name="T2CU-2.00.rom" size="8192" crc="3d3be2a0" sha1="324abc8289c83f6b47933ccf842e6c3edc167015"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="t2cu">
<description>T2CU v2.01</description>
<year>1987</year>
@@ -973,12 +1023,12 @@ license:CC0
</software>
<software name="xbasic">
- <description>XBasic</description>
+ <description>XBasic B.E</description>
<year>1990</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>DEB</publisher>
<part name="rom" interface="electron_rom">
<dataarea name="rom" size="16384">
- <rom name="Xbasic.rom" size="16384" crc="b1eb3e33" sha1="25d80112b789d72f739dccb54a86e1969f2eda0f"/>
+ <rom name="Xbasic-B.E.rom" size="16384" crc="b1eb3e33" sha1="25d80112b789d72f739dccb54a86e1969f2eda0f"/>
</dataarea>
</part>
</software>
diff --git a/regtests/jedutil/baseline/gal16v8/gal16v8_simple_mode_2.txt b/regtests/jedutil/baseline/gal16v8/gal16v8_simple_mode_2.txt
new file mode 100644
index 00000000000..68cb5d26f29
--- /dev/null
+++ b/regtests/jedutil/baseline/gal16v8/gal16v8_simple_mode_2.txt
@@ -0,0 +1,25 @@
+Inputs:
+
+1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 17, 18, 19
+
+Outputs:
+
+12 (Combinatorial, Output feedback output, Active low)
+15 (Combinatorial, No output feedback, Active low)
+16 (Combinatorial, No output feedback, Active low)
+
+Equations:
+
+/o12 = i1 +
+ i2 +
+ i3 +
+ /i4 +
+ /i5
+o12.oe = vcc
+
+/o15 =
+o15.oe = vcc
+
+/o16 =
+o16.oe = vcc
+
diff --git a/regtests/jedutil/eqns/WinCUPL/gal16v8/gal16v8_simple_mode_2.pld b/regtests/jedutil/eqns/WinCUPL/gal16v8/gal16v8_simple_mode_2.pld
new file mode 100644
index 00000000000..1908328cc28
--- /dev/null
+++ b/regtests/jedutil/eqns/WinCUPL/gal16v8/gal16v8_simple_mode_2.pld
@@ -0,0 +1,41 @@
+Name GAL16V8 Simple Mode Test 2 ;
+PartNo 00 ;
+Date 2/16/2022 ;
+Revision 01 ;
+Designer MAME ;
+Company MAME ;
+Assembly None ;
+Location ;
+Device G16V8A ;
+
+/* Simple Mode Test 2 */
+
+/* Input Pins */
+PIN 1 = [I1] ;
+PIN 2 = [I2] ;
+PIN 3 = [I3] ;
+PIN 4 = [I4] ;
+PIN 5 = [I5] ;
+PIN 6 = [I6] ;
+PIN 7 = [I7] ;
+PIN 8 = [I8] ;
+PIN 9 = [I9] ;
+PIN 11 = [I11] ;
+
+/* Output Pins */
+PINNODE 12 = [O12] ;
+PINNODE 13 = [O13] ;
+PINNODE 14 = [O14] ;
+PINNODE 15 = [O15] ;
+PINNODE 16 = [O16] ;
+PINNODE 17 = [O17] ;
+PINNODE 18 = [O18] ;
+PINNODE 19 = [O19] ;
+
+/* Logic Equations */
+
+!O12 = I1 #
+ I2 #
+ I3 #
+ !I4 #
+ !I5 ;
diff --git a/regtests/jedutil/jeds/gal16v8/gal16v8_simple_mode_2.jed b/regtests/jedutil/jeds/gal16v8/gal16v8_simple_mode_2.jed
new file mode 100644
index 00000000000..e851793a1b7
--- /dev/null
+++ b/regtests/jedutil/jeds/gal16v8/gal16v8_simple_mode_2.jed
@@ -0,0 +1,27 @@
+
+CUPL(WM) 5.0a Serial# 60008009
+Device g16v8as Library DLIB-h-40-2
+Created Wed Feb 16 21:22:13 2022
+Name GAL16V8 Simple Mode Test 2
+Partno 00
+Revision 01
+Date 2/16/2022
+Designer MAME
+Company MAME
+Assembly None
+Location
+*QP20
+*QF2194
+*G0
+*F0
+*L01792 11011111111111111111111111111111
+*L01824 01111111111111111111111111111111
+*L01856 11110111111111111111111111111111
+*L01888 11111111101111111111111111111111
+*L01920 11111111111110111111111111111111
+*L02048 00000000001100000011000000100000
+*L02112 00000000111111101111111111111111
+*L02144 11111111111111111111111111111111
+*L02176 111111111111111110
+*C1C49
+*9652 \ No newline at end of file
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 5882bdf7d34..0311718c4d3 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -639,6 +639,8 @@ if (BUSES["BBC_1MHZBUS"]~=null) then
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/beebsid.h",
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/cc500.cpp",
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/cc500.h",
+ MAME_DIR .. "src/devices/bus/bbc/1mhzbus/cisco.cpp",
+ MAME_DIR .. "src/devices/bus/bbc/1mhzbus/cisco.h",
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/datacentre.cpp",
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/datacentre.h",
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/emrmidi.cpp",
@@ -3628,6 +3630,8 @@ if (BUSES["COCO"]~=null) then
MAME_DIR .. "src/devices/bus/coco/coco_fdc.h",
MAME_DIR .. "src/devices/bus/coco/coco_gmc.cpp",
MAME_DIR .. "src/devices/bus/coco/coco_gmc.h",
+ MAME_DIR .. "src/devices/bus/coco/coco_ide.cpp",
+ MAME_DIR .. "src/devices/bus/coco/coco_ide.h",
MAME_DIR .. "src/devices/bus/coco/coco_max.cpp",
MAME_DIR .. "src/devices/bus/coco/coco_max.h",
MAME_DIR .. "src/devices/bus/coco/coco_midi.cpp",
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index ae8a1d4218d..47158d65717 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -4711,7 +4711,6 @@ files {
MAME_DIR .. "src/mame/drivers/s3.cpp",
MAME_DIR .. "src/mame/drivers/s4.cpp",
MAME_DIR .. "src/mame/drivers/s6.cpp",
- MAME_DIR .. "src/mame/drivers/s6a.cpp",
MAME_DIR .. "src/mame/drivers/s7.cpp",
MAME_DIR .. "src/mame/drivers/s8.cpp",
MAME_DIR .. "src/mame/drivers/s8a.cpp",
diff --git a/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp b/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp
index 6fa98419abc..0af231e4eb3 100644
--- a/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp
+++ b/src/devices/bus/bbc/1mhzbus/1mhzbus.cpp
@@ -109,6 +109,7 @@ void bbc_1mhzbus_slot_device::jim_w(offs_t offset, uint8_t data)
// slot devices
#include "autoprom.h"
#include "cc500.h"
+#include "cisco.h"
//#include "beebscan.h"
//#include "teletext.h"
#include "datacentre.h"
@@ -144,6 +145,7 @@ void bbc_1mhzbus_devices(device_slot_interface &device)
device.option_add("ide8", BBC_IDE8); /* RetroClinic BBC 8-bit IDE */
//device.option_add("beebscan", BBC_BEEBSCAN); /* Beeb HandScan */
device.option_add("b488", BBC_B488); /* Aries B488 */
+ device.option_add("cisco", BBC_CISCO); /* Cisco Terminal */
//device.option_add("videodig", BBC_VIDEODIG); /* Video Digitiser (RH Electronics) */
device.option_add("emrmidi", BBC_EMRMIDI); /* EMR Midi Interface */
//device.option_add("procyon", BBC_PROCYON); /* CST Procyon IEEE Interface */
diff --git a/src/devices/bus/bbc/1mhzbus/cisco.cpp b/src/devices/bus/bbc/1mhzbus/cisco.cpp
new file mode 100644
index 00000000000..e12efa906d2
--- /dev/null
+++ b/src/devices/bus/bbc/1mhzbus/cisco.cpp
@@ -0,0 +1,267 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Cisco Terminal
+
+ This appears to be an information booth found in exhibitions and tourist
+ information sites. No information or photos of the actual hardware are
+ known. This romset was provided by the family of ex-Cisco developer
+ F.Verrelli.
+
+ This hardware is completely unknown, this device is derived from what the
+ software requires to run.
+
+ Notes:
+ - ROM containing frame data, 1K per page. This set has 64K but the system
+ could handle much more.
+ - RAM used for storing messages, maybe 32K but could be less, and is likely
+ battery-backed.
+ - RTC is unknown, and doesn't seem to match any of those currently emulated.
+ - Configuration data is unknown so has been derived, maybe stored in the RTC
+ device? It determines the mapping of ROM/RAM with their lo/hi addresses.
+ - A keyboard would be attached to the userport to limit the keys available
+ to the user. This is not emulated as we don't know which keys to include.
+
+ Special keys:
+ @ - word search
+ CTRL-C - customized frame, requires password ...
+
+
+**********************************************************************/
+
+
+#include "emu.h"
+#include "cisco.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(BBC_CISCO, bbc_cisco_device, "bbc_cisco", "Cisco Terminal Data Board");
+
+
+//-------------------------------------------------
+// ROM( cisco )
+//-------------------------------------------------
+
+ROM_START(cisco)
+ ROM_REGION(0x10000, "rom", 0)
+ ROM_SYSTEM_BIOS(0, "confex", "Confex '88")
+ ROMX_LOAD("101.bin", 0x0000, 0x4000, CRC(36b42ed2) SHA1(bbbcef59e12da4cddc7a5cebf4c8597b0e76fbac), ROM_BIOS(0))
+ ROMX_LOAD("102.bin", 0x4000, 0x4000, CRC(e323e6b1) SHA1(d3344a964c0a37b4dfbdd0d01c8f16a1b796197b), ROM_BIOS(0))
+ ROMX_LOAD("103.bin", 0x8000, 0x4000, CRC(f8faaf74) SHA1(b11edeaa9eefd75bcfcb5e39bab01b74b7dbc45f), ROM_BIOS(0))
+ ROMX_LOAD("104.bin", 0xc000, 0x4000, CRC(c66ae87c) SHA1(500339258bd5cad363709c774c0cee36a17986cb), ROM_BIOS(0))
+ROM_END
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *bbc_cisco_device::device_rom_region() const
+{
+ return ROM_NAME(cisco);
+}
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void bbc_cisco_device::device_add_mconfig(machine_config &config)
+{
+ // unknown RTC device
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// bbc_cisco_device - constructor
+//-------------------------------------------------
+
+bbc_cisco_device::bbc_cisco_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, BBC_CISCO, tag, owner, clock)
+ , device_bbc_1mhzbus_interface(mconfig, *this)
+ , device_rtc_interface(mconfig , *this)
+ , m_rom(*this, "rom")
+ , m_rom_page(0)
+ , m_rtc_minute(0)
+ , m_rtc_hour(0)
+ , m_rtc_day(0)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void bbc_cisco_device::device_start()
+{
+ m_ram = make_unique_clear<uint8_t[]>(0x8000); // unknown RAM, likely non-volatile, 32K is a guess
+ m_cfg = make_unique_clear<uint8_t[]>(0x80); // unknown RAM, likely non-volatile, maybe with RTC
+
+ // default configuration data, unknown so has been derived from the software
+ static const uint8_t config[0x80] =
+ {
+ 0x00, 0x00, 0x01, // LOFRM frame ROM low address
+ 0xff, 0xff, 0x01, // HIFRM frame ROM high address
+ 0x00, 0x00, 0x00, // LOANSW
+ 0x00, 0x00, 0x00, // HIANSW
+ 0x00, 0x00, 0x00, // LODTBSE
+ 0x00, 0x00, 0x00, // HIDTBSE
+ 0x00, 0x00, 0x02, // message RAM low address
+ 0xff, 0x7f, 0x02, // message RAM high address
+ 0x00, 0x00, 0x00, // not used
+ 0x00, 0x00, 0x00, // not used
+ 0x00, 0x00, 0x00, // not used
+
+ 0x00, 0x08, // NORM page rotation delay
+ 0x00, 0x10, // SLOW page rotation delay
+
+ 0x1c, 0x00, // NFREE pages to rotate when free (32 max)
+ 0x01, 0x00, // FREE main index
+ 0x21, 0x00, // FREE cisco
+ 0x01, 0x00, // FREE
+ 0x26, 0x00, // FREE insurance services
+ 0x01, 0x00, // FREE
+ 0x27, 0x00, // FREE investment opportunities
+ 0x01, 0x00, // FREE
+ 0x28, 0x00, // FREE sport and leisure
+ 0x01, 0x00, // FREE
+ 0x29, 0x00, // FREE food and drink
+ 0x01, 0x00, // FREE
+ 0x2a, 0x00, // FREE marketing services
+ 0x01, 0x00, // FREE
+ 0x2b, 0x00, // FREE management services
+ 0x01, 0x00, // FREE
+ 0x2c, 0x00, // FREE office services
+ 0x01, 0x00, // FREE
+ 0x2d, 0x00, // FREE places to visit
+ 0x01, 0x00, // FREE
+ 0x2e, 0x00, // FREE publications
+ 0x01, 0x00, // FREE
+ 0x2f, 0x00, // FREE professional services
+ 0x01, 0x00, // FREE
+ 0x30, 0x00, // FREE professional bodies
+ 0x01, 0x00, // FREE
+ 0x31, 0x00, // FREE security
+ 0x01, 0x00, // FREE
+ 0x32, 0x00, // FREE travel
+ 0x00, 0x00, // FREE
+ 0x00, 0x00, // FREE
+ 0x00, 0x00, // FREE
+ 0x00, 0x00 // FREE
+ };
+ memcpy(m_cfg.get(), config, 0x80);
+
+ save_pointer(NAME(m_ram), 0x8000);
+ save_pointer(NAME(m_cfg), 0x80);
+ save_item(NAME(m_rom_page));
+}
+
+
+void bbc_cisco_device::rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second)
+{
+ m_rtc_minute = convert_to_bcd(minute);
+ m_rtc_hour = convert_to_bcd(hour);
+ m_rtc_day = day;
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+uint8_t bbc_cisco_device::fred_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ switch (offset)
+ {
+ case 0xe8: // unknown RTC
+ data = BIT(m_rtc_minute, 0, 4);
+ break;
+ case 0xe9:
+ data = BIT(m_rtc_minute, 4, 4);
+ break;
+ case 0xea:
+ data = BIT(m_rtc_hour, 0, 4);
+ break;
+ case 0xeb:
+ data = BIT(m_rtc_hour, 4, 4);
+ break;
+ case 0xfa:
+ data = m_rtc_day;
+ break;
+ case 0xfc: // expects 0x55
+ data = 0x55;
+ break;
+ default:
+ logerror("fred_r: unknown %02x = %02x\n", offset, data);
+ break;
+ }
+
+ return data;
+}
+
+void bbc_cisco_device::fred_w(offs_t offset, uint8_t data)
+{
+ switch (offset)
+ {
+ case 0xfc: // always writes 0x55
+ break;
+ case 0xfe: // JIM page MSB
+ m_rom_page = (m_rom_page & 0x00ff) | (data << 8);
+ break;
+ case 0xff: // JIM page LSB
+ m_rom_page = (m_rom_page & 0xff00) | (data << 0);
+ break;
+ default:
+ logerror("fred_w: unknown %02x = %02x\n", offset, data);
+ break;
+ }
+}
+
+
+uint8_t bbc_cisco_device::jim_r(offs_t offset)
+{
+ uint8_t data = 0xff;
+
+ switch (m_rom_page >> 8)
+ {
+ case 0:
+ data = m_cfg[offset & 0x7f];
+ break;
+ case 1:
+ data = m_rom[((m_rom_page << 8) & 0xff00) | offset];
+ break;
+ case 2:
+ data = m_ram[((m_rom_page << 8) & 0xff00) | offset];
+ break;
+ default:
+ logerror("jim_r: %d %06x = %02x\n", m_rom_page >> 8, (m_rom_page << 8) | offset, data);
+ break;
+ }
+
+ return data;
+}
+
+void bbc_cisco_device::jim_w(offs_t offset, uint8_t data)
+{
+ switch (m_rom_page >> 8)
+ {
+ case 0:
+ m_cfg[offset & 0x7f] = data;
+ break;
+ case 2:
+ m_ram[((m_rom_page << 8) & 0xff00) | offset] = data;
+ break;
+ default:
+ logerror("jim_w: %d %06x = %02x\n", m_rom_page >> 8, (m_rom_page << 8) | offset, data);
+ break;
+ }
+}
diff --git a/src/devices/bus/bbc/1mhzbus/cisco.h b/src/devices/bus/bbc/1mhzbus/cisco.h
new file mode 100644
index 00000000000..fdbe528db98
--- /dev/null
+++ b/src/devices/bus/bbc/1mhzbus/cisco.h
@@ -0,0 +1,60 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Cisco Terminal
+
+**********************************************************************/
+
+
+#ifndef MAME_BUS_BBC_1MHZBUS_CISCO_H
+#define MAME_BUS_BBC_1MHZBUS_CISCO_H
+
+#include "1mhzbus.h"
+#include "dirtc.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class bbc_cisco_device
+ : public device_t
+ , public device_bbc_1mhzbus_interface
+ , public device_rtc_interface
+{
+public:
+ // construction/destruction
+ bbc_cisco_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual uint8_t fred_r(offs_t offset) override;
+ virtual void fred_w(offs_t offset, uint8_t data) override;
+ virtual uint8_t jim_r(offs_t offset) override;
+ virtual void jim_w(offs_t offset, uint8_t data) override;
+
+private:
+ required_region_ptr<uint8_t> m_rom;
+ std::unique_ptr<uint8_t[]> m_ram;
+ std::unique_ptr<uint8_t[]> m_cfg;
+
+ uint16_t m_rom_page;
+ uint8_t m_rtc_minute;
+ uint8_t m_rtc_hour;
+ uint8_t m_rtc_day;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(BBC_CISCO, bbc_cisco_device);
+
+
+#endif /* MAME_BUS_BBC_1MHZBUS_CISCO_H */
diff --git a/src/devices/bus/bbc/internal/we32kram.cpp b/src/devices/bus/bbc/internal/we32kram.cpp
index 72391f0e915..4e0e084e655 100644
--- a/src/devices/bus/bbc/internal/we32kram.cpp
+++ b/src/devices/bus/bbc/internal/we32kram.cpp
@@ -32,8 +32,10 @@ ROM_START(we32kram)
ROMX_LOAD("we32kram_v2.20.rom", 0x0000, 0x2000, CRC(bc7124e0) SHA1(7f8536576de449916cd77488e94775ed438c5c6c), ROM_BIOS(1))
ROM_SYSTEM_BIOS(2, "200", "v2.00")
ROMX_LOAD("we32kram_v2.00.rom", 0x0000, 0x2000, CRC(1eff9b23) SHA1(98a3084b20c92427c2e9def58ade96f42659e20a), ROM_BIOS(2))
- ROM_SYSTEM_BIOS(3, "100", "v1.00")
- ROMX_LOAD("we32kram_v1.00.rom", 0x0000, 0x2000, CRC(7962b5db) SHA1(1b59a3354cfc704ad8aa60b0ed16e4cd2d815031), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(3, "106", "v1.06")
+ ROMX_LOAD("we32kram_v1.06.rom", 0x0000, 0x2000, CRC(b9749390) SHA1(210f6162d634fca8d75197d4f64d9b50abc01e1e), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(4, "100", "v1.00")
+ ROMX_LOAD("we32kram_v1.00.rom", 0x0000, 0x2000, CRC(7962b5db) SHA1(1b59a3354cfc704ad8aa60b0ed16e4cd2d815031), ROM_BIOS(4))
ROM_END
//-------------------------------------------------
diff --git a/src/devices/bus/bbc/tube/tube.cpp b/src/devices/bus/bbc/tube/tube.cpp
index 371326cf487..505b7a25030 100644
--- a/src/devices/bus/bbc/tube/tube.cpp
+++ b/src/devices/bus/bbc/tube/tube.cpp
@@ -112,6 +112,8 @@ void bbc_tube_slot_device::host_w(offs_t offset, uint8_t data)
void bbc_tube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
+ device.option_add("6502p", BBC_TUBE_6502P); /* Acorn 6502 2nd processor (pre-production) */
+ device.option_add("6502e", BBC_TUBE_6502E); /* Acorn Extended 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
device.option_add("z80w", BBC_TUBE_Z80W); /* Acorn ANC04 Z80 2nd processor (Winchester) */
device.option_add("16032", BBC_TUBE_16032); /* Acorn 16032 2nd processor */
@@ -146,6 +148,7 @@ void bbc_tube_devices(device_slot_interface &device)
void bbc_extube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
+ device.option_add("6502e", BBC_TUBE_6502E); /* Acorn Extended 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
device.option_add("z80w", BBC_TUBE_Z80W); /* Acorn ANC04 Z80 2nd processor (Winchester) */
device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
@@ -187,6 +190,7 @@ void bbc_intube_devices(device_slot_interface &device)
void electron_tube_devices(device_slot_interface &device)
{
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
+ device.option_add("6502e", BBC_TUBE_6502E); /* Acorn Extended 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
device.option_add("32016l", BBC_TUBE_32016L); /* Acorn Large 32016 2nd processor */
diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp
index 5571975a9f2..f35de49c1ac 100644
--- a/src/devices/bus/bbc/tube/tube_6502.cpp
+++ b/src/devices/bus/bbc/tube/tube_6502.cpp
@@ -6,6 +6,18 @@
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC01_65022ndproc.html
+ Acorn 6502 2nd Processor (pre-production)
+ Pre-production Iss.C and Iss.F boards have been seen running earlier versions
+ of the Tube OS. The boards are different in that they map the Tube ULA at
+ &FF78-&FF7F instead of the usual &FEF8-&FEFF. They also require an earlier
+ version of the Tube Host which can be found in NFS 3.34, the usual DNFS 1.20
+ will hang at the Tube startup banner.
+
+ Acorn Extended 6502 2nd Processor (non-commercial)
+ Used internally at Acorn, it extends the addressing of indexed indirect Y instructions
+ to address 256K RAM. Only two applications were created to make use of this, which
+ were turboMASM and turboBASIC.
+
Acorn ADC06 65C102 Co-processor
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ADC06_65C102CoPro.html
@@ -23,6 +35,8 @@
//**************************************************************************
DEFINE_DEVICE_TYPE(BBC_TUBE_6502, bbc_tube_6502_device, "bbc_tube_6502", "Acorn 6502 2nd Processor")
+DEFINE_DEVICE_TYPE(BBC_TUBE_6502P, bbc_tube_6502p_device, "bbc_tube_6502p", "Acorn 6502 2nd Processor (pre-production)")
+DEFINE_DEVICE_TYPE(BBC_TUBE_6502E, bbc_tube_6502e_device, "bbc_tube_6502e", "Acorn Extended 6502 2nd Processor")
DEFINE_DEVICE_TYPE(BBC_TUBE_65C102, bbc_tube_65c102_device, "bbc_tube_65c102", "Acorn 65C102 Co-Processor")
@@ -32,19 +46,38 @@ DEFINE_DEVICE_TYPE(BBC_TUBE_65C102, bbc_tube_65c102_device, "bbc_tube_65c102",
void bbc_tube_6502_device::tube_6502_mem(address_map &map)
{
- map(0x0000, 0xffff).m(m_bankdev, FUNC(address_map_bank_device::amap8));
- map(0xfef0, 0xfeff).rw(FUNC(bbc_tube_6502_device::tube_r), FUNC(bbc_tube_6502_device::tube_w));
+ map(0x0000, 0xffff).view(m_view);
+ // ROM enabled
+ m_view[0](0x0000, 0xffff).ram().share("ram");
+ m_view[0](0xf000, 0xffff).rom().region("rom", 0);
+ // ROM disabled
+ m_view[1](0x0000, 0xffff).ram().share("ram");
+ map(0xfef8, 0xfeff).rw(FUNC(bbc_tube_6502_device::tube_r), FUNC(bbc_tube_6502_device::tube_w));
+}
+
+void bbc_tube_6502p_device::tube_6502p_mem(address_map &map)
+{
+ map(0x0000, 0xffff).view(m_view);
+ // ROM enabled
+ m_view[0](0x0000, 0xffff).ram().share("ram");
+ m_view[0](0xf000, 0xffff).rom().region("rom", 0);
+ // ROM disabled
+ m_view[1](0x0000, 0xffff).ram().share("ram");
+ map(0xff78, 0xff7f).rw(FUNC(bbc_tube_6502p_device::tube_r), FUNC(bbc_tube_6502p_device::tube_w));
}
-void bbc_tube_6502_device::tube_6502_bank(address_map &map)
+void bbc_tube_6502e_device::tube_6502e_mem(address_map &map)
{
+ map(0x0000, 0xffff).view(m_view);
// ROM enabled
- map(0x00000, 0x0ffff).ram().share("ram");
- map(0x0f000, 0x0ffff).rom().region("rom", 0);
+ m_view[0](0x0000, 0xffff).rw(FUNC(bbc_tube_6502e_device::ram_r), FUNC(bbc_tube_6502e_device::ram_w));
+ m_view[0](0xf000, 0xffff).rom().region("rom", 0);
// ROM disabled
- map(0x10000, 0x1ffff).ram().share("ram");
+ m_view[1](0x0000, 0xffff).rw(FUNC(bbc_tube_6502e_device::ram_r), FUNC(bbc_tube_6502e_device::ram_w));
+ map(0xfef8, 0xfeff).rw(FUNC(bbc_tube_6502e_device::tube_r), FUNC(bbc_tube_6502e_device::tube_w));
}
+
//-------------------------------------------------
// ROM( tube_6502 )
//-------------------------------------------------
@@ -53,53 +86,80 @@ ROM_START( tube_6502 )
ROM_REGION(0x1000, "rom", 0)
ROM_DEFAULT_BIOS("110")
ROM_SYSTEM_BIOS(0, "110", "Tube 1.10")
- ROMX_LOAD("6502tube.rom", 0x0000, 0x1000, CRC(98b5fe42) SHA1(338269d03cf6bfa28e09d1651c273ea53394323b), ROM_BIOS(0))
+ ROMX_LOAD("6502tube_110.rom", 0x0000, 0x1000, CRC(98b5fe42) SHA1(338269d03cf6bfa28e09d1651c273ea53394323b), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "121", "Tube 1.21 (ReCo6502)")
ROMX_LOAD("reco6502tube.rom", 0x0000, 0x1000, CRC(75b2a466) SHA1(9ecef24de58a48c3fbe01b12888c3f6a5d24f57f), ROM_BIOS(1))
ROM_END
+ROM_START( tube_6502p )
+ ROM_REGION(0x1000, "rom", 0)
+ ROM_DEFAULT_BIOS("005")
+ ROM_SYSTEM_BIOS(0, "005", "Tube 0.05") // Iss.F
+ ROMX_LOAD("6502tube_005.rom", 0x0000, 0x1000, CRC(0d4cd088) SHA1(f68a74f2529e2719193f81032af298e606792ce8), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "004", "Tube 0.04")
+ ROMX_LOAD("6502tube_004.rom", 0x0000, 0x1000, CRC(64698ffa) SHA1(b7d47ac65291a7d7bd03b6b82ee08cff291c8609), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "001", "Tube 0.01") // Iss.C
+ ROMX_LOAD("6502tube_001.rom", 0x0000, 0x1000, CRC(83bee05d) SHA1(4a00d4d3deec0ab43dc6647ac591bd71f4b24a51), ROM_BIOS(2))
+ROM_END
+
+ROM_START( tube_6502e )
+ ROM_REGION(0x1000, "rom", 0)
+ ROM_DEFAULT_BIOS("120")
+ ROM_SYSTEM_BIOS(0, "120", "Tube 1.20") // built from source, not an actual dump
+ ROMX_LOAD("6502tube256_120.rom", 0x0000, 0x1000, BAD_DUMP CRC(967ee712) SHA1(ebca4bb471cd18608882668edda811ed88b4cee5), ROM_BIOS(0))
+ROM_END
+
ROM_START( tube_65c102 )
ROM_REGION(0x1000, "rom", 0)
ROM_DEFAULT_BIOS("110")
ROM_SYSTEM_BIOS(0, "110", "Tube 1.10")
- ROMX_LOAD("65c102_boot_110.rom", 0x0000, 0x1000, CRC(ad5b70cc) SHA1(0ac9a1c70e55a79e2c81e102afae1d016af229fa), ROM_BIOS(0)) // 2201,243-02
- ROM_SYSTEM_BIOS(1, "121", "Tube 1.21 (ReCo6502)")
- ROMX_LOAD("reco6502tube.rom", 0x0000, 0x1000, CRC(75b2a466) SHA1(9ecef24de58a48c3fbe01b12888c3f6a5d24f57f), ROM_BIOS(1))
+ ROMX_LOAD("65c102_boot_110.rom", 0x0000, 0x1000, CRC(ad5b70cc) SHA1(0ac9a1c70e55a79e2c81e102afae1d016af229fa), ROM_BIOS(0)) // 2201,243-01
+ ROM_SYSTEM_BIOS(1, "120", "Tube 1.20")
+ ROMX_LOAD("65c102_boot_120.rom", 0x0000, 0x1000, CRC(1462f0f7) SHA1(7dc03d3c4862159baefebf1662de7e05987ddf7b), ROM_BIOS(1)) // 2201,243-02
+ ROM_SYSTEM_BIOS(2, "121", "Tube 1.21 (ReCo6502)")
+ ROMX_LOAD("reco6502tube.rom", 0x0000, 0x1000, CRC(75b2a466) SHA1(9ecef24de58a48c3fbe01b12888c3f6a5d24f57f), ROM_BIOS(2))
ROM_END
+
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-void bbc_tube_6502_device::add_common_devices(machine_config &config)
+void bbc_tube_6502_device::device_add_mconfig(machine_config &config)
{
- ADDRESS_MAP_BANK(config, m_bankdev).set_map(&bbc_tube_6502_device::tube_6502_bank).set_options(ENDIANNESS_LITTLE, 8, 17, 0x10000);
+ M65C02(config, m_maincpu, 12_MHz_XTAL / 4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502_device::tube_6502_mem);
TUBE(config, m_ula);
m_ula->pnmi_handler().set_inputline(m_maincpu, M65C02_NMI_LINE);
m_ula->pirq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
- /* internal ram */
RAM(config, m_ram).set_default_size("64K").set_default_value(0);
- /* software lists */
SOFTWARE_LIST(config, "flop_ls_6502").set_original("bbc_flop_6502");
}
-void bbc_tube_6502_device::device_add_mconfig(machine_config &config)
+void bbc_tube_6502p_device::device_add_mconfig(machine_config &config)
{
- M65C02(config, m_maincpu, 12_MHz_XTAL / 4);
- m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502_device::tube_6502_mem);
+ bbc_tube_6502_device::device_add_mconfig(config);
- add_common_devices(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502p_device::tube_6502p_mem);
+}
+
+void bbc_tube_6502e_device::device_add_mconfig(machine_config &config)
+{
+ bbc_tube_6502_device::device_add_mconfig(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502e_device::tube_6502e_mem);
+
+ m_ram->set_default_size("256K").set_default_value(0);
}
void bbc_tube_65c102_device::device_add_mconfig(machine_config &config)
{
- M65C02(config, m_maincpu, 16_MHz_XTAL / 4);
- m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_65c102_device::tube_6502_mem);
+ bbc_tube_6502_device::device_add_mconfig(config);
- add_common_devices(config);
+ m_maincpu->set_clock(16_MHz_XTAL / 4);
}
//-------------------------------------------------
@@ -111,6 +171,16 @@ const tiny_rom_entry *bbc_tube_6502_device::device_rom_region() const
return ROM_NAME( tube_6502 );
}
+const tiny_rom_entry *bbc_tube_6502p_device::device_rom_region() const
+{
+ return ROM_NAME( tube_6502p );
+}
+
+const tiny_rom_entry *bbc_tube_6502e_device::device_rom_region() const
+{
+ return ROM_NAME( tube_6502e );
+}
+
const tiny_rom_entry *bbc_tube_65c102_device::device_rom_region() const
{
return ROM_NAME( tube_65c102 );
@@ -128,7 +198,7 @@ bbc_tube_6502_device::bbc_tube_6502_device(const machine_config &mconfig, device
: device_t(mconfig, type, tag, owner, clock)
, device_bbc_tube_interface(mconfig, *this)
, m_maincpu(*this, "maincpu")
- , m_bankdev(*this, "bankdev")
+ , m_view(*this, "view")
, m_ula(*this, "ula")
, m_ram(*this, "ram")
, m_rom(*this, "rom")
@@ -140,6 +210,19 @@ bbc_tube_6502_device::bbc_tube_6502_device(const machine_config &mconfig, const
{
}
+bbc_tube_6502p_device::bbc_tube_6502p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_tube_6502_device(mconfig, BBC_TUBE_6502P, tag, owner, clock)
+{
+}
+
+bbc_tube_6502e_device::bbc_tube_6502e_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_tube_6502_device(mconfig, BBC_TUBE_6502E, tag, owner, clock)
+ , m_opcode_ind_y(false)
+ , m_page(0)
+ , m_cycles(0)
+{
+}
+
bbc_tube_65c102_device::bbc_tube_65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: bbc_tube_6502_device(mconfig, BBC_TUBE_65C102, tag, owner, clock)
{
@@ -153,13 +236,20 @@ void bbc_tube_6502_device::device_start()
{
}
+void bbc_tube_6502e_device::device_start()
+{
+ save_item(NAME(m_opcode_ind_y));
+ save_item(NAME(m_page));
+ save_item(NAME(m_cycles));
+}
+
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void bbc_tube_6502_device::device_reset()
{
- m_bankdev->set_bank(0);
+ m_view.select(0);
}
@@ -182,7 +272,7 @@ uint8_t bbc_tube_6502_device::tube_r(offs_t offset)
{
// Disable ROM on first access
if (!machine().side_effects_disabled())
- m_bankdev->set_bank(1);
+ m_view.select(1);
return m_ula->parasite_r(offset);
}
@@ -191,3 +281,50 @@ void bbc_tube_6502_device::tube_w(offs_t offset, uint8_t data)
{
m_ula->parasite_w(offset, data);
}
+
+
+uint8_t bbc_tube_6502e_device::ram_r(offs_t offset)
+{
+ uint8_t data = m_ram->pointer()[offset];
+
+ if (!machine().side_effects_disabled())
+ {
+ /* opcode fetch */
+ if (m_maincpu->get_sync())
+ {
+ /* indexed indirect Y addressing */
+ m_opcode_ind_y = ((data & 0x1f) == 0x11 || (data & 0x1f) == 0x12) ? true : false;
+
+ m_cycles = m_maincpu->total_cycles();
+ }
+
+ if (m_opcode_ind_y)
+ {
+ if (m_maincpu->total_cycles() - m_cycles == 1)
+ {
+ /* fetch extra byte from &3xx where xx is low byte of ZP address */
+ m_page = m_ram->pointer()[0x301 + data] & 0x03;
+ }
+ else if (m_maincpu->total_cycles() - m_cycles > 3)
+ {
+ /* read data from extended address */
+ data = m_ram->pointer()[m_page << 16 | offset];
+ }
+ }
+ }
+
+ return data;
+}
+
+void bbc_tube_6502e_device::ram_w(offs_t offset, uint8_t data)
+{
+ if (m_opcode_ind_y)
+ {
+ /* write data to extended address */
+ m_ram->pointer()[m_page << 16 | offset] = data;
+ }
+ else
+ {
+ m_ram->pointer()[offset] = data;
+ }
+}
diff --git a/src/devices/bus/bbc/tube/tube_6502.h b/src/devices/bus/bbc/tube/tube_6502.h
index abb907ef3bd..d6c2f6d0eec 100644
--- a/src/devices/bus/bbc/tube/tube_6502.h
+++ b/src/devices/bus/bbc/tube/tube_6502.h
@@ -18,7 +18,6 @@
#include "tube.h"
#include "cpu/m6502/m65c02.h"
-#include "machine/bankdev.h"
#include "machine/ram.h"
#include "machine/tube.h"
@@ -47,25 +46,62 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- void tube_6502_bank(address_map &map);
void tube_6502_mem(address_map &map);
- void add_common_devices(machine_config &config);
-
virtual uint8_t host_r(offs_t offset) override;
virtual void host_w(offs_t offset, uint8_t data) override;
virtual uint8_t tube_r(offs_t offset);
virtual void tube_w(offs_t offset, uint8_t data);
- required_device<cpu_device> m_maincpu;
- required_device<address_map_bank_device> m_bankdev;
+ required_device<m65c02_device> m_maincpu;
+ memory_view m_view;
required_device<tube_device> m_ula;
required_device<ram_device> m_ram;
required_memory_region m_rom;
};
+class bbc_tube_6502p_device : public bbc_tube_6502_device
+{
+public:
+ bbc_tube_6502p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry* device_rom_region() const override;
+
+private:
+ void tube_6502p_mem(address_map& map);
+};
+
+
+class bbc_tube_6502e_device : public bbc_tube_6502_device
+{
+public:
+ bbc_tube_6502e_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void tube_6502e_mem(address_map &map);
+
+ uint8_t ram_r(offs_t offset);
+ void ram_w(offs_t offset, uint8_t data);
+
+ bool m_opcode_ind_y;
+ uint8_t m_page;
+ uint64_t m_cycles;
+};
+
+
class bbc_tube_65c102_device : public bbc_tube_6502_device
{
public:
@@ -80,6 +116,8 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(BBC_TUBE_6502, bbc_tube_6502_device)
+DECLARE_DEVICE_TYPE(BBC_TUBE_6502P, bbc_tube_6502p_device)
+DECLARE_DEVICE_TYPE(BBC_TUBE_6502E, bbc_tube_6502e_device)
DECLARE_DEVICE_TYPE(BBC_TUBE_65C102, bbc_tube_65c102_device)
diff --git a/src/devices/bus/coco/coco_ide.cpp b/src/devices/bus/coco/coco_ide.cpp
new file mode 100644
index 00000000000..0d261e2be3b
--- /dev/null
+++ b/src/devices/bus/coco/coco_ide.cpp
@@ -0,0 +1,249 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Glenside IDE Adapter
+
+***************************************************************************/
+
+#include "emu.h"
+#include "coco_ide.h"
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(COCO_IDE, coco_ide_device, "coco_ide", "Glenside IDE Adapter")
+
+
+//-------------------------------------------------
+// INPUT_PORTS( ide )
+//-------------------------------------------------
+
+INPUT_PORTS_START(ide)
+ PORT_START("JUMPERS")
+ PORT_CONFNAME(0x01, 0x00, "J2 Base Address")
+ PORT_CONFSETTING(0x00, "$FF5x")
+ PORT_CONFSETTING(0x01, "$FF7x")
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor coco_ide_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(ide);
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// coco_ide_device - constructor
+//-------------------------------------------------
+
+coco_ide_device::coco_ide_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, COCO_IDE, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this )
+ , m_ata(*this, "ata")
+ , m_slot(*this, "slot")
+ , m_jumpers(*this, "JUMPERS")
+ , m_latch(0)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void coco_ide_device::device_start()
+{
+ save_item(NAME(m_latch));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void coco_ide_device::device_reset()
+{
+ if (m_jumpers->read() == 0x01)
+ install_readwrite_handler(0xff70, 0xff78, read8sm_delegate(*this, FUNC(coco_ide_device::ide_read)), write8sm_delegate(*this, FUNC(coco_ide_device::ide_write)));
+}
+
+
+//-------------------------------------------------
+// coco_cart
+//-------------------------------------------------
+
+static void coco_cart(device_slot_interface &device)
+{
+ coco_cart_add_basic_devices(device);
+ coco_cart_add_fdcs(device);
+}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void coco_ide_device::device_add_mconfig(machine_config &config)
+{
+ ATA_INTERFACE(config, m_ata).options(ata_devices, "hdd", nullptr, false);
+
+ COCOCART_SLOT(config, m_slot, DERIVED_CLOCK(1, 1), coco_cart, "pak");
+ m_slot->cart_callback().set([this](int state) { set_line_value(line::CART, state); });
+ m_slot->nmi_callback().set([this](int state) { set_line_value(line::NMI, state); });
+ m_slot->halt_callback().set([this](int state) { set_line_value(line::HALT, state); });
+}
+
+
+//-------------------------------------------------
+// ide_read
+//-------------------------------------------------
+
+u8 coco_ide_device::ide_read(offs_t offset)
+{
+ u8 result = 0x00;
+
+ switch (offset)
+ {
+ case 0:
+ {
+ u16 temp = m_ata->cs0_r(offset);
+ m_latch = temp >> 8;
+ result = temp & 0xff;
+ break;
+ }
+ case 1: case 2: case 3: case 4: case 5: case 6: case 7:
+ result = m_ata->cs0_r(offset, 0xff);
+ break;
+
+ case 8:
+ result = m_latch;
+ break;
+
+ default:
+ logerror("ide_read: %02x %04x\n", offset, result);
+ break;
+ }
+
+ return result;
+}
+
+
+//-------------------------------------------------
+// ide_write
+//-------------------------------------------------
+
+void coco_ide_device::ide_write(offs_t offset, u8 data)
+{
+ switch (offset)
+ {
+ case 0:
+ {
+ u16 temp = (m_latch << 8) | data;
+ m_ata->cs0_w(offset, temp);
+ break;
+ }
+ case 1: case 2: case 3: case 4: case 5: case 6: case 7:
+ m_ata->cs0_w(offset, data, 0xff);
+ break;
+
+ case 8:
+ m_latch = data;
+ break;
+
+ default:
+ logerror("ide_write: %02x %04x\n", offset, data);
+ break;
+ }
+}
+
+
+//-------------------------------------------------
+// set_sound_enable
+//-------------------------------------------------
+
+void coco_ide_device::set_sound_enable(bool sound_enable)
+{
+ m_slot->set_line_value(line::SOUND_ENABLE, sound_enable ? line_value::ASSERT : line_value::CLEAR);
+}
+
+
+//-------------------------------------------------
+// get_cart_base
+//-------------------------------------------------
+
+u8 *coco_ide_device::get_cart_base()
+{
+ return m_slot->get_cart_base();
+}
+
+
+//-------------------------------------------------
+// get_cart_size
+//-------------------------------------------------
+
+u32 coco_ide_device::get_cart_size()
+{
+ return m_slot->get_cart_size();
+}
+
+
+//-------------------------------------------------
+// cts_read
+//-------------------------------------------------
+
+u8 coco_ide_device::cts_read(offs_t offset)
+{
+ return m_slot->cts_read(offset);
+}
+
+//-------------------------------------------------
+// cts_write
+//-------------------------------------------------
+
+void coco_ide_device::cts_write(offs_t offset, u8 data)
+{
+ m_slot->cts_write(offset, data);
+}
+
+
+//-------------------------------------------------
+// scs_read
+//-------------------------------------------------
+
+u8 coco_ide_device::scs_read(offs_t offset)
+{
+ if (m_jumpers->read() == 0x00 && (offset & 0x10))
+ return ide_read(offset & 0x0f);
+ else
+ return m_slot->scs_read(offset);
+}
+
+//-------------------------------------------------
+// scs_write
+//-------------------------------------------------
+
+void coco_ide_device::scs_write(offs_t offset, u8 data)
+{
+ if (m_jumpers->read() == 0x00 && (offset & 0x10))
+ ide_write(offset & 0x0f, data);
+ else
+ m_slot->scs_write(offset, data);
+}
+
+
+//-------------------------------------------------
+// cartridge_space
+//-------------------------------------------------
+
+address_space &coco_ide_device::cartridge_space()
+{
+ return device_cococart_interface::cartridge_space();
+}
diff --git a/src/devices/bus/coco/coco_ide.h b/src/devices/bus/coco/coco_ide.h
new file mode 100644
index 00000000000..465a4b0b8f6
--- /dev/null
+++ b/src/devices/bus/coco/coco_ide.h
@@ -0,0 +1,62 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_COCO_COCO_IDE_H
+#define MAME_BUS_COCO_COCO_IDE_H
+
+#pragma once
+
+#include "cococart.h"
+#include "bus/ata/ataintf.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> coco_ide_device
+
+class coco_ide_device :
+ public device_t,
+ public device_cococart_interface,
+ public device_cococart_host_interface
+{
+public:
+ // construction/destruction
+ coco_ide_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ virtual u8 cts_read(offs_t offset) override;
+ virtual void cts_write(offs_t offset, u8 data) override;
+ virtual u8 scs_read(offs_t offset) override;
+ virtual void scs_write(offs_t offset, u8 data) override;
+ virtual void set_sound_enable(bool sound_enable) override;
+
+ virtual u8 *get_cart_base() override;
+ virtual u32 get_cart_size() override;
+
+ virtual address_space &cartridge_space() override;
+
+private:
+ required_device<ata_interface_device> m_ata;
+ required_device<cococart_slot_device> m_slot;
+ required_ioport m_jumpers;
+
+ u8 ide_read(offs_t offset);
+ void ide_write(offs_t offset, u8 data);
+
+ u8 m_latch;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(COCO_IDE, coco_ide_device)
+
+#endif // MAME_BUS_COCO_COCO_IDE_H
diff --git a/src/devices/bus/coco/cococart.cpp b/src/devices/bus/coco/cococart.cpp
index d698d0dd87f..2dbf679f363 100644
--- a/src/devices/bus/coco/cococart.cpp
+++ b/src/devices/bus/coco/cococart.cpp
@@ -44,6 +44,7 @@
#include "coco_dcmodem.h"
#include "coco_fdc.h"
#include "coco_gmc.h"
+#include "coco_ide.h"
#include "coco_max.h"
#include "coco_midi.h"
#include "coco_multi.h"
@@ -834,6 +835,7 @@ void coco_cart_add_basic_devices(device_slot_interface &device)
device.option_add("ccpsg", COCO_PSG);
device.option_add("dcmodem", COCO_DCMODEM);
device.option_add("gmc", COCO_PAK_GMC);
+ device.option_add("ide", COCO_IDE);
device.option_add("max", COCO_PAK_MAX);
device.option_add("midi", COCO_MIDI);
device.option_add("orch90", COCO_ORCH90);
diff --git a/src/devices/cpu/i8008/i8008.cpp b/src/devices/cpu/i8008/i8008.cpp
index 0bd6ce04176..b17b02e1b26 100644
--- a/src/devices/cpu/i8008/i8008.cpp
+++ b/src/devices/cpu/i8008/i8008.cpp
@@ -37,7 +37,7 @@ DEFINE_DEVICE_TYPE(I8008, i8008_device, "i8008", "Intel 8008")
i8008_device::i8008_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: cpu_device(mconfig, I8008, tag, owner, clock)
, m_program_config("program", ENDIANNESS_LITTLE, 8, 14)
- , m_io_config("io", ENDIANNESS_LITTLE, 8, 5)
+ , m_io_config("io", ENDIANNESS_LITTLE, 8, 16)
{
// set our instruction counter
set_icountptr(m_icount);
@@ -509,11 +509,11 @@ inline void i8008_device::execute_one(int opcode)
if (((opcode>>4)&3)==0) {
// INP
m_icount -= 8;
- m_A = m_io.read_byte((opcode >> 1) & 0x1f);
+ m_A = m_io.read_byte((m_A << 8) + ((opcode >> 1) & 0x1f));
} else {
// OUT
m_icount -= 6;
- m_io.write_byte((opcode >> 1) & 0x1f, m_A);
+ m_io.write_byte((m_A << 8) + ((opcode >> 1) & 0x1f), m_A);
}
break;
}
diff --git a/src/devices/cpu/i8008/i8008.h b/src/devices/cpu/i8008/i8008.h
index b3183a0640c..5b7882f7958 100644
--- a/src/devices/cpu/i8008/i8008.h
+++ b/src/devices/cpu/i8008/i8008.h
@@ -83,7 +83,7 @@ protected:
memory_access<14, 0, 0, ENDIANNESS_LITTLE>::cache m_cache;
memory_access<14, 0, 0, ENDIANNESS_LITTLE>::specific m_program;
- memory_access< 5, 0, 0, ENDIANNESS_LITTLE>::specific m_io;
+ memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_io;
};
// device type definition
diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt
index 772d70cb807..0fcc26e5eda 100644
--- a/src/mame/arcade.flt
+++ b/src/mame/arcade.flt
@@ -1098,7 +1098,6 @@ s11c.cpp
s3.cpp
s4.cpp
s6.cpp
-s6a.cpp
s7.cpp
s8.cpp
s8a.cpp
diff --git a/src/mame/drivers/alvg.cpp b/src/mame/drivers/alvg.cpp
index 3ac441132c3..5933305ab2c 100644
--- a/src/mame/drivers/alvg.cpp
+++ b/src/mame/drivers/alvg.cpp
@@ -1,8 +1,48 @@
// license:BSD-3-Clause
// copyright-holders:Miodrag Milanovic
-
+/******************************************************************************************************
+PINBALL
+Alvin G pinball machines.
+
+Undumped PAL16L8 (U29) on sound card.
+
+Pinball games:
+- Al's Garage Band Goes on a World Tour
+- Dual-Pool (unreleased)
+- Monte Carlo
+- Mystery Castle
+- Pistol Poker
+- Punchy the Clown
+- Slam 'n Jam (unreleased)
+- Tropical Isle
+Other games:
+- A-MAZE-ING Baseball (redemption)
+- A G Football (head to head)
+- A G Soccer-ball (head to head)
+- Dinosaur Eggs (redemption)
+- The Death Dealing Adventure of Maxx Badazz Champion Kickboxer (unreleased)
+- USA Football (redemption)
+- USA Football (head to head)
+
+Status:
+- Skeletons
+
+ToDo:
+- CPU sound command to sound card
+- Add bsmt-based sound card
+- Display
+- Mechanical sounds
+- Everything
+
+****************************************************************************************************/
#include "emu.h"
#include "cpu/m6502/m65c02.h"
+#include "cpu/m6809/m6809.h"
+#include "machine/6522via.h"
+#include "machine/i8255.h"
+#include "sound/okim6295.h"
+#include "sound/ymopl.h"
+#include "speaker.h"
namespace {
@@ -11,49 +51,169 @@ class alvg_state : public driver_device
{
public:
alvg_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_audiocpu(*this, "audiocpu")
+ , m_oki(*this, "oki")
+ , m_ppi0(*this, "ppi0")
+ , m_ppi1(*this, "ppi1")
+ , m_ppi2(*this, "ppi2")
+ , m_via(*this, "via")
+ , m_via0(*this, "via0")
+ , m_via1(*this, "via1")
+ , m_io_outputs(*this, "out%d", 0U)
{ }
void alvg(machine_config &config);
- void init_alvg();
-
-protected:
- // driver_device overrides
- virtual void machine_reset() override;
-
private:
- void alvg_map(address_map &map);
-
- // devices
+ void main_map(address_map &map);
+ void audio_map(address_map &map);
+ void machine_start() override;
+ void machine_reset() override;
+ void display_w(offs_t, u8);
+ void ppi0_pa_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[i] = BIT(data, i); }
+ void ppi0_pb_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[8U+i] = BIT(data, i); }
+ void ppi0_pc_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[16U+i] = BIT(data, i); }
+ void ppi1_pa_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[24U+i] = BIT(data, i); }
+ void ppi1_pb_w(u8 data) { m_row = (m_row & 0xff00) | data; }
+ void ppi1_pc_w(u8 data) { m_row = (m_row & 0xff) | (data << 8); }
+ void ppi2_pa_w(u8 data) { m_lamp_data = (m_lamp_data & 0xff00) | data; }
+ void ppi2_pb_w(u8 data) { m_lamp_data = (m_lamp_data & 0xff) | (data << 8); }
+ void ppi2_pc_w(u8 data);
+
+ u16 m_row = 0U;
+ u16 m_lamp_data = 0U;
required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<okim6295_device> m_oki;
+ required_device<i8255_device> m_ppi0;
+ required_device<i8255_device> m_ppi1;
+ required_device<i8255_device> m_ppi2;
+ required_device<via6522_device> m_via;
+ required_device<via6522_device> m_via0;
+ required_device<via6522_device> m_via1;
+ output_finder<128> m_io_outputs; // 32 solenoids + 96 lamps
};
-void alvg_state::alvg_map(address_map &map)
+void alvg_state::main_map(address_map &map)
{
- map(0x0000, 0xffff).noprw();
- map(0x0000, 0x3fff).ram();
- map(0x4000, 0xffff).rom();
+ map(0x0000, 0xffff).rom();
+ map(0x0000, 0x1fff).ram();
+ map(0x2000, 0x2003).mirror(0x3f0).rw(m_ppi0, FUNC(i8255_device::read), FUNC(i8255_device::write)); // U12
+ map(0x2400, 0x2403).mirror(0x3f0).rw(m_ppi1, FUNC(i8255_device::read), FUNC(i8255_device::write)); // U13
+ map(0x2800, 0x2803).mirror(0x3f0).rw(m_ppi2, FUNC(i8255_device::read), FUNC(i8255_device::write)); // U14
+ map(0x2c00, 0x2cff).mirror(0x300).w(FUNC(alvg_state::display_w));
+ map(0x3800, 0x380f).mirror(0x3f0).m("via1", FUNC(via6522_device::map)); // U8
+ map(0x3c00, 0x3c0f).mirror(0x3f0).m("via0", FUNC(via6522_device::map)); // U7
+}
+
+void alvg_state::audio_map(address_map &map)
+{
+ map(0x0000, 0xffff).rom();
+ map(0x2000, 0x2001).mirror(0xffe).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
+ map(0x3000, 0x37ff).mirror(0x800).ram();
+ map(0x4000, 0x4fff).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x5000, 0x500f).mirror(0xff0).m("via", FUNC(via6522_device::map));
+ map(0x6000, 0x6fff).noprw(); // watchdog
}
static INPUT_PORTS_START( alvg )
INPUT_PORTS_END
-void alvg_state::machine_reset()
+void alvg_state::display_w(offs_t offset, u8 data)
{
+ //printf("%X:%X ",offset,data);
}
-void alvg_state::init_alvg()
+void alvg_state::ppi2_pc_w(u8 data)
+{
+ for (u8 i = 0; i < 12; i++)
+ if (BIT(m_lamp_data, i))
+ for (u8 j = 0; j < 8; j++)
+ m_io_outputs[24U+8*i+j] = BIT(data, j);
+}
+
+void alvg_state::machine_start()
+{
+ //genpin_class::machine_start();
+
+ //m_digits.resolve();
+ m_io_outputs.resolve();
+
+ save_item(NAME(m_row));
+ save_item(NAME(m_lamp_data));
+}
+
+void alvg_state::machine_reset()
{
+ //genpin_class::machine_reset();
+ for (u8 i = 0; i < m_io_outputs.size(); i++)
+ m_io_outputs[i] = 0;
}
void alvg_state::alvg(machine_config &config)
{
/* basic machine hardware */
- M65C02(config, m_maincpu, 2000000);
- m_maincpu->set_addrmap(AS_PROGRAM, &alvg_state::alvg_map);
+ M65C02(config, m_maincpu, XTAL(4'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &alvg_state::main_map);
+
+ MOS6522(config, m_via0, XTAL(4'000'000) / 2); // U7, uses clock2 from maincpu; switch inputs
+ //m_via0->readpa_handler().set(FUNC(alvg_state::via0_pa_r));
+ //m_via0->readpb_handler().set(FUNC(alvg_state::via0_pb_r));
+ //m_via0->writepa_handler().set(FUNC(alvg_state::via0_pa_w));
+ //m_via0->writepb_handler().set(FUNC(alvg_state::via0_pb_w));
+ //m_via0->ca2_handler().set_nop();
+ m_via0->cb2_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
+ m_via0->irq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
+
+ MOS6522(config, m_via1, XTAL(4'000'000) / 2); // U8, uses clock2 from maincpu; port A = to sound; port B = serial to display
+ //m_via1->readpa_handler().set(FUNC(alvg_state::via1_pa_r));
+ //m_via1->readpb_handler().set(FUNC(alvg_state::via1_pb_r));
+ //m_via1->writepa_handler().set(FUNC(alvg_state::via1_pa_w));
+ //m_via1->writepb_handler().set(FUNC(alvg_state::via1_pb_w));
+ //m_via1->ca2_handler().set_nop();
+ //m_via1->cb2_handler().set_nop();
+ m_via1->irq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
+
+ I8255A(config, m_ppi0); // U12
+ m_ppi0->out_pa_callback().set(FUNC(alvg_state::ppi0_pa_w)); // Solenoids
+ m_ppi0->out_pb_callback().set(FUNC(alvg_state::ppi0_pb_w)); // Solenoids
+ m_ppi0->out_pc_callback().set(FUNC(alvg_state::ppi0_pc_w)); // Solenoids
+
+ I8255A(config, m_ppi1); // U13
+ m_ppi1->out_pa_callback().set(FUNC(alvg_state::ppi1_pa_w)); // Solenoids
+ m_ppi1->out_pb_callback().set(FUNC(alvg_state::ppi1_pb_w)); // Switch rows
+ m_ppi1->out_pc_callback().set(FUNC(alvg_state::ppi1_pc_w)); // Switch rows
+
+ I8255A(config, m_ppi2); // U14
+ m_ppi2->out_pa_callback().set(FUNC(alvg_state::ppi2_pa_w)); // Lamps
+ m_ppi2->out_pb_callback().set(FUNC(alvg_state::ppi2_pb_w)); // Lamps
+ m_ppi2->out_pc_callback().set(FUNC(alvg_state::ppi2_pc_w)); // Lamps
+
+ // Sound
+ MC6809(config, m_audiocpu, XTAL(8'000'000)); // 68B09, 8 MHz crystal, internal divide by 4 to produce E/Q outputs
+ m_audiocpu->set_addrmap(AS_PROGRAM, &alvg_state::audio_map);
+ MOS6522(config, m_via, XTAL(8'000'000) / 4); // uses E clock from audiocpu; port A = read sound code; port B = ticket machine
+ //m_via->readpa_handler().set(FUNC(alvg_state::via_pa_r));
+ //m_via->readpb_handler().set(FUNC(alvg_state::via_pb_r));
+ //m_via->writepa_handler().set(FUNC(alvg_state::via_pa_w));
+ //m_via->writepb_handler().set(FUNC(alvg_state::via_pb_w));
+ //m_via->ca2_handler().set_nop();
+ //m_via->cb2_handler().set_nop();
+ m_via->irq_handler().set_inputline(m_audiocpu, M6809_FIRQ_LINE);
+
+ //genpin_audio(config);
+
+ SPEAKER(config, "mono").front_center();
+
+ ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(8'000'000) / 2));
+ ymsnd.irq_handler().set_inputline(m_audiocpu, M6809_FIRQ_LINE);
+ ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
+
+ OKIM6295(config, m_oki, XTAL(8'000'000) / 8, okim6295_device::PIN7_HIGH);
+ m_oki->add_route(ALL_OUTPUTS, "mono", 0.50);
}
/*----------------------------------------------------------------------------
@@ -62,9 +222,9 @@ void alvg_state::alvg(machine_config &config)
ROM_START(agsoccer)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("agscpu1r.18u", 0x0000, 0x10000, CRC(37affcf4) SHA1(017d47f54d5b34a4b71c2f5b84ba9bdb1c924299))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("ags_snd.v24", 0x0000, 0x10000, CRC(4ba36e8d) SHA1(330dcb1eea8c311df0e57a3b74146601c26d63c0)) // label says 2.4, inside the ROM it says 2.5L though
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "oki", 0)
ROM_LOAD("ags_voic.v12", 0x000000, 0x40000, CRC(bac70b18) SHA1(0a699eb95d7d6b071b2cd9d0bf73df355e2ffce8))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -74,9 +234,9 @@ ROM_END
ROM_START(agsoccera)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("agscpu1r.18u", 0x0000, 0x10000, CRC(37affcf4) SHA1(017d47f54d5b34a4b71c2f5b84ba9bdb1c924299))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("ags_snd.v21", 0x0000, 0x10000, CRC(aa30bfe4) SHA1(518f7019639a0284461e83ad849bee0be5371580))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "oki", 0)
ROM_LOAD("ags_voic.v12", 0x000000, 0x40000, CRC(bac70b18) SHA1(0a699eb95d7d6b071b2cd9d0bf73df355e2ffce8))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -86,9 +246,9 @@ ROM_END
ROM_START(agsoccer07)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("ags_cpu_r07u", 0x0000, 0x10000, CRC(009ef717) SHA1(d770ce8fd032f4f1d96b9792509cceebbfaebbd9))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("ags_snd.v14", 0x0000, 0x10000, CRC(2544e468) SHA1(d49e2fc91cbb80fdf96f436c614c6f305efafb6f))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "oki", 0)
ROM_LOAD("ags_voic.v12", 0x000000, 0x40000, CRC(bac70b18) SHA1(0a699eb95d7d6b071b2cd9d0bf73df355e2ffce8))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -101,9 +261,9 @@ ROM_END
ROM_START(wrldtour)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("cpu27c.512", 0x0000, 0x10000, CRC(c9572fb5) SHA1(47a3e8943ef4207011a33f4a03a6e722c937cc48))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("soundc.512", 0x0000, 0x10000, CRC(b44bee01) SHA1(795d8500e5bd73ce23756bf1f5c96db1a3621a70))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "bsmt", 0)
ROM_LOAD("samp_0.c21", 0x000000, 0x40000, CRC(37beb831) SHA1(2b90d2be0a1bd7c59469846631d2b44bdf9f5f9d))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -126,16 +286,16 @@ ROM_START(wrldtour)
ROM_LOAD("romdef2.c20", 0x40000, 0x40000, CRC(23c32ee5) SHA1(429b3b069251bb8b681bbc6382ceb6b85125eb79))
ROM_RELOAD( 0xc0000, 0x40000)
ROM_LOAD("dot27c.512", 0x100000, 0x10000, CRC(c8bd48e7) SHA1(e2dc513dd42c05c2018e6d8c0b6f0b2c56e6e059))
- ROM_REGION(0x20000, "cpu3", 0)
+ ROM_REGION(0x20000, "dmdcpu", 0)
ROM_COPY("gfx3",0x108000,0x0000,0x8000)
ROM_END
ROM_START(wrldtour2)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("cpu02b.512", 0x0000, 0x10000, CRC(1658bf40) SHA1(7af9eedab4e7d0cedaf8bfdbc1f27b989a7171cd))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("soundc.512", 0x0000, 0x10000, CRC(b44bee01) SHA1(795d8500e5bd73ce23756bf1f5c96db1a3621a70))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "bsmt", 0)
ROM_LOAD("samp_0.c21", 0x000000, 0x40000, CRC(37beb831) SHA1(2b90d2be0a1bd7c59469846631d2b44bdf9f5f9d))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -158,16 +318,16 @@ ROM_START(wrldtour2)
ROM_LOAD("romdef2.c20", 0x40000, 0x40000, CRC(23c32ee5) SHA1(429b3b069251bb8b681bbc6382ceb6b85125eb79))
ROM_RELOAD( 0xc0000, 0x40000)
ROM_LOAD("dot02b.512", 0x100000, 0x10000, CRC(50e3d59d) SHA1(db6df3482fc485af6bde341750bf8072a296b8da))
- ROM_REGION(0x20000, "cpu3", 0)
+ ROM_REGION(0x20000, "dmdcpu", 0)
ROM_COPY("gfx3",0x108000,0x0000,0x8000)
ROM_END
ROM_START(wrldtour3)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("cpu03.512", 0x0000, 0x10000, CRC(56dee967) SHA1(f7b1f69d96c72b0cf738bdf45701502f7306a4a0))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("soundc.512", 0x0000, 0x10000, CRC(b44bee01) SHA1(795d8500e5bd73ce23756bf1f5c96db1a3621a70))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "bsmt", 0)
ROM_LOAD("samp_0.c21", 0x000000, 0x40000, CRC(37beb831) SHA1(2b90d2be0a1bd7c59469846631d2b44bdf9f5f9d))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -190,7 +350,7 @@ ROM_START(wrldtour3)
ROM_LOAD("romdef2.c20", 0x40000, 0x40000, CRC(23c32ee5) SHA1(429b3b069251bb8b681bbc6382ceb6b85125eb79))
ROM_RELOAD( 0xc0000, 0x40000)
ROM_LOAD("dot03.512", 0x100000, 0x10000, CRC(f8a084bb) SHA1(30eb344ad96b5605693d3a7c703c9ed5c1770ca4))
- ROM_REGION(0x20000, "cpu3", 0)
+ ROM_REGION(0x20000, "dmdcpu", 0)
ROM_COPY("gfx3",0x108000,0x0000,0x8000)
ROM_END
@@ -200,9 +360,9 @@ ROM_END
ROM_START(dinoeggs)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("dinoeggs.512", 0x0000, 0x10000, CRC(4712f97f) SHA1(593351dcfd475e685c1e5eb2c1006769d3325c8b))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("eps071.r02", 0x0000, 0x10000, CRC(288f116c) SHA1(5d03ce66bffe39ec02173525078ff07c5005ef18))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "oki", 0)
ROM_LOAD("eps072.r02", 0x000000, 0x40000, CRC(780a4364) SHA1(d8a972debee669f0fe66c7407fbed5ef9cd2ce01))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -215,9 +375,9 @@ ROM_END
ROM_START(mystcast)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("mcastle.cpu", 0x0000, 0x10000, CRC(936e6799) SHA1(aa29fb5f12f34c695d1556232744f65cd576a2b1))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("mcastle.102", 0x0000, 0x10000, CRC(752822d0) SHA1(36461ef03cac5aefa0c03dfdc63c3d294a3b9c09))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "bsmt", 0)
ROM_LOAD("mcastle.sr0", 0x000000, 0x40000, CRC(0855cc73) SHA1(c46e08432bcff24594c33171f20669ba63828931))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -234,7 +394,7 @@ ROM_START(mystcast)
ROM_RELOAD(0x300000 + 0x40000, 0x40000)
ROM_RELOAD(0x300000 + 0x80000, 0x40000)
ROM_RELOAD(0x300000 + 0xc0000, 0x40000)
- ROM_REGION(0x20000, "cpu3", 0)
+ ROM_REGION(0x20000, "dmdcpu", 0)
ROM_LOAD("mcastle.du4", 0x00000, 0x10000, CRC(686e253a) SHA1(28aff34c120c61e231e2111dc396df515bcbbb89))
ROM_REGION(0x100000, "gfx3", 0)
ROM_LOAD("mcastle.du5", 0x00000, 0x40000, CRC(9095c367) SHA1(9d3e9416f662ee2aad891eef059278c530448fcc))
@@ -246,9 +406,9 @@ ROM_END
ROM_START(mystcasta)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("cpu_103.bin", 0x0000, 0x10000, CRC(70ab8ece) SHA1(2bf8cd042450968b7500552419a9af5df2589c13))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("mcastle.103", 0x0000, 0x10000, CRC(bd4849ac) SHA1(f477ea369539a65c0960be1f1c3b4c5503dd6b75))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "bsmt", 0)
ROM_LOAD("mcastle.sr0", 0x000000, 0x40000, CRC(0855cc73) SHA1(c46e08432bcff24594c33171f20669ba63828931))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -265,7 +425,7 @@ ROM_START(mystcasta)
ROM_RELOAD(0x300000 + 0x40000, 0x40000)
ROM_RELOAD(0x300000 + 0x80000, 0x40000)
ROM_RELOAD(0x300000 + 0xc0000, 0x40000)
- ROM_REGION(0x20000, "cpu3", 0)
+ ROM_REGION(0x20000, "dmdcpu", 0)
ROM_LOAD("u4.bin", 0x00000, 0x10000, CRC(a6969efc) SHA1(82da976cb3d30d6fb1576e4c67febd7235f73f51))
ROM_REGION(0x100000, "gfx3", 0)
ROM_LOAD("u5.bin", 0x00000, 0x40000, CRC(e5126980) SHA1(2c6d412c87bf27098dae4351958d84e8f9348423))
@@ -280,9 +440,9 @@ ROM_END
ROM_START(pstlpkr)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("p_peteu2.512", 0x0000, 0x10000, CRC(490a1e2d) SHA1(907dd858ed948681e7366a64a0e7537ebe301d6b))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("p_pu102.512", 0x0000, 0x10000, CRC(b8fb806e) SHA1(c2dc19820ea22bbcf5808db2fb4be76a4033d6ea))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "bsmt", 0)
ROM_LOAD("p_parom0.c20", 0x000000, 0x40000, CRC(99986af2) SHA1(52fa7d2979f7f2d6d65ab6d4f7bbfbed16303991))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -299,7 +459,7 @@ ROM_START(pstlpkr)
ROM_RELOAD(0x300000 + 0x40000, 0x40000)
ROM_RELOAD(0x300000 + 0x80000, 0x40000)
ROM_RELOAD(0x300000 + 0xc0000, 0x40000)
- ROM_REGION(0x20000, "cpu3", 0)
+ ROM_REGION(0x20000, "dmdcpu", 0)
ROM_LOAD("p_peteu4.512", 0x00000, 0x10000, CRC(caa0cabd) SHA1(caff6ca4a9cce4e3d846502696c8838805673261))
ROM_REGION(0x100000, "gfx3", 0)
ROM_LOAD("p_peteu5.c20", 0x00000, 0x40000, CRC(1d2cecd8) SHA1(6072a0f744fb9eef728fe7cf5e17d0007edbddd7))
@@ -311,9 +471,9 @@ ROM_END
ROM_START(pstlpkr1)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("u2-ddff.512", 0x0000, 0x10000, CRC(83fa0595) SHA1(d6ebb0e63fd964ccaee3979a7fc13b6adf7b837c))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("p_pu102.512", 0x0000, 0x10000, CRC(b8fb806e) SHA1(c2dc19820ea22bbcf5808db2fb4be76a4033d6ea))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "bsmt", 0)
ROM_LOAD("p_parom0.c20", 0x000000, 0x40000, CRC(99986af2) SHA1(52fa7d2979f7f2d6d65ab6d4f7bbfbed16303991))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -330,7 +490,7 @@ ROM_START(pstlpkr1)
ROM_RELOAD(0x300000 + 0x40000, 0x40000)
ROM_RELOAD(0x300000 + 0x80000, 0x40000)
ROM_RELOAD(0x300000 + 0xc0000, 0x40000)
- ROM_REGION(0x20000, "cpu3", 0)
+ ROM_REGION(0x20000, "dmdcpu", 0)
ROM_LOAD("p_peteu4.512", 0x00000, 0x10000, CRC(caa0cabd) SHA1(caff6ca4a9cce4e3d846502696c8838805673261))
ROM_REGION(0x100000, "gfx3", 0)
ROM_LOAD("p_peteu5.c20", 0x00000, 0x40000, CRC(1d2cecd8) SHA1(6072a0f744fb9eef728fe7cf5e17d0007edbddd7))
@@ -345,9 +505,9 @@ ROM_END
ROM_START(punchy)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("epc061.r02", 0x0000, 0x10000, CRC(732fca88) SHA1(dff0aa4b856bafb95b08dae675dd2ad59e1860e1))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("eps061.r02", 0x0000, 0x10000, CRC(cfde1b9a) SHA1(cbf9e67df6a6762843272493c2caa1413f70fb27))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "oki", 0)
ROM_LOAD("eps062.r02", 0x000000, 0x40000, CRC(7462a5cd) SHA1(05141bcc91b1a786444bff7fa8ba2a785dc0d376))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -357,9 +517,9 @@ ROM_END
ROM_START(punchy3)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("epc061.r03", 0x0000, 0x10000, CRC(8e91131c) SHA1(1bf1408e4e512b764048f4847cf8e4b7a0bf824d))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("eps061.r02", 0x0000, 0x10000, CRC(cfde1b9a) SHA1(cbf9e67df6a6762843272493c2caa1413f70fb27))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "oki", 0)
ROM_LOAD("eps062.r02", 0x000000, 0x40000, CRC(7462a5cd) SHA1(05141bcc91b1a786444bff7fa8ba2a785dc0d376))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -372,9 +532,9 @@ ROM_END
ROM_START(usafootb)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("usa_cpu.bin", 0x0000, 0x10000, CRC(53b00873) SHA1(96812c4722026554a830c62eca64f09d25a0de82))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("usa_snd.bin", 0x0000, 0x10000, CRC(9d509cbc) SHA1(0be629945b5102adf75e88661e0f956e32ca77da))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "oki", 0)
ROM_LOAD("usa_vox.bin", 0x000000, 0x40000, CRC(baae0aa3) SHA1(7933bffcf1509ceeea58a4449268c10c9fac554c))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -384,9 +544,9 @@ ROM_END
ROM_START(usafootba)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("usa_cpu1.bin", 0x0000, 0x10000, CRC(3b64a6e9) SHA1(65535bc17395416181bafddc61c0fac177eeba2f))
- ROM_REGION(0x10000, "cpu2", 0)
+ ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("usa_snd.bin", 0x0000, 0x10000, CRC(9d509cbc) SHA1(0be629945b5102adf75e88661e0f956e32ca77da))
- ROM_REGION(0x400000, "sound1", 0)
+ ROM_REGION(0x400000, "oki", 0)
ROM_LOAD("usa_vox.bin", 0x000000, 0x40000, CRC(baae0aa3) SHA1(7933bffcf1509ceeea58a4449268c10c9fac554c))
ROM_RELOAD(0x000000 + 0x40000, 0x40000)
ROM_RELOAD(0x000000 + 0x80000, 0x40000)
@@ -396,18 +556,18 @@ ROM_END
} // Anonymous namespace
-GAME( 1991, agsoccer, 0, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "A.G. Soccer Ball (R18u, 2.5L sound)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1991, agsoccera, agsoccer, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "A.G. Soccer Ball (R18u, 2.1 sound)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1991, agsoccer07, agsoccer, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "A.G. Soccer Ball (R07u)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1992, wrldtour, 0, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1992, wrldtour2, wrldtour, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour (R02b)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1992, wrldtour3, wrldtour, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour (R06a)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, usafootb, 0, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "U.S.A. Football", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, usafootba, usafootb, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "U.S.A. Football (R01u)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, mystcast, 0, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Mystery Castle (R02)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, mystcasta, mystcast, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Mystery Castle (R03)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, pstlpkr, 0, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Pistol Poker (R02)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, pstlpkr1, pstlpkr, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Pistol Poker (R01)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, punchy, 0, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Punchy The Clown (R02)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, punchy3, punchy, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Punchy The Clown (R03)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME( 1993, dinoeggs, 0, alvg, alvg, alvg_state, init_alvg, ROT0, "Alvin G", "Dinosaur Eggs", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1991, agsoccer, 0, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "A.G. Soccer Ball (R18u, 2.5L sound)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1991, agsoccera, agsoccer, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "A.G. Soccer Ball (R18u, 2.1 sound)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1991, agsoccer07, agsoccer, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "A.G. Soccer Ball (R07u)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1992, wrldtour, 0, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1992, wrldtour2, wrldtour, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour (R02b)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1992, wrldtour3, wrldtour, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour (R06a)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, usafootb, 0, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "U.S.A. Football", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, usafootba, usafootb, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "U.S.A. Football (R01u)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, mystcast, 0, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Mystery Castle (R02)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, mystcasta, mystcast, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Mystery Castle (R03)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, pstlpkr, 0, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Pistol Poker (R02)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, pstlpkr1, pstlpkr, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Pistol Poker (R01)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, punchy, 0, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Punchy The Clown (R02)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, punchy3, punchy, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Punchy The Clown (R03)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1993, dinoeggs, 0, alvg, alvg, alvg_state, empty_init, ROT0, "Alvin G", "Dinosaur Eggs", MACHINE_IS_SKELETON_MECHANICAL)
diff --git a/src/mame/drivers/astrcorp.cpp b/src/mame/drivers/astrcorp.cpp
index 9d2b2570db7..994e80fc882 100644
--- a/src/mame/drivers/astrcorp.cpp
+++ b/src/mame/drivers/astrcorp.cpp
@@ -132,6 +132,7 @@ public:
void magibomb(machine_config &config);
void magibombb(machine_config &config);
+ void magibombf(machine_config &config);
void init_magibomb();
private:
@@ -139,6 +140,7 @@ private:
void magibomb_base_map(address_map &map, u32 base_offs);
void magibomb_map(address_map &map);
void magibombb_map(address_map &map);
+ void magibombf_map(address_map &map);
};
class astoneage_state : public astrocorp_state
@@ -503,6 +505,25 @@ void magibomb_state::magibombb_map(address_map &map)
magibomb_base_map(map, 0x10000);
}
+void magibomb_state::magibombf_map(address_map &map)
+{
+ map(0x000000, 0x01ffff).rom();
+ map(0x060000, 0x063fff).ram().share("nvram");
+ map(0x070000, 0x070001).r(FUNC(magibomb_state::video_flags_r));
+ map(0x080000, 0x080fff).ram().share("spriteram");
+ map(0x082000, 0x082001).w(FUNC(magibomb_state::draw_sprites_w));
+ map(0x084000, 0x084001).portr("INPUTS");
+ map(0x088001, 0x088001).w(FUNC(magibomb_state::eeprom_w));
+ map(0x08a000, 0x08a001).w(FUNC(magibomb_state::skilldrp_outputs_w));
+ map(0x08e000, 0x08e001).portr("EEPROMIN");
+ map(0x090000, 0x0901ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
+ map(0x0a0000, 0x0a0000).w(FUNC(magibomb_state::screen_enable_w));
+ map(0x0b0001, 0x0b0001).w(FUNC(magibomb_state::oki_bank_w));
+ map(0x0c0001, 0x0c0001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0xa00000, 0xa005ff).ram(); // unknown
+ map(0xa0101a, 0xa0101b).r(FUNC(magibomb_state::unk_r));
+}
+
void astoneage_state::astoneage_map(address_map &map)
{
map(0x000000, 0x03ffff).rom().mirror(0x800000); // POST checks for ROM crc at mirror
@@ -783,6 +804,12 @@ void magibomb_state::magibombb(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &magibomb_state::magibombb_map);
}
+void magibomb_state::magibombf(machine_config &config)
+{
+ magibomb(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &magibomb_state::magibombf_map);
+}
+
TIMER_DEVICE_CALLBACK_MEMBER(astoneage_state::astoneage_scanline_cb)
{
int scanline = param;
@@ -1179,6 +1206,21 @@ ROM_START( magibombe )
ROM_LOAD16_WORD_SWAP( "93c46p.u6", 0x00, 0x80, CRC(037f5f07) SHA1(d82145ebb94681841ec0c41724ef93857f50d8f0) )
ROM_END
+ROM_START( magibombf )
+ ROM_REGION( 0x40000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "rom1.u21", 0x00000, 0x10000, CRC(bc9a9c68) SHA1(cee6d20322ba500f82321fa56ca71c8ec152b953) )
+ ROM_LOAD16_BYTE( "rom2.u20", 0x00001, 0x10000, CRC(b52bfa4d) SHA1(e413536867148967f4ddbf1cf81c4cf45da41d1e) )
+
+ ROM_REGION( 0x200000, "sprites", 0 )
+ ROM_LOAD( "29f1610mc.u26", 0x000000, 0x200000, BAD_DUMP CRC(042f7992) SHA1(2e175994d0b14200a92bdb46e82847b1a1c88265) ) // dumped for the Ver. A3.1A set, should be same for all, marking as bad as precaution
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "rom5.u33", 0x00000, 0x80000, CRC(c9edbf1b) SHA1(8e3a96a38aea23950d6add66a5a3d079013bc217) )
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD_SWAP( "93c46.u6", 0x00, 0x80, BAD_DUMP CRC(53bb180a) SHA1(8a2b7ae3abf31a1972864cf96e1ac74ed69fb1ee) )
+ROM_END
+
/***************************************************************************
Western Venture
@@ -1883,6 +1925,7 @@ GAME( 2002, magibomba, magibomb, magibomb, magibomb, magibomb_state, init_mag
GAME( 2002, magibombb, magibomb, magibombb, magibomb, magibomb_state, init_magibomb, ROT0, "Astro Corp.", "Magic Bomb (Ver. AB4.5A, 07/10/02)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 2001, magibombc, magibomb, magibombb, magibomb, magibomb_state, init_magibomb, ROT0, "Astro Corp.", "Magic Bomb (Ver. AB4.2, 11/10/01)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 2001?, magibombe, magibomb, magibombb, magibomb, magibomb_state, init_magibomb, ROT0, "Astro Corp.", "Magic Bomb (Ver. A3.1A)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 2002, magibombf, magibomb, magibombf, magibomb, magibomb_state, init_magibomb, ROT0, "Astro Corp.", "Magic Bomb (Ver. NB4.5 061402)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
// Heavier encryption
GAME( 2005, dinodino, 0, dinodino, skilldrp, astoneage_state, init_dinodino, ROT0, "Astro Corp.", "Dino Dino (Ver. A1.1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 13/01.2005 10:59
diff --git a/src/mame/drivers/bbc.cpp b/src/mame/drivers/bbc.cpp
index 8281c0fef3d..522cc9fb7d3 100644
--- a/src/mame/drivers/bbc.cpp
+++ b/src/mame/drivers/bbc.cpp
@@ -11,8 +11,9 @@
ANB03 - Model B with Disc interface
ANB04 - Model B with Disc and Econet interfaces
- GNB14 - Model B with Disc, Econet & Speech (German model)
- UNB09 - Model B with Disc, Econet & Speech (US model)
+ GNB14 - Model B with Disc, Econet & Speech (German export)
+ UNB09 - Model B with Disc, Econet & Speech (US export)
+ Model B with Disc (Norway dealer import)
BBC Model B+
@@ -474,6 +475,22 @@ static INPUT_PORTS_START(bbc_keyboard)
INPUT_PORTS_END
+static INPUT_PORTS_START(bbc_keyboard_no)
+ PORT_INCLUDE(bbc_keyboard)
+
+ PORT_MODIFY("COL7")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"Ã…") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(0xc5)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"Ø") PORT_CODE(KEYCODE_COLON) PORT_CHAR(0xd8)
+
+ PORT_MODIFY("COL8")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(": *") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(':') PORT_CHAR('*')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u8"Æ") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0xc6)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(';') PORT_CHAR('+')
+
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('@')
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START(bbc_keypad)
PORT_MODIFY("COL10")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
@@ -970,6 +987,13 @@ static INPUT_PORTS_START(bbcb)
PORT_INCLUDE(bbcb_links)
INPUT_PORTS_END
+static INPUT_PORTS_START(bbcb_no)
+ PORT_INCLUDE(bbc_config)
+ PORT_INCLUDE(bbc_keyboard_no)
+ PORT_INCLUDE(bbc_dipswitch)
+ PORT_INCLUDE(bbcb_links)
+INPUT_PORTS_END
+
static INPUT_PORTS_START(bbcbp)
PORT_INCLUDE(bbc_config)
PORT_INCLUDE(bbc_keyboard)
@@ -1276,6 +1300,22 @@ void bbc_state::bbcb_us(machine_config &config)
/***************************************************************************
+ Cisco Systems
+
+****************************************************************************/
+
+
+void bbc_state::sist1(machine_config &config)
+{
+ bbcb(config);
+
+ m_1mhzbus->set_default_option("cisco");
+ m_1mhzbus->set_fixed(true);
+}
+
+
+/***************************************************************************
+
Torch Computers
****************************************************************************/
@@ -2180,6 +2220,43 @@ ROM_START(bbcb_us)
ROM_END
+ROM_START(bbcb_no)
+ ROM_REGION(0x40000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
+ /* rom page 0 00000 IC72 DFS */
+ /* rom page 1 04000 IC73 VIEW2.1 */
+ /* rom page 2 08000 IC74 SPARE SOCKET */
+ /* rom page 3 0c000 IC75 BASIC */
+ ROM_LOAD("dfs0.9h.rom", 0x0000, 0x2000, CRC(af2fa873) SHA1(dbbec4d2540a854c120be3194c7566a2b79d153b))
+ ROM_LOAD("viewa210.rom", 0x4000, 0x4000, CRC(4345359f) SHA1(88c93df1854f5fbe6cd6e5f0e29a8bf4ea3b5614))
+ ROM_LOAD("basic2.rom", 0xc000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281))
+
+ ROM_REGION(0x4000, "mos", 0)
+ ROM_LOAD("nos12.rom", 0x0000, 0x4000, CRC(49859294) SHA1(2b6aecd33a43f296c20832524e47cc7e3a9c3b17))
+
+ ROM_REGION(0x4000, "vsm", 0) /* system speech PHROM */
+ ROM_LOAD("phrom_us.bin", 0x0000, 0x4000, CRC(bf4b3b64) SHA1(66876702d1d95eecc034d20f25047f893a27cde5))
+ROM_END
+
+
+ROM_START(sist1)
+ ROM_REGION(0x40000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
+ /* rom page 0 00000 IC52 DFS */
+ /* rom page 1 04000 IC88 PROGS */
+ /* rom page 2 08000 IC100 BASIC */
+ /* rom page 3 0c000 IC101 STARTUP */
+ ROM_LOAD("dnfs120-201666.rom", 0x0000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232))
+ ROM_LOAD("sist1_progs.bin", 0x4000, 0x4000, CRC(aea21243) SHA1(4398ba29c871fa397654aa182c63ccdcad597625))
+ ROM_LOAD("basic2.rom", 0x8000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281))
+ ROM_LOAD("sist1_startup.bin", 0xc000, 0x4000, CRC(9cd1602c) SHA1(5ea266f47ff83821ccdbec006b8506b2e892b115))
+
+ ROM_REGION(0x4000, "mos", 0)
+ ROM_LOAD("os12.rom", 0x0000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d))
+
+ ROM_REGION(0x4000, "vsm", 0) /* system speech PHROM */
+ ROM_LOAD("cm62024.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6))
+ROM_END
+
+
ROM_START(torchf)
ROM_REGION(0x40000, "swr", ROMREGION_ERASEFF) /* Sideways ROMs */
/* rom page 0 00000 IC52 BASIC */
@@ -2993,6 +3070,7 @@ COMP( 1981, bbcb, 0, bbca, bbcb, bbcb, bbc_state, init_bb
COMP( 1981, bbca, bbcb, 0, bbca, bbca, bbc_state, init_bbc, "Acorn Computers", "BBC Micro Model A", MACHINE_IMPERFECT_GRAPHICS )
COMP( 1982, bbcb_de, bbcb, 0, bbcb_de, bbcb, bbc_state, init_bbc, "Acorn Computers", "BBC Micro Model B (German)", MACHINE_IMPERFECT_GRAPHICS )
COMP( 1983, bbcb_us, bbcb, 0, bbcb_us, bbcb, bbc_state, init_bbc, "Acorn Computers", "BBC Micro Model B (US)", MACHINE_IMPERFECT_GRAPHICS )
+COMP( 1984, bbcb_no, bbcb, 0, bbcb_de, bbcb_no, bbc_state, init_bbc, "Acorn Computers", "BBC Micro Model B (Norway)", MACHINE_IMPERFECT_GRAPHICS )
COMP( 1985, bbcbp, 0, bbcb, bbcbp, bbcbp, bbcbp_state, init_bbc, "Acorn Computers", "BBC Micro Model B+ 64K", MACHINE_IMPERFECT_GRAPHICS )
COMP( 1985, bbcbp128, bbcbp, 0, bbcbp128, bbcbp, bbcbp_state, init_bbc, "Acorn Computers", "BBC Micro Model B+ 128K", MACHINE_IMPERFECT_GRAPHICS )
COMP( 1985, abc110, bbcbp, 0, abc110, abc, bbcbp_state, init_bbc, "Acorn Computers", "ABC 110", MACHINE_NOT_WORKING )
@@ -3028,6 +3106,7 @@ COMP( 1988, discmate, bbcm, 0, discmate, bbcm, bbcm_state, init_bb
//COMP( 1988, discmast, bbcm, 0, discmast, bbcm, bbcm_state, init_bbc, "Arbiter Leisure", "Arbiter Discmaster A-03", MACHINE_NOT_WORKING )
/* Industrial */
+COMP( 198?, sist1, bbcb, 0, sist1, bbcb, bbc_state, init_bbc, "Cisco Systems", "Cisco SIST1 Terminal", MACHINE_NOT_WORKING )
COMP( 1985, ltmpbp, bbcbp, 0, bbcbp, ltmpbp, bbcbp_state, init_ltmp, "Lawrie T&M Ltd.", "LTM Portable (B+)", MACHINE_IMPERFECT_GRAPHICS )
COMP( 1986, ltmpm, bbcm, 0, bbcm, ltmpm, bbcm_state, init_ltmp, "Lawrie T&M Ltd.", "LTM Portable (Master)", MACHINE_IMPERFECT_GRAPHICS )
COMP( 1987, daisy, bbcm, 0, daisy, bbcm, bbcm_state, init_bbc, "Comus Instruments Ltd.", "Comus Daisy", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/capcom.cpp b/src/mame/drivers/capcom.cpp
index 42fc17fdb5b..706da41fb4b 100644
--- a/src/mame/drivers/capcom.cpp
+++ b/src/mame/drivers/capcom.cpp
@@ -1,8 +1,28 @@
// license:BSD-3-Clause
// copyright-holders:Miodrag Milanovic
-/*
- Capcom A0015405
-*/
+/******************************************************************************************************
+PINBALL
+Capcom A0015405
+
+Games:
+- Airborne (#3001)
+- Big Bang Bar (#3003)
+- Breakshot (#3002)
+- Flipper Football (#3004)
+- Kingpin (#3005)
+- Pinball Magic (#3000)
+- Red Line Fever (unreleased)
+- Zingy Bingy (unreleased)
+- Goofy Hoops
+- Pool Player
+
+Status:
+- Skeletons
+
+ToDo:
+- Everything
+
+******************************************************************************************************/
#include "emu.h"
diff --git a/src/mame/drivers/de_2.cpp b/src/mame/drivers/de_2.cpp
index 2bc5dcbc230..7494756e0d8 100644
--- a/src/mame/drivers/de_2.cpp
+++ b/src/mame/drivers/de_2.cpp
@@ -31,7 +31,7 @@ King Kong -- Hold CDE, hit 1 CDE
**** not emulated (various systems) ****
Arnon Milchan
Flip Out! 1991
-Joel Silver, the pinball
+Joel Silver, the pinball (1991)
Kabuki
Richie Rich
Slap Shot Hockey 0138
diff --git a/src/mame/drivers/fidel_chesster.cpp b/src/mame/drivers/fidel_chesster.cpp
index f468e4248ba..b46e41eabe2 100644
--- a/src/mame/drivers/fidel_chesster.cpp
+++ b/src/mame/drivers/fidel_chesster.cpp
@@ -164,7 +164,7 @@ void chesster_state::main_map(address_map &map)
static INPUT_PORTS_START( chesster )
PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / No")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Yes")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Repeat")
diff --git a/src/mame/drivers/fidel_desdis.cpp b/src/mame/drivers/fidel_desdis.cpp
index 12e244e0bc2..0442aff0b44 100644
--- a/src/mame/drivers/fidel_desdis.cpp
+++ b/src/mame/drivers/fidel_desdis.cpp
@@ -267,7 +267,7 @@ void desmas_state::fdes2325_map(address_map &map)
static INPUT_PORTS_START( desdis )
PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / Alternate")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Info")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Replay")
diff --git a/src/mame/drivers/fidel_phantom.cpp b/src/mame/drivers/fidel_phantom.cpp
index bc06552e9fd..8424d43eebb 100644
--- a/src/mame/drivers/fidel_phantom.cpp
+++ b/src/mame/drivers/fidel_phantom.cpp
@@ -1,5 +1,6 @@
// license:BSD-3-Clause
-// copyright-holders:hap,Sandro Ronco
+// copyright-holders:hap, Sandro Ronco
+// thanks-to:Berger
/******************************************************************************
Fidelity Phantom (model 6100)
@@ -10,12 +11,19 @@ the outside. After Fidelity was taken over by H+G, it was rereleased in 1990 as
Mephisto Phantom. This is assumed to be identical.
Hardware notes:
-- R65C02P4, XTAL marked 4.91?200
+- PCB label 510.1128A01
+- R65C02P4, XTAL marked 4.915200
- 2*32KB ROM 27C256-15, 8KB RAM MS6264L-10
- LCD driver, display panel for digits
-- magnetized x/y motor under chessboard, chesspieces have magnet underneath
+- magnetized x/y DC motors under chessboard, chesspieces have magnet underneath
- piezo speaker, LEDs, 8*8 chessboard buttons
-- PCB label 510.1128A01
+
+Chesster Phantom is on the same base hardware, and adds the Chesster voice to it,
+using the same ROM as the original Chesster. Model 6124 extra hardware is on a
+daughterboard, the housing is the same as model 6100, except for button labels.
+
+Model 6126 has a dedicated PCB, this version also has a motion sensor at the front
+and 2 leds to mimick eyes, and the housing is green instead of beige.
To play, wait until the motor is finished before making a move. At boot-up, the
computer will do a self-test.
@@ -24,23 +32,30 @@ spawn block and place it at the designated box at the edge of the chessboard.
TODO:
- sensorboard undo buffer goes out of control, probably not worth solving this issue
+- cphantom artwork should be green instead of beige
+- motor position in artwork?
******************************************************************************/
#include "emu.h"
+
#include "cpu/m6502/r65c02.h"
#include "machine/sensorboard.h"
#include "machine/timer.h"
#include "sound/dac.h"
#include "video/pwm.h"
+
#include "speaker.h"
// internal artwork
+#include "fidel_cphantom.lh" // clickable
#include "fidel_phantom.lh" // clickable
namespace {
+// Phantom 6100 / shared
+
class phantom_state : public driver_device
{
public:
@@ -51,59 +66,67 @@ public:
m_dac(*this, "dac"),
m_board(*this, "board"),
m_display(*this, "display"),
- m_input(*this, "IN.0"),
+ m_inputs(*this, "IN.%u", 0),
m_out_motor(*this, "motor.%u", 0U)
{ }
- void fphantom(machine_config &config);
- void init_fphantom();
+ void phantom(machine_config &config);
+ void init_phantom();
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
-private:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_memory_bank m_rombank;
- required_device<dac_bit_interface> m_dac;
+ optional_device<dac_bit_interface> m_dac;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
- required_ioport m_input;
+ optional_ioport_array<2> m_inputs;
output_finder<5> m_out_motor;
- void main_map(address_map &map);
+ // address maps
+ virtual void main_map(address_map &map);
+ // I/O handlers
+ void init_motors();
+ void check_rotation();
TIMER_DEVICE_CALLBACK_MEMBER(motors_timer);
- void update_lcd();
- void control_w(offs_t offset, u8 data);
+ void update_pieces_position(int state);
+
+ void update_lcd(u8 select);
+ virtual void control_w(offs_t offset, u8 data);
void lcd_w(offs_t offset, u8 data);
void motors_w(u8 data);
- u8 input_r(offs_t offset);
+ virtual u8 input_r(offs_t offset);
u8 motors_r(offs_t offset);
u8 irq_ack_r();
u8 hmotor_ff_clear_r();
u8 vmotor_ff_clear_r();
- void update_pieces_position(int state);
- uint8_t m_select;
- uint32_t m_lcd_data;
- uint8_t m_motors_ctrl;
- uint8_t m_hmotor_pos;
- uint8_t m_vmotor_pos;
- bool m_vmotor_sensor0_ff;
- bool m_vmotor_sensor1_ff;
- bool m_hmotor_sensor0_ff;
- bool m_hmotor_sensor1_ff;
- int m_piece;
- bool m_piece_collision;
- uint8_t m_pieces_map[0x40][0x40];
+ u8 m_mux = 0;
+ u8 m_select = 0;
+ u32 m_lcd_data = 0;
+
+ u8 m_motors_ctrl;
+ int m_hmotor_pos;
+ int m_vmotor_pos;
+ bool m_vmotor_sensor0_ff;
+ bool m_vmotor_sensor1_ff;
+ bool m_hmotor_sensor0_ff;
+ bool m_hmotor_sensor1_ff;
+ int m_piece;
+ bool m_piece_collision;
+ u8 m_pieces_map[0x40][0x40];
};
void phantom_state::machine_start()
{
m_out_motor.resolve();
+ // register for savestates
+ save_item(NAME(m_mux));
save_item(NAME(m_select));
save_item(NAME(m_lcd_data));
save_item(NAME(m_motors_ctrl));
@@ -120,11 +143,67 @@ void phantom_state::machine_start()
void phantom_state::machine_reset()
{
- m_select = 0;
- m_lcd_data = 0;
+ init_motors();
+ m_rombank->set_entry(0);
+}
+
+void phantom_state::init_phantom()
+{
+ int numbanks = memregion("rombank")->bytes() / 0x4000;
+ m_rombank->configure_entries(0, numbanks, memregion("rombank")->base(), 0x4000);
+}
+
+// Chesster Phantom
+
+class chessterp_state : public phantom_state
+{
+public:
+ chessterp_state(const machine_config &mconfig, device_type type, const char *tag) :
+ phantom_state(mconfig, type, tag),
+ m_eye_led(*this, "eye_led")
+ { }
+
+ void cphantom(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ output_finder<> m_eye_led;
+
+ virtual void main_map(address_map &map) override;
+
+ TIMER_DEVICE_CALLBACK_MEMBER(nmi_timer);
+ virtual void control_w(offs_t offset, u8 data) override;
+ virtual u8 input_r(offs_t offset) override;
+
+ u8 m_select2 = 0;
+};
+
+void chessterp_state::machine_start()
+{
+ phantom_state::machine_start();
+
+ m_eye_led.resolve();
+ save_item(NAME(m_select2));
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(chessterp_state::nmi_timer)
+{
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+}
+
+
+
+/******************************************************************************
+ Motor Sim
+******************************************************************************/
+
+void phantom_state::init_motors()
+{
m_motors_ctrl = 0;
- m_hmotor_pos = 0xff;
- m_vmotor_pos = 0xff;
+ m_hmotor_pos = 0x80;
+ m_vmotor_pos = 0x80;
m_vmotor_sensor0_ff = false;
m_vmotor_sensor1_ff = false;
m_hmotor_sensor0_ff = false;
@@ -132,32 +211,33 @@ void phantom_state::machine_reset()
m_piece = 0;
m_piece_collision = false;
memset(m_pieces_map, 0, sizeof(m_pieces_map));
-
- m_rombank->set_entry(0);
}
-void phantom_state::init_fphantom()
+void phantom_state::check_rotation()
{
- m_rombank->configure_entries(0, 2, memregion("rombank")->base(), 0x4000);
+ if (m_vmotor_pos != 0 && m_vmotor_pos != 0xff)
+ {
+ if (m_motors_ctrl & 0x03) m_vmotor_sensor0_ff = true;
+ if (m_motors_ctrl & 0x02) m_vmotor_sensor1_ff = true;
+ }
+ if (m_hmotor_pos != 0 && m_hmotor_pos != 0xff)
+ {
+ if (m_motors_ctrl & 0x0c) m_hmotor_sensor0_ff = true;
+ if (m_motors_ctrl & 0x04) m_hmotor_sensor1_ff = true;
+ }
}
-
-
-/******************************************************************************
- Motor Sim
-******************************************************************************/
-
TIMER_DEVICE_CALLBACK_MEMBER(phantom_state::motors_timer)
{
- if (m_motors_ctrl & 0x03) m_vmotor_sensor0_ff = true;
- if (m_motors_ctrl & 0x02) m_vmotor_sensor1_ff = true;
- if (m_motors_ctrl & 0x0c) m_hmotor_sensor0_ff = true;
- if (m_motors_ctrl & 0x04) m_hmotor_sensor1_ff = true;
-
- if ((m_motors_ctrl & 0x01) && m_vmotor_pos > 0x00) m_vmotor_pos--;
- if ((m_motors_ctrl & 0x02) && m_vmotor_pos < 0xff) m_vmotor_pos++;
- if ((m_motors_ctrl & 0x04) && m_hmotor_pos > 0x00) m_hmotor_pos--;
- if ((m_motors_ctrl & 0x08) && m_hmotor_pos < 0xff) m_hmotor_pos++;
+ check_rotation();
+
+ // simulate 1 rotation per each tick
+ if ((m_motors_ctrl & 0x01) && m_vmotor_pos > 0x00) m_vmotor_pos--;
+ if ((m_motors_ctrl & 0x02) && m_vmotor_pos < 0xff) m_vmotor_pos++;
+ if ((m_motors_ctrl & 0x04) && m_hmotor_pos > 0x00) m_hmotor_pos--;
+ if ((m_motors_ctrl & 0x08) && m_hmotor_pos < 0xff) m_hmotor_pos++;
+
+ check_rotation();
}
void phantom_state::update_pieces_position(int state)
@@ -170,7 +250,7 @@ void phantom_state::update_pieces_position(int state)
x += 12;
// check if the magnet is in the center of a square
- bool valid_pos = ((m_hmotor_pos & 0x0f) == 0x03 || (m_hmotor_pos & 0x0f) == 0x07) && ((m_vmotor_pos & 0x0f) == 0x09 || (m_vmotor_pos & 0x0f) == 0x0d);
+ bool valid_pos = ((m_hmotor_pos & 0x0f) > 0 && (m_hmotor_pos & 0x0f) <= 7) && ((m_vmotor_pos & 0x0f) > 8 && (m_vmotor_pos & 0x0f) <= 0xf);
if (state)
{
@@ -212,48 +292,87 @@ void phantom_state::update_pieces_position(int state)
I/O
******************************************************************************/
-void phantom_state::update_lcd()
+void phantom_state::update_lcd(u8 select)
{
- u8 mask = (m_select & 0x80) ? 0xff : 0;
- for (int i = 0; i < 4; i++)
- m_display->write_row(i+1, (m_lcd_data >> (8*i) & 0xff) ^ mask);
+ // update lcd at any edge
+ if ((select ^ m_select) & 0x80)
+ {
+ u8 mask = (m_select & 0x80) ? 0xff : 0;
+ for (int i = 0; i < 4; i++)
+ m_display->write_row(i+1, (m_lcd_data >> (8*i) & 0xff) ^ mask);
+ }
}
void phantom_state::control_w(offs_t offset, u8 data)
{
+ u8 lcd_prev = m_select;
+
// a0-a2,d1: 74259
- uint8_t mask = 1 << offset;
+ u8 mask = 1 << offset;
m_select = (m_select & ~mask) | ((data & 0x02) ? mask : 0);
// 74259 Q0-Q3: 7442 a0-a3
// 7442 0-8: led data, input mux
// 74259 Q4: led select
- m_display->matrix_partial(0, 1, BIT(~m_select, 4), 1 << (m_select & 0xf));
+ m_mux = m_select & 0xf;
+ m_display->matrix_partial(0, 1, BIT(~m_select, 4), 1 << m_mux);
// 74259 Q6: bookrom bank
m_rombank->set_entry(BIT(m_select, 6));
// 74259 Q7: lcd polarity
- update_lcd();
+ update_lcd(lcd_prev);
}
-void phantom_state::motors_w(u8 data)
+void chessterp_state::control_w(offs_t offset, u8 data)
{
- // bit 0: vertical motor down
- // bit 1: vertical motor up
- // bit 2: horizontal motor left
- // bit 3: horizontal motor right
- // bit 4: electromagnet
- // bit 5: speaker
+ // chesster version has two 74259, more I/O
+ u8 lcd_prev = m_select;
+ u8 nmi_prev = m_select2;
- if ((m_motors_ctrl ^ data) & 0x10)
- update_pieces_position(BIT(data, 4));
+ // a0-a2,d0,d1: 2*74259
+ u8 mask = 1 << offset;
+ m_select = (m_select & ~mask) | ((data & 1) ? mask : 0);
+ m_select2 = (m_select2 & ~mask) | ((data & 2) ? mask : 0);
+
+ // 74259(both) Q0,Q1: 7442 a0-a3
+ // 7442 0-8: led data, input mux
+ // 74259(1) Q2: led select
+ m_mux = BIT(m_select, 0) | BIT(m_select2, 0) << 1 | BIT(m_select, 1) << 2 | BIT(m_select2, 1) << 3;
+ m_display->matrix_partial(0, 1, BIT(~m_select, 2), 1 << m_mux);
+ // 74259(2) Q2: eye leds
+ m_eye_led = BIT(~m_select2, 2);
+
+ // 74259(2) Q3 rising edge: nmi clear
+ if (~nmi_prev & m_select2 & 8)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+
+ // 74259(1) Q4,Q5, 74259(2) Q4: speechrom bank
+ m_rombank->set_entry(BIT(m_select, 4) | (BIT(m_select2, 4) << 1) | (BIT(m_select, 5) << 2));
+
+ // 74259(1) Q7: lcd polarity
+ update_lcd(lcd_prev);
+}
+
+void phantom_state::motors_w(u8 data)
+{
+ // d0: vertical motor down
+ // d1: vertical motor up
+ // d2: horizontal motor left
+ // d3: horizontal motor right
+ // d4: electromagnet
for (int i = 0; i < 5; i++)
m_out_motor[i] = BIT(data, i);
- m_dac->write(BIT(data, 5));
+ if ((m_motors_ctrl ^ data) & 0x10)
+ update_pieces_position(BIT(data, 4));
+
m_motors_ctrl = data;
+
+ // d5: speaker (not for chesster version, though it still writes to it)
+ if (m_dac != nullptr)
+ m_dac->write(BIT(data, 5));
}
void phantom_state::lcd_w(offs_t offset, u8 data)
@@ -265,47 +384,59 @@ void phantom_state::lcd_w(offs_t offset, u8 data)
m_lcd_data = (m_lcd_data & ~mask) | (BIT(data, i * 2) ? mask : 0);
mask <<= 8;
}
-
- update_lcd();
}
u8 phantom_state::input_r(offs_t offset)
{
- uint8_t mux = m_select & 0xf;
- uint8_t data = 0xff;
+ u8 data = 0xff;
- if (mux == 8)
+ // buttons
+ if (m_mux == 8)
{
- if (BIT(m_input->read(), offset * 2 + 1)) data &= ~0x40;
- if (BIT(m_input->read(), offset * 2 + 0)) data &= ~0x80;
+ if (BIT(m_inputs[0]->read(), offset * 2 + 1)) data &= ~0x40;
+ if (BIT(m_inputs[0]->read(), offset * 2 + 0)) data &= ~0x80;
}
+
+ // chessboard sensors
else if (offset < 4)
{
- if (BIT(m_board->read_file(offset * 2 + 1), mux)) data &= ~0x40;
- if (BIT(m_board->read_file(offset * 2 + 0), mux)) data &= ~0x80;
+ if (BIT(m_board->read_file(offset * 2 + 1), m_mux)) data &= ~0x40;
+ if (BIT(m_board->read_file(offset * 2 + 0), m_mux)) data &= ~0x80;
}
+
+ // captured pieces
else
{
- if (BIT(m_board->read_file( 8 + (offset & 1)), mux)) data &= ~0x40; // black captured pieces
- if (BIT(m_board->read_file(11 - (offset & 1)), mux)) data &= ~0x80; // white captured pieces
+ if (BIT(m_board->read_file( 8 + (offset & 1)), m_mux)) data &= ~0x40; // black
+ if (BIT(m_board->read_file(11 - (offset & 1)), m_mux)) data &= ~0x80; // white
}
return data;
}
+u8 chessterp_state::input_r(offs_t offset)
+{
+ u8 data = phantom_state::input_r(offset) & 0xfe;
+
+ // d0: motion sensor (simulated here with an arbitrary timer)
+ int motion = ((machine().time().as_ticks(50) & 0xff) > 0) ? 1 : 0;
+ return data | motion | (m_inputs[1]->read() & 1);
+}
+
u8 phantom_state::motors_r(offs_t offset)
{
- uint8_t data = 0xff;
+ u8 data = 0xff;
+ // optical rotation sensors
switch (offset)
{
case 0:
- if (!m_vmotor_sensor1_ff) data &= ~0x40;
- if (!m_hmotor_sensor1_ff) data &= ~0x80;
+ if (!m_vmotor_sensor1_ff) data &= ~0x40;
+ if (!m_hmotor_sensor1_ff) data &= ~0x80;
break;
case 1:
- if (!m_vmotor_sensor0_ff) data &= ~0x40;
- if (!m_hmotor_sensor0_ff) data &= ~0x80;
+ if (!m_vmotor_sensor0_ff) data &= ~0x40;
+ if (!m_hmotor_sensor0_ff) data &= ~0x80;
break;
}
@@ -316,6 +447,7 @@ u8 phantom_state::irq_ack_r()
{
if (!machine().side_effects_disabled())
m_maincpu->set_input_line(R65C02_IRQ_LINE, CLEAR_LINE);
+
return 0;
}
@@ -345,70 +477,109 @@ void phantom_state::main_map(address_map &map)
{
map(0x0000, 0x1fff).ram();
map(0x2000, 0x2007).mirror(0x00f8).w(FUNC(phantom_state::control_w));
- map(0x2100, 0x2107).w(FUNC(phantom_state::lcd_w)).nopr();
- map(0x2200, 0x2200).w(FUNC(phantom_state::motors_w));
- map(0x2400, 0x2405).r(FUNC(phantom_state::input_r));
- map(0x2406, 0x2407).r(FUNC(phantom_state::motors_r));
- map(0x2500, 0x25ff).r(FUNC(phantom_state::hmotor_ff_clear_r));
- map(0x2600, 0x2600).r(FUNC(phantom_state::vmotor_ff_clear_r));
- map(0x2700, 0x2700).r(FUNC(phantom_state::irq_ack_r));
+ map(0x2100, 0x2107).mirror(0x00f8).w(FUNC(phantom_state::lcd_w)).nopr();
+ map(0x2200, 0x2200).mirror(0x00ff).w(FUNC(phantom_state::motors_w));
+ map(0x2400, 0x2405).mirror(0x00f8).r(FUNC(phantom_state::input_r));
+ map(0x2406, 0x2407).mirror(0x00f8).r(FUNC(phantom_state::motors_r));
+ map(0x2500, 0x2500).mirror(0x00ff).r(FUNC(phantom_state::hmotor_ff_clear_r));
+ map(0x2600, 0x2600).mirror(0x00ff).r(FUNC(phantom_state::vmotor_ff_clear_r));
+ map(0x2700, 0x2700).mirror(0x00ff).r(FUNC(phantom_state::irq_ack_r));
map(0x4000, 0x7fff).bankr("rombank");
map(0x8000, 0xffff).rom();
}
+void chessterp_state::main_map(address_map &map)
+{
+ phantom_state::main_map(map);
+ map(0x2300, 0x2300).mirror(0x00ff).w("speech", FUNC(dac_byte_interface::data_w));
+}
+
/******************************************************************************
Input Ports
******************************************************************************/
-static INPUT_PORTS_START( fphantom )
+static INPUT_PORTS_START( phantom )
PORT_START("IN.0")
- PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Verify / Problem")
- PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Option / Time")
- PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Level / New")
- PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Replay")
- PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Info")
- PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / Alternate")
- PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Auto / Stop")
- PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
+ PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("Verify / Problem")
+ PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Option / Time")
+ PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level / New")
+ PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back / Replay")
+ PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Hint / Info")
+ PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Move / Alternate")
+ PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Auto / Stop")
+ PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Clear")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Shift")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x800, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
+static INPUT_PORTS_START( cphantom )
+ PORT_INCLUDE( phantom )
+
+ PORT_MODIFY("IN.0")
+ PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Option / Replay")
+ PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Info / Auto")
+ PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back / Repeat")
+ PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Hint / Yes")
+ PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Move / No/Stop")
+
+ PORT_START("IN.1") // motion sensor is inverted here, eg. hold down key to pretend noone's there
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_NAME("Motion Sensor")
+INPUT_PORTS_END
+
/******************************************************************************
Machine Configs
******************************************************************************/
-void phantom_state::fphantom(machine_config &config)
+void phantom_state::phantom(machine_config &config)
{
- /* basic machine hardware */
- R65C02(config, m_maincpu, 4.9152_MHz_XTAL); // R65C02P4
- m_maincpu->set_periodic_int(FUNC(phantom_state::irq0_line_assert), attotime::from_hz(600)); // guessed
+ // basic machine hardware
+ R65C02(config, m_maincpu, 4.9152_MHz_XTAL); // R65C02P4 or RP65C02G
m_maincpu->set_addrmap(AS_PROGRAM, &phantom_state::main_map);
+ const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL / 0x2000); // 4060, 600Hz
+ m_maincpu->set_periodic_int(FUNC(phantom_state::irq0_line_assert), irq_period);
+
+ TIMER(config, "motors_timer").configure_periodic(FUNC(phantom_state::motors_timer), irq_period * 5);
+
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->set_size(12, 8);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(100));
- TIMER(config, "motors_timer").configure_periodic(FUNC(phantom_state::motors_timer), attotime::from_hz(120));
-
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1+4, 9);
m_display->set_segmask(0x1e, 0x7f);
config.set_default_layout(layout_fidel_phantom);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
}
+void chessterp_state::cphantom(machine_config &config)
+{
+ phantom(config);
+
+ // basic machine hardware
+ const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / 0x200); // 4060, 9.6kHz
+ timer_device &nmi_clock(TIMER(config, "nmi_clock"));
+ nmi_clock.configure_periodic(FUNC(chessterp_state::nmi_timer), nmi_period);
+ nmi_clock.set_start_delay(nmi_period / 2); // interleaved with irq_period
+
+ config.set_default_layout(layout_fidel_cphantom);
+
+ // sound hardware
+ config.device_remove("dac");
+ DAC_8BIT_R2R(config, "speech").add_route(ALL_OUTPUTS, "speaker", 0.5);
+}
+
/******************************************************************************
@@ -423,6 +594,15 @@ ROM_START( fphantom ) // model 6100, PCB label 510.1128A01
ROM_LOAD("u_4_white.u4", 0x0000, 0x8000, CRC(e4181ba2) SHA1(1f77d1867c6f566be98645fc252a01108f412c96) ) // 27C256
ROM_END
+
+ROM_START( cphantom ) // model 6126, PCB label 510.1128D01
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("pv.u3", 0x8000, 0x8000, CRC(450a9ab5) SHA1(8392c76cf18cd6f8b17c8b12fac40c5cea874941) ) // 27C256
+
+ ROM_REGION( 0x20000, "rombank", 0 )
+ ROM_LOAD("101-1091b02.u4", 0x0000, 0x20000, CRC(fa370e88) SHA1(a937c8f1ec295cf9539d12466993974e40771493) ) // AMI, 27C010 or equivalent
+ROM_END
+
} // anonymous namespace
@@ -431,5 +611,7 @@ ROM_END
Drivers
******************************************************************************/
-// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
-CONS( 1988, fphantom, 0, 0, fphantom, fphantom, phantom_state, init_fphantom, "Fidelity Electronics", "Phantom Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_MECHANICAL )
+// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
+CONS( 1988, fphantom, 0, 0, phantom, phantom, phantom_state, init_phantom, "Fidelity Electronics", "Phantom (Fidelity)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_MECHANICAL )
+
+CONS( 1991, cphantom, 0, 0, cphantom, cphantom, chessterp_state, init_phantom, "Fidelity Electronics", "Chesster Phantom (model 6126)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_MECHANICAL )
diff --git a/src/mame/drivers/goldnpkr.cpp b/src/mame/drivers/goldnpkr.cpp
index 20b383acc18..85bd0b3735c 100644
--- a/src/mame/drivers/goldnpkr.cpp
+++ b/src/mame/drivers/goldnpkr.cpp
@@ -142,6 +142,7 @@
* "Unknown Sisteme France Poker", 198?, Sisteme France.
* Bonne Chance! (Golden Poker prequel HW, set 1), 198?, Unknown.
* Bonne Chance! (Golden Poker prequel HW, set 2), 198?, Unknown.
+ * Boa Sorte! (Golden Poker prequel HW), 198?, Unknown.
* Mundial/Mondial (Italian/French), 1987, Unknown.
* Super 98 (3-hands, ICP-1), 199?, Unknown.
* unknown rocket/animal-themed poker, 199?, Unknown.
@@ -1030,6 +1031,7 @@ public:
void super21p(machine_config &config);
void caspoker(machine_config &config);
void icp_ext(machine_config &config);
+ void gldnirq0(machine_config &config);
void init_vkdlswwh();
void init_icp1db();
@@ -4628,6 +4630,21 @@ void goldnpkr_state::caspoker(machine_config &config)
}
+void goldnpkr_state::gldnirq0(machine_config &config)
+{
+ goldnpkr_base(config);
+
+ mc6845_device &crtc(MC6845(config.replace(), "crtc", CPU_CLOCK)); // 68B45 or 6845s @ CPU clock
+ crtc.set_screen("screen");
+ crtc.set_show_border_area(false);
+ crtc.set_char_width(8);
+ crtc.out_vsync_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+ DISCRETE(config, m_discrete, goldnpkr_discrete).add_route(ALL_OUTPUTS, "mono", 1.0);
+}
+
/*********************************************
* Blitz System *
@@ -11109,17 +11126,19 @@ ROM_START( boasorte )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ic32", 0x4000, 0x4000, CRC(ef0f1e65) SHA1(6a11722ca8089bb57d4e5648266c0f7de9a46303) )
- ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_FILL( 0x0000, 0x4000, 0x0000 ) // filling the R-G bitplanes
- ROM_LOAD( "ic34", 0x4000, 0x2000, CRC(6f23f224) SHA1(243617b9e1050b404020ea581c3e2acf8e5cca81) ) // chars ROM, different cardback logo
- ROM_IGNORE( 0x2000) // 11xxxxxxxxxxxx = 0xFF
+ ROM_REGION( 0x14000, "gfx", 0 )
+ ROM_LOAD( "ic34", 0x0000, 0x4000, CRC(6f23f224) SHA1(243617b9e1050b404020ea581c3e2acf8e5cca81) ) // chars ROM, different cardback logo
+ ROM_LOAD( "ic15", 0x4000, 0x8000, CRC(9b5a50ca) SHA1(07ab334421dfc119939314b7026a60132b02a054) ) // cards deck gfx, bitplane1
+ ROM_LOAD( "ic24", 0xC000, 0x8000, CRC(805f1a73) SHA1(a2f275de377db5dd3b493d10572ac13d5a48c50f) ) // cards deck gfx, bitplane2
- ROM_REGION( 0x6000, "gfx2", 0 )
- ROM_LOAD( "ic15", 0x0000, 0x2000, CRC(9b5a50ca) SHA1(07ab334421dfc119939314b7026a60132b02a054) ) // cards deck gfx, bitplane1
- ROM_IGNORE(0x6000) // BADADDR x---xxxxxxxxxxx
- ROM_LOAD( "ic24", 0x2000, 0x2000, CRC(805f1a73) SHA1(a2f275de377db5dd3b493d10572ac13d5a48c50f) ) // cards deck gfx, bitplane2
- ROM_IGNORE( 0x6000) // BADADDR x---xxxxxxxxxxx
- ROM_COPY( "gfx1", 0x4800, 0x4000, 0x0800 ) // cards deck gfx, bitplane3. found in the 2nd quarter of the char rom
+ ROM_REGION( 0x1800, "gfx1", 0 )
+ ROM_FILL( 0x0000, 0x1000, 0x0000 ) // filling the R-G bitplanes
+ ROM_COPY( "gfx", 0x0000, 0x1000, 0X0800 )
+
+ ROM_REGION( 0x1800, "gfx2", 0 )
+ ROM_COPY( "gfx", 0x8000, 0x0000, 0X0800 )
+ ROM_COPY( "gfx", 0xC000, 0x0800, 0X0800 )
+ ROM_COPY( "gfx", 0x0800, 0x1000, 0X0800 )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "82s129.bin", 0x0000, 0x0100, CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) )
@@ -11926,7 +11945,6 @@ GAMEL( 198?, ngolda, pottnpkr, pottnpkr, ngold, goldnpkr_state, empty_init
GAMEL( 198?, ngoldb, pottnpkr, pottnpkr, ngoldb, goldnpkr_state, empty_init, ROT0, "<unknown>", "Jack Potten's Poker (NGold, set 3)", 0, layout_goldnpkr )
GAMEL( 198?, adpoker, 0, pottnpkr, pottnpkr, goldnpkr_state, empty_init, ROT0, "Amstar?", "Amstar Draw Poker", 0, layout_goldnpkr )
-
GAMEL( 1990, bsuerte, 0, witchcrd, bsuerte, goldnpkr_state, empty_init, ROT0, "<unknown>", "Buena Suerte (Spanish, set 1)", 0, layout_goldnpkr )
GAMEL( 1991, bsuertea, bsuerte, witchcrd, bsuerte, goldnpkr_state, empty_init, ROT0, "<unknown>", "Buena Suerte (Spanish, set 2)", 0, layout_goldnpkr )
GAMEL( 1991, bsuerteb, bsuerte, witchcrd, bsuerte, goldnpkr_state, empty_init, ROT0, "<unknown>", "Buena Suerte (Spanish, set 3)", 0, layout_goldnpkr )
@@ -12023,9 +12041,10 @@ GAMEL( 1995, wtchjackh, wtchjack, wcrdxtnd, wtchjack, goldnpkr_state, empty_init
GAMEL( 1995, wtchjacki, wtchjack, wcrdxtnd, wtchjack, goldnpkr_state, empty_init, ROT0, "Video Klein", "Witch Jack (Export, 6T/12T ver 0.40)", MACHINE_IMPERFECT_GRAPHICS, layout_goldnpkr ) // Ver 0.40 / 1995-02-27
GAMEL( 1994, wtchjackj, wtchjack, wcrdxtnd, wtchjack, goldnpkr_state, empty_init, ROT0, "Video Klein", "Witch Jackpot (Export, 6T/12T ver 0.25)", MACHINE_IMPERFECT_GRAPHICS, layout_goldnpkr ) // Ver 0.25 / 1994-11-24
+
/*************************************** OTHER SETS ***************************************/
-/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
+// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT
GAMEL( 1981, pmpoker, 0, goldnpkr, pmpoker, goldnpkr_state, empty_init, ROT0, "PM / Beck Elektronik", "PlayMan Poker (German)", 0, layout_pmpoker )
GAMEL( 1988, caspoker, 0, caspoker, caspoker, goldnpkr_state, empty_init, ROT0, "PM / Beck Elektronik", "Casino Poker (Ver PM88-01-21, German)", 0, layout_pmpoker )
GAMEL( 1987, caspokera, caspoker, goldnpkr, caspoker, goldnpkr_state, empty_init, ROT0, "PM / Beck Elektronik", "Casino Poker (Ver PM86LO-35-5, German)", 0, layout_pmpoker )
@@ -12050,14 +12069,22 @@ GAMEL( 198?, superdbl, pottnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init
GAME( 198?, pokerdub, 0, pottnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "unknown French poker game", MACHINE_NOT_WORKING ) // lacks of 2nd program ROM.
GAME( 198?, pokersis, 0, bchancep, goldnpkr, goldnpkr_state, empty_init, ROT0, "Sisteme France", "unknown Sisteme France Poker", MACHINE_NOT_WORKING ) // fix banking (4 prgs?)...
-GAMEL( 198?, bchancep, 0, bchancep, goldnpkr, goldnpkr_state, init_bchancep, ROT0, "<unknown>", "Bonne Chance! (Golden Poker prequel HW, set 1)", MACHINE_NOT_WORKING, layout_goldnpkr )
-GAMEL( 198?, bchanceq, 0, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "Bonne Chance! (Golden Poker prequel HW, set 2)", MACHINE_NOT_WORKING, layout_goldnpkr )
-GAMEL( 198?, boasorte, bchanceq, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "Boa Sorte! (Golden Poker prequel HW)", MACHINE_NOT_WORKING, layout_goldnpkr )
-
GAME( 1987, pokermon, 0, mondial, mondial, goldnpkr_state, empty_init, ROT0, "<unknown>", "Mundial/Mondial (Italian/French)", 0 ) // banked selectable program.
GAME( 1998, super98, bsuerte, witchcrd, super98, goldnpkr_state, init_super98, ROT0, "<unknown>", "Super 98 (3-hands, ICP-1)", 0 ) // complex protection. see notes.
GAME( 198?, animpkr, 0, icp_ext, animpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "unknown rocket/animal-themed poker", MACHINE_IMPERFECT_COLORS ) // banked program. how to switch gfx?
-GAME( 1990, megadpkr, 0, megadpkr, megadpkr, blitz_state, empty_init, ROT0, "Blitz System", "Mega Double Poker (conversion kit, version 2.3 MD)", MACHINE_NOT_WORKING )
-GAME( 1990, megadpkrb, megadpkr, megadpkr, megadpkr, blitz_state, empty_init, ROT0, "Blitz System", "Mega Double Poker (conversion kit, version 2.1 MD)", MACHINE_NOT_WORKING ) // may need an extra reset to work the first time
+
+/*************************************** SETS W/IRQ0 ***************************************/
+
+// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT
+GAMEL( 198?, bchancep, 0, gldnirq0, goldnpkr, goldnpkr_state, init_bchancep, ROT0, "<unknown>", "Bonne Chance! (Golden Poker prequel HW, set 1)", 0, layout_goldnpkr )
+GAMEL( 198?, bchanceq, 0, gldnirq0, goldnpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "Bonne Chance! (Golden Poker prequel HW, set 2)", 0, layout_goldnpkr )
+GAMEL( 198?, boasorte, bchanceq, gldnirq0, goldnpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "Boa Sorte! (Golden Poker prequel HW)", 0, layout_goldnpkr )
+
+
+/*************************************** SETS W/MCU ***************************************/
+
+// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
+GAME( 1990, megadpkr, 0, megadpkr, megadpkr, blitz_state, empty_init, ROT0, "Blitz System", "Mega Double Poker (conversion kit, version 2.3 MD)", 0 )
+GAME( 1990, megadpkrb, megadpkr, megadpkr, megadpkr, blitz_state, empty_init, ROT0, "Blitz System", "Mega Double Poker (conversion kit, version 2.1 MD)", 0 )
diff --git a/src/mame/drivers/hh_amis2k.cpp b/src/mame/drivers/hh_amis2k.cpp
index a3886c0a330..53acb036d57 100644
--- a/src/mame/drivers/hh_amis2k.cpp
+++ b/src/mame/drivers/hh_amis2k.cpp
@@ -36,6 +36,10 @@ public:
m_inputs(*this, "IN.%u", 0)
{ }
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
// devices
required_device<amis2000_base_device> m_maincpu;
optional_device<pwm_display_device> m_display;
@@ -43,16 +47,12 @@ public:
optional_ioport_array<4> m_inputs; // max 4
// misc common
- u16 m_a; // MCU address bus
- u8 m_d; // MCU data bus
- int m_f; // MCU F_out pin
- u16 m_inp_mux; // multiplexed inputs mask
+ u16 m_a = 0; // MCU address bus
+ u8 m_d = 0; // MCU data bus
+ int m_f = 0; // MCU F_out pin
+ u16 m_inp_mux = 0; // multiplexed inputs mask
u8 read_inputs(int columns);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
};
@@ -60,12 +60,6 @@ protected:
void hh_amis2k_state::machine_start()
{
- // zerofill
- m_a = 0;
- m_d = 0;
- m_f = 0;
- m_inp_mux = 0;
-
// register for savestates
save_item(NAME(m_a));
save_item(NAME(m_d));
@@ -145,6 +139,12 @@ public:
hh_amis2k_state(mconfig, type, tag)
{ }
+ void wildfire(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
void update_display();
void write_d(u8 data);
void write_a(u16 data);
@@ -152,11 +152,7 @@ public:
void speaker_update();
TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim);
- double m_speaker_volume;
- void wildfire(machine_config &config);
-
-protected:
- virtual void machine_start() override;
+ double m_speaker_volume = 0.0;
std::vector<double> m_speaker_levels;
};
@@ -164,9 +160,6 @@ protected:
void wildfire_state::machine_start()
{
hh_amis2k_state::machine_start();
-
- // zerofill/init
- m_speaker_volume = 0;
save_item(NAME(m_speaker_volume));
}
@@ -236,7 +229,7 @@ static const u8 wildfire_7seg_table[0x10] =
void wildfire_state::wildfire(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
AMI_S2152(config, m_maincpu, 850000); // approximation - RC osc. R=?, C=?
m_maincpu->set_7seg_table(wildfire_7seg_table);
m_maincpu->read_i().set_ioport("IN.0");
@@ -244,13 +237,13 @@ void wildfire_state::wildfire(machine_config &config)
m_maincpu->write_a().set(FUNC(wildfire_state::write_a));
m_maincpu->write_f().set(FUNC(wildfire_state::write_f));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(12, 8);
m_display->set_segmask(7, 0x7f);
m_display->set_bri_levels(0.01, 0.1); // bumpers are dimmed
config.set_default_layout(layout_wildfire);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
diff --git a/src/mame/drivers/hh_cop400.cpp b/src/mame/drivers/hh_cop400.cpp
index 208398c8cd1..b8983aa1175 100644
--- a/src/mame/drivers/hh_cop400.cpp
+++ b/src/mame/drivers/hh_cop400.cpp
@@ -65,6 +65,12 @@ public:
m_inputs(*this, "IN.%u", 0)
{ }
+ virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
// devices
required_device<cop400_cpu_device> m_maincpu;
optional_device<pwm_display_device> m_display;
@@ -72,19 +78,14 @@ public:
optional_ioport_array<6> m_inputs; // max 6
// misc common
- u8 m_l; // MCU port L write data
- u8 m_g; // MCU port G write data
- u8 m_d; // MCU port D write data
- int m_so; // MCU SO line state
- int m_sk; // MCU SK line state
- u16 m_inp_mux; // multiplexed inputs mask
+ u8 m_l = 0; // MCU port L write data
+ u8 m_g = 0; // MCU port G write data
+ u8 m_d = 0; // MCU port D write data
+ int m_so = 0; // MCU SO line state
+ int m_sk = 0; // MCU SK line state
+ u16 m_inp_mux = ~0; // multiplexed inputs mask
u16 read_inputs(int columns, u16 colmask = ~0);
- virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
};
@@ -92,14 +93,6 @@ protected:
void hh_cop400_state::machine_start()
{
- // zerofill
- m_l = 0;
- m_g = 0;
- m_d = 0;
- m_so = 0;
- m_sk = 0;
- m_inp_mux = ~0;
-
// register for savestates
save_item(NAME(m_l));
save_item(NAME(m_g));
@@ -170,10 +163,12 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void ctstein(machine_config &config);
+
+private:
void write_g(u8 data);
void write_l(u8 data);
u8 read_l();
- void ctstein(machine_config &config);
};
// handlers
@@ -220,7 +215,7 @@ INPUT_PORTS_END
void ctstein_state::ctstein(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP421(config, m_maincpu, 850000); // approximation - RC osc. R=12K, C=100pF
m_maincpu->set_config(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_g().set(FUNC(ctstein_state::write_g));
@@ -228,11 +223,11 @@ void ctstein_state::ctstein(machine_config &config)
m_maincpu->write_sk().set(m_speaker, FUNC(speaker_sound_device::level_w));
m_maincpu->read_l().set(FUNC(ctstein_state::read_l));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 4);
config.set_default_layout(layout_ctstein);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -272,14 +267,15 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void h2hsoccerc(machine_config &config);
+ void h2hbaskbc(machine_config &config);
+ void h2hhockeyc(machine_config &config);
+
+private:
void write_d(u8 data);
void write_g(u8 data);
void write_l(u8 data);
u8 read_in();
-
- void h2hsoccerc(machine_config &config);
- void h2hbaskbc(machine_config &config);
- void h2hhockeyc(machine_config &config);
};
// handlers
@@ -367,7 +363,7 @@ INPUT_PORTS_END
void h2hbaskbc_state::h2hbaskbc(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP420(config, m_maincpu, 1000000); // approximation - RC osc. R=43K, C=101pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_d().set(FUNC(h2hbaskbc_state::write_d));
@@ -376,12 +372,12 @@ void h2hbaskbc_state::h2hbaskbc(machine_config &config)
m_maincpu->read_in().set(FUNC(h2hbaskbc_state::read_in));
m_maincpu->write_so().set(m_speaker, FUNC(speaker_sound_device::level_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(16, 7);
m_display->set_segmask(3, 0x7f);
config.set_default_layout(layout_h2hbaskbc);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -430,13 +426,15 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void einvaderc(machine_config &config);
+
+private:
void update_display();
void write_d(u8 data);
void write_g(u8 data);
DECLARE_WRITE_LINE_MEMBER(write_sk);
DECLARE_WRITE_LINE_MEMBER(write_so);
void write_l(u8 data);
- void einvaderc(machine_config &config);
};
// handlers
@@ -499,7 +497,7 @@ INPUT_PORTS_END
void einvaderc_state::einvaderc(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP444L(config, m_maincpu, 850000); // approximation - RC osc. R=47K, C=100pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->read_in().set_ioport("IN.0");
@@ -509,7 +507,7 @@ void einvaderc_state::einvaderc(machine_config &config)
m_maincpu->write_so().set(FUNC(einvaderc_state::write_so));
m_maincpu->write_l().set(FUNC(einvaderc_state::write_l));
- /* video hardware */
+ // video hardware
screen_device &mask(SCREEN(config, "mask", SCREEN_TYPE_SVG));
mask.set_refresh_hz(60);
mask.set_size(919, 1080);
@@ -519,7 +517,7 @@ void einvaderc_state::einvaderc(machine_config &config)
m_display->set_segmask(7, 0x7f);
config.set_default_layout(layout_einvaderc);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -559,12 +557,14 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void unkeinv(machine_config &config);
+
+private:
void update_display();
void write_g(u8 data);
void write_d(u8 data);
void write_l(u8 data);
u8 read_l();
- void unkeinv(machine_config &config);
};
// handlers
@@ -627,7 +627,7 @@ INPUT_PORTS_END
void unkeinv_state::unkeinv(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP421(config, m_maincpu, 850000); // frequency guessed
m_maincpu->set_config(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_g().set(FUNC(unkeinv_state::write_g));
@@ -637,11 +637,11 @@ void unkeinv_state::unkeinv(machine_config &config)
m_maincpu->read_l_tristate().set_constant(0xff);
m_maincpu->write_so().set(m_speaker, FUNC(speaker_sound_device::level_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(6, 8);
config.set_default_layout(layout_unkeinv);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -681,21 +681,24 @@ public:
m_motor_on_out(*this, "motor_on")
{ }
+ void lchicken(machine_config &config);
+
+ DECLARE_READ_LINE_MEMBER(motor_switch_r);
+
+protected:
+ virtual void machine_start() override;
+
+private:
output_finder<> m_motor_pos_out;
output_finder<> m_motor_on_out;
u8 m_motor_pos = 0;
TIMER_DEVICE_CALLBACK_MEMBER(motor_sim_tick);
- DECLARE_READ_LINE_MEMBER(motor_switch_r);
void write_l(u8 data);
void write_d(u8 data);
void write_g(u8 data);
u8 read_g();
- void lchicken(machine_config &config);
-
-protected:
- virtual void machine_start() override;
};
void lchicken_state::machine_start()
@@ -782,7 +785,7 @@ INPUT_PORTS_END
void lchicken_state::lchicken(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP421(config, m_maincpu, 850000); // approximation - RC osc. R=12K, C=100pF
m_maincpu->set_config(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_l().set(FUNC(lchicken_state::write_l));
@@ -794,11 +797,11 @@ void lchicken_state::lchicken(machine_config &config)
TIMER(config, "chicken_motor").configure_periodic(FUNC(lchicken_state::motor_sim_tick), attotime::from_msec(6000/0x100)); // ~6sec for a full rotation
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(3, 4);
config.set_default_layout(layout_lchicken);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -829,13 +832,15 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void funjacks(machine_config &config);
+
+private:
void update_display();
void write_d(u8 data);
void write_l(u8 data);
void write_g(u8 data);
u8 read_l();
u8 read_g();
- void funjacks(machine_config &config);
};
// handlers
@@ -906,7 +911,7 @@ INPUT_PORTS_END
void funjacks_state::funjacks(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP410(config, m_maincpu, 850000); // approximation - RC osc. R=47K, C=56pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_d().set(FUNC(funjacks_state::write_d));
@@ -915,11 +920,11 @@ void funjacks_state::funjacks(machine_config &config)
m_maincpu->read_l().set(FUNC(funjacks_state::read_l));
m_maincpu->read_g().set(FUNC(funjacks_state::read_g));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(4, 2);
config.set_default_layout(layout_funjacks);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -954,11 +959,13 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void funrlgl(machine_config &config);
+
+private:
void update_display();
void write_d(u8 data);
void write_l(u8 data);
void write_g(u8 data);
- void funrlgl(machine_config &config);
};
// handlers
@@ -1006,7 +1013,7 @@ INPUT_PORTS_END
void funrlgl_state::funrlgl(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP410(config, m_maincpu, 800000); // approximation - RC osc. R=51K, C=91pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_d().set(FUNC(funrlgl_state::write_d));
@@ -1015,12 +1022,12 @@ void funrlgl_state::funrlgl(machine_config &config)
m_maincpu->write_g().set(FUNC(funrlgl_state::write_g));
m_maincpu->read_g().set_ioport("IN.0");
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(4, 4);
m_display->set_bri_levels(0.005, 0.1); // top led is brighter
config.set_default_layout(layout_funrlgl);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1051,13 +1058,15 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void funtag(machine_config &config);
+
+private:
void update_display();
void write_d(u8 data);
void write_l(u8 data);
void write_g(u8 data);
u8 read_l();
u8 read_g();
- void funtag(machine_config &config);
};
// handlers
@@ -1127,7 +1136,7 @@ INPUT_PORTS_END
void funtag_state::funtag(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP410(config, m_maincpu, 1000000); // approximation - RC osc. R=47K, C=91pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_d().set(FUNC(funtag_state::write_d));
@@ -1136,11 +1145,11 @@ void funtag_state::funtag(machine_config &config)
m_maincpu->read_l().set(FUNC(funtag_state::read_l));
m_maincpu->read_g().set(FUNC(funtag_state::read_g));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(4, 2);
config.set_default_layout(layout_funtag);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1182,8 +1191,15 @@ public:
m_on_timer(*this, "on_timer")
{ }
+ void mbaskb2(machine_config &config);
+ void msoccer2(machine_config &config);
+
DECLARE_CUSTOM_INPUT_MEMBER(switch_r);
+protected:
+ virtual void machine_reset() override;
+
+private:
required_device<cop400_cpu_device> m_subcpu;
required_device<timer_device> m_on_timer;
@@ -1193,12 +1209,6 @@ public:
void sub_write_g(u8 data);
void sub_write_d(u8 data);
u8 sub_read_in();
-
- void mbaskb2(machine_config &config);
- void msoccer2(machine_config &config);
-
-protected:
- virtual void machine_reset() override;
};
void mbaskb2_state::machine_reset()
@@ -1291,7 +1301,7 @@ INPUT_PORTS_END
void mbaskb2_state::mbaskb2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP420(config, m_maincpu, 500000); // approximation
m_maincpu->set_config(COP400_CKI_DIVISOR_8, COP400_CKO_SYNC_INPUT, false); // guessed
m_maincpu->write_g().set(FUNC(mbaskb2_state::main_write_g));
@@ -1315,13 +1325,13 @@ void mbaskb2_state::mbaskb2(machine_config &config)
TIMER(config, "on_timer").configure_generic(nullptr);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 7);
m_display->set_segmask(0xc0, 0x7f);
m_display->set_bri_levels(0.008, 0.04); // offense is brighter
config.set_default_layout(layout_mbaskb2);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1372,11 +1382,13 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void lafootb(machine_config &config);
+
+private:
void update_display();
void write_l(u8 data);
void write_d(u8 data);
u8 read_g();
- void lafootb(machine_config &config);
};
// handlers
@@ -1428,7 +1440,7 @@ INPUT_PORTS_END
void lafootb_state::lafootb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP421(config, m_maincpu, 900000); // approximation - RC osc. R=51K, C=100pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_l().set(FUNC(lafootb_state::write_l));
@@ -1436,7 +1448,7 @@ void lafootb_state::lafootb(machine_config &config)
m_maincpu->read_g().set(FUNC(lafootb_state::read_g));
m_maincpu->write_sk().set(m_speaker, FUNC(speaker_sound_device::level_w));
- /* video hardware */
+ // video hardware
screen_device &mask(SCREEN(config, "mask", SCREEN_TYPE_SVG));
mask.set_refresh_hz(60);
mask.set_size(1920, 864);
@@ -1448,7 +1460,7 @@ void lafootb_state::lafootb(machine_config &config)
m_display->set_bri_levels(0.005);
config.set_default_layout(layout_lafootb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1484,12 +1496,14 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void mdallas(machine_config &config);
+
+private:
void update_display();
void write_l(u8 data);
void write_d(u8 data);
void write_g(u8 data);
u8 read_in();
- void mdallas(machine_config &config);
};
// handlers
@@ -1580,7 +1594,7 @@ INPUT_PORTS_END
void mdallas_state::mdallas(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP444L(config, m_maincpu, 1000000); // approximation - RC osc. R=57K, C=101pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_l().set(FUNC(mdallas_state::write_l));
@@ -1589,12 +1603,12 @@ void mdallas_state::mdallas(machine_config &config)
m_maincpu->read_in().set(FUNC(mdallas_state::read_in));
m_maincpu->write_so().set(m_speaker, FUNC(speaker_sound_device::level_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 8);
m_display->set_segmask(0xff, 0xff);
config.set_default_layout(layout_mdallas);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1628,10 +1642,12 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void plus1(machine_config &config);
+
+private:
void write_d(u8 data);
void write_l(u8 data);
u8 read_l();
- void plus1(machine_config &config);
};
// handlers
@@ -1672,7 +1688,7 @@ INPUT_PORTS_END
void plus1_state::plus1(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP410(config, m_maincpu, 1000000); // approximation - RC osc. R=51K, C=100pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_d().set(FUNC(plus1_state::write_d));
@@ -1680,9 +1696,9 @@ void plus1_state::plus1(machine_config &config)
m_maincpu->write_l().set(FUNC(plus1_state::write_l));
m_maincpu->read_l().set(FUNC(plus1_state::read_l));
- /* no visual feedback! */
+ // no visual feedback!
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1725,12 +1741,14 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void lightfgt(machine_config &config);
+
+private:
void update_display();
DECLARE_WRITE_LINE_MEMBER(write_so);
void write_d(u8 data);
void write_l(u8 data);
u8 read_g();
- void lightfgt(machine_config &config);
};
// handlers
@@ -1806,7 +1824,7 @@ INPUT_PORTS_END
void lightfgt_state::lightfgt(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP421(config, m_maincpu, 950000); // approximation - RC osc. R=82K, C=56pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_so().set(FUNC(lightfgt_state::write_so));
@@ -1815,11 +1833,11 @@ void lightfgt_state::lightfgt(machine_config &config)
m_maincpu->write_sk().set(m_speaker, FUNC(speaker_sound_device::level_w));
m_maincpu->read_g().set(FUNC(lightfgt_state::read_g));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(5, 5);
config.set_default_layout(layout_lightfgt);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1851,12 +1869,14 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void bship82(machine_config &config);
+
+private:
void write_d(u8 data);
void write_g(u8 data);
u8 read_l();
u8 read_in();
DECLARE_WRITE_LINE_MEMBER(write_so);
- void bship82(machine_config &config);
};
// handlers
@@ -1957,7 +1977,7 @@ INPUT_PORTS_END
void bship82_state::bship82(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP420(config, m_maincpu, 750000); // approximation - RC osc. R=14K, C=100pF
m_maincpu->set_config(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_d().set(FUNC(bship82_state::write_d));
@@ -1967,11 +1987,11 @@ void bship82_state::bship82(machine_config &config)
m_maincpu->write_so().set(FUNC(bship82_state::write_so));
m_maincpu->read_si().set_ioport("IN.4");
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 1);
config.set_default_layout(layout_bship82);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[8] = { 0.0, 1.0/7.0, 2.0/7.0, 3.0/7.0, 4.0/7.0, 5.0/7.0, 6.0/7.0, 1.0 };
@@ -2008,13 +2028,15 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void qkracer(machine_config &config);
+
+private:
void update_display();
void write_d(u8 data);
void write_g(u8 data);
void write_l(u8 data);
u8 read_in();
DECLARE_WRITE_LINE_MEMBER(write_sk);
- void qkracer(machine_config &config);
};
// handlers
@@ -2096,7 +2118,7 @@ INPUT_PORTS_END
void qkracer_state::qkracer(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP420(config, m_maincpu, 950000); // approximation - RC osc. R=47K, C=100pF
m_maincpu->set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_d().set(FUNC(qkracer_state::write_d));
@@ -2105,13 +2127,13 @@ void qkracer_state::qkracer(machine_config &config)
m_maincpu->read_in().set(FUNC(qkracer_state::read_in));
m_maincpu->write_sk().set(FUNC(qkracer_state::write_sk));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 7);
m_display->set_segmask(0xdf, 0x7f);
m_display->set_segmask(0x20, 0x41); // equals sign
config.set_default_layout(layout_qkracer);
- /* no sound! */
+ // no sound!
}
// roms
@@ -2151,13 +2173,16 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void scat(machine_config &config);
+
+private:
+ void main_map(address_map &map);
+
void update_display();
void write_d(u8 data);
void write_g(u8 data);
void write_l(u8 data);
u8 read_in();
- void main_map(address_map &map);
- void scat(machine_config &config);
};
// handlers
@@ -2243,7 +2268,7 @@ INPUT_PORTS_END
void scat_state::scat(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP404L(config, m_maincpu, 1500000); // R/C OSC via MM74C14N
m_maincpu->set_config(COP400_CKI_DIVISOR_32, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->set_addrmap(AS_PROGRAM, &scat_state::main_map);
@@ -2252,12 +2277,12 @@ void scat_state::scat(machine_config &config)
m_maincpu->write_l().set(FUNC(scat_state::write_l));
m_maincpu->read_in().set(FUNC(scat_state::read_in));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 8);
m_display->set_segmask(0xff, 0xff);
config.set_default_layout(layout_scat);
- /* no sound! */
+ // no sound!
}
// roms
@@ -2295,11 +2320,13 @@ public:
hh_cop400_state(mconfig, type, tag)
{ }
+ void vidchal(machine_config &config);
+
+private:
void update_display();
void write_d(u8 data);
void write_l(u8 data);
DECLARE_WRITE_LINE_MEMBER(write_sk);
- void vidchal(machine_config &config);
};
// handlers
@@ -2342,7 +2369,7 @@ INPUT_PORTS_END
void vidchal_state::vidchal(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
COP420(config, m_maincpu, 900000); // approximation
m_maincpu->set_config(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
m_maincpu->write_d().set(FUNC(vidchal_state::write_d));
@@ -2351,12 +2378,12 @@ void vidchal_state::vidchal(machine_config &config)
m_maincpu->read_in().set_ioport("IN.0");
m_maincpu->write_sk().set(FUNC(vidchal_state::write_sk));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(6+1, 8);
m_display->set_segmask(0x3f, 0xff);
config.set_default_layout(layout_vidchal);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
DAC_4BIT_BINARY_WEIGHTED_SIGN_MAGNITUDE(config, "dac").add_route(ALL_OUTPUTS, "mono", 0.125); // unknown DAC
}
diff --git a/src/mame/drivers/hh_cops1.cpp b/src/mame/drivers/hh_cops1.cpp
index e36cfc0d8fe..aef775d03b5 100644
--- a/src/mame/drivers/hh_cops1.cpp
+++ b/src/mame/drivers/hh_cops1.cpp
@@ -48,6 +48,10 @@ public:
m_inputs(*this, "IN.%u", 0)
{ }
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
// devices
required_device<cops1_base_device> m_maincpu;
optional_device<pwm_display_device> m_display;
@@ -64,10 +68,6 @@ public:
int m_blk = false;
u8 read_inputs(int columns);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
};
@@ -152,17 +152,18 @@ public:
hh_cops1_state(mconfig, type, tag)
{ }
+ void mbaskb(machine_config &config);
+ void msoccer(machine_config &config);
+ void mhockey(machine_config &config);
+ void mhockeya(machine_config &config);
+
+private:
void update_display();
void write_do(u8 data);
void write_blk(int state);
void write_s(u8 data);
void write_f(u8 data);
u8 read_f();
-
- void mbaskb(machine_config &config);
- void msoccer(machine_config &config);
- void mhockey(machine_config &config);
- void mhockeya(machine_config &config);
};
// handlers
@@ -244,7 +245,7 @@ INPUT_PORTS_END
void mbaskb_state::mbaskb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM5799(config, m_maincpu, 370000); // approximation
m_maincpu->write_do().set(FUNC(mbaskb_state::write_do));
m_maincpu->write_blk().set(FUNC(mbaskb_state::write_blk));
@@ -254,13 +255,13 @@ void mbaskb_state::mbaskb(machine_config &config)
m_maincpu->read_k().set_ioport("IN.0");
m_maincpu->read_inb().set_ioport("IN.1");
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 7);
m_display->set_segmask(3, 0x7f);
m_display->set_bri_levels(0.015, 0.2); // ball led is brighter
config.set_default_layout(layout_mbaskb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
@@ -351,6 +352,9 @@ public:
m_ds8874(*this, "ds8874")
{ }
+ void qkracerm(machine_config &config);
+
+private:
required_device<ds8874_device> m_ds8874;
void ds8874_output_w(u16 data);
@@ -360,7 +364,6 @@ public:
u8 read_f();
u8 read_k();
int read_si();
- void qkracerm(machine_config &config);
};
// handlers
@@ -450,7 +453,7 @@ INPUT_PORTS_END
void qkracerm_state::qkracerm(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM5799(config, m_maincpu, 220000); // approximation
m_maincpu->set_option_ram_d12(true);
m_maincpu->set_option_lb_10(5);
@@ -460,14 +463,14 @@ void qkracerm_state::qkracerm(machine_config &config)
m_maincpu->read_k().set(FUNC(qkracerm_state::read_k));
m_maincpu->read_si().set(FUNC(qkracerm_state::read_si));
- /* video hardware */
+ // video hardware
DS8874(config, m_ds8874).write_output().set(FUNC(qkracerm_state::ds8874_output_w));
PWM_DISPLAY(config, m_display).set_size(9, 7);
m_display->set_segmask(0xdf, 0x7f);
m_display->set_segmask(0x20, 0x41); // equals sign
config.set_default_layout(layout_qkracerm);
- /* no sound! */
+ // no sound!
}
// roms
@@ -508,13 +511,15 @@ public:
hh_cops1_state(mconfig, type, tag)
{ }
+ void qkspeller(machine_config &config);
+
+private:
void update_display();
void write_do(u8 data);
void write_s(u8 data);
void write_f(u8 data);
u8 read_f();
u8 read_k();
- void qkspeller(machine_config &config);
};
// handlers
@@ -630,7 +635,7 @@ INPUT_PORTS_END
void qkspeller_state::qkspeller(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM5799(config, m_maincpu, 220000); // approximation
m_maincpu->write_do().set(FUNC(qkspeller_state::write_do));
m_maincpu->write_s().set(FUNC(qkspeller_state::write_s));
@@ -640,12 +645,12 @@ void qkspeller_state::qkspeller(machine_config &config)
m_maincpu->read_inb().set_ioport("TEST.0");
m_maincpu->read_do3().set_ioport("TEST.1");
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(4, 7);
m_display->set_segmask(3, 0x7f);
config.set_default_layout(layout_qkspeller);
- /* no sound! */
+ // no sound!
}
// roms
@@ -695,6 +700,9 @@ public:
m_ds8874(*this, "ds8874")
{ }
+ void cambrp(machine_config &config);
+
+private:
required_device<ds8874_device> m_ds8874;
void ds8874_output_w(u16 data);
@@ -703,7 +711,6 @@ public:
void write_s(u8 data);
u8 read_f();
u8 read_k();
- void cambrp(machine_config &config);
};
// handlers
@@ -789,7 +796,7 @@ INPUT_PORTS_END
void cambrp_state::cambrp(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM5799(config, m_maincpu, 200000); // approximation
m_maincpu->set_option_ram_d12(true);
m_maincpu->set_option_lb_10(4);
@@ -798,13 +805,13 @@ void cambrp_state::cambrp(machine_config &config)
m_maincpu->read_f().set(FUNC(cambrp_state::read_f));
m_maincpu->read_k().set(FUNC(cambrp_state::read_k));
- /* video hardware */
+ // video hardware
DS8874(config, m_ds8874).write_output().set(FUNC(cambrp_state::ds8874_output_w));
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x1ff, 0xff);
config.set_default_layout(layout_cambrp);
- /* no sound! */
+ // no sound!
}
// roms
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index 9e4626f83ef..0c69858ca4a 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -156,6 +156,12 @@ public:
m_inputs(*this, "IN.%u", 0)
{ }
+ DECLARE_INPUT_CHANGED_MEMBER(single_interrupt_line);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
// devices
required_device<hmcs40_cpu_device> m_maincpu;
optional_device<pwm_display_device> m_display;
@@ -163,22 +169,17 @@ public:
optional_ioport_array<7> m_inputs; // max 7
// misc common
- u8 m_r[8]; // MCU R ports write data (optional)
- u16 m_d; // MCU D port write data (optional)
- u8 m_int[2]; // MCU INT0/1 pins state
- u16 m_inp_mux; // multiplexed inputs mask
+ u8 m_r[8] = { }; // MCU R ports write data (optional)
+ u16 m_d = 0; // MCU D port write data (optional)
+ u8 m_int[2] = { }; // MCU INT0/1 pins state
+ u16 m_inp_mux = 0; // multiplexed inputs mask
- u32 m_grid; // VFD current row data
- u64 m_plate; // VFD current column data
+ u32 m_grid = 0; // VFD current row data
+ u64 m_plate = 0; // VFD current column data
u16 read_inputs(int columns);
void refresh_interrupts(void);
void set_interrupt(int line, int state);
- DECLARE_INPUT_CHANGED_MEMBER(single_interrupt_line);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
};
@@ -186,14 +187,6 @@ protected:
void hh_hmcs40_state::machine_start()
{
- // zerofill
- memset(m_r, 0, sizeof(m_r));
- memset(m_int, 0, sizeof(m_int));
- m_d = 0;
- m_inp_mux = 0;
- m_grid = 0;
- m_plate = 0;
-
// register for savestates
save_item(NAME(m_r));
save_item(NAME(m_int));
@@ -283,10 +276,12 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void bambball(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u8 input_r();
- void bambball(machine_config &config);
};
// handlers
@@ -354,7 +349,7 @@ INPUT_PORTS_END
void bambball_state::bambball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38750(config, m_maincpu, 400000); // approximation
m_maincpu->read_r<0>().set(FUNC(bambball_state::input_r));
m_maincpu->write_r<1>().set(FUNC(bambball_state::plate_w));
@@ -362,7 +357,7 @@ void bambball_state::bambball(machine_config &config)
m_maincpu->write_r<3>().set(FUNC(bambball_state::plate_w));
m_maincpu->write_d().set(FUNC(bambball_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 478);
@@ -371,7 +366,7 @@ void bambball_state::bambball(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 16);
config.set_default_layout(layout_bambball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -407,11 +402,13 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void bmboxing(machine_config &config);
+
+private:
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u8 input_r();
- void bmboxing(machine_config &config);
};
// handlers
@@ -501,7 +498,7 @@ INPUT_PORTS_END
void bmboxing_state::bmboxing(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38750(config, m_maincpu, 400000); // approximation
m_maincpu->read_r<0>().set(FUNC(bmboxing_state::input_r));
m_maincpu->write_r<1>().set(FUNC(bmboxing_state::plate_w));
@@ -510,7 +507,7 @@ void bmboxing_state::bmboxing(machine_config &config)
m_maincpu->write_d().set(FUNC(bmboxing_state::grid_w));
m_maincpu->read_d().set_ioport("IN.4");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 529);
@@ -518,7 +515,7 @@ void bmboxing_state::bmboxing(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 12);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -554,13 +551,15 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void bfriskyt(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); }
+
+private:
+ void update_int1();
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
-
- void update_int1();
- DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); }
- void bfriskyt(machine_config &config);
};
// handlers
@@ -631,7 +630,7 @@ INPUT_PORTS_END
void bfriskyt_state::bfriskyt(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(bfriskyt_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(bfriskyt_state::plate_w));
@@ -639,7 +638,7 @@ void bfriskyt_state::bfriskyt(machine_config &config)
m_maincpu->write_r<3>().set(FUNC(bfriskyt_state::plate_w));
m_maincpu->write_d().set(FUNC(bfriskyt_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 675);
@@ -647,7 +646,7 @@ void bfriskyt_state::bfriskyt(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 22);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -689,10 +688,12 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void packmon(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u16 input_r();
- void packmon(machine_config &config);
};
// handlers
@@ -751,7 +752,7 @@ INPUT_PORTS_END
void packmon_state::packmon(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(packmon_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(packmon_state::plate_w));
@@ -760,7 +761,7 @@ void packmon_state::packmon(machine_config &config)
m_maincpu->write_d().set(FUNC(packmon_state::grid_w));
m_maincpu->read_d().set(FUNC(packmon_state::input_r));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 680);
@@ -769,7 +770,7 @@ void packmon_state::packmon(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 20);
config.set_default_layout(layout_packmon);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -806,12 +807,14 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
- void plate_w(offs_t offset, u8 data);
- void grid_w(u16 data);
+ void bzaxxon(machine_config &config);
- void update_int1();
DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); }
- void bzaxxon(machine_config &config);
+
+private:
+ void update_int1();
+ void plate_w(offs_t offset, u8 data);
+ void grid_w(u16 data);
};
// handlers
@@ -879,7 +882,7 @@ INPUT_PORTS_END
void bzaxxon_state::bzaxxon(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 450000); // approximation
m_maincpu->write_r<0>().set(FUNC(bzaxxon_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(bzaxxon_state::plate_w));
@@ -888,7 +891,7 @@ void bzaxxon_state::bzaxxon(machine_config &config)
m_maincpu->write_d().set(FUNC(bzaxxon_state::grid_w));
m_maincpu->read_d().set_ioport("IN.5");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(613, 1080);
@@ -896,7 +899,7 @@ void bzaxxon_state::bzaxxon(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(11, 20);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -935,12 +938,14 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
- void plate_w(offs_t offset, u8 data);
- void grid_w(u16 data);
+ void zackman(machine_config &config);
- void update_int0();
DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
- void zackman(machine_config &config);
+
+private:
+ void update_int0();
+ void plate_w(offs_t offset, u8 data);
+ void grid_w(u16 data);
};
// handlers
@@ -1004,7 +1009,7 @@ INPUT_PORTS_END
void zackman_state::zackman(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(zackman_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(zackman_state::plate_w));
@@ -1015,7 +1020,7 @@ void zackman_state::zackman(machine_config &config)
m_maincpu->write_r<6>().set(FUNC(zackman_state::plate_w));
m_maincpu->write_d().set(FUNC(zackman_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(487, 1080);
@@ -1023,7 +1028,7 @@ void zackman_state::zackman(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 29);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1059,13 +1064,15 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void bpengo(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
+
+private:
+ void update_int0();
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
-
- void update_int0();
- DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
- void bpengo(machine_config &config);
};
// handlers
@@ -1136,7 +1143,7 @@ INPUT_PORTS_END
void bpengo_state::bpengo(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(bpengo_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(bpengo_state::plate_w));
@@ -1148,7 +1155,7 @@ void bpengo_state::bpengo(machine_config &config)
m_maincpu->write_d().set(FUNC(bpengo_state::grid_w));
m_maincpu->read_d().set_ioport("IN.5");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 759);
@@ -1156,7 +1163,7 @@ void bpengo_state::bpengo(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 25);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1192,13 +1199,15 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void bbtime(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
+
+private:
+ void update_int0();
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
-
- void update_int0();
- DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
- void bbtime(machine_config &config);
};
// handlers
@@ -1266,7 +1275,7 @@ INPUT_PORTS_END
void bbtime_state::bbtime(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(bbtime_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(bbtime_state::plate_w));
@@ -1277,7 +1286,7 @@ void bbtime_state::bbtime(machine_config &config)
m_maincpu->write_r<6>().set(FUNC(bbtime_state::plate_w));
m_maincpu->write_d().set(FUNC(bbtime_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(379, 1080);
@@ -1285,7 +1294,7 @@ void bbtime_state::bbtime(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(6, 28);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1321,9 +1330,11 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void bdoramon(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
- void bdoramon(machine_config &config);
};
// handlers
@@ -1376,7 +1387,7 @@ INPUT_PORTS_END
void bdoramon_state::bdoramon(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(bdoramon_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(bdoramon_state::plate_w));
@@ -1386,7 +1397,7 @@ void bdoramon_state::bdoramon(machine_config &config)
m_maincpu->write_d().set(FUNC(bdoramon_state::grid_w));
m_maincpu->read_d().set_ioport("IN.2");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 668);
@@ -1394,7 +1405,7 @@ void bdoramon_state::bdoramon(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 19);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1430,9 +1441,11 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void bultrman(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
- void bultrman(machine_config &config);
};
// handlers
@@ -1478,7 +1491,7 @@ INPUT_PORTS_END
void bultrman_state::bultrman(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 350000); // approximation
m_maincpu->write_r<0>().set(FUNC(bultrman_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(bultrman_state::plate_w));
@@ -1487,7 +1500,7 @@ void bultrman_state::bultrman(machine_config &config)
m_maincpu->write_d().set(FUNC(bultrman_state::grid_w));
m_maincpu->read_d().set_ioport("IN.1");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 673);
@@ -1495,7 +1508,7 @@ void bultrman_state::bultrman(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 18);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1531,10 +1544,12 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void machiman(machine_config &config);
+
+private:
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
- void machiman(machine_config &config);
};
// handlers
@@ -1577,7 +1592,7 @@ INPUT_PORTS_END
void machiman_state::machiman(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(machiman_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(machiman_state::plate_w));
@@ -1587,7 +1602,7 @@ void machiman_state::machiman(machine_config &config)
m_maincpu->write_d().set(FUNC(machiman_state::grid_w));
m_maincpu->read_d().set_ioport("IN.1");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1534, 1080);
@@ -1595,7 +1610,7 @@ void machiman_state::machiman(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(5, 19);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1638,6 +1653,9 @@ public:
m_soundlatch(*this, "soundlatch%u", 0)
{ }
+ void pairmtch(machine_config &config);
+
+private:
required_device<hmcs40_cpu_device> m_audiocpu;
required_device_array<generic_latch_8_device, 2> m_soundlatch;
@@ -1649,7 +1667,6 @@ public:
void sound_w(u8 data);
void sound2_w(u8 data);
void speaker_w(u16 data);
- void pairmtch(machine_config &config);
};
// handlers: maincpu side
@@ -1745,7 +1762,7 @@ INPUT_PORTS_END
void pairmtch_state::pairmtch(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<2>().set(FUNC(pairmtch_state::plate_w));
m_maincpu->write_r<3>().set(FUNC(pairmtch_state::plate_w));
@@ -1763,11 +1780,11 @@ void pairmtch_state::pairmtch(machine_config &config)
config.set_perfect_quantum(m_maincpu);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(6, 12);
config.set_default_layout(layout_pairmtch);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1809,10 +1826,12 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void alnattck(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u16 input_r();
- void alnattck(machine_config &config);
};
// handlers
@@ -1878,7 +1897,7 @@ INPUT_PORTS_END
void alnattck_state::alnattck(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(alnattck_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(alnattck_state::plate_w));
@@ -1887,7 +1906,7 @@ void alnattck_state::alnattck(machine_config &config)
m_maincpu->write_d().set(FUNC(alnattck_state::grid_w));
m_maincpu->read_d().set(FUNC(alnattck_state::input_r));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 700);
@@ -1895,7 +1914,7 @@ void alnattck_state::alnattck(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 20);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1932,27 +1951,26 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void cdkong(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
void speaker_update();
TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim);
- double m_speaker_volume;
- void cdkong(machine_config &config);
-
-protected:
- virtual void machine_start() override;
+ double m_speaker_volume = 0.0;
std::vector<double> m_speaker_levels;
};
void cdkong_state::machine_start()
{
hh_hmcs40_state::machine_start();
-
- // zerofill/init
- m_speaker_volume = 0;
save_item(NAME(m_speaker_volume));
}
@@ -2019,7 +2037,7 @@ INPUT_PORTS_END
void cdkong_state::cdkong(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(cdkong_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(cdkong_state::plate_w));
@@ -2031,7 +2049,7 @@ void cdkong_state::cdkong(machine_config &config)
m_maincpu->write_d().set(FUNC(cdkong_state::grid_w));
m_maincpu->read_d().set_ioport("IN.1");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(605, 1080);
@@ -2039,7 +2057,7 @@ void cdkong_state::cdkong(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(11, 29);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2090,13 +2108,15 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void cgalaxn(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(player_switch);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(u16 data);
u8 input_r();
-
- DECLARE_INPUT_CHANGED_MEMBER(player_switch);
- void cgalaxn(machine_config &config);
};
// handlers
@@ -2169,7 +2189,7 @@ INPUT_PORTS_END
void cgalaxn_state::cgalaxn(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->read_r<0>().set(FUNC(cgalaxn_state::input_r));
m_maincpu->write_r<1>().set(FUNC(cgalaxn_state::grid_w));
@@ -2177,7 +2197,7 @@ void cgalaxn_state::cgalaxn(machine_config &config)
m_maincpu->write_r<3>().set(FUNC(cgalaxn_state::grid_w));
m_maincpu->write_d().set(FUNC(cgalaxn_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(526, 1080);
@@ -2185,7 +2205,7 @@ void cgalaxn_state::cgalaxn(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(12, 15);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -2233,10 +2253,12 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void cpacman(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u8 input_r();
- void cpacman(machine_config &config);
};
// handlers
@@ -2298,7 +2320,7 @@ INPUT_PORTS_END
void cpacman_state::cpacman(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->read_r<0>().set(FUNC(cpacman_state::input_r));
m_maincpu->write_r<1>().set(FUNC(cpacman_state::plate_w));
@@ -2309,7 +2331,7 @@ void cpacman_state::cpacman(machine_config &config)
m_maincpu->write_r<6>().set(FUNC(cpacman_state::plate_w));
m_maincpu->write_d().set(FUNC(cpacman_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(484, 1080);
@@ -2317,7 +2339,7 @@ void cpacman_state::cpacman(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(11, 27);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -2369,10 +2391,12 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void cmspacmn(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u8 input_r();
- void cmspacmn(machine_config &config);
};
// handlers
@@ -2434,7 +2458,7 @@ INPUT_PORTS_END
void cmspacmn_state::cmspacmn(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->read_r<0>().set(FUNC(cmspacmn_state::input_r));
m_maincpu->write_r<1>().set(FUNC(cmspacmn_state::plate_w));
@@ -2445,7 +2469,7 @@ void cmspacmn_state::cmspacmn(machine_config &config)
m_maincpu->write_r<6>().set(FUNC(cmspacmn_state::plate_w));
m_maincpu->write_d().set(FUNC(cmspacmn_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(481, 1080);
@@ -2453,7 +2477,7 @@ void cmspacmn_state::cmspacmn(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(12, 33);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -2493,11 +2517,13 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void egalaxn2(machine_config &config);
+
+private:
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u8 input_r();
- void egalaxn2(machine_config &config);
};
// handlers
@@ -2570,7 +2596,7 @@ INPUT_PORTS_END
void egalaxn2_state::egalaxn2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->read_r<0>().set(FUNC(egalaxn2_state::input_r));
m_maincpu->write_r<1>().set(FUNC(egalaxn2_state::plate_w));
@@ -2581,7 +2607,7 @@ void egalaxn2_state::egalaxn2(machine_config &config)
m_maincpu->write_r<6>().set(FUNC(egalaxn2_state::plate_w));
m_maincpu->write_d().set(FUNC(egalaxn2_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(505, 1080);
@@ -2589,7 +2615,7 @@ void egalaxn2_state::egalaxn2(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(15, 24);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -2668,7 +2694,7 @@ void epacman2_state::epacman2(machine_config &config)
{
egalaxn2(config);
- /* video hardware */
+ // video hardware
screen_device *screen = subdevice<screen_device>("screen");
screen->set_size(505, 1080);
screen->set_visarea_full();
@@ -2719,11 +2745,13 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void einvader2(machine_config &config);
+
+private:
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u16 input_r();
- void einvader2(machine_config &config);
};
// handlers
@@ -2786,7 +2814,7 @@ INPUT_PORTS_END
void einvader2_state::einvader2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 450000); // approximation
m_maincpu->write_r<0>().set(FUNC(einvader2_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(einvader2_state::plate_w));
@@ -2795,7 +2823,7 @@ void einvader2_state::einvader2(machine_config &config)
m_maincpu->write_d().set(FUNC(einvader2_state::grid_w));
m_maincpu->read_d().set(FUNC(einvader2_state::input_r));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(469, 1080);
@@ -2803,7 +2831,7 @@ void einvader2_state::einvader2(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(12, 14);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -2838,35 +2866,34 @@ class eturtles_state : public hh_hmcs40_state
public:
eturtles_state(const machine_config &mconfig, device_type type, const char *tag) :
hh_hmcs40_state(mconfig, type, tag),
- m_audiocpu(*this, "audiocpu"),
- m_cop_irq(0)
+ m_audiocpu(*this, "audiocpu")
{ }
+ void eturtles(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int(); }
+
+protected:
+ virtual void machine_start() override;
+
required_device<cop411_cpu_device> m_audiocpu;
+ void update_int();
virtual void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
- u8 m_cop_irq;
DECLARE_WRITE_LINE_MEMBER(speaker_w);
void cop_irq_w(u8 data);
u8 cop_latch_r();
u8 cop_ack_r();
- void update_int();
- DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int(); }
- void eturtles(machine_config &config);
-
-protected:
- virtual void machine_start() override;
+ u8 m_cop_irq = 0;
};
void eturtles_state::machine_start()
{
hh_hmcs40_state::machine_start();
-
- // register for savestates
save_item(NAME(m_cop_irq));
}
@@ -2975,7 +3002,7 @@ INPUT_PORTS_END
void eturtles_state::eturtles(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(eturtles_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(eturtles_state::plate_w));
@@ -2995,7 +3022,7 @@ void eturtles_state::eturtles(machine_config &config)
config.set_perfect_quantum(m_maincpu);
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(484, 1080);
@@ -3003,7 +3030,7 @@ void eturtles_state::eturtles(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(15, 30);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -3043,9 +3070,11 @@ public:
eturtles_state(mconfig, type, tag)
{ }
+ void estargte(machine_config &config);
+
+private:
virtual void update_display() override;
u8 cop_data_r();
- void estargte(machine_config &config);
};
// handlers (most of it is in eturtles_state above)
@@ -3098,26 +3127,26 @@ INPUT_PORTS_END
void estargte_state::estargte(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
- m_maincpu->write_r<0>().set(FUNC(eturtles_state::plate_w));
- m_maincpu->write_r<1>().set(FUNC(eturtles_state::plate_w));
- m_maincpu->write_r<2>().set(FUNC(eturtles_state::plate_w));
- m_maincpu->write_r<3>().set(FUNC(eturtles_state::plate_w));
- m_maincpu->write_r<4>().set(FUNC(eturtles_state::plate_w));
- m_maincpu->write_r<5>().set(FUNC(eturtles_state::plate_w));
- m_maincpu->write_r<6>().set(FUNC(eturtles_state::plate_w));
- m_maincpu->write_d().set(FUNC(eturtles_state::grid_w));
+ m_maincpu->write_r<0>().set(FUNC(estargte_state::plate_w));
+ m_maincpu->write_r<1>().set(FUNC(estargte_state::plate_w));
+ m_maincpu->write_r<2>().set(FUNC(estargte_state::plate_w));
+ m_maincpu->write_r<3>().set(FUNC(estargte_state::plate_w));
+ m_maincpu->write_r<4>().set(FUNC(estargte_state::plate_w));
+ m_maincpu->write_r<5>().set(FUNC(estargte_state::plate_w));
+ m_maincpu->write_r<6>().set(FUNC(estargte_state::plate_w));
+ m_maincpu->write_d().set(FUNC(estargte_state::grid_w));
COP411(config, m_audiocpu, 190000); // approximation
m_audiocpu->set_config(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
- m_audiocpu->write_sk().set(FUNC(eturtles_state::speaker_w));
- m_audiocpu->write_d().set(FUNC(eturtles_state::cop_irq_w));
+ m_audiocpu->write_sk().set(FUNC(estargte_state::speaker_w));
+ m_audiocpu->write_d().set(FUNC(estargte_state::cop_irq_w));
m_audiocpu->read_l().set(FUNC(estargte_state::cop_data_r));
config.set_perfect_quantum(m_maincpu);
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 854);
@@ -3125,7 +3154,7 @@ void estargte_state::estargte(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(14, 29);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -3167,10 +3196,12 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void ghalien(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
u16 input_r();
- void ghalien(machine_config &config);
};
// handlers
@@ -3237,7 +3268,7 @@ INPUT_PORTS_END
void ghalien_state::ghalien(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(ghalien_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(ghalien_state::plate_w));
@@ -3246,7 +3277,7 @@ void ghalien_state::ghalien(machine_config &config)
m_maincpu->write_d().set(FUNC(ghalien_state::grid_w));
m_maincpu->read_d().set(FUNC(ghalien_state::input_r));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 699);
@@ -3254,7 +3285,7 @@ void ghalien_state::ghalien(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 20);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -3294,12 +3325,14 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
- void plate_w(offs_t offset, u8 data);
- void grid_w(u16 data);
+ void gckong(machine_config &config);
- void update_int1();
DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); }
- void gckong(machine_config &config);
+
+private:
+ void update_int1();
+ void plate_w(offs_t offset, u8 data);
+ void grid_w(u16 data);
};
// handlers
@@ -3369,7 +3402,7 @@ INPUT_PORTS_END
void gckong_state::gckong(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(gckong_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(gckong_state::plate_w));
@@ -3378,7 +3411,7 @@ void gckong_state::gckong(machine_config &config)
m_maincpu->write_d().set(FUNC(gckong_state::grid_w));
m_maincpu->read_d().set_ioport("IN.5");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(479, 1080);
@@ -3387,7 +3420,7 @@ void gckong_state::gckong(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(11, 32);
config.set_default_layout(layout_gckong);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -3432,12 +3465,14 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
- void plate_w(offs_t offset, u8 data);
- void grid_w(u16 data);
+ void gscobra(machine_config &config);
- void update_int0();
DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
- void gscobra(machine_config &config);
+
+private:
+ void update_int0();
+ void plate_w(offs_t offset, u8 data);
+ void grid_w(u16 data);
};
// handlers
@@ -3502,7 +3537,7 @@ INPUT_PORTS_END
void gscobra_state::gscobra(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(gscobra_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(gscobra_state::plate_w));
@@ -3513,7 +3548,7 @@ void gscobra_state::gscobra(machine_config &config)
m_maincpu->write_r<6>().set(FUNC(gscobra_state::plate_w));
m_maincpu->write_d().set(FUNC(gscobra_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 852);
@@ -3521,7 +3556,7 @@ void gscobra_state::gscobra(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 31);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -3557,12 +3592,14 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
- void plate_w(offs_t offset, u8 data);
- void grid_w(u16 data);
+ void gdigdug(machine_config &config);
- void update_int1();
DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); }
- void gdigdug(machine_config &config);
+
+private:
+ void update_int1();
+ void plate_w(offs_t offset, u8 data);
+ void grid_w(u16 data);
};
// handlers
@@ -3628,7 +3665,7 @@ INPUT_PORTS_END
void gdigdug_state::gdigdug(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(gdigdug_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(gdigdug_state::plate_w));
@@ -3639,7 +3676,7 @@ void gdigdug_state::gdigdug(machine_config &config)
m_maincpu->write_r<6>().set(FUNC(gdigdug_state::plate_w));
m_maincpu->write_d().set(FUNC(gdigdug_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(476, 1080);
@@ -3647,7 +3684,7 @@ void gdigdug_state::gdigdug(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 32);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -3687,12 +3724,14 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void mwcbaseb(machine_config &config);
+
+private:
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
void speaker_w(u8 data);
u8 input_r();
- void mwcbaseb(machine_config &config);
};
// handlers
@@ -3798,7 +3837,7 @@ INPUT_PORTS_END
void mwcbaseb_state::mwcbaseb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<1>().set(FUNC(mwcbaseb_state::plate_w));
m_maincpu->write_r<2>().set(FUNC(mwcbaseb_state::plate_w));
@@ -3808,7 +3847,7 @@ void mwcbaseb_state::mwcbaseb(machine_config &config)
m_maincpu->write_r<6>().set(FUNC(mwcbaseb_state::plate_w));
m_maincpu->write_d().set(FUNC(mwcbaseb_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 478);
@@ -3818,7 +3857,7 @@ void mwcbaseb_state::mwcbaseb(machine_config &config)
m_display->set_bri_levels(0.001); // cyan elements strobed very briefly?
config.set_default_layout(layout_mwcbaseb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
static const double speaker_levels[] = { 0.0, 0.5, -0.5, 0.0, -0.5, 0.0, -1.0, -0.5 };
@@ -3861,13 +3900,15 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void msthawk(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
+
+private:
+ void update_int0();
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
-
- void update_int0();
- DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
- void msthawk(machine_config &config);
};
// handlers
@@ -3941,7 +3982,7 @@ INPUT_PORTS_END
void msthawk_state::msthawk(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(msthawk_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(msthawk_state::plate_w));
@@ -3949,7 +3990,7 @@ void msthawk_state::msthawk(machine_config &config)
m_maincpu->write_r<3>().set(FUNC(msthawk_state::plate_w));
m_maincpu->write_d().set(FUNC(msthawk_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 696);
@@ -3958,7 +3999,7 @@ void msthawk_state::msthawk(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 21);
config.set_default_layout(layout_msthawk);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -3994,9 +4035,11 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void pbqbert(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
- void pbqbert(machine_config &config);
};
// handlers
@@ -4037,7 +4080,7 @@ INPUT_PORTS_END
void pbqbert_state::pbqbert(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38820(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(pbqbert_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(pbqbert_state::plate_w));
@@ -4049,7 +4092,7 @@ void pbqbert_state::pbqbert(machine_config &config)
m_maincpu->write_d().set(FUNC(pbqbert_state::grid_w));
m_maincpu->read_d().set_ioport("IN.0");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(603, 1080);
@@ -4057,7 +4100,7 @@ void pbqbert_state::pbqbert(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 30);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -4093,13 +4136,15 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void tmtron(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); }
+
+private:
+ void update_int1();
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
-
- void update_int1();
- DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); }
- void tmtron(machine_config &config);
};
// handlers
@@ -4167,7 +4212,7 @@ INPUT_PORTS_END
void tmtron_state::tmtron(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(tmtron_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(tmtron_state::plate_w));
@@ -4175,7 +4220,7 @@ void tmtron_state::tmtron(machine_config &config)
m_maincpu->write_r<3>().set(FUNC(tmtron_state::plate_w));
m_maincpu->write_d().set(FUNC(tmtron_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 662);
@@ -4183,7 +4228,7 @@ void tmtron_state::tmtron(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 23);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -4223,13 +4268,15 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void kingman(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
+
+private:
+ void update_int0();
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
-
- void update_int0();
- DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); }
- void kingman(machine_config &config);
};
// handlers
@@ -4297,7 +4344,7 @@ INPUT_PORTS_END
void kingman_state::kingman(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38800(config, m_maincpu, 400000); // approximation
m_maincpu->write_r<0>().set(FUNC(kingman_state::plate_w));
m_maincpu->write_r<1>().set(FUNC(kingman_state::plate_w));
@@ -4305,7 +4352,7 @@ void kingman_state::kingman(machine_config &config)
m_maincpu->write_r<3>().set(FUNC(kingman_state::plate_w));
m_maincpu->write_d().set(FUNC(kingman_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(374, 1080);
@@ -4313,7 +4360,7 @@ void kingman_state::kingman(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 23);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -4353,9 +4400,11 @@ public:
hh_hmcs40_state(mconfig, type, tag)
{ }
+ void vinvader(machine_config &config);
+
+private:
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
- void vinvader(machine_config &config);
};
// handlers
@@ -4401,7 +4450,7 @@ INPUT_PORTS_END
void vinvader_state::vinvader(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
HD38750(config, m_maincpu, 300000); // approximation
m_maincpu->read_r<0>().set_ioport("IN.0");
m_maincpu->write_r<1>().set(FUNC(vinvader_state::plate_w));
@@ -4410,7 +4459,7 @@ void vinvader_state::vinvader(machine_config &config)
m_maincpu->write_d().set(FUNC(vinvader_state::grid_w));
m_maincpu->read_d().set_ioport("IN.1");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(233, 1080);
@@ -4418,7 +4467,7 @@ void vinvader_state::vinvader(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 12);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
diff --git a/src/mame/drivers/hh_melps4.cpp b/src/mame/drivers/hh_melps4.cpp
index 185f917e7a0..060ddba845b 100644
--- a/src/mame/drivers/hh_melps4.cpp
+++ b/src/mame/drivers/hh_melps4.cpp
@@ -35,6 +35,12 @@ public:
m_inputs(*this, "IN.%u", 0)
{ }
+ virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
// devices
required_device<m58846_device> m_maincpu;
optional_device<pwm_display_device> m_display;
@@ -42,17 +48,12 @@ public:
optional_ioport_array<4> m_inputs; // max 4
// misc common
- u16 m_inp_mux; // multiplexed inputs mask
+ u16 m_inp_mux = 0; // multiplexed inputs mask
- u32 m_grid; // VFD current row data
- u32 m_plate; // VFD current column data
+ u32 m_grid = 0; // VFD current row data
+ u32 m_plate = 0; // VFD current column data
u8 read_inputs(int columns);
- virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
};
@@ -60,11 +61,6 @@ protected:
void hh_melps4_state::machine_start()
{
- // zerofill
- m_inp_mux = 0;
- m_grid = 0;
- m_plate = 0;
-
// register for savestates
save_item(NAME(m_inp_mux));
save_item(NAME(m_grid));
@@ -134,12 +130,14 @@ public:
hh_melps4_state(mconfig, type, tag)
{ }
+ void cfrogger(machine_config &config);
+
+private:
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
DECLARE_WRITE_LINE_MEMBER(speaker_w);
u16 input_r();
- void cfrogger(machine_config &config);
};
// handlers
@@ -207,7 +205,7 @@ INPUT_PORTS_END
void cfrogger_state::cfrogger(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
M58846(config, m_maincpu, 600_kHz_XTAL);
m_maincpu->read_k().set(FUNC(cfrogger_state::input_r));
m_maincpu->write_s().set(FUNC(cfrogger_state::plate_w));
@@ -216,7 +214,7 @@ void cfrogger_state::cfrogger(machine_config &config)
m_maincpu->write_d().set(FUNC(cfrogger_state::grid_w));
m_maincpu->write_t().set(FUNC(cfrogger_state::speaker_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(500, 1080);
@@ -224,7 +222,7 @@ void cfrogger_state::cfrogger(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(12, 16);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -259,12 +257,14 @@ public:
hh_melps4_state(mconfig, type, tag)
{ }
+ void gjungler(machine_config &config);
+
+private:
void update_display();
void plate_w(offs_t offset, u8 data);
void grid_w(u16 data);
DECLARE_WRITE_LINE_MEMBER(speaker_w);
u16 input_r();
- void gjungler(machine_config &config);
};
// handlers
@@ -332,7 +332,7 @@ INPUT_PORTS_END
void gjungler_state::gjungler(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
M58846(config, m_maincpu, 600_kHz_XTAL);
m_maincpu->read_k().set(FUNC(gjungler_state::input_r));
m_maincpu->write_s().set(FUNC(gjungler_state::plate_w));
@@ -342,7 +342,7 @@ void gjungler_state::gjungler(machine_config &config)
m_maincpu->write_d().set(FUNC(gjungler_state::grid_w));
m_maincpu->write_t().set(FUNC(gjungler_state::speaker_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(481, 1080);
@@ -350,7 +350,7 @@ void gjungler_state::gjungler(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(12, 18);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp
index 3dbab20c30f..6517ce61ab0 100644
--- a/src/mame/drivers/hh_pic16.cpp
+++ b/src/mame/drivers/hh_pic16.cpp
@@ -92,6 +92,12 @@ public:
m_inputs(*this, "IN.%u", 0)
{ }
+ virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
// devices
required_device<pic16c5x_device> m_maincpu;
optional_device<pwm_display_device> m_display;
@@ -99,19 +105,14 @@ public:
optional_ioport_array<6> m_inputs; // max 6
// misc common
- u8 m_a; // MCU port A write data
- u8 m_b; // " B
- u8 m_c; // " C
- u8 m_d; // " D
- u16 m_inp_mux; // multiplexed inputs mask
+ u8 m_a = 0; // MCU port A write data
+ u8 m_b = 0; // " B
+ u8 m_c = 0; // " C
+ u8 m_d = 0; // " D
+ u16 m_inp_mux = ~0; // multiplexed inputs mask
u16 read_inputs(int columns, u16 colmask = ~0);
u8 read_rotated_inputs(int columns, u8 rowmask = ~0);
- virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
};
@@ -119,13 +120,6 @@ protected:
void hh_pic16_state::machine_start()
{
- // zerofill
- m_a = 0;
- m_b = 0;
- m_c = 0;
- m_d = 0;
- m_inp_mux = ~0;
-
// register for savestates
save_item(NAME(m_a));
save_item(NAME(m_b));
@@ -212,12 +206,14 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void touchme(machine_config &config);
+
+private:
void update_display();
void update_speaker();
u8 read_a();
void write_b(u8 data);
void write_c(u8 data);
- void touchme(machine_config &config);
};
// handlers
@@ -287,7 +283,7 @@ INPUT_PORTS_END
void touchme_state::touchme(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 300000); // approximation - RC osc. R=100K, C=47pF
m_maincpu->read_a().set(FUNC(touchme_state::read_a));
m_maincpu->write_b().set(FUNC(touchme_state::write_b));
@@ -297,12 +293,12 @@ void touchme_state::touchme(machine_config &config)
// PIC CLKOUT, tied to RTCC
CLOCK(config, "clock", 300000/4).signal_handler().set_inputline("maincpu", PIC16C5x_RTCC);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(7, 7);
m_display->set_segmask(3, 0x7f);
config.set_default_layout(layout_touchme);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
@@ -336,10 +332,12 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void pabball(machine_config &config);
+
+private:
void update_display();
void write_b(u8 data);
void write_c(u8 data);
- void pabball(machine_config &config);
};
// handlers
@@ -397,19 +395,19 @@ INPUT_PORTS_END
void pabball_state::pabball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 1200000); // approximation - RC osc. R=18K, C=27pF
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->write_b().set(FUNC(pabball_state::write_b));
m_maincpu->read_c().set_ioport("IN.1");
m_maincpu->write_c().set(FUNC(pabball_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 8);
m_display->set_segmask(0x200, 0xff);
config.set_default_layout(layout_hh_pic16_test);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -443,10 +441,12 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void melodym(machine_config &config);
+
+private:
void write_b(u8 data);
u8 read_c();
void write_c(u8 data);
- void melodym(machine_config &config);
};
// handlers
@@ -519,19 +519,19 @@ INPUT_PORTS_END
void melodym_state::melodym(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 1000000); // approximation
m_maincpu->read_a().set_ioport("IN.5");
m_maincpu->write_b().set(FUNC(melodym_state::write_b));
m_maincpu->read_c().set(FUNC(melodym_state::read_c));
m_maincpu->write_c().set(FUNC(melodym_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 1);
m_display->set_bri_levels(0.9);
config.set_default_layout(layout_melodym);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -569,11 +569,13 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void maniac(machine_config &config);
+
+private:
void update_display();
void update_speaker();
void write_b(u8 data);
void write_c(u8 data);
- void maniac(machine_config &config);
};
// handlers
@@ -621,18 +623,18 @@ INPUT_PORTS_END
void maniac_state::maniac(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 1000000); // approximation - RC osc. R=~13.4K, C=470pF
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->write_b().set(FUNC(maniac_state::write_b));
m_maincpu->write_c().set(FUNC(maniac_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(2, 7);
m_display->set_segmask(3, 0x7f);
config.set_default_layout(layout_maniac);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
@@ -682,6 +684,12 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void flash(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
void update_display();
void write_b(u8 data);
u8 read_c();
@@ -689,19 +697,12 @@ public:
void speaker_decay_reset();
TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim);
- double m_speaker_volume;
- void flash(machine_config &config);
-
-protected:
- virtual void machine_start() override;
+ double m_speaker_volume = 0.0;
};
void flash_state::machine_start()
{
hh_pic16_state::machine_start();
-
- // zerofill/init
- m_speaker_volume = 0;
save_item(NAME(m_speaker_volume));
}
@@ -776,19 +777,19 @@ INPUT_PORTS_END
void flash_state::flash(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 1050000); // approximation
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->write_b().set(FUNC(flash_state::write_b));
m_maincpu->read_c().set(FUNC(flash_state::read_c));
m_maincpu->write_c().set(FUNC(flash_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(2, 7+4);
m_display->set_segmask(3, 0x7f);
config.set_default_layout(layout_flash);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
TIMER(config, "speaker_decay").configure_periodic(FUNC(flash_state::speaker_decay_sim), attotime::from_msec(25));
@@ -832,16 +833,18 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
- void write_b(u8 data);
- void write_c(u8 data);
- u8 read_c();
+ void matchme(machine_config &config);
- void set_clock();
DECLARE_INPUT_CHANGED_MEMBER(speed_switch) { set_clock(); }
- void matchme(machine_config &config);
protected:
virtual void machine_reset() override;
+
+private:
+ void set_clock();
+ void write_b(u8 data);
+ void write_c(u8 data);
+ u8 read_c();
};
void matchme_state::machine_reset()
@@ -933,18 +936,18 @@ INPUT_PORTS_END
void matchme_state::matchme(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 1200000); // see set_clock
m_maincpu->read_a().set_ioport("IN.3");
m_maincpu->write_b().set(FUNC(matchme_state::write_b));
m_maincpu->read_c().set(FUNC(matchme_state::read_c));
m_maincpu->write_c().set(FUNC(matchme_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 8);
config.set_default_layout(layout_matchme);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -983,11 +986,13 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void drdunk(machine_config &config);
+
+private:
void update_display();
u8 read_a();
void write_b(u8 data);
void write_c(u8 data);
- void drdunk(machine_config &config);
};
// handlers
@@ -1053,20 +1058,20 @@ INPUT_PORTS_END
void drdunk_state::drdunk(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 800000); // approximation - RC osc. R=18K, C=47pF
m_maincpu->read_a().set(FUNC(drdunk_state::read_a));
m_maincpu->write_b().set(FUNC(drdunk_state::write_b));
m_maincpu->read_c().set_constant(0xff);
m_maincpu->write_c().set(FUNC(drdunk_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(6, 7);
m_display->set_segmask(0x30, 0x7f);
m_display->set_bri_levels(0.01, 0.2); // player led is brighter
config.set_default_layout(layout_drdunk);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1112,25 +1117,24 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void leboom(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
u8 read_a();
void write_b(u8 data);
void write_c(u8 data);
void speaker_decay_reset();
TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim);
- double m_speaker_volume;
- void leboom(machine_config &config);
-
-protected:
- virtual void machine_start() override;
+ double m_speaker_volume = 0.0;
};
void leboom_state::machine_start()
{
hh_pic16_state::machine_start();
-
- // zerofill/init
- m_speaker_volume = 0;
save_item(NAME(m_speaker_volume));
}
@@ -1218,18 +1222,18 @@ INPUT_PORTS_END
void leboom_state::leboom(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 1000000); // approximation
m_maincpu->read_a().set(FUNC(leboom_state::read_a));
m_maincpu->write_b().set(FUNC(leboom_state::write_b));
m_maincpu->read_c().set_constant(0xff);
m_maincpu->write_c().set(FUNC(leboom_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 1);
config.set_default_layout(layout_leboom);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
TIMER(config, "speaker_decay").configure_periodic(FUNC(leboom_state::speaker_decay_sim), attotime::from_msec(25));
@@ -1267,12 +1271,14 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void rockpin(machine_config &config);
+
+private:
void update_display();
void write_a(u8 data);
void write_b(u8 data);
void write_c(u8 data);
void write_d(u8 data);
- void rockpin(machine_config &config);
};
// handlers
@@ -1329,7 +1335,7 @@ INPUT_PORTS_END
void rockpin_state::rockpin(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1650(config, m_maincpu, 450000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->write_a().set(FUNC(rockpin_state::write_a));
@@ -1343,12 +1349,12 @@ void rockpin_state::rockpin(machine_config &config)
// PIC CLKOUT, tied to RTCC
CLOCK(config, "clock", 450000/4).signal_handler().set_inputline(m_maincpu, PIC16C5x_RTCC);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(3+6, 8);
m_display->set_segmask(7, 0x7f);
config.set_default_layout(layout_rockpin);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
@@ -1386,11 +1392,13 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void hccbaskb(machine_config &config);
+
+private:
void update_display();
u8 read_a();
void write_b(u8 data);
void write_c(u8 data);
- void hccbaskb(machine_config &config);
};
// handlers
@@ -1456,20 +1464,20 @@ INPUT_PORTS_END
void hccbaskb_state::hccbaskb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 800000); // approximation - RC osc. R=15K, C=47pF
m_maincpu->read_a().set(FUNC(hccbaskb_state::read_a));
m_maincpu->write_b().set(FUNC(hccbaskb_state::write_b));
m_maincpu->read_c().set_constant(0xff);
m_maincpu->write_c().set(FUNC(hccbaskb_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(7, 7);
m_display->set_segmask(0x60, 0x7f);
m_display->set_bri_levels(0.01, 0.2); // player led is brighter
config.set_default_layout(layout_hccbaskb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1510,11 +1518,13 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void ttfball(machine_config &config);
+
+private:
void update_display();
u8 read_a();
void write_b(u8 data);
void write_c(u8 data);
- void ttfball(machine_config &config);
};
// handlers
@@ -1618,20 +1628,20 @@ INPUT_PORTS_END
void ttfball_state::ttfball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1655(config, m_maincpu, 500000); // approximation - RC osc. R=27K(set 1) or 33K(set 2), C=68pF
m_maincpu->read_a().set(FUNC(ttfball_state::read_a));
m_maincpu->write_b().set(FUNC(ttfball_state::write_b));
m_maincpu->read_c().set_constant(0xff);
m_maincpu->write_c().set(FUNC(ttfball_state::write_c));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 11);
m_display->set_segmask(0x7f, 0xff);
m_display->set_bri_levels(0.002, 0.02); // player led is brighter
config.set_default_layout(layout_ttfball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1671,12 +1681,14 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void uspbball(machine_config &config);
+
+private:
void update_display();
void write_a(u8 data);
void write_b(u8 data);
void write_c(u8 data);
void write_d(u8 data);
- void uspbball(machine_config &config);
};
// handlers
@@ -1735,7 +1747,7 @@ INPUT_PORTS_END
void uspbball_state::uspbball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1650(config, m_maincpu, 900000); // approximation - RC osc. R=22K, C=47pF
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->write_a().set(FUNC(uspbball_state::write_a));
@@ -1749,12 +1761,12 @@ void uspbball_state::uspbball(machine_config &config)
// PIC CLKOUT, tied to RTCC
CLOCK(config, "clock", 900000/4).signal_handler().set_inputline("maincpu", PIC16C5x_RTCC);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(6, 16);
m_display->set_segmask(7, 0x7f);
config.set_default_layout(layout_hh_pic16_test);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -1789,13 +1801,15 @@ public:
hh_pic16_state(mconfig, type, tag)
{ }
+ void us2pfball(machine_config &config);
+
+private:
void update_display();
u8 read_a();
void write_a(u8 data);
void write_b(u8 data);
void write_c(u8 data);
void write_d(u8 data);
- void us2pfball(machine_config &config);
};
// handlers
@@ -1877,7 +1891,7 @@ INPUT_PORTS_END
void us2pfball_state::us2pfball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
PIC1650(config, m_maincpu, 800000); // approximation - RC osc. R=39K, C=75pF
m_maincpu->read_a().set(FUNC(us2pfball_state::read_a));
m_maincpu->write_a().set(FUNC(us2pfball_state::write_a));
@@ -1891,12 +1905,12 @@ void us2pfball_state::us2pfball(machine_config &config)
// PIC CLKOUT, tied to RTCC
CLOCK(config, "clock", 800000/4).signal_handler().set_inputline("maincpu", PIC16C5x_RTCC);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 7);
m_display->set_segmask(0xff, 0x7f);
config.set_default_layout(layout_us2pfball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
diff --git a/src/mame/drivers/hh_pps41.cpp b/src/mame/drivers/hh_pps41.cpp
index a6147c5ea85..c17c79e9973 100644
--- a/src/mame/drivers/hh_pps41.cpp
+++ b/src/mame/drivers/hh_pps41.cpp
@@ -50,6 +50,13 @@ public:
m_inputs(*this, "IN.%u", 0)
{ }
+ virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override { update_int(); }
+ virtual void device_post_load() override { update_int(); }
+
// devices
required_device<pps41_base_device> m_maincpu;
optional_device<pwm_display_device> m_display;
@@ -65,14 +72,7 @@ public:
u16 m_r = 0;
u8 read_inputs(int columns);
- virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
-
-protected:
virtual void update_int() { ; }
-
- virtual void machine_start() override;
- virtual void machine_reset() override { update_int(); }
- virtual void device_post_load() override { update_int(); }
};
@@ -149,10 +149,12 @@ public:
hh_pps41_state(mconfig, type, tag)
{ }
+ void ftri1(machine_config &config);
+
+private:
void update_display();
void write_d(u16 data);
void write_r(u16 data);
- void ftri1(machine_config &config);
};
// handlers
@@ -200,18 +202,18 @@ INPUT_PORTS_END
void ftri1_state::ftri1(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM78(config, m_maincpu, 300000); // approximation - VC osc. R=68K
m_maincpu->write_d().set(FUNC(ftri1_state::write_d));
m_maincpu->write_r().set(FUNC(ftri1_state::write_r));
m_maincpu->read_p().set_ioport("IN.0");
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x1e0, 0x7f);
config.set_default_layout(layout_ftri1);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -252,15 +254,16 @@ public:
m_beeper(*this, "beeper")
{ }
+ void mastmind(machine_config &config);
+ void smastmind(machine_config &config);
+
+private:
optional_device<beep_device> m_beeper;
void update_display();
void write_d(u16 data);
void write_r(u16 data);
u8 read_p();
-
- void mastmind(machine_config &config);
- void smastmind(machine_config &config);
};
// handlers
@@ -325,18 +328,18 @@ INPUT_PORTS_END
void mastmind_state::mastmind(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM75(config, m_maincpu, 360000); // approximation - VC osc. R=56K
m_maincpu->write_d().set(FUNC(mastmind_state::write_d));
m_maincpu->write_r().set(FUNC(mastmind_state::write_r));
m_maincpu->read_p().set(FUNC(mastmind_state::read_p));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 7);
m_display->set_segmask(0xff, 0x7f);
config.set_default_layout(layout_mastmind);
- /* no sound! */
+ // no sound!
}
void mastmind_state::smastmind(machine_config &config)
@@ -345,7 +348,7 @@ void mastmind_state::smastmind(machine_config &config)
config.set_default_layout(layout_smastmind);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
BEEP(config, m_beeper, 2400); // approximation
m_beeper->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -398,14 +401,16 @@ public:
hh_pps41_state(mconfig, type, tag)
{ }
+ void dunksunk(machine_config &config);
+
DECLARE_INPUT_CHANGED_MEMBER(difficulty_switch) { update_int(); }
DECLARE_INPUT_CHANGED_MEMBER(game_switch) { update_int(); }
- virtual void update_int() override;
+private:
+ virtual void update_int() override;
void update_display();
void write_d(u16 data);
void write_r(u16 data);
- void dunksunk(machine_config &config);
};
// handlers
@@ -467,19 +472,19 @@ INPUT_PORTS_END
void dunksunk_state::dunksunk(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM76EL(config, m_maincpu, 390000); // approximation - VC osc. R=56K
m_maincpu->write_d().set(FUNC(dunksunk_state::write_d));
m_maincpu->write_r().set(FUNC(dunksunk_state::write_r));
m_maincpu->read_p().set_ioport("IN.0");
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 7);
m_display->set_segmask(0x1e0, 0x7f);
m_display->set_bri_levels(0.015, 0.2); // player led is brighter
config.set_default_layout(layout_dunksunk);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -524,14 +529,16 @@ public:
hh_pps41_state(mconfig, type, tag)
{ }
+ void memoquiz(machine_config &config);
+
DECLARE_INPUT_CHANGED_MEMBER(digits_switch) { update_int(); }
- virtual void update_int() override;
+private:
+ virtual void update_int() override;
void update_display();
void write_d(u16 data);
void write_r(u16 data);
u8 read_p();
- void memoquiz(machine_config &config);
};
// handlers
@@ -608,18 +615,18 @@ INPUT_PORTS_END
void memoquiz_state::memoquiz(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM75(config, m_maincpu, 360000); // approximation - VC osc. R=56K
m_maincpu->write_d().set(FUNC(memoquiz_state::write_d));
m_maincpu->write_r().set(FUNC(memoquiz_state::write_r));
m_maincpu->read_p().set(FUNC(memoquiz_state::read_p));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 8);
m_display->set_segmask(0xff, 0xff);
config.set_default_layout(layout_memoquiz);
- /* no sound! */
+ // no sound!
}
// roms
@@ -655,11 +662,13 @@ public:
hh_pps41_state(mconfig, type, tag)
{ }
+ void mfootb2(machine_config &config);
+
+private:
void update_display();
void write_d(u16 data);
void write_r(u16 data);
void write_spk(u8 data);
- void mfootb2(machine_config &config);
};
// handlers
@@ -712,7 +721,7 @@ INPUT_PORTS_END
void mfootb2_state::mfootb2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM77LA(config, m_maincpu, 380000); // approximation - VC osc. R=56K
m_maincpu->write_d().set(FUNC(mfootb2_state::write_d));
m_maincpu->read_d().set_ioport("IN.1");
@@ -720,14 +729,14 @@ void mfootb2_state::mfootb2(machine_config &config)
m_maincpu->read_p().set_ioport("IN.0");
m_maincpu->write_spk().set(FUNC(mfootb2_state::write_spk));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 11);
m_display->set_segmask(0x3c7, 0x7f);
m_display->set_segmask(0x002, 0xff);
m_display->set_bri_levels(0.015, 0.2); // ball led is brighter
config.set_default_layout(layout_mfootb2);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
@@ -767,12 +776,14 @@ public:
hh_pps41_state(mconfig, type, tag)
{ }
+ void brainbaf(machine_config &config);
+
+private:
void update_display();
void write_d(u16 data);
void write_r(u16 data);
u8 read_p();
void write_spk(u8 data);
- void brainbaf(machine_config &config);
};
// handlers
@@ -875,19 +886,19 @@ INPUT_PORTS_END
void brainbaf_state::brainbaf(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM78LA(config, m_maincpu, 440000); // approximation - VC osc. R=10K
m_maincpu->write_d().set(FUNC(brainbaf_state::write_d));
m_maincpu->write_r().set(FUNC(brainbaf_state::write_r));
m_maincpu->read_p().set(FUNC(brainbaf_state::read_p));
m_maincpu->write_spk().set(FUNC(brainbaf_state::write_spk));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 14);
m_display->set_segmask(0xff, 0x3fff);
config.set_default_layout(layout_brainbaf);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
@@ -928,12 +939,14 @@ public:
hh_pps41_state(mconfig, type, tag)
{ }
+ void horocomp(machine_config &config);
+
+private:
void update_display();
void write_d(u16 data);
void write_r(u16 data);
u8 read_p();
void write_spk(u8 data);
- void horocomp(machine_config &config);
};
// handlers
@@ -1051,19 +1064,19 @@ INPUT_PORTS_END
void horocomp_state::horocomp(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM78LA(config, m_maincpu, 440000); // approximation - VC osc. R=10K
m_maincpu->write_d().set(FUNC(horocomp_state::write_d));
m_maincpu->write_r().set(FUNC(horocomp_state::write_r));
m_maincpu->read_p().set(FUNC(horocomp_state::read_p));
m_maincpu->write_spk().set(FUNC(horocomp_state::write_spk));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 14);
m_display->set_segmask(0xff, 0x3fff);
config.set_default_layout(layout_horocomp);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
@@ -1105,6 +1118,9 @@ public:
m_subcpu(*this, "subcpu")
{ }
+ void mwcfootb(machine_config &config);
+
+private:
required_device<pps41_base_device> m_subcpu;
void update_display();
@@ -1116,8 +1132,6 @@ public:
void sub_write_d(u16 data);
void sub_write_r(u16 data);
-
- void mwcfootb(machine_config &config);
};
// handlers
@@ -1234,7 +1248,7 @@ INPUT_PORTS_END
void mwcfootb_state::mwcfootb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM78(config, m_maincpu, 360000); // approximation - VC osc. R=56K
m_maincpu->write_d().set(FUNC(mwcfootb_state::main_write_d));
m_maincpu->read_d().set(FUNC(mwcfootb_state::main_read_d));
@@ -1250,7 +1264,7 @@ void mwcfootb_state::mwcfootb(machine_config &config)
config.set_perfect_quantum(m_maincpu);
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 571);
@@ -1260,7 +1274,7 @@ void mwcfootb_state::mwcfootb(machine_config &config)
m_display->set_segmask(0x7f, 0x7f);
config.set_default_layout(layout_mwcfootb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1301,14 +1315,16 @@ public:
hh_pps41_state(mconfig, type, tag)
{ }
+ void scrabsen(machine_config &config);
+
DECLARE_INPUT_CHANGED_MEMBER(players_switch) { update_int(); }
- virtual void update_int() override;
+private:
+ virtual void update_int() override;
void update_display();
void write_d(u16 data);
void write_r(u16 data);
u8 read_p();
- void scrabsen(machine_config &config);
};
// handlers
@@ -1404,17 +1420,17 @@ INPUT_PORTS_END
void scrabsen_state::scrabsen(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM76EL(config, m_maincpu, 380000); // approximation - VC osc. R=56K
m_maincpu->write_d().set(FUNC(scrabsen_state::write_d));
m_maincpu->write_r().set(FUNC(scrabsen_state::write_r));
m_maincpu->read_p().set(FUNC(scrabsen_state::read_p));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(2, 8);
config.set_default_layout(layout_scrabsen);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1452,14 +1468,16 @@ public:
hh_pps41_state(mconfig, type, tag)
{ }
+ void rdqa(machine_config &config);
+
DECLARE_INPUT_CHANGED_MEMBER(players_switch) { update_int(); }
- virtual void update_int() override;
+private:
+ virtual void update_int() override;
void update_display();
void write_d(u16 data);
void write_r(u16 data);
u8 read_p();
- void rdqa(machine_config &config);
};
// handlers
@@ -1538,18 +1556,18 @@ INPUT_PORTS_END
void rdqa_state::rdqa(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
MM76EL(config, m_maincpu, 400000); // approximation - VC osc. R=56K
m_maincpu->write_d().set(FUNC(rdqa_state::write_d));
m_maincpu->write_r().set(FUNC(rdqa_state::write_r));
m_maincpu->read_p().set(FUNC(rdqa_state::read_p));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(5, 7);
m_display->set_segmask(0x1f, 0x7f);
config.set_default_layout(layout_rdqa);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp
index 0f1492d5fbe..2167178044c 100644
--- a/src/mame/drivers/hh_sm510.cpp
+++ b/src/mame/drivers/hh_sm510.cpp
@@ -1,6 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:hap, Henrik Algestam
-// thanks-to:Sean Riddle, Igor, Lee Robson
+// thanks-to:Sean Riddle, Igor, Lee Robson, Milan Galcik
/***************************************************************************
Sharp SM5xx family handhelds.
@@ -5678,14 +5678,15 @@ public:
inp_fixed_last();
}
- // R2 connects to a single LED behind the screen
- void led_w(u8 data) { m_led_out = data >> 1 & 1; }
- output_finder<> m_led_out;
-
void tgaiden(machine_config &config);
protected:
virtual void machine_start() override;
+
+private:
+ // R2 connects to a single LED behind the screen
+ void led_w(u8 data) { m_led_out = data >> 1 & 1; }
+ output_finder<> m_led_out;
};
void tgaiden_state::machine_start()
@@ -5736,7 +5737,6 @@ INPUT_PORTS_END
void tgaiden_state::tgaiden(machine_config &config)
{
sm510_tiger(config, 1476, 1080);
-
m_maincpu->write_r().append(FUNC(tgaiden_state::led_w));
}
@@ -8164,8 +8164,10 @@ public:
inp_fixed_last();
}
- virtual void input_w(u8 data) override;
void tnmarebc(machine_config &config);
+
+private:
+ virtual void input_w(u8 data) override;
};
// handlers
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 81968875a22..a9246a2a36d 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -31,7 +31,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
@MP0168 TMS1000 1979, Conic Multisport/Tandy Sports Arena (model 60-2158)
@MP0170 TMS1000 1979, Conic Football
*MP0220 TMS1000 1980, Tomy Teacher
- *MP0230 TMS1000 1980, Entex Blast It (6015)
+ @MP0230 TMS1000 1980, Entex Blast It (6015)
@MP0271 TMS1000 1982, Radio Shack Monkey See
@MP0907 TMS1000 1979, Conic Basketball (101-006)
@MP0908 TMS1000 1979, Conic Electronic I.Q.
@@ -211,6 +211,7 @@ TODO:
#include "bankshot.lh"
#include "bcheetah.lh"
#include "bigtrak.lh"
+#include "blastit.lh"
#include "bship.lh" // clickable
#include "cmsport.lh"
#include "cnbaskb.lh"
@@ -431,11 +432,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void matchnum(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void matchnum(machine_config &config);
};
// handlers
@@ -515,18 +518,18 @@ INPUT_PORTS_END
void matchnum_state::matchnum(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 325000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(matchnum_state::read_k));
m_maincpu->r().set(FUNC(matchnum_state::write_r));
m_maincpu->o().set(FUNC(matchnum_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(4, 8);
m_display->set_segmask(0xf, 0x7f);
config.set_default_layout(layout_matchnum);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
@@ -572,11 +575,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void arrball(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void arrball(machine_config &config);
};
// handlers
@@ -626,19 +631,19 @@ INPUT_PORTS_END
void arrball_state::arrball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 325000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(arrball_state::read_k));
m_maincpu->r().set(FUNC(arrball_state::write_r));
m_maincpu->o().set(FUNC(arrball_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(7, 7);
m_display->set_segmask(0x10, 0x7f);
m_display->set_segmask(0x20, 0x06); // left digit only segments B and C
config.set_default_layout(layout_arrball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
@@ -692,11 +697,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void mathmagi(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void mathmagi(machine_config &config);
};
// handlers
@@ -793,19 +800,19 @@ static const u16 mathmagi_output_pla[0x20] =
void mathmagi_state::mathmagi(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 175000); // approximation - RC osc. R=68K, C=82pF
m_maincpu->set_output_pla(mathmagi_output_pla);
m_maincpu->k().set(FUNC(mathmagi_state::read_k));
m_maincpu->r().set(FUNC(mathmagi_state::write_r));
m_maincpu->o().set(FUNC(mathmagi_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(11, 7);
m_display->set_segmask(0xff, 0x7f);
config.set_default_layout(layout_mathmagi);
- /* no sound! */
+ // no sound!
}
// roms
@@ -933,16 +940,15 @@ INPUT_PORTS_END
void bcheetah_state::bcheetah(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 100000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(bcheetah_state::read_k));
m_maincpu->r().set(FUNC(bcheetah_state::write_r));
m_maincpu->o().set(FUNC(bcheetah_state::write_o));
- /* no visual feedback! */
config.set_default_layout(layout_bcheetah);
- /* no sound! */
+ // no sound!
}
// roms
@@ -1099,18 +1105,18 @@ INPUT_PORTS_END
void palmf31_state::palmf31(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1040(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(palmf31_state::read_k));
m_maincpu->o().set(FUNC(palmf31_state::write_o));
m_maincpu->r().set(FUNC(palmf31_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x1ff, 0xff);
config.set_default_layout(layout_palmf31);
- /* no sound! */
+ // no sound!
}
// roms
@@ -1267,18 +1273,18 @@ INPUT_PORTS_END
void palmmd8_state::palmmd8(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1070(config, m_maincpu, 250000); // approximation - RC osc. R=56K, C=68pf
m_maincpu->k().set(FUNC(palmmd8_state::read_k));
m_maincpu->o().set(FUNC(palmmd8_state::write_o));
m_maincpu->r().set(FUNC(palmmd8_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(21, 8);
m_display->set_segmask(0xfffff, 0xff);
config.set_default_layout(layout_palmmd8);
- /* no sound! */
+ // no sound!
}
// roms
@@ -1316,11 +1322,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void amaztron(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void amaztron(machine_config &config);
};
// handlers
@@ -1408,18 +1416,18 @@ INPUT_PORTS_END
void amaztron_state::amaztron(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 300000); // approximation - RC osc. R=33K?, C=100pF
m_maincpu->k().set(FUNC(amaztron_state::read_k));
m_maincpu->r().set(FUNC(amaztron_state::write_r));
m_maincpu->o().set(FUNC(amaztron_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(4, 7);
m_display->set_segmask(0xc, 0x7f);
config.set_default_layout(layout_amaztron);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1459,11 +1467,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void zodiac(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void zodiac(machine_config &config);
};
// handlers
@@ -1561,18 +1571,18 @@ INPUT_PORTS_END
void zodiac_state::zodiac(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 500000); // approximation - RC osc. R=18K, C=100pF
m_maincpu->k().set(FUNC(zodiac_state::read_k));
m_maincpu->r().set(FUNC(zodiac_state::write_r));
m_maincpu->o().set(FUNC(zodiac_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 8);
m_display->set_segmask(0xff, 0x7f);
config.set_default_layout(layout_zodiac);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1616,11 +1626,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void cqback(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void cqback(machine_config &config);
};
// handlers
@@ -1692,19 +1704,19 @@ INPUT_PORTS_END
void cqback_state::cqback(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 310000); // approximation - RC osc. R=33K, C=100pF
m_maincpu->k().set(FUNC(cqback_state::read_k));
m_maincpu->r().set(FUNC(cqback_state::write_r));
m_maincpu->o().set(FUNC(cqback_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 11);
m_display->set_segmask(0x1ff, 0xff);
m_display->set_bri_levels(0.003, 0.03); // offense leds are brighter
config.set_default_layout(layout_cqback);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1748,11 +1760,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void h2hfootb(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void h2hfootb(machine_config &config);
};
// handlers
@@ -1824,19 +1838,19 @@ INPUT_PORTS_END
void h2hfootb_state::h2hfootb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 310000); // approximation - RC osc. R=39K, C=100pF
m_maincpu->k().set(FUNC(h2hfootb_state::read_k));
m_maincpu->r().set(FUNC(h2hfootb_state::write_r));
m_maincpu->o().set(FUNC(h2hfootb_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 9);
m_display->set_segmask(0x1ff, 0x7f);
m_display->set_bri_levels(0.003, 0.03); // offense leds are brighter
config.set_default_layout(layout_h2hfootb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1881,30 +1895,29 @@ public:
m_cap_empty_timer(*this, "cap_empty")
{ }
+ void h2hbaskb(machine_config &config);
+ void h2hhockey(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
required_device<timer_device> m_cap_empty_timer;
TIMER_DEVICE_CALLBACK_MEMBER(cap_empty_callback);
- bool m_cap_state;
- attotime m_cap_charge;
+ bool m_cap_state = false;
+ attotime m_cap_charge = attotime::zero;
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void h2hbaskb(machine_config &config);
- void h2hhockey(machine_config &config);
-
-protected:
- virtual void machine_start() override;
};
void h2hbaskb_state::machine_start()
{
hh_tms1k_state::machine_start();
- // zerofill/register for savestates
- m_cap_state = false;
- m_cap_charge = attotime::zero;
-
+ // register for savestates
save_item(NAME(m_cap_state));
save_item(NAME(m_cap_charge));
}
@@ -2011,7 +2024,7 @@ INPUT_PORTS_END
void h2hbaskb_state::h2hbaskb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 375000); // approximation - RC osc. R=43K, C=100pF
m_maincpu->k().set(FUNC(h2hbaskb_state::read_k));
m_maincpu->r().set(FUNC(h2hbaskb_state::write_r));
@@ -2019,12 +2032,12 @@ void h2hbaskb_state::h2hbaskb(machine_config &config)
TIMER(config, "cap_empty").configure_generic(FUNC(h2hbaskb_state::cap_empty_callback));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(6+6, 7);
m_display->set_segmask(0xc0, 0x7f);
config.set_default_layout(layout_h2hbaskb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2082,17 +2095,19 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
- void update_display();
- void write_r(u16 data);
- void write_o(u16 data);
- u8 read_k();
+ void h2hbaseb(machine_config &config);
- void set_clock();
DECLARE_INPUT_CHANGED_MEMBER(skill_switch) { set_clock(); }
- void h2hbaseb(machine_config &config);
protected:
virtual void machine_reset() override;
+
+private:
+ void set_clock();
+ void update_display();
+ void write_r(u16 data);
+ void write_o(u16 data);
+ u8 read_k();
};
void h2hbaseb_state::machine_reset()
@@ -2176,18 +2191,18 @@ INPUT_PORTS_END
void h2hbaseb_state::h2hbaseb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1170(config, m_maincpu, 350000); // see set_clock
m_maincpu->k().set(FUNC(h2hbaseb_state::read_k));
m_maincpu->r().set(FUNC(h2hbaseb_state::write_r));
m_maincpu->o().set(FUNC(h2hbaseb_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 9);
m_display->set_segmask(0x1ff, 0x7f);
config.set_default_layout(layout_h2hbaseb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2226,11 +2241,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void h2hboxing(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void h2hboxing(machine_config &config);
};
// handlers
@@ -2301,18 +2318,18 @@ INPUT_PORTS_END
void h2hboxing_state::h2hboxing(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 350000); // approximation - RC osc. R=39K, C=100pF
m_maincpu->k().set(FUNC(h2hboxing_state::read_k));
m_maincpu->r().set(FUNC(h2hboxing_state::write_r));
m_maincpu->o().set(FUNC(h2hboxing_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(11, 8);
m_display->set_segmask(0x600, 0x7f);
config.set_default_layout(layout_h2hboxing);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2367,6 +2384,12 @@ public:
m_pinout(0)
{ }
+ void quizwizc(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
u16 m_pinout; // cartridge R pins
@@ -2374,10 +2397,6 @@ public:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void quizwizc(machine_config &config);
-
-protected:
- virtual void machine_start() override;
};
void quizwizc_state::machine_start()
@@ -2483,23 +2502,23 @@ INPUT_PORTS_END
void quizwizc_state::quizwizc(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 300000); // approximation - RC osc. R=43K, C=100pF
m_maincpu->k().set(FUNC(quizwizc_state::read_k));
m_maincpu->r().set(FUNC(quizwizc_state::write_r));
m_maincpu->o().set(FUNC(quizwizc_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10+1, 8);
m_display->set_segmask(0x3c0, 0x7f);
config.set_default_layout(layout_quizwizc);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
- /* cartridge */
+ // cartridge
generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "quizwiz_cart"));
cartslot.set_must_be_loaded(true);
cartslot.set_device_load(FUNC(quizwizc_state::cart_load));
@@ -2555,6 +2574,12 @@ public:
m_pinout(0)
{ }
+ void tc4(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
u8 m_pinout; // cartridge K pins
@@ -2562,10 +2587,6 @@ public:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void tc4(machine_config &config);
-
-protected:
- virtual void machine_start() override;
};
void tc4_state::machine_start()
@@ -2670,24 +2691,24 @@ INPUT_PORTS_END
void tc4_state::tc4(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1400(config, m_maincpu, 450000); // approximation - RC osc. R=27.3K, C=100pF
m_maincpu->k().set(FUNC(tc4_state::read_k));
m_maincpu->r().set(FUNC(tc4_state::write_r));
m_maincpu->o().set(FUNC(tc4_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 9);
m_display->set_segmask(0x3a0, 0x7f);
m_display->set_bri_levels(0.005, 0.05); // offense leds are brighter
config.set_default_layout(layout_tc4);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
- /* cartridge */
+ // cartridge
generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "tc4_cart"));
cartslot.set_must_be_loaded(true); // system won't power on without cartridge
cartslot.set_device_load(FUNC(tc4_state::cart_load));
@@ -2734,11 +2755,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void cnbaskb(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void cnbaskb(machine_config &config);
};
// handlers
@@ -2800,19 +2823,19 @@ INPUT_PORTS_END
void cnbaskb_state::cnbaskb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 375000); // approximation - RC osc. R=39K, C=47pF
m_maincpu->k().set(FUNC(cnbaskb_state::read_k));
m_maincpu->r().set(FUNC(cnbaskb_state::write_r));
m_maincpu->o().set(FUNC(cnbaskb_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 7);
m_display->set_segmask(0x180, 0x7f);
m_display->set_bri_levels(0.01, 0.1); // player led is brighter
config.set_default_layout(layout_cnbaskb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2859,11 +2882,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void cmsport(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void cmsport(machine_config &config);
};
// handlers
@@ -2927,19 +2952,19 @@ INPUT_PORTS_END
void cmsport_state::cmsport(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 350000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(cmsport_state::read_k));
m_maincpu->r().set(FUNC(cmsport_state::write_r));
m_maincpu->o().set(FUNC(cmsport_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x60, 0x7f);
m_display->set_bri_levels(0.01, 0.1); // player led is brighter
config.set_default_layout(layout_cmsport);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2989,6 +3014,9 @@ public:
m_ds8874(*this, "ds8874")
{ }
+ void cnfball(machine_config &config);
+
+private:
required_device<ds8874_device> m_ds8874;
void ds8874_output_w(u16 data);
@@ -2996,7 +3024,6 @@ public:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void cnfball(machine_config &config);
};
// handlers
@@ -3068,13 +3095,13 @@ INPUT_PORTS_END
void cnfball_state::cnfball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 350000); // approximation - RC osc. R=39K, C=47pF
m_maincpu->k().set(FUNC(cnfball_state::read_k));
m_maincpu->r().set(FUNC(cnfball_state::write_r));
m_maincpu->o().set(FUNC(cnfball_state::write_o));
- /* video hardware */
+ // video hardware
DS8874(config, m_ds8874).write_output().set(FUNC(cnfball_state::ds8874_output_w));
PWM_DISPLAY(config, m_display).set_size(9, 8+3);
m_display->set_segmask(0xc3, 0x7f);
@@ -3082,7 +3109,7 @@ void cnfball_state::cnfball(machine_config &config)
m_display->set_bri_levels(0.01, 0.1); // player led is brighter
config.set_default_layout(layout_cnfball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
@@ -3129,11 +3156,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void cnfball2(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void cnfball2(machine_config &config);
};
// handlers
@@ -3202,18 +3231,18 @@ INPUT_PORTS_END
void cnfball2_state::cnfball2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 325000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(cnfball2_state::read_k));
m_maincpu->r().set(FUNC(cnfball2_state::write_r));
m_maincpu->o().set(FUNC(cnfball2_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 11);
m_display->set_segmask(0x1ff, 0xff);
config.set_default_layout(layout_cnfball2);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3261,11 +3290,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void eleciq(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void eleciq(machine_config &config);
};
// handlers
@@ -3351,18 +3382,18 @@ INPUT_PORTS_END
void eleciq_state::eleciq(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 325000); // approximation - RC osc. R=47K, C=50pF
m_maincpu->k().set(FUNC(eleciq_state::read_k));
m_maincpu->r().set(FUNC(eleciq_state::write_r));
m_maincpu->o().set(FUNC(eleciq_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 7);
m_display->set_segmask(0x180, 0x7f);
config.set_default_layout(layout_eleciq);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3403,10 +3434,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void qfire(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void qfire(machine_config &config);
};
// handlers
@@ -3465,18 +3498,18 @@ INPUT_PORTS_END
void qfire_state::qfire(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 375000); // approximation - RC osc. R=39K, C=47pF
m_maincpu->k().set(FUNC(qfire_state::read_k));
m_maincpu->r().set(FUNC(qfire_state::write_r));
m_maincpu->o().set(FUNC(qfire_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(3, 7);
m_display->set_segmask(3, 0x7f);
config.set_default_layout(layout_qfire);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3517,11 +3550,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void esoccer(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void esoccer(machine_config &config);
};
// handlers
@@ -3583,19 +3618,19 @@ INPUT_PORTS_END
void esoccer_state::esoccer(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 350000); // approximation - RC osc. R=47K, C=33pF
m_maincpu->k().set(FUNC(esoccer_state::read_k));
m_maincpu->r().set(FUNC(esoccer_state::write_r));
m_maincpu->o().set(FUNC(esoccer_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 7);
m_display->set_segmask(0x300, 0x7f);
m_display->set_bri_levels(0.01, 0.1); // player led is brighter
config.set_default_layout(layout_esoccer);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3655,11 +3690,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void ebball(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void ebball(machine_config &config);
};
// handlers
@@ -3731,18 +3768,18 @@ INPUT_PORTS_END
void ebball_state::ebball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 375000); // approximation - RC osc. R=43K, C=47pF
m_maincpu->k().set(FUNC(ebball_state::read_k));
m_maincpu->r().set(FUNC(ebball_state::write_r));
m_maincpu->o().set(FUNC(ebball_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 7);
m_display->set_segmask(0x100, 0x7f);
config.set_default_layout(layout_ebball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3798,11 +3835,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void ebball2(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void ebball2(machine_config &config);
};
// handlers
@@ -3867,18 +3906,18 @@ INPUT_PORTS_END
void ebball2_state::ebball2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 350000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(ebball2_state::read_k));
m_maincpu->r().set(FUNC(ebball2_state::write_r));
m_maincpu->o().set(FUNC(ebball2_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 8);
m_display->set_segmask(7, 0x7f);
config.set_default_layout(layout_ebball2);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3939,17 +3978,19 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
- void update_display();
- void write_r(u16 data);
- void write_o(u16 data);
- u8 read_k();
+ void ebball3(machine_config &config);
- void set_clock();
DECLARE_INPUT_CHANGED_MEMBER(skill_switch) { set_clock(); }
- void ebball3(machine_config &config);
protected:
virtual void machine_reset() override;
+
+private:
+ void set_clock();
+ void update_display();
+ void write_r(u16 data);
+ void write_o(u16 data);
+ u8 read_k();
};
void ebball3_state::machine_reset()
@@ -4036,32 +4077,32 @@ static INPUT_PORTS_START( ebball3 )
PORT_START("IN.2") // R2
PORT_CONFNAME( 0x01, 0x01, DEF_STR( Players ) )
- PORT_CONFSETTING( 0x01, "1" ) // Auto
- PORT_CONFSETTING( 0x00, "2" ) // Manual
+ PORT_CONFSETTING( 0x01, "1" ) // AUTO
+ PORT_CONFSETTING( 0x00, "2" ) // MAN
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Bunt")
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.3") // fake
PORT_CONFNAME( 0x01, 0x00, DEF_STR( Difficulty ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, ebball3_state, skill_switch, 0)
- PORT_CONFSETTING( 0x00, "Amateur" )
- PORT_CONFSETTING( 0x01, "Professional" )
+ PORT_CONFSETTING( 0x00, "1" ) // AM
+ PORT_CONFSETTING( 0x01, "2" ) // PRO
INPUT_PORTS_END
void ebball3_state::ebball3(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 340000); // see set_clock
m_maincpu->k().set(FUNC(ebball3_state::read_k));
m_maincpu->r().set(FUNC(ebball3_state::write_r));
m_maincpu->o().set(FUNC(ebball3_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10+2, 7);
m_display->set_segmask(3, 0x7f);
m_display->set_segmask(0xc00, 0x22);
config.set_default_layout(layout_ebball3);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4113,11 +4154,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void esbattle(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void esbattle(machine_config &config);
};
// handlers
@@ -4174,18 +4217,18 @@ INPUT_PORTS_END
void esbattle_state::esbattle(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 425000); // approximation - RC osc. R=47K, C=33pF
m_maincpu->k().set(FUNC(esbattle_state::read_k));
m_maincpu->r().set(FUNC(esbattle_state::write_r));
m_maincpu->o().set(FUNC(esbattle_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 8);
m_display->set_segmask(0x300, 0x7f);
config.set_default_layout(layout_esbattle);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4209,6 +4252,112 @@ ROM_END
/***************************************************************************
+ Entex Blast It
+ * TMS1000 MP0230 (die label 1000B, MP0230)
+ * 3 7seg LEDs, 49 other LEDs (both under an overlay mask), 1-bit sound
+
+***************************************************************************/
+
+class blastit_state : public hh_tms1k_state
+{
+public:
+ blastit_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_tms1k_state(mconfig, type, tag)
+ { }
+
+ void blastit(machine_config &config);
+
+private:
+ void update_display();
+ void write_r(u16 data);
+ void write_o(u16 data);
+ u8 read_k();
+};
+
+// handlers
+
+void blastit_state::update_display()
+{
+ m_display->matrix(m_r >> 1, m_o);
+}
+
+void blastit_state::write_r(u16 data)
+{
+ // R3: input mux
+ m_inp_mux = data >> 3 & 1;
+
+ // R0: speaker out
+ m_speaker->level_w(data & 1);
+
+ // R1-R7: led select
+ // R8-R10: digit select
+ m_r = data;
+ update_display();
+}
+
+void blastit_state::write_o(u16 data)
+{
+ // O0-O6: led state
+ m_o = data;
+ update_display();
+}
+
+u8 blastit_state::read_k()
+{
+ // K: multiplexed inputs
+ return read_inputs(1);
+}
+
+// config
+
+static INPUT_PORTS_START( blastit )
+ PORT_START("IN.0") // R3
+ 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_UP ) PORT_16WAY
+ PORT_CONFNAME( 0x08, 0x08, DEF_STR( Difficulty ) )
+ PORT_CONFSETTING( 0x08, "1" ) // AM
+ PORT_CONFSETTING( 0x00, "2" ) // PRO
+INPUT_PORTS_END
+
+void blastit_state::blastit(machine_config &config)
+{
+ // basic machine hardware
+ TMS1000(config, m_maincpu, 425000); // approximation - RC osc. R=47K, C=33pF
+ m_maincpu->k().set(FUNC(blastit_state::read_k));
+ m_maincpu->r().set(FUNC(blastit_state::write_r));
+ m_maincpu->o().set(FUNC(blastit_state::write_o));
+
+ // video hardware
+ PWM_DISPLAY(config, m_display).set_size(10, 7);
+ m_display->set_segmask(0x380, 0x7f);
+ m_display->set_bri_levels(0.01, 0.115); // ball/paddle is slightly brighter
+ config.set_default_layout(layout_blastit);
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+// roms
+
+ROM_START( blastit )
+ ROM_REGION( 0x0400, "maincpu", 0 )
+ ROM_LOAD( "mp0230", 0x0000, 0x0400, CRC(1eb5f473) SHA1(76cd8c0e04368aa2150d428018643e1d0b9adda0) )
+
+ 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_blastit_output.pla", 0, 365, CRC(fa8081df) SHA1(99706d5ad58a76d47446576fac18964e602171c8) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
Entex Space Invader
* TMS1100 MP1211 (die label same)
* 3 7seg LEDs, LED matrix and overlay mask, 1-bit sound
@@ -4226,16 +4375,17 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
- void update_display();
- void write_r(u16 data);
- void write_o(u16 data);
-
- void set_clock();
DECLARE_INPUT_CHANGED_MEMBER(skill_switch) { set_clock(); }
void einvader(machine_config &config);
protected:
virtual void machine_reset() override;
+
+private:
+ void set_clock();
+ void update_display();
+ void write_r(u16 data);
+ void write_o(u16 data);
};
void einvader_state::machine_reset()
@@ -4285,19 +4435,19 @@ static INPUT_PORTS_START( einvader )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
PORT_CONFNAME( 0x08, 0x00, DEF_STR( Difficulty ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, einvader_state, skill_switch, 0)
- PORT_CONFSETTING( 0x00, "Amateur" )
- PORT_CONFSETTING( 0x08, "Professional" )
+ PORT_CONFSETTING( 0x00, "1" ) // amateur
+ PORT_CONFSETTING( 0x08, "2" ) // professional
INPUT_PORTS_END
void einvader_state::einvader(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 320000); // see set_clock
m_maincpu->k().set_ioport("IN.0");
m_maincpu->r().set(FUNC(einvader_state::write_r));
m_maincpu->o().set(FUNC(einvader_state::write_o));
- /* video hardware */
+ // video hardware
screen_device &mask(SCREEN(config, "mask", SCREEN_TYPE_SVG));
mask.set_refresh_hz(60);
mask.set_size(945, 1080);
@@ -4308,7 +4458,7 @@ void einvader_state::einvader(machine_config &config)
m_display->set_bri_levels(0.01, 0.1); // ufo/player explosion is brighter
config.set_default_layout(layout_einvader);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4350,11 +4500,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void efootb4(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void efootb4(machine_config &config);
};
// handlers
@@ -4422,21 +4574,21 @@ static INPUT_PORTS_START( efootb4 )
PORT_CONFSETTING( 0x01, "1" ) // Auto
PORT_CONFSETTING( 0x00, "2" ) // Manual
PORT_CONFNAME( 0x02, 0x00, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x00, "Amateur" )
- PORT_CONFSETTING( 0x02, "Professional" )
+ PORT_CONFSETTING( 0x00, "1" ) // amateur
+ PORT_CONFSETTING( 0x02, "2" ) // professional
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("Status")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
void efootb4_state::efootb4(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1670(config, m_maincpu, 400000); // approximation - RC osc. R=42K, C=47pF
m_maincpu->k().set(FUNC(efootb4_state::read_k));
m_maincpu->r().set(FUNC(efootb4_state::write_r));
m_maincpu->o().set(FUNC(efootb4_state::write_o));
- /* video hardware */
+ // video hardware
screen_device &mask(SCREEN(config, "mask", SCREEN_TYPE_SVG));
mask.set_refresh_hz(60);
mask.set_size(1920, 904);
@@ -4446,7 +4598,7 @@ void efootb4_state::efootb4(machine_config &config)
m_display->set_segmask(0xfc00, 0x7f);
config.set_default_layout(layout_efootb4);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4498,11 +4650,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void ebaskb2(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void ebaskb2(machine_config &config);
};
// handlers
@@ -4544,8 +4698,8 @@ u8 ebaskb2_state::read_k()
static INPUT_PORTS_START( ebaskb2 )
PORT_START("IN.0") // R6
PORT_CONFNAME( 0x01, 0x01, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x01, "Amateur" )
- PORT_CONFSETTING( 0x00, "Professional" )
+ PORT_CONFSETTING( 0x01, "1" ) // amateur
+ PORT_CONFSETTING( 0x00, "2" ) // professional
PORT_CONFNAME( 0x02, 0x02, DEF_STR( Players ) )
PORT_CONFSETTING( 0x02, "1" ) // Auto
PORT_CONFSETTING( 0x00, "2" ) // Manual
@@ -4572,19 +4726,19 @@ INPUT_PORTS_END
void ebaskb2_state::ebaskb2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 360000); // approximation - RC osc. R=33K, C=82pF
m_maincpu->k().set(FUNC(ebaskb2_state::read_k));
m_maincpu->r().set(FUNC(ebaskb2_state::write_r));
m_maincpu->o().set(FUNC(ebaskb2_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 7);
m_display->set_segmask(0xf, 0x7f);
m_display->set_bri_levels(0.01, 0.1); // ball carrier led is brighter
config.set_default_layout(layout_ebaskb2);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4641,18 +4795,20 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
- void update_display();
- void write_r(u16 data);
- void write_o(u16 data);
- u8 read_k();
-
- void set_clock();
- DECLARE_INPUT_CHANGED_MEMBER(skill_switch) { set_clock(); }
void raisedvl(machine_config &config);
void ebknight(machine_config &config);
+ DECLARE_INPUT_CHANGED_MEMBER(skill_switch) { set_clock(); }
+
protected:
virtual void machine_reset() override;
+
+private:
+ void set_clock();
+ void update_display();
+ void write_r(u16 data);
+ void write_o(u16 data);
+ u8 read_k();
};
void raisedvl_state::machine_reset()
@@ -4726,18 +4882,18 @@ INPUT_PORTS_END
void raisedvl_state::raisedvl(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 350000); // see set_clock
m_maincpu->k().set(FUNC(raisedvl_state::read_k));
m_maincpu->r().set(FUNC(raisedvl_state::write_r));
m_maincpu->o().set(FUNC(raisedvl_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 7);
m_display->set_segmask(7, 0x7f);
config.set_default_layout(layout_raisedvl);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4808,11 +4964,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void f2pbball(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void f2pbball(machine_config &config);
};
// handlers
@@ -4878,18 +5036,18 @@ INPUT_PORTS_END
void f2pbball_state::f2pbball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 325000); // approximation - RC osc. R=51K, C=39pF
m_maincpu->k().set(FUNC(f2pbball_state::read_k));
m_maincpu->r().set(FUNC(f2pbball_state::write_r));
m_maincpu->o().set(FUNC(f2pbball_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x1e0, 0x7f);
config.set_default_layout(layout_f2pbball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4930,17 +5088,19 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
- void update_display();
- void write_r(u16 data);
- void write_o(u16 data);
- u8 read_k();
+ void f3in1(machine_config &config);
- void set_clock();
DECLARE_INPUT_CHANGED_MEMBER(skill_switch) { set_clock(); }
- void f3in1(machine_config &config);
protected:
virtual void machine_reset() override;
+
+private:
+ void set_clock();
+ void update_display();
+ void write_r(u16 data);
+ void write_o(u16 data);
+ u8 read_k();
};
void f3in1_state::machine_reset()
@@ -5017,25 +5177,25 @@ static INPUT_PORTS_START( f3in1 )
PORT_START("IN.4") // fake
PORT_CONFNAME( 0x01, 0x00, DEF_STR( Difficulty ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, f3in1_state, skill_switch, 0)
- PORT_CONFSETTING( 0x00, "Regular" ) // REG
- PORT_CONFSETTING( 0x01, "Professional" ) // PROF
+ PORT_CONFSETTING( 0x00, "1" ) // REG
+ PORT_CONFSETTING( 0x01, "2" ) // PROF
INPUT_PORTS_END
void f3in1_state::f3in1(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 300000); // see set_clock
m_maincpu->k().set(FUNC(f3in1_state::read_k));
m_maincpu->r().set(FUNC(f3in1_state::write_r));
m_maincpu->o().set(FUNC(f3in1_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 8);
m_display->set_segmask(0x3c0, 0x7f);
m_display->set_bri_levels(0.003, 0.05); // player led is brighter
config.set_default_layout(layout_f3in1);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -5078,16 +5238,17 @@ public:
m_beeper(*this, "beeper")
{ }
+ void gpoker(machine_config &config);
+
+protected:
+ virtual void machine_reset() override;
+
required_device<beep_device> m_beeper;
void update_display();
virtual void write_r(u16 data);
virtual void write_o(u16 data);
virtual u8 read_k();
- void gpoker(machine_config &config);
-
-protected:
- virtual void machine_reset() override;
};
void gpoker_state::machine_reset()
@@ -5186,18 +5347,18 @@ INPUT_PORTS_END
void gpoker_state::gpoker(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1370(config, m_maincpu, 375000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(gpoker_state::read_k));
m_maincpu->r().set(FUNC(gpoker_state::write_r));
m_maincpu->o().set(FUNC(gpoker_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(11, 14);
m_display->set_segmask(0x7ff, 0x20ff); // 7seg + bottom-right diagonal
config.set_default_layout(layout_gpoker);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
BEEP(config, m_beeper, 2400); // astable multivibrator - C1 and C2 are 0.003uF, R1 and R4 are 1K, R2 and R3 are 100K
m_beeper->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -5239,8 +5400,10 @@ public:
gpoker_state(mconfig, type, tag)
{ }
- virtual void write_r(u16 data) override;
void gjackpot(machine_config &config);
+
+private:
+ virtual void write_r(u16 data) override;
};
// handlers
@@ -5315,11 +5478,11 @@ void gjackpot_state::gjackpot(machine_config &config)
{
gpoker(config);
- /* basic machine hardware */
+ // basic machine hardware
TMS1670(config.replace(), m_maincpu, 375000); // approximation - RC osc. R=47K, C=47pF
- m_maincpu->k().set(FUNC(gpoker_state::read_k));
+ m_maincpu->k().set(FUNC(gjackpot_state::read_k));
m_maincpu->r().set(FUNC(gjackpot_state::write_r));
- m_maincpu->o().set(FUNC(gpoker_state::write_o));
+ m_maincpu->o().set(FUNC(gjackpot_state::write_o));
config.set_default_layout(layout_gjackpot);
}
@@ -5365,11 +5528,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void ginv(machine_config &config);
+
+private:
void update_display();
virtual void write_r(u16 data);
virtual void write_o(u16 data);
virtual u8 read_k();
- void ginv(machine_config &config);
};
// handlers
@@ -5429,13 +5594,13 @@ INPUT_PORTS_END
void ginv_state::ginv(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1370(config, m_maincpu, 350000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(ginv_state::read_k));
m_maincpu->r().set(FUNC(ginv_state::write_r));
m_maincpu->o().set(FUNC(ginv_state::write_o));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(236, 1080);
@@ -5443,7 +5608,7 @@ void ginv_state::ginv(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 12);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -5489,11 +5654,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void ginv1000(machine_config &config);
+
+private:
void update_display();
virtual void write_r(u16 data);
virtual void write_o(u16 data);
virtual u8 read_k();
- void ginv1000(machine_config &config);
};
// handlers
@@ -5554,13 +5721,13 @@ INPUT_PORTS_END
void ginv1000_state::ginv1000(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1370(config, m_maincpu, 350000); // approximation
m_maincpu->k().set(FUNC(ginv1000_state::read_k));
m_maincpu->r().set(FUNC(ginv1000_state::write_r));
m_maincpu->o().set(FUNC(ginv1000_state::write_o));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(226, 1080);
@@ -5568,7 +5735,7 @@ void ginv1000_state::ginv1000(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 12);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -5615,6 +5782,9 @@ public:
m_expander(*this, "expander")
{ }
+ void ginv2000(machine_config &config);
+
+private:
required_device<tms1024_device> m_expander;
void expander_w(offs_t offset, u8 data);
@@ -5622,7 +5792,6 @@ public:
virtual void write_r(u16 data);
virtual void write_o(u16 data);
virtual u8 read_k();
- void ginv2000(machine_config &config);
};
// handlers
@@ -5690,7 +5859,7 @@ INPUT_PORTS_END
void ginv2000_state::ginv2000(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1370(config, m_maincpu, 425000); // approximation - RC osc. R=36K, C=47pF
m_maincpu->k().set(FUNC(ginv2000_state::read_k));
m_maincpu->r().set(FUNC(ginv2000_state::write_r));
@@ -5702,7 +5871,7 @@ void ginv2000_state::ginv2000(machine_config &config)
m_expander->write_port6_callback().set(FUNC(ginv2000_state::expander_w));
m_expander->write_port7_callback().set(FUNC(ginv2000_state::expander_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(364, 1080);
@@ -5710,7 +5879,7 @@ void ginv2000_state::ginv2000(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 16);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -5760,11 +5929,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void fxmcr165(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void fxmcr165(machine_config &config);
};
// handlers
@@ -5851,18 +6022,18 @@ INPUT_PORTS_END
void fxmcr165_state::fxmcr165(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->k().set(FUNC(fxmcr165_state::read_k));
m_maincpu->r().set(FUNC(fxmcr165_state::write_r));
m_maincpu->o().set(FUNC(fxmcr165_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1+1, 7);
m_display->set_segmask(1, 0x7f);
config.set_default_layout(layout_fxmcr165);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -5906,10 +6077,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void elecdet(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void elecdet(machine_config &config);
};
// handlers
@@ -5990,19 +6163,19 @@ INPUT_PORTS_END
void elecdet_state::elecdet(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0980(config, m_maincpu, 425000); // approximation
m_maincpu->k().set(FUNC(elecdet_state::read_k));
m_maincpu->r().set(FUNC(elecdet_state::write_r));
m_maincpu->o().set(FUNC(elecdet_state::write_o));
- m_maincpu->power_off().set(FUNC(hh_tms1k_state::auto_power_off));
+ m_maincpu->power_off().set(FUNC(elecdet_state::auto_power_off));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(7, 7);
m_display->set_segmask(0x7f, 0x7f);
config.set_default_layout(layout_elecdet);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 0.5, 0.5, 1.0};
@@ -6049,11 +6222,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void starwbc(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void starwbc(machine_config &config);
};
// handlers
@@ -6136,18 +6311,18 @@ INPUT_PORTS_END
void starwbc_state::starwbc(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 350000); // approximation - RC osc. R=51K, C=47pF
m_maincpu->k().set(FUNC(starwbc_state::read_k));
m_maincpu->r().set(FUNC(starwbc_state::write_r));
m_maincpu->o().set(FUNC(starwbc_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 8);
m_display->set_segmask(0x140, 0x7f);
config.set_default_layout(layout_starwbc);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -6197,11 +6372,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void astro(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void astro(machine_config &config);
};
// handlers
@@ -6286,18 +6463,18 @@ INPUT_PORTS_END
void astro_state::astro(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1470(config, m_maincpu, 450000); // approximation - RC osc. R=4.7K, C=33pF
m_maincpu->k().set(FUNC(astro_state::read_k));
m_maincpu->r().set(FUNC(astro_state::write_r));
m_maincpu->o().set(FUNC(astro_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 8);
m_display->set_segmask(0x3ff, 0xff);
config.set_default_layout(layout_astro);
- /* no sound! */
+ // no sound!
}
// roms
@@ -6349,11 +6526,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void elecbowl(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void elecbowl(machine_config &config);
};
// handlers
@@ -6447,20 +6626,20 @@ static const u16 elecbowl_output_pla[0x20] =
void elecbowl_state::elecbowl(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 350000); // approximation - RC osc. R=33K, C=100pF
m_maincpu->set_output_pla(elecbowl_output_pla);
m_maincpu->k().set(FUNC(elecbowl_state::read_k));
m_maincpu->r().set(FUNC(elecbowl_state::write_r));
m_maincpu->o().set(FUNC(elecbowl_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(7, 8);
m_display->set_segmask(0xf, 0x7f);
m_display->set_segmask(0x10, 0x06); // 1
config.set_default_layout(layout_elecbowl);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -6505,12 +6684,14 @@ public:
m_lcd(*this, "lcd")
{ }
+ void horseran(machine_config &config);
+
+private:
required_device<hlcd0569_device> m_lcd;
void lcd_output_w(offs_t offset, u32 data);
void write_r(u16 data);
u8 read_k();
- void horseran(machine_config &config);
};
// handlers
@@ -6613,12 +6794,12 @@ INPUT_PORTS_END
void horseran_state::horseran(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 300000); // approximation - RC osc. R=56K, C=47pF
m_maincpu->k().set(FUNC(horseran_state::read_k));
m_maincpu->r().set(FUNC(horseran_state::write_r));
- /* video hardware */
+ // video hardware
HLCD0569(config, m_lcd, 1100); // C=0.022uF
m_lcd->write_cols().set(FUNC(horseran_state::lcd_output_w));
@@ -6626,7 +6807,7 @@ void horseran_state::horseran(machine_config &config)
m_display->set_segmask(0x3f<<3, 0x7f);
config.set_default_layout(layout_horseran);
- /* no sound! */
+ // no sound!
}
// roms
@@ -6663,10 +6844,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void mdndclab(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void mdndclab(machine_config &config);
};
// handlers
@@ -6806,16 +6989,15 @@ INPUT_PORTS_END
void mdndclab_state::mdndclab(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 475000); // approximation - RC osc. R=27K, C=100pF
m_maincpu->k().set(FUNC(mdndclab_state::read_k));
m_maincpu->r().set(FUNC(mdndclab_state::write_r));
m_maincpu->o().set(FUNC(mdndclab_state::write_o));
- /* no visual feedback! */
config.set_default_layout(layout_mdndclab); // playing board
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -6862,10 +7044,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void comp4(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void comp4(machine_config &config);
};
// handlers
@@ -6921,17 +7105,17 @@ INPUT_PORTS_END
void comp4_state::comp4(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0970(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(comp4_state::read_k));
m_maincpu->r().set(FUNC(comp4_state::write_r));
m_maincpu->o().set(FUNC(comp4_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 11);
config.set_default_layout(layout_comp4);
- /* no sound! */
+ // no sound!
}
// roms
@@ -6982,10 +7166,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void bship(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void bship(machine_config &config);
};
// handlers
@@ -7088,17 +7274,17 @@ INPUT_PORTS_END
void bship_state::bship(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 200000); // approximation - RC osc. R=100K, C=47pF
m_maincpu->k().set(FUNC(bship_state::read_k));
m_maincpu->r().set(FUNC(bship_state::write_r));
m_maincpu->o().set(FUNC(bship_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 1);
config.set_default_layout(layout_bship);
- /* sound hardware */
+ // sound hardware
// TODO
}
@@ -7138,12 +7324,14 @@ public:
m_sn(*this, "sn76477")
{ }
+ void bshipb(machine_config &config);
+
+private:
required_device<sn76477_device> m_sn;
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void bshipb(machine_config &config);
};
// handlers
@@ -7204,17 +7392,17 @@ u8 bshipb_state::read_k()
void bshipb_state::bshipb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 200000); // approximation - RC osc. R=100K, C=47pF
m_maincpu->k().set(FUNC(bshipb_state::read_k));
m_maincpu->r().set(FUNC(bshipb_state::write_r));
m_maincpu->o().set(FUNC(bshipb_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 1);
config.set_default_layout(layout_bship);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SN76477(config, m_sn);
m_sn->set_noise_params(RES_K(47), RES_K(100), CAP_P(47)); // R18, R17, C8
@@ -7272,9 +7460,11 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void simon(machine_config &config);
+
+private:
void write_r(u16 data);
u8 read_k();
- void simon(machine_config &config);
};
// handlers
@@ -7341,16 +7531,16 @@ INPUT_PORTS_END
void simon_state::simon(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 350000); // approximation - RC osc. R=33K, C=100pF
m_maincpu->k().set(FUNC(simon_state::read_k));
m_maincpu->r().set(FUNC(simon_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 4);
config.set_default_layout(layout_simon);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -7400,15 +7590,17 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
- void write_r(u16 data);
- u8 read_k();
+ void ssimon(machine_config &config);
- void set_clock();
DECLARE_INPUT_CHANGED_MEMBER(speed_switch) { set_clock(); }
- void ssimon(machine_config &config);
protected:
virtual void machine_reset() override;
+
+private:
+ void set_clock();
+ void write_r(u16 data);
+ u8 read_k();
};
void ssimon_state::machine_reset()
@@ -7508,16 +7700,16 @@ INPUT_PORTS_END
void ssimon_state::ssimon(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 275000); // see set_clock
m_maincpu->k().set(FUNC(ssimon_state::read_k));
m_maincpu->r().set(FUNC(ssimon_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 4);
config.set_default_layout(layout_ssimon);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -7578,7 +7770,7 @@ private:
void write_o(u16 data);
u8 read_k();
- int m_gearbox_pos;
+ int m_gearbox_pos = 0;
bool sensor_state() { return m_gearbox_pos < 0 && m_display->element_on(0, 0); }
TIMER_DEVICE_CALLBACK_MEMBER(gearbox_sim_tick);
@@ -7593,14 +7785,14 @@ void bigtrak_state::machine_start()
{
hh_tms1k_state::machine_start();
+ // resolve handlers
m_left_motor_forward.resolve();
m_left_motor_reverse.resolve();
m_right_motor_forward.resolve();
m_right_motor_reverse.resolve();
m_ext_out.resolve();
- // zerofill/register for savestates
- m_gearbox_pos = 0;
+ // register for savestates
save_item(NAME(m_gearbox_pos));
}
@@ -7718,7 +7910,7 @@ INPUT_PORTS_END
void bigtrak_state::bigtrak(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 200000); // approximation - RC osc. R=83K, C=100pF
m_maincpu->k().set(FUNC(bigtrak_state::read_k));
m_maincpu->r().set(FUNC(bigtrak_state::write_r));
@@ -7726,11 +7918,11 @@ void bigtrak_state::bigtrak(machine_config &config)
TIMER(config, "gearbox").configure_periodic(FUNC(bigtrak_state::gearbox_sim_tick), attotime::from_msec(1));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 2);
config.set_default_layout(layout_bigtrak);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[8] = { 0.0, 1.0/3.0, 1.0/3.0, 2.0/3.0, 1.0/3.0, 2.0/3.0, 2.0/3.0, 1.0 };
@@ -7796,11 +7988,11 @@ private:
output_finder<> m_card_pos_out;
output_finder<> m_motor_on_out;
- int m_motor_pos;
- int m_motor_pos_prev;
- int m_motor_decay;
- bool m_motor_on;
- bool m_sensor_blind;
+ int m_motor_pos = 0;
+ int m_motor_pos_prev = -1;
+ int m_motor_decay = 0;
+ bool m_motor_on = false;
+ bool m_sensor_blind = false;
TIMER_DEVICE_CALLBACK_MEMBER(motor_sim_tick);
@@ -7817,13 +8009,6 @@ void mbdtower_state::machine_start()
m_card_pos_out.resolve();
m_motor_on_out.resolve();
- // zerofill
- m_motor_pos = 0;
- m_motor_pos_prev = -1;
- m_motor_decay = 0;
- m_motor_on = false;
- m_sensor_blind = false;
-
// register for savestates
save_item(NAME(m_motor_pos));
/* save_item(NAME(m_motor_pos_prev)); */ // don't save!
@@ -7972,7 +8157,7 @@ INPUT_PORTS_END
void mbdtower_state::mbdtower(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1400(config, m_maincpu, 425000); // approximation - RC osc. R=43K, C=56pF
m_maincpu->k().set(FUNC(mbdtower_state::read_k));
m_maincpu->r().set(FUNC(mbdtower_state::write_r));
@@ -7980,12 +8165,12 @@ void mbdtower_state::mbdtower(machine_config &config)
TIMER(config, "tower_motor").configure_periodic(FUNC(mbdtower_state::motor_sim_tick), attotime::from_msec(3500/0x80)); // ~3.5sec for a full rotation
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(3, 7);
m_display->set_segmask(6, 0x7f);
config.set_default_layout(layout_mbdtower);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -8025,10 +8210,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void arcmania(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void arcmania(machine_config &config);
};
// handlers
@@ -8096,17 +8283,17 @@ INPUT_PORTS_END
void arcmania_state::arcmania(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 250000); // approximation - RC osc. R=56K, C=100pF
m_maincpu->k().set(FUNC(arcmania_state::read_k));
m_maincpu->r().set(FUNC(arcmania_state::write_r));
m_maincpu->o().set(FUNC(arcmania_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 9);
config.set_default_layout(layout_arcmania);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[8] = { 0.0, 1.0/3.0, 1.0/3.0, 2.0/3.0, 1.0/3.0, 2.0/3.0, 2.0/3.0, 1.0 };
@@ -8149,10 +8336,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void cnsector(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void cnsector(machine_config &config);
};
// handlers
@@ -8228,18 +8417,18 @@ INPUT_PORTS_END
void cnsector_state::cnsector(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0970(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(cnsector_state::read_k));
m_maincpu->r().set(FUNC(cnsector_state::write_r));
m_maincpu->o().set(FUNC(cnsector_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 8);
m_display->set_segmask(0x3f, 0xff);
config.set_default_layout(layout_cnsector);
- /* no sound! */
+ // no sound!
}
// roms
@@ -8291,10 +8480,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void merlin(machine_config &config);
+
+protected:
virtual void write_r(u16 data);
virtual void write_o(u16 data);
virtual u8 read_k();
- void merlin(machine_config &config);
};
// handlers
@@ -8358,17 +8549,17 @@ INPUT_PORTS_END
void merlin_state::merlin(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 350000); // approximation - RC osc. R=33K, C=100pF
m_maincpu->k().set(FUNC(merlin_state::read_k));
m_maincpu->r().set(FUNC(merlin_state::write_r));
m_maincpu->o().set(FUNC(merlin_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 11);
config.set_default_layout(layout_merlin);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[8] = { 0.0, 1.0/3.0, 1.0/3.0, 2.0/3.0, 1.0/3.0, 2.0/3.0, 2.0/3.0, 1.0 };
@@ -8439,7 +8630,7 @@ void mmerlin_state::mmerlin(machine_config &config)
{
merlin(config);
- /* basic machine hardware */
+ // basic machine hardware
TMS1400(config.replace(), m_maincpu, 425000); // approximation - RC osc. R=30K, C=100pF
m_maincpu->k().set(FUNC(mmerlin_state::read_k));
m_maincpu->r().set(FUNC(mmerlin_state::write_r));
@@ -8483,10 +8674,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void pbmastm(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void pbmastm(machine_config &config);
};
// handlers
@@ -8551,17 +8744,17 @@ INPUT_PORTS_END
void pbmastm_state::pbmastm(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 300000); // approximation - RC osc. R=56K, C=47pF
m_maincpu->k().set(FUNC(pbmastm_state::read_k));
m_maincpu->r().set(FUNC(pbmastm_state::write_r));
m_maincpu->o().set(FUNC(pbmastm_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 10);
config.set_default_layout(layout_pbmastm);
- /* no sound! */
+ // no sound!
}
// roms
@@ -8600,10 +8793,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void stopthief(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void stopthief(machine_config &config);
};
// handlers
@@ -8673,19 +8868,19 @@ INPUT_PORTS_END
void stopthief_state::stopthief(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0980(config, m_maincpu, 425000); // approximation
m_maincpu->k().set(FUNC(stopthief_state::read_k));
m_maincpu->r().set(FUNC(stopthief_state::write_r));
m_maincpu->o().set(FUNC(stopthief_state::write_o));
- m_maincpu->power_off().set(FUNC(hh_tms1k_state::auto_power_off));
+ m_maincpu->power_off().set(FUNC(stopthief_state::auto_power_off));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(3, 7);
m_display->set_segmask(7, 0x7f);
config.set_default_layout(layout_stopthief);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[7] = { 1.0/7.0, 1.0/6.0, 1.0/5.0, 1.0/4.0, 1.0/3.0, 1.0/2.0, 1.0 };
@@ -8753,11 +8948,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void bankshot(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void bankshot(machine_config &config);
};
// handlers
@@ -8823,18 +9020,18 @@ INPUT_PORTS_END
void bankshot_state::bankshot(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1400(config, m_maincpu, 475000); // approximation - RC osc. R=24K, C=100pF
m_maincpu->k().set(FUNC(bankshot_state::read_k));
m_maincpu->r().set(FUNC(bankshot_state::write_r));
m_maincpu->o().set(FUNC(bankshot_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(11, 8);
m_display->set_bri_levels(0.01, 0.08); // cue ball is brigher
config.set_default_layout(layout_bankshot);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -8895,11 +9092,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void splitsec(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void splitsec(machine_config &config);
};
// handlers
@@ -8954,17 +9153,17 @@ INPUT_PORTS_END
void splitsec_state::splitsec(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1400(config, m_maincpu, 475000); // approximation - RC osc. R=24K, C=100pF
m_maincpu->k().set(FUNC(splitsec_state::read_k));
m_maincpu->r().set(FUNC(splitsec_state::write_r));
m_maincpu->o().set(FUNC(splitsec_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 7);
config.set_default_layout(layout_splitsec);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -9004,10 +9203,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void lostreas(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void lostreas(machine_config &config);
};
// handlers
@@ -9079,17 +9280,17 @@ INPUT_PORTS_END
void lostreas_state::lostreas(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 425000); // approximation - RC osc. R=39K, C=47pF
m_maincpu->k().set(FUNC(lostreas_state::read_k));
m_maincpu->r().set(FUNC(lostreas_state::write_r));
m_maincpu->o().set(FUNC(lostreas_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 11);
config.set_default_layout(layout_lostreas);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -9142,10 +9343,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void alphie(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void alphie(machine_config &config);
};
// handlers
@@ -9224,18 +9427,18 @@ static const u16 alphie_output_pla[0x20] =
void alphie_state::alphie(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 350000); // approximation
m_maincpu->set_output_pla(alphie_output_pla);
m_maincpu->k().set(FUNC(alphie_state::read_k));
m_maincpu->r().set(FUNC(alphie_state::write_r));
m_maincpu->o().set(FUNC(alphie_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 5);
config.set_default_layout(layout_alphie);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -9276,11 +9479,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void tcfball(machine_config &config);
+
+protected:
void update_display();
virtual void write_r(u16 data);
virtual void write_o(u16 data);
virtual u8 read_k();
- void tcfball(machine_config &config);
};
// handlers
@@ -9345,20 +9550,20 @@ INPUT_PORTS_END
void tcfball_state::tcfball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 375000); // approximation - RC osc. R=56K, C=24pF
m_maincpu->k().set(FUNC(tcfball_state::read_k));
m_maincpu->r().set(FUNC(tcfball_state::write_r));
m_maincpu->o().set(FUNC(tcfball_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(11, 8);
m_display->set_segmask(0x77, 0x7f);
m_display->set_segmask(0x08, 0xff); // R3 has DP
m_display->set_bri_levels(0.003, 0.03); // offense leds are brighter
config.set_default_layout(layout_tcfball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -9421,7 +9626,7 @@ void tcfballa_state::tcfballa(machine_config &config)
{
tcfball(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_clock(375000); // approximation - RC osc. R=47K, C=50pF
config.set_default_layout(layout_tcfballa);
@@ -9480,11 +9685,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void tandy12(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void tandy12(machine_config &config);
};
// handlers
@@ -9590,18 +9797,18 @@ static const u16 tandy12_output_pla[0x20] =
void tandy12_state::tandy12(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 400000); // approximation - RC osc. R=39K, C=47pF
m_maincpu->set_output_pla(tandy12_output_pla);
m_maincpu->k().set(FUNC(tandy12_state::read_k));
m_maincpu->r().set(FUNC(tandy12_state::write_r));
m_maincpu->o().set(FUNC(tandy12_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 13);
config.set_default_layout(layout_tandy12);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -9646,10 +9853,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void monkeysee(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void monkeysee(machine_config &config);
};
// handlers
@@ -9712,17 +9921,17 @@ INPUT_PORTS_END
void monkeysee_state::monkeysee(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 250000); // approximation - RC osc. R=68K, C=47pF
m_maincpu->k().set(FUNC(monkeysee_state::read_k));
m_maincpu->r().set(FUNC(monkeysee_state::write_r));
m_maincpu->o().set(FUNC(monkeysee_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 2);
config.set_default_layout(layout_monkeysee);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -9765,13 +9974,15 @@ public:
m_speech(*this, "speech")
{ }
+ void speechp(machine_config &config);
+
+private:
required_device<s14001a_device> m_speech;
void update_display();
virtual void write_r(u16 data);
virtual void write_o(u16 data);
virtual u8 read_k();
- void speechp(machine_config &config);
};
// handlers
@@ -9873,18 +10084,18 @@ INPUT_PORTS_END
void speechp_state::speechp(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 400000); // approximation - RC osc. R=39K, C=47pF
m_maincpu->k().set(FUNC(speechp_state::read_k));
m_maincpu->r().set(FUNC(speechp_state::write_r));
m_maincpu->o().set(FUNC(speechp_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x1ff, 0xff);
config.set_default_layout(layout_speechp);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
S14001A(config, m_speech, 25000); // approximation
m_speech->add_route(ALL_OUTPUTS, "mono", 0.75);
@@ -9928,11 +10139,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void tisr16(machine_config &config);
+
+private:
void update_display();
void write_o(u16 data);
void write_r(u16 data);
u8 read_k();
- void tisr16(machine_config &config);
};
// handlers
@@ -10107,18 +10320,18 @@ INPUT_PORTS_END
void tisr16_state::tisr16(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 300000); // approximation - RC osc. R=43K, C=68pf (note: tisr16ii MCU RC osc. is different: R=30K, C=100pf, same freq)
m_maincpu->k().set(FUNC(tisr16_state::read_k));
m_maincpu->o().set(FUNC(tisr16_state::write_o));
m_maincpu->r().set(FUNC(tisr16_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(12, 8);
m_display->set_segmask(0xfff, 0xff);
config.set_default_layout(layout_tisr16);
- /* no sound! */
+ // no sound!
}
// roms
@@ -10270,26 +10483,26 @@ INPUT_PORTS_END
void ti1250_state::ti1250(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0950(config, m_maincpu, 200000); // approximation - RC osc. R=68K, C=68pf
m_maincpu->k().set(FUNC(ti1250_state::read_k));
m_maincpu->o().set(FUNC(ti1250_state::write_o));
m_maincpu->r().set(FUNC(ti1250_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0xff, 0xff);
m_display->set_segmask(0x100, 0x40); // R8 only has segment G connected
config.set_default_layout(layout_ti1250);
- /* no sound! */
+ // no sound!
}
void ti1250_state::ti1270(machine_config &config)
{
ti1250(config);
- /* basic machine hardware */
+ // basic machine hardware
TMS0970(config.replace(), m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(ti1250_state::read_k));
m_maincpu->o().set(FUNC(ti1250_state::write_o));
@@ -10447,18 +10660,18 @@ INPUT_PORTS_END
void ti25503_state::ti25503(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1040(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(ti25503_state::read_k));
m_maincpu->o().set(FUNC(ti25503_state::write_o));
m_maincpu->r().set(FUNC(ti25503_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x1ff, 0xff);
config.set_default_layout(layout_ti25503);
- /* no sound! */
+ // no sound!
}
// roms
@@ -10599,18 +10812,18 @@ INPUT_PORTS_END
void ti5100_state::ti5100(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1070(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(ti5100_state::read_k));
m_maincpu->o().set(FUNC(ti5100_state::write_o));
m_maincpu->r().set(FUNC(ti5100_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(11, 9);
m_display->set_segmask(0x7ff, 0xff);
config.set_default_layout(layout_ti5100);
- /* no sound! */
+ // no sound!
}
// roms
@@ -10869,20 +11082,20 @@ INPUT_PORTS_END
void ti30_state::ti30(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0980(config, m_maincpu, 400000); // guessed
m_maincpu->k().set(FUNC(ti30_state::read_k));
m_maincpu->o().set(FUNC(ti30_state::write_o));
m_maincpu->r().set(FUNC(ti30_state::write_r));
- m_maincpu->power_off().set(FUNC(hh_tms1k_state::auto_power_off));
+ m_maincpu->power_off().set(FUNC(ti30_state::auto_power_off));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x1fe, 0xff);
m_display->set_segmask(0x001, 0xe2); // 1st digit only has segments B,F,G,DP
config.set_default_layout(layout_ti30);
- /* no sound! */
+ // no sound!
}
// roms
@@ -11018,18 +11231,18 @@ INPUT_PORTS_END
void ti1000_state::ti1000(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1990(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(ti1000_state::read_k));
m_maincpu->o().set(FUNC(ti1000_state::write_o));
m_maincpu->r().set(FUNC(ti1000_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(8, 8);
m_display->set_segmask(0xff, 0xff);
config.set_default_layout(layout_ti1270);
- /* no sound! */
+ // no sound!
}
// roms
@@ -11069,6 +11282,7 @@ public:
void wizatron(machine_config &config);
+protected:
virtual void write_o(u16 data);
virtual void write_r(u16 data);
virtual u8 read_k();
@@ -11135,19 +11349,19 @@ INPUT_PORTS_END
void wizatron_state::wizatron(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0970(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(wizatron_state::read_k));
m_maincpu->o().set(FUNC(wizatron_state::write_o));
m_maincpu->r().set(FUNC(wizatron_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 7);
m_display->set_segmask(0x1ff^8, 0x7f);
m_display->set_segmask(8, 0x41); // equals sign
config.set_default_layout(layout_wizatron);
- /* no sound! */
+ // no sound!
}
// roms
@@ -11232,7 +11446,7 @@ void lilprof_state::lilprof(machine_config &config)
{
wizatron(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->k().set(FUNC(lilprof_state::read_k));
m_maincpu->o().set(FUNC(lilprof_state::write_o));
}
@@ -11351,18 +11565,18 @@ INPUT_PORTS_END
void lilprof78_state::lilprof78(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1990(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(lilprof78_state::read_k));
m_maincpu->o().set(FUNC(lilprof78_state::write_o));
m_maincpu->r().set(FUNC(lilprof78_state::write_r));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 7);
m_display->set_segmask(0x1ff, 0x7f);
config.set_default_layout(layout_wizatron);
- /* no sound! */
+ // no sound!
}
// roms
@@ -11405,10 +11619,11 @@ public:
m_ram(*this, "ram")
{ }
- required_device<tmc0999_device> m_ram;
-
void ti1680(machine_config &config);
+private:
+ required_device<tmc0999_device> m_ram;
+
virtual void update_display();
virtual void write_o(u16 data);
virtual void write_r(u16 data);
@@ -11496,21 +11711,21 @@ INPUT_PORTS_END
void ti1680_state::ti1680(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1980(config, m_maincpu, 300000); // approximation
m_maincpu->k().set(FUNC(ti1680_state::read_k));
m_maincpu->o().set(FUNC(ti1680_state::write_o));
m_maincpu->r().set(FUNC(ti1680_state::write_r));
- m_maincpu->power_off().set(FUNC(hh_tms1k_state::auto_power_off));
+ m_maincpu->power_off().set(FUNC(ti1680_state::auto_power_off));
TMC0999(config, m_ram);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 9);
m_display->set_segmask(0x1fe, 0xff);
config.set_default_layout(layout_ti1680);
- /* no sound! */
+ // no sound!
}
// roms
@@ -11548,6 +11763,7 @@ public:
void dataman(machine_config &config);
+protected:
virtual void update_display();
virtual void write_o(u16 data);
virtual void write_r(u16 data);
@@ -11627,19 +11843,19 @@ INPUT_PORTS_END
void dataman_state::dataman(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1980(config, m_maincpu, 300000); // patent says 300kHz
m_maincpu->k().set(FUNC(dataman_state::read_k));
m_maincpu->o().set(FUNC(dataman_state::write_o));
m_maincpu->r().set(FUNC(dataman_state::write_r));
- m_maincpu->power_off().set(FUNC(hh_tms1k_state::auto_power_off));
+ m_maincpu->power_off().set(FUNC(dataman_state::auto_power_off));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0x1ff, 0x7f);
config.set_default_layout(layout_dataman);
- /* no sound! */
+ // no sound!
}
// roms
@@ -11714,12 +11930,12 @@ void mathmarv_state::mathmarv(machine_config &config)
{
dataman(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->r().set(FUNC(mathmarv_state::write_r));
config.set_default_layout(layout_mathmarv);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -11766,10 +11982,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void timaze(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void timaze(machine_config &config);
};
// handlers
@@ -11804,18 +12022,18 @@ INPUT_PORTS_END
void timaze_state::timaze(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 200000); // approximation - RC osc. R=80K, C=27pF
m_maincpu->k().set(FUNC(timaze_state::read_k));
m_maincpu->r().set(FUNC(timaze_state::write_r));
m_maincpu->o().set(FUNC(timaze_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 8);
m_display->set_segmask(1, 0x5c);
config.set_default_layout(layout_timaze);
- /* no sound! */
+ // no sound!
}
// roms
@@ -11854,13 +12072,14 @@ public:
m_60hz(*this, "ac_line")
{ }
- void write_r(u16 data);
- void write_o(u16 data);
- u8 read_k();
void tithermos(machine_config &config);
private:
required_device<clock_device> m_60hz;
+
+ void write_r(u16 data);
+ void write_o(u16 data);
+ u8 read_k();
};
// handlers
@@ -11959,7 +12178,7 @@ INPUT_PORTS_END
void tithermos_state::tithermos(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0970(config, m_maincpu, 250000); // approximation
m_maincpu->k().set(FUNC(tithermos_state::read_k));
m_maincpu->r().set(FUNC(tithermos_state::write_r));
@@ -11967,12 +12186,12 @@ void tithermos_state::tithermos(machine_config &config)
CLOCK(config, "ac_line", 60);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(4, 7);
m_display->set_segmask(0xf, 0x7f);
config.set_default_layout(layout_tithermos);
- /* no sound! */
+ // no sound!
}
// roms
@@ -12016,10 +12235,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void subwars(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
- void subwars(machine_config &config);
};
// handlers
@@ -12059,18 +12280,18 @@ INPUT_PORTS_END
void subwars_state::subwars(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1200(config, m_maincpu, 550000); // approximation - RC osc. R=24K, C=47pF
m_maincpu->k().set_ioport("IN.0");
m_maincpu->r().set(FUNC(subwars_state::write_r));
m_maincpu->o().set(FUNC(subwars_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(13, 7);
m_display->set_segmask(0xf, 0x7f);
config.set_default_layout(layout_subwars);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -12113,10 +12334,12 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void copycat(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void copycat(machine_config &config);
};
// handlers
@@ -12176,17 +12399,17 @@ INPUT_PORTS_END
void copycat_state::copycat(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000(config, m_maincpu, 320000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(copycat_state::read_k));
m_maincpu->r().set(FUNC(copycat_state::write_r));
m_maincpu->o().set(FUNC(copycat_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 4);
config.set_default_layout(layout_copycat);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
@@ -12235,9 +12458,11 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void copycatm2(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
- void copycatm2(machine_config &config);
};
// handlers
@@ -12266,17 +12491,17 @@ INPUT_PORTS_END
void copycatm2_state::copycatm2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1730(config, m_maincpu, 275000); // approximation - RC osc. R=100K, C=47pF
m_maincpu->k().set_ioport("IN.0");
m_maincpu->r().set(FUNC(copycatm2_state::write_r));
m_maincpu->o().set(FUNC(copycatm2_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 4);
config.set_default_layout(layout_copycatm2);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0 };
@@ -12320,9 +12545,11 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void ditto(machine_config &config);
+
+private:
void write_r(u16 data);
void write_o(u16 data);
- void ditto(machine_config &config);
};
// handlers
@@ -12351,17 +12578,17 @@ INPUT_PORTS_END
void ditto_state::ditto(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1700(config, m_maincpu, 275000); // approximation - RC osc. R=100K, C=47pF
m_maincpu->k().set_ioport("IN.0");
m_maincpu->r().set(FUNC(ditto_state::write_r));
m_maincpu->o().set(FUNC(ditto_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 4);
config.set_default_layout(layout_ditto);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0 };
@@ -12408,11 +12635,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void ss7in1(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void ss7in1(machine_config &config);
};
// handlers
@@ -12480,19 +12709,19 @@ INPUT_PORTS_END
void ss7in1_state::ss7in1(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1400(config, m_maincpu, 450000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(ss7in1_state::read_k));
m_maincpu->r().set(FUNC(ss7in1_state::write_r));
m_maincpu->o().set(FUNC(ss7in1_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(9, 8);
m_display->set_segmask(0xf, 0x7f);
m_display->set_bri_levels(0.005, 0.05); // player led is brighter
config.set_default_layout(layout_7in1ss);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -12557,30 +12786,29 @@ public:
m_expander(*this, "expander")
{ }
+ void tbreakup(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(skill_switch) { set_clock(); }
+
+protected:
+ virtual void machine_reset() override;
+ virtual void machine_start() override;
+
+private:
required_device<tms1025_device> m_expander;
- u8 m_exp_port[7];
+ u8 m_exp_port[7] = { };
void expander_w(offs_t offset, u8 data);
+ void set_clock();
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
-
- void set_clock();
- DECLARE_INPUT_CHANGED_MEMBER(skill_switch) { set_clock(); }
- void tbreakup(machine_config &config);
-
-protected:
- virtual void machine_reset() override;
- virtual void machine_start() override;
};
void tbreakup_state::machine_start()
{
hh_tms1k_state::machine_start();
-
- // zerofill/register for savestates
- memset(m_exp_port, 0, sizeof(m_exp_port));
save_item(NAME(m_exp_port));
}
@@ -12674,7 +12902,7 @@ INPUT_PORTS_END
void tbreakup_state::tbreakup(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1040(config, m_maincpu, 325000); // see set_clock
m_maincpu->k().set(FUNC(tbreakup_state::read_k));
m_maincpu->r().set(FUNC(tbreakup_state::write_r));
@@ -12689,12 +12917,12 @@ void tbreakup_state::tbreakup(machine_config &config)
m_expander->write_port6_callback().set(FUNC(tbreakup_state::expander_w));
m_expander->write_port7_callback().set(FUNC(tbreakup_state::expander_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(2+6+6, 8);
m_display->set_segmask(3, 0x7f);
config.set_default_layout(layout_tbreakup);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -12752,13 +12980,15 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void phpball(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(flipper_button) { update_display(); }
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
-
- DECLARE_INPUT_CHANGED_MEMBER(flipper_button) { update_display(); }
- void phpball(machine_config &config);
};
// handlers
@@ -12814,18 +13044,18 @@ INPUT_PORTS_END
void phpball_state::phpball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 375000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(phpball_state::read_k));
m_maincpu->r().set(FUNC(phpball_state::write_r));
m_maincpu->o().set(FUNC(phpball_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(11, 7);
m_display->set_segmask(7, 0x7f);
config.set_default_layout(layout_phpball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -12867,11 +13097,13 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
+ void ssports4(machine_config &config);
+
+private:
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void ssports4(machine_config &config);
};
// handlers
@@ -12954,19 +13186,19 @@ INPUT_PORTS_END
void ssports4_state::ssports4(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, 375000); // approximation - RC osc. R=47K, C=47pF
m_maincpu->k().set(FUNC(ssports4_state::read_k));
m_maincpu->r().set(FUNC(ssports4_state::write_r));
m_maincpu->o().set(FUNC(ssports4_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 9);
m_display->set_segmask(0x303, 0x7f);
m_display->set_bri_levels(0.003, 0.03); // offense leds are brighter
config.set_default_layout(layout_ssports4);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -13009,17 +13241,19 @@ public:
hh_tms1k_state(mconfig, type, tag)
{ }
- void update_halt();
+ void xl25(machine_config &config);
+
DECLARE_INPUT_CHANGED_MEMBER(k4_button) { update_halt(); }
+protected:
+ virtual void machine_reset() override;
+
+private:
+ void update_halt();
void update_display();
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void xl25(machine_config &config);
-
-protected:
- virtual void machine_reset() override;
};
void xl25_state::machine_reset()
@@ -13136,17 +13370,17 @@ INPUT_PORTS_END
void xl25_state::xl25(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1000C(config, m_maincpu, 300000); // approximation - RC osc. R=5.6K, C=47pF
m_maincpu->k().set(FUNC(xl25_state::read_k));
m_maincpu->r().set(FUNC(xl25_state::write_r));
m_maincpu->o().set(FUNC(xl25_state::write_o));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 3);
config.set_default_layout(layout_xl25);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -13209,6 +13443,7 @@ CONS( 1979, ebball, 0, 0, ebball, ebball, ebball_state, emp
CONS( 1979, ebball2, 0, 0, ebball2, ebball2, ebball2_state, empty_init, "Entex", "Electronic Baseball 2 (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, ebball3, 0, 0, ebball3, ebball3, ebball3_state, empty_init, "Entex", "Electronic Baseball 3 (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1979, esbattle, 0, 0, esbattle, esbattle, esbattle_state, empty_init, "Entex", "Space Battle (Entex)", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, blastit, 0, 0, blastit, blastit, blastit_state, empty_init, "Entex", "Blast It", MACHINE_SUPPORTS_SAVE )
CONS( 1980, einvader, 0, 0, einvader, einvader, einvader_state, empty_init, "Entex", "Space Invader (Entex, TMS1100 version)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, efootb4 , 0, 0, efootb4, efootb4, efootb4_state, empty_init, "Entex", "Color Football 4 (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, ebaskb2 , 0, 0, ebaskb2, ebaskb2, ebaskb2_state, empty_init, "Entex", "Electronic Basketball 2 (Entex)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp
index fc75f7a5a98..408df17b279 100644
--- a/src/mame/drivers/hh_ucom4.cpp
+++ b/src/mame/drivers/hh_ucom4.cpp
@@ -122,12 +122,12 @@ protected:
optional_ioport_array<6> m_inputs; // max 6
// misc common
- u8 m_port[9]; // MCU port A-I write data (optional)
- u8 m_int; // MCU INT pin state
- u16 m_inp_mux; // multiplexed inputs mask
+ u8 m_port[9] = { }; // MCU port A-I write data (optional)
+ u8 m_int = 0; // MCU INT pin state
+ u16 m_inp_mux = 0; // multiplexed inputs mask
- u32 m_grid; // VFD current row data
- u32 m_plate; // VFD current column data
+ u32 m_grid = 0; // VFD current row data
+ u32 m_plate = 0; // VFD current column data
u8 read_inputs(int columns);
void refresh_interrupts(void);
@@ -152,13 +152,6 @@ protected:
void hh_ucom4_state::machine_start()
{
- // zerofill
- memset(m_port, 0, sizeof(m_port));
- m_int = 0;
- m_inp_mux = 0;
- m_grid = 0;
- m_plate = 0;
-
// register for savestates
save_item(NAME(m_port));
save_item(NAME(m_int));
@@ -255,11 +248,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void ufombs(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
void speaker_w(u8 data);
- void ufombs(machine_config &config);
};
// handlers
@@ -312,7 +307,7 @@ INPUT_PORTS_END
void ufombs_state::ufombs(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D552(config, m_maincpu, 400000); // approximation
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -324,7 +319,7 @@ void ufombs_state::ufombs(machine_config &config)
m_maincpu->write_h().set(FUNC(ufombs_state::grid_w));
m_maincpu->write_i().set(FUNC(ufombs_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(243, 1080);
@@ -332,7 +327,7 @@ void ufombs_state::ufombs(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 10);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
@@ -377,11 +372,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void ssfball(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
u8 input_b_r();
- void ssfball(machine_config &config);
};
// handlers
@@ -468,7 +465,7 @@ INPUT_PORTS_END
void ssfball_state::ssfball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400000); // approximation
m_maincpu->read_a().set_ioport("IN.3");
m_maincpu->read_b().set(FUNC(ssfball_state::input_b_r));
@@ -480,7 +477,7 @@ void ssfball_state::ssfball(machine_config &config)
m_maincpu->write_h().set(FUNC(ssfball_state::plate_w));
m_maincpu->write_i().set(FUNC(ssfball_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 482);
@@ -488,7 +485,7 @@ void ssfball_state::ssfball(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 16);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
@@ -538,11 +535,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void bmsoccer(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
u8 input_a_r();
- void bmsoccer(machine_config &config);
};
// handlers
@@ -615,7 +614,7 @@ INPUT_PORTS_END
void bmsoccer_state::bmsoccer(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D552(config, m_maincpu, 400000); // approximation
m_maincpu->read_a().set(FUNC(bmsoccer_state::input_a_r));
m_maincpu->read_b().set_ioport("IN.2");
@@ -627,7 +626,7 @@ void bmsoccer_state::bmsoccer(machine_config &config)
m_maincpu->write_h().set(FUNC(bmsoccer_state::plate_w));
m_maincpu->write_i().set(FUNC(bmsoccer_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(271, 1080);
@@ -635,7 +634,7 @@ void bmsoccer_state::bmsoccer(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 16);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -671,11 +670,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void bmsafari(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
void speaker_w(u8 data);
- void bmsafari(machine_config &config);
};
// handlers
@@ -733,7 +734,7 @@ INPUT_PORTS_END
void bmsafari_state::bmsafari(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D552(config, m_maincpu, 400000); // approximation
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -744,7 +745,7 @@ void bmsafari_state::bmsafari(machine_config &config)
m_maincpu->write_h().set(FUNC(bmsafari_state::plate_w));
m_maincpu->write_i().set(FUNC(bmsafari_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(248, 1080);
@@ -752,7 +753,7 @@ void bmsafari_state::bmsafari(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 10);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -791,11 +792,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void splasfgt(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
u8 input_b_r();
- void splasfgt(machine_config &config);
};
// handlers
@@ -891,7 +894,7 @@ INPUT_PORTS_END
void splasfgt_state::splasfgt(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400000); // approximation
m_maincpu->read_a().set_ioport("IN.4");
m_maincpu->read_b().set(FUNC(splasfgt_state::input_b_r));
@@ -903,7 +906,7 @@ void splasfgt_state::splasfgt(machine_config &config)
m_maincpu->write_h().set(FUNC(splasfgt_state::grid_w));
m_maincpu->write_i().set(FUNC(splasfgt_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 476);
@@ -911,7 +914,7 @@ void splasfgt_state::splasfgt(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 16);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
static const double speaker_levels[] = { 0.0, 1.0, -1.0, 0.0 };
@@ -953,10 +956,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void bcclimbr(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void bcclimbr(machine_config &config);
};
// handlers
@@ -1006,7 +1011,7 @@ INPUT_PORTS_END
void bcclimbr_state::bcclimbr(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -1018,7 +1023,7 @@ void bcclimbr_state::bcclimbr(machine_config &config)
m_maincpu->write_h().set(FUNC(bcclimbr_state::grid_w));
m_maincpu->write_i().set(FUNC(bcclimbr_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(310, 1080);
@@ -1026,7 +1031,7 @@ void bcclimbr_state::bcclimbr(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(6, 20);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1068,11 +1073,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void tactix(machine_config &config);
+
+private:
void leds_w(offs_t offset, u8 data);
void speaker_w(u8 data);
void input_w(offs_t offset, u8 data);
u8 input_r();
- void tactix(machine_config &config);
};
// handlers
@@ -1139,7 +1146,7 @@ INPUT_PORTS_END
void tactix_state::tactix(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D557L(config, m_maincpu, 200000); // approximation
m_maincpu->read_a().set(FUNC(tactix_state::input_r));
m_maincpu->write_c().set(FUNC(tactix_state::input_w));
@@ -1148,11 +1155,11 @@ void tactix_state::tactix(machine_config &config)
m_maincpu->write_f().set(FUNC(tactix_state::leds_w));
m_maincpu->write_g().set(FUNC(tactix_state::speaker_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(4, 4);
config.set_default_layout(layout_tactix);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1187,15 +1194,17 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void ctntune(machine_config &config);
+
// start button powers unit back on
DECLARE_INPUT_CHANGED_MEMBER(start_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); }
+private:
void update_display();
void _7seg_w(offs_t offset, u8 data);
void speaker_w(u8 data);
void input_w(offs_t offset, u8 data);
u8 input_r();
- void ctntune(machine_config &config);
};
// handlers
@@ -1279,7 +1288,7 @@ INPUT_PORTS_END
void ctntune_state::ctntune(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D557L(config, m_maincpu, 200000); // approximation
m_maincpu->read_a().set(FUNC(ctntune_state::input_r));
m_maincpu->write_c().set(FUNC(ctntune_state::input_w));
@@ -1288,12 +1297,12 @@ void ctntune_state::ctntune(machine_config &config)
m_maincpu->write_f().set(FUNC(ctntune_state::_7seg_w));
m_maincpu->write_g().set(FUNC(ctntune_state::speaker_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 7+2);
m_display->set_segmask(1, 0x7f);
config.set_default_layout(layout_ctntune);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1330,10 +1339,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void invspace(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void invspace(machine_config &config);
};
// handlers
@@ -1382,7 +1393,7 @@ INPUT_PORTS_END
void invspace_state::invspace(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D552(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -1394,7 +1405,7 @@ void invspace_state::invspace(machine_config &config)
m_maincpu->write_h().set(FUNC(invspace_state::plate_w));
m_maincpu->write_i().set(FUNC(invspace_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(289, 1080);
@@ -1402,7 +1413,7 @@ void invspace_state::invspace(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 19);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1442,10 +1453,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void efball(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void efball(machine_config &config);
};
// handlers
@@ -1508,7 +1521,7 @@ INPUT_PORTS_END
void efball_state::efball(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -1520,11 +1533,11 @@ void efball_state::efball(machine_config &config)
m_maincpu->write_h().set(FUNC(efball_state::grid_w));
m_maincpu->write_i().set(FUNC(efball_state::plate_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(10, 11);
config.set_default_layout(layout_efball);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1563,11 +1576,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void galaxy2b(machine_config &config);
+ void galaxy2(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void galaxy2b(machine_config &config);
- void galaxy2(machine_config &config);
};
// handlers
@@ -1616,7 +1631,7 @@ INPUT_PORTS_END
void galaxy2_state::galaxy2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -1628,7 +1643,7 @@ void galaxy2_state::galaxy2(machine_config &config)
m_maincpu->write_h().set(FUNC(galaxy2_state::plate_w));
m_maincpu->write_i().set(FUNC(galaxy2_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(304, 1080);
@@ -1636,7 +1651,7 @@ void galaxy2_state::galaxy2(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 15);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1646,7 +1661,7 @@ void galaxy2_state::galaxy2b(machine_config &config)
{
galaxy2(config);
- /* video hardware */
+ // video hardware
screen_device *screen = subdevice<screen_device>("screen");
screen->set_size(306, 1080);
screen->set_visarea_full();
@@ -1695,10 +1710,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void astrocmd(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void astrocmd(machine_config &config);
};
// handlers
@@ -1754,7 +1771,7 @@ INPUT_PORTS_END
void astrocmd_state::astrocmd(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -1766,7 +1783,7 @@ void astrocmd_state::astrocmd(machine_config &config)
m_maincpu->write_h().set(FUNC(astrocmd_state::plate_w));
m_maincpu->write_i().set(FUNC(astrocmd_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 525);
@@ -1774,7 +1791,7 @@ void astrocmd_state::astrocmd(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 17);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1815,10 +1832,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void edracula(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void edracula(machine_config &config);
};
// handlers
@@ -1866,7 +1885,7 @@ INPUT_PORTS_END
void edracula_state::edracula(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -1878,7 +1897,7 @@ void edracula_state::edracula(machine_config &config)
m_maincpu->write_h().set(FUNC(edracula_state::plate_w));
m_maincpu->write_i().set(FUNC(edracula_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 526);
@@ -1886,7 +1905,7 @@ void edracula_state::edracula(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 18);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1922,11 +1941,13 @@ public:
m_lcd(*this, "lcd")
{ }
+ void mcompgin(machine_config &config);
+
+private:
required_device<hlcd0530_device> m_lcd;
void lcd_output_w(offs_t offset, u32 data);
void lcd_w(u8 data);
- void mcompgin(machine_config &config);
};
// handlers
@@ -1964,13 +1985,13 @@ INPUT_PORTS_END
void mcompgin_state::mcompgin(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D650(config, m_maincpu, 400_kHz_XTAL); // TDK FCR400K
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
m_maincpu->write_e().set(FUNC(mcompgin_state::lcd_w));
- /* video hardware */
+ // video hardware
HLCD0530(config, m_lcd, 500); // C=0.01uF
m_lcd->write_cols().set(FUNC(mcompgin_state::lcd_output_w));
@@ -1978,7 +1999,7 @@ void mcompgin_state::mcompgin(machine_config &config)
config.set_default_layout(layout_mcompgin);
- /* no sound! */
+ // no sound!
}
// roms
@@ -2008,11 +2029,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void mvbfree(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
void speaker_w(u8 data);
- void mvbfree(machine_config &config);
};
// handlers
@@ -2070,7 +2093,7 @@ INPUT_PORTS_END
void mvbfree_state::mvbfree(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400000); // approximation
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -2082,11 +2105,11 @@ void mvbfree_state::mvbfree(machine_config &config)
m_maincpu->write_h().set(FUNC(mvbfree_state::grid_w));
m_maincpu->write_i().set(FUNC(mvbfree_state::speaker_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(14, 10);
config.set_default_layout(layout_mvbfree);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2127,11 +2150,13 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void grobot9(machine_config &config);
+
+private:
void lamps_w(offs_t offset, u8 data);
void speaker_w(u8 data);
void input_w(u8 data);
u8 input_r();
- void grobot9(machine_config &config);
};
// handlers
@@ -2197,7 +2222,7 @@ INPUT_PORTS_END
void grobot9_state::grobot9(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D557L(config, m_maincpu, 160000); // approximation
m_maincpu->read_a().set(FUNC(grobot9_state::input_r));
m_maincpu->write_c().set(FUNC(grobot9_state::input_w));
@@ -2205,11 +2230,11 @@ void grobot9_state::grobot9(machine_config &config)
m_maincpu->write_e().set(FUNC(grobot9_state::lamps_w));
m_maincpu->write_f().set(FUNC(grobot9_state::lamps_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(1, 9);
config.set_default_layout(layout_grobot9);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2246,10 +2271,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void tccombat(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void tccombat(machine_config &config);
};
// handlers
@@ -2295,7 +2322,7 @@ INPUT_PORTS_END
void tccombat_state::tccombat(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D552(config, m_maincpu, 400000); // approximation
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->write_c().set(FUNC(tccombat_state::grid_w));
@@ -2306,7 +2333,7 @@ void tccombat_state::tccombat(machine_config &config)
m_maincpu->write_h().set(FUNC(tccombat_state::plate_w));
m_maincpu->write_i().set(FUNC(tccombat_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(300, 1080);
@@ -2314,7 +2341,7 @@ void tccombat_state::tccombat(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 20);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2356,18 +2383,20 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
- void update_display();
- void grid_w(offs_t offset, u8 data);
- void plate_w(offs_t offset, u8 data);
- void port_e_w(u8 data);
- u8 input_r(offs_t offset);
+ void tmtennis(machine_config &config);
- void set_clock();
DECLARE_INPUT_CHANGED_MEMBER(difficulty_switch) { set_clock(); }
- void tmtennis(machine_config &config);
protected:
virtual void machine_reset() override;
+
+private:
+ void set_clock();
+ void update_display();
+ void grid_w(offs_t offset, u8 data);
+ void plate_w(offs_t offset, u8 data);
+ void port_e_w(u8 data);
+ u8 input_r(offs_t offset);
};
void tmtennis_state::machine_reset()
@@ -2463,7 +2492,7 @@ INPUT_PORTS_END
void tmtennis_state::tmtennis(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D552(config, m_maincpu, 360000); // see set_clock
m_maincpu->read_a().set(FUNC(tmtennis_state::input_r));
m_maincpu->read_b().set(FUNC(tmtennis_state::input_r));
@@ -2475,7 +2504,7 @@ void tmtennis_state::tmtennis(machine_config &config)
m_maincpu->write_h().set(FUNC(tmtennis_state::grid_w));
m_maincpu->write_i().set(FUNC(tmtennis_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 417);
@@ -2484,7 +2513,7 @@ void tmtennis_state::tmtennis(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(12, 12);
config.set_default_layout(layout_tmtennis);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2530,10 +2559,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void tmpacman(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void tmpacman(machine_config &config);
};
// handlers
@@ -2583,7 +2614,7 @@ INPUT_PORTS_END
void tmpacman_state::tmpacman(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 430_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -2595,7 +2626,7 @@ void tmpacman_state::tmpacman(machine_config &config)
m_maincpu->write_h().set(FUNC(tmpacman_state::plate_w));
m_maincpu->write_i().set(FUNC(tmpacman_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 508);
@@ -2603,7 +2634,7 @@ void tmpacman_state::tmpacman(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 19);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2645,10 +2676,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void tmscramb(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void tmscramb(machine_config &config);
};
// handlers
@@ -2696,7 +2729,7 @@ INPUT_PORTS_END
void tmscramb_state::tmscramb(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->read_b().set_ioport("IN.1");
@@ -2708,7 +2741,7 @@ void tmscramb_state::tmscramb(machine_config &config)
m_maincpu->write_h().set(FUNC(tmscramb_state::plate_w));
m_maincpu->write_i().set(FUNC(tmscramb_state::grid_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 556);
@@ -2716,7 +2749,7 @@ void tmscramb_state::tmscramb(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(10, 17);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2757,10 +2790,12 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void tcaveman(machine_config &config);
+
+private:
void update_display();
void grid_w(offs_t offset, u8 data);
void plate_w(offs_t offset, u8 data);
- void tcaveman(machine_config &config);
};
// handlers
@@ -2806,7 +2841,7 @@ INPUT_PORTS_END
void tcaveman_state::tcaveman(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set_ioport("IN.0");
m_maincpu->write_c().set(FUNC(tcaveman_state::grid_w));
@@ -2817,7 +2852,7 @@ void tcaveman_state::tcaveman(machine_config &config)
m_maincpu->write_h().set(FUNC(tcaveman_state::plate_w));
m_maincpu->write_i().set(FUNC(tcaveman_state::plate_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920, 559);
@@ -2825,7 +2860,7 @@ void tcaveman_state::tcaveman(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 19);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2867,9 +2902,11 @@ public:
hh_ucom4_state(mconfig, type, tag)
{ }
+ void alnchase(machine_config &config);
+
+private:
void output_w(offs_t offset, u8 data);
u8 input_r();
- void alnchase(machine_config &config);
};
// handlers
@@ -2948,7 +2985,7 @@ INPUT_PORTS_END
void alnchase_state::alnchase(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
NEC_D553(config, m_maincpu, 400_kHz_XTAL);
m_maincpu->read_a().set(FUNC(alnchase_state::input_r));
m_maincpu->read_b().set_ioport("IN.2");
@@ -2960,7 +2997,7 @@ void alnchase_state::alnchase(machine_config &config)
m_maincpu->write_h().set(FUNC(alnchase_state::output_w));
m_maincpu->write_i().set(FUNC(alnchase_state::output_w));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(365, 1080);
@@ -2968,7 +3005,7 @@ void alnchase_state::alnchase(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(9, 17);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
diff --git a/src/mame/drivers/indiana.cpp b/src/mame/drivers/indiana.cpp
index e6347e146b4..58bfbf628cf 100644
--- a/src/mame/drivers/indiana.cpp
+++ b/src/mame/drivers/indiana.cpp
@@ -8,9 +8,8 @@
01/20/2014 Added ISA bus and peripherals
TODO: Text appears in VGA f/b (0x6B8000), but doesn't display?
-
- System often reads/writes 6003D4/5, might be a cut-down 6845,
- as it only uses registers C,D,E,F.
+ TODO: Keyboard doesn't work very well. Scancodes are often lost
+ because the 68030 doesn't poll the MFP frequently enough.
****************************************************************************/
diff --git a/src/mame/drivers/k1003.cpp b/src/mame/drivers/k1003.cpp
index 5c2229efde2..7c7cd729421 100644
--- a/src/mame/drivers/k1003.cpp
+++ b/src/mame/drivers/k1003.cpp
@@ -129,6 +129,7 @@ void k1003_state::seg_w(uint8_t data)
void k1003_state::io_map(address_map &map)
{
map.unmap_value_high();
+ map.global_mask(0x1f);
map(0x00, 0x00).r(FUNC(k1003_state::key_r));
map(0x02, 0x02).r(FUNC(k1003_state::port2_r));
diff --git a/src/mame/drivers/merit.cpp b/src/mame/drivers/merit.cpp
index 3eceac267e6..bc4eaf7af9c 100644
--- a/src/mame/drivers/merit.cpp
+++ b/src/mame/drivers/merit.cpp
@@ -1690,6 +1690,21 @@ ROM_START( pitbossps ) /* Roms also found labeled as U5-0C, U6-0 & U7-0 */
ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
ROM_END
+ROM_START( housecard ) /* Same exact games as pitbossps set above */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "hcsd_u5b.u5", 0x0000, 0x2000, CRC(ecef424f) SHA1(9485be5d800b3ad79b3a6ddce86a174f9aae6bdf) ) /* Internal designation: HSC1REV0 */
+ ROM_LOAD( "hcsd_u6.u6", 0x2000, 0x2000, CRC(8fd6ae75) SHA1(6f2fc2903e0eebbe0f3c7bd2b6713046566fa488) ) /* Games included in this set are: */
+ ROM_LOAD( "hcsd_u7.u7", 0x4000, 0x2000, CRC(6adecfa1) SHA1(d6007fbf06cfc4c710a7134de688af439dddcf60) ) /* Joker Poker, Blackjack, Super Slots & The Dice Game */
+
+ ROM_REGION( 0x6000, "gfx1", 0 )
+ ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
+ ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Licensed By: */
+ ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Merit industries */
+
+ ROM_REGION( 0x2000, "gfx2", 0 )
+ ROM_LOAD( "chr4_u40.u40", 0x0000, 0x2000, CRC(f4c34a26) SHA1(67183237be6952b3be9ef444d2018bc94e714a66) )
+ROM_END
+
ROM_START( mdchoice )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "e4a1_u5.u5", 0x0000, 0x2000, CRC(bd77f8dc) SHA1(c9c85e3180be30e7a1d37abb6d4e7c777acfda81) ) /* Internal designation: E4A1REV0 */
@@ -2639,6 +2654,7 @@ GAME( 1983, pitboss03a, pitboss, pitboss, pitbossa1, merit_state, empty_init, R
GAME( 1983, pitboss03b, pitboss, pitboss, pitbossa, merit_state, empty_init, ROT0, "Merit", "The Pit Boss (M4A4)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) /* No labels, so use internal designation */
GAME( 1983, pitbossm4, pitboss, pitboss, pitbossb, merit_state, empty_init, ROT0, "Merit", "The Pit Boss (M4A1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1983, pitbossps, pitboss, pitboss, pitbossa, merit_state, empty_init, ROT0, "Merit", "The Pit Boss (PSB1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1983, housecard, pitboss, pitboss, pitbossa, merit_state, empty_init, ROT0, "Merit", "House of Cards (HSC1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1983, mdchoice, pitboss, pitboss, mdchoice, merit_state, empty_init, ROT0, "Merit", "Dealer's Choice (E4A1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) /* Copyright year based on other Pit Boss sets */
GAME( 1983, mpchoice, pitboss, pitboss, mpchoice, merit_state, empty_init, ROT0, "Merit", "Player's Choice (M4C1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1982, mpchoicea, pitboss, pitboss, mpchoicea, merit_state, empty_init, ROT0, "Merit", "Player's Choice (M3C1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/mod8.cpp b/src/mame/drivers/mod8.cpp
index 3ee57a70668..6ce16207aab 100644
--- a/src/mame/drivers/mod8.cpp
+++ b/src/mame/drivers/mod8.cpp
@@ -122,6 +122,7 @@ void mod8_state::mem_map(address_map &map)
void mod8_state::io_map(address_map &map)
{
map.unmap_value_high();
+ map.global_mask(0x1f);
map(0x00, 0x00).r(FUNC(mod8_state::tty_r));
map(0x0a, 0x0a).w(FUNC(mod8_state::out_w));
map(0x0b, 0x0b).w(FUNC(mod8_state::tty_w));
diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp
index efa60a37993..3d591ed94be 100644
--- a/src/mame/drivers/namcos22.cpp
+++ b/src/mame/drivers/namcos22.cpp
@@ -4157,10 +4157,10 @@ ROM_END
ROM_START( ridgera2 )
ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
- ROM_LOAD32_BYTE( "rrs2prll.4d", 0x00003, 0x80000, CRC(88199c0f) SHA1(5cf5bb714c3d209943a8d815eaea60afd34641ff) )
- ROM_LOAD32_BYTE( "rrs1prlmb.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) )
- ROM_LOAD32_BYTE( "rrs1prumb.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) )
- ROM_LOAD32_BYTE( "rrs1pruub.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) )
+ ROM_LOAD32_BYTE( "rrs2prll.4d", 0x00003, 0x80000, CRC(88199c0f) SHA1(5cf5bb714c3d209943a8d815eaea60afd34641ff) ) // One byte different compared to the Rev.B Japanese set below
+ ROM_LOAD32_BYTE( "rrs2prlm.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) ) // The "World" set's ROMs are NOT marked as Rev.B even though
+ ROM_LOAD32_BYTE( "rrs2prum.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) ) // they are clearly based off of the Japanese Rev.B ROM set.
+ ROM_LOAD32_BYTE( "rrs2pruu.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) )
ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )
@@ -6072,7 +6072,7 @@ GAME( 1993, ridgerac3, ridgerac, namcos22, ridgera, namcos22_state, init_rid
GAME( 1993, ridgeracb, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
GAME( 1993, ridgeracj, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR1, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
GAME( 1993, ridgeracf, ridgerac, namcos22, ridgeracf, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer Full Scale (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 1993-12-13, very different version, incomplete dump.
-GAME( 1994, ridgera2, 0, namcos22, ridgera2, namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21
+GAME( 1994, ridgera2, 0, namcos22, ridgera2, namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS2, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21 - NOT labeled "B" but based off Japan Rev.B
GAME( 1994, ridgera2j, ridgera2, namcos22, ridgera2, namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS1 Ver.B, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21
GAME( 1994, ridgera2ja,ridgera2, namcos22, ridgera2, namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS1, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-13
GAME( 1994, cybrcomm, 0, cybrcomm, cybrcomm, namcos22_state, init_cybrcomm, ROT0, "Namco", "Cyber Commando (Rev. CY1, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 10/14/94
diff --git a/src/mame/drivers/pmc.cpp b/src/mame/drivers/pmc.cpp
index 92f89e47c9a..181cf680f64 100644
--- a/src/mame/drivers/pmc.cpp
+++ b/src/mame/drivers/pmc.cpp
@@ -44,12 +44,30 @@ public:
private:
void rom_map(address_map &map);
+ void rom_ports_map(address_map &map);
+ void ram_map(address_map &map);
+ void ram_status_map(address_map &map);
};
void pmc_state::rom_map(address_map &map)
{
- map(0x0000, 0x03ff).rom().region("maincpu", 0x0000); // TODO: to be verified
+ map(0x000, 0x3ff).rom().region("maincpu", 0x000);
+}
+
+void pmc_state::rom_ports_map(address_map &map)
+{
+ // TODO
+}
+
+void pmc_state::ram_map(address_map &map)
+{
+ map(0x000, 0x03f).ram();
+}
+
+void pmc_state::ram_status_map(address_map &map)
+{
+ map(0x000, 0x00f).ram();
}
void pmc_state::pmc(machine_config &config)
@@ -57,6 +75,9 @@ void pmc_state::pmc(machine_config &config)
// basic machine hardware
i4040_cpu_device &cpu(I4040(config, "maincpu", 5.185_MHz_XTAL / 7)); // P4201A divides the incoming clock by seven to get the multi-phase clock
cpu.set_rom_map(&pmc_state::rom_map);
+ cpu.set_rom_ports_map(&pmc_state::rom_ports_map);
+ cpu.set_ram_memory_map(&pmc_state::ram_map);
+ cpu.set_ram_status_map(&pmc_state::ram_status_map);
// video hardware
// SCREEN(config, "screen", SCREEN_TYPE_RASTER); // TODO
@@ -66,12 +87,12 @@ void pmc_state::pmc(machine_config &config)
}
-ROM_START( unkpmc ) // TODO: verify ROM loading
+ROM_START( unkpmc )
ROM_REGION( 0x400, "maincpu", 0 )
- ROM_LOAD( "1", 0x000, 0x0100, CRC(396fc572) SHA1(29b39d1119b28f6c75378f855129e132a5cb2370) )
- ROM_LOAD( "2", 0x100, 0x0100, CRC(9e6a0570) SHA1(fbf6ce4066121019d0db0de0c75fb5869853c613) )
- ROM_LOAD( "3", 0x200, 0x0100, CRC(727f2186) SHA1(8c1dcbf3099010f510400db03946d7aba813cf97) )
- ROM_LOAD( "4", 0x300, 0x0100, CRC(7bafe4ad) SHA1(afb02aebf2ff9e733368545c0c0100bdcaa5c89b) )
+ ROM_LOAD( "4", 0x000, 0x0100, CRC(7bafe4ad) SHA1(afb02aebf2ff9e733368545c0c0100bdcaa5c89b) )
+ ROM_LOAD( "3", 0x100, 0x0100, CRC(727f2186) SHA1(8c1dcbf3099010f510400db03946d7aba813cf97) )
+ ROM_LOAD( "2", 0x200, 0x0100, CRC(9e6a0570) SHA1(fbf6ce4066121019d0db0de0c75fb5869853c613) )
+ ROM_LOAD( "1", 0x300, 0x0100, CRC(396fc572) SHA1(29b39d1119b28f6c75378f855129e132a5cb2370) )
ROM_REGION( 0x500, "proms", 0 )
ROM_LOAD( "5", 0x000, 0x0100, CRC(4023885f) SHA1(af94454583af10938746caf7bbe326081d21241d) )
diff --git a/src/mame/drivers/rbmk.cpp b/src/mame/drivers/rbmk.cpp
index 486a01a089c..3a8924ed343 100644
--- a/src/mame/drivers/rbmk.cpp
+++ b/src/mame/drivers/rbmk.cpp
@@ -218,7 +218,6 @@ void rbmk_state::magslot_mem(address_map &map)
map(0x600000, 0x600001).rw(FUNC(rbmk_state::dip_mux_r), FUNC(rbmk_state::dip_mux_w));
map(0x608000, 0x608001).portr("IN1").w(FUNC(rbmk_state::tilebank_w)); // ok
map(0x610000, 0x610001).portr("IN2");
- map(0x618080, 0x618081).r(FUNC(rbmk_state::unk_r));
map(0x620000, 0x620001).portr("IN3");
map(0x628000, 0x628001).w(FUNC(rbmk_state::unk_w));
map(0x900000, 0x900fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -964,6 +963,27 @@ ROM_START( rbspm )
ROM_END
+ROM_START( sc2in1 ) // Basically same PCB as magslot, but with only 1 dip bank. Most labels have been covered with other labels with 'TETRIS' hand-written
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */
+ ROM_LOAD( "u64", 0x00000, 0x80000, CRC(c0ad5df0) SHA1(a51f30e76493ea9fb5313c0064dac9a2a4f70cc3) )
+
+ ROM_REGION( 0x080000, "oki", 0 )
+ ROM_LOAD( "u83", 0x00000, 0x80000, CRC(d7ff589b) SHA1(38e61dd7509862dec1299708da8785d1df713fe9) )
+
+ ROM_REGION( 0x200000, "gfx1", 0 )
+ ROM_LOAD( "u178", 0x000000, 0x200000, CRC(eaceb446) SHA1(db312f555e060eea6450f506cbbdca8874a05d58) )
+
+ ROM_REGION( 0x40000, "gfx2", 0 )
+ ROM_LOAD( "u41", 0x00000, 0x40000, CRC(9ea462f7) SHA1(8cec497691f0121693a482b452ddf7a7dcedaf87) )
+
+ ROM_REGION( 0x80000, "gfx3", 0 )
+ ROM_LOAD( "u169", 0x00000, 0x80000, CRC(f442fa70) SHA1(d06a84080e0196e1917b6f942adc29f97314be58) )
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD_SWAP( "is93c46.u136", 0x00, 0x080, CRC(f0552ce8) SHA1(2dae746d9808d8a37f4f928dedda500063efdcfe) )
+ROM_END
+
+
// the PCB is slightly different from the others, both layout-wise and component-wise, but it's mostly compatible. It seems to use one more GFX layer and not to have the 89C51.
ROM_START( magslot ) // All labels have SLOT canceled with a black pen. No sum matches the one on label.
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */
@@ -976,7 +996,7 @@ ROM_START( magslot ) // All labels have SLOT canceled with a black pen. No sum m
ROM_LOAD( "magic a1.0c _ _ _ _.u178", 0x000000, 0x200000, CRC(11028627) SHA1(80b38acab1cd12462d8fc36a9cdce5e5e76f6403) ) // no sum on label, 1xxxxxxxxxxxxxxxxxx = 0x00
ROM_REGION( 0x80000, "gfx2", 0 )
- ROM_LOAD( "magic t1.0c ec43.u64", 0x00000, 0x80000, CRC(18df608d) SHA1(753b8090e8fd89e50131a22259ef3280d7e6b282) )
+ ROM_LOAD( "magic t1.0c ec43.u41", 0x00000, 0x80000, CRC(18df608d) SHA1(753b8090e8fd89e50131a22259ef3280d7e6b282) )
ROM_REGION( 0x40000, "gfx3", 0 )
ROM_LOAD( "magic u1.0c f7f6.u169", 0x00000, 0x40000, CRC(582631d3) SHA1(92d1b767bc7ef15eed6dad599392c17620210678) )
@@ -989,8 +1009,11 @@ ROM_END
// mahjong
-GAME( 1998, rbmk, 0, rbmk, rbmk, rbmk_state, empty_init, ROT0, "GMS", "Shizhan Majiang Wang (Version 8.8)", MACHINE_NOT_WORKING )
-GAME( 1998, rbspm, 0, rbspm, rbspm, rbmk_state, empty_init, ROT0, "GMS", "Shizhan Ding Huang Maque (Version 4.1)", MACHINE_NOT_WORKING )
+GAME( 1998, rbmk, 0, rbmk, rbmk, rbmk_state, empty_init, ROT0, "GMS", "Shizhan Majiang Wang (Version 8.8)", MACHINE_NOT_WORKING )
+GAME( 1998, rbspm, 0, rbspm, rbspm, rbmk_state, empty_init, ROT0, "GMS", "Shizhan Ding Huang Maque (Version 4.1)", MACHINE_NOT_WORKING )
+
+// card game
+GAME( 2001, sc2in1, 0, magslot, magslot, rbmk_state, empty_init, ROT0, "GMS", "Super Card 2 in 1 (English version 03.23)", MACHINE_NOT_WORKING ) // stops during boot
// slot, on slightly different PCB
-GAME( 2003, magslot, 0, magslot, magslot, rbmk_state, empty_init, ROT0, "GMS", "Magic Slot (normal 1.0C)", MACHINE_NOT_WORKING ) // needs implementing of 3rd GFX layer, correct GFX decode for 1st layer, inputs
+GAME( 2003, magslot, 0, magslot, magslot, rbmk_state, empty_init, ROT0, "GMS", "Magic Slot (normal 1.0C)", MACHINE_NOT_WORKING ) // needs implementing of 3rd GFX layer, correct GFX decode for 1st layer, inputs
diff --git a/src/mame/drivers/s6.cpp b/src/mame/drivers/s6.cpp
index 57fc9b557f9..be361b41eeb 100644
--- a/src/mame/drivers/s6.cpp
+++ b/src/mame/drivers/s6.cpp
@@ -9,6 +9,7 @@ Differences to system 4:
- Some machines have speech (blkou, grgar, frpwr).
- Some machines have multiball (scrpn, frpwr).
- New soundcard.
+- Algar, Alien Poker have 7-digit displays
Games:
- Laserball (#493)
@@ -16,6 +17,8 @@ Games:
- Blackout (#495)
- Gorgar (#496)
- Firepower (#497)
+- Algar (#499)
+- Alien Poker (#501)
The first time run, the display will show the model number. Press F3 to clear this.
@@ -23,11 +26,11 @@ Diagnostic actions:
- You must be in game over mode. All buttons are in the number-pad. When you are
finished, you must reboot.
-- Setup: NUM-6 must be in auto/up position. Press NUM-1 to enter setup mode, press
- NUM-6 to change direction.
+- Setup: NUM-2 must be in auto/up position. Press NUM-1 to enter setup mode, press
+ NUM-2 to change direction.
-- Tests: NUM-6 must be in manual/down position. Press NUM-1 twice and tests will
- begin. Press NUM-1 and NUM-6 together to get from test 1 to test 2. Press NUM-6
+- Tests: NUM-2 must be in manual/down position. Press NUM-1 twice and tests will
+ begin. Press NUM-1 and NUM-2 together to get from test 1 to test 2. Press NUM-2
to switch between auto/manual stepping.
- Auto Diag Test: Set Dips to SW6. Press NUM-0. Press NUM-ENTER. Press NUM-1. Tests
@@ -62,7 +65,7 @@ ToDo:
#include "speaker.h"
#include "s6.lh"
-
+#include "s6a.lh"
namespace {
@@ -85,6 +88,7 @@ public:
{ }
void s6(machine_config &config);
+ void s6a(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(main_nmi);
@@ -304,6 +308,26 @@ static INPUT_PORTS_START( frpwr )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
+static INPUT_PORTS_START( alpok )
+ PORT_INCLUDE(s6)
+ PORT_MODIFY("X3")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) // Playfield tilt
+ PORT_MODIFY("X5")
+ PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_MODIFY("X6")
+ PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_MODIFY("X7")
+ PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( algar )
+ PORT_INCLUDE(s6)
+ PORT_MODIFY("X6")
+ PORT_BIT( 0xe4, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_MODIFY("X7")
+ PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
+INPUT_PORTS_END
+
INPUT_CHANGED_MEMBER( s6_state::main_nmi )
{
// Diagnostic button sends a pulse to NMI pin
@@ -505,6 +529,11 @@ void s6_state::s6(machine_config &config)
WILLIAMS_S6_SOUND(config, m_s6sound, 0).add_route(ALL_OUTPUTS, "mono", 1.0);
}
+void s6_state::s6a(machine_config &config)
+{
+ s6(config);
+ config.set_default_layout(layout_s6a);
+}
/*--------------------------------
/ Laser Ball - Sys.6 (Game #493)
@@ -687,19 +716,79 @@ ROM_START(frpwr_l2)
ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4))
ROM_END
+/*--------------------------
+/ Algar - Sys.6a (Game #499)
+/-------------------------*/
+ROM_START(algar_l1)
+ ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(6711da23) SHA1(80a46f5a2630977bc1c6e17466e8865083eb9a18))
+ ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
+ ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
+
+ ROM_REGION(0x5000, "s6sound:audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("sound4.716", 0x4800, 0x0800, CRC(67ea12e7) SHA1(f81e97183442736d5766a7e5e074bc6539e8ced0))
+ROM_END
+
+/*-------------------------------
+/ Alien Poker - Sys.6a (Game #501)
+/-------------------------------*/
+ROM_START(alpok_l6)
+ ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom6.716", 0x0000, 0x0800, CRC(20538a4a) SHA1(6cdd6b7ded76b3cbd954d371e126e1bbd95a6219))
+ ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
+ ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
+
+ ROM_REGION(0x5000, "s6sound:audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("v_ic7.532", 0x0000, 0x1000, CRC(a66c7ca6) SHA1(6e90081f853fcf66bfeac0a8ee1c762b3760b90b))
+ ROM_LOAD("v_ic5.532", 0x1000, 0x1000, CRC(f16a237a) SHA1(a904138fad5cbc19946bcf0de824e27537dcd621))
+ ROM_LOAD("v_ic6.532", 0x2000, 0x1000, CRC(15a3cc85) SHA1(86002ac78189415ae912e8bc23c92b3b67610d87))
+ ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4))
+ROM_END
+
+ROM_START(alpok_l2)
+ ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(79c07603) SHA1(526a45b139394e475fc052636e98d880a8908168))
+ ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
+ ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
+
+ ROM_REGION(0x5000, "s6sound:audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("v_ic7.532", 0x0000, 0x1000, CRC(a66c7ca6) SHA1(6e90081f853fcf66bfeac0a8ee1c762b3760b90b))
+ ROM_LOAD("v_ic5.532", 0x1000, 0x1000, CRC(f16a237a) SHA1(a904138fad5cbc19946bcf0de824e27537dcd621))
+ ROM_LOAD("v_ic6.532", 0x2000, 0x1000, CRC(15a3cc85) SHA1(86002ac78189415ae912e8bc23c92b3b67610d87))
+ ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4))
+ROM_END
+
+ROM_START(alpok_f6)
+ ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("gamerom6.716", 0x0000, 0x0800, CRC(20538a4a) SHA1(6cdd6b7ded76b3cbd954d371e126e1bbd95a6219))
+ ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
+ ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
+
+ ROM_REGION(0x5000, "s6sound:audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("5t5014fr.dat", 0x0000, 0x1000, CRC(1d961517) SHA1(c71ee324becfc8cdbecabd1e64b11b5a39ff2483))
+ ROM_LOAD("5t5015fr.dat", 0x1000, 0x1000, CRC(8d065f80) SHA1(0ab22c9b20ab6fe41abab620435ad03652db7a8e))
+ ROM_LOAD("5t5016fr.dat", 0x2000, 0x1000, CRC(0ddf91e9) SHA1(48f5fdfc0c5a66dd318fecb7c90e5f5a684a3876))
+ ROM_LOAD("5t5017fr.dat", 0x3000, 0x1000, CRC(7e546dc1) SHA1(58f8286403978b0d929987189089881d754a9a83))
+ ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4))
+ROM_END
+
} // anonymous namespace
-GAME( 1979, lzbal_l2, 0, s6, lzbal, s6_state, empty_init, ROT0, "Williams", "Laser Ball (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1979, lzbal_l2sp, lzbal_l2, s6, lzbal, s6_state, empty_init, ROT0, "Williams", "Laser Ball (L-2, PROM sound)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, lzbal_t2, lzbal_l2, s6, lzbal, s6_state, empty_init, ROT0, "Williams", "Laser Ball (T-2)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, scrpn_l1, 0, s6, scrpn, s6_state, empty_init, ROT0, "Williams", "Scorpion (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, scrpn_t1, scrpn_l1, s6, scrpn, s6_state, empty_init, ROT0, "Williams", "Scorpion (T-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1979, blkou_l1, 0, s6, blkou, s6_state, empty_init, ROT0, "Williams", "Blackout (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1979, blkou_t1, blkou_l1, s6, blkou, s6_state, empty_init, ROT0, "Williams", "Blackout (T-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1979, blkou_f1, blkou_l1, s6, blkou, s6_state, empty_init, ROT0, "Williams", "Blackout (L-1, French Speech)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1979, grgar_l1, 0, s6, grgar, s6_state, empty_init, ROT0, "Williams", "Gorgar (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1979, grgar_t1, grgar_l1, s6, grgar, s6_state, empty_init, ROT0, "Williams", "Gorgar (T-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, frpwr_l6, 0, s6, frpwr, s6_state, empty_init, ROT0, "Williams", "Firepower (L-6)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, frpwr_t6, frpwr_l6, s6, frpwr, s6_state, empty_init, ROT0, "Williams", "Firepower (T-6)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, frpwr_l2, frpwr_l6, s6, frpwr, s6_state, empty_init, ROT0, "Williams", "Firepower (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, lzbal_l2, 0, s6, lzbal, s6_state, empty_init, ROT0, "Williams", "Laser Ball (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, lzbal_l2sp, lzbal_l2, s6, lzbal, s6_state, empty_init, ROT0, "Williams", "Laser Ball (L-2, PROM sound)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, lzbal_t2, lzbal_l2, s6, lzbal, s6_state, empty_init, ROT0, "Williams", "Laser Ball (T-2)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, scrpn_l1, 0, s6, scrpn, s6_state, empty_init, ROT0, "Williams", "Scorpion (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, scrpn_t1, scrpn_l1, s6, scrpn, s6_state, empty_init, ROT0, "Williams", "Scorpion (T-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, blkou_l1, 0, s6, blkou, s6_state, empty_init, ROT0, "Williams", "Blackout (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, blkou_t1, blkou_l1, s6, blkou, s6_state, empty_init, ROT0, "Williams", "Blackout (T-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, blkou_f1, blkou_l1, s6, blkou, s6_state, empty_init, ROT0, "Williams", "Blackout (L-1, French Speech)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, grgar_l1, 0, s6, grgar, s6_state, empty_init, ROT0, "Williams", "Gorgar (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, grgar_t1, grgar_l1, s6, grgar, s6_state, empty_init, ROT0, "Williams", "Gorgar (T-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, frpwr_l6, 0, s6, frpwr, s6_state, empty_init, ROT0, "Williams", "Firepower (L-6)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, frpwr_t6, frpwr_l6, s6, frpwr, s6_state, empty_init, ROT0, "Williams", "Firepower (T-6)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, frpwr_l2, frpwr_l6, s6, frpwr, s6_state, empty_init, ROT0, "Williams", "Firepower (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, algar_l1, 0, s6a, algar, s6_state, empty_init, ROT0, "Williams", "Algar (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, alpok_l6, 0, s6a, alpok, s6_state, empty_init, ROT0, "Williams", "Alien Poker (L-6)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, alpok_l2, alpok_l6, s6a, alpok, s6_state, empty_init, ROT0, "Williams", "Alien Poker (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1980, alpok_f6, alpok_l6, s6a, alpok, s6_state, empty_init, ROT0, "Williams", "Alien Poker (L-6 French speech)", MACHINE_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/drivers/s6a.cpp b/src/mame/drivers/s6a.cpp
deleted file mode 100644
index fde91c2405c..00000000000
--- a/src/mame/drivers/s6a.cpp
+++ /dev/null
@@ -1,501 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Robbbert
-/***********************************************************************************
-
-PINBALL
-Williams System 6a
-
-Differences to system 6:
-- Player score is 7 digits instead of 6.
-
-Games:
-- Algar (#499)
-- Alien Poker (#501)
-
-The first time run, the display will show the model number. Press F3 to clear this.
-
-Diagnostic actions:
-- You must be in game over mode. All buttons are in the number-pad. When you are
- finished, you must reboot.
-
-- Setup: NUM-6 must be in auto/up position. Press NUM-1 to enter setup mode, press
- NUM-6 to change direction.
-
-- Tests: NUM-6 must be in manual/down position. Press NUM-1 twice and tests will
- begin. Press NUM-1 and NUM-6 together to get from test 1 to test 2. Press NUM-6
- to switch between auto/manual stepping.
-
-- Auto Diag Test: Set Dips to SW6. Press NUM-0. Press NUM-ENTER. Press NUM-1. Tests
- will begin.
-
-- Other: Set Dips to SW7 or SW8. Press NUM-0. Press NUM-ENTER.
-
-
-Status:
-- All games are playable.
-
-ToDo:
-- Nothing
-
-
-************************************************************************************/
-
-#include "emu.h"
-#include "machine/genpin.h"
-
-#include "cpu/m6800/m6800.h"
-#include "audio/williams.h"
-#include "machine/6821pia.h"
-#include "machine/input_merger.h"
-#include "speaker.h"
-
-#include "s6a.lh"
-
-
-namespace {
-
-class s6a_state : public genpin_class
-{
-public:
- s6a_state(const machine_config &mconfig, device_type type, const char *tag)
- : genpin_class(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_s6sound(*this, "s6sound")
- , m_pia22(*this, "pia22")
- , m_pia24(*this, "pia24")
- , m_pia28(*this, "pia28")
- , m_pia30(*this, "pia30")
- , m_io_keyboard(*this, "X%d", 0U)
- , m_dips(*this, "DS%d", 1U)
- , m_digits(*this, "digit%d", 0U)
- , m_leds(*this, "led%d", 0U)
- , m_io_outputs(*this, "out%d", 0U)
- { }
-
- void s6a(machine_config &config);
-
- DECLARE_INPUT_CHANGED_MEMBER(main_nmi);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param) override;
-
-private:
- u8 sound_r();
- void dig0_w(u8 data);
- void dig1_w(u8 data);
- void lamp0_w(u8 data);
- void lamp1_w(u8 data);
- void sol0_w(u8 data);
- void sol1_w(u8 data);
- u8 dips_r();
- u8 switch_r();
- void switch_w(u8 data);
- DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { m_io_outputs[20] = state; } //ST5
- DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { } //ST-solenoids enable
- DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { m_io_outputs[17] = state; } //ST2
- DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { m_io_outputs[16] = state; } //ST1
- DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } //diag leds enable
- DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { m_io_outputs[21] = state; } //ST6
- DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { m_io_outputs[19] = state; } //ST4
- DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { m_io_outputs[18] = state; } //ST3
- DECLARE_WRITE_LINE_MEMBER(pia_irq);
-
- void main_map(address_map &map);
-
- u8 m_strobe = 0;
- u8 m_row = 0;
- bool m_data_ok = 0;
- u8 m_lamp_data = 0;
- emu_timer* m_irq_timer;
- static const device_timer_id TIMER_IRQ = 0;
- required_device<cpu_device> m_maincpu;
- required_device<williams_s6_sound_device> m_s6sound;
- required_device<pia6821_device> m_pia22;
- required_device<pia6821_device> m_pia24;
- required_device<pia6821_device> m_pia28;
- required_device<pia6821_device> m_pia30;
- required_ioport_array<8> m_io_keyboard;
- required_ioport_array<2> m_dips;
- output_finder<61> m_digits;
- output_finder<2> m_leds;
- output_finder<86> m_io_outputs; // 22 solenoids + 64 lamps
-};
-
-void s6a_state::main_map(address_map &map)
-{
- map.global_mask(0x7fff);
- map(0x0000, 0x00ff).ram();
- map(0x0100, 0x01ff).ram().share("nvram");
- map(0x2200, 0x2203).rw(m_pia22, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // solenoids
- map(0x2400, 0x2403).rw(m_pia24, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // lamps
- map(0x2800, 0x2803).rw(m_pia28, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // display
- map(0x3000, 0x3003).rw(m_pia30, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // inputs
- map(0x6000, 0x7fff).rom().region("maincpu", 0);
-}
-
-static INPUT_PORTS_START( s6a )
- PORT_START("X0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_NAME("Plumb Tilt") // 3 touches before it tilts
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Tilt")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN3 )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN2 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("Slam Tilt")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("High Score Reset")
-
- PORT_START("X1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("INP10")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("INP11")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("INP12")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("INP13")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("INP14")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("INP15")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("INP16")
-
- PORT_START("X2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("INP17")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_I) PORT_NAME("INP18")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("INP19")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_K) PORT_NAME("INP20")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_NAME("INP21")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("INP22")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("INP23")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_O) PORT_NAME("INP24")
-
- PORT_START("X3")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_P) PORT_NAME("INP25")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("INP26")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("INP27")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("INP28")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("INP29")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("INP30")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("INP31")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("INP32")
-
- PORT_START("X4")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("INP33")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("INP34")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP35")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP36")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("INP37")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("INP38")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("INP39")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("INP40")
-
- PORT_START("X5")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("INP41")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("INP42")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("INP43")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("INP44")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("INP45")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("INP46")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_UP) PORT_NAME("INP47")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_LEFT) PORT_NAME("INP48")
-
- PORT_START("X6")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("INP49")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DOWN) PORT_NAME("INP50")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("INP52")
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DEL) PORT_NAME("INP53")
-
- PORT_START("X7") // unused
-
- PORT_START("DIAGS")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_0_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s6a_state, main_nmi, 1)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Advance") PORT_CODE(KEYCODE_1_PAD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Manual/Auto") PORT_CODE(KEYCODE_2_PAD) PORT_TOGGLE
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER_PAD)
-
- PORT_START("DS1") // DS1 only 3 switches do anything
- PORT_DIPNAME( 0x70, 0x70, "Diagnostic" )
- PORT_DIPSETTING( 0x70, "Off" )
- PORT_DIPSETTING( 0x60, "SW8 - Zero Audit Tables" )
- PORT_DIPSETTING( 0x50, "SW7 - Reset to Defaults" )
- PORT_DIPSETTING( 0x30, "SW6 - Auto Diagnostic Test" )
- PORT_BIT( 0x8f, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("DS2") // DS2 switches exist but do nothing
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( alpok )
- PORT_INCLUDE(s6a)
- PORT_MODIFY("X3")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) // Playfield tilt
- PORT_MODIFY("X5")
- PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_MODIFY("X6")
- PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
-INPUT_PORTS_END
-
-INPUT_CHANGED_MEMBER( s6a_state::main_nmi )
-{
- // Diagnostic button sends a pulse to NMI pin
- if (newval==CLEAR_LINE)
- m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
-}
-
-void s6a_state::sol0_w(u8 data)
-{
- if (BIT(data, 0))
- m_samples->start(5, 5); // outhole
-
- for (u8 i = 0; i < 8; i++)
- m_io_outputs[i] = BIT(data, i);
-}
-
-void s6a_state::sol1_w(u8 data)
-{
- u8 sound_data = data & 0x7f;
-
- m_s6sound->write(~sound_data);
-
- if (BIT(data, 5))
- m_samples->start(0, 6); // knocker
-
- for (u8 i = 0; i < 8; i++)
- m_io_outputs[8U+i] = BIT(data, i);
-}
-
-void s6a_state::lamp0_w(u8 data)
-{
- m_lamp_data = data ^ 0xff;
-}
-
-void s6a_state::lamp1_w(u8 data)
-{
- // find out which row is active
- for (u8 i = 0; i < 8; i++)
- if (BIT(data, i))
- for (u8 j = 0; j < 8; j++)
- m_io_outputs[22U+i*8U+j] = BIT(m_lamp_data, j);
-}
-
-u8 s6a_state::dips_r()
-{
- if (BIT(ioport("DIAGS")->read(), 4))
- return m_dips[BIT(~m_strobe, 1)]->read() << (BIT(m_strobe, 0) ? 4 : 0);
-
- return 0xff;
-}
-
-void s6a_state::dig0_w(u8 data)
-{
- m_strobe = data & 15;
- m_data_ok = true;
- m_leds[0] = !BIT(data, 4);
- m_leds[1] = !BIT(data, 5);
-}
-
-void s6a_state::dig1_w(u8 data)
-{
- static const u8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543
- if (m_data_ok)
- {
- m_digits[m_strobe+16] = patterns[data&15];
- m_digits[m_strobe] = patterns[data>>4];
- }
- m_data_ok = false;
-}
-
-u8 s6a_state::switch_r()
-{
- u8 data = 0;
- // there's hardware for 8 rows, but machines use 7 max
- for (u8 i = 0; i < 7; i++)
- if (BIT(m_row, i))
- data |= m_io_keyboard[i]->read();
-
- return data;
-}
-
-void s6a_state::switch_w(u8 data)
-{
- m_row = data;
-}
-
-WRITE_LINE_MEMBER( s6a_state::pia_irq )
-{
- if(state == CLEAR_LINE)
- {
- // restart IRQ timer
- m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1);
- }
- else
- {
- // disable IRQ timer while other IRQs are being handled
- // (counter is reset every 32 cycles while a PIA IRQ is handled)
- m_irq_timer->adjust(attotime::zero);
- }
-}
-
-void s6a_state::machine_start()
-{
- genpin_class::machine_start();
- m_io_outputs.resolve();
- m_digits.resolve();
- m_leds.resolve();
-
- save_item(NAME(m_strobe));
- save_item(NAME(m_row));
- save_item(NAME(m_data_ok));
- save_item(NAME(m_lamp_data));
-
- m_irq_timer = timer_alloc(TIMER_IRQ);
- m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1);
-}
-
-void s6a_state::machine_reset()
-{
- genpin_class::machine_reset();
- for (u8 i = 0; i < m_io_outputs.size(); i++)
- m_io_outputs[i] = 0;
-}
-
-void s6a_state::device_timer(emu_timer &timer, device_timer_id id, int param)
-{
- switch(id)
- {
- case TIMER_IRQ:
- if(param == 1)
- {
- m_maincpu->set_input_line(M6808_IRQ_LINE, ASSERT_LINE);
- m_irq_timer->adjust(attotime::from_ticks(32,3580000/4),0);
- m_pia28->ca1_w(BIT(ioport("DIAGS")->read(), 2)); // Advance
- m_pia28->cb1_w(BIT(ioport("DIAGS")->read(), 3)); // Up/Down
- }
- else
- {
- m_maincpu->set_input_line(M6808_IRQ_LINE, CLEAR_LINE);
- m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1);
- m_pia28->ca1_w(1);
- m_pia28->cb1_w(1);
- }
- break;
- }
-}
-
-void s6a_state::s6a(machine_config &config)
-{
- /* basic machine hardware */
- M6808(config, m_maincpu, 3580000);
- m_maincpu->set_addrmap(AS_PROGRAM, &s6a_state::main_map);
-
- /* Video */
- config.set_default_layout(layout_s6a);
-
- /* Sound */
- genpin_audio(config);
-
- /* Devices */
- PIA6821(config, m_pia22, 0);
- m_pia22->writepa_handler().set(FUNC(s6a_state::sol0_w));
- m_pia22->writepb_handler().set(FUNC(s6a_state::sol1_w));
- m_pia22->ca2_handler().set(FUNC(s6a_state::pia22_ca2_w));
- m_pia22->cb2_handler().set(FUNC(s6a_state::pia22_cb2_w));
- m_pia22->irqa_handler().set(FUNC(s6a_state::pia_irq));
- m_pia22->irqb_handler().set(FUNC(s6a_state::pia_irq));
-
- PIA6821(config, m_pia24, 0);
- m_pia24->writepa_handler().set(FUNC(s6a_state::lamp0_w));
- m_pia24->writepb_handler().set(FUNC(s6a_state::lamp1_w));
- m_pia24->ca2_handler().set(FUNC(s6a_state::pia24_ca2_w));
- m_pia24->cb2_handler().set(FUNC(s6a_state::pia24_cb2_w));
- m_pia24->irqa_handler().set(FUNC(s6a_state::pia_irq));
- m_pia24->irqb_handler().set(FUNC(s6a_state::pia_irq));
-
- PIA6821(config, m_pia28, 0);
- m_pia28->readpa_handler().set(FUNC(s6a_state::dips_r));
- m_pia28->set_port_a_input_overrides_output_mask(0xff);
- m_pia28->writepa_handler().set(FUNC(s6a_state::dig0_w));
- m_pia28->writepb_handler().set(FUNC(s6a_state::dig1_w));
- m_pia28->ca2_handler().set(FUNC(s6a_state::pia28_ca2_w));
- m_pia28->cb2_handler().set(FUNC(s6a_state::pia28_cb2_w));
- m_pia28->irqa_handler().set(FUNC(s6a_state::pia_irq));
- m_pia28->irqb_handler().set(FUNC(s6a_state::pia_irq));
-
- PIA6821(config, m_pia30, 0);
- m_pia30->readpa_handler().set(FUNC(s6a_state::switch_r));
- m_pia30->set_port_a_input_overrides_output_mask(0xff);
- m_pia30->writepb_handler().set(FUNC(s6a_state::switch_w));
- m_pia30->ca2_handler().set(FUNC(s6a_state::pia30_ca2_w));
- m_pia30->cb2_handler().set(FUNC(s6a_state::pia30_cb2_w));
- m_pia30->irqa_handler().set(FUNC(s6a_state::pia_irq));
- m_pia30->irqb_handler().set(FUNC(s6a_state::pia_irq));
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-
- /* Add the soundcard */
- SPEAKER(config, "mono").front_center();
- WILLIAMS_S6_SOUND(config, m_s6sound, 0).add_route(ALL_OUTPUTS, "mono", 1.0);
-}
-
-
-/*--------------------------
-/ Algar - Sys.6a (Game #499)
-/-------------------------*/
-ROM_START(algar_l1)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(6711da23) SHA1(80a46f5a2630977bc1c6e17466e8865083eb9a18))
- ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
- ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
-
- ROM_REGION(0x5000, "s6sound:audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("sound4.716", 0x4800, 0x0800, CRC(67ea12e7) SHA1(f81e97183442736d5766a7e5e074bc6539e8ced0))
-ROM_END
-
-/*-------------------------------
-/ Alien Poker - Sys.6a (Game #501)
-/-------------------------------*/
-ROM_START(alpok_l6)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom6.716", 0x0000, 0x0800, CRC(20538a4a) SHA1(6cdd6b7ded76b3cbd954d371e126e1bbd95a6219))
- ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
- ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
-
- ROM_REGION(0x5000, "s6sound:audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("v_ic7.532", 0x0000, 0x1000, CRC(a66c7ca6) SHA1(6e90081f853fcf66bfeac0a8ee1c762b3760b90b))
- ROM_LOAD("v_ic5.532", 0x1000, 0x1000, CRC(f16a237a) SHA1(a904138fad5cbc19946bcf0de824e27537dcd621))
- ROM_LOAD("v_ic6.532", 0x2000, 0x1000, CRC(15a3cc85) SHA1(86002ac78189415ae912e8bc23c92b3b67610d87))
- ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4))
-ROM_END
-
-ROM_START(alpok_l2)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom.716", 0x0000, 0x0800, CRC(79c07603) SHA1(526a45b139394e475fc052636e98d880a8908168))
- ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
- ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
-
- ROM_REGION(0x5000, "s6sound:audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("v_ic7.532", 0x0000, 0x1000, CRC(a66c7ca6) SHA1(6e90081f853fcf66bfeac0a8ee1c762b3760b90b))
- ROM_LOAD("v_ic5.532", 0x1000, 0x1000, CRC(f16a237a) SHA1(a904138fad5cbc19946bcf0de824e27537dcd621))
- ROM_LOAD("v_ic6.532", 0x2000, 0x1000, CRC(15a3cc85) SHA1(86002ac78189415ae912e8bc23c92b3b67610d87))
- ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4))
-ROM_END
-
-ROM_START(alpok_f6)
- ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("gamerom6.716", 0x0000, 0x0800, CRC(20538a4a) SHA1(6cdd6b7ded76b3cbd954d371e126e1bbd95a6219))
- ROM_LOAD("green1.716", 0x1000, 0x0800, CRC(2145f8ab) SHA1(ddf63208559a3a08d4e88327c55426b0eed27654))
- ROM_LOAD("green2.716", 0x1800, 0x0800, CRC(1c978a4a) SHA1(1959184764643d58f1740c54bb74c2aad7d667d2))
-
- ROM_REGION(0x5000, "s6sound:audiocpu", ROMREGION_ERASEFF)
- ROM_LOAD("5t5014fr.dat", 0x0000, 0x1000, CRC(1d961517) SHA1(c71ee324becfc8cdbecabd1e64b11b5a39ff2483))
- ROM_LOAD("5t5015fr.dat", 0x1000, 0x1000, CRC(8d065f80) SHA1(0ab22c9b20ab6fe41abab620435ad03652db7a8e))
- ROM_LOAD("5t5016fr.dat", 0x2000, 0x1000, CRC(0ddf91e9) SHA1(48f5fdfc0c5a66dd318fecb7c90e5f5a684a3876))
- ROM_LOAD("5t5017fr.dat", 0x3000, 0x1000, CRC(7e546dc1) SHA1(58f8286403978b0d929987189089881d754a9a83))
- ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4))
-ROM_END
-
-} // anonymous namespace
-
-
-GAME( 1980, algar_l1, 0, s6a, s6a, s6a_state, empty_init, ROT0, "Williams", "Algar (L-1)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, alpok_l6, 0, s6a, alpok, s6a_state, empty_init, ROT0, "Williams", "Alien Poker (L-6)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, alpok_l2, alpok_l6, s6a, alpok, s6a_state, empty_init, ROT0, "Williams", "Alien Poker (L-2)", MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 1980, alpok_f6, alpok_l6, s6a, alpok, s6a_state, empty_init, ROT0, "Williams", "Alien Poker (L-6 French speech)", MACHINE_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/drivers/s7.cpp b/src/mame/drivers/s7.cpp
index 11e8f653d24..e2d75d88245 100644
--- a/src/mame/drivers/s7.cpp
+++ b/src/mame/drivers/s7.cpp
@@ -5,21 +5,22 @@
PINBALL
Williams System 7
-Differences to system 6/6a:
+Differences to system 6:
- Extra PIA at 0x2100 to handle sound and more solenoids.
- Diag digit
- Leading zero suppression
- Commas
+- 7 digits for each player
Diagnostic actions:
- You must be in game over mode. All buttons are in the number-pad. When you are
finished, you must reboot.
-- Setup: NUM-6 must be in auto/up position. Press NUM-1 to enter setup mode, press
- NUM-6 to change direction.
+- Setup: NUM-2 must be in auto/up position. Press NUM-1 to enter setup mode, press
+ NUM-2 to change direction.
-- Tests: NUM-6 must be in manual/down position. Press NUM-1 twice and tests will
- begin. Press NUM-1 and NUM-6 together to get from test 1 to test 2. Press NUM-6
+- Tests: NUM-2 must be in manual/down position. Press NUM-1 twice and tests will
+ begin. Press NUM-1 and NUM-2 together to get from test 1 to test 2. Press NUM-2
to switch between auto/manual stepping.
- Auto Diag Test: Set Dips to SW6. Press NUM-0. Press NUM-ENTER. Press NUM-1. Tests
diff --git a/src/mame/drivers/sacstate.cpp b/src/mame/drivers/sacstate.cpp
index 6e0a995e9fa..d1be027cd50 100644
--- a/src/mame/drivers/sacstate.cpp
+++ b/src/mame/drivers/sacstate.cpp
@@ -107,6 +107,7 @@ void sacstate_state::sacstate_mem(address_map &map)
void sacstate_state::sacstate_io(address_map &map)
{
map.unmap_value_high();
+ map.global_mask(0x1f);
map(0x00, 0x00).r(FUNC(sacstate_state::port00_r));
map(0x01, 0x01).r(FUNC(sacstate_state::port01_r));
map(0x04, 0x04).r(FUNC(sacstate_state::port04_r));
diff --git a/src/mame/drivers/spike.cpp b/src/mame/drivers/spike.cpp
index b89d1bc4272..2207e3da39a 100644
--- a/src/mame/drivers/spike.cpp
+++ b/src/mame/drivers/spike.cpp
@@ -6,9 +6,11 @@ Created 2022-02-13.
Stern SPIKE/SPIKE2 system.
The current (as of 2022) system for Stern pinball machines. There are a number of boards that take 48 volt
-power and regulate it to the voltages needed. The boards communicate via Cat5 cables.
+power and regulate it to the voltages needed. The boards communicate via Cat5 cables, and each has a unique
+network (node) address. For example the CPU board is Node 0, and other major boards are 8 and 9.
-Major components: (to do)
+CPU/GPU = IMX 6 ARMS PROCESSOR CORTEX A9 1.2GHz DUAL CORE. Later games will have a Quad-core processor.
+Like most modern pinballs, updates are uploaded via a USB stick.
This source is not included in the compilation, as there's no code at this time.
@@ -84,7 +86,9 @@ Heavy Metal S1
The Mandalorian (Pro) S5
The Mandalorian (LE) S6
The Mandalorian (Premium) S7
-Rush T1
+Rush (Pro) T1
+Rush (LE) T2
+Rush (Premium) T3
Godzilla (Pro) T5
Godzilla (LE) T6
Godzilla (Premium) T7
diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp
index e4cafc711ea..78cbb258776 100644
--- a/src/mame/drivers/stv.cpp
+++ b/src/mame/drivers/stv.cpp
@@ -3792,7 +3792,7 @@ ROM_END
ROM_START( yattrmnp ) // ROM board stickered 837-13598
STV_BIOS
- // TODO: fix loading. This order passes the internal ROM test but then the game hangs with 'ROM has changed push reset' message. Resetting doesn't solve this
+
ROM_REGION32_BE( 0x3000000, "cart", ROMREGION_ERASE00 ) /* SH2 code */
ROM_LOAD16_WORD_SWAP( "epr-21122.ic13", 0x0000000, 0x0080000, CRC(49f56e32) SHA1(7d8bdaaf3a4edd9df90becc3ec5e94a69bb29ffc) ) // ST M27C4002-12F1
ROM_LOAD16_WORD_SWAP( "mpr-21125.ic02", 0x0400000, 0x0400000, CRC(40f5f119) SHA1(68fc634734ab05b54ff93256259969f16e26807d) )
@@ -3928,7 +3928,7 @@ GAME( 1998, twsoc98, twcup98, stv_5881, stv, stv_state, init_twcup98,
/* Gives I/O errors */
GAME( 1996, magzun, stvbios, magzun, stv, stv_state, init_magzun, ROT0, "Sega", "Magical Zunou Power (J 961031 V1.000)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_MICROPHONE )
-GAME( 1998, yattrmnp, stvbios, stv, stv, stv_state, init_stv, ROT0, "Sega", "Yatterman Plus (J 981006 V1.000)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // needs correct ROM loading
+GAME( 1998, yattrmnp, stvbios, stv, stv, stv_state, init_stv, ROT0, "Sega", "Yatterman Plus (J 981006 V1.000)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // needs emulation of the medal specific hardware
GAME( 1998, choroqhr, stvbios, stv, stv, stv_state, init_stv, ROT0, "Sega / Takara", "Choro Q Hyper Racing 5 (J 981230 V1.000)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, fanzonem, stvbios, stv, stv, stv_state, init_stv, ROT0, "Sega", "Fantasy Zone (medal game, REV.A) (J 990202 V1.000)", MACHINE_NOT_WORKING ) // require SH2's SCI serial port emulated, to communicate with coin/medal-related I/O board
GAME( 2000, sackids, stvbios, stv, stv, stv_state, init_stv, ROT0, "Sega", "Soreyuke Anpanman Crayon Kids (J 001026 V1.000)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp
index 0ef99c621ba..7d8f11b36b2 100644
--- a/src/mame/drivers/tispeak.cpp
+++ b/src/mame/drivers/tispeak.cpp
@@ -520,7 +520,6 @@ void tispeak_state::machine_start()
hh_tms1k_state::machine_start();
m_ol_out.resolve();
-
init_cartridge();
}
@@ -1292,7 +1291,7 @@ INPUT_PORTS_END
void tispeak_state::tms5110_route(machine_config &config)
{
- /* sound hardware */
+ // sound hardware
m_tms5100->m0().set(m_tms6100, FUNC(tms6100_device::m0_w));
m_tms5100->m1().set(m_tms6100, FUNC(tms6100_device::m1_w));
m_tms5100->addr().set(m_tms6100, FUNC(tms6100_device::add_w));
@@ -1303,7 +1302,7 @@ void tispeak_state::tms5110_route(machine_config &config)
void tispeak_state::snmath(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0270(config, m_maincpu, MASTER_CLOCK/2);
m_maincpu->k().set(FUNC(tispeak_state::snspell_read_k));
m_maincpu->o().set(FUNC(tispeak_state::snmath_write_o));
@@ -1313,12 +1312,12 @@ void tispeak_state::snmath(machine_config &config)
m_maincpu->write_ctl().set("tms5100", FUNC(tms5110_device::ctl_w));
m_maincpu->write_pdc().set("tms5100", FUNC(tms5110_device::pdc_w));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(16, 16);
m_display->set_segmask(0x21ff, 0x3fff);
config.set_default_layout(layout_snmath);
- /* sound hardware */
+ // sound hardware
TMS6100(config, m_tms6100, MASTER_CLOCK/4);
SPEAKER(config, "mono").front_center();
@@ -1331,12 +1330,12 @@ void tispeak_state::sns_cd2801(machine_config &config)
{
snmath(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->o().set(FUNC(tispeak_state::snspell_write_o));
config.set_default_layout(layout_snspell);
- /* cartridge */
+ // cartridge
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "snspell", "vsm");
m_cart->set_device_load(FUNC(tispeak_state::cart_load));
@@ -1347,7 +1346,7 @@ void tispeak_state::snspellit(machine_config &config)
{
sns_cd2801(config);
- /* basic machine hardware */
+ // basic machine hardware
config.set_default_layout(layout_snmath);
}
@@ -1355,7 +1354,7 @@ void tispeak_state::sns_tmc0281(machine_config &config)
{
sns_cd2801(config);
- /* sound hardware */
+ // sound hardware
TMC0281(config.replace(), m_tms5100, MASTER_CLOCK);
tms5110_route(config);
}
@@ -1364,7 +1363,7 @@ void tispeak_state::snspellsp(machine_config &config)
{
sns_tmc0281(config);
- /* basic machine hardware */
+ // basic machine hardware
config.set_default_layout(layout_snspellsp);
}
@@ -1372,7 +1371,7 @@ void tispeak_state::sns_tmc0281d(machine_config &config)
{
sns_cd2801(config);
- /* sound hardware */
+ // sound hardware
TMC0281D(config.replace(), m_tms5100, MASTER_CLOCK);
tms5110_route(config);
}
@@ -1382,12 +1381,12 @@ void tispeak_state::snread(machine_config &config)
{
snmath(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->o().set(FUNC(tispeak_state::snspell_write_o));
config.set_default_layout(layout_snread);
- /* cartridge */
+ // cartridge
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "snread", "vsm");
m_cart->set_device_load(FUNC(tispeak_state::cart_load));
@@ -1399,13 +1398,13 @@ void tispeak_state::lantutor(machine_config &config)
{
snmath(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->o().set(FUNC(tispeak_state::snspell_write_o));
m_maincpu->r().set(FUNC(tispeak_state::lantutor_write_r));
config.set_default_layout(layout_snread);
- /* cartridge */
+ // cartridge
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "lantutor", "vsm,bin");
m_cart->set_must_be_loaded(true);
m_cart->set_device_load(FUNC(tispeak_state::cart_load));
@@ -1416,22 +1415,22 @@ void tispeak_state::lantutor(machine_config &config)
void tispeak_state::snspellc(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, MASTER_CLOCK/2);
m_maincpu->k().set(FUNC(tispeak_state::snspellc_read_k));
m_maincpu->o().set(FUNC(tispeak_state::snspellc_write_o));
m_maincpu->r().set(FUNC(tispeak_state::snspellc_write_r));
- /* no visual feedback! */
+ // no visual feedback!
- /* sound hardware */
+ // sound hardware
TMS6100(config, m_tms6100, MASTER_CLOCK/4);
SPEAKER(config, "mono").front_center();
TMC0281D(config, m_tms5100, MASTER_CLOCK);
tms5110_route(config);
- /* cartridge */
+ // cartridge
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "snspell", "vsm");
m_cart->set_device_load(FUNC(tispeak_state::cart_load));
@@ -1442,7 +1441,7 @@ void tispeak_state::snspellcuk(machine_config &config)
{
snspellc(config);
- /* sound hardware */
+ // sound hardware
CD2801(config.replace(), m_tms5100, MASTER_CLOCK); // CD2801A!
tms5110_route(config);
}
@@ -1450,7 +1449,7 @@ void tispeak_state::snspellcuk(machine_config &config)
void tispeak_state::vocaid(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1100(config, m_maincpu, MASTER_CLOCK/2);
m_maincpu->k().set(FUNC(tispeak_state::tntell_read_k));
m_maincpu->o().set(FUNC(tispeak_state::snspellc_write_o));
@@ -1459,7 +1458,7 @@ void tispeak_state::vocaid(machine_config &config)
TIMER(config, "ol_timer").configure_periodic(FUNC(tispeak_state::tntell_get_overlay), attotime::from_msec(50));
config.set_default_layout(layout_tntell);
- /* sound hardware */
+ // sound hardware
TMS6100(config, m_tms6100, MASTER_CLOCK/4);
SPEAKER(config, "mono").front_center();
@@ -1471,7 +1470,7 @@ void tispeak_state::tntell(machine_config &config)
{
vocaid(config);
- /* cartridge */
+ // cartridge
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "tntell", "vsm");
m_cart->set_device_load(FUNC(tispeak_state::cart_load));
@@ -1481,7 +1480,7 @@ void tispeak_state::tntell(machine_config &config)
void tispeak_state::k28m2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS1400(config, m_maincpu, MASTER_CLOCK/2);
m_maincpu->k().set(FUNC(tispeak_state::k28_read_k));
m_maincpu->o().set(FUNC(tispeak_state::k28_write_o));
@@ -1489,14 +1488,14 @@ void tispeak_state::k28m2(machine_config &config)
config.set_default_layout(layout_k28m2);
- /* sound hardware */
+ // sound hardware
TMS6100(config, m_tms6100, MASTER_CLOCK/4);
SPEAKER(config, "mono").front_center();
TMS5110A(config, m_tms5100, MASTER_CLOCK);
tms5110_route(config);
- /* cartridge */
+ // cartridge
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "k28m2", "vsm");
m_cart->set_device_load(FUNC(tispeak_state::cart_load));
diff --git a/src/mame/drivers/tispellb.cpp b/src/mame/drivers/tispellb.cpp
index 7ac6ac124d5..ae8ecd7ab81 100644
--- a/src/mame/drivers/tispellb.cpp
+++ b/src/mame/drivers/tispellb.cpp
@@ -86,9 +86,9 @@ private:
optional_device<tms1k_base_device> m_subcpu;
optional_device<tms6100_device> m_tms6100;
- u8 m_rev1_ctl;
- u16 m_sub_o;
- u16 m_sub_r;
+ u8 m_rev1_ctl = 0;
+ u16 m_sub_o = 0;
+ u16 m_sub_r = 0;
virtual void power_off() override;
void power_subcpu();
@@ -114,11 +114,6 @@ void tispellb_state::machine_start()
{
hh_tms1k_state::machine_start();
- // zerofill
- m_rev1_ctl = 0;
- m_sub_o = 0;
- m_sub_r = 0;
-
// register for savestates
save_item(NAME(m_rev1_ctl));
save_item(NAME(m_sub_o));
@@ -340,7 +335,7 @@ INPUT_PORTS_END
void tispellb_state::rev1(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0270(config, m_maincpu, 350000); // approximation
m_maincpu->k().set(FUNC(tispellb_state::main_read_k));
m_maincpu->o().set(FUNC(tispellb_state::main_write_o));
@@ -355,18 +350,18 @@ void tispellb_state::rev1(machine_config &config)
config.set_perfect_quantum(m_maincpu);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(16, 16);
m_display->set_segmask(0xff, 0x3fff);
config.set_default_layout(layout_spellb);
- /* no sound! */
+ // no sound!
}
void tispellb_state::rev2(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
TMS0270(config, m_maincpu, 350000); // approximation
m_maincpu->k().set(FUNC(tispellb_state::main_read_k));
m_maincpu->o().set(FUNC(tispellb_state::rev2_write_o));
@@ -377,12 +372,12 @@ void tispellb_state::rev2(machine_config &config)
TMS6100(config, m_tms6100, 350000);
m_tms6100->enable_4bit_mode(true);
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(16, 16);
m_display->set_segmask(0xff, 0x3fff);
config.set_default_layout(layout_spellb);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
}
diff --git a/src/mame/includes/bbc.h b/src/mame/includes/bbc.h
index abe32e65154..6a50378a640 100644
--- a/src/mame/includes/bbc.h
+++ b/src/mame/includes/bbc.h
@@ -196,6 +196,7 @@ public:
void bbcb(machine_config &config);
void bbcb_de(machine_config &config);
void bbcb_us(machine_config &config);
+ void sist1(machine_config &config);
void bbca_mem(address_map &map);
void bbc_base(address_map &map);
@@ -437,9 +438,9 @@ public:
void daisy(machine_config &config);
void discmon(machine_config &config);
void discmate(machine_config &config);
- void mpc800(machine_config& config);
- void mpc900(machine_config& config);
- void mpc900gx(machine_config& config);
+ void mpc800(machine_config &config);
+ void mpc900(machine_config &config);
+ void mpc900gx(machine_config &config);
void bbcmc(machine_config &config);
void pro128s(machine_config &config);
void autoc15(machine_config &config);
diff --git a/src/mame/includes/hh_tms1k.h b/src/mame/includes/hh_tms1k.h
index 43e3c0d2aa0..3435455d5b7 100644
--- a/src/mame/includes/hh_tms1k.h
+++ b/src/mame/includes/hh_tms1k.h
@@ -35,6 +35,16 @@ public:
m_out_power(*this, "power")
{ }
+ virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
+ virtual DECLARE_INPUT_CHANGED_MEMBER(power_button);
+
+ template<int Sel> DECLARE_INPUT_CHANGED_MEMBER(switch_next) { if (newval) switch_change(Sel, param, true); }
+ template<int Sel> DECLARE_INPUT_CHANGED_MEMBER(switch_prev) { if (newval) switch_change(Sel, param, false); }
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
// devices
required_device<tms1k_base_device> m_maincpu;
optional_device<pwm_display_device> m_display;
@@ -53,19 +63,10 @@ public:
u8 read_inputs(int columns);
u8 read_rotated_inputs(int columns, u8 rowmask = 0xf);
- virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button);
- virtual DECLARE_INPUT_CHANGED_MEMBER(power_button);
virtual DECLARE_WRITE_LINE_MEMBER(auto_power_off);
virtual void power_off();
void set_power(bool state);
-
void switch_change(int sel, u32 mask, bool next);
- template<int Sel> DECLARE_INPUT_CHANGED_MEMBER(switch_next) { if (newval) switch_change(Sel, param, true); }
- template<int Sel> DECLARE_INPUT_CHANGED_MEMBER(switch_prev) { if (newval) switch_change(Sel, param, false); }
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
};
diff --git a/src/mame/layout/blastit.lay b/src/mame/layout/blastit.lay
new file mode 100644
index 00000000000..6264dea6a99
--- /dev/null
+++ b/src/mame/layout/blastit.lay
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
+ <element name="text_score"><text string="SCORE" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
+ </element>
+
+ <element name="led" defstate="0">
+ <rect state="0"><color red="0.1" green="0.01" blue="0.015" /></rect>
+ <rect state="1"><color red="0.8" green="0.08" blue="0.12" /></rect>
+ <rect state="2"><color red="1.0" green="0.2" blue="0.2" /></rect>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="5" right="71" top="4.5" bottom="81.1" />
+
+ <!-- score display -->
+ <element ref="white"><bounds x="24.5" y="9" width="27.5" height="13" /></element>
+ <element ref="black"><bounds x="25.0" y="9.5" width="26.5" height="12" /></element>
+ <element ref="text_score"><bounds x="3.5" y="12.75" width="20" height="5.5" /></element>
+ <element ref="digit"><bounds x="26" y="11" width="6" height="9" /></element> <!-- unpopulated -->
+ <element name="digit7" ref="digit"><bounds x="32" y="11" width="6" height="9" /></element>
+ <element name="digit8" ref="digit"><bounds x="38" y="11" width="6" height="9" /></element>
+ <element name="digit9" ref="digit"><bounds x="44" y="11" width="6" height="9" /></element>
+
+ <!-- other leds -->
+ <repeat count="7">
+ <param name="y" start="30" increment="7.3" />
+ <param name="i2" start="6" increment="-1" />
+
+ <repeat count="7">
+ <param name="x" start="10" increment="8.5" />
+ <param name="i1" start="0" increment="1" />
+ <element name="~i1~.~i2~" ref="led"><bounds x="~x~" y="~y~" width="5" height="1.7" /></element>
+ </repeat>
+ </repeat>
+
+ <!-- 3 of the rows have a different shape -->
+ <element ref="black"><bounds x="0" y="50" width="80" height="20" /></element>
+
+ <repeat count="3">
+ <param name="y" start="51.9" increment="7.3" />
+ <param name="i2" start="3" increment="-1" />
+
+ <repeat count="7">
+ <param name="x" start="11.5" increment="8.5" />
+ <param name="i1" start="0" increment="1" />
+ <element name="~i1~.~i2~" ref="led"><bounds x="~x~" y="~y~" width="2" height="2" /></element>
+ </repeat>
+ </repeat>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/fidel_cphantom.lay b/src/mame/layout/fidel_cphantom.lay
new file mode 100644
index 00000000000..3db9aa3124e
--- /dev/null
+++ b/src/mame/layout/fidel_cphantom.lay
@@ -0,0 +1,713 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element>
+
+ <element name="redb"><rect><color red="0.81" green="0.3" blue="0.29" /></rect></element>
+ <element name="disk_black"><disk><color red="0.17" green="0.15" blue="0.15" /></disk></element>
+ <element name="disk_white"><disk><color red="0.99" green="0.99" blue="0.99" /></disk></element>
+ <element name="lcd_bg"><rect><color red="0.54" green="0.57" blue="0.58" /></rect></element>
+ <element name="golden_mask"><rect><color red="0.843" green="0.678" blue="0.482" /></rect></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="0.2" green="0.16" blue="0.16" /></led7seg>
+ </element>
+ <element name="ldot" defstate="0">
+ <rect state="1"><color red="0.2" green="0.16" blue="0.16" /></rect>
+ <rect state="0"><color red="0.49412" green="0.51765" blue="0.51765" /></rect>
+ </element>
+
+ <element name="led" defstate="0">
+ <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
+ <disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
+ </element>
+
+ <element name="hlr" defstate="0">
+ <text string=" ">
+ <bounds x="0" y="0" width="8" height="6" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <disk state="1">
+ <bounds x="0.5" y="0.5" width="7" height="5" />
+ <color red="1.0" green="1.0" blue="1.0" />
+ </disk>
+ </element>
+
+ <element name="text_1">
+ <rect><color red="0.209" green="0.209" blue="0.201" /></rect>
+ <text string="1"><color red="0.843" green="0.678" blue="0.482" /></text>
+ </element>
+ <element name="text_2">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_3">
+ <rect><color red="0.209" green="0.209" blue="0.201" /></rect>
+ <text string="3"><color red="0.843" green="0.678" blue="0.482" /></text>
+ </element>
+ <element name="text_4">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_5">
+ <rect><color red="0.209" green="0.209" blue="0.201" /></rect>
+ <text string="5"><color red="0.843" green="0.678" blue="0.482" /></text>
+ </element>
+ <element name="text_6">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_7">
+ <rect><color red="0.209" green="0.209" blue="0.201" /></rect>
+ <text string="7"><color red="0.843" green="0.678" blue="0.482" /></text>
+ </element>
+ <element name="text_8">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+
+ <element name="text_a">
+ <rect><color red="0.209" green="0.209" blue="0.201" /></rect>
+ <text string="A"><color red="0.843" green="0.678" blue="0.482" /></text>
+ </element>
+ <element name="text_b">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_c">
+ <rect><color red="0.209" green="0.209" blue="0.201" /></rect>
+ <text string="C"><color red="0.843" green="0.678" blue="0.482" /></text>
+ </element>
+ <element name="text_d">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_e">
+ <rect><color red="0.209" green="0.209" blue="0.201" /></rect>
+ <text string="E"><color red="0.843" green="0.678" blue="0.482" /></text>
+ </element>
+ <element name="text_f">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_g">
+ <rect><color red="0.209" green="0.209" blue="0.201" /></rect>
+ <text string="G"><color red="0.843" green="0.678" blue="0.482" /></text>
+ </element>
+ <element name="text_h">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+
+ <element name="text_white">
+ <rect><color red="0.17" green="0.15" blue="0.15" /></rect>
+ <text string="WHITE"><color red="0.99" green="0.99" blue="0.99" /></text>
+ </element>
+ <element name="text_black">
+ <rect><color red="0.17" green="0.15" blue="0.15" /></rect>
+ <text string="BLACK"><color red="0.99" green="0.99" blue="0.99" /></text>
+ </element>
+ <element name="text_u1">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="VERIFY"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_u2">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="OPTION"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_u3">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="LEVEL"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_u4">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="INFO"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_u5">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="TAKE BACK"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_u6">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="HINT"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_u7">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="MOVE"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_u8">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="CLEAR"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+
+ <element name="text_shift">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="SHIFT"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+ <element name="text_s1">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="PROBLEM"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+ <element name="text_s2">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="REPLAY"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+ <element name="text_s3">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="NEW"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+ <element name="text_s4">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="AUTO"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+ <element name="text_s5">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="REPEAT"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+ <element name="text_s6">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="YES"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+ <element name="text_s7">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="NO/STOP"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+ <element name="text_s8">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="CLEAR"><color red="0.81" green="0.3" blue="0.29" /></text>
+ </element>
+
+ <element name="text_p1"> <image file="chess/wk.svg"/></element>
+ <element name="text_p2"> <image file="chess/wq.svg"/></element>
+ <element name="text_p3"> <image file="chess/wr.svg"/></element>
+ <element name="text_p4"> <image file="chess/wb.svg"/></element>
+ <element name="text_p5"> <image file="chess/wn.svg"/></element>
+ <element name="text_p6"> <image file="chess/wp.svg"/></element>
+
+<!-- sb board -->
+
+ <element name="cblack"><rect><color red="0.209" green="0.209" blue="0.201" /></rect></element>
+ <element name="cwhite"><rect><color red="0.843" green="0.678" blue="0.482" /></rect></element>
+
+ <element name="hlbb" defstate="0">
+ <text string=" "><bounds x="0" y="0" width="1" height="1" /></text>
+ <disk state="1">
+ <bounds x="0.12" y="0.12" width="0.76" height="0.76" />
+ <color red="0" green="0" blue="0" />
+ </disk>
+ </element>
+
+ <element name="piece" defstate="0">
+ <image file="chess/wp.svg" state="1"/>
+ <image file="chess/wn.svg" state="2"/>
+ <image file="chess/wb.svg" state="3"/>
+ <image file="chess/wr.svg" state="4"/>
+ <image file="chess/wq.svg" state="5"/>
+ <image file="chess/wk.svg" state="6"/>
+
+ <image file="chess/bp.svg" state="7"/>
+ <image file="chess/bn.svg" state="8"/>
+ <image file="chess/bb.svg" state="9"/>
+ <image file="chess/br.svg" state="10"/>
+ <image file="chess/bq.svg" state="11"/>
+ <image file="chess/bk.svg" state="12"/>
+
+ <!-- selected pieces -->
+ <image file="chess/wp.svg" state="13"><color alpha="0.5" /></image>
+ <image file="chess/wn.svg" state="14"><color alpha="0.5" /></image>
+ <image file="chess/wb.svg" state="15"><color alpha="0.5" /></image>
+ <image file="chess/wr.svg" state="16"><color alpha="0.5" /></image>
+ <image file="chess/wq.svg" state="17"><color alpha="0.5" /></image>
+ <image file="chess/wk.svg" state="18"><color alpha="0.5" /></image>
+
+ <image file="chess/bp.svg" state="19"><color alpha="0.5" /></image>
+ <image file="chess/bn.svg" state="20"><color alpha="0.5" /></image>
+ <image file="chess/bb.svg" state="21"><color alpha="0.5" /></image>
+ <image file="chess/br.svg" state="22"><color alpha="0.5" /></image>
+ <image file="chess/bq.svg" state="23"><color alpha="0.5" /></image>
+ <image file="chess/bk.svg" state="24"><color alpha="0.5" /></image>
+ </element>
+
+ <group name="sb_board">
+ <bounds x="-20.5" y="0" width="121.0" height="80" />
+
+ <!-- squares (avoid seams) -->
+ <element ref="cwhite"><bounds x="0" y="0" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="10" y="0" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="20" y="0" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="30" y="0" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="40" y="0" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="50" y="0" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="60" y="0" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="70" y="0" width="10" height="11" /></element>
+
+ <element ref="cblack"><bounds x="0" y="10" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="10" y="10" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="20" y="10" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="30" y="10" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="40" y="10" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="50" y="10" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="60" y="10" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="70" y="10" width="10" height="11" /></element>
+
+ <element ref="cwhite"><bounds x="0" y="20" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="10" y="20" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="20" y="20" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="30" y="20" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="40" y="20" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="50" y="20" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="60" y="20" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="70" y="20" width="10" height="11" /></element>
+
+ <element ref="cblack"><bounds x="0" y="30" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="10" y="30" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="20" y="30" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="30" y="30" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="40" y="30" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="50" y="30" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="60" y="30" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="70" y="30" width="10" height="11" /></element>
+
+ <element ref="cwhite"><bounds x="0" y="40" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="10" y="40" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="20" y="40" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="30" y="40" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="40" y="40" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="50" y="40" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="60" y="40" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="70" y="40" width="10" height="11" /></element>
+
+ <element ref="cblack"><bounds x="0" y="50" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="10" y="50" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="20" y="50" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="30" y="50" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="40" y="50" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="50" y="50" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="60" y="50" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="70" y="50" width="10" height="11" /></element>
+
+ <element ref="cwhite"><bounds x="0" y="60" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="10" y="60" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="20" y="60" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="30" y="60" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="40" y="60" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="50" y="60" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="60" y="60" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="70" y="60" width="10" height="11" /></element>
+
+ <element ref="cblack"><bounds x="0" y="70" width="11" height="10" /></element>
+ <element ref="cwhite"><bounds x="10" y="70" width="11" height="10" /></element>
+ <element ref="cblack"><bounds x="20" y="70" width="11" height="10" /></element>
+ <element ref="cwhite"><bounds x="30" y="70" width="11" height="10" /></element>
+ <element ref="cblack"><bounds x="40" y="70" width="11" height="10" /></element>
+ <element ref="cwhite"><bounds x="50" y="70" width="11" height="10" /></element>
+ <element ref="cblack"><bounds x="60" y="70" width="11" height="10" /></element>
+ <element ref="cwhite"><bounds x="70" y="70" width="10" height="10" /></element>
+
+ <!-- chessboard coords -->
+
+ <element ref="text_8"><bounds x="0" y="4.2" width="1.8" height="1.8" /></element>
+ <element ref="text_7"><bounds x="0" y="14.2" width="1.8" height="1.8" /></element>
+ <element ref="text_6"><bounds x="0" y="24.2" width="1.8" height="1.8" /></element>
+ <element ref="text_5"><bounds x="0" y="34.2" width="1.8" height="1.8" /></element>
+ <element ref="text_4"><bounds x="0" y="44.2" width="1.8" height="1.8" /></element>
+ <element ref="text_3"><bounds x="0" y="54.2" width="1.8" height="1.8" /></element>
+ <element ref="text_2"><bounds x="0" y="64.2" width="1.8" height="1.8" /></element>
+ <element ref="text_1"><bounds x="0" y="74.2" width="1.8" height="1.8" /></element>
+
+ <element ref="text_a"><bounds x="4.2" y="78.1" width="1.8" height="1.8" /></element>
+ <element ref="text_b"><bounds x="14.2" y="78.1" width="1.8" height="1.8" /></element>
+ <element ref="text_c"><bounds x="24.2" y="78.1" width="1.8" height="1.8" /></element>
+ <element ref="text_d"><bounds x="34.2" y="78.1" width="1.8" height="1.8" /></element>
+ <element ref="text_e"><bounds x="44.2" y="78.1" width="1.8" height="1.8" /></element>
+ <element ref="text_f"><bounds x="54.2" y="78.1" width="1.8" height="1.8" /></element>
+ <element ref="text_g"><bounds x="64.2" y="78.1" width="1.8" height="1.8" /></element>
+ <element ref="text_h"><bounds x="74.2" y="78.1" width="1.8" height="1.8" /></element>
+
+ <element ref="text_p6"><bounds x="-16.75" y="74" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="-6.75" y="74" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="-16.75" y="64" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="-6.75" y="64" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="-16.75" y="54" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="-6.75" y="54" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="-16.75" y="44" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="-6.75" y="44" width="2.5" height="2.5" /></element>
+ <element ref="text_p5"><bounds x="-16.75" y="34" width="2.5" height="2.5" /></element>
+ <element ref="text_p5"><bounds x="-6.75" y="34" width="2.5" height="2.5" /></element>
+ <element ref="text_p4"><bounds x="-16.75" y="24" width="2.5" height="2.5" /></element>
+ <element ref="text_p4"><bounds x="-6.75" y="24" width="2.5" height="2.5" /></element>
+ <element ref="text_p3"><bounds x="-16.75" y="14" width="2.5" height="2.5" /></element>
+ <element ref="text_p3"><bounds x="-6.75" y="14" width="2.5" height="2.5" /></element>
+ <element ref="text_p2"><bounds x="-16.75" y="4" width="2.5" height="2.5" /></element>
+ <element ref="text_p1"><bounds x="-6.75" y="4" width="2.5" height="2.5" /></element>
+ <element ref="text_white"><bounds x="-13" y="78.5" width="5" height="1.5" /></element>
+
+ <element ref="text_p6"><bounds x="94.25" y="74" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="84.25" y="74" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="94.25" y="64" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="84.25" y="64" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="94.25" y="54" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="84.25" y="54" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="94.25" y="44" width="2.5" height="2.5" /></element>
+ <element ref="text_p6"><bounds x="84.25" y="44" width="2.5" height="2.5" /></element>
+ <element ref="text_p5"><bounds x="94.25" y="34" width="2.5" height="2.5" /></element>
+ <element ref="text_p5"><bounds x="84.25" y="34" width="2.5" height="2.5" /></element>
+ <element ref="text_p4"><bounds x="94.25" y="24" width="2.5" height="2.5" /></element>
+ <element ref="text_p4"><bounds x="84.25" y="24" width="2.5" height="2.5" /></element>
+ <element ref="text_p3"><bounds x="94.25" y="14" width="2.5" height="2.5" /></element>
+ <element ref="text_p3"><bounds x="84.25" y="14" width="2.5" height="2.5" /></element>
+ <element ref="text_p2"><bounds x="94.25" y="4" width="2.5" height="2.5" /></element>
+ <element ref="text_p1"><bounds x="84.25" y="4" width="2.5" height="2.5" /></element>
+ <element ref="text_black"><bounds x="88" y="78.5" width="5" height="1.5" /></element>
+
+ <element ref="golden_mask" blend="multiply"><bounds x="80.5" y="0" width="20" height="80" /></element>
+ <element ref="golden_mask" blend="multiply"><bounds x="-20.5" y="0" width="20" height="80" /></element>
+
+ <!-- sensors, pieces -->
+ <repeat count="8">
+ <param name="y" start="0" increment="10" />
+ <param name="i" start="8" increment="-1" />
+
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x80"><bounds x="70" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x400"><bounds x="-20.5" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x800"><bounds x="-10.5" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x100"><bounds x="80.5" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x200"><bounds x="90.5" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+
+ <element name="piece_a~i~" ref="piece"><bounds x="0" y="~y~" width="10" height="10" /></element>
+ <element name="piece_b~i~" ref="piece"><bounds x="10" y="~y~" width="10" height="10" /></element>
+ <element name="piece_c~i~" ref="piece"><bounds x="20" y="~y~" width="10" height="10" /></element>
+ <element name="piece_d~i~" ref="piece"><bounds x="30" y="~y~" width="10" height="10" /></element>
+ <element name="piece_e~i~" ref="piece"><bounds x="40" y="~y~" width="10" height="10" /></element>
+ <element name="piece_f~i~" ref="piece"><bounds x="50" y="~y~" width="10" height="10" /></element>
+ <element name="piece_g~i~" ref="piece"><bounds x="60" y="~y~" width="10" height="10" /></element>
+ <element name="piece_h~i~" ref="piece"><bounds x="70" y="~y~" width="10" height="10" /></element>
+
+ <element name="piece_k~i~" ref="piece"><bounds x="-20.5" y="~y~" width="10" height="10" /></element>
+ <element name="piece_l~i~" ref="piece"><bounds x="-10.5" y="~y~" width="10" height="10" /></element>
+ <element name="piece_i~i~" ref="piece"><bounds x="80.5" y="~y~" width="10" height="10" /></element>
+ <element name="piece_j~i~" ref="piece"><bounds x="90.5" y="~y~" width="10" height="10" /></element>
+ </repeat>
+ </group>
+
+<!-- sb ui -->
+
+ <element name="hlub" defstate="0">
+ <rect state="1"><color red="0" green="0" blue="0" /></rect>
+ </element>
+
+ <element name="text_uit1"><text string="S.BOARD"><color red="0.843" green="0.678" blue="0.482" /></text></element>
+ <element name="text_uit2"><text string="INTERFACE"><color red="0.843" green="0.678" blue="0.482" /></text></element>
+ <element name="text_uib1"><text string="BOARD:"><color red="0.843" green="0.678" blue="0.482" /></text></element>
+ <element name="text_uib2">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uib3">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="CLEAR"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uis1"><text string="SPAWN:"><color red="0.843" green="0.678" blue="0.482" /></text></element>
+ <element name="text_uih1"><text string="HAND:"><color red="0.843" green="0.678" blue="0.482" /></text></element>
+ <element name="text_uih2">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string="REMOVE"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu1"><text string="UNDO:"><color red="0.843" green="0.678" blue="0.482" /></text></element>
+ <element name="text_uiu2a">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string=" &lt;&lt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2b">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2c">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2d">
+ <rect><color red="0.843" green="0.678" blue="0.482" /></rect>
+ <text string=" &gt;&gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu3a" defstate="0">
+ <simplecounter maxstate="999" digits="1" align="2">
+ <color red="0.843" green="0.678" blue="0.482" />
+ </simplecounter>
+ </element>
+ <element name="text_uiu3b"><text string="/"><color red="0.843" green="0.678" blue="0.482" /></text></element>
+ <element name="text_uiu3c" defstate="0">
+ <simplecounter maxstate="999" digits="1" align="1">
+ <color red="0.843" green="0.678" blue="0.482" />
+ </simplecounter>
+ </element>
+
+ <group name="sb_ui">
+ <bounds x="0" y="0" width="10" height="80" />
+ <element ref="cwhite"><bounds x="0" y="0" width="10" height="1" /></element>
+ <element ref="cwhite"><bounds x="0" y="7" width="10" height="1" /></element>
+ <element ref="cwhite"><bounds x="0" y="79" width="10" height="1" /></element>
+ <element ref="text_uit1"><bounds x="0" y="2" width="10" height="2" /></element>
+ <element ref="text_uit2"><bounds x="0" y="4" width="10" height="2" /></element>
+
+ <!-- board -->
+ <element ref="text_uib1"><bounds x="0" y="9" width="10" height="2" /></element>
+ <element ref="cwhite"><bounds x="1" y="11.5" width="8" height="2.5" /></element>
+ <element ref="cwhite"><bounds x="1" y="15" width="8" height="2.5" /></element>
+
+ <element ref="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></element>
+ <element ref="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></element>
+
+ <element ref="hlub" inputtag="board:UI" inputmask="0x200"><bounds x="1" y="11.5" width="8" height="2.5" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x100"><bounds x="1" y="15" width="8" height="2.5" /><color alpha="0.25" /></element>
+
+ <!-- spawn -->
+ <element ref="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></element>
+ <element ref="cwhite"><bounds x="1" y="23" width="8" height="12" /></element>
+ <element ref="cwhite"><bounds x="1" y="36" width="8" height="12" /></element>
+
+ <element name="piece_ui1" ref="piece"><bounds x="1" y="23" width="4" height="4" /></element>
+ <element name="piece_ui2" ref="piece"><bounds x="1" y="27" width="4" height="4" /></element>
+ <element name="piece_ui3" ref="piece"><bounds x="1" y="31" width="4" height="4" /></element>
+ <element name="piece_ui4" ref="piece"><bounds x="5" y="23" width="4" height="4" /></element>
+ <element name="piece_ui5" ref="piece"><bounds x="5" y="27" width="4" height="4" /></element>
+ <element name="piece_ui6" ref="piece"><bounds x="5" y="31" width="4" height="4" /></element>
+ <element name="piece_ui7" ref="piece"><bounds x="1" y="36" width="4" height="4" /></element>
+ <element name="piece_ui8" ref="piece"><bounds x="1" y="40" width="4" height="4" /></element>
+ <element name="piece_ui9" ref="piece"><bounds x="1" y="44" width="4" height="4" /></element>
+ <element name="piece_ui10" ref="piece"><bounds x="5" y="36" width="4" height="4" /></element>
+ <element name="piece_ui11" ref="piece"><bounds x="5" y="40" width="4" height="4" /></element>
+ <element name="piece_ui12" ref="piece"><bounds x="5" y="44" width="4" height="4" /></element>
+
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0800"><bounds x="5" y="44" width="4" height="4" /><color alpha="0.25" /></element>
+
+ <!-- hand -->
+ <element ref="text_uih1"><bounds x="0" y="51" width="10" height="2" /></element>
+ <element ref="cwhite"><bounds x="1" y="53.5" width="8" height="6" /></element>
+ <element name="piece_ui0" ref="piece"><bounds x="2" y="53.5" width="6" height="6" /></element>
+
+ <element ref="cwhite"><bounds x="1" y="60.5" width="8" height="2.5" /></element>
+ <element ref="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></element>
+
+ <!-- undo -->
+ <element ref="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></element>
+ <element ref="cwhite"><bounds x="1" y="68.5" width="1.7" height="6" /></element>
+ <element ref="cwhite"><bounds x="3.1" y="68.5" width="1.7" height="6" /></element>
+ <element ref="cwhite"><bounds x="5.2" y="68.5" width="1.7" height="6" /></element>
+ <element ref="cwhite"><bounds x="7.3" y="68.5" width="1.7" height="6" /></element>
+ <element ref="text_uiu2a"><bounds x="1" y="69.5" width="1.7" height="4" /></element>
+ <element ref="text_uiu2b"><bounds x="3.1" y="69.5" width="1.7" height="4" /></element>
+ <element ref="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></element>
+ <element ref="text_uiu2d"><bounds x="7.3" y="69.5" width="1.7" height="4" /></element>
+
+ <element ref="hlub" inputtag="board:UI" inputmask="0x10"><bounds x="1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x20"><bounds x="3.1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x40"><bounds x="5.2" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x80"><bounds x="7.3" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
+
+ <element name="count_ui0" ref="text_uiu3a"><bounds x="0" y="75" width="4" height="2" /></element>
+ <element name="count_ui1" ref="text_uiu3c"><bounds x="6" y="75" width="4" height="2" /></element>
+ <element ref="text_uiu3b"><bounds x="4" y="75" width="2" height="2" /></element>
+ </group>
+
+ <group name="panel">
+ <bounds x="0" y="0" width="122" height="17" />
+
+ <element ref="black"><bounds x="0" y="0" width="122" height="17" /></element>
+ <element ref="redb"><bounds x="51" y="4" width="6" height="4.5" /></element>
+ <element ref="black"><bounds x="51.5" y="4.5" width="5" height="3.5" /></element>
+ <element name="0.8" ref="led"><bounds x="53.2" y="5.5" width="1.5" height="1.5" /></element>
+ <element ref="cwhite"><bounds x="51" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_shift"><bounds x="51.5" y="10.8" width="5" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x100"><bounds x="51" y="9.5" width="6" height="4.5" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="58" y="4" width="6" height="4.5" /></element>
+ <element ref="cwhite"><bounds x="58" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_s1"><bounds x="58.5" y="4.8" width="5" height="2" /></element>
+ <element ref="text_u1"><bounds x="58.5" y="11.3" width="5" height="2" /></element>
+ <element ref="disk_black"><bounds x="59.5" y="7.5" width="3" height="3" /></element>
+ <element ref="disk_white"><bounds x="60" y="8" width="2" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x01"><bounds x="58.5" y="5" width="5" height="8" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="65" y="4" width="6" height="4.5" /></element>
+ <element ref="cwhite"><bounds x="65" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_s2"><bounds x="65.5" y="4.8" width="5" height="2" /></element>
+ <element ref="text_u2"><bounds x="65.5" y="11.3" width="5" height="2" /></element>
+ <element ref="disk_black"><bounds x="66.5" y="7.5" width="3" height="3" /></element>
+ <element ref="disk_white"><bounds x="67" y="8" width="2" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x02"><bounds x="65.5" y="5" width="5" height="8" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="72" y="4" width="6" height="4.5" /></element>
+ <element ref="cwhite"><bounds x="72" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_s3"><bounds x="72.5" y="4.8" width="5" height="2" /></element>
+ <element ref="text_u3"><bounds x="72.5" y="11.3" width="5" height="2" /></element>
+ <element ref="disk_black"><bounds x="73.5" y="7.5" width="3" height="3" /></element>
+ <element ref="disk_white"><bounds x="74" y="8" width="2" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x04"><bounds x="72.5" y="5" width="5" height="8" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="79" y="4" width="6" height="4.5" /></element>
+ <element ref="cwhite"><bounds x="79" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_s4"><bounds x="79.5" y="4.8" width="5" height="2" /></element>
+ <element ref="text_u4"><bounds x="79.5" y="11.3" width="5" height="2" /></element>
+ <element ref="disk_black"><bounds x="80.5" y="7.5" width="3" height="3" /></element>
+ <element ref="disk_white"><bounds x="81" y="8" width="2" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x08"><bounds x="79.5" y="5" width="5" height="8" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="86" y="4" width="6" height="4.5" /></element>
+ <element ref="cwhite"><bounds x="86" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_s5"><bounds x="86.5" y="4.8" width="5" height="2" /></element>
+ <element ref="text_u5"><bounds x="86.5" y="11.3" width="5" height="2" /></element>
+ <element ref="disk_black"><bounds x="87.5" y="7.5" width="3" height="3" /></element>
+ <element ref="disk_white"><bounds x="88" y="8" width="2" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x10"><bounds x="86.5" y="5" width="5" height="8" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="93" y="4" width="6" height="4.5" /></element>
+ <element ref="cwhite"><bounds x="93" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_s6"><bounds x="93.5" y="4.8" width="5" height="2" /></element>
+ <element ref="text_u6"><bounds x="93.5" y="11.3" width="5" height="2" /></element>
+ <element ref="disk_black"><bounds x="94.5" y="7.5" width="3" height="3" /></element>
+ <element ref="disk_white"><bounds x="95" y="8" width="2" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x20"><bounds x="93.5" y="5" width="5" height="8" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="100" y="4" width="6" height="4.5" /></element>
+ <element ref="cwhite"><bounds x="100" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_s7"><bounds x="100.5" y="4.8" width="5" height="2" /></element>
+ <element ref="text_u7"><bounds x="100.5" y="11.3" width="5" height="2" /></element>
+ <element ref="disk_black"><bounds x="101.5" y="7.5" width="3" height="3" /></element>
+ <element ref="disk_white"><bounds x="102" y="8" width="2" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x40"><bounds x="100.5" y="5" width="5" height="8" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="107" y="4" width="6" height="4.5" /></element>
+ <element ref="cwhite"><bounds x="107" y="9.5" width="6" height="4.5" /></element>
+ <element ref="text_s8"><bounds x="107.5" y="4.8" width="5" height="2" /></element>
+ <element ref="text_u8"><bounds x="107.5" y="11.3" width="5" height="2" /></element>
+ <element ref="disk_black"><bounds x="108.5" y="7.5" width="3" height="3" /></element>
+ <element ref="disk_white"><bounds x="109" y="8" width="2" height="2" /></element>
+ <element ref="hlr" inputtag="IN.0" inputmask="0x80"><bounds x="107.5" y="5" width="5" height="8" /><color alpha="0.3" /></element>
+
+ <element ref="cwhite"><bounds x="28" y="5" width="18.2" height="0.2" /></element>
+ <element ref="cwhite"><bounds x="28" y="8.75" width="18.2" height="0.2" /></element>
+ <element ref="cwhite"><bounds x="28" y="12.5" width="18.2" height="0.2" /></element>
+ <element ref="cwhite"><bounds x="28" y="5" width="0.2" height="7.7" /></element>
+ <element ref="cwhite"><bounds x="37" y="5" width="0.2" height="7.7" /></element>
+ <element ref="cwhite"><bounds x="40" y="5" width="0.2" height="7.7" /></element>
+ <element ref="cwhite"><bounds x="43" y="5" width="0.2" height="7.7" /></element>
+ <element ref="cwhite"><bounds x="46" y="5" width="0.2" height="7.7" /></element>
+ <element ref="text_black"><bounds x="29" y="6" width="5" height="1.5" /></element>
+ <element ref="text_white"><bounds x="29" y="10" width="5" height="1.5" /></element>
+ <element name="0.0" ref="led"><bounds x="35" y="6" width="1.5" height="1.5" /></element>
+ <element name="0.1" ref="led"><bounds x="35" y="10" width="1.5" height="1.5" /></element>
+ <element ref="text_p1" ><bounds x="37.5" y="5.5" width="2.3" height="2.5" /></element>
+ <element name="0.2" ref="led" blend="multiply"><bounds x="37.5" y="5.5" width="2.3" height="2.5" /></element>
+ <element ref="text_p2" ><bounds x="40.5" y="5.5" width="2.3" height="2.5" /></element>
+ <element name="0.3" ref="led" blend="multiply"><bounds x="40.5" y="5.5" width="2.3" height="2.5" /></element>
+ <element ref="text_p3" ><bounds x="43.5" y="5.5" width="2.3" height="2.5" /></element>
+ <element name="0.4" ref="led" blend="multiply"><bounds x="43.5" y="5.5" width="2.3" height="2.5" /></element>
+ <element ref="text_p4" ><bounds x="37.5" y="9.5" width="2.3" height="2.5" /></element>
+ <element name="0.5" ref="led" blend="multiply"><bounds x="37.5" y="9.5" width="2.3" height="2.5" /></element>
+ <element ref="text_p5" ><bounds x="40.5" y="9.5" width="2.3" height="2.5" /></element>
+ <element name="0.6" ref="led" blend="multiply"><bounds x="40.5" y="9.5" width="2.3" height="2.5" /></element>
+ <element ref="text_p6" ><bounds x="43.5" y="9.5" width="2.3" height="2.5" /></element>
+ <element name="0.7" ref="led" blend="multiply"><bounds x="43.5" y="9.5" width="2.3" height="2.5" /></element>
+
+ <!-- lcd panel -->
+
+ <element ref="cwhite"><bounds x="3.5" y="5" width="20.25" height="7.5" /></element>
+ <element ref="black"><bounds x="3.725" y="5.225" width="19.8" height="7.05" /></element>
+ <element ref="lcd_bg"><bounds x="4.625" y="6.125" width="18" height="5.25" /></element>
+
+ <element name="digit1" ref="digit"><bounds x="5.375" y="6.5" width="3" height="4.5" /></element>
+ <element name="digit2" ref="digit"><bounds x="9.875" y="6.5" width="3" height="4.5" /></element>
+ <element name="digit3" ref="digit"><bounds x="14.375" y="6.5" width="3" height="4.5" /></element>
+ <element name="digit4" ref="digit"><bounds x="18.875" y="6.5" width="3" height="4.5" /></element>
+
+ <element name="1.7" ref="ldot"><bounds x="8.75" y="10.625" width="0.45" height="0.45" /></element>
+ <element name="2.7" ref="ldot"><bounds x="13.25" y="10.625" width="0.45" height="0.45" /></element>
+ <element name="3.7" ref="ldot"><bounds x="17.75" y="10.625" width="0.45" height="0.45" /></element>
+
+ <element name="4.7" ref="ldot"><bounds x="13.5575" y="7.85" width="0.45" height="0.45" /></element>
+ <element name="4.7" ref="ldot"><bounds x="13.3925" y="9.2375" width="0.45" height="0.45" /></element>
+ </group>
+
+<!-- motor status -->
+
+ <element name="text_motor"><text string="MOTOR:"><color red="0.843" green="0.678" blue="0.482" /></text></element>
+ <element name="text_motoru">
+ <text string="U" state="0"><color red="0.209" green="0.209" blue="0.201" /></text>
+ <text string="U" state="1"><color red="0.9" green="0.9" blue="0.85" /></text>
+ </element>
+ <element name="text_motord">
+ <text string="D" state="0"><color red="0.209" green="0.209" blue="0.201" /></text>
+ <text string="D" state="1"><color red="0.9" green="0.9" blue="0.85" /></text>
+ </element>
+ <element name="text_motorl">
+ <text string="L" state="0" align="2"><color red="0.209" green="0.209" blue="0.201" /></text>
+ <text string="L" state="1" align="2"><color red="0.9" green="0.9" blue="0.85" /></text>
+ </element>
+ <element name="text_motorr">
+ <text string="R" state="0" align="1"><color red="0.209" green="0.209" blue="0.201" /></text>
+ <text string="R" state="1" align="1"><color red="0.9" green="0.9" blue="0.85" /></text>
+ </element>
+ <element name="text_motorx">
+ <text string="X" state="0"><color red="0.209" green="0.209" blue="0.201" /></text>
+ <text string="X" state="1"><color red="0.9" green="0.9" blue="0.85" /></text>
+ </element>
+
+ <group name="motor">
+ <bounds x="0" y="0" width="10" height="12" />
+ <element ref="text_motor"><bounds x="0" y="0" width="10" height="2" /></element>
+ <element ref="cwhite"><bounds x="0" y="11" width="10" height="1" /></element>
+
+ <element name="motor.1" ref="text_motoru"><bounds x="0" y="3" width="10" height="2" /></element>
+ <element name="motor.2" ref="text_motorl"><bounds x="0" y="5" width="3.5" height="2" /></element>
+ <element name="motor.3" ref="text_motorr"><bounds x="6.5" y="5" width="3.5" height="2" /></element>
+ <element name="motor.4" ref="text_motorx"><bounds x="0" y="5" width="10" height="2" /></element>
+ <element name="motor.0" ref="text_motord"><bounds x="0" y="7" width="10" height="2" /></element>
+ </group>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-35" right="103" top="0" bottom="102.5" />
+
+ <element ref="cwhite"><bounds x="-21" y="2" width="122" height="83" /></element>
+ <element ref="black"><bounds x="-20.5" y="2.5" width="121" height="82" /></element>
+ <element ref="cwhite"><bounds x="-0.5" y="3" width="81" height="81" /></element>
+
+ <group ref="sb_board"><bounds x="-20.5" y="3.5" width="121" height="80" /></group>
+
+ <group ref="sb_ui"><bounds x="-33" y="3" width="10" height="80" /></group>
+ <group ref="motor"><bounds x="-33" y="84.5" width="10" height="12" /></group>
+
+ <group ref="panel"><bounds x="-21" y="85" width="122" height="17" /></group>
+
+ <element name="eye_led" ref="led"><bounds x="20" y="100" width="1.5" height="1.5" /></element>
+ <element name="eye_led" ref="led"><bounds x="58.5" y="100" width="1.5" height="1.5" /></element>
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/s6a.lay b/src/mame/layout/s6a.lay
index 84fa0b5077e..d3d1cd9045b 100644
--- a/src/mame/layout/s6a.lay
+++ b/src/mame/layout/s6a.lay
@@ -51,22 +51,22 @@ copyright-holders:Robbbert
</group>
<!-- Player 3 Score -->
- <param name="s" value="17" />
+ <param name="s" value="21" />
<group ref="score">
<bounds left="10" top="165" right="308" bottom="204" />
</group>
<!-- Player 4 Score -->
- <param name="s" value="25" />
+ <param name="s" value="29" />
<group ref="score">
<bounds left="10" top="225" right="308" bottom="264" />
</group>
<!-- Credits and Balls -->
- <element name="digit16" ref="digit">
+ <element name="digit20" ref="digit">
<bounds left="10" top="345" right="44" bottom="384" />
</element>
- <element name="digit24" ref="digit">
+ <element name="digit28" ref="digit">
<bounds left="54" top="345" right="88" bottom="384" />
</element>
<element name="digit60" ref="diag">
diff --git a/src/mame/layout/vidchal.lay b/src/mame/layout/vidchal.lay
index 8bb5b1b1e26..80f7bf6c574 100644
--- a/src/mame/layout/vidchal.lay
+++ b/src/mame/layout/vidchal.lay
@@ -4,7 +4,7 @@ license:CC0
-->
<mamelayout version="2">
- <!-- define elements -->
+<!-- define elements -->
<element name="led" defstate="0">
<disk state="0"><color red="0.0" green="0.0" blue="0.0" /></disk>
@@ -16,7 +16,7 @@ license:CC0
</element>
- <!-- build screen -->
+<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="60" top="-2" bottom="25" />
diff --git a/src/mame/machine/decopincpu.cpp b/src/mame/machine/decopincpu.cpp
index f7aa98d0b94..138c8b683c5 100644
--- a/src/mame/machine/decopincpu.cpp
+++ b/src/mame/machine/decopincpu.cpp
@@ -9,7 +9,6 @@
* Type 3b: Adds printer option
*
* TODO:
- * - support for solenoids 17-22 (m_io_outputs 16-21)
* - printer option (type 3b)
*/
@@ -106,12 +105,6 @@ WRITE_LINE_MEMBER(decocpu_type1_device::cpu_pia_irq)
}
}
-WRITE_LINE_MEMBER( decocpu_type1_device::pia21_ca2_w )
-{
-// sound ns
- m_ca2 = state;
-}
-
void decocpu_type1_device::lamp0_w(uint8_t data)
{
m_cpu->set_input_line(M6808_IRQ_LINE, CLEAR_LINE);
@@ -212,13 +205,15 @@ void decocpu_type1_device::device_add_mconfig(machine_config &config)
/* Devices */
PIA6821(config, m_pia21, 0); // 5F - PIA at 0x2100
m_pia21->writepb_handler().set(FUNC(decocpu_type1_device::solenoid1_w));
- m_pia21->ca2_handler().set(FUNC(decocpu_type1_device::pia21_ca2_w));
+ m_pia21->cb2_handler().set(FUNC(decocpu_type1_device::pia21_cb2_w));
m_pia21->irqa_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
m_pia21->irqb_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
PIA6821(config, m_pia24, 0); // 11D - PIA at 0x2400
m_pia24->writepa_handler().set(FUNC(decocpu_type1_device::lamp0_w));
m_pia24->writepb_handler().set(FUNC(decocpu_type1_device::lamp1_w));
+ m_pia24->ca2_handler().set(FUNC(decocpu_type1_device::pia24_ca2_w));
+ m_pia24->cb2_handler().set(FUNC(decocpu_type1_device::pia24_cb2_w));
m_pia24->irqa_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
m_pia24->irqb_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
@@ -233,12 +228,16 @@ void decocpu_type1_device::device_add_mconfig(machine_config &config)
m_pia2c->readpb_handler().set(FUNC(decocpu_type1_device::display_in3_r));
m_pia2c->writepa_handler().set(FUNC(decocpu_type1_device::display_out2_w));
m_pia2c->writepb_handler().set(FUNC(decocpu_type1_device::display_out3_w));
+ m_pia2c->ca2_handler().set(FUNC(decocpu_type1_device::pia2c_ca2_w));
+ m_pia2c->cb2_handler().set(FUNC(decocpu_type1_device::pia2c_cb2_w));
m_pia2c->irqa_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
m_pia2c->irqb_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
PIA6821(config, m_pia30, 0); // 8H - PIA at 0x3000
m_pia30->readpa_handler().set(FUNC(decocpu_type1_device::switch_r));
m_pia30->writepb_handler().set(FUNC(decocpu_type1_device::switch_w));
+ m_pia30->ca2_handler().set(FUNC(decocpu_type1_device::pia30_ca2_w));
+ m_pia30->cb2_handler().set(FUNC(decocpu_type1_device::pia30_cb2_w));
m_pia30->irqa_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
m_pia30->irqb_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
@@ -246,6 +245,7 @@ void decocpu_type1_device::device_add_mconfig(machine_config &config)
m_pia34->readpa_handler().set(FUNC(decocpu_type1_device::dmdstatus_r));
m_pia34->writepa_handler().set(FUNC(decocpu_type1_device::display_out4_w));
m_pia34->writepb_handler().set(FUNC(decocpu_type1_device::sound_w));
+ m_pia34->cb2_handler().set_nop();
m_pia34->irqa_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
m_pia34->irqb_handler().set(FUNC(decocpu_type1_device::cpu_pia_irq));
@@ -301,6 +301,7 @@ void decocpu_type1_device::device_start()
m_cpu->space(AS_PROGRAM).install_rom(0x4000,0xffff,&m_rom[0x4000]);
m_io_outputs.resolve();
+ save_item(NAME(m_lamp_data));
}
decocpu_type2_device::decocpu_type2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
diff --git a/src/mame/machine/decopincpu.h b/src/mame/machine/decopincpu.h
index ade722721d8..754919195a2 100644
--- a/src/mame/machine/decopincpu.h
+++ b/src/mame/machine/decopincpu.h
@@ -77,7 +77,6 @@ protected:
private:
emu_timer* m_irq_timer = 0;
bool m_irq_active = 0;
- bool m_ca2 = 0;
u8 m_lamp_data = 0U;
// callbacks
@@ -92,7 +91,13 @@ private:
output_finder<86> m_io_outputs; // 22 solenoids + 64 lamps
DECLARE_WRITE_LINE_MEMBER(cpu_pia_irq);
- DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w);
+ DECLARE_WRITE_LINE_MEMBER(pia21_cb2_w) { } // flipper enable
+ DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { m_io_outputs[18] = state; }
+ DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { m_io_outputs[20] = state; }
+ DECLARE_WRITE_LINE_MEMBER(pia2c_ca2_w) { m_io_outputs[21] = state; }
+ DECLARE_WRITE_LINE_MEMBER(pia2c_cb2_w) { m_io_outputs[17] = state; }
+ DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { m_io_outputs[19] = state; }
+ DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { m_io_outputs[16] = state; }
void lamp0_w(uint8_t data);
void lamp1_w(uint8_t data);
uint8_t display_strobe_r();
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 19e52ff24d9..12e3071e33d 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -2441,6 +2441,7 @@ magibombb // (c) 2002 Astro Corp.
magibombc // (c) 2001 Astro Corp.
magibombd // (c) 2005 Astro Corp.
magibombe // (c) 2001? Astro Corp.
+magibombf // (c) 2002 Astro Corp.
showhanc // (c) 2000 Astro Corp.
showhand // (c) 2000 Astro Corp.
skilldrp // (c) 2002 Astro Corp.
@@ -3420,6 +3421,7 @@ bbca // 1981 BBC Micro Model A
bbcb // 1981 BBC Micro Model B
bbcb_de // 1982 BBC Micro Model B (German)
bbcb_us // 1983 BBC Micro Model B (US)
+bbcb_no // 1984 BBC Micro Model B (Norway)
bbcbp // 1985 BBC Micro Model B+ 64K
bbcbp128 // 1985 BBC Micro Model B+ 128K
bbcm // 1986 BBC Master 128
@@ -3444,6 +3446,7 @@ ltmpm // 1986 LTM Portable (Master)
pro128s // 1987 Olivetti Prodest PC 128S
autoc15 // 1988 Autocue 1500
reutapm // 1985 Reuters APM Board
+sist1 // 198? Cisco SIST1 Terminal
torchf // 1982 Torch CF240
torchh // 1982 Torch CH240
torch301 // 1984 Torch Model 301
@@ -14023,6 +14026,7 @@ granits // RCS
miniscco
@source:fidel_phantom.cpp
+cphantom //
fphantom //
@source:fidel_sc12.cpp
@@ -16673,6 +16677,7 @@ bankshot // Parker Bros
bcheetah // Bandai
ebknight // Entex
bigtrak // Milton Bradley
+blastit // Entex
bship // Milton Bradley
bshipb // Milton Bradley
cmsport // Conic
@@ -23270,6 +23275,7 @@ dodgectya // (c) 1986 Merit
dodgectyb // (c) 1986 Merit
dodgectyc // (c) 1986 Merit
dtrvwz5 // (c) 1987 Merit
+housecard // (c) 1983 Merit
iowapp // (c) 1990 Merit
matchemg // (c) 1986 Merit
misdraw // (c) 1986 Merit / Big Apple Games
@@ -36413,6 +36419,7 @@ rbislande // B39 (c) 1988 Taito Corporation
magslot // (c) 2003 GMS
rbmk // (c) 1998 GMS
rbspm // (c) 1998 GMS
+sc2in1 // (c) 2001 GMS
@source:rbowlorama.cpp
rbowlorama // (c) 2008 Cosmodog / Namco
@@ -36957,6 +36964,10 @@ trizn_l1 //
trizn_t1 //
@source:s6.cpp
+algar_l1 //
+alpok_f6 //
+alpok_l2 //
+alpok_l6 //
blkou_f1 //
blkou_l1 //
blkou_t1 //
@@ -36971,12 +36982,6 @@ lzbal_t2 //
scrpn_l1 //
scrpn_t1 //
-@source:s6a.cpp
-algar_l1 //
-alpok_f6 //
-alpok_l2 //
-alpok_l6 //
-
@source:s7.cpp
barra_l1 //
bk_f4 //
diff --git a/src/osd/sdl/video.cpp b/src/osd/sdl/video.cpp
index 5bb3910d8f9..8212e0a4586 100644
--- a/src/osd/sdl/video.cpp
+++ b/src/osd/sdl/video.cpp
@@ -191,12 +191,10 @@ void sdl_osd_interface::extract_video_config()
stemp = options().video();
if (strcmp(stemp, "auto") == 0)
{
-#if (defined SDLMAME_WIN32)
- stemp = "opengl";
-#elif (defined SDLMAME_MACOSX)
- stemp = "bgfx";
-#else
+#if (defined SDLMAME_EMSCRIPTEN)
stemp = "soft";
+#else
+ stemp = "bgfx";
#endif
}
if (strcmp(stemp, SDLOPTVAL_SOFT) == 0)
diff --git a/src/tools/jedutil.cpp b/src/tools/jedutil.cpp
index a4ea6b57cfb..73e190e3f0e 100644
--- a/src/tools/jedutil.cpp
+++ b/src/tools/jedutil.cpp
@@ -5270,22 +5270,46 @@ static void config_gal16v8_pins(const pal_data* pal, const jed_data* jed)
for (index = 0; index < std::size(macrocells); ++index)
{
- if (jed_get_fuse(jed, macrocells[index].ac1_fuse))
+ if (macrocells[index].pin != 15 && macrocells[index].pin != 16)
{
- /* Pin is for input only */
-
- input_pins_combinatorialsimple[input_pin_count] = macrocells[index].pin;
+ if (jed_get_fuse(jed, macrocells[index].ac1_fuse))
+ {
+ /* Pin is for input only */
- ++input_pin_count;
+ input_pins_combinatorialsimple[input_pin_count] = macrocells[index].pin;
- if (macrocells[index].pin == 15 || macrocells[index].pin == 16)
+ ++input_pin_count;
+ }
+ else
{
- fprintf(stderr, "Pin %d cannot be configured as an input pin.\n",
- macrocells[index].pin);
+ output_pins[output_pin_count].pin = macrocells[index].pin;
+ output_pins[output_pin_count].flags = OUTPUT_COMBINATORIAL;
+
+ if (jed_get_fuse(jed, macrocells[index].xor_fuse))
+ {
+ output_pins[output_pin_count].flags |= OUTPUT_ACTIVEHIGH;
+ }
+ else
+ {
+ output_pins[output_pin_count].flags |= OUTPUT_ACTIVELOW;
+ }
+
+ output_pins[output_pin_count].flags |= OUTPUT_FEEDBACK_OUTPUT;
+
+ input_pins_combinatorialsimple[input_pin_count] = macrocells[index].pin;
+
+ ++input_pin_count;
+
+ ++output_pin_count;
}
}
else
{
+ /* For pins 15 and 16 ignore the value of the ac1_fuse (This
+ normally determine if the pin is an input or output.) because
+ according to the datasheet these macrocells are output
+ only when in simple mode. */
+
output_pins[output_pin_count].pin = macrocells[index].pin;
output_pins[output_pin_count].flags = OUTPUT_COMBINATORIAL;
@@ -5298,19 +5322,7 @@ static void config_gal16v8_pins(const pal_data* pal, const jed_data* jed)
output_pins[output_pin_count].flags |= OUTPUT_ACTIVELOW;
}
- if (output_pins[output_pin_count].pin != 15 &&
- output_pins[output_pin_count].pin != 16)
- {
- output_pins[output_pin_count].flags |= OUTPUT_FEEDBACK_OUTPUT;
-
- input_pins_combinatorialsimple[input_pin_count] = macrocells[index].pin;
-
- ++input_pin_count;
- }
- else
- {
- output_pins[output_pin_count].flags |= OUTPUT_FEEDBACK_NONE;
- }
+ output_pins[output_pin_count].flags |= OUTPUT_FEEDBACK_NONE;
++output_pin_count;
}