diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/audio/williams.cpp | 115 | ||||
-rw-r--r-- | src/mame/audio/williams.h | 32 | ||||
-rw-r--r-- | src/mame/drivers/s7.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/s8a.cpp | 69 | ||||
-rw-r--r-- | src/mame/drivers/s9.cpp | 93 |
5 files changed, 175 insertions, 138 deletions
diff --git a/src/mame/audio/williams.cpp b/src/mame/audio/williams.cpp index b5295b1bbcd..d2dda4bcaa3 100644 --- a/src/mame/audio/williams.cpp +++ b/src/mame/audio/williams.cpp @@ -62,6 +62,7 @@ DEFINE_DEVICE_TYPE(WILLIAMS_NARC_SOUND, williams_narc_sound_device, "wmsnarc", " DEFINE_DEVICE_TYPE(WILLIAMS_ADPCM_SOUND, williams_adpcm_sound_device, "wmsadpcm", "Williams ADPCM Sound Board") DEFINE_DEVICE_TYPE(WILLIAMS_S4_SOUND, williams_s4_sound_device, "wmss4", "Williams System 4 Sound Board") DEFINE_DEVICE_TYPE(WILLIAMS_S6_SOUND, williams_s6_sound_device, "wmss6", "Williams System 6 Sound Board") +DEFINE_DEVICE_TYPE(WILLIAMS_S9_SOUND, williams_s9_sound_device, "wmss9", "Williams System 9 Sound Board") @@ -1082,3 +1083,117 @@ ioport_constructor williams_s6_sound_device::device_input_ports() const } +//************************************************************************** +// S9 SOUND BOARD (s6 with different interface, used in system 9 pinballs) +//************************************************************************** + +//------------------------------------------------- +// williams_s9_sound_device - constructor +//------------------------------------------------- + +williams_s9_sound_device::williams_s9_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, WILLIAMS_S9_SOUND, tag, owner, clock) + , device_mixer_interface(mconfig, *this) + , m_cpu(*this, "cpu") + , m_pia(*this, "pia") + , m_hc(*this, "hc") +{ +} + +//------------------------------------------------- +// write - handle an external write +//------------------------------------------------- + +void williams_s9_sound_device::write(u8 data) +{ + m_pia->porta_w(data); +} + +//------------------------------------------------- +// strobe - tell PIA to process the input +//------------------------------------------------- + +WRITE_LINE_MEMBER(williams_s9_sound_device::strobe) +{ + m_pia->ca1_w(state); +} + +//------------------------------------------------- +// audio CPU map +//------------------------------------------------- + +void williams_s9_sound_device::williams_s9_map(address_map &map) +{ + map(0x0000, 0x07ff).ram(); + map(0x2000, 0x2003).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x8000, 0xffff).rom().region("audiocpu", 0 ); +} + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void williams_s9_sound_device::device_add_mconfig(machine_config &config) +{ + M6802(config, m_cpu, XTAL(4'000'000)); + m_cpu->set_addrmap(AS_PROGRAM, &williams_s9_sound_device::williams_s9_map); + + MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, *this, 0.5); + + HC55516(config, m_hc, 0).add_route(ALL_OUTPUTS, *this, 1.00); + + PIA6821(config, m_pia, 0); + m_pia->set_port_a_input_overrides_output_mask(0xff); + m_pia->writepb_handler().set("dac", FUNC(dac_byte_interface::data_w)); + m_pia->ca2_handler().set(m_hc, FUNC(hc55516_device::clock_w)); + m_pia->cb2_handler().set(m_hc, FUNC(hc55516_device::digit_w)); + m_pia->irqa_handler().set_inputline(m_cpu, M6802_IRQ_LINE); + m_pia->irqb_handler().set_inputline(m_cpu, M6802_IRQ_LINE); +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void williams_s9_sound_device::device_start() +{ + // register for save states + save_item(NAME(m_dummy)); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void williams_s9_sound_device::device_reset() +{ + // reset interrupt states + m_cpu->set_input_line(M6802_IRQ_LINE, CLEAR_LINE); +} + +INPUT_PORTS_START( williams_s9 ) + PORT_START("S9") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_9_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, williams_s9_sound_device, audio_nmi, 1) +INPUT_PORTS_END + +INPUT_CHANGED_MEMBER( williams_s9_sound_device::audio_nmi ) +{ + // Diagnostic button sends a pulse to NMI pin + if (newval==CLEAR_LINE) + m_cpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); +} + +//------------------------------------------------- +// device_input_ports - return a pointer to +// the device's I/O ports +//------------------------------------------------- + +ioport_constructor williams_s9_sound_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( williams_s9 ); +} + + diff --git a/src/mame/audio/williams.h b/src/mame/audio/williams.h index 6a2f3be234b..1f18ce232db 100644 --- a/src/mame/audio/williams.h +++ b/src/mame/audio/williams.h @@ -26,6 +26,7 @@ DECLARE_DEVICE_TYPE(WILLIAMS_NARC_SOUND, williams_narc_sound_device) DECLARE_DEVICE_TYPE(WILLIAMS_ADPCM_SOUND, williams_adpcm_sound_device) DECLARE_DEVICE_TYPE(WILLIAMS_S4_SOUND, williams_s4_sound_device) DECLARE_DEVICE_TYPE(WILLIAMS_S6_SOUND, williams_s6_sound_device) +DECLARE_DEVICE_TYPE(WILLIAMS_S9_SOUND, williams_s9_sound_device) @@ -253,3 +254,34 @@ private: required_device<hc55516_device> m_hc; u8 m_dummy = 0; // needed for save-state support }; + + +// ======================> williams_s9_sound_device + +class williams_s9_sound_device : public device_t, public device_mixer_interface +{ +public: + // construction/destruction + williams_s9_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); + + // read/write + void write(u8 data); + DECLARE_WRITE_LINE_MEMBER(strobe); + DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); + +protected: + + // device-level overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual ioport_constructor device_input_ports() const override; + virtual void device_start() override; + virtual void device_reset() override; + +private: + // devices + void williams_s9_map(address_map &map); + required_device<m6802_cpu_device> m_cpu; + required_device<pia6821_device> m_pia; + required_device<hc55516_device> m_hc; + u8 m_dummy = 0; // needed for save-state support +}; diff --git a/src/mame/drivers/s7.cpp b/src/mame/drivers/s7.cpp index 78191e84587..fa89605564c 100644 --- a/src/mame/drivers/s7.cpp +++ b/src/mame/drivers/s7.cpp @@ -1064,8 +1064,8 @@ ROM_START(fpwr2_l2) ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4)) ROM_END -/*-------------------------------- -/ Wild Texas +/*------------------------------- +/ Wild Texas (displays as #521L1) /-------------------------------*/ // Conversion of Firepower II // http://www.ipdb.org/machine.cgi?id=5500 diff --git a/src/mame/drivers/s8a.cpp b/src/mame/drivers/s8a.cpp index eae4547388e..1713901c1fe 100644 --- a/src/mame/drivers/s8a.cpp +++ b/src/mame/drivers/s8a.cpp @@ -32,8 +32,8 @@ ToDo: #include "machine/genpin.h" #include "cpu/m6800/m6800.h" +#include "audio/williams.h" #include "machine/6821pia.h" -#include "sound/dac.h" #include "speaker.h" #include "s8a.lh" @@ -47,8 +47,7 @@ public: s8a_state(const machine_config &mconfig, device_type type, const char *tag) : genpin_class(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_audiocpu(*this, "audiocpu") - , m_pias(*this, "pias") + , m_s9sound(*this, "s9sound") , m_pia21(*this, "pia21") , m_pia24(*this, "pia24") , m_pia28(*this, "pia28") @@ -61,7 +60,6 @@ public: void s8a(machine_config &config); DECLARE_INPUT_CHANGED_MEMBER(main_nmi); - DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); protected: virtual void machine_start() override; @@ -69,28 +67,23 @@ protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; private: - u8 sound_r(); void dig0_w(u8 data); void dig1_w(u8 data); void lamp0_w(u8 data); void lamp1_w(u8 data); void sol2_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[8U+i] = BIT(data, i); }; // solenoids 8-15 void sol3_w(u8 data); // solenoids 0-7 - void sound_w(u8 data); u8 switch_r(); void switch_w(u8 data); DECLARE_READ_LINE_MEMBER(pia21_ca1_r); - DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w); DECLARE_WRITE_LINE_MEMBER(pia21_cb2_w) { }; // enable solenoids DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; // dummy to stop error log filling up DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; // comma3&4 DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; // comma1&2 DECLARE_WRITE_LINE_MEMBER(pia_irq); - void audio_map(address_map &map); void main_map(address_map &map); - u8 m_sound_data = 0; u8 m_strobe = 0; u8 m_row = 0; bool m_data_ok = 0; @@ -98,8 +91,7 @@ private: emu_timer* m_irq_timer; static const device_timer_id TIMER_IRQ = 0; required_device<m6802_cpu_device> m_maincpu; - required_device<cpu_device> m_audiocpu; - required_device<pia6821_device> m_pias; + required_device<williams_s9_sound_device> m_s9sound; required_device<pia6821_device> m_pia21; required_device<pia6821_device> m_pia24; required_device<pia6821_device> m_pia28; @@ -121,13 +113,6 @@ void s8a_state::main_map(address_map &map) map(0x6000, 0x7fff).rom().region("maincpu", 0); } -void s8a_state::audio_map(address_map &map) -{ - map(0x0000, 0x00ff).ram(); - map(0x2000, 0x2003).rw(m_pias, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0xc000, 0xffff).rom().region("audiocpu", 0); -} - static INPUT_PORTS_START( s8a ) PORT_START("X0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Tilt") @@ -157,7 +142,6 @@ static INPUT_PORTS_START( s8a ) PORT_START("X7") PORT_START("DIAGS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_7_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s8a_state, audio_nmi, 1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_0_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s8a_state, main_nmi, 1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Advance") PORT_CODE(KEYCODE_1_PAD) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_6_PAD) PORT_TOGGLE @@ -170,13 +154,6 @@ INPUT_CHANGED_MEMBER( s8a_state::main_nmi ) m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -INPUT_CHANGED_MEMBER( s8a_state::audio_nmi ) -{ - // Diagnostic button sends a pulse to NMI pin - if (newval==CLEAR_LINE) - m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); -} - void s8a_state::sol3_w(u8 data) { if (data==0x0a) @@ -186,23 +163,12 @@ void s8a_state::sol3_w(u8 data) m_io_outputs[i] = BIT(data, i); } -void s8a_state::sound_w(u8 data) -{ - m_sound_data = data; -} - READ_LINE_MEMBER( s8a_state::pia21_ca1_r ) { // sound busy return 1; } -WRITE_LINE_MEMBER( s8a_state::pia21_ca2_w ) -{ -// sound ns - m_pias->ca1_w(state); -} - void s8a_state::lamp0_w(u8 data) { m_lamp_data = data ^ 0xff; @@ -253,11 +219,6 @@ void s8a_state::switch_w(u8 data) m_row = data; } -u8 s8a_state::sound_r() -{ - return m_sound_data; -} - WRITE_LINE_MEMBER( s8a_state::pia_irq ) { if(state == CLEAR_LINE) @@ -306,7 +267,6 @@ void s8a_state::machine_start() save_item(NAME(m_row)); save_item(NAME(m_data_ok)); save_item(NAME(m_lamp_data)); - save_item(NAME(m_sound_data)); m_irq_timer = timer_alloc(TIMER_IRQ); m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); @@ -334,12 +294,11 @@ void s8a_state::s8a(machine_config &config) /* Devices */ PIA6821(config, m_pia21, 0); - m_pia21->readpa_handler().set(FUNC(s8a_state::sound_r)); m_pia21->set_port_a_input_overrides_output_mask(0xff); m_pia21->readca1_handler().set(FUNC(s8a_state::pia21_ca1_r)); - m_pia21->writepa_handler().set(FUNC(s8a_state::sound_w)); + m_pia21->writepa_handler().set("s9sound", FUNC(williams_s9_sound_device::write)); m_pia21->writepb_handler().set(FUNC(s8a_state::sol2_w)); - m_pia21->ca2_handler().set(FUNC(s8a_state::pia21_ca2_w)); + m_pia21->ca2_handler().set("s9sound", FUNC(williams_s9_sound_device::strobe)); m_pia21->cb2_handler().set(FUNC(s8a_state::pia21_cb2_w)); m_pia21->irqa_handler().set(FUNC(s8a_state::pia_irq)); m_pia21->irqb_handler().set(FUNC(s8a_state::pia_irq)); @@ -369,18 +328,8 @@ void s8a_state::s8a(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* Add the soundcard */ - M6808(config, m_audiocpu, XTAL(4'000'000)); - m_audiocpu->set_addrmap(AS_PROGRAM, &s8a_state::audio_map); - - SPEAKER(config, "speaker").front_center(); - MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); - - PIA6821(config, m_pias, 0); - m_pias->readpa_handler().set(FUNC(s8a_state::sound_r)); - m_pias->set_port_a_input_overrides_output_mask(0xff); - m_pias->writepb_handler().set("dac", FUNC(dac_byte_interface::data_w)); - m_pias->irqa_handler().set_inputline("audiocpu", M6808_IRQ_LINE); - m_pias->irqb_handler().set_inputline("audiocpu", M6808_IRQ_LINE); + SPEAKER(config, "mono").front_center(); + WILLIAMS_S9_SOUND(config, m_s9sound, 0).add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -391,9 +340,9 @@ ROM_START(scrzy_l1) ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF) ROM_LOAD("ic20.bin", 0x0000, 0x2000, CRC(b0df42e6) SHA1(bb10268d7b820d1de0c20e1b79aba558badd072b) ) - ROM_REGION(0x4000, "audiocpu", ROMREGION_ERASEFF) + ROM_REGION(0x8000, "s9sound:audiocpu", ROMREGION_ERASEFF) // 1st and 2nd halves are identical - ROM_LOAD("ic49.bin", 0x0000, 0x4000, CRC(bcc8ccc4) SHA1(2312f9cc4f5a2dadfbfa61d13c31bb5838adf152) ) + ROM_LOAD("ic49.bin", 0x4000, 0x4000, CRC(bcc8ccc4) SHA1(2312f9cc4f5a2dadfbfa61d13c31bb5838adf152) ) ROM_END } // Anonymous namespace diff --git a/src/mame/drivers/s9.cpp b/src/mame/drivers/s9.cpp index fc468c99543..bf79b059bd6 100644 --- a/src/mame/drivers/s9.cpp +++ b/src/mame/drivers/s9.cpp @@ -46,10 +46,9 @@ ToDo: #include "emu.h" #include "cpu/m6800/m6800.h" +#include "audio/williams.h" #include "machine/6821pia.h" #include "machine/genpin.h" -#include "sound/dac.h" -#include "sound/hc55516.h" #include "speaker.h" #include "s9.lh" @@ -62,9 +61,7 @@ public: s9_state(const machine_config &mconfig, device_type type, const char *tag) : genpin_class(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_audiocpu(*this, "audiocpu") - , m_hc55516(*this, "hc55516") - , m_pias(*this, "pias") + , m_s9sound(*this, "s9sound") , m_pia21(*this, "pia21") , m_pia24(*this, "pia24") , m_pia28(*this, "pia28") @@ -77,7 +74,6 @@ public: void s9(machine_config &config); DECLARE_INPUT_CHANGED_MEMBER(main_nmi); - DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); protected: virtual void machine_start() override; @@ -85,28 +81,23 @@ protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; private: - u8 sound_r(); void dig0_w(u8 data); void dig1_w(u8 data); void lamp0_w(u8 data); void lamp1_w(u8 data); void sol2_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[8U+i] = BIT(data, i); }; // solenoids 8-15 void sol3_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[i] = BIT(data, i); }; // solenoids 0-7 - void sound_w(u8 data); u8 switch_r(); void switch_w(u8 data); DECLARE_READ_LINE_MEMBER(pia21_ca1_r); - DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w); DECLARE_WRITE_LINE_MEMBER(pia21_cb2_w) { }; // enable solenoids DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; // dummy to stop error log filling up DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; // comma3&4 DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; // comma1&2 DECLARE_WRITE_LINE_MEMBER(pia_irq); - void audio_map(address_map &map); void main_map(address_map &map); - u8 m_sound_data = 0; u8 m_strobe = 0; u8 m_row = 0; bool m_data_ok = 0; @@ -114,9 +105,7 @@ private: emu_timer* m_irq_timer; static const device_timer_id TIMER_IRQ = 0; required_device<cpu_device> m_maincpu; - required_device<cpu_device> m_audiocpu; - required_device<hc55516_device> m_hc55516; - required_device<pia6821_device> m_pias; + required_device<williams_s9_sound_device> m_s9sound; required_device<pia6821_device> m_pia21; required_device<pia6821_device> m_pia24; required_device<pia6821_device> m_pia28; @@ -138,13 +127,6 @@ void s9_state::main_map(address_map &map) map(0x4000, 0x7fff).rom().region("maincpu", 0 ); } -void s9_state::audio_map(address_map &map) -{ - map(0x0000, 0x07ff).ram(); - map(0x2000, 0x2003).rw(m_pias, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x8000, 0xffff).rom().region("audiocpu", 0 ); -} - static INPUT_PORTS_START( s9 ) PORT_START("X0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_NAME("Plumb Tilt") // 3 touches before it tilts @@ -213,7 +195,6 @@ static INPUT_PORTS_START( s9 ) PORT_START("X7") PORT_START("DIAGS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_7_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s9_state, audio_nmi, 1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_0_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s9_state, main_nmi, 1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_1_PAD) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_6_PAD) PORT_TOGGLE @@ -256,30 +237,12 @@ INPUT_CHANGED_MEMBER( s9_state::main_nmi ) m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -INPUT_CHANGED_MEMBER( s9_state::audio_nmi ) -{ - // Diagnostic button sends a pulse to NMI pin - if (newval==CLEAR_LINE) - m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); -} - -void s9_state::sound_w(u8 data) -{ - m_sound_data = data; -} - READ_LINE_MEMBER( s9_state::pia21_ca1_r ) { // sound busy return 1; } -WRITE_LINE_MEMBER( s9_state::pia21_ca2_w ) -{ -// sound ns - m_pias->ca1_w(state); -} - void s9_state::lamp0_w(u8 data) { m_lamp_data = data ^ 0xff; @@ -330,11 +293,6 @@ void s9_state::switch_w(u8 data) m_row = data; } -u8 s9_state::sound_r() -{ - return m_sound_data; -} - WRITE_LINE_MEMBER( s9_state::pia_irq ) { if(state == CLEAR_LINE) @@ -383,7 +341,6 @@ void s9_state::machine_start() save_item(NAME(m_row)); save_item(NAME(m_data_ok)); save_item(NAME(m_lamp_data)); - save_item(NAME(m_sound_data)); m_irq_timer = timer_alloc(TIMER_IRQ); m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); @@ -410,12 +367,11 @@ void s9_state::s9(machine_config &config) /* Devices */ PIA6821(config, m_pia21, 0); - m_pia21->readpa_handler().set(FUNC(s9_state::sound_r)); m_pia21->set_port_a_input_overrides_output_mask(0xff); m_pia21->readca1_handler().set(FUNC(s9_state::pia21_ca1_r)); - m_pia21->writepa_handler().set(FUNC(s9_state::sound_w)); + m_pia21->writepa_handler().set("s9sound", FUNC(williams_s9_sound_device::write)); m_pia21->writepb_handler().set(FUNC(s9_state::sol2_w)); - m_pia21->ca2_handler().set(FUNC(s9_state::pia21_ca2_w)); + m_pia21->ca2_handler().set("s9sound", FUNC(williams_s9_sound_device::strobe)); m_pia21->cb2_handler().set(FUNC(s9_state::pia21_cb2_w)); m_pia21->irqa_handler().set(FUNC(s9_state::pia_irq)); m_pia21->irqb_handler().set(FUNC(s9_state::pia_irq)); @@ -445,36 +401,21 @@ void s9_state::s9(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* Add the soundcard */ - M6808(config, m_audiocpu, XTAL(4'000'000)); - m_audiocpu->set_addrmap(AS_PROGRAM, &s9_state::audio_map); - - SPEAKER(config, "speaker").front_center(); - MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); - - SPEAKER(config, "speech").front_center(); - HC55516(config, m_hc55516, 0).add_route(ALL_OUTPUTS, "speech", 1.00); - - PIA6821(config, m_pias, 0); - m_pias->readpa_handler().set(FUNC(s9_state::sound_r)); - m_pias->set_port_a_input_overrides_output_mask(0xff); - m_pias->writepb_handler().set("dac", FUNC(dac_byte_interface::data_w)); - m_pias->ca2_handler().set("hc55516", FUNC(hc55516_device::clock_w)); - m_pias->cb2_handler().set("hc55516", FUNC(hc55516_device::digit_w)); - m_pias->irqa_handler().set_inputline("audiocpu", M6808_IRQ_LINE); - m_pias->irqb_handler().set_inputline("audiocpu", M6808_IRQ_LINE); + SPEAKER(config, "mono").front_center(); + WILLIAMS_S9_SOUND(config, m_s9sound, 0).add_route(ALL_OUTPUTS, "mono", 1.0); } -/*----------------------------- -/ Rat Race - Sys.9 (Game #527)- Prototype (displays as #500) +/*----------------------------------------------------------------------------- +/ Rat Race - Sys.9 (Game #527)- Prototype (displays as #500L1) / IMPD shows this as System 7, however the writes to 0x2200 indicate System 9. -/-----------------------------*/ +/-----------------------------------------------------------------------------*/ ROM_START(ratrc_l1) ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF) ROM_LOAD("ic20.532", 0x1000, 0x1000, CRC(0c5c7c09) SHA1(c93b39ba1460feee5850fcd3ca7cacb72c4c8ff3)) ROM_LOAD("ic14.532", 0x2000, 0x1000, CRC(c6f4bcf4) SHA1(d71c86299139abe3dd376a324315a039be82875c)) ROM_LOAD("ic17.532", 0x3000, 0x1000, CRC(0800c214) SHA1(3343c07fd550bb0759032628e01bb750135dab15)) - ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF) + ROM_REGION(0x8000, "s9sound:audiocpu", ROMREGION_ERASEFF) ROM_LOAD("b486.bin", 0x6000, 0x2000, CRC(c54b9402) SHA1(c56fc5f105fc2c1166e3b22bb09b72af79e0aec1)) ROM_END @@ -486,7 +427,7 @@ ROM_START(sorcr_l1) ROM_LOAD("cpu_u19.732", 0x1000, 0x1000, CRC(88b6837d) SHA1(d26b06342741443406a72ba48a70e82df62bb26e)) ROM_LOAD("cpu_u20.764", 0x2000, 0x2000, CRC(c235b692) SHA1(d3b97fad2d501c894570601b387933c7644f64e6)) - ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF) + ROM_REGION(0x8000, "s9sound:audiocpu", ROMREGION_ERASEFF) ROM_LOAD("spch_u7.732", 0x0000, 0x1000, CRC(bba9ed18) SHA1(8e37ba8cb6bbc1e0afeef230088beda4513adddb)) ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(d48c68ad) SHA1(b1391b87519ad47be3dcce7f8581f871e6a3669f)) ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(a5c54d47) SHA1(4e1206412ecf52ae61c9df2055e0715749a6325d)) @@ -499,7 +440,7 @@ ROM_START(sorcr_l2) ROM_LOAD("cpu_u19.l2", 0x1000, 0x1000, CRC(faf738db) SHA1(a3b3f4160dc837ddf5379e1edb0eafeefcc11e3d)) ROM_LOAD("cpu_u20.l2", 0x2000, 0x2000, CRC(74fc8117) SHA1(c228c76ade670603f77bb324e6794ec6dd358285)) - ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF) + ROM_REGION(0x8000, "s9sound:audiocpu", ROMREGION_ERASEFF) ROM_LOAD("spch_u7.732", 0x0000, 0x1000, CRC(bba9ed18) SHA1(8e37ba8cb6bbc1e0afeef230088beda4513adddb)) ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(d48c68ad) SHA1(b1391b87519ad47be3dcce7f8581f871e6a3669f)) ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(a5c54d47) SHA1(4e1206412ecf52ae61c9df2055e0715749a6325d)) @@ -520,7 +461,7 @@ ROM_START(sshtl_l7) ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF) ROM_LOAD("cpu_u20.128", 0x0000, 0x4000, CRC(848ad54c) SHA1(4e4ce5fb970da37706472f94a27fd912e1ecb1a0)) - ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF) + ROM_REGION(0x8000, "s9sound:audiocpu", ROMREGION_ERASEFF) ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(13edd4e5) SHA1(46c4052c31ddc20bb87445636f8fe3b6f7bff856)) ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(cf48b2e7) SHA1(fe55419a5d40b3a4e8c02a92746b25a075b8efd3)) ROM_LOAD("spch_u4.732", 0x3000, 0x1000, CRC(b0d03c5e) SHA1(46b952f71a7ecc03e22e427875f6e16a9d124067)) @@ -531,7 +472,7 @@ ROM_START(sshtl_l3) ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF) ROM_LOAD("cpu_u20.l3", 0x0000, 0x4000, CRC(dc5f08e0) SHA1(67869c1db4e1f49f38588978d4ed32fe7d62e2d6)) - ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF) + ROM_REGION(0x8000, "s9sound:audiocpu", ROMREGION_ERASEFF) ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(13edd4e5) SHA1(46c4052c31ddc20bb87445636f8fe3b6f7bff856)) ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(cf48b2e7) SHA1(fe55419a5d40b3a4e8c02a92746b25a075b8efd3)) ROM_LOAD("spch_u4.732", 0x3000, 0x1000, CRC(b0d03c5e) SHA1(46b952f71a7ecc03e22e427875f6e16a9d124067)) @@ -545,7 +486,7 @@ ROM_START(comet_l4) ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF) ROM_LOAD("cpu_u20.128", 0x0000, 0x4000, CRC(36193600) SHA1(efdc44ef26c2def8f860a0296e27b2c3dac55ec8)) - ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF) + ROM_REGION(0x8000, "s9sound:audiocpu", ROMREGION_ERASEFF) ROM_LOAD("spch_u7.732", 0x0000, 0x1000, CRC(36545b22) SHA1(f4a026f3fa58dce81b439d76120a6769f4632955)) ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(89f7ede5) SHA1(bbfbd991c9e005c2fa36d8458803b121f4933618)) ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(6ba2aba6) SHA1(783b4e9b38db8677d91f86cb4805f0fa1ae8f856)) @@ -557,7 +498,7 @@ ROM_START(comet_l5) ROM_REGION(0x4000, "maincpu", ROMREGION_ERASEFF) ROM_LOAD("cpu_u20.l5", 0x0000, 0x4000, CRC(d153d9ab) SHA1(0b97591b8ba35207b1427900486d69078ae122bc)) - ROM_REGION(0x8000, "audiocpu", ROMREGION_ERASEFF) + ROM_REGION(0x8000, "s9sound:audiocpu", ROMREGION_ERASEFF) ROM_LOAD("spch_u7.732", 0x0000, 0x1000, CRC(36545b22) SHA1(f4a026f3fa58dce81b439d76120a6769f4632955)) ROM_LOAD("spch_u5.732", 0x1000, 0x1000, CRC(89f7ede5) SHA1(bbfbd991c9e005c2fa36d8458803b121f4933618)) ROM_LOAD("spch_u6.732", 0x2000, 0x1000, CRC(6ba2aba6) SHA1(783b4e9b38db8677d91f86cb4805f0fa1ae8f856)) |