(nw) output finders for techno,thayers, tm990189,turbo

This commit is contained in:
Robbbert 2018-04-04 00:43:20 +10:00
parent 45809a3211
commit d4743f6b3e
5 changed files with 47 additions and 33 deletions

View File

@ -27,6 +27,7 @@ public:
: driver_device(mconfig, type, tag) : driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_switch(*this, "SWITCH.%u", 0) , m_switch(*this, "SWITCH.%u", 0)
, m_digits(*this, "digit%u", 0U)
{ } { }
enum enum
@ -61,6 +62,7 @@ private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_ioport_array<8> m_switch; required_ioport_array<8> m_switch;
output_finder<48> m_digits;
emu_timer *m_irq_set_timer; emu_timer *m_irq_set_timer;
emu_timer *m_irq_advance_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)); map(0x17800, 0x17fff).w(this, FUNC(techno_state::setout_w));
} }
ADDRESS_MAP_START(techno_state::techno_sub_map) void techno_state::techno_sub_map(address_map &map)
// no ram here, must be internal to the cpu { // 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 map(0x0000, 0x3fff).r(this, FUNC(techno_state::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) map(0x4000, 0x7fff).w(this, FUNC(techno_state::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 map(0x4000, 0xbfff).rom(); // 4000-7FFF is same as 8000-BFFF; 4x 16k ROMS bankswitched
AM_RANGE(0xc000, 0xffff) AM_ROM // another 16k ROM map(0xc000, 0xffff).rom(); // another 16k ROM
ADDRESS_MAP_END }
WRITE16_MEMBER( techno_state::disp1_w ) 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 ) 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 ) WRITE16_MEMBER( techno_state::sound_w )
@ -276,6 +278,7 @@ void techno_state::machine_start()
void techno_state::machine_reset() void techno_state::machine_reset()
{ {
m_digits.resolve();
m_vector = 0x88; m_vector = 0x88;
m_digit = 0; m_digit = 0;

View File

@ -52,6 +52,7 @@ public:
, m_ldv1000(*this, "ldv1000") , m_ldv1000(*this, "ldv1000")
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_row(*this, "ROW.%u", 0) , m_row(*this, "ROW.%u", 0)
, m_digits(*this, "digit%u", 0U)
{ {
} }
@ -103,6 +104,7 @@ public:
void check_interrupt(); void check_interrupt();
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_ioport_array<10> m_row; required_ioport_array<10> m_row;
output_finder<16> m_digits;
void thayers(machine_config &config); void thayers(machine_config &config);
void thayers_io_map(address_map &map); 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) 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 */ /* SSI-263 */
@ -764,6 +766,7 @@ INPUT_PORTS_END
void thayers_state::machine_start() void thayers_state::machine_start()
{ {
m_digits.resolve();
memset(&m_ssi263, 0, sizeof(m_ssi263)); memset(&m_ssi263, 0, sizeof(m_ssi263));
} }

View File

@ -90,6 +90,7 @@ public:
, m_tms9918(*this, "tms9918") , m_tms9918(*this, "tms9918")
, m_tms9901_usr(*this, TMS9901_0_TAG) , m_tms9901_usr(*this, TMS9901_0_TAG)
, m_tms9901_sys(*this, TMS9901_1_TAG) , m_tms9901_sys(*this, TMS9901_1_TAG)
, m_digits(*this, "digit%u", 0U)
{ } { }
required_device<tms9980a_device> m_tms9980a; required_device<tms9980a_device> m_tms9980a;
@ -170,6 +171,7 @@ private:
void digitsel(int offset, bool state); void digitsel(int offset, bool state);
required_device<tms9901_device> m_tms9901_usr; required_device<tms9901_device> m_tms9901_usr;
required_device<tms9901_device> m_tms9901_sys; required_device<tms9901_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) MACHINE_START_MEMBER(tm990189_state,tm990_189)
{ {
m_digits.resolve();
m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate());
} }
MACHINE_START_MEMBER(tm990189_state,tm990_189_v) MACHINE_START_MEMBER(tm990189_state,tm990_189_v)
{ {
m_digits.resolve();
m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate());
m_joy1x_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++) for (i = 0; i < 10; i++)
{ {
m_old_segment_state[i] |= m_segment_state[i]; m_old_segment_state[i] |= m_segment_state[i];
sprintf(ledname,"digit%d",i); m_digits[i] = m_old_segment_state[i];
output().set_digit_value(i, m_old_segment_state[i]);
m_old_segment_state[i] = m_segment_state[i]; m_old_segment_state[i] = m_segment_state[i];
m_segment_state[i] = 0; m_segment_state[i] = 0;
} }

View File

@ -366,8 +366,8 @@ WRITE8_MEMBER( turbo_state::digit_w )
static const uint8_t ls48_map[16] = static const uint8_t ls48_map[16] =
{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x58,0x4c,0x62,0x69,0x78,0x00 }; { 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]); m_digits[m_i8279_scanlines * 2] = ls48_map[data & 0x0f];
output().set_digit_value(m_i8279_scanlines * 2 + 1, ls48_map[(data>>4) & 0x0f]); m_digits[m_i8279_scanlines * 2 + 1] = ls48_map[data>>4];
} }
/************************************* /*************************************

View File

@ -22,26 +22,28 @@ class turbo_state : public driver_device
{ {
public: public:
turbo_state(const machine_config &mconfig, device_type type, const char *tag) turbo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag)
m_maincpu(*this, "maincpu"), , m_maincpu(*this, "maincpu")
m_subcpu(*this, "subcpu"), , m_subcpu(*this, "subcpu")
m_i8255_0(*this, "i8255_0"), , m_i8255_0(*this, "i8255_0")
m_i8255_1(*this, "i8255_1"), , m_i8255_1(*this, "i8255_1")
m_i8255_2(*this, "i8255_2"), , m_i8255_2(*this, "i8255_2")
m_i8255_3(*this, "i8255_3"), , m_i8255_3(*this, "i8255_3")
m_spriteroms(*this, "sprites"), , m_spriteroms(*this, "sprites")
m_proms(*this, "proms"), , m_proms(*this, "proms")
m_roadroms(*this, "road"), , m_roadroms(*this, "road")
m_bgcolorrom(*this, "bgcolor"), , m_bgcolorrom(*this, "bgcolor")
m_videoram(*this, "videoram"), , m_videoram(*this, "videoram")
m_spriteram(*this, "spriteram"), , m_spriteram(*this, "spriteram")
m_sprite_position(*this, "spritepos"), , m_sprite_position(*this, "spritepos")
m_decrypted_opcodes(*this, "decrypted_opcodes"), , m_decrypted_opcodes(*this, "decrypted_opcodes")
m_samples(*this, "samples"), , m_samples(*this, "samples")
m_gfxdecode(*this, "gfxdecode"), , m_gfxdecode(*this, "gfxdecode")
m_screen(*this, "screen") , m_screen(*this, "screen")
, m_digits(*this, "digit%u", 0U)
{ } { }
private:
/* device/memory pointers */ /* device/memory pointers */
required_device<z80_device> m_maincpu; required_device<z80_device> m_maincpu;
optional_device<z80_device> m_subcpu; optional_device<z80_device> m_subcpu;
@ -64,8 +66,10 @@ public:
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen; required_device<screen_device> m_screen;
output_finder<32> m_digits;
std::unique_ptr<uint8_t[]> m_buckrog_bitmap_ram; std::unique_ptr<uint8_t[]> m_buckrog_bitmap_ram;
virtual void machine_start() override { m_digits.resolve(); }
/* machine states */ /* machine states */
uint8_t m_i8279_scanlines; uint8_t m_i8279_scanlines;
@ -125,6 +129,7 @@ public:
uint32_t step[8]; /* stepping value */ uint32_t step[8]; /* stepping value */
}; };
public:
DECLARE_WRITE8_MEMBER(scanlines_w); DECLARE_WRITE8_MEMBER(scanlines_w);
DECLARE_WRITE8_MEMBER(digit_w); DECLARE_WRITE8_MEMBER(digit_w);
DECLARE_READ8_MEMBER(turbo_collision_r); DECLARE_READ8_MEMBER(turbo_collision_r);