diff options
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 & 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 & 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 & 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 & 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 & 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 & 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><homebrew></publisher> + <info name="developer" value="R. & 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); |