summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/ibm5150.xml153
-rw-r--r--hash/ibm5170.xml158
-rw-r--r--hash/ibmpcjr_cart.xml12
-rw-r--r--hash/lynx.xml13
-rw-r--r--hash/px4_cart.xml33
-rw-r--r--language/Portuguese/strings.po30
-rw-r--r--scripts/src/bus.lua14
-rw-r--r--scripts/target/mame/mess.lua9
-rw-r--r--src/devices/bus/coco/coco_t4426.cpp9
-rw-r--r--src/devices/bus/einstein/pipe.cpp119
-rw-r--r--src/devices/bus/einstein/pipe.h135
-rw-r--r--src/devices/bus/einstein/tk02.cpp231
-rw-r--r--src/devices/bus/einstein/tk02.h61
-rw-r--r--src/devices/cpu/h6280/h6280.cpp2
-rw-r--r--src/devices/cpu/mcs48/mcs48.cpp62
-rw-r--r--src/devices/cpu/mcs48/mcs48.h17
-rw-r--r--src/devices/machine/74259.cpp11
-rw-r--r--src/devices/machine/74259.h1
-rw-r--r--src/devices/machine/eeprom.cpp4
-rw-r--r--src/devices/machine/eepromser.h2
-rw-r--r--src/devices/machine/input_merger.cpp4
-rw-r--r--src/devices/machine/wd_fdc.cpp18
-rw-r--r--src/devices/machine/wd_fdc.h12
-rw-r--r--src/devices/machine/z80sio.cpp34
-rw-r--r--src/devices/machine/z80sio.h10
-rw-r--r--src/devices/sound/ymz770.cpp40
-rw-r--r--src/devices/video/stvvdp2.cpp6
-rw-r--r--src/devices/video/v9938.cpp1
-rw-r--r--src/emu/device.cpp31
-rw-r--r--src/emu/device.h2
-rw-r--r--src/emu/drivers/xtal.h3
-rw-r--r--src/emu/machine.cpp4
-rw-r--r--src/mame/drivers/acd.cpp48
-rw-r--r--src/mame/drivers/ampscarp.cpp40
-rw-r--r--src/mame/drivers/bigbord2.cpp161
-rw-r--r--src/mame/drivers/boogwing.cpp7
-rw-r--r--src/mame/drivers/cninja.cpp75
-rw-r--r--src/mame/drivers/cv1k.cpp54
-rw-r--r--src/mame/drivers/dblewing.cpp47
-rw-r--r--src/mame/drivers/deco32.cpp336
-rw-r--r--src/mame/drivers/dietgo.cpp5
-rw-r--r--src/mame/drivers/einstein.cpp253
-rw-r--r--src/mame/drivers/freekick.cpp32
-rw-r--r--src/mame/drivers/funkyjet.cpp5
-rw-r--r--src/mame/drivers/ibmpcjr.cpp5
-rw-r--r--src/mame/drivers/isbc8030.cpp57
-rw-r--r--src/mame/drivers/k1003.cpp24
-rw-r--r--src/mame/drivers/kaypro.cpp110
-rw-r--r--src/mame/drivers/kingobox.cpp2
-rw-r--r--src/mame/drivers/lemmings.cpp19
-rw-r--r--src/mame/drivers/lilith.cpp61
-rw-r--r--src/mame/drivers/mps1230.cpp12
-rw-r--r--src/mame/drivers/naomi.cpp2
-rw-r--r--src/mame/drivers/perq.cpp48
-rw-r--r--src/mame/drivers/poly.cpp24
-rw-r--r--src/mame/drivers/powerstack.cpp40
-rw-r--r--src/mame/drivers/px8.cpp16
-rw-r--r--src/mame/drivers/rohga.cpp29
-rw-r--r--src/mame/drivers/sapi1.cpp3
-rw-r--r--src/mame/drivers/slicer.cpp12
-rw-r--r--src/mame/drivers/solbourne.cpp55
-rw-r--r--src/mame/drivers/sothello.cpp73
-rw-r--r--src/mame/drivers/sym1.cpp100
-rw-r--r--src/mame/drivers/terco.cpp4
-rw-r--r--src/mame/drivers/ts3000.cpp42
-rw-r--r--src/mame/drivers/wyse.cpp44
-rw-r--r--src/mame/includes/boogwing.h2
-rw-r--r--src/mame/includes/cninja.h4
-rw-r--r--src/mame/includes/deco32.h142
-rw-r--r--src/mame/includes/einstein.h40
-rw-r--r--src/mame/includes/kaypro.h18
-rw-r--r--src/mame/includes/lemmings.h2
-rw-r--r--src/mame/machine/deco146.cpp40
-rw-r--r--src/mame/machine/deco146.h22
-rw-r--r--src/mame/machine/interpro_ioga.cpp2
-rw-r--r--src/mame/machine/kay_kbd.cpp784
-rw-r--r--src/mame/machine/kay_kbd.h54
-rw-r--r--src/mame/machine/kaypro.cpp23
-rw-r--r--src/mame/mame.lst25
-rw-r--r--src/mame/mess.flt10
-rw-r--r--src/mame/video/deco32.cpp76
81 files changed, 2690 insertions, 1640 deletions
diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml
index cdb71a30f08..458952d017f 100644
--- a/hash/ibm5150.xml
+++ b/hash/ibm5150.xml
@@ -5306,6 +5306,17 @@ has been replaced with an all-zero block. -->
</part>
</software>
+ <software name="qnxdemo">
+ <description>QNX Demonstration (Apr 17th, 1989)</description>
+ <year>1989</year>
+ <publisher>Quantum Software Systems</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="qnx1989.img" size="368640" crc="1f63eb66" sha1="746d459686e4b8f9ca6e22c20138557e2bff363d" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<!-- "Thoroughbred Passport" copy-protection dongle not emulated -->
<software name="tbos" supported="no">
<description>Thoroughbred/OS 6.6.2-6</description>
@@ -5586,6 +5597,123 @@ has been replaced with an all-zero block. -->
</part>
</software>
+ <software name="azurebnd">
+ <description>Advanced Dungeons &amp; Dragons - Curse of the Azure Bonds (V1.2)</description>
+ <year>1989</year>
+ <publisher>SSI</publisher>
+ <info name="version" value="1.2" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="azurebnd_1.img" size="368640" crc="9fa8ca28" sha1="236ca717a0eede9a8f90cb9e4fe3250ffaa46595" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="azurebnd_2.img" size="368640" crc="44f4999f" sha1="cb4b65d94c96caaeeaf3a4bd84fdf23185b14cbf" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="azurebnd_3.img" size="368640" crc="17b7d451" sha1="c574643cb1808037a250ba5da624ab89b5feab4f" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="azurebnd_4.img" size="368640" crc="ecea8cc9" sha1="33f8fcac0f0c8d6fb0e8d45d98afb5754fc22380" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="azurebnda" cloneof="azurebnd">
+ <description>Advanced Dungeons &amp; Dragons - Curse of the Azure Bonds (V1.1)</description>
+ <year>1989</year>
+ <publisher>SSI</publisher>
+ <info name="version" value="1.1" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="Curse of the Azure Bonds (USA) (5.25'') (Disk 1).img" size="368640" crc="8edb2f3c" sha1="d43ee33399e3594b4cd1afd35a1a062089e40c5c" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="Curse of the Azure Bonds (USA) (5.25'') (Disk 2).img" size="368640" crc="7cec17f4" sha1="a8cad973fa508e88f16b681d230857249b30f02d" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="Curse of the Azure Bonds (USA) (5.25'') (Disk 3).img" size="368640" crc="5c55a8ca" sha1="23165433804e07706b450e3aa51cde23f39bb992" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_5_25">
+ <dataarea name="flop" size = "368640">
+ <rom name="Curse of the Azure Bonds (USA) (5.25'') (Disk 4).img" size="368640" crc="08644e84" sha1="4f2443861e454e716470c9d3128c4c76a6ea4b5f" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="poolrad">
+ <description>Advanced Dungeons &amp; Dragons - Pool of Radiance</description>
+ <year>1988</year>
+ <publisher>SSI</publisher>
+ <info name="version" value="1.2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Pool of Radiance (USA) (Disk 1).img" size="737280" crc="7fceae07" sha1="a081a9f811ba0cf8d6fedb0aca4771bbe8e787de" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Pool of Radiance (USA) (Disk 2).img" size="737280" crc="360019c5" sha1="9b2b08d5bd64c635032fa0582362f218cf4a1b94" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pooldark">
+ <description>Advanced Dungeons &amp; Dragons - Pools of Darkness</description>
+ <year>1991</year>
+ <publisher>SSI</publisher>
+ <info name="version" value="1.00" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Pools of Darkness (USA) (Disk 1).img" size="737280" crc="732e3424" sha1="5345521c5e6083641fc3cf4a7c37bfc63c7b079c" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Pools of Darkness (USA) (Disk 2).img" size="737280" crc="18e5a10d" sha1="1602709a31850016a608d7298b81afd0b2bbb23d" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Pools of Darkness (USA) (Disk 3).img" size="737280" crc="576daf15" sha1="0fd8ecf7a44be7b1f1e6dfb24e9016e77039ab73" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="silvblad">
+ <description>Advanced Dungeons &amp; Dragons - Secret of the Silver Blades (1.20)</description>
+ <year>1990</year>
+ <publisher>SSI</publisher>
+ <info name="version" value="1.20" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Secret of the Silver Blades (1990)(SSI).dsk" size="737280" crc="fac4327b" sha1="05c4a640183fb83d7c539eefb4f82cb213ebaa9f" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="silvblada" cloneof="silvblad">
+ <description>Advanced Dungeons &amp; Dragons - Secret of the Silver Blades (1.10)</description>
+ <year>1990</year>
+ <publisher>SSI</publisher>
+ <info name="version" value="1.10" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "737280">
+ <rom name="Secret of the Silver Blades (USA).img" size="737280" crc="64b5ce63" sha1="66f92af0f871081d3c1ff7554ab8b6b1c3402344" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="captcom">
<description>The Adventures of Captain Comic</description>
<year>1988</year>
@@ -5598,6 +5726,20 @@ has been replaced with an all-zero block. -->
</part>
</software>
+ <software name="alpntram">
+ <!-- Dumped via Kryoflux, four tracks show as modified -->
+ <description>Alpine Tram Ride</description>
+ <year>1987</year>
+ <publisher>Learning Technologies</publisher>
+ <info name="version" value="1.1" />
+ <info name="user_notes" value="Must be run from drive A" />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size = "1167427">
+ <rom name="Alpine Tram Ride 1.1 for IBM PC (1987) (Kryoflux).mfm" size="1167427" crc="65210439" sha1="f47d610d0c539f2e8d41ee9ea95f7246255e3f44" offset="0" status="baddump"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="aaow">
<description>The Ancient Art of War</description>
<year>1984</year>
@@ -7990,17 +8132,6 @@ has been replaced with an all-zero block. -->
</part>
</software>
- <software name="silvblad">
- <description>Secret of the Silver Blades</description>
- <year>1990</year>
- <publisher>SSI</publisher>
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size = "737280">
- <rom name="Secret of the Silver Blades (1990)(SSI).dsk" size="737280" crc="fac4327b" sha1="05c4a640183fb83d7c539eefb4f82cb213ebaa9f" offset="0"/>
- </dataarea>
- </part>
- </software>
-
<software name="agidemos">
<description>Sierra Demo</description>
<year>1987</year>
diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml
index 68c3f36c76f..bf50d4031cb 100644
--- a/hash/ibm5170.xml
+++ b/hash/ibm5170.xml
@@ -2409,6 +2409,71 @@
</part>
</software>
+ <software name="pcmos1">
+ <description>PC-MOS/386 Version 1.02</description>
+ <year>1987</year>
+ <publisher>The Software Link</publisher>
+ <info name="version" value="1.02" />
+ <info name="serial" value="05-04648" />
+ <part name="disk1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disk1.img" size="1474560" crc="615acf20" sha1="6e5b14f2c457f653cf09c8b4c0cb7ef7b2d56573" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pcmos3">
+ <description>PC-MOS/386 Version 3.00</description>
+ <year>1988</year>
+ <publisher>The Software Link</publisher>
+ <info name="version" value="3.00" />
+ <info name="serial" value="05-018868" />
+ <part name="disk1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Disk1.img" size="1474560" crc="06981cb6" sha1="23ee2c0646cae310f8c8db5fd74200d641dfa9b0" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pcmos5">
+ <description>PC-MOS Version 5.01</description>
+ <year>1994</year>
+ <publisher>The Software Link</publisher>
+ <info name="version" value="5.01" />
+ <info name="serial" value="09-50003953" />
+ <part name="disk1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="PCMOS386-9-user.img" size="1474560" crc="936c016a" sha1="d31ef3d07b11b12085546e1b5a45f8ecfa4163d3" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="qnxmodem">
+ <description>QNX Demo Floppy (Modem Version V4)</description>
+ <year>1999</year>
+ <publisher>QNX Software Systems</publisher>
+ <info name="version" value="4.05" />
+ <info name="user_notes" value="8MB RAM required" />
+ <part name="disk1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="qnxdemo.dat" size="1474560" crc="1449909a" sha1="e35b2822eb2391ebcac04cb5f3ec8a284f601bb8" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="qnxnet">
+ <description>QNX Demo Floppy (Network Version V4)</description>
+ <year>1999</year>
+ <publisher>QNX Software Systems</publisher>
+ <info name="version" value="4.05" />
+ <info name="user_notes" value="8MB RAM required" />
+ <part name="disk1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="qnxdemo.dat" size="1474560" crc="315a822c" sha1="c8baa52161c069dae25410ce09a3b1c095961323" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="win95b">
<description>Microsoft Windows 95 (Bootdisk)</description>
<year>1995</year>
@@ -2900,37 +2965,37 @@
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="737280">
- <rom name="disk1.img" size="737280" crc="f7ae33c3" sha1="b19fcad2e0c77fb7b3f574b7feb499ee9bcc42f0" offset="0" />
+ <rom name="disk1dd.img" size="737280" crc="f7ae33c3" sha1="b19fcad2e0c77fb7b3f574b7feb499ee9bcc42f0" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
<dataarea name="flop" size="737280">
- <rom name="disk2.img" size="737280" crc="8d3b4522" sha1="3099e82c7974ea33e6498dbb5f308a1ef38ade4b" offset="0" />
+ <rom name="disk2dd.img" size="737280" crc="8d3b4522" sha1="3099e82c7974ea33e6498dbb5f308a1ef38ade4b" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_3_5">
<dataarea name="flop" size="737280">
- <rom name="disk3.img" size="737280" crc="75ed39ee" sha1="fe87c98f020541a0f44aeabd612cf3ac746285f4" offset="0" />
+ <rom name="disk3dd.img" size="737280" crc="75ed39ee" sha1="fe87c98f020541a0f44aeabd612cf3ac746285f4" offset="0" />
</dataarea>
</part>
<part name="flop4" interface="floppy_3_5">
<dataarea name="flop" size="737280">
- <rom name="disk4.img" size="737280" crc="0bbb5163" sha1="afd7e856c7ffa6ba1518a4443e63d4e85af90eee" offset="0" />
+ <rom name="disk4dd.img" size="737280" crc="0bbb5163" sha1="afd7e856c7ffa6ba1518a4443e63d4e85af90eee" offset="0" />
</dataarea>
</part>
<part name="flop5" interface="floppy_3_5">
<dataarea name="flop" size="737280">
- <rom name="disk5.img" size="737280" crc="9bad78fc" sha1="717e55075c33d04f73b728fb00455175e01f6207" offset="0" />
+ <rom name="disk5dd.img" size="737280" crc="9bad78fc" sha1="717e55075c33d04f73b728fb00455175e01f6207" offset="0" />
</dataarea>
</part>
<part name="flop6" interface="floppy_3_5">
<dataarea name="flop" size="737280">
- <rom name="disk6.img" size="737280" crc="aece5056" sha1="7e8786d56a13dcc6dbe604e773cfef3dcb81526f" offset="0" />
+ <rom name="disk6dd.img" size="737280" crc="aece5056" sha1="7e8786d56a13dcc6dbe604e773cfef3dcb81526f" offset="0" />
</dataarea>
</part>
<part name="flop7" interface="floppy_3_5">
<dataarea name="flop" size="737280">
- <rom name="disk7.img" size="737280" crc="53978e51" sha1="8aca13779c8d142a8989d854482d019c2d7252de" offset="0" />
+ <rom name="disk7dd.img" size="737280" crc="53978e51" sha1="8aca13779c8d142a8989d854482d019c2d7252de" offset="0" />
</dataarea>
</part>
</software>
@@ -2942,27 +3007,27 @@
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1228800">
- <rom name="disk1.img" size="1228800" crc="062ea5a7" sha1="4c1a2a22c68bb82e90db7c454f71f4fef3d5e1b9" offset="0" />
+ <rom name="disk1mf.img" size="1228800" crc="062ea5a7" sha1="4c1a2a22c68bb82e90db7c454f71f4fef3d5e1b9" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
<dataarea name="flop" size="1228800">
- <rom name="disk2.img" size="1228800" crc="1946eee6" sha1="adaf696fd6f1458ee5a73dea8b0a5fb5e306be90" offset="0" />
+ <rom name="disk2mf.img" size="1228800" crc="1946eee6" sha1="adaf696fd6f1458ee5a73dea8b0a5fb5e306be90" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_3_5">
<dataarea name="flop" size="1228800">
- <rom name="disk3.img" size="1228800" crc="93fbd992" sha1="271a52a62a83ce7bdcf6514f779b46c534cdf2a6" offset="0" />
+ <rom name="disk3mf.img" size="1228800" crc="93fbd992" sha1="271a52a62a83ce7bdcf6514f779b46c534cdf2a6" offset="0" />
</dataarea>
</part>
<part name="flop4" interface="floppy_3_5">
<dataarea name="flop" size="1228800">
- <rom name="disk4.img" size="1228800" crc="a6b5cba5" sha1="10dfb52912edbb02e6ffc48a7d46038dba9d499c" offset="0" />
+ <rom name="disk4mf.img" size="1228800" crc="a6b5cba5" sha1="10dfb52912edbb02e6ffc48a7d46038dba9d499c" offset="0" />
</dataarea>
</part>
<part name="flop5" interface="floppy_3_5">
<dataarea name="flop" size="1228800">
- <rom name="disk5.img" size="1228800" crc="54cc9762" sha1="b07c0c8f56bf005a3d526fb3ea9fe29e6204add2" offset="0" />
+ <rom name="disk5mf.img" size="1228800" crc="54cc9762" sha1="b07c0c8f56bf005a3d526fb3ea9fe29e6204add2" offset="0" />
</dataarea>
</part>
</software>
@@ -3464,47 +3529,47 @@
<publisher>Microsoft</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk01.img" size="1474560" crc="a456c5c1" sha1="845136f162498e0a53444f269abf4f49986e19bd" offset="0" />
+ <rom name="disk01u.img" size="1474560" crc="a456c5c1" sha1="845136f162498e0a53444f269abf4f49986e19bd" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk02.img" size="1474560" crc="60a61b4e" sha1="f2c1bd78ec784b2a4544901f38b6343875a9a1ed" offset="0" />
+ <rom name="disk02u.img" size="1474560" crc="60a61b4e" sha1="f2c1bd78ec784b2a4544901f38b6343875a9a1ed" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk03.img" size="1474560" crc="f7b18361" sha1="7d9e8bc8ce54ee6ce6d0c6198b8c5a62c9c0f25e" offset="0" />
+ <rom name="disk03u.img" size="1474560" crc="f7b18361" sha1="7d9e8bc8ce54ee6ce6d0c6198b8c5a62c9c0f25e" offset="0" />
</dataarea>
</part>
<part name="flop4" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk04.img" size="1474560" crc="e2946dbd" sha1="130eda5a79750a1b08a897c0c235235d0aba3f66" offset="0" />
+ <rom name="disk04u.img" size="1474560" crc="e2946dbd" sha1="130eda5a79750a1b08a897c0c235235d0aba3f66" offset="0" />
</dataarea>
</part>
<part name="flop5" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk05.img" size="1474560" crc="a94d27b4" sha1="3d453878879922594d05f6451d6e5636c215c219" offset="0" />
+ <rom name="disk05u.img" size="1474560" crc="a94d27b4" sha1="3d453878879922594d05f6451d6e5636c215c219" offset="0" />
</dataarea>
</part>
<part name="flop6" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk06.img" size="1474560" crc="f46858ea" sha1="f7243506ec484095fece35acacc54189ea9eb65c" offset="0" />
+ <rom name="disk06u.img" size="1474560" crc="f46858ea" sha1="f7243506ec484095fece35acacc54189ea9eb65c" offset="0" />
</dataarea>
</part>
<part name="flop7" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk07.img" size="1474560" crc="21f25ba7" sha1="adcb00920e352cc28ec5bf3ffb7893eb1938dac2" offset="0" />
+ <rom name="disk07u.img" size="1474560" crc="21f25ba7" sha1="adcb00920e352cc28ec5bf3ffb7893eb1938dac2" offset="0" />
</dataarea>
</part>
<part name="flop8" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk08.img" size="1474560" crc="46802720" sha1="f5ef16231c078c8f818a8edac77074b0edeb34fb" offset="0" />
+ <rom name="disk08u.img" size="1474560" crc="46802720" sha1="f5ef16231c078c8f818a8edac77074b0edeb34fb" offset="0" />
</dataarea>
</part>
<part name="flop9" interface="floppy_3_5">
<dataarea name="flop" size="1474560">
- <rom name="disk09.img" size="1474560" crc="44177162" sha1="f7b6b911c9efff0e6ba1c3dbc43c7cf1709fc52b" offset="0" />
+ <rom name="disk09u.img" size="1474560" crc="44177162" sha1="f7b6b911c9efff0e6ba1c3dbc43c7cf1709fc52b" offset="0" />
</dataarea>
</part>
</software>
@@ -4607,6 +4672,45 @@
</part>
</software>
+ <software name="pct71_525" cloneof="pct71">
+ <!-- Dumped via Kryoflux, shows as good and unmodified -->
+ <description>PC Tools 7.1 (5.25" HD)</description>
+ <year>1991</year>
+ <publisher>Central Point Software, Inc.</publisher>
+ <info name="version" value="7.1" />
+ <info name="developer" value="Central Point Software, Inc." />
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size = "1228800">
+ <rom name="pct71_525_1.img" size="1228800" crc="062b12dd" sha1="b7cca618cc0d80b77438700372e42d624bae8e5d" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <dataarea name="flop" size = "1228800">
+ <rom name="pct71_525_2.img" size="1228800" crc="cce86276" sha1="da795768cda4625720faccb30c6b20377b5fc3dc" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_5_25">
+ <dataarea name="flop" size = "1228800">
+ <rom name="pct71_525_3.img" size="1228800" crc="b5a89a5a" sha1="c7e70749fb9a1850eb26d9c455217da7314df1d8" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_5_25">
+ <dataarea name="flop" size = "1228800">
+ <rom name="pct71_525_4.img" size="1228800" crc="e505d407" sha1="82426b2d00fbc41c095c3dc6b47045619adb09e8" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_5_25">
+ <dataarea name="flop" size = "1228800">
+ <rom name="pct71_525_5.img" size="1228800" crc="4dd1e757" sha1="6906b8b1af5aa8ebeebdec4643e4528b69b68973" offset="0"/>
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_5_25">
+ <dataarea name="flop" size = "1228800">
+ <rom name="pct71_525_6.img" size="1228800" crc="a85217c9" sha1="5a12930041ae333d56aff308078eb16e4ff98030" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="pct8">
<description>PC Tools 8 (5.25" HD)</description>
<year>1992</year>
@@ -4615,32 +4719,32 @@
<info name="developer" value="Central Point Software, Inc." />
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size = "1228800">
- <rom name="PC Tools 8 [Central Point Software] [1992] [3.5DD] [Disk 1 of 6].img" size="1228800" crc="9e32b700" sha1="e3448a677db9da18f3933dcad536b712883276a5" offset="0"/>
+ <rom name="PC Tools 8 [Central Point Software] [1992] [5.25HD] [Disk 1 of 6].img" size="1228800" crc="9e32b700" sha1="e3448a677db9da18f3933dcad536b712883276a5" offset="0"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<dataarea name="flop" size = "1228800">
- <rom name="PC Tools 8 [Central Point Software] [1992] [3.5DD] [Disk 2 of 6].img" size="1228800" crc="58e67911" sha1="bb2b9b4447fbc3e469caa0d2ea651162e15a62da" offset="0"/>
+ <rom name="PC Tools 8 [Central Point Software] [1992] [5.25HD] [Disk 2 of 6].img" size="1228800" crc="58e67911" sha1="bb2b9b4447fbc3e469caa0d2ea651162e15a62da" offset="0"/>
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
<dataarea name="flop" size = "1228800">
- <rom name="PC Tools 8 [Central Point Software] [1992] [3.5DD] [Disk 3 of 6].img" size="1228800" crc="8950b0bb" sha1="ab3c91b07df198168d259643d05df123a67cebb9" offset="0"/>
+ <rom name="PC Tools 8 [Central Point Software] [1992] [5.25HD] [Disk 3 of 6].img" size="1228800" crc="8950b0bb" sha1="ab3c91b07df198168d259643d05df123a67cebb9" offset="0"/>
</dataarea>
</part>
<part name="flop4" interface="floppy_5_25">
<dataarea name="flop" size = "1228800">
- <rom name="PC Tools 8 [Central Point Software] [1992] [3.5DD] [Disk 4 of 6].img" size="1228800" crc="0fb54af3" sha1="909de4592581fcc56a47452a13f32c7f3455fdc7" offset="0"/>
+ <rom name="PC Tools 8 [Central Point Software] [1992] [5.25HD] [Disk 4 of 6].img" size="1228800" crc="0fb54af3" sha1="909de4592581fcc56a47452a13f32c7f3455fdc7" offset="0"/>
</dataarea>
</part>
<part name="flop5" interface="floppy_5_25">
<dataarea name="flop" size = "1228800">
- <rom name="PC Tools 8 [Central Point Software] [1992] [3.5DD] [Disk 5 of 6].img" size="1228800" crc="be00b76b" sha1="012617155cbcbb2ee1fbd3227ddfc585197f751d" offset="0"/>
+ <rom name="PC Tools 8 [Central Point Software] [1992] [5.25HD] [Disk 5 of 6].img" size="1228800" crc="be00b76b" sha1="012617155cbcbb2ee1fbd3227ddfc585197f751d" offset="0"/>
</dataarea>
</part>
<part name="flop6" interface="floppy_5_25">
<dataarea name="flop" size = "1228800">
- <rom name="PC Tools 8 [Central Point Software] [1992] [3.5DD] [Disk 6 of 6].img" size="1228800" crc="25def657" sha1="ef253ae828ddd915c4e67a121b257368a21f7d2e" offset="0"/>
+ <rom name="PC Tools 8 [Central Point Software] [1992] [5.25HD] [Disk 6 of 6].img" size="1228800" crc="25def657" sha1="ef253ae828ddd915c4e67a121b257368a21f7d2e" offset="0"/>
</dataarea>
</part>
</software>
diff --git a/hash/ibmpcjr_cart.xml b/hash/ibmpcjr_cart.xml
index 3d4e67342bf..5e3d2c5c8af 100644
--- a/hash/ibmpcjr_cart.xml
+++ b/hash/ibmpcjr_cart.xml
@@ -181,18 +181,6 @@ KinderComp (Spinnaker)
</part>
</software>
- <!-- This rom acts as a bios replacement, this is not yet supported by the driver -->
- <software name="quiksilv" supported="no">
- <description>QuickSilver</description>
- <year>19??</year>
- <publisher>Synectics</publisher>
- <part name="cart" interface="ibmpcjr_cart">
- <dataarea name="rom" size="65536">
- <rom name="quiksilv.bin" size="65536" crc="86aaa1c4" sha1="b3d7e8ce5de17441891e0b71e5261ed01a169dc1" offset="0" />
- </dataarea>
- </part>
- </software>
-
<software name="riveraid">
<description>River Raid</description>
<year>1984</year>
diff --git a/hash/lynx.xml b/hash/lynx.xml
index 00834d070e9..bc68a0f2b8a 100644
--- a/hash/lynx.xml
+++ b/hash/lynx.xml
@@ -5,7 +5,6 @@ Undumped games:
* Hyperdrome (Telegames 1999)
Undumped Self-Published Titles:
-* Alpine Games (R. & J. Graf)
* CGE 5th (Songbird Productions, CF30B2)
* Championship Rally (Songbird Productions, CF2006)
* Cyber Virus (Songbird Productions, CF2007)
@@ -1062,6 +1061,18 @@ Known undumped prototypes:
</part>
</software>
+ <software name="alpineg" supported="no"> <!-- Needs granularity set as 0x400 instead as 0x800 like the driver expects for 512k cartridges. Also will need eeprom support -->
+ <description>Alpine Games</description>
+ <year>2004</year>
+ <publisher>&lt;homebrew&gt;</publisher>
+ <info name="developer" value="R. &amp; J. Graf" />
+ <part name="cart" interface="lynx_cart">
+ <dataarea name="rom" size="524288">
+ <rom name="AlpineGames.bin" size="524288" crc="95a1ea09" sha1="fb71ad96f0730f88acd7d51eaa761e475a015d6c" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="dragnet">
<description>Dragnet Sound Demo</description>
<year>1995</year>
diff --git a/hash/px4_cart.xml b/hash/px4_cart.xml
index 0854b233403..377a25108f0 100644
--- a/hash/px4_cart.xml
+++ b/hash/px4_cart.xml
@@ -25,4 +25,37 @@
</part>
</software>
+ <software name="rsz">
+ <description>PX-4 Rom Writer</description>
+ <year>198?</year>
+ <publisher>EPSON</publisher>
+ <part name="cart" interface="px4_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="px4rsz.bin" size="32768" crc="12aa3f9c" sha1="c51af300c3d5bc7e8fa45ca9193f093e769cc611" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rmwr">
+ <description>PX-4 Prom Writer Cartridge V2.0</description>
+ <year>198?</year>
+ <publisher>EPSON</publisher>
+ <part name="cart" interface="px4_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="px4rmwr.bin" size="32768" crc="9a91bde0" sha1="aa650613672e702572b98eebf048555c988c7f5b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pw2">
+ <description>PX-4 Rom Write</description>
+ <year>198?</year>
+ <publisher>EPSON</publisher>
+ <part name="cart" interface="px4_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="px4promwriter2.bin" size="32768" crc="5c54faf3" sha1="4879a126b1975f09fadba8831e14c7e8f41c40f3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/language/Portuguese/strings.po b/language/Portuguese/strings.po
index 5edb5410346..c68144ef9a7 100644
--- a/language/Portuguese/strings.po
+++ b/language/Portuguese/strings.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-10-03 10:32+1100\n"
-"PO-Revision-Date: 2016-02-20 18:03+0100\n"
+"PO-Revision-Date: 2017-10-26 22:51+0100\n"
"Last-Translator: pmos69\n"
"Language-Team: MAME Language Team\n"
"Language: pt\n"
@@ -501,7 +501,7 @@ msgstr "Cor de fundo do rato-premido"
#: src/frontend/mame/ui/custui.cpp:469
msgid "Restore originals colors"
-msgstr "restaurar cores originais"
+msgstr "Restaurar cores originais"
#: src/frontend/mame/ui/custui.cpp:481
msgid "UI Colors Settings"
@@ -677,7 +677,7 @@ msgstr "Não Mecânico"
#: src/frontend/mame/ui/utils.cpp:64
msgid "Category"
-msgstr "categoria"
+msgstr "Categoria"
#: src/frontend/mame/ui/utils.cpp:65
msgid "Favorites"
@@ -1272,11 +1272,11 @@ msgstr "Requer Artwork\tNão\n"
#: src/frontend/mame/ui/selgame.cpp:947
msgid "Requires Clickable Artwork\tYes\n"
-msgid "Requer Artwork Clicável\tSim\n"
+msgstr "Requer Artwork Clicável\tSim\n"
#: src/frontend/mame/ui/selgame.cpp:947
msgid "Requires Clickable Artwork\tNo\n"
-msgid "Requer Artwork Clicável\tNão\n"
+msgstr "Requer Artwork Clicável\tNão\n"
#: src/frontend/mame/ui/selgame.cpp:948
msgid "Support Cocktail\tYes\n"
@@ -1312,31 +1312,31 @@ msgstr "Orientação de Ecrã\tHorizontal\n"
#: src/frontend/mame/ui/selgame.cpp:961
msgid "Requires CHD\tYes\n"
-msgid "Requer CHD\tSim\n"
+msgstr "Requer CHD\tSim\n"
#: src/frontend/mame/ui/selgame.cpp:961
msgid "Requires CHD\tNo\n"
-msgid "Requer CHD\tNão\n"
+msgstr "Requer CHD\tNão\n"
#: src/frontend/mame/ui/selgame.cpp:974
msgid "ROM Audit Result\tOK\n"
-msgid "Resultado da Audit à ROM\tOK\n"
+msgstr "Resultado da Audit à ROM\tOK\n"
#: src/frontend/mame/ui/selgame.cpp:976
msgid "ROM Audit Result\tBAD\n"
-msgid "Resultado da Audit à ROM\tFALHA\n"
+msgstr "Resultado da Audit à ROM\tFALHA\n"
#: src/frontend/mame/ui/selgame.cpp:979
msgid "Samples Audit Result\tNone Needed\n"
-msgid "Resultado da Audit às Samples\tNenhuma Necessária\n"
+msgstr "Resultado da Audit às Samples\tNenhuma Necessária\n"
#: src/frontend/mame/ui/selgame.cpp:981
msgid "Samples Audit Result\tOK\n"
-msgid "Resultado da Audit às Samples\tOK\n"
+msgstr "Resultado da Audit às Samples\tOK\n"
#: src/frontend/mame/ui/selgame.cpp:983
msgid "Samples Audit Result\tBAD\n"
-msgid "Resultado da Audit às Samples\tFALHA\n"
+msgstr "Resultado da Audit às Samples\tFALHA\n"
#: src/frontend/mame/ui/selgame.cpp:987
msgid ""
@@ -2124,7 +2124,7 @@ msgstr "Impulso da Moeda"
#: src/frontend/mame/ui/submenu.cpp:87
msgid "Device Mapping"
-msgstr "mapeamento de Dispositivos"
+msgstr "Mapeamento de Dispositivos"
#: src/frontend/mame/ui/submenu.cpp:88
msgid "Lightgun Device Assignment"
@@ -2132,7 +2132,7 @@ msgstr "Atribuição do Dispositivo Pistola de Luz"
#: src/frontend/mame/ui/submenu.cpp:89
msgid "Trackball Device Assignment"
-msgstr "Atribuição do Dispositivo trackball"
+msgstr "Atribuição do Dispositivo Trackball"
#: src/frontend/mame/ui/submenu.cpp:90
msgid "Pedal Device Assignment"
@@ -2184,7 +2184,7 @@ msgstr "Filtragem Bi-linear"
#: src/frontend/mame/ui/submenu.cpp:108
msgid "Bitmap Prescaling"
-msgstr "Bitmap Prescaling"
+msgstr "Prescaling de Bitmaps"
#: src/frontend/mame/ui/submenu.cpp:109
msgid "Window Mode"
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index d838b8bfa2a..8c49e202ec5 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -3280,3 +3280,17 @@ if (BUSES["INTERPRO_KEYBOARD"]~=null) then
MAME_DIR .. "src/devices/bus/interpro/keyboard/hle.h"
}
end
+
+---------------------------------------------------
+--
+--@src/devices/bus/einstein/pipe.h,BUSES["TATUNG_PIPE"] = true
+---------------------------------------------------
+
+if (BUSES["TATUNG_PIPE"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/einstein/pipe.cpp",
+ MAME_DIR .. "src/devices/bus/einstein/pipe.h",
+ MAME_DIR .. "src/devices/bus/einstein/tk02.cpp",
+ MAME_DIR .. "src/devices/bus/einstein/tk02.h",
+ }
+end
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 0f80615b5db..b0cdb00f6f5 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -731,6 +731,7 @@ BUSES["SPECTRUM"] = true
BUSES["SUNKBD"] = true
BUSES["SVI_EXPANDER"] = true
BUSES["SVI_SLOT"] = true
+BUSES["TATUNG_PIPE"] = true
BUSES["TI8X"] = true
BUSES["TI99"] = true
BUSES["TI99X"] = true
@@ -3061,6 +3062,7 @@ files {
MAME_DIR .. "src/mame/drivers/tv910.cpp",
MAME_DIR .. "src/mame/drivers/tv950.cpp",
MAME_DIR .. "src/mame/drivers/tv990.cpp",
+ MAME_DIR .. "src/mame/drivers/ts3000.cpp",
}
createMESSProjects(_target, _subtarget, "tem")
@@ -3406,11 +3408,13 @@ files {
createMESSProjects(_target, _subtarget, "skeleton")
files {
+ MAME_DIR .. "src/mame/drivers/acd.cpp",
MAME_DIR .. "src/mame/drivers/aceex.cpp",
MAME_DIR .. "src/mame/drivers/akaiax80.cpp",
MAME_DIR .. "src/mame/drivers/alesis_qs.cpp",
MAME_DIR .. "src/mame/drivers/alphasma.cpp",
MAME_DIR .. "src/mame/drivers/ampro.cpp",
+ MAME_DIR .. "src/mame/drivers/ampscarp.cpp",
MAME_DIR .. "src/mame/drivers/amust.cpp",
MAME_DIR .. "src/mame/drivers/anzterm.cpp",
MAME_DIR .. "src/mame/drivers/applix.cpp",
@@ -3501,6 +3505,7 @@ files {
MAME_DIR .. "src/mame/drivers/lft.cpp",
MAME_DIR .. "src/mame/drivers/lg-dvd.cpp",
MAME_DIR .. "src/mame/drivers/lola8a.cpp",
+ MAME_DIR .. "src/mame/drivers/lilith.cpp",
MAME_DIR .. "src/mame/drivers/m79152pc.cpp",
MAME_DIR .. "src/mame/drivers/mccpm.cpp",
MAME_DIR .. "src/mame/drivers/mes.cpp",
@@ -3538,6 +3543,7 @@ files {
MAME_DIR .. "src/mame/drivers/p8k.cpp",
MAME_DIR .. "src/mame/drivers/pegasus.cpp",
MAME_DIR .. "src/mame/drivers/pencil2.cpp",
+ MAME_DIR .. "src/mame/drivers/perq.cpp",
MAME_DIR .. "src/mame/drivers/pes.cpp",
MAME_DIR .. "src/mame/includes/pes.h",
MAME_DIR .. "src/mame/drivers/pipbug.cpp",
@@ -3545,6 +3551,7 @@ files {
MAME_DIR .. "src/mame/drivers/pm68k.cpp",
MAME_DIR .. "src/mame/drivers/pockchal.cpp",
MAME_DIR .. "src/mame/drivers/poly.cpp",
+ MAME_DIR .. "src/mame/drivers/powerstack.cpp",
MAME_DIR .. "src/mame/drivers/proteus3.cpp",
MAME_DIR .. "src/mame/drivers/pt68k4.cpp",
MAME_DIR .. "src/mame/drivers/ptcsol.cpp",
@@ -3561,6 +3568,7 @@ files {
MAME_DIR .. "src/mame/drivers/softbox.cpp",
MAME_DIR .. "src/mame/includes/softbox.h",
MAME_DIR .. "src/mame/drivers/squale.cpp",
+ MAME_DIR .. "src/mame/drivers/solbourne.cpp",
MAME_DIR .. "src/mame/drivers/swtpc.cpp",
MAME_DIR .. "src/mame/drivers/swyft.cpp",
MAME_DIR .. "src/mame/drivers/symbolics.cpp",
@@ -3582,6 +3590,7 @@ files {
MAME_DIR .. "src/mame/drivers/vii.cpp",
MAME_DIR .. "src/mame/drivers/vsmilepro.cpp",
MAME_DIR .. "src/mame/drivers/wicat.cpp",
+ MAME_DIR .. "src/mame/drivers/wyse.cpp",
MAME_DIR .. "src/mame/drivers/xor100.cpp",
MAME_DIR .. "src/mame/includes/xor100.h",
MAME_DIR .. "src/mame/drivers/xavix.cpp",
diff --git a/src/devices/bus/coco/coco_t4426.cpp b/src/devices/bus/coco/coco_t4426.cpp
index 5408b9c0dc8..895df9a5515 100644
--- a/src/devices/bus/coco/coco_t4426.cpp
+++ b/src/devices/bus/coco/coco_t4426.cpp
@@ -6,7 +6,10 @@
*
* Terco T4426 CNC Programming Station multi cart
*
- * The code here is heavily inspired by coco_pak and coco_232
+ * The T4426 is based on a Color Computer II PCB revision 26-3134A with a modified
+ * Extended Basic fitted through an adapter and a soldered wire as one address line
+ * was missing. Modifications involved obfuscation changing names of some common
+ * commands such as LIST renamed to LARS (which happens to be the name of the CEO).
*
* +-------------------------------------------------------------------------------+
* ||__|+-----+ oo 75 |O ||||||||||||||| O| |
@@ -51,7 +54,7 @@
#define LOG_PIA (1U << 2)
#define LOG_ACIA (1U << 3)
-//#define VERBOSE (LOG_ACIA|LOG_GENERAL) // (LOG_PIA | LOG_GENERAL | LOG_SETUP)
+//#define VERBOSE (LOG_PIA) // (LOG_PIA | LOG_GENERAL | LOG_SETUP)
//#define LOG_OUTPUT_STREAM std::cout
#include "logmacro.h"
@@ -182,7 +185,7 @@ ROM_START( coco_t4426 )
// 8 banked ROM:s
ROM_LOAD("tercoED4426-0-8549-5.3.bin", 0x0000, 0x2000, CRC(45665428) SHA1(ff49a79275772c4c4ab1ae29db662c9b10a744a7))
- ROM_LOAD("tercoED4426-1-8549-5.3.bin", 0x2000, 0x2000, CRC(44baba33) SHA1(01cee1b208c158e598e7ecd2189b5e0ffa7f3ab9))
+ ROM_LOAD("tercoED4426-1-8549-5.3.bin", 0x2000, 0x2000, CRC(854cd50d) SHA1(0786391b4e7a78af0a984b6313eec7f71fb4ad9e))
ROM_LOAD("tercoPD4426-2-8632-6.4.bin", 0x4000, 0x2000, CRC(258e443a) SHA1(9d8901f3e70ae4f8526dde1b5208b22f066f801f))
ROM_LOAD("tercoPD4426-3-8638-6.4.bin", 0x6000, 0x2000, CRC(640d1de4) SHA1(5ae7427cb5729fd3920361855d954ea1f97f6ae5))
ROM_LOAD("tercoCA4426-4-8549-3.4.bin", 0x8000, 0x2000, CRC(df18397b) SHA1(2f9de210c039619c649be223c37a4eff873fa600))
diff --git a/src/devices/bus/einstein/pipe.cpp b/src/devices/bus/einstein/pipe.cpp
new file mode 100644
index 00000000000..9a44d86dcdf
--- /dev/null
+++ b/src/devices/bus/einstein/pipe.cpp
@@ -0,0 +1,119 @@
+// license: GPL-2.0+
+// copyright-holders: Dirk Best
+/***************************************************************************
+
+ Einstein "Tatung Pipe"
+
+***************************************************************************/
+
+#include "emu.h"
+#include "pipe.h"
+
+// supported devices
+#include "tk02.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(TATUNG_PIPE, tatung_pipe_device, "tatung_pipe", "Tatung Pipe Slot")
+
+
+//**************************************************************************
+// SLOT DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// tatung_pipe_device - constructor
+//-------------------------------------------------
+
+tatung_pipe_device::tatung_pipe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, TATUNG_PIPE, tag, owner, clock),
+ device_slot_interface(mconfig, *this),
+ m_program(nullptr),
+ m_io(nullptr),
+ m_card(nullptr),
+ m_int_handler(*this),
+ m_nmi_handler(*this),
+ m_reset_handler(*this)
+{
+}
+
+//-------------------------------------------------
+// tatung_pipe_device - destructor
+//-------------------------------------------------
+
+tatung_pipe_device::~tatung_pipe_device()
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void tatung_pipe_device::device_start()
+{
+ // resolve callbacks
+ m_int_handler.resolve_safe();
+ m_nmi_handler.resolve_safe();
+ m_reset_handler.resolve_safe();
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void tatung_pipe_device::device_reset()
+{
+}
+
+//-------------------------------------------------
+// set_program_space - set address space we are attached to
+//-------------------------------------------------
+
+void tatung_pipe_device::set_program_space(address_space *program)
+{
+ m_program = program;
+}
+
+//-------------------------------------------------
+// set_io_space - set address space we are attached to
+//-------------------------------------------------
+
+void tatung_pipe_device::set_io_space(address_space *io)
+{
+ m_io = io;
+}
+
+
+//**************************************************************************
+// CARD INTERFACE
+//**************************************************************************
+
+//-------------------------------------------------
+// device_tatung_pipe_interface - constructor
+//-------------------------------------------------
+
+device_tatung_pipe_interface::device_tatung_pipe_interface(const machine_config &mconfig, device_t &device) :
+ device_slot_card_interface(mconfig, device)
+{
+ m_slot = dynamic_cast<tatung_pipe_device *>(device.owner());
+}
+
+//-------------------------------------------------
+// ~device_tatung_pipe_interface - destructor
+//-------------------------------------------------
+
+device_tatung_pipe_interface::~device_tatung_pipe_interface()
+{
+}
+
+
+//**************************************************************************
+// SLOT INTERFACE
+//**************************************************************************
+
+SLOT_INTERFACE_START( tatung_pipe_cards )
+ SLOT_INTERFACE("tk02", TK02_80COL)
+SLOT_INTERFACE_END
diff --git a/src/devices/bus/einstein/pipe.h b/src/devices/bus/einstein/pipe.h
new file mode 100644
index 00000000000..d9911ff94d7
--- /dev/null
+++ b/src/devices/bus/einstein/pipe.h
@@ -0,0 +1,135 @@
+// license: GPL-2.0+
+// copyright-holders: Dirk Best
+/***************************************************************************
+
+ Einstein "Tatung Pipe"
+
+ 60-pin slot
+
+ +5V 1 2 D7
+ +5V 3 4 D6
+ GND 5 6 D5
+ GND 7 8 D4
+ GND 9 10 D3
+ GND 11 12 D2
+ GND 13 14 D1
+ GND 15 16 D0
+ GND 17 18 A15
+ A14 19 20 A13
+ A12 21 22 A11
+ A10 23 24 A9
+ A8 25 26 A7
+ A6 27 28 A5
+ A4 29 30 A3
+ A2 31 32 A1
+ A0 33 34 /RESET
+ GND 35 36 /RFSH
+ GND 37 38 /M1
+ GND 39 40 /BUSACK
+ GND 41 42 /WR
+ GND 43 44 /RD
+ GND 45 46 /IORQ
+ GND 47 48 /MREQ
+ GND 49 50 /HALT
+ GND 51 52 /NMI
+ GND 53 54 /INT
+ GND 55 56 /WAIT
+ GND 57 58 /BUSREQ
+ GND 59 60 SYSCLK
+
+***************************************************************************/
+
+#ifndef MAME_BUS_EINSTEIN_PIPE_H
+#define MAME_BUS_EINSTEIN_PIPE_H
+
+#pragma once
+
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_TATUNG_PIPE_ADD(_tag) \
+ MCFG_DEVICE_ADD(_tag, TATUNG_PIPE, 0) \
+ MCFG_DEVICE_SLOT_INTERFACE(tatung_pipe_cards, nullptr, false)
+
+#define MCFG_TATUNG_PIPE_INT_HANDLER(_devcb) \
+ devcb = &tatung_pipe_device::set_int_handler(*device, DEVCB_##_devcb);
+
+#define MCFG_TATUNG_PIPE_NMI_HANDLER(_devcb) \
+ devcb = &tatung_pipe_device::set_nmi_handler(*device, DEVCB_##_devcb);
+
+#define MCFG_TATUNG_PIPE_RESET_HANDLER(_devcb) \
+ devcb = &tatung_pipe_device::set_reset_handler(*device, DEVCB_##_devcb);
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class device_tatung_pipe_interface;
+
+class tatung_pipe_device : public device_t, public device_slot_interface
+{
+ friend class device_tatung_pipe_interface;
+public:
+ // construction/destruction
+ tatung_pipe_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual ~tatung_pipe_device();
+
+ void set_program_space(address_space *program);
+ void set_io_space(address_space *io);
+
+ // callbacks
+ template <class Object> static devcb_base &set_int_handler(device_t &device, Object &&cb)
+ { return downcast<tatung_pipe_device &>(device).m_int_handler.set_callback(std::forward<Object>(cb)); }
+
+ template <class Object> static devcb_base &set_nmi_handler(device_t &device, Object &&cb)
+ { return downcast<tatung_pipe_device &>(device).m_nmi_handler.set_callback(std::forward<Object>(cb)); }
+
+ template <class Object> static devcb_base &set_reset_handler(device_t &device, Object &&cb)
+ { return downcast<tatung_pipe_device &>(device).m_reset_handler.set_callback(std::forward<Object>(cb)); }
+
+ // called from card device
+ DECLARE_WRITE_LINE_MEMBER( int_w ) { m_int_handler(state); }
+ DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
+ DECLARE_WRITE_LINE_MEMBER( reset_w ) { m_reset_handler(state); }
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ address_space *m_program;
+ address_space *m_io;
+
+ device_tatung_pipe_interface *m_card;
+
+private:
+ devcb_write_line m_int_handler;
+ devcb_write_line m_nmi_handler;
+ devcb_write_line m_reset_handler;
+};
+
+// class representing interface-specific live pipe device
+class device_tatung_pipe_interface : public device_slot_card_interface
+{
+public:
+ // construction/destruction
+ device_tatung_pipe_interface(const machine_config &mconfig, device_t &device);
+ virtual ~device_tatung_pipe_interface();
+
+protected:
+ address_space &program_space() { return *m_slot->m_program; }
+ address_space &io_space() { return *m_slot->m_io; }
+
+ tatung_pipe_device *m_slot;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(TATUNG_PIPE, tatung_pipe_device)
+
+// supported devices
+SLOT_INTERFACE_EXTERN(tatung_pipe_cards);
+
+#endif // MAME_BUS_EINSTEIN_PIPE_H
diff --git a/src/devices/bus/einstein/tk02.cpp b/src/devices/bus/einstein/tk02.cpp
new file mode 100644
index 00000000000..02bea85e43f
--- /dev/null
+++ b/src/devices/bus/einstein/tk02.cpp
@@ -0,0 +1,231 @@
+// license: GPL-2.0+
+// copyright-holders: Dirk Best, Phill Harvey-Smith
+/***************************************************************************
+
+ TK02 80 Column Monochrome Unit
+
+***************************************************************************/
+
+#include "emu.h"
+#include "tk02.h"
+#include "screen.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(TK02_80COL, tk02_device, "tk02", "TK02 80 Column Monochrome Unit")
+
+//-------------------------------------------------
+// device_address_map
+//-------------------------------------------------
+
+DEVICE_ADDRESS_MAP_START(map, 8, tk02_device)
+// AM_RANGE(0x00, 0x07) AM_SELECT(0xff00) AM_READWRITE(ram_r, ram_w) // no AM_SELECT (or AM_MASK) support here
+ AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) AM_DEVWRITE("crtc", mc6845_device, address_w)
+ AM_RANGE(0x09, 0x09) AM_MIRROR(0xff00) AM_DEVWRITE("crtc", mc6845_device, register_w)
+ AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_READ(status_r)
+ADDRESS_MAP_END
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+ROM_START( tk02 )
+ ROM_REGION(0x2000, "gfx", 0)
+ ROM_LOAD("tk02-v100.bin", 0x0000, 0x2000, CRC(ad3c4346) SHA1(cd57e630371b4d0314e3f15693753fb195c7257d))
+ROM_END
+
+const tiny_rom_entry *tk02_device::device_rom_region() const
+{
+ return ROM_NAME( tk02 );
+}
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+static INPUT_PORTS_START( tk02_links )
+ PORT_START("M001")
+ PORT_DIPUNUSED_DIPLOC(0x01, 0x01, "M001:1")
+
+ PORT_START("M002")
+ PORT_DIPNAME(0x01, 0x00, "TV Standard") PORT_DIPLOCATION("M002:1")
+ PORT_DIPSETTING(0x00, "625 lines/50 Hz")
+ PORT_DIPSETTING(0x01, "525 lines/60 Hz")
+
+ PORT_START("M003")
+ PORT_DIPNAME(0x01, 0x00, "Startup Mode") PORT_DIPLOCATION("M003:1")
+ PORT_DIPSETTING(0x00, "Normal")
+ PORT_DIPSETTING(0x01, "Automatic 80 Column")
+
+ PORT_START("M004")
+ PORT_DIPNAME(0x01, 0x00, "Character Set") PORT_DIPLOCATION("M004:1")
+ PORT_DIPSETTING(0x00, "Modified")
+ PORT_DIPSETTING(0x01, "Normal")
+INPUT_PORTS_END
+
+ioport_constructor tk02_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( tk02_links );
+}
+
+//-------------------------------------------------
+// gfx_layout - only for the char viewer
+//-------------------------------------------------
+
+static const gfx_layout tk02_charlayout =
+{
+ 8, 10,
+ 256,
+ 1,
+ { 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 0x800*8, 0x801*8 },
+ 8*8
+};
+
+static GFXDECODE_START( tk02 )
+ GFXDECODE_ENTRY("gfx", 0x0000, tk02_charlayout, 0, 1)
+ GFXDECODE_ENTRY("gfx", 0x1000, tk02_charlayout, 0, 1)
+GFXDECODE_END
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+MACHINE_CONFIG_MEMBER( tk02_device::device_add_mconfig )
+ MCFG_SCREEN_ADD_MONOCHROME("mono", RASTER, rgb_t::green())
+ MCFG_SCREEN_RAW_PARAMS(XTAL_8MHz * 2, 1024, 0, 640, 312, 0, 250)
+ MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", tk02)
+
+ MCFG_MC6845_ADD("crtc", MC6845, "mono", XTAL_8MHz / 4)
+ MCFG_MC6845_SHOW_BORDER_AREA(false)
+ MCFG_MC6845_CHAR_WIDTH(8)
+ MCFG_MC6845_UPDATE_ROW_CB(tk02_device, crtc_update_row)
+ MCFG_MC6845_OUT_DE_CB(WRITELINE(tk02_device, de_w))
+
+ MCFG_TATUNG_PIPE_ADD("pipe")
+MACHINE_CONFIG_END
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// tk02_device - constructor
+//-------------------------------------------------
+
+tk02_device::tk02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, TK02_80COL, tag, owner, clock),
+ device_tatung_pipe_interface(mconfig, *this),
+ m_pipe(*this, "pipe"),
+ m_crtc(*this, "crtc"),
+ m_palette(*this, "palette"),
+ m_gfx(*this, "gfx"),
+ m_links(*this, "M00%u", 1),
+ m_de(0)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void tk02_device::device_start()
+{
+ // setup ram
+ m_ram = std::make_unique<uint8_t[]>(0x800);
+ memset(m_ram.get(), 0xff, 0x800);
+
+ // register for save states
+ save_pointer(NAME(m_ram.get()), 0x800);
+ save_item(NAME(m_de));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void tk02_device::device_reset()
+{
+ m_pipe->set_io_space(&io_space());
+ m_pipe->set_program_space(&program_space());
+
+ io_space().install_device(0x40, 0x4f, *this, &tk02_device::map);
+ io_space().install_readwrite_handler(0x40, 0x47, 0, 0, 0xff00, read8_delegate(FUNC(tk02_device::ram_r), this), write8_delegate(FUNC(tk02_device::ram_w), this));
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+MC6845_UPDATE_ROW( tk02_device::crtc_update_row )
+{
+ const pen_t *pen = m_palette->pens();
+
+ for (int i = 0; i < x_count; i++)
+ {
+ uint8_t code = m_ram[(ma + i) & 0x07ff];
+
+ // 12-------------- link M004
+ // --11------------ ra3
+ // ----109876543--- data from ram
+ // -------------210 ra0..2
+ uint8_t data = m_gfx->as_u8((m_links[3]->read() << 12) | ((ra & 0x08) << 8) | (code << 3) | (ra & 0x07));
+
+ if (i == cursor_x)
+ data ^= 0xff;
+
+ bitmap.pix32(y, i * 8 + 0) = pen[BIT(data, 7)];
+ bitmap.pix32(y, i * 8 + 1) = pen[BIT(data, 6)];
+ bitmap.pix32(y, i * 8 + 2) = pen[BIT(data, 5)];
+ bitmap.pix32(y, i * 8 + 3) = pen[BIT(data, 4)];
+ bitmap.pix32(y, i * 8 + 4) = pen[BIT(data, 3)];
+ bitmap.pix32(y, i * 8 + 5) = pen[BIT(data, 2)];
+ bitmap.pix32(y, i * 8 + 6) = pen[BIT(data, 1)];
+ bitmap.pix32(y, i * 8 + 7) = pen[BIT(data, 0)];
+ }
+}
+
+WRITE_LINE_MEMBER( tk02_device::de_w )
+{
+ m_de = state;
+}
+
+// lower 3 bits of address define a 256-byte "row"
+// upper 8 bits define the offset in the row
+READ8_MEMBER( tk02_device::ram_r )
+{
+ return m_ram[((offset & 0x07) << 8) | ((offset >> 8) & 0xff)];
+}
+
+WRITE8_MEMBER( tk02_device::ram_w )
+{
+ m_ram[((offset & 0x07) << 8) | ((offset >> 8) & 0xff)] = data;
+}
+
+READ8_MEMBER( tk02_device::status_r )
+{
+ // 7654---- unused
+ // ----3--- link M001
+ // -----2-- link M002
+ // ------1- link M003
+ // -------0 mc6845 display enabled
+
+ uint8_t data = 0xf0;
+
+ data |= m_links[0]->read() << 3;
+ data |= m_links[1]->read() << 2;
+ data |= m_links[2]->read() << 1;
+ data |= m_de << 0;
+
+ return data;
+}
diff --git a/src/devices/bus/einstein/tk02.h b/src/devices/bus/einstein/tk02.h
new file mode 100644
index 00000000000..8a7d2231de3
--- /dev/null
+++ b/src/devices/bus/einstein/tk02.h
@@ -0,0 +1,61 @@
+// license: GPL-2.0+
+// copyright-holders: Dirk Best, Phill Harvey-Smith
+/***************************************************************************
+
+ TK02 80 Column Monochrome Unit
+
+***************************************************************************/
+
+#ifndef MAME_BUS_EINSTEIN_TK02_H
+#define MAME_BUS_EINSTEIN_TK02_H
+
+#pragma once
+
+#include "pipe.h"
+#include "video/mc6845.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> tk02_device
+
+class tk02_device : public device_t, public device_tatung_pipe_interface
+{
+public:
+ // construction/destruction
+ tk02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ DECLARE_ADDRESS_MAP(map, 8);
+
+ DECLARE_WRITE_LINE_MEMBER(de_w);
+
+ DECLARE_READ8_MEMBER(ram_r);
+ DECLARE_WRITE8_MEMBER(ram_w);
+ DECLARE_READ8_MEMBER(status_r);
+
+ MC6845_UPDATE_ROW(crtc_update_row);
+
+ required_device<tatung_pipe_device> m_pipe;
+ required_device<mc6845_device> m_crtc;
+ required_device<palette_device> m_palette;
+ required_memory_region m_gfx;
+ required_ioport_array<4> m_links;
+
+ std::unique_ptr<uint8_t[]> m_ram;
+ int m_de;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(TK02_80COL, tk02_device)
+
+#endif // MAME_BUS_EINSTEIN_TK02_H
diff --git a/src/devices/cpu/h6280/h6280.cpp b/src/devices/cpu/h6280/h6280.cpp
index c8a81af0532..4c5091b502e 100644
--- a/src/devices/cpu/h6280/h6280.cpp
+++ b/src/devices/cpu/h6280/h6280.cpp
@@ -948,7 +948,7 @@ inline void h6280_device::bpl()
***************************************************************/
inline void h6280_device::brk()
{
- logerror("BRK %04xn",PCW);
+ logerror("BRK %04x\n",PCW);
clear_t();
PCW++;
push(PCH);
diff --git a/src/devices/cpu/mcs48/mcs48.cpp b/src/devices/cpu/mcs48/mcs48.cpp
index affcff6a09d..eba06d7a156 100644
--- a/src/devices/cpu/mcs48/mcs48.cpp
+++ b/src/devices/cpu/mcs48/mcs48.cpp
@@ -7,7 +7,13 @@
reimplement as a push, not a pull
- T0 output clock
- get rid of i/o addressmap, use devcb for mcu pins
- - add CMOS devices, 1 new opcode(01 HALT)
+ - add CMOS devices, 1 new opcode (01 HALT)
+ - make timer update cleaner:
+ timer is updated on S4 while I/O happens on S5
+ due to very bad coding, Kaypro 10 keyboard depends on being able to see T=0 before interrupt is taken
+ right now this is implemented with a hack in the mov_a_t handler
+ in theory it should also be possible to see the timer flag before the interrupt is taken
+ mov_t_a should also update the T register after it's incremented
*/
/***************************************************************************
@@ -121,24 +127,6 @@
MACROS
***************************************************************************/
-/* ROM is mapped to AS_PROGRAM */
-#define program_r(a) m_program->read_byte(a)
-
-/* RAM is mapped to AS_DATA */
-#define ram_r(a) m_data->read_byte(a)
-#define ram_w(a,V) m_data->write_byte(a, V)
-
-/* ports are mapped to AS_IO and callbacks */
-#define ext_r(a) m_io->read_byte(a)
-#define ext_w(a,V) m_io->write_byte(a, V)
-#define port_r(a) m_port_in_cb[a-1]()
-#define port_w(a,V) m_port_out_cb[a-1](V)
-#define test_r(a) m_test_in_cb[a]()
-#define test_w(a,V) m_test_out_cb[a](V)
-#define bus_r() m_bus_in_cb()
-#define bus_w(V) m_bus_out_cb(V)
-#define prog_w(V) m_prog_out_cb(V)
-
/* r0-r7 map to memory via the regptr */
#define R0 m_regptr[0]
#define R1 m_regptr[1]
@@ -151,24 +139,24 @@
-DEFINE_DEVICE_TYPE(I8021, i8021_device, "i8021", "I8021")
-DEFINE_DEVICE_TYPE(I8022, i8022_device, "i8022", "I8022")
-DEFINE_DEVICE_TYPE(I8035, i8035_device, "i8035", "I8035")
-DEFINE_DEVICE_TYPE(I8048, i8048_device, "i8048", "I8048")
-DEFINE_DEVICE_TYPE(I8648, i8648_device, "i8648", "I8648")
-DEFINE_DEVICE_TYPE(I8748, i8748_device, "i8748", "I8748")
-DEFINE_DEVICE_TYPE(I8039, i8039_device, "i8039", "I8039")
-DEFINE_DEVICE_TYPE(I8049, i8049_device, "i8049", "I8049")
-DEFINE_DEVICE_TYPE(I8749, i8749_device, "i8749", "I8749")
-DEFINE_DEVICE_TYPE(I8040, i8040_device, "i8040", "I8040")
-DEFINE_DEVICE_TYPE(I8050, i8050_device, "i8050", "I8050")
-DEFINE_DEVICE_TYPE(I8041, i8041_device, "i8041", "I8041")
-DEFINE_DEVICE_TYPE(I8741, i8741_device, "i8741", "I8741")
-DEFINE_DEVICE_TYPE(I8042, i8042_device, "i8042", "I8042")
-DEFINE_DEVICE_TYPE(I8242, i8242_device, "i8242", "I8242")
-DEFINE_DEVICE_TYPE(I8742, i8742_device, "i8742", "I8742")
+DEFINE_DEVICE_TYPE(I8021, i8021_device, "i8021", "I8021")
+DEFINE_DEVICE_TYPE(I8022, i8022_device, "i8022", "I8022")
+DEFINE_DEVICE_TYPE(I8035, i8035_device, "i8035", "I8035")
+DEFINE_DEVICE_TYPE(I8048, i8048_device, "i8048", "I8048")
+DEFINE_DEVICE_TYPE(I8648, i8648_device, "i8648", "I8648")
+DEFINE_DEVICE_TYPE(I8748, i8748_device, "i8748", "I8748")
+DEFINE_DEVICE_TYPE(I8039, i8039_device, "i8039", "I8039")
+DEFINE_DEVICE_TYPE(I8049, i8049_device, "i8049", "I8049")
+DEFINE_DEVICE_TYPE(I8749, i8749_device, "i8749", "I8749")
+DEFINE_DEVICE_TYPE(I8040, i8040_device, "i8040", "I8040")
+DEFINE_DEVICE_TYPE(I8050, i8050_device, "i8050", "I8050")
+DEFINE_DEVICE_TYPE(I8041, i8041_device, "i8041", "I8041")
+DEFINE_DEVICE_TYPE(I8741, i8741_device, "i8741", "I8741")
+DEFINE_DEVICE_TYPE(I8042, i8042_device, "i8042", "I8042")
+DEFINE_DEVICE_TYPE(I8242, i8242_device, "i8242", "I8242")
+DEFINE_DEVICE_TYPE(I8742, i8742_device, "i8742", "I8742")
DEFINE_DEVICE_TYPE(MB8884, mb8884_device, "mb8884", "MB8884")
-DEFINE_DEVICE_TYPE(N7751, n7751_device, "n7751", "N7751")
+DEFINE_DEVICE_TYPE(N7751, n7751_device, "n7751", "N7751")
DEFINE_DEVICE_TYPE(M58715, m58715_device, "m58715", "M58715")
@@ -756,7 +744,7 @@ OPHANDLER( mov_a_r6 ) { m_a = R6; return 1; }
OPHANDLER( mov_a_r7 ) { m_a = R7; return 1; }
OPHANDLER( mov_a_xr0 ) { m_a = ram_r(R0); return 1; }
OPHANDLER( mov_a_xr1 ) { m_a = ram_r(R1); return 1; }
-OPHANDLER( mov_a_t ) { m_a = m_timer; return 1; }
+OPHANDLER( mov_a_t ) { m_a = m_timer + ((m_timecount_enabled & TIMER_ENABLED) ? 1 : 0); return 1; }
OPHANDLER( mov_psw_a ) { m_psw = m_a; update_regptr(); return 1; }
OPHANDLER( mov_sts_a ) { m_sts = (m_sts & 0x0f) | (m_a & 0xf0); return 1; }
diff --git a/src/devices/cpu/mcs48/mcs48.h b/src/devices/cpu/mcs48/mcs48.h
index 4c915256152..210d2b84d3c 100644
--- a/src/devices/cpu/mcs48/mcs48.h
+++ b/src/devices/cpu/mcs48/mcs48.h
@@ -242,6 +242,23 @@ protected:
typedef int (mcs48_cpu_device::*mcs48_ophandler)();
static const mcs48_ophandler s_opcode_table[256];
+ /* ROM is mapped to AS_PROGRAM */
+ uint8_t program_r(offs_t a) { return m_program->read_byte(a); }
+
+ /* RAM is mapped to AS_DATA */
+ uint8_t ram_r(offs_t a) { return m_data->read_byte(a); }
+ void ram_w(offs_t a, uint8_t v) { m_data->write_byte(a, v); }
+
+ /* ports are mapped to AS_IO and callbacks */
+ uint8_t ext_r(offs_t a) { return m_io->read_byte(a); }
+ void ext_w(offs_t a, uint8_t v) { m_io->write_byte(a, v); }
+ uint8_t port_r(offs_t a) { return m_port_in_cb[a - 1](); }
+ void port_w(offs_t a, uint8_t v) { m_port_out_cb[a - 1](v); }
+ int test_r(offs_t a) { return m_test_in_cb[a](); }
+ uint8_t bus_r() { return m_bus_in_cb(); }
+ void bus_w(uint8_t v) { m_bus_out_cb(v); }
+ void prog_w(int v) { m_prog_out_cb(v); }
+
uint8_t opcode_fetch();
uint8_t argument_fetch();
void update_regptr();
diff --git a/src/devices/machine/74259.cpp b/src/devices/machine/74259.cpp
index da6a7cfa99d..021be2a1a34 100644
--- a/src/devices/machine/74259.cpp
+++ b/src/devices/machine/74259.cpp
@@ -324,6 +324,17 @@ WRITE8_MEMBER(addressable_latch_device::write_nibble)
}
//-------------------------------------------------
+// write_nibble_alt - write handler using bit 3 of
+// data as input and lowest three bits as address
+// (offset is ignored)
+//-------------------------------------------------
+
+WRITE8_MEMBER(addressable_latch_device::write_nibble_alt)
+{
+ write_bit(data & 0x07, BIT(data, 3));
+}
+
+//-------------------------------------------------
// clear - pulse clear line from bus write
//-------------------------------------------------
diff --git a/src/devices/machine/74259.h b/src/devices/machine/74259.h
index e4496240687..5cdb51e80f6 100644
--- a/src/devices/machine/74259.h
+++ b/src/devices/machine/74259.h
@@ -78,6 +78,7 @@ public:
DECLARE_WRITE8_MEMBER(write_a0);
DECLARE_WRITE8_MEMBER(write_a3);
DECLARE_WRITE8_MEMBER(write_nibble);
+ DECLARE_WRITE8_MEMBER(write_nibble_alt);
DECLARE_WRITE8_MEMBER(clear);
// read handlers (inlined for the sake of optimization)
diff --git a/src/devices/machine/eeprom.cpp b/src/devices/machine/eeprom.cpp
index b5866d3fd4c..2ed8e3fa65c 100644
--- a/src/devices/machine/eeprom.cpp
+++ b/src/devices/machine/eeprom.cpp
@@ -317,8 +317,8 @@ void eeprom_base_device::internal_write(offs_t address, uint32_t data)
{
if (m_data_bits == 16)
{
- m_data[address*2] = data;
- m_data[address*2+1] = data >> 8;
+ m_data[address * 2] = data;
+ m_data[address * 2 + 1] = data >> 8;
} else
m_data[address] = data;
}
diff --git a/src/devices/machine/eepromser.h b/src/devices/machine/eepromser.h
index 0eefba08276..529fbeb5b04 100644
--- a/src/devices/machine/eepromser.h
+++ b/src/devices/machine/eepromser.h
@@ -314,7 +314,7 @@ DECLARE_SERIAL_EEPROM_DEVICE(93cxx, s29190, S29190, 16)
DECLARE_SERIAL_EEPROM_DEVICE(93cxx, s29290, S29290, 16)
DECLARE_SERIAL_EEPROM_DEVICE(93cxx, s29390, S29390, 16)
-// X24c44 8 bit 32byte ram/eeprom combo
+// X24c44 16 bit 32byte ram/eeprom combo
DECLARE_SERIAL_EEPROM_DEVICE(x24c44, x24c44, X24C44, 16)
#endif // MAME_MACHINE_EEPROMSER_H
diff --git a/src/devices/machine/input_merger.cpp b/src/devices/machine/input_merger.cpp
index de2790bff1b..28652cdb66f 100644
--- a/src/devices/machine/input_merger.cpp
+++ b/src/devices/machine/input_merger.cpp
@@ -15,6 +15,9 @@
#include <algorithm>
#include <iterator>
+//#define VERBOSE 1
+#include "logmacro.h"
+
//**************************************************************************
// DEVICE DEFINITIONS
@@ -79,6 +82,7 @@ TIMER_CALLBACK_MEMBER(input_merger_device::update_state)
{
if (BIT(m_state, param >> 1) != BIT(param, 0))
{
+ LOG("state[%d] = %d\n", param >> 1, BIT(param, 0));
m_state ^= u32(1) << (param >> 1);
m_output_handler((m_state ^ m_xorval) ? m_active : !m_active);
}
diff --git a/src/devices/machine/wd_fdc.cpp b/src/devices/machine/wd_fdc.cpp
index f629fdc08bd..8baeff7edf0 100644
--- a/src/devices/machine/wd_fdc.cpp
+++ b/src/devices/machine/wd_fdc.cpp
@@ -200,15 +200,15 @@ void wd_fdc_device_base::set_floppy(floppy_image_device *_floppy)
ready_callback(floppy, next_ready);
}
-void wd_fdc_device_base::dden_w(bool _dden)
+WRITE_LINE_MEMBER(wd_fdc_device_base::dden_w)
{
if(disable_mfm) {
logerror("Error, this chip does not have a dden line\n");
return;
}
- if(dden != _dden) {
- dden = _dden;
+ if(dden != bool(state)) {
+ dden = bool(state);
if (TRACE_LINES) logerror("select %s\n", dden ? "fm" : "mfm");
}
}
@@ -1368,27 +1368,27 @@ void wd_fdc_device_base::index_callback(floppy_image_device *floppy, int state)
general_continue();
}
-bool wd_fdc_device_base::intrq_r()
+READ_LINE_MEMBER(wd_fdc_device_base::intrq_r)
{
return intrq;
}
-bool wd_fdc_device_base::drq_r()
+READ_LINE_MEMBER(wd_fdc_device_base::drq_r)
{
return drq;
}
-bool wd_fdc_device_base::hld_r()
+READ_LINE_MEMBER(wd_fdc_device_base::hld_r)
{
return hld;
}
-void wd_fdc_device_base::hlt_w(bool state)
+WRITE_LINE_MEMBER(wd_fdc_device_base::hlt_w)
{
- hlt = state;
+ hlt = bool(state);
}
-bool wd_fdc_device_base::enp_r()
+READ_LINE_MEMBER(wd_fdc_device_base::enp_r)
{
return enp;
}
diff --git a/src/devices/machine/wd_fdc.h b/src/devices/machine/wd_fdc.h
index e3811b003f1..a5d3006e3b1 100644
--- a/src/devices/machine/wd_fdc.h
+++ b/src/devices/machine/wd_fdc.h
@@ -145,7 +145,7 @@ public:
void soft_reset();
- void dden_w(bool dden);
+ DECLARE_WRITE_LINE_MEMBER(dden_w);
void set_floppy(floppy_image_device *floppy);
void set_force_ready(bool force_ready);
void set_disable_motor_control(bool _disable_motor_control);
@@ -175,13 +175,13 @@ public:
DECLARE_READ8_MEMBER( read ) { return gen_r(offset); }
DECLARE_WRITE8_MEMBER( write ) { gen_w(offset,data); }
- bool intrq_r();
- bool drq_r();
+ DECLARE_READ_LINE_MEMBER(intrq_r);
+ DECLARE_READ_LINE_MEMBER(drq_r);
- bool hld_r();
- void hlt_w(bool state);
+ DECLARE_READ_LINE_MEMBER(hld_r);
+ DECLARE_WRITE_LINE_MEMBER(hlt_w);
- bool enp_r();
+ DECLARE_READ_LINE_MEMBER(enp_r);
void index_callback(floppy_image_device *floppy, int state);
diff --git a/src/devices/machine/z80sio.cpp b/src/devices/machine/z80sio.cpp
index a18be27d9c0..8cf9169c6b2 100644
--- a/src/devices/machine/z80sio.cpp
+++ b/src/devices/machine/z80sio.cpp
@@ -164,11 +164,12 @@ i8274_new_device::i8274_new_device(const machine_config &mconfig, const char *ta
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_resolve_objects - device-specific setup
//-------------------------------------------------
-void z80sio_device::device_start()
+void z80sio_device::device_resolve_objects()
{
LOG("%s\n", FUNCNAME);
+
// resolve callbacks
m_out_txda_cb.resolve_safe();
m_out_dtra_cb.resolve_safe();
@@ -185,6 +186,14 @@ void z80sio_device::device_start()
m_out_txdrqa_cb.resolve_safe();
m_out_rxdrqb_cb.resolve_safe();
m_out_txdrqb_cb.resolve_safe();
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+void z80sio_device::device_start()
+{
+ LOG("%s\n", FUNCNAME);
// configure channel A
m_chanA->m_rxc = m_rxca;
@@ -530,21 +539,30 @@ z80sio_channel::z80sio_channel(const machine_config &mconfig, const char *tag, d
, m_sync(0)
{
LOG("%s\n",FUNCNAME);
- // Reset all registers
- m_rr0 = m_rr1 = m_rr2 = 0;
- m_wr0 = m_wr1 = m_wr2 = m_wr3 = m_wr4 = m_wr5 = m_wr6 = m_wr7 = 0;
+
+ // Reset all registers
+ m_rr0 = m_rr1 = m_rr2 = 0;
+ m_wr0 = m_wr1 = m_wr2 = m_wr3 = m_wr4 = m_wr5 = m_wr6 = m_wr7 = 0;
}
//-------------------------------------------------
-// start - channel startup
+// resove_objects - channel setup
//-------------------------------------------------
-void z80sio_channel::device_start()
+void z80sio_channel::device_resolve_objects()
{
LOG("%s\n",FUNCNAME);
m_uart = downcast<z80sio_device *>(owner());
m_index = m_uart->get_channel_index(this);
- m_variant = ((z80sio_device *)owner())->m_variant;
+ m_variant = m_uart->m_variant;
+}
+
+//-------------------------------------------------
+// start - channel startup
+//-------------------------------------------------
+void z80sio_channel::device_start()
+{
+ LOG("%s\n",FUNCNAME);
// state saving
save_item(NAME(m_rr0));
diff --git a/src/devices/machine/z80sio.h b/src/devices/machine/z80sio.h
index 4e18b377872..55803b7e427 100644
--- a/src/devices/machine/z80sio.h
+++ b/src/devices/machine/z80sio.h
@@ -137,10 +137,6 @@ class z80sio_channel : public device_t,
public:
z80sio_channel(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
-
// device_serial_interface overrides
virtual void tra_callback() override;
virtual void tra_complete() override;
@@ -366,6 +362,11 @@ protected:
WR5_DTR = 0x80
};
+ // device-level overrides
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
void update_serial();
void update_rts();
void set_dtr(int state);
@@ -484,6 +485,7 @@ protected:
z80sio_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t variant);
// device-level overrides
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
diff --git a/src/devices/sound/ymz770.cpp b/src/devices/sound/ymz770.cpp
index 11b30d08eb1..506de02da15 100644
--- a/src/devices/sound/ymz770.cpp
+++ b/src/devices/sound/ymz770.cpp
@@ -11,8 +11,8 @@
TODO:
- A lot of unimplemented features, even simple ones like panning,
these should be added once we find out any software that uses it.
-- Is channel volume linear(current implementation) or logarithmic?
- Sequencer is very preliminary
+- verify if pan 100% correct
- What does channel ATBL mean?
- Is YMZ774(and other variants) the same family as this chip?
What are the differences?
@@ -167,14 +167,17 @@ void ymz770_device::sound_stream_update(sound_stream &stream, stream_sample_t **
}
// process channels
- int32_t mix = 0;
+ int32_t mixl = 0;
+ int32_t mixr = 0;
for (auto & elem : m_channels)
{
if (elem.output_remaining > 0)
{
// force finish current block
- mix += (elem.output_data[elem.output_ptr++]*elem.volume);
+ int32_t smpl = elem.output_data[elem.output_ptr++] * elem.volume; // volume is linear, 0 - 128 (100%)
+ mixr += (smpl * elem.pan) >> 11; // pan seems linear, 0 - 16, where 0 = 100% left, 16 = 100% right, 8 = 50% left 50% right
+ mixl += (smpl * (16 - elem.pan)) >> 11;
elem.output_remaining--;
if (elem.output_remaining == 0 && !elem.is_playing)
@@ -217,12 +220,39 @@ retry:
elem.output_remaining--;
elem.output_ptr = 1;
- mix += (elem.output_data[0]*elem.volume);
+ int32_t smpl = elem.output_data[0] * elem.volume;
+ mixr += (smpl * elem.pan) >> 11;
+ mixl += (smpl * (16 - elem.pan)) >> 11;
}
}
}
- outL[i] = outR[i] = mix>>8;
+ mixr *= m_vlma; // main volume is linear, 0 - 255, where 128 = 100%
+ mixl *= m_vlma;
+ mixr >>= 7 - m_bsl;
+ mixl >>= 7 - m_bsl;
+ // Clip limiter: 0 - off, 1 - 6.02 dB (100%), 2 - 4.86 dB (87.5%), 3 - 3.52 dB (75%). values taken from YMZ773 docs, might be incorrect for YMZ770.
+ constexpr int32_t ClipMax3 = 32768 * 75 / 100;
+ constexpr int32_t ClipMax2 = 32768 * 875 / 1000;
+ switch (m_cpl)
+ {
+ case 3:
+ mixl = (mixl > ClipMax3) ? ClipMax3 : (mixl < -ClipMax3) ? -ClipMax3 : mixl;
+ mixr = (mixr > ClipMax3) ? ClipMax3 : (mixr < -ClipMax3) ? -ClipMax3 : mixr;
+ break;
+ case 2:
+ mixl = (mixl > ClipMax2) ? ClipMax2 : (mixl < -ClipMax2) ? -ClipMax2 : mixl;
+ mixr = (mixr > ClipMax2) ? ClipMax2 : (mixr < -ClipMax2) ? -ClipMax2 : mixr;
+ break;
+ case 1:
+ mixl = (mixl > 32767) ? 32767 : (mixl < -32768) ? -32768 : mixl;
+ mixr = (mixr > 32767) ? 32767 : (mixr < -32768) ? -32768 : mixr;
+ break;
+ }
+ if (m_mute)
+ mixr = mixl = 0;
+ outL[i] = mixl;
+ outR[i] = mixr;
}
}
diff --git a/src/devices/video/stvvdp2.cpp b/src/devices/video/stvvdp2.cpp
index 799224e94f0..e5fbfee835a 100644
--- a/src/devices/video/stvvdp2.cpp
+++ b/src/devices/video/stvvdp2.cpp
@@ -6065,8 +6065,10 @@ uint8_t saturn_state::get_odd_bit( void )
int saturn_state::get_vblank_start_position( void )
{
- /* TODO: test says that second setting happens at 241, might need further investigation ... */
- const int d_vres[4] = { 240, 240, 256, 256 };
+ // TODO: test says that second setting happens at 241, might need further investigation ...
+ // also first one happens at 240, but needs mods in SMPC otherwise we get 2 credits at startup in shanhigw and sokyugrt
+ // (i.e. make a special screen device that handles this for us)
+ const int d_vres[4] = { 224, 240, 256, 256 };
int vres_mask;
int vblank_line;
diff --git a/src/devices/video/v9938.cpp b/src/devices/video/v9938.cpp
index 5fc4327adee..f5925cf1f48 100644
--- a/src/devices/video/v9938.cpp
+++ b/src/devices/video/v9938.cpp
@@ -33,6 +33,7 @@ todo:
- vdp engine -- make run at correct speed
- vr/hr/fh flags: double-check all of that
- make vdp engine work in exp. ram
+- fix save state support
*/
#include "emu.h"
diff --git a/src/emu/device.cpp b/src/emu/device.cpp
index 5325e506568..e03e09e8dac 100644
--- a/src/emu/device.cpp
+++ b/src/emu/device.cpp
@@ -450,10 +450,11 @@ bool device_t::findit(bool isvalidation) const
}
//-------------------------------------------------
-// start - start a device
+// resolve_objects - find objects referenced in
+// configuration
//-------------------------------------------------
-void device_t::start()
+void device_t::resolve_objects()
{
// prepare the logerror buffer
if (m_machine->allow_logging())
@@ -463,6 +464,20 @@ void device_t::start()
if (!findit(false))
throw emu_fatalerror("Missing some required objects, unable to proceed");
+ // allow implementation to do additional setup
+ device_resolve_objects();
+}
+
+//-------------------------------------------------
+// start - start a device
+//-------------------------------------------------
+
+void device_t::start()
+{
+ // prepare the logerror buffer
+ if (m_machine->allow_logging())
+ m_string_buffer.reserve(1024);
+
// let the interfaces do their pre-work
for (device_interface &intf : interfaces())
intf.interface_pre_start();
@@ -681,6 +696,18 @@ void device_t::device_reset_after_children()
//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void device_t::device_resolve_objects()
+{
+ // do nothing by default
+}
+
+
+//-------------------------------------------------
// device_stop - clean up anything that needs to
// happen before the running_machine goes away
//-------------------------------------------------
diff --git a/src/emu/device.h b/src/emu/device.h
index 0a894d20e09..211da59cb38 100644
--- a/src/emu/device.h
+++ b/src/emu/device.h
@@ -541,6 +541,7 @@ public:
protected:
// miscellaneous helpers
void set_machine(running_machine &machine);
+ void resolve_objects();
void start();
void stop();
void debug_setup();
@@ -557,6 +558,7 @@ protected:
virtual ioport_constructor device_input_ports() const;
virtual void device_config_complete();
virtual void device_validity_check(validity_checker &valid) const ATTR_COLD;
+ virtual void device_resolve_objects() ATTR_COLD;
virtual void device_start() ATTR_COLD = 0;
virtual void device_stop() ATTR_COLD;
virtual void device_reset() ATTR_COLD;
diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h
index 56dca7e71c3..8729e8e7ec3 100644
--- a/src/emu/drivers/xtal.h
+++ b/src/emu/drivers/xtal.h
@@ -133,6 +133,7 @@ enum
XTAL_11_8MHz = 11800000, /* IBM PC Music Feature Card */
XTAL_11_9808MHz = 11980800, /* Luxor ABC 80 */
XTAL_12MHz = 12000000, /* Extremely common, used on 100's of PCBs */
+ XTAL_12_0576MHz = 12057600, /* Poly 1 (38400 * 314) */
XTAL_12_096MHz = 12096000, /* Some early 80's Atari games */
XTAL_12_288MHz = 12288000, /* Sega Model 3 digital audio board */
XTAL_12_432MHz = 12432000, /* Kaneko Fly Boy/Fast Freddie Hardware */
@@ -161,7 +162,7 @@ enum
XTAL_15_468MHz = 15468480, /* Bank Panic h/w, Sega G80 */
XTAL_15_8976MHz = 15897600, /* IAI Swyft */
XTAL_15_92MHz = 15920000, /* HP Integral PC */
- XTAL_15_9744MHz = 15974400, /* Osborne 1 */
+ XTAL_15_9744MHz = 15974400, /* Osborne 1 (9600 * 52 * 32) */
XTAL_16MHz = 16000000, /* Extremely common, used on 100's of PCBs */
XTAL_16_384MHz = 16384000,
XTAL_16_4MHz = 16400000, /* MS 6102 */
diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp
index 4af765831d6..fa6375ef937 100644
--- a/src/emu/machine.cpp
+++ b/src/emu/machine.cpp
@@ -974,6 +974,10 @@ void running_machine::logfile_callback(const char *buffer)
void running_machine::start_all_devices()
{
+ // resolve objects first to avoid messy start order dependencies
+ for (device_t &device : device_iterator(root_device()))
+ device.resolve_objects();
+
m_dummy_space.start();
// iterate through the devices
diff --git a/src/mame/drivers/acd.cpp b/src/mame/drivers/acd.cpp
new file mode 100644
index 00000000000..ecdc10e6c3a
--- /dev/null
+++ b/src/mame/drivers/acd.cpp
@@ -0,0 +1,48 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/***********************************************************************************************************************************
+
+2017-10-28 Skeleton
+
+Advanced Computer Design computer. CPU is WD9000. Some details at bitsavers.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+//#include "cpu/mcs51/mcs51.h"
+
+class acd_state : public driver_device
+{
+public:
+ acd_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+// , maincpu(*this, "maincpu")
+ { }
+
+protected:
+// required_device<i80c52_device> maincpu;
+};
+
+static INPUT_PORTS_START( acd )
+INPUT_PORTS_END
+
+//static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, acd_state )
+//ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( acd )
+MACHINE_CONFIG_END
+
+ROM_START( acd )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "d9_cpu_c4_rev_2.4.2.bin", 0x000000, 0x000200, CRC(481b8d65) SHA1(b766b22282cd321c707c18137ddb4c133fd0ede4) )
+ ROM_LOAD( "d9_cpu_c5.bin", 0x000000, 0x000200, CRC(481b8d65) SHA1(b766b22282cd321c707c18137ddb4c133fd0ede4) )
+ ROM_LOAD( "dr.bin", 0x000000, 0x000020, CRC(a0baab49) SHA1(50b91bf00390c7923b8e03975c1c6fea3c153cd7) )
+ ROM_LOAD( "btwph.bin", 0x000000, 0x000020, CRC(a48a80d1) SHA1(60490d1dbd01441ebb9a9860a98131d628d5e3f9) )
+ ROM_LOAD( "btwpl.bin", 0x000000, 0x000020, CRC(0f6fb759) SHA1(7ab376865faf57841960bfcfd3e038219b5b66b6) )
+ ROM_LOAD( "d7_cpu_b14_rev_1.2.bin", 0x000000, 0x000200, CRC(51b2bb18) SHA1(533ef263146c1e03e5ef30e792a669293f31a1d3) )
+ ROM_LOAD( "d7_cpu_c4_rev_2.4.2.bin", 0x000000, 0x000200, CRC(b1b59b5f) SHA1(5c199836a59da78ab404de663d306d0cc10aaf83) )
+ ROM_LOAD( "d7_cpu_c5.bin", 0x000000, 0x000200, CRC(7db9ecca) SHA1(535a34608e59c72d13434e3fc2892db9841a0f60) )
+ ROM_LOAD( "d9_cpu_b14_rev_1.2.bin", 0x000000, 0x000200, CRC(5572ff8b) SHA1(9e8158c338b2798f7fb1d9c4fa6dd99592d2fae3) )
+ROM_END
+
+COMP( 198?, acd, 0, 0, acd, acd, acd_state, 0, "Advanced Computer Design", "Unknown computer", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/ampscarp.cpp b/src/mame/drivers/ampscarp.cpp
new file mode 100644
index 00000000000..9c6e78bee44
--- /dev/null
+++ b/src/mame/drivers/ampscarp.cpp
@@ -0,0 +1,40 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/***********************************************************************************************************************************
+
+2017-10-29 Skeleton
+
+Motorola AMPS Car Phone.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+//#include "cpu/mcs51/mcs51.h"
+
+class ampscarp_state : public driver_device
+{
+public:
+ ampscarp_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+// , maincpu(*this, "maincpu")
+ { }
+
+protected:
+// required_device<i80c52_device> maincpu;
+};
+
+static INPUT_PORTS_START( ampscarp )
+INPUT_PORTS_END
+
+//static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, ampscarp_state )
+//ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( ampscarp )
+MACHINE_CONFIG_END
+
+ROM_START( ampscarp )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "motorola_amps_car_phone_dump.bin", 0x0000, 0x20000, CRC(677ec85e) SHA1(219611b6c4b16461705e2df61d79a0f7ac8f529f) )
+ROM_END
+
+COMP( 1998, ampscarp, 0, 0, ampscarp, ampscarp, ampscarp_state, 0, "Motorola", "AMPS Car Phone", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp
index 3ee18f4f1df..5e5c39d958c 100644
--- a/src/mame/drivers/bigbord2.cpp
+++ b/src/mame/drivers/bigbord2.cpp
@@ -73,6 +73,7 @@ X - change banks
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/z80/z80daisy.h"
+#include "machine/74259.h"
#include "machine/clock.h"
#include "machine/keyboard.h"
#include "machine/wd_fdc.h"
@@ -101,7 +102,7 @@ public:
, m_fdc(*this, "fdc")
, m_floppy0(*this, "fdc:0")
, m_floppy1(*this, "fdc:1")
- , m_beeper(*this, "beeper")
+ , m_syslatch1(*this, "syslatch1")
, m_dsw(*this, "DSW")
, m_bankr(*this, "bankr")
, m_bankv(*this, "bankv")
@@ -109,11 +110,14 @@ public:
{
}
- DECLARE_WRITE8_MEMBER(portc0_w );
- DECLARE_WRITE8_MEMBER(portc8_w );
- DECLARE_WRITE8_MEMBER(portcc_w );
- DECLARE_READ8_MEMBER(portc4_r);
- DECLARE_READ8_MEMBER(portd0_r);
+ DECLARE_WRITE_LINE_MEMBER(side_select_w);
+ DECLARE_WRITE_LINE_MEMBER(smc1_w);
+ DECLARE_WRITE_LINE_MEMBER(smc2_w);
+ DECLARE_WRITE_LINE_MEMBER(head_load_w);
+ DECLARE_WRITE_LINE_MEMBER(disk_motor_w);
+ DECLARE_WRITE8_MEMBER(syslatch2_w);
+ DECLARE_READ8_MEMBER(status_port_r);
+ DECLARE_READ8_MEMBER(kbd_r);
void kbd_put(u8 data);
DECLARE_WRITE_LINE_MEMBER(clock_w);
DECLARE_WRITE_LINE_MEMBER(busreq_w);
@@ -133,7 +137,6 @@ private:
u8 m_term_data;
u8 m_term_status;
uint16_t m_cnt;
- bool m_c8[8];
bool m_cc[8];
floppy_image_device *m_floppy;
virtual void machine_start() override;
@@ -151,18 +154,13 @@ private:
required_device<mb8877_device> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
- required_device<beep_device> m_beeper;
+ required_device<ls259_device> m_syslatch1;
required_ioport m_dsw;
required_memory_bank m_bankr;
required_memory_bank m_bankv;
required_memory_bank m_banka;
};
-// Eprom programming port
-WRITE8_MEMBER( bigbord2_state::portc0_w )
-{
-}
-
/* Status port
0 = RXDA
1 = RXDB
@@ -173,16 +171,16 @@ WRITE8_MEMBER( bigbord2_state::portc0_w )
6 = DIPSW 3
7 = DIPSW 4 */
-READ8_MEMBER( bigbord2_state::portc4_r )
+READ8_MEMBER(bigbord2_state::status_port_r)
{
- u8 ret = m_term_status | 3 | (m_c8[6]<<2) | m_dsw->read();
+ u8 ret = m_term_status | 3 | (m_syslatch1->q6_r() << 2) | m_dsw->read();
m_term_status = 0;
return ret;
}
// KBD port - read ascii value of key pressed
-READ8_MEMBER( bigbord2_state::portd0_r )
+READ8_MEMBER(bigbord2_state::kbd_r)
{
u8 ret = m_term_data;
m_term_data = 0;
@@ -249,73 +247,35 @@ WRITE8_MEMBER( bigbord2_state::io_write_byte )
/* Read/Write Handlers */
-
-WRITE8_MEMBER( bigbord2_state::portc8_w )
+WRITE_LINE_MEMBER(bigbord2_state::side_select_w)
{
- /*
-
- This port uses a 74LS259, which allows individual bits
- to be switched on and off, while the other bits are
- unaffected.
-
- bit signal description
-
- 0 D_S memory bank
- 1 SIDSEL side select
- 2 SMC1 u6 data separator pin 5
- 3 SMC2 u6 data separator pin 6
- 4 DDEN density
- 5 HLD head load
- 6 MOTOR disk motor
- 7 BELL beeper pulse
-
- */
+ if (m_floppy)
+ m_floppy->ss_w(state);
+}
- m_c8[data&7] = BIT(data, 3);
+WRITE_LINE_MEMBER(bigbord2_state::smc1_w)
+{
+ // connects to "U6 (FDC9216B)" which drives the fdc "rawread" and "rclk" pins
+}
- switch (data&7)
- {
- case 0:
- // memory bank
- m_bankr->set_entry(m_c8[0]);
- m_bankv->set_entry(m_c8[0]);
- m_banka->set_entry(m_c8[0]);
- break;
- case 1:
- // side select
- if (m_floppy)
- {
- m_floppy->ss_w(m_c8[1]);
- }
+WRITE_LINE_MEMBER(bigbord2_state::smc2_w)
+{
+ // connects to "U6 (FDC9216B)" which drives the fdc "rawread" and "rclk" pins
+}
- break;
+WRITE_LINE_MEMBER(bigbord2_state::head_load_w)
+{
+ // connects to HLD pin on floppy drive
+}
- case 2:
- case 3:
- // these connect to "U6 (FDC9216B)" which drives the fdc "rawread" and "rclk" pins
- break;
- case 4:
- // density
- m_fdc->dden_w(m_c8[4]);
- break;
- case 5:
- // connects to HLD pin on floppy drive
- break;
- case 6:
- // motor on
- if (m_floppy)
- {
- m_floppy->mon_w(m_c8[6]? 0 : 1);
- }
- break;
- case 7:
- // beeper
- m_beeper->set_state(m_c8[7]);
- break;
- }
+WRITE_LINE_MEMBER(bigbord2_state::disk_motor_w)
+{
+ // motor on
+ if (m_floppy)
+ m_floppy->mon_w(state ? 0 : 1);
}
-WRITE8_MEMBER( bigbord2_state::portcc_w )
+WRITE8_MEMBER(bigbord2_state::syslatch2_w)
{
/*
@@ -346,6 +306,11 @@ WRITE8_MEMBER( bigbord2_state::portcc_w )
//if (BIT(data, 4)) m_floppy = m_floppy3->get_device();
m_fdc->set_floppy(m_floppy);
+ if (m_floppy)
+ {
+ m_floppy->ss_w(m_syslatch1->q1_r());
+ m_floppy->mon_w(m_syslatch1->q6_r() ? 0 : 1);
+ }
m_dma->rdy_w(m_cc[data & 7]);
}
@@ -369,16 +334,17 @@ static ADDRESS_MAP_START( bigbord2_io, AS_IO, 8, bigbord2_state )
AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("sio", z80sio_device, ba_cd_r, ba_cd_w) // u16
AM_RANGE(0x84, 0x87) AM_DEVREADWRITE("ctc1", z80ctc_device, read, write) // u37 has issues
AM_RANGE(0x88, 0x8b) AM_DEVREADWRITE("ctc2", z80ctc_device, read, write) // u21
- AM_RANGE(0x8C, 0x8F) AM_DEVREADWRITE("dma", z80dma_device, read, write) // u62
- AM_RANGE(0xC0, 0xC3) AM_WRITE(portc0_w) // eprom programming port
- AM_RANGE(0xC4, 0xC7) AM_READ (portc4_r)
- AM_RANGE(0xC8, 0xCB) AM_WRITE(portc8_w)
- AM_RANGE(0xCC, 0xCF) AM_WRITE(portcc_w)
- AM_RANGE(0xD0, 0xD3) AM_READ (portd0_r)
- AM_RANGE(0xD4, 0xD7) AM_DEVREADWRITE("fdc", mb8877_device, read, write) // u10
- //AM_RANGE(0xD8, 0xDB) AM_READWRITE(portd8_r, portd8_w) // various external data ports; DB = centronics printer
- AM_RANGE(0xDC, 0xDC) AM_MIRROR(2) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w) // u30
- AM_RANGE(0xDD, 0xDD) AM_MIRROR(2) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
+ AM_RANGE(0x8c, 0x8f) AM_DEVREADWRITE("dma", z80dma_device, read, write) // u62
+ AM_RANGE(0xc0, 0xc3) AM_DEVWRITE("proglatch", ls259_device, write_nibble_alt) // u41 - eprom programming port
+ AM_RANGE(0xc4, 0xc7) AM_READ(status_port_r) // u11
+ AM_RANGE(0xc8, 0xcb) AM_DEVWRITE("syslatch1", ls259_device, write_nibble_alt) // u14
+ AM_RANGE(0xcc, 0xcf) AM_WRITE(syslatch2_w)
+ AM_RANGE(0xd0, 0xd3) AM_READ(kbd_r) // u1
+ AM_RANGE(0xd4, 0xd7) AM_DEVREADWRITE("fdc", mb8877_device, read, write) // u10
+ //AM_RANGE(0xd8, 0xdb) AM_READWRITE(portd8_r, portd8_w) // various external data ports; DB = centronics printer
+ AM_RANGE(0xd9, 0xd9) AM_DEVWRITE("outlatch1", ls259_device, write_nibble_alt) // u96
+ AM_RANGE(0xdc, 0xdc) AM_MIRROR(2) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w) // u30
+ AM_RANGE(0xdd, 0xdd) AM_MIRROR(2) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
ADDRESS_MAP_END
@@ -450,12 +416,8 @@ void bigbord2_state::machine_reset()
{
u8 i;
for (i = 0; i < 8; i++)
- {
- m_c8[i] = 0;
m_cc[i] = 1;
- }
m_cc[2] = 0;
- m_beeper->set_state(0);
m_bankr->set_entry(0);
m_bankv->set_entry(0);
m_banka->set_entry(0);
@@ -632,6 +594,23 @@ static MACHINE_CONFIG_START( bigbord2 )
MCFG_MC6845_UPDATE_ROW_CB(bigbord2_state, crtc_update_row)
MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE("ctc1", z80ctc_device, trg3))
+ MCFG_DEVICE_ADD("proglatch", LS259, 0) // U41
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("outlatch1", ls259_device, clear_w)) // FCRST - also resets the 8877
+
+ MCFG_DEVICE_ADD("syslatch1", LS259, 0) // U14
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(MEMBANK("bankr")) // D_S
+ MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("bankv"))
+ MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("banka"))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bigbord2_state, side_select_w)) // SIDSEL
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bigbord2_state, smc1_w)) // SMC1
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bigbord2_state, smc2_w)) // SMC2
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("fdc", mb8877_device, dden_w)) // DDEN
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(bigbord2_state, head_load_w)) // HLD
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(bigbord2_state, disk_motor_w)) // MOTOR
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("beeper", beep_device, set_state)) // BELL
+
+ MCFG_DEVICE_ADD("outlatch1", LS259, 0) // U96
+
/* keyboard */
MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0)
MCFG_GENERIC_KEYBOARD_CB(PUT(bigbord2_state, kbd_put))
@@ -656,4 +635,4 @@ ROM_END
/* System Drivers */
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
-COMP( 1982, bigbord2, bigboard, 0, bigbord2, bigbord2, bigbord2_state, bigbord2, "Digital Research Computers", "Big Board II", MACHINE_NOT_WORKING )
+COMP( 1982, bigbord2, 0, 0, bigbord2, bigbord2, bigbord2_state, bigbord2, "Digital Research Computers", "Big Board II", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/boogwing.cpp b/src/mame/drivers/boogwing.cpp
index 3c073ab7546..f176751b3aa 100644
--- a/src/mame/drivers/boogwing.cpp
+++ b/src/mame/drivers/boogwing.cpp
@@ -159,7 +159,7 @@ static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, boogwing_state )
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0x140000, 0x140001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot", deco104_device, soundlatch_r)
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
@@ -388,18 +388,17 @@ static MACHINE_CONFIG_START( boogwing )
MCFG_DECO_SPRITE_GFX_REGION(4)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
- MCFG_DECO104_ADD("ioprot104")
+ MCFG_DECO104_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_REVERSE
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) /* IRQ2 */
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(boogwing_state, sound_bankswitch_w))
diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp
index 6790570ad9a..64614342aff 100644
--- a/src/mame/drivers/cninja.cpp
+++ b/src/mame/drivers/cninja.cpp
@@ -153,7 +153,7 @@ static ADDRESS_MAP_START( cninjabl_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x17ff22, 0x17ff23) AM_READ_PORT("DSW")
AM_RANGE(0x17ff28, 0x17ff29) AM_READ_PORT("SYSTEM")
- AM_RANGE(0x17ff2a, 0x17ff2b) AM_WRITE(stoneage_sound_w)
+ AM_RANGE(0x17ff2a, 0x17ff2b) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x17ff2c, 0x17ff2d) AM_READ_PORT("INPUTS")
AM_RANGE(0x180000, 0x187fff) AM_RAM // more ram on bootleg?
@@ -324,7 +324,19 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, cninja_state )
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ym2", ym2151_device, read, write)
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0x140000, 0x140001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot104", deco104_device, soundlatch_r)
+ AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
+ AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
+ AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_map_146, AS_PROGRAM, 8, cninja_state )
+ AM_RANGE(0x000000, 0x00ffff) AM_ROM
+ AM_RANGE(0x100000, 0x100001) AM_DEVREADWRITE("ym1", ym2203_device, read, write)
+ AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ym2", ym2151_device, read, write)
+ AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
+ AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot", deco146_device, soundlatch_r)
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
@@ -332,11 +344,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map_mutantf, AS_PROGRAM, 8, cninja_state )
AM_RANGE(0x000000, 0x00ffff) AM_ROM
- AM_RANGE(0x100000, 0x100001) AM_READNOP AM_WRITENOP
+ AM_RANGE(0x100000, 0x100001) AM_NOP
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0x140000, 0x140001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0x140000, 0x140001) AM_DEVREAD("ioprot", deco146_device, soundlatch_r)
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
@@ -347,6 +359,14 @@ static ADDRESS_MAP_START( stoneage_s_map, AS_PROGRAM, 8, cninja_state )
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("ioprot104", deco104_device, soundlatch_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cninjabl_sound_map, AS_PROGRAM, 8, cninja_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0x8000, 0x87ff) AM_RAM
+ AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
+ AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
ADDRESS_MAP_END
@@ -355,7 +375,7 @@ static ADDRESS_MAP_START( cninjabl2_s_map, AS_PROGRAM, 8, cninja_state )
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x9000, 0x9000) AM_WRITE(cninjabl2_oki_bank_w)
AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
- AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0xa000, 0xa000) AM_DEVREAD("ioprot104", deco104_device, soundlatch_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( cninjabl2_oki_map, 0, 8, cninja_state )
@@ -855,13 +875,12 @@ static MACHINE_CONFIG_START( cninja )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_SOUND_ADD("ym1", YM2203, XTAL_32_22MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
@@ -946,15 +965,14 @@ static MACHINE_CONFIG_START( stoneage )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", XTAL_32_22MHz / 9)
- MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
MCFG_SOUND_ROUTE(0, "mono", 0.45)
MCFG_SOUND_ROUTE(1, "mono", 0.45)
@@ -969,6 +987,9 @@ static MACHINE_CONFIG_DERIVED( cninjabl2, stoneage )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninjabl2)
+ MCFG_DEVICE_MODIFY("ioprot104")
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
+
MCFG_DEVICE_REMOVE("ymsnd")
MCFG_OKIM6295_REPLACE("oki1", XTAL_32_22MHz / 32, PIN7_LOW)
@@ -983,7 +1004,7 @@ static MACHINE_CONFIG_START( cninjabl )
MCFG_CPU_PROGRAM_MAP(cninjabl_map)
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
- MCFG_CPU_PROGRAM_MAP(stoneage_s_map)
+ MCFG_CPU_PROGRAM_MAP(cninjabl_sound_map)
MCFG_DECO_IRQ_ADD("irq", "screen")
MCFG_DECO_IRQ_RASTER1_IRQ_CB(INPUTLINE("maincpu", 3))
@@ -1036,9 +1057,10 @@ static MACHINE_CONFIG_START( cninjabl )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_YM2151_ADD("ymsnd", XTAL_32_22MHz / 9)
- MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
+ MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
MCFG_SOUND_ROUTE(0, "mono", 0.45)
MCFG_SOUND_ROUTE(1, "mono", 0.45)
@@ -1054,7 +1076,7 @@ static MACHINE_CONFIG_START( edrandy )
MCFG_CPU_PROGRAM_MAP(edrandy_map)
MCFG_CPU_ADD("audiocpu", H6280, XTAL_32_22MHz / 8)
- MCFG_CPU_PROGRAM_MAP(sound_map)
+ MCFG_CPU_PROGRAM_MAP(sound_map_146)
MCFG_DECO_IRQ_ADD("irq", "screen")
MCFG_DECO_IRQ_RASTER1_IRQ_CB(INPUTLINE("maincpu", 3))
@@ -1112,12 +1134,11 @@ static MACHINE_CONFIG_START( edrandy )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_SOUND_ADD("ym1", YM2203, XTAL_32_22MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
@@ -1142,7 +1163,7 @@ static MACHINE_CONFIG_START( robocop2 )
MCFG_CPU_PROGRAM_MAP(robocop2_map)
MCFG_CPU_ADD("audiocpu", H6280, XTAL_32_22MHz / 8)
- MCFG_CPU_PROGRAM_MAP(sound_map)
+ MCFG_CPU_PROGRAM_MAP(sound_map_146)
MCFG_DECO_IRQ_ADD("irq", "screen")
MCFG_DECO_IRQ_RASTER1_IRQ_CB(INPUTLINE("maincpu", 3))
@@ -1201,6 +1222,7 @@ static MACHINE_CONFIG_START( robocop2 )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
@@ -1299,6 +1321,7 @@ static MACHINE_CONFIG_START( mutantf )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@@ -2249,16 +2272,6 @@ ROM_END
/**********************************************************************************/
-DRIVER_INIT_MEMBER(cninja_state,cninja)
-{
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x1bc0a8, 0x1bc0a9, write16_delegate(FUNC(cninja_state::cninja_sound_w),this));
-}
-
-DRIVER_INIT_MEMBER(cninja_state,stoneage)
-{
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x1bc0a8, 0x1bc0a9, write16_delegate(FUNC(cninja_state::stoneage_sound_w),this));
-}
-
DRIVER_INIT_MEMBER(cninja_state,cninjabl2)
{
m_maincpu->space(AS_PROGRAM).install_ram(0x180000, 0x18ffff);
@@ -2288,11 +2301,11 @@ GAME( 1990, edrandy2, edrandy, edrandy, edrandc, cninja_state, 0, ROT0
GAME( 1990, edrandy1, edrandy, edrandy, edrandc, cninja_state, 0, ROT0, "Data East Corporation", "The Cliffhanger - Edward Randy (World ver 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, edrandyj, edrandy, edrandy, edrandc, cninja_state, 0, ROT0, "Data East Corporation", "The Cliffhanger - Edward Randy (Japan ver 3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, cninja, 0, cninja, cninja, cninja_state, cninja, ROT0, "Data East Corporation", "Caveman Ninja (World ver 4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, cninja1, cninja, cninja, cninja, cninja_state, cninja, ROT0, "Data East Corporation", "Caveman Ninja (World ver 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, cninjau, cninja, cninja, cninjau, cninja_state, cninja, ROT0, "Data East Corporation", "Caveman Ninja (US ver 4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, joemac, cninja, cninja, cninja, cninja_state, cninja, ROT0, "Data East Corporation", "Tatakae Genshizin Joe & Mac (Japan ver 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, stoneage, cninja, stoneage, cninja, cninja_state, stoneage, ROT0, "bootleg", "Stoneage (bootleg of Caveman Ninja)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, cninja, 0, cninja, cninja, cninja_state, 0, ROT0, "Data East Corporation", "Caveman Ninja (World ver 4)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, cninja1, cninja, cninja, cninja, cninja_state, 0, ROT0, "Data East Corporation", "Caveman Ninja (World ver 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, cninjau, cninja, cninja, cninjau, cninja_state, 0, ROT0, "Data East Corporation", "Caveman Ninja (US ver 4)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, joemac, cninja, cninja, cninja, cninja_state, 0, ROT0, "Data East Corporation", "Tatakae Genshizin Joe & Mac (Japan ver 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, stoneage, cninja, stoneage, cninja, cninja_state, 0, ROT0, "bootleg", "Stoneage (bootleg of Caveman Ninja)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, cninjabl, cninja, cninjabl, cninja, cninja_state, 0, ROT0, "bootleg", "Caveman Ninja (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, cninjabl2,cninja, cninjabl2,cninja, cninja_state, cninjabl2,ROT0, "bootleg", "Tatakae Genshizin Joe & Mac (Japan, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // tile layers need adjusting
diff --git a/src/mame/drivers/cv1k.cpp b/src/mame/drivers/cv1k.cpp
index 03e3fbe46f5..870787cbdb7 100644
--- a/src/mame/drivers/cv1k.cpp
+++ b/src/mame/drivers/cv1k.cpp
@@ -463,10 +463,9 @@ static MACHINE_CONFIG_START( cv1k )
MCFG_PALETTE_ADD("palette", 0x10000)
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_YMZ770_ADD("ymz770", XTAL_16_384MHz)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ MCFG_SOUND_ROUTE(1, "mono", 1.0) // only Right output used, Left is not connected
MCFG_EPIC12_ADD("blitter")
MCFG_EPIC12_SET_MAINRAMSIZE(0x800000)
@@ -896,58 +895,59 @@ DRIVER_INIT_MEMBER(cv1k_state,dpddfk)
}
+#define GAME_FLAGS (MACHINE_IMPERFECT_TIMING)
// The black label versions are intentionally not set as clones, they were re-releases with different game codes, not bugfixes.
// CA011 Mushihime-Sama
-GAME( 2004, mushisam, 0, cv1k, cv1k, cv1k_state, mushisam, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12.MASTER VER.)", 0 )
-GAME( 2004, mushisama, mushisam, cv1k, cv1k, cv1k_state, ibara, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12 MASTER VER.)", 0 )
-GAME( 2004, mushisamb, mushisam, cv1k, cv1k, cv1k_state, mushisam, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12 MASTER VER)", 0 )
+GAME( 2004, mushisam, 0, cv1k, cv1k, cv1k_state, mushisam, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12.MASTER VER.)", GAME_FLAGS )
+GAME( 2004, mushisama, mushisam, cv1k, cv1k, cv1k_state, ibara, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12 MASTER VER.)", GAME_FLAGS )
+GAME( 2004, mushisamb, mushisam, cv1k, cv1k, cv1k_state, mushisam, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12 MASTER VER)", GAME_FLAGS )
// CA012 Ibara
-GAME( 2005, ibara, 0, cv1k, cv1k, cv1k_state, ibara, ROT270, "Cave (AMI license)", "Ibara (2005/03/22 MASTER VER..)", 0 )
+GAME( 2005, ibara, 0, cv1k, cv1k, cv1k_state, ibara, ROT270, "Cave (AMI license)", "Ibara (2005/03/22 MASTER VER..)", GAME_FLAGS )
// CA012B Ibara Kuro Black Label
-GAME( 2006, ibarablk, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Ibara Kuro Black Label (2006/02/06. MASTER VER.)", 0 )
-GAME( 2006, ibarablka, ibarablk, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Ibara Kuro Black Label (2006/02/06 MASTER VER.)", 0 )
+GAME( 2006, ibarablk, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Ibara Kuro Black Label (2006/02/06. MASTER VER.)", GAME_FLAGS )
+GAME( 2006, ibarablka, ibarablk, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Ibara Kuro Black Label (2006/02/06 MASTER VER.)", GAME_FLAGS )
// CA013 Espgaluda II
-GAME( 2005, espgal2, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Espgaluda II (2005/11/14 MASTER VER)", 0 )
+GAME( 2005, espgal2, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Espgaluda II (2005/11/14 MASTER VER)", GAME_FLAGS )
// CA??? Puzzle! Mushihime-Tama
-GAME( 2005, mushitam, 0, cv1k, cv1k, cv1k_state, mushitam, ROT0, "Cave (AMI license)", "Puzzle! Mushihime-Tama (2005/09/09.MASTER VER)", 0 )
-GAME( 2005, mushitama, mushitam, cv1k, cv1k, cv1k_state, mushitam, ROT0, "Cave (AMI license)", "Puzzle! Mushihime-Tama (2005/09/09 MASTER VER)", 0 )
+GAME( 2005, mushitam, 0, cv1k, cv1k, cv1k_state, mushitam, ROT0, "Cave (AMI license)", "Puzzle! Mushihime-Tama (2005/09/09.MASTER VER)", GAME_FLAGS )
+GAME( 2005, mushitama, mushitam, cv1k, cv1k, cv1k_state, mushitam, ROT0, "Cave (AMI license)", "Puzzle! Mushihime-Tama (2005/09/09 MASTER VER)", GAME_FLAGS )
// CA014 Pink Sweets: Ibara Sorekara
-GAME( 2006, pinkswts, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....)", 0 )
-GAME( 2006, pinkswtsa, pinkswts, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...)", 0 )
-GAME( 2006, pinkswtsb, pinkswts, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.)", 0 )
-GAME( 2006, pinkswtsx, pinkswts, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.)", 0 ) // defaults to freeplay, possibly bootlegged from show/dev version?
+GAME( 2006, pinkswts, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....)", GAME_FLAGS )
+GAME( 2006, pinkswtsa, pinkswts, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...)", GAME_FLAGS )
+GAME( 2006, pinkswtsb, pinkswts, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.)", GAME_FLAGS )
+GAME( 2006, pinkswtsx, pinkswts, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.)", GAME_FLAGS ) // defaults to freeplay, possibly bootlegged from show/dev version?
// CA015 Mushihime-Sama Futari
-GAME( 2006, futari15, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.5 (2006/12/8.MASTER VER. 1.54.)", 0 )
-GAME( 2006, futari15a, futari15, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54)", 0 )
-GAME( 2006, futari10, futari15, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.0 (2006/10/23 MASTER VER.)", 0 )
+GAME( 2006, futari15, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.5 (2006/12/8.MASTER VER. 1.54.)", GAME_FLAGS )
+GAME( 2006, futari15a, futari15, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54)", GAME_FLAGS )
+GAME( 2006, futari10, futari15, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.0 (2006/10/23 MASTER VER.)", GAME_FLAGS )
// CA015B Mushihime-Sama Futari Black Label
-GAME( 2007, futaribl, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Black Label - Another Ver (2009/11/27 INTERNATIONAL BL)", 0 )
-GAME( 2007, futariblj, futaribl, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER)", 0 )
+GAME( 2007, futaribl, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Black Label - Another Ver (2009/11/27 INTERNATIONAL BL)", GAME_FLAGS )
+GAME( 2007, futariblj, futaribl, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER)", GAME_FLAGS )
// CA016 Muchi Muchi Pork!
-GAME( 2007, mmpork, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Muchi Muchi Pork! (2007/ 4/17 MASTER VER.)", 0 )
+GAME( 2007, mmpork, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT270, "Cave (AMI license)", "Muchi Muchi Pork! (2007/ 4/17 MASTER VER.)", GAME_FLAGS )
// CA017 Deathsmiles
-GAME( 2007, deathsml, 0, cv1k, cv1k, cv1k_state, deathsml, ROT0, "Cave (AMI license)", "Deathsmiles (2007/10/09 MASTER VER)", 0 )
+GAME( 2007, deathsml, 0, cv1k, cv1k, cv1k_state, deathsml, ROT0, "Cave (AMI license)", "Deathsmiles (2007/10/09 MASTER VER)", GAME_FLAGS )
// CA017B Deathsmiles Black Label
-GAME( 2008, dsmbl, 0, cv1k_d, cv1k, cv1k_state, dpddfk, ROT0, "Cave (AMI license)", "Deathsmiles MegaBlack Label (2008/10/06 MEGABLACK LABEL VER)", 0 )
+GAME( 2008, dsmbl, 0, cv1k_d, cv1k, cv1k_state, dpddfk, ROT0, "Cave (AMI license)", "Deathsmiles MegaBlack Label (2008/10/06 MEGABLACK LABEL VER)", GAME_FLAGS )
// CA019 Do-Don-Pachi Dai-Fukkatsu
-GAME( 2008, ddpdfk, 0, cv1k_d, cv1k, cv1k_state, dpddfk, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5)", 0 )
-GAME( 2008, ddpdfk10, ddpdfk, cv1k_d, cv1k, cv1k_state, dpddfk, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER)", 0 )
+GAME( 2008, ddpdfk, 0, cv1k_d, cv1k, cv1k_state, dpddfk, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5)", GAME_FLAGS )
+GAME( 2008, ddpdfk10, ddpdfk, cv1k_d, cv1k, cv1k_state, dpddfk, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER)", GAME_FLAGS )
// CA019B Do-Don-Pachi Dai-Fukkatsu Black Label
-GAME( 2010, dfkbl, 0, cv1k_d, cv1k, cv1k_state, dpddfk, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Black Label (2010/1/18 BLACK LABEL)", 0 )
+GAME( 2010, dfkbl, 0, cv1k_d, cv1k, cv1k_state, dpddfk, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Black Label (2010/1/18 BLACK LABEL)", GAME_FLAGS )
// CMDL01 Medal Mahjong Moukari Bancho
GAME( 2007, mmmbanc, 0, cv1k, cv1k, cv1k_state, pinkswts, ROT0, "Cave (AMI license)", "Medal Mahjong Moukari Bancho (2007/06/05 MASTER VER.)", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/dblewing.cpp b/src/mame/drivers/dblewing.cpp
index 57e86d496a4..bf8a806d051 100644
--- a/src/mame/drivers/dblewing.cpp
+++ b/src/mame/drivers/dblewing.cpp
@@ -94,9 +94,9 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_deco_tilegen1(*this, "tilegen1"),
- m_deco104(*this, "ioprot104"),
+ m_deco104(*this, "ioprot"),
m_sprgen(*this, "spritegen"),
- m_soundlatch(*this, "soundlatch")
+ m_soundlatch_pending(false)
{ }
/* memory pointers */
@@ -111,20 +111,20 @@ public:
required_device<deco16ic_device> m_deco_tilegen1;
required_device<deco104_device> m_deco104;
required_device<decospr_device> m_sprgen;
- required_device<generic_latch_8_device> m_soundlatch;
DECLARE_READ8_MEMBER(irq_latch_r);
+ DECLARE_WRITE_LINE_MEMBER(soundlatch_irq_w);
DECLARE_DRIVER_INIT(dblewing);
- virtual void machine_start() override;
- virtual void machine_reset() override;
uint32_t screen_update_dblewing(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECO16IC_BANK_CB_MEMBER(bank_callback);
DECOSPR_PRIORITY_CB_MEMBER(pri_callback);
- void dblewing_sound_cb( address_space &space, uint16_t data, uint16_t mem_mask );
READ16_MEMBER( wf_protection_region_0_104_r );
WRITE16_MEMBER( wf_protection_region_0_104_w );
+
+private:
+ bool m_soundlatch_pending;
};
@@ -162,6 +162,10 @@ WRITE16_MEMBER( dblewing_state::wf_protection_region_0_104_w )
m_deco104->write_data( space, deco146_addr, data, mem_mask, cs );
}
+WRITE_LINE_MEMBER( dblewing_state::soundlatch_irq_w )
+{
+ m_soundlatch_pending = bool(state);
+}
static ADDRESS_MAP_START( dblewing_map, AS_PROGRAM, 16, dblewing_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
@@ -189,7 +193,8 @@ ADDRESS_MAP_END
READ8_MEMBER(dblewing_state::irq_latch_r)
{
- return m_soundlatch->pending_r() ? 0 : 1;
+ // bit 0: irq type (0 = latch, 1 = ym)
+ return m_soundlatch_pending ? 0 : 1;
}
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, dblewing_state )
@@ -197,7 +202,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, dblewing_state )
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_device, status_r, write)
AM_RANGE(0xb000, 0xb000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0xc000, 0xc000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0xc000, 0xc000) AM_DEVREAD("ioprot", deco104_device, soundlatch_r)
AM_RANGE(0xd000, 0xd000) AM_READ(irq_latch_r) //timing? sound latch?
AM_RANGE(0xf000, 0xf000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
ADDRESS_MAP_END
@@ -334,20 +339,6 @@ DECOSPR_PRIORITY_CB_MEMBER(dblewing_state::pri_callback)
return 0; // sprites always on top?
}
-
-void dblewing_state::machine_start()
-{
-}
-
-void dblewing_state::machine_reset()
-{
-}
-
-void dblewing_state::dblewing_sound_cb( address_space &space, uint16_t data, uint16_t mem_mask )
-{
- m_soundlatch->write(space, 0, data & 0xff);
-}
-
static MACHINE_CONFIG_START( dblewing )
/* basic machine hardware */
@@ -399,22 +390,20 @@ static MACHINE_CONFIG_START( dblewing )
MCFG_DECO_SPRITE_PRIORITY_CB(dblewing_state, pri_callback)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
- MCFG_DECO104_ADD("ioprot104")
+ MCFG_DECO104_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
- MCFG_DECO146_SET_SOUNDLATCH_CALLBACK(dblewing_state, dblewing_sound_cb)
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(WRITELINE(dblewing_state, soundlatch_irq_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("soundirq", input_merger_device, in_w<0>))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
- MCFG_GENERIC_LATCH_DATA_PENDING_CB(DEVWRITELINE("soundirq", input_merger_device, in_w<1>))
-
MCFG_YM2151_ADD("ymsnd", XTAL_32_22MHz/9)
- MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("soundirq", input_merger_device, in_w<0>))
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("soundirq", input_merger_device, in_w<1>))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_OKIM6295_ADD("oki", XTAL_28MHz/28, PIN7_HIGH)
@@ -450,6 +439,8 @@ DRIVER_INIT_MEMBER(dblewing_state,dblewing)
{
deco56_decrypt_gfx(machine(), "gfx1");
deco102_decrypt_cpu((uint16_t *)memregion("maincpu")->base(), m_decrypted_opcodes, 0x80000, 0x399d, 0x25, 0x3d);
+
+ save_item(NAME(m_soundlatch_pending));
}
diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp
index 74d714e6bb0..c0f59bd8bdb 100644
--- a/src/mame/drivers/deco32.cpp
+++ b/src/mame/drivers/deco32.cpp
@@ -380,14 +380,14 @@ NOTE: There are several unpopulated locations (denoted by *) for additional rom
// ADDRESS MAPS
//**************************************************************************
-static ADDRESS_MAP_START( captaven_map, AS_PROGRAM, 32, deco32_state )
+static ADDRESS_MAP_START( captaven_map, AS_PROGRAM, 32, captaven_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x100007) AM_READ(_71_r)
AM_RANGE(0x100000, 0x100003) AM_WRITE(buffer_spriteram_w)
AM_RANGE(0x108000, 0x108003) AM_WRITENOP /* ? */
AM_RANGE(0x110000, 0x111fff) AM_READWRITE(spriteram_r, spriteram_w)
AM_RANGE(0x120000, 0x127fff) AM_RAM AM_SHARE("ram") /* Main RAM */
- AM_RANGE(0x128000, 0x12ffff) AM_READWRITE16(deco_146_r, deco_146_w, 0x0000ffff)
+ AM_RANGE(0x128000, 0x12ffff) AM_READWRITE16(ioprot_r, ioprot_w, 0x0000ffff)
AM_RANGE(0x130000, 0x131fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x148000, 0x14800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x160000, 0x167fff) AM_RAM /* Extra work RAM */
@@ -409,7 +409,7 @@ static ADDRESS_MAP_START( captaven_map, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32") // unused
ADDRESS_MAP_END
-static ADDRESS_MAP_START( fghthist_map, AS_PROGRAM, 32, deco32_state )
+static ADDRESS_MAP_START( fghthist_map, AS_PROGRAM, 32, fghthist_state )
ADDRESS_MAP_UNMAP_HIGH
// AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE(pf1_data_w) // wtf??
AM_RANGE(0x000000, 0x0fffff) AM_ROM
@@ -419,12 +419,14 @@ static ADDRESS_MAP_START( fghthist_map, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x120028, 0x12002b) AM_READ8(eeprom_r, 0x000000ff)
AM_RANGE(0x12002c, 0x12002f) AM_WRITE8(eeprom_w, 0x000000ff)
AM_RANGE(0x12002c, 0x12002f) AM_WRITE8(volume_w, 0x0000ff00)
- AM_RANGE(0x1201fc, 0x1201ff) AM_WRITE(sound_w)
+ AM_RANGE(0x1201fc, 0x1201ff) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x000000ff)
AM_RANGE(0x140000, 0x140003) AM_WRITE(vblank_ack_w)
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x16c008, 0x16c00b) AM_WRITE(palette_dma_w)
+ AM_RANGE(0x16c010, 0x16c013) AM_READ(unk_status_r)
AM_RANGE(0x178000, 0x179fff) AM_READWRITE(spriteram_r, spriteram_w)
AM_RANGE(0x17c010, 0x17c013) AM_WRITE(buffer_spriteram_w)
+ AM_RANGE(0x17c020, 0x17c023) AM_READ(unk_status_r)
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w)
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf2_data_dword_r, pf2_data_dword_w)
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
@@ -435,13 +437,11 @@ static ADDRESS_MAP_START( fghthist_map, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32")
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("tilegen2", deco16ic_device, pf_control_dword_r, pf_control_dword_w)
- AM_RANGE(0x16c000, 0x16c01f) AM_READNOP
- AM_RANGE(0x17c000, 0x17c03f) AM_READNOP
- AM_RANGE(0x200000, 0x207fff) AM_READWRITE16(deco_146_r, deco_146_w, 0xffff0000) AM_SHARE("prot32ram") // only maps on 16-bits
+ AM_RANGE(0x200000, 0x207fff) AM_READWRITE16(ioprot_r, ioprot_w, 0xffff0000) AM_SHARE("prot32ram") // only maps on 16-bits
AM_RANGE(0x208800, 0x208803) AM_WRITENOP /* ? */
ADDRESS_MAP_END
-static ADDRESS_MAP_START( fghthsta_memmap, AS_PROGRAM, 32, deco32_state )
+static ADDRESS_MAP_START( fghthsta_memmap, AS_PROGRAM, 32, fghthist_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
AM_RANGE(0x140000, 0x140003) AM_WRITE(vblank_ack_w)
@@ -449,10 +449,10 @@ static ADDRESS_MAP_START( fghthsta_memmap, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x150000, 0x150003) AM_WRITE8(volume_w, 0x0000ff00)
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x16c008, 0x16c00b) AM_WRITE(palette_dma_w)
- AM_RANGE(0x16c010, 0x16c013) AM_READNOP
+ AM_RANGE(0x16c010, 0x16c013) AM_READ(unk_status_r)
AM_RANGE(0x178000, 0x179fff) AM_READWRITE(spriteram_r, spriteram_w)
AM_RANGE(0x17c010, 0x17c013) AM_WRITE(buffer_spriteram_w)
- AM_RANGE(0x17c020, 0x17c023) AM_READNOP
+ AM_RANGE(0x17c020, 0x17c023) AM_READ(unk_status_r)
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w)
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf2_data_dword_r, pf2_data_dword_w)
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
@@ -463,7 +463,7 @@ static ADDRESS_MAP_START( fghthsta_memmap, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32")
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("tilegen2", deco16ic_device, pf_control_dword_r, pf_control_dword_w)
- AM_RANGE(0x200000, 0x207fff) AM_READWRITE16(deco_146_r, deco_146_w, 0xffff0000) AM_SHARE("prot32ram") // only maps on 16-bits
+ AM_RANGE(0x200000, 0x207fff) AM_READWRITE16(ioprot_r, ioprot_w, 0xffff0000) AM_SHARE("prot32ram") // only maps on 16-bits
ADDRESS_MAP_END
// the video drawing (especially sprite) code on this is too slow to cope with proper partial updates
@@ -471,7 +471,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( dragngun_map, AS_PROGRAM, 32, dragngun_state )
AM_RANGE(0x0000000, 0x00fffff) AM_ROM
AM_RANGE(0x0100000, 0x011ffff) AM_RAM AM_SHARE("ram")
- AM_RANGE(0x0120000, 0x0127fff) AM_READWRITE16(deco_146_r, deco_146_w, 0x0000ffff)
+ AM_RANGE(0x0120000, 0x0127fff) AM_READWRITE16(ioprot_r, ioprot_w, 0x0000ffff)
// AM_RANGE(0x01204c0, 0x01204c3) AM_WRITE(sound_w)
AM_RANGE(0x0128000, 0x012800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x0130000, 0x0131fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram")
@@ -523,7 +523,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( lockload_map, AS_PROGRAM, 32, dragngun_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
- AM_RANGE(0x120000, 0x127fff) AM_READWRITE16(deco_146_r, deco_146_w, 0x0000ffff)
+ AM_RANGE(0x120000, 0x127fff) AM_READWRITE16(ioprot_r, ioprot_w, 0x0000ffff)
AM_RANGE(0x128000, 0x12800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x138000, 0x138003) AM_READONLY AM_WRITENOP //palette dma complete in bit 0x8? ack? return 0 else tight loop
@@ -555,7 +555,7 @@ static ADDRESS_MAP_START( lockload_map, AS_PROGRAM, 32, dragngun_state )
AM_RANGE(0x500000, 0x500003) AM_WRITE(sprite_control_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( tattass_map, AS_PROGRAM, 32, deco32_state )
+static ADDRESS_MAP_START( tattass_map, AS_PROGRAM, 32, nslasher_state )
AM_RANGE(0x000000, 0x0f7fff) AM_ROM
AM_RANGE(0x0f8000, 0x0fffff) AM_ROM AM_WRITENOP
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
@@ -590,11 +590,11 @@ static ADDRESS_MAP_START( tattass_map, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32")
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("tilegen2", deco16ic_device, pf_control_dword_r, pf_control_dword_w)
- AM_RANGE(0x200000, 0x207fff) AM_READWRITE16(deco_104_r, deco_104_w, 0xffff0000)
+ AM_RANGE(0x200000, 0x207fff) AM_READWRITE16(ioprot_r, ioprot_w, 0xffff0000)
AM_RANGE(0x200000, 0x207fff) AM_READ16(nslasher_debug_r, 0x0000ffff)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( nslasher_map, AS_PROGRAM, 32, deco32_state )
+static ADDRESS_MAP_START( nslasher_map, AS_PROGRAM, 32, nslasher_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
AM_RANGE(0x120000, 0x1200ff) AM_NOP /* ACIA (unused) */
@@ -627,7 +627,7 @@ static ADDRESS_MAP_START( nslasher_map, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32")
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("tilegen2", deco16ic_device, pf_control_dword_r, pf_control_dword_w)
- AM_RANGE(0x200000, 0x207fff) AM_READWRITE16(deco_104_r, deco_104_w, 0xffff0000)
+ AM_RANGE(0x200000, 0x207fff) AM_READWRITE16(ioprot_r, ioprot_w, 0xffff0000)
AM_RANGE(0x200000, 0x207fff) AM_READ16(nslasher_debug_r, 0x0000ffff) // seems to be debug switches / code activated by this?
ADDRESS_MAP_END
@@ -637,12 +637,17 @@ static ADDRESS_MAP_START( h6280_sound_map, AS_PROGRAM, 8, deco32_state )
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0x140000, 0x140001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot", deco_146_base_device, soundlatch_r)
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( h6280_sound_custom_latch_map, AS_PROGRAM, 8, deco32_state )
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_IMPORT_FROM(h6280_sound_map)
+ADDRESS_MAP_END
+
// Z80 based sound
static ADDRESS_MAP_START( z80_sound_mem, AS_PROGRAM, 8, deco32_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
@@ -650,7 +655,7 @@ static ADDRESS_MAP_START( z80_sound_mem, AS_PROGRAM, 8, deco32_state )
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0xb000, 0xb000) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0xd000, 0xd000) AM_READ(latch_r)
+ AM_RANGE(0xd000, 0xd000) AM_DEVREAD("ioprot", deco_146_base_device, soundlatch_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( z80_sound_io, AS_IO, 8, deco32_state )
@@ -662,40 +667,22 @@ ADDRESS_MAP_END
// PROTECTION
//**************************************************************************
-READ16_MEMBER( deco32_state::deco_104_r )
+READ16_MEMBER( deco32_state::ioprot_r )
{
offs_t real_address = 0 + (offset *2);
offs_t deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff;
uint8_t cs = 0;
- return m_deco104->read_data( deco146_addr, mem_mask, cs );
+ return m_ioprot->read_data( deco146_addr, mem_mask, cs );
}
-WRITE16_MEMBER( deco32_state::deco_104_w )
+WRITE16_MEMBER( deco32_state::ioprot_w )
{
offs_t real_address = 0 + (offset *2);
offs_t deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff;
uint8_t cs = 0;
- m_deco104->write_data( space, deco146_addr, data, mem_mask, cs );
-}
-
-READ16_MEMBER( deco32_state::deco_146_r )
-{
- offs_t real_address = 0 + (offset * 2);
- offs_t deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8,7,6,5,4,3,2,1, 0) & 0x7fff;
- uint8_t cs = 0;
-
- return m_deco146->read_data(deco146_addr, mem_mask, cs);
-}
-
-WRITE16_MEMBER( deco32_state::deco_146_w )
-{
- offs_t real_address = 0 + (offset * 2);
- offs_t deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8,7,6,5,4,3,2,1, 0) & 0x7fff;
- uint8_t cs = 0;
-
- m_deco146->write_data(space, deco146_addr, data, mem_mask, cs);
+ m_ioprot->write_data( space, deco146_addr, data, mem_mask, cs );
}
@@ -703,21 +690,6 @@ WRITE16_MEMBER( deco32_state::deco_146_w )
// SOUND
//**************************************************************************
-WRITE32_MEMBER( deco32_state::sound_w )
-{
- m_soundlatch->write(space, 0, data & 0xff);
- m_audiocpu->set_input_line(0, HOLD_LINE);
-}
-
-READ8_MEMBER(deco32_state::latch_r)
-{
- /* bit 1 of nslasher_sound_irq specifies IRQ command writes */
- m_nslasher_sound_irq &= ~0x02;
- m_audiocpu->set_input_line(0, (m_nslasher_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
-
- return m_soundlatch->read(space,0);
-}
-
WRITE8_MEMBER( deco32_state::volume_w )
{
// TODO: assume linear with a 0.0-1.0 dB scale for now
@@ -729,7 +701,7 @@ WRITE8_MEMBER( deco32_state::volume_w )
m_oki2->set_output_gain(ALL_OUTPUTS, vol_output);
}
-READ8_MEMBER( deco32_state::captaven_soundcpu_status_r )
+READ8_MEMBER( captaven_state::captaven_soundcpu_status_r )
{
// 7------- sound cpu status (0 = busy)
// -6543210 unknown
@@ -782,36 +754,15 @@ LC7535_VOLUME_CHANGED( dragngun_state::volume_gun_changed )
m_oki3->set_output_gain(ALL_OUTPUTS, m_vol_gun->normalize(attenuation_left));
}
-void deco32_state::deco32_sound_cb(address_space &space, uint16_t data, uint16_t mem_mask)
-{
- m_soundlatch->write(space, 0, data & 0xff);
- m_audiocpu->set_input_line(0, HOLD_LINE);
-}
-
-void deco32_state::nslasher_sound_cb(address_space &space, uint16_t data, uint16_t mem_mask)
+WRITE_LINE_MEMBER( nslasher_state::tattass_sound_irq_w )
{
- /* bit 1 of nslasher_sound_irq specifies IRQ command writes */
- m_soundlatch->write(space,0,(data)&0xff);
- m_nslasher_sound_irq |= 0x02;
- m_audiocpu->set_input_line(0, (m_nslasher_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-void deco32_state::tattass_sound_cb(address_space &space, uint16_t data, uint16_t mem_mask)
-{
- /* 'Swap bits 0 and 3 to correct for design error from BSMT schematic' */
- int soundcommand = (data)&0xff;
- soundcommand = BITSWAP8(soundcommand,7,6,5,4,0,2,1,3);
- m_decobsmt->bsmt_comms_w(space, 0, soundcommand);
-}
-
-WRITE_LINE_MEMBER( deco32_state::sound_irq_nslasher )
-{
- /* bit 0 of nslasher_sound_irq specifies IRQ from sound chip */
if (state)
- m_nslasher_sound_irq |= 0x01;
- else
- m_nslasher_sound_irq &= ~0x01;
- m_audiocpu->set_input_line(0, (m_nslasher_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
+ {
+ uint8_t data = m_ioprot->soundlatch_r(machine().dummy_space(), 0);
+ // Swap bits 0 and 3 to correct for design error from BSMT schematic
+ data = BITSWAP8(data, 7, 6, 5, 4, 0, 2, 1, 3);
+ m_decobsmt->bsmt_comms_w(machine().dummy_space(), 0, data);
+ }
}
WRITE8_MEMBER( deco32_state::sound_bankswitch_w )
@@ -847,19 +798,19 @@ WRITE32_MEMBER( deco32_state::buffer_spriteram_w )
memcpy(m_spriteram16_buffered, m_spriteram16, 0x1000);
}
-READ32_MEMBER( deco32_state::spriteram2_r )
+READ32_MEMBER( nslasher_state::spriteram2_r )
{
return m_spriteram16_2[offset] ^ 0xffff0000;
}
-WRITE32_MEMBER( deco32_state::spriteram2_w )
+WRITE32_MEMBER( nslasher_state::spriteram2_w )
{
data &= 0x0000ffff;
mem_mask &= 0x0000ffff;
COMBINE_DATA(&m_spriteram16_2[offset]);
}
-WRITE32_MEMBER( deco32_state::buffer_spriteram2_w )
+WRITE32_MEMBER( nslasher_state::buffer_spriteram2_w )
{
memcpy(m_spriteram16_2_buffered, m_spriteram16_2, 0x1000);
}
@@ -875,7 +826,7 @@ READ32_MEMBER( dragngun_state::unk_video_r)
return machine().rand();
}
-DECOSPR_PRIORITY_CB_MEMBER( deco32_state::captaven_pri_callback )
+DECOSPR_PRIORITY_CB_MEMBER( captaven_state::captaven_pri_callback )
{
if ((pri & 0x60) == 0x00)
{
@@ -895,7 +846,7 @@ DECOSPR_PRIORITY_CB_MEMBER( deco32_state::captaven_pri_callback )
}
}
-DECO16IC_BANK_CB_MEMBER( deco32_state::captaven_bank_callback )
+DECO16IC_BANK_CB_MEMBER( captaven_state::captaven_bank_callback )
{
bank = bank >> 4;
bank = (bank & 2) >> 1;
@@ -903,7 +854,7 @@ DECO16IC_BANK_CB_MEMBER( deco32_state::captaven_bank_callback )
return bank * 0x4000;
}
-DECO16IC_BANK_CB_MEMBER( deco32_state::fghthist_bank_callback )
+DECO16IC_BANK_CB_MEMBER( fghthist_state::fghthist_bank_callback )
{
bank = bank >> 4;
bank = (bank & 1) | ((bank & 4) >> 1) | ((bank & 2) << 1);
@@ -924,7 +875,7 @@ DECO16IC_BANK_CB_MEMBER( dragngun_state::bank_2_callback )
return bank * 0x1000;
}
-DECO16IC_BANK_CB_MEMBER( deco32_state::tattass_bank_callback )
+DECO16IC_BANK_CB_MEMBER( nslasher_state::tattass_bank_callback )
{
bank = bank >> 4;
return bank * 0x1000;
@@ -935,12 +886,12 @@ DECO16IC_BANK_CB_MEMBER( deco32_state::tattass_bank_callback )
// INPUTS
//**************************************************************************
-READ8_MEMBER( deco32_state::captaven_dsw1_r ) { return ioport("DSW1")->read(); }
-READ8_MEMBER( deco32_state::captaven_dsw2_r ) { return ioport("DSW2")->read(); }
-READ8_MEMBER( deco32_state::captaven_dsw3_r ) { return ioport("DSW3")->read(); }
+READ8_MEMBER( captaven_state::captaven_dsw1_r ) { return ioport("DSW1")->read(); }
+READ8_MEMBER( captaven_state::captaven_dsw2_r ) { return ioport("DSW2")->read(); }
+READ8_MEMBER( captaven_state::captaven_dsw3_r ) { return ioport("DSW3")->read(); }
-READ16_MEMBER( deco32_state::fghthist_in0_r ) { return ioport("IN0")->read(); }
-READ16_MEMBER( deco32_state::fghthist_in1_r ) { return ioport("IN1")->read(); }
+READ16_MEMBER( fghthist_state::fghthist_in0_r ) { return ioport("IN0")->read(); }
+READ16_MEMBER( fghthist_state::fghthist_in1_r ) { return ioport("IN1")->read(); }
// TODO: probably clears both player 1 and player 2
WRITE32_MEMBER( dragngun_state::gun_irq_ack_w )
@@ -1034,7 +985,7 @@ WRITE8_MEMBER( dragngun_state::eeprom_w )
m_eeprom->cs_write(BIT(data, 2) ? ASSERT_LINE : CLEAR_LINE);
}
-WRITE32_MEMBER( deco32_state::tattass_control_w )
+WRITE32_MEMBER( nslasher_state::tattass_control_w )
{
/* Eprom in low byte */
if (ACCESSING_BITS_0_7) { /* Byte write to low byte only (different from word writing including low byte) */
@@ -1161,7 +1112,7 @@ WRITE32_MEMBER( deco32_state::tattass_control_w )
//logerror("%08x: %08x data\n",data,mem_mask);
}
-READ16_MEMBER( deco32_state::port_b_tattass )
+READ16_MEMBER( nslasher_state::port_b_tattass )
{
return m_tattass_eprom_bit;
}
@@ -1171,24 +1122,28 @@ READ16_MEMBER( deco32_state::port_b_tattass )
// MACHINE
//**************************************************************************
-READ16_MEMBER( deco32_state::nslasher_debug_r )
+READ32_MEMBER( fghthist_state::unk_status_r )
+{
+ // bit 3 needs to be 0
+ return 0xfffffff7;
+}
+
+READ16_MEMBER( nslasher_state::nslasher_debug_r )
{
return 0xffff;
}
-READ32_MEMBER( deco32_state::_71_r )
+READ32_MEMBER( captaven_state::_71_r )
{
/* Bit 0x80 goes high when sprite DMA is complete, and low
while it's in progress, we don't bother to emulate it */
return 0xffffffff;
}
-DRIVER_INIT_MEMBER( deco32_state, captaven )
+DRIVER_INIT_MEMBER( captaven_state, captaven )
{
deco56_decrypt_gfx(machine(), "gfx1");
deco56_decrypt_gfx(machine(), "gfx2");
-
- save_item(NAME(m_nslasher_sound_irq));
}
extern void process_dvi_data(device_t *device,uint8_t* dvi_data, int offset, int regionsize);
@@ -1247,7 +1202,7 @@ DRIVER_INIT_MEMBER( dragngun_state, dragngunj )
ROM[0x1a1b4/4]=0xe1a00000; // bl $ee000: NOP test switch lock
}
-DRIVER_INIT_MEMBER( deco32_state, fghthist )
+DRIVER_INIT_MEMBER( fghthist_state, fghthist )
{
deco56_decrypt_gfx(machine(), "gfx1");
deco74_decrypt_gfx(machine(), "gfx2");
@@ -1265,14 +1220,12 @@ DRIVER_INIT_MEMBER( dragngun_state, lockload )
memcpy(RAM+0x300000,RAM+0x100000,0x100000);
memset(RAM+0x100000,0,0x100000);
- save_item(NAME(m_nslasher_sound_irq));
-
// ROM[0x3fe3c0/4]=0xe1a00000;// NOP test switch lock
// ROM[0x3fe3cc/4]=0xe1a00000;// NOP test switch lock
// ROM[0x3fe40c/4]=0xe1a00000;// NOP test switch lock
}
-DRIVER_INIT_MEMBER( deco32_state, tattass )
+DRIVER_INIT_MEMBER( nslasher_state, tattass )
{
uint8_t *RAM = memregion("gfx1")->base();
std::vector<uint8_t> tmp(0x80000);
@@ -1299,7 +1252,7 @@ DRIVER_INIT_MEMBER( deco32_state, tattass )
save_item(NAME(m_byteAddr));
}
-DRIVER_INIT_MEMBER( deco32_state, nslasher )
+DRIVER_INIT_MEMBER( nslasher_state, nslasher )
{
uint8_t *RAM = memregion("gfx1")->base();
std::vector<uint8_t> tmp(0x80000);
@@ -1319,10 +1272,6 @@ DRIVER_INIT_MEMBER( deco32_state, nslasher )
deco156_decrypt(machine());
- m_soundlatch->preset_w(0xff);
-
- save_item(NAME(m_nslasher_sound_irq));
-
/* The board for Night Slashers is very close to the Fighter's History and
Tattoo Assassins boards, but has an encrypted ARM cpu. */
}
@@ -1919,7 +1868,7 @@ static MACHINE_CONFIG_START( captaven )
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_28MHz / 4, 442, 0, 320, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(deco32_state, screen_update_captaven)
+ MCFG_SCREEN_UPDATE_DRIVER(captaven_state, screen_update_captaven)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", captaven)
@@ -1948,7 +1897,7 @@ static MACHINE_CONFIG_START( captaven )
MCFG_DECO16IC_PF2_COL_BANK(0x00)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x00)
- MCFG_DECO16IC_BANK1_CB(deco32_state, captaven_bank_callback)
+ MCFG_DECO16IC_BANK1_CB(captaven_state, captaven_bank_callback)
// no bank2 callback
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
@@ -1956,25 +1905,23 @@ static MACHINE_CONFIG_START( captaven )
MCFG_DEVICE_ADD("spritegen", DECO_SPRITE, 0)
MCFG_DECO_SPRITE_GFX_REGION(3)
- MCFG_DECO_SPRITE_PRIORITY_CB(deco32_state, captaven_pri_callback)
+ MCFG_DECO_SPRITE_PRIORITY_CB(captaven_state, captaven_pri_callback)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
MCFG_DECO146_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
- MCFG_DECO146_SET_SOUNDLATCH_CALLBACK(deco32_state, deco32_sound_cb)
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
- MCFG_VIDEO_START_OVERRIDE(deco32_state,captaven)
+ MCFG_VIDEO_START_OVERRIDE(captaven_state, captaven)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", XTAL_32_22MHz/9) /* verified on pcb */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1))
- MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state,sound_bankswitch_w))
+ MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state, sound_bankswitch_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.42)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.42)
@@ -1994,13 +1941,13 @@ static MACHINE_CONFIG_START( fghthist )
MCFG_CPU_VBLANK_INT_DRIVER("screen", deco32_state, irq0_line_assert)
MCFG_CPU_ADD("audiocpu", H6280, XTAL_32_22MHz / 8)
- MCFG_CPU_PROGRAM_MAP(h6280_sound_map)
+ MCFG_CPU_PROGRAM_MAP(h6280_sound_custom_latch_map)
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_28MHz / 4, 442, 0, 320, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(deco32_state, screen_update_fghthist)
+ MCFG_SCREEN_UPDATE_DRIVER(fghthist_state, screen_update_fghthist)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", fghthist)
MCFG_PALETTE_ADD("palette", 2048)
@@ -2014,8 +1961,8 @@ static MACHINE_CONFIG_START( fghthist )
MCFG_DECO16IC_PF2_COL_BANK(0x10)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
- MCFG_DECO16IC_BANK1_CB(deco32_state, fghthist_bank_callback)
- MCFG_DECO16IC_BANK2_CB(deco32_state, fghthist_bank_callback)
+ MCFG_DECO16IC_BANK1_CB(fghthist_state, fghthist_bank_callback)
+ MCFG_DECO16IC_BANK2_CB(fghthist_state, fghthist_bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
@@ -2029,8 +1976,8 @@ static MACHINE_CONFIG_START( fghthist )
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
- MCFG_DECO16IC_BANK1_CB(deco32_state, fghthist_bank_callback)
- MCFG_DECO16IC_BANK2_CB(deco32_state, fghthist_bank_callback)
+ MCFG_DECO16IC_BANK1_CB(fghthist_state, fghthist_bank_callback)
+ MCFG_DECO16IC_BANK2_CB(fghthist_state, fghthist_bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
@@ -2046,12 +1993,13 @@ static MACHINE_CONFIG_START( fghthist )
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
- MCFG_VIDEO_START_OVERRIDE(deco32_state, fghthist)
+ MCFG_VIDEO_START_OVERRIDE(fghthist_state, fghthist)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1))
@@ -2072,6 +2020,14 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( fghthsta, fghthist )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(fghthsta_memmap)
+
+ MCFG_CPU_MODIFY("audiocpu")
+ MCFG_CPU_PROGRAM_MAP(h6280_sound_map)
+
+ MCFG_DEVICE_REMOVE("soundlatch")
+
+ MCFG_DEVICE_MODIFY("ioprot")
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MACHINE_CONFIG_END
// DE-0396-0
@@ -2082,10 +2038,14 @@ static MACHINE_CONFIG_DERIVED( fghthistu, fghthsta )
MCFG_CPU_PROGRAM_MAP(z80_sound_mem)
MCFG_CPU_IO_MAP(z80_sound_io)
+ MCFG_INPUT_MERGER_ANY_HIGH("sound_irq_merger")
+ MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
+
+ MCFG_DEVICE_MODIFY("ioprot")
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(DEVWRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<0>))
+
MCFG_SOUND_MODIFY("ymsnd")
- //MCFG_YM2151_IRQ_HANDLER(WRITELINE(deco32_state,sound_irq_nslasher))
- MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
- MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state, sound_bankswitch_w))
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<1>))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.40)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.40)
@@ -2159,17 +2119,15 @@ static MACHINE_CONFIG_START( dragngun )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
- MCFG_DECO146_SET_SOUNDLATCH_CALLBACK(deco32_state, deco32_sound_cb)
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_REVERSE
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1))
- MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state,sound_bankswitch_w))
+ MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state, sound_bankswitch_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.42)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.42)
@@ -2212,12 +2170,15 @@ static MACHINE_CONFIG_START( lockload )
MCFG_CPU_ADD("maincpu", ARM, XTAL_28MHz / 4)
MCFG_CPU_PROGRAM_MAP(lockload_map)
+ MCFG_INPUT_MERGER_ANY_HIGH("irq_merger")
+ MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", ARM_IRQ_LINE))
+
MCFG_CPU_ADD("audiocpu", Z80, 32220000/8)
MCFG_CPU_PROGRAM_MAP(z80_sound_mem)
MCFG_CPU_IO_MAP(z80_sound_io)
- MCFG_INPUT_MERGER_ANY_HIGH("irq_merger")
- MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", ARM_IRQ_LINE))
+ MCFG_INPUT_MERGER_ANY_HIGH("sound_irq_merger")
+ MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
MCFG_DECO_IRQ_ADD("irq", "screen")
MCFG_DECO_IRQ_LIGHTGUN1_CB(IOPORT("LIGHT0_Y"))
@@ -2279,7 +2240,7 @@ static MACHINE_CONFIG_START( lockload )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
- MCFG_DECO146_SET_SOUNDLATCH_CALLBACK(deco32_state, deco32_sound_cb)
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(DEVWRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<0>))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_REVERSE
/* sound hardware */
@@ -2288,8 +2249,8 @@ static MACHINE_CONFIG_START( lockload )
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_YM2151_ADD("ymsnd", 32220000/9)
- MCFG_YM2151_IRQ_HANDLER(WRITELINE(deco32_state,sound_irq_nslasher))
- MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state,sound_bankswitch_w))
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<1>))
+ MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state, sound_bankswitch_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.42)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.42)
@@ -2321,7 +2282,7 @@ static MACHINE_CONFIG_START( tattass )
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_28MHz / 4, 442, 0, 320, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(deco32_state, screen_update_nslasher)
+ MCFG_SCREEN_UPDATE_DRIVER(nslasher_state, screen_update_nslasher)
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
@@ -2332,8 +2293,8 @@ static MACHINE_CONFIG_START( tattass )
MCFG_DECO16IC_PF2_COL_BANK(0x10)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
- MCFG_DECO16IC_BANK1_CB(deco32_state, tattass_bank_callback)
- MCFG_DECO16IC_BANK2_CB(deco32_state, tattass_bank_callback)
+ MCFG_DECO16IC_BANK1_CB(nslasher_state, tattass_bank_callback)
+ MCFG_DECO16IC_BANK2_CB(nslasher_state, tattass_bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
@@ -2347,8 +2308,8 @@ static MACHINE_CONFIG_START( tattass )
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
- MCFG_DECO16IC_BANK1_CB(deco32_state, tattass_bank_callback)
- MCFG_DECO16IC_BANK2_CB(deco32_state, tattass_bank_callback)
+ MCFG_DECO16IC_BANK1_CB(nslasher_state, tattass_bank_callback)
+ MCFG_DECO16IC_BANK2_CB(nslasher_state, tattass_bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
@@ -2364,14 +2325,14 @@ static MACHINE_CONFIG_START( tattass )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tattass)
MCFG_PALETTE_ADD("palette", 2048)
- MCFG_DECO104_ADD("ioprot104")
+ MCFG_DECO104_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
- MCFG_DECO146_IN_PORTB_CB(READ16(deco32_state, port_b_tattass))
+ MCFG_DECO146_IN_PORTB_CB(READ16(nslasher_state, port_b_tattass))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
- MCFG_DECO146_SET_SOUNDLATCH_CALLBACK(deco32_state, tattass_sound_cb)
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(WRITELINE(nslasher_state, tattass_sound_irq_w))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE
- MCFG_VIDEO_START_OVERRIDE(deco32_state,nslasher)
+ MCFG_VIDEO_START_OVERRIDE(nslasher_state,nslasher)
/* sound hardware */
MCFG_DECOBSMT_ADD(DECOBSMT_TAG)
@@ -2388,13 +2349,16 @@ static MACHINE_CONFIG_START( nslasher )
MCFG_CPU_PROGRAM_MAP(z80_sound_mem)
MCFG_CPU_IO_MAP(z80_sound_io)
+ MCFG_INPUT_MERGER_ANY_HIGH("sound_irq_merger")
+ MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
+
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* to improve main<->audio comms */
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_28_322MHz / 4, 442, 0, 320, 274, 8, 248)
- MCFG_SCREEN_UPDATE_DRIVER(deco32_state, screen_update_nslasher)
+ MCFG_SCREEN_UPDATE_DRIVER(nslasher_state, screen_update_nslasher)
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
@@ -2405,8 +2369,8 @@ static MACHINE_CONFIG_START( nslasher )
MCFG_DECO16IC_PF2_COL_BANK(0x10)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
- MCFG_DECO16IC_BANK1_CB(deco32_state, tattass_bank_callback)
- MCFG_DECO16IC_BANK2_CB(deco32_state, tattass_bank_callback)
+ MCFG_DECO16IC_BANK1_CB(nslasher_state, tattass_bank_callback)
+ MCFG_DECO16IC_BANK2_CB(nslasher_state, tattass_bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
@@ -2420,8 +2384,8 @@ static MACHINE_CONFIG_START( nslasher )
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
- MCFG_DECO16IC_BANK1_CB(deco32_state, tattass_bank_callback)
- MCFG_DECO16IC_BANK2_CB(deco32_state, tattass_bank_callback)
+ MCFG_DECO16IC_BANK1_CB(nslasher_state, tattass_bank_callback)
+ MCFG_DECO16IC_BANK2_CB(nslasher_state, tattass_bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
@@ -2437,23 +2401,21 @@ static MACHINE_CONFIG_START( nslasher )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", nslasher)
MCFG_PALETTE_ADD("palette", 2048)
- MCFG_VIDEO_START_OVERRIDE(deco32_state,nslasher)
+ MCFG_VIDEO_START_OVERRIDE(nslasher_state, nslasher)
- MCFG_DECO104_ADD("ioprot104")
+ MCFG_DECO104_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(DEVREADLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(0)
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
- MCFG_DECO146_SET_SOUNDLATCH_CALLBACK(deco32_state, nslasher_sound_cb)
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(DEVWRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<0>))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", 32220000/9)
- MCFG_YM2151_IRQ_HANDLER(WRITELINE(deco32_state,sound_irq_nslasher))
- MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state,sound_bankswitch_w))
+ MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<1>))
+ MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(deco32_state, sound_bankswitch_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.40)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.40)
@@ -2474,12 +2436,12 @@ static MACHINE_CONFIG_DERIVED( nslasheru, nslasher )
MCFG_SOUND_MODIFY("ymsnd")
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1))
- MCFG_DEVICE_REMOVE("ioprot104")
- MCFG_DECO104_ADD("ioprot104")
+ MCFG_DEVICE_REMOVE("ioprot")
+ MCFG_DECO104_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(DEVREADLINE("eeprom", eeprom_serial_93cxx_device, do_read)) MCFG_DEVCB_BIT(0)
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
- MCFG_DECO146_SET_SOUNDLATCH_CALLBACK(deco32_state, deco32_sound_cb)
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE
MACHINE_CONFIG_END
@@ -3932,38 +3894,38 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS
-GAME( 1991, captaven, 0, captaven, captaven, deco32_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (Asia Rev 1.4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, captavena, captaven, captaven, captaven, deco32_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (Asia Rev 1.0)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, captavene, captaven, captaven, captaven, deco32_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (UK Rev 1.4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, captavenu, captaven, captaven, captaven, deco32_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (US Rev 1.9)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, captavenuu, captaven, captaven, captaven, deco32_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (US Rev 1.6)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, captavenua, captaven, captaven, captaven, deco32_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (US Rev 1.4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, captavenj, captaven, captaven, captaven, deco32_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (Japan Rev 0.2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, captaven, 0, captaven, captaven, captaven_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (Asia Rev 1.4)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, captavena, captaven, captaven, captaven, captaven_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (Asia Rev 1.0)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, captavene, captaven, captaven, captaven, captaven_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (UK Rev 1.4)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, captavenu, captaven, captaven, captaven, captaven_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (US Rev 1.9)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, captavenuu, captaven, captaven, captaven, captaven_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (US Rev 1.6)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, captavenua, captaven, captaven, captaven, captaven_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (US Rev 1.4)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, captavenj, captaven, captaven, captaven, captaven_state, captaven, ROT0, "Data East Corporation", "Captain America and The Avengers (Japan Rev 0.2)", MACHINE_SUPPORTS_SAVE )
// DE-0396-0 PCB sets (Z80 for sound)
-GAME( 1993, fghthistu, fghthist, fghthistu, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (US ver 42-09, DE-0396-0 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthistu, fghthist, fghthistu, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (US ver 42-09, DE-0396-0 PCB)", MACHINE_SUPPORTS_SAVE )
// DE-0395-1 PCB sets (HuC6280 for sound)
-GAME( 1993, fghthist, 0 , fghthsta, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (World ver 43-09, DE-0395-1 PCB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, fghthistua, fghthist, fghthsta, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (US ver 42-06, DE-0395-1 PCB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, fghthistub, fghthist, fghthsta, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (US ver 42-05, DE-0395-1 PCB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, fghthistj, fghthist, fghthsta, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (Japan ver 41-07, DE-0395-1 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthist, 0 , fghthsta, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (World ver 43-09, DE-0395-1 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthistua, fghthist, fghthsta, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (US ver 42-06, DE-0395-1 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthistub, fghthist, fghthsta, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (US ver 42-05, DE-0395-1 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthistj, fghthist, fghthsta, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (Japan ver 41-07, DE-0395-1 PCB)", MACHINE_SUPPORTS_SAVE )
// DE-0380-2 PCB sets (HuC6280 for sound)
-GAME( 1993, fghthista, fghthist, fghthist, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (World ver 43-07, DE-0380-2 PCB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, fghthistb, fghthist, fghthist, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (World ver 43-05, DE-0380-2 PCB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, fghthistuc, fghthist, fghthist, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (US ver 42-03, DE-0380-2 PCB)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, fghthistja, fghthist, fghthist, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (Japan ver 41-05, DE-0380-2 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthista, fghthist, fghthist, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (World ver 43-07, DE-0380-2 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthistb, fghthist, fghthist, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (World ver 43-05, DE-0380-2 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthistuc, fghthist, fghthist, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (US ver 42-03, DE-0380-2 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthistja, fghthist, fghthist, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (Japan ver 41-05, DE-0380-2 PCB)", MACHINE_SUPPORTS_SAVE )
// DE-0380-1 PCB sets (HuC6280 for sound)
-GAME( 1993, fghthistjb, fghthist, fghthist, fghthist, deco32_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (Japan ver 41-04, DE-0380-1 PCB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, fghthistjb, fghthist, fghthist, fghthist, fghthist_state, fghthist, ROT0, "Data East Corporation", "Fighter's History (Japan ver 41-04, DE-0380-1 PCB)", MACHINE_SUPPORTS_SAVE )
// DE-0397-0 PCB sets (Z80 for sound)
-GAME( 1994, nslasher, 0, nslasher, nslasher, deco32_state, nslasher, ROT0, "Data East Corporation", "Night Slashers (Korea Rev 1.3, DE-0397-0 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAME( 1994, nslasherj, nslasher, nslasher, nslasher, deco32_state, nslasher, ROT0, "Data East Corporation", "Night Slashers (Japan Rev 1.2, DE-0397-0 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAME( 1994, nslashers, nslasher, nslasher, nslasher, deco32_state, nslasher, ROT0, "Data East Corporation", "Night Slashers (Over Sea Rev 1.2, DE-0397-0 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1994, nslasher, 0, nslasher, nslasher, nslasher_state, nslasher, ROT0, "Data East Corporation", "Night Slashers (Korea Rev 1.3, DE-0397-0 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1994, nslasherj, nslasher, nslasher, nslasher, nslasher_state, nslasher, ROT0, "Data East Corporation", "Night Slashers (Japan Rev 1.2, DE-0397-0 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1994, nslashers, nslasher, nslasher, nslasher, nslasher_state, nslasher, ROT0, "Data East Corporation", "Night Slashers (Over Sea Rev 1.2, DE-0397-0 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
// DE-0395-1 PCB sets (HuC6280 for sound)
-GAME( 1994, nslasheru, nslasher, nslasheru, nslasher, deco32_state, nslasher, ROT0, "Data East Corporation", "Night Slashers (US Rev 1.2, DE-0395-1 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1994, nslasheru, nslasher, nslasheru, nslasher, nslasher_state, nslasher, ROT0, "Data East Corporation", "Night Slashers (US Rev 1.2, DE-0395-1 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAME( 1994, tattass, 0, tattass, tattass, deco32_state, tattass, ROT0, "Data East Pinball", "Tattoo Assassins (US prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAME( 1994, tattassa, tattass, tattass, tattass, deco32_state, tattass, ROT0, "Data East Pinball", "Tattoo Assassins (Asia prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1994, tattass, 0, tattass, tattass, nslasher_state, tattass, ROT0, "Data East Pinball", "Tattoo Assassins (US prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1994, tattassa, tattass, tattass, tattass, nslasher_state, tattass, ROT0, "Data East Pinball", "Tattoo Assassins (Asia prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
// Dragon Gun / Lock 'n' Loaded have very different sprite hardware
GAME( 1993, dragngun, 0, dragngun, dragngun, dragngun_state, dragngun, ROT0, "Data East Corporation", "Dragon Gun (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/dietgo.cpp b/src/mame/drivers/dietgo.cpp
index 74eb95c36ff..8321a56ccd7 100644
--- a/src/mame/drivers/dietgo.cpp
+++ b/src/mame/drivers/dietgo.cpp
@@ -77,7 +77,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, dietgo_state )
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x130000, 0x130001) AM_NOP /* This board only has 1 oki chip */
- AM_RANGE(0x140000, 0x140001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot104", deco104_device, soundlatch_r)
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
@@ -259,14 +259,13 @@ static MACHINE_CONFIG_START( dietgo )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", XTAL_32_22MHz/9) /* verified on pcb */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) /* IRQ 2 */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.45)
diff --git a/src/mame/drivers/einstein.cpp b/src/mame/drivers/einstein.cpp
index 701253a1978..4a333745f5b 100644
--- a/src/mame/drivers/einstein.cpp
+++ b/src/mame/drivers/einstein.cpp
@@ -62,8 +62,6 @@
#include "machine/clock.h"
#include "machine/z80pio.h"
#include "sound/ay8910.h"
-
-#include "rendlay.h"
#include "softlist.h"
#include "speaker.h"
@@ -71,87 +69,6 @@
#define VERBOSE_KEYBOARD 0
#define VERBOSE_DISK 0
-/***************************************************************************
- 80 COLUMN DEVICE
-***************************************************************************/
-
-/* lower 3 bits of address define a 256-byte "row".
- * upper 8 bits define the offset in the row,
- * data bits define data to write
- */
-WRITE8_MEMBER(einstein_state::einstein_80col_ram_w)
-{
- m_crtc_ram[((offset & 0x07) << 8) | ((offset >> 8) & 0xff)] = data;
-}
-
-READ8_MEMBER(einstein_state::einstein_80col_ram_r)
-{
- return m_crtc_ram[((offset & 0x07) << 8) | ((offset >> 8) & 0xff)];
-}
-
-/* TODO: Verify implementation */
-/* From traces of the TK02 board character ROM is addressed by the 6845 as follows
- bit 0..2 ra0..ra2
- bit 3..10 data 0..7 from VRAM
- bit 11 ra3
- bit 12 jumper M004, this could be used to select two different character
- sets.
-*/
-MC6845_UPDATE_ROW( einstein_state::crtc_update_row )
-{
- const rgb_t *palette = m_palette->palette()->entry_list_raw();
- uint8_t *data = m_region_gfx1->base();
- uint8_t char_code, data_byte;
- int i, x;
-
- for (i = 0, x = 0; i < x_count; i++, x += 8)
- {
- char_code = m_crtc_ram[(ma + i) & 0x07ff];
- data_byte = data[(char_code << 3) + (ra & 0x07) + ((ra & 0x08) << 8)];
-
- bitmap.pix32(y, x + 0) = palette[tms9928a_device::PALETTE_SIZE + BIT(data_byte, 7)];
- bitmap.pix32(y, x + 1) = palette[tms9928a_device::PALETTE_SIZE + BIT(data_byte, 6)];
- bitmap.pix32(y, x + 2) = palette[tms9928a_device::PALETTE_SIZE + BIT(data_byte, 5)];
- bitmap.pix32(y, x + 3) = palette[tms9928a_device::PALETTE_SIZE + BIT(data_byte, 4)];
- bitmap.pix32(y, x + 4) = palette[tms9928a_device::PALETTE_SIZE + BIT(data_byte, 3)];
- bitmap.pix32(y, x + 5) = palette[tms9928a_device::PALETTE_SIZE + BIT(data_byte, 2)];
- bitmap.pix32(y, x + 6) = palette[tms9928a_device::PALETTE_SIZE + BIT(data_byte, 1)];
- bitmap.pix32(y, x + 7) = palette[tms9928a_device::PALETTE_SIZE + BIT(data_byte, 0)];
- }
-}
-
-WRITE_LINE_MEMBER(einstein_state::einstein_6845_de_changed)
-{
- m_de=state;
-}
-
-/* bit 0 - latched display enabled (DE) from 6845
- * bit 1 - Jumper M003 0 = 40 column mode (color monitor), 1 = 80 column mode (b/w monitor)
- * bit 2 - Jumper M002 0 = 50Hz, 1 = 60Hz
- * bit 3 - Jumper M001 0 = ???, 1=??? perminently wired high on both the boards I have seen - PHS.
- */
-READ8_MEMBER(einstein_state::einstein_80col_state_r)
-{
- uint8_t result = 0;
-
- result |= m_de;
- result |= m_80column_dips->read() & 0x06;
-
- return result;
-}
-
-/* int priority */
-/* keyboard int->ctc/adc->pio */
-static const z80_daisy_config einstein_daisy_chain[] =
-{
- { "keyboard_daisy" },
- { IC_I058 },
- { "adc_daisy" },
- { IC_I063 },
- { "fire_daisy" },
- { nullptr }
-};
-
/***************************************************************************
KEYBOARD
@@ -283,6 +200,18 @@ WRITE8_MEMBER(einstein_state::einstein_rom_w)
INTERRUPTS
***************************************************************************/
+/* int priority */
+/* keyboard int->ctc/adc->pio */
+static const z80_daisy_config einstein_daisy_chain[] =
+{
+ { "keyboard_daisy" },
+ { IC_I058 },
+ { "adc_daisy" },
+ { IC_I063 },
+ { "fire_daisy" },
+ { nullptr }
+};
+
WRITE_LINE_MEMBER(einstein_state::write_centronics_busy)
{
m_centronics_busy = state;
@@ -382,13 +311,13 @@ WRITE8_MEMBER(einstein_state::einstein_fire_int_w)
void einstein_state::machine_start()
{
+ // setup expansion slot
+ m_pipe->set_program_space(&m_maincpu->space(AS_PROGRAM));
+ m_pipe->set_io_space(&m_maincpu->space(AS_IO));
}
void einstein_state::machine_reset()
{
- //device_t *floppy;
- //uint8_t config = m_config->read();
-
/* initialize memory mapping */
m_bank2->set_base(m_ram->pointer());
m_bank3->set_base(m_ram->pointer() + 0x8000);
@@ -399,57 +328,6 @@ void einstein_state::machine_reset()
to be set to 1, which causes all these to be DISABLED */
m_interrupt = 0;
m_interrupt_mask = 0;
-
- /* configure floppy drives */
-/* floppy_type_t type_80 = FLOPPY_STANDARD_5_25_DSHD;
- floppy_type_t type_40 = FLOPPY_STANDARD_5_25_SSDD_40;
- floppy = machine().device("floppy0");
- floppy_drive_set_geometry(floppy, config & 0x01 ? type_80 : type_40);
- floppy = machine().device("floppy1");
- floppy_drive_set_geometry(floppy, config & 0x02 ? type_80 : type_40);
- floppy = machine().device("floppy2");
- floppy_drive_set_geometry(floppy, config & 0x04 ? type_80 : type_40);
- floppy = machine().device("floppy3");
- floppy_drive_set_geometry(floppy, config & 0x08 ? type_80 : type_40);*/
-}
-
-MACHINE_RESET_MEMBER(einstein_state,einstein2)
-{
- /* call standard initialization first */
- einstein_state::machine_reset();
-
- /* 80 column card palette */
- m_palette->set_pen_color(tms9928a_device::PALETTE_SIZE, rgb_t::black());
- m_palette->set_pen_color(tms9928a_device::PALETTE_SIZE + 1, rgb_t(0, 224, 0));
-}
-
-MACHINE_START_MEMBER(einstein_state,einstein2)
-{
- m_crtc_ram = std::make_unique<uint8_t[]>(2048);
- memset(m_crtc_ram.get(), 0, sizeof(uint8_t) * 2048);
- einstein_state::machine_start();
-}
-
-
-/***************************************************************************
- VIDEO EMULATION
-***************************************************************************/
-
-uint32_t einstein_state::screen_update_einstein2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- if (&screen == m_color_screen)
- {
- bitmap_rgb32 &src = m_tms9929a->get_bitmap();
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
- bitmap.pix32(y, x) = src.pix32(y, x);
- }
- else if (&screen == m_crtc_screen)
- m_mc6845->screen_update( screen, bitmap, cliprect);
- else
- fatalerror("Unknown screen '%s'\n", screen.tag());
-
- return 0;
}
@@ -492,14 +370,6 @@ static ADDRESS_MAP_START( einstein_io, AS_IO, 8, einstein_state )
#endif
ADDRESS_MAP_END
-static ADDRESS_MAP_START( einstein2_io, AS_IO, 8, einstein_state )
- AM_IMPORT_FROM(einstein_io)
- AM_RANGE(0x40, 0x47) AM_SELECT(0xff00) AM_READWRITE(einstein_80col_ram_r, einstein_80col_ram_w)
- AM_RANGE(0x48, 0x48) AM_MIRROR(0xff00) AM_DEVWRITE("crtc", mc6845_device, address_w)
- AM_RANGE(0x49, 0x49) AM_MIRROR(0xff00) AM_DEVWRITE("crtc", mc6845_device, register_w)
- AM_RANGE(0x4c, 0x4c) AM_MIRROR(0xff00) AM_READ(einstein_80col_state_r)
-ADDRESS_MAP_END
-
/***************************************************************************
INPUT PORTS
@@ -629,43 +499,11 @@ static INPUT_PORTS_START( einstein )
PORT_CONFSETTING(0x08, "Double sided")
INPUT_PORTS_END
-static INPUT_PORTS_START( einstein_80col )
- PORT_INCLUDE(einstein)
-
- /* dip switches on the 80 column card */
- PORT_START("80column_dips")
- PORT_DIPNAME(0x02, 0x00, "Startup mode")
- PORT_DIPSETTING(0x00, "40 column")
- PORT_DIPSETTING(0x02, "80 column")
- PORT_DIPNAME(0x04, 0x00, "50/60Hz")
- PORT_DIPSETTING(0x00, "50Hz")
- PORT_DIPSETTING(0x04, "60Hz")
-INPUT_PORTS_END
-
/***************************************************************************
MACHINE DRIVERS
***************************************************************************/
-/* F4 Character Displayer */
-static const gfx_layout einstei2_charlayout =
-{
- 8, 10, /* 8 x 10 characters */
- 256, /* 256*2 characters */
- 1, /* 1 bits per pixel */
- { 0 },
- /* x offsets */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- /* y offsets */
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 0x800*8, 0x801*8 },
- 8*8
-};
-
-static GFXDECODE_START( einstei2 )
- GFXDECODE_ENTRY( "gfx1", 0x0000, einstei2_charlayout, 16, 1 )
- GFXDECODE_ENTRY( "gfx1", 0x1000, einstei2_charlayout, 16, 1 )
-GFXDECODE_END
-
static SLOT_INTERFACE_START( einstein_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
SLOT_INTERFACE_END
@@ -705,9 +543,9 @@ static MACHINE_CONFIG_START( einstein )
/* video hardware */
MCFG_DEVICE_ADD( "tms9929a", TMS9929A, XTAL_10_738635MHz / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000) /* 16k RAM, provided by IC i040 and i041 */
- MCFG_TMS9928A_SET_SCREEN( "screen" )
- MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
- MCFG_SCREEN_UPDATE_DEVICE( "tms9929a", tms9929a_device, screen_update )
+ MCFG_TMS9928A_SET_SCREEN("screen")
+ MCFG_TMS9928A_SCREEN_ADD_PAL("screen")
+ MCFG_SCREEN_UPDATE_DEVICE("tms9929a", tms9929a_device, screen_update)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -742,36 +580,9 @@ static MACHINE_CONFIG_START( einstein )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("64K")
-MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_DERIVED( einstei2, einstein )
-
- MCFG_CPU_MODIFY(IC_I001)
- MCFG_CPU_IO_MAP(einstein2_io)
-
- MCFG_MACHINE_START_OVERRIDE(einstein_state,einstein2)
- MCFG_MACHINE_RESET_OVERRIDE(einstein_state,einstein2)
-
- /* video hardware */
- MCFG_DEFAULT_LAYOUT(layout_dualhsxs)
-
- MCFG_SCREEN_ADD("80column", RASTER)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(640, 400)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_UPDATE_DRIVER(einstein_state, screen_update_einstein2)
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", einstei2)
-
- /* 2 additional colors for the 80 column screen */
- MCFG_PALETTE_ADD("palette", tms9928a_device::PALETTE_SIZE + 2)
-
- MCFG_MC6845_ADD("crtc", MC6845, "80column", XTAL_X002 / 4)
- MCFG_MC6845_SHOW_BORDER_AREA(false)
- MCFG_MC6845_CHAR_WIDTH(8)
- MCFG_MC6845_UPDATE_ROW_CB(einstein_state, crtc_update_row)
- MCFG_MC6845_OUT_DE_CB(WRITELINE(einstein_state, einstein_6845_de_changed))
+ // tatung pipe connector
+ MCFG_TATUNG_PIPE_ADD("pipe")
MACHINE_CONFIG_END
@@ -796,32 +607,16 @@ ROM_START( einstein )
ROM_FILL(0x4000, 0x4000, 0xff)
ROM_END
-ROM_START( einstei2 )
- ROM_REGION(0x8000, "bios", 0)
- /* i023 */
- ROM_SYSTEM_BIOS(0, "mos12", "MOS 1.2")
- ROMX_LOAD("mos12.i023", 0, 0x2000, CRC(ec134953) SHA1(a02125d8ebcda48aa784adbb42a8b2d7ef3a4b77), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "mos121", "MOS 1.21")
- ROMX_LOAD("mos121.i023", 0, 0x2000, CRC(a746eeb6) SHA1(f75aaaa777d0fd92225acba291f6bf428b341d3e), ROM_BIOS(2))
- ROM_RELOAD(0x2000, 0x2000)
- /* i024 */
- ROM_FILL(0x4000, 0x4000, 0xff)
-
- /* character rom from 80 column card */
- ROM_REGION(0x2000, "gfx1", 0)
- ROM_LOAD("tk02-v1.00.rom", 0, 0x2000, CRC(ad3c4346) SHA1(cd57e630371b4d0314e3f15693753fb195c7257d))
-ROM_END
-
ROM_START( einst256 )
ROM_REGION(0x8000, "bios", 0)
ROM_LOAD("tc256.rom", 0x0000, 0x4000, CRC(ef8dad88) SHA1(eb2102d3bef572db7161c26a7c68a5fcf457b4d0) )
ROM_END
+
/***************************************************************************
GAME DRIVERS
***************************************************************************/
-// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
-COMP( 1984, einstein, 0, 0, einstein, einstein, einstein_state, 0, "Tatung", "Einstein TC-01", 0 )
-COMP( 1984, einstei2, einstein, 0, einstei2, einstein_80col, einstein_state, 0, "Tatung", "Einstein TC-01 + 80 column device", 0 )
-COMP( 1984, einst256, 0, 0, einstein, einstein, einstein_state, 0, "Tatung", "Einstein 256", MACHINE_NOT_WORKING )
+// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
+COMP( 1984, einstein, 0, 0, einstein, einstein, einstein_state, 0, "Tatung", "Einstein TC-01", 0 )
+COMP( 1984, einst256, 0, 0, einstein, einstein, einstein_state, 0, "Tatung", "Einstein 256", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/freekick.cpp b/src/mame/drivers/freekick.cpp
index 70fe32113ff..54583850a29 100644
--- a/src/mame/drivers/freekick.cpp
+++ b/src/mame/drivers/freekick.cpp
@@ -927,32 +927,32 @@ ROM_START( pbillrd )
ROM_LOAD( "82s129.3c", 0x0500, 0x0100, CRC(cc1657e5) SHA1(358f20dce376c2389009f9673ce38b297af863f6) )
ROM_END
-ROM_START( pbillrds ) /* Encrytped with a Sega MC-8123 (317-0030) CPU module */
+ROM_START( pbillrds ) /* Encrytped with a Sega MC-8123 (317-0030) CPU module, Sega ID# 836-6304 PERFECT BILLIARD */
ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 Code */
- ROM_LOAD( "10626.8n", 0x0000, 0x4000, CRC(51d725e6) SHA1(d7007c983530780e7fa3686cb7a6d7c382c802fa) ) /* encrypted */
- ROM_LOAD( "10625.8r", 0x4000, 0x8000, CRC(8977c724) SHA1(f00835a04dc6fa7d8c1e382dace515f2aa7d6f44) ) /* encrypted */
- ROM_LOAD( "10627.10n", 0xc000, 0x4000, CRC(2335e6dd) SHA1(82352b6f4abea88aad3a96ca63cccccb6e278f48) ) /* encrypted */
+ ROM_LOAD( "epr-10626.8n", 0x0000, 0x4000, CRC(51d725e6) SHA1(d7007c983530780e7fa3686cb7a6d7c382c802fa) ) /* encrypted */
+ ROM_LOAD( "epr-10625.8r", 0x4000, 0x8000, CRC(8977c724) SHA1(f00835a04dc6fa7d8c1e382dace515f2aa7d6f44) ) /* encrypted */
+ ROM_LOAD( "epr-10627.10n", 0xc000, 0x4000, CRC(2335e6dd) SHA1(82352b6f4abea88aad3a96ca63cccccb6e278f48) ) /* encrypted */
ROM_REGION( 0x2000, "maincpu:key", 0 ) /* MC8123 key */
ROM_LOAD( "317-0030.key", 0x0000, 0x2000, CRC(9223f06d) SHA1(51a22a4c80fe273526bde68918c13c6476cec383) )
ROM_REGION( 0xc000, "gfx1", 0 ) /* GFX */
- ROM_LOAD( "10622.3h", 0x000000, 0x04000, CRC(23b864ac) SHA1(5a13ad6f2278761967269eed8c07077293c921d6) )
- ROM_LOAD( "10623.3h", 0x004000, 0x04000, CRC(3dbfb790) SHA1(81a2645b7b3addf8f5b83043c967647cea476002) )
- ROM_LOAD( "10624.3g", 0x008000, 0x04000, CRC(b80032a9) SHA1(20096bdae1aad8913d8d7b1045912ea5ae7fce6f) )
+ ROM_LOAD( "epr-10622.3h", 0x000000, 0x04000, CRC(23b864ac) SHA1(5a13ad6f2278761967269eed8c07077293c921d6) ) /* these 3 roms had a green strip down the middle of the label */
+ ROM_LOAD( "epr-10623.3h", 0x004000, 0x04000, CRC(3dbfb790) SHA1(81a2645b7b3addf8f5b83043c967647cea476002) ) /* these 3 roms had a green strip down the middle of the label */
+ ROM_LOAD( "epr-10624.3g", 0x008000, 0x04000, CRC(b80032a9) SHA1(20096bdae1aad8913d8d7b1045912ea5ae7fce6f) ) /* these 3 roms had a green strip down the middle of the label */
ROM_REGION( 0x6000, "gfx2", 0 ) /* GFX */
- ROM_LOAD( "10619.3r", 0x000000, 0x02000, CRC(3296b9d9) SHA1(51393306f74394de96c4097b6244e8eb36114dac) )
- ROM_LOAD( "10621.3m", 0x002000, 0x02000, CRC(3dca8e4b) SHA1(ca0416d8faba0bb5e6b8c0a8fc227b57caa75f71) )
- ROM_LOAD( "10620.3n", 0x004000, 0x02000, CRC(ee76b079) SHA1(99abe2c5b1889d20bc3f5720b168690e3979fb2f) )
+ ROM_LOAD( "epr-10619.3r", 0x000000, 0x02000, CRC(3296b9d9) SHA1(51393306f74394de96c4097b6244e8eb36114dac) )
+ ROM_LOAD( "epr-10621.3m", 0x002000, 0x02000, CRC(3dca8e4b) SHA1(ca0416d8faba0bb5e6b8c0a8fc227b57caa75f71) )
+ ROM_LOAD( "epr-10620.3n", 0x004000, 0x02000, CRC(ee76b079) SHA1(99abe2c5b1889d20bc3f5720b168690e3979fb2f) )
ROM_REGION( 0x0600, "proms", 0 )
- ROM_LOAD( "82s129.3a", 0x0000, 0x0100, CRC(44802169) SHA1(f181d80185e0f87ee906d2b40e3a5deb6f563aa2) )
- ROM_LOAD( "82s129.4d", 0x0100, 0x0100, CRC(69ca07cc) SHA1(38ab08174633b53d70a38aacb40059a25cf12069) )
- ROM_LOAD( "82s129.4a", 0x0200, 0x0100, CRC(145f950a) SHA1(b007d0c1cc9545e0e241b39b79a48593d457f826) )
- ROM_LOAD( "82s129.3d", 0x0300, 0x0100, CRC(43d24e17) SHA1(de5c9391574781dcd8f244794010e8eddffa1c1e) )
- ROM_LOAD( "82s129.3b", 0x0400, 0x0100, CRC(7fdc872c) SHA1(98572560aa524490489d4202dba292a5af9f15e7) )
- ROM_LOAD( "82s129.3c", 0x0500, 0x0100, CRC(cc1657e5) SHA1(358f20dce376c2389009f9673ce38b297af863f6) )
+ ROM_LOAD( "pr10628.3a", 0x0000, 0x0100, CRC(44802169) SHA1(f181d80185e0f87ee906d2b40e3a5deb6f563aa2) ) /* 82s129 or compatible BPROM */
+ ROM_LOAD( "pr10633.4d", 0x0100, 0x0100, CRC(69ca07cc) SHA1(38ab08174633b53d70a38aacb40059a25cf12069) ) /* 82s129 or compatible BPROM */
+ ROM_LOAD( "pr10632.4a", 0x0200, 0x0100, CRC(145f950a) SHA1(b007d0c1cc9545e0e241b39b79a48593d457f826) ) /* 82s129 or compatible BPROM */
+ ROM_LOAD( "pr10631.3d", 0x0300, 0x0100, CRC(43d24e17) SHA1(de5c9391574781dcd8f244794010e8eddffa1c1e) ) /* 82s129 or compatible BPROM */
+ ROM_LOAD( "pr10629.3b", 0x0400, 0x0100, CRC(7fdc872c) SHA1(98572560aa524490489d4202dba292a5af9f15e7) ) /* 82s129 or compatible BPROM */
+ ROM_LOAD( "pr10630.3c", 0x0500, 0x0100, CRC(cc1657e5) SHA1(358f20dce376c2389009f9673ce38b297af863f6) ) /* 82s129 or compatible BPROM */
ROM_END
ROM_START( pbillrdsa ) /* all ROMs were HN4827128G-25, except 17, HN27256G-25, CPU module marked 317-5008, but seems to act the same as above */
diff --git a/src/mame/drivers/funkyjet.cpp b/src/mame/drivers/funkyjet.cpp
index 1d9caebcd15..c453650e867 100644
--- a/src/mame/drivers/funkyjet.cpp
+++ b/src/mame/drivers/funkyjet.cpp
@@ -155,7 +155,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, funkyjet_state )
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x130000, 0x130001) AM_NOP /* This board only has 1 oki chip */
- AM_RANGE(0x140000, 0x140001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot", deco146_device, soundlatch_r)
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
@@ -334,6 +334,7 @@ static MACHINE_CONFIG_START( funkyjet )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_INTERLEAVE
@@ -361,8 +362,6 @@ static MACHINE_CONFIG_START( funkyjet )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", XTAL_32_22MHz/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) // IRQ2
MCFG_SOUND_ROUTE(0, "lspeaker", 0.45)
diff --git a/src/mame/drivers/ibmpcjr.cpp b/src/mame/drivers/ibmpcjr.cpp
index ac5a3b14803..692db0c95bd 100644
--- a/src/mame/drivers/ibmpcjr.cpp
+++ b/src/mame/drivers/ibmpcjr.cpp
@@ -692,7 +692,10 @@ MACHINE_CONFIG_END
ROM_START( ibmpcjr )
ROM_REGION(0x10000,"bios", 0)
- ROM_LOAD("bios.rom", 0x0000, 0x10000,CRC(31e3a7aa) SHA1(1f5f7013f18c08ff50d7942e76c4fbd782412414))
+ ROM_SYSTEM_BIOS( 0, "default", "Default" )
+ ROMX_LOAD("bios.rom", 0x0000, 0x10000,CRC(31e3a7aa) SHA1(1f5f7013f18c08ff50d7942e76c4fbd782412414), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS( 1, "quiksilver", "Quicksilver" ) // Alternate bios to boot up faster (Synectics)
+ ROMX_LOAD("quiksilv.rom", 0x0000, 0x10000, CRC(86aaa1c4) SHA1(b3d7e8ce5de17441891e0b71e5261ed01a169dc1), ROM_BIOS(2))
ROM_REGION(0x08100,"gfx1", 0)
ROM_LOAD("cga.chr", 0x00000, 0x01000, CRC(42009069) SHA1(ed08559ce2d7f97f68b9f540bddad5b6295294dd)) // from an unknown clone cga card
diff --git a/src/mame/drivers/isbc8030.cpp b/src/mame/drivers/isbc8030.cpp
index 82a817acef7..6ed54209e78 100644
--- a/src/mame/drivers/isbc8030.cpp
+++ b/src/mame/drivers/isbc8030.cpp
@@ -35,7 +35,6 @@ X Examine and modify CPU registers
#include "machine/pit8253.h"
#include "machine/i8255.h"
#include "machine/i8251.h"
-#include "machine/clock.h"
#include "bus/rs232/rs232.h"
#define I8259A_TAG "pic8259"
@@ -56,15 +55,8 @@ public:
, m_pic(*this, I8259A_TAG)
, m_pit(*this, I8253_TAG)
, m_rs232(*this, RS232_TAG)
- , m_usart_baud_rate(*this, I8251A_BAUD_TAG)
- , m_usart_divide_counter(0)
- , m_usart_clock_state(0)
{ }
- DECLARE_WRITE_LINE_MEMBER( usart_clock_tick );
-
- DECLARE_WRITE_LINE_MEMBER( isbc8030_tmr2_w );
-
private:
required_device<cpu_device> m_maincpu;
required_device<i8251_device> m_usart;
@@ -72,10 +64,6 @@ private:
required_device<pic8259_device> m_pic;
required_device<pit8253_device> m_pit;
required_device<rs232_port_device> m_rs232;
- required_ioport m_usart_baud_rate;
-
- uint8_t m_usart_divide_counter;
- uint8_t m_usart_clock_state;
};
static ADDRESS_MAP_START(isbc8030_mem, AS_PROGRAM, 8, isbc8030_state)
@@ -95,46 +83,8 @@ static ADDRESS_MAP_START(isbc8030_io, AS_IO, 8, isbc8030_state)
ADDRESS_MAP_END
static INPUT_PORTS_START( isbc8030 )
- PORT_START(I8251A_BAUD_TAG)
- PORT_DIPNAME( 0x3f, 0x01, "i8251 Baud Rate" )
- PORT_DIPSETTING( 0x01, "4800")
- PORT_DIPSETTING( 0x02, "2400")
- PORT_DIPSETTING( 0x04, "1200")
- PORT_DIPSETTING( 0x08, "600")
- PORT_DIPSETTING( 0x10, "300")
- PORT_DIPSETTING( 0x20, "150")
- PORT_DIPSETTING( 0x40, "75")
INPUT_PORTS_END
-WRITE_LINE_MEMBER( isbc8030_state::usart_clock_tick )
-{
- uint8_t old_counter = m_usart_divide_counter;
- m_usart_divide_counter++;
-
- uint8_t transition = (old_counter ^ m_usart_divide_counter) & m_usart_baud_rate->read();
- if (transition)
- {
- m_usart->write_txc(m_usart_clock_state);
- m_usart->write_rxc(m_usart_clock_state);
- m_usart_clock_state ^= 1;
- }
-}
-
-WRITE_LINE_MEMBER( isbc8030_state::isbc8030_tmr2_w )
-{
- m_usart->write_rxc(state);
- m_usart->write_txc(state);
-}
-
-static DEVICE_INPUT_DEFAULTS_START( terminal ) // set up terminal to default to 4800
- DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_4800 )
- DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_4800 )
- DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
- DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 )
- DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
- DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
-DEVICE_INPUT_DEFAULTS_END
-
static MACHINE_CONFIG_START( isbc8030 )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I8085A, XTAL_22_1184MHz / 4)
@@ -149,7 +99,8 @@ static MACHINE_CONFIG_START( isbc8030 )
MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8259A_TAG, pic8259_device, ir0_w))
MCFG_PIT8253_CLK1(XTAL_22_1184MHz / 18)
MCFG_PIT8253_CLK2(XTAL_22_1184MHz / 18)
- MCFG_PIT8253_OUT2_HANDLER(WRITELINE(isbc8030_state, isbc8030_tmr2_w))
+ MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(I8251A_TAG, i8251_device, write_txc))
MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd))
@@ -162,10 +113,6 @@ static MACHINE_CONFIG_START( isbc8030 )
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_dsr))
MCFG_RS232_CTS_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_cts))
- MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("terminal", terminal)
-
- MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL_18_432MHz/60)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(isbc8030_state, usart_clock_tick))
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/k1003.cpp b/src/mame/drivers/k1003.cpp
index d8dd1baabf6..653973acecc 100644
--- a/src/mame/drivers/k1003.cpp
+++ b/src/mame/drivers/k1003.cpp
@@ -50,14 +50,16 @@ class k1003_state : public driver_device
{
public:
k1003_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag) ,
- m_maincpu(*this, "maincpu") { }
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu") { }
DECLARE_READ8_MEMBER(port2_r);
DECLARE_READ8_MEMBER(key_r);
DECLARE_WRITE8_MEMBER(disp_1_w);
DECLARE_WRITE8_MEMBER(disp_2_w);
DECLARE_WRITE8_MEMBER(disp_w);
+
+private:
uint8_t m_disp_1;
uint8_t m_disp_2;
uint8_t bit_to_dec(uint8_t val);
@@ -140,7 +142,6 @@ static MACHINE_CONFIG_START( k1003 )
MCFG_CPU_PROGRAM_MAP(k1003_mem)
MCFG_CPU_IO_MAP(k1003_io)
-
/* video hardware */
MCFG_DEFAULT_LAYOUT(layout_k1003)
MACHINE_CONFIG_END
@@ -189,6 +190,23 @@ ROM_START( k1003 )
ROM_LOAD( "k1003.26", 0x3900, 0x0100, CRC(fc949804) SHA1(088b63b7f8704efb6867be899b81d64a294af6be))
ROM_LOAD( "k1003.27", 0x3a00, 0x0100, CRC(ddcdd065) SHA1(e29c6f2dd1e4da125d150e28cf51f8c558ec9ee5))
// 0x3b00 - missing on board - returning 0xff
+
+ ROM_REGION( 0x1000, "user1", 0 )
+ // k1003-extension
+ ROM_LOAD( "040.bin", 0x0000, 0x0100, CRC(06865678) SHA1(91a4f0a32e93d315d4f78a732472c08a380205fc) )
+ ROM_LOAD( "041.bin", 0x0000, 0x0100, CRC(dcd776b3) SHA1(cf8082d31be9bea1e9672d0b92006f14719ba7a6) )
+ ROM_LOAD( "042.bin", 0x0000, 0x0100, CRC(e74aca0d) SHA1(f515b52862f0f31551ec008bf6f27c5fdf78c32a) )
+ ROM_LOAD( "043.bin", 0x0000, 0x0100, CRC(770820e5) SHA1(c34b6a7bde43758c7c3c7041ce1dee06456fe5c4) )
+ ROM_LOAD( "044.bin", 0x0000, 0x0100, CRC(82bd3f5a) SHA1(c4290507de8d295c0b7f04ac2179365b8f73d7c7) )
+ ROM_LOAD( "045.bin", 0x0000, 0x0100, CRC(66c85afb) SHA1(937828a6aee46cbcad86bb1776deb7f9b1dc69ff) )
+ // k1003-statistics
+ ROM_LOAD( "435.bin", 0x0000, 0x0100, CRC(31203b34) SHA1(5638c45e23b279c5c8960d5d7f2b16acb2e47ed2) )
+ ROM_LOAD( "436.bin", 0x0000, 0x0100, CRC(dd2d4eb5) SHA1(c436419ef71cdf4dfc4d118301749f746f9cd6e5) )
+ ROM_LOAD( "437.bin", 0x0000, 0x0100, CRC(00433159) SHA1(69fab3b875c285e6abcab43b0ba6ef916d0a1484) )
+ ROM_LOAD( "439.bin", 0x0000, 0x0100, CRC(3f5be050) SHA1(f2730078a8346e8670b632048f358a47ff57941e) )
+ ROM_LOAD( "440.bin", 0x0000, 0x0100, CRC(856685fa) SHA1(dbd33194a4eb9ed037f8129bf8b9d4628aab8151) )
+ ROM_LOAD( "441.bin", 0x0000, 0x0100, CRC(257df6a3) SHA1(65c0429b0e352434b7b661e63cacfe74ac1d1ac9) )
+ ROM_LOAD( "442.bin", 0x0000, 0x0100, CRC(d037e0bb) SHA1(5ae8ad62673bd732a05232645c523206024f9afb) )
ROM_END
/* Driver */
diff --git a/src/mame/drivers/kaypro.cpp b/src/mame/drivers/kaypro.cpp
index 693c4452941..af9252c05c9 100644
--- a/src/mame/drivers/kaypro.cpp
+++ b/src/mame/drivers/kaypro.cpp
@@ -43,13 +43,18 @@
#include "emu.h"
#include "includes/kaypro.h"
-
#include "machine/kay_kbd.h"
+
+#include "bus/rs232/rs232.h"
+#include "machine/clock.h"
+#include "machine/com8116.h"
+#include "machine/z80sio.h"
#include "formats/kaypro_dsk.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
+
READ8_MEMBER( kaypro_state::kaypro2x_87_r ) { return 0x7f; } /* to bypass unemulated HD controller */
/***********************************************************
@@ -68,7 +73,7 @@ static ADDRESS_MAP_START( kayproii_io, AS_IO, 8, kaypro_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00, 0x03) AM_DEVWRITE("brg", com8116_device, stt_w)
- AM_RANGE(0x04, 0x07) AM_READWRITE(kaypro_sio_r, kaypro_sio_w)
+ AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("sio", z80sio_device, cd_ba_r, cd_ba_w)
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("z80pio_g", z80pio_device, read_alt, write_alt)
AM_RANGE(0x0c, 0x0f) AM_DEVWRITE("brg", com8116_device, str_w)
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("fdc", fd1793_device, read, write)
@@ -79,9 +84,9 @@ static ADDRESS_MAP_START( kaypro2x_io, AS_IO, 8, kaypro_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00, 0x03) AM_DEVWRITE("brg", com8116_device, str_w)
- AM_RANGE(0x04, 0x07) AM_READWRITE(kaypro_sio_r, kaypro_sio_w)
+ AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("sio_1", z80sio_device, cd_ba_r, cd_ba_w)
AM_RANGE(0x08, 0x0b) AM_DEVWRITE("brg", com8116_device, stt_w)
- AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("z80sio_2x", z80sio0_device, ba_cd_r, ba_cd_w)
+ AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("sio_2", z80sio_device, ba_cd_r, ba_cd_w)
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("fdc", fd1793_device, read, write)
AM_RANGE(0x14, 0x17) AM_READWRITE(kaypro2x_system_port_r,kaypro2x_system_port_w)
AM_RANGE(0x18, 0x1b) AM_DEVWRITE("cent_data_out", output_latch_device, write)
@@ -105,6 +110,11 @@ static ADDRESS_MAP_START( kaypro2x_io, AS_IO, 8, kaypro_state )
ADDRESS_MAP_END
+static INPUT_PORTS_START(kaypro)
+ // everything comes from the keyboard device
+INPUT_PORTS_END
+
+
/***************************************************************
F4 CHARACTER DISPLAYER
@@ -152,7 +162,7 @@ GFXDECODE_END
static const z80_daisy_config kayproii_daisy_chain[] =
{
- { "z80sio" }, /* sio */
+ { "sio" }, /* sio */
{ "z80pio_s" }, /* System pio */
{ "z80pio_g" }, /* General purpose pio */
{ nullptr }
@@ -160,20 +170,13 @@ static const z80_daisy_config kayproii_daisy_chain[] =
static const z80_daisy_config kaypro2x_daisy_chain[] =
{
- { "z80sio" }, /* sio for RS232C and keyboard */
- { "z80sio_2x" }, /* sio for serial printer and inbuilt modem */
+ { "sio_1" }, /* sio for RS232C and keyboard */
+ { "sio_2" }, /* sio for serial printer and inbuilt modem */
{ nullptr }
};
-//static WRITE_LINE_DEVICE_HANDLER( rx_tx_w )
-//{
-// downcast<z80sio_device *>(device)->rx_clock_in();
-// downcast<z80sio_device *>(device)->tx_clock_in();
-//}
-
-
/***********************************************************
@@ -199,7 +202,6 @@ static MACHINE_CONFIG_START( kayproii )
MCFG_CPU_ADD("maincpu", Z80, XTAL_20MHz / 8)
MCFG_CPU_PROGRAM_MAP(kaypro_map)
MCFG_CPU_IO_MAP(kayproii_io)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", kaypro_state, kay_kbd_interrupt) /* this doesn't actually exist, it is to run the keyboard */
MCFG_Z80_DAISY_CHAIN(kayproii_daisy_chain)
MCFG_MACHINE_START_OVERRIDE(kaypro_state, kayproii )
@@ -226,12 +228,25 @@ static MACHINE_CONFIG_START( kayproii )
/* devices */
MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro, "com,cpm", 3)
+ MCFG_DEVICE_ADD("kbd", KAYPRO_10_KEYBOARD, 0)
+ MCFG_KAYPRO10KBD_RXD_CB(DEVWRITELINE("sio", z80sio_device, rxb_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("sio", z80sio_device, syncb_w))
+
MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(kaypro_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+ MCFG_RS232_PORT_ADD("serial", default_rs232_devices, nullptr)
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("sio", z80sio_device, synca_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("sio", z80sio_device, dcda_w))
+
MCFG_DEVICE_ADD("brg", COM8116, XTAL_5_0688MHz) // WD1943, SMC8116
+ MCFG_COM8116_FR_HANDLER(DEVWRITELINE("sio", z80sio_device, rxca_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("sio", z80sio_device, txca_w))
+ MCFG_COM8116_FT_HANDLER(DEVWRITELINE("sio", z80sio_device, rxtxcb_w))
MCFG_DEVICE_ADD("z80pio_g", Z80PIO, XTAL_20MHz / 8)
MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
@@ -242,8 +257,12 @@ static MACHINE_CONFIG_START( kayproii )
MCFG_Z80PIO_IN_PA_CB(READ8(kaypro_state, pio_system_r))
MCFG_Z80PIO_OUT_PA_CB(WRITE8(kaypro_state, kayproii_pio_system_w))
- MCFG_DEVICE_ADD("z80sio", Z80SIO0, XTAL_20MHz / 8)
- MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_DEVICE_ADD("sio", Z80SIO, XTAL_20MHz / 8)
+ MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("serial", rs232_port_device, write_txd))
+ MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("serial", rs232_port_device, write_rts))
+ MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("serial", rs232_port_device, write_dtr))
+ MCFG_Z80SIO_OUT_TXDB_CB(DEVWRITELINE("kbd", kaypro_10_keyboard_device, txd_w))
MCFG_FD1793_ADD("fdc", XTAL_20MHz / 20)
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(kaypro_state, fdc_intrq_w))
@@ -269,7 +288,6 @@ static MACHINE_CONFIG_START( kaypro2x )
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz / 4)
MCFG_CPU_PROGRAM_MAP(kaypro_map)
MCFG_CPU_IO_MAP(kaypro2x_io)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", kaypro_state, kay_kbd_interrupt)
MCFG_Z80_DAISY_CHAIN(kaypro2x_daisy_chain)
MCFG_MACHINE_RESET_OVERRIDE(kaypro_state, kaypro )
@@ -300,18 +318,46 @@ static MACHINE_CONFIG_START( kaypro2x )
MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro, "com,cpm", 3)
+ MCFG_DEVICE_ADD("kbd", KAYPRO_10_KEYBOARD, 0)
+ MCFG_KAYPRO10KBD_RXD_CB(DEVWRITELINE("sio_1", z80sio_device, rxb_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("sio_1", z80sio_device, syncb_w))
+
+ MCFG_CLOCK_ADD("kbdtxrxc", 4800)
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("sio_1", z80sio_device, rxtxcb_w))
+
MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(kaypro_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
- MCFG_DEVICE_ADD("z80sio", Z80SIO0, XTAL_16MHz / 4)
- MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_RS232_PORT_ADD("modem", default_rs232_devices, nullptr)
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio_1", z80sio_device, rxa_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("sio_1", z80sio_device, synca_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio_1", z80sio_device, ctsa_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("sio_1", z80sio_device, dcda_w))
- MCFG_DEVICE_ADD("z80sio_2x", Z80SIO0, XTAL_16MHz / 4) /* extra sio for modem and printer */
- MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_RS232_PORT_ADD("serprn", default_rs232_devices, nullptr)
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio_2", z80sio_device, rxa_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("sio_2", z80sio_device, synca_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio_2", z80sio_device, ctsa_w))
+
+ MCFG_DEVICE_ADD("sio_1", Z80SIO, XTAL_16MHz / 4)
+ MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // FIXME: use a combiner
+ MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("modem", rs232_port_device, write_txd))
+ MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("modem", rs232_port_device, write_rts))
+ MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("modem", rs232_port_device, write_dtr))
+ MCFG_Z80SIO_OUT_TXDB_CB(DEVWRITELINE("kbd", kaypro_10_keyboard_device, txd_w))
+
+ MCFG_DEVICE_ADD("sio_2", Z80SIO, XTAL_16MHz / 4) /* extra sio for modem and printer */
+ MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // FIXME: use a combiner
+ MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("serprn", rs232_port_device, write_txd))
MCFG_DEVICE_ADD("brg", COM8116, XTAL_5_0688MHz) // WD1943, SMC8116
+ MCFG_COM8116_FR_HANDLER(DEVWRITELINE("sio_1", z80sio_device, rxca_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("sio_1", z80sio_device, txca_w))
+ MCFG_COM8116_FT_HANDLER(DEVWRITELINE("sio_2", z80sio_device, rxca_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("sio_2", z80sio_device, txca_w))
+
MCFG_FD1793_ADD("fdc", XTAL_16MHz / 16)
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(kaypro_state, fdc_intrq_w))
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(kaypro_state, fdc_drq_w))
@@ -465,14 +511,14 @@ ROM_START(robie)
ROM_LOAD("81-235.u9", 0x0000, 0x1000, CRC(5f72da5b) SHA1(8a597000cce1a7e184abfb7bebcb564c6bf24fb7) )
ROM_END
-/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
-COMP( 1982, kayproii, 0, 0, kayproii, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro II - 2/83" , 0 )
-COMP( 1983, kaypro4, kayproii, 0, kaypro4, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 - 4/83" , 0 ) // model 81-004
-COMP( 1983, kaypro4p88, kayproii, 0, kaypro4, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 plus88 - 4/83" , MACHINE_NOT_WORKING ) // model 81-004 with an added 8088 daughterboard and rom
-COMP( 198?, omni2, kayproii, 0, omni2, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Omni II Logic Analyzer" , 0 )
-COMP( 198?, omni4, kaypro2x, 0, kaypro2x, kay_kbd, kaypro_state, kaypro, "Omni Logic Inc.", "Omni 4 Logic Analyzer" , MACHINE_NOT_WORKING )
-COMP( 1984, kaypro2x, 0, 0, kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 2x" , MACHINE_NOT_WORKING ) // model 81-025
-COMP( 1984, kaypro4a, kaypro2x, 0, kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 - 4/84" , MACHINE_NOT_WORKING ) // model 81-015
+/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
+COMP( 1982, kayproii, 0, 0, kayproii, kaypro, kaypro_state, kaypro, "Non Linear Systems", "Kaypro II - 2/83" , 0 )
+COMP( 1983, kaypro4, kayproii, 0, kaypro4, kaypro, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 - 4/83" , 0 ) // model 81-004
+COMP( 1983, kaypro4p88, kayproii, 0, kaypro4, kaypro, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 plus88 - 4/83" , MACHINE_NOT_WORKING ) // model 81-004 with an added 8088 daughterboard and rom
+COMP( 198?, omni2, kayproii, 0, omni2, kaypro, kaypro_state, kaypro, "Non Linear Systems", "Omni II Logic Analyzer" , 0 )
+COMP( 198?, omni4, kaypro2x, 0, kaypro2x, kaypro, kaypro_state, kaypro, "Omni Logic Inc.", "Omni 4 Logic Analyzer" , MACHINE_NOT_WORKING )
+COMP( 1984, kaypro2x, 0, 0, kaypro2x, kaypro, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 2x" , MACHINE_NOT_WORKING ) // model 81-025
+COMP( 1984, kaypro4a, kaypro2x, 0, kaypro2x, kaypro, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 - 4/84" , MACHINE_NOT_WORKING ) // model 81-015
// Kaypro 4/84 plus 88 goes here, model 81-015 with an added 8088 daughterboard and rom
-COMP( 1983, kaypro10, 0, 0, kaypro10, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 10" , MACHINE_NOT_WORKING ) // model 81-005
-COMP( 1984, robie, 0, 0, kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro Robie" , MACHINE_NOT_WORKING ) // model 81-005
+COMP( 1983, kaypro10, 0, 0, kaypro10, kaypro, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 10" , MACHINE_NOT_WORKING ) // model 81-005
+COMP( 1984, robie, 0, 0, kaypro2x, kaypro, kaypro_state, kaypro, "Non Linear Systems", "Kaypro Robie" , MACHINE_NOT_WORKING ) // model 81-005
diff --git a/src/mame/drivers/kingobox.cpp b/src/mame/drivers/kingobox.cpp
index d9e64990d0a..f6f117c04c9 100644
--- a/src/mame/drivers/kingobox.cpp
+++ b/src/mame/drivers/kingobox.cpp
@@ -524,7 +524,7 @@ static MACHINE_CONFIG_START( ringking )
MCFG_CPU_ADD("sprite", Z80, 4000000) /* 4.0 MHz */
MCFG_CPU_PROGRAM_MAP(ringking_sprite_map)
- MCFG_INPUT_MERGER_ANY_HIGH("nmigate")
+ MCFG_INPUT_MERGER_ALL_HIGH("nmigate")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("video", INPUT_LINE_NMI))
MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sprite", INPUT_LINE_NMI))
diff --git a/src/mame/drivers/lemmings.cpp b/src/mame/drivers/lemmings.cpp
index 5155a9d853c..900a4649a1f 100644
--- a/src/mame/drivers/lemmings.cpp
+++ b/src/mame/drivers/lemmings.cpp
@@ -48,21 +48,6 @@ READ16_MEMBER(lemmings_state::lemmings_trackball_r)
return 0;
}
-
-
-
-
-void lemmings_state::lemmings_sound_cb( address_space &space, uint16_t data, uint16_t mem_mask )
-{
- m_soundlatch->write(space, 0, data & 0xff);
- m_audiocpu->set_input_line(1, HOLD_LINE);
-}
-
-WRITE8_MEMBER(lemmings_state::lemmings_sound_ack_w)
-{
- m_audiocpu->set_input_line(1, CLEAR_LINE);
-}
-
READ16_MEMBER( lemmings_state::lem_protection_region_0_146_r )
{
int real_address = 0 + (offset *2);
@@ -106,7 +91,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, lemmings_state )
AM_RANGE(0x0000, 0x07ff) AM_RAM
AM_RANGE(0x0800, 0x0801) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
AM_RANGE(0x1000, 0x1000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x1800, 0x1800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(lemmings_sound_ack_w)
+ AM_RANGE(0x1800, 0x1800) AM_DEVREAD("ioprot", deco_146_base_device, soundlatch_r) AM_WRITENOP // writes an extra irq ack?
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -274,7 +259,7 @@ static MACHINE_CONFIG_START( lemmings )
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
- MCFG_DECO146_SET_SOUNDLATCH_CALLBACK(lemmings_state, lemmings_sound_cb)
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 1))
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
diff --git a/src/mame/drivers/lilith.cpp b/src/mame/drivers/lilith.cpp
new file mode 100644
index 00000000000..6d2ffd9e92e
--- /dev/null
+++ b/src/mame/drivers/lilith.cpp
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/***********************************************************************************************************************************
+
+2017-10-27 Skeleton of Lilith, a Modula-2 single-user workstation.
+
+CPU consists of various parts including AM2901 and AM2911.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+//#include "cpu/mcs51/mcs51.h"
+
+class lilith_state : public driver_device
+{
+public:
+ lilith_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+// , maincpu(*this, "maincpu")
+ { }
+
+protected:
+// required_device<i80c52_device> maincpu;
+};
+
+static INPUT_PORTS_START( lilith )
+INPUT_PORTS_END
+
+//static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, lilith_state )
+//ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( lilith )
+MACHINE_CONFIG_END
+
+ROM_START( lilith )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ // main?
+ ROM_LOAD( "150-0001-01a.bin", 0x000000, 0x000100, CRC(2991dbc6) SHA1(89a4f9f4f45495547062efcb035fb87906410ab9) )
+ ROM_LOAD( "150-0001-02a.bin", 0x000000, 0x000100, CRC(2be08757) SHA1(19ad7fbea742953c10ba3da652e560547bc92032) )
+ ROM_LOAD( "150-0001-03a.bin", 0x000000, 0x000100, CRC(c2103f8a) SHA1(b970f4b05d74b6d2a6477247b7f50acd024452f4) )
+ ROM_LOAD( "150-0001-04a.bin", 0x000000, 0x000100, CRC(d5315408) SHA1(a52d2e535bff141e9976b6684b0aaf5d0089f6e6) )
+ ROM_LOAD( "150-0002-01a.bin", 0x000000, 0x000800, CRC(2235b7ba) SHA1(bca0843bc61ba39f16f582eda9aa6c2188b7115a) )
+ ROM_LOAD( "150-0002-02a.bin", 0x000000, 0x000800, CRC(c56b64cf) SHA1(42d6b2a394e0360905b30231eaa1b257602fe696) )
+ ROM_LOAD( "150-0002-03a.bin", 0x000000, 0x000800, CRC(2c3ac942) SHA1(08c6e0f307e7eec3cfe9a55ed0a8c8eab4bd2931) )
+ ROM_LOAD( "150-0002-04a.bin", 0x000000, 0x000800, CRC(f297e2e0) SHA1(f323b5fda7b4ce13ce5da5267b5375e257806410) )
+ ROM_LOAD( "150-0002-05a.bin", 0x000000, 0x000800, CRC(009a46d3) SHA1(20050a0cc0084b10f6892161cb43dc6be286423b) )
+ // fdc?
+ ROM_LOAD( "fd6502u1.bin", 0x000000, 0x000800, CRC(24ab745a) SHA1(6229f7d08e5a9adbba045ce3db232c704d87ba0d) )
+ ROM_LOAD( "fd6502u2.bin", 0x000000, 0x000800, CRC(a8cffbc3) SHA1(384d56cdc7d383cf9f160086827b9e0fb310cfdf) )
+ // proms?
+ ROM_LOAD( "hortim.bin", 0x000000, 0x000800, CRC(4f9a596a) SHA1(b2cec32f6b7bc23e6f83065cb20e0eae55ecc53a) )
+ ROM_LOAD( "pd_u38.bin", 0x000000, 0x000100, CRC(724bf954) SHA1(5c8554d3a0f341516fe050fe09ed8e232af7e89e) )
+ ROM_LOAD( "rx_u20.bin", 0x000000, 0x000100, CRC(658b523e) SHA1(070b5bf424e9f1fc3bc3dfc6126501c25f3b9ef3) )
+ ROM_LOAD( "tx_u23.bin", 0x000000, 0x000100, CRC(4c3e2e9f) SHA1(9a88a016f3f74a15bcb635dd73d2129512ca53e8) )
+ ROM_LOAD( "vertim.bin", 0x000000, 0x000800, CRC(304a8714) SHA1(dcd3542b8722144b80a638dda0f6df740a92c941) )
+ ROM_LOAD( "xx_u40.bin", 0x000000, 0x000100, CRC(434e3456) SHA1(7679b3841b105345582e9bda758a134a2578cfbd) )
+ // keyboard
+ ROM_LOAD( "kbd_eprom.bin", 0x000000, 0x000800, CRC(40fa5230) SHA1(473ca714959fc35aa2a0ab9310aee2aedffa2163) )
+ROM_END
+
+COMP( 1984, lilith, 0, 0, lilith, lilith, lilith_state, 0, "DISER", "Lilith", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/mps1230.cpp b/src/mame/drivers/mps1230.cpp
index 69c35ceaff1..5c9ad989890 100644
--- a/src/mame/drivers/mps1230.cpp
+++ b/src/mame/drivers/mps1230.cpp
@@ -80,6 +80,7 @@ Notes: (all IC's shown)
#include "emu.h"
#include "cpu/upd7810/upd7810.h"
+#include "cpu/z80/z80.h"
#define CPU_TAG "maincpu"
@@ -137,6 +138,11 @@ static MACHINE_CONFIG_START( mps1230 )
MCFG_CPU_PROGRAM_MAP(mps1230_map)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_START( mps1000 )
+ MCFG_CPU_ADD(CPU_TAG, Z80, 4000000)
+ MCFG_CPU_PROGRAM_MAP(mps1230_map)
+MACHINE_CONFIG_END
+
/***************************************************************************
Game driver(s)
@@ -148,7 +154,9 @@ ROM_START(mps1000)
// ver 2.20, 06/DEC/1986 (But it could also perhaps mean 12/JUN/1986)
// I can't tell the PCB reference because this was dumped from spare EPROMs from a drawer
// The dump seems to be good because the data content of all of my 4 spare EPROMs matched perfectly.
- ROM_LOAD( "mps_1000_vers_2.20_12-06-86.rom", 0x000000, 0x02000, CRC(0a91ea8a) SHA1(ccb679f3d1f7f4eddb4e8899fe9e9a594dcfca5d) ) // this is Z80 code
+ ROM_LOAD( "mps_1000_vers_2.20_12-06-86.rom", 0x000000, 0x02000, CRC(0a91ea8a) SHA1(ccb679f3d1f7f4eddb4e8899fe9e9a594dcfca5d) )
+ // this is another Z80-based bios.
+ ROM_LOAD( "hwh_28.06.88_ep12-2_s80r2.rom", 0x002000, 0x002000, CRC(1d17c586) SHA1(1afd1d1bbebe4d79c3cfcc30ac617b1a8ddb99e1) ) // to locate at 0000
ROM_END
ROM_START(mps1230)
@@ -158,5 +166,5 @@ ROM_START(mps1230)
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME */
-COMP( 1986, mps1000, 0, 0, mps1230, mps1230, mps1230_state, 0, "Commodore Business Machines", "MPS-1000 Printer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_TYPE_OTHER )
+COMP( 1986, mps1000, 0, 0, mps1000, mps1230, mps1230_state, 0, "Commodore Business Machines", "MPS-1000 Printer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_TYPE_OTHER )
COMP( 1988, mps1230, 0, 0, mps1230, mps1230, mps1230_state, 0, "Commodore Business Machines", "MPS-1230 NLQ Printer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_TYPE_OTHER )
diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp
index 3b371447bfe..3bd95652e08 100644
--- a/src/mame/drivers/naomi.cpp
+++ b/src/mame/drivers/naomi.cpp
@@ -4062,7 +4062,7 @@ ROM_START( f355twin )
ROM_LOAD( "mpr-22830.ic4", 0x2000000, 0x800000, CRC(bfeb0e95) SHA1(a2dac7887dec722bd4b90a526bbcb9910b636618) )
ROM_LOAD( "mpr-22831.ic5", 0x2800000, 0x800000, CRC(697e60a8) SHA1(805dd3fb7b86d1ad8afadba58c7c026444e62e32) )
ROM_LOAD( "mpr-22832.ic6", 0x3000000, 0x800000, CRC(78e146a0) SHA1(cb6f1313ae51addbc84f78b3fb1e5d3adbe9af7c) )
- ROM_LOAD( "mpr-22834.ic7", 0x3800000, 0x800000, CRC(cbd847ea) SHA1(7c54f909d9bc10fda12bf28d5d4b83052a0583d4) )
+ ROM_LOAD( "mpr-22833.ic7", 0x3800000, 0x800000, CRC(cbd847ea) SHA1(7c54f909d9bc10fda12bf28d5d4b83052a0583d4) )
ROM_LOAD( "mpr-22834.ic8", 0x4000000, 0x800000, CRC(3bfc6571) SHA1(c3d7e1a75a8a2490c3b9b6f475ec948c40c84085) )
ROM_LOAD( "mpr-22835.ic9", 0x4800000, 0x800000, CRC(c0a14f8e) SHA1(811d95d3741a14a215f34b3dc465e4944d746568) )
ROM_LOAD( "mpr-22836.ic10", 0x5000000, 0x800000, CRC(ee68d756) SHA1(319f5633c3a377461fcedcf4b01edac41a26ad4b) )
diff --git a/src/mame/drivers/perq.cpp b/src/mame/drivers/perq.cpp
new file mode 100644
index 00000000000..2ba2d57a9c6
--- /dev/null
+++ b/src/mame/drivers/perq.cpp
@@ -0,0 +1,48 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/***********************************************************************************************************************************
+
+2017-10-28 Skeleton
+
+Three Rivers / ICL - PERQ 1A. CPU is discrete components including 74S181 bit-slice ALUs, and AM2910 microcode sequencer.
+A Z80 handles most of the I/O. Display is 768x1024. B&W (black on white).
+
+ROMS came from PERQemu by Josh Dersch.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+//#include "cpu/mcs51/mcs51.h"
+
+class perq_state : public driver_device
+{
+public:
+ perq_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+// , maincpu(*this, "maincpu")
+ { }
+
+protected:
+// required_device<i80c52_device> maincpu;
+};
+
+static INPUT_PORTS_START( perq )
+INPUT_PORTS_END
+
+//static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, perq_state )
+//ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( perq )
+MACHINE_CONFIG_END
+
+ROM_START( perq )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "rti02.rom", 0x0000, 0x0200, CRC(cad04f75) SHA1(7a789c6ab1f7627f14953b28231aec0ea49f7945) )
+ ROM_LOAD( "t1bootrom.rom", 0x0000, 0x0c00, CRC(cd75f925) SHA1(eb8d5381d87c366052ba1f01f803403e313dc29a) )
+ ROM_LOAD( "boot.bin", 0x0000, 0x0d98, CRC(a2b9b7ea) SHA1(75b4b7743e4e65fc14b9f3dbb08421c16cde0f11) )
+ ROM_LOAD( "rds00.rom", 0x0000, 0x0400, CRC(77650e0a) SHA1(e507cbc0a1fa56054ce178f7600004d3669961ce) )
+ ROM_LOAD( "rsc03.rom", 0x0000, 0x0100, CRC(d66f1f1f) SHA1(5ccccb68dc59dbcabab99adf8a57af0af545bfc5) )
+ ROM_LOAD( "rsh00.rom", 0x0000, 0x0400, CRC(815d92bf) SHA1(b87bdea13de391e5615c474ba96af4b28b7f8f38) )
+ROM_END
+
+COMP( 1979, perq, 0, 0, perq, perq, perq_state, 0, "Three Rivers Company Corporation", "PERQ 1A", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/poly.cpp b/src/mame/drivers/poly.cpp
index 0ef59544707..51e62ddeb7c 100644
--- a/src/mame/drivers/poly.cpp
+++ b/src/mame/drivers/poly.cpp
@@ -54,6 +54,7 @@ public:
, m_pia1(*this, "pia1")
, m_ptm(*this, "ptm")
, m_speaker(*this, "speaker")
+ , m_acia_clock(*this, "acia_clock")
, m_videoram(*this, "videoram")
{ }
@@ -62,6 +63,7 @@ public:
DECLARE_READ8_MEMBER(videoram_r);
DECLARE_WRITE_LINE_MEMBER( ptm_o2_callback );
DECLARE_WRITE_LINE_MEMBER( ptm_o3_callback );
+ DECLARE_WRITE8_MEMBER(baud_rate_w);
protected:
virtual void machine_reset() override;
@@ -72,6 +74,7 @@ private:
required_device<pia6821_device> m_pia1;
required_device<ptm6840_device> m_ptm;
required_device<speaker_sound_device> m_speaker;
+ required_device<clock_device> m_acia_clock;
required_shared_ptr<uint8_t> m_videoram;
uint8_t m_term_data;
};
@@ -85,7 +88,7 @@ static ADDRESS_MAP_START(poly_mem, AS_PROGRAM, 8, poly_state)
AM_RANGE(0xe000,0xe003) AM_DEVREADWRITE("pia0", pia6821_device, read, write) //video control PIA 6821
AM_RANGE(0xe004,0xe004) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w)
AM_RANGE(0xe005,0xe005) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w)
- //AM_RANGE(0xe006, 0xe006) // baud rate controller (0=9600,2=4800,4=2400,6=1200,8=600,A=300)
+ AM_RANGE(0xe006,0xe006) AM_WRITE(baud_rate_w)
AM_RANGE(0xe00c,0xe00f) AM_DEVREADWRITE("pia1", pia6821_device, read, write) //keyboard PIA 6821
AM_RANGE(0xe020,0xe027) AM_DEVREADWRITE("ptm", ptm6840_device, read, write) //timer 6840
AM_RANGE(0xe030,0xe037) AM_DEVREADWRITE("adlc", mc6854_device, read, write) //Data Link Controller 6854
@@ -141,9 +144,16 @@ WRITE_LINE_MEMBER( poly_state::ptm_o3_callback )
m_speaker->level_w(state);
}
+WRITE8_MEMBER(poly_state::baud_rate_w)
+{
+ // baud rate controller (0=9600,2=4800,4=2400,6=1200,8=600,A=300)
+ int selector = (data & 0x0e) >> 1;
+ m_acia_clock->set_clock_scale((selector <= 5) ? 1.0 / (1 << selector) : 0.0);
+}
+
static MACHINE_CONFIG_START( poly )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809E, XTAL_12MHz / 3) // 12.0576MHz
+ MCFG_CPU_ADD("maincpu", M6809E, XTAL_12_0576MHz / 3)
MCFG_CPU_PROGRAM_MAP(poly_mem)
/* video hardware */
@@ -160,7 +170,7 @@ static MACHINE_CONFIG_START( poly )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
/* Devices */
- MCFG_DEVICE_ADD("saa5050", SAA5050, 6000000)
+ MCFG_DEVICE_ADD("saa5050", SAA5050, XTAL_12_0576MHz / 2)
MCFG_SAA5050_D_CALLBACK(READ8(poly_state, videoram_r))
MCFG_SAA5050_SCREEN_SIZE(40, 24, 40)
@@ -174,7 +184,7 @@ static MACHINE_CONFIG_START( poly )
MCFG_PIA_IRQA_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE))
MCFG_PIA_IRQB_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE))
- MCFG_DEVICE_ADD("ptm", PTM6840, XTAL_12MHz / 3)
+ MCFG_DEVICE_ADD("ptm", PTM6840, XTAL_12_0576MHz / 3)
MCFG_PTM6840_EXTERNAL_CLOCKS(0, 0, 0)
MCFG_PTM6840_OUT1_CB(WRITELINE(poly_state, ptm_o2_callback))
MCFG_PTM6840_OUT2_CB(WRITELINE(poly_state, ptm_o3_callback))
@@ -184,9 +194,9 @@ static MACHINE_CONFIG_START( poly )
//MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
//MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts))
- //MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600)
- //MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia", acia6850_device, write_txc))
- //MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia", acia6850_device, write_rxc))
+ MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600)
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia", acia6850_device, write_rxc))
MCFG_DEVICE_ADD("adlc", MC6854, 0)
diff --git a/src/mame/drivers/powerstack.cpp b/src/mame/drivers/powerstack.cpp
new file mode 100644
index 00000000000..b09a206a57a
--- /dev/null
+++ b/src/mame/drivers/powerstack.cpp
@@ -0,0 +1,40 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/***********************************************************************************************************************************
+
+2017-10-29 Skeleton
+
+Motorola Powerstack II. CPU is a RISC-type.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+//#include "cpu/mcs51/mcs51.h"
+
+class powerstack_state : public driver_device
+{
+public:
+ powerstack_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+// , maincpu(*this, "maincpu")
+ { }
+
+protected:
+// required_device<i80c52_device> maincpu;
+};
+
+static INPUT_PORTS_START( powerstack )
+INPUT_PORTS_END
+
+//static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, powerstack_state )
+//ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( powerstack )
+MACHINE_CONFIG_END
+
+ROM_START( powerstk )
+ ROM_REGION( 0x80000, "maincpu", 0 )
+ ROM_LOAD( "motorola_powerstack2.bin", 0x0000, 0x80000, CRC(948e8fcd) SHA1(9a8c32b621c98bc33ee525f66747c34d39851685) )
+ROM_END
+
+COMP( 1996, powerstk, 0, 0, powerstack, powerstack, powerstack_state, 0, "Motorola", "Powerstack II", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/px8.cpp b/src/mame/drivers/px8.cpp
index 4d4392789bc..6b38e05a1d1 100644
--- a/src/mame/drivers/px8.cpp
+++ b/src/mame/drivers/px8.cpp
@@ -835,6 +835,22 @@ ROM_START( px8 )
ROM_REGION( 0x1000, UPD7508_TAG, 0 )
ROM_LOAD( "upd7508 sub cpu internal rom.2e", 0x0000, 0x1000, NO_DUMP )
+
+ // Possibly cartridges
+ ROM_REGION( 0x54000, "carts", 0 )
+ ROM_LOAD( "px8-util.rom", 0x00000, 0x8000, CRC(4430a271) SHA1(58c23a5f25ad9cdb70ada44dc773e6899e9bd8bf) ) // various utilities
+ ROM_LOAD( "px8-ws.rom", 0x08000, 0x8000, CRC(7f64dd48) SHA1(6d9f4e797fd7ac7b1ae2f0083d5461fa16731842) ) // WordStar
+ ROM_LOAD( "px8-tam.rom", 0x10000, 0x8000, CRC(281c65d3) SHA1(e6a24161248877fa6c3edc18d56127b263f5b2e0) ) // The Traveling Appointment Manager
+ ROM_LOAD( "px8-tem.rom", 0x18000, 0x8000, CRC(f2a8aa41) SHA1(16203488eeac3cd21e11c8e0f2007527dd375597) ) // The Traveling Expense Manager
+ ROM_LOAD( "px8-ttm.rom", 0x20000, 0x8000, CRC(2303dcc3) SHA1(0cc3926ef58ce1cf05fbe8caedf259439d204388) ) // The Traveling Time Manager
+ ROM_LOAD( "clock.rom", 0x28000, 0x4000, CRC(6f254cc9) SHA1(003eaf209c01e0148dc112adc34a35d33ac0bf60) ) // Clock by Stefan Bodrato
+ ROM_LOAD( "dakcom_v1.1.bin", 0x2c000, 0x2000, CRC(3a74a975) SHA1(46300aeb10ec208a906143e2acd1f93badb6792d) ) // DakComm v1.1 (comms)
+ ROM_LOAD( "px8-dcom.rom", 0x2e000, 0x8000, CRC(ddea1bbf) SHA1(791c58bf2fec8a19ca0face2e7b3eebe25ef4823) ) // this may be DakComm overdumped
+ ROM_LOAD( "genevaconnection.bin", 0x36000, 0x2000, CRC(7971e79a) SHA1(97cc1af6e7733eabcb4a85663022c6d3acea9d5a) ) // Geneva Connection
+ ROM_LOAD( "othello.rom", 0x38000, 0x4000, CRC(1a01059e) SHA1(1e275ad3d3f5014dd6a6f553bf9e062a39221cb8) ) // Othello by Stefan Bodrato
+ ROM_LOAD( "supercalc-1.bin", 0x3c000, 0x8000, CRC(58a0a411) SHA1(7b80361cd594e3b9b9e925e6a193606f8faa185c) ) // Supercalc rom 1
+ ROM_LOAD( "supercalc-2.bin", 0x44000, 0x8000, CRC(ba1c664b) SHA1(3c2a54a187f286eafb91f7571479a035d69d1df1) ) // Supercalc rom 2
+ ROM_LOAD( "tpascal.rom", 0x4c000, 0x8000, CRC(30a71af7) SHA1(e3f89fc4db6df8acc2f940e86e12eafb7af1303d) ) // Turbo Pascal
ROM_END
/***************************************************************************
diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp
index bf2fc6b2b9d..84389cc6c94 100644
--- a/src/mame/drivers/rohga.cpp
+++ b/src/mame/drivers/rohga.cpp
@@ -318,7 +318,19 @@ static ADDRESS_MAP_START( rohga_sound_map, AS_PROGRAM, 8, rohga_state )
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0x140000, 0x140001) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot104", deco104_device, soundlatch_r)
+ AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
+ AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
+ AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( nitrobal_sound_map, AS_PROGRAM, 8, rohga_state )
+ AM_RANGE(0x000000, 0x00ffff) AM_ROM
+ AM_RANGE(0x100000, 0x100001) AM_NOP
+ AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
+ AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
+ AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
+ AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot", deco146_device, soundlatch_r)
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w)
AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w)
@@ -963,12 +975,11 @@ static MACHINE_CONFIG_START( rohga )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) /* IRQ 2 */
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(rohga_state,sound_bankswitch_w))
@@ -1053,6 +1064,7 @@ static MACHINE_CONFIG_START( wizdfire )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_REVERSE
MCFG_VIDEO_START_OVERRIDE(rohga_state, wizdfire)
@@ -1060,8 +1072,6 @@ static MACHINE_CONFIG_START( wizdfire )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) /* IRQ 2 */
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(rohga_state,sound_bankswitch_w))
@@ -1085,7 +1095,7 @@ static MACHINE_CONFIG_START( nitrobal )
MCFG_CPU_VBLANK_INT_DRIVER("screen", rohga_state, irq6_line_assert)
MCFG_CPU_ADD("audiocpu", H6280,32220000/4/3) /* verified on pcb (8.050Mhz is XIN on pin 10 of H6280 */
- MCFG_CPU_PROGRAM_MAP(rohga_sound_map)
+ MCFG_CPU_PROGRAM_MAP(nitrobal_sound_map)
/* video hardware */
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
@@ -1148,15 +1158,13 @@ static MACHINE_CONFIG_START( nitrobal )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_REVERSE
MCFG_DECO146_SET_USE_MAGIC_ADDRESS_XOR
-
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) /* IRQ 2 */
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(rohga_state,sound_bankswitch_w))
@@ -1239,12 +1247,11 @@ static MACHINE_CONFIG_START( schmeisr )
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
+ MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
-
MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) /* IRQ 2 */
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(rohga_state,sound_bankswitch_w))
diff --git a/src/mame/drivers/sapi1.cpp b/src/mame/drivers/sapi1.cpp
index 40a2fa5474a..7111f3ce420 100644
--- a/src/mame/drivers/sapi1.cpp
+++ b/src/mame/drivers/sapi1.cpp
@@ -713,6 +713,9 @@ ROM_START( sapi1 )
ROMX_LOAD( "sapi1.rom", 0x0000, 0x1000, CRC(c6e85b01) SHA1(2a26668249c6161aef7215a1e2b92bfdf6fe3671), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 1, "mb2", "MB2 (ANK-1)" )
ROMX_LOAD( "mb2_4.bin", 0x0000, 0x1000, CRC(a040b3e0) SHA1(586990a07a96323741679a11ff54ad0023da87bc), ROM_BIOS(2))
+
+ ROM_REGION( 0x1000, "chargen", 0 )
+ ROM_LOAD( "sapi1.chr", 0x0000, 0x1000, CRC(9edafa2c) SHA1(a903db0e8923cca91646274d010dc19b6b377e3e) )
ROM_END
ROM_START( sapizps2 )
diff --git a/src/mame/drivers/slicer.cpp b/src/mame/drivers/slicer.cpp
index 62a9fbaed7e..ebe607a763a 100644
--- a/src/mame/drivers/slicer.cpp
+++ b/src/mame/drivers/slicer.cpp
@@ -140,6 +140,18 @@ ROM_START( slicer )
ROM_REGION(0x8001, "bios", 0)
// built from sources, reset.asm adds an extra byte
ROM_LOAD("epbios.bin", 0x0000, 0x8001, CRC(96fe9dd4) SHA1(5fc43454fe7d51f2ae97aef822155dcd28eb7f23))
+
+ ROM_REGION(0x10000, "user1", 0)
+ //slicer_h.bin : main slicer board, high byte
+ //slicer_l.bin : main slicer board, low byte
+ //slvid_cg.bin : slicer video/keyboard expansion board, character generator
+ //slvid_e.bin : slicer video/keyboard expansion board, even byte
+ //slvid_o.bin : slicer video/keyboard expansion board, odd byte
+ ROM_LOAD( "slicer_h.bin", 0x000000, 0x004000, CRC(1f9a79b7) SHA1(2070c6818d39fe7ec4370fc2304469793a126731) )
+ ROM_LOAD( "slicer_l.bin", 0x000000, 0x004000, CRC(6feef94b) SHA1(174488591b727a4130166bcb2e83c0e74323d43b) )
+ ROM_LOAD( "slvid_cg.bin", 0x000000, 0x001000, CRC(d4d9ac2f) SHA1(866c760320b224ba8670501ea905de32193acedc) )
+ ROM_LOAD( "slvid_o.bin", 0x000000, 0x001000, CRC(c62dda77) SHA1(1d0b9abc53412b0725072d4c33c478fb5358ab5c) )
+ ROM_LOAD( "slvid_e.bin", 0x000000, 0x001000, CRC(8694274f) SHA1(8373baaea8d689bf52699b587942a57f26baf740) )
ROM_END
COMP( 1983, slicer, 0, 0, slicer, 0, slicer_state, 0, "Slicer Computers", "Slicer", MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/solbourne.cpp b/src/mame/drivers/solbourne.cpp
new file mode 100644
index 00000000000..32a28630712
--- /dev/null
+++ b/src/mame/drivers/solbourne.cpp
@@ -0,0 +1,55 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/***********************************************************************************************************************************
+
+2017-10-28 Skeleton
+
+Solbourne computer workstation. This looks like the Series 5E which uses the Cypress CY7C601 CPU @ 40MHz.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+//#include "cpu/mcs51/mcs51.h"
+
+class solbourne_state : public driver_device
+{
+public:
+ solbourne_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+// , maincpu(*this, "maincpu")
+ { }
+
+protected:
+// required_device<i80c52_device> maincpu;
+};
+
+static INPUT_PORTS_START( solbourne )
+INPUT_PORTS_END
+
+//static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, solbourne_state )
+//ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( solbourne )
+MACHINE_CONFIG_END
+
+ROM_START( sols5e )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "s5e_3.4_8e36_00.bin", 0x000000, 0x020000, CRC(bc44765a) SHA1(3727af2e683d7cdd4c65865268c689533758c6bb) )
+ ROM_LOAD( "s5e_3.4_6d2e_01.bin", 0x000000, 0x020000, CRC(9c1f95ab) SHA1(73d416ba50c2b448b6e69cd30909d6dfe46f9265) )
+ ROM_LOAD( "s5e_3.4_eaa8_02.bin", 0x000000, 0x020000, CRC(4b6ee28a) SHA1(c7d5d588a0bec7fc996daef6a76151bf763b5f1c) )
+ ROM_LOAD( "s5e_3.4_3a44_03.bin", 0x000000, 0x020000, CRC(cb5dc0ca) SHA1(7fd94f26a9aa605b8ca6a444a131e8011b681d1b) )
+ ROM_LOAD( "s5e_3.5_8e0a_00.bin", 0x000000, 0x020000, CRC(60e7c977) SHA1(ac9e3219b6e190cfe912b751cbfe835adf045ab9) )
+ ROM_LOAD( "s5e_3.5_2306_01.bin", 0x000000, 0x020000, CRC(935f2d7f) SHA1(5b302701c6bfd7d0156120d474ba1e6df74bdee4) )
+ ROM_LOAD( "s5e_3.5_a5aa_02.bin", 0x000000, 0x020000, CRC(b381cfdd) SHA1(90e91aaaff76f8ffcca692aa20750c2afd7c3c93) )
+ ROM_LOAD( "s5e_3.5_93bc_03.bin", 0x000000, 0x020000, CRC(ec92be58) SHA1(e645d1573bc9e5b34707d1556df4edf43632b09e) )
+ ROM_LOAD( "s5e_3.6b_45aa_00.bin", 0x000000, 0x020000, CRC(52315d71) SHA1(4e6cdfadd1c8a1dd39f6e1b9e09a90f1d9e6b54c) )
+ ROM_LOAD( "s5e_3.6b_fdd0_01.bin", 0x000000, 0x020000, CRC(454e8e62) SHA1(dba27acd4abd5e9873dacfaff982c59175de34f6) )
+ ROM_LOAD( "s5e_3.6b_623a_02.bin", 0x000000, 0x020000, CRC(56c582fb) SHA1(367b2a9bedf5e5fc7a2aa1f7a05e8c1101b09dd7) )
+ ROM_LOAD( "s5e_3.6b_d732_03.bin", 0x000000, 0x020000, CRC(bb6ce8d6) SHA1(6d83e28f9ebac794ad05f47bdd578ef9c1e07de8) )
+ ROM_LOAD( "channel_exp_2816.bin", 0x000000, 0x000800, CRC(f9ac0bc6) SHA1(685c2425f58e3c861df4f9f37f39bae343567e13) )
+ ROM_LOAD( "30341id.bin", 0x000000, 0x000800, CRC(cdf8cffe) SHA1(725279d995100a37c8a01edfdb3af71332a55c89) )
+ ROM_LOAD( "10812id.bin", 0x000000, 0x000800, CRC(07645046) SHA1(673b0be54daf0b890580c8244926835ed323a270) )
+ ROM_LOAD( "10454id.bin", 0x000000, 0x000800, CRC(c94b3371) SHA1(9ef9792ffe26302965023041a969d57749d101f7) )
+ROM_END
+
+COMP( 198?, sols5e, 0, 0, solbourne, solbourne, solbourne_state, 0, "Solbourne Computer Inc", "Series 5E Computer Workstation", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/sothello.cpp b/src/mame/drivers/sothello.cpp
index 244f573efb2..a214612262c 100644
--- a/src/mame/drivers/sothello.cpp
+++ b/src/mame/drivers/sothello.cpp
@@ -31,7 +31,7 @@
+---------------------------------------------------------------------------------+
CPU : Z80A(x2) 68B09
-Sound: YM2203?(surface scrached) + M5205
+Sound: YM2203?(surface scratched) + M5205
OSC : 8.0000MHz(X1) 21.477 MHz(X2) 384kHz(X3)
*/
@@ -51,20 +51,14 @@ class sothello_state : public driver_device
public:
sothello_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_v9938(*this, "v9938") ,
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
- m_subcpu(*this, "sub"),
+ m_subcpu(*this, "subcpu"),
+ m_v9938(*this, "v9938"),
m_msm(*this, "msm"),
- m_bank1(*this, "bank1")
+ m_bank1(*this, "mainbank")
{ }
- required_device<v9938_device> m_v9938;
-
- int m_subcpu_status;
- int m_soundcpu_busy;
- int m_msm_data;
-
DECLARE_WRITE8_MEMBER(bank_w);
DECLARE_READ8_MEMBER(subcpu_halt_set);
DECLARE_READ8_MEMBER(subcpu_halt_clear);
@@ -77,16 +71,25 @@ public:
DECLARE_WRITE8_MEMBER(subcpu_status_w);
DECLARE_READ8_MEMBER(subcpu_status_r);
DECLARE_WRITE8_MEMBER(msm_cfg_w);
+ DECLARE_WRITE_LINE_MEMBER(adpcm_int);
+protected:
virtual void machine_start() override;
virtual void machine_reset() override;
+
+private:
+ int m_subcpu_status;
+ int m_soundcpu_busy;
+ int m_msm_data;
+
TIMER_CALLBACK_MEMBER(subcpu_suspend);
TIMER_CALLBACK_MEMBER(subcpu_resume);
- DECLARE_WRITE_LINE_MEMBER(adpcm_int);
void unlock_shared_ram();
+
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
required_device<cpu_device> m_subcpu;
+ required_device<v9938_device> m_v9938;
required_device<msm5205_device> m_msm;
required_memory_bank m_bank1;
};
@@ -107,6 +110,10 @@ public:
void sothello_state::machine_start()
{
m_bank1->configure_entries(0, 4, memregion("maincpu")->base() + 0x8000, 0x4000);
+
+ save_item(NAME(m_subcpu_status));
+ save_item(NAME(m_soundcpu_busy));
+ save_item(NAME(m_msm_data));
}
WRITE8_MEMBER(sothello_state::bank_w)
@@ -135,14 +142,14 @@ TIMER_CALLBACK_MEMBER(sothello_state::subcpu_resume)
READ8_MEMBER(sothello_state::subcpu_halt_set)
{
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(sothello_state::subcpu_suspend),this));
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(sothello_state::subcpu_suspend), this));
m_subcpu_status|=2;
return 0;
}
READ8_MEMBER(sothello_state::subcpu_halt_clear)
{
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(sothello_state::subcpu_resume),this));
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(sothello_state::subcpu_resume), this));
m_subcpu_status&=~1;
m_subcpu_status&=~2;
return 0;
@@ -159,9 +166,9 @@ READ8_MEMBER(sothello_state::soundcpu_status_r)
}
static ADDRESS_MAP_START( maincpu_mem_map, AS_PROGRAM, 8, sothello_state )
- AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
- AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_MIRROR(0x1800) AM_SHARE("share1")
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("maincpu", 0)
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank")
+ AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_MIRROR(0x1800) AM_SHARE("mainsub")
AM_RANGE(0xe000, 0xffff) AM_RAM
ADDRESS_MAP_END
@@ -198,7 +205,6 @@ WRITE8_MEMBER(sothello_state::msm_cfg_w)
WRITE8_MEMBER(sothello_state::msm_data_w)
{
m_msm_data = data;
-
}
WRITE8_MEMBER(sothello_state::soundcpu_busyflag_set_w)
@@ -213,11 +219,11 @@ WRITE8_MEMBER(sothello_state::soundcpu_busyflag_reset_w)
WRITE8_MEMBER(sothello_state::soundcpu_int_clear_w)
{
- m_soundcpu->set_input_line(0, CLEAR_LINE );
+ m_soundcpu->set_input_line(0, CLEAR_LINE);
}
static ADDRESS_MAP_START( soundcpu_mem_map, AS_PROGRAM, 8, sothello_state )
- AM_RANGE(0x0000, 0xdfff) AM_ROM
+ AM_RANGE(0x0000, 0xdfff) AM_ROM AM_REGION("soundcpu", 0)
AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END
@@ -257,10 +263,10 @@ READ8_MEMBER(sothello_state::subcpu_status_r)
}
static ADDRESS_MAP_START( subcpu_mem_map, AS_PROGRAM, 8, sothello_state )
- AM_RANGE(0x0000, 0x1fff) AM_READWRITE(subcpu_status_r,subcpu_status_w)
+ AM_RANGE(0x0000, 0x1fff) AM_READWRITE(subcpu_status_r, subcpu_status_w)
AM_RANGE(0x2000, 0x77ff) AM_RAM
- AM_RANGE(0x7800, 0x7fff) AM_RAM AM_SHARE("share1") /* upper 0x800 of 6264 is shared with main cpu */
- AM_RANGE(0x8000, 0xffff) AM_ROM
+ AM_RANGE(0x7800, 0x7fff) AM_RAM AM_SHARE("mainsub") /* upper 0x800 of 6264 is shared with main cpu */
+ AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("subcpu", 0)
ADDRESS_MAP_END
static INPUT_PORTS_START( sothello )
@@ -332,26 +338,29 @@ INPUT_PORTS_END
WRITE_LINE_MEMBER(sothello_state::adpcm_int)
{
/* only 4 bits are used */
- m_msm->data_w(m_msm_data & 0x0f );
- m_soundcpu->set_input_line(0, ASSERT_LINE );
+ m_msm->data_w(m_msm_data & 0x0f);
+ m_soundcpu->set_input_line(0, ASSERT_LINE);
}
void sothello_state::machine_reset()
{
+ m_subcpu_status = 0;
+ m_soundcpu_busy = 0;
+ m_msm_data = 0;
}
static MACHINE_CONFIG_START( sothello )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",Z80, MAINCPU_CLOCK)
+ MCFG_CPU_ADD("maincpu", Z80, MAINCPU_CLOCK)
MCFG_CPU_PROGRAM_MAP(maincpu_mem_map)
MCFG_CPU_IO_MAP(maincpu_io_map)
- MCFG_CPU_ADD("soundcpu",Z80, SOUNDCPU_CLOCK)
+ MCFG_CPU_ADD("soundcpu", Z80, SOUNDCPU_CLOCK)
MCFG_CPU_PROGRAM_MAP(soundcpu_mem_map)
MCFG_CPU_IO_MAP(soundcpu_io_map)
- MCFG_CPU_ADD("sub", M6809, SUBCPU_CLOCK)
+ MCFG_CPU_ADD("subcpu", M6809, SUBCPU_CLOCK)
MCFG_CPU_PROGRAM_MAP(subcpu_mem_map)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
@@ -367,7 +376,7 @@ static MACHINE_CONFIG_START( sothello )
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_SOUND_ADD("ymsnd", YM2203, YM_CLOCK)
- MCFG_YM2203_IRQ_HANDLER(INPUTLINE("sub", 0))
+ MCFG_YM2203_IRQ_HANDLER(INPUTLINE("subcpu", 0))
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSWA"))
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSWB"))
MCFG_SOUND_ROUTE(0, "mono", 0.25)
@@ -390,7 +399,7 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( sothello )
- ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "3.7c", 0x00000, 0x8000, CRC(47f97bd4) SHA1(52c9638f098fdcf66903fad7dafe3ab171758572) )
ROM_LOAD( "4.8c", 0x08000, 0x8000, CRC(a98414e9) SHA1(6d14e1f9c79b95101e0aa101034f398af09d7f32) )
ROM_LOAD( "5.9c", 0x10000, 0x8000, CRC(e5b5d61e) SHA1(2e4b3d85f41d0796a4d61eae40dd824769e1db86) )
@@ -399,8 +408,8 @@ ROM_START( sothello )
ROM_LOAD( "1.7a", 0x0000, 0x8000, CRC(6951536a) SHA1(64d07a692d6a167334c825dc173630b02584fdf6) )
ROM_LOAD( "2.8a", 0x8000, 0x8000, CRC(9c535317) SHA1(b2e69b489e111d6f8105e68fade6e5abefb825f7) )
- ROM_REGION( 0x10000, "sub", 0 )
- ROM_LOAD( "6.7f", 0x8000, 0x8000, CRC(ee80fc78) SHA1(9a9d7925847d7a36930f0761c70f67a9affc5e7c) )
+ ROM_REGION( 0x8000, "subcpu", 0 )
+ ROM_LOAD( "6.7f", 0x0000, 0x8000, CRC(ee80fc78) SHA1(9a9d7925847d7a36930f0761c70f67a9affc5e7c) )
ROM_END
-GAME( 1986, sothello, 0, sothello, sothello, sothello_state, 0, ROT0, "Success / Fujiwara", "Super Othello", 0 )
+GAME( 1986, sothello, 0, sothello, sothello, sothello_state, 0, ROT0, "Success / Fujiwara", "Super Othello", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/sym1.cpp b/src/mame/drivers/sym1.cpp
index de8f4920c43..ec2c06434de 100644
--- a/src/mame/drivers/sym1.cpp
+++ b/src/mame/drivers/sym1.cpp
@@ -9,8 +9,10 @@
#include "emu.h"
#include "cpu/m6502/m6502.h"
+#include "bus/rs232/rs232.h"
#include "machine/6522via.h"
#include "machine/74145.h"
+#include "machine/input_merger.h"
#include "machine/mos6530n.h"
#include "machine/ram.h"
#include "sound/spkrdev.h"
@@ -47,10 +49,9 @@ public:
m_maincpu(*this, "maincpu"),
m_ram(*this, RAM_TAG),
m_ttl74145(*this, "ttl74145"),
- m_row0(*this, "ROW-0"),
- m_row1(*this, "ROW-1"),
- m_row2(*this, "ROW-2"),
- m_row3(*this, "ROW-3"),
+ m_crt(*this, "crt"),
+ m_tty(*this, "tty"),
+ m_row(*this, "ROW-%u", 0),
m_wp(*this, "WP") { }
required_shared_ptr<uint8_t> m_ram_1k;
@@ -70,20 +71,19 @@ public:
DECLARE_WRITE_LINE_MEMBER(sym1_74145_output_3_w);
DECLARE_WRITE_LINE_MEMBER(sym1_74145_output_4_w);
DECLARE_WRITE_LINE_MEMBER(sym1_74145_output_5_w);
- DECLARE_READ8_MEMBER(sym1_riot_a_r);
- DECLARE_READ8_MEMBER(sym1_riot_b_r);
- DECLARE_WRITE8_MEMBER(sym1_riot_a_w);
- DECLARE_WRITE8_MEMBER(sym1_riot_b_w);
- DECLARE_WRITE8_MEMBER(sym1_via2_a_w);
+ DECLARE_READ8_MEMBER(riot_a_r);
+ DECLARE_READ8_MEMBER(riot_b_r);
+ DECLARE_WRITE8_MEMBER(riot_a_w);
+ DECLARE_WRITE8_MEMBER(riot_b_w);
+ DECLARE_WRITE8_MEMBER(via3_a_w);
protected:
required_device<cpu_device> m_maincpu;
required_device<ram_device> m_ram;
required_device<ttl74145_device> m_ttl74145;
- required_ioport m_row0;
- required_ioport m_row1;
- required_ioport m_row2;
- required_ioport m_row3;
+ required_device<rs232_port_device> m_crt;
+ required_device<rs232_port_device> m_tty;
+ required_ioport_array<4> m_row;
required_ioport m_wp;
};
@@ -99,48 +99,54 @@ WRITE_LINE_MEMBER( sym1_state::sym1_74145_output_3_w ) { if (state) m_led_update
WRITE_LINE_MEMBER( sym1_state::sym1_74145_output_4_w ) { if (state) m_led_update->adjust(LED_REFRESH_DELAY, 4); }
WRITE_LINE_MEMBER( sym1_state::sym1_74145_output_5_w ) { if (state) m_led_update->adjust(LED_REFRESH_DELAY, 5); }
-TIMER_CALLBACK_MEMBER( sym1_state::led_refresh )
+TIMER_CALLBACK_MEMBER(sym1_state::led_refresh)
{
output().set_digit_value(param, m_riot_port_a);
}
-READ8_MEMBER( sym1_state::sym1_riot_a_r )
+READ8_MEMBER(sym1_state::riot_a_r)
{
int data = 0x7f;
// scan keypad rows
- if (!(m_riot_port_a & 0x80)) data &= m_row0->read();
- if (!(m_riot_port_b & 0x01)) data &= m_row1->read();
- if (!(m_riot_port_b & 0x02)) data &= m_row2->read();
- if (!(m_riot_port_b & 0x04)) data &= m_row3->read();
+ if (!(m_riot_port_a & 0x80)) data &= m_row[0]->read();
+ if (!(m_riot_port_b & 0x01)) data &= m_row[1]->read();
+ if (!(m_riot_port_b & 0x02)) data &= m_row[2]->read();
+ if (!(m_riot_port_b & 0x04)) data &= m_row[3]->read();
// determine column
- if ( ((m_riot_port_a ^ 0xff) & (m_row0->read() ^ 0xff)) & 0x7f )
+ if ( ((m_riot_port_a ^ 0xff) & (m_row[0]->read() ^ 0xff)) & 0x7f )
data &= ~0x80;
return data;
}
-READ8_MEMBER( sym1_state::sym1_riot_b_r )
+READ8_MEMBER(sym1_state::riot_b_r)
{
int data = 0xff;
// determine column
- if ( ((m_riot_port_a ^ 0xff) & (m_row1->read() ^ 0xff)) & 0x7f )
+ if ( ((m_riot_port_a ^ 0xff) & (m_row[1]->read() ^ 0xff)) & 0x7f )
data &= ~0x01;
- if ( ((m_riot_port_a ^ 0xff) & (m_row2->read() ^ 0xff)) & 0x3f )
+ if ( ((m_riot_port_a ^ 0xff) & (m_row[2]->read() ^ 0xff)) & 0x3f )
data &= ~0x02;
- if ( ((m_riot_port_a ^ 0xff) & (m_row3->read() ^ 0xff)) & 0x1f )
+ if ( ((m_riot_port_a ^ 0xff) & (m_row[3]->read() ^ 0xff)) & 0x1f )
data &= ~0x04;
+ // PB6 in from TTY keyboard
+ data &= m_tty->rxd_r() << 6;
+
+ // PB7 in from RS-232 CRT
+ data &= m_crt->rxd_r() << 7;
+
data &= ~0x80; // else hangs 8b02
return data;
}
-WRITE8_MEMBER( sym1_state::sym1_riot_a_w )
+WRITE8_MEMBER(sym1_state::riot_a_w)
{
logerror("%x: riot_a_w 0x%02x\n", m_maincpu->pc(), data);
@@ -148,7 +154,7 @@ WRITE8_MEMBER( sym1_state::sym1_riot_a_w )
m_riot_port_a = data;
}
-WRITE8_MEMBER( sym1_state::sym1_riot_b_w )
+WRITE8_MEMBER(sym1_state::riot_b_w)
{
logerror("%x: riot_b_w 0x%02x\n", m_maincpu->pc(), data);
@@ -157,6 +163,12 @@ WRITE8_MEMBER( sym1_state::sym1_riot_b_w )
// first 4 pins are connected to the 74145
m_ttl74145->write(data & 0x0f);
+
+ // PB4 out to RS-232 CRT
+ m_crt->write_txd(BIT(data, 4));
+
+ // PB5 out to TTY printer
+ m_tty->write_txd(BIT(data, 5));
}
//**************************************************************************
@@ -231,7 +243,7 @@ INPUT_PORTS_END
PA2: Write protect RAM 0x800-0xbff
PA3: Write protect RAM 0xc00-0xfff
*/
-WRITE8_MEMBER( sym1_state::sym1_via2_a_w )
+WRITE8_MEMBER( sym1_state::via3_a_w )
{
address_space &cpu0space = m_maincpu->space( AS_PROGRAM );
@@ -292,11 +304,11 @@ static ADDRESS_MAP_START( sym1_map, AS_PROGRAM, 8, sym1_state )
AM_RANGE(0x0800, 0x0bff) AM_RAMBANK("bank3") AM_SHARE("ram_2k")
AM_RANGE(0x0c00, 0x0fff) AM_RAMBANK("bank4") AM_SHARE("ram_3k")
AM_RANGE(0x8000, 0x8fff) AM_ROM AM_SHARE("monitor") // U20 Monitor ROM
- AM_RANGE(0xa000, 0xa00f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) // U25 VIA #1
+ AM_RANGE(0xa000, 0xa00f) AM_DEVREADWRITE("via1", via6522_device, read, write) // U25 VIA #1
AM_RANGE(0xa400, 0xa41f) AM_DEVICE("riot", mos6532_new_device, io_map) // U27 RIOT
AM_RANGE(0xa600, 0xa67f) AM_RAMBANK("bank5") AM_SHARE("riot_ram") // U27 RIOT RAM
- AM_RANGE(0xa800, 0xa80f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) // U28 VIA #2
- AM_RANGE(0xac00, 0xac0f) AM_DEVREADWRITE("via6522_2", via6522_device, read, write) // U29 VIA #3
+ AM_RANGE(0xa800, 0xa80f) AM_DEVREADWRITE("via2", via6522_device, read, write) // U28 VIA #2
+ AM_RANGE(0xac00, 0xac0f) AM_DEVREADWRITE("via3", via6522_device, read, write) // U29 VIA #3
AM_RANGE(0xb000, 0xefff) AM_ROM
ADDRESS_MAP_END
@@ -319,10 +331,10 @@ static MACHINE_CONFIG_START( sym1 )
// devices
MCFG_DEVICE_ADD("riot", MOS6532_NEW, SYM1_CLOCK)
- MCFG_MOS6530n_IN_PA_CB(READ8(sym1_state, sym1_riot_a_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(sym1_state, sym1_riot_a_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(sym1_state, sym1_riot_b_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(sym1_state, sym1_riot_b_w))
+ MCFG_MOS6530n_IN_PA_CB(READ8(sym1_state, riot_a_r))
+ MCFG_MOS6530n_OUT_PA_CB(WRITE8(sym1_state, riot_a_w))
+ MCFG_MOS6530n_IN_PB_CB(READ8(sym1_state, riot_b_r))
+ MCFG_MOS6530n_OUT_PB_CB(WRITE8(sym1_state, riot_b_w))
MCFG_DEVICE_ADD("ttl74145", TTL74145, 0)
MCFG_TTL74145_OUTPUT_LINE_0_CB(WRITELINE(sym1_state, sym1_74145_output_0_w))
@@ -334,15 +346,21 @@ static MACHINE_CONFIG_START( sym1 )
MCFG_TTL74145_OUTPUT_LINE_6_CB(DEVWRITELINE("speaker", speaker_sound_device, level_w))
// lines 7-9 not connected
- MCFG_DEVICE_ADD("via6522_0", VIA6522, 0)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
+ MCFG_DEVICE_ADD("via1", VIA6522, SYM1_CLOCK)
+ MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("mainirq", input_merger_device, in_w<0>))
+
+ MCFG_DEVICE_ADD("via2", VIA6522, SYM1_CLOCK)
+ MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("mainirq", input_merger_device, in_w<1>))
+
+ MCFG_DEVICE_ADD("via3", VIA6522, SYM1_CLOCK)
+ MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(sym1_state, via3_a_w))
+ MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("mainirq", input_merger_device, in_w<2>))
- MCFG_DEVICE_ADD("via6522_1", VIA6522, 0)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
+ MCFG_INPUT_MERGER_ANY_HIGH("mainirq") // wire-or connection
+ MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
- MCFG_DEVICE_ADD("via6522_2", VIA6522, 0)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(sym1_state, sym1_via2_a_w))
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
+ MCFG_RS232_PORT_ADD("crt", default_rs232_devices, nullptr)
+ MCFG_RS232_PORT_ADD("tty", default_rs232_devices, nullptr) // actually a 20 mA current loop; 110 bps assumed
// internal ram
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mame/drivers/terco.cpp b/src/mame/drivers/terco.cpp
index e027b23aefb..1395d7e2d8b 100644
--- a/src/mame/drivers/terco.cpp
+++ b/src/mame/drivers/terco.cpp
@@ -310,5 +310,5 @@ ROM_START( t4490 )
ROM_LOAD( "terco4490-F861104.bin", 0xf000, 0x1000, CRC(a45bc3e7) SHA1(e12efa9a4c72e4bce1d59ad359ee66d7c3babfa6) )
ROM_END
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1986, t4490, 0, 0, t4490, t4490, t4490_state, 0, "Terco AB", "Terco 4490 Mill CNC Control", MACHINE_IS_SKELETON )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1986, t4490, 0, 0, t4490, t4490, t4490_state, 0, "Terco AB", "Terco 4490 Mill CNC Control", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/ts3000.cpp b/src/mame/drivers/ts3000.cpp
new file mode 100644
index 00000000000..c65364da180
--- /dev/null
+++ b/src/mame/drivers/ts3000.cpp
@@ -0,0 +1,42 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/***********************************************************************************************************************************
+
+2017-10-28 Skeleton
+
+Televideo TS-3000. CPU is 8088. Other chips are: 8259, 8253, 8237, 8255, NS8250, uPD765AC, MM58167AN.
+Crystals are: 18.432, 16.000, 24.000, 14.31818, 4.7727266. There's a barrel-type backup battery, and a bank of 8 dispswitches.
+There are 25-pin serial and parallel ports, and a FDC connector. There's an undumped prom labelled "U20 V1.0" at position U20.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+//#include "cpu/mcs51/mcs51.h"
+
+class ts3000_state : public driver_device
+{
+public:
+ ts3000_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+// , maincpu(*this, "maincpu")
+ { }
+
+protected:
+// required_device<i80c52_device> maincpu;
+};
+
+static INPUT_PORTS_START( ts3000 )
+INPUT_PORTS_END
+
+//static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, ts3000_state )
+//ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( ts3000 )
+MACHINE_CONFIG_END
+
+ROM_START( ts3000 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "U25 VER 2.03 BIOS D.u25", 0x0000, 0x4000, CRC(abaff64c) SHA1(b2f0e73d2a25a03d5bac558580919bd0400f4fcf) ) // The D at the end is handwritten
+ROM_END
+
+COMP( 198?, ts3000, 0, 0, ts3000, ts3000, ts3000_state, 0, "Televideo", "TS-3000", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/wyse.cpp b/src/mame/drivers/wyse.cpp
new file mode 100644
index 00000000000..41774221865
--- /dev/null
+++ b/src/mame/drivers/wyse.cpp
@@ -0,0 +1,44 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/***********************************************************************************************************************************
+
+2017-10-27 Skeleton
+
+Wyse is a well-known maker of terminals. It is presumed this is one of them.
+
+************************************************************************************************************************************/
+
+#include "emu.h"
+//#include "cpu/mcs51/mcs51.h"
+
+class wyse_state : public driver_device
+{
+public:
+ wyse_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+// , maincpu(*this, "maincpu")
+ { }
+
+protected:
+// required_device<i80c52_device> maincpu;
+};
+
+static INPUT_PORTS_START( wyse )
+INPUT_PORTS_END
+
+//static ADDRESS_MAP_START( prg_map, AS_PROGRAM, 8, wyse_state )
+//ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( wyse )
+MACHINE_CONFIG_END
+
+ROM_START( wyse )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ // unknown terminal (1984)
+ ROM_LOAD( "wyse_2201b.bin", 0x000000, 0x001000, CRC(ee318814) SHA1(0ac64b60ff978e607a087e9e6f4d547811c015c5) ) // chargen
+ ROM_LOAD( "wyse_2301e.bin", 0x000000, 0x002000, CRC(2a62ea25) SHA1(f69c596aab307ef1872df29d353b5a61ff77bb74) ) // program
+ // WY-160 terminal (1990)
+ ROM_LOAD( "wyse_251167-06.bin", 0x000000, 0x010000, CRC(36e920df) SHA1(8fb7f51b4f47ef63b21d421227d6fef98001e4e9) ) // program
+ROM_END
+
+COMP( 19??, wyse, 0, 0, wyse, wyse, wyse_state, 0, "Wyse", "Unknown terminal", MACHINE_IS_SKELETON )
diff --git a/src/mame/includes/boogwing.h b/src/mame/includes/boogwing.h
index c7537a83f76..53e8e089426 100644
--- a/src/mame/includes/boogwing.h
+++ b/src/mame/includes/boogwing.h
@@ -21,7 +21,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_deco104(*this, "ioprot104"),
+ m_deco104(*this, "ioprot"),
m_decocomn(*this, "deco_common"),
m_deco_tilegen1(*this, "tilegen1"),
m_deco_tilegen2(*this, "tilegen2"),
diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h
index 50d6dbbb8fd..2679566d7f5 100644
--- a/src/mame/includes/cninja.h
+++ b/src/mame/includes/cninja.h
@@ -62,7 +62,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
- required_device<generic_latch_8_device> m_soundlatch;
+ optional_device<generic_latch_8_device> m_soundlatch;
required_device<buffered_spriteram16_device> m_spriteram;
optional_device<buffered_spriteram16_device> m_spriteram2;
@@ -80,9 +80,7 @@ public:
DECLARE_WRITE16_MEMBER(cninja_pf34_control_w);
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
DECLARE_WRITE8_MEMBER(cninjabl2_oki_bank_w);
- DECLARE_DRIVER_INIT(stoneage);
DECLARE_DRIVER_INIT(mutantf);
- DECLARE_DRIVER_INIT(cninja);
DECLARE_DRIVER_INIT(cninjabl2);
DECLARE_VIDEO_START(stoneage);
DECLARE_VIDEO_START(mutantf);
diff --git a/src/mame/includes/deco32.h b/src/mame/includes/deco32.h
index 66f8940eb99..3fe8acfa04c 100644
--- a/src/mame/includes/deco32.h
+++ b/src/mame/includes/deco32.h
@@ -22,9 +22,8 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
+ m_ioprot(*this, "ioprot"),
m_deco_irq(*this, "irq"),
- m_deco146(*this, "ioprot"),
- m_deco104(*this, "ioprot104"),
m_decobsmt(*this, "decobsmt"),
m_spriteram(*this, "spriteram"),
m_sprgen(*this, "spritegen"),
@@ -46,15 +45,13 @@ public:
m_pf2_rowscroll32(*this, "pf2_rowscroll32"),
m_pf3_rowscroll32(*this, "pf3_rowscroll32"),
m_pf4_rowscroll32(*this, "pf4_rowscroll32"),
- m_generic_paletteram_32(*this, "paletteram"),
- m_ace_ram(*this, "ace_ram")
+ m_generic_paletteram_32(*this, "paletteram")
{ }
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
+ required_device<deco_146_base_device> m_ioprot;
optional_device<deco_irq_device> m_deco_irq;
- optional_device<deco146_device> m_deco146;
- optional_device<deco104_device> m_deco104;
optional_device<decobsmt_device> m_decobsmt;
optional_device<buffered_spriteram32_device> m_spriteram;
optional_device<decospr_device> m_sprgen;
@@ -79,35 +76,19 @@ public:
required_shared_ptr<uint32_t> m_pf3_rowscroll32;
required_shared_ptr<uint32_t> m_pf4_rowscroll32;
optional_shared_ptr<uint32_t> m_generic_paletteram_32;
- optional_shared_ptr<uint32_t> m_ace_ram;
-
- uint8_t m_nslasher_sound_irq; // nslasher and lockload
- int m_tattass_eprom_bit; // tattass
- int m_lastClock; // tattass
- char m_buffer[32]; // tattass
- int m_bufPtr; // tattass
- int m_pendingCommand; // tattass
- int m_readBitCount; // tattass
- int m_byteAddr; // tattass
- int m_ace_ram_dirty; // nslasher and tattass
- int m_has_ace_ram; // all - config
+
std::unique_ptr<uint8_t[]> m_dirty_palette; // all but captaven
int m_pri; // captaven, fghthist, nslasher and tattass
- std::unique_ptr<bitmap_ind16> m_tilemap_alpha_bitmap; // nslasher
uint16_t m_spriteram16[0x1000]; // captaven, fghthist, nslasher and tattass
uint16_t m_spriteram16_buffered[0x1000]; // captaven, fghthist, nslasher and tattass
- uint16_t m_spriteram16_2[0x1000]; //nslasher and tattass
- uint16_t m_spriteram16_2_buffered[0x1000]; //nslasher and tattass
uint16_t m_pf1_rowscroll[0x1000]; // common
uint16_t m_pf2_rowscroll[0x1000]; // common
uint16_t m_pf3_rowscroll[0x1000]; // common
uint16_t m_pf4_rowscroll[0x1000]; // common
// common
- DECLARE_READ16_MEMBER(deco_104_r);
- DECLARE_WRITE16_MEMBER(deco_104_w);
- DECLARE_READ16_MEMBER(deco_146_r);
- DECLARE_WRITE16_MEMBER(deco_146_w);
+ DECLARE_READ16_MEMBER(ioprot_r);
+ DECLARE_WRITE16_MEMBER(ioprot_w);
DECLARE_READ8_MEMBER(eeprom_r);
DECLARE_WRITE8_MEMBER(eeprom_w);
DECLARE_WRITE8_MEMBER(volume_w);
@@ -119,70 +100,113 @@ public:
DECLARE_WRITE32_MEMBER(pf4_rowscroll_w);
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
- // captaven
+ // captaven, fghthist, nslasher and tattass
+ DECLARE_READ32_MEMBER(spriteram_r);
+ DECLARE_WRITE32_MEMBER(spriteram_w);
+ DECLARE_WRITE32_MEMBER(buffer_spriteram_w);
+ DECLARE_WRITE32_MEMBER(pri_w);
+
+ // all but captaven
+ DECLARE_WRITE32_MEMBER(buffered_palette_w);
+ DECLARE_WRITE32_MEMBER(palette_dma_w);
+
+protected:
+ virtual void video_start() override;
+
+};
+
+class captaven_state : public deco32_state
+{
+public:
+ captaven_state(const machine_config &mconfig, device_type type, const char *tag)
+ : deco32_state(mconfig, type, tag)
+ { }
+
DECLARE_READ32_MEMBER(_71_r);
DECLARE_READ8_MEMBER(captaven_dsw1_r);
DECLARE_READ8_MEMBER(captaven_dsw2_r);
DECLARE_READ8_MEMBER(captaven_dsw3_r);
DECLARE_READ8_MEMBER(captaven_soundcpu_status_r);
- // fghthist
+ DECLARE_VIDEO_START(captaven);
+ DECLARE_DRIVER_INIT(captaven);
+
+ uint32_t screen_update_captaven(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ DECO16IC_BANK_CB_MEMBER(captaven_bank_callback);
+ DECOSPR_PRIORITY_CB_MEMBER(captaven_pri_callback);
+
+private:
+};
+
+class fghthist_state : public deco32_state
+{
+public:
+ fghthist_state(const machine_config &mconfig, device_type type, const char *tag)
+ : deco32_state(mconfig, type, tag)
+ { }
+
DECLARE_WRITE32_MEMBER(sound_w);
DECLARE_READ16_MEMBER(fghthist_in0_r);
DECLARE_READ16_MEMBER(fghthist_in1_r);
+ DECLARE_READ32_MEMBER(unk_status_r);
- // tattass
- DECLARE_WRITE32_MEMBER(tattass_control_w);
+ DECLARE_DRIVER_INIT(fghthist);
+ DECLARE_VIDEO_START(fghthist);
+
+ uint32_t screen_update_fghthist(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ DECO16IC_BANK_CB_MEMBER(fghthist_bank_callback);
+
+private:
+};
- // nslasher and lockload
- DECLARE_WRITE_LINE_MEMBER(sound_irq_nslasher);
- DECLARE_READ8_MEMBER(latch_r);
+// nslasher, tattass
+class nslasher_state : public deco32_state
+{
+public:
+ nslasher_state(const machine_config &mconfig, device_type type, const char *tag)
+ : deco32_state(mconfig, type, tag),
+ m_ace_ram(*this, "ace_ram")
+ { }
- // nslasher and tattass
+ DECLARE_WRITE32_MEMBER(tattass_control_w);
+ DECLARE_WRITE_LINE_MEMBER(tattass_sound_irq_w);
DECLARE_READ16_MEMBER(nslasher_debug_r);
DECLARE_READ32_MEMBER(spriteram2_r);
DECLARE_WRITE32_MEMBER(spriteram2_w);
DECLARE_WRITE32_MEMBER(buffer_spriteram2_w);
DECLARE_WRITE32_MEMBER(ace_ram_w);
-
- // captaven, fghthist, nslasher and tattass
- DECLARE_READ32_MEMBER(spriteram_r);
- DECLARE_WRITE32_MEMBER(spriteram_w);
- DECLARE_WRITE32_MEMBER(buffer_spriteram_w);
- DECLARE_WRITE32_MEMBER(pri_w);
-
- // all but captaven
- DECLARE_WRITE32_MEMBER(buffered_palette_w);
DECLARE_WRITE32_MEMBER(palette_dma_w);
DECLARE_DRIVER_INIT(tattass);
DECLARE_DRIVER_INIT(nslasher);
- DECLARE_DRIVER_INIT(captaven);
- DECLARE_DRIVER_INIT(fghthist);
- DECLARE_VIDEO_START(captaven);
- DECLARE_VIDEO_START(fghthist);
DECLARE_VIDEO_START(nslasher);
- uint32_t screen_update_captaven(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_fghthist(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_nslasher(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ DECLARE_READ16_MEMBER(port_b_tattass);
+ DECO16IC_BANK_CB_MEMBER(tattass_bank_callback);
+
+private:
void updateAceRam();
void mixDualAlphaSprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx0, gfx_element *gfx1, int mixAlphaTilemap);
- void deco32_sound_cb( address_space &space, uint16_t data, uint16_t mem_mask );
+ required_shared_ptr<uint32_t> m_ace_ram;
- void nslasher_sound_cb( address_space &space, uint16_t data, uint16_t mem_mask );
- DECLARE_READ16_MEMBER(port_b_tattass);
- void tattass_sound_cb( address_space &space, uint16_t data, uint16_t mem_mask );
-
- DECO16IC_BANK_CB_MEMBER(fghthist_bank_callback);
- DECO16IC_BANK_CB_MEMBER(captaven_bank_callback);
- DECO16IC_BANK_CB_MEMBER(tattass_bank_callback);
- DECOSPR_PRIORITY_CB_MEMBER(captaven_pri_callback);
+ std::unique_ptr<bitmap_ind16> m_tilemap_alpha_bitmap;
-protected:
- virtual void video_start() override;
+ uint16_t m_spriteram16_2[0x1000];
+ uint16_t m_spriteram16_2_buffered[0x1000];
+ int m_tattass_eprom_bit;
+ int m_lastClock;
+ char m_buffer[32];
+ int m_bufPtr;
+ int m_pendingCommand;
+ int m_readBitCount;
+ int m_byteAddr;
+ int m_ace_ram_dirty;
};
class dragngun_state : public deco32_state
diff --git a/src/mame/includes/einstein.h b/src/mame/includes/einstein.h
index 936c5e05d11..7e12b8a4017 100644
--- a/src/mame/includes/einstein.h
+++ b/src/mame/includes/einstein.h
@@ -11,8 +11,8 @@
#pragma once
-#include "video/mc6845.h"
#include "cpu/z80/z80daisy.h"
+#include "bus/einstein/pipe.h"
#include "machine/timer.h"
#include "machine/wd_fdc.h"
#include "machine/z80ctc.h"
@@ -22,6 +22,7 @@
#include "bus/centronics/ctronics.h"
#include "screen.h"
+
/***************************************************************************
CONSTANTS
***************************************************************************/
@@ -54,13 +55,9 @@ class einstein_state : public driver_device
public:
einstein_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, IC_I001),
+ m_pipe(*this, "pipe"),
m_fdc(*this, IC_I042),
- m_color_screen(*this, "screen"),
- m_ctc(*this, IC_I058),
- m_tms9929a(*this, "tms9929a"),
- m_region_gfx1(*this, "gfx1"),
- m_mc6845(*this, "crtc"),
- m_crtc_screen(*this, "80column"),
m_uart(*this, IC_I060),
m_ram(*this, RAM_TAG),
m_centronics(*this, "centronics"),
@@ -71,16 +68,11 @@ public:
m_line(*this, "LINE%u", 0),
m_extra(*this, "EXTRA"),
m_buttons(*this, "BUTTONS"),
- m_config(*this, "config"),
- m_80column_dips(*this, "80column_dips"),
- m_palette(*this, "palette")
+ m_config(*this, "config")
{
}
DECLARE_FLOPPY_FORMATS( floppy_formats );
- DECLARE_WRITE8_MEMBER(einstein_80col_ram_w);
- DECLARE_READ8_MEMBER(einstein_80col_ram_r);
- DECLARE_READ8_MEMBER(einstein_80col_state_r);
DECLARE_WRITE8_MEMBER(einstein_keyboard_line_write);
DECLARE_READ8_MEMBER(einstein_keyboard_data_read);
DECLARE_WRITE8_MEMBER(einstein_rom_w);
@@ -91,15 +83,10 @@ public:
DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
DECLARE_WRITE_LINE_MEMBER(write_centronics_perror);
DECLARE_WRITE_LINE_MEMBER(write_centronics_fault);
- DECLARE_MACHINE_START(einstein2);
- DECLARE_MACHINE_RESET(einstein2);
- uint32_t screen_update_einstein2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(einstein_keyboard_timer_callback);
- DECLARE_WRITE_LINE_MEMBER(einstein_6845_de_changed);
DECLARE_WRITE8_MEMBER(einstein_drsel_w);
DECLARE_WRITE_LINE_MEMBER(einstein_serial_transmit_clock);
DECLARE_WRITE_LINE_MEMBER(einstein_serial_receive_clock);
- MC6845_UPDATE_ROW(crtc_update_row);
int m_interrupt;
int m_interrupt_mask;
@@ -108,11 +95,10 @@ protected:
virtual void machine_start() override;
virtual void machine_reset() override;
+private:
+ required_device<cpu_device> m_maincpu;
+ required_device<tatung_pipe_device> m_pipe;
required_device<wd1770_device> m_fdc;
- required_device<screen_device> m_color_screen;
- required_device<z80ctc_device> m_ctc;
- required_device<tms9929a_device> m_tms9929a;
- optional_memory_region m_region_gfx1;
int m_rom_enabled;
@@ -120,12 +106,6 @@ protected:
uint8_t m_keyboard_line;
uint8_t m_keyboard_data;
- /* 80 column device */
- optional_device<mc6845_device> m_mc6845;
- optional_device<screen_device> m_crtc_screen;
- std::unique_ptr<uint8_t[]> m_crtc_ram;
- uint8_t m_de;
-
int m_centronics_busy;
int m_centronics_perror;
int m_centronics_fault;
@@ -141,10 +121,6 @@ protected:
required_ioport m_extra;
required_ioport m_buttons;
required_ioport m_config;
- optional_ioport m_80column_dips;
-
-public:
- optional_device<palette_device> m_palette;
void einstein_scan_keyboard();
void einstein_page_rom();
diff --git a/src/mame/includes/kaypro.h b/src/mame/includes/kaypro.h
index ba977be1ef0..19c872a49fb 100644
--- a/src/mame/includes/kaypro.h
+++ b/src/mame/includes/kaypro.h
@@ -8,16 +8,12 @@
#include "cpu/z80/z80.h"
#include "cpu/z80/z80daisy.h"
#include "machine/z80pio.h"
-#include "machine/z80dart.h"
-#include "machine/com8116.h"
#include "bus/centronics/ctronics.h"
#include "imagedev/snapquik.h"
#include "sound/beep.h"
#include "video/mc6845.h"
#include "machine/wd_fdc.h"
-struct kay_kbd_t;
-
class kaypro_state : public driver_device
{
public:
@@ -33,8 +29,6 @@ public:
, m_p_chargen(*this, "chargen")
, m_pio_g(*this, "z80pio_g")
, m_pio_s(*this, "z80pio_s")
- , m_sio(*this, "z80sio")
- , m_sio2x(*this, "z80sio_2x")
, m_centronics(*this, "centronics")
, m_fdc(*this, "fdc")
, m_floppy0(*this, "fdc:0")
@@ -63,19 +57,14 @@ public:
DECLARE_MACHINE_RESET(kaypro);
DECLARE_VIDEO_START(kaypro);
DECLARE_PALETTE_INIT(kaypro);
- DECLARE_MACHINE_RESET(kay_kbd);
DECLARE_DRIVER_INIT(kaypro);
DECLARE_FLOPPY_FORMATS(kayproii_floppy_formats);
DECLARE_FLOPPY_FORMATS(kaypro2x_floppy_formats);
uint32_t screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_kaypro2x(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(kay_kbd_interrupt);
- DECLARE_READ8_MEMBER(kaypro_sio_r);
- DECLARE_WRITE8_MEMBER(kaypro_sio_w);
MC6845_UPDATE_ROW(kaypro2x_update_row);
DECLARE_QUICKLOAD_LOAD_MEMBER(kaypro);
- TIMER_CALLBACK_MEMBER( kay_kbd_beepoff );
private:
uint8_t m_mc6845_cursor[16];
@@ -83,12 +72,7 @@ private:
uint8_t m_mc6845_ind;
uint8_t m_framecnt;
uint8_t *m_p_videoram;
- kay_kbd_t *m_kbd;
int m_centronics_busy;
- void kay_kbd_in(uint8_t data );
- uint8_t kay_kbd_c_r();
- uint8_t kay_kbd_d_r();
- void kay_kbd_d_w( uint8_t data );
bool m_is_motor_off;
uint8_t m_fdc_rq;
uint8_t m_system_port;
@@ -102,8 +86,6 @@ private:
required_region_ptr<u8> m_p_chargen;
optional_device<z80pio_device> m_pio_g;
optional_device<z80pio_device> m_pio_s;
- required_device<z80sio0_device> m_sio;
- optional_device<z80sio0_device> m_sio2x;
required_device<centronics_device> m_centronics;
required_device<fd1793_device> m_fdc;
required_device<floppy_connector> m_floppy0;
diff --git a/src/mame/includes/lemmings.h b/src/mame/includes/lemmings.h
index 54d4fa1dfe8..4b8f87ec9ff 100644
--- a/src/mame/includes/lemmings.h
+++ b/src/mame/includes/lemmings.h
@@ -53,8 +53,6 @@ public:
DECLARE_WRITE16_MEMBER(lemmings_control_w);
DECLARE_READ16_MEMBER(lemmings_trackball_r);
- void lemmings_sound_cb( address_space &space, uint16_t data, uint16_t mem_mask );
- DECLARE_WRITE8_MEMBER(lemmings_sound_ack_w);
DECLARE_WRITE16_MEMBER(lemmings_pixel_0_w);
DECLARE_WRITE16_MEMBER(lemmings_pixel_1_w);
DECLARE_WRITE16_MEMBER(lemmings_vram_w);
diff --git a/src/mame/machine/deco146.cpp b/src/mame/machine/deco146.cpp
index a7f7d7e1bbe..05bc061ce3e 100644
--- a/src/mame/machine/deco146.cpp
+++ b/src/mame/machine/deco146.cpp
@@ -1251,8 +1251,9 @@ void deco_146_base_device::write_protport(address_space &space, uint16_t address
}
else if ((address&0xff) == m_soundlatch_port)
{
- logerror("LOAD SOUND LATCH %04x %04x\n", data, mem_mask);
- m_soundlatch_w(space, data, mem_mask);
+ logerror("LOAD SOUND LATCH: %04x\n", data);
+ m_soundlatch = data & 0xff;
+ m_soundlatch_irq_cb(ASSERT_LINE);
}
// always store
@@ -1310,17 +1311,19 @@ uint16_t deco_146_base_device::read_data(uint16_t address, uint16_t mem_mask, ui
return retdata;
}
-
+READ8_MEMBER( deco_146_base_device::soundlatch_r )
+{
+ m_soundlatch_irq_cb(CLEAR_LINE);
+ return m_soundlatch;
+}
deco_146_base_device::deco_146_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock),
m_port_a_r(*this),
m_port_b_r(*this),
m_port_c_r(*this),
- m_sound_latch(*this, ":soundlatch")
+ m_soundlatch_irq_cb(*this)
{
- m_soundlatch_w = deco146_port_write_cb(FUNC(deco_146_base_device::soundlatch_default), this);
-
m_external_addrswap[0] = 0;
m_external_addrswap[1] = 1;
m_external_addrswap[2] = 2;
@@ -1333,20 +1336,6 @@ deco_146_base_device::deco_146_base_device(const machine_config &mconfig, device
m_external_addrswap[9] = 9;
}
-
-
-void deco_146_base_device::soundlatch_default(address_space &space, uint16_t data, uint16_t mem_mask)
-{
- if (m_sound_latch != nullptr)
- m_sound_latch->write(space, 0, data & 0xff);
- cpu_device* cpudev = (cpu_device*)machine().device(":audiocpu");
- if (cpudev) cpudev->set_input_line(0, HOLD_LINE);
-}
-
-
-
-
-void deco_146_base_device::set_soundlatch_cb(device_t &device,deco146_port_write_cb port_cb) { deco_146_base_device &dev = downcast<deco_146_base_device &>(device); dev.m_soundlatch_w = port_cb; }
void deco_146_base_device::set_interface_scramble(device_t &device,uint8_t a9, uint8_t a8, uint8_t a7, uint8_t a6, uint8_t a5, uint8_t a4, uint8_t a3,uint8_t a2,uint8_t a1,uint8_t a0)
{
deco_146_base_device &dev = downcast<deco_146_base_device &>(device);
@@ -1361,6 +1350,7 @@ void deco_146_base_device::set_interface_scramble(device_t &device,uint8_t a9, u
dev.m_external_addrswap[1] = a1;
dev.m_external_addrswap[0] = a0;
}
+
void deco_146_base_device::set_use_magic_read_address_xor(device_t &device, int use_xor)
{
deco_146_base_device &dev = downcast<deco_146_base_device &>(device);
@@ -1376,13 +1366,11 @@ void deco_146_base_device::device_start()
m_rambank1[i] = 0xffff;
}
-
// bind our handler
m_port_a_r.resolve_safe(0xffff);
m_port_b_r.resolve_safe(0xffff);
m_port_c_r.resolve_safe(0xffff);
- m_soundlatch_w.bind_relative_to(*owner());
-
+ m_soundlatch_irq_cb.resolve_safe();
save_item(NAME(m_xor));
save_item(NAME(m_nand));
@@ -1396,6 +1384,7 @@ void deco_146_base_device::device_start()
save_item(NAME(m_latchaddr));
save_item(NAME(m_latchdata));
save_item(NAME(m_latchflag));
+ save_item(NAME(m_soundlatch));
}
void deco_146_base_device::device_reset()
@@ -1407,14 +1396,15 @@ void deco_146_base_device::device_reset()
region_selects[4] = 0;
region_selects[5] = 0;
-
-
m_current_rambank = 0;
m_latchaddr = 0xffff;
m_latchdata = 0x0000;
m_latchflag = 0;
+ m_soundlatch = 0x00;
+ m_soundlatch_irq_cb(CLEAR_LINE);
+
m_xor=0;
// m_nand=0xffff;
m_nand=0x0; // wizard fire doesn't initialize it, but accesses addresses rohga needs the mask applied on
diff --git a/src/mame/machine/deco146.h b/src/mame/machine/deco146.h
index c9d97f32083..3b817d864f2 100644
--- a/src/mame/machine/deco146.h
+++ b/src/mame/machine/deco146.h
@@ -7,8 +7,6 @@
#include "machine/gen_latch.h"
-typedef device_delegate<void (address_space &space, uint16_t data, uint16_t mem_mask)> deco146_port_write_cb;
-
#define MCFG_DECO146_IN_PORTA_CB(_devcb) \
devcb = &deco_146_base_device::set_port_a_cb(*device, DEVCB_##_devcb);
@@ -19,9 +17,8 @@ typedef device_delegate<void (address_space &space, uint16_t data, uint16_t mem_
#define MCFG_DECO146_IN_PORTC_CB(_devcb) \
devcb = &deco_146_base_device::set_port_c_cb(*device, DEVCB_##_devcb);
-#define MCFG_DECO146_SET_SOUNDLATCH_CALLBACK( _class, _method) \
- deco_146_base_device::set_soundlatch_cb(*device, deco146_port_write_cb(&_class::_method, #_class "::" #_method, nullptr, (_class *)nullptr));
-
+#define MCFG_DECO146_SOUNDLATCH_IRQ_CB(_devcb) \
+ devcb = &deco_146_base_device::set_soundlatch_irq_callback(*device, DEVCB_##_devcb);
// there are some standard ways the chip gets hooked up, so have them here ready to use
#define MCFG_DECO146_SET_INTERFACE_SCRAMBLE( a9,a8,a7,a6,a5,a4,a3,a2,a1,a0 ) \
@@ -88,20 +85,17 @@ public:
template<class Object> static devcb_base &set_port_a_cb(device_t &device, Object &&object) { return downcast<deco_146_base_device &>(device).m_port_a_r.set_callback(std::forward<Object>(object)); }
template<class Object> static devcb_base &set_port_b_cb(device_t &device, Object &&object) { return downcast<deco_146_base_device &>(device).m_port_b_r.set_callback(std::forward<Object>(object)); }
template<class Object> static devcb_base &set_port_c_cb(device_t &device, Object &&object) { return downcast<deco_146_base_device &>(device).m_port_c_r.set_callback(std::forward<Object>(object)); }
- static void set_soundlatch_cb(device_t &device,deco146_port_write_cb port_cb);
static void set_interface_scramble(device_t &device,uint8_t a9, uint8_t a8, uint8_t a7, uint8_t a6, uint8_t a5, uint8_t a4, uint8_t a3,uint8_t a2,uint8_t a1,uint8_t a0);
static void set_use_magic_read_address_xor(device_t &device, int use_xor);
+ template <class Object> static devcb_base &set_soundlatch_irq_callback(device_t &device, Object &&cb)
+ { return downcast<deco_146_base_device &>(device).m_soundlatch_irq_cb.set_callback(std::forward<Object>(cb)); }
-
-
+ DECLARE_READ8_MEMBER( soundlatch_r );
devcb_read16 m_port_a_r;
devcb_read16 m_port_b_r;
devcb_read16 m_port_c_r;
- deco146_port_write_cb m_soundlatch_w;
-
- void soundlatch_default(address_space &space, uint16_t data, uint16_t mem_mask);
uint8_t m_bankswitch_swap_read_address;
uint16_t m_magic_read_address_xor;
@@ -110,7 +104,6 @@ public:
uint8_t m_mask_port;
uint8_t m_soundlatch_port;
-
uint8_t m_external_addrswap[10];
deco146port_xx const *m_lookup_table;
@@ -130,7 +123,6 @@ protected:
int m_current_rambank;
-
uint16_t m_nand;
uint16_t m_xor;
@@ -139,10 +131,12 @@ protected:
uint8_t m_configregion; // which value of upper 4 address lines accesses the config region
int m_latchflag;
+
private:
uint8_t region_selects[6];
- optional_device<generic_latch_8_device> m_sound_latch;
+ uint8_t m_soundlatch;
+ devcb_write_line m_soundlatch_irq_cb;
};
class deco146_device : public deco_146_base_device
diff --git a/src/mame/machine/interpro_ioga.cpp b/src/mame/machine/interpro_ioga.cpp
index 9a58de26336..e790a3ab269 100644
--- a/src/mame/machine/interpro_ioga.cpp
+++ b/src/mame/machine/interpro_ioga.cpp
@@ -342,6 +342,8 @@ void interpro_ioga_device::set_int_line(interrupt_type type, int number, int sta
m_line_state = (state == ASSERT_LINE) ? (m_line_state | mask) : (m_line_state & ~mask);
}
else
+#else
+ (void)m_line_state;
#endif
set_pending(type, number, state == ASSERT_LINE);
diff --git a/src/mame/machine/kay_kbd.cpp b/src/mame/machine/kay_kbd.cpp
index 473a77f8ac4..de2ee0935fc 100644
--- a/src/mame/machine/kay_kbd.cpp
+++ b/src/mame/machine/kay_kbd.cpp
@@ -1,28 +1,16 @@
-// license:GPL-2.0+
-// copyright-holders:Juergen Buchmueller
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
/******************************************************************************
*
- * kay_kbd.c
+ * kay_kbd.cpp
*
- * Kaypro II Serial Keyboard
- *
- * Most of this is copied from the old kaypro.c,
- * rather than re-inventing the wheel.
- *
- * Juergen Buchmueller, July 1998
- * Benjamin C. W. Sittler, July 1998 (new keyboard table)
- *
- * Converted to a serial device (as far as MESS will allow)
- * by Robbbert, April 2009.
+ * Kaypro Serial Keyboards
*
******************************************************************************/
#include "emu.h"
#include "machine/kay_kbd.h"
-#include "sound/beep.h"
-#include "includes/kaypro.h"
-
/*
* The KAYPRO keyboard has roughly the following layout:
@@ -49,463 +37,365 @@
* arrow graphics pointing in the appropriate directions. The F and J keys are specially shaped,
* since they are the "home keys" for touch-typing. The CAPS LOCK key has a build-in red indicator
* which is lit when CAPS LOCK is pressed once, and extinguished when the key is pressed again.
- *
- * Technical Notes
- * ---------------
- * The keyboard interfaces to the computer using a serial protocol. Modifier keys are handled
- * inside the keyboards, as is the CAPS LOCK key. The arrow keys and the numeric keypad send
- * non-ASCII codes which are not affected by the modifier keys. The remaining keys send the
- * appropriate ASCII values.
- *
- * The keyboard has a built-in buzzer which is activated briefly by a non-modifier keypress,
- * producing a "clicking" sound for user feedback. Additionally, this buzzer can be activated
- * for a longer period by sending a 0x04 byte to the keyboard. This is used by the ROM soft
- * terminal to alert the user in case of a BEL.
- *
- * 2008-05 FP:
- * Small note about natural keyboard support: currently,
- * - "Line Feed" is mapped to the 'End' key
- * - "Keypad ," is not mapped
*/
-struct kay_kbd_t
-{
- beep_device *beeper;
- uint8_t buff[16];
- uint8_t head;
- uint8_t tail;
- uint8_t beep_on;
- uint8_t control_status;
- uint8_t keyrows[10];
- int lastrow;
- int mask;
- int key;
- int repeat;
- int repeater;
-};
-
-INPUT_PORTS_START( kay_kbd )
- PORT_START("ROW0")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
-
- PORT_START("ROW1")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("BACK SPACE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
-
- PORT_START("ROW2")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
-
- PORT_START("ROW3")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
-
- PORT_START("ROW4")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
-
- PORT_START("ROW5")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_MAMEKEY(LSHIFT))
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
-
- PORT_START("ROW6")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT))
-
- PORT_START("ROW7")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("LINE FEED") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END))
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME("Keypad ,") PORT_CODE(KEYCODE_PLUS_PAD)
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
-
- PORT_START("ROW8")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
-
- PORT_START("ROW9")
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("\xE2\x86\x91") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("\xE2\x86\x93") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("\xE2\x86\x90") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME("\xE2\x86\x92") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
- PORT_BIT(0xf0, 0x00, IPT_UNUSED)
+
+/*
+Kaypro 10 keyboard
+
+This is a TTL-level asynchronous serial keyboard using mask-programmed
+MCS-48 MCU. Serial transmission and reception are handled in software
+using the onboard timer/counter interrupt. The frame format is 1 start
+bit, 8 data bits, no parity, and 1 stop bit.
+
+Active components:
+* Mitsubishi M5L8049-109P-6 (MCS-48 MCU with 2KiB mask ROM)
+* SN74154N (4-to-16 demultiplexer)
+* DM7406N (hex inverter with open collector outputs)
+* SN75451BP (dual high-speed, high-current line driver with AND inputs)
+* 6.000MHz crystal
+
+D0-D3 select the key matrix row, only 0x0..0xE are used (0x0F ignored).
+
+D4 is the CAPS LOCK LED output.
+
+P1 is connected to the key matrix columns.
+
+P2.1, P2.2 and P2.3 are CTRL, CAPS LOCK, and SHIFT inputs.
+
+P2.6 drives the speaker (1.5625kHz tone generated using timer/counter).
+
+P2.7 is the serial data output to the host.
+
+T1 is the serial data input from the host.
+
+The program appears to be able to support "typewriter shift" and
+"bitshift" layouts, and both ASCII and Kaypro control codes for the
+numeric keypad, depending on how the matrix is wired. All positions in
+the key matrix will produce characters, although it's not clear whether
+all of them are designed to serve a purpose - some may just be emergent
+behaviour from the decoding algorithm.
+
+The serial rate is generated by reloading the T register with 0xfe and
+transfering a bit every 21 interrupts, giving a rate within 1% of the
+desired 300 Baud:
+6MHz / 15 / 32 / (0x100 - 0xfe) / 21 = 297.62 Baud
+
+This scheme allows only 64 machine cycles between interrupts, and more
+than half of thse are consumed by the timer service routine itself.
+
+The program ROM checksum routine is supposed to compute the sum of all
+program ROM bytes modulo 256 and the XOR of all program ROM bytes, but
+due to bugs it omits the first byte of each page (0x000, 0x100, 0x200,
+0x300, 0x400, 0x500, 0x600 and 0x700).
+
+The serial command processing is quite lax in what it accepts:
+xxxx xxx1 ignored
+xxxx xx10 short beep
+xxxx x100 long beep
+xxx1 x000 answer back with 0xAA?
+
+The Kaypro II was sold with a different keyboard using an 8751 (MCS-51)
+MCU, but we don't have a dump for it.
+*/
+#include "cpu/mcs48/mcs48.h"
+#include "speaker.h"
+
+
+DEFINE_DEVICE_TYPE(KAYPRO_10_KEYBOARD, kaypro_10_keyboard_device, "kaypro10kbd", "Kaypro 10 Keyboard")
+
+
+namespace {
+
+ROM_START(kaypro_10_keyboard)
+ ROM_REGION(0x0800, "mcu", 0)
+ ROM_LOAD("m5l8049.bin", 0x0000, 0x0800, CRC(dc772f80) SHA1(aa7cd3f476466203294675d56098dff45952b9b0))
+ROM_END
+
+INPUT_PORTS_START(kaypro_keyboard_typewriter)
+ PORT_START("ROW.0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_NAME("Pad 0")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_NAME("Pad 3")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_NAME("Pad 6")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_NAME("Pad 9")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xf8
+
+ PORT_START("ROW.1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xa5
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_NAME("Pad 2")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) PORT_NAME("Pad 5")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_NAME("Pad 8")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xf7
+
+ PORT_START("ROW.2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xa4
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_NAME("Pad 1")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_NAME("Pad 4")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_NAME("Pad 7")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xf6
+
+ PORT_START("ROW.3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RALT) PORT_CHAR(10) PORT_NAME("LINE FEED")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_NAME("DEL")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xe0
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xf5
+
+ PORT_START("ROW.4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xa3
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("RETURN")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xd4
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_NAME("BACK SPACE")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+
+ PORT_START("ROW.5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+
+ PORT_START("ROW.6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
+
+ PORT_START("ROW.7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xa2
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+
+ PORT_START("ROW.8")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xa1
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR(';')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xf0
+
+ PORT_START("ROW.9")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xa0
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xb0
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xfe
+
+ PORT_START("ROW.A")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_NAME("Pad .")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) PORT_NAME("Pad ENTER")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("Pad ,")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_NAME("Pad -")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xf9
+
+ PORT_START("ROW.B")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) // 2 for ASCII keypad
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // 1 for ASCII keypad
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) // 0 for "bitshift" layout or ASCII keypad
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) // 7 for ASCII keypad
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) // 0 for "bitshift" layout or ASCII keypad
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) // 9 for ASCII keypad
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) // 8 for ASCII keypad
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) // . for ASCII keypad
+
+ PORT_START("ROW.C")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) // 6 & for "bitshift" layout
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // 3 # for "bitshift" layout? identical to "typewriter shift" anyway
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) // 2 " for "bitshift" layout
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) // "typewriter shift" 2 @ duplicated here
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) // 6 for ASCII keypad
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) // 5 for ASCII keypad
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) // 4 for ASCII keypad
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) // 3 for ASCII keypad
+
+ PORT_START("ROW.D")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) // ` @ for "bitshift" layout
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // - = for "bitshift" layout
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) // : * for "bitshift" layout
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) // ~ ^ for "bitshift" layout
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) // "typewriter shift" 6 ^ duplicated here
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) // 9 ) for "bitshift" layout
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) // 8 ( for "bitshift" layout
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) // 7 ' for "bitshift" layout
+
+ PORT_START("ROW.E")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xe0
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0x90
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xa0
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0x00
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xe0
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0xc0
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN) // 0x54
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) // ; + for "bitshift" layout
+
+ PORT_START("ROW.F")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) // not scanned
+
+ PORT_START("MOD")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) PORT_NAME("CTRL")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_NAME("CAPS LOCK")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_NAME("SHIFT")
INPUT_PORTS_END
-static const uint8_t keyboard[8][10][8] = {
- { /* normal */
- { 27,'1','2','3','4','5','6','7'},
- {'8','9','0','-','=','`', 8, 9},
- {'q','w','e','r','t','y','u','i'},
- {'o','p','[',']', 13,127, 0, 0},
- {'a','s','d','f','g','h','j','k'},
- {'l',';', 39, 92, 0,'z','x','c'},
- {'v','b','n','m',',','.','/', 0},
- { 10, 32, 228, 211, 195, 178, 177, 192},
- { 193, 194, 208, 209, 210, 225, 226, 227},
- { 241, 242, 243, 244, 0, 0, 0, 0},
- },
- { /* Shift */
- { 27,'!','@','#','$','%','^','&'},
- {'*','(',')','_','+','~', 8, 9},
- {'Q','W','E','R','T','Y','U','I'},
- {'O','P','{','}', 13,127, 0, 0},
- {'A','S','D','F','G','H','J','K'},
- {'L',':','"','|', 0,'Z','X','C'},
- {'V','B','N','M','<','>','?', 0},
- { 10, 32, 228, 211, 195, 178, 177, 192},
- { 193, 194, 208, 209, 210, 225, 226, 227},
- { 241, 242, 243, 244, 0, 0, 0, 0},
- },
- { /* Control */
- { 27,'1','2','3','4','5','6','7'},
- {'8','9','0','-','=','`', 8, 9},
- { 17, 23, 5, 18, 20, 25, 21, 9},
- { 15, 16, 27, 29, 13,127, 0, 0},
- { 1, 19, 4, 6, 7, 8, 10, 11},
- { 12,';', 39, 28, 0, 26, 24, 3},
- { 22, 2, 14, 13,',','.','/', 0},
- { 10, 32, 228, 211, 195, 178, 177, 192},
- { 193, 194, 208, 209, 210, 225, 226, 227},
- { 241, 242, 243, 244, 0, 0, 0, 0},
- },
- { /* Shift+Control */
- { 27,'!', 0,'#','$','%', 30,'&'},
- {'*','(',')', 31,'+','~', 8, 9},
- { 17, 23, 5, 18, 20, 25, 21, 9},
- { 15, 16, 27, 29, 13,127, 0, 0},
- { 1, 19, 4, 6, 7, 8, 10, 11},
- { 12,':','"', 28, 0, 26, 24, 3},
- { 22, 2, 14, 13,',','.','/', 0},
- { 10, 32, 228, 211, 195, 178, 177, 192},
- { 193, 194, 208, 209, 210, 225, 226, 227},
- { 241, 242, 243, 244, 0, 0, 0, 0},
- },
- { /* CapsLock */
- { 27,'1','2','3','4','5','6','7'},
- {'8','9','0','-','=','`', 8, 9},
- {'Q','W','E','R','T','Y','U','I'},
- {'O','P','[',']', 13,127, 0, 0},
- {'A','S','D','F','G','H','J','K'},
- {'L',';', 39, 92, 0,'Z','X','C'},
- {'V','B','N','M',',','.','/', 0},
- { 10, 32, 228, 211, 195, 178, 177, 192},
- { 193, 194, 208, 209, 210, 225, 226, 227},
- { 241, 242, 243, 244, 0, 0, 0, 0},
- },
- { /* Shift+CapsLock */
- { 27,'!','@','#','$','%','^','&'},
- {'*','(',')','_','+','~', 8, 9},
- {'Q','W','E','R','T','Y','U','I'},
- {'O','P','{','}', 13,127, 0, 0},
- {'A','S','D','F','G','H','J','K'},
- {'L',':','"','|', 0,'Z','X','C'},
- {'V','B','N','M','<','>','?', 0},
- { 10, 32, 228, 211, 195, 178, 177, 192},
- { 193, 194, 208, 209, 210, 225, 226, 227},
- { 241, 242, 243, 244, 0, 0, 0, 0},
- },
- { /* Control+CapsLock */
- { 27,'1','2','3','4','5','6','7'},
- {'8','9','0','-','=','`', 8, 9},
- { 17, 23, 5, 18, 20, 25, 21, 9},
- { 15, 16, 27, 29, 13,127, 0, 0},
- { 1, 19, 4, 6, 7, 8, 10, 11},
- { 12,';', 39, 28, 0, 26, 24, 3},
- { 22, 2, 14, 13,',','.','/', 0},
- { 10, 32, 228, 211, 195, 178, 177, 192},
- { 193, 194, 208, 209, 210, 225, 226, 227},
- { 241, 242, 243, 244, 0, 0, 0, 0},
- },
- { /* Shift+Control+CapsLock */
- { 27,'!', 0,'#','$','%', 30,'&'},
- {'*','(',')', 31,'+','~', 8, 9},
- { 17, 23, 5, 18, 20, 25, 21, 9},
- { 15, 16, 27, 29, 13,127, 0, 0},
- { 1, 19, 4, 6, 7, 8, 10, 11},
- { 12,':','"', 28, 0, 26, 24, 3},
- { 22, 2, 14, 13,',','.','/', 0},
- { 10, 32, 228, 211, 195, 178, 177, 192},
- { 193, 194, 208, 209, 210, 225, 226, 227},
- { 241, 242, 243, 244, 0, 0, 0, 0},
- },
-};
-
-MACHINE_RESET_MEMBER(kaypro_state,kay_kbd)
-{
- kay_kbd_t *kbd = m_kbd = auto_alloc_clear(machine(), <kay_kbd_t>());
-
- /* disable CapsLock LED initially */
- output().set_led_value(1, 1);
- output().set_led_value(1, 0);
- kbd->beeper = machine().device<beep_device>("beeper");
- kbd->beep_on = 1;
- kbd->control_status = 0x14;
- kbd->beeper->set_state(0);
- kbd->head = kbd->tail = 0; /* init buffer */
-}
+INPUT_PORTS_START(kaypro_keyboard_bitshift)
+ PORT_INCLUDE(kaypro_keyboard_typewriter)
-/******************************************************
- * vertical blank interrupt
- * used to scan keyboard; newly pressed keys
- * are stuffed into a keyboard buffer;
- * also drives keyboard LEDs and
- * and handles autorepeating keys
- ******************************************************/
-INTERRUPT_GEN_MEMBER(kaypro_state::kay_kbd_interrupt)
-{
- kay_kbd_t *kbd = m_kbd;
- int mod, row, col, chg, newval;
- uint8_t *keyrows = kbd->keyrows;
-
- if( kbd->repeat )
- {
- if( !--kbd->repeat )
- kbd->repeater = 4;
- }
- else
- if( kbd->repeater )
- {
- kbd->repeat = kbd->repeater;
- }
-
- row = 9;
- newval = machine().root_device().ioport("ROW9")->read();
- chg = keyrows[row] ^ newval;
-
- if (!chg) { newval = machine().root_device().ioport("ROW8")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) { newval = machine().root_device().ioport("ROW7")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) { newval = machine().root_device().ioport("ROW6")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) { newval = machine().root_device().ioport("ROW5")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) { newval = machine().root_device().ioport("ROW4")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) { newval = machine().root_device().ioport("ROW3")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) { newval = machine().root_device().ioport("ROW2")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) { newval = machine().root_device().ioport("ROW1")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) { newval = machine().root_device().ioport("ROW0")->read(); chg = keyrows[--row] ^ newval; }
- if (!chg) --row;
-
- if (row >= 0)
- {
- kbd->repeater = 0x00;
- kbd->mask = 0x00;
- kbd->key = 0x00;
- kbd->lastrow = row;
- /* CapsLock LED */
- if( row == 3 && chg == 0x80 )
- output().set_led_value(1, (kbd->keyrows[3] & 0x80) ? 0 : 1);
-
- if (newval & chg) /* key(s) pressed ? */
- {
- mod = 0;
-
- /* Shift modifier */
- if ( (keyrows[5] & 0x10) || (keyrows[6] & 0x80) )
- mod |= 1;
-
- /* Control modifier */
- if (keyrows[3] & 0x40)
- mod |= 2;
-
- /* CapsLock modifier */
- if (keyrows[3] & 0x80)
- mod |= 4;
-
- /* find newval key */
- kbd->mask = 0x01;
- for (col = 0; col < 8; col ++)
- {
- if (chg & kbd->mask)
- {
- newval &= kbd->mask;
- kbd->key = keyboard[mod][row][col];
- break;
- }
- kbd->mask <<= 1;
- }
- if( kbd->key ) /* normal key */
- {
- kbd->repeater = 30;
- kay_kbd_in(kbd->key);
- }
- else
- if( (row == 0) && (chg == 0x04) ) /* Ctrl-@ (NUL) */
- kay_kbd_in(0);
- keyrows[row] |= newval;
- }
- else
- {
- kbd->keyrows[row] = newval;
- }
- kbd->repeat = kbd->repeater;
- }
- else if ( kbd->key && (keyrows[kbd->lastrow] & kbd->mask) && kbd->repeat == 0 )
- {
- kay_kbd_in(kbd->key);
- }
-}
+ PORT_MODIFY("ROW.2")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // 6 ^ for "typewriter shift" layout
-#if 0
+ PORT_MODIFY("ROW.3")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // 7 & for "typewriter shift" layout
-/******************************************************
- * kaypro_const_w (write console status ;)
- * bit
- * 0 flush keyboard buffer
- ******************************************************/
-static WRITE8_HANDLER ( kaypro2_const_w )
-{
- if (data & 1)
- kbd->head = kbd->tail = 0;
-}
+ PORT_MODIFY("ROW.4")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // 8 * for "typewriter shift" layout
+
+ PORT_MODIFY("ROW.5")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) // ' " for "typewriter shift" layout
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) // ` ~ for "typewriter shift" layout
-#endif
+ PORT_MODIFY("ROW.6")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // 9 ) for "typewriter shift" layout
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) // - _ for "typewriter shift" layout
-/******************************************************
- * stuff character into the keyboard buffer
- * releases CPU if it was waiting for a key
- * sounds bell if buffer would overflow
- ******************************************************/
-void kaypro_state::kay_kbd_in(uint8_t data )
+ PORT_MODIFY("ROW.7")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) // ; : for "typewriter shift" layout
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) // = + for "typewriter shift" layout
+
+ PORT_MODIFY("ROW.8")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) // 2 @ for "typewriter shift" layout
+
+ PORT_MODIFY("ROW.C")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
+
+ PORT_MODIFY("ROW.D")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('`') PORT_CHAR('@')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('~') PORT_CHAR('^')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
+
+ PORT_MODIFY("ROW.E")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
+INPUT_PORTS_END
+
+} // anonymous namespace
+
+
+kaypro_10_keyboard_device::kaypro_10_keyboard_device(
+ machine_config const &mconfig,
+ char const *tag,
+ device_t *owner,
+ uint32_t clock)
+ : device_t(mconfig, KAYPRO_10_KEYBOARD, tag, owner, clock)
+ , m_bell(*this, "bell")
+ , m_matrix(*this, "ROW.%X", 0)
+ , m_modifiers(*this, "MOD")
+ , m_rxd_cb(*this)
+ , m_txd(1U)
+ , m_bus(0U)
{
- kay_kbd_t *kbd = m_kbd;
- uint8_t kbd_head_old;
-
- kbd_head_old = kbd->head;
- kbd->buff[kbd->head] = data;
- kbd->head = (kbd->head + 1) % sizeof(kbd->buff);
- /* will the buffer overflow ? */
- if (kbd->head == kbd->tail)
- {
- kbd->head = kbd_head_old;
- kay_kbd_d_w(4);
- }
- else
- kay_kbd_d_w(1);
}
-
-uint8_t kaypro_state::kay_kbd_c_r()
+tiny_rom_entry const *kaypro_10_keyboard_device::device_rom_region() const
{
-/* d4 transmit buffer empty - 1=ok to send
- d2 appears to be receive buffer empty - 1=ok to receive
- d0 keyboard buffer empty - 1=key waiting to be used */
+ return ROM_NAME(kaypro_10_keyboard);
+}
- kay_kbd_t *kbd = m_kbd;
- uint8_t data = kbd->control_status;
+MACHINE_CONFIG_MEMBER(kaypro_10_keyboard_device::device_add_mconfig)
+ MCFG_CPU_ADD("mcu", I8049, XTAL_6MHz)
+ MCFG_MCS48_PORT_P1_IN_CB(READ8(kaypro_10_keyboard_device, p1_r))
+ MCFG_MCS48_PORT_P2_IN_CB(READ8(kaypro_10_keyboard_device, p2_r))
+ MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(kaypro_10_keyboard_device, p2_w))
+ MCFG_MCS48_PORT_T1_IN_CB(READLINE(kaypro_10_keyboard_device, t1_r))
+ MCFG_MCS48_PORT_BUS_IN_CB(READ8(kaypro_10_keyboard_device, bus_r))
+ MCFG_MCS48_PORT_BUS_OUT_CB(WRITE8(kaypro_10_keyboard_device, bus_w))
+
+ MCFG_SPEAKER_STANDARD_MONO("keyboard")
+ MCFG_SOUND_ADD("bell", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "keyboard", 0.25)
+MACHINE_CONFIG_END
+
+ioport_constructor kaypro_10_keyboard_device::device_input_ports() const
+{
+ (void)INPUT_PORTS_NAME(kaypro_keyboard_bitshift);
+ return INPUT_PORTS_NAME(kaypro_keyboard_typewriter);
+}
- if( kbd->head != kbd->tail )
- data++;
+void kaypro_10_keyboard_device::device_start()
+{
+ m_rxd_cb.resolve_safe();
- return data;
+ save_item(NAME(m_txd));
+ save_item(NAME(m_bus));
}
-uint8_t kaypro_state::kay_kbd_d_r()
+READ8_MEMBER(kaypro_10_keyboard_device::p1_r)
{
-/* return next key in buffer */
+ return m_matrix[m_bus & 0x0f]->read();
+}
- kay_kbd_t *kbd = m_kbd;
- uint8_t data = 0;
+READ8_MEMBER(kaypro_10_keyboard_device::p2_r)
+{
+ return m_modifiers->read() | 0xf8U;
+}
- if (kbd->tail != kbd->head)
- {
- data = kbd->buff[kbd->tail];
- kbd->tail = (kbd->tail + 1) % sizeof(kbd->buff);
- }
+WRITE8_MEMBER(kaypro_10_keyboard_device::p2_w)
+{
+ m_bell->level_w(BIT(data, 6));
+ m_rxd_cb(BIT(data, 7));
+}
- return data;
+READ_LINE_MEMBER(kaypro_10_keyboard_device::t1_r)
+{
+ return m_txd ? 1 : 0;
}
-TIMER_CALLBACK_MEMBER( kaypro_state::kay_kbd_beepoff )
+READ8_MEMBER(kaypro_10_keyboard_device::bus_r)
{
- kay_kbd_t *kbd = m_kbd;
- kbd->beeper->set_state(0);
- kbd->control_status |= 4;
+ return m_bus;
}
-void kaypro_state::kay_kbd_d_w( uint8_t data )
+WRITE8_MEMBER(kaypro_10_keyboard_device::bus_w)
{
-/* Beeper control - lengths need verifying
- 01 - keyclick
- 02 - short beep
- 04 - standard bell beep
- 08 - mute
- 16 - unmute */
-
- kay_kbd_t *kbd = m_kbd;
- uint16_t length = 0;
-
- if (data & 0x10)
- kbd->beep_on = 1;
- else
- if (data & 0x08)
- kbd->beep_on = 0;
- else
- if (kbd->beep_on)
- {
- if (data & 0x04)
- length = 400;
- else
- if (data & 0x02)
- length = 200;
- else
- if (data & 0x01)
- length = 4;
-
- if (length)
- {
- kbd->control_status &= 0xfb;
- machine().scheduler().timer_set(attotime::from_msec(length), timer_expired_delegate(FUNC(kaypro_state::kay_kbd_beepoff),this));
- kbd->beeper->set_state(1);
- }
- }
+ if (BIT(m_bus ^ data, 4))
+ machine().output().set_value("led_caps_lock", BIT(data, 4));
+ m_bus = data;
}
diff --git a/src/mame/machine/kay_kbd.h b/src/mame/machine/kay_kbd.h
index 6dc347d78b0..22edbaf207b 100644
--- a/src/mame/machine/kay_kbd.h
+++ b/src/mame/machine/kay_kbd.h
@@ -1,4 +1,54 @@
// license:BSD-3-Clause
-// copyright-holders:Robbbert
+// copyright-holders:Vas Crabb
+#ifndef MAME_MACHINE_KAY_KBD_H
+#define MAME_MACHINE_KAY_KBD_H
-INPUT_PORTS_EXTERN( kay_kbd );
+#pragma once
+
+#include "sound/spkrdev.h"
+
+
+#define MCFG_KAYPRO10KBD_RXD_CB(cb) \
+ devcb = &kaypro_10_keyboard_device::set_rxd_cb(*device, DEVCB_##cb);
+
+
+class kaypro_10_keyboard_device : public device_t
+{
+public:
+ kaypro_10_keyboard_device(
+ machine_config const &mconfig,
+ char const *tag,
+ device_t *owner,
+ uint32_t clock);
+
+ template <class Object> static devcb_base &set_rxd_cb(device_t &device, Object &&cb)
+ { return downcast<kaypro_10_keyboard_device &>(device).m_rxd_cb.set_callback(std::forward<Object>(cb)); }
+
+ DECLARE_WRITE_LINE_MEMBER(txd_w) { m_txd = state ? 1U : 0U; }
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+
+ DECLARE_READ8_MEMBER(p1_r);
+ DECLARE_READ8_MEMBER(p2_r);
+ DECLARE_WRITE8_MEMBER(p2_w);
+ DECLARE_READ_LINE_MEMBER(t1_r);
+ DECLARE_READ8_MEMBER(bus_r);
+ DECLARE_WRITE8_MEMBER(bus_w);
+
+private:
+ required_device<speaker_sound_device> m_bell;
+ required_ioport_array<16> m_matrix;
+ required_ioport m_modifiers;
+ devcb_write_line m_rxd_cb;
+
+ std::uint8_t m_txd;
+ std::uint8_t m_bus;
+};
+
+DECLARE_DEVICE_TYPE(KAYPRO_10_KEYBOARD, kaypro_10_keyboard_device)
+
+#endif // MAME_MACHINE_KAY_KBD_H
diff --git a/src/mame/machine/kaypro.cpp b/src/mame/machine/kaypro.cpp
index 66a9a4bfb28..1059aeb8112 100644
--- a/src/mame/machine/kaypro.cpp
+++ b/src/mame/machine/kaypro.cpp
@@ -163,29 +163,9 @@ WRITE8_MEMBER( kaypro_state::kaypro2x_system_port_w )
FFh 19200 */
-READ8_MEMBER(kaypro_state::kaypro_sio_r)
-{
- if (offset == 1)
- return kay_kbd_d_r();
- else
- if (offset == 3)
- return kay_kbd_c_r();
- else
- return m_sio->cd_ba_r(space, offset);
-}
-
-WRITE8_MEMBER(kaypro_state::kaypro_sio_w)
-{
- if (offset == 1)
- kay_kbd_d_w(data);
- else
- m_sio->cd_ba_w(space, offset, data);
-}
-
-
/*************************************************************************************
- Floppy DIsk
+ Floppy Disk
If DRQ or IRQ is set, and cpu is halted, the NMI goes low.
Since the HALT occurs last (and has no callback mechanism), we need to set
@@ -248,7 +228,6 @@ MACHINE_START_MEMBER( kaypro_state,kayproii )
MACHINE_RESET_MEMBER( kaypro_state,kaypro )
{
- MACHINE_RESET_CALL_MEMBER(kay_kbd);
membank("bankr0")->set_entry(1); // point at rom
membank("bankw0")->set_entry(0); // always write to ram
membank("bank3")->set_entry(1); // point at video ram
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index c09a67ad4ba..748836f475b 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -300,6 +300,9 @@ ac1scch // 1984 Amateurcomputer AC1 SCCH
@source:accomm.cpp
accomm // 1986 Acorn Computer
+@source:acd.cpp
+acd //
+
@source:aceex.cpp
aceex2814
@@ -1181,6 +1184,9 @@ videomat // 1990 bootleg
@source:ampro.cpp
ampro //
+@source:ampscarp.cpp
+ampscarp // Motorola Amps Car Phone
+
@source:amspdwy.cpp
amspdwy // no copyright notice, but (c) 1987 Enerdyne Technologies, Inc.
amspdwya // no copyright notice, but (c) 1987 Enerdyne Technologies, Inc.
@@ -12083,7 +12089,6 @@ egghunt // (c) 1995 Invi Image
@source:einstein.cpp
einst256 //
-einstei2 //
einstein //
@source:electra.cpp
@@ -17690,6 +17695,9 @@ yellowcbj // (c) 1984
liberatr // 136012 (c) 1982
liberatr2 // 136012 (c) 1982
+@source:lilith.cpp
+lilith //
+
@source:limenko.cpp
dynabomb // (c) 2000 Limenko
legendoh // (c) 2000 Limenko
@@ -30998,6 +31006,9 @@ pexmp022 // (c) 1997 IGT - International Game Technology
pexmp026 // (c) 1997 IGT - International Game Technology
pexmp030 // (c) 1997 IGT - International Game Technology
+@source:perq.cpp
+perq //
+
@source:pes.cpp
pes //
@@ -31728,6 +31739,9 @@ powerinsb // (c) 1993 Atlus (bootleg of USA version)
powerinsj // (c) 1993 Atlus (Japan)
powerinsp // prototype
+@source:powerstack.cpp
+powerstk // Motorola Powerstack II
+
@source:pp01.cpp
pp01 //
@@ -34659,6 +34673,9 @@ sorcererd // Sorcerer with floppies
@source:sothello.cpp
sothello // (c) 1986 Success / Fujiwara.
+@source:solbourne.cpp
+sols5e // Solbourne Series 5E computer workstation
+
@source:spacefb.cpp
spacebrd // bootleg
spacedem // (c) 1980 Fortrek + made by Nintendo
@@ -36935,6 +36952,9 @@ ts803h //
@source:ts816.cpp
ts816 //
+@source:ts3000.cpp
+ts3000 // Televideo TS-3000
+
@source:tsamurai.cpp
alphaxz // AZ (c) 1986 Ed/Wood Place
ladymstr // A49 (c) 1985 Taito
@@ -38484,6 +38504,9 @@ wwfsstaru7 // TA-0024 (c) 1989 (US, newer)
wwfsstaru6 // TA-0024 (c) 1989 (US)
wwfsstaru4 // TA-0024 (c) 1989 (US)
+@source:wyse.cpp
+wyse //
+
@source:wyvernf0.cpp
wyvernf0 // A39 (c) 1985 Taito Corporation (Japan)
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index f245f27ecd2..998206e54c5 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -14,6 +14,7 @@ abc80.cpp
abc80x.cpp
ac1.cpp
accomm.cpp
+acd.cpp
aceex.cpp
acrnsys1.cpp
acvirus.cpp
@@ -36,6 +37,7 @@ altos8600.cpp
amico2k.cpp
amiga.cpp
ampro.cpp
+ampscarp.cpp
amstr_pc.cpp
amstrad.cpp
amust.cpp
@@ -329,6 +331,7 @@ leapster.cpp
learnwin.cpp
lft.cpp
lg-dvd.cpp
+lilith.cpp
lisa.cpp
llc.cpp
lola8a.cpp
@@ -484,6 +487,7 @@ pegasus.cpp
pencil2.cpp
pentagon.cpp
peoplepc.cpp
+perq.cpp
pes.cpp
pet.cpp
pg685.cpp
@@ -509,6 +513,7 @@ polgar.cpp
poly.cpp
poly88.cpp
poly880.cpp
+powerstack.cpp
pp01.cpp
prestige.cpp
primo.cpp
@@ -590,6 +595,7 @@ snes.cpp
socrates.cpp
softbox.cpp
sorcerer.cpp
+solbourne.cpp
spc1000.cpp
spc1500.cpp
spec128.cpp
@@ -636,6 +642,7 @@ tek410x.cpp
tek440x.cpp
tekxp33x.cpp
terak.cpp
+terco.cpp
test_t400.cpp
testconsole.cpp
tg100.cpp
@@ -669,10 +676,12 @@ tr606.cpp
tranz330.cpp
tricep.cpp
trs80.cpp
+trs80dt1.cpp
trs80m2.cpp
ts802.cpp
ts803.cpp
ts816.cpp
+ts3000.cpp
tsispch.cpp
tutor.cpp
tv910.cpp
@@ -722,6 +731,7 @@ vtech2.cpp
wangpc.cpp
wicat.cpp
wswan.cpp
+wyse.cpp
x07.cpp
x1.cpp
x1twin.cpp
diff --git a/src/mame/video/deco32.cpp b/src/mame/video/deco32.cpp
index 89147d51a97..38ba17dcc17 100644
--- a/src/mame/video/deco32.cpp
+++ b/src/mame/video/deco32.cpp
@@ -5,24 +5,24 @@
/******************************************************************************/
-WRITE32_MEMBER(deco32_state::pri_w)
+WRITE32_MEMBER( deco32_state::pri_w )
{
- m_pri=data;
+ m_pri = data;
}
-WRITE32_MEMBER(dragngun_state::sprite_control_w)
+WRITE32_MEMBER( dragngun_state::sprite_control_w )
{
- m_sprite_ctrl=data;
+ m_sprite_ctrl = data;
}
-WRITE32_MEMBER(dragngun_state::spriteram_dma_w)
+WRITE32_MEMBER( dragngun_state::spriteram_dma_w )
{
/* DMA spriteram to private sprite chip area, and clear cpu ram */
m_spriteram->copy();
memset(m_spriteram->live(),0,0x2000);
}
-WRITE32_MEMBER(deco32_state::ace_ram_w)
+WRITE32_MEMBER( nslasher_state::ace_ram_w )
{
/* Some notes pieced together from Tattoo Assassins info:
@@ -61,7 +61,7 @@ WRITE32_MEMBER(deco32_state::ace_ram_w)
COMBINE_DATA(&m_ace_ram[offset]);
}
-void deco32_state::updateAceRam()
+void nslasher_state::updateAceRam()
{
int r,g,b,i;
uint8_t fadeptr=m_ace_ram[0x20];
@@ -98,37 +98,35 @@ void deco32_state::updateAceRam()
/* Later games have double buffered paletteram - the real palette ram is
only updated on a DMA call */
-WRITE32_MEMBER(deco32_state::buffered_palette_w)
+WRITE32_MEMBER( deco32_state::buffered_palette_w )
{
COMBINE_DATA(&m_generic_paletteram_32[offset]);
m_dirty_palette[offset]=1;
}
-WRITE32_MEMBER(deco32_state::palette_dma_w)
+WRITE32_MEMBER( deco32_state::palette_dma_w )
{
- const int m=m_palette->entries();
- int r,g,b,i;
-
- for (i=0; i<m; i++) {
- if (m_dirty_palette[i]) {
- m_dirty_palette[i]=0;
+ for (int i = 0; i < m_palette->entries(); i++)
+ {
+ if (m_dirty_palette[i])
+ {
+ m_dirty_palette[i] = 0;
- if (m_has_ace_ram)
- {
- m_ace_ram_dirty=1;
- }
- else
- {
- b = (m_generic_paletteram_32[i] >>16) & 0xff;
- g = (m_generic_paletteram_32[i] >> 8) & 0xff;
- r = (m_generic_paletteram_32[i] >> 0) & 0xff;
+ uint8_t b = (m_generic_paletteram_32[i] >>16) & 0xff;
+ uint8_t g = (m_generic_paletteram_32[i] >> 8) & 0xff;
+ uint8_t r = (m_generic_paletteram_32[i] >> 0) & 0xff;
- m_palette->set_pen_color(i,rgb_t(r,g,b));
- }
+ m_palette->set_pen_color(i,rgb_t(r,g,b));
}
}
}
+WRITE32_MEMBER( nslasher_state::palette_dma_w )
+{
+ for (int i = 0; i < m_palette->entries(); i++)
+ if (m_dirty_palette[i])
+ m_ace_ram_dirty = 1;
+}
/******************************************************************************/
@@ -143,24 +141,21 @@ void deco32_state::video_start()
save_item(NAME(m_pf4_rowscroll));
}
-VIDEO_START_MEMBER(deco32_state,captaven)
+VIDEO_START_MEMBER( captaven_state, captaven )
{
- m_has_ace_ram=0;
-
deco32_state::video_start();
}
-VIDEO_START_MEMBER(deco32_state,fghthist)
+VIDEO_START_MEMBER( fghthist_state, fghthist )
{
m_dirty_palette = std::make_unique<uint8_t[]>(4096);
m_sprgen->alloc_sprite_bitmap();
- m_has_ace_ram=0;
save_pointer(NAME(m_dirty_palette.get()), 4096);
deco32_state::video_start();
}
-VIDEO_START_MEMBER(deco32_state,nslasher)
+VIDEO_START_MEMBER( nslasher_state, nslasher )
{
int width, height;
m_dirty_palette = std::make_unique<uint8_t[]>(4096);
@@ -170,7 +165,6 @@ VIDEO_START_MEMBER(deco32_state,nslasher)
m_sprgen1->alloc_sprite_bitmap();
m_sprgen2->alloc_sprite_bitmap();
memset(m_dirty_palette.get(),0,4096);
- m_has_ace_ram=1;
save_pointer(NAME(m_dirty_palette.get()), 4096);
save_item(NAME(m_ace_ram_dirty));
@@ -188,28 +182,24 @@ void dragngun_state::video_start()
save_item(NAME(m_pf4_rowscroll));
}
-VIDEO_START_MEMBER(dragngun_state,dragngun)
+VIDEO_START_MEMBER( dragngun_state, dragngun )
{
m_dirty_palette = std::make_unique<uint8_t[]>(4096);
m_screen->register_screen_bitmap(m_temp_render_bitmap);
memset(m_dirty_palette.get(),0,4096);
- m_has_ace_ram=0;
-
save_item(NAME(m_sprite_ctrl));
save_pointer(NAME(m_dirty_palette.get()), 4096);
}
-VIDEO_START_MEMBER(dragngun_state,lockload)
+VIDEO_START_MEMBER( dragngun_state, lockload )
{
m_dirty_palette = std::make_unique<uint8_t[]>(4096);
m_screen->register_screen_bitmap(m_temp_render_bitmap);
memset(m_dirty_palette.get(),0,4096);
- m_has_ace_ram=0;
-
save_item(NAME(m_sprite_ctrl));
save_pointer(NAME(m_dirty_palette.get()), 4096);
}
@@ -218,7 +208,7 @@ VIDEO_START_MEMBER(dragngun_state,lockload)
/******************************************************************************/
-uint32_t deco32_state::screen_update_captaven(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t captaven_state::screen_update_captaven(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
address_space &space = machine().dummy_space();
uint16_t flip = m_deco_tilegen1->pf_control_r(space, 0, 0xffff);
@@ -287,7 +277,7 @@ uint32_t dragngun_state::screen_update_dragngun(screen_device &screen, bitmap_rg
}
-uint32_t deco32_state::screen_update_fghthist(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t fghthist_state::screen_update_fghthist(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
screen.priority().fill(0, cliprect);
bitmap.fill(m_palette->pen(0x300), cliprect); // Palette index not confirmed
@@ -327,7 +317,7 @@ uint32_t deco32_state::screen_update_fghthist(screen_device &screen, bitmap_rgb3
blending support - it can't be done in-place on the final framebuffer
without a lot of support bitmaps.
*/
-void deco32_state::mixDualAlphaSprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx0, gfx_element *gfx1, int mixAlphaTilemap)
+void nslasher_state::mixDualAlphaSprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx0, gfx_element *gfx1, int mixAlphaTilemap)
{
const pen_t *pens = m_palette->pens();
const pen_t *pal0 = &pens[gfx0->colorbase()];
@@ -458,7 +448,7 @@ void deco32_state::mixDualAlphaSprites(screen_device &screen, bitmap_rgb32 &bitm
}
}
-uint32_t deco32_state::screen_update_nslasher(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t nslasher_state::screen_update_nslasher(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int alphaTilemap=0;
m_deco_tilegen1->pf_update(m_pf1_rowscroll, m_pf2_rowscroll);