summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author James Wallace <james-wallace-ghub@users.noreply.github.com>2020-08-17 20:23:44 +0100
committer James Wallace <james-wallace-ghub@users.noreply.github.com>2020-08-17 20:23:44 +0100
commite02478a4926992e57c8e03e7c9e69120b4aea90c (patch)
tree83a25add39273577370b72b90c8738f9cdea8755
parenta051abd2cc9aeeb87b7b55f57fb4afed18038039 (diff)
New working clones
------------------ Adders and Ladders (v2.1d) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood] Strike it Lucky (v0.5, Datapak) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood] Strike it Lucky (v0.53, Datapak) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood] The Mating Game (v0.4, Datapak) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood] Barquest (v2.6d) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood] Prize Space Invaders (BWB INV1, 50p/30p Play, Version 1.2) (Datapak) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood, Angelo Salese] Blox (SJM BLOX, 50p/20p Play, Version 2.0) (Datapak) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood, Angelo Salese] Prize Tetris (BWB) (Datapak) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood, Angelo Salese] Prize Tetris (BWB) (Showcase) (Datapak) (MPU4 Video) [Ryan Holtz, James Wallace, David Haywood, Angelo Salese] Monopoly (JPM) (Version 4H, Protocol) [Philip Bennett, James Wallace, David Haywood] Monopoly (JPM) (Version 4) [Philip Bennett, James Wallace, David Haywood] Monopoly (JPM) (Version 3) [Philip Bennett, James Wallace, David Haywood] Monopoly Classic (JPM) (Version 5, Protocol) [Philip Bennett, James Wallace, David Haywood] Monopoly Deluxe (JPM) (Version 6, Protocol) [Philip Bennett, James Wallace, David Haywood] new not working clones --------------------------------------------- Monopoly Deluxe (JPM) (Version 1) [Philip Bennett, James Wallace, David Haywood] BACTA datalogger: Rewrote to improve logging and internal data handling.
-rw-r--r--src/mame/drivers/guab.cpp4
-rw-r--r--src/mame/drivers/jpmsys5.cpp156
-rw-r--r--src/mame/drivers/mpu4vid.cpp16
-rw-r--r--src/mame/machine/bacta_datalogger.cpp280
-rw-r--r--src/mame/machine/bacta_datalogger.h11
-rw-r--r--src/mame/mame.lst7
6 files changed, 273 insertions, 201 deletions
diff --git a/src/mame/drivers/guab.cpp b/src/mame/drivers/guab.cpp
index 0128a82cd9b..be49d0256c0 100644
--- a/src/mame/drivers/guab.cpp
+++ b/src/mame/drivers/guab.cpp
@@ -28,6 +28,7 @@
Notes:
* Toggle both 'Back door' and 'Key switch' to enter test mode
+ * Opening the back door will disable coinup
* Video hardware seems to match JPM System 5
* IRQ 1 inits the PPIs, IRQ 2 does nothing
@@ -135,6 +136,7 @@ void guab_state::guab_map(address_map &map)
map(0x0c00e0, 0x0c00e7).rw(m_fdc, FUNC(wd1773_device::read), FUNC(wd1773_device::write)).umask16(0x00ff);
map(0x080000, 0x080fff).ram();
map(0x100001, 0x100001).rw("ef9369", FUNC(ef9369_device::data_r), FUNC(ef9369_device::data_w));
+ map(0x100002, 0x100003).nopr(); // uses a clr instruction on address which generates a dummy read
map(0x100003, 0x100003).w("ef9369", FUNC(ef9369_device::address_w));
map(0x800000, 0xb0ffff).rw(FUNC(guab_state::tms34061_r), FUNC(guab_state::tms34061_w));
map(0xb10000, 0xb1ffff).ram();
@@ -510,7 +512,7 @@ void guab_state::guab(machine_config &config)
bacta.rxd_handler().set("acia6850_1", FUNC(acia6850_device::write_rxd));
- clock_device &acia_clock(CLOCK(config, "acia_clock", 153600)); // source? the ptm doesn't seem to output any common baud values
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 19200)); // source? the ptm doesn't seem to output any common baud values
acia_clock.signal_handler().set("acia6850_1", FUNC(acia6850_device::write_txc));
acia_clock.signal_handler().append("acia6850_1", FUNC(acia6850_device::write_rxc));
diff --git a/src/mame/drivers/jpmsys5.cpp b/src/mame/drivers/jpmsys5.cpp
index 76c07ddec22..38a1a4f67aa 100644
--- a/src/mame/drivers/jpmsys5.cpp
+++ b/src/mame/drivers/jpmsys5.cpp
@@ -24,6 +24,7 @@
The byte at 0x81 of the EVEN 68k rom appears to be some kind of
control byte, probably region, or coin / machine type setting.
Many sets differ only by this byte.
+ Now we have BACTA protocol emulation, see if this is related.
Many sets are probably missing sound roms, however due to the
varying motherboard configurations (SAA vs. YM, with added UPD)
@@ -34,6 +35,8 @@
#include "emu.h"
#include "includes/jpmsys5.h"
+#include "machine/bacta_datalogger.h"
+
#include "machine/clock.h"
#include "machine/input_merger.h"
#include "sound/saa1099.h"
@@ -446,7 +449,7 @@ static INPUT_PORTS_START( monopoly )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("50p")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("100p")
PORT_BIT( 0xc3, IP_ACTIVE_LOW, IPT_UNUSED )
-
+
PORT_START("TOUCH_PUSH")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, jpmsys5v_state,touchscreen_press, 0)
@@ -590,10 +593,14 @@ void jpmsys5v_state::jpmsys5v(machine_config &config)
INPUT_MERGER_ANY_HIGH(config, "acia_irq").output_handler().set_inputline(m_maincpu, INT_6850ACIA);
+ bacta_datalogger_device &bacta(BACTA_DATALOGGER(config, "bacta", 0));
+
ACIA6850(config, m_acia6850[0], 0);
- m_acia6850[0]->txd_handler().set(FUNC(jpmsys5v_state::a0_tx_w));
+ m_acia6850[0]->txd_handler().set("bacta", FUNC(bacta_datalogger_device::write_txd));
m_acia6850[0]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<0>));
+ bacta.rxd_handler().set(m_acia6850[0], FUNC(acia6850_device::write_rxd));
+
ACIA6850(config, m_acia6850[1], 0);
m_acia6850[1]->txd_handler().set(FUNC(jpmsys5v_state::a1_tx_w));
m_acia6850[1]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<1>));
@@ -602,9 +609,11 @@ void jpmsys5v_state::jpmsys5v(machine_config &config)
m_acia6850[2]->txd_handler().set(FUNC(jpmsys5v_state::a2_tx_w));
m_acia6850[2]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<2>));
+ clock_device &bacta_clock(CLOCK(config, "bacta_clock", 19200)); // Gives 1200 baud, but real timer is programmable (location?)
+ bacta_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc));
+ bacta_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc));
+
clock_device &acia_clock(CLOCK(config, "acia_clock", 10000)); // What are the correct ACIA clocks ?
- acia_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc));
- acia_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc));
acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_txc));
acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_rxc));
acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_txc));
@@ -810,21 +819,27 @@ void jpmsys5_state::jpmsys5_ym(machine_config &config)
INPUT_MERGER_ANY_HIGH(config, "acia_irq").output_handler().set_inputline(m_maincpu, INT_6850ACIA);
+ bacta_datalogger_device &bacta(BACTA_DATALOGGER(config, "bacta", 0));
+
ACIA6850(config, m_acia6850[0], 0);
- m_acia6850[0]->txd_handler().set(FUNC(jpmsys5_state::a0_tx_w));
+ m_acia6850[0]->txd_handler().set("bacta", FUNC(bacta_datalogger_device::write_txd));
m_acia6850[0]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<0>));
+ bacta.rxd_handler().set(m_acia6850[0], FUNC(acia6850_device::write_rxd));
+
ACIA6850(config, m_acia6850[1], 0);
- m_acia6850[1]->txd_handler().set(FUNC(jpmsys5_state::a1_tx_w));
+ m_acia6850[1]->txd_handler().set(FUNC(jpmsys5v_state::a1_tx_w));
m_acia6850[1]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<1>));
ACIA6850(config, m_acia6850[2], 0);
- m_acia6850[2]->txd_handler().set(FUNC(jpmsys5_state::a2_tx_w));
+ m_acia6850[2]->txd_handler().set(FUNC(jpmsys5v_state::a2_tx_w));
m_acia6850[2]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<2>));
+ clock_device &bacta_clock(CLOCK(config, "bacta_clock", 19200)); // Gives 1200 baud, but real timer is programmable (location?)
+ bacta_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc));
+ bacta_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc));
+
clock_device &acia_clock(CLOCK(config, "acia_clock", 10000)); // What are the correct ACIA clocks ?
- acia_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc));
- acia_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc));
acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_txc));
acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_rxc));
acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_txc));
@@ -868,21 +883,27 @@ void jpmsys5_state::jpmsys5(machine_config &config)
INPUT_MERGER_ANY_HIGH(config, "acia_irq").output_handler().set_inputline(m_maincpu, INT_6850ACIA);
+ bacta_datalogger_device &bacta(BACTA_DATALOGGER(config, "bacta", 0));
+
ACIA6850(config, m_acia6850[0], 0);
- m_acia6850[0]->txd_handler().set(FUNC(jpmsys5_state::a0_tx_w));
+ m_acia6850[0]->txd_handler().set("bacta", FUNC(bacta_datalogger_device::write_txd));
m_acia6850[0]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<0>));
+ bacta.rxd_handler().set(m_acia6850[0], FUNC(acia6850_device::write_rxd));
+
ACIA6850(config, m_acia6850[1], 0);
- m_acia6850[1]->txd_handler().set(FUNC(jpmsys5_state::a1_tx_w));
+ m_acia6850[1]->txd_handler().set(FUNC(jpmsys5v_state::a1_tx_w));
m_acia6850[1]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<1>));
ACIA6850(config, m_acia6850[2], 0);
- m_acia6850[2]->txd_handler().set(FUNC(jpmsys5_state::a2_tx_w));
+ m_acia6850[2]->txd_handler().set(FUNC(jpmsys5v_state::a2_tx_w));
m_acia6850[2]->irq_handler().set("acia_irq", FUNC(input_merger_device::in_w<2>));
+ clock_device &bacta_clock(CLOCK(config, "bacta_clock", 19200)); // Gives 1200 baud, but real timer is programmable (location?)
+ bacta_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc));
+ bacta_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc));
+
clock_device &acia_clock(CLOCK(config, "acia_clock", 10000)); // What are the correct ACIA clocks ?
- acia_clock.signal_handler().set(m_acia6850[0], FUNC(acia6850_device::write_txc));
- acia_clock.signal_handler().append(m_acia6850[0], FUNC(acia6850_device::write_rxc));
acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_txc));
acia_clock.signal_handler().append(m_acia6850[1], FUNC(acia6850_device::write_rxc));
acia_clock.signal_handler().append(m_acia6850[2], FUNC(acia6850_device::write_txc));
@@ -922,6 +943,7 @@ void jpmsys5_state::jpmsys5(machine_config &config)
*
*************************************/
+
ROM_START( monopoly )
ROM_REGION( 0x300000, "maincpu", 0 )
ROM_LOAD16_BYTE( "7398.bin", 0x000000, 0x80000, CRC(62c80f20) SHA1(322514f920d6cb48887b624786b52af34bdb8e5f) )
@@ -931,23 +953,25 @@ ROM_START( monopoly )
ROM_LOAD16_BYTE( "6670.bin", 0x200000, 0x80000, CRC(66e2a5e1) SHA1(04d4b55d6ad121cdc3592d33e9d953affa24f01a) )
ROM_LOAD16_BYTE( "6671.bin", 0x200001, 0x80000, CRC(b2a3cedd) SHA1(e3a5dd028b0769e08a796a96665b31491c3b18ca) )
+ ROM_REGION( 0x80000, "upd7759", 0 )
+ ROM_LOAD( "6538.bin", 0x00000, 0x40000, CRC(ccdd4ce3) SHA1(dbb24682cea8081a447ca2c53395964fc46e7f56) )
+ROM_END
- ROM_REGION( 0x300000, "altrevs", 0 )
- ROM_LOAD16_BYTE( "7400.bin", 0x00001, 0x080000, CRC(d6f1f98c) SHA1(f20c788a31a8fe339aed701866180a3eb16fafb9) )
-
- // this version doesn't work too well, missing other roms, or just bad?
- ROM_LOAD16_BYTE( "monov3p1", 0x00000, 0x080000, CRC(a66fc610) SHA1(fddd3b37a6aebf5c402942d26a2fa1fa130326dd) )
- ROM_LOAD16_BYTE( "monov3p2", 0x00001, 0x080000, CRC(2d629723) SHA1(c5584113e50dc5f636dbcf80e4689d2bbfe98e71) )
- // mismastched?
- ROM_LOAD16_BYTE( "monov4p2", 0x00001, 0x080000, CRC(3c2dd9b7) SHA1(01c87584b3599763a0c37040199014c2902dc6f3) )
-
+ROM_START( monopolyd )
+ ROM_REGION( 0x300000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "7398.bin", 0x000000, 0x80000, CRC(62c80f20) SHA1(322514f920d6cb48887b624786b52af34bdb8e5f) )
+ ROM_LOAD16_BYTE( "7400.bin", 0x000001, 0x80000, CRC(d6f1f98c) SHA1(f20c788a31a8fe339aed701866180a3eb16fafb9) )
+ ROM_LOAD16_BYTE( "6668.bin", 0x100000, 0x80000, CRC(30bf082a) SHA1(29ba67a86e82f0eb4feb816a2031d62028eb11b0) )
+ ROM_LOAD16_BYTE( "6669.bin", 0x100001, 0x80000, CRC(85d38c2d) SHA1(2f1a394df243e5fbbad31507b9074c997c473106) )
+ ROM_LOAD16_BYTE( "6670.bin", 0x200000, 0x80000, CRC(66e2a5e1) SHA1(04d4b55d6ad121cdc3592d33e9d953affa24f01a) )
+ ROM_LOAD16_BYTE( "6671.bin", 0x200001, 0x80000, CRC(b2a3cedd) SHA1(e3a5dd028b0769e08a796a96665b31491c3b18ca) )
ROM_REGION( 0x80000, "upd7759", 0 )
ROM_LOAD( "6538.bin", 0x00000, 0x40000, CRC(ccdd4ce3) SHA1(dbb24682cea8081a447ca2c53395964fc46e7f56) )
ROM_END
-ROM_START( monopolya )
+ROM_START( monopoly4 )
ROM_REGION( 0x300000, "maincpu", 0 )
ROM_LOAD16_BYTE( "mono4e1", 0x000000, 0x80000, CRC(0338b165) SHA1(fdc0fcf0fddcf88d593a22885779e8224484e7e4) )
ROM_LOAD16_BYTE( "mono4e2", 0x000001, 0x80000, CRC(c8aa21d8) SHA1(257ecf85e1d41b15bb2bbe2157e9d3f72b7e0317) )
@@ -956,10 +980,27 @@ ROM_START( monopolya )
ROM_LOAD16_BYTE( "6670.bin", 0x200000, 0x80000, CRC(66e2a5e1) SHA1(04d4b55d6ad121cdc3592d33e9d953affa24f01a) )
ROM_LOAD16_BYTE( "6671.bin", 0x200001, 0x80000, CRC(b2a3cedd) SHA1(e3a5dd028b0769e08a796a96665b31491c3b18ca) )
+ ROM_REGION( 0x300000, "altrevs", 0 )
+ ROM_LOAD16_BYTE( "monov4p2", 0x000001, 0x80000, CRC(3c2dd9b7) SHA1(01c87584b3599763a0c37040199014c2902dc6f3) ) // mismatched?
+
+ ROM_REGION( 0x80000, "upd7759", 0 )
+ ROM_LOAD( "6538.bin", 0x00000, 0x40000, CRC(ccdd4ce3) SHA1(dbb24682cea8081a447ca2c53395964fc46e7f56) )
+ROM_END
+
+ROM_START( monopoly3 )
+ ROM_REGION( 0x300000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "monov3p1", 0x000000, 0x80000, CRC(a66fc610) SHA1(fddd3b37a6aebf5c402942d26a2fa1fa130326dd) )
+ ROM_LOAD16_BYTE( "monov3p2", 0x000001, 0x80000, CRC(2d629723) SHA1(c5584113e50dc5f636dbcf80e4689d2bbfe98e71) )
+ ROM_LOAD16_BYTE( "6668.bin", 0x100000, 0x80000, CRC(30bf082a) SHA1(29ba67a86e82f0eb4feb816a2031d62028eb11b0) )
+ ROM_LOAD16_BYTE( "6669.bin", 0x100001, 0x80000, CRC(85d38c2d) SHA1(2f1a394df243e5fbbad31507b9074c997c473106) )
+ ROM_LOAD16_BYTE( "6670.bin", 0x200000, 0x80000, CRC(66e2a5e1) SHA1(04d4b55d6ad121cdc3592d33e9d953affa24f01a) )
+ ROM_LOAD16_BYTE( "6671.bin", 0x200001, 0x80000, CRC(b2a3cedd) SHA1(e3a5dd028b0769e08a796a96665b31491c3b18ca) )
+
ROM_REGION( 0x80000, "upd7759", 0 )
ROM_LOAD( "6538.bin", 0x00000, 0x40000, CRC(ccdd4ce3) SHA1(dbb24682cea8081a447ca2c53395964fc46e7f56) )
ROM_END
+//Monopoly Classic is a non-payout quiz game, where the goal is to earn points from collecting properties.
ROM_START( monoplcl )
ROM_REGION( 0x300000, "maincpu", 0 )
@@ -970,13 +1011,18 @@ ROM_START( monoplcl )
ROM_LOAD16_BYTE( "6670.bin", 0x200000, 0x80000, CRC(66e2a5e1) SHA1(04d4b55d6ad121cdc3592d33e9d953affa24f01a) )
ROM_LOAD16_BYTE( "6671.bin", 0x200001, 0x80000, CRC(b2a3cedd) SHA1(e3a5dd028b0769e08a796a96665b31491c3b18ca) )
- ROM_REGION( 0x300000, "altrevs", 0 )
- ROM_LOAD16_BYTE( "7403.bin", 0x000001, 0x080000, CRC(95dbacb6) SHA1(bd551ccad95440a669a547092ab126178b0d0bf9) )
+ ROM_REGION( 0x80000, "upd7759", 0 )
+ ROM_LOAD( "6538.bin", 0x00000, 0x40000, CRC(ccdd4ce3) SHA1(dbb24682cea8081a447ca2c53395964fc46e7f56) )
+ROM_END
- ROM_LOAD( "mdlxv1p1", 0x0000, 0x080000, CRC(48ab1691) SHA1(6df2aad02548d5239e3974a11228bc9aad8c9170) )
- ROM_LOAD( "mdlxv1p2", 0x0000, 0x080000, CRC(107c3e65) SHA1(e298b3a2826f92ba6119348a36bc4735e1799797) )
- /* p3 missing? */
- ROM_LOAD( "mdlxv1p4", 0x0000, 0x080000, CRC(e3fd1a27) SHA1(6bba70ff27a6d068febcbdfa1b1f8ff2ef86ef03) )
+ROM_START( monoplcld )
+ ROM_REGION( 0x300000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "7401.bin", 0x000000, 0x80000, CRC(eec11426) SHA1(b732a5a64d3fba676134942768b823d088792a1f) )
+ ROM_LOAD16_BYTE( "7403.bin", 0x000001, 0x80000, CRC(95dbacb6) SHA1(bd551ccad95440a669a547092ab126178b0d0bf9) )
+ ROM_LOAD16_BYTE( "6668.bin", 0x100000, 0x80000, CRC(30bf082a) SHA1(29ba67a86e82f0eb4feb816a2031d62028eb11b0) )
+ ROM_LOAD16_BYTE( "6669.bin", 0x100001, 0x80000, CRC(85d38c2d) SHA1(2f1a394df243e5fbbad31507b9074c997c473106) )
+ ROM_LOAD16_BYTE( "6670.bin", 0x200000, 0x80000, CRC(66e2a5e1) SHA1(04d4b55d6ad121cdc3592d33e9d953affa24f01a) )
+ ROM_LOAD16_BYTE( "6671.bin", 0x200001, 0x80000, CRC(b2a3cedd) SHA1(e3a5dd028b0769e08a796a96665b31491c3b18ca) )
ROM_REGION( 0x80000, "upd7759", 0 )
@@ -992,10 +1038,37 @@ ROM_START( monopldx )
ROM_LOAD16_BYTE( "6881.bin", 0x200000, 0x80000, CRC(8418ee17) SHA1(5666b90db00d9e88a37655bb9a714f076e2689d6) )
ROM_LOAD16_BYTE( "6882.bin", 0x200001, 0x80000, CRC(400f5fb4) SHA1(80b1d3902fc9f6db24f49055b07bc31c0c74a993) )
- ROM_REGION( 0x300000, "altrevs", 0 )
- ROM_LOAD16_BYTE( "8441.bin", 0x000001, 0x080000, CRC(d0825af4) SHA1(a7291806893c42a115763e404337976b8c30e9e0) ) // 1 byte change from 8440 (doesn't boot, but might want additional hw)
+ ROM_REGION( 0x80000, "upd7759", 0 )
+ ROM_LOAD( "modl-snd.bin", 0x000000, 0x80000, CRC(f761da41) SHA1(a07d1b4cb7ce7a24b6fb84843543b95c3aec470f) )
+ROM_END
+ROM_START( monopldxd )
+ ROM_REGION( 0x300000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "8439.bin", 0x000000, 0x80000, CRC(fbd6caa4) SHA1(73e787ae41a0ce44d48a46dd623d5e1351335e3e) )
+ ROM_LOAD16_BYTE( "8441.bin", 0x000001, 0x80000, CRC(d0825af4) SHA1(a7291806893c42a115763e404337976b8c30e9e0) ) // 1 byte change from 8440
+ ROM_LOAD16_BYTE( "6879.bin", 0x100000, 0x80000, CRC(4fbd1222) SHA1(9a9c9e4768c18a6a3e717605d3c88179676b6ad1) )
+ ROM_LOAD16_BYTE( "6880.bin", 0x100001, 0x80000, CRC(0370bf5f) SHA1(a0ed1dbc6aeab02e8229f23f8ba4ff880d31e7a1) )
+ ROM_LOAD16_BYTE( "6881.bin", 0x200000, 0x80000, CRC(8418ee17) SHA1(5666b90db00d9e88a37655bb9a714f076e2689d6) )
+ ROM_LOAD16_BYTE( "6882.bin", 0x200001, 0x80000, CRC(400f5fb4) SHA1(80b1d3902fc9f6db24f49055b07bc31c0c74a993) )
+
+ ROM_REGION( 0x80000, "upd7759", 0 )
+ ROM_LOAD( "modl-snd.bin", 0x000000, 0x80000, CRC(f761da41) SHA1(a07d1b4cb7ce7a24b6fb84843543b95c3aec470f) )
+ROM_END
+
+ROM_START( monopldx1 )
+ ROM_REGION( 0x300000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "mdlxv1p1", 0x000000, 0x80000, CRC(48ab1691) SHA1(6df2aad02548d5239e3974a11228bc9aad8c9170) )
+ ROM_LOAD16_BYTE( "mdlxv1p2", 0x000001, 0x80000, CRC(107c3e65) SHA1(e298b3a2826f92ba6119348a36bc4735e1799797) )
+ ROM_LOAD16_BYTE( "6879.bin", 0x100000, 0x80000, CRC(4fbd1222) SHA1(9a9c9e4768c18a6a3e717605d3c88179676b6ad1) )
+ ROM_LOAD16_BYTE( "6880.bin", 0x100001, 0x80000, CRC(0370bf5f) SHA1(a0ed1dbc6aeab02e8229f23f8ba4ff880d31e7a1) )
+ ROM_LOAD16_BYTE( "6881.bin", 0x200000, 0x80000, CRC(8418ee17) SHA1(5666b90db00d9e88a37655bb9a714f076e2689d6) )
+ ROM_LOAD16_BYTE( "6882.bin", 0x200001, 0x80000, CRC(400f5fb4) SHA1(80b1d3902fc9f6db24f49055b07bc31c0c74a993) )
+
+ ROM_REGION( 0x300000, "altrevs", 0 )
+ /* p3 missing? */
+ ROM_LOAD16_BYTE( "mdlxv1p4", 0x100001, 0x80000, CRC(e3fd1a27) SHA1(6bba70ff27a6d068febcbdfa1b1f8ff2ef86ef03) ) //Doesn't match set?
+
ROM_REGION( 0x80000, "upd7759", 0 )
ROM_LOAD( "modl-snd.bin", 0x000000, 0x80000, CRC(f761da41) SHA1(a07d1b4cb7ce7a24b6fb84843543b95c3aec470f) )
ROM_END
@@ -1010,13 +1083,14 @@ ROM_START( cashcade )
ROM_END
-
-
-
-
/* Video based titles */
-GAME( 1994, monopoly, 0, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 1)", 0 )
-GAME( 1994, monopolya, monopoly, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 2)", 0 )
-GAME( 1995, monoplcl, monopoly, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly Classic (JPM) (SYSTEM5 VIDEO)", 0 )
-GAME( 1995, monopldx, 0, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly Deluxe (JPM) (SYSTEM5 VIDEO)", 0 )
-GAME( 199?, cashcade, 0, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Cashcade (JPM) (SYSTEM5 VIDEO)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) // shows a loading error.. is the set incomplete?
+GAME( 1994, monopoly, 0, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly (JPM) (Version 4H) (SYSTEM5 VIDEO)", 0 )
+GAME( 1994, monopolyd, monopoly, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly (JPM) (Version 4H, Protocol) (SYSTEM5 VIDEO)", 0 )
+GAME( 1994, monopoly4, monopoly, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly (JPM) (Version 4) (SYSTEM5 VIDEO)", 0 )
+GAME( 1994, monopoly3, monopoly, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly (JPM) (Version 3) (SYSTEM5 VIDEO)", 0 )
+GAME( 1995, monoplcl, monopoly, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly Classic (JPM) (Version 5) (SYSTEM5 VIDEO)", 0 )
+GAME( 1995, monoplcld, monopoly, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly Classic (JPM) (Version 5, Protocol) (SYSTEM5 VIDEO)", 0 )
+GAME( 1995, monopldx, 0, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly Deluxe (JPM) (Version 6) (SYSTEM5 VIDEO)", 0 )
+GAME( 1995, monopldxd, monopldx, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly Deluxe (JPM) (Version 6, Protocol) (SYSTEM5 VIDEO)", 0 )
+GAME( 1995, monopldx1, monopldx, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Monopoly Deluxe (JPM) (Version 1) (SYSTEM5 VIDEO)", MACHINE_NOT_WORKING ) // no questions?
+GAME( 199?, cashcade, 0, jpmsys5v, monopoly, jpmsys5v_state, empty_init, ROT0, "JPM", "Cashcade (JPM) (SYSTEM5 VIDEO)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) // shows a loading error.. is the set incomplete?
diff --git a/src/mame/drivers/mpu4vid.cpp b/src/mame/drivers/mpu4vid.cpp
index 3bcc992e528..6eef9c89eae 100644
--- a/src/mame/drivers/mpu4vid.cpp
+++ b/src/mame/drivers/mpu4vid.cpp
@@ -9000,21 +9000,21 @@ GAMEL( 1994, v4cmaze3_amld, v4cmaze3, crmaze, crmaze, mpu4vid_state, init
//Year is a guess, based on the use of the 'Coin Man' logo
GAME( 1996?,v4mate, v4bios, mating, mating, mpu4vid_state, init_mating, ROT0, "Barcrest","The Mating Game (v0.4) (MPU4 Video)",GAME_FLAGS_OK )//SWP 0.2
-GAME( 1996?,v4mated, v4mate, mating, mating, mpu4vid_state, init_mating, ROT0, "Barcrest","The Mating Game (v0.4, Datapak) (MPU4 Video)",GAME_FLAGS )//SWP 0.2D
+GAME( 1996?,v4mated, v4mate, mating, mating, mpu4vid_state, init_mating, ROT0, "Barcrest","The Mating Game (v0.4, Datapak) (MPU4 Video)",GAME_FLAGS_OK )//SWP 0.2D
/* Quiz games - Questions decoded */
GAMEL( 1989, v4addlad, v4bios, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.1) (MPU4 Video)",GAME_FLAGS_OK,layout_v4addlad )
-GAMEL( 1989, v4addladd, v4addlad, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.1d) (MPU4 Video)",GAME_FLAGS,layout_v4addlad )
+GAMEL( 1989, v4addladd, v4addlad, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.1d) (MPU4 Video)",GAME_FLAGS_OK,layout_v4addlad )
GAMEL( 1989, v4addlad20, v4addlad, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.0) (MPU4 Video)",GAME_FLAGS_OK,layout_v4addlad )
GAMEL( 199?, v4strike, v4bios, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5) (MPU4 Video)",GAME_FLAGS_OK,layout_v4strike )
-GAMEL( 199?, v4striked, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5, Datapak) (MPU4 Video)",GAME_FLAGS,layout_v4strike )
+GAMEL( 199?, v4striked, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5, Datapak) (MPU4 Video)",GAME_FLAGS_OK,layout_v4strike )
GAMEL( 199?, v4strike2, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53) (MPU4 Video)",GAME_FLAGS_OK,layout_v4strike ) // The '3' is likely a machine type, not a 'version', 68k Pair ROM doesn't change
-GAMEL( 199?, v4strike2d, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53, Datapak) (MPU4 Video)",GAME_FLAGS,layout_v4strike )
+GAMEL( 199?, v4strike2d, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53, Datapak) (MPU4 Video)",GAME_FLAGS_OK,layout_v4strike )
GAMEL( 199?, v4barqst, v4bios, mpu4_vid_strike, barquest, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Barquest (v2.6) (MPU4 Video)",GAME_FLAGS_OK,layout_v4barqst )
-GAMEL( 199?, v4barqstd, v4barqst, mpu4_vid_strike, barquest, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Barquest (v2.6d) (MPU4 Video)",GAME_FLAGS,layout_v4barqst )
+GAMEL( 199?, v4barqstd, v4barqst, mpu4_vid_strike, barquest, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Barquest (v2.6d) (MPU4 Video)",GAME_FLAGS_OK,layout_v4barqst )
/* Quiz games - Questions not decoded properly on games below (no complete characteriser table) */
@@ -9072,7 +9072,7 @@ GAMEL( 1991, v4psi14, v4psi, bwbvid, v4psi, mpu4vid_state, init_p
GAMEL( 1991, v4psi14a, v4psi, bwbvid, v4psi, mpu4vid_state, init_prizeinv, ROT0, "BWB", u8"Prize Space Invaders (BWB IN2, £20, 50p/30p Play, 14\" Version 1.1, set 2) (MPU4 Video)",GAME_FLAGS,layout_v4psi )
// these show BWB and Barcrest (older game release 'INV1' but higher version of it)
GAMEL( 1991, v4psibc, v4psi, bwbvid, v4psi, mpu4vid_state, init_prizeinv, ROT0, "BWB / Barcrest","Prize Space Invaders (BWB INV1, 50p/30p Play, Version 1.2) (MPU4 Video)",GAME_FLAGS_OK,layout_v4psi )
-GAMEL( 1991, v4psibcd, v4psi, bwbvid, v4psi, mpu4vid_state, init_prizeinv, ROT0, "BWB / Barcrest","Prize Space Invaders (BWB INV1, 50p/30p Play, Version 1.2) (Datapak) (MPU4 Video)",GAME_FLAGS,layout_v4psi )
+GAMEL( 1991, v4psibcd, v4psi, bwbvid, v4psi, mpu4vid_state, init_prizeinv, ROT0, "BWB / Barcrest","Prize Space Invaders (BWB INV1, 50p/30p Play, Version 1.2) (Datapak) (MPU4 Video)",GAME_FLAGS_OK,layout_v4psi )
// Tetris games, these were all sold as different machines so are not set as clones
@@ -9080,10 +9080,10 @@ GAME( 1989, v4tetrs, 0, bwbvid, v4tetris, mpu4vid_state, init_b
GAME( 1989, v4tetrs1, v4tetrs, bwbvid, v4tetris, mpu4vid_state, init_bwbhack, ROT0, "BWB / Barcrest","Tetris Payout (BWB TET1 Version 2.2, set 2) (MPU4 Video)",GAME_FLAGS_OK )
// Blox is an later version of Payout Tetris, without Tetris license? (SJM = Stuart McArthur?)
GAME( 1990, v4blox, 0, bwbvid, v4tetris, mpu4vid_state, init_bwbhack, ROT0, "BWB / Barcrest","Blox (SJM BLOX, 50p/20p Play, Version 2.0) (MPU4 Video)",GAME_FLAGS_OK )
-GAME( 1990, v4bloxd, v4blox, bwbvid, v4tetris, mpu4vid_state, init_bwbhack, ROT0, "BWB / Barcrest","Blox (SJM BLOX, 50p/20p Play, Version 2.0) (Datapak) (MPU4 Video)",GAME_FLAGS )
+GAME( 1990, v4bloxd, v4blox, bwbvid, v4tetris, mpu4vid_state, init_bwbhack, ROT0, "BWB / Barcrest","Blox (SJM BLOX, 50p/20p Play, Version 2.0) (Datapak) (MPU4 Video)",GAME_FLAGS_OK )
// Prize Tetris / Bullion Blox have quite different attract presentation to the above
GAME( 1994, v4pztet, 0, bwbvid, v4pztet, mpu4vid_state, init_bwbhack, ROT0, "BWB", "Prize Tetris (BWB) (MPU4 Video)",GAME_FLAGS_OK )
-GAME( 1994, v4pzteta, v4pztet, bwbvid, v4pztet, mpu4vid_state, init_bwbhack, ROT0, "BWB", "Prize Tetris (BWB) (Datapak) (MPU4 Video)",GAME_FLAGS )
+GAME( 1994, v4pzteta, v4pztet, bwbvid, v4pztet, mpu4vid_state, init_bwbhack, ROT0, "BWB", "Prize Tetris (BWB) (Datapak) (MPU4 Video)",GAME_FLAGS_OK )
GAME( 1994, v4pztetb, v4pztet, bwbvid, v4pztet, mpu4vid_state, init_bwbhack, ROT0, "BWB", "Prize Tetris (BWB) (Showcase) (MPU4 Video)",GAME_FLAGS_OK ) // screen telling you to exchange tickets for prizes in the 'showcase' during attract
GAME( 1994, v4pztetc, v4pztet, bwbvid, v4pztet, mpu4vid_state, init_bwbhack, ROT0, "BWB", "Prize Tetris (BWB) (Showcase) (Datapak) (MPU4 Video)",GAME_FLAGS )
// this appears to be a version of Prize Tetris without the Tetris license. These don't have proper alarms, eg coin1 stuck is 'undefined'
diff --git a/src/mame/machine/bacta_datalogger.cpp b/src/mame/machine/bacta_datalogger.cpp
index c21273222f5..cbca47b78af 100644
--- a/src/mame/machine/bacta_datalogger.cpp
+++ b/src/mame/machine/bacta_datalogger.cpp
@@ -3,17 +3,23 @@
#include "emu.h"
#include "bacta_datalogger.h"
-#define LOG_DATA 1
+#define LOG_DATA (1U << 1)
+
+#define VERBOSE (LOG_DATA)
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOGDATA(...) LOGMASKED(LOG_DATA, __VA_ARGS__)
+
/***********************************************************************************************************
BACTA Datalogger emulation
The British Amusement and Catering Trade Association created a standard for the tracking of statistics
and other features on British AWPs across hardware manufacturers.
- The specification is very simple, a 1200 baud null modem via RS232, with the logger sending an ACK
- command (0x06) on receipt of a valid character.
- As this is RS232, the logger itself can be of any design provided the acknowledgment is made where demanded
- (by, for example, Protocol game ROMS).
- In this emulation, the simplest functioning device is simulated here, derived from the rs232 null_modem.
- We only handle the feedback for acknowledgment, not any other feature.
+ The specification is very simple, a 1200 baud null modem connection via RS232, with the logger sending an
+ ACK command (0x06) on receipt of a valid character, and NAK (0x15) on error.
+ In this emulation, the simplest possible device is simulated here, derived from the RS232 null_modem.
+ We only handle the feedback for acknowledgment, and limited logging.
************************************************************************************************************/
// device type definition
@@ -32,25 +38,22 @@ bacta_datalogger_device::bacta_datalogger_device(const machine_config &mconfig,
: device_t(mconfig, BACTA_DATALOGGER, tag, owner, clock),
device_serial_interface(mconfig, *this),
m_rxd_handler(*this),
- m_output_char(0),
- m_timer_poll(nullptr)
+ m_last_input(0),
+ m_output_char(0)
{
}
void bacta_datalogger_device::device_start()
{
m_rxd_handler.resolve_safe();
-
- m_timer_poll = timer_alloc(TIMER_POLL);
}
-
-WRITE_LINE_MEMBER(bacta_datalogger_device::update_serial)
+void bacta_datalogger_device::device_reset()
{
int startbits = 1;
int databits = 8;
parity_t parity = device_serial_interface::PARITY_ODD;
- stop_bits_t stopbits = device_serial_interface::STOP_BITS_1; // 1 stop bit
+ stop_bits_t stopbits = device_serial_interface::STOP_BITS_1;
set_data_frame(startbits, databits, parity, stopbits);
@@ -58,39 +61,17 @@ WRITE_LINE_MEMBER(bacta_datalogger_device::update_serial)
set_rcv_rate(1200);
-// output_rxd(1);
-}
-
-void bacta_datalogger_device::device_reset()
-{
- update_serial(0);
- queue();
-}
-
-void bacta_datalogger_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- switch (id)
- {
- case TIMER_POLL:
- queue();
- break;
-
- default:
- break;
- }
+ output_rxd(1);
}
-void bacta_datalogger_device::queue()
+void bacta_datalogger_device::tx_queue()
{
- if (m_output_char != 0)
+ if (is_transmit_register_empty())
{
- if (is_transmit_register_empty())
+ if (m_output_char != 0)
{
transmit_register_setup(m_output_char);
- m_timer_poll->adjust(attotime::never);
- return;
-
- m_timer_poll->adjust(attotime::from_hz(1200));
+ m_output_char = 0;
}
}
}
@@ -102,7 +83,7 @@ void bacta_datalogger_device::tra_callback()
void bacta_datalogger_device::tra_complete()
{
- queue();
+ tx_queue();
}
void bacta_datalogger_device::rcv_complete()
@@ -112,110 +93,125 @@ void bacta_datalogger_device::rcv_complete()
receive_register_extract();
data = get_received_char();
- if (!is_receive_parity_error())
+ if (data > 0x7f)
{
- if (data != 0x00)
+ data &= ~0x80;
+ LOGDATA("Retransmission of %x\n",data);
+ if ( data == m_last_input)
{
- if (LOG_DATA)
- {
- switch (data)
- {
- case 0x01:
- logerror("(%c) Prize 1 vend or 0x01\n",data);
- break;
- case 0x02:
- logerror("(%c) Prize 2 vend or 0x02\n",data);
- break;
- case 0x03:
- logerror("(%c) Prize 3 vend or 0x03\n",data);
- break;
- case 0x04:
- logerror("(%c) Prize 4 vend or 0x04\n",data);
- break;
- case 0x05:
- logerror("(%c) Remote Credit or 0x05\n",data);
- break;
- case 0x07:
- logerror("(%c) Idle or 0x07\n",data);
- break;
- case 0x08:
- logerror("(%c) Change or 0x08\n",data);
- break;
- case 0x09:
- case 0x0a:
- case 0x0b:
- case 0x0c:
- case 0x0d:
- case 0x0e:
- case 0x0f:
- logerror("(%c) User defined message or 0x%x\n",data,data);
- break;
- case 0x2b:
- logerror("(%c) Cashbox door open 0x2b\n",data);
- case 0x2c:
- logerror("(%c) Cashbox door closed 0x2c\n",data);
- case 0x2d:
- logerror("(%c) Service door open 0x2d\n",data);
- case 0x2e:
- logerror("(%c) Service door closed 0x2e\n",data);
- case 0x61:
- logerror("(%c) Coin Tube / Hopper Levels 0x61 \n",data);
- break;
- case 0x62:
- logerror("(%c) Secondary message (0x%x), next byte is message length\n",data,data);
- break;
- case 0x63:
- logerror("(%c) Critical Fault 0x63\n",data);
- break;
- case 0x64:
- logerror("(%c) Non Critical Fault 0x64\n",data);
- break;
- case 0x65:
- logerror("(%c) Manufacturer Message Header 0x65, next byte is message length\n",data);
- break;
- case 0x66:
- logerror("(%c) Potential Parameter Data request 0x66, not currently supported\n",data);
- break;
- case 0x67:
- logerror("(%c) Potential Parameter Report request 0x67, not currently supported\n",data);
- break;
- case 0x68:
- logerror("(%c) Multi-Stake Multi-Game message 0x68\n",data);
- break;
- case 0x69:
- logerror("(%c) Cashless source 0x69\n",data);
- break;
- case 0x70:
- case 0x71:
- case 0x72:
- case 0x73:
- case 0x74:
- case 0x75:
- case 0x76:
- case 0x77:
- case 0x78:
- case 0x79:
- case 0x7a:
- case 0x7b:
- case 0x7c:
- case 0x7d:
- case 0x7e:
- case 0x7f:
- logerror("(%c) User defined message (0x%x), next byte is message length\n",data,data);
- break;
-
- default:
- logerror("(%c) Received: %02x\n",data, data);
- break;
- }
- m_output_char = 0x06;//ACK
- queue();
- }
+ return;
}
+ }
+
+ if (data != 0x00)
+ {
+ m_last_input = data;
+ switch (data)
+ {
+ case 0x01:
+ LOGDATA("(%c) Prize 1 vend or 0x01\n",data);
+ break;
+ case 0x02:
+ LOGDATA("(%c) Prize 2 vend or 0x02\n",data);
+ break;
+ case 0x03:
+ LOGDATA("(%c) Prize 3 vend or 0x03\n",data);
+ break;
+ case 0x04:
+ LOGDATA("(%c) Prize 4 vend or 0x04\n",data);
+ break;
+ case 0x05:
+ LOGDATA("(%c) Remote Credit or 0x05\n",data);
+ break;
+ case 0x07:
+ LOGDATA("(%c) Idle or 0x07\n",data);
+ break;
+ case 0x08:
+ LOGDATA("(%c) Change or 0x08\n",data);
+ break;
+ case 0x09:
+ case 0x0a:
+ case 0x0b:
+ case 0x0c:
+ case 0x0d:
+ case 0x0e:
+ case 0x0f:
+ LOGDATA("(%c) User defined message or 0x0%x\n",data,data);
+ break;
+ case 0x2b:
+ LOGDATA("(%c) Cashbox door open 0x2b\n",data);
+ break;
+ case 0x2c:
+ LOGDATA("(%c) Cashbox door closed 0x2c\n",data);
+ break;
+ case 0x2d:
+ LOGDATA("(%c) Service door open 0x2d\n",data);
+ break;
+ case 0x2e:
+ LOGDATA("(%c) Service door closed 0x2e\n",data);
+ break;
+ case 0x60:
+ LOGDATA("(%c) Primary message (0x%x), next byte is message length\n",data,data);
+ break;
+ case 0x61:
+ LOGDATA("(%c) Coin Tube / Hopper Levels 0x61 \n",data);
+ break;
+ case 0x62:
+ LOGDATA("(%c) Secondary message (0x%x), next byte is message length\n",data,data);
+ break;
+ case 0x63:
+ LOGDATA("(%c) Critical Fault 0x63\n",data);
+ break;
+ case 0x64:
+ LOGDATA("(%c) Non Critical Fault 0x64\n",data);
+ break;
+ case 0x65:
+ LOGDATA("(%c) Manufacturer Message Header 0x65, next byte is message length\n",data);
+ break;
+ case 0x66:
+ LOGDATA("(%c) Potential Parameter Data request 0x66, not currently supported\n",data);
+ break;
+ case 0x67:
+ LOGDATA("(%c) Potential Parameter Report request 0x67, not currently supported\n",data);
+ break;
+ case 0x68:
+ LOGDATA("(%c) Multi-Stake Multi-Game message 0x68\n",data);
+ break;
+ case 0x69:
+ LOGDATA("(%c) Cashless source 0x69\n",data);
+ break;
+ case 0x70:
+ case 0x71:
+ case 0x72:
+ case 0x73:
+ case 0x74:
+ case 0x75:
+ case 0x76:
+ case 0x77:
+ case 0x78:
+ case 0x79:
+ case 0x7a:
+ case 0x7b:
+ case 0x7c:
+ case 0x7d:
+ case 0x7e:
+ case 0x7f:
+ LOGDATA("(%c) User defined message (0x%x), next byte is message length\n",data,data);
+ break;
+
+ default:
+ LOGDATA("(%c) Received: %02x\n",data, data);
+ break;
+ }
+ m_output_char = 0x06;//ACK
+ tx_queue();
}
else
- {
- m_output_char = 0x15;//NAK
- queue();
+ {
+ if (data != 0x00)
+ {
+ m_output_char = 0x15;//NAK
+ tx_queue();
+ }
}
} \ No newline at end of file
diff --git a/src/mame/machine/bacta_datalogger.h b/src/mame/machine/bacta_datalogger.h
index ce973c71c7a..c89dcbb68bd 100644
--- a/src/mame/machine/bacta_datalogger.h
+++ b/src/mame/machine/bacta_datalogger.h
@@ -11,32 +11,27 @@ class bacta_datalogger_device : public device_t,
public:
bacta_datalogger_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
- virtual WRITE_LINE_MEMBER( write_txd ) { device_serial_interface::rx_w(state); }
+ virtual WRITE_LINE_MEMBER( write_txd ) {device_serial_interface::rx_w(state); }
auto rxd_handler() { return m_rxd_handler.bind(); }
DECLARE_WRITE_LINE_MEMBER( output_rxd ) { m_rxd_handler(state); }
- DECLARE_WRITE_LINE_MEMBER(update_serial);
-
protected:
bacta_datalogger_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void tra_callback() override;
virtual void tra_complete() override;
virtual void rcv_complete() override;
private:
- static constexpr int TIMER_POLL = 1;
-
- void queue();
+ void tx_queue();
devcb_write_line m_rxd_handler;
+ uint8_t m_last_input;
uint8_t m_output_char;
- emu_timer *m_timer_poll;
};
DECLARE_DEVICE_TYPE(BACTA_DATALOGGER, bacta_datalogger_device)
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 5a5110fd768..05ff12ce784 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -18410,9 +18410,14 @@ j_unk //
@source:jpmsys5.cpp
cashcade // Cashcade (JPM)
monoplcl // Monopoly Classic (JPM)
+monoplcld //
monopldx // Monopoly Deluxe (JPM)
+monopldx1 // Monopoly Deluxe (JPM)
+monopldxd //
monopoly // Monopoly (JPM)
-monopolya // Monopoly (JPM)
+monopolyd // Monopoly (JPM)
+monopoly4 // Monopoly (JPM)
+monopoly3 // Monopoly (JPM)
@source:jpmsys5sw.cpp
j5ar80 // Around The World In Eighty Days (JPM)