(nw) output finder for gp_1,gp_2,gts3,gts3a,gts80. Fix for s11b,s11c.

This commit is contained in:
Robbbert 2018-04-05 00:40:54 +10:00
parent e6a80d2e54
commit 62d1435706
7 changed files with 32 additions and 19 deletions

View File

@ -49,6 +49,7 @@ public:
, m_io_x9(*this, "X9")
, m_io_xa(*this, "XA")
, m_io_xb(*this, "XB")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_DRIVER_INIT(gp_1);
@ -66,6 +67,7 @@ private:
uint8_t m_digit;
uint8_t m_segment[16];
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_device<z80ctc_device> m_ctc;
optional_device<sn76477_device> m_sn;
@ -78,6 +80,7 @@ private:
required_ioport m_io_x9;
required_ioport m_io_xa;
required_ioport m_io_xb;
output_finder<40> m_digits;
};
@ -360,10 +363,10 @@ WRITE8_MEMBER( gp_1_state::porta_w )
else
if (m_u14 == 8)
{
output().set_digit_value(m_digit, patterns[m_segment[8]]);
output().set_digit_value(m_digit+8, patterns[m_segment[9]]);
output().set_digit_value(m_digit+16, patterns[m_segment[10]]);
output().set_digit_value(m_digit+24, patterns[m_segment[11]]);
m_digits[m_digit] = patterns[m_segment[8]];
m_digits[m_digit+8] = patterns[m_segment[9]];
m_digits[m_digit+16] = patterns[m_segment[10]];
m_digits[m_digit+24] = patterns[m_segment[11]];
}
}

View File

@ -12,7 +12,7 @@ the first high score at which a free credit is awarded. Then press 9 to set the
back to normal operation. If this setup is not done, each player will get 3 free
games at the start of ball 1.
All the Z80 "maincpu" code is copied from gp_1.c
All the Z80 "maincpu" code is copied from gp_1.cpp
Any bug fixes need to be applied both here and there.
Sound boards: (each game has its own custom sounds)
@ -58,6 +58,7 @@ public:
, m_io_x9(*this, "X9")
, m_io_xa(*this, "XA")
, m_io_xb(*this, "XB")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_DRIVER_INIT(gp_2);
@ -73,6 +74,7 @@ private:
uint8_t m_digit;
uint8_t m_segment[16];
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_device<z80ctc_device> m_ctc;
required_ioport m_io_dsw0;
@ -84,6 +86,7 @@ private:
required_ioport m_io_x9;
required_ioport m_io_xa;
required_ioport m_io_xb;
output_finder<40> m_digits;
};
@ -543,11 +546,11 @@ WRITE8_MEMBER( gp_2_state::porta_w )
else
if (m_u14 == 7)
{
output().set_digit_value(m_digit, patterns[m_segment[7]]);
output().set_digit_value(m_digit+8, patterns[m_segment[8]]);
output().set_digit_value(m_digit+16, patterns[m_segment[9]]);
output().set_digit_value(m_digit+24, patterns[m_segment[10]]);
output().set_digit_value(m_digit+32, patterns[m_segment[11]]);
m_digits[m_digit] = patterns[m_segment[7]];
m_digits[m_digit+8] = patterns[m_segment[8]];
m_digits[m_digit+16] = patterns[m_segment[9]];
m_digits[m_digit+24] = patterns[m_segment[10]];
m_digits[m_digit+32] = patterns[m_segment[11]];
}
}

View File

@ -45,6 +45,7 @@ public:
, m_u4(*this, "u4")
, m_u5(*this, "u5")
, m_switches(*this, "X.%u", 0)
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_DRIVER_INIT(gts3);
@ -64,10 +65,12 @@ private:
uint8_t m_segment[4];
uint8_t m_u4b;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<m65c02_device> m_maincpu;
required_device<via6522_device> m_u4;
required_device<via6522_device> m_u5;
required_ioport_array<12> m_switches;
output_finder<40> m_digits;
};
@ -224,7 +227,8 @@ WRITE8_MEMBER( gts3_state::segbank_w )
m_segment[offset] = data;
seg1 = m_segment[offset&2] | (m_segment[offset|1] << 8);
seg2 = bitswap<32>(seg1,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,14,9,7,13,11,10,6,8,12,5,4,3,3,2,1,0,0);
output().set_digit_value(m_digit+(BIT(offset, 1) ? 0 : 20), seg2);
if (m_digit < 20)
m_digits[m_digit+(BIT(offset, 1) ? 0 : 20)] = seg2;
}
WRITE8_MEMBER( gts3_state::u4b_w )

View File

@ -38,6 +38,7 @@ public:
, m_u4(*this, "u4")
, m_u5(*this, "u5")
, m_switches(*this, "X.%u", 0)
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_DRIVER_INIT(gts3a);
@ -64,11 +65,13 @@ private:
uint8_t m_u4b;
uint8_t m_dmd;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<m65c02_device> m_maincpu;
required_device<m65c02_device> m_dmdcpu;
required_device<via6522_device> m_u4;
required_device<via6522_device> m_u5;
required_ioport_array<12> m_switches;
output_finder<40> m_digits;
};
@ -238,7 +241,7 @@ WRITE8_MEMBER( gts3a_state::segbank_w )
m_segment[offset] = data;
seg1 = m_segment[offset&2] | (m_segment[offset|1] << 8);
seg2 = bitswap<32>(seg1,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,14,9,7,13,11,10,6,8,12,5,4,3,3,2,1,0,0);
output().set_digit_value(m_digit+(BIT(offset, 1) ? 0 : 20), seg2);
m_digits[m_digit+(BIT(offset, 1) ? 0 : 20)] = seg2;
}
WRITE8_MEMBER( gts3a_state::u4b_w )

View File

@ -38,6 +38,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(gts80);
@ -59,9 +60,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<56> m_digits;
};
void gts80_state::gts80_map(address_map &map)
@ -306,15 +309,15 @@ WRITE8_MEMBER( gts80_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

@ -114,6 +114,7 @@ protected:
void set_segment2(uint32_t s) { m_segment2 = s; }
void set_timer(emu_timer* t) { m_irq_timer = t; }
virtual void machine_start() override { m_digits.resolve(); }
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
static const device_timer_id TIMER_IRQ = 0;
private:
@ -125,7 +126,6 @@ private:
uint32_t m_segment2;
emu_timer* m_irq_timer;
bool m_irq_active;
virtual void machine_start() override { m_digits.resolve(); }
};
#endif // MAME_INCLUDES_S11_H

View File

@ -17,7 +17,6 @@ public:
s11b_state(const machine_config &mconfig, device_type type, const char *tag)
: s11a_state(mconfig, type, tag)
, m_bg_hc55516(*this, "hc55516_bg")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_WRITE8_MEMBER(dig1_w);
@ -38,12 +37,10 @@ public:
void s11b_main_map(address_map &map);
protected:
optional_device<hc55516_device> m_bg_hc55516;
output_finder<64> m_digits;
void set_invert(bool inv) { m_invert = inv; }
private:
virtual void machine_start() override { m_digits.resolve(); }
bool m_invert; // later System 11B games start expecting inverted data to the display LED segments.