diff options
Diffstat (limited to 'src/mame/drivers/s6.cpp')
-rw-r--r-- | src/mame/drivers/s6.cpp | 108 |
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) |