summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2022-01-26 22:10:43 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2022-01-26 22:10:43 +1100
commit4c84d6db3ebd471f59fb4d0592fc97d6aff3b73c (patch)
treefcea85a0db53d41b54ccf5fe2ce266781a647959 /src
parentb224754f9067ad4d78a90ddfc4a937b18399d301 (diff)
s8a,s9: made sound card a device.
Diffstat (limited to 'src')
-rw-r--r--src/mame/audio/williams.cpp115
-rw-r--r--src/mame/audio/williams.h32
-rw-r--r--src/mame/drivers/s7.cpp4
-rw-r--r--src/mame/drivers/s8a.cpp69
-rw-r--r--src/mame/drivers/s9.cpp93
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))