mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +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_x9(*this, "X9")
|
||||||
, m_io_xa(*this, "XA")
|
, m_io_xa(*this, "XA")
|
||||||
, m_io_xb(*this, "XB")
|
, m_io_xb(*this, "XB")
|
||||||
|
, m_digits(*this, "digit%u", 0U)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
DECLARE_DRIVER_INIT(gp_1);
|
DECLARE_DRIVER_INIT(gp_1);
|
||||||
@ -66,6 +67,7 @@ private:
|
|||||||
uint8_t m_digit;
|
uint8_t m_digit;
|
||||||
uint8_t m_segment[16];
|
uint8_t m_segment[16];
|
||||||
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<z80ctc_device> m_ctc;
|
required_device<z80ctc_device> m_ctc;
|
||||||
optional_device<sn76477_device> m_sn;
|
optional_device<sn76477_device> m_sn;
|
||||||
@ -78,6 +80,7 @@ private:
|
|||||||
required_ioport m_io_x9;
|
required_ioport m_io_x9;
|
||||||
required_ioport m_io_xa;
|
required_ioport m_io_xa;
|
||||||
required_ioport m_io_xb;
|
required_ioport m_io_xb;
|
||||||
|
output_finder<40> m_digits;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -360,10 +363,10 @@ WRITE8_MEMBER( gp_1_state::porta_w )
|
|||||||
else
|
else
|
||||||
if (m_u14 == 8)
|
if (m_u14 == 8)
|
||||||
{
|
{
|
||||||
output().set_digit_value(m_digit, patterns[m_segment[8]]);
|
m_digits[m_digit] = patterns[m_segment[8]];
|
||||||
output().set_digit_value(m_digit+8, patterns[m_segment[9]]);
|
m_digits[m_digit+8] = patterns[m_segment[9]];
|
||||||
output().set_digit_value(m_digit+16, patterns[m_segment[10]]);
|
m_digits[m_digit+16] = patterns[m_segment[10]];
|
||||||
output().set_digit_value(m_digit+24, patterns[m_segment[11]]);
|
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
|
back to normal operation. If this setup is not done, each player will get 3 free
|
||||||
games at the start of ball 1.
|
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.
|
Any bug fixes need to be applied both here and there.
|
||||||
|
|
||||||
Sound boards: (each game has its own custom sounds)
|
Sound boards: (each game has its own custom sounds)
|
||||||
@ -58,6 +58,7 @@ public:
|
|||||||
, m_io_x9(*this, "X9")
|
, m_io_x9(*this, "X9")
|
||||||
, m_io_xa(*this, "XA")
|
, m_io_xa(*this, "XA")
|
||||||
, m_io_xb(*this, "XB")
|
, m_io_xb(*this, "XB")
|
||||||
|
, m_digits(*this, "digit%u", 0U)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
DECLARE_DRIVER_INIT(gp_2);
|
DECLARE_DRIVER_INIT(gp_2);
|
||||||
@ -73,6 +74,7 @@ private:
|
|||||||
uint8_t m_digit;
|
uint8_t m_digit;
|
||||||
uint8_t m_segment[16];
|
uint8_t m_segment[16];
|
||||||
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<z80ctc_device> m_ctc;
|
required_device<z80ctc_device> m_ctc;
|
||||||
required_ioport m_io_dsw0;
|
required_ioport m_io_dsw0;
|
||||||
@ -84,6 +86,7 @@ private:
|
|||||||
required_ioport m_io_x9;
|
required_ioport m_io_x9;
|
||||||
required_ioport m_io_xa;
|
required_ioport m_io_xa;
|
||||||
required_ioport m_io_xb;
|
required_ioport m_io_xb;
|
||||||
|
output_finder<40> m_digits;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -543,11 +546,11 @@ WRITE8_MEMBER( gp_2_state::porta_w )
|
|||||||
else
|
else
|
||||||
if (m_u14 == 7)
|
if (m_u14 == 7)
|
||||||
{
|
{
|
||||||
output().set_digit_value(m_digit, patterns[m_segment[7]]);
|
m_digits[m_digit] = patterns[m_segment[7]];
|
||||||
output().set_digit_value(m_digit+8, patterns[m_segment[8]]);
|
m_digits[m_digit+8] = patterns[m_segment[8]];
|
||||||
output().set_digit_value(m_digit+16, patterns[m_segment[9]]);
|
m_digits[m_digit+16] = patterns[m_segment[9]];
|
||||||
output().set_digit_value(m_digit+24, patterns[m_segment[10]]);
|
m_digits[m_digit+24] = patterns[m_segment[10]];
|
||||||
output().set_digit_value(m_digit+32, patterns[m_segment[11]]);
|
m_digits[m_digit+32] = patterns[m_segment[11]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +45,7 @@ public:
|
|||||||
, m_u4(*this, "u4")
|
, m_u4(*this, "u4")
|
||||||
, m_u5(*this, "u5")
|
, m_u5(*this, "u5")
|
||||||
, m_switches(*this, "X.%u", 0)
|
, m_switches(*this, "X.%u", 0)
|
||||||
|
, m_digits(*this, "digit%u", 0U)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
DECLARE_DRIVER_INIT(gts3);
|
DECLARE_DRIVER_INIT(gts3);
|
||||||
@ -64,10 +65,12 @@ private:
|
|||||||
uint8_t m_segment[4];
|
uint8_t m_segment[4];
|
||||||
uint8_t m_u4b;
|
uint8_t m_u4b;
|
||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
|
virtual void machine_start() override { m_digits.resolve(); }
|
||||||
required_device<m65c02_device> m_maincpu;
|
required_device<m65c02_device> m_maincpu;
|
||||||
required_device<via6522_device> m_u4;
|
required_device<via6522_device> m_u4;
|
||||||
required_device<via6522_device> m_u5;
|
required_device<via6522_device> m_u5;
|
||||||
required_ioport_array<12> m_switches;
|
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;
|
m_segment[offset] = data;
|
||||||
seg1 = m_segment[offset&2] | (m_segment[offset|1] << 8);
|
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);
|
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 )
|
WRITE8_MEMBER( gts3_state::u4b_w )
|
||||||
|
@ -38,6 +38,7 @@ public:
|
|||||||
, m_u4(*this, "u4")
|
, m_u4(*this, "u4")
|
||||||
, m_u5(*this, "u5")
|
, m_u5(*this, "u5")
|
||||||
, m_switches(*this, "X.%u", 0)
|
, m_switches(*this, "X.%u", 0)
|
||||||
|
, m_digits(*this, "digit%u", 0U)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
DECLARE_DRIVER_INIT(gts3a);
|
DECLARE_DRIVER_INIT(gts3a);
|
||||||
@ -64,11 +65,13 @@ private:
|
|||||||
uint8_t m_u4b;
|
uint8_t m_u4b;
|
||||||
uint8_t m_dmd;
|
uint8_t m_dmd;
|
||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
|
virtual void machine_start() override { m_digits.resolve(); }
|
||||||
required_device<m65c02_device> m_maincpu;
|
required_device<m65c02_device> m_maincpu;
|
||||||
required_device<m65c02_device> m_dmdcpu;
|
required_device<m65c02_device> m_dmdcpu;
|
||||||
required_device<via6522_device> m_u4;
|
required_device<via6522_device> m_u4;
|
||||||
required_device<via6522_device> m_u5;
|
required_device<via6522_device> m_u5;
|
||||||
required_ioport_array<12> m_switches;
|
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;
|
m_segment[offset] = data;
|
||||||
seg1 = m_segment[offset&2] | (m_segment[offset|1] << 8);
|
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);
|
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 )
|
WRITE8_MEMBER( gts3a_state::u4b_w )
|
||||||
|
@ -38,6 +38,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(gts80);
|
DECLARE_DRIVER_INIT(gts80);
|
||||||
@ -59,9 +60,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<56> m_digits;
|
||||||
};
|
};
|
||||||
|
|
||||||
void gts80_state::gts80_map(address_map &map)
|
void gts80_state::gts80_map(address_map &map)
|
||||||
@ -306,15 +309,15 @@ WRITE8_MEMBER( gts80_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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,6 +114,7 @@ protected:
|
|||||||
void set_segment2(uint32_t s) { m_segment2 = s; }
|
void set_segment2(uint32_t s) { m_segment2 = s; }
|
||||||
void set_timer(emu_timer* t) { m_irq_timer = t; }
|
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;
|
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||||
static const device_timer_id TIMER_IRQ = 0;
|
static const device_timer_id TIMER_IRQ = 0;
|
||||||
private:
|
private:
|
||||||
@ -125,7 +126,6 @@ private:
|
|||||||
uint32_t m_segment2;
|
uint32_t m_segment2;
|
||||||
emu_timer* m_irq_timer;
|
emu_timer* m_irq_timer;
|
||||||
bool m_irq_active;
|
bool m_irq_active;
|
||||||
virtual void machine_start() override { m_digits.resolve(); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAME_INCLUDES_S11_H
|
#endif // MAME_INCLUDES_S11_H
|
||||||
|
@ -17,7 +17,6 @@ public:
|
|||||||
s11b_state(const machine_config &mconfig, device_type type, const char *tag)
|
s11b_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: s11a_state(mconfig, type, tag)
|
: s11a_state(mconfig, type, tag)
|
||||||
, m_bg_hc55516(*this, "hc55516_bg")
|
, m_bg_hc55516(*this, "hc55516_bg")
|
||||||
, m_digits(*this, "digit%u", 0U)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
DECLARE_WRITE8_MEMBER(dig1_w);
|
DECLARE_WRITE8_MEMBER(dig1_w);
|
||||||
@ -38,12 +37,10 @@ public:
|
|||||||
void s11b_main_map(address_map &map);
|
void s11b_main_map(address_map &map);
|
||||||
protected:
|
protected:
|
||||||
optional_device<hc55516_device> m_bg_hc55516;
|
optional_device<hc55516_device> m_bg_hc55516;
|
||||||
output_finder<64> m_digits;
|
|
||||||
|
|
||||||
void set_invert(bool inv) { m_invert = inv; }
|
void set_invert(bool inv) { m_invert = inv; }
|
||||||
|
|
||||||
private:
|
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.
|
bool m_invert; // later System 11B games start expecting inverted data to the display LED segments.
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user