diff --git a/src/mame/drivers/micropin.cpp b/src/mame/drivers/micropin.cpp index 673a5981a82..1ee008db974 100644 --- a/src/mame/drivers/micropin.cpp +++ b/src/mame/drivers/micropin.cpp @@ -43,6 +43,7 @@ public: , m_v2cpu(*this, "v2cpu") , m_pia51(*this, "pia51") , m_beep(*this, "beeper") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(pia51_r); @@ -68,10 +69,12 @@ private: uint8_t m_beep_time; uint8_t m_led_time[8]; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } optional_device m_v1cpu; optional_device m_v2cpu; optional_device m_pia51; optional_device m_beep; + output_finder<76> m_digits; }; @@ -203,8 +206,8 @@ WRITE8_MEMBER( micropin_state::p50a_w ) if (m_counter == 1) { static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7448 - output().set_digit_value(m_row, patterns[data&15]); - output().set_digit_value(m_row+20, patterns[data>>4]); + m_digits[m_row] = patterns[data&15]; + m_digits[m_row+20] = patterns[data>>4]; } } @@ -214,8 +217,8 @@ WRITE8_MEMBER( micropin_state::p50b_w ) if (m_counter == 2) { static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7448 - output().set_digit_value(m_row+40, patterns[data&15]); - output().set_digit_value(m_row+60, patterns[data>>4]); + m_digits[m_row+40] = patterns[data&15]; + m_digits[m_row+60] = patterns[data>>4]; } } diff --git a/src/mame/drivers/mmd1.cpp b/src/mame/drivers/mmd1.cpp index 9a3d2cb31cc..60d3774896e 100644 --- a/src/mame/drivers/mmd1.cpp +++ b/src/mame/drivers/mmd1.cpp @@ -155,8 +155,10 @@ class mmd1_state : public driver_device { public: mmd1_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") + , m_digits(*this, "digit%u", 0U) + { } DECLARE_WRITE8_MEMBER(mmd1_port0_w); DECLARE_WRITE8_MEMBER(mmd1_port1_w); @@ -169,18 +171,22 @@ public: DECLARE_WRITE8_MEMBER(mmd2_digit_w); DECLARE_WRITE8_MEMBER(mmd2_status_callback); DECLARE_WRITE_LINE_MEMBER(mmd2_inte_callback); - uint8_t m_return_code; - uint8_t m_digit; DECLARE_DRIVER_INIT(mmd2); DECLARE_MACHINE_RESET(mmd1); DECLARE_MACHINE_RESET(mmd2); - required_device m_maincpu; void mmd1(machine_config &config); void mmd2(machine_config &config); void mmd1_io(address_map &map); void mmd1_mem(address_map &map); void mmd2_io(address_map &map); void mmd2_mem(address_map &map); + +private: + uint8_t m_return_code; + uint8_t m_digit; + virtual void machine_start() override { m_digits.resolve(); } + required_device m_maincpu; + output_finder<9> m_digits; }; @@ -404,7 +410,7 @@ WRITE8_MEMBER( mmd1_state::mmd2_scanlines_w ) WRITE8_MEMBER( mmd1_state::mmd2_digit_w ) { if (m_digit < 9) - output().set_digit_value(m_digit, data); + m_digits[m_digit] = data; } READ8_MEMBER( mmd1_state::mmd2_kbd_r ) diff --git a/src/mame/drivers/nsm.cpp b/src/mame/drivers/nsm.cpp index 2dd86047c87..8bf496b22a9 100644 --- a/src/mame/drivers/nsm.cpp +++ b/src/mame/drivers/nsm.cpp @@ -31,9 +31,10 @@ class nsm_state : public driver_device { public: nsm_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") + , m_digits(*this, "digit%u", 0U) + { } DECLARE_READ8_MEMBER(ff_r); DECLARE_WRITE8_MEMBER(cru_w); @@ -41,16 +42,14 @@ public: void nsm(machine_config &config); void nsm_io_map(address_map &map); void nsm_map(address_map &map); -protected: - // devices - required_device m_maincpu; - - // driver_device overrides - virtual void machine_reset() override; private: uint8_t m_cru_data[9]; uint8_t m_cru_count; + virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } + required_device m_maincpu; + output_finder<60> m_digits; }; void nsm_state::nsm_map(address_map &map) @@ -111,7 +110,7 @@ WRITE8_MEMBER( nsm_state::cru_w ) for (j = 0; j < 5; j++) { segments = m_cru_data[8-j]^0xff; - output().set_digit_value(j * 10 + i, bitswap<16>(segments, 8, 8, 8, 8, 8, 8, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7)); + m_digits[j * 10 + i] = bitswap<16>(segments, 8, 8, 8, 8, 8, 8, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7); } } } diff --git a/src/mame/drivers/play_1.cpp b/src/mame/drivers/play_1.cpp index 57dd47d9215..db0afd25b19 100644 --- a/src/mame/drivers/play_1.cpp +++ b/src/mame/drivers/play_1.cpp @@ -38,6 +38,7 @@ public: , m_maincpu(*this, "maincpu") , m_dips(*this, "X.%u", 0) , m_monotone(*this, "monotone") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(port07_r); @@ -67,9 +68,11 @@ private: uint8_t m_match; uint8_t m_ball; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_ioport_array<4> m_dips; required_device m_monotone; + output_finder<46> m_digits; }; void play_1_state::play_1_map(address_map &map) @@ -273,19 +276,19 @@ WRITE8_MEMBER( play_1_state::port01_w ) // d0-1 via 4013 to match-game board // d4-7 via 4511 to match-game board if (BIT(data, 0)) - output().set_digit_value(40, patterns[1]); + m_digits[40] = patterns[1]; else - output().set_digit_value(40, 0); + m_digits[40] = 0; if (BIT(data, 1)) { - output().set_digit_value(44, patterns[0]); - output().set_digit_value(45, patterns[0]); + m_digits[44] = patterns[0]; + m_digits[45] = patterns[0]; } else { - output().set_digit_value(44, 0); - output().set_digit_value(45, 0); + m_digits[44] = 0; + m_digits[45] = 0; } m_match = patterns[data>>4]; @@ -342,47 +345,47 @@ WRITE8_MEMBER( play_1_state::port03_w ) } break; case 2: - output().set_digit_value(0, patterns[m_segment>>4]); - output().set_digit_value(1, patterns[m_segment&15]); + m_digits[0] = patterns[m_segment>>4]; + m_digits[1] = patterns[m_segment&15]; break; case 3: - output().set_digit_value(2, patterns[m_segment>>4]); - output().set_digit_value(3, patterns[m_segment&15]); + m_digits[2] = patterns[m_segment>>4]; + m_digits[3] = patterns[m_segment&15]; break; case 4: - output().set_digit_value(4, patterns[m_segment>>4]); - output().set_digit_value(5, patterns[m_segment&15]); - output().set_digit_value(14, patterns[m_segment>>4]); - output().set_digit_value(15, patterns[m_segment&15]); - output().set_digit_value(24, patterns[m_segment>>4]); - output().set_digit_value(25, patterns[m_segment&15]); - output().set_digit_value(34, patterns[m_segment>>4]); - output().set_digit_value(35, patterns[m_segment&15]); + m_digits[4] = patterns[m_segment>>4]; + m_digits[5] = patterns[m_segment&15]; + m_digits[14] = patterns[m_segment>>4]; + m_digits[15] = patterns[m_segment&15]; + m_digits[24] = patterns[m_segment>>4]; + m_digits[25] = patterns[m_segment&15]; + m_digits[34] = patterns[m_segment>>4]; + m_digits[35] = patterns[m_segment&15]; break; case 5: - output().set_digit_value(10, patterns[m_segment>>4]); - output().set_digit_value(11, patterns[m_segment&15]); + m_digits[10] = patterns[m_segment>>4]; + m_digits[11] = patterns[m_segment&15]; break; case 6: - output().set_digit_value(12, patterns[m_segment>>4]); - output().set_digit_value(13, patterns[m_segment&15]); + m_digits[12] = patterns[m_segment>>4]; + m_digits[13] = patterns[m_segment&15]; break; case 7: - output().set_digit_value(20, patterns[m_segment>>4]); - output().set_digit_value(21, patterns[m_segment&15]); + m_digits[20] = patterns[m_segment>>4]; + m_digits[21] = patterns[m_segment&15]; break; case 8: - output().set_digit_value(22, patterns[m_segment>>4]); - output().set_digit_value(23, patterns[m_segment&15]); + m_digits[22] = patterns[m_segment>>4]; + m_digits[23] = patterns[m_segment&15]; break; case 9: - output().set_digit_value(30, patterns[m_segment>>4]); - output().set_digit_value(31, patterns[m_segment&15]); + m_digits[30] = patterns[m_segment>>4]; + m_digits[31] = patterns[m_segment&15]; break; case 10: case 11: - output().set_digit_value(32, patterns[m_segment>>4]); - output().set_digit_value(33, patterns[m_segment&15]); + m_digits[32] = patterns[m_segment>>4]; + m_digits[33] = patterns[m_segment&15]; break; default: break; @@ -452,10 +455,10 @@ WRITE_LINE_MEMBER( play_1_state::clock_w ) m_maincpu->int_w(BIT(m_clockcnt, 0)); // inverted m_maincpu->ef1_w(BIT(m_clockcnt, 1)); // inverted if (BIT(m_clockcnt, 1)) - output().set_digit_value(41, m_match); + m_digits[41] = m_match; else { - output().set_digit_value(43, m_match); + m_digits[43] = m_match; output().set_value("led1", !BIT(m_ball, 1)); output().set_value("led2", !BIT(m_ball, 2)); output().set_value("led3", !BIT(m_ball, 3)); diff --git a/src/mame/drivers/play_2.cpp b/src/mame/drivers/play_2.cpp index 53c4fd84216..ac03757f335 100644 --- a/src/mame/drivers/play_2.cpp +++ b/src/mame/drivers/play_2.cpp @@ -56,6 +56,7 @@ public: , m_1863(*this, "1863") , m_aysnd1(*this, "aysnd1") , m_keyboard(*this, "X.%u", 0) + , m_digits(*this, "digit%u", 0U) { } DECLARE_WRITE8_MEMBER(port01_w); @@ -94,12 +95,14 @@ private: uint8_t m_psg_latch; uint8_t m_port06; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_4013a; required_device m_4013b; optional_device m_1863; optional_device m_aysnd1; required_ioport_array<8> m_keyboard; + output_finder<60> m_digits; }; @@ -223,7 +226,7 @@ WRITE8_MEMBER( play_2_state::port01_w ) for (uint8_t j = 0; j < 6; j++) if (BIT(m_kbdrow, j)) for (uint8_t i = 0; i < 5; i++) - output().set_digit_value(j*10 + i, m_segment[i] & 0x7f); + m_digits[j*10 + i] = m_segment[i] & 0x7f; } m_1863->set_output_gain(0, BIT(data, 7) ? 1.00 : 0.00); } @@ -395,7 +398,7 @@ MACHINE_CONFIG_START(play_2_state::play_2) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_CDP1863_ADD("1863", 0, XTAL(2'950'000) / 8) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_CONFIG_END MACHINE_CONFIG_START(play_2_state::zira) diff --git a/src/mame/drivers/rowamet.cpp b/src/mame/drivers/rowamet.cpp index 11f5834cee2..57874b4a86f 100644 --- a/src/mame/drivers/rowamet.cpp +++ b/src/mame/drivers/rowamet.cpp @@ -42,6 +42,7 @@ public: , m_maincpu(*this, "maincpu") , m_cpu2(*this, "cpu2") , m_p_ram(*this, "ram") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(sound_r); @@ -58,9 +59,11 @@ private: uint8_t m_sndcmd; uint8_t m_io[16]; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_cpu2; required_shared_ptr m_p_ram; + output_finder<32> m_digits; }; @@ -213,8 +216,8 @@ TIMER_DEVICE_CALLBACK_MEMBER( rowamet_state::timer_a ) m_out_offs &= 15; uint8_t digit = m_out_offs << 1; - output().set_digit_value(digit, patterns[m_p_ram[m_out_offs]>>4]); - output().set_digit_value(++digit, patterns[m_p_ram[m_out_offs++]&15]); + m_digits[digit] = patterns[m_p_ram[m_out_offs]>>4]; + m_digits[++digit] = patterns[m_p_ram[m_out_offs++]&15]; } MACHINE_CONFIG_START(rowamet_state::rowamet)