From 109691ca5c618dc6996a2b43a13c921f0e1da855 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Tue, 3 Apr 2018 17:26:27 +1000 Subject: (nw) output finder for 24cdjuke,30test,allied,cvicny,datum,k1003,prodigy --- src/mame/drivers/24cdjuke.cpp | 19 +++++++++++-------- src/mame/drivers/30test.cpp | 21 ++++++++++++++------- src/mame/drivers/allied.cpp | 32 ++++++++++++++++++-------------- src/mame/drivers/cvicny.cpp | 20 ++++++++++++-------- src/mame/drivers/datum.cpp | 5 ++++- src/mame/drivers/k1003.cpp | 10 +++++++--- src/mame/drivers/prodigy.cpp | 26 +++++++++++++++++--------- 7 files changed, 83 insertions(+), 50 deletions(-) diff --git a/src/mame/drivers/24cdjuke.cpp b/src/mame/drivers/24cdjuke.cpp index 6ef5531e067..b3678a6711e 100644 --- a/src/mame/drivers/24cdjuke.cpp +++ b/src/mame/drivers/24cdjuke.cpp @@ -61,13 +61,14 @@ class midcoin24cdjuke_state : public driver_device { public: midcoin24cdjuke_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_io_row0(*this, "ROW0"), - m_io_row1(*this, "ROW1"), - m_io_row2(*this, "ROW2"), - m_io_row3(*this, "ROW3"), - m_charset(*this, "charset") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_io_row0(*this, "ROW0") + , m_io_row1(*this, "ROW1") + , m_io_row2(*this, "ROW2") + , m_io_row3(*this, "ROW3") + , m_charset(*this, "charset") + , m_digits(*this, "digit%u", 0U) { } required_device m_maincpu; @@ -76,6 +77,7 @@ public: required_ioport m_io_row2; required_ioport m_io_row3; required_region_ptr m_charset; + output_finder<16> m_digits; virtual void machine_start() override; virtual void machine_reset() override; @@ -121,7 +123,7 @@ WRITE8_MEMBER(midcoin24cdjuke_state::digit_w) char_data = bitswap<16>(char_data, 13,11,9,15,14,10,12,8,7,6,5,4,3,2,1,0); - output().set_digit_value(offset, char_data ^ 0xffff); + m_digits[offset] = char_data ^ 0xffff; } @@ -271,6 +273,7 @@ INPUT_PORTS_END void midcoin24cdjuke_state::machine_start() { + m_digits.resolve(); } void midcoin24cdjuke_state::machine_reset() diff --git a/src/mame/drivers/30test.cpp b/src/mame/drivers/30test.cpp index b4471a80965..d0b6b0265bc 100644 --- a/src/mame/drivers/30test.cpp +++ b/src/mame/drivers/30test.cpp @@ -56,9 +56,11 @@ class namco_30test_state : public driver_device { public: namco_30test_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_oki(*this, "oki") { } + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_oki(*this, "oki") + , m_digits(*this, "digit%u", 0U) + { } uint8_t m_mux_data; uint8_t m_oki_bank; @@ -77,6 +79,7 @@ public: void _30test(machine_config &config); void namco_30test_io(address_map &map); void namco_30test_map(address_map &map); + output_finder<72> m_digits; }; @@ -85,14 +88,17 @@ static const uint8_t led_map[16] = WRITE8_MEMBER(namco_30test_state::namco_30test_led_w) { - output().set_digit_value(0 + offset * 2, led_map[(data & 0xf0) >> 4]); - output().set_digit_value(1 + offset * 2, led_map[(data & 0x0f) >> 0]); + m_digits[offset * 2] = led_map[data >> 4]; + m_digits[1 + offset * 2] = led_map[data & 0x0f]; } WRITE8_MEMBER(namco_30test_state::namco_30test_led_rank_w) { - output().set_digit_value(64 + offset * 2, led_map[(data & 0xf0) >> 4]); - output().set_digit_value(65 + offset * 2, led_map[(data & 0x0f) >> 0]); + if (offset < 4) + { + m_digits[64 + offset * 2] = led_map[data >> 4]; + m_digits[65 + offset * 2] = led_map[data & 0x0f]; + } } WRITE8_MEMBER(namco_30test_state::namco_30test_lamps_w) @@ -233,6 +239,7 @@ INPUT_PORTS_END void namco_30test_state::machine_start() { + m_digits.resolve(); save_item(NAME(m_mux_data)); save_item(NAME(m_oki_bank)); } diff --git a/src/mame/drivers/allied.cpp b/src/mame/drivers/allied.cpp index 836c882bde7..ca3332d9e38 100644 --- a/src/mame/drivers/allied.cpp +++ b/src/mame/drivers/allied.cpp @@ -27,6 +27,7 @@ For some reason the 'rol $46' instruction outputs the original data followed by the new result, so I've had to employ a horrible hack. + Hold down X while inserting a coin. At the start of each ball, the display will be flashing. You need to hit Z, and then you can get a score. When the ball indicator goes out, your game is over. @@ -63,6 +64,7 @@ public: , m_ic6(*this, "ic6") , m_ic7(*this, "ic7") , m_ic8(*this, "ic8") + , m_digits(*this, "digit%u", 0U) { } DECLARE_WRITE8_MEMBER(ic1_b_w); @@ -99,6 +101,7 @@ private: uint8_t m_ic6b4; uint8_t m_ic6b7; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; required_device m_ic1; required_device m_ic2; @@ -107,6 +110,7 @@ private: required_device m_ic6; required_device m_ic7; required_device m_ic8; + output_finder<42> m_digits; }; @@ -413,34 +417,34 @@ WRITE8_MEMBER( allied_state::ic4_b_w ) { if (!BIT(data, i+4)) { - output().set_digit_value(i*10, patterns[0]); + m_digits[i*10] = patterns[0]; segment = (m_player_score[i] >> 0) & 15; - output().set_digit_value(i*10+1, patterns[segment]); + m_digits[i*10+1] = patterns[segment]; segment = (m_player_score[i] >> 4) & 15; - output().set_digit_value(i*10+2, patterns[segment]); + m_digits[i*10+2] = patterns[segment]; segment = (m_player_score[i] >> 8) & 15; - output().set_digit_value(i*10+3, patterns[segment]); + m_digits[i*10+3] = patterns[segment]; segment = (m_player_score[i] >> 12) & 15; - output().set_digit_value(i*10+4, patterns[segment]); + m_digits[i*10+4] = patterns[segment]; segment = (m_player_score[i] >> 16) & 15; - output().set_digit_value(i*10+5, patterns[segment]); + m_digits[i*10+5] = patterns[segment]; } else { - output().set_digit_value(i*10, 0); - output().set_digit_value(i*10+1, 0); - output().set_digit_value(i*10+2, 0); - output().set_digit_value(i*10+3, 0); - output().set_digit_value(i*10+4, 0); - output().set_digit_value(i*10+5, 0); + m_digits[i*10] = 0; + m_digits[i*10+1] = 0; + m_digits[i*10+2] = 0; + m_digits[i*10+3] = 0; + m_digits[i*10+4] = 0; + m_digits[i*10+5] = 0; } } // doesn't seem to be a strobe for the credits display segment = (m_player_score[4] >> 0) & 15; - output().set_digit_value(40, patterns[segment]); + m_digits[40] = patterns[segment]; segment = (m_player_score[4] >> 4) & 15; - output().set_digit_value(41, patterns[segment]); + m_digits[41] = patterns[segment]; // PB0-3 - player 1-4 LED - to do } diff --git a/src/mame/drivers/cvicny.cpp b/src/mame/drivers/cvicny.cpp index 4cf6a80a593..6cfb22b0d95 100644 --- a/src/mame/drivers/cvicny.cpp +++ b/src/mame/drivers/cvicny.cpp @@ -40,25 +40,29 @@ class cvicny_state : public driver_device { public: cvicny_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_digit_last(0) - { } + : driver_device(mconfig, type, tag) + , m_digit_last(0) + , m_maincpu(*this, "maincpu") + , m_digits(*this, "digit%u", 0U) + { } - required_device m_maincpu; + void cvicny(machine_config &config); + void cvicny_mem(address_map &map); DECLARE_READ8_MEMBER(key_r); DECLARE_WRITE8_MEMBER(digit_w); DECLARE_WRITE8_MEMBER(segment_w ); +private: uint8_t m_digit; uint8_t m_digit_last; - void cvicny(machine_config &config); - void cvicny_mem(address_map &map); + virtual void machine_start() override { m_digits.resolve(); } + required_device m_maincpu; + output_finder<8> m_digits; }; WRITE8_MEMBER( cvicny_state::segment_w ) // output segments on the selected digit { if (m_digit != m_digit_last) - output().set_digit_value(m_digit, data); + m_digits[m_digit] = data; m_digit_last = m_digit; } diff --git a/src/mame/drivers/datum.cpp b/src/mame/drivers/datum.cpp index a017913cd5c..d7ecd255bbc 100644 --- a/src/mame/drivers/datum.cpp +++ b/src/mame/drivers/datum.cpp @@ -63,6 +63,7 @@ public: , m_pia1(*this, "pia1") , m_keyboard(*this, "X%u", 0) , m_maincpu(*this, "maincpu") + , m_digits(*this, "digit%u", 0U) { } DECLARE_READ8_MEMBER(pa_r); @@ -75,9 +76,11 @@ public: private: uint8_t m_keydata; virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_pia1; required_ioport_array<4> m_keyboard; required_device m_maincpu; + output_finder<16> m_digits; }; @@ -164,7 +167,7 @@ WRITE8_MEMBER( datum_state::pa_w ) data ^= 0xff; if (m_keydata > 3) { - output().set_digit_value(m_keydata, bitswap<8>(data & 0x7f, 7, 0, 5, 6, 4, 2, 1, 3)); + m_digits[m_keydata] = bitswap<8>(data & 0x7f, 7, 0, 5, 6, 4, 2, 1, 3); m_keydata = 0; } diff --git a/src/mame/drivers/k1003.cpp b/src/mame/drivers/k1003.cpp index fd17a1fe52b..ae683d5d0f7 100644 --- a/src/mame/drivers/k1003.cpp +++ b/src/mame/drivers/k1003.cpp @@ -51,7 +51,9 @@ class k1003_state : public driver_device public: k1003_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") { } + , m_maincpu(*this, "maincpu") + , m_digits(*this, "digit%u", 0U) + { } DECLARE_READ8_MEMBER(port2_r); DECLARE_READ8_MEMBER(key_r); @@ -67,7 +69,9 @@ private: uint8_t m_disp_2; uint8_t bit_to_dec(uint8_t val); virtual void machine_reset() override; + virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; + output_finder<16> m_digits; }; @@ -117,8 +121,8 @@ uint8_t k1003_state::bit_to_dec(uint8_t val) WRITE8_MEMBER( k1003_state::disp_w ) { - output().set_digit_value(bit_to_dec(data)*2, m_disp_1); - output().set_digit_value(bit_to_dec(data)*2+1, m_disp_2); + m_digits[bit_to_dec(data)*2] = m_disp_1; + m_digits[bit_to_dec(data)*2+1] = m_disp_2; } void k1003_state::k1003_io(address_map &map) diff --git a/src/mame/drivers/prodigy.cpp b/src/mame/drivers/prodigy.cpp index 9db8d3b1b65..d50482735f6 100644 --- a/src/mame/drivers/prodigy.cpp +++ b/src/mame/drivers/prodigy.cpp @@ -137,6 +137,7 @@ public: , m_cb2(*this, "bcd:cb2") , m_digit(0.0) , m_io_line(*this, "LINE%u", 0) + , m_digits(*this, "digit%u", 0U) #if HTTPUI , m_connection(NULL) , m_web_line0(0) @@ -180,6 +181,7 @@ private: virtual void device_start() override; required_ioport_array<5> m_io_line; + output_finder<4> m_digits; uint16_t m_line[5]; #if HTTPUI @@ -212,6 +214,7 @@ NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit7_cb) { if (data != 0) m_digi void prodigy_state::device_start() { + m_digits.resolve(); memset(m_line, 0, sizeof(m_line)); #if HTTPUI m_server = machine().manager().http(); @@ -554,22 +557,27 @@ void prodigy_state::update_bcd() LOGBCD(" - segments: %02x -> ", m_digit); m_segments = m_digit; LOGBCD("%02x\n", m_segments); - if (m_digit_cache[digit_nbr] != m_segments) + + if (digit_nbr < 4) { - output().set_digit_value( digit_nbr, m_segments); - m_digit_cache[digit_nbr] = m_segments; + if (m_digit_cache[digit_nbr] != m_segments) + { + m_digits[digit_nbr] = m_segments; + m_digit_cache[digit_nbr] = m_segments; #if HTTPUI - update_web_bcd(digit_nbr, m_segments); + update_web_bcd(digit_nbr, m_segments); #endif + } } } } -ADDRESS_MAP_START(prodigy_state::maincpu_map) - AM_RANGE(0x0000, 0x07ff) AM_RAM - AM_RANGE(0x2000, 0x200f) AM_DEVREADWRITE("via", via6522_device, read, write) - AM_RANGE(0x6000, 0x7fff) AM_ROM AM_REGION("roms", 0x0000) AM_MIRROR(0x8000) -ADDRESS_MAP_END +void prodigy_state::maincpu_map(address_map &map) +{ + map(0x0000, 0x07ff).ram(); + map(0x2000, 0x200f).rw("via", FUNC(via6522_device::read),FUNC(via6522_device::write)); + map(0x6000, 0x7fff).rom().region("roms", 0).mirror(0x8000); +} /* * The keypad was modelled after the physical appearance but altered after finding out how it was working so -- cgit v1.2.3