(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_r0_sound(*this, "r0sound")
, m_r1_sound(*this, "r1sound")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_DRIVER_INIT(gts80a);
@ -49,9 +50,11 @@ private:
uint8_t m_lamprow;
uint8_t m_swrow;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
optional_device<gottlieb_sound_r0_device> m_r0_sound;
optional_device<gottlieb_sound_r1_device> m_r1_sound;
output_finder<60> m_digits;
};
void gts80a_state::gts80a_map(address_map &map)
@ -296,15 +299,15 @@ WRITE8_MEMBER( gts80a_state::port2a_w )
{
case 0x10: // player 1&2
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;
case 0x20: // player 3&4
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;
case 0x40: // credits & balls
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;
}
}

View File

@ -31,6 +31,7 @@ public:
, m_maincpu(*this, "maincpu")
, m_r0_sound(*this, "r0sound")
, m_r1_sound(*this, "r1sound")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_DRIVER_INIT(gts80b);
@ -57,9 +58,11 @@ private:
bool m_in_cmd_mode[2];
uint8_t m_digit[2];
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
optional_device<gottlieb_sound_r0_device> m_r0_sound;
optional_device<gottlieb_sound_r1_device> m_r1_sound;
output_finder<40> m_digits;
};
void gts80b_state::gts80b_map(address_map &map)
@ -347,7 +350,7 @@ WRITE8_MEMBER( gts80b_state::port2b_w )
{ // display a character
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);
output().set_digit_value(m_digit[i]+i*20, segment);
m_digits[m_digit[i]+i*20] = segment;
m_digit[i]++; // auto-increment pointer
if (m_digit[i] > 19) m_digit[i] = 0; // check for overflow
}

View File

@ -57,6 +57,7 @@ public:
, m_9b(*this, "9b")
, m_13(*this, "13")
, m_switches(*this, "SW.%u", 0)
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER(ppic_r);
@ -104,6 +105,7 @@ private:
uint32_t m_sound_addr;
uint8_t *m_p_speech;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
optional_device<sn76489_device> m_sn;
@ -113,6 +115,7 @@ private:
optional_device<ttl7474_device> m_9b;
optional_device<hct157_device> m_13;
required_ioport_array<11> m_switches;
output_finder<50> m_digits;
};
void inder_state::brvteam_map(address_map &map)
@ -1211,7 +1214,7 @@ WRITE8_MEMBER( inder_state::disp_w )
{
offset = (offset >> 3) & 7;
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
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_cpu2(*this, "cpu2")
, m_tms(*this, "tms")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_DRIVER_INIT(jeutel);
@ -55,9 +56,11 @@ private:
uint8_t m_sndcmd;
uint8_t m_digit;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_cpu2;
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))
{
output().set_digit_value(40+m_digit, 0x3f); //patterns[data&15];
m_digits[40+m_digit] = 0x3f; //patterns[data&15];
return;
}
switch (data & 0x0f)
@ -158,11 +161,11 @@ WRITE8_MEMBER( jeutel_state::ppi0a_w )
}
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))
{
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_adpcm_select(*this, "adpcm_select")
, m_adpcm_bank(*this, "adpcm_bank")
, m_main_displays(*this, "digit%u", 0U)
, m_digits(*this, "digit%u", 0U)
{ }
void jp(machine_config &config);
@ -80,7 +80,7 @@ private:
optional_device<msm5205_device> m_msm;
optional_device<ls157_device> m_adpcm_select;
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( 0x00, DEF_STR(On))
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_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
@ -267,7 +267,7 @@ void jp_state::update_display()
if (t == 8)
{ // ball number
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)
{ // main displays
@ -278,9 +278,9 @@ void jp_state::update_display()
for (int i = 0; i < 32; i++)
if (BIT(m_disp_data, i))
m_main_displays[i] = m_main_displays[i] & ~segment;
m_digits[i] = m_digits[i] & ~segment;
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();
m_main_displays.resolve();
m_digits.resolve();
if (m_adpcm_bank.found())
m_adpcm_bank->configure_entries(0, 16, memregion("sound1")->base(), 0x8000);
@ -327,10 +327,10 @@ void jp_state::machine_reset()
genpin_class::machine_reset();
//m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
output().set_digit_value(96, 0x3f);
output().set_digit_value(97, 0x3f);
output().set_digit_value(98, 0x3f);
output().set_digit_value(99, 0x3f);
m_digits[96] = 0x3f;
m_digits[97] = 0x3f;
m_digits[98] = 0x3f;
m_digits[99] = 0x3f;
}
MACHINE_CONFIG_START(jp_state::jp)

View File

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