mirror of
https://github.com/holub/mame
synced 2025-07-01 00:09:18 +03:00
s8a,s9: made sound card a device.
This commit is contained in:
parent
b224754f90
commit
4c84d6db3e
@ -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 );
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user