diff --git a/src/mame/drivers/gp_1.cpp b/src/mame/drivers/gp_1.cpp index cb5851f2cd7..7f5d3fe5658 100644 --- a/src/mame/drivers/gp_1.cpp +++ b/src/mame/drivers/gp_1.cpp @@ -49,6 +49,7 @@ public: , m_io_x9(*this, "X9") , m_io_xa(*this, "XA") , m_io_xb(*this, "XB") + , m_digits(*this, "digit%u", 0U) { } DECLARE_DRIVER_INIT(gp_1); @@ -66,6 +67,7 @@ private: uint8_t m_digit; uint8_t m_segment[16]; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_ctc; optional_device m_sn; @@ -78,6 +80,7 @@ private: required_ioport m_io_x9; required_ioport m_io_xa; required_ioport m_io_xb; + output_finder<40> m_digits; }; @@ -360,10 +363,10 @@ WRITE8_MEMBER( gp_1_state::porta_w ) else if (m_u14 == 8) { - output().set_digit_value(m_digit, patterns[m_segment[8]]); - output().set_digit_value(m_digit+8, patterns[m_segment[9]]); - output().set_digit_value(m_digit+16, patterns[m_segment[10]]); - output().set_digit_value(m_digit+24, patterns[m_segment[11]]); + m_digits[m_digit] = patterns[m_segment[8]]; + m_digits[m_digit+8] = patterns[m_segment[9]]; + m_digits[m_digit+16] = patterns[m_segment[10]]; + m_digits[m_digit+24] = patterns[m_segment[11]]; } } diff --git a/src/mame/drivers/gp_2.cpp b/src/mame/drivers/gp_2.cpp index cfc7529042c..6ab7e390471 100644 --- a/src/mame/drivers/gp_2.cpp +++ b/src/mame/drivers/gp_2.cpp @@ -12,7 +12,7 @@ the first high score at which a free credit is awarded. Then press 9 to set the back to normal operation. If this setup is not done, each player will get 3 free games at the start of ball 1. -All the Z80 "maincpu" code is copied from gp_1.c +All the Z80 "maincpu" code is copied from gp_1.cpp Any bug fixes need to be applied both here and there. Sound boards: (each game has its own custom sounds) @@ -58,6 +58,7 @@ public: , m_io_x9(*this, "X9") , m_io_xa(*this, "XA") , m_io_xb(*this, "XB") + , m_digits(*this, "digit%u", 0U) { } DECLARE_DRIVER_INIT(gp_2); @@ -73,6 +74,7 @@ private: uint8_t m_digit; uint8_t m_segment[16]; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_ctc; required_ioport m_io_dsw0; @@ -84,6 +86,7 @@ private: required_ioport m_io_x9; required_ioport m_io_xa; required_ioport m_io_xb; + output_finder<40> m_digits; }; @@ -543,11 +546,11 @@ WRITE8_MEMBER( gp_2_state::porta_w ) else if (m_u14 == 7) { - output().set_digit_value(m_digit, patterns[m_segment[7]]); - output().set_digit_value(m_digit+8, patterns[m_segment[8]]); - output().set_digit_value(m_digit+16, patterns[m_segment[9]]); - output().set_digit_value(m_digit+24, patterns[m_segment[10]]); - output().set_digit_value(m_digit+32, patterns[m_segment[11]]); + m_digits[m_digit] = patterns[m_segment[7]]; + m_digits[m_digit+8] = patterns[m_segment[8]]; + m_digits[m_digit+16] = patterns[m_segment[9]]; + m_digits[m_digit+24] = patterns[m_segment[10]]; + m_digits[m_digit+32] = patterns[m_segment[11]]; } } diff --git a/src/mame/drivers/gts3.cpp b/src/mame/drivers/gts3.cpp index 1e7f25ca73a..7e6ea28bafd 100644 --- a/src/mame/drivers/gts3.cpp +++ b/src/mame/drivers/gts3.cpp @@ -45,6 +45,7 @@ public: , m_u4(*this, "u4") , m_u5(*this, "u5") , m_switches(*this, "X.%u", 0) + , m_digits(*this, "digit%u", 0U) { } DECLARE_DRIVER_INIT(gts3); @@ -64,10 +65,12 @@ private: uint8_t m_segment[4]; uint8_t m_u4b; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_u4; required_device m_u5; required_ioport_array<12> m_switches; + output_finder<40> m_digits; }; @@ -224,7 +227,8 @@ WRITE8_MEMBER( gts3_state::segbank_w ) m_segment[offset] = data; seg1 = m_segment[offset&2] | (m_segment[offset|1] << 8); seg2 = bitswap<32>(seg1,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,14,9,7,13,11,10,6,8,12,5,4,3,3,2,1,0,0); - output().set_digit_value(m_digit+(BIT(offset, 1) ? 0 : 20), seg2); + if (m_digit < 20) + m_digits[m_digit+(BIT(offset, 1) ? 0 : 20)] = seg2; } WRITE8_MEMBER( gts3_state::u4b_w ) diff --git a/src/mame/drivers/gts3a.cpp b/src/mame/drivers/gts3a.cpp index ddfb348e1a3..af5d17210a5 100644 --- a/src/mame/drivers/gts3a.cpp +++ b/src/mame/drivers/gts3a.cpp @@ -38,6 +38,7 @@ public: , m_u4(*this, "u4") , m_u5(*this, "u5") , m_switches(*this, "X.%u", 0) + , m_digits(*this, "digit%u", 0U) { } DECLARE_DRIVER_INIT(gts3a); @@ -64,11 +65,13 @@ private: uint8_t m_u4b; uint8_t m_dmd; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_dmdcpu; required_device m_u4; required_device m_u5; required_ioport_array<12> m_switches; + output_finder<40> m_digits; }; @@ -238,7 +241,7 @@ WRITE8_MEMBER( gts3a_state::segbank_w ) m_segment[offset] = data; seg1 = m_segment[offset&2] | (m_segment[offset|1] << 8); seg2 = bitswap<32>(seg1,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,14,9,7,13,11,10,6,8,12,5,4,3,3,2,1,0,0); - output().set_digit_value(m_digit+(BIT(offset, 1) ? 0 : 20), seg2); + m_digits[m_digit+(BIT(offset, 1) ? 0 : 20)] = seg2; } WRITE8_MEMBER( gts3a_state::u4b_w ) diff --git a/src/mame/drivers/gts80.cpp b/src/mame/drivers/gts80.cpp index 9b7f1a02f9c..5ee2f60b165 100644 --- a/src/mame/drivers/gts80.cpp +++ b/src/mame/drivers/gts80.cpp @@ -38,6 +38,7 @@ public: , m_maincpu(*this, "maincpu") , m_r0_sound(*this, "r0sound") , m_r1_sound(*this, "r1sound") + , m_digits(*this, "digit%u", 0U) { } DECLARE_DRIVER_INIT(gts80); @@ -59,9 +60,11 @@ private: uint8_t m_lamprow; uint8_t m_swrow; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; optional_device m_r0_sound; optional_device m_r1_sound; + output_finder<56> m_digits; }; void gts80_state::gts80_map(address_map &map) @@ -306,15 +309,15 @@ WRITE8_MEMBER( gts80_state::port2a_w ) { case 0x10: // player 1&2 if (!BIT(m_segment, 7)) seg2 |= 0x300; // put '1' in the middle - output().set_digit_value(data & 15, seg2); + m_digits[data & 15] = seg2; break; case 0x20: // player 3&4 if (!BIT(m_segment, 7)) seg2 |= 0x300; // put '1' in the middle - output().set_digit_value((data & 15)+20, seg2); + m_digits[(data & 15)+20] = seg2; break; case 0x40: // credits & balls if (!BIT(m_segment, 7)) m_segment = 1; // turn '1' back to normal - output().set_digit_value((data & 15)+40, patterns[m_segment & 15]); + m_digits[(data & 15)+40] = patterns[m_segment & 15]; break; } } diff --git a/src/mame/includes/s11.h b/src/mame/includes/s11.h index e2e65a13d90..7084e94a325 100644 --- a/src/mame/includes/s11.h +++ b/src/mame/includes/s11.h @@ -114,6 +114,7 @@ protected: void set_segment2(uint32_t s) { m_segment2 = s; } void set_timer(emu_timer* t) { m_irq_timer = t; } + virtual void machine_start() override { m_digits.resolve(); } virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_IRQ = 0; private: @@ -125,7 +126,6 @@ private: uint32_t m_segment2; emu_timer* m_irq_timer; bool m_irq_active; - virtual void machine_start() override { m_digits.resolve(); } }; #endif // MAME_INCLUDES_S11_H diff --git a/src/mame/includes/s11b.h b/src/mame/includes/s11b.h index 709be58a50c..61c32da9b86 100644 --- a/src/mame/includes/s11b.h +++ b/src/mame/includes/s11b.h @@ -17,7 +17,6 @@ public: s11b_state(const machine_config &mconfig, device_type type, const char *tag) : s11a_state(mconfig, type, tag) , m_bg_hc55516(*this, "hc55516_bg") - , m_digits(*this, "digit%u", 0U) { } DECLARE_WRITE8_MEMBER(dig1_w); @@ -38,12 +37,10 @@ public: void s11b_main_map(address_map &map); protected: optional_device m_bg_hc55516; - output_finder<64> m_digits; void set_invert(bool inv) { m_invert = inv; } private: - virtual void machine_start() override { m_digits.resolve(); } bool m_invert; // later System 11B games start expecting inverted data to the display LED segments.