diff options
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&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><unknown></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=" <<"><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=" < "><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=" >"><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=" >>"><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; } |