(nw) output finder for gts80a,gts80b,inder,jeutel,jp,ltd

This commit is contained in:
Robbbert 2018-04-04 23:46:12 +10:00
parent 40376faa7c
commit e6a80d2e54
6 changed files with 86 additions and 72 deletions

View File

@ -29,6 +29,7 @@ public:
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_r0_sound(*this, "r0sound") , m_r0_sound(*this, "r0sound")
, m_r1_sound(*this, "r1sound") , m_r1_sound(*this, "r1sound")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_DRIVER_INIT(gts80a); DECLARE_DRIVER_INIT(gts80a);
@ -49,9 +50,11 @@ private:
uint8_t m_lamprow; uint8_t m_lamprow;
uint8_t m_swrow; uint8_t m_swrow;
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
optional_device<gottlieb_sound_r0_device> m_r0_sound; optional_device<gottlieb_sound_r0_device> m_r0_sound;
optional_device<gottlieb_sound_r1_device> m_r1_sound; optional_device<gottlieb_sound_r1_device> m_r1_sound;
output_finder<60> m_digits;
}; };
void gts80a_state::gts80a_map(address_map &map) void gts80a_state::gts80a_map(address_map &map)
@ -296,15 +299,15 @@ WRITE8_MEMBER( gts80a_state::port2a_w )
{ {
case 0x10: // player 1&2 case 0x10: // player 1&2
if (!BIT(m_segment, 7)) seg2 |= 0x300; // put '1' in the middle if (!BIT(m_segment, 7)) seg2 |= 0x300; // put '1' in the middle
output().set_digit_value(data & 15, seg2); m_digits[data & 15] = seg2;
break; break;
case 0x20: // player 3&4 case 0x20: // player 3&4
if (!BIT(m_segment, 7)) seg2 |= 0x300; // put '1' in the middle if (!BIT(m_segment, 7)) seg2 |= 0x300; // put '1' in the middle
output().set_digit_value((data & 15)+20, seg2); m_digits[(data & 15)+20] = seg2;
break; break;
case 0x40: // credits & balls case 0x40: // credits & balls
if (!BIT(m_segment, 7)) m_segment = 1; // turn '1' back to normal if (!BIT(m_segment, 7)) m_segment = 1; // turn '1' back to normal
output().set_digit_value((data & 15)+40, patterns[m_segment & 15]); m_digits[(data & 15)+40] = patterns[m_segment & 15];
break; break;
} }
} }

View File

@ -31,6 +31,7 @@ public:
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_r0_sound(*this, "r0sound") , m_r0_sound(*this, "r0sound")
, m_r1_sound(*this, "r1sound") , m_r1_sound(*this, "r1sound")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_DRIVER_INIT(gts80b); DECLARE_DRIVER_INIT(gts80b);
@ -57,9 +58,11 @@ private:
bool m_in_cmd_mode[2]; bool m_in_cmd_mode[2];
uint8_t m_digit[2]; uint8_t m_digit[2];
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
optional_device<gottlieb_sound_r0_device> m_r0_sound; optional_device<gottlieb_sound_r0_device> m_r0_sound;
optional_device<gottlieb_sound_r1_device> m_r1_sound; optional_device<gottlieb_sound_r1_device> m_r1_sound;
output_finder<40> m_digits;
}; };
void gts80b_state::gts80b_map(address_map &map) void gts80b_state::gts80b_map(address_map &map)
@ -347,7 +350,7 @@ WRITE8_MEMBER( gts80b_state::port2b_w )
{ // display a character { // display a character
segment = patterns[m_dispcmd & 0x7f]; // ignore blank/inverse bit segment = patterns[m_dispcmd & 0x7f]; // ignore blank/inverse bit
segment = bitswap<16>(segment, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 3, 2, 1, 0, 0); segment = bitswap<16>(segment, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 3, 2, 1, 0, 0);
output().set_digit_value(m_digit[i]+i*20, segment); m_digits[m_digit[i]+i*20] = segment;
m_digit[i]++; // auto-increment pointer m_digit[i]++; // auto-increment pointer
if (m_digit[i] > 19) m_digit[i] = 0; // check for overflow if (m_digit[i] > 19) m_digit[i] = 0; // check for overflow
} }

View File

@ -57,6 +57,7 @@ public:
, m_9b(*this, "9b") , m_9b(*this, "9b")
, m_13(*this, "13") , m_13(*this, "13")
, m_switches(*this, "SW.%u", 0) , m_switches(*this, "SW.%u", 0)
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(ppic_r); DECLARE_READ8_MEMBER(ppic_r);
@ -104,6 +105,7 @@ private:
uint32_t m_sound_addr; uint32_t m_sound_addr;
uint8_t *m_p_speech; uint8_t *m_p_speech;
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu; optional_device<cpu_device> m_audiocpu;
optional_device<sn76489_device> m_sn; optional_device<sn76489_device> m_sn;
@ -113,6 +115,7 @@ private:
optional_device<ttl7474_device> m_9b; optional_device<ttl7474_device> m_9b;
optional_device<hct157_device> m_13; optional_device<hct157_device> m_13;
required_ioport_array<11> m_switches; required_ioport_array<11> m_switches;
output_finder<50> m_digits;
}; };
void inder_state::brvteam_map(address_map &map) void inder_state::brvteam_map(address_map &map)
@ -1211,7 +1214,7 @@ WRITE8_MEMBER( inder_state::disp_w )
{ {
offset = (offset >> 3) & 7; offset = (offset >> 3) & 7;
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
output().set_digit_value(i*10+offset, m_segment[i]); m_digits[i*10+offset] = m_segment[i];
} }
} }
@ -1243,7 +1246,7 @@ WRITE8_MEMBER( inder_state::ppi64c_w )
{ {
if ((m_game==1) && (i == 4)) // mundial,clown,250cc,atleta have credit and ball displays swapped if ((m_game==1) && (i == 4)) // mundial,clown,250cc,atleta have credit and ball displays swapped
data ^= 4; data ^= 4;
output().set_digit_value(i*10+data, m_segment[i]); m_digits[i*10+data] = m_segment[i];
} }
} }
} }

View File

@ -36,6 +36,7 @@ public:
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_cpu2(*this, "cpu2") , m_cpu2(*this, "cpu2")
, m_tms(*this, "tms") , m_tms(*this, "tms")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_DRIVER_INIT(jeutel); DECLARE_DRIVER_INIT(jeutel);
@ -55,9 +56,11 @@ private:
uint8_t m_sndcmd; uint8_t m_sndcmd;
uint8_t m_digit; uint8_t m_digit;
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_cpu2; required_device<cpu_device> m_cpu2;
required_device<tms5110_device> m_tms; required_device<tms5110_device> m_tms;
output_finder<60> m_digits;
}; };
@ -133,7 +136,7 @@ WRITE8_MEMBER( jeutel_state::ppi0a_w )
if (BIT(data, 6)) if (BIT(data, 6))
{ {
output().set_digit_value(40+m_digit, 0x3f); //patterns[data&15]; m_digits[40+m_digit] = 0x3f; //patterns[data&15];
return; return;
} }
switch (data & 0x0f) switch (data & 0x0f)
@ -158,11 +161,11 @@ WRITE8_MEMBER( jeutel_state::ppi0a_w )
} }
if (BIT(data, 4)) if (BIT(data, 4))
{ {
output().set_digit_value(m_digit, (blank) ? 0 : segment); m_digits[m_digit] = (blank) ? 0 : segment;
} }
else if (BIT(data, 5)) else if (BIT(data, 5))
{ {
output().set_digit_value(20+m_digit, (blank) ? 0 : segment); m_digits[20+m_digit] = (blank) ? 0 : segment;
} }
} }

View File

@ -41,7 +41,7 @@ public:
, m_msm(*this, "msm") , m_msm(*this, "msm")
, m_adpcm_select(*this, "adpcm_select") , m_adpcm_select(*this, "adpcm_select")
, m_adpcm_bank(*this, "adpcm_bank") , m_adpcm_bank(*this, "adpcm_bank")
, m_main_displays(*this, "digit%u", 0U) , m_digits(*this, "digit%u", 0U)
{ } { }
void jp(machine_config &config); void jp(machine_config &config);
@ -80,7 +80,7 @@ private:
optional_device<msm5205_device> m_msm; optional_device<msm5205_device> m_msm;
optional_device<ls157_device> m_adpcm_select; optional_device<ls157_device> m_adpcm_select;
optional_memory_bank m_adpcm_bank; optional_memory_bank m_adpcm_bank;
output_finder<32> m_main_displays; output_finder<100> m_digits;
}; };
@ -169,7 +169,7 @@ static INPUT_PORTS_START( jp )
PORT_DIPSETTING( 0x04, DEF_STR(Off)) PORT_DIPSETTING( 0x04, DEF_STR(Off))
PORT_DIPSETTING( 0x00, DEF_STR(On)) PORT_DIPSETTING( 0x00, DEF_STR(On))
PORT_DIPNAME( 0x08, 0x08, "SW D") PORT_DIPNAME( 0x08, 0x08, "SW D")
PORT_DIPSETTING( 0x40, DEF_STR(Off)) PORT_DIPSETTING( 0x08, DEF_STR(Off))
PORT_DIPSETTING( 0x00, DEF_STR(On)) PORT_DIPSETTING( 0x00, DEF_STR(On))
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
@ -267,7 +267,7 @@ void jp_state::update_display()
if (t == 8) if (t == 8)
{ // ball number { // ball number
segment = m_disp_data >> 6; segment = m_disp_data >> 6;
output().set_digit_value(94, bitswap<8>(segment, 0, 1, 2, 3, 4, 5, 6, 7) ^ 0xff); m_digits[94] = bitswap<8>(segment, 0, 1, 2, 3, 4, 5, 6, 7) ^ 0xff;
} }
else if (t < 8) else if (t < 8)
{ // main displays { // main displays
@ -278,9 +278,9 @@ void jp_state::update_display()
for (int i = 0; i < 32; i++) for (int i = 0; i < 32; i++)
if (BIT(m_disp_data, i)) if (BIT(m_disp_data, i))
m_main_displays[i] = m_main_displays[i] & ~segment; m_digits[i] = m_digits[i] & ~segment;
else else
m_main_displays[i] = m_main_displays[i] | segment; m_digits[i] = m_digits[i] | segment;
} }
} }
@ -316,7 +316,7 @@ void jp_state::machine_start()
{ {
genpin_class::machine_start(); genpin_class::machine_start();
m_main_displays.resolve(); m_digits.resolve();
if (m_adpcm_bank.found()) if (m_adpcm_bank.found())
m_adpcm_bank->configure_entries(0, 16, memregion("sound1")->base(), 0x8000); m_adpcm_bank->configure_entries(0, 16, memregion("sound1")->base(), 0x8000);
@ -327,10 +327,10 @@ void jp_state::machine_reset()
genpin_class::machine_reset(); genpin_class::machine_reset();
//m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); //m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
output().set_digit_value(96, 0x3f); m_digits[96] = 0x3f;
output().set_digit_value(97, 0x3f); m_digits[97] = 0x3f;
output().set_digit_value(98, 0x3f); m_digits[98] = 0x3f;
output().set_digit_value(99, 0x3f); m_digits[99] = 0x3f;
} }
MACHINE_CONFIG_START(jp_state::jp) MACHINE_CONFIG_START(jp_state::jp)

View File

@ -58,6 +58,7 @@ public:
: genpin_class(mconfig, type, tag) : genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_p_ram(*this, "nvram") , m_p_ram(*this, "nvram")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_DRIVER_INIT(atla_ltd); DECLARE_DRIVER_INIT(atla_ltd);
@ -87,8 +88,10 @@ private:
uint8_t m_out_offs; uint8_t m_out_offs;
uint8_t m_port2; uint8_t m_port2;
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_shared_ptr<uint8_t> m_p_ram; required_shared_ptr<uint8_t> m_p_ram;
output_finder<50> m_digits;
}; };
@ -329,21 +332,21 @@ WRITE8_MEMBER( ltd_state::port1_w )
if (m_clear) if (m_clear)
{ {
if (row>7) if (row>7)
output().set_digit_value(row+2, segment); // P2 m_digits[row+2] = segment; // P2
else else
output().set_digit_value(row, segment); // P1 m_digits[row] = segment; // P1
} }
break; break;
case 8: case 8:
if (m_clear) if (m_clear)
{ {
if (row>13) if (row>13)
output().set_digit_value(row+26, segment); // credits / ball m_digits[row+26] = segment; // credits / ball
else else
if (row>7) if (row>7)
output().set_digit_value(row+22, segment); // P4 m_digits[row+22] = segment; // P4
else else
output().set_digit_value(row+20, segment); // P3 m_digits[row+20] = segment; // P3
} }
break; break;
} }
@ -384,8 +387,6 @@ DRIVER_INIT_MEMBER( ltd_state, ltd )
DRIVER_INIT_MEMBER( ltd_state, atla_ltd ) DRIVER_INIT_MEMBER( ltd_state, atla_ltd )
{ {
m_game = 1; m_game = 1;
output().set_digit_value(0, 0x3f);
output().set_digit_value(10, 0x3f);
} }
DRIVER_INIT_MEMBER( ltd_state, bhol_ltd ) DRIVER_INIT_MEMBER( ltd_state, bhol_ltd )
@ -412,27 +413,29 @@ TIMER_DEVICE_CALLBACK_MEMBER( ltd_state::timer_r )
{ {
case 1: // atlantis (2-player, 5-digit) case 1: // atlantis (2-player, 5-digit)
{ {
m_digits[0] = 0x3f;
m_digits[10] = 0x3f;
switch(m_out_offs-0x60) switch(m_out_offs-0x60)
{ {
case 0: case 0:
output().set_digit_value(1, patterns[m_p_ram[m_out_offs]&15]); m_digits[1] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(2, patterns[m_p_ram[m_out_offs]>>4]); m_digits[2] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 1: case 1:
output().set_digit_value(11, patterns[m_p_ram[m_out_offs]&15]); m_digits[11] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(12, patterns[m_p_ram[m_out_offs]>>4]); m_digits[12] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 2: case 2:
output().set_digit_value(3, patterns[m_p_ram[m_out_offs]&15]); m_digits[3] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(4, patterns[m_p_ram[m_out_offs]>>4]); m_digits[4] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 3: case 3:
output().set_digit_value(13, patterns[m_p_ram[m_out_offs]&15]); m_digits[13] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(14, patterns[m_p_ram[m_out_offs]>>4]); m_digits[14] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 8: case 8:
output().set_digit_value(41, patterns[m_p_ram[m_out_offs]&15]); m_digits[41] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(40, patterns[m_p_ram[m_out_offs]>>4]); m_digits[40] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
} }
break; break;
@ -442,32 +445,32 @@ TIMER_DEVICE_CALLBACK_MEMBER( ltd_state::timer_r )
switch(m_out_offs-0x60) switch(m_out_offs-0x60)
{ {
case 0: case 0:
output().set_digit_value(0, patterns[m_p_ram[m_out_offs]&15]); m_digits[0] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(1, patterns[m_p_ram[m_out_offs]>>4]); m_digits[1] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 1: case 1:
output().set_digit_value(10, patterns[m_p_ram[m_out_offs]&15]); m_digits[10] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(11, patterns[m_p_ram[m_out_offs]>>4]); m_digits[11] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 2: case 2:
output().set_digit_value(2, patterns[m_p_ram[m_out_offs]&15]); m_digits[2] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(3, patterns[m_p_ram[m_out_offs]>>4]); m_digits[3] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 3: case 3:
output().set_digit_value(12, patterns[m_p_ram[m_out_offs]&15]); m_digits[12] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(13, patterns[m_p_ram[m_out_offs]>>4]); m_digits[13] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 4: case 4:
output().set_digit_value(4, patterns[m_p_ram[m_out_offs]&15]); m_digits[4] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(5, patterns[m_p_ram[m_out_offs]>>4]); m_digits[5] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 5: case 5:
output().set_digit_value(14, patterns[m_p_ram[m_out_offs]&15]); m_digits[14] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(15, patterns[m_p_ram[m_out_offs]>>4]); m_digits[15] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 8: case 8:
output().set_digit_value(41, patterns[m_p_ram[m_out_offs]&15]); m_digits[41] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(40, patterns[m_p_ram[m_out_offs]>>4]); m_digits[40] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
} }
break; break;
@ -477,49 +480,48 @@ TIMER_DEVICE_CALLBACK_MEMBER( ltd_state::timer_r )
switch(m_out_offs-0x60) switch(m_out_offs-0x60)
{ {
case 0: case 0:
output().set_digit_value(0, patterns[m_p_ram[m_out_offs]&15]); m_digits[0] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(1, patterns[m_p_ram[m_out_offs]>>4]); m_digits[1] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 1: case 1:
output().set_digit_value(2, patterns[m_p_ram[m_out_offs]&15]); m_digits[2] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(3, patterns[m_p_ram[m_out_offs]>>4]); m_digits[3] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 2: case 2:
output().set_digit_value(4, patterns[m_p_ram[m_out_offs]&15]); m_digits[4] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(5, patterns[m_p_ram[m_out_offs]>>4]); m_digits[5] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 3: case 3:
output().set_digit_value(10, patterns[m_p_ram[m_out_offs]&15]); m_digits[10] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(11, patterns[m_p_ram[m_out_offs]>>4]); m_digits[11] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 4: case 4:
output().set_digit_value(12, patterns[m_p_ram[m_out_offs]&15]); m_digits[12] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(13, patterns[m_p_ram[m_out_offs]>>4]); m_digits[13] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 5: case 5:
output().set_digit_value(14, patterns[m_p_ram[m_out_offs]&15]); m_digits[14] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(15, patterns[m_p_ram[m_out_offs]>>4]); m_digits[15] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 6: case 6:
output().set_digit_value(20, patterns[m_p_ram[m_out_offs]&15]); m_digits[20] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(21, patterns[m_p_ram[m_out_offs]>>4]); m_digits[21] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 7: case 7:
output().set_digit_value(22, patterns[m_p_ram[m_out_offs]&15]); m_digits[22] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(23, patterns[m_p_ram[m_out_offs]>>4]); m_digits[23] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 8: case 8:
output().set_digit_value(24, patterns[m_p_ram[m_out_offs]&15]); m_digits[24] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(25, patterns[m_p_ram[m_out_offs]>>4]); m_digits[25] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
case 9: case 9:
output().set_digit_value(40, patterns[m_p_ram[m_out_offs]&15]); m_digits[40] = patterns[m_p_ram[m_out_offs]&15];
output().set_digit_value(41, patterns[m_p_ram[m_out_offs]>>4]); m_digits[41] = patterns[m_p_ram[m_out_offs]>>4];
break; break;
} }
break; break;
} }
} }
} }
} }