From d4743f6b3e9f21f4c81f2c4e6e42493a310bf3ea Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 4 Apr 2018 00:43:20 +1000 Subject: [PATCH] (nw) output finders for techno,thayers, tm990189,turbo --- src/mame/drivers/techno.cpp | 21 ++++++++++-------- src/mame/drivers/thayers.cpp | 7 ++++-- src/mame/drivers/tm990189.cpp | 7 ++++-- src/mame/drivers/turbo.cpp | 4 ++-- src/mame/includes/turbo.h | 41 ++++++++++++++++++++--------------- 5 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/mame/drivers/techno.cpp b/src/mame/drivers/techno.cpp index c5b37c03a71..e00440241d9 100644 --- a/src/mame/drivers/techno.cpp +++ b/src/mame/drivers/techno.cpp @@ -27,6 +27,7 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_switch(*this, "SWITCH.%u", 0) + , m_digits(*this, "digit%u", 0U) { } enum @@ -61,6 +62,7 @@ private: required_device m_maincpu; required_ioport_array<8> m_switch; + output_finder<48> m_digits; emu_timer *m_irq_set_timer; emu_timer *m_irq_advance_timer; @@ -88,22 +90,22 @@ void techno_state::techno_map(address_map &map) map(0x17800, 0x17fff).w(this, FUNC(techno_state::setout_w)); } -ADDRESS_MAP_START(techno_state::techno_sub_map) -// no ram here, must be internal to the cpu - AM_RANGE(0x0000, 0x3fff) AM_READ(rd_r) // to TKY2016A audio processor which has its own 3.58MHz clock - AM_RANGE(0x4000, 0x7fff) AM_WRITE(wr_w) // A11=LED;A12=WR2 (DAC) ;A13=WR1 (TKY2016A as above) - AM_RANGE(0x4000, 0xbfff) AM_ROM // 4000-7FFF is same as 8000-BFFF; 4x 16k ROMS bankswitched - AM_RANGE(0xc000, 0xffff) AM_ROM // another 16k ROM -ADDRESS_MAP_END +void techno_state::techno_sub_map(address_map &map) +{ // no ram here, must be internal to the cpu + map(0x0000, 0x3fff).r(this, FUNC(techno_state::rd_r)); // to TKY2016A audio processor which has its own 3.58MHz clock + map(0x4000, 0x7fff).w(this, FUNC(techno_state::wr_w)); // A11=LED;A12=WR2 (DAC) ;A13=WR1 (TKY2016A as above) + map(0x4000, 0xbfff).rom(); // 4000-7FFF is same as 8000-BFFF; 4x 16k ROMS bankswitched + map(0xc000, 0xffff).rom(); // another 16k ROM +} WRITE16_MEMBER( techno_state::disp1_w ) { - output().set_digit_value(m_digit, bitswap<16>(data, 12, 10, 8, 14, 13, 9, 11, 15, 7, 6, 5, 4, 3, 2, 1, 0)); + m_digits[m_digit] = bitswap<16>(data, 12, 10, 8, 14, 13, 9, 11, 15, 7, 6, 5, 4, 3, 2, 1, 0); } WRITE16_MEMBER( techno_state::disp2_w ) { - output().set_digit_value(m_digit+30, bitswap<16>(data, 12, 10, 8, 14, 13, 9, 11, 15, 7, 6, 5, 4, 3, 2, 1, 0)); + m_digits[m_digit+30] = bitswap<16>(data, 12, 10, 8, 14, 13, 9, 11, 15, 7, 6, 5, 4, 3, 2, 1, 0); } WRITE16_MEMBER( techno_state::sound_w ) @@ -276,6 +278,7 @@ void techno_state::machine_start() void techno_state::machine_reset() { + m_digits.resolve(); m_vector = 0x88; m_digit = 0; diff --git a/src/mame/drivers/thayers.cpp b/src/mame/drivers/thayers.cpp index ddaa4a85a26..21aec9a1c0d 100644 --- a/src/mame/drivers/thayers.cpp +++ b/src/mame/drivers/thayers.cpp @@ -52,6 +52,7 @@ public: , m_ldv1000(*this, "ldv1000") , m_maincpu(*this, "maincpu") , m_row(*this, "ROW.%u", 0) + , m_digits(*this, "digit%u", 0U) { } @@ -103,6 +104,7 @@ public: void check_interrupt(); required_device m_maincpu; required_ioport_array<10> m_row; + output_finder<16> m_digits; void thayers(machine_config &config); void thayers_io_map(address_map &map); @@ -464,7 +466,7 @@ WRITE8_MEMBER(thayers_state::den1_w) */ - output().set_digit_value(data >> 4, led_map[data & 0x0f]); + m_digits[data >> 4] = led_map[data & 0x0f]; } WRITE8_MEMBER(thayers_state::den2_w) @@ -484,7 +486,7 @@ WRITE8_MEMBER(thayers_state::den2_w) */ - output().set_digit_value(8 + (data >> 4), led_map[data & 0x0f]); + m_digits[8 + (data >> 4)] = led_map[data & 0x0f]; } /* SSI-263 */ @@ -764,6 +766,7 @@ INPUT_PORTS_END void thayers_state::machine_start() { + m_digits.resolve(); memset(&m_ssi263, 0, sizeof(m_ssi263)); } diff --git a/src/mame/drivers/tm990189.cpp b/src/mame/drivers/tm990189.cpp index b1693254fae..56362ca0b77 100644 --- a/src/mame/drivers/tm990189.cpp +++ b/src/mame/drivers/tm990189.cpp @@ -90,6 +90,7 @@ public: , m_tms9918(*this, "tms9918") , m_tms9901_usr(*this, TMS9901_0_TAG) , m_tms9901_sys(*this, TMS9901_1_TAG) + , m_digits(*this, "digit%u", 0U) { } required_device m_tms9980a; @@ -170,6 +171,7 @@ private: void digitsel(int offset, bool state); required_device m_tms9901_usr; required_device m_tms9901_sys; + output_finder<10> m_digits; }; @@ -184,11 +186,13 @@ MACHINE_RESET_MEMBER(tm990189_state,tm990_189) MACHINE_START_MEMBER(tm990189_state,tm990_189) { + m_digits.resolve(); m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); } MACHINE_START_MEMBER(tm990189_state,tm990_189_v) { + m_digits.resolve(); m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); m_joy1x_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); @@ -253,8 +257,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(tm990189_state::display_callback) for (i = 0; i < 10; i++) { m_old_segment_state[i] |= m_segment_state[i]; - sprintf(ledname,"digit%d",i); - output().set_digit_value(i, m_old_segment_state[i]); + m_digits[i] = m_old_segment_state[i]; m_old_segment_state[i] = m_segment_state[i]; m_segment_state[i] = 0; } diff --git a/src/mame/drivers/turbo.cpp b/src/mame/drivers/turbo.cpp index 80a426967a6..3b04fd5726b 100644 --- a/src/mame/drivers/turbo.cpp +++ b/src/mame/drivers/turbo.cpp @@ -366,8 +366,8 @@ WRITE8_MEMBER( turbo_state::digit_w ) static const uint8_t ls48_map[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x58,0x4c,0x62,0x69,0x78,0x00 }; - output().set_digit_value(m_i8279_scanlines * 2 + 0, ls48_map[data & 0x0f]); - output().set_digit_value(m_i8279_scanlines * 2 + 1, ls48_map[(data>>4) & 0x0f]); + m_digits[m_i8279_scanlines * 2] = ls48_map[data & 0x0f]; + m_digits[m_i8279_scanlines * 2 + 1] = ls48_map[data>>4]; } /************************************* diff --git a/src/mame/includes/turbo.h b/src/mame/includes/turbo.h index 7a61f7f6563..b0bbc077162 100644 --- a/src/mame/includes/turbo.h +++ b/src/mame/includes/turbo.h @@ -22,26 +22,28 @@ class turbo_state : public driver_device { public: turbo_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_subcpu(*this, "subcpu"), - m_i8255_0(*this, "i8255_0"), - m_i8255_1(*this, "i8255_1"), - m_i8255_2(*this, "i8255_2"), - m_i8255_3(*this, "i8255_3"), - m_spriteroms(*this, "sprites"), - m_proms(*this, "proms"), - m_roadroms(*this, "road"), - m_bgcolorrom(*this, "bgcolor"), - m_videoram(*this, "videoram"), - m_spriteram(*this, "spriteram"), - m_sprite_position(*this, "spritepos"), - m_decrypted_opcodes(*this, "decrypted_opcodes"), - m_samples(*this, "samples"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_subcpu(*this, "subcpu") + , m_i8255_0(*this, "i8255_0") + , m_i8255_1(*this, "i8255_1") + , m_i8255_2(*this, "i8255_2") + , m_i8255_3(*this, "i8255_3") + , m_spriteroms(*this, "sprites") + , m_proms(*this, "proms") + , m_roadroms(*this, "road") + , m_bgcolorrom(*this, "bgcolor") + , m_videoram(*this, "videoram") + , m_spriteram(*this, "spriteram") + , m_sprite_position(*this, "spritepos") + , m_decrypted_opcodes(*this, "decrypted_opcodes") + , m_samples(*this, "samples") + , m_gfxdecode(*this, "gfxdecode") + , m_screen(*this, "screen") + , m_digits(*this, "digit%u", 0U) { } +private: /* device/memory pointers */ required_device m_maincpu; optional_device m_subcpu; @@ -64,8 +66,10 @@ public: required_device m_gfxdecode; required_device m_screen; + output_finder<32> m_digits; std::unique_ptr m_buckrog_bitmap_ram; + virtual void machine_start() override { m_digits.resolve(); } /* machine states */ uint8_t m_i8279_scanlines; @@ -125,6 +129,7 @@ public: uint32_t step[8]; /* stepping value */ }; +public: DECLARE_WRITE8_MEMBER(scanlines_w); DECLARE_WRITE8_MEMBER(digit_w); DECLARE_READ8_MEMBER(turbo_collision_r);