mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
(nw) output finder for gp_1,gp_2,gts3,gts3a,gts80. Fix for s11b,s11c.
This commit is contained in:
parent
e6a80d2e54
commit
62d1435706
@ -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]];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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]];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user