From 3a7e5ed9f8fac7ae0b9d35b93a486560b172cce0 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Thu, 5 Apr 2018 02:32:57 +1000 Subject: (nw) output finder for speedbal,chesstrv,fireball --- src/mame/drivers/chesstrv.cpp | 32 +++++++++++++++------------ src/mame/drivers/fireball.cpp | 51 ++++++++++++++++++++----------------------- src/mame/drivers/speedbal.cpp | 7 +++--- src/mame/includes/speedbal.h | 16 ++++++++------ 4 files changed, 55 insertions(+), 51 deletions(-) diff --git a/src/mame/drivers/chesstrv.cpp b/src/mame/drivers/chesstrv.cpp index dd18b2a6617..f3a6e85adc2 100644 --- a/src/mame/drivers/chesstrv.cpp +++ b/src/mame/drivers/chesstrv.cpp @@ -20,10 +20,10 @@ class chesstrv_state : public driver_device { public: chesstrv_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) , - m_maincpu(*this, "maincpu") { } - - virtual void machine_start() override; + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_digits(*this, "digit%u", 0U) + { } DECLARE_READ8_MEMBER( ram_addr_r ); DECLARE_WRITE8_MEMBER( ram_addr_w ); @@ -34,17 +34,20 @@ public: DECLARE_READ8_MEMBER( keypad_r ); DECLARE_WRITE8_MEMBER( diplomat_display_w ); DECLARE_READ8_MEMBER( diplomat_keypad_r ); - - uint8_t m_ram_addr; - uint8_t *m_ram; - uint8_t m_matrix; //TIMER_DEVICE_CALLBACK_MEMBER(borisdpl_timer_interrupt); - required_device m_maincpu; void chesstrv(machine_config &config); void borisdpl(machine_config &config); void borisdpl_io(address_map &map); void chesstrv_io(address_map &map); void chesstrv_mem(address_map &map); + +private: + uint8_t m_ram_addr; + uint8_t *m_ram; + uint8_t m_matrix; + virtual void machine_start() override; + required_device m_maincpu; + output_finder<8> m_digits; }; WRITE8_MEMBER( chesstrv_state::ram_addr_w ) @@ -72,13 +75,13 @@ WRITE8_MEMBER( chesstrv_state::display_w ) uint8_t seg_data = bitswap<8>(data,0,1,2,3,4,5,6,7); if(!(m_matrix & 0x01)) - output().set_digit_value( 3, seg_data ); + m_digits[ 3 ] = seg_data; if(!(m_matrix & 0x02)) - output().set_digit_value( 2, seg_data ); + m_digits[ 2 ] = seg_data; if(!(m_matrix & 0x04)) - output().set_digit_value( 1, seg_data ); + m_digits[ 1 ] = seg_data; if(!(m_matrix & 0x08)) - output().set_digit_value( 0, seg_data ); + m_digits[ 0 ] = seg_data; } WRITE8_MEMBER( chesstrv_state::matrix_w ) @@ -104,7 +107,7 @@ READ8_MEMBER( chesstrv_state::keypad_r ) WRITE8_MEMBER( chesstrv_state::diplomat_display_w ) { - output().set_digit_value( m_matrix & 7, data ^ 0xff ); + m_digits[m_matrix & 7] = data ^ 0xff; } READ8_MEMBER( chesstrv_state::diplomat_keypad_r ) @@ -216,6 +219,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(chesstrv_state::borisdpl_timer_interrupt) void chesstrv_state::machine_start() { + m_digits.resolve(); m_ram = memregion("ram")->base(); save_item(NAME(m_ram_addr)); diff --git a/src/mame/drivers/fireball.cpp b/src/mame/drivers/fireball.cpp index f551f34a0fc..65bf6b8a6f2 100644 --- a/src/mame/drivers/fireball.cpp +++ b/src/mame/drivers/fireball.cpp @@ -2,7 +2,7 @@ // copyright-holders:ANY /*********************************************************************************** - fireball.c + fireball.cpp Mechanical game where you have a gun shooting rubber balls. @@ -48,20 +48,13 @@ class fireball_state : public driver_device { public: fireball_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_ay(*this, "aysnd"), - m_eeprom(*this, "eeprom") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_ay(*this, "aysnd") + , m_eeprom(*this, "eeprom") + , m_digits(*this, "digit%u", 0U) { } - uint8_t m_p1_data; - uint8_t m_p3_data; - uint8_t int_timing; - uint8_t int_data; - uint8_t ay_data; - uint8_t to_ay_data; - uint8_t m_display_data; - DECLARE_WRITE8_MEMBER(io_00_w); DECLARE_READ8_MEMBER(io_00_r); DECLARE_WRITE8_MEMBER(io_02_w); @@ -79,17 +72,21 @@ public: void fireball(machine_config &config); void fireball_io_map(address_map &map); void fireball_map(address_map &map); -protected: - // devices +private: + uint8_t m_p1_data; + uint8_t m_p3_data; + uint8_t int_timing; + uint8_t int_data; + uint8_t ay_data; + uint8_t to_ay_data; + uint8_t m_display_data; + virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_ay; required_device m_eeprom; - - // driver_device overrides - virtual void machine_reset() override; - -private: + output_finder<8> m_digits; }; /**************************** @@ -116,13 +113,13 @@ WRITE8_MEMBER(fireball_state::io_00_w) switch (data&0x0f) { - case 1: output().set_digit_value(2, m_display_data); + case 1: m_digits[2] = m_display_data; break; - case 2: output().set_digit_value(1, m_display_data); + case 2: m_digits[1] = m_display_data; break; - case 4: output().set_digit_value(4, m_display_data); + case 4: m_digits[4] = m_display_data; break; - case 8: output().set_digit_value(3, m_display_data); + case 8: m_digits[3] = m_display_data; break; } @@ -201,7 +198,7 @@ WRITE8_MEMBER(fireball_state::io_06_w) if (LOG_DISPLAY2) logerror("On board display write %02X\n",uint8_t(~(data&0xff))); - output().set_digit_value(7, uint8_t(~(data&0xff))); + m_digits[7] = uint8_t(~(data&0xff)); } @@ -448,8 +445,8 @@ INPUT_PORTS_END void fireball_state::machine_reset() { int_timing=1; - output().set_digit_value(5, 0x3f); - output().set_digit_value(6, 0x3f); + m_digits[5] = 0x3f; + m_digits[6] = 0x3f; output().set_value("Hopper1", 0); output().set_value("Hopper2", 0); diff --git a/src/mame/drivers/speedbal.cpp b/src/mame/drivers/speedbal.cpp index e4ff4986169..93b81255aad 100644 --- a/src/mame/drivers/speedbal.cpp +++ b/src/mame/drivers/speedbal.cpp @@ -42,6 +42,7 @@ Interrupt frequency on audio CPU is not a periodical signal, but there are a lot void speedbal_state::machine_start() { + m_digits.resolve(); save_item(NAME(m_leds_start)); save_item(NAME(m_leds_shiftreg)); } @@ -101,9 +102,9 @@ WRITE8_MEMBER(speedbal_state::leds_output_block) // The shift register is 28 bits, led block number is in the upper bits // and the other 3 bytes in it go to each 7seg led of the current block. int block = m_leds_shiftreg >> 24 & 7; - output().set_digit_value(10 * block + 0, ~m_leds_shiftreg >> 0 & 0xff); - output().set_digit_value(10 * block + 1, ~m_leds_shiftreg >> 8 & 0xff); - output().set_digit_value(10 * block + 2, ~m_leds_shiftreg >> 16 & 0xff); + m_digits[10 * block] = ~m_leds_shiftreg & 0xff; + m_digits[10 * block + 1] = ~m_leds_shiftreg >> 8 & 0xff; + m_digits[10 * block + 2] = ~m_leds_shiftreg >> 16 & 0xff; } WRITE8_MEMBER(speedbal_state::leds_start_block) diff --git a/src/mame/includes/speedbal.h b/src/mame/includes/speedbal.h index a330a640189..40d47c88d44 100644 --- a/src/mame/includes/speedbal.h +++ b/src/mame/includes/speedbal.h @@ -4,13 +4,14 @@ class speedbal_state : public driver_device { public: speedbal_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_spriteram(*this, "spriteram"), - m_background_videoram(*this, "bg_videoram"), - m_foreground_videoram(*this, "fg_videoram") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_gfxdecode(*this, "gfxdecode") + , m_palette(*this, "palette") + , m_spriteram(*this, "spriteram") + , m_background_videoram(*this, "bg_videoram") + , m_foreground_videoram(*this, "fg_videoram") + , m_digits(*this, "digit%u", 0U) { } required_device m_maincpu; @@ -20,6 +21,7 @@ public: required_shared_ptr m_spriteram; required_shared_ptr m_background_videoram; required_shared_ptr m_foreground_videoram; + output_finder<73> m_digits; bool m_leds_start; uint32_t m_leds_shiftreg; -- cgit v1.2.3