summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/ibm5150.xml30
-rw-r--r--hash/ibm5170.xml304
-rw-r--r--hash/x68k_flop.xml282
-rw-r--r--scripts/src/mame/frontend.lua4
-rw-r--r--scripts/target/mame/mess.lua19
-rw-r--r--src/devices/bus/pofo/hpc104.cpp6
-rw-r--r--src/devices/bus/sg1000_exp/fm_unit.cpp51
-rw-r--r--src/devices/bus/sg1000_exp/fm_unit.h2
-rw-r--r--src/devices/machine/aicartc.cpp69
-rw-r--r--src/devices/machine/aicartc.h6
-rw-r--r--src/devices/machine/ds1302.cpp2
-rw-r--r--src/devices/machine/ds1302.h3
-rw-r--r--src/devices/machine/e0516.cpp19
-rw-r--r--src/devices/machine/e0516.h6
-rw-r--r--src/devices/machine/hd64610.cpp10
-rw-r--r--src/devices/machine/hd64610.h2
-rw-r--r--src/devices/machine/mccs1850.cpp10
-rw-r--r--src/devices/machine/mccs1850.h7
-rw-r--r--src/devices/machine/mm58167.cpp2
-rw-r--r--src/devices/machine/mm58167.h3
-rw-r--r--src/devices/machine/msm5832.cpp10
-rw-r--r--src/devices/machine/msm5832.h2
-rw-r--r--src/devices/machine/msm58321.cpp4
-rw-r--r--src/devices/machine/msm58321.h3
-rw-r--r--src/devices/machine/msm6242.cpp3
-rw-r--r--src/devices/machine/msm6242.h1
-rw-r--r--src/devices/machine/pcf8593.h3
-rw-r--r--src/devices/machine/rp5c01.cpp23
-rw-r--r--src/devices/machine/rp5c01.h5
-rw-r--r--src/devices/machine/rp5c15.cpp10
-rw-r--r--src/devices/machine/rp5c15.h4
-rw-r--r--src/devices/machine/rtc4543.cpp2
-rw-r--r--src/devices/machine/rtc4543.h3
-rw-r--r--src/devices/machine/upd1990a.cpp3
-rw-r--r--src/devices/machine/upd1990a.h1
-rw-r--r--src/devices/machine/upd4992.cpp10
-rw-r--r--src/devices/machine/upd4992.h2
-rw-r--r--src/emu/diimage.cpp26
-rw-r--r--src/emu/dirtc.cpp7
-rw-r--r--src/emu/dirtc.h18
-rw-r--r--src/emu/emu.h1
-rw-r--r--src/emu/emuopts.cpp1
-rw-r--r--src/emu/emuopts.h2
-rw-r--r--src/emu/machine.cpp27
-rw-r--r--src/emu/machine.h2
-rw-r--r--src/frontend/mame/clifront.cpp388
-rw-r--r--src/frontend/mame/clifront.h1
-rw-r--r--src/frontend/mame/console.cpp185
-rw-r--r--src/frontend/mame/console.h44
-rw-r--r--src/frontend/mame/media_ident.cpp273
-rw-r--r--src/frontend/mame/media_ident.h42
-rw-r--r--src/frontend/mame/ui/dirmenu.cpp1
-rw-r--r--src/mame/arcade.flt1
-rw-r--r--src/mame/drivers/elecbowl.cpp220
-rw-r--r--src/mame/drivers/fidel6502.cpp42
-rw-r--r--src/mame/drivers/fidelz80.cpp40
-rw-r--r--src/mame/drivers/hh_amis2k.cpp (renamed from src/mame/drivers/wildfire.cpp)2
-rw-r--r--src/mame/drivers/hh_tms1k.cpp604
-rw-r--r--src/mame/drivers/hh_ucom4.cpp157
-rw-r--r--src/mame/drivers/homedata.cpp6
-rw-r--r--src/mame/drivers/mbdtower.cpp282
-rw-r--r--src/mame/drivers/mjsenpu.cpp62
-rw-r--r--src/mame/drivers/namcona1.cpp11
-rw-r--r--src/mame/drivers/nbmj8688.cpp628
-rw-r--r--src/mame/drivers/nbmj8891.cpp31
-rw-r--r--src/mame/drivers/nbmj9195.cpp102
-rw-r--r--src/mame/drivers/next.cpp4
-rw-r--r--src/mame/drivers/nmk16.cpp32
-rw-r--r--src/mame/drivers/rainbow.cpp69
-rw-r--r--src/mame/drivers/scobra.cpp24
-rw-r--r--src/mame/drivers/sms.cpp2
-rw-r--r--src/mame/drivers/srmp6.cpp26
-rw-r--r--src/mame/drivers/toaplan1.cpp38
-rw-r--r--src/mame/drivers/v1050.cpp14
-rw-r--r--src/mame/includes/hh_ucom4.h4
-rw-r--r--src/mame/includes/v1050.h3
-rw-r--r--src/mame/layout/fidel_bcc.lay190
-rw-r--r--src/mame/layout/fidel_cc.lay190
-rw-r--r--src/mame/layout/fidel_chesster.lay5
-rw-r--r--src/mame/layout/fidel_csc.lay11
-rw-r--r--src/mame/layout/fidel_des2000.lay456
-rw-r--r--src/mame/layout/fidel_eag.lay5
-rw-r--r--src/mame/layout/fidel_eag_68k.lay5
-rw-r--r--src/mame/layout/fidel_eas.lay5
-rw-r--r--src/mame/layout/fidel_ex.lay6
-rw-r--r--src/mame/layout/fidel_exd.lay6
-rw-r--r--src/mame/layout/fidel_playmatic.lay5
-rw-r--r--src/mame/layout/fidel_rsc_v2.lay5
-rw-r--r--src/mame/layout/fidel_sc12.lay7
-rw-r--r--src/mame/layout/fidel_sc9.lay5
-rw-r--r--src/mame/layout/fidel_su9.lay5
-rw-r--r--src/mame/layout/fidel_vcc.lay186
-rw-r--r--src/mame/layout/fidel_vsc.lay5
-rw-r--r--src/mame/layout/grobot9.lay314
-rw-r--r--src/mame/machine/macrtc.cpp2
-rw-r--r--src/mame/machine/macrtc.h4
-rw-r--r--src/mame/machine/sms.cpp32
-rw-r--r--src/mame/mame.lst19
-rw-r--r--src/mame/mess.flt4
-rw-r--r--src/osd/modules/input/input_dinput.h17
-rw-r--r--src/tools/imgtool/imgtool.cpp2
-rw-r--r--src/tools/imgtool/imgtool.h3
102 files changed, 3723 insertions, 2119 deletions
diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml
index 7feb2527d71..d2a2ccc94a8 100644
--- a/hash/ibm5150.xml
+++ b/hash/ibm5150.xml
@@ -2512,6 +2512,36 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went
<!-- Applications -->
+ <software name="4ptgraph">
+ <description>4-POINT Graphics</description>
+ <year>1984</year>
+ <publisher>International Microcomputer Software, Inc.</publisher>
+ <info name="version" value="1.0B" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size = "327680">
+ <rom name="disk1.img" size="327680" crc="5fb1596a" sha1="f95bf310b527e2914571a02853208385a6100629" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="abilityd">
+ <description>Ability (Demo)</description>
+ <year>1985</year>
+ <publisher>Xanaro Technologies</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Demo Disk 1" />
+ <dataarea name="flop" size = "368640">
+ <rom name="Disk01.img" size="368640" crc="33247300" sha1="c9d1acb0c19d64af3ac604c1e108252fa5bffb43" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <feature name="part_id" value="Demo Disk 2" />
+ <dataarea name="flop" size = "368640">
+ <rom name="Disk02.img" size="368640" crc="c8e12da7" sha1="428e0dd0eafee1575c847674c34cb4144ab87291" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="croschex">
<description>Award Software's Cross-chex</description>
<year>198?</year>
diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml
index 1b3c5a025cd..c7a000868c4 100644
--- a/hash/ibm5170.xml
+++ b/hash/ibm5170.xml
@@ -3978,11 +3978,51 @@ Missing files come here
</part>
</software>
+ <software name="dzone">
+ <description>D!ZONE</description>
+ <year>1994</year>
+ <publisher>WizardWorks</publisher>
+ <info name="version" value="1.0" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="D!Zone 1.0 #1.img" size="1474560" crc="ae5fd791" sha1="42d16ed62ce3781405ebc0304eafc7bc3f0c0ea0" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="D!Zone 1.0 #2.img" size="737280" crc="7d146e94" sha1="b0fad9e41cc85e28fb5aa0fd8e06b452d1953cc0" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dzone150">
+ <description>D!ZONE 150</description>
+ <year>1995</year>
+ <publisher>WizardWorks</publisher>
+ <info name="version" value="1.3a" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="D!Zone 1.3a #1.img" size="1474560" crc="1d3944ae" sha1="6a3aa137bc3e5e5798e00fb79d8feaef56c834ee" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="D!Zone 1.3a #2.img" size="1474560" crc="f8192965" sha1="97a128e1d03f91b0752fa7f9346d03cb5c1712d9" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="D!Zone 1.3a #3.img" size="1474560" crc="38719ef4" sha1="de87338c3a7d8af5b7aca8626a5d6d77db83ccbd" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="descsw">
<!-- from Acer CPR 1.2 recovery CD-ROM -->
<description>Descent (Shareware, 1.0)</description>
<year>1994</year>
<publisher>Interplay</publisher>
+ <info name="version" value="1.0" />
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
<rom name="descent disk1.img" size="1474560" crc="5d3a21e6" sha1="bac18f7fc016c438e0ab14893fd417958e99f500" offset="0" />
@@ -4011,6 +4051,199 @@ Missing files come here
</part>
</software>
+ <software name="doom">
+ <description>DOOM (1.2)</description>
+ <year>1993</year>
+ <publisher>GT Interactive</publisher>
+ <info name="developer" value="id Software" />
+ <info name="version" value="1.2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.2 #1.img" size="1474560" crc="749f9b21" sha1="117637a9e42b59f75ce6b7e17be21370c3ca4ee1" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.2 #2.img" size="1474560" crc="13a68229" sha1="5c5b647d42d1b89d9199c6529486f1d52baacf57" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.2 #3.img" size="1474560" crc="70f8d3a0" sha1="3fde0fbd3a33c9a5f8ec7cb9fc570bd1ee5adc36" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.2 #4.img" size="1474560" crc="43f9330e" sha1="845707cb49faf201e057a19cbb8911b00fe0ea29" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="doom11" cloneof="doom">
+ <description>DOOM (1.1)</description>
+ <year>1993</year>
+ <publisher>GT Interactive</publisher>
+ <info name="developer" value="id Software" />
+ <info name="version" value="1.1" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.1 #1.img" size="1474560" crc="68d914ac" sha1="f3d942e0a57dcf157a7610a886d98680d42033b9" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.1 #2.img" size="1474560" crc="70e434bb" sha1="ad145cbf582acbbcb5a55fc8d668eda3d931449b" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.1 #3.img" size="1474560" crc="53c9bdbf" sha1="9ae87abd9f03a861f8e16a7717425d18f246383f" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.1 #4.img" size="1474560" crc="83f5dd67" sha1="7b14a004a2be7b8fe976ab5c8151ca62d62845fd" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="doomsw" cloneof="doom">
+ <!-- Companion Disk for The Official DOOM™ Survivor's Strategies & Secrets -->
+ <description>DOOM (1.25, Shareware)</description>
+ <year>1994</year>
+ <publisher>Sybex</publisher>
+ <info name="developer" value="id Software" />
+ <info name="version" value="1.25" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="DOOM1.img" size="1474560" crc="72ece6a4" sha1="90837dab320489bda5a608e911ae51144e1377e5" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="DOOM2.img" size="1474560" crc="f90e3ea5" sha1="df9a2520e774616e4fd6a8b8c1d2e70f1d5701f3" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="doomsw11" cloneof="doom">
+ <description>DOOM (1.1, Shareware)</description>
+ <year>1993</year>
+ <publisher>Micro Star</publisher>
+ <info name="developer" value="id Software" />
+ <info name="version" value="1.1" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.1 shareware #1.img" size="1474560" crc="9e7ba36d" sha1="8891709abd4ba5fe40db61a6e32f6fe9595f2423" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 1 1.1 shareware #2.img" size="1474560" crc="6bb6e2a4" sha1="71a8ce1ed6c6c40ce32acf0b745dea8bebda703b" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="doom2">
+ <description>DOOM II: Hell on Earth (1.7)</description>
+ <year>1994</year>
+ <publisher>GT Interactive</publisher>
+ <info name="developer" value="id Software" />
+ <info name="version" value="1.7" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #1.img" size="1474560" crc="6bb31858" sha1="746653c590e2d528249bcafe74da6c7c805187fd" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #2.img" size="1474560" crc="e1a91aa2" sha1="eedce368b970077490df421f567dd22cc974c7be" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #3.img" size="1474560" crc="3fc281a4" sha1="def3e6746e9fa4815162c45f5c1e5f6a3b430db0" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #4.img" size="1474560" crc="80d22e1a" sha1="32067ea046127630fbf0b3ec6a79d9d8d53e4a81" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #5.img" size="1474560" crc="15495bde" sha1="df4365f4969fc82c97269116e3da5fa81029f8b6" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="doom2a" cloneof="doom2">
+ <description>DOOM II: Hell on Earth (1.7, alt)</description>
+ <year>1994</year>
+ <publisher>GT Interactive</publisher>
+ <info name="developer" value="id Software" />
+ <info name="version" value="1.7" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <!-- 1024-byte footer removed from an image with size 1475584 crc c9c3bdc9, disks 2-5 match the doom2 set after removing this -->
+ <rom name="Doom II v1.7 (1994)(id Software) - Floppy Disk 1.img" size="1474560" crc="9ad5a439" sha1="1d2a3ee9e9578884f602ab69da12c5b2f962b456" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #2.img" size="1474560" crc="e1a91aa2" sha1="eedce368b970077490df421f567dd22cc974c7be" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #3.img" size="1474560" crc="3fc281a4" sha1="def3e6746e9fa4815162c45f5c1e5f6a3b430db0" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #4.img" size="1474560" crc="80d22e1a" sha1="32067ea046127630fbf0b3ec6a79d9d8d53e4a81" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.7 #5.img" size="1474560" crc="15495bde" sha1="df4365f4969fc82c97269116e3da5fa81029f8b6" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="doom2_1666" cloneof="doom2">
+ <description>DOOM II: Hell on Earth (1.666)</description>
+ <year>1994</year>
+ <publisher>GT Interactive</publisher>
+ <info name="developer" value="id Software" />
+ <info name="version" value="1.666" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.666 #1.img" size="1474560" crc="24257edd" sha1="c0780f6d2e7255ae3f20db5f5656063fec512d01" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.666 #2.img" size="1474560" crc="51504e3d" sha1="61f97373423cbfe7e87b513bb78668d85eaa8b78" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.666 #3.img" size="1474560" crc="b90d5e37" sha1="2e9989976e23cd05255a75b5df99549f4c6c188f" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.666 #4.img" size="1474560" crc="d99d1e34" sha1="b7a035d034a08b05a0f9dee495acdcb16c98ee40" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Doom 2 1.666 #5.img" size="1474560" crc="77d3b177" sha1="4c2fc8dc362074d730e414b992cc8dba2eb7a1e7" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="duke">
<!-- Dumped via Kryoflux, all tracks show as modified - most likely not professionally duplicated -->
<!-- from a registered version ordered circa 2004 -->
@@ -4074,6 +4307,34 @@ Missing files come here
</part>
</software>
+ <software name="heretic">
+ <description>Heretic</description>
+ <year>1994</year>
+ <publisher>id Software</publisher>
+ <info name="developer" value="Raven Software" />
+ <info name="version" value="1.0" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disk1.img" size="1474560" crc="ad1beaa8" sha1="2bfa2c811eb89149ff1b1157867dc267cf446d37" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disk2.img" size="1474560" crc="fcff8b85" sha1="c245c55f36429292b472c00dc2c99a8418655945" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disk3.img" size="1474560" crc="96098808" sha1="5da112b9e3babf58f853e152f3f70a7e1a9de742" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disk4.img" size="1474560" crc="969dae3c" sha1="0627faa028b550c931b73de88598cecce138e443" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="rylvania">
<description>Horror of Rylvania</description>
<year>1993</year>
@@ -4190,6 +4451,17 @@ Missing files come here
</part>
</software>
+ <software name="tleodoom">
+ <description>The Lost Episodes of Doom (Companion Disk)</description>
+ <year>1995</year>
+ <publisher>Sybex</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="tleodoomcd.img" size="1474560" crc="e2ad041a" sha1="e820373ae6bd18282bec8f3aa5b40c71a6105637" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="m1tank" supported="no">
<!-- Dumped via Kryoflux, shows as good and unmodified -->
<description>M1 Tank Platoon</description>
@@ -4532,6 +4804,38 @@ Missing files come here
</part>
</software>
+ <software name="ultdoom">
+ <description>The Ultimate DOOM</description>
+ <year>1995</year>
+ <publisher>GT Interactive</publisher>
+ <info name="developer" value="id Software" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Ultimate Doom #1.img" size="1474560" crc="5e0ccd75" sha1="4998a234e28cf87da5d74dde94f872a7e346b286" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Ultimate Doom #2.img" size="1474560" crc="24f77d16" sha1="580066b4556bd705070cb08f02d643ae0bb79e40" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Ultimate Doom #3.img" size="1474560" crc="ecc814a7" sha1="78d89a132259cd6df04451472bf3b1c693b901bb" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Ultimate Doom #4.img" size="1474560" crc="e4f32f3f" sha1="c637904f61b00cc035321bf3023f3dd66333f47c" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Ultimate Doom #5.img" size="1474560" crc="5725506c" sha1="ab6dda5f642c5a5516e7b68803035b518337ffe9" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="unnkulia">
<description>Unnkulia Zero: The Search for Amanda</description>
<year>1993</year>
diff --git a/hash/x68k_flop.xml b/hash/x68k_flop.xml
index 305233de53d..5399b37b22a 100644
--- a/hash/x68k_flop.xml
+++ b/hash/x68k_flop.xml
@@ -1602,6 +1602,17 @@ Most info on release dates and Jpn titles come from the following (wonderful) re
</part>
</software>
+ <software name="bgelmntt">
+ <description>Blade of The Great Elements (Test Version)</description>
+ <year>1990</year>
+ <publisher>アミューズメント (Amusement)</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="blade of the great elements (test version) (1990)(amusement).dim" size="1261824" crc="F0C71952" sha1="7D11252BB23CE4F8C242CFA71F9B04FC1B368B25" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="btlchess">
<description>Battle Chess</description>
<year>1989</year>
@@ -8392,33 +8403,36 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup
</part>
</software>
- <!-- The first 3 disks are in 2HDE format and are not handled properly -->
+ <!-- This software is compressed game disk unzipping tool (All unzipped to 17 disks (12 titles))
+ Disk 1,2 and 3 use the 2HDE format (Unsupported), Disk 4 system boot disk (2HD format) -->
<software name="ldb_x68k" supported="no">
- <description>LOGiN Disk &amp; Book Series - X68000 Kessaku Game-sen</description>
- <year>19??</year>
+ <description>LOGiN Disk &amp; Book Series - LOGiN Software Contest X68000 Kessaku Game-sen</description>
+ <year>1993</year>
<publisher>Login</publisher>
+ <info name="alt_title" value="LOGiN DISK&amp;BOOKシリーズ - ログインソフトウェアコンテスト X68000傑作ゲーム選" />
+ <info name="release" value="19931025" />
<part name="flop1" interface="floppy_5_25">
- <feature name="part_id" value="Disk 1" />
- <dataarea name="flop" size="1474560">
- <rom name="ldbx68k_1.hdm" size="1474560" crc="35a29e6e" sha1="68be72d44ed55bdc2bb84ab2396475e22452a43b" offset="0" />
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1261824">
+ <rom name="ldbx68k_4.dim" size="1261824" crc="2c235674" sha1="97729CD1071EABA6EA98DFEB172311520F7E8A24" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <feature name="part_id" value="Disk 2" />
- <dataarea name="flop" size="1474560">
- <rom name="ldbx68k_2.hdm" size="1474560" crc="0e1d25f0" sha1="53f3a6b192b788469142092ae4515612ebb0892c" offset="0" />
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1474816">
+ <rom name="ldbx68k_1.dim" size="1474816" crc="F04FAEF1" sha1="CA01E3367B84B0752E2D3BF21560D12F776D0778" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
- <feature name="part_id" value="Disk 3" />
- <dataarea name="flop" size="1474560">
- <rom name="ldbx68k_3.hdm" size="1474560" crc="77726148" sha1="850bc85f0f6ef28082d13a4e7eb3fb0cffca9035" offset="0" />
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474816">
+ <rom name="ldbx68k_2.dim" size="1474816" crc="CBF0156F" sha1="904BB6FEB5A6DA7EE04C641E19E6B0E950042C97" offset="0" />
</dataarea>
</part>
<part name="flop4" interface="floppy_5_25">
- <feature name="part_id" value="Disk 4" />
- <dataarea name="flop" size="1261568">
- <rom name="ldbx68k_4.hdm" size="1261568" crc="bfccf8e0" sha1="ee7f6f56086e997620fef4dc1e9e102f33732a68" offset="0" />
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1474816">
+ <rom name="ldbx68k_3.dim" size="1474816" crc="B29F51D7" sha1="06DBE68C097D7D152DEE8F2AD938731B681913A3" offset="0" />
</dataarea>
</part>
</software>
@@ -8599,6 +8613,38 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup
</part>
</software>
+ <software name="mjfants2">
+ <description>Mahjong Gensoukyoku II - Mahjong Fantasia -The 2nd Stage</description>
+ <year>1993</year>
+ <publisher>アクティブ (Active)</publisher>
+ <info name="alt_title" value="麻雀幻想曲Ⅱ" />
+ <info name="release" value="19930828" />
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Disk A" />
+ <dataarea name="flop" size="1261824">
+ <rom name="mahjong gensoukyoku ii (1993)(active)(disk 1 of 4)(disk a).dim" size="1261824" crc="E22A0A22" sha1="BD62BFA94F7D54273227F56C8798C5669462AF1D" offset="000000" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <feature name="part_id" value="Disk B" />
+ <dataarea name="flop" size="1261824">
+ <rom name="mahjong gensoukyoku ii (1993)(active)(disk 2 of 4)(disk b).dim" size="1261824" crc="11CF0B83" sha1="E7595FA0BE1D176BC54AE7760F7ABB94E554C329" offset="000000" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_5_25">
+ <feature name="part_id" value="Disk C" />
+ <dataarea name="flop" size="1261824">
+ <rom name="mahjong gensoukyoku ii (1993)(active)(disk 3 of 4)(disk c).dim" size="1261824" crc="8DF65565" sha1="4AFD22C642C1C37FF714BAF32F8DB156BF79414B" offset="000000" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_5_25">
+ <feature name="part_id" value="Disk D" />
+ <dataarea name="flop" size="1261824">
+ <rom name="mahjong gensoukyoku ii (1993)(active)(disk 4 of 4)(disk d).dim" size="1261824" crc="880B66CE" sha1="B21AB349547585A9859135979CB44B49EED004A1" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mjkyojs">
<description>Mahjong Kyo Jidai Special</description>
<year>1988</year>
@@ -10494,6 +10540,18 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup
</part>
</software>
+ <software name="phalanxs" cloneof="phalanx">
+ <description>Phalanx (Sample)</description>
+ <year>1991</year>
+ <publisher>Zoom</publisher>
+ <info name="alt_title" value="ファランクス" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="phalanx (sample) (1991)(zoom).dim" size="1261824" crc="B3D81E59" sha1="92874C431F465968E25AE9FB3B29FAA34D92C966" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="phantas3">
<description>Phantasie III - The Wrath of Nikademus</description>
<year>1989</year>
@@ -20365,6 +20423,113 @@ a contest among doujin programmers... -->
+<!-- Distributed with Magazine Book from "The World of X68000". There are winner of a
+ "The first all japan X68000 art festival (第1回全日本X68000芸術祭)" among programmers. -->
+
+ <software name="formulaxa" cloneof="formulax">
+ <description>The World of X68000 - Formula X</description>
+ <year>1993</year>
+ <publisher>電波新聞社 (Dempa Shinbunsha)</publisher>
+ <info name="alt_title" value="フォーミュラX (ザ・ワールド・オブ・X68000)" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="the world of x68000 (disk 3 of 3) - formula x.dim" size="1261824" crc="17E7DCB5" sha1="4CA19B5054F77139F5951CE00A8A47D4A98783AF" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- This image file is multi boot disk.
+ Set drive 0 to boot "Fortress Attack", Set drive 1 to boot "Fortress Attack". -->
+ <software name="fortatgj">
+ <description>The World of X68000 - Fortress Attack &amp; GJ</description>
+ <year>1993</year>
+ <publisher>電波新聞社 (Dempa Shinbunsha)</publisher>
+ <info name="alt_title" value="フォートレスアタック & GJ (ザ・ワールド・オブ・X68000)" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="the world of x68000 (disk 1 of 3) - fortress attack &amp; gj.dim" size="1261824" crc="373B5D62" sha1="B0E9D5304C33546BEE2FFC3E6380B8FE2F3D3E95" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- This image file is multi boot disk.
+ Set drive 0 to boot "Logic Rush", Set drive 1 to boot "Ah! Ohimesama!". -->
+ <software name="lcmyprin" supported="no">
+ <description>The World of X68000 - Logic Rush &amp; Ah! Ohimesama!</description>
+ <year>1993</year>
+ <publisher>電波新聞社 (Dempa Shinbunsha)</publisher>
+ <info name="alt_title" value="ロジックラッシュ & ああっ!お姫さまっ! (ザ・ワールド・オブ・X68000)" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="the world of x68000 (disk 2 of 3) - logic rush &amp; ah! ohimesama!.dim" size="1261824" crc="235F83CA" sha1="A40470D9FAB4C7D13184B5300EB16AA52DB2D39E" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cryokua" cloneof="cryoku">
+ <description>The World of X68000 II - C Ryoku Kensa</description>
+ <year>1993</year>
+ <publisher>電波新聞社 (Dempa Shinbunsha)</publisher>
+ <info name="alt_title" value="C力検査 (ザ・ワールド・オブ・X68000 Ⅱ)" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="the world of x68000 ii (disk 1 of 4) - c ryoku kensa.dim" size="1261824" crc="962C135E" sha1="12FC6F23E4AC4F8F32C1BA711A7BE926D3CBEB0B" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cynthiaa">
+ <description>The World of X68000 II - Cynthia</description>
+ <year>1993</year>
+ <publisher>電波新聞社 (Dempa Shinbunsha)</publisher>
+ <info name="alt_title" value="シンシア (ザ・ワールド・オブ・X68000 Ⅱ)" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="the world of x68000 ii (disk 2 of 4) - cynthia.dim" size="1261824" crc="EB2F94E9" sha1="430E931D2C0DE8BB6CD2DC1D6B64781EDE15B03D" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- This image file is multi boot disk.
+ Set drive 0 to boot "Rush!", Set drive 1 to boot "Useful". -->
+ <software name="rushusfl">
+ <description>The World of X68000 II - Rush! &amp; Useful</description>
+ <year>1993</year>
+ <publisher>電波新聞社 (Dempa Shinbunsha)</publisher>
+ <info name="alt_title" value="ラッシュ! & ユースフル (ザ・ワールド・オブ・X68000 Ⅱ)" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="the world of x68000 ii (disk 3 of 4) - rush! &amp; useful.dim" size="1261824" crc="F60F3B1B" sha1="A4FF175494A9438ED4444E533816BAC8303A6E4C" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="t94xa" cloneof="t94x">
+ <description>The World of X68000 II - T-94X</description>
+ <year>1993</year>
+ <publisher>電波新聞社 (Dempa Shinbunsha)</publisher>
+ <info name="alt_title" value="T-94X (ザ・ワールド・オブ・X68000 Ⅱ)" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="the world of x68000 ii (disk 4 of 4) - t-94x.dim" size="1261824" crc="78930F80" sha1="AF8ECDCA86289F203B30DC4F0BFDE025B54E78C8" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- This boot disk is copied file from "The World of X68000" -->
+ <software name="aahime">
+ <description>Aa! O-Hime-sama!</description>
+ <year>1993</year>
+ <publisher>電波新聞社 (Dempa Shinbunsha)</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="1261824">
+ <rom name="aa! o-hime-sama!.dim" size="1261824" crc="6605a6b5" sha1="05e30f93a6688a57c34fae9779d7b1cec142fd4c" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+
+
<!-- Doujin -->
@@ -20405,17 +20570,6 @@ a contest among doujin programmers... -->
</part>
</software>
- <software name="aahime">
- <description>Aa! O-Hime-sama!</description>
- <year>19??</year>
- <publisher>&lt;doujin&gt;</publisher>
- <part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="1261824">
- <rom name="aa! o-hime-sama!.dim" size="1261824" crc="6605a6b5" sha1="05e30f93a6688a57c34fae9779d7b1cec142fd4c" offset="000000" />
- </dataarea>
- </part>
- </software>
-
<software name="abuten">
<description>Abunai Tengoku Densetsu?</description>
<year>19??</year>
@@ -23418,25 +23572,6 @@ a contest among doujin programmers... -->
</part>
</software>
- <software name="fortatk">
- <description>Fortress Attack</description>
- <year>1993</year>
- <publisher>&lt;doujin&gt;</publisher>
- <info name="developer" value="Shibahara A." />
- <part name="flop1" interface="floppy_5_25">
- <feature name="part_id" value="Disk 1" />
- <dataarea name="flop" size="1261824">
- <rom name="fortress attack (1993)(shibahara a.)(disk 1 of 2).dim" size="1261824" crc="a919b870" sha1="ad7a2a1400c2bc9106021370f9d959f11e96d56e" offset="000000" />
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_5_25">
- <feature name="part_id" value="Disk 2" />
- <dataarea name="flop" size="1261824">
- <rom name="fortress attack (1993)(shibahara a.)(disk 2 of 2).dim" size="1261824" crc="ebbf3a16" sha1="28db90ef8a65d405243bf7a43a235ad1a0c5938b" offset="000000" />
- </dataarea>
- </part>
- </software>
-
<software name="fortyone">
<description>Forty-One</description>
<year>1993</year>
@@ -30892,40 +31027,6 @@ Technically speaking these are invalid XDF files, because they contain more trac
a DIM dump with DIFC, these are at least confirmed as coming from real disk (by SuperDeadite)
-->
- <software name="cryokua" cloneof="cryoku">
- <description>C Ryokukensa V3</description>
- <year>1992</year>
- <publisher>&lt;doujin&gt;</publisher>
- <info name="developer" value="Hayabusa Soft" />
- <part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="1277952">
- <rom name="ct.xdf" size="1277952" crc="b494d29c" sha1="4ac45dfa372e0bc4cfd63f16407ed382a942e03a" offset="000000" />
- </dataarea>
- </part>
- </software>
-
- <software name="cynthi2">
- <description>Cynthia V2</description>
- <year>19??</year>
- <publisher>&lt;doujin&gt;</publisher>
- <part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="1277952">
- <rom name="cyn.xdf" size="1277952" crc="24b71a3b" sha1="018b73eedd25ae89466157da0de1bf84dd3bb048" offset="000000" />
- </dataarea>
- </part>
- </software>
-
- <software name="formulaxa" cloneof="formulax">
- <description>Formula X (Alt)</description>
- <year>19??</year>
- <publisher>&lt;doujin&gt;</publisher>
- <part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="1277952">
- <rom name="for.xdf" size="1277952" crc="593d49fe" sha1="523a83919076de11d377b0d4aeff88c6c271459e" offset="000000" />
- </dataarea>
- </part>
- </software>
-
<software name="grdiusac">
<description>Gradius Arcade</description>
<year>19??</year>
@@ -30972,29 +31073,6 @@ a DIM dump with DIFC, these are at least confirmed as coming from real disk (by
</part>
</software>
- <software name="t94xa" cloneof="t94x">
- <description>T-94X - The Ground Warriors (Alt)</description>
- <year>1994</year>
- <publisher>&lt;doujin&gt;</publisher>
- <info name="developer" value="Team Acquire" />
- <part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="1277952">
- <rom name="tx.xdf" size="1277952" crc="955385f5" sha1="b71782694fd7184351c4551c7d58b9aefd705ba9" offset="000000" />
- </dataarea>
- </part>
- </software>
-
- <software name="lcmyprin" supported="no">
- <description>Logic Crush + Ahh My Princess!</description>
- <year>19??</year>
- <publisher>&lt;doujin&gt;</publisher>
- <part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="1277952">
- <rom name="worldii.xdf" size="1277952" crc="66671996" sha1="77421d225dcdb944d07a3f0e2e3714ba3f1988c2" offset="000000" />
- </dataarea>
- </part>
- </software>
-
<software name="zeromastx" cloneof="zeromast">
<description>Zero Master-Striker (XDF)</description>
<year>1992</year>
diff --git a/scripts/src/mame/frontend.lua b/scripts/src/mame/frontend.lua
index 41d0598cb15..93129cf85d9 100644
--- a/scripts/src/mame/frontend.lua
+++ b/scripts/src/mame/frontend.lua
@@ -61,6 +61,8 @@ files {
MAME_DIR .. "src/frontend/mame/cheat.h",
MAME_DIR .. "src/frontend/mame/clifront.cpp",
MAME_DIR .. "src/frontend/mame/clifront.h",
+ MAME_DIR .. "src/frontend/mame/console.cpp",
+ MAME_DIR .. "src/frontend/mame/console.h",
MAME_DIR .. "src/frontend/mame/info.cpp",
MAME_DIR .. "src/frontend/mame/info.h",
MAME_DIR .. "src/frontend/mame/language.cpp",
@@ -71,6 +73,8 @@ files {
MAME_DIR .. "src/frontend/mame/mame.h",
MAME_DIR .. "src/frontend/mame/mameopts.cpp",
MAME_DIR .. "src/frontend/mame/mameopts.h",
+ MAME_DIR .. "src/frontend/mame/media_ident.cpp",
+ MAME_DIR .. "src/frontend/mame/media_ident.h",
MAME_DIR .. "src/frontend/mame/pluginopts.cpp",
MAME_DIR .. "src/frontend/mame/pluginopts.h",
MAME_DIR .. "src/frontend/mame/ui/ui.cpp",
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index c459540b91e..05327f09861 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -866,6 +866,7 @@ function linkProjects_mame_mess(_target, _subtarget)
"adc",
"alesis",
"altos",
+ "ami",
"amiga",
"amstrad",
"apf",
@@ -946,7 +947,6 @@ function linkProjects_mame_mess(_target, _subtarget)
"luxor",
"magnavox",
"makerbot",
- "marx",
"matsushi",
"mattel",
"mb",
@@ -981,7 +981,6 @@ function linkProjects_mame_mess(_target, _subtarget)
"osborne",
"osi",
"palm",
- "parker",
"pc",
"pdp1",
"pel",
@@ -1316,6 +1315,11 @@ files {
MAME_DIR .. "src/mame/drivers/altos486.cpp",
}
+createMESSProjects(_target, _subtarget, "ami")
+files {
+ MAME_DIR .. "src/mame/drivers/hh_amis2k.cpp",
+}
+
createMESSProjects(_target, _subtarget, "amiga")
files {
MAME_DIR .. "src/mame/drivers/amiga.cpp",
@@ -2118,11 +2122,6 @@ files {
MAME_DIR .. "src/mame/drivers/replicator.cpp",
}
-createMESSProjects(_target, _subtarget, "marx")
-files {
- MAME_DIR .. "src/mame/drivers/elecbowl.cpp",
-}
-
createMESSProjects(_target, _subtarget, "mattel")
files {
MAME_DIR .. "src/mame/drivers/aquarius.cpp",
@@ -2141,7 +2140,6 @@ files {
createMESSProjects(_target, _subtarget, "mb")
files {
- MAME_DIR .. "src/mame/drivers/mbdtower.cpp",
MAME_DIR .. "src/mame/drivers/microvsn.cpp",
MAME_DIR .. "src/mame/drivers/phantom.cpp",
}
@@ -2420,11 +2418,6 @@ files {
MAME_DIR .. "src/mame/drivers/palmz22.cpp",
}
-createMESSProjects(_target, _subtarget, "parker")
-files {
- MAME_DIR .. "src/mame/drivers/wildfire.cpp",
-}
-
createMESSProjects(_target, _subtarget, "pitronic")
files {
MAME_DIR .. "src/mame/drivers/beta.cpp",
diff --git a/src/devices/bus/pofo/hpc104.cpp b/src/devices/bus/pofo/hpc104.cpp
index e08bb317db9..9a2cfa6b8cc 100644
--- a/src/devices/bus/pofo/hpc104.cpp
+++ b/src/devices/bus/pofo/hpc104.cpp
@@ -169,9 +169,9 @@ UINT8 hpc104_t::nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom
{
if (!(!m_ncc1_out || ncc1))
{
- if (LOG) logerror("%s %s CCM0 read %05x\n", machine().time().as_string(), machine().describe_context(), offset & 0x1ffff);
-
data = m_ccm->nrdi_r(space, offset & 0x1ffff);
+
+ if (LOG) logerror("%s %s CCM1 read %05x:%02x\n", machine().time().as_string(), machine().describe_context(), offset & 0x1ffff, data);
}
if (m_sw1)
@@ -234,7 +234,7 @@ void hpc104_t::nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom,
{
m_ncc1_out = BIT(data, 0);
- if (LOG) logerror("NCC1 out %u\n", machine().time().as_string(), machine().describe_context(), m_ncc1_out);
+ if (LOG) logerror("%s %s NCC1 out %u\n", machine().time().as_string(), machine().describe_context(), m_ncc1_out);
}
}
}
diff --git a/src/devices/bus/sg1000_exp/fm_unit.cpp b/src/devices/bus/sg1000_exp/fm_unit.cpp
index da3759ca26f..7e5e5998357 100644
--- a/src/devices/bus/sg1000_exp/fm_unit.cpp
+++ b/src/devices/bus/sg1000_exp/fm_unit.cpp
@@ -11,13 +11,31 @@ Release data from the Sega Retro project:
Notes:
-This emulation is based on Charles MacDonald's analysis of Enri's schematics
-of the FM unit hardware.
+The FM Unit add-on was released for the Mark III, so compatible games were
+released only for that console and the Japanese SMS, that has the FM chip
+built-in. The games play FM sound only when detect the FM hardware. The normal
+PSG sound is replaced, except when sampled voices, not supported by the FM
+chip, are played. Some games released for western SMS versions also contain FM
+code, that is played on a Mark III / SMSJ when connected through a cartridge
+adapter.
+
+The IO address map (read/write ports) is based on Charles MacDonald's analysis
+of Enri's schematics of the FM unit hardware.
Any software that access controllers through IO ports $C0/$C1 instead $DC/$DD
(the game Fushigi no Oshiro Pit Pot is a known example) has control problems
when the FM Sound Unit is attached (real hardware behavior).
+TODO:
+
+- Confirm the assumption that PSG and FM sound are not mixed by the FM unit
+and there is only FM sound when the unit is enabled. Two evidences that were
+observed: every time a game with FM sound plays sampled voices through PSG,
+the game disables/enables the FM chip before/after playing the PSG sound, and
+a user reported, on the topic of the SMSPower Forums where the PSG/FM mixing
+control of the SMSJ was discovered, that the hack that adds FM sound to Sonic
+SMS version is not playing PSG sound on his Mark III with the FM unit.
+
**********************************************************************/
#include "fm_unit.h"
@@ -33,6 +51,8 @@ const device_type SEGA_FM_UNIT = &device_creator<sega_fm_unit_device>;
static MACHINE_CONFIG_FRAGMENT( fm_config )
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_10_738635MHz/3)
+ // if this output gain is changed, the gain set when unmute the output need
+ // to be changed too, probably along the gain set for SMSJ/SMSKRFM drivers.
MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":mono", 1.00)
MACHINE_CONFIG_END
@@ -56,6 +76,7 @@ sega_fm_unit_device::sega_fm_unit_device(const machine_config &mconfig, const ch
device_t(mconfig, SEGA_FM_UNIT, "Sega FM Sound Unit", tag, owner, clock, "sega_fm_unit", __FILE__),
device_sg1000_expansion_slot_interface(mconfig, *this),
m_ym(*this, "ym2413"),
+ m_psg(*this, ":segapsg"),
m_audio_control(0)
{
}
@@ -78,6 +99,8 @@ void sega_fm_unit_device::device_start()
READ8_MEMBER(sega_fm_unit_device::peripheral_r)
{
+ // the value previously written to the control port is returned on all
+ // active read offsets.
if (offset <= 3)
{
return m_audio_control & 0x01;
@@ -95,20 +118,28 @@ WRITE8_MEMBER(sega_fm_unit_device::peripheral_w)
switch (offset)
{
case 0: // register port
- if (m_audio_control == 0x01)
- {
- m_ym->write(space, 0, data & 0x3f);
- }
+ m_ym->write(space, 0, data & 0x3f);
break;
case 1: // data port
- if (m_audio_control == 0x01)
- {
- m_ym->write(space, 1, data);
- }
+ m_ym->write(space, 1, data);
break;
case 2: // control port
case 3: // mirror
m_audio_control = data & 0x01;
+ if (m_audio_control == 0x01)
+ {
+ m_ym->set_output_gain(0, 1.0);
+ // assume the PSG output is muted when FM is active.
+ // Out Run need this. Needs confirmation (see TODO).
+ if (m_psg.found())
+ m_psg->set_output_gain(0, 0.0);
+ }
+ else
+ {
+ m_ym->set_output_gain(0, 0.0);
+ if (m_psg.found())
+ m_psg->set_output_gain(0, 1.0);
+ }
break;
default:
break;
diff --git a/src/devices/bus/sg1000_exp/fm_unit.h b/src/devices/bus/sg1000_exp/fm_unit.h
index 36ee2678350..9f71ff81190 100644
--- a/src/devices/bus/sg1000_exp/fm_unit.h
+++ b/src/devices/bus/sg1000_exp/fm_unit.h
@@ -14,6 +14,7 @@
#include "emu.h"
#include "sound/ym2413.h"
+#include "sound/sn76496.h"
#include "sg1000exp.h"
@@ -44,6 +45,7 @@ protected:
private:
required_device<ym2413_device> m_ym;
+ optional_device<segapsg_device> m_psg;
UINT8 m_audio_control;
};
diff --git a/src/devices/machine/aicartc.cpp b/src/devices/machine/aicartc.cpp
index b4ebca893eb..e4ed8fa44b0 100644
--- a/src/devices/machine/aicartc.cpp
+++ b/src/devices/machine/aicartc.cpp
@@ -54,40 +54,43 @@ void aicartc_device::device_start()
{
m_clock_timer = timer_alloc();
m_clock_timer->adjust(attotime::from_hz(clock()), 0, attotime::from_hz(clock()));
+}
- {
- UINT32 current_time;
- int year_count,cur_year,i;
- const int month_to_day_conversion[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
- system_time systime;
- machine().base_datetime(systime);
-
- /* put the seconds */
- current_time = systime.local_time.second;
- /* put the minutes */
- current_time+= systime.local_time.minute*60;
- /* put the hours */
- current_time+= systime.local_time.hour*60*60;
- /* put the days (note -1) */
- current_time+= (systime.local_time.mday-1)*60*60*24;
- /* take the current year here for calculating leaps */
- cur_year = (systime.local_time.year);
-
- /* take the months - despite popular beliefs, leap years aren't just evenly divisible by 4 */
- if(((((cur_year % 4) == 0) && ((cur_year % 100) != 0)) || ((cur_year % 400) == 0)) && systime.local_time.month > 2)
- current_time+= (month_to_day_conversion[systime.local_time.month]+1)*60*60*24;
- else
- current_time+= (month_to_day_conversion[systime.local_time.month])*60*60*24;
-
- /* put the years */
- year_count = (cur_year-1949);
-
- for(i=0;i<year_count-1;i++)
- current_time += (((((i+1950) % 4) == 0) && (((i+1950) % 100) != 0)) || (((i+1950) % 400) == 0)) ? 60*60*24*366 : 60*60*24*365;
-
- m_rtc_reg_lo = current_time & 0x0000ffff;
- m_rtc_reg_hi = (current_time & 0xffff0000) >> 16;
- }
+
+//-------------------------------------------------
+// rtc_clock_updated -
+//-------------------------------------------------
+
+void aicartc_device::rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second)
+{
+ const int month_to_day_conversion[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
+
+ // put the seconds
+ UINT32 current_time = second;
+
+ // put the minutes
+ current_time += minute * 60;
+
+ // put the hours
+ current_time += hour * 60 * 60;
+
+ // put the days (note -1) */
+ current_time += (day - 1) * 60 * 60 * 24;
+
+ // take the months - despite popular beliefs, leap years aren't just evenly divisible by 4 */
+ if (((((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0)) && month > 2)
+ current_time += (month_to_day_conversion[month - 1] + 1) * 60 * 60 * 24;
+ else
+ current_time += (month_to_day_conversion[month - 1]) * 60 * 60 * 24;
+
+ // put the years
+ int year_count = (year - 1949);
+
+ for (int i = 0; i < year_count - 1; i++)
+ current_time += (((((i+1950) % 4) == 0) && (((i+1950) % 100) != 0)) || (((i+1950) % 400) == 0)) ? 60*60*24*366 : 60*60*24*365;
+
+ m_rtc_reg_lo = current_time & 0x0000ffff;
+ m_rtc_reg_hi = (current_time & 0xffff0000) >> 16;
}
diff --git a/src/devices/machine/aicartc.h b/src/devices/machine/aicartc.h
index 6e1d9e2183e..f923ce073ca 100644
--- a/src/devices/machine/aicartc.h
+++ b/src/devices/machine/aicartc.h
@@ -11,6 +11,7 @@ Template for skeleton device
#ifndef __AICARTCDEV_H__
#define __AICARTCDEV_H__
+#include "dirtc.h"
//**************************************************************************
@@ -48,6 +49,11 @@ protected:
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ // device_rtc_interface overrides
+ virtual bool rtc_feature_y2k() const override { return true; }
+ virtual bool rtc_feature_leap_year() const override { return true; }
+ virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
+
private:
emu_timer *m_clock_timer;
};
diff --git a/src/devices/machine/ds1302.cpp b/src/devices/machine/ds1302.cpp
index c2cd23b560f..b6f6b0675b4 100644
--- a/src/devices/machine/ds1302.cpp
+++ b/src/devices/machine/ds1302.cpp
@@ -113,8 +113,6 @@ void ds1302_device::device_start()
void ds1302_device::device_reset()
{
- set_current_time(machine());
-
m_clk = 0;
m_ce = 0;
m_state = STATE_COMMAND;
diff --git a/src/devices/machine/ds1302.h b/src/devices/machine/ds1302.h
index 515613579b2..273bd6bbc9e 100644
--- a/src/devices/machine/ds1302.h
+++ b/src/devices/machine/ds1302.h
@@ -19,6 +19,7 @@
#define __DS1302_H__
#include "emu.h"
+#include "dirtc.h"
@@ -63,7 +64,7 @@ protected:
// device_rtc_interface overrides
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
- virtual bool rtc_feature_leap_year() override { return true; }
+ virtual bool rtc_feature_leap_year() const override { return true; }
private:
void load_shift_register();
diff --git a/src/devices/machine/e0516.cpp b/src/devices/machine/e0516.cpp
index f80cad5bdb5..acd6c2d0193 100644
--- a/src/devices/machine/e0516.cpp
+++ b/src/devices/machine/e0516.cpp
@@ -68,16 +68,6 @@ void e0516_device::device_start()
//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void e0516_device::device_reset()
-{
- set_current_time(machine());
-}
-
-
-//-------------------------------------------------
// device_timer - handler timer events
//-------------------------------------------------
@@ -196,3 +186,12 @@ READ_LINE_MEMBER( e0516_device::dio_r )
{
return m_dio;
}
+
+
+//-------------------------------------------------
+// rtc_clock_updated -
+//-------------------------------------------------
+
+void e0516_device::rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second)
+{
+}
diff --git a/src/devices/machine/e0516.h b/src/devices/machine/e0516.h
index 7e95be0dfc1..227c65dd2a5 100644
--- a/src/devices/machine/e0516.h
+++ b/src/devices/machine/e0516.h
@@ -22,7 +22,7 @@
#ifndef __E0516__
#define __E0516__
-#include "emu.h"
+#include "dirtc.h"
@@ -56,9 +56,11 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ // device_rtc_interface overrides
+ virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
+
private:
int m_cs; // chip select
int m_clk; // clock
diff --git a/src/devices/machine/hd64610.cpp b/src/devices/machine/hd64610.cpp
index d4639892e17..f006b2a65d2 100644
--- a/src/devices/machine/hd64610.cpp
+++ b/src/devices/machine/hd64610.cpp
@@ -183,16 +183,6 @@ void hd64610_device::device_start()
//-------------------------------------------------
-// device_start - device-specific reset
-//-------------------------------------------------
-
-void hd64610_device::device_reset()
-{
- set_current_time(machine());
-}
-
-
-//-------------------------------------------------
// device_timer - handler timer events
//-------------------------------------------------
diff --git a/src/devices/machine/hd64610.h b/src/devices/machine/hd64610.h
index 021cf181c27..2dc5726ddea 100644
--- a/src/devices/machine/hd64610.h
+++ b/src/devices/machine/hd64610.h
@@ -27,6 +27,7 @@
#define __HD64610__
#include "emu.h"
+#include "dirtc.h"
@@ -67,7 +68,6 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_rtc_interface overrides
diff --git a/src/devices/machine/mccs1850.cpp b/src/devices/machine/mccs1850.cpp
index 72fb12a667a..28d29bab8bc 100644
--- a/src/devices/machine/mccs1850.cpp
+++ b/src/devices/machine/mccs1850.cpp
@@ -299,14 +299,18 @@ mccs1850_device::mccs1850_device(const machine_config &mconfig, const char *tag,
//-------------------------------------------------
-// set_counter - set the counter at startup time
+// rtc_clock_changed -
//-------------------------------------------------
-void mccs1850_device::set_counter(UINT32 value)
+void mccs1850_device::rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second)
{
- m_counter = value;
+ // FIXME: implement this properly
+ system_time systime;
+ machine().base_datetime(systime);
+ m_counter = systime.time;
}
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
diff --git a/src/devices/machine/mccs1850.h b/src/devices/machine/mccs1850.h
index e4179c47e82..c029bc3e89b 100644
--- a/src/devices/machine/mccs1850.h
+++ b/src/devices/machine/mccs1850.h
@@ -23,6 +23,7 @@
#define __MCCS1850__
#include "emu.h"
+#include "dirtc.h"
@@ -67,9 +68,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( por_w );
DECLARE_WRITE_LINE_MEMBER( test_w );
- // For setting the time at startup
- void set_counter(UINT32 value);
-
protected:
// device-level overrides
virtual void device_start() override;
@@ -81,6 +79,9 @@ protected:
virtual void nvram_read(emu_file &file) override;
virtual void nvram_write(emu_file &file) override;
+ // device_rtc_interface overrides
+ virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
+
private:
inline void check_interrupt();
inline void set_pse_line(bool state);
diff --git a/src/devices/machine/mm58167.cpp b/src/devices/machine/mm58167.cpp
index ed66df7603f..75e9e799004 100644
--- a/src/devices/machine/mm58167.cpp
+++ b/src/devices/machine/mm58167.cpp
@@ -83,8 +83,6 @@ void mm58167_device::device_start()
void mm58167_device::device_reset()
{
- set_current_time(machine());
-
m_regs[R_CTL_STATUS] = 0; // not busy
m_regs[R_CTL_IRQSTATUS] = 0;
m_regs[R_CTL_IRQCONTROL] = 0;
diff --git a/src/devices/machine/mm58167.h b/src/devices/machine/mm58167.h
index c1a7e0b320e..ab1a1d70eb2 100644
--- a/src/devices/machine/mm58167.h
+++ b/src/devices/machine/mm58167.h
@@ -12,6 +12,7 @@
#define __MM58167_H__
#include "emu.h"
+#include "dirtc.h"
//**************************************************************************
@@ -50,7 +51,7 @@ protected:
// device_rtc_interface overrides
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
- virtual bool rtc_feature_leap_year() override { return true; }
+ virtual bool rtc_feature_leap_year() const override { return true; }
void set_irq(int bit);
void update_rtc();
diff --git a/src/devices/machine/msm5832.cpp b/src/devices/machine/msm5832.cpp
index 21fdeb3ba63..e87396bcee8 100644
--- a/src/devices/machine/msm5832.cpp
+++ b/src/devices/machine/msm5832.cpp
@@ -122,16 +122,6 @@ void msm5832_device::device_start()
//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void msm5832_device::device_reset()
-{
- set_current_time(machine());
-}
-
-
-//-------------------------------------------------
// device_timer - handler timer events
//-------------------------------------------------
diff --git a/src/devices/machine/msm5832.h b/src/devices/machine/msm5832.h
index a437501f23b..d436d4ccc78 100644
--- a/src/devices/machine/msm5832.h
+++ b/src/devices/machine/msm5832.h
@@ -24,6 +24,7 @@
#define __MSM5832__
#include "emu.h"
+#include "dirtc.h"
@@ -65,7 +66,6 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_rtc_interface overrides
diff --git a/src/devices/machine/msm58321.cpp b/src/devices/machine/msm58321.cpp
index 7bdd77713ea..a66f0ba9865 100644
--- a/src/devices/machine/msm58321.cpp
+++ b/src/devices/machine/msm58321.cpp
@@ -243,10 +243,6 @@ void msm58321_device::device_start()
save_item(NAME(m_cs1));
save_item(NAME(m_address));
save_item(NAME(m_reg));
-
- set_current_time(machine());
-
- update_output();
}
diff --git a/src/devices/machine/msm58321.h b/src/devices/machine/msm58321.h
index 04d174eedc2..b4f9de48053 100644
--- a/src/devices/machine/msm58321.h
+++ b/src/devices/machine/msm58321.h
@@ -23,6 +23,7 @@
#define __MSM58321__
#include "emu.h"
+#include "dirtc.h"
@@ -89,7 +90,7 @@ protected:
// device_rtc_interface overrides
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
- virtual bool rtc_feature_y2k() override { return m_year0 != 0; }
+ virtual bool rtc_feature_y2k() const override { return m_year0 != 0; }
// device_nvram_interface overrides
virtual void nvram_default() override;
diff --git a/src/devices/machine/msm6242.cpp b/src/devices/machine/msm6242.cpp
index a4a188cbcb6..9b0b35df2c3 100644
--- a/src/devices/machine/msm6242.cpp
+++ b/src/devices/machine/msm6242.cpp
@@ -86,9 +86,6 @@ void msm6242_device::device_start()
m_timer = timer_alloc(TIMER_RTC_CALLBACK);
m_timer->adjust(attotime::zero);
- // get real time from system
- set_current_time(machine());
-
// set up registers
m_tick = 0;
m_irq_flag = 0;
diff --git a/src/devices/machine/msm6242.h b/src/devices/machine/msm6242.h
index f53e4b60f01..149d58eea38 100644
--- a/src/devices/machine/msm6242.h
+++ b/src/devices/machine/msm6242.h
@@ -12,6 +12,7 @@
#define __MSM6242DEV_H__
#include "emu.h"
+#include "dirtc.h"
#define MCFG_MSM6242_OUT_INT_HANDLER(_devcb) \
diff --git a/src/devices/machine/pcf8593.h b/src/devices/machine/pcf8593.h
index 63b3befe6b9..b2b09f9ebd0 100644
--- a/src/devices/machine/pcf8593.h
+++ b/src/devices/machine/pcf8593.h
@@ -12,6 +12,7 @@
#define __PCF8593_H__
#include "emu.h"
+#include "dirtc.h"
//**************************************************************************
@@ -45,7 +46,7 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_rtc_interface overrides
- virtual bool rtc_feature_y2k() override { return true; }
+ virtual bool rtc_feature_y2k() const override { return true; }
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
// device_nvram_interface overrides
diff --git a/src/devices/machine/rp5c01.cpp b/src/devices/machine/rp5c01.cpp
index 5ac56b4b415..b2280909fa5 100644
--- a/src/devices/machine/rp5c01.cpp
+++ b/src/devices/machine/rp5c01.cpp
@@ -201,6 +201,12 @@ void rp5c01_device::device_start()
m_16hz_timer->adjust(attotime::from_hz(clock() / 1024), 0, attotime::from_hz(clock() / 1024));
}
+ memset(m_reg, 0, sizeof(m_reg));
+ memset(m_ram, 0, sizeof(m_ram));
+
+ // 24 hour mode
+ m_reg[MODE01][REGISTER_12_24_SELECT] = 1;
+
// state saving
save_item(NAME(m_reg[MODE00]));
save_item(NAME(m_reg[MODE01]));
@@ -214,23 +220,6 @@ void rp5c01_device::device_start()
//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void rp5c01_device::device_reset()
-{
- memset(m_reg, 0, sizeof(m_reg));
- memset(m_ram, 0, sizeof(m_ram));
-
- // 24 hour mode
- m_reg[MODE01][REGISTER_12_24_SELECT] = 1;
-
- if (m_battery_backed && clock() > 0)
- set_current_time(machine());
-}
-
-
-//-------------------------------------------------
// device_timer - handler timer events
//-------------------------------------------------
diff --git a/src/devices/machine/rp5c01.h b/src/devices/machine/rp5c01.h
index f9cf0a12609..0043cc19b6c 100644
--- a/src/devices/machine/rp5c01.h
+++ b/src/devices/machine/rp5c01.h
@@ -24,6 +24,7 @@
#define __RP5C01__
#include "emu.h"
+#include "dirtc.h"
@@ -64,11 +65,11 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_rtc_interface overrides
- virtual bool rtc_feature_leap_year() override { return true; }
+ virtual bool rtc_feature_leap_year() const override { return true; }
+ virtual bool rtc_battery_backed() const override { return m_battery_backed; }
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
// device_nvram_interface overrides
diff --git a/src/devices/machine/rp5c15.cpp b/src/devices/machine/rp5c15.cpp
index 7967366c349..88989b41d7c 100644
--- a/src/devices/machine/rp5c15.cpp
+++ b/src/devices/machine/rp5c15.cpp
@@ -238,16 +238,6 @@ void rp5c15_device::device_start()
//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void rp5c15_device::device_reset()
-{
- set_current_time(machine());
-}
-
-
-//-------------------------------------------------
// device_timer - handler timer events
//-------------------------------------------------
diff --git a/src/devices/machine/rp5c15.h b/src/devices/machine/rp5c15.h
index 1e36dfaf60f..4a10eaeae3c 100644
--- a/src/devices/machine/rp5c15.h
+++ b/src/devices/machine/rp5c15.h
@@ -24,6 +24,7 @@
#define __RP5C15__
#include "emu.h"
+#include "dirtc.h"
@@ -59,11 +60,10 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_rtc_interface overrides
- virtual bool rtc_feature_leap_year() override { return true; }
+ virtual bool rtc_feature_leap_year() const override { return true; }
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
private:
diff --git a/src/devices/machine/rtc4543.cpp b/src/devices/machine/rtc4543.cpp
index b068e44f882..619ae57ad4a 100644
--- a/src/devices/machine/rtc4543.cpp
+++ b/src/devices/machine/rtc4543.cpp
@@ -89,8 +89,6 @@ void rtc4543_device::device_start()
void rtc4543_device::device_reset()
{
- set_current_time(machine());
-
m_ce = 0;
m_wr = 0;
m_clk = 0;
diff --git a/src/devices/machine/rtc4543.h b/src/devices/machine/rtc4543.h
index 966e15ab0b9..9a252424eb2 100644
--- a/src/devices/machine/rtc4543.h
+++ b/src/devices/machine/rtc4543.h
@@ -13,6 +13,7 @@
#define __RTC4543_H__
#include "emu.h"
+#include "dirtc.h"
@@ -63,7 +64,7 @@ protected:
// device_rtc_interface overrides
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
- virtual bool rtc_feature_leap_year() override { return true; }
+ virtual bool rtc_feature_leap_year() const override { return true; }
// helpers
virtual void ce_rising();
diff --git a/src/devices/machine/upd1990a.cpp b/src/devices/machine/upd1990a.cpp
index 59f85d9c4ca..cfce446ba37 100644
--- a/src/devices/machine/upd1990a.cpp
+++ b/src/devices/machine/upd1990a.cpp
@@ -83,9 +83,6 @@ void upd1990a_device::device_start()
m_write_data.resolve_safe();
m_write_tp.resolve_safe();
- // initialize
- set_current_time(machine());
-
for (auto & elem : m_shift_reg)
elem = 0;
diff --git a/src/devices/machine/upd1990a.h b/src/devices/machine/upd1990a.h
index 3c80670ec8e..a526e920017 100644
--- a/src/devices/machine/upd1990a.h
+++ b/src/devices/machine/upd1990a.h
@@ -22,6 +22,7 @@
#define __UPD1990A__
#include "emu.h"
+#include "dirtc.h"
diff --git a/src/devices/machine/upd4992.cpp b/src/devices/machine/upd4992.cpp
index 5e53da565a6..29535e60c94 100644
--- a/src/devices/machine/upd4992.cpp
+++ b/src/devices/machine/upd4992.cpp
@@ -61,16 +61,6 @@ void upd4992_device::device_start()
}
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void upd4992_device::device_reset()
-{
- set_current_time(machine());
-}
-
-
void upd4992_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
diff --git a/src/devices/machine/upd4992.h b/src/devices/machine/upd4992.h
index 23d7dc50cea..dc907fed516 100644
--- a/src/devices/machine/upd4992.h
+++ b/src/devices/machine/upd4992.h
@@ -11,6 +11,7 @@
#ifndef __UPD4992DEV_H__
#define __UPD4992DEV_H__
+#include "dirtc.h"
//**************************************************************************
@@ -41,7 +42,6 @@ protected:
// device-level overrides
virtual void device_validity_check(validity_checker &valid) const override;
virtual void device_start() override;
- virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index 72dd9b01d6a..50072d95995 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -377,11 +377,29 @@ bool device_image_interface::try_change_working_directory(const std::string &sub
void device_image_interface::setup_working_directory()
{
- // first set up the working directory to be the starting directory
- osd_get_full_path(m_working_directory, ".");
+ bool success = false;
+ // get user-specified directory and make sure it exists
+ m_working_directory = device().mconfig().options().sw_path();
+ // if multipath, get first
+ size_t i = m_working_directory.find_first_of(";");
+ if (i != std::string::npos)
+ m_working_directory.resize(i);
+ // validate directory
+ if (!m_working_directory.empty())
+ if (osd::directory::open(m_working_directory))
+ success = true;
+
+ // if not exist, use previous method
+ if (!success)
+ {
+ // first set up the working directory to be the starting directory
+ osd_get_full_path(m_working_directory, ".");
+ // now try browsing down to "software"
+ if (try_change_working_directory("software"))
+ success = true;
+ }
- // now try browsing down to "software"
- if (try_change_working_directory("software"))
+ if (success)
{
// now down to a directory for this computer
int gamedrv = driver_list::find(device().machine().system());
diff --git a/src/emu/dirtc.cpp b/src/emu/dirtc.cpp
index 912c49d538d..3dd961c2aa6 100644
--- a/src/emu/dirtc.cpp
+++ b/src/emu/dirtc.cpp
@@ -9,7 +9,7 @@
***************************************************************************/
#include "emu.h"
-
+#include "dirtc.h"
//**************************************************************************
@@ -76,11 +76,8 @@ void device_rtc_interface::set_time(bool update, int year, int month, int day, i
// to the current system time
//-------------------------------------------------
-void device_rtc_interface::set_current_time(running_machine &machine)
+void device_rtc_interface::set_current_time(const system_time &systime)
{
- system_time systime;
- machine.base_datetime(systime);
-
set_time(true, systime.local_time.year, systime.local_time.month + 1, systime.local_time.mday, systime.local_time.weekday + 1,
systime.local_time.hour, systime.local_time.minute, systime.local_time.second);
}
diff --git a/src/emu/dirtc.h b/src/emu/dirtc.h
index 758157233ea..cbae4dfecd8 100644
--- a/src/emu/dirtc.h
+++ b/src/emu/dirtc.h
@@ -10,10 +10,6 @@
#pragma once
-#ifndef __EMU_H__
-#error Dont include this file directly; include emu.h instead.
-#endif
-
#ifndef __DIRTC_H__
#define __DIRTC_H__
@@ -52,7 +48,9 @@ public:
virtual ~device_rtc_interface();
void set_time(bool update, int year, int month, int day, int day_of_week, int hour, int minute, int second);
- void set_current_time(running_machine &machine);
+ void set_current_time(const system_time &systime);
+
+ bool has_battery() const { return rtc_battery_backed(); }
protected:
static UINT8 convert_to_bcd(int val);
@@ -68,12 +66,16 @@ protected:
void adjust_seconds();
// derived class overrides
- virtual bool rtc_feature_y2k() { return false; }
- virtual bool rtc_feature_leap_year() { return false; }
- virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) { }
+ virtual bool rtc_feature_y2k() const { return false; }
+ virtual bool rtc_feature_leap_year() const { return false; }
+ virtual bool rtc_battery_backed() const { return true; }
+ virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) = 0;
int m_register[7];
};
+// iterator
+typedef device_interface_iterator<device_rtc_interface> rtc_interface_iterator;
+
#endif /* __DIRTC_H__ */
diff --git a/src/emu/emu.h b/src/emu/emu.h
index f170fc6295a..de2105fc68c 100644
--- a/src/emu/emu.h
+++ b/src/emu/emu.h
@@ -78,7 +78,6 @@ typedef device_t * (*machine_config_constructor)(machine_config &config, device_
#include "disound.h"
#include "divideo.h"
#include "dinvram.h"
-#include "dirtc.h"
#include "didisasm.h"
#include "schedule.h"
#include "timer.h"
diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp
index 1c488239efa..d9cde626d01 100644
--- a/src/emu/emuopts.cpp
+++ b/src/emu/emuopts.cpp
@@ -39,6 +39,7 @@ const options_entry emu_options::s_option_entries[] =
{ OPTION_CROSSHAIRPATH, "crosshair", OPTION_STRING, "path to crosshair files" },
{ OPTION_PLUGINSPATH, "plugins", OPTION_STRING, "path to plugin files" },
{ OPTION_LANGUAGEPATH, "language", OPTION_STRING, "path to language files" },
+ { OPTION_SWPATH, "software", OPTION_STRING, "path to loose software" },
// output directory options
{ nullptr, nullptr, OPTION_HEADER, "CORE OUTPUT DIRECTORY OPTIONS" },
diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h
index 5275b65614f..ec0ee216bbe 100644
--- a/src/emu/emuopts.h
+++ b/src/emu/emuopts.h
@@ -36,6 +36,7 @@
#define OPTION_CROSSHAIRPATH "crosshairpath"
#define OPTION_PLUGINSPATH "pluginspath"
#define OPTION_LANGUAGEPATH "languagepath"
+#define OPTION_SWPATH "swpath"
// core directory options
#define OPTION_CFG_DIRECTORY "cfg_directory"
@@ -224,6 +225,7 @@ public:
const char *crosshair_path() const { return value(OPTION_CROSSHAIRPATH); }
const char *plugins_path() const { return value(OPTION_PLUGINSPATH); }
const char *language_path() const { return value(OPTION_LANGUAGEPATH); }
+ const char *sw_path() const { return value(OPTION_SWPATH); }
// core directory options
const char *cfg_directory() const { return value(OPTION_CFG_DIRECTORY); }
diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp
index 5e8c5f478d1..adce482a19c 100644
--- a/src/emu/machine.cpp
+++ b/src/emu/machine.cpp
@@ -79,6 +79,7 @@
#include "unzip.h"
#include "debug/debugvw.h"
#include "debug/debugcpu.h"
+#include "dirtc.h"
#include "image.h"
#include "network.h"
#include "ui/uimain.h"
@@ -267,7 +268,6 @@ void running_machine::start()
else if (options().autosave() && (m_system.flags & MACHINE_SUPPORTS_SAVE) != 0)
schedule_load("auto");
-
manager().update_machine();
}
@@ -300,7 +300,7 @@ int running_machine::run(bool quiet)
// then finish setting up our local machine
start();
- // load the configuration settings and NVRAM
+ // load the configuration settings
m_configuration->load_settings();
// disallow save state registrations starting here.
@@ -308,7 +308,12 @@ int running_machine::run(bool quiet)
// devices with timers.
m_save.allow_registration(false);
+ // load the NVRAM
nvram_load();
+
+ // set the time on RTCs (this may overwrite parts of NVRAM)
+ set_rtc_datetime(system_time(m_base_time));
+
sound().ui_mute(false);
if (!quiet)
sound().start_recording();
@@ -796,6 +801,19 @@ void running_machine::current_datetime(system_time &systime)
//-------------------------------------------------
+// set_rtc_datetime - set the current time on
+// battery-backed RTCs
+//-------------------------------------------------
+
+void running_machine::set_rtc_datetime(const system_time &systime)
+{
+ for (device_rtc_interface &rtc : rtc_interface_iterator(root_device()))
+ if (rtc.has_battery())
+ rtc.set_current_time(systime);
+}
+
+
+//-------------------------------------------------
// rand - standardized random numbers
//-------------------------------------------------
@@ -1171,6 +1189,11 @@ system_time::system_time()
set(0);
}
+system_time::system_time(time_t t)
+{
+ set(t);
+}
+
//-------------------------------------------------
// set - fills out a system_time structure
diff --git a/src/emu/machine.h b/src/emu/machine.h
index 788a6cff7fd..38f64247991 100644
--- a/src/emu/machine.h
+++ b/src/emu/machine.h
@@ -107,6 +107,7 @@ class system_time
{
public:
system_time();
+ explicit system_time(time_t t);
void set(time_t t);
struct full_time
@@ -226,6 +227,7 @@ public:
// date & time
void base_datetime(system_time &systime);
void current_datetime(system_time &systime);
+ void set_rtc_datetime(const system_time &systime);
// misc
void popmessage() const { popmessage(static_cast<char const *>(nullptr)); }
diff --git a/src/frontend/mame/clifront.cpp b/src/frontend/mame/clifront.cpp
index c3fbb049ffa..d7f9a7e76e6 100644
--- a/src/frontend/mame/clifront.cpp
+++ b/src/frontend/mame/clifront.cpp
@@ -14,7 +14,6 @@
#include "chd.h"
#include "emuopts.h"
#include "mameopts.h"
-#include "jedparse.h"
#include "audit.h"
#include "info.h"
#include "unzip.h"
@@ -22,8 +21,7 @@
#include "sound/samples.h"
#include "clifront.h"
#include "xmlfile.h"
-
-#include "drivenum.h"
+#include "media_ident.h"
#include "osdepend.h"
#include "softlist_dev.h"
@@ -31,10 +29,7 @@
#include "ui/moptions.h"
#include "language.h"
#include "pluginopts.h"
-
-#include "linenoise-ng/include/linenoise.h"
-#include <atomic>
-#include <thread>
+#include "console.h"
#include <new>
#include <ctype.h>
@@ -115,294 +110,6 @@ const options_entry cli_option_entries[] =
{ nullptr }
};
-
-// media_identifier class identifies media by hash via a search in
-// the driver database
-class media_identifier
-{
-public:
- // construction/destruction
- media_identifier(emu_options &options);
-
- // getters
- int total() const { return m_total; }
- int matches() const { return m_matches; }
- int nonroms() const { return m_nonroms; }
-
- // operations
- void reset() { m_total = m_matches = m_nonroms = 0; }
- void identify(const char *name);
- void identify_file(const char *name);
- void identify_data(const char *name, const UINT8 *data, int length);
- int find_by_hash(const util::hash_collection &hashes, int length);
-
-private:
- // internal state
- driver_enumerator m_drivlist;
- int m_total;
- int m_matches;
- int m_nonroms;
-};
-
-
-
-//**************************************************************************
-// MEDIA IDENTIFIER
-//**************************************************************************
-
-//-------------------------------------------------
-// media_identifier - constructor
-//-------------------------------------------------
-
-media_identifier::media_identifier(emu_options &options)
- : m_drivlist(options),
- m_total(0),
- m_matches(0),
- m_nonroms(0)
-{
-}
-
-
-//-------------------------------------------------
-// identify - identify a directory, ZIP file,
-// or raw file
-//-------------------------------------------------
-
-void media_identifier::identify(const char *filename)
-{
- // first try to open as a directory
- osd::directory::ptr directory = osd::directory::open(filename);
- if (directory)
- {
- // iterate over all files in the directory
- for (const osd::directory::entry *entry = directory->read(); entry != nullptr; entry = directory->read())
- if (entry->type == osd::directory::entry::entry_type::FILE)
- {
- std::string curfile = std::string(filename).append(PATH_SEPARATOR).append(entry->name);
- identify(curfile.c_str());
- }
-
- // close the directory and be done
- directory.reset();
- }
-
- // if that failed, and the filename ends with .zip, identify as a ZIP file
- if (core_filename_ends_with(filename, ".7z") || core_filename_ends_with(filename, ".zip"))
- {
- // first attempt to examine it as a valid _7Z file
- util::archive_file::ptr archive;
- util::archive_file::error err;
- if (core_filename_ends_with(filename, ".7z"))
- err = util::archive_file::open_7z(filename, archive);
- else
- err = util::archive_file::open_zip(filename, archive);
- if ((err == util::archive_file::error::NONE) && archive)
- {
- std::vector<std::uint8_t> data;
-
- // loop over entries in the .7z, skipping empty files and directories
- for (int i = archive->first_file(); i >= 0; i = archive->next_file())
- {
- const std::uint64_t length(archive->current_uncompressed_length());
- if (!archive->current_is_directory() && (length != 0) && (std::uint32_t(length) == length))
- {
- // decompress data into RAM and identify it
- try
- {
- data.resize(std::size_t(length));
- err = archive->decompress(&data[0], std::uint32_t(length));
- if (err == util::archive_file::error::NONE)
- identify_data(archive->current_name().c_str(), &data[0], length);
- }
- catch (...)
- {
- // resizing the buffer could cause a bad_alloc if archive contains large files
- }
- data.clear();
- }
- }
- }
-
- // clear out any cached files
- archive.reset();
- util::archive_file::cache_clear();
- }
-
- // otherwise, identify as a raw file
- else
- identify_file(filename);
-}
-
-
-//-------------------------------------------------
-// identify_file - identify a file
-//-------------------------------------------------
-
-void media_identifier::identify_file(const char *name)
-{
- // CHD files need to be parsed and their hashes extracted from the header
- if (core_filename_ends_with(name, ".chd"))
- {
- // output the name
- osd_printf_info("%-20s", core_filename_extract_base(name).c_str());
- m_total++;
-
- // attempt to open as a CHD; fail if not
- chd_file chd;
- chd_error err = chd.open(name);
- if (err != CHDERR_NONE)
- {
- osd_printf_info("NOT A CHD\n");
- m_nonroms++;
- return;
- }
-
- // error on writable CHDs
- if (!chd.compressed())
- {
- osd_printf_info("is a writeable CHD\n");
- return;
- }
-
- // otherwise, get the hash collection for this CHD
- util::hash_collection hashes;
- if (chd.sha1() != util::sha1_t::null)
- hashes.add_sha1(chd.sha1());
-
- // determine whether this file exists
- int found = find_by_hash(hashes, chd.logical_bytes());
- if (found == 0)
- osd_printf_info("NO MATCH\n");
- else
- m_matches++;
- }
-
- // all other files have their hashes computed directly
- else
- {
- // load the file and process if it opens and has a valid length
- UINT32 length;
- void *data;
- const osd_file::error filerr = util::core_file::load(name, &data, length);
- if (filerr == osd_file::error::NONE && length > 0)
- {
- identify_data(name, reinterpret_cast<UINT8 *>(data), length);
- osd_free(data);
- }
- }
-}
-
-
-//-------------------------------------------------
-// identify_data - identify a buffer full of
-// data; if it comes from a .JED file, parse the
-// fusemap into raw data first
-//-------------------------------------------------
-
-void media_identifier::identify_data(const char *name, const UINT8 *data, int length)
-{
- // if this is a '.jed' file, process it into raw bits first
- dynamic_buffer tempjed;
- jed_data jed;
- if (core_filename_ends_with(name, ".jed") && jed_parse(data, length, &jed) == JEDERR_NONE)
- {
- // now determine the new data length and allocate temporary memory for it
- length = jedbin_output(&jed, nullptr, 0);
- tempjed.resize(length);
- jedbin_output(&jed, &tempjed[0], length);
- data = &tempjed[0];
- }
-
- // compute the hash of the data
- util::hash_collection hashes;
- hashes.compute(data, length, util::hash_collection::HASH_TYPES_CRC_SHA1);
-
- // output the name
- m_total++;
- osd_printf_info("%-20s", core_filename_extract_base(name).c_str());
-
- // see if we can find a match in the ROMs
- int found = find_by_hash(hashes, length);
-
- // if we didn't find it, try to guess what it might be
- if (found == 0)
- osd_printf_info("NO MATCH\n");
-
- // if we did find it, count it as a match
- else
- m_matches++;
-}
-
-
-//-------------------------------------------------
-// find_by_hash - scan for a file in the list
-// of drivers by hash
-//-------------------------------------------------
-
-int media_identifier::find_by_hash(const util::hash_collection &hashes, int length)
-{
- int found = 0;
- std::unordered_set<std::string> listnames;
- std::unordered_set<std::string> shortnames;
-
- // iterate over drivers
- m_drivlist.reset();
- while (m_drivlist.next())
- {
- // iterate over devices, regions and files within the region
- for (device_t &device : device_iterator(m_drivlist.config().root_device()))
- {
- if (shortnames.insert(device.shortname()).second)
- {
- for (const rom_entry *region = rom_first_region(device); region != nullptr; region = rom_next_region(region))
- for (const rom_entry *rom = rom_first_file(region); rom != nullptr; rom = rom_next_file(rom))
- {
- util::hash_collection romhashes(ROM_GETHASHDATA(rom));
- if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP) && hashes == romhashes)
- {
- bool baddump = romhashes.flag(util::hash_collection::FLAG_BAD_DUMP);
-
- // output information about the match
- if (found)
- osd_printf_info(" ");
- osd_printf_info("= %s%-20s %-10s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), m_drivlist.driver().name, m_drivlist.driver().description);
- found++;
- }
- }
- }
- }
-
- // next iterate over softlists
- for (software_list_device &swlistdev : software_list_device_iterator(m_drivlist.config().root_device()))
- {
- if (listnames.insert(swlistdev.list_name()).second)
- {
- for (const software_info &swinfo : swlistdev.get_info())
- for (const software_part &part : swinfo.parts())
- for (const rom_entry *region = part.romdata().data(); region != nullptr; region = rom_next_region(region))
- for (const rom_entry *rom = rom_first_file(region); rom != nullptr; rom = rom_next_file(rom))
- {
- util::hash_collection romhashes(ROM_GETHASHDATA(rom));
- if (hashes == romhashes)
- {
- bool baddump = romhashes.flag(util::hash_collection::FLAG_BAD_DUMP);
-
- // output information about the match
- if (found)
- osd_printf_info(" ");
- osd_printf_info("= %s%-20s %s:%s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), swlistdev.list_name().c_str(), swinfo.shortname().c_str(), swinfo.longname().c_str());
- found++;
- }
- }
- }
- }
- }
-
- return found;
-}
-
-
-
void print_summary(
const media_auditor &auditor, media_auditor::summary summary, bool record_none_needed,
const char *type, const char *name, const char *parent,
@@ -581,95 +288,7 @@ void cli_frontend::start_execution(mame_machine_manager *manager,int argc, char
m_result = manager->execute();
}
}
-/*
-static const char* examples[] = {
- "db", "hello", "hallo", "hans", "hansekogge", "seamann", "quetzalcoatl", "quit", "power", NULL
-};
-
-void completionHook(char const* prefix, linenoiseCompletions* lc) {
- size_t i;
- for (i = 0; examples[i] != NULL; ++i) {
- if (strncmp(prefix, examples[i], strlen(prefix)) == 0) {
- linenoiseAddCompletion(lc, examples[i]);
- }
- }
-}
-*/
-
-void read_console(std::atomic<bool>& run, std::atomic<bool>& wait, std::string &cmdLine)
-{
- char const* prompt = "\x1b[1;36m[MAME]\x1b[0m> ";
-
- while (run.load())
- {
- while (wait.load())
- {
- using namespace std::chrono_literals;
- std::this_thread::sleep_for(100ms);
- }
- char* result = linenoise(prompt);
- if (result == NULL)
- {
- continue;
- }
-/* else if (!strncmp(result, "/history", 8)) {
- // Display the current history.
- for (int index = 0; ; ++index) {
- char* hist = linenoiseHistoryLine(index);
- if (hist == NULL) break;
- printf("%4d: %s\n", index, hist);
- free(hist);
- }
- }*/
- else if (*result == '\0') {
- free(result);
- continue;
- }
- cmdLine = std::string(result);
- linenoiseHistoryAdd(result);
- //prompt = "\x1b[1;36m[MAME]\x1b[0m \x1b[1;32m[test]\x1b[0m> ";
-
- free(result);
- wait.store(true);
- }
-}
-
-void cli_frontend::start_console()
-{
- linenoiseInstallWindowChangeHandler();
- std::string cmdLine = "";
- const char* file = "./history";
-
- linenoiseHistoryLoad(file);
- //linenoiseSetCompletionCallback(completionHook);
- printf(" _/ _/ _/_/ _/ _/ _/_/_/_/\n");
- printf(" _/_/ _/_/ _/ _/ _/_/ _/_/ _/ \n");
- printf(" _/ _/ _/ _/_/_/_/ _/ _/ _/ _/_/_/ \n");
- printf(" _/ _/ _/ _/ _/ _/ _/ \n");
- printf("_/ _/ _/ _/ _/ _/ _/_/_/_/ \n");
- printf("\n");
- printf("%s v%s\n%s\n\n", emulator_info::get_appname(), build_version, emulator_info::get_copyright_info());
-
- std::atomic<bool> run(true), wait(false);
- std::thread cinThread(read_console, std::ref(run), std::ref(wait), std::ref(cmdLine));
-
- while (run.load())
- {
- if (wait.load())
- {
- //printf("command %s\n", cmdLine.c_str());
- cmdLine.clear();
- wait.store(false);
- }
- }
-
- run.store(false);
- cinThread.join();
-
- linenoiseHistorySave(file);
- linenoiseHistoryFree();
-}
//-------------------------------------------------
// execute - execute a game via the standard
// command line interface
@@ -695,7 +314,8 @@ int cli_frontend::execute(int argc, char **argv)
if (m_options.console()) {
//manager->lua()->start_console();
- start_console();
+ console_frontend console(m_options, m_osd);
+ console.start_console();
} else {
start_execution(manager, argc, argv, option_errors);
}
diff --git a/src/frontend/mame/clifront.h b/src/frontend/mame/clifront.h
index aeceeace397..4e3958cd5c3 100644
--- a/src/frontend/mame/clifront.h
+++ b/src/frontend/mame/clifront.h
@@ -62,7 +62,6 @@ private:
void display_suggestions(const char *gamename);
void output_single_softlist(FILE *out, software_list_device &swlist);
void start_execution(mame_machine_manager *manager, int argc, char **argv, std::string &option_errors);
- void start_console();
// internal state
emu_options & m_options;
diff --git a/src/frontend/mame/console.cpp b/src/frontend/mame/console.cpp
new file mode 100644
index 00000000000..2d77380a94a
--- /dev/null
+++ b/src/frontend/mame/console.cpp
@@ -0,0 +1,185 @@
+// license:BSD-3-Clause
+// copyright-holders:Miodrag Milanovic
+/***************************************************************************
+
+ console.c
+
+ Console interface frontend for MAME.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "console.h"
+#include "linenoise-ng/include/linenoise.h"
+#include "mame.h"
+
+#include <atomic>
+#include <thread>
+
+static console_frontend *gConsole = nullptr;
+//-------------------------------------------------
+// console_frontend - constructor
+//-------------------------------------------------
+
+console_frontend::console_frontend(emu_options &options, osd_interface &osd)
+ : //m_options(options),
+ //m_osd(osd),
+ m_run(true),
+ m_wait(false),
+ m_prompt("\x1b[1;36m[MAME]\x1b[0m> ")
+{
+ using namespace std::placeholders;
+ m_commands.insert(std::make_pair("quit", std::bind(&console_frontend::cmd_quit, this, _1)));
+ m_commands.insert(std::make_pair("exit", std::bind(&console_frontend::cmd_quit, this, _1)));
+ gConsole = this;
+}
+
+
+//-------------------------------------------------
+// ~console_frontend - destructor
+//-------------------------------------------------
+
+console_frontend::~console_frontend()
+{
+}
+
+void console_frontend::completion(char const* prefix, linenoiseCompletions* lc)
+{
+ for (auto cmd : m_commands)
+ {
+ if (strncmp(prefix, cmd.first.c_str(), strlen(prefix)) == 0)
+ {
+ linenoiseAddCompletion(lc, cmd.first.c_str());
+ }
+ }
+}
+
+void console_frontend::cmd_quit(std::vector<std::string>& arg)
+{
+ printf("Exiting application\n");
+ m_run.store(false);
+ m_wait.store(false);
+}
+
+void console_frontend::read_console(std::string &cmdLine)
+{
+ while (m_run.load())
+ {
+ while (m_wait.load())
+ {
+ using namespace std::chrono_literals;
+ std::this_thread::sleep_for(100ms);
+ }
+ if (!m_run.load()) break;
+ char* result = linenoise(m_prompt.c_str());
+ if (result == NULL)
+ {
+ continue;
+ }
+ else if (*result == '\0') {
+ free(result);
+ continue;
+ }
+ cmdLine = std::string(result);
+ linenoiseHistoryAdd(result);
+ //m_prompt = "\x1b[1;36m[MAME]\x1b[0m \x1b[1;32m[test]\x1b[0m> ";
+
+ free(result);
+ m_wait.store(true);
+ }
+}
+
+void console_frontend::split_command(std::vector<std::string>& arg, std::string command)
+{
+ int len = command.length();
+ bool qot = false, sqot = false;
+ int arglen;
+ for (int i = 0; i < len; i++) {
+ int start = i;
+ if (command[i] == '\"') {
+ qot = true;
+ }
+ else if (command[i] == '\'') sqot = true;
+
+ if (qot) {
+ i++;
+ start++;
+ while (i<len && command[i] != '\"')
+ i++;
+ if (i<len)
+ qot = false;
+ arglen = i - start;
+ i++;
+ }
+ else if (sqot) {
+ i++;
+ while (i<len && command[i] != '\'')
+ i++;
+ if (i<len)
+ sqot = false;
+ arglen = i - start;
+ i++;
+ }
+ else {
+ while (i<len && command[i] != ' ')
+ i++;
+ arglen = i - start;
+ }
+ arg.push_back(command.substr(start, arglen));
+ }
+}
+
+static void completionHook(char const* prefix, linenoiseCompletions* lc)
+{
+ gConsole->completion(prefix, lc);
+}
+
+void console_frontend::start_console()
+{
+ linenoiseInstallWindowChangeHandler();
+ std::string cmdLine = "";
+ const char* file = "./history";
+
+ linenoiseHistoryLoad(file);
+ linenoiseSetCompletionCallback(completionHook);
+
+ // Display app info
+ printf(" _/ _/ _/_/ _/ _/ _/_/_/_/\n");
+ printf(" _/_/ _/_/ _/ _/ _/_/ _/_/ _/ \n");
+ printf(" _/ _/ _/ _/_/_/_/ _/ _/ _/ _/_/_/ \n");
+ printf(" _/ _/ _/ _/ _/ _/ _/ \n");
+ printf("_/ _/ _/ _/ _/ _/ _/_/_/_/ \n");
+ printf("\n");
+ printf("%s v%s\n%s\n\n", emulator_info::get_appname(), build_version, emulator_info::get_copyright_info());
+
+
+ std::thread cinThread(&console_frontend::read_console, this, std::ref(cmdLine));
+
+ while (m_run.load())
+ {
+ if (m_wait.load())
+ {
+ std::vector<std::string> arg;
+ split_command(arg, cmdLine);
+ auto command = m_commands.find(arg[0]);
+ if (command != m_commands.end())
+ {
+ command->second(arg);
+ }
+ else {
+ printf("Unknown command: %s\n", arg[0].c_str());
+ }
+ cmdLine.clear();
+ m_wait.store(false);
+ } else {
+ using namespace std::chrono_literals;
+ std::this_thread::sleep_for(100ms);
+ }
+ }
+
+ m_run.store(false);
+ cinThread.join();
+
+ linenoiseHistorySave(file);
+ linenoiseHistoryFree();
+}
diff --git a/src/frontend/mame/console.h b/src/frontend/mame/console.h
new file mode 100644
index 00000000000..c2bfb0c87a1
--- /dev/null
+++ b/src/frontend/mame/console.h
@@ -0,0 +1,44 @@
+// license:BSD-3-Clause
+// copyright-holders:Miodrag Milanovic
+/***************************************************************************
+
+ console.c
+
+ Console interface frontend for MAME.
+
+***************************************************************************/
+#ifndef MAME_FRONTEND_CONSOLE_H
+#define MAME_FRONTEND_CONSOLE_H
+
+#pragma once
+
+#include "emu.h"
+
+struct linenoiseCompletions;
+
+class console_frontend
+{
+public:
+ // construction/destruction
+ console_frontend(emu_options &options, osd_interface &osd);
+ ~console_frontend();
+
+ void start_console();
+ void completion(char const* prefix, linenoiseCompletions* lc);
+
+private:
+ void read_console(std::string &cmdLine);
+ void split_command(std::vector<std::string>& arg, std::string command);
+
+ void cmd_quit(std::vector<std::string>& arg);
+ // internal state
+ //emu_options & m_options;
+ //osd_interface & m_osd;
+ std::atomic<bool> m_run;
+ std::atomic<bool> m_wait;
+ std::string m_prompt;
+
+ std::unordered_map<std::string, std::function<void(std::vector<std::string>& arg)>> m_commands;
+};
+
+#endif /* MAME_FRONTEND_CONSOLE_H */
diff --git a/src/frontend/mame/media_ident.cpp b/src/frontend/mame/media_ident.cpp
new file mode 100644
index 00000000000..892e9091247
--- /dev/null
+++ b/src/frontend/mame/media_ident.cpp
@@ -0,0 +1,273 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
+/***************************************************************************
+
+ media_ident.c
+
+ Media identify.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "drivenum.h"
+#include "media_ident.h"
+#include "unzip.h"
+#include "jedparse.h"
+#include "softlist_dev.h"
+
+
+//**************************************************************************
+// MEDIA IDENTIFIER
+//**************************************************************************
+
+//-------------------------------------------------
+// media_identifier - constructor
+//-------------------------------------------------
+
+media_identifier::media_identifier(emu_options &options)
+ : m_drivlist(options),
+ m_total(0),
+ m_matches(0),
+ m_nonroms(0)
+{
+}
+
+
+//-------------------------------------------------
+// identify - identify a directory, ZIP file,
+// or raw file
+//-------------------------------------------------
+
+void media_identifier::identify(const char *filename)
+{
+ // first try to open as a directory
+ osd::directory::ptr directory = osd::directory::open(filename);
+ if (directory)
+ {
+ // iterate over all files in the directory
+ for (const osd::directory::entry *entry = directory->read(); entry != nullptr; entry = directory->read())
+ if (entry->type == osd::directory::entry::entry_type::FILE)
+ {
+ std::string curfile = std::string(filename).append(PATH_SEPARATOR).append(entry->name);
+ identify(curfile.c_str());
+ }
+
+ // close the directory and be done
+ directory.reset();
+ }
+
+ // if that failed, and the filename ends with .zip, identify as a ZIP file
+ if (core_filename_ends_with(filename, ".7z") || core_filename_ends_with(filename, ".zip"))
+ {
+ // first attempt to examine it as a valid _7Z file
+ util::archive_file::ptr archive;
+ util::archive_file::error err;
+ if (core_filename_ends_with(filename, ".7z"))
+ err = util::archive_file::open_7z(filename, archive);
+ else
+ err = util::archive_file::open_zip(filename, archive);
+ if ((err == util::archive_file::error::NONE) && archive)
+ {
+ std::vector<std::uint8_t> data;
+
+ // loop over entries in the .7z, skipping empty files and directories
+ for (int i = archive->first_file(); i >= 0; i = archive->next_file())
+ {
+ const std::uint64_t length(archive->current_uncompressed_length());
+ if (!archive->current_is_directory() && (length != 0) && (std::uint32_t(length) == length))
+ {
+ // decompress data into RAM and identify it
+ try
+ {
+ data.resize(std::size_t(length));
+ err = archive->decompress(&data[0], std::uint32_t(length));
+ if (err == util::archive_file::error::NONE)
+ identify_data(archive->current_name().c_str(), &data[0], length);
+ }
+ catch (...)
+ {
+ // resizing the buffer could cause a bad_alloc if archive contains large files
+ }
+ data.clear();
+ }
+ }
+ }
+
+ // clear out any cached files
+ archive.reset();
+ util::archive_file::cache_clear();
+ }
+
+ // otherwise, identify as a raw file
+ else
+ identify_file(filename);
+}
+
+
+//-------------------------------------------------
+// identify_file - identify a file
+//-------------------------------------------------
+
+void media_identifier::identify_file(const char *name)
+{
+ // CHD files need to be parsed and their hashes extracted from the header
+ if (core_filename_ends_with(name, ".chd"))
+ {
+ // output the name
+ osd_printf_info("%-20s", core_filename_extract_base(name).c_str());
+ m_total++;
+
+ // attempt to open as a CHD; fail if not
+ chd_file chd;
+ chd_error err = chd.open(name);
+ if (err != CHDERR_NONE)
+ {
+ osd_printf_info("NOT A CHD\n");
+ m_nonroms++;
+ return;
+ }
+
+ // error on writable CHDs
+ if (!chd.compressed())
+ {
+ osd_printf_info("is a writeable CHD\n");
+ return;
+ }
+
+ // otherwise, get the hash collection for this CHD
+ util::hash_collection hashes;
+ if (chd.sha1() != util::sha1_t::null)
+ hashes.add_sha1(chd.sha1());
+
+ // determine whether this file exists
+ int found = find_by_hash(hashes, chd.logical_bytes());
+ if (found == 0)
+ osd_printf_info("NO MATCH\n");
+ else
+ m_matches++;
+ }
+
+ // all other files have their hashes computed directly
+ else
+ {
+ // load the file and process if it opens and has a valid length
+ UINT32 length;
+ void *data;
+ const osd_file::error filerr = util::core_file::load(name, &data, length);
+ if (filerr == osd_file::error::NONE && length > 0)
+ {
+ identify_data(name, reinterpret_cast<UINT8 *>(data), length);
+ osd_free(data);
+ }
+ }
+}
+
+
+//-------------------------------------------------
+// identify_data - identify a buffer full of
+// data; if it comes from a .JED file, parse the
+// fusemap into raw data first
+//-------------------------------------------------
+
+void media_identifier::identify_data(const char *name, const UINT8 *data, int length)
+{
+ // if this is a '.jed' file, process it into raw bits first
+ dynamic_buffer tempjed;
+ jed_data jed;
+ if (core_filename_ends_with(name, ".jed") && jed_parse(data, length, &jed) == JEDERR_NONE)
+ {
+ // now determine the new data length and allocate temporary memory for it
+ length = jedbin_output(&jed, nullptr, 0);
+ tempjed.resize(length);
+ jedbin_output(&jed, &tempjed[0], length);
+ data = &tempjed[0];
+ }
+
+ // compute the hash of the data
+ util::hash_collection hashes;
+ hashes.compute(data, length, util::hash_collection::HASH_TYPES_CRC_SHA1);
+
+ // output the name
+ m_total++;
+ osd_printf_info("%-20s", core_filename_extract_base(name).c_str());
+
+ // see if we can find a match in the ROMs
+ int found = find_by_hash(hashes, length);
+
+ // if we didn't find it, try to guess what it might be
+ if (found == 0)
+ osd_printf_info("NO MATCH\n");
+
+ // if we did find it, count it as a match
+ else
+ m_matches++;
+}
+
+
+//-------------------------------------------------
+// find_by_hash - scan for a file in the list
+// of drivers by hash
+//-------------------------------------------------
+
+int media_identifier::find_by_hash(const util::hash_collection &hashes, int length)
+{
+ int found = 0;
+ std::unordered_set<std::string> listnames;
+ std::unordered_set<std::string> shortnames;
+
+ // iterate over drivers
+ m_drivlist.reset();
+ while (m_drivlist.next())
+ {
+ // iterate over devices, regions and files within the region
+ for (device_t &device : device_iterator(m_drivlist.config().root_device()))
+ {
+ if (shortnames.insert(device.shortname()).second)
+ {
+ for (const rom_entry *region = rom_first_region(device); region != nullptr; region = rom_next_region(region))
+ for (const rom_entry *rom = rom_first_file(region); rom != nullptr; rom = rom_next_file(rom))
+ {
+ util::hash_collection romhashes(ROM_GETHASHDATA(rom));
+ if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP) && hashes == romhashes)
+ {
+ bool baddump = romhashes.flag(util::hash_collection::FLAG_BAD_DUMP);
+
+ // output information about the match
+ if (found)
+ osd_printf_info(" ");
+ osd_printf_info("= %s%-20s %-10s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), m_drivlist.driver().name, m_drivlist.driver().description);
+ found++;
+ }
+ }
+ }
+ }
+
+ // next iterate over softlists
+ for (software_list_device &swlistdev : software_list_device_iterator(m_drivlist.config().root_device()))
+ {
+ if (listnames.insert(swlistdev.list_name()).second)
+ {
+ for (const software_info &swinfo : swlistdev.get_info())
+ for (const software_part &part : swinfo.parts())
+ for (const rom_entry *region = part.romdata().data(); region != nullptr; region = rom_next_region(region))
+ for (const rom_entry *rom = rom_first_file(region); rom != nullptr; rom = rom_next_file(rom))
+ {
+ util::hash_collection romhashes(ROM_GETHASHDATA(rom));
+ if (hashes == romhashes)
+ {
+ bool baddump = romhashes.flag(util::hash_collection::FLAG_BAD_DUMP);
+
+ // output information about the match
+ if (found)
+ osd_printf_info(" ");
+ osd_printf_info("= %s%-20s %s:%s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), swlistdev.list_name().c_str(), swinfo.shortname().c_str(), swinfo.longname().c_str());
+ found++;
+ }
+ }
+ }
+ }
+ }
+
+ return found;
+}
+
diff --git a/src/frontend/mame/media_ident.h b/src/frontend/mame/media_ident.h
new file mode 100644
index 00000000000..93ff8caad52
--- /dev/null
+++ b/src/frontend/mame/media_ident.h
@@ -0,0 +1,42 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
+/***************************************************************************
+
+ media_ident.h
+
+ Media identify.
+
+***************************************************************************/
+#ifndef MAME_FRONTEND_MEDIA_IDENT_H
+#define MAME_FRONTEND_MEDIA_IDENT_H
+
+// media_identifier class identifies media by hash via a search in
+// the driver database
+class media_identifier
+{
+public:
+ // construction/destruction
+ media_identifier(emu_options &options);
+
+ // getters
+ int total() const { return m_total; }
+ int matches() const { return m_matches; }
+ int nonroms() const { return m_nonroms; }
+
+ // operations
+ void reset() { m_total = m_matches = m_nonroms = 0; }
+ void identify(const char *name);
+ void identify_file(const char *name);
+ void identify_data(const char *name, const UINT8 *data, int length);
+ int find_by_hash(const util::hash_collection &hashes, int length);
+
+private:
+ // internal state
+ driver_enumerator m_drivlist;
+ int m_total;
+ int m_matches;
+ int m_nonroms;
+};
+
+
+#endif /* MAME_FRONTEND_MEDIA_IDENT_H */
diff --git a/src/frontend/mame/ui/dirmenu.cpp b/src/frontend/mame/ui/dirmenu.cpp
index 36cf6dbd773..77d035c83c4 100644
--- a/src/frontend/mame/ui/dirmenu.cpp
+++ b/src/frontend/mame/ui/dirmenu.cpp
@@ -33,6 +33,7 @@ struct folders_entry
static const folders_entry s_folders[] =
{
{ __("ROMs"), OPTION_MEDIAPATH, ADDING },
+ { __("Software Media"), OPTION_SWPATH, CHANGE },
{ __("UI"), OPTION_UI_PATH, CHANGE },
{ __("Language"), OPTION_LANGUAGEPATH, CHANGE },
{ __("Samples"), OPTION_SAMPLEPATH, ADDING },
diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt
index b3deb7cf62d..fee8dd43390 100644
--- a/src/mame/arcade.flt
+++ b/src/mame/arcade.flt
@@ -724,6 +724,7 @@ missb2.cpp
missile.cpp
mitchell.cpp
mjkjidai.cpp
+mjsenpu.cpp
mjsister.cpp
mlanding.cpp
mmagic.cpp
diff --git a/src/mame/drivers/elecbowl.cpp b/src/mame/drivers/elecbowl.cpp
deleted file mode 100644
index 297288fcbde..00000000000
--- a/src/mame/drivers/elecbowl.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap, Kevin Horton
-/***************************************************************************
-
- ** subclass of hh_tms1k_state (includes/hh_tms1k.h, drivers/hh_tms1k.cpp) **
-
- Marx Series 300 Electronic Bowling Game
- Main board:
- * TMS1100NLL MP3403 DBS 7836 SINGAPORE (no decap)
- * 4*SN75492 quad segment driver, 2*SN74259 8-line demultiplexer,
- 2*CD4043 quad r/s input latch
- * 5 7seg LEDs, 15 lamps(10 lamps projected to bowling pins reflection),
- 1bit-sound with crude volume control
- * edge connector to sensors(switches trigger when ball rolls over)
- and other inputs
-
- lamp translation table: SN74259.u5(mux 1) goes to MAME output lamp5x,
- SN74259.u6(mux 2) goes to MAME output lamp6x. u1-u3 are SN75492 ICs,
- where other: u1 A2 is N/C, u3 A1 is from O2 and goes to digits seg C.
-
- u5 Q0 -> u1 A4 -> L2 (pin #2) u6 Q0 -> u3 A4 -> L1 (pin #1)
- u5 Q1 -> u1 A5 -> L4 (pin #4) u6 Q1 -> u3 A5 -> L5 (pin #5)
- u5 Q2 -> u1 A6 -> L7 (pin #7) u6 Q2 -> u2 A3 -> L11 (player 1)
- u5 Q3 -> u1 A1 -> L8 (pin #8) u6 Q3 -> u2 A2 -> L12 (player 2)
- u5 Q4 -> u3 A2 -> L3 (pin #3) u6 Q4 -> u2 A1 -> L15 (?)
- u5 Q5 -> u2 A6 -> L6 (pin #6) u6 Q5 -> u3 A6 -> L14 (?)
- u5 Q6 -> u2 A5 -> L10 (pin #10) u6 Q6 -> u1 A3 -> L13 (spare)
- u5 Q7 -> u2 A4 -> L9 (pin #9) u6 Q7 -> u3 A3 -> digit 4 B+C
-
-***************************************************************************/
-
-#include "includes/hh_tms1k.h"
-#include "elecbowl.lh"
-
-
-class elecbowl_state : public hh_tms1k_state
-{
-public:
- elecbowl_state(const machine_config &mconfig, device_type type, const char *tag)
- : hh_tms1k_state(mconfig, type, tag)
- { }
-
- void prepare_display();
- DECLARE_WRITE16_MEMBER(write_r);
- DECLARE_WRITE16_MEMBER(write_o);
- DECLARE_READ8_MEMBER(read_k);
-};
-
-
-/***************************************************************************
-
- Display
-
-***************************************************************************/
-
-void elecbowl_state::prepare_display()
-{
- // standard 7segs
- for (int y = 0; y < 4; y++)
- {
- m_display_segmask[y] = 0x7f;
- m_display_state[y] = (m_r >> (y + 4) & 1) ? m_o : 0;
- }
-
- // lamp muxes
- UINT8 mask = 1 << (m_o & 7);
- UINT8 d = (m_r & 2) ? mask : 0;
- if (~m_r & 1)
- m_display_state[5] = (m_display_state[5] & ~mask) | d;
- if (~m_r & 4)
- m_display_state[6] = (m_display_state[6] & ~mask) | d;
-
- // digit 4 is from mux2 Q7
- m_display_segmask[4] = 6;
- m_display_state[4] = (m_display_state[6] & 0x80) ? 6 : 0;
-
- set_display_size(8, 7);
- display_update();
-}
-
-
-
-/***************************************************************************
-
- I/O
-
-***************************************************************************/
-
-WRITE16_MEMBER(elecbowl_state::write_r)
-{
- // R5-R7,R10: input mux
- m_inp_mux = (data >> 5 & 7) | (data >> 7 & 8);
-
- // R9: speaker out
- // R3,R8: speaker volume..
- m_speaker->level_w(data >> 9 & 1);
-
- // R4-R7: select digit
- // R0,R2: lamp mux1,2 _enable
- // R1: lamp muxes state
- m_r = data;
- prepare_display();
-}
-
-WRITE16_MEMBER(elecbowl_state::write_o)
-{
- //if (data & 0x80) printf("%X ",data&0x7f);
-
- // O0-O2: lamp muxes select
- // O0-O6: digit segments A-G
- // O7: N/C
- m_o = data & 0x7f;
- prepare_display();
-}
-
-READ8_MEMBER(elecbowl_state::read_k)
-{
- // K: multiplexed inputs
- return read_inputs(4);
-}
-
-
-
-/***************************************************************************
-
- Inputs
-
-***************************************************************************/
-
-static INPUT_PORTS_START( elecbowl )
- PORT_START("IN.0") // R5
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
-
- PORT_START("IN.1") // R6
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) // reset/test?
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) // reset/test?
-
- PORT_START("IN.2") // R7
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)
-
- PORT_START("IN.3") // R10
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) // 2 players sw?
-INPUT_PORTS_END
-
-
-
-/***************************************************************************
-
- Machine Config
-
-***************************************************************************/
-
-// output PLA is not decapped
-static const UINT16 elecbowl_output_pla[0x20] =
-{
- lA+lB+lC+lD+lE+lF, // 0
- lB+lC, // 1
- lA+lB+lG+lE+lD, // 2
- lA+lB+lG+lC+lD, // 3
- lF+lB+lG+lC, // 4
- lA+lF+lG+lC+lD, // 5
- lA+lF+lG+lC+lD+lE, // 6
- lA+lB+lC, // 7
- lA+lB+lC+lD+lE+lF+lG, // 8
- lA+lB+lG+lF+lC+lD, // 9
-
- 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
- 0,1,2,3,4,5,6,7, // lamp muxes select
- 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
-};
-
-static MACHINE_CONFIG_START( elecbowl, elecbowl_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 350000) // approximation - RC osc. R=33K, C=100pf
- MCFG_TMS1XXX_OUTPUT_PLA(elecbowl_output_pla)
- MCFG_TMS1XXX_READ_K_CB(READ8(elecbowl_state, read_k))
- MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecbowl_state, write_r))
- MCFG_TMS1XXX_WRITE_O_CB(WRITE16(elecbowl_state, write_o))
-
- MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
- MCFG_DEFAULT_LAYOUT(layout_elecbowl)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
-MACHINE_CONFIG_END
-
-
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
-ROM_START( elecbowl )
- ROM_REGION( 0x0800, "maincpu", 0 )
- ROM_LOAD( "mp3403.u9", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
-
- ROM_REGION( 867, "maincpu:mpla", 0 )
- ROM_LOAD( "tms1100_common3_micro.pla", 0, 867, BAD_DUMP CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) // not verified
- ROM_REGION( 365, "maincpu:opla", 0 )
- ROM_LOAD( "tms1100_elecbowl_output.pla", 0, 365, NO_DUMP )
-ROM_END
-
-
-CONS( 1978, elecbowl, 0, 0, elecbowl, elecbowl, driver_device, 0, "Marx", "Electronic Bowling (Marx)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp
index e0484f7094b..f61f0b14743 100644
--- a/src/mame/drivers/fidel6502.cpp
+++ b/src/mame/drivers/fidel6502.cpp
@@ -19,6 +19,7 @@
- EAG missing bankswitch? where is the 2nd half of the 32KB ROM used, if at all?
- Why does fexcelp give error beeps at start? As if chessboard buttons are
pressed (button logic is not inverted). It works fine after pressing clear.
+ This also happens on real hardware if you manually upgrade model 6080.
******************************************************************************
@@ -346,6 +347,24 @@ CPU D6 to W: (model 6092, tied to VCC otherwise)
******************************************************************************
+Designer series:
+
+Designer 2000 (model 6102)
+----------------
+8KB RAM(KM6264AL-10), 32KB ROM(AMI 101.1077A01)
+Ricoh RP65C02G CPU, 3MHz XTAL
+PCB label 510-1129A01
+basically same as Excellence hardware, reskinned board
+
+Designer 1500 is on Z80 hardware
+
+Designer 2100 Display (model 6106)
+----------------
+TODO
+
+
+******************************************************************************
+
Chesster (model 6120)
There is also a German version titled Kishon Chesster
----------------
@@ -374,6 +393,7 @@ I/O is via TTL, see source code for more info
// internal artwork
#include "fidel_chesster.lh" // clickable
#include "fidel_csc.lh" // clickable, with preliminary boardpieces simulation
+#include "fidel_des2000.lh" // clickable
#include "fidel_eag.lh" // clickable
#include "fidel_eas.lh" // clickable
#include "fidel_ex.lh" // clickable
@@ -1634,6 +1654,15 @@ static MACHINE_CONFIG_DERIVED( fexcelp, fexcel )
MCFG_CPU_PROGRAM_MAP(fexcelp_map)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( fdes2000, fexcel )
+
+ /* basic machine hardware */
+ MCFG_CPU_REPLACE("maincpu", R65C02, XTAL_3MHz) // RP65C02G
+ MCFG_CPU_PROGRAM_MAP(fexcelp_map)
+
+ MCFG_DEFAULT_LAYOUT(layout_fidel_des2000)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( fexcelv, fexcelb )
/* sound hardware */
@@ -1987,6 +2016,11 @@ ROM_START( fexcelp )
ROM_LOAD("par_ex.ic5", 0x8000, 0x8000, CRC(274d6aff) SHA1(c8d943b2f15422ac62f539b568f5509cbce568a3) ) // GI 27C256, no label
ROM_END
+ROM_START( fdes2000 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("101-1077a01.ic5", 0x8000, 0x8000, CRC(62006320) SHA1(1d6370973dbae42c54639b261cc81e32cdfc1d5d) ) // AMI
+ROM_END
+
ROM_START( fexcelv )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) // PCB1, M27256
@@ -2052,9 +2086,11 @@ CONS( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0
CONS( 1985, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "The Excellence (model 6080)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1985, fexcela, fexcel, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "The Excellence (model EP12)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1986, fexcelp, fexcel, 0, fexcelp, fexcel, driver_device, 0, "Fidelity Electronics", "The Par Excellence (model 6083)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, fexcelb, fexcel, 0, fexcelb, fexcelb, driver_device, 0, "Fidelity Electronics", "The Excellence (model 6080B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence (model 6092)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1987, fexceld, fexcel, 0, fexceld, fexcelb, driver_device, 0, "Fidelity Electronics", "Excel Display (model 6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1986, fexcelp, fexcel, 0, fexcelp, fexcel, driver_device, 0, "Fidelity Electronics", "The Par Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1987, fexceld, fexcel, 0, fexceld, fexcelb, driver_device, 0, "Fidelity Electronics", "Excel Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+
+CONS( 1989, fdes2000, 0, 0, fdes2000, fexcel, driver_device, 0, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // Excellence series hardware
CONS( 1990, chesster, 0, 0, chesster, chesster, fidel6502_state, chesster, "Fidelity Electronics", "Chesster Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp
index f92d8ccdc02..8da6e77c0a0 100644
--- a/src/mame/drivers/fidelz80.cpp
+++ b/src/mame/drivers/fidelz80.cpp
@@ -18,6 +18,8 @@
pins emulation(with pullup/pulldown), for now there's a workaround which
can be removed together with this note when we implement it across MAME.
- VBRC card scanner
+ - VBRC MCU T1 is unknown
+ - Z80 WAIT pin is not fully emulated, affecting VBRC speech busy state
Read the official manual(s) on how to play.
@@ -354,7 +356,7 @@ A detailed description of the hardware can be found also in the patent 4,373,719
Voice Sensory Chess Challenger (VSC)
------------------------------------
-The display/button/LED/speech technology is identical to the above product.
+The display/button/LED/speech technology is identical to Fidelity CSC.
Only the CPU board was changed. As such, it works the same but is interfaced
to different port chips this time.
@@ -498,9 +500,9 @@ expect that the software reads these once on startup only.
#include "includes/fidelz80.h"
// internal artwork
-#include "fidel_cc.lh"
-#include "fidel_bcc.lh"
-#include "fidel_vcc.lh"
+#include "fidel_cc.lh" // clickable
+#include "fidel_bcc.lh" // clickable
+#include "fidel_vcc.lh" // clickable
#include "fidel_vbrc.lh"
#include "fidel_vsc.lh" // clickable
@@ -1236,19 +1238,19 @@ static INPUT_PORTS_START( bcc )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("d4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_P)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("g7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
PORT_START("IN.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CB") PORT_CODE(KEYCODE_SPACE)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("b2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
PORT_START("IN.3")
@@ -1512,7 +1514,7 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( vsc, fidelz80_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz)
+ MCFG_CPU_ADD("maincpu", Z80, 3900000) // 3.9MHz resonator
MCFG_CPU_PROGRAM_MAP(vsc_map)
MCFG_CPU_IO_MAP(vsc_io)
MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80base_state, nmi_line_pulse, 600) // 555 timer, approx 600hz
@@ -1734,18 +1736,18 @@ ROM_END
******************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
-CONS( 1978, cc10, 0, 0, cc10, cc10, driver_device, 0, "Fidelity Electronics", "Chess Challenger 10 (rev. B)", MACHINE_SUPPORTS_SAVE )
-CONS( 1979, cc7, 0, 0, bcc, bcc, driver_device, 0, "Fidelity Electronics", "Chess Challenger 7 (rev. B)", MACHINE_SUPPORTS_SAVE )
+CONS( 1978, cc10, 0, 0, cc10, cc10, driver_device, 0, "Fidelity Electronics", "Chess Challenger 10 (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1979, cc7, 0, 0, bcc, bcc, driver_device, 0, "Fidelity Electronics", "Chess Challenger 7 (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1979, vcc, 0, 0, vcc, vcc, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE )
-CONS( 1979, vccsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE )
-CONS( 1979, vccg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE )
-CONS( 1979, vccfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE )
+CONS( 1979, vcc, 0, 0, vcc, vcc, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1979, vccsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1979, vccg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1979, vccfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1980, uvc, vcc, 0, vcc, vcc, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE )
-CONS( 1980, uvcsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE )
-CONS( 1980, uvcg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE )
-CONS( 1980, uvcfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, uvc, vcc, 0, vcc, vcc, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1980, uvcsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1980, uvcg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1980, uvcfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1980, vsc, 0, 0, vsc, vsc, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1980, vscsp, vsc, 0, vsc, vscg, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
@@ -1753,4 +1755,4 @@ CONS( 1980, vscg, vsc, 0, vsc, vscg, driver_device, 0, "Fideli
CONS( 1980, vscfr, vsc, 0, vsc, vscg, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, vbrc, 0, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-CONS( 1980, bridgec3, vbrc, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Voice Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+CONS( 1980, bridgec3, vbrc, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/wildfire.cpp b/src/mame/drivers/hh_amis2k.cpp
index fcb708de312..1cf99b74180 100644
--- a/src/mame/drivers/wildfire.cpp
+++ b/src/mame/drivers/hh_amis2k.cpp
@@ -13,6 +13,8 @@
TODO:
+ - driver needs a cleanup when another AMI S2000 handheld gets dumped/added
+
- sound emulation could still be improved
- when the game strobes a led faster, it should appear brighter, for example when
the ball hits one of the bumpers
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 80bc065cecc..6c85032dc74 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -7,8 +7,6 @@
part of a series is (or will be) in its own driver, see:
- hh_tms1k: here
- microvsn: Milton Bradley MicroVision
- - mbdtower: Milton Bradley Dark Tower
- - elecbowl: Marx Electronic Bowling
- ticalc1x: TI TMS1K-based calculators
- tispellb: TI Spelling B series gen. 1
- tispeak: TI Speak & Spell series gen. 1
@@ -21,14 +19,15 @@
@CP0904A TMS0970 1977, Milton Bradley Comp IV
@MP0905B TMS0970 1977, Parker Brothers Codename Sector
*MP0057 TMS1000 1978, APH Student Speech+ (same ROM contents as TSI Speech+?)
- @MP0158 TMS1000 1979, Entex Soccer
+ @MP0158 TMS1000 1979, Entex Soccer (6003)
@MP0163 TMS1000 1979, A-One LSI Match Number/LJN Electronic Concentration
*MP0168 TMS1000 1979, Conic Basketball/Tandy Sports Arena
@MP0170 TMS1000 1979, Conic Football
- *MP0230 TMS1000? 1980, Entex Blast It
+ *MP0230 TMS1000? 1980, Entex Blast It (6015)
@MP0914 TMS1000 1979, Entex Baseball 1
@MP0919 TMS1000 1979, Tiger Copy Cat (model 7-520)
- @MP0923 TMS1000 1979, Entex Baseball 2
+ *MP0920 TMS1000 1979, Entex Space Battle (6004)
+ @MP0923 TMS1000 1979, Entex Baseball 2 (6002)
@MP1030 TMS1100 1980, APF Mathemagician
@MP1133 TMS1470 1979, Kosmos Astro
@MP1180 TMS1100 1980, Tomy Power House Pinball
@@ -37,17 +36,17 @@
@MP1193 TMS1100 1980, Tandy Championship Football (model 60-2150)
@MP1204 TMS1100 1980, Entex Baseball 3 (6007)
*MP1209 TMS1100 1980, U.S. Games Space Cruiser/Strategy Football
- @MP1211 TMS1100 1980, Entex Space Invader
+ @MP1211 TMS1100 1980, Entex Space Invader (6012)
@MP1218 TMS1100 1980, Entex Basketball 2 (6010)
@MP1219 TMS1100 1980, U.S. Games Super Sports-4
- @MP1221 TMS1100 1980, Entex Raise The Devil
+ @MP1221 TMS1100 1980, Entex Raise The Devil (6011)
*MP1296 TMS1100? 1982, Entex Black Knight
@MP1312 TMS1100 1983, Gakken FX-Micom R-165/Tandy Radio Shack Science Fair Microcomputer Trainer
*MP1359 TMS1100? 1985, Capsela CRC2000
@MP1525 TMS1170 1980, Coleco Head to Head Baseball
*MP1604 ? 1981, Hanzawa Twinvader III/Tandy Cosmic Fire Away 3000 (? note: VFD-capable)
@MP1801 TMS1700 1981, Tiger Ditto/Tandy Pocket Repeat (model 60-2152)
- @MP2105 TMS1370 1979, Gakken/Entex Poker
+ @MP2105 TMS1370 1979, Gakken/Entex Poker (6005)
*MP2139 TMS1370? 1982, Gakken Galaxy Invader 1000
@MP2726 TMS1040 1979, Tomy Break Up
*MP2788 TMS1040? 1980, Bandai Flight Time (? note: VFD-capable)
@@ -61,7 +60,7 @@
*MP3320A TMS1000 1979, Coleco Head to Head Basketball
*M32001 TMS1000 1981, Coleco Quiz Wiz Challenger (note: MP3398, MP3399, M3200x?)
*M32018 TMS1000 1990, unknown device, decap/dump is available
- MP3403 TMS1100 1978, Marx Electronic Bowling -> elecbowl.cpp
+ @MP3403 TMS1100 1978, Marx Electronic Bowling
@MP3404 TMS1100 1978, Parker Brothers Merlin
@MP3405 TMS1100 1979, Coleco Amaze-A-Tron
@MP3415 TMS1100 1978, Coleco Electronic Quarterback
@@ -94,11 +93,11 @@
@MP7313 TMS1400 1980, Parker Brothers Bank Shot
@MP7314 TMS1400 1980, Parker Brothers Split Second
MP7324 TMS1400 1985, Tiger K28/Coleco Talking Teacher -> tispeak.cpp
- MP7332 TMS1400 1981, Milton Bradley Dark Tower -> mbdtower.cpp
+ @MP7332 TMS1400 1981, Milton Bradley Dark Tower
@MP7334 TMS1400 1981, Coleco Total Control 4
@MP7351 TMS1400 1982, Parker Brothers Master Merlin
@MP7551 TMS1670 1980, Entex Color Football 4 (6009)
- @MPF553 TMS1670 1980, Gakken/Entex Jackpot: Gin Rummy & Black Jack (note: assume F to be a misprint)
+ @MPF553 TMS1670 1980, Gakken/Entex Jackpot: Gin Rummy & Black Jack (6008) (note: assume F to be a misprint)
*MP7573 TMS1670? 1981, Entex Select-a-Game cartridge: Football 4 (? note: 40-pin, VFD-capable)
inconsistent:
@@ -121,6 +120,7 @@
- tbreakup: some of the leds flicker (rom and PLAs doublechecked)
- bship discrete sound, netlist is documented
- finish bshipb SN76477 sound
+ - improve elecbowl driver
***************************************************************************/
@@ -150,6 +150,7 @@
#include "ebaskb2.lh"
#include "efootb4.lh"
#include "einvader.lh" // test-layout(but still playable)
+#include "elecbowl.lh"
#include "elecdet.lh"
#include "esoccer.lh"
#include "fxmcr165.lh" // clickable
@@ -161,6 +162,7 @@
#include "lostreas.lh" // clickable
#include "matchnum.lh" // clickable
#include "mathmagi.lh"
+#include "mbdtower.lh" // clickable
#include "mdndclab.lh" // clickable
#include "merlin.lh" // clickable
#include "mmerlin.lh" // clickable
@@ -642,7 +644,6 @@ static INPUT_PORTS_START( mathmagi )
PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-
// output PLA is not decapped
static const UINT16 mathmagi_output_pla[0x20] =
{
@@ -931,7 +932,6 @@ static INPUT_PORTS_START( zodiac )
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-
// output PLA is not decapped
static const UINT16 zodiac_output_pla[0x20] =
{
@@ -1849,7 +1849,6 @@ static INPUT_PORTS_START( cnfball2 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-
// output PLA is not decapped
static const UINT16 cnfball2_output_pla[0x20] =
{
@@ -3029,7 +3028,6 @@ static INPUT_PORTS_START( gpoker )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Bet") // BT
INPUT_PORTS_END
-
void gpoker_state::machine_reset()
{
hh_tms1k_state::machine_reset();
@@ -3690,6 +3688,175 @@ MACHINE_CONFIG_END
/***************************************************************************
+ Marx Series 300 Electronic Bowling Game
+ * TMS1100NLL MP3403 DBS 7836 SINGAPORE (no decap)
+ * 4*SN75492 quad segment driver, 2*SN74259 8-line demultiplexer,
+ 2*CD4043 quad r/s input latch
+ * 5 7seg LEDs, 15 lamps(10 lamps projected to bowling pins reflection),
+ 1bit-sound with crude volume control
+ * edge connector to sensors(switches trigger when ball rolls over)
+ and other inputs
+
+ lamp translation table: SN74259.u5(mux 1) goes to MAME output lamp5x,
+ SN74259.u6(mux 2) goes to MAME output lamp6x. u1-u3 are SN75492 ICs,
+ where other: u1 A2 is N/C, u3 A1 is from O2 and goes to digits seg C.
+
+ u5 Q0 -> u1 A4 -> L2 (pin #2) u6 Q0 -> u3 A4 -> L1 (pin #1)
+ u5 Q1 -> u1 A5 -> L4 (pin #4) u6 Q1 -> u3 A5 -> L5 (pin #5)
+ u5 Q2 -> u1 A6 -> L7 (pin #7) u6 Q2 -> u2 A3 -> L11 (player 1)
+ u5 Q3 -> u1 A1 -> L8 (pin #8) u6 Q3 -> u2 A2 -> L12 (player 2)
+ u5 Q4 -> u3 A2 -> L3 (pin #3) u6 Q4 -> u2 A1 -> L15 (?)
+ u5 Q5 -> u2 A6 -> L6 (pin #6) u6 Q5 -> u3 A6 -> L14 (?)
+ u5 Q6 -> u2 A5 -> L10 (pin #10) u6 Q6 -> u1 A3 -> L13 (spare)
+ u5 Q7 -> u2 A4 -> L9 (pin #9) u6 Q7 -> u3 A3 -> digit 4 B+C
+
+***************************************************************************/
+
+class elecbowl_state : public hh_tms1k_state
+{
+public:
+ elecbowl_state(const machine_config &mconfig, device_type type, const char *tag)
+ : hh_tms1k_state(mconfig, type, tag)
+ { }
+
+ void prepare_display();
+ DECLARE_WRITE16_MEMBER(write_r);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_READ8_MEMBER(read_k);
+};
+
+// handlers
+
+void elecbowl_state::prepare_display()
+{
+ // standard 7segs
+ for (int y = 0; y < 4; y++)
+ {
+ m_display_segmask[y] = 0x7f;
+ m_display_state[y] = (m_r >> (y + 4) & 1) ? m_o : 0;
+ }
+
+ // lamp muxes
+ UINT8 mask = 1 << (m_o & 7);
+ UINT8 d = (m_r & 2) ? mask : 0;
+ if (~m_r & 1)
+ m_display_state[5] = (m_display_state[5] & ~mask) | d;
+ if (~m_r & 4)
+ m_display_state[6] = (m_display_state[6] & ~mask) | d;
+
+ // digit 4 is from mux2 Q7
+ m_display_segmask[4] = 6;
+ m_display_state[4] = (m_display_state[6] & 0x80) ? 6 : 0;
+
+ set_display_size(8, 7);
+ display_update();
+}
+
+WRITE16_MEMBER(elecbowl_state::write_r)
+{
+ // R5-R7,R10: input mux
+ m_inp_mux = (data >> 5 & 7) | (data >> 7 & 8);
+
+ // R9: speaker out
+ // R3,R8: speaker volume..
+ m_speaker->level_w(data >> 9 & 1);
+
+ // R4-R7: select digit
+ // R0,R2: lamp mux1,2 _enable
+ // R1: lamp muxes state
+ m_r = data;
+ prepare_display();
+}
+
+WRITE16_MEMBER(elecbowl_state::write_o)
+{
+ //if (data & 0x80) printf("%X ",data&0x7f);
+
+ // O0-O2: lamp muxes select
+ // O0-O6: digit segments A-G
+ // O7: N/C
+ m_o = data & 0x7f;
+ prepare_display();
+}
+
+READ8_MEMBER(elecbowl_state::read_k)
+{
+ // K: multiplexed inputs
+ return read_inputs(4);
+}
+
+
+// config
+
+static INPUT_PORTS_START( elecbowl )
+ PORT_START("IN.0") // R5
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4)
+
+ PORT_START("IN.1") // R6
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) // reset/test?
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) // reset/test?
+
+ PORT_START("IN.2") // R7
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F)
+
+ PORT_START("IN.3") // R10
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Z)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_X)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) // 2 players sw?
+INPUT_PORTS_END
+
+// output PLA is not decapped
+static const UINT16 elecbowl_output_pla[0x20] =
+{
+ lA+lB+lC+lD+lE+lF, // 0
+ lB+lC, // 1
+ lA+lB+lG+lE+lD, // 2
+ lA+lB+lG+lC+lD, // 3
+ lF+lB+lG+lC, // 4
+ lA+lF+lG+lC+lD, // 5
+ lA+lF+lG+lC+lD+lE, // 6
+ lA+lB+lC, // 7
+ lA+lB+lC+lD+lE+lF+lG, // 8
+ lA+lB+lG+lF+lC+lD, // 9
+
+ 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0,1,2,3,4,5,6,7, // lamp muxes select
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+static MACHINE_CONFIG_START( elecbowl, elecbowl_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS1100, 350000) // approximation - RC osc. R=33K, C=100pf
+ MCFG_TMS1XXX_OUTPUT_PLA(elecbowl_output_pla)
+ MCFG_TMS1XXX_READ_K_CB(READ8(elecbowl_state, read_k))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecbowl_state, write_r))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(elecbowl_state, write_o))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_elecbowl)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+
+
+/***************************************************************************
+
Mattel Dungeons & Dragons - Computer Labyrinth Game
* TMS1100 M34012-N2LL (die label M34012)
* 72 buttons, no LEDs, 1-bit sound
@@ -3739,52 +3906,52 @@ READ8_MEMBER(mdndclab_state::read_k)
static INPUT_PORTS_START( mdndclab )
PORT_START("IN.0") // O0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square a4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square a3")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square a2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square a1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.1") // O1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square b4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square b3")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square b2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square b1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.2") // O2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square c4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square c3")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square c2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square c1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.3") // O3
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square d4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square d3")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square d2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square d1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.4") // O4
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square e4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square e3")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square e2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square e1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.5") // O5
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square f4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square f3")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square f2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square f1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.6") // O6
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square g4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square g3")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square g2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square g1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.7") // O7
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square h4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square h3")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square h2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square h1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.8") // R0
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Wall / Door")
@@ -3793,52 +3960,52 @@ static INPUT_PORTS_START( mdndclab )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Warrior 2 / Treasure")
PORT_START("IN.9") // R1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square a8")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square a7")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square a6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square a5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.10") // R2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square b8")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square b7")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square b6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square b5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.11") // R3
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square c8")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square c7")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square c6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square c5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.12") // R4
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square d8")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square d7")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square d6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square d5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.13") // R5
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square e8")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square e7")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square e6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square e5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.14") // R6
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square f8")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square f7")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square f6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square f5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.15") // R7
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square g8")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square g7")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square g6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square g5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.16") // R8
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square h8")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square h7")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square h6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square h5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Board Sensor")
PORT_START("IN.17") // R9
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Switch Key")
@@ -3847,7 +4014,6 @@ static INPUT_PORTS_START( mdndclab )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Dragon Attacks / Dragon Wakes")
INPUT_PORTS_END
-
static MACHINE_CONFIG_START( mdndclab, mdndclab_state )
/* basic machine hardware */
@@ -4634,7 +4800,6 @@ static INPUT_PORTS_START( bigtrak )
PORT_BIT( 0x0b, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-
void bigtrak_state::machine_start()
{
hh_tms1k_state::machine_start();
@@ -4671,6 +4836,238 @@ MACHINE_CONFIG_END
/***************************************************************************
+ Milton Bradley Dark Tower
+ * TMS1400NLL MP7332-N1.U1(Rev. B) or MP7332-N2LL(Rev. C), die label MP7332
+ (assume same ROM contents between revisions)
+ * SN75494N MOS-to-LED digit driver
+ * motorized rotating reel + lightsensor, 1bit-sound
+
+ This is a board game, it obviously requires game pieces and the board.
+ The emulated part is the centerpiece, a black tower with a rotating card
+ panel and LED digits for displaying health, amount of gold, etc. As far
+ as MAME is concerned, the game works fine.
+
+ To start up the game, first press [MOVE], the machine now does a self-test.
+ Then select level and number of players and the game will start. Read the
+ official manual on how to play the game.
+
+***************************************************************************/
+
+class mbdtower_state : public hh_tms1k_state
+{
+public:
+ mbdtower_state(const machine_config &mconfig, device_type type, const char *tag)
+ : hh_tms1k_state(mconfig, type, tag)
+ { }
+
+ void prepare_display();
+ bool sensor_led_on() { return m_display_decay[0][0] != 0; }
+
+ int m_motor_pos;
+ int m_motor_pos_prev;
+ int m_motor_decay;
+ bool m_motor_on;
+ bool m_sensor_blind;
+
+ TIMER_DEVICE_CALLBACK_MEMBER(motor_sim_tick);
+
+ DECLARE_WRITE16_MEMBER(write_r);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_READ8_MEMBER(read_k);
+
+protected:
+ virtual void machine_start() override;
+};
+
+// handlers
+
+TIMER_DEVICE_CALLBACK_MEMBER(mbdtower_state::motor_sim_tick)
+{
+ // it rotates counter-clockwise (when viewed from above)
+ if (m_motor_on)
+ {
+ m_motor_pos = (m_motor_pos - 1) & 0x7f;
+
+ // give it some time to spin out when it's turned off
+ if (m_r & 0x200)
+ m_motor_decay += (m_motor_decay < 4);
+ else if (m_motor_decay > 0)
+ m_motor_decay--;
+ else
+ m_motor_on = false;
+ }
+
+ // 8 evenly spaced holes in the rotation disc for the sensor to 'see' through.
+ // The first hole is much bigger, enabling the game to determine the position.
+ if ((m_motor_pos & 0xf) < 4 || m_motor_pos < 0xc)
+ m_sensor_blind = false;
+ else
+ m_sensor_blind = true;
+
+ // on change, output info
+ if (m_motor_pos != m_motor_pos_prev)
+ output().set_value("motor_pos", 100 * (m_motor_pos / (float)0x80));
+
+ /* 3 display cards per hole, like this:
+
+ (0) <---- display increments this way <---- (7)
+
+ CURSED VICTORY WIZARD DRAGON GOLD KEY SCOUT WARRIOR (void)
+ LOST WARRIORS BAZAAR CLOSED SWORD SILVER KEY HEALER FOOD (void)
+ PLAGUE BRIGANDS KEY MISSING PEGASUS BRASS KEY GOLD BEAST (void)
+ */
+ int card_pos = m_motor_pos >> 4 & 7;
+ if (card_pos != (m_motor_pos_prev >> 4 & 7))
+ output().set_value("card_pos", card_pos);
+
+ m_motor_pos_prev = m_motor_pos;
+}
+
+
+void mbdtower_state::prepare_display()
+{
+ // declare display matrix size and the 2 7segs
+ set_display_size(7, 3);
+ set_display_segmask(6, 0x7f);
+
+ // update current state
+ if (~m_r & 0x10)
+ {
+ UINT8 o = BITSWAP8(m_o,7,0,4,3,2,1,6,5) & 0x7f;
+ m_display_state[2] = (m_o & 0x80) ? o : 0;
+ m_display_state[1] = (m_o & 0x80) ? 0 : o;
+ m_display_state[0] = (m_r >> 8 & 1) | (m_r >> 4 & 0xe);
+
+ display_update();
+ }
+ else
+ {
+ // display items turned off
+ display_matrix(7, 3, 0, 0);
+ }
+}
+
+WRITE16_MEMBER(mbdtower_state::write_r)
+{
+ // R0-R2: input mux
+ m_inp_mux = data & 7;
+
+ // R9: motor on
+ if ((m_r ^ data) & 0x200)
+ output().set_value("motor_on", data >> 9 & 1);
+ if (data & 0x200)
+ m_motor_on = true;
+
+ // R3: N/C
+ // R4: 75494 /EN (speaker, lamps, digit select go through that IC)
+ // R5-R7: tower lamps
+ // R8: rotation sensor led
+ m_r = data;
+ prepare_display();
+
+ // R10: speaker out
+ m_speaker->level_w(~data >> 4 & data >> 10 & 1);
+}
+
+WRITE16_MEMBER(mbdtower_state::write_o)
+{
+ // O0-O6: led segments A-G
+ // O7: digit select
+ m_o = data;
+ prepare_display();
+}
+
+READ8_MEMBER(mbdtower_state::read_k)
+{
+ // K: multiplexed inputs
+ // K8: rotation sensor
+ return read_inputs(3) | ((!m_sensor_blind && sensor_led_on()) ? 8 : 0);
+}
+
+
+// config
+
+/* physical button layout and labels is like this:
+
+ (green) (l.blue) (red)
+ [YES/ [REPEAT] [NO/
+ BUY] END]
+
+ (yellow) (blue) (white)
+ [HAGGLE] [BAZAAR] [CLEAR]
+
+ (blue) (blue) (blue)
+ [TOMB/ [MOVE] [SANCTUARY/
+ RUIN] CITADEL]
+
+ (orange) (blue) (d.yellow)
+ [DARK [FRONTIER] [INVENTORY]
+ TOWER]
+*/
+
+static INPUT_PORTS_START( mbdtower )
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Inventory")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("No/End")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Clear")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("Sanctuary/Citadel")
+
+ PORT_START("IN.1") // R1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Frontier")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Repeat")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Bazaar")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Move")
+
+ PORT_START("IN.2") // R2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Dark Tower")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Yes/Buy")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Haggle")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Tomb/Ruin")
+INPUT_PORTS_END
+
+void mbdtower_state::machine_start()
+{
+ hh_tms1k_state::machine_start();
+
+ // 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!
+ save_item(NAME(m_motor_decay));
+ save_item(NAME(m_motor_on));
+ save_item(NAME(m_sensor_blind));
+}
+
+static MACHINE_CONFIG_START( mbdtower, mbdtower_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS1400, 425000) // approximation - RC osc. R=43K, C=56pf
+ MCFG_TMS1XXX_READ_K_CB(READ8(mbdtower_state, read_k))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mbdtower_state, write_r))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mbdtower_state, write_o))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("tower_motor", mbdtower_state, motor_sim_tick, attotime::from_msec(3500/0x80)) // ~3.5sec for a full rotation
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_mbdtower)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+
+
+/***************************************************************************
+
Parker Brothers Code Name: Sector, by Bob Doyle
* TMS0970 MCU, MP0905BNL ZA0379 (die label 0970F-05B)
* 6-digit 7seg LED display + 4 LEDs for compass, no sound
@@ -5564,7 +5961,6 @@ static INPUT_PORTS_START( tcfballa )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Display")
INPUT_PORTS_END
-
// output PLA is not decapped, dumped electronically
static const UINT16 tcfballa_output_pla[0x20] =
{
@@ -5600,12 +5996,17 @@ MACHINE_CONFIG_END
* TMS1100 MCU, label CD7282SL
* 12 lamps behind buttons, 1-bit sound
- This handheld contains 12 minigames. It looks and plays like "Fabulous Fred"
- by the Japanese company Mego Corp. in 1980, which in turn is a mix of Merlin
- and Simon. Unlike Merlin and Simon, spin-offs like these were not successful.
- There were releases with and without the prefix "Tandy-12", I don't know
- which name was more common. Also not worth noting is that it needed five
- batteries; 4 C-cells and a 9-volt.
+ known releases:
+ - World: Tandy-12: Computerized Arcade
+ - Mexico: Fabuloso Fred, distributed by Ensueno Toys (also released as
+ 9-button version, a clone of Mego Fabulous Fred)
+
+ This handheld contains 12 minigames. It looks and plays like Game Robot 9 by
+ Gakken (aka Mego's Fabulous Fred) from 1980, which in turn is a mix of Merlin
+ and Simon. Unlike Merlin and Simon, spin-offs were not as successful in the USA.
+ There were releases with and without the prefix "Tandy-12", I don't know which
+ name was more common. Also not worth noting is that it needed five batteries;
+ four C-cells and a 9-volt.
Some of the games require accessories included with the toy (eg. the Baseball
game is played with a board representing the playing field). To start a game,
@@ -5718,7 +6119,6 @@ static INPUT_PORTS_START( tandy12 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
INPUT_PORTS_END
-
// output PLA is not decapped
static const UINT16 tandy12_output_pla[0x20] =
{
@@ -6588,7 +6988,6 @@ static INPUT_PORTS_START( ssports4 )
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-
// output PLA is not decapped, dumped electronically
static const UINT16 ssports4_output_pla[0x20] =
{
@@ -6913,6 +7312,17 @@ ROM_START( astro )
ROM_END
+ROM_START( elecbowl )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "mp3403.u9", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_common3_micro.pla", 0, 867, BAD_DUMP CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) // not verified
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1100_elecbowl_output.pla", 0, 365, NO_DUMP )
+ROM_END
+
+
ROM_START( mdndclab )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "m34012", 0x0000, 0x0800, CRC(e851fccd) SHA1(158362c2821678a51554e02dbb2f9ef5aaf5f59f) )
@@ -6993,6 +7403,17 @@ ROM_START( bigtrak )
ROM_END
+ROM_START( mbdtower )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "mp7332", 0x0000, 0x1000, CRC(ebeab91a) SHA1(7edbff437da371390fa8f28b3d183f833eaa9be9) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_common1_micro.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
+ ROM_REGION( 557, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1400_mbdtower_output.pla", 0, 557, CRC(64c84697) SHA1(72ce6d24cedf9c606f1742cd5620f75907246e87) )
+ROM_END
+
+
ROM_START( cnsector )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) )
@@ -7240,6 +7661,8 @@ CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Ken
COMP( 1979, astro, 0, 0, astro, astro, driver_device, 0, "Kosmos", "Astro", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
+CONS( 1978, elecbowl, 0, 0, elecbowl, elecbowl, driver_device, 0, "Marx", "Electronic Bowling (Marx)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) // ***
+
CONS( 1980, mdndclab, 0, 0, mdndclab, mdndclab, driver_device, 0, "Mattel", "Dungeons & Dragons - Computer Labyrinth Game", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // ***
CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
@@ -7248,6 +7671,7 @@ CONS( 1977, bshipb, bship, 0, bshipb, bship, driver_device, 0, "Mil
CONS( 1978, simon, 0, 0, simon, simon, driver_device, 0, "Milton Bradley", "Simon (Rev. A)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, ssimon, 0, 0, ssimon, ssimon, driver_device, 0, "Milton Bradley", "Super Simon", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, bigtrak, 0, 0, bigtrak, bigtrak, driver_device, 0, "Milton Bradley", "Big Trak", MACHINE_SUPPORTS_SAVE | MACHINE_MECHANICAL ) // ***
+CONS( 1981, mbdtower, 0, 0, mbdtower, mbdtower, driver_device, 0, "Milton Bradley", "Dark Tower (Milton Bradley)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_MECHANICAL ) // ***
CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) // ***
CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin - The Electronic Wizard", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp
index b1e46060f35..4aba54a2591 100644
--- a/src/mame/drivers/hh_ucom4.cpp
+++ b/src/mame/drivers/hh_ucom4.cpp
@@ -48,7 +48,7 @@
@258 uPD553C 1984, Tomy Alien Chase (TN-16)
*296 uPD553C 1984, Epoch Computer Beam Gun Professional
- *511 uPD557LC?1980, Gakken Game Robot 9/Mego Fabulous Fred
+ @511 uPD557LC 1980, Gakken Game Robot 9/Mego Fabulous Fred
@512 uPD557LC 1980, Castle Toy Tactix
@060 uPD650C 1979, Mattel Computer Gin
@@ -70,6 +70,7 @@ TODO:
// internal artwork
#include "efball.lh"
+#include "grobot9.lh" // clickable
#include "mcompgin.lh"
#include "mvbfree.lh"
#include "tactix.lh" // clickable
@@ -88,6 +89,7 @@ void hh_ucom4_state::machine_start()
memset(m_display_segmask, 0, sizeof(m_display_segmask));
memset(m_port, 0, sizeof(m_port));
+ m_int = 0;
m_inp_mux = 0;
m_grid = 0;
m_plate = 0;
@@ -103,6 +105,7 @@ void hh_ucom4_state::machine_start()
save_item(NAME(m_display_segmask));
save_item(NAME(m_port));
+ save_item(NAME(m_int));
save_item(NAME(m_inp_mux));
save_item(NAME(m_grid));
save_item(NAME(m_plate));
@@ -110,6 +113,7 @@ void hh_ucom4_state::machine_start()
void hh_ucom4_state::machine_reset()
{
+ refresh_interrupts();
}
@@ -222,6 +226,31 @@ UINT8 hh_ucom4_state::read_inputs(int columns)
}
+// interrupt handling
+
+void hh_ucom4_state::refresh_interrupts()
+{
+ m_maincpu->set_input_line(0, m_int ? ASSERT_LINE : CLEAR_LINE);
+}
+
+void hh_ucom4_state::set_interrupt(int state)
+{
+ state = state ? 1 : 0;
+
+ if (state != m_int)
+ {
+ if (machine().phase() >= MACHINE_PHASE_RESET)
+ m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
+ m_int = state;
+ }
+}
+
+INPUT_CHANGED_MEMBER(hh_ucom4_state::single_interrupt_line)
+{
+ set_interrupt(newval);
+}
+
+
/***************************************************************************
@@ -1630,6 +1659,121 @@ MACHINE_CONFIG_END
/***************************************************************************
+ Gakken Game Robot 9
+ * PCB label GAME ROBOT 7520
+ * NEC uCOM-43 MCU, label TTGR-512 (die label NEC D557 511)
+ * 9 lamps behind buttons
+
+ known releases:
+ - Japan: Game Robot 9 (Takatoku Toys?)
+ - USA: Fabulous Fred - The Ultimate Electronic Game, distributed by Mego
+ - Mexico: Fabuloso Fred, distributed by Ensueno Toys (also released as
+ 12-button version, a clone of Tandy-12)
+
+ Accessories were included for some of the minigames.
+
+***************************************************************************/
+
+class grobot9_state : public hh_ucom4_state
+{
+public:
+ grobot9_state(const machine_config &mconfig, device_type type, const char *tag)
+ : hh_ucom4_state(mconfig, type, tag)
+ { }
+
+ DECLARE_WRITE8_MEMBER(lamps_w);
+ DECLARE_WRITE8_MEMBER(speaker_w);
+ DECLARE_WRITE8_MEMBER(input_w);
+ DECLARE_READ8_MEMBER(input_r);
+};
+
+// handlers
+
+WRITE8_MEMBER(grobot9_state::lamps_w)
+{
+ if (offset == NEC_UCOM4_PORTE)
+ {
+ // E1: speaker out
+ m_speaker->level_w(data >> 1 & 1);
+
+ // E3: input mux high bit
+ m_inp_mux = (m_inp_mux & 7) | (data & 8);
+ }
+
+ // D,F,E0: lamps
+ m_port[offset] = data;
+ display_matrix(9, 1, m_port[NEC_UCOM4_PORTD] | m_port[NEC_UCOM4_PORTF] << 4 | m_port[NEC_UCOM4_PORTE] << 8, 1);
+}
+
+WRITE8_MEMBER(grobot9_state::input_w)
+{
+ // C012: input mux low
+ m_inp_mux = (m_inp_mux & 8) | (data & 7);
+}
+
+READ8_MEMBER(grobot9_state::input_r)
+{
+ // A: multiplexed inputs
+ return read_inputs(5);
+}
+
+
+// config
+
+static INPUT_PORTS_START( grobot9 )
+ PORT_START("IN.0") // C0 port A
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_Q) PORT_NAME("Button 1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_W) PORT_NAME("Button 2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_E) PORT_NAME("Button 3")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_D) PORT_NAME("Button 4")
+
+ PORT_START("IN.1") // C1 port A
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_C) PORT_NAME("Button 5")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_X) PORT_NAME("Button 6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_Z) PORT_NAME("Button 7")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_A) PORT_NAME("Button 8")
+
+ PORT_START("IN.2") // C2 port A
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_S) PORT_NAME("Button 9")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Rest")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("Eighth Note")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.3") // E3 port A
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Select")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("Hit")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Repeat")
+
+ PORT_START("IN.4") // INT
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_ucom4_state, single_interrupt_line, nullptr) PORT_NAME("Start-Pitch")
+INPUT_PORTS_END
+
+static MACHINE_CONFIG_START( grobot9, grobot9_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", NEC_D557L, 160000) // approximation
+ MCFG_UCOM4_READ_A_CB(READ8(grobot9_state, input_r))
+ MCFG_UCOM4_WRITE_C_CB(WRITE8(grobot9_state, input_w))
+ MCFG_UCOM4_WRITE_D_CB(WRITE8(grobot9_state, lamps_w))
+ MCFG_UCOM4_WRITE_E_CB(WRITE8(grobot9_state, lamps_w))
+ MCFG_UCOM4_WRITE_F_CB(WRITE8(grobot9_state, lamps_w))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_grobot9)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+
+
+/***************************************************************************
+
Mattel Computer Gin
* NEC uCOM-43 MCU, label D650C 060
* Hughes HLCD0569 LCD driver
@@ -2624,6 +2768,12 @@ ROM_START( edracula )
ROM_END
+ROM_START( grobot9 )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "ttgr-511", 0x0000, 0x0800, CRC(1f25b2bb) SHA1(55ae7e23f6dd46cc6e1a65839327726678410c3a) )
+ROM_END
+
+
ROM_START( mcompgin )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "d650c-060", 0x0000, 0x0800, BAD_DUMP CRC(92a4d8be) SHA1(d67f14a2eb53b79a7d9eb08103325299bc643781) ) // d5 stuck: xx1x xxxx
@@ -2709,6 +2859,8 @@ CONS( 1981, galaxy2b, galaxy2, 0, galaxy2b, galaxy2, driver_device, 0, "Epoch"
CONS( 1982, astrocmd, 0, 0, astrocmd, astrocmd, driver_device, 0, "Epoch", "Astro Command", MACHINE_SUPPORTS_SAVE )
CONS( 1982, edracula, 0, 0, edracula, edracula, driver_device, 0, "Epoch", "Dracula (Epoch)", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, grobot9, 0, 0, grobot9, grobot9, driver_device, 0, "Gakken", "Game Robot 9", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // some of the minigames: ***
+
CONS( 1979, mcompgin, 0, 0, mcompgin, mcompgin, driver_device, 0, "Mattel", "Computer Gin", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
CONS( 1979, mvbfree, 0, 0, mvbfree, mvbfree, driver_device, 0, "Mego", "Mini-Vid Break Free", MACHINE_SUPPORTS_SAVE )
@@ -2719,3 +2871,6 @@ CONS( 1982, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy",
CONS( 1982, tmscramb, 0, 0, tmscramb, tmscramb, driver_device, 0, "Tomy", "Scramble (Tomy)", MACHINE_SUPPORTS_SAVE )
CONS( 1982, tcaveman, 0, 0, tcaveman, tcaveman, driver_device, 0, "Tomy", "Caveman (Tomy)", MACHINE_SUPPORTS_SAVE )
CONS( 1984, alnchase, 0, 0, alnchase, alnchase, driver_device, 0, "Tomy", "Alien Chase", MACHINE_SUPPORTS_SAVE )
+
+// ***: As far as MAME is concerned, the game is emulated fine. But for it to be playable, it requires interaction
+// with other, unemulatable, things eg. game board/pieces, playing cards, pen & paper, etc.
diff --git a/src/mame/drivers/homedata.cpp b/src/mame/drivers/homedata.cpp
index 8a8083b456e..e87e97fd98c 100644
--- a/src/mame/drivers/homedata.cpp
+++ b/src/mame/drivers/homedata.cpp
@@ -163,6 +163,7 @@ Mahjong Vitamin C
(c)1989 Home Data
Board: X73-PWB-A(A)
+Board: X83-PWB-AC(A)
CPU: 68B09E uPD7807CW(?)
Sound: SN76489AN DAC
@@ -189,11 +190,12 @@ Mahjong Kinjirareta Asobi
Board: X83-PWB-A(A)
CPU: 68B09E uPD7807CW
-Sound: SN76489AN
- DAC
+Sound: SN76489AN DAC
OSC: 11.000MHz 16.000MHz
Custom: GX61A01
+Note: seems likely above 11mhz crystal was a repair
+
----------------------------------------------------------------------------
Mahjong Jogakuen
(c)19?? Windom
diff --git a/src/mame/drivers/mbdtower.cpp b/src/mame/drivers/mbdtower.cpp
deleted file mode 100644
index 5d756cefe63..00000000000
--- a/src/mame/drivers/mbdtower.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap, Sean Riddle
-/***************************************************************************
-
- ** subclass of hh_tms1k_state (includes/hh_tms1k.h, drivers/hh_tms1k.cpp) **
-
- Milton Bradley Dark Tower
- * TMS1400NLL MP7332-N1.U1(Rev. B) or MP7332-N2LL(Rev. C), die label MP7332
- (assume same ROM contents between revisions)
- * SN75494N MOS-to-LED digit driver
- * motorized rotating reel + lightsensor, 1bit-sound
-
- This is a board game, it obviously requires game pieces and the board.
- The emulated part is the centerpiece, a black tower with a rotating card
- panel and LED digits for displaying health, amount of gold, etc. As far
- as MAME is concerned, the game works fine.
-
- To start up the game, first press [MOVE], the machine now does a self-test.
- Then select level and number of players and the game will start. Read the
- official manual on how to play the game.
-
-***************************************************************************/
-
-#include "includes/hh_tms1k.h"
-#include "mbdtower.lh"
-
-
-class mbdtower_state : public hh_tms1k_state
-{
-public:
- mbdtower_state(const machine_config &mconfig, device_type type, const char *tag)
- : hh_tms1k_state(mconfig, type, tag)
- { }
-
- void prepare_display();
- bool sensor_led_on() { return m_display_decay[0][0] != 0; }
-
- int m_motor_pos;
- int m_motor_pos_prev;
- int m_motor_decay;
- bool m_motor_on;
- bool m_sensor_blind;
-
- TIMER_DEVICE_CALLBACK_MEMBER(motor_sim_tick);
-
- DECLARE_WRITE16_MEMBER(write_r);
- DECLARE_WRITE16_MEMBER(write_o);
- DECLARE_READ8_MEMBER(read_k);
-
-protected:
- virtual void machine_start() override;
-};
-
-
-/***************************************************************************
-
- Display, Motor
-
-***************************************************************************/
-
-void mbdtower_state::prepare_display()
-{
- // declare display matrix size and the 2 7segs
- set_display_size(7, 3);
- set_display_segmask(6, 0x7f);
-
- // update current state
- if (~m_r & 0x10)
- {
- UINT8 o = BITSWAP8(m_o,7,0,4,3,2,1,6,5) & 0x7f;
- m_display_state[2] = (m_o & 0x80) ? o : 0;
- m_display_state[1] = (m_o & 0x80) ? 0 : o;
- m_display_state[0] = (m_r >> 8 & 1) | (m_r >> 4 & 0xe);
-
- display_update();
- }
- else
- {
- // display items turned off
- display_matrix(7, 3, 0, 0);
- }
-}
-
-
-TIMER_DEVICE_CALLBACK_MEMBER(mbdtower_state::motor_sim_tick)
-{
- // it rotates counter-clockwise (when viewed from above)
- if (m_motor_on)
- {
- m_motor_pos = (m_motor_pos - 1) & 0x7f;
-
- // give it some time to spin out when it's turned off
- if (m_r & 0x200)
- m_motor_decay += (m_motor_decay < 4);
- else if (m_motor_decay > 0)
- m_motor_decay--;
- else
- m_motor_on = false;
- }
-
- // 8 evenly spaced holes in the rotation disc for the sensor to 'see' through.
- // The first hole is much bigger, enabling the game to determine the position.
- if ((m_motor_pos & 0xf) < 4 || m_motor_pos < 0xc)
- m_sensor_blind = false;
- else
- m_sensor_blind = true;
-
- // on change, output info
- if (m_motor_pos != m_motor_pos_prev)
- output().set_value("motor_pos", 100 * (m_motor_pos / (float)0x80));
-
- /* 3 display cards per hole, like this:
-
- (0) <---- display increments this way <---- (7)
-
- CURSED VICTORY WIZARD DRAGON GOLD KEY SCOUT WARRIOR (void)
- LOST WARRIORS BAZAAR CLOSED SWORD SILVER KEY HEALER FOOD (void)
- PLAGUE BRIGANDS KEY MISSING PEGASUS BRASS KEY GOLD BEAST (void)
- */
- int card_pos = m_motor_pos >> 4 & 7;
- if (card_pos != (m_motor_pos_prev >> 4 & 7))
- output().set_value("card_pos", card_pos);
-
- m_motor_pos_prev = m_motor_pos;
-}
-
-
-
-/***************************************************************************
-
- I/O
-
-***************************************************************************/
-
-WRITE16_MEMBER(mbdtower_state::write_r)
-{
- // R0-R2: input mux
- m_inp_mux = data & 7;
-
- // R9: motor on
- if ((m_r ^ data) & 0x200)
- output().set_value("motor_on", data >> 9 & 1);
- if (data & 0x200)
- m_motor_on = true;
-
- // R3: N/C
- // R4: 75494 /EN (speaker, lamps, digit select go through that IC)
- // R5-R7: tower lamps
- // R8: rotation sensor led
- m_r = data;
- prepare_display();
-
- // R10: speaker out
- m_speaker->level_w(~data >> 4 & data >> 10 & 1);
-}
-
-WRITE16_MEMBER(mbdtower_state::write_o)
-{
- // O0-O6: led segments A-G
- // O7: digit select
- m_o = data;
- prepare_display();
-}
-
-READ8_MEMBER(mbdtower_state::read_k)
-{
- // K: multiplexed inputs
- // K8: rotation sensor
- return read_inputs(3) | ((!m_sensor_blind && sensor_led_on()) ? 8 : 0);
-}
-
-
-
-/***************************************************************************
-
- Inputs
-
-***************************************************************************/
-
-/* physical button layout and labels is like this:
-
- (green) (l.blue) (red)
- [YES/ [REPEAT] [NO/
- BUY] END]
-
- (yellow) (blue) (white)
- [HAGGLE] [BAZAAR] [CLEAR]
-
- (blue) (blue) (blue)
- [TOMB/ [MOVE] [SANCTUARY/
- RUIN] CITADEL]
-
- (orange) (blue) (d.yellow)
- [DARK [FRONTIER] [INVENTORY]
- TOWER]
-*/
-
-static INPUT_PORTS_START( mbdtower )
- PORT_START("IN.0") // R0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Inventory")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("No/End")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Clear")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("Sanctuary/Citadel")
-
- PORT_START("IN.1") // R1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Frontier")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Repeat")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Bazaar")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Move")
-
- PORT_START("IN.2") // R2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Dark Tower")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Yes/Buy")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Haggle")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Tomb/Ruin")
-INPUT_PORTS_END
-
-
-
-/***************************************************************************
-
- Machine Config
-
-***************************************************************************/
-
-void mbdtower_state::machine_start()
-{
- hh_tms1k_state::machine_start();
-
- // 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!
- save_item(NAME(m_motor_decay));
- save_item(NAME(m_motor_on));
- save_item(NAME(m_sensor_blind));
-}
-
-static MACHINE_CONFIG_START( mbdtower, mbdtower_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1400, 425000) // approximation - RC osc. R=43K, C=56pf
- MCFG_TMS1XXX_READ_K_CB(READ8(mbdtower_state, read_k))
- MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mbdtower_state, write_r))
- MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mbdtower_state, write_o))
-
- MCFG_TIMER_DRIVER_ADD_PERIODIC("tower_motor", mbdtower_state, motor_sim_tick, attotime::from_msec(3500/0x80)) // ~3.5sec for a full rotation
- MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
- MCFG_DEFAULT_LAYOUT(layout_mbdtower)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
-MACHINE_CONFIG_END
-
-
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
-ROM_START( mbdtower )
- ROM_REGION( 0x1000, "maincpu", 0 )
- ROM_LOAD( "mp7332", 0x0000, 0x1000, CRC(ebeab91a) SHA1(7edbff437da371390fa8f28b3d183f833eaa9be9) )
-
- ROM_REGION( 867, "maincpu:mpla", 0 )
- ROM_LOAD( "tms1100_common1_micro.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
- ROM_REGION( 557, "maincpu:opla", 0 )
- ROM_LOAD( "tms1400_mbdtower_output.pla", 0, 557, CRC(64c84697) SHA1(72ce6d24cedf9c606f1742cd5620f75907246e87) )
-ROM_END
-
-
-CONS( 1981, mbdtower, 0, 0, mbdtower, mbdtower, driver_device, 0, "Milton Bradley", "Dark Tower (Milton Bradley)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_MECHANICAL )
diff --git a/src/mame/drivers/mjsenpu.cpp b/src/mame/drivers/mjsenpu.cpp
index 1aa9d03af34..f4c585d0fcb 100644
--- a/src/mame/drivers/mjsenpu.cpp
+++ b/src/mame/drivers/mjsenpu.cpp
@@ -46,6 +46,7 @@
#include "cpu/e132xs/e132xs.h"
#include "sound/okim6295.h"
#include "machine/nvram.h"
+#include "machine/ticket.h"
class mjsenpu_state : public driver_device
{
@@ -54,6 +55,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_oki(*this, "oki"),
+ m_hopper(*this, "hopper"),
m_mainram(*this, "mainram"),
// m_vram(*this, "vram"),
m_palette(*this, "palette")
@@ -63,6 +65,7 @@ public:
/* devices */
required_device<e132xt_device> m_maincpu;
required_device<okim6295_device> m_oki;
+ required_device<ticket_dispenser_device> m_hopper;
required_shared_ptr<UINT32> m_mainram;
// required_shared_ptr<UINT32> m_vram;
@@ -142,8 +145,7 @@ WRITE32_MEMBER(mjsenpu_state::vram_w)
WRITE8_MEMBER(mjsenpu_state::control_w)
{
- m_control = data;
- // bit 0x80 is always set?
+ // bit 0x80 is always set? (sometimes disabled during screen transitions briefly, could be display enable?)
// bit 0x40 not used?
// bit 0x20 not used?
@@ -151,10 +153,16 @@ WRITE8_MEMBER(mjsenpu_state::control_w)
// bit 0x10 is the M6295 bank, samples <26 are the same in both banks and so bank switch isn't written for them, not even in sound test.
m_oki->set_rom_bank((data&0x10)>>4);
- // bits 0x08 and 0x04 seem to be hopper/ticket related? different ones get used depending on the dips
+ // bits 0x08 is used in the alt payout / hopper mode (see dipswitches)
+
+ // 0x04 seem to be hopper/ticket related? different ones get used depending on the dips
+ m_hopper->write(space, 0, data & 0x04);
// bit 0x02 could be coin counter?
+ machine().bookkeeping().coin_counter_w(0, data & 0x02 );
+
// bit 0x01 alternates frequently, using as video buffer, but that's a complete guess
+ m_control = data;
// if (data &~0x9e)
// printf("control_w %02x\n", data);
@@ -286,26 +294,21 @@ static INPUT_PORTS_START( mjsenpu )
PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN1")
- PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_COIN1 ) // or maybe service?
- PORT_DIPNAME( 0x00000002, 0x00000002, "IN1" )
- PORT_DIPSETTING( 0x00000002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
- PORT_DIPNAME( 0x00000004, 0x00000004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00000004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
- PORT_DIPNAME( 0x00000008, 0x00000008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00000008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
- PORT_SERVICE_NO_TOGGLE( 0x00000010, IP_ACTIVE_LOW )
- PORT_DIPNAME( 0x00000020, 0x00000020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00000020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
+ PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // might be coin out
+ PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
+ PORT_SERVICE_NO_TOGGLE( 0x00000010, IP_ACTIVE_LOW )
+ PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // clears stats in bookkeeping
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_CONDITION("DSW3", 0x08,EQUALS,0x00)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3", 0x08, EQUALS, 0x08)
- PORT_DIPNAME( 0x00000080, 0x00000080, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x00000080, 0x00000080, DEF_STR( Unknown ) ) // unused??
PORT_DIPSETTING( 0x00000080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+
+
PORT_START("DSW1")
PORT_DIPNAME( 0x00000003, 0x00000003, DEF_STR( Coin_A ) )
@@ -313,7 +316,7 @@ static INPUT_PORTS_START( mjsenpu )
PORT_DIPSETTING( 0x00000003, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00000002, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x00000001, DEF_STR( 1C_3C ) )
- PORT_DIPNAME( 0x0000000c, 0x0000000c, "Value 1" )
+ PORT_DIPNAME( 0x0000000c, 0x0000000c, "Note Value" ) // used if DSW3 bit 0x02 is changed
PORT_DIPSETTING( 0x00000000, "100" )
PORT_DIPSETTING( 0x00000004, "50" )
PORT_DIPSETTING( 0x00000008, "10" )
@@ -357,15 +360,15 @@ static INPUT_PORTS_START( mjsenpu )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW3")
- PORT_DIPNAME( 0x00000001, 0x00000001, "Value 4" )
+ PORT_DIPNAME( 0x00000001, 0x00000001, "Credit Limit" )
PORT_DIPSETTING( 0x00000001, "100" )
PORT_DIPSETTING( 0x00000000, "500" )
- PORT_DIPNAME( 0x00000002, 0x00000002, "Symbol 2" )
- PORT_DIPSETTING( 0x00000002, "0" )
- PORT_DIPSETTING( 0x00000000, "1" )
- PORT_DIPNAME( 0x00000004, 0x00000004, "Symbol 3" )
- PORT_DIPSETTING( 0x00000004, "0" )
- PORT_DIPSETTING( 0x00000000, "1" )
+ PORT_DIPNAME( 0x00000002, 0x00000002, "Coin Type?" ) // uses different coinage
+ PORT_DIPSETTING( 0x00000002, "Coins?" )
+ PORT_DIPSETTING( 0x00000000, "Notes?" )
+ PORT_DIPNAME( 0x00000004, 0x00000004, "Hopper Type?" )
+ PORT_DIPSETTING( 0x00000004, "Normal?" ) // pressing Pay Out button activates hopper on bit 0x04 and pays out
+ PORT_DIPSETTING( 0x00000000, "Other?" ) // pressing Pay Out activates something on bit 0x08, prints KEY OUT and quickly resets the game
PORT_DIPNAME( 0x00000008, 0x00000008, "Control Type" )
PORT_DIPSETTING( 0x00000008, "Mahjong Panel" )
PORT_DIPSETTING( 0x00000000, "Joystick" )
@@ -459,6 +462,9 @@ static MACHINE_CONFIG_START( mjsenpu, mjsenpu_state )
MCFG_NVRAM_ADD_1FILL("nvram")
+ // more likely coins out?
+ MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(50), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH)
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -526,6 +532,4 @@ DRIVER_INIT_MEMBER(mjsenpu_state,mjsenpu)
}
-
-
-GAME( 2002, mjsenpu, 0, mjsenpu, mjsenpu, mjsenpu_state, mjsenpu, ROT0, "Oriental Soft", "Mahjong Senpu", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+GAME( 2002, mjsenpu, 0, mjsenpu, mjsenpu, mjsenpu_state, mjsenpu, ROT0, "Oriental Soft", "Mahjong Senpu", 0 )
diff --git a/src/mame/drivers/namcona1.cpp b/src/mame/drivers/namcona1.cpp
index ee2f1a0fe25..840a0bb524b 100644
--- a/src/mame/drivers/namcona1.cpp
+++ b/src/mame/drivers/namcona1.cpp
@@ -947,7 +947,7 @@ static MACHINE_CONFIG_START( namcona1, namcona1_state )
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
- MCFG_SCREEN_SIZE(38*8, 32*8)
+ MCFG_SCREEN_SIZE(40*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(8, 38*8-1-8, 4*8, 32*8-1)
MCFG_SCREEN_UPDATE_DRIVER(namcona1_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
@@ -987,6 +987,13 @@ static MACHINE_CONFIG_DERIVED( namcona2, namcona1 )
MCFG_CPU_IO_MAP( namcona1_mcu_io_map)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( namcona2w, namcona2 )
+
+ /* video hardware */
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_VISIBLE_AREA(0, 38*8-1-0, 4*8, 32*8-1)
+MACHINE_CONFIG_END
+
DRIVER_INIT_MEMBER(namcona1_state,bkrtmaq) { m_gametype = NAMCO_BKRTMAQ; }
DRIVER_INIT_MEMBER(namcona1_state,cgangpzl) { m_gametype = NAMCO_CGANGPZL; }
@@ -1324,7 +1331,7 @@ GAME( 1993, tinklpit, 0, namcona1w, namcona1_joy, namcona1_state, tinkl
GAME( 1992, knckhead, 0, namcona2, namcona1_joy, namcona1_state, knckhead, ROT0, "Namco", "Knuckle Heads (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, knckheadj, knckhead, namcona2, namcona1_joy, namcona1_state, knckhead, ROT0, "Namco", "Knuckle Heads (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, knckheadjp, knckhead, namcona2, namcona1_joy, namcona1_state, knckhead, ROT0, "Namco", "Knuckle Heads (Japan, Prototype?)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, emeralda, 0, namcona2, namcona1_joy, namcona1_state, emeralda, ROT0, "Namco", "Emeraldia (World)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, emeralda, 0, namcona2w, namcona1_joy, namcona1_state, emeralda, ROT0, "Namco", "Emeraldia (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, numanath, 0, namcona2, namcona1_joy, namcona1_state, numanath, ROT0, "Namco", "Numan Athletics (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, numanathj, numanath, namcona2, namcona1_joy, namcona1_state, numanath, ROT0, "Namco", "Numan Athletics (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, quiztou, 0, namcona2, namcona1_quiz, namcona1_state,quiztou, ROT0, "Namco", "Nettou! Gekitou! Quiztou!! (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/nbmj8688.cpp b/src/mame/drivers/nbmj8688.cpp
index 8781299ff14..0fd9269c1a6 100644
--- a/src/mame/drivers/nbmj8688.cpp
+++ b/src/mame/drivers/nbmj8688.cpp
@@ -381,7 +381,7 @@ CUSTOM_INPUT_MEMBER( nbmj8688_state::nb1413m3_busyflag_r )
static INPUT_PORTS_START( mjsikaku )
PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, "1 (Easy)" )
PORT_DIPSETTING( 0x06, "2" )
PORT_DIPSETTING( 0x05, "3" )
@@ -390,47 +390,25 @@ static INPUT_PORTS_START( mjsikaku )
PORT_DIPSETTING( 0x02, "6" )
PORT_DIPSETTING( 0x01, "7" )
PORT_DIPSETTING( 0x00, "8 (Hard)" )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x10, 0x10, "Character Display Test" )
+ PORT_DIPNAME( 0x10, 0x10, "Character Display Test" ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, "Game Sounds" )
+ PORT_DIPNAME( 0x40, 0x00, "Game Sounds" ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 1-8" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ // does not exist on PCB
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@@ -446,62 +424,8 @@ static INPUT_PORTS_START( mjsikaku )
INPUT_PORTS_END
static INPUT_PORTS_START( mmsikaku )
-#if 1
PORT_START("DSWA")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 1-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 1-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 1-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 1-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 1-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 1-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 1-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-#else
-
- PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x00, "Game Out Rate" )
+ PORT_DIPNAME( 0x07, 0x00, "Game Out Rate" ) PORT_DIPLOCATION("DSWA:1,2,3") // unconfirmed but extremely likely correct
PORT_DIPSETTING( 0x07, "60%" )
PORT_DIPSETTING( 0x06, "65%" )
PORT_DIPSETTING( 0x05, "70%" )
@@ -510,36 +434,41 @@ static INPUT_PORTS_START( mmsikaku )
PORT_DIPSETTING( 0x02, "85%" )
PORT_DIPSETTING( 0x01, "90%" )
PORT_DIPSETTING( 0x00, "95%" )
- PORT_DIPNAME( 0x18, 0x18, "Rate Min" )
+ PORT_DIPNAME( 0x18, 0x18, "Rate Min" ) PORT_DIPLOCATION("DSWA:4,5")
PORT_DIPSETTING( 0x18, "1" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x00, "5" )
- PORT_DIPNAME( 0x60, 0x00, "Rate Max" )
+ PORT_DIPNAME( 0x60, 0x00, "Rate Max" ) PORT_DIPLOCATION("DSWA:6,7")
PORT_DIPSETTING( 0x60, "8" )
PORT_DIPSETTING( 0x40, "10" )
PORT_DIPSETTING( 0x20, "12" )
PORT_DIPSETTING( 0x00, "20" )
- PORT_DIPNAME( 0x80, 0x00, "Score Pool" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8") // score pool?
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x00, "Rate Up" )
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:1") // rate up?
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, "Last Chance" )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:2") // last chance?
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "Character Display Test" )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
-#endif
+ PORT_DIPNAME( 0x08, 0x08, "Character Display Test" ) PORT_DIPLOCATION("DSWB:4")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSWB:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSWB:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSWB:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSWB:8" )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) //
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // MEMORY RESET
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) // ANALYZER
PORT_SERVICE( 0x10, IP_ACTIVE_LOW ) // TEST
@@ -600,7 +529,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( mjcamera )
PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, "1 (Easy)" )
PORT_DIPSETTING( 0x06, "2" )
PORT_DIPSETTING( 0x05, "3" )
@@ -609,47 +538,31 @@ static INPUT_PORTS_START( mjcamera )
PORT_DIPSETTING( 0x02, "6" )
PORT_DIPSETTING( 0x01, "7" )
PORT_DIPSETTING( 0x00, "8 (Hard)" )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 1-6" )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Character Display Test" )
+ PORT_DIPNAME( 0x80, 0x80, "Character Display Test" ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "DSWB:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "DSWB:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "DSWB:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "DSWB:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSWB:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSWB:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSWB:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSWB:8" )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@@ -665,125 +578,61 @@ static INPUT_PORTS_START( mjcamera )
INPUT_PORTS_END
static INPUT_PORTS_START( kaguya )
- PORT_START("DSWA")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
- // NOTE:Coins counted by pressing service switch
- PORT_DIPNAME( 0x04, 0x04, "NOTE" )
- PORT_DIPSETTING( 0x04, "Coin x5" )
- PORT_DIPSETTING( 0x00, "Coin x10" )
- PORT_DIPNAME( 0x18, 0x18, "Game Out Rate" )
- PORT_DIPSETTING( 0x00, "60%" )
- PORT_DIPSETTING( 0x08, "70%" )
- PORT_DIPSETTING( 0x10, "80%" )
- PORT_DIPSETTING( 0x18, "90%" )
- PORT_DIPNAME( 0x20, 0x20, "Bonus awarded on" )
- PORT_DIPSETTING( 0x20, "[over BAIMAN]" )
- PORT_DIPSETTING( 0x00, "[BAIMAN]" )
- PORT_DIPNAME( 0x40, 0x40, "Variability of payout rate" )
- PORT_DIPSETTING( 0x40, "[big]" )
- PORT_DIPSETTING( 0x00, "[small]" )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ // manual has DSWA and DSWB mixed up compared to PCB
+ // PCB is traditional Nichibutsu legacy, A/B match other PCBs
+ // so assumption is manual is incorrect
- PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x00, "Nudity graphic on bet" )
+ PORT_START("DSWA")
+ PORT_DIPNAME( 0x01, 0x00, "Nudity graphic on bet" ) PORT_DIPLOCATION("DSWA:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x06, 0x06, "Bet Min" )
+ PORT_DIPNAME( 0x06, 0x06, "Bet Min" ) PORT_DIPLOCATION("DSWA:2,3")
PORT_DIPSETTING( 0x06, "1" )
PORT_DIPSETTING( 0x04, "3" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x00, "7" )
- PORT_DIPNAME( 0x18, 0x00, "Number of extend TSUMO" )
+ PORT_DIPNAME( 0x18, 0x00, "Number of extend TSUMO" ) PORT_DIPLOCATION("DSWA:4,5")
PORT_DIPSETTING( 0x18, "0" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x00, "4" )
- PORT_DIPNAME( 0x20, 0x20, "Extend TSUMO needs credit" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("SYSTEM")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
-// PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) //
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) //
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // MEMORY RESET
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) // ANALYZER
- PORT_SERVICE( 0x10, IP_ACTIVE_LOW ) // TEST
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) // COIN1
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Credit Clear") PORT_CODE(KEYCODE_4) // CREDIT CLEAR
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) // COIN2
-
- PORT_INCLUDE( nbmjcontrols )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( kaguya2 )
- PORT_START("DSWA")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 1-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 1-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 1-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 1-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 1-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 1-6" )
+ PORT_DIPNAME( 0x20, 0x20, "Extend TSUMO needs credit" ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 1-8" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWB:1,2")
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
+ // NOTE:Coins counted by pressing service switch
+ PORT_DIPNAME( 0x04, 0x04, "NOTE" ) PORT_DIPLOCATION("DSWB:3")
+ PORT_DIPSETTING( 0x04, "Coin x5" )
+ PORT_DIPSETTING( 0x00, "Coin x10" )
+ PORT_DIPNAME( 0x18, 0x18, "Game Out Rate" ) PORT_DIPLOCATION("DSWB:4,5")
+ PORT_DIPSETTING( 0x00, "60%" )
+ PORT_DIPSETTING( 0x08, "70%" )
+ PORT_DIPSETTING( 0x10, "80%" )
+ PORT_DIPSETTING( 0x18, "90%" )
+ PORT_DIPNAME( 0x20, 0x20, "Bonus awarded on" ) PORT_DIPLOCATION("DSWB:6")
+ PORT_DIPSETTING( 0x20, "[over BAIMAN]" )
+ PORT_DIPSETTING( 0x00, "[BAIMAN]" )
+ PORT_DIPNAME( 0x40, 0x40, "Variability of payout rate" ) PORT_DIPLOCATION("DSWB:7")
+ PORT_DIPSETTING( 0x40, "[big]" )
+ PORT_DIPSETTING( 0x00, "[small]" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
-// PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // MEMORY RESET
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) // ANALYZER
@@ -795,6 +644,7 @@ static INPUT_PORTS_START( kaguya2 )
PORT_INCLUDE( nbmjcontrols )
INPUT_PORTS_END
+
static INPUT_PORTS_START( kanatuen )
PORT_START("DSWA")
PORT_DIPNAME( 0x07, 0x07, "Game Out Rate" ) PORT_DIPLOCATION("DSWA:1,2,3")
@@ -990,7 +840,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( secolove )
PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, "1 (Easy)" )
PORT_DIPSETTING( 0x06, "2" )
PORT_DIPSETTING( 0x05, "3" )
@@ -999,44 +849,44 @@ static INPUT_PORTS_START( secolove )
PORT_DIPSETTING( 0x02, "6" )
PORT_DIPSETTING( 0x01, "7" )
PORT_DIPSETTING( 0x00, "8 (Hard)" )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, "Nudity" )
+ PORT_DIPNAME( 0x40, 0x00, "Nudity" ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" )
+ PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x03, 0x00, "Number of last chance" )
+ PORT_DIPNAME( 0x03, 0x00, "Number of last chance" ) PORT_DIPLOCATION("DSWB:1,2")
PORT_DIPSETTING( 0x03, "0" )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "10" )
- PORT_DIPNAME( 0x04, 0x00, "Hanahai" )
+ PORT_DIPNAME( 0x04, 0x00, "Hanahai" ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "Open Reach of CPU" )
+ PORT_DIPNAME( 0x08, 0x00, "Open Reach of CPU" ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, "Cancel Hand" )
+ PORT_DIPNAME( 0x10, 0x00, "Cancel Hand" ) PORT_DIPLOCATION("DSWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, "Wareme" )
+ PORT_DIPNAME( 0x20, 0x00, "Wareme" ) PORT_DIPLOCATION("DSWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -1055,7 +905,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( barline )
PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x07, "Game Rate" )
+ PORT_DIPNAME( 0x07, 0x07, "Game Rate" ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x00, "58%" )
PORT_DIPSETTING( 0x01, "64%" )
PORT_DIPSETTING( 0x02, "70%" )
@@ -1064,44 +914,44 @@ static INPUT_PORTS_START( barline )
PORT_DIPSETTING( 0x05, "80%" )
PORT_DIPSETTING( 0x06, "88%" )
PORT_DIPSETTING( 0x07, "95%" )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 1-4" )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 1-5" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 1-6" )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 1-8" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" ) // auto stop reels?
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:4") // auto stop reels?
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x30, 0x30, "Music" )
+ PORT_DIPNAME( 0x30, 0x00, "Music" ) PORT_DIPLOCATION("DSWB:5,6")
PORT_DIPSETTING( 0x00, "Type 1" )
PORT_DIPSETTING( 0x10, "Type 2" )
PORT_DIPSETTING( 0x20, "Type 3" )
PORT_DIPSETTING( 0x30, DEF_STR( Off ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -1162,7 +1012,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( citylove )
PORT_START("DSWA")
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3,4")
PORT_DIPSETTING( 0x0f, "1 (Easy)" )
PORT_DIPSETTING( 0x0e, "2" )
PORT_DIPSETTING( 0x0d, "3" )
@@ -1179,37 +1029,37 @@ static INPUT_PORTS_START( citylove )
PORT_DIPSETTING( 0x02, "14" )
PORT_DIPSETTING( 0x01, "15" )
PORT_DIPSETTING( 0x00, "16 (Hard)" )
- PORT_DIPNAME( 0x30, 0x30, "YAKUMAN cut" )
+ PORT_DIPNAME( 0x30, 0x30, "YAKUMAN cut" ) PORT_DIPLOCATION("DSWA:5,6")
PORT_DIPSETTING( 0x30, "10%" )
PORT_DIPSETTING( 0x20, "30%" )
PORT_DIPSETTING( 0x10, "50%" )
PORT_DIPSETTING( 0x00, "90%" )
- PORT_DIPNAME( 0x40, 0x00, "Nudity" )
+ PORT_DIPNAME( 0x40, 0x00, "Nudity" ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x03, 0x00, "Number of last chance" )
+ PORT_DIPNAME( 0x03, 0x00, "Number of last chance" ) PORT_DIPLOCATION("DSWB:1,2")
PORT_DIPSETTING( 0x03, "0" )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "10" )
- PORT_DIPNAME( 0x04, 0x04, "Hanahai" )
+ PORT_DIPNAME( 0x04, 0x04, "Hanahai" ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "Chonbo" )
+ PORT_DIPNAME( 0x08, 0x00, "Chonbo" ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "Open Reach of CPU" )
+ PORT_DIPNAME( 0x10, 0x10, "Open Reach of CPU" ) PORT_DIPLOCATION("DSWB:5")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "Open Mode" )
+ PORT_DIPNAME( 0x20, 0x20, "Open Mode" ) PORT_DIPLOCATION("DSWB:6")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
- PORT_DIPNAME( 0xc0, 0x00, "Cansel Type" )
+ PORT_DIPNAME( 0xc0, 0x00, "Cansel Type" ) PORT_DIPLOCATION("DSWB:7,8")
PORT_DIPSETTING( 0xc0, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, "TSUMO 3" )
PORT_DIPSETTING( 0x40, "TSUMO 7" )
@@ -1292,7 +1142,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( seiha )
PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x00, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x07, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3") // is this correct?
PORT_DIPSETTING( 0x07, "1 (Hard)" )
PORT_DIPSETTING( 0x06, "2" )
PORT_DIPSETTING( 0x05, "3" )
@@ -1301,47 +1151,31 @@ static INPUT_PORTS_START( seiha )
PORT_DIPSETTING( 0x02, "6" )
PORT_DIPSETTING( 0x01, "7" )
PORT_DIPSETTING( 0x00, "8 (Easy)" )
- PORT_DIPNAME( 0x08, 0x00, "RENCHAN after TENPAIed RYUKYOKU" )
+ PORT_DIPNAME( 0x08, 0x00, "RENCHAN after TENPAIed RYUKYOKU" ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, "Change Pai and Mat Color" )
+ PORT_DIPNAME( 0x10, 0x00, "Change Pai and Mat Color" ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "Character Display Test" )
+ PORT_DIPNAME( 0x20, 0x20, "Character Display Test" ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "DSWB:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "DSWB:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "DSWB:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "DSWB:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSWB:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSWB:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSWB:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSWB:8" )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@@ -1422,7 +1256,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( iemoto )
PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x00, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x07, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, "1 (Hard)" )
PORT_DIPSETTING( 0x06, "2" )
PORT_DIPSETTING( 0x05, "3" )
@@ -1431,47 +1265,31 @@ static INPUT_PORTS_START( iemoto )
PORT_DIPSETTING( 0x02, "6" )
PORT_DIPSETTING( 0x01, "7" )
PORT_DIPSETTING( 0x00, "8 (Easy)" )
- PORT_DIPNAME( 0x08, 0x00, "RENCHAN after TENPAIed RYUKYOKU" )
+ PORT_DIPNAME( 0x08, 0x00, "RENCHAN after TENPAIed RYUKYOKU" ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "Character Display Test" )
+ PORT_DIPNAME( 0x10, 0x10, "Character Display Test" ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "DSWB:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "DSWB:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "DSWB:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "DSWB:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSWB:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSWB:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSWB:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSWB:8" )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@@ -1947,30 +1765,14 @@ static INPUT_PORTS_START( orangec )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "DSWB:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "DSWB:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "DSWB:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "DSWB:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSWB:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSWB:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSWB:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSWB:8" )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@@ -2293,56 +2095,40 @@ INPUT_PORTS_END
static INPUT_PORTS_START( korinai )
PORT_START("DSWA")
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "Character Display Test" )
+ PORT_DIPNAME( 0x10, 0x10, "Character Display Test" ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "Select" )
+ PORT_DIPNAME( 0x20, 0x20, "Select" ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Region ) )
PORT_DIPSETTING( 0x00, "Girl" )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "DSWB:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "DSWB:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "DSWB:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "DSWB:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSWB:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSWB:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSWB:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSWB:8" )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@@ -2423,7 +2209,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( crystalg )
PORT_START("DSWA")
- PORT_DIPNAME( 0x0f, 0x0d, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x0f, 0x0d, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3,4")
PORT_DIPSETTING( 0x0d, "1 (Easy)" )
PORT_DIPSETTING( 0x0a, "2" )
PORT_DIPSETTING( 0x09, "3" )
@@ -2433,44 +2219,28 @@ static INPUT_PORTS_START( crystalg )
PORT_DIPSETTING( 0x05, "7" )
PORT_DIPSETTING( 0x04, "8" )
PORT_DIPSETTING( 0x00, "9 (Hard)" )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "DSWB:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "DSWB:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "DSWB:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "DSWB:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSWB:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSWB:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSWB:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSWB:8" )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@@ -2487,7 +2257,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( crystal2 )
PORT_START("DSWA")
- PORT_DIPNAME( 0x0f, 0x0d, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x0f, 0x0d, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3,4")
PORT_DIPSETTING( 0x0d, "1 (Easy)" )
PORT_DIPSETTING( 0x0a, "2" )
PORT_DIPSETTING( 0x09, "3" )
@@ -2497,40 +2267,40 @@ static INPUT_PORTS_START( crystal2 )
PORT_DIPSETTING( 0x05, "7" )
PORT_DIPSETTING( 0x04, "8" )
PORT_DIPSETTING( 0x00, "9 (Hard)" )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x03, 0x00, "Number of last chance" )
+ PORT_DIPNAME( 0x03, 0x00, "Number of last chance" ) PORT_DIPLOCATION("DSWB:1,2")
PORT_DIPSETTING( 0x03, "0" )
PORT_DIPSETTING( 0x02, "1" )
PORT_DIPSETTING( 0x01, "3" )
PORT_DIPSETTING( 0x00, "10" )
- PORT_DIPNAME( 0x0c, 0x00, "SANGEN Rush" )
+ PORT_DIPNAME( 0x0c, 0x00, "SANGEN Rush" ) PORT_DIPLOCATION("DSWB:3,4")
PORT_DIPSETTING( 0x0c, "1" )
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -2641,30 +2411,14 @@ static INPUT_PORTS_START( nightlov )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "DIPSW 2-8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "DSWB:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "DSWB:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "DSWB:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "DSWB:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSWB:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSWB:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSWB:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSWB:8" )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8688_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@@ -4058,8 +3812,8 @@ GAME( 1988, vipclub, orangec, vipclub, vipclub, driver_device, 0,
/* pure 12-bit palette */
GAME( 1988, kaguya, 0, kaguya, kaguya, driver_device, 0, ROT0, "Miki Syouji", "Mahjong Kaguyahime [BET] (Japan 880521)", MACHINE_SUPPORTS_SAVE )
-GAME( 1989, kaguya2, 0, kaguya2, kaguya2, nbmj8688_state, kaguya2, ROT0, "Miki Syouji", "Mahjong Kaguyahime Sono2 [BET] (Japan 890829)", MACHINE_SUPPORTS_SAVE )
-GAME( 2001, kaguya2f, kaguya2, kaguya2, kaguya2, nbmj8688_state, kaguya2, ROT0, "Miki Syouji", "Mahjong Kaguyahime Sono2 Fukkokuban [BET] (Japan 010808)", MACHINE_SUPPORTS_SAVE )
+GAME( 1989, kaguya2, 0, kaguya2, kaguya, nbmj8688_state, kaguya2, ROT0, "Miki Syouji", "Mahjong Kaguyahime Sono2 [BET] (Japan 890829)", MACHINE_SUPPORTS_SAVE )
+GAME( 2001, kaguya2f, kaguya2, kaguya2, kaguya, nbmj8688_state, kaguya2, ROT0, "Miki Syouji", "Mahjong Kaguyahime Sono2 Fukkokuban [BET] (Japan 010808)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, kanatuen, 0, kanatuen, kanatuen, nbmj8688_state, kanatuen, ROT0, "Panac", "Kanatsuen no Onna [BET] (Japan 880905)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, kyuhito, kanatuen, kyuhito, kyuhito, nbmj8688_state, kyuhito, ROT0, "Roller Tron", "Kyukyoku no Hito [BET] (Japan 880824)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, idhimitu, 0, idhimitu, idhimitu, nbmj8688_state, idhimitu, ROT0, "Digital Soft", "Idol no Himitsu [BET] (Japan 890304)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/nbmj8891.cpp b/src/mame/drivers/nbmj8891.cpp
index 9dce4a86cd6..13415b1ad8d 100644
--- a/src/mame/drivers/nbmj8891.cpp
+++ b/src/mame/drivers/nbmj8891.cpp
@@ -1242,8 +1242,9 @@ INPUT_PORTS_END
static INPUT_PORTS_START( scandal )
+ // do not have the manual
PORT_START("DSWA")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, "1 (Easy)" )
PORT_DIPSETTING( 0x06, "2" )
PORT_DIPSETTING( 0x05, "3" )
@@ -1252,45 +1253,45 @@ static INPUT_PORTS_START( scandal )
PORT_DIPSETTING( 0x02, "6" )
PORT_DIPSETTING( 0x01, "7" )
PORT_DIPSETTING( 0x00, "8 (Hard)" )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x10, 0x10, "Character Display Test" ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "Character Display Test" )
+ PORT_START("DSWB") // very likely not populated on PCB
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
diff --git a/src/mame/drivers/nbmj9195.cpp b/src/mame/drivers/nbmj9195.cpp
index 2797a918661..b6e1371fda5 100644
--- a/src/mame/drivers/nbmj9195.cpp
+++ b/src/mame/drivers/nbmj9195.cpp
@@ -1161,54 +1161,53 @@ static INPUT_PORTS_START( gal10ren )
// I don't have manual for this game.
PORT_START("DSWA")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 1-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 1-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 1-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 1-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 1-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
+ PORT_DIPSETTING( 0x07, "1 (Easy)" )
+ PORT_DIPSETTING( 0x06, "2" )
+ PORT_DIPSETTING( 0x05, "3" )
+ PORT_DIPSETTING( 0x04, "4" )
+ PORT_DIPSETTING( 0x03, "5" )
+ PORT_DIPSETTING( 0x02, "6" )
+ PORT_DIPSETTING( 0x01, "7" )
+ PORT_DIPSETTING( 0x00, "8 (Hard)" )
+ PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:4,5")
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
+ PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" ) PORT_DIPLOCATION("DSWB:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
+ PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" ) PORT_DIPLOCATION("DSWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
+ PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
+ PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
+ PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" ) PORT_DIPLOCATION("DSWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
+ PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" ) PORT_DIPLOCATION("DSWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "Character Display Test" )
+ PORT_DIPNAME( 0x40, 0x40, "Character Display Test" ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" )
+ PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -1230,54 +1229,53 @@ static INPUT_PORTS_START( renaiclb )
// I don't have manual for this game.
PORT_START("DSWA")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 1-1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 1-2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 1-3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 1-4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 1-5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
+ PORT_DIPSETTING( 0x07, "1 (Easy)" )
+ PORT_DIPSETTING( 0x06, "2" )
+ PORT_DIPSETTING( 0x05, "3" )
+ PORT_DIPSETTING( 0x04, "4" )
+ PORT_DIPSETTING( 0x03, "5" )
+ PORT_DIPSETTING( 0x02, "6" )
+ PORT_DIPSETTING( 0x01, "7" )
+ PORT_DIPSETTING( 0x00, "8 (Hard)" )
+ PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:4,5")
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" )
+ PORT_DIPNAME( 0x40, 0x00, "Voices" ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_START("DSWB")
- PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
+ PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" ) PORT_DIPLOCATION("DSWB:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
+ PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" ) PORT_DIPLOCATION("DSWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
+ PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
+ PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
+ PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" ) PORT_DIPLOCATION("DSWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
+ PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" ) PORT_DIPLOCATION("DSWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "Character Display Test" )
+ PORT_DIPNAME( 0x40, 0x40, "Character Display Test" ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" )
+ PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
diff --git a/src/mame/drivers/next.cpp b/src/mame/drivers/next.cpp
index 26c29072d18..96bc17eca26 100644
--- a/src/mame/drivers/next.cpp
+++ b/src/mame/drivers/next.cpp
@@ -874,10 +874,6 @@ void next_state::machine_start()
}
timer_tm = timer_alloc(0);
-
- system_time systime;
- machine().base_datetime(systime);
- rtc->set_counter(systime.time);
}
void next_state::machine_reset()
diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp
index d9832defd54..00554d1a95c 100644
--- a/src/mame/drivers/nmk16.cpp
+++ b/src/mame/drivers/nmk16.cpp
@@ -6686,6 +6686,33 @@ ROM_START( bjtwinp )
ROM_LOAD( "bottom.ic27", 0x0c0000, 0x80000, CRC(6ebeb9e4) SHA1(b547b2fbcc0a35d6183dd4f19684b04839690a2b) )
ROM_END
+
+ROM_START( bjtwinpa )
+ ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "ic76.bin", 0x00000, 0x20000, CRC(81106d1e) SHA1(81c195173cf859f6266c160ee94ac4734edef085) )
+ ROM_LOAD16_BYTE( "ic75.bin", 0x00001, 0x20000, CRC(7c99b97f) SHA1(36e34b7a5bb876b7bbee46ace7acc03faeee211e) )
+
+ ROM_REGION( 0x010000, "fgtile", 0 )
+ ROM_LOAD( "ic35.bin", 0x000000, 0x010000, CRC(aa13df7c) SHA1(162d4f12364c68028e86fe97ee75c262daa4c699) ) /* 8x8 tiles */
+
+ ROM_REGION( 0x200000, "bgtile", 0 )
+ ROM_LOAD( "ic32_1.bin", 0x000000, 0x080000, CRC(e2d2b331) SHA1(d8fdbff497303a00fc866f0ef07ba74b369c0636) )
+ ROM_LOAD( "ic32_2.bin", 0x080000, 0x080000, CRC(28a3a845) SHA1(4daf71dce5e598ee7ee7e09bb08ec1b2f06f2b01) )
+ ROM_LOAD( "ic32_3.bin", 0x100000, 0x080000, CRC(ecce80c9) SHA1(ae7410f47e911988f654e78d585d78cf40e0ae5e) )
+
+ ROM_REGION( 0x100000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "ic100_1.bin", 0x000000, 0x080000, CRC(2ea7e460) SHA1(b8dc13994ae2433fc7c38412c9ea6f10f945bca5) )
+ ROM_LOAD16_BYTE( "ic100_2.bin", 0x000001, 0x080000, CRC(ec85e1b7) SHA1(2f9a60ad2beb22d1b41dab7db3634b8e36cfce3e) )
+
+ ROM_REGION( 0x140000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "bottom.ic30", 0x040000, 0x80000, CRC(b5ef197f) SHA1(89d675f921dead585c2fef44105a7aea2f1f399c) ) /* all banked */
+ ROM_LOAD( "top.ic30", 0x0c0000, 0x80000, CRC(ab50531d) SHA1(918987f01a8b1b007721d2b365e2b2fc536bd676) )
+
+ ROM_REGION( 0x140000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "top.ic27", 0x040000, 0x80000, CRC(adb2f256) SHA1(ab7bb6683799203d0f46705f2fd241c6de914e77) ) /* all banked */
+ ROM_LOAD( "bottom.ic27", 0x0c0000, 0x80000, CRC(6ebeb9e4) SHA1(b547b2fbcc0a35d6183dd4f19684b04839690a2b) )
+ROM_END
+
ROM_START( atombjt ) // based off bjtwina set
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_BYTE( "22.u67", 0x00000, 0x20000, CRC(bead8c70) SHA1(2694bb0639f6b94119c21faf3810f00ef20b50da) )
@@ -7861,8 +7888,9 @@ GAME( 1992, cactus, sabotenb, bjtwin, sabotenb, nmk16_state, nmk, ROT0,
GAME( 1993, bjtwin, 0, bjtwin, bjtwin, nmk16_state, bjtwin, ROT270, "NMK", "Bombjack Twin (set 1)", MACHINE_NO_COCKTAIL )
GAME( 1993, bjtwina, bjtwin, bjtwin, bjtwin, nmk16_state, bjtwin, ROT270, "NMK", "Bombjack Twin (set 2)", MACHINE_NO_COCKTAIL )
-GAME( 1993, bjtwinp, bjtwin, bjtwin, bjtwin, driver_device, 0, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures)", MACHINE_NO_COCKTAIL ) // Genuine NMK PCB but GFX aren't encrypted
-GAME( 1993, atombjt, bjtwin, atombjt, bjtwin, driver_device, 0, ROT270, "bootleg", "Atom (bootleg of Bombjack Twin)", MACHINE_NO_COCKTAIL | MACHINE_NOT_WORKING ) // some non-trivial mods to the gfx and sound hw
+GAME( 1993, bjtwinp, bjtwin, bjtwin, bjtwin, driver_device, 0, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures, set 1)", MACHINE_NO_COCKTAIL ) // Cheap looking PCB, but Genuine NMK PCB, GFX aren't encrypted (maybe Korean version not proto?)
+GAME( 1993, bjtwinpa, bjtwin, bjtwin, bjtwin, nmk16_state, bjtwin, ROT270, "NMK", "Bombjack Twin (prototype? with adult pictures, set 2)", MACHINE_NO_COCKTAIL ) // same PCB as above, different program revision, GFX are encrypted
+GAME( 1993, atombjt, bjtwin, atombjt, bjtwin, driver_device, 0, ROT270, "bootleg", "Atom (bootleg of Bombjack Twin)", MACHINE_NO_COCKTAIL | MACHINE_NOT_WORKING ) // some non-trivial mods to the gfx and sound hw (playmark hardware?)
GAME( 1995, nouryoku, 0, bjtwin, nouryoku, nmk16_state, nmk, ROT0, "Tecmo", "Nouryoku Koujou Iinkai", MACHINE_NO_COCKTAIL )
diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp
index 0c625e9d948..9da37b7d252 100644
--- a/src/mame/drivers/rainbow.cpp
+++ b/src/mame/drivers/rainbow.cpp
@@ -3,8 +3,7 @@
//#define BOOST_DEBUG_PERFORMANCE
-/* NEW COLOR EMULATION (state as of Oct. 1st 2016):
-
+/* GDC COLOR EMULATION
//-------------------- Differences to VT240: ---------------------------------------------------
// - Registers of graphics option not directly mapped (indirect access via mode register)
// - write mask is 16 bits wide (not only 8)
@@ -17,33 +16,30 @@
// Palette takes 2 byte per palette entry. CLUT ("color map") is 32 byte long.
------------------------------------------------------------------------------------------------
-SCREEN 1 vs. SCREEN 2 IN EMULATION
-// All GDC 7220 output is displayed on the right. Be it color or monochrome, Option Graphics output is on screen 2.
-// If you select MONO_MONITOR via DIP, output from GDC will appear on screen 2 in 16 shades of grey.
-// The type of monochrome monitor (VR-210 A, B or C) is selectable via another DIP (coarsly simulates a phosphor color).
-
THE DEC 'R-M-B' COLOR CABLE VS. THE UNOFFICIAL 'R-G-B' MODE (A BIT OF HISTORY)
-// VR-241 came with a standard DEC "color cable", where the green gun is wired to the mono output (DIP switch COLOR_MONITOR).
-// Port $0A decides whether the mono out pin on the back of the Rainbow holds graphics signals or simple text.
-//
-// An unofficial DIY cable gave R-G-B graphics plus seperate text (emulated by DIP setting: DUAL MONITOR).
-// Unfortunately, popular programs like AutoCAD and GWBASIC were initially written for 1 single VR201 or VT241 monitor.
-// A 'R-M-B' cable is expected, and thus writes go to M(ono) instead of G(reen). An awful tint results on R-G-B.
-
-// DEC decided not to support this mode. Nevertheless, AutoCad 2.6 offers a true dual monitor mode.
+// The standard DEC "color cable" connected the green gun of a VR241 to the mono output of the Rainbow
+// (DIP setting COLOR_MONITOR).
+//
+// An unofficial DIY cable enabled R-G-B graphics + seperate text (emulated by DIP setting DUAL MONITOR).
+// As DEC decided not to endorse R-G-B, many commercial programs show incorrect colors.
// A patch from one of the archives corrects the GWBASIC palette problem when using 2 monitors [Bavarese].
EMULATION SPECIFIC
-// A log message informs the user if text output is disabled. Means: software is not ready / patched for dual monitor use.
-// In our emulation, DUAL MONITOR enables both screens, even if onboard graphics has been accidently shut off
-// (helps debugging semi broken programs, try Doodle).
+// If a program disables text output (via port $0A), a log message is given.
-BUGS
-- HIRES-MODE WRONG. MEDRES SEMI-CORRECT.
-BROKEN SPRITES / NO BORDER GRAPHICS IN "PACMAN" (freeware clone; MEDRES; borders probably drawn in vector mode)
+// DUAL MONITOR enables both screens, even if onboard graphics has been accidently shut off
+// (helps debugging semi broken programs, for example Doodle).
+
+SCREEN 1 vs. SCREEN 2 IN EMULATION
+// All GDC 7220 output is displayed on the right. Be it color or monochrome, Option Graphics output is on screen 2.
+// If you select MONO_MONITOR via DIP, output from GDC will appear on screen 2 in 16 shades of grey.
+// The type of monochrome monitor (VR-210 A, B or C) is selectable via another DIP (coarsly simulates a phosphor color).
-- VECTOR MODE SEEMS TO DISPLAY NOTHING AT ALL (16 bit access botched?)
-- CLEARING THE SCREEN DOES NOT WORK (bug in VRAM_W...?)
+BUGS
+- MEDRES LOOKS CORRECT
+- HIRES-MODE UNTESTED.
+- VECTOR MODE SEEMS TO DISPLAY NOTHING AT ALL (16 bit access botched?) Examples: MMIND (MasterMind, after BMP logo), SOLIT (Solitair).
+- GDC diagnostic disk bails out on 11 of 13 low level tests. SCROLL CHECK crashes CPU.
UNIMPLEMENTED:
// - Video levels for color modes.
@@ -2353,7 +2349,7 @@ WRITE_LINE_MEMBER(rainbow_state::GDC_vblank_irq)
// VIDEO LEVELS: 0 is 100 % output; F is 0 % output
// Levels for 100-B model, taken from page 46 of PDF, multiplied by 2.55 to obtain a range of 0...255
- const int v_levels[16] = { 255, 217, 201,186, 171, 156, 140, 125, 110, 97, 79, 66, 54, 31, 18, 0 };
+ const UINT8 v_levels[16] = { 255, 217, 201,186, 171, 156, 140, 125, 110, 97, 79, 66, 54, 31, 18, 0 };
if(m_scroll_buffer_changed)
{
@@ -2715,6 +2711,7 @@ WRITE16_MEMBER(rainbow_state::vram_w)
if(m_GDC_MODE_REGISTER & GDC_MODE_VECTOR) // VT240 : if(SELECT_VECTOR_PATTERN_REGISTER)
{
chr = BITSWAP8(m_vpat, m_patidx, m_patidx, m_patidx, m_patidx, m_patidx, m_patidx, m_patidx, m_patidx);
+ chr |= (chr << 8);
if(m_patcnt-- == 0)
{
m_patcnt = m_patmult;
@@ -2735,7 +2732,7 @@ WRITE16_MEMBER(rainbow_state::vram_w)
{
// ALU_PS register: controls logic used in writing to the bitmap / inhibiting of writing to specified planes.
// plane select and logic operations on write buffer... (and more) **** SEE PAGE 36 ****
- int ps = ~m_GDC_ALU_PS_REGISTER & 0x0F; // PLANE SELECT 0..3 // VT 240 : ~m_GDC_ALU_PS_REGISTER & 3;
+ int ps = m_GDC_ALU_PS_REGISTER & 0x0F; // PLANE SELECT 0..3 // VT 240 : ~m_GDC_ALU_PS_REGISTER & 3;
UINT8 fore = ( (m_GDC_FG_BG & 0xf0) ) >> 4;
UINT8 back = (m_GDC_FG_BG & 0x0f); // background : 0..3 confirmed, see p.39 AA-AE36A (PDF)
@@ -2795,9 +2792,6 @@ WRITE16_MEMBER(rainbow_state::vram_w)
WRITE8_MEMBER(rainbow_state::GDC_EXTRA_REGISTER_w)
{
static int last_message, last_mode, last_readback, last_scroll_index;
-// rectangle curvisarea = m_screen2->visible_area();
-// int vert_pix_total = 256; // should be 240
-// int horiz_pix_total;
if(offset > 0) // Port $50 reset done @ boot ROM 1EB4/8 regardless if option present.
if (m_inp7->read() != 1)
@@ -2878,7 +2872,7 @@ WRITE8_MEMBER(rainbow_state::GDC_EXTRA_REGISTER_w)
if(m_GDC_INDIRECT_REGISTER & GDC_SELECT_PATTERN)
{
- m_vpat = data; // VGl. "vpat_w" im Original!
+ m_vpat = data;
m_patcnt = m_patmult;
m_patidx = 7; // correct...?
break;
@@ -2892,7 +2886,7 @@ WRITE8_MEMBER(rainbow_state::GDC_EXTRA_REGISTER_w)
if(m_GDC_INDIRECT_REGISTER & GDC_SELECT_ALU_PS)
{
- m_GDC_ALU_PS_REGISTER = data; // Neither bitswap nor negated (and also not both)...
+ m_GDC_ALU_PS_REGISTER = ~data; // Negated...
break;
}
@@ -2905,19 +2899,10 @@ WRITE8_MEMBER(rainbow_state::GDC_EXTRA_REGISTER_w)
last_message = 2;
if(data & GDC_MODE_HIGHRES)
- {
-// horiz_pix_total = 800;
printf(" * HIGH RESOLUTION * ");
- }
else
- {
-// horiz_pix_total = 384;
printf(" MEDIUM RESOLUTION ");
- }
}
- // DOES NOT WORK - at least for medres the screen is too far stretched :
-// curvisarea.set(0, horiz_pix_total - 1, 0, vert_pix_total - 1);
-// subdevice<screen_device>("screen2")->configure(horiz_pix_total, vert_pix_total, curvisarea, HZ_TO_ATTOSECONDS(60));
if(last_mode != (data & GDC_MODE_VECTOR))
{
@@ -2990,12 +2975,12 @@ WRITE8_MEMBER(rainbow_state::GDC_EXTRA_REGISTER_w)
// --------- WRITE MASK (2 x 8 = 16 bits) USED IN WORD MODE ONLY !
// NOTE: there is NO specific order for the WRITE_MASK (according to txt/code samples in PDF)!
- // LOW... HI VERIFED
+ // !! NEW: LOW... HI JUXTAPOSITION...!!
case 4: // 54h Write Mask LOW
- m_GDC_WRITE_MASK = ( m_GDC_WRITE_MASK & 0xFF00 ) | BITSWAP8(~data, 0, 1, 2, 3, 4, 5, 6, 7);
+ m_GDC_WRITE_MASK = ( BITSWAP8(data, 0, 1, 2, 3, 4, 5, 6, 7) << 8 ) | ( m_GDC_WRITE_MASK & 0x00FF );
break;
case 5: // 55h Write Mask HIGH
- m_GDC_WRITE_MASK = ( BITSWAP8(~data, 0, 1, 2, 3, 4, 5, 6, 7) << 8 ) | ( m_GDC_WRITE_MASK & 0x00FF );
+ m_GDC_WRITE_MASK = ( m_GDC_WRITE_MASK & 0xFF00 ) | BITSWAP8(data, 0, 1, 2, 3, 4, 5, 6, 7);
break;
}
}
diff --git a/src/mame/drivers/scobra.cpp b/src/mame/drivers/scobra.cpp
index 84092439b02..64d65fdd805 100644
--- a/src/mame/drivers/scobra.cpp
+++ b/src/mame/drivers/scobra.cpp
@@ -1524,6 +1524,29 @@ ROM_START( hustlerb4 )
ROM_LOAD( "top.c5", 0x0000, 0x0800, CRC(88226086) SHA1(fe2da172313063e5b056fc8c8d8b2a5c64db5179) )
ROM_END
+// the following romset came from a blister, so no PCB infos. It's a mix between hustlerb4's main CPU and GFX ROMs and hustlerb's audio CPU ROMs.
+
+ROM_START( hustlerb5 )
+ ROM_REGION( 0x10000, "maincpu", 0 ) // identical to hustlerb but in 6 roms instead of 3
+ ROM_LOAD( "b1.bin", 0x0000, 0x0800, CRC(f87d75c7) SHA1(48f0f5289366a3c4dec86f5bb48d16a33745844d) )
+ ROM_LOAD( "b2.bin", 0x0800, 0x0800, CRC(a639d4e1) SHA1(2130de635f41f915db26a5fcba9654ae140d0ecc) )
+ ROM_LOAD( "b3.bin", 0x1000, 0x0800, CRC(1b75520e) SHA1(b4ebb69c0f17fde7a527d54ec8406b1b80798e0c) )
+ ROM_LOAD( "b4.bin", 0x1800, 0x0800, CRC(fdea3165) SHA1(6120919445599ec9116d14d0baf4fb4e4720e473) )
+ ROM_LOAD( "b5.bin", 0x2000, 0x0800, CRC(730100e1) SHA1(81e44d768ca4e654981c14660e12e355fe720636) )
+ ROM_LOAD( "b6.bin", 0x2800, 0x0800, CRC(68dff552) SHA1(5dad38db45afbd79b5627a75b295fc920ad68856) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_LOAD( "bs1.bin", 0x0000, 0x0800, CRC(b559bfde) SHA1(f7733fbc5cabb441ba039b9d7202aaf0cebb9a85) )
+ ROM_LOAD( "bs2.bin", 0x0800, 0x0800, CRC(6ef96cfb) SHA1(eba0bdc8bc1652ff2f62594371ded711dbfcce86) )
+
+ ROM_REGION( 0x1000, "gfx1", 0 )
+ ROM_LOAD( "c1.bin", 0x0000, 0x0800, CRC(0bdfad0e) SHA1(8e6f1737604f3801c03fa2e9a5e6a2778b54bae8) )
+ ROM_LOAD( "c2.bin", 0x0800, 0x0800, CRC(8e062177) SHA1(7e52a1669804b6c2f694cfc64b04abc8246bb0c2) )
+
+ ROM_REGION( 0x0020, "proms", 0 ) // not dumped for this set, but the same in all other original and bootleg sets
+ ROM_LOAD( "mni6331.e6", 0x0000, 0x0020, CRC(aa1f7f5e) SHA1(311dd17aa11490a1173c76223e4ccccf8ea29850) )
+ROM_END
+
ROM_START( mimonkey )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "mm1.2e", 0x0000, 0x1000, CRC(9019f1b1) SHA1(0c45f64e39b9a182f6162ab520ced6ef0686466c) )
@@ -1595,6 +1618,7 @@ GAME( 1981, billiard, hustler, hustler, hustler, scramble_state, billiard
GAME( 1981, hustlerb, hustler, hustlerb, hustler, driver_device, 0, ROT90, "bootleg (Digimatic)", "Video Hustler (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, hustlerb2, hustler, hustler, hustler, scramble_state, hustlerd, ROT90, "bootleg", "Fatsy Gambler (Video Hustler bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, hustlerb4, hustler, hustlerb4, hustler, driver_device, 0, ROT90, "bootleg", "Video Hustler (bootleg, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, hustlerb5, hustler, hustlerb, hustler, driver_device, 0, ROT90, "bootleg", "Video Hustler (bootleg, set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, mimonkey, 0, mimonkey, mimonkey, scramble_state, mimonkey, ROT90, "Universal Video Games", "Mighty Monkey", MACHINE_SUPPORTS_SAVE )
GAME( 1982, mimonsco, mimonkey, mimonkey, mimonsco, scramble_state, mimonsco, ROT90, "bootleg", "Mighty Monkey (bootleg on Super Cobra hardware)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/sms.cpp b/src/mame/drivers/sms.cpp
index 2f12aedb724..529b3b38825 100644
--- a/src/mame/drivers/sms.cpp
+++ b/src/mame/drivers/sms.cpp
@@ -890,6 +890,8 @@ static MACHINE_CONFIG_DERIVED( smsj, sms1_kr )
MCFG_CPU_IO_MAP(smsj_io)
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_10_738635MHz/3)
+ // if this output gain is changed, the gain set when unmute the output need
+ // to be changed too, probably along the gain set for the Mark III FM Unit.
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/srmp6.cpp b/src/mame/drivers/srmp6.cpp
index 2ca8ab298f2..e09dfd951fe 100644
--- a/src/mame/drivers/srmp6.cpp
+++ b/src/mame/drivers/srmp6.cpp
@@ -620,8 +620,8 @@ static INPUT_PORTS_START( srmp6 )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
PORT_BIT( 0x0180, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("DSW") /* 16-bit DSW1+DSW2 */
- PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coinage ) ) // DSW1
+ PORT_START("DSW") /* 16-bit DSW1 (0x0000) +DSW2 (0x0700) */
+ PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:1,2,3")
PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
@@ -630,22 +630,22 @@ static INPUT_PORTS_START( srmp6 )
PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW1:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW1:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW1:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0000, "Re-Clothe" )
+ PORT_DIPNAME( 0x0040, 0x0000, "Re-Clothe" ) PORT_DIPLOCATION("DSW1:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, "Nudity" )
+ PORT_DIPNAME( 0x0080, 0x0080, "Nudity" ) PORT_DIPLOCATION("DSW1:8")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
- PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Difficulty ) ) // DSW2
+ PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW2:1,2,3")
PORT_DIPSETTING( 0x0000, "8" )
PORT_DIPSETTING( 0x0100, "7" )
PORT_DIPSETTING( 0x0200, "6" )
@@ -654,19 +654,19 @@ static INPUT_PORTS_START( srmp6 )
PORT_DIPSETTING( 0x0500, "2" )
PORT_DIPSETTING( 0x0600, "1" )
PORT_DIPSETTING( 0x0700, "4" )
- PORT_DIPNAME( 0x0800, 0x0000, "Kuitan" )
+ PORT_DIPNAME( 0x0800, 0x0000, "Kuitan" ) PORT_DIPLOCATION("DSW2:4")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
- PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Continues ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Continues ) ) PORT_DIPLOCATION("DSW2:5")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
- PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:6")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW2:7")
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )
+ PORT_SERVICE_DIPLOC( 0x8000, IP_ACTIVE_LOW, "DSW2:8" ) PORT_DIPLOCATION("DSW2:8")
INPUT_PORTS_END
/***************************************************************************
diff --git a/src/mame/drivers/toaplan1.cpp b/src/mame/drivers/toaplan1.cpp
index 36ea7c5ec07..9a916bfee97 100644
--- a/src/mame/drivers/toaplan1.cpp
+++ b/src/mame/drivers/toaplan1.cpp
@@ -2427,8 +2427,39 @@ ROM_START( demonwld )
ROM_LOAD( "prom13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
ROM_END
+// has the same sound rom and same attract order as the parent set, but still a 1989 copyright
+// main 68k program ROMs had an additional 'N' stamped on them
ROM_START( demonwld1 )
ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_BYTE( "o16n-10.bin", 0x000000, 0x20000, CRC(fc38aeaa) SHA1(db338b3ade4ee90a9528b42a6128b854efdb289f) )
+ ROM_LOAD16_BYTE( "o16n-09.bin", 0x000001, 0x20000, CRC(74f66643) SHA1(3a908f9e1cbd59d674ae719e3d9c87e729dd907f) )
+
+ ROM_REGION( 0x8000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "o16-11.bin", 0x0000, 0x8000, CRC(dbe08c85) SHA1(536a242bfe916d15744b079261507af6f12b5b50) )
+
+ ROM_REGION( 0x2000, "dsp", 0 ) /* Co-Processor TMS320C10 MCU code */
+ ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
+ ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
+ ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
+ ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
+ ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
+ ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
+ ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
+ ROM_LOAD16_BYTE( "rom04", 0x40001, 0x20000, CRC(76fd3201) SHA1(7a12737bf90bd9760074132edeb22f3fd3e16b4f) )
+
+ ROM_REGION( 0x40, "proms", 0 ) /* nibble bproms, lo/hi order to be determined */
+ ROM_LOAD( "prom12.bpr", 0x00, 0x20, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */
+ ROM_LOAD( "prom13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
+ROM_END
+
+ROM_START( demonwld2 )
+ ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_BYTE( "o16-10.rom", 0x000000, 0x20000, CRC(036ee46c) SHA1(60868e5e08e0c9a538ae786de0de6b2531b30b11) )
ROM_LOAD16_BYTE( "o16-09.rom", 0x000001, 0x20000, CRC(bed746e3) SHA1(056668edb7df99bbd240e387af17cf252d1448f3) )
@@ -2456,7 +2487,7 @@ ROM_START( demonwld1 )
ROM_LOAD( "prom13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
ROM_END
-ROM_START( demonwld2 )
+ROM_START( demonwld3 )
ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_BYTE( "o16-10-2.bin", 0x000000, 0x20000, CRC(84ee5218) SHA1(dc2b017ee630330163be320008d8a0d761cb0cfb) ) // aka o16_10ii
ROM_LOAD16_BYTE( "o16-09-2.bin", 0x000001, 0x20000, CRC(cf474cb2) SHA1(5c049082b8d7118e0d2e50c6ae07f9d3d0110498) ) // aka o16_09ii
@@ -2485,7 +2516,7 @@ ROM_START( demonwld2 )
ROM_LOAD( "prom13.bpr", 0x20, 0x20, CRC(a1e17492) SHA1(9ddec4c97f2d541f69f3c32c47aaa21fd9699ae2) ) /* ??? */
ROM_END
-ROM_START( demonwld3 )
+ROM_START( demonwld4 )
ROM_REGION( 0x040000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_BYTE( "o16-10.bin", 0x000000, 0x20000, CRC(6f7468e0) SHA1(87ef7733fd0d00d0d375dbf30332cf0614480dc2) )
ROM_LOAD16_BYTE( "o16-09.bin", 0x000001, 0x20000, CRC(a572f5f7) SHA1(3d6a443cecd46734c7e1b761130909482c7a9914) )
@@ -2994,9 +3025,10 @@ GAME( 1989, zerowing, 0, zerowing, zerowing2, toaplan1_state, toaplan1,
GAME( 1989, zerowing1, zerowing, zerowing, zerowing, toaplan1_state, toaplan1, ROT0, "Toaplan", "Zero Wing (1P set)", 0 )
GAME( 1989, zerowingw, zerowing, zerowing, zerowing2, toaplan1_state, toaplan1, ROT0, "Toaplan (Williams license)", "Zero Wing (2P set, Williams license)", 0 )
GAME( 1990, demonwld, 0, demonwld, demonwld, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 1)", 0 )
-GAME( 1989, demonwld1, demonwld, demonwld, demonwld1, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 2)", 0 )
+GAME( 1989, demonwld1, demonwld, demonwld, demonwld, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 2)", 0 )
GAME( 1989, demonwld2, demonwld, demonwld, demonwld1, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 3)", 0 )
GAME( 1989, demonwld3, demonwld, demonwld, demonwld1, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 4)", 0 )
+GAME( 1989, demonwld4, demonwld, demonwld, demonwld1, toaplan1_state, demonwld, ROT0, "Toaplan", "Demon's World / Horror Story (set 5)", 0 )
GAME( 1990, fireshrk, 0, samesame, fireshrk, toaplan1_state, toaplan1, ROT270, "Toaplan", "Fire Shark", MACHINE_NO_SOUND )
GAME( 1989, fireshrka, fireshrk, samesame, fireshrka, toaplan1_state, toaplan1, ROT270, "Toaplan", "Fire Shark (earlier)", MACHINE_NO_SOUND )
GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_state, toaplan1, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 1, easier)", MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/v1050.cpp b/src/mame/drivers/v1050.cpp
index 966e008b9e4..f3aa72c312c 100644
--- a/src/mame/drivers/v1050.cpp
+++ b/src/mame/drivers/v1050.cpp
@@ -142,7 +142,6 @@ Notes:
TODO:
- - does not boot CP/M anymore
- floppy 1 is broken
- write to banked RAM at 0x0000-0x1fff when ROM is active
- real keyboard w/i8049
@@ -156,7 +155,16 @@ Notes:
void v1050_state::set_interrupt(int line, int state)
{
- m_pic->r_w(line, (m_int_mask & (1 << state)) ? 0 : 1);
+ if (state)
+ {
+ m_int_state |= (1 << line);
+ }
+ else
+ {
+ m_int_state &= ~(1 << line);
+ }
+
+ m_pic->r_w(line, ((m_int_state & m_int_mask) & (1 << line)) ? 0 : 1);
}
void v1050_state::bankswitch()
@@ -1137,4 +1145,4 @@ ROM_END
// System Drivers
// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
-COMP( 1983, v1050, 0, 0, v1050, v1050, driver_device, 0, "Visual Technology Inc", "Visual 1050", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND | MACHINE_IMPERFECT_KEYBOARD )
+COMP( 1983, v1050, 0, 0, v1050, v1050, driver_device, 0, "Visual Technology Inc", "Visual 1050", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND | MACHINE_IMPERFECT_KEYBOARD )
diff --git a/src/mame/includes/hh_ucom4.h b/src/mame/includes/hh_ucom4.h
index a50bc1087ff..9779570f090 100644
--- a/src/mame/includes/hh_ucom4.h
+++ b/src/mame/includes/hh_ucom4.h
@@ -36,9 +36,13 @@ public:
// misc common
UINT8 m_port[9]; // MCU port A-I write data (optional)
+ UINT8 m_int; // MCU INT pin state
UINT16 m_inp_mux; // multiplexed inputs mask
UINT8 read_inputs(int columns);
+ void refresh_interrupts(void);
+ void set_interrupt(int state);
+ DECLARE_INPUT_CHANGED_MEMBER(single_interrupt_line);
// display common
int m_display_wait; // led/lamp off-delay in microseconds (default 33ms)
diff --git a/src/mame/includes/v1050.h b/src/mame/includes/v1050.h
index ce79c1a7be9..bfb2f82ba82 100644
--- a/src/mame/includes/v1050.h
+++ b/src/mame/includes/v1050.h
@@ -90,6 +90,8 @@ public:
m_rom(*this, Z80_TAG),
m_video_ram(*this, "video_ram"),
m_attr_ram(*this, "attr_ram"),
+ m_int_mask(0),
+ m_int_state(0),
m_rtc_ppi_pa(0),
m_rtc_ppi_pc(0)
{
@@ -192,6 +194,7 @@ public: // HACK for MC6845
// interrupt state
UINT8 m_int_mask; // interrupt mask
+ UINT8 m_int_state;
int m_f_int_enb; // floppy interrupt enable
bool m_fdc_irq;
bool m_fdc_drq;
diff --git a/src/mame/layout/fidel_bcc.lay b/src/mame/layout/fidel_bcc.lay
index d9bf4712953..0ff9ca4906a 100644
--- a/src/mame/layout/fidel_bcc.lay
+++ b/src/mame/layout/fidel_bcc.lay
@@ -3,6 +3,8 @@
<!-- define elements -->
+ <element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
+
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
@@ -12,58 +14,160 @@
<disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
</element>
- <element name="txt_check">
- <text string="CHECK"><color red="0.6" green="0.6" blue="0.6" /></text>
- </element>
- <element name="txt_lose">
- <text string="I LOSE"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <rect state="1">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
</element>
- <element name="txt_from">
- <text string="FROM"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="text_check"><text string="CHECK"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_lose"><text string="I LOSE"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_from"><text string="FROM"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_to"><text string="TO"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+
+ <element name="text_b1">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="RE"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b2">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="CB"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b3">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="CL"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b4">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="EN"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b5">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="LV"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b6">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="DM"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b7">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="PB"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b8">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="PV"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b9">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="A1"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b10">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="b2"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b11">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="C3"><color red="0.04" green="0.04" blue="0.04" /></text>
</element>
- <element name="txt_to">
- <text string="TO"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="text_b12">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="d4"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b13">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="E5"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b14">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="F6"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b15">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="g7"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b16">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="H8"><color red="0.04" green="0.04" blue="0.04" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="0" right="47" top="0" bottom="25" />
-
- <bezel element="txt_check">
- <bounds x="1" y="1" width="20" height="3" />
- </bezel>
- <bezel element="txt_lose">
- <bounds x="26" y="1" width="20" height="3" />
- </bezel>
- <bezel name="4.a" element="led">
- <bounds x="2" y="1" width="3" height="3" />
- </bezel>
- <bezel name="5.a" element="led">
- <bounds x="27" y="1" width="3" height="3" />
- </bezel>
-
- <bezel element="txt_from">
- <bounds x="1" y="21" width="20" height="3" />
- </bezel>
- <bezel element="txt_to">
- <bounds x="26" y="21" width="20" height="3" />
- </bezel>
-
- <bezel name="digit0" element="digit">
- <bounds x="1" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit1" element="digit">
- <bounds x="11" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit2" element="digit">
- <bounds x="26" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit3" element="digit">
- <bounds x="36" y="5" width="10" height="15" />
- </bezel>
+ <bounds left="-0.5" right="18" top="7.7" bottom="36" />
+
+ <!-- 7segs/leds -->
+
+ <bezel element="text_check"><bounds x="1" y="8.2" width="8" height="2" /></bezel>
+ <bezel element="text_lose"><bounds x="10.5" y="8.2" width="8" height="2" /></bezel>
+ <bezel name="4.a" element="led"><bounds x="0" y="8.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="5.a" element="led"><bounds x="9.5" y="8.5" width="1.5" height="1.5" /></bezel>
+
+ <bezel element="text_from"><bounds x="0" y="17.2" width="8" height="2" /></bezel>
+ <bezel element="text_to"><bounds x="9.5" y="17.2" width="8" height="2" /></bezel>
+
+ <bezel name="digit0" element="digit"><bounds x="0" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="4" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="9.5" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="13.5" y="11" width="4" height="6" /></bezel>
+
+ <!-- button panel -->
+
+ <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="32" width="4" height="3" /></bezel>
+
+ <bezel element="text_b1"><bounds x="0.1" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b2"><bounds x="4.6" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b3"><bounds x="9.1" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b4"><bounds x="13.6" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b5"><bounds x="0.1" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b6"><bounds x="4.6" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b7"><bounds x="9.1" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b8"><bounds x="13.6" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b9"><bounds x="0.1" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b10"><bounds x="4.6" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b11"><bounds x="9.1" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b12"><bounds x="13.6" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b13"><bounds x="0.1" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b14"><bounds x="4.6" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b15"><bounds x="9.1" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b16"><bounds x="13.6" y="32.5" width="3.8" height="2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="0" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="9" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="13.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="0" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="9" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="13.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="0" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="4.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="9" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="13.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="0" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="4.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="9" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="13.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/fidel_cc.lay b/src/mame/layout/fidel_cc.lay
index 6c10abb5180..b887a90162c 100644
--- a/src/mame/layout/fidel_cc.lay
+++ b/src/mame/layout/fidel_cc.lay
@@ -3,6 +3,8 @@
<!-- define elements -->
+ <element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
+
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
@@ -12,58 +14,160 @@
<disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
</element>
- <element name="txt_check">
- <text string="CHECK"><color red="0.6" green="0.6" blue="0.6" /></text>
- </element>
- <element name="txt_lose">
- <text string="I LOSE"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <rect state="1">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
</element>
- <element name="txt_from">
- <text string="FROM"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="text_check"><text string="CHECK"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_lose"><text string="I LOSE"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_from"><text string="FROM"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_to"><text string="TO"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+
+ <element name="text_b1">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="RE"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b2">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="spk"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b3">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="CL"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b4">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="EN"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b5">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="LV"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b6">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="DM"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b7">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="PB"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b8">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="PV"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b9">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="A1"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b10">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="b2"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b11">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="C3"><color red="0.04" green="0.04" blue="0.04" /></text>
</element>
- <element name="txt_to">
- <text string="TO"><color red="0.6" green="0.6" blue="0.6" /></text>
+ <element name="text_b12">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="d4"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b13">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="E5"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b14">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="F6"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b15">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="g7"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b16">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="H8"><color red="0.04" green="0.04" blue="0.04" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="0" right="47" top="0" bottom="25" />
-
- <bezel element="txt_check">
- <bounds x="1" y="1" width="20" height="3" />
- </bezel>
- <bezel element="txt_lose">
- <bounds x="26" y="1" width="20" height="3" />
- </bezel>
- <bezel name="1.7" element="led">
- <bounds x="2" y="1" width="3" height="3" />
- </bezel>
- <bezel name="0.7" element="led">
- <bounds x="27" y="1" width="3" height="3" />
- </bezel>
-
- <bezel element="txt_from">
- <bounds x="1" y="21" width="20" height="3" />
- </bezel>
- <bezel element="txt_to">
- <bounds x="26" y="21" width="20" height="3" />
- </bezel>
-
- <bezel name="digit0" element="digit">
- <bounds x="1" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit1" element="digit">
- <bounds x="11" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit2" element="digit">
- <bounds x="26" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit3" element="digit">
- <bounds x="36" y="5" width="10" height="15" />
- </bezel>
+ <bounds left="-0.5" right="18" top="7.7" bottom="36" />
+
+ <!-- 7segs/leds -->
+
+ <bezel element="text_check"><bounds x="1" y="8.2" width="8" height="2" /></bezel>
+ <bezel element="text_lose"><bounds x="10.5" y="8.2" width="8" height="2" /></bezel>
+ <bezel name="1.7" element="led"><bounds x="0" y="8.5" width="1.5" height="1.5" /></bezel>
+ <bezel name="0.7" element="led"><bounds x="9.5" y="8.5" width="1.5" height="1.5" /></bezel>
+
+ <bezel element="text_from"><bounds x="0" y="17.2" width="8" height="2" /></bezel>
+ <bezel element="text_to"><bounds x="9.5" y="17.2" width="8" height="2" /></bezel>
+
+ <bezel name="digit0" element="digit"><bounds x="0" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="4" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="9.5" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="13.5" y="11" width="4" height="6" /></bezel>
+
+ <!-- button panel -->
+
+ <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="32" width="4" height="3" /></bezel>
+
+ <bezel element="text_b1"><bounds x="0.1" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b2"><bounds x="4.6" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b3"><bounds x="9.1" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b4"><bounds x="13.6" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b5"><bounds x="0.1" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b6"><bounds x="4.6" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b7"><bounds x="9.1" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b8"><bounds x="13.6" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b9"><bounds x="0.1" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b10"><bounds x="4.6" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b11"><bounds x="9.1" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b12"><bounds x="13.6" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b13"><bounds x="0.1" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b14"><bounds x="4.6" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b15"><bounds x="9.1" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b16"><bounds x="13.6" y="32.5" width="3.8" height="2" /></bezel>
+
+ <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="9" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="13.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="0" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="9" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="13.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="0" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="4.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="9" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="13.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="0" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="4.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="9" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="13.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/fidel_chesster.lay b/src/mame/layout/fidel_chesster.lay
index 28a5fab7f74..cd2044bf41e 100644
--- a/src/mame/layout/fidel_chesster.lay
+++ b/src/mame/layout/fidel_chesster.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></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>
@@ -209,9 +207,6 @@
<view name="Internal Layout">
<bounds left="-7" right="93" top="-2" bottom="103" />
- <bezel element="static_black">
- <bounds left="-7" right="93" top="-2" bottom="103" />
- </bezel>
<bezel element="white"><bounds x="-7.5" y="-2.5" width="101" height="106" /></bezel>
diff --git a/src/mame/layout/fidel_csc.lay b/src/mame/layout/fidel_csc.lay
index 55b42c34969..c4b883c3982 100644
--- a/src/mame/layout/fidel_csc.lay
+++ b/src/mame/layout/fidel_csc.lay
@@ -1,9 +1,8 @@
<?xml version="1.0"?>
<mamelayout version="2">
-<!-- other than panel button mappings, layout is identical to vsc -->
+<!-- luascript -->
-<!-- define elements -->
<script>
local layout = {}
local board
@@ -82,7 +81,10 @@
return layout, "fidel_csc"
</script>
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+
+<!-- other than panel button mappings, layout is identical to vsc -->
+
+<!-- define elements -->
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
@@ -274,9 +276,6 @@
<view name="Internal Layout">
<bounds left="-2" right="98" top="-18" bottom="88" />
- <bezel element="static_black">
- <bounds left="-2" right="98" top="-18" bottom="88" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2" width="101" height="90.5" /></bezel>
diff --git a/src/mame/layout/fidel_des2000.lay b/src/mame/layout/fidel_des2000.lay
new file mode 100644
index 00000000000..238b0b5562d
--- /dev/null
+++ b/src/mame/layout/fidel_des2000.lay
@@ -0,0 +1,456 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <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="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <disk state="1">
+ <bounds x="0.12" y="0.12" width="0.76" height="0.76" />
+ <color red="1.0" green="1.0" blue="1.0" />
+ </disk>
+ </element>
+ <element name="hlb" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <disk state="1">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="1.0" green="1.0" blue="1.0" />
+ </disk>
+ </element>
+
+ <element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element>
+ <element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></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.81" green="0.8" blue="0.79" /></disk></element>
+
+ <element name="text_1">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="1" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="2" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_3">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="3" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_4">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="4" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_5">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="5" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_6">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="6" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_7">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="7" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_8">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="8" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+
+ <element name="text_9">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="9" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_10">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="10" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_11">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="11" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_12">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="12" align="2"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+
+ <element name="text_a">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_b">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_c">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_d">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_e">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_f">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_g">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_h">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+
+ <element name="text_lb">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="CHECK"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_lc">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="MATE"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_ld">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="WHITE"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_le">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="BLACK"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_lf">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="STALEMATE"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_lg">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="DRAW"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_lh">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="I LOSE"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+
+ <element name="text_t81">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="NEW"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t82">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="GAME"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t7">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="VERIFY"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t6">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="OPTIONS"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t5">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="LEVEL"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t41">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="TAKE"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t42">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="BACK"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t3">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="HINT"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="MOVE"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_t1">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="CLEAR"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+
+ <element name="text_tl7">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="&#x265a;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_tl6">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="&#x265b;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_tl5">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="&#x265c;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_tl4">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="&#x265d;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_tl3">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="&#x265e;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+ <element name="text_tl2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="&#x265f;"><color red="0.17" green="0.15" blue="0.15" /></text>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-7.5" right="96" top="-2.5" bottom="93.5" />
+
+ <bezel element="white"><bounds x="-11.5" y="-3.5" width="110" height="101" /></bezel>
+
+ <!-- chessboard coords -->
+
+ <bezel element="text_8"><bounds x="-0.8" y="7" width="2" height="2" /></bezel>
+ <bezel element="text_7"><bounds x="-0.8" y="17" width="2" height="2" /></bezel>
+ <bezel element="text_6"><bounds x="-0.8" y="27" width="2" height="2" /></bezel>
+ <bezel element="text_5"><bounds x="-0.8" y="37" width="2" height="2" /></bezel>
+ <bezel element="text_4"><bounds x="-0.8" y="47" width="2" height="2" /></bezel>
+ <bezel element="text_3"><bounds x="-0.8" y="57" width="2" height="2" /></bezel>
+ <bezel element="text_2"><bounds x="-0.8" y="67" width="2" height="2" /></bezel>
+ <bezel element="text_1"><bounds x="-0.8" y="77" width="2" height="2" /></bezel>
+
+ <bezel element="text_a"><bounds x="7" y="85" width="2" height="2" /></bezel>
+ <bezel element="text_b"><bounds x="17" y="85" width="2" height="2" /></bezel>
+ <bezel element="text_c"><bounds x="27" y="85" width="2" height="2" /></bezel>
+ <bezel element="text_d"><bounds x="37" y="85" width="2" height="2" /></bezel>
+ <bezel element="text_e"><bounds x="47" y="85" width="2" height="2" /></bezel>
+ <bezel element="text_f"><bounds x="57" y="85" width="2" height="2" /></bezel>
+ <bezel element="text_g"><bounds x="67" y="85" width="2" height="2" /></bezel>
+ <bezel element="text_h"><bounds x="77" y="85" width="2" height="2" /></bezel>
+
+ <!-- left side labels -->
+
+ <bezel element="text_9"><bounds x="-9.3" y="12" width="5" height="2" /></bezel>
+ <bezel element="text_10"><bounds x="-9.3" y="22" width="5" height="2" /></bezel>
+ <bezel element="text_11"><bounds x="-9.3" y="32" width="5" height="2" /></bezel>
+ <bezel element="text_12"><bounds x="-9.3" y="42" width="5" height="2" /></bezel>
+
+ <!-- bottom side labels -->
+
+ <bezel element="text_lb"><bounds x="13" y="90.4" width="10" height="2" /></bezel>
+ <bezel element="text_lc"><bounds x="23" y="90.4" width="10" height="2" /></bezel>
+ <bezel element="text_ld"><bounds x="33" y="90.4" width="10" height="2" /></bezel>
+ <bezel element="text_le"><bounds x="43" y="90.4" width="10" height="2" /></bezel>
+ <bezel element="text_lf"><bounds x="53" y="90.4" width="10" height="2" /></bezel>
+ <bezel element="text_lh"><bounds x="73" y="90.4" width="10" height="2" /></bezel>
+ <bezel element="text_lg"><bounds x="62" y="90.4" width="12" height="2" /></bezel>
+
+ <!-- chessboard bezel -->
+
+ <bezel element="black"><bounds x="2" y="2" width="82" height="82" /></bezel>
+ <bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel>
+
+ <bezel element="black"><bounds x="13" y="2.5" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="33" y="2.5" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="53" y="2.5" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="73" y="2.5" width="10.5" height="10.5" /></bezel>
+
+ <bezel element="black"><bounds x="2.5" y="13" width="10.5" height="10" /></bezel>
+ <bezel element="black"><bounds x="23" y="13" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="43" y="13" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="63" y="13" width="10" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="13" y="23" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="33" y="23" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="53" y="23" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="73" y="23" width="10.5" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="2.5" y="33" width="10.5" height="10" /></bezel>
+ <bezel element="black"><bounds x="23" y="33" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="43" y="33" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="63" y="33" width="10" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="13" y="43" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="33" y="43" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="53" y="43" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="73" y="43" width="10.5" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="2.5" y="53" width="10.5" height="10" /></bezel>
+ <bezel element="black"><bounds x="23" y="53" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="43" y="53" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="63" y="53" width="10" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="13" y="63" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="33" y="63" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="53" y="63" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="73" y="63" width="10.5" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="2.5" y="73" width="10.5" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="23" y="73" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel>
+
+ <!-- chessboard sensors -->
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x80"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x80"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x80"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x80"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x80"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x80"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x80"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x40"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x40"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x40"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x40"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x40"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x40"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x40"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x20"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x20"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x20"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x20"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x20"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x20"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x20"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x10"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x10"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x10"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x10"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x10"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x10"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x10"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x08"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x08"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x08"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x04"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x04"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x04"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x02"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x02"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x02"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x01"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x01"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x01"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
+
+ <!-- chessboard leds -->
+
+ <bezel name="0.7" element="led"><bounds x="-2.8" y="7.25" width="1.5" height="1.5" /></bezel>
+ <bezel name="0.6" element="led"><bounds x="-2.8" y="17.25" width="1.5" height="1.5" /></bezel>
+ <bezel name="0.5" element="led"><bounds x="-2.8" y="27.25" width="1.5" height="1.5" /></bezel>
+ <bezel name="0.4" element="led"><bounds x="-2.8" y="37.25" width="1.5" height="1.5" /></bezel>
+ <bezel name="0.3" element="led"><bounds x="-2.8" y="47.25" width="1.5" height="1.5" /></bezel>
+ <bezel name="0.2" element="led"><bounds x="-2.8" y="57.25" width="1.5" height="1.5" /></bezel>
+ <bezel name="0.1" element="led"><bounds x="-2.8" y="67.25" width="1.5" height="1.5" /></bezel>
+ <bezel name="0.0" element="led"><bounds x="-2.8" y="77.25" width="1.5" height="1.5" /></bezel>
+
+ <bezel name="1.0" element="led"><bounds x="7.25" y="88" width="1.5" height="1.5" /></bezel>
+ <bezel name="1.1" element="led"><bounds x="17.25" y="88" width="1.5" height="1.5" /></bezel>
+ <bezel name="1.2" element="led"><bounds x="27.25" y="88" width="1.5" height="1.5" /></bezel>
+ <bezel name="1.3" element="led"><bounds x="37.25" y="88" width="1.5" height="1.5" /></bezel>
+ <bezel name="1.4" element="led"><bounds x="47.25" y="88" width="1.5" height="1.5" /></bezel>
+ <bezel name="1.5" element="led"><bounds x="57.25" y="88" width="1.5" height="1.5" /></bezel>
+ <bezel name="1.6" element="led"><bounds x="67.25" y="88" width="1.5" height="1.5" /></bezel>
+ <bezel name="1.7" element="led"><bounds x="77.25" y="88" width="1.5" height="1.5" /></bezel>
+
+ <!-- right side -->
+
+ <bezel element="white"><bounds x="87.3" y="9.3" width="7.4" height="3.4" /></bezel>
+ <bezel element="white"><bounds x="87.3" y="19.3" width="7.4" height="3.4" /></bezel>
+ <bezel element="white"><bounds x="87.3" y="28.3" width="7.4" height="3.4" /></bezel>
+ <bezel element="white"><bounds x="87.3" y="37.3" width="7.4" height="3.4" /></bezel>
+ <bezel element="white"><bounds x="87.3" y="46.3" width="7.4" height="3.4" /></bezel>
+ <bezel element="white"><bounds x="87.3" y="55.3" width="7.4" height="3.4" /></bezel>
+ <bezel element="white"><bounds x="87.3" y="64.3" width="7.4" height="3.4" /></bezel>
+ <bezel element="white"><bounds x="87.3" y="73.3" width="7.4" height="3.4" /></bezel>
+
+ <bezel element="text_tl7"><bounds x="87" y="11.6" width="6" height="3.5" /></bezel>
+ <bezel element="text_tl6"><bounds x="87" y="21.6" width="6" height="3.5" /></bezel>
+ <bezel element="text_tl5"><bounds x="87" y="31.6" width="6" height="3.5" /></bezel>
+ <bezel element="text_tl4"><bounds x="87" y="41.6" width="6" height="3.5" /></bezel>
+ <bezel element="text_tl3"><bounds x="87" y="51.6" width="6" height="3.5" /></bezel>
+ <bezel element="text_tl2"><bounds x="87" y="61.6" width="6" height="3.5" /></bezel>
+
+ <bezel element="disk_black"><bounds x="87" y="5" width="6" height="6" /></bezel>
+ <bezel element="disk_black"><bounds x="87" y="15" width="6" height="6" /></bezel>
+ <bezel element="disk_black"><bounds x="87" y="25" width="6" height="6" /></bezel>
+ <bezel element="disk_black"><bounds x="87" y="35" width="6" height="6" /></bezel>
+ <bezel element="disk_black"><bounds x="87" y="45" width="6" height="6" /></bezel>
+ <bezel element="disk_black"><bounds x="87" y="55" width="6" height="6" /></bezel>
+ <bezel element="disk_black"><bounds x="87" y="65" width="6" height="6" /></bezel>
+ <bezel element="disk_black"><bounds x="87" y="75" width="6" height="6" /></bezel>
+
+ <bezel element="disk_white"><bounds x="87.7" y="5.7" width="4.6" height="4.6" /></bezel>
+ <bezel element="disk_white"><bounds x="87.7" y="15.7" width="4.6" height="4.6" /></bezel>
+ <bezel element="disk_white"><bounds x="87.7" y="25.7" width="4.6" height="4.6" /></bezel>
+ <bezel element="disk_white"><bounds x="87.7" y="35.7" width="4.6" height="4.6" /></bezel>
+ <bezel element="disk_white"><bounds x="87.7" y="45.7" width="4.6" height="4.6" /></bezel>
+ <bezel element="disk_white"><bounds x="87.7" y="55.7" width="4.6" height="4.6" /></bezel>
+ <bezel element="disk_white"><bounds x="87.7" y="65.7" width="4.6" height="4.6" /></bezel>
+ <bezel element="disk_white"><bounds x="87.7" y="75.7" width="4.6" height="4.6" /></bezel>
+
+ <bezel element="text_t81"><bounds x="88.1" y="6.7" width="3.8" height="1.25" /></bezel>
+ <bezel element="text_t82"><bounds x="88.1" y="7.95" width="3.8" height="1.25" /></bezel>
+ <bezel element="text_t7"><bounds x="87.8" y="17.325" width="4.4" height="1.25" /></bezel>
+ <bezel element="text_t6"><bounds x="87.8" y="27.325" width="4.4" height="1.25" /></bezel>
+ <bezel element="text_t5"><bounds x="87.8" y="37.325" width="4.4" height="1.25" /></bezel>
+ <bezel element="text_t41"><bounds x="88.1" y="46.7" width="3.8" height="1.25" /></bezel>
+ <bezel element="text_t42"><bounds x="88.1" y="47.95" width="3.8" height="1.25" /></bezel>
+ <bezel element="text_t3"><bounds x="87.8" y="57.325" width="4.4" height="1.25" /></bezel>
+ <bezel element="text_t2"><bounds x="87.8" y="67.325" width="4.4" height="1.25" /></bezel>
+ <bezel element="text_t1"><bounds x="87.8" y="77.325" width="4.4" height="1.25" /></bezel>
+
+ <bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="87" y="5" width="6" height="6" /><color alpha="0.3" /></bezel>
+ <bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="87" y="15" width="6" height="6" /><color alpha="0.3" /></bezel>
+ <bezel element="hlb" inputtag="IN.8" inputmask="0x20"><bounds x="87" y="25" width="6" height="6" /><color alpha="0.3" /></bezel>
+ <bezel element="hlb" inputtag="IN.8" inputmask="0x10"><bounds x="87" y="35" width="6" height="6" /><color alpha="0.3" /></bezel>
+ <bezel element="hlb" inputtag="IN.8" inputmask="0x08"><bounds x="87" y="45" width="6" height="6" /><color alpha="0.3" /></bezel>
+ <bezel element="hlb" inputtag="IN.8" inputmask="0x04"><bounds x="87" y="55" width="6" height="6" /><color alpha="0.3" /></bezel>
+ <bezel element="hlb" inputtag="IN.8" inputmask="0x02"><bounds x="87" y="65" width="6" height="6" /><color alpha="0.3" /></bezel>
+ <bezel element="hlb" inputtag="IN.8" inputmask="0x01"><bounds x="87" y="75" width="6" height="6" /><color alpha="0.3" /></bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/fidel_eag.lay b/src/mame/layout/fidel_eag.lay
index 7cb96e4c1b5..18c69c87fee 100644
--- a/src/mame/layout/fidel_eag.lay
+++ b/src/mame/layout/fidel_eag.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
-
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
@@ -141,9 +139,6 @@
<view name="Internal Layout">
<bounds left="-2" right="102" top="-2" bottom="88" />
- <bezel element="static_black">
- <bounds left="-2" right="102" top="-2" bottom="88" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2.5" width="90.5" height="91" /></bezel>
diff --git a/src/mame/layout/fidel_eag_68k.lay b/src/mame/layout/fidel_eag_68k.lay
index e0f0506b1df..938daaa40f4 100644
--- a/src/mame/layout/fidel_eag_68k.lay
+++ b/src/mame/layout/fidel_eag_68k.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
-
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
@@ -141,9 +139,6 @@
<view name="Internal Layout">
<bounds left="-2" right="102" top="-2" bottom="88" />
- <bezel element="static_black">
- <bounds left="-2" right="102" top="-2" bottom="88" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2.5" width="90.5" height="91" /></bezel>
diff --git a/src/mame/layout/fidel_eas.lay b/src/mame/layout/fidel_eas.lay
index 97ecd875f52..57bc6dc6f89 100644
--- a/src/mame/layout/fidel_eas.lay
+++ b/src/mame/layout/fidel_eas.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
-
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
@@ -133,9 +131,6 @@
<view name="Internal Layout">
<bounds left="-2" right="88" top="-2" bottom="100.5" />
- <bezel element="static_black">
- <bounds left="-2" right="88" top="-2" bottom="100.5" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2.5" width="91" height="90.5" /></bezel>
diff --git a/src/mame/layout/fidel_ex.lay b/src/mame/layout/fidel_ex.lay
index 1750fa9e138..db62eda88ba 100644
--- a/src/mame/layout/fidel_ex.lay
+++ b/src/mame/layout/fidel_ex.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></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>
@@ -222,9 +220,6 @@
<view name="Internal Layout">
<bounds left="-2" right="98" top="-2.5" bottom="89" />
- <bezel element="static_black">
- <bounds left="-2" right="98" top="-2.5" bottom="89" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2.5" width="101" height="92" /></bezel>
@@ -453,6 +448,5 @@
<bezel element="hlb" inputtag="IN.8" inputmask="0x02"><bounds x="87" y="64" width="8" height="4" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x01"><bounds x="87" y="73" width="8" height="4" /><color alpha="0.4" /></bezel>
-
</view>
</mamelayout>
diff --git a/src/mame/layout/fidel_exd.lay b/src/mame/layout/fidel_exd.lay
index 8c5eefe0598..e72cf5b9490 100644
--- a/src/mame/layout/fidel_exd.lay
+++ b/src/mame/layout/fidel_exd.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
-
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
@@ -226,9 +224,6 @@
<view name="Internal Layout">
<bounds left="-2" right="98" top="-14.5" bottom="89" />
- <bezel element="static_black">
- <bounds left="-2" right="98" top="-14.5" bottom="89" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2" width="101" height="91.5" /></bezel>
@@ -479,6 +474,5 @@
<bezel element="hlb" inputtag="IN.8" inputmask="0x02"><bounds x="87" y="64" width="8" height="4" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x01"><bounds x="87" y="73" width="8" height="4" /><color alpha="0.4" /></bezel>
-
</view>
</mamelayout>
diff --git a/src/mame/layout/fidel_playmatic.lay b/src/mame/layout/fidel_playmatic.lay
index f14ec684b28..2f58c943b25 100644
--- a/src/mame/layout/fidel_playmatic.lay
+++ b/src/mame/layout/fidel_playmatic.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></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>
@@ -121,9 +119,6 @@
<view name="Internal Layout">
<bounds left="-2" right="98" top="-2" bottom="88" />
- <bezel element="static_black">
- <bounds left="-2" right="98" top="-2" bottom="88" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2.5" width="90.5" height="90.5" /></bezel>
diff --git a/src/mame/layout/fidel_rsc_v2.lay b/src/mame/layout/fidel_rsc_v2.lay
index 51de25469e9..9e3ac0954e4 100644
--- a/src/mame/layout/fidel_rsc_v2.lay
+++ b/src/mame/layout/fidel_rsc_v2.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></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>
@@ -157,9 +155,6 @@
<view name="Internal Layout">
<bounds left="-2" right="97" top="-2" bottom="87" />
- <bezel element="static_black">
- <bounds left="-2" right="97" top="-2" bottom="87" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2.5" width="100" height="89.5" /></bezel>
diff --git a/src/mame/layout/fidel_sc12.lay b/src/mame/layout/fidel_sc12.lay
index cbcccc733a3..e296533a269 100644
--- a/src/mame/layout/fidel_sc12.lay
+++ b/src/mame/layout/fidel_sc12.lay
@@ -3,9 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
- <element name="blackl"><rect><color red="0.01" green="0.01" blue="0.01" /></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>
@@ -32,6 +29,7 @@
</disk>
</element>
+ <element name="blackl"><rect><color red="0.01" green="0.01" blue="0.01" /></rect></element>
<element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element>
<element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
<element name="disk_black"><disk><color red="0.17" green="0.15" blue="0.15" /></disk></element>
@@ -263,9 +261,6 @@
<view name="Internal Layout">
<bounds left="-7" right="98" top="-2" bottom="93" />
- <bezel element="static_black">
- <bounds left="-7" right="98" top="-2" bottom="93" />
- </bezel>
<bezel element="white"><bounds x="-7.5" y="-2.5" width="106" height="96" /></bezel>
diff --git a/src/mame/layout/fidel_sc9.lay b/src/mame/layout/fidel_sc9.lay
index c8e64595920..ebf037f5565 100644
--- a/src/mame/layout/fidel_sc9.lay
+++ b/src/mame/layout/fidel_sc9.lay
@@ -5,8 +5,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></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>
@@ -167,9 +165,6 @@
<view name="Internal Layout">
<bounds left="-2" right="100" top="-2" bottom="88" />
- <bezel element="static_black">
- <bounds left="-2" right="100" top="-2" bottom="88" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2.5" width="103" height="90.5" /></bezel>
diff --git a/src/mame/layout/fidel_su9.lay b/src/mame/layout/fidel_su9.lay
index c6010790c9b..61e26e8a759 100644
--- a/src/mame/layout/fidel_su9.lay
+++ b/src/mame/layout/fidel_su9.lay
@@ -5,8 +5,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
-
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
@@ -206,9 +204,6 @@
<view name="Internal Layout">
<bounds left="-2" right="100" top="-18" bottom="88" />
- <bezel element="static_black">
- <bounds left="-2" right="100" top="-18" bottom="88" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2" width="103" height="90.5" /></bezel>
diff --git a/src/mame/layout/fidel_vcc.lay b/src/mame/layout/fidel_vcc.lay
index bb58b17b2ae..4ae050027aa 100644
--- a/src/mame/layout/fidel_vcc.lay
+++ b/src/mame/layout/fidel_vcc.lay
@@ -3,8 +3,7 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
- <element name="static_bg"><rect><color red="0.5" green="0.5" blue="0.5" /></rect></element>
+ <element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
@@ -15,53 +14,156 @@
<disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
</element>
- <element name="txt_from">
- <rect><color red="0.5" green="0.5" blue="0.5" /></rect>
- <text string="FROM"><color red="0.03" green="0.03" blue="0.03" /></text>
+ <element name="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <rect state="1">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
</element>
- <element name="txt_to">
- <rect><color red="0.5" green="0.5" blue="0.5" /></rect>
- <text string="TO"><color red="0.03" green="0.03" blue="0.03" /></text>
+
+ <element name="text_from"><text string="FROM"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+ <element name="text_to"><text string="TO"><color red="0.6" green="0.6" blue="0.6" /></text></element>
+
+ <element name="text_b1">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="RE"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b2">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="spk"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b3">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="CL"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b4">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="EN"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b5">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="LV"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b6">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="DM"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b7">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="PB"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b8">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="PV"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b9">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="A1"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b10">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="b2"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b11">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="C3"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b12">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="d4"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b13">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="E5"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b14">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="F6"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b15">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="g7"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="text_b16">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="H8"><color red="0.04" green="0.04" blue="0.04" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="0" right="47" top="0" bottom="25" />
- <bezel element="static_bg">
- <bounds left="-1" right="48" top="-1" bottom="26" />
- </bezel>
-
- <bezel element="txt_from">
- <bounds x="1" y="21" width="20" height="3" />
- </bezel>
- <bezel element="txt_to">
- <bounds x="26" y="21" width="20" height="3" />
- </bezel>
-
- <bezel element="static_black">
- <bounds left="-2" right="49" top="4" bottom="21" />
- </bezel>
- <bezel name="digit0" element="digit">
- <bounds x="1" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit1" element="digit">
- <bounds x="11" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit2" element="digit">
- <bounds x="26" y="5" width="10" height="15" />
- </bezel>
- <bezel name="digit3" element="digit">
- <bounds x="36" y="5" width="10" height="15" />
- </bezel>
-
- <bezel name="1.7" element="led">
- <bounds x="23.25" y="6.5" width="1.5" height="1.5" />
- </bezel>
- <bezel name="0.7" element="led">
- <bounds x="22.25" y="17" width="1.5" height="1.5" />
- </bezel>
+ <bounds left="-0.5" right="18" top="10" bottom="36" />
+
+ <!-- 7segs/leds -->
+
+ <bezel element="text_from"><bounds x="0" y="17.2" width="8" height="2" /></bezel>
+ <bezel element="text_to"><bounds x="9.5" y="17.2" width="8" height="2" /></bezel>
+
+ <bezel name="digit0" element="digit"><bounds x="0" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="4" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="9.5" y="11" width="4" height="6" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="13.5" y="11" width="4" height="6" /></bezel>
+
+ <bezel name="1.7" element="led"><bounds x="8.65" y="11.8" width="0.6" height="0.6" /></bezel>
+ <bezel name="0.7" element="led"><bounds x="8.35" y="15.7" width="0.6" height="0.6" /></bezel>
+
+ <!-- button panel -->
+
+ <bezel element="static_gray"><bounds x="0" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="20" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="24" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="28" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="0" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="4.5" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="9" y="32" width="4" height="3" /></bezel>
+ <bezel element="static_gray"><bounds x="13.5" y="32" width="4" height="3" /></bezel>
+
+ <bezel element="text_b1"><bounds x="0.1" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b2"><bounds x="4.6" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b3"><bounds x="9.1" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b4"><bounds x="13.6" y="20.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b5"><bounds x="0.1" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b6"><bounds x="4.6" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b7"><bounds x="9.1" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b8"><bounds x="13.6" y="24.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b9"><bounds x="0.1" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b10"><bounds x="4.6" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b11"><bounds x="9.1" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b12"><bounds x="13.6" y="28.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b13"><bounds x="0.1" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b14"><bounds x="4.6" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b15"><bounds x="9.1" y="32.5" width="3.8" height="2" /></bezel>
+ <bezel element="text_b16"><bounds x="13.6" y="32.5" width="3.8" height="2" /></bezel>
+
+ <bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="9" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="13.5" y="20" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="0" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="9" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="13.5" y="24" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="0" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="4.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="9" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="13.5" y="28" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="0" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="4.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="9" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="13.5" y="32" width="4" height="3" /><color alpha="0.2" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/fidel_vsc.lay b/src/mame/layout/fidel_vsc.lay
index 3ac26beae1c..fcd23761d06 100644
--- a/src/mame/layout/fidel_vsc.lay
+++ b/src/mame/layout/fidel_vsc.lay
@@ -3,8 +3,6 @@
<!-- define elements -->
- <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
-
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
@@ -179,9 +177,6 @@
<view name="Internal Layout">
<bounds left="-2" right="98" top="-18" bottom="88" />
- <bezel element="static_black">
- <bounds left="-2" right="98" top="-18" bottom="88" />
- </bezel>
<bezel element="white"><bounds x="-2.5" y="-2" width="101" height="90.5" /></bezel>
diff --git a/src/mame/layout/grobot9.lay b/src/mame/layout/grobot9.lay
new file mode 100644
index 00000000000..e9d2c61895c
--- /dev/null
+++ b/src/mame/layout/grobot9.lay
@@ -0,0 +1,314 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
+ <element name="static_yellow"><rect><color red="0.8" green="0.8" blue="0.35" /></rect></element>
+
+ <element name="maskd" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <disk state="1">
+ <bounds x="0.12" y="0.12" width="0.76" height="0.76" />
+ <color red="0" green="0" blue="0" />
+ </disk>
+ </element>
+
+ <element name="mask1" defstate="0">
+ <rect state="0"><color red="0" green="0" blue="0" /></rect>
+ <rect state="1"><color red="1.0" green="1.0" blue="1.0" /></rect>
+ </element>
+
+ <element name="mask2" defstate="0">
+ <rect state="0">
+ <color red="0" green="0" blue="0" />
+ <bounds x="0.94" y="0.0" width="0.06" height="1.0" />
+ </rect>
+ <rect state="0">
+ <color red="0" green="0" blue="0" />
+ <bounds x="0.0" y="0.94" width="1.0" height="0.06" />
+ </rect>
+ </element>
+
+ <element name="mask3" defstate="0">
+ <rect state="0">
+ <color red="0" green="0" blue="0" />
+ <bounds x="0.94" y="0.0" width="0.06" height="0.06" />
+ </rect>
+ <rect state="0">
+ <color red="0" green="0" blue="0" />
+ <bounds x="0.0" y="0.94" width="0.06" height="0.06" />
+ </rect>
+ </element>
+
+ <element name="mask4" defstate="0">
+ <rect state="1">
+ <color red="0" green="0" blue="0" />
+ <bounds x="0.0" y="0.0" width="0.06" height="1.0" />
+ </rect>
+ <rect state="1">
+ <color red="0" green="0" blue="0" />
+ <bounds x="0.0" y="0.0" width="1.0" height="0.06" />
+ </rect>
+ </element>
+
+ <element name="button1"><rect state="0"><color red="1.0" green="0.23" blue="0.25" /></rect></element>
+ <element name="button2"><rect state="0"><color red="0.9" green="0.9" blue="0.2" /></rect></element>
+ <element name="button3"><rect state="0"><color red="1.0" green="0.42" blue="0.2" /></rect></element>
+ <element name="button4"><rect state="0"><color red="0.1" green="0.7" blue="0.1" /></rect></element>
+ <element name="button5"><rect state="0"><color red="0.25" green="0.25" blue="1.0" /></rect></element>
+ <element name="button6"><rect state="0"><color red="0.2" green="0.9" blue="1.0" /></rect></element>
+ <element name="button7"><rect state="0"><color red="0.5" green="0.1" blue="1.0" /></rect></element>
+ <element name="button8"><rect state="0"><color red="0.53" green="1.0" blue="0.5" /></rect></element>
+ <element name="button9"><rect state="0"><color red="1.0" green="0.2" blue="0.8" /></rect></element>
+
+ <element name="text_1"><text string="1"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_2"><text string="2"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_3"><text string="3"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_4"><text string="4"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_5"><text string="5"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_6"><text string="6"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_7"><text string="7"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_8"><text string="8"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_9"><text string="9"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+
+ <element name="text_u1"><text string="[1] ELECTRONIC ORGAN [2] MUSIC MACHINE [2A] WHAT'S THAT"><color red="0.84" green="0.84" blue="0.64" /></text></element>
+ <element name="text_u2"><text string="SONG? [3] THE MEMORY GAME [4] MINDBENDER [5] SPACE ATTACK"><color red="0.84" green="0.84" blue="0.64" /></text></element>
+ <element name="text_u3"><text string="[6] SUBMARINE HUNT [7] CATCH THE COMET [8] BASEBALL [9] ROULETTE"><color red="0.84" green="0.84" blue="0.64" /></text></element>
+
+ <element name="text_r1"><text string="REPEAT"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_r2"><text string="REST"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_r3"><text string="8TH NOTE"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+
+ <element name="text_d1"><text string="START"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_d2"><text string="SELECT"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+ <element name="text_d3"><text string="HIT"><color red="0.94" green="0.94" blue="0.74" /></text></element>
+
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="1" right="50" top="2.5" bottom="63.4" />
+
+ <bezel element="text_u1"><bounds x="0" y="3.5" width="52" height="1.5" /></bezel>
+ <bezel element="text_u2"><bounds x="0" y="5.0" width="52" height="1.5" /></bezel>
+ <bezel element="text_u3"><bounds x="0" y="6.5" width="52" height="1.5" /></bezel>
+
+ <!-- misc buttons -->
+
+ <bezel element="static_yellow"><bounds x="43" y="16" width="5" height="5" /></bezel>
+ <bezel element="static_yellow"><bounds x="43" y="31" width="5" height="5" /></bezel>
+ <bezel element="static_yellow"><bounds x="43" y="46" width="5" height="5" /></bezel>
+
+ <bezel element="maskd" inputtag="IN.3" inputmask="0x08"><bounds x="43" y="16" width="5" height="5" /><color alpha="0.2" /></bezel>
+ <bezel element="maskd" inputtag="IN.2" inputmask="0x02"><bounds x="43" y="31" width="5" height="5" /><color alpha="0.2" /></bezel>
+ <bezel element="maskd" inputtag="IN.2" inputmask="0x04"><bounds x="43" y="46" width="5" height="5" /><color alpha="0.2" /></bezel>
+
+ <bezel element="text_r1"><bounds x="39" y="21.4" width="13" height="2" /></bezel>
+ <bezel element="text_r2"><bounds x="39" y="36.4" width="13" height="2" /></bezel>
+ <bezel element="text_r3"><bounds x="39" y="51.4" width="13" height="2" /></bezel>
+
+
+ <bezel element="static_white"><bounds x="18" y="55" width="5" height="5" /></bezel>
+ <bezel element="static_white"><bounds x="26" y="55" width="5" height="5" /></bezel>
+ <bezel element="static_white"><bounds x="34" y="55" width="5" height="5" /></bezel>
+
+ <bezel element="maskd" inputtag="IN.4" inputmask="0x01"><bounds x="18" y="55" width="5" height="5" /><color alpha="0.2" /></bezel>
+ <bezel element="maskd" inputtag="IN.3" inputmask="0x01"><bounds x="26" y="55" width="5" height="5" /><color alpha="0.2" /></bezel>
+ <bezel element="maskd" inputtag="IN.3" inputmask="0x04"><bounds x="34" y="55" width="5" height="5" /><color alpha="0.2" /></bezel>
+
+ <bezel element="text_d1"><bounds x="16" y="60.4" width="9" height="2" /></bezel>
+ <bezel element="text_d2"><bounds x="24" y="60.4" width="9" height="2" /></bezel>
+ <bezel element="text_d3"><bounds x="32" y="60.4" width="9" height="2" /></bezel>
+
+
+ <!-- coloured lighted buttons -->
+ <!-- row 1 2 3 -->
+
+ <bezel element="button1">
+ <bounds x="3" y="9" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp0" element="mask1">
+ <bounds x="3" y="9" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.0" inputmask="0x01">
+ <bounds x="3" y="9" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.0" inputmask="0x01">
+ <bounds x="3" y="9" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.0" inputmask="0x01">
+ <bounds x="3" y="9" width="10" height="12" />
+ </bezel>
+
+ <bezel element="button2">
+ <bounds x="16" y="9" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp1" element="mask1">
+ <bounds x="16" y="9" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.0" inputmask="0x02">
+ <bounds x="16" y="9" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.0" inputmask="0x02">
+ <bounds x="16" y="9" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.0" inputmask="0x02">
+ <bounds x="16" y="9" width="10" height="12" />
+ </bezel>
+
+ <bezel element="button3">
+ <bounds x="29" y="9" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp2" element="mask1">
+ <bounds x="29" y="9" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.0" inputmask="0x04">
+ <bounds x="29" y="9" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.0" inputmask="0x04">
+ <bounds x="29" y="9" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.0" inputmask="0x04">
+ <bounds x="29" y="9" width="10" height="12" />
+ </bezel>
+
+ <!-- row 8 9 4 -->
+
+ <bezel element="button8">
+ <bounds x="3" y="24" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp7" element="mask1">
+ <bounds x="3" y="24" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.1" inputmask="0x08">
+ <bounds x="3" y="24" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.1" inputmask="0x08">
+ <bounds x="3" y="24" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.1" inputmask="0x08">
+ <bounds x="3" y="24" width="10" height="12" />
+ </bezel>
+
+ <bezel element="button9">
+ <bounds x="16" y="24" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp8" element="mask1">
+ <bounds x="16" y="24" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.2" inputmask="0x01">
+ <bounds x="16" y="24" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.2" inputmask="0x01">
+ <bounds x="16" y="24" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.2" inputmask="0x01">
+ <bounds x="16" y="24" width="10" height="12" />
+ </bezel>
+
+ <bezel element="button4">
+ <bounds x="29" y="24" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp3" element="mask1">
+ <bounds x="29" y="24" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.0" inputmask="0x08">
+ <bounds x="29" y="24" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.0" inputmask="0x08">
+ <bounds x="29" y="24" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.0" inputmask="0x08">
+ <bounds x="29" y="24" width="10" height="12" />
+ </bezel>
+
+ <!-- row 7 6 5 -->
+
+ <bezel element="button7">
+ <bounds x="3" y="39" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp6" element="mask1">
+ <bounds x="3" y="39" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.1" inputmask="0x04">
+ <bounds x="3" y="39" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.1" inputmask="0x04">
+ <bounds x="3" y="39" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.1" inputmask="0x04">
+ <bounds x="3" y="39" width="10" height="12" />
+ </bezel>
+
+ <bezel element="button6">
+ <bounds x="16" y="39" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp5" element="mask1">
+ <bounds x="16" y="39" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.1" inputmask="0x02">
+ <bounds x="16" y="39" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.1" inputmask="0x02">
+ <bounds x="16" y="39" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.1" inputmask="0x02">
+ <bounds x="16" y="39" width="10" height="12" />
+ </bezel>
+
+ <bezel element="button5">
+ <bounds x="29" y="39" width="10" height="12" />
+ </bezel>
+ <bezel name="lamp4" element="mask1">
+ <bounds x="29" y="39" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask2" inputtag="IN.1" inputmask="0x01">
+ <bounds x="29" y="39" width="10" height="12" />
+ <color alpha="0.4" />
+ </bezel>
+ <bezel element="mask3" inputtag="IN.1" inputmask="0x01">
+ <bounds x="29" y="39" width="10" height="12" />
+ </bezel>
+ <bezel element="mask4" inputtag="IN.1" inputmask="0x01">
+ <bounds x="29" y="39" width="10" height="12" />
+ </bezel>
+
+ <!-- number labels -->
+
+ <bezel element="text_1"><bounds x="3" y="21.4" width="9" height="2" /></bezel>
+ <bezel element="text_2"><bounds x="16" y="21.4" width="9" height="2" /></bezel>
+ <bezel element="text_3"><bounds x="29" y="21.4" width="9" height="2" /></bezel>
+
+ <bezel element="text_8"><bounds x="3" y="36.4" width="9" height="2" /></bezel>
+ <bezel element="text_9"><bounds x="16" y="36.4" width="9" height="2" /></bezel>
+ <bezel element="text_4"><bounds x="29" y="36.4" width="9" height="2" /></bezel>
+
+ <bezel element="text_7"><bounds x="3" y="51.4" width="9" height="2" /></bezel>
+ <bezel element="text_6"><bounds x="16" y="51.4" width="9" height="2" /></bezel>
+ <bezel element="text_5"><bounds x="29" y="51.4" width="9" height="2" /></bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/machine/macrtc.cpp b/src/mame/machine/macrtc.cpp
index dd047014c0f..1a20c08811d 100644
--- a/src/mame/machine/macrtc.cpp
+++ b/src/mame/machine/macrtc.cpp
@@ -62,8 +62,6 @@ void rtc3430042_device::device_start()
void rtc3430042_device::device_reset()
{
- set_current_time(machine());
-
m_rtc_rTCEnb = 0;
m_rtc_rTCClk = 0;
m_rtc_bit_count = 0;
diff --git a/src/mame/machine/macrtc.h b/src/mame/machine/macrtc.h
index ea8726a8fd2..dc969e93f82 100644
--- a/src/mame/machine/macrtc.h
+++ b/src/mame/machine/macrtc.h
@@ -12,7 +12,7 @@
#ifndef __RTC3430042_H__
#define __RTC3430042_H__
-#include "emu.h"
+#include "dirtc.h"
//**************************************************************************
@@ -51,7 +51,7 @@ protected:
// device_rtc_interface overrides
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override;
- virtual bool rtc_feature_leap_year() override { return true; }
+ virtual bool rtc_feature_leap_year() const override { return true; }
// device_nvram_interface overrides
virtual void nvram_default() override;
diff --git a/src/mame/machine/sms.cpp b/src/mame/machine/sms.cpp
index a268aa4d936..6d27552641d 100644
--- a/src/mame/machine/sms.cpp
+++ b/src/mame/machine/sms.cpp
@@ -458,6 +458,22 @@ READ8_MEMBER(sms_state::sms_input_port_dd_r)
WRITE8_MEMBER(sms_state::smsj_audio_control_w)
{
m_smsj_audio_control = data & 0x03;
+
+ /* Mute settings:
+ 0,0 : PSG only (power-on default)
+ 0,1 : FM only
+ 1,0 : Both PSG and FM disabled
+ 1,1 : Both PSG and FM enabled
+ */
+ if (m_smsj_audio_control == 0x00 || m_smsj_audio_control == 0x03)
+ m_psg_sms->set_output_gain(0, 1.0);
+ else
+ m_psg_sms->set_output_gain(0, 0.0);
+
+ if (m_smsj_audio_control == 0x01 || m_smsj_audio_control == 0x03)
+ m_ym->set_output_gain(0, 1.0);
+ else
+ m_ym->set_output_gain(0, 0.0);
}
@@ -492,29 +508,19 @@ READ8_MEMBER(sms_state::smsj_audio_control_r)
WRITE8_MEMBER(sms_state::smsj_ym2413_register_port_w)
{
- if (m_smsj_audio_control == 0x01 || m_smsj_audio_control == 0x03)
- m_ym->write(space, 0, data & 0x3f);
+ m_ym->write(space, 0, data & 0x3f);
}
WRITE8_MEMBER(sms_state::smsj_ym2413_data_port_w)
{
- if (m_smsj_audio_control == 0x01 || m_smsj_audio_control == 0x03)
- {
- //logerror("data_port_w %x %x\n", offset, data);
- m_ym->write(space, 1, data);
- }
+ //logerror("data_port_w %x %x\n", offset, data);
+ m_ym->write(space, 1, data);
}
WRITE8_MEMBER(sms_state::sms_psg_w)
{
- if (m_is_smsj)
- {
- if (m_smsj_audio_control != 0x00 && m_smsj_audio_control != 0x03)
- return;
- }
-
m_psg_sms->write(space, offset, data, mem_mask);
}
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index b7e49b04e1b..1f094c90da2 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -11810,9 +11810,6 @@ einst256 //
einstei2 //
einstein //
-@source:elecbowl.cpp
-elecbowl // Marx
-
@source:electra.cpp
avenger // (c) 1975 Electra
@@ -12205,6 +12202,7 @@ csc // CSC: Champion Sensory Chess Challenger (Engli
cscfr // * French
cscg // * German
cscsp // * Spanish
+fdes2000 //
feasbu // EAS: Elite A/S Challenger (Budapest program, English)
feasbufr // * French
feasbug // * German
@@ -14110,6 +14108,9 @@ victor //
hexion // GX122 (c) 1992
hexionb // bootleg
+@source:hh_amis2k.cpp
+wildfire // Parker Bros
+
@source:hh_cop400.cpp
bship82 // Milton Bradley
ctstein // Castle Toy
@@ -14194,6 +14195,7 @@ ebball2 // Entex
ebball3 // Entex
efootb4 // Entex
einvader // Entex
+elecbowl // Marx
elecdet // Ideal
esoccer // Entex
fxmcr165 // Gakken
@@ -14205,6 +14207,7 @@ h2hfootb // Coleco
lostreas // Parker Bros
matchnum // A-One
mathmagi // APF
+mbdtower // Milton Bradley
mdndclab // Mattel
merlin // Parker Bros
mmerlin // Parker Bros
@@ -14236,6 +14239,7 @@ edracula // Epoch
efball // Epoch
galaxy2 // Epoch
galaxy2b // Epoch
+grobot9 // Gakken
invspace // Epoch
mcompgin // Mattel
mvbfree // Mego
@@ -19563,9 +19567,6 @@ mbc200 //
@source:mbc55x.cpp
mbc55x // Sanyo MBC-550, MBC-555
-@source:mbdtower.cpp
-mbdtower // Milton Bradley
-
@source:mbee.cpp
mbee // Microbee 16 Standard or Plus
mbee128 // Microbee 128K standard (CP/M)
@@ -28954,6 +28955,7 @@ bioship // UPL-90062 (c) 1990 UPL + American Sammy licen
bjtwin // UPL-93087 (c) 1993 NMK
bjtwina // UPL-93087 (c) 1993 NMK
bjtwinp // UPL-93087 (c) 1993 NMK
+bjtwinpa
blkheart // UPL-91069
blkheartj // UPL-91069
bubl2000 // (c) 1998 Tuning
@@ -32166,6 +32168,7 @@ hustler // GX343 (c) 1981 Konami
hustlerb // bootleg
hustlerb2 // bootleg
hustlerb4 // bootleg
+hustlerb5 // bootleg
hustlerd // GX343 (c) 1981 Konami + Dynamo Games license
mimonkey // (c) 1982 Universal Video Games (US Copyright Office info - http://cocatalog.loc.gov)
mimonsco // (c) 1982 bootleg
@@ -35626,6 +35629,7 @@ demonwld // TP-O16 (c) 1990 Toaplan (+ Taito license when
demonwld1 // TP-O16 (c) 1989 Toaplan + Taito license
demonwld2 // TP-O16 (c) 1989 Toaplan
demonwld3 // TP-O16 (c) 1989 Toaplan
+demonwld4 // TP-O16 (c) 1989 Toaplan
fireshrk // TP-O17 (c) 1990 Toaplan
fireshrka // TP-O17 (c) 1989 Toaplan
fireshrkd // TP-O17 (c) 1990 Toaplan
@@ -37009,9 +37013,6 @@ wicat //
@source:wico.cpp
aftor //
-@source:wildfire.cpp
-wildfire // Parker Bros
-
@source:wildpkr.cpp
tabpkr // 199?, TAB Austira
wildpkr // 199?, TAB Austria.
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index ab95c015542..1c83d18fcc4 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -163,7 +163,6 @@ eacc.cpp
ec184x.cpp
ec65.cpp
einstein.cpp
-elecbowl.cpp
electron.cpp
elekscmp.cpp
elf.cpp
@@ -224,6 +223,7 @@ h8.cpp
h89.cpp
harriet.cpp
hec2hrp.cpp
+hh_amis2k.cpp
hh_cop400.cpp
hh_hmcs40.cpp
hh_melps4.cpp
@@ -315,7 +315,6 @@ mac.cpp
macpci.cpp
mbc200.cpp
mbc55x.cpp
-mbdtower.cpp
mbee.cpp
mc10.cpp
mc1000.cpp
@@ -670,7 +669,6 @@ vtech1.cpp
vtech2.cpp
wangpc.cpp
wicat.cpp
-wildfire.cpp
wswan.cpp
x07.cpp
x1.cpp
diff --git a/src/osd/modules/input/input_dinput.h b/src/osd/modules/input/input_dinput.h
index deda207b81a..594b46f6732 100644
--- a/src/osd/modules/input/input_dinput.h
+++ b/src/osd/modules/input/input_dinput.h
@@ -81,8 +81,8 @@ public:
// convert instance name to utf8
std::string utf8_instance_name = osd::text::from_tstring(instance->tszInstanceName);
- // set device id to name
- std::string utf8_instance_id = utf8_instance_name;
+ // set device id to name + product unique identifier + instance unique identifier
+ std::string utf8_instance_id = utf8_instance_name + " product_" + guid_to_string(instance->guidProduct) + " instance_" + guid_to_string(instance->guidInstance);
// allocate memory for the device object
TDevice* devinfo = module.devicelist()->create_device<TDevice>(machine, utf8_instance_name.c_str(), utf8_instance_id.c_str(), module);
@@ -133,6 +133,19 @@ public:
}
HRESULT enum_attached_devices(int devclass, device_enum_interface *enumerate_interface, void *state) const;
+
+ const std::string guid_to_string(const GUID& guid)
+ {
+ char guid_string[37];
+ sprintf_s(
+ guid_string, ARRAY_LENGTH(guid_string),
+ "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ guid.Data1, guid.Data2, guid.Data3,
+ guid.Data4[0], guid.Data4[1], guid.Data4[2],
+ guid.Data4[3], guid.Data4[4], guid.Data4[5],
+ guid.Data4[6], guid.Data4[7]);
+ return guid_string;
+ }
};
class dinput_device : public device_info
diff --git a/src/tools/imgtool/imgtool.cpp b/src/tools/imgtool/imgtool.cpp
index 25b116c86e3..04bc483c3ab 100644
--- a/src/tools/imgtool/imgtool.cpp
+++ b/src/tools/imgtool/imgtool.cpp
@@ -549,7 +549,7 @@ UINT64 imgtool::image::rand()
imgtool::partition::partition(imgtool::image &image, imgtool_class &imgclass, int partition_index, UINT64 base_block, UINT64 block_count)
: m_image(image)
- , m_partition_index(partition_index)
+ //, m_partition_index(partition_index)
, m_base_block(base_block)
, m_block_count(block_count)
, m_imgclass(imgclass)
diff --git a/src/tools/imgtool/imgtool.h b/src/tools/imgtool/imgtool.h
index 3d6e9a675eb..d03122c5819 100644
--- a/src/tools/imgtool/imgtool.h
+++ b/src/tools/imgtool/imgtool.h
@@ -187,12 +187,11 @@ namespace imgtool
private:
imgtool::image &m_image;
- int m_partition_index;
+ //int m_partition_index;
UINT64 m_base_block;
UINT64 m_block_count;
imgtool_class m_imgclass;
- size_t m_partition_extra_bytes;
size_t m_directory_extra_bytes;
char m_path_separator;