From 0ec48c3f40b9ea0586702b3dde7095b1c9f6d772 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 28 Mar 2018 23:36:47 +1100 Subject: [PATCH] (nw) output finder for marywu,mekd2,mk1,mk14,pmi80,pro80,ravens,savia84,selz80,tec1,vcs80,zapcomp --- src/mame/drivers/marywu.cpp | 12 ++++++++++-- src/mame/drivers/mekd2.cpp | 10 +++++++++- src/mame/drivers/mk1.cpp | 19 ++++++++++++------- src/mame/drivers/mk14.cpp | 10 +++++++++- src/mame/drivers/pmi80.cpp | 11 ++++++++++- src/mame/drivers/pro80.cpp | 15 +++++++++------ src/mame/drivers/ravens.cpp | 7 +++++-- src/mame/drivers/savia84.cpp | 6 +++++- src/mame/drivers/selz80.cpp | 10 +++++++++- src/mame/drivers/tec1.cpp | 29 ++++++++++++++++------------- src/mame/drivers/vcs80.cpp | 5 +++-- src/mame/drivers/zapcomputer.cpp | 24 ++++++++---------------- src/mame/includes/vcs80.h | 16 +++++++++------- 13 files changed, 114 insertions(+), 60 deletions(-) diff --git a/src/mame/drivers/marywu.cpp b/src/mame/drivers/marywu.cpp index 4275714fb5d..5212016a953 100644 --- a/src/mame/drivers/marywu.cpp +++ b/src/mame/drivers/marywu.cpp @@ -29,6 +29,7 @@ class marywu_state : public driver_device public: marywu_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) + , m_digits(*this, "digit%u", 0U) { } DECLARE_WRITE8_MEMBER(display_7seg_data_w); @@ -43,6 +44,8 @@ public: void program_map(address_map &map); private: uint8_t m_selected_7seg_module; + virtual void machine_start() override; + output_finder<32> m_digits; }; static INPUT_PORTS_START( marywu ) @@ -153,8 +156,8 @@ WRITE8_MEMBER( marywu_state::display_7seg_data_w ) { static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // HEF4511BP (7 seg display driver) - output().set_digit_value(2 * m_selected_7seg_module + 0, patterns[data & 0x0F]); - output().set_digit_value(2 * m_selected_7seg_module + 1, patterns[(data >> 4) & 0x0F]); + m_digits[2 * m_selected_7seg_module + 0] = patterns[data & 0x0F]; + m_digits[2 * m_selected_7seg_module + 1] = patterns[data >> 4]; } void marywu_state::program_map(address_map &map) @@ -173,6 +176,11 @@ void marywu_state::io_map(address_map &map) map(0xf000, 0xf000).noprw(); /* TODO: Investigate this. There's something going on at this address range. */ } +void marywu_state::machine_start() +{ + m_digits.resolve(); +} + MACHINE_CONFIG_START(marywu_state::marywu) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I80C31, XTAL(10'738'635)) //actual CPU is a Winbond w78c31b-24 diff --git a/src/mame/drivers/mekd2.cpp b/src/mame/drivers/mekd2.cpp index da6dd0d47c0..9d2ff88e9cc 100644 --- a/src/mame/drivers/mekd2.cpp +++ b/src/mame/drivers/mekd2.cpp @@ -102,6 +102,7 @@ public: , m_pia_u(*this, "pia_u") , m_acia(*this, "acia") , m_cass(*this, "cassette") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ_LINE_MEMBER(mekd2_key40_r); @@ -124,11 +125,13 @@ private: uint8_t m_keydata; bool m_cass_state; bool m_cassold; + virtual void machine_start() override; required_device m_maincpu; required_device m_pia_s; required_device m_pia_u; required_device m_acia; required_device m_cass; + output_finder<6> m_digits; }; @@ -285,7 +288,7 @@ WRITE8_MEMBER( mekd2_state::mekd2_digit_w ) for (i = 0; i < 6; i++) { if (BIT(data, i)) - output().set_digit_value(i, ~m_segment & 0x7f); + m_digits[i] = ~m_segment & 0x7f; } } m_digit = data; @@ -359,6 +362,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(mekd2_state::mekd2_p) } } +void mekd2_state::machine_start() +{ + m_digits.resolve(); +} + /*********************************************************** Machine diff --git a/src/mame/drivers/mk1.cpp b/src/mame/drivers/mk1.cpp index f891946207d..be9b848cbdd 100644 --- a/src/mame/drivers/mk1.cpp +++ b/src/mame/drivers/mk1.cpp @@ -52,20 +52,24 @@ class mk1_state : public driver_device { public: mk1_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(mk1_f8_r); DECLARE_WRITE8_MEMBER(mk1_f8_w); - uint8_t m_f8[2]; - uint8_t m_led[4]; - virtual void machine_start() override; TIMER_DEVICE_CALLBACK_MEMBER(mk1_update_leds); F3853_INTERRUPT_REQ_CB(mk1_interrupt); - required_device m_maincpu; void mk1(machine_config &config); void mk1_io(address_map &map); void mk1_mem(address_map &map); +private: + uint8_t m_f8[2]; + uint8_t m_led[4]; + virtual void machine_start() override; + required_device m_maincpu; + output_finder<4> m_digits; }; @@ -162,7 +166,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk1_state::mk1_update_leds) { for (int i = 0; i < 4; i++) { - output().set_digit_value(i, m_led[i] >> 1); + m_digits[i] = m_led[i] >> 1; output().set_led_value(i, m_led[i] & 0x01); m_led[i] = 0; } @@ -171,6 +175,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk1_state::mk1_update_leds) void mk1_state::machine_start() { + m_digits.resolve(); } diff --git a/src/mame/drivers/mk14.cpp b/src/mame/drivers/mk14.cpp index 76c7cecb31d..89389b2b28e 100644 --- a/src/mame/drivers/mk14.cpp +++ b/src/mame/drivers/mk14.cpp @@ -54,6 +54,7 @@ public: , m_keyboard(*this, "X.%u", 0) , m_cass(*this, "cassette") , m_dac(*this, "dac") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(keyboard_r); @@ -65,10 +66,12 @@ public: void mem_map(address_map &map); private: virtual void machine_reset() override; + virtual void machine_start() override; required_device m_maincpu; required_ioport_array<8> m_keyboard; required_device m_cass; required_device m_dac; + output_finder<8> m_digits; }; /* @@ -100,7 +103,7 @@ READ8_MEMBER( mk14_state::keyboard_r ) WRITE8_MEMBER( mk14_state::display_w ) { if (offset < 8 ) - output().set_digit_value(offset, data); + m_digits[offset] = data; else { //logerror("write %02x to %02x\n",data,offset); @@ -191,6 +194,11 @@ void mk14_state::machine_reset() { } +void mk14_state::machine_start() +{ + m_digits.resolve(); +} + MACHINE_CONFIG_START(mk14_state::mk14) /* basic machine hardware */ // IC1 1SP-8A/600 (8060) SC/MP Microprocessor diff --git a/src/mame/drivers/pmi80.cpp b/src/mame/drivers/pmi80.cpp index 22d4f539f88..e10a0e05a27 100644 --- a/src/mame/drivers/pmi80.cpp +++ b/src/mame/drivers/pmi80.cpp @@ -44,6 +44,7 @@ public: : driver_device(mconfig, type, tag) , m_ledready(0) , m_maincpu(*this, "maincpu") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(keyboard_r); @@ -56,7 +57,9 @@ private: uint8_t m_keyrow; bool m_ledready; virtual void machine_reset() override; + virtual void machine_start() override; required_device m_maincpu; + output_finder<10> m_digits; }; @@ -78,7 +81,8 @@ WRITE8_MEMBER( pmi80_state::leds_w ) if (m_ledready) { m_ledready = false; - output().set_digit_value(m_keyrow^0xff, data^0xff); + if (m_keyrow > 0xF5) // to be sure to be sure + m_digits[m_keyrow^0xff] = data^0xff; } } @@ -156,6 +160,11 @@ void pmi80_state::machine_reset() { } +void pmi80_state::machine_start() +{ + m_digits.resolve(); +} + MACHINE_CONFIG_START(pmi80_state::pmi80) /* basic machine hardware */ diff --git a/src/mame/drivers/pro80.cpp b/src/mame/drivers/pro80.cpp index da11277c446..054b36102ef 100644 --- a/src/mame/drivers/pro80.cpp +++ b/src/mame/drivers/pro80.cpp @@ -38,6 +38,7 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_cass(*this, "cassette") + , m_digits(*this, "digit%u", 0U) { } DECLARE_WRITE8_MEMBER(digit_w); @@ -53,8 +54,10 @@ private: uint8_t m_cass_in; uint16_t m_cass_data[4]; void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_cass; + output_finder<6> m_digits; }; // This can read the first few bytes correctly, but after that bit slippage occurs. @@ -87,12 +90,12 @@ WRITE8_MEMBER( pro80_state::segment_w ) { if (m_digit_sel) { - if (!BIT(m_digit_sel, 0)) output().set_digit_value(0, data); - if (!BIT(m_digit_sel, 1)) output().set_digit_value(1, data); - if (!BIT(m_digit_sel, 2)) output().set_digit_value(2, data); - if (!BIT(m_digit_sel, 3)) output().set_digit_value(3, data); - if (!BIT(m_digit_sel, 4)) output().set_digit_value(4, data); - if (!BIT(m_digit_sel, 5)) output().set_digit_value(5, data); + if (!BIT(m_digit_sel, 0)) m_digits[0] = data; + if (!BIT(m_digit_sel, 1)) m_digits[1] = data; + if (!BIT(m_digit_sel, 2)) m_digits[2] = data; + if (!BIT(m_digit_sel, 3)) m_digits[3] = data; + if (!BIT(m_digit_sel, 4)) m_digits[4] = data; + if (!BIT(m_digit_sel, 5)) m_digits[5] = data; m_digit_sel = 0; } diff --git a/src/mame/drivers/ravens.cpp b/src/mame/drivers/ravens.cpp index e2fac7c49ad..0172e558fdc 100644 --- a/src/mame/drivers/ravens.cpp +++ b/src/mame/drivers/ravens.cpp @@ -89,6 +89,7 @@ public: , m_maincpu(*this, "maincpu") , m_terminal(*this, "terminal") , m_cass(*this, "cassette") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(port07_r); @@ -111,9 +112,11 @@ public: private: uint8_t m_term_char; uint8_t m_term_data; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; optional_device m_terminal; required_device m_cass; + output_finder<7> m_digits; }; WRITE_LINE_MEMBER( ravens_state::cass_w ) @@ -128,7 +131,7 @@ READ_LINE_MEMBER( ravens_state::cass_r ) WRITE8_MEMBER( ravens_state::display_w ) { - output().set_digit_value(offset, data); + m_digits[offset] = data; } WRITE8_MEMBER( ravens_state::leds_w ) @@ -202,7 +205,7 @@ WRITE8_MEMBER( ravens_state::port1c_w ) MACHINE_RESET_MEMBER( ravens_state, ravens2 ) { m_term_data = 0x80; - output().set_digit_value(6, 0); + m_digits[6] = 0; } diff --git a/src/mame/drivers/savia84.cpp b/src/mame/drivers/savia84.cpp index 5635086aea2..fdd916f7f97 100644 --- a/src/mame/drivers/savia84.cpp +++ b/src/mame/drivers/savia84.cpp @@ -41,6 +41,7 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_ppi8255(*this, "ppi8255") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(savia84_8255_portc_r); @@ -57,8 +58,10 @@ private: uint8_t m_digit; uint8_t m_digit_last; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_ppi8255; + output_finder<9> m_digits; }; void savia84_state::mem_map(address_map &map) @@ -138,7 +141,8 @@ void savia84_state::machine_reset() WRITE8_MEMBER( savia84_state::savia84_8255_porta_w ) // OUT F8 - output segments on the selected digit { m_segment = ~data & 0x7f; - if (m_digit && (m_digit != m_digit_last)) output().set_digit_value(m_digit, m_segment); + if (m_digit && (m_digit != m_digit_last)) + m_digits[m_digit] = m_segment; m_digit_last = m_digit; } diff --git a/src/mame/drivers/selz80.cpp b/src/mame/drivers/selz80.cpp index 16971e83611..d5d199131e0 100644 --- a/src/mame/drivers/selz80.cpp +++ b/src/mame/drivers/selz80.cpp @@ -47,6 +47,7 @@ public: , m_p_ram(*this, "ram") , m_keyboard(*this, "X%u", 0) , m_clock(*this, "uart_clock") + , m_digits(*this, "digit%u", 0U) { } DECLARE_WRITE8_MEMBER(scanlines_w); @@ -67,6 +68,8 @@ private: optional_shared_ptr m_p_ram; required_ioport_array<4> m_keyboard; required_device m_clock; + output_finder<8> m_digits; + virtual void machine_start() override; }; void selz80_state::dagz80_mem(address_map &map) @@ -193,7 +196,7 @@ WRITE8_MEMBER( selz80_state::scanlines_w ) WRITE8_MEMBER( selz80_state::digit_w ) { - output().set_digit_value(m_digit, bitswap<8>(data, 3, 2, 1, 0, 7, 6, 5, 4)); + m_digits[m_digit] = bitswap<8>(data, 3, 2, 1, 0, 7, 6, 5, 4); } READ8_MEMBER( selz80_state::kbd_r ) @@ -206,6 +209,11 @@ READ8_MEMBER( selz80_state::kbd_r ) return data; } +void selz80_state::machine_start() +{ + m_digits.resolve(); +} + MACHINE_CONFIG_START(selz80_state::selz80) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",Z80, XTAL(4'000'000)) // it's actually a 5MHz XTAL with a NEC uPD780C-1 cpu diff --git a/src/mame/drivers/tec1.cpp b/src/mame/drivers/tec1.cpp index 8a261532970..14510574b6e 100644 --- a/src/mame/drivers/tec1.cpp +++ b/src/mame/drivers/tec1.cpp @@ -85,17 +85,18 @@ class tec1_state : public driver_device { public: tec1_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_speaker(*this, "speaker"), - m_cass(*this, "cassette"), - m_wave(*this, WAVE_TAG), - m_key_pressed(0), - m_io_line0(*this, "LINE0"), - m_io_line1(*this, "LINE1"), - m_io_line2(*this, "LINE2"), - m_io_line3(*this, "LINE3"), - m_io_shift(*this, "SHIFT") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_speaker(*this, "speaker") + , m_cass(*this, "cassette") + , m_wave(*this, WAVE_TAG) + , m_key_pressed(0) + , m_io_line0(*this, "LINE0") + , m_io_line1(*this, "LINE1") + , m_io_line2(*this, "LINE2") + , m_io_line3(*this, "LINE3") + , m_io_shift(*this, "SHIFT") + , m_digits(*this, "digit%u", 0U) { } required_device m_maincpu; @@ -108,6 +109,7 @@ public: required_ioport m_io_line2; required_ioport m_io_line3; required_ioport m_io_shift; + output_finder<6> m_digits; emu_timer *m_kbd_timer; DECLARE_READ8_MEMBER( tec1_kbd_r ); DECLARE_READ8_MEMBER( latch_r ); @@ -241,12 +243,12 @@ TIMER_CALLBACK_MEMBER(tec1_state::tec1_kbd_callback) if (BIT(m_digit, i)) { m_refresh[i] = 1; - output().set_digit_value(i, m_segment); + m_digits[i] = m_segment; } else if (m_refresh[i] == 0x80) { - output().set_digit_value(i, 0); + m_digits[i] = 0; m_refresh[i] = 0; } else @@ -310,6 +312,7 @@ TIMER_CALLBACK_MEMBER(tec1_state::tec1_kbd_callback) void tec1_state::machine_start() { + m_digits.resolve(); m_kbd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tec1_state::tec1_kbd_callback),this)); m_kbd_timer->adjust( attotime::zero, 0, attotime::from_hz(500) ); } diff --git a/src/mame/drivers/vcs80.cpp b/src/mame/drivers/vcs80.cpp index 30f0afe2c5b..bbe40dc72f5 100644 --- a/src/mame/drivers/vcs80.cpp +++ b/src/mame/drivers/vcs80.cpp @@ -181,13 +181,12 @@ WRITE8_MEMBER( vcs80_state::pio_pb_w ) */ - uint8_t led_data = bitswap<8>(data & 0x7f, 7, 5, 6, 4, 3, 2, 1, 0); int digit = m_keylatch; /* skip middle digit */ if (digit > 3) digit++; - output().set_digit_value(8 - digit, led_data); + m_digits[8 - digit] = bitswap<8>(data & 0x7f, 7, 5, 6, 4, 3, 2, 1, 0); } /* Z80 Daisy Chain */ @@ -202,6 +201,8 @@ static const z80_daisy_config vcs80_daisy_chain[] = void vcs80_state::machine_start() { + m_digits.resolve(); + m_pio->strobe_a(1); m_pio->strobe_b(1); diff --git a/src/mame/drivers/zapcomputer.cpp b/src/mame/drivers/zapcomputer.cpp index b5301eeba90..bd84dbdbc25 100644 --- a/src/mame/drivers/zapcomputer.cpp +++ b/src/mame/drivers/zapcomputer.cpp @@ -37,6 +37,7 @@ public: zapcomp_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_READ8_MEMBER(keyboard_r); @@ -49,6 +50,7 @@ private: uint8_t decode7seg(uint8_t data); virtual void machine_start() override; required_device m_maincpu; + output_finder<6> m_digits; }; uint8_t zapcomp_state::decode7seg(uint8_t data) @@ -71,22 +73,11 @@ uint8_t zapcomp_state::decode7seg(uint8_t data) WRITE8_MEMBER( zapcomp_state::display_7seg_w ) { - switch (offset){ - case 0: //Port 0x05 : address HI - output().set_digit_value(0, decode7seg(data >> 4)); - output().set_digit_value(1, decode7seg(data)); - break; - case 1: //Port 0x06 : address LOW - output().set_digit_value(2, decode7seg(data >> 4)); - output().set_digit_value(3, decode7seg(data)); - break; - case 2: //Port 0x07 : data - output().set_digit_value(4, decode7seg(data >> 4)); - output().set_digit_value(5, decode7seg(data)); - break; - default: - break; - } + //Port 0x05 : address HI + //Port 0x06 : address LOW + //Port 0x07 : data + m_digits[offset*2] = decode7seg(data >> 4); + m_digits[offset*2+1] = decode7seg(data); } READ8_MEMBER( zapcomp_state::keyboard_r ) @@ -159,6 +150,7 @@ INPUT_PORTS_END void zapcomp_state::machine_start() { + m_digits.resolve(); } MACHINE_CONFIG_START(zapcomp_state::zapcomp) diff --git a/src/mame/includes/vcs80.h b/src/mame/includes/vcs80.h index 756789cd25c..2f251070092 100644 --- a/src/mame/includes/vcs80.h +++ b/src/mame/includes/vcs80.h @@ -21,13 +21,14 @@ class vcs80_state : public driver_device { public: vcs80_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, Z80_TAG), - m_pio(*this, Z80PIO_TAG), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_bdmem(*this, "bdmem") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, Z80_TAG) + , m_pio(*this, Z80PIO_TAG) + , m_y0(*this, "Y0") + , m_y1(*this, "Y1") + , m_y2(*this, "Y2") + , m_bdmem(*this, "bdmem") + , m_digits(*this, "digit%u", 0U) { } required_device m_maincpu; @@ -36,6 +37,7 @@ public: required_ioport m_y1; required_ioport m_y2; required_device m_bdmem; + output_finder<9> m_digits; virtual void machine_start() override;