(nw) output finder for s3,s4,s6a,s7,s11,s11a

This commit is contained in:
Robbbert 2018-04-04 17:25:49 +10:00
parent c460fa875c
commit f7ff916fce
7 changed files with 50 additions and 35 deletions

View File

@ -234,7 +234,7 @@ WRITE8_MEMBER( s11_state::dig0_w )
data &= 0x7f; data &= 0x7f;
m_strobe = data & 15; m_strobe = data & 15;
m_diag = (data & 0x70) >> 4; m_diag = (data & 0x70) >> 4;
output().set_digit_value(60, patterns[data>>4]); // diag digit m_digits[60] = patterns[data>>4]; // diag digit
m_segment1 = 0; m_segment1 = 0;
m_segment2 = 0; m_segment2 = 0;
} }
@ -245,7 +245,7 @@ WRITE8_MEMBER( s11_state::dig1_w )
m_segment2 |= 0x20000; m_segment2 |= 0x20000;
if ((m_segment2 & 0x70000) == 0x30000) if ((m_segment2 & 0x70000) == 0x30000)
{ {
output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0)); m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
m_segment2 |= 0x40000; m_segment2 |= 0x40000;
} }
} }
@ -269,7 +269,7 @@ WRITE8_MEMBER( s11_state::pia2c_pa_w )
m_segment1 |= 0x10000; m_segment1 |= 0x10000;
if ((m_segment1 & 0x70000) == 0x30000) if ((m_segment1 & 0x70000) == 0x30000)
{ {
output().set_digit_value(m_strobe, bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0)); m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
m_segment1 |= 0x40000; m_segment1 |= 0x40000;
} }
} }
@ -280,7 +280,7 @@ WRITE8_MEMBER( s11_state::pia2c_pb_w )
m_segment1 |= 0x20000; m_segment1 |= 0x20000;
if ((m_segment1 & 0x70000) == 0x30000) if ((m_segment1 & 0x70000) == 0x30000)
{ {
output().set_digit_value(m_strobe, bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0)); m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
m_segment1 |= 0x40000; m_segment1 |= 0x40000;
} }
} }
@ -303,7 +303,7 @@ WRITE8_MEMBER( s11_state::pia34_pa_w )
m_segment2 |= 0x10000; m_segment2 |= 0x10000;
if ((m_segment2 & 0x70000) == 0x30000) if ((m_segment2 & 0x70000) == 0x30000)
{ {
output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0)); m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
m_segment2 |= 0x40000; m_segment2 |= 0x40000;
} }
} }

View File

@ -154,9 +154,9 @@ WRITE8_MEMBER( s11a_state::dig0_w )
data &= 0x7f; data &= 0x7f;
set_strobe(data & 15); set_strobe(data & 15);
set_diag((data & 0x70) >> 4); set_diag((data & 0x70) >> 4);
output().set_digit_value(60, 0); // +5VDC (always on) m_digits[60] = 0; // +5VDC (always on)
output().set_digit_value(61, get_diag() & 0x01); // connected to PA4 m_digits[61] = get_diag() & 0x01; // connected to PA4
output().set_digit_value(62, 0); // Blanking (pretty much always on) m_digits[62] = 0; // Blanking (pretty much always on)
set_segment1(0); set_segment1(0);
set_segment2(0); set_segment2(0);
} }

View File

@ -62,6 +62,7 @@ public:
, m_pia28(*this, "pia28") , m_pia28(*this, "pia28")
, m_pia30(*this, "pia30") , m_pia30(*this, "pia30")
, m_pias(*this, "pias") , m_pias(*this, "pias")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(sound_r); DECLARE_READ8_MEMBER(sound_r);
@ -100,6 +101,7 @@ private:
uint8_t m_kbdrow; uint8_t m_kbdrow;
bool m_data_ok; bool m_data_ok;
bool m_chimes; bool m_chimes;
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;
required_device<pia6821_device> m_pia22; required_device<pia6821_device> m_pia22;
@ -107,6 +109,7 @@ private:
required_device<pia6821_device> m_pia28; required_device<pia6821_device> m_pia28;
required_device<pia6821_device> m_pia30; required_device<pia6821_device> m_pia30;
optional_device<pia6821_device> m_pias; optional_device<pia6821_device> m_pias;
output_finder<32> m_digits;
}; };
void s3_state::s3_main_map(address_map &map) void s3_state::s3_main_map(address_map &map)
@ -399,8 +402,8 @@ WRITE8_MEMBER( s3_state::dig1_w )
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558 static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558
if (m_data_ok) if (m_data_ok)
{ {
output().set_digit_value(m_strobe+16, patterns[data&15]); m_digits[m_strobe+16] = patterns[data&15];
output().set_digit_value(m_strobe, patterns[data>>4]); m_digits[m_strobe] = patterns[data>>4];
} }
m_data_ok = false; m_data_ok = false;
} }

View File

@ -6,7 +6,7 @@
Williams System 4 Williams System 4
Phoenix and Pokerino are listed as System 4 systems, but use System 3 roms. Phoenix and Pokerino are listed as System 4 systems, but use System 3 roms.
They have been moved to s3.c, and are working there. They have been moved to s3.cpp, and are working there.
The "Shuffle" games consist of a flat board with an air-driven puck and 10 The "Shuffle" games consist of a flat board with an air-driven puck and 10
bowling pins. You must push the puck as if it was a bowling ball, and score bowling pins. You must push the puck as if it was a bowling ball, and score
@ -56,6 +56,7 @@ public:
, m_pia28(*this, "pia28") , m_pia28(*this, "pia28")
, m_pia30(*this, "pia30") , m_pia30(*this, "pia30")
, m_pias(*this, "pias") , m_pias(*this, "pias")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(sound_r); DECLARE_READ8_MEMBER(sound_r);
@ -94,6 +95,7 @@ private:
uint8_t m_kbdrow; uint8_t m_kbdrow;
bool m_data_ok; bool m_data_ok;
bool m_chimes; bool m_chimes;
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;
required_device<pia6821_device> m_pia22; required_device<pia6821_device> m_pia22;
@ -101,6 +103,7 @@ private:
required_device<pia6821_device> m_pia28; required_device<pia6821_device> m_pia28;
required_device<pia6821_device> m_pia30; required_device<pia6821_device> m_pia30;
optional_device<pia6821_device> m_pias; optional_device<pia6821_device> m_pias;
output_finder<32> m_digits;
}; };
void s4_state::s4_main_map(address_map &map) void s4_state::s4_main_map(address_map &map)
@ -393,8 +396,8 @@ WRITE8_MEMBER( s4_state::dig1_w )
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558 static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558
if (m_data_ok) if (m_data_ok)
{ {
output().set_digit_value(m_strobe+16, patterns[data&15]); m_digits[m_strobe+16] = patterns[data&15];
output().set_digit_value(m_strobe, patterns[data>>4]); m_digits[m_strobe] = patterns[data>>4];
} }
m_data_ok = false; m_data_ok = false;
} }

View File

@ -65,6 +65,7 @@ public:
, m_pia24(*this, "pia24") , m_pia24(*this, "pia24")
, m_pia28(*this, "pia28") , m_pia28(*this, "pia28")
, m_pia30(*this, "pia30") , m_pia30(*this, "pia30")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(sound_r); DECLARE_READ8_MEMBER(sound_r);
@ -101,6 +102,7 @@ private:
emu_timer* m_irq_timer; emu_timer* m_irq_timer;
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;
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_audiocpu; required_device<cpu_device> m_audiocpu;
required_device<hc55516_device> m_hc55516; required_device<hc55516_device> m_hc55516;
@ -109,6 +111,7 @@ private:
required_device<pia6821_device> m_pia24; required_device<pia6821_device> m_pia24;
required_device<pia6821_device> m_pia28; required_device<pia6821_device> m_pia28;
required_device<pia6821_device> m_pia30; required_device<pia6821_device> m_pia30;
output_finder<32> m_digits;
}; };
void s6a_state::s6a_main_map(address_map &map) void s6a_state::s6a_main_map(address_map &map)
@ -313,8 +316,8 @@ WRITE8_MEMBER( s6a_state::dig1_w )
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558 static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558
if (m_data_ok) if (m_data_ok)
{ {
output().set_digit_value(m_strobe+16, patterns[data&15]); m_digits[m_strobe+16] = patterns[data&15];
output().set_digit_value(m_strobe, patterns[data>>4]); m_digits[m_strobe] = patterns[data>>4];
} }
m_data_ok = false; m_data_ok = false;
} }

View File

@ -83,6 +83,7 @@ public:
, m_pia24(*this, "pia24") , m_pia24(*this, "pia24")
, m_pia28(*this, "pia28") , m_pia28(*this, "pia28")
, m_pia30(*this, "pia30") , m_pia30(*this, "pia30")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(sound_r); DECLARE_READ8_MEMBER(sound_r);
@ -139,6 +140,7 @@ private:
required_device<pia6821_device> m_pia24; required_device<pia6821_device> m_pia24;
required_device<pia6821_device> m_pia28; required_device<pia6821_device> m_pia28;
required_device<pia6821_device> m_pia30; required_device<pia6821_device> m_pia30;
output_finder<61> m_digits;
}; };
void s7_state::s7_main_map(address_map &map) void s7_state::s7_main_map(address_map &map)
@ -309,7 +311,7 @@ WRITE8_MEMBER( s7_state::dig0_w )
m_strobe = data & 15; m_strobe = data & 15;
data ^= 0xf0; // inverted by ic33 data ^= 0xf0; // inverted by ic33
m_data_ok = true; m_data_ok = true;
output().set_digit_value(60, patterns[data>>4]); // diag digit m_digits[60] = patterns[data>>4]; // diag digit
} }
WRITE8_MEMBER( s7_state::dig1_w ) WRITE8_MEMBER( s7_state::dig1_w )
@ -317,8 +319,8 @@ WRITE8_MEMBER( s7_state::dig1_w )
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558 static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // MC14558
if (m_data_ok) if (m_data_ok)
{ {
output().set_digit_value(m_strobe+16, patterns[data&15]); m_digits[m_strobe+16] = patterns[data&15];
output().set_digit_value(m_strobe, patterns[data>>4]); m_digits[m_strobe] = patterns[data>>4];
} }
m_data_ok = false; m_data_ok = false;
} }
@ -412,6 +414,7 @@ void s7_state::device_timer(emu_timer &timer, device_timer_id id, int param, voi
void s7_state::machine_start() void s7_state::machine_start()
{ {
m_digits.resolve();
m_memprotect = 0; m_memprotect = 0;
save_item(NAME(m_nvram)); save_item(NAME(m_nvram));
machine().device<nvram_device>("nvram")->set_base(m_nvram, sizeof(m_nvram)); machine().device<nvram_device>("nvram")->set_base(m_nvram, sizeof(m_nvram));

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause // license:BSD-3-Clause
// copyright-holders:Miodrag Milanovic // copyright-holders:Miodrag Milanovic, Robbbert
/* /*
* s11.h * s11.h
* *
@ -30,21 +30,22 @@ class s11_state : public genpin_class
{ {
public: public:
s11_state(const machine_config &mconfig, device_type type, const char *tag) s11_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag), : genpin_class(mconfig, type, tag)
m_maincpu(*this, "maincpu"), , m_maincpu(*this, "maincpu")
m_audiocpu(*this, "audiocpu"), , m_audiocpu(*this, "audiocpu")
m_bgcpu(*this, "bgcpu"), , m_bgcpu(*this, "bgcpu")
m_hc55516(*this, "hc55516"), , m_hc55516(*this, "hc55516")
m_pias(*this, "pias"), , m_pias(*this, "pias")
m_pia21(*this, "pia21"), , m_pia21(*this, "pia21")
m_pia24(*this, "pia24"), , m_pia24(*this, "pia24")
m_pia28(*this, "pia28"), , m_pia28(*this, "pia28")
m_pia2c(*this, "pia2c"), , m_pia2c(*this, "pia2c")
m_pia30(*this, "pia30"), , m_pia30(*this, "pia30")
m_pia34(*this, "pia34"), , m_pia34(*this, "pia34")
m_pia40(*this, "pia40"), , m_pia40(*this, "pia40")
m_ym(*this, "ym2151"), , m_ym(*this, "ym2151")
m_bg(*this, "bgm") , m_bg(*this, "bgm")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(sound_r); DECLARE_READ8_MEMBER(sound_r);
@ -100,6 +101,7 @@ protected:
optional_device<pia6821_device> m_pia40; optional_device<pia6821_device> m_pia40;
optional_device<ym2151_device> m_ym; optional_device<ym2151_device> m_ym;
optional_device<s11c_bg_device> m_bg; optional_device<s11c_bg_device> m_bg;
output_finder<63> m_digits;
// getters/setters // getters/setters
uint8_t get_strobe() { return m_strobe; } uint8_t get_strobe() { return m_strobe; }
@ -123,6 +125,7 @@ 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