diff --git a/src/mame/drivers/eacc.cpp b/src/mame/drivers/eacc.cpp index 2ef947a1bb9..712a52b355a 100644 --- a/src/mame/drivers/eacc.cpp +++ b/src/mame/drivers/eacc.cpp @@ -59,10 +59,11 @@ class eacc_state : public driver_device { public: eacc_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_pia(*this, "pia"), - m_p_nvram(*this, "nvram") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_pia(*this, "pia") + , m_p_nvram(*this, "nvram") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ_LINE_MEMBER( eacc_cb1_r ); @@ -72,19 +73,21 @@ public: DECLARE_WRITE_LINE_MEMBER( eacc_cb2_w ); DECLARE_WRITE8_MEMBER( eacc_digit_w ); DECLARE_WRITE8_MEMBER( eacc_segment_w ); - bool m_cb1; - bool m_cb2; - bool m_nmi; - required_device m_maincpu; - required_device m_pia; - required_shared_ptr m_p_nvram; - virtual void machine_reset() override; TIMER_DEVICE_CALLBACK_MEMBER(eacc_cb1); TIMER_DEVICE_CALLBACK_MEMBER(eacc_nmi); void eacc(machine_config &config); void eacc_mem(address_map &map); private: uint8_t m_digit; + bool m_cb1; + bool m_cb2; + bool m_nmi; + virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } + required_device m_maincpu; + required_device m_pia; + required_shared_ptr m_p_nvram; + output_finder<7> m_digits; }; @@ -221,7 +224,7 @@ WRITE8_MEMBER( eacc_state::eacc_segment_w ) { for (i = 3; i < 7; i++) if (BIT(m_digit, i)) - output().set_digit_value(i, bitswap<8>(data, 7, 0, 1, 4, 5, 6, 2, 3)); + m_digits[i] = bitswap<8>(data, 7, 0, 1, 4, 5, 6, 2, 3); } } } diff --git a/src/mame/drivers/instruct.cpp b/src/mame/drivers/instruct.cpp index c3e95068312..780c3f0476e 100644 --- a/src/mame/drivers/instruct.cpp +++ b/src/mame/drivers/instruct.cpp @@ -63,6 +63,7 @@ public: , m_p_smiram(*this, "smiram") , m_p_extram(*this, "extram") , m_cass(*this, "cassette") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(port_r); @@ -83,6 +84,7 @@ public: void mem_map(address_map &map); private: virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } uint16_t m_lar; uint8_t m_digit; bool m_valid_digit; @@ -93,6 +95,7 @@ private: required_shared_ptr m_p_smiram; required_shared_ptr m_p_extram; required_device m_cass; + output_finder<129> m_digits; }; // flag led @@ -127,7 +130,7 @@ WRITE8_MEMBER( instruct_state::portf8_w ) WRITE8_MEMBER( instruct_state::portf9_w ) { if (m_valid_digit) - output().set_digit_value(m_digit, data); + m_digits[m_digit] = data; m_valid_digit = false; } diff --git a/src/mame/drivers/mk2.cpp b/src/mame/drivers/mk2.cpp index 615196571dc..ac989f96f29 100644 --- a/src/mame/drivers/mk2.cpp +++ b/src/mame/drivers/mk2.cpp @@ -68,20 +68,23 @@ public: , m_maincpu(*this, "maincpu") , m_speaker(*this, "speaker") , m_miot(*this, "miot") + , m_digits(*this, "digit%u", 0U) { } - required_device m_maincpu; - required_device m_speaker; - required_device m_miot; DECLARE_READ8_MEMBER(mk2_read_a); DECLARE_WRITE8_MEMBER(mk2_write_a); DECLARE_READ8_MEMBER(mk2_read_b); DECLARE_WRITE8_MEMBER(mk2_write_b); - uint8_t m_led[5]; - virtual void machine_start() override; TIMER_DEVICE_CALLBACK_MEMBER(update_leds); void mk2(machine_config &config); void mk2_mem(address_map &map); +private: + uint8_t m_led[5]; + virtual void machine_start() override; + required_device m_maincpu; + required_device m_speaker; + required_device m_miot; + output_finder<6> m_digits; }; @@ -126,7 +129,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk2_state::update_leds) int i; for (i=0; i<4; i++) - output().set_digit_value(i, m_led[i]); + m_digits[i] = m_led[i]; output().set_led_value(0, BIT(m_led[4], 3)); output().set_led_value(1, BIT(m_led[4], 5)); @@ -138,6 +141,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk2_state::update_leds) void mk2_state::machine_start() { + m_digits.resolve(); } READ8_MEMBER( mk2_state::mk2_read_a ) diff --git a/src/mame/drivers/mkit09.cpp b/src/mame/drivers/mkit09.cpp index aff136cee4b..22a4f2f7c64 100644 --- a/src/mame/drivers/mkit09.cpp +++ b/src/mame/drivers/mkit09.cpp @@ -49,6 +49,7 @@ public: , m_pia(*this, "pia") , m_cass(*this, "cassette") , m_maincpu(*this, "maincpu") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(pa_r); @@ -64,9 +65,11 @@ public: private: uint8_t m_keydata; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_pia; required_device m_cass; required_device m_maincpu; + output_finder<10> m_digits; }; @@ -175,7 +178,8 @@ WRITE8_MEMBER( mkit09_state::pa_w ) data ^= 0xff; if (m_keydata > 3) { - output().set_digit_value(m_keydata, bitswap<8>(data, 7, 0, 5, 6, 4, 2, 1, 3)); + if (m_keydata < 10) + m_digits[m_keydata] = bitswap<8>(data, 7, 0, 5, 6, 4, 2, 1, 3); m_keydata = 0; } diff --git a/src/mame/drivers/sc1.cpp b/src/mame/drivers/sc1.cpp index edf6d7dc7c8..90b0cd3ee19 100644 --- a/src/mame/drivers/sc1.cpp +++ b/src/mame/drivers/sc1.cpp @@ -2,37 +2,15 @@ // copyright-holders:Sandro Ronco /*************************************************************************** - Schachcomputer SC1 +Schachcomputer SC1 - 12/05/2009 Skeleton driver. +2009-05-12 Skeleton driver. ToDo: - speaker - LEDs - 7seg sometimes flashes -Port 80-83 could be a device - -This happens at the start: -'maincpu' (04EF): unmapped i/o memory write to 0081 = 0F & FF -'maincpu' (04F3): unmapped i/o memory write to 0083 = CF & FF -'maincpu' (04F7): unmapped i/o memory write to 0083 = BB & FF -'maincpu' (04FB): unmapped i/o memory write to 0082 = 01 & FF -'maincpu' (0523): unmapped i/o memory write to 00FC = 02 & FF ** -'maincpu' (0523): unmapped i/o memory write to 00FC = 04 & FF ** - -** These two happen for a while (making a tone from a speaker?) - -Then: -'maincpu' (0523): unmapped i/o memory write to 00FC = 00 & FF -'maincpu' (0075): unmapped i/o memory write to 0080 = 02 & FF -'maincpu' (0523): unmapped i/o memory write to 00FC = 20 & FF - -Then this happens continuously: -Port 80 out - 00, 02, FF -Port FC out - 00, 01, 02, 04, 08, 10, 20, 40, 80 (selecting rows?) -Port 80 in - upper byte = 20 thru 26 -Port 82 in - upper byte = 0 thru 7 ****************************************************************************/ @@ -52,19 +30,22 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_speaker(*this, "speaker") + , m_digits(*this, "digit%u", 0U) { } - required_device m_maincpu; - required_device m_speaker; - DECLARE_WRITE8_MEMBER( matrix_w ); DECLARE_WRITE8_MEMBER( pio_port_a_w ); DECLARE_READ8_MEMBER( pio_port_b_r ); - uint8_t m_matrix; void sc1(machine_config &config); void sc1_io(address_map &map); void sc1_mem(address_map &map); +private: + uint8_t m_matrix; + virtual void machine_start() override { m_digits.resolve(); } + required_device m_maincpu; + required_device m_speaker; + output_finder<4> m_digits; }; /*************************************************************************** @@ -75,16 +56,16 @@ public: WRITE8_MEMBER( sc1_state::pio_port_a_w ) { - uint8_t digit = bitswap<8>( data,3,4,6,0,1,2,7,5 ); + uint8_t digit = bitswap<8>( data,3,4,6,0,1,2,7,5 ) & 0x7f; if (m_matrix & 0x04) - output().set_digit_value(3, digit & 0x7f); + m_digits[3] = digit; if (m_matrix & 0x08) - output().set_digit_value(2, digit & 0x7f); + m_digits[2] = digit; if (m_matrix & 0x10) - output().set_digit_value(1, digit & 0x7f); + m_digits[1] = digit; if (m_matrix & 0x20) - output().set_digit_value(0, digit & 0x7f); + m_digits[0] = digit; } diff --git a/src/mame/drivers/sdk85.cpp b/src/mame/drivers/sdk85.cpp index e567e0324f7..6f34592766d 100644 --- a/src/mame/drivers/sdk85.cpp +++ b/src/mame/drivers/sdk85.cpp @@ -52,23 +52,22 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_keyboard(*this, "X%u", 0) + , m_digits(*this, "digit%u", 0U) { } DECLARE_WRITE8_MEMBER(scanlines_w); DECLARE_WRITE8_MEMBER(digit_w); DECLARE_READ8_MEMBER(kbd_r); - void sdk85(machine_config &config); - void sdk85_io(address_map &map); void sdk85_mem(address_map &map); -protected: - virtual void machine_reset() override; - private: u8 m_digit; + virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_ioport_array<3> m_keyboard; + output_finder<6> m_digits; }; void sdk85_state::machine_reset() @@ -138,7 +137,7 @@ WRITE8_MEMBER( sdk85_state::scanlines_w ) WRITE8_MEMBER( sdk85_state::digit_w ) { if (m_digit < 6) - output().set_digit_value(m_digit, bitswap<8>(data, 3, 2, 1, 0, 7, 6, 5, 4)^0xff); + m_digits[m_digit] = bitswap<8>(~data, 3, 2, 1, 0, 7, 6, 5, 4); } READ8_MEMBER( sdk85_state::kbd_r ) diff --git a/src/mame/drivers/sdk86.cpp b/src/mame/drivers/sdk86.cpp index 97ed529cf16..892f2da868b 100644 --- a/src/mame/drivers/sdk86.cpp +++ b/src/mame/drivers/sdk86.cpp @@ -45,6 +45,7 @@ public: sdk86_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_digits(*this, "digit%u", 0U) { } DECLARE_WRITE8_MEMBER(scanlines_w); @@ -56,7 +57,9 @@ public: void sdk86_mem(address_map &map); private: uint8_t m_digit; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; + output_finder<8> m_digits; }; void sdk86_state::sdk86_mem(address_map &map) @@ -116,7 +119,7 @@ WRITE8_MEMBER( sdk86_state::scanlines_w ) WRITE8_MEMBER( sdk86_state::digit_w ) { if (m_digit < 8) - output().set_digit_value(m_digit, data); + m_digits[m_digit] = data; } READ8_MEMBER( sdk86_state::kbd_r )