summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/s6.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/s6.cpp')
-rw-r--r--src/mame/drivers/s6.cpp108
1 files changed, 52 insertions, 56 deletions
diff --git a/src/mame/drivers/s6.cpp b/src/mame/drivers/s6.cpp
index dfac8da01b3..bed563cea26 100644
--- a/src/mame/drivers/s6.cpp
+++ b/src/mame/drivers/s6.cpp
@@ -58,6 +58,8 @@ ToDo:
#include "s6.lh"
+namespace {
+
class s6_state : public genpin_class
{
public:
@@ -72,37 +74,41 @@ public:
, m_pia28(*this, "pia28")
, m_pia30(*this, "pia30")
, m_digits(*this, "digit%u", 0U)
+ , m_leds(*this, "led%u", 0U)
, m_swarray(*this, "SW.%u", 0U)
+ , m_dips(*this, "DS%u", 1U)
+ , m_io_snd(*this, "SND")
{ }
void s6(machine_config &config);
- void init_s6();
-
DECLARE_INPUT_CHANGED_MEMBER(main_nmi);
DECLARE_INPUT_CHANGED_MEMBER(audio_nmi);
+protected:
+ virtual void machine_start() override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
private:
uint8_t sound_r();
void dig0_w(uint8_t data);
void dig1_w(uint8_t data);
void lamp0_w(uint8_t data);
void lamp1_w(uint8_t data);
- uint8_t dips_r();
void sol0_w(uint8_t data);
void sol1_w(uint8_t data);
+ uint8_t dips_r();
uint8_t switch_r();
void switch_w(uint8_t data);
- DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { }; //ST5
- DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { }; //ST-solenoids enable
- DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { }; //ST2
- DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; //ST1
- DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; //diag leds enable
- DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; //ST6
- DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { }; //ST4
- DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { }; //ST3
+ DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { } //ST5
+ DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { } //ST-solenoids enable
+ DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { } //ST2
+ DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { } //ST1
+ DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } //diag leds enable
+ DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } //ST6
+ DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { } //ST4
+ DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { } //ST3
DECLARE_WRITE_LINE_MEMBER(pia_irq);
- DECLARE_MACHINE_RESET(s6);
void s6_audio_map(address_map &map);
void s6_main_map(address_map &map);
@@ -112,9 +118,7 @@ private:
uint8_t m_switch_col;
bool m_data_ok;
emu_timer* m_irq_timer;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
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_audiocpu;
required_device<hc55516_device> m_hc55516;
@@ -124,7 +128,10 @@ private:
required_device<pia6821_device> m_pia28;
required_device<pia6821_device> m_pia30;
output_finder<61> m_digits;
+ output_finder<2> m_leds;
required_ioport_array<8> m_swarray;
+ required_ioport_array<2> m_dips;
+ required_ioport m_io_snd;
};
void s6_state::s6_main_map(address_map &map)
@@ -269,7 +276,7 @@ void s6_state::sol0_w(uint8_t data)
void s6_state::sol1_w(uint8_t data)
{
- uint8_t sound_data = ioport("SND")->read();
+ uint8_t sound_data = m_io_snd->read();
if (BIT(data, 0))
sound_data &= 0xfe;
@@ -306,20 +313,9 @@ void s6_state::lamp1_w(uint8_t data)
uint8_t s6_state::dips_r()
{
- if (BIT(ioport("DIAGS")->read(), 4) )
- {
- switch (m_strobe)
- {
- case 0:
- return ioport("DS2")->read();
- case 1:
- return ioport("DS2")->read() << 4;
- case 2:
- return ioport("DS1")->read();
- case 3:
- return ioport("DS1")->read() << 4;
- }
- }
+ if (BIT(ioport("DIAGS")->read(), 4))
+ return m_dips[BIT(~m_strobe, 1)]->read() << (BIT(m_strobe, 0) ? 4 : 0);
+
return 0xff;
}
@@ -327,8 +323,8 @@ void s6_state::dig0_w(uint8_t data)
{
m_strobe = data & 15;
m_data_ok = true;
- output().set_value("led0", !BIT(data, 4));
- output().set_value("led1", !BIT(data, 5));
+ m_leds[0] = !BIT(data, 4);
+ m_leds[1] = !BIT(data, 5);
}
void s6_state::dig1_w(uint8_t data)
@@ -381,6 +377,15 @@ WRITE_LINE_MEMBER( s6_state::pia_irq )
}
}
+void s6_state::machine_start()
+{
+ m_digits.resolve();
+ m_leds.resolve();
+
+ m_irq_timer = timer_alloc(TIMER_IRQ);
+ m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1);
+}
+
void s6_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch(id)
@@ -404,22 +409,11 @@ void s6_state::device_timer(emu_timer &timer, device_timer_id id, int param, voi
}
}
-MACHINE_RESET_MEMBER( s6_state, s6 )
-{
-}
-
-void s6_state::init_s6()
-{
- m_irq_timer = timer_alloc(TIMER_IRQ);
- m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1);
-}
-
void s6_state::s6(machine_config &config)
{
/* basic machine hardware */
M6808(config, m_maincpu, 3580000); // 6802 or 6808 could be used here
m_maincpu->set_addrmap(AS_PROGRAM, &s6_state::s6_main_map);
- MCFG_MACHINE_RESET_OVERRIDE(s6_state, s6)
/* Video */
config.set_default_layout(layout_s6);
@@ -666,17 +660,19 @@ ROM_START(frpwr_l2)
ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4))
ROM_END
-
-GAME( 1979, lzbal_l2, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Laser Ball (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1979, lzbal_l2sp, lzbal_l2, s6, s6, s6_state, init_s6, ROT0, "Williams", "Laser Ball (L-2, PROM sound)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1980, lzbal_t2, lzbal_l2, s6, s6, s6_state, init_s6, ROT0, "Williams", "Laser Ball (T-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1980, scrpn_l1, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Scorpion (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1980, scrpn_t1, scrpn_l1, s6, s6, s6_state, init_s6, ROT0, "Williams", "Scorpion (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1979, blkou_l1, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Blackout (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1979, blkou_t1, blkou_l1, s6, s6, s6_state, init_s6, ROT0, "Williams", "Blackout (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1979, blkou_f1, blkou_l1, s6, s6, s6_state, init_s6, ROT0, "Williams", "Blackout (L-1, French Speech)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1979, grgar_l1, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Gorgar (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1979, grgar_t1, grgar_l1, s6, s6, s6_state, init_s6, ROT0, "Williams", "Gorgar (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
-GAME( 1980, frpwr_l6, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Firepower (L-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
-GAME( 1980, frpwr_t6, frpwr_l6, s6, s6, s6_state, init_s6, ROT0, "Williams", "Firepower (T-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
-GAME( 1980, frpwr_l2, frpwr_l6, s6, s6, s6_state, init_s6, ROT0, "Williams", "Firepower (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+} // anonymous namespace
+
+
+GAME( 1979, lzbal_l2, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Laser Ball (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1979, lzbal_l2sp, lzbal_l2, s6, s6, s6_state, empty_init, ROT0, "Williams", "Laser Ball (L-2, PROM sound)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1980, lzbal_t2, lzbal_l2, s6, s6, s6_state, empty_init, ROT0, "Williams", "Laser Ball (T-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1980, scrpn_l1, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Scorpion (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1980, scrpn_t1, scrpn_l1, s6, s6, s6_state, empty_init, ROT0, "Williams", "Scorpion (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1979, blkou_l1, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Blackout (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1979, blkou_t1, blkou_l1, s6, s6, s6_state, empty_init, ROT0, "Williams", "Blackout (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1979, blkou_f1, blkou_l1, s6, s6, s6_state, empty_init, ROT0, "Williams", "Blackout (L-1, French Speech)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1979, grgar_l1, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Gorgar (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1979, grgar_t1, grgar_l1, s6, s6, s6_state, empty_init, ROT0, "Williams", "Gorgar (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1980, frpwr_l6, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Firepower (L-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+GAME( 1980, frpwr_t6, frpwr_l6, s6, s6, s6_state, empty_init, ROT0, "Williams", "Firepower (T-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+GAME( 1980, frpwr_l2, frpwr_l6, s6, s6, s6_state, empty_init, ROT0, "Williams", "Firepower (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)