From c209b455ff8dbcc9543d9bb4ee4e691499644f7f Mon Sep 17 00:00:00 2001 From: James Wallace Date: Sun, 16 Oct 2022 08:58:21 +0100 Subject: mpu4.cpp, ticket.cpp Added proper hopper communications to ticket.cpp (#10404) * Clones promoted to working ---------------------------- The Crystal Maze (v1.3 alt) (MPU4 Video) * ticket.cpp: Add a devcb_line for output handling to communicate with hardware mpu4.cpp: Fixed hopper hookup to use the ticket dispense handler * mpu4.cpp Updated base map to remove DUART hack --- src/devices/machine/ticket.cpp | 7 +++++++ src/devices/machine/ticket.h | 6 ++++++ src/mame/barcrest/mpu4.cpp | 5 ++++- src/mame/barcrest/mpu4.h | 23 ----------------------- src/mame/barcrest/mpu4vid.cpp | 2 +- 5 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/devices/machine/ticket.cpp b/src/devices/machine/ticket.cpp index f5dba9ef6d7..cdc0385827d 100644 --- a/src/devices/machine/ticket.cpp +++ b/src/devices/machine/ticket.cpp @@ -54,6 +54,7 @@ ticket_dispenser_device::ticket_dispenser_device(const machine_config &mconfig, , m_power(0) , m_timer(nullptr) , m_output(*this, tag) // TODO: change to "tag:status" + , m_dispense_handler(*this) // TODO: can we use m_output for this? { } @@ -141,6 +142,8 @@ void ticket_dispenser_device::device_start() m_output.resolve(); + m_dispense_handler.resolve_safe(); + save_item(NAME(m_status)); save_item(NAME(m_power)); } @@ -181,6 +184,10 @@ TIMER_CALLBACK_MEMBER(ticket_dispenser_device::update_output_state) // update output status m_output = m_status == m_ticketdispensed; + if (m_hopper_type) + { + m_dispense_handler(m_status); + } // if we just dispensed, increment global count if (m_status == m_ticketdispensed) { diff --git a/src/devices/machine/ticket.h b/src/devices/machine/ticket.h index 0bf9dd106c3..4937f0316be 100644 --- a/src/devices/machine/ticket.h +++ b/src/devices/machine/ticket.h @@ -61,6 +61,8 @@ public: m_hopper_type = hopper_type; } + auto dispense_handler() { return m_dispense_handler.bind(); } + // read/write handlers DECLARE_READ_LINE_MEMBER( line_r ); DECLARE_WRITE_LINE_MEMBER( motor_w ); @@ -89,6 +91,7 @@ protected: bool m_power; emu_timer *m_timer; output_finder<> m_output; + devcb_write_line m_dispense_handler; }; class hopper_device : public ticket_dispenser_device @@ -102,6 +105,9 @@ public: set_senses(motor_sense, status_sense, true); } hopper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + +private: + }; #endif // MAME_MACHINE_TICKET_H diff --git a/src/mame/barcrest/mpu4.cpp b/src/mame/barcrest/mpu4.cpp index c20a3e1563b..93b52eacad5 100644 --- a/src/mame/barcrest/mpu4.cpp +++ b/src/mame/barcrest/mpu4.cpp @@ -2083,7 +2083,6 @@ void mpu4_state::mpu4_memmap(address_map &map) // map(0x0800, 0x081f) // optional protection device lives here, see other maps map(0x0850, 0x0850).rw(FUNC(mpu4_state::bankswitch_r), FUNC(mpu4_state::bankswitch_w)); /* write bank (rom page select) */ map(0x08e0, 0x08ef).rw(m_duart68681, FUNC(mc68681_device::read), FUNC(mc68681_device::write)); //Runs hoppers - map(0x08ed, 0x08ed).r(FUNC(mpu4_state::hack_duart_r)); // hack until the hopper is hooked up to the duart in games wanting that setup (eg m4ready) map(0x0900, 0x0907).rw(m_6840ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write));/* PTM6840 IC2 */ map(0x0a00, 0x0a03).rw(m_pia3, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC3 */ map(0x0b00, 0x0b03).rw(m_pia4, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC4 */ @@ -2238,16 +2237,20 @@ void mpu4_state::tr_ht(machine_config &config) void mpu4_state::tr_hda(machine_config &config) { m_hopper_type = HOPPER_DUART_A; + m_hopper1->dispense_handler().set("duart68681", FUNC(mc68681_device::ip5_w)); } void mpu4_state::tr_hdb(machine_config &config) { m_hopper_type = HOPPER_DUART_B; + m_hopper1->dispense_handler().set("duart68681", FUNC(mc68681_device::ip5_w)); } void mpu4_state::tr_hdc(machine_config &config) { m_hopper_type = HOPPER_DUART_C; + m_hopper1->dispense_handler().set("duart68681", FUNC(mc68681_device::ip5_w)); + m_hopper2->dispense_handler().set("duart68681", FUNC(mc68681_device::ip6_w)); } void mpu4_state::tr_hna(machine_config &config) diff --git a/src/mame/barcrest/mpu4.h b/src/mame/barcrest/mpu4.h index e37ee4794c7..58eb7a79e91 100644 --- a/src/mame/barcrest/mpu4.h +++ b/src/mame/barcrest/mpu4.h @@ -421,29 +421,6 @@ protected: DECLARE_WRITE_LINE_MEMBER(dataport_rxd); - //The DUART hoppers connect via the standard IP - //Hopper 1 opto connects to IP5, hopper 2 to IP6 - //TODO: Configure this correctly via lines - uint8_t hack_duart_r() - { - if (m_hack_duart_fixed_low) - { - return 0x00; - } - else - { - int duart_data = 0; - if (m_hopper1->line_r() && m_hopper1_opto) - { - duart_data |= 0x10; - } - if (m_hopper2->line_r() && m_hopper2_opto) - { - duart_data |= 0x20; - } - return duart_data; - } - } uint8_t bootleg806_r(address_space &space, offs_t offset); required_device m_maincpu; diff --git a/src/mame/barcrest/mpu4vid.cpp b/src/mame/barcrest/mpu4vid.cpp index a2e5b8135e3..48ab3531931 100644 --- a/src/mame/barcrest/mpu4vid.cpp +++ b/src/mame/barcrest/mpu4vid.cpp @@ -8718,7 +8718,7 @@ GAME( 199?, v4bios, 0, mod2(), mpu4vid, mpu4_state, init_ GAMEL( 1993, v4cmaze, v4bios, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9 GAMEL( 1993, v4cmazedat, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3, Datapak) (MPU4 Video)",GAME_FLAGS,layout_crmaze2p )//SWP 0.9D GAMEL( 1993, v4cmazeb, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.2) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9 -GAMEL( 1993, v4cmazec, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3 alt) (MPU4 Video)",GAME_FLAGS,layout_crmaze2p )//SWP 0.9 +GAMEL( 1993, v4cmazec, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3 alt) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9 GAMEL( 1993, v4cmazed, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.1) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.6 GAMEL( 1993, v4cmaze_amld, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v0.1, AMLD) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9 (actually newer than the 1.1 set then??) -- cgit v1.2.3