From a82ac7cf00e083b5b7db52fd11c1325d80ae5a06 Mon Sep 17 00:00:00 2001 From: "R. Belmont" Date: Thu, 7 Nov 2013 03:59:42 +0000 Subject: [PATCH] (MESS) Apple II: Support for Applied Engineering Super Music Synthesizer [R. Belmont] --- src/emu/bus/a2bus/a2alfam2.c | 72 ++++++++++++++++++++++++++++-------- src/emu/bus/a2bus/a2alfam2.h | 28 +++++++++++--- src/mess/drivers/apple2.c | 1 + 3 files changed, 81 insertions(+), 20 deletions(-) diff --git a/src/emu/bus/a2bus/a2alfam2.c b/src/emu/bus/a2bus/a2alfam2.c index be0dc235c19..197d6cdb4de 100644 --- a/src/emu/bus/a2bus/a2alfam2.c +++ b/src/emu/bus/a2bus/a2alfam2.c @@ -3,6 +3,7 @@ a2alfsm2.c Implementation of the ALF Apple Music II card (originally marketed as the "MC1") + The AE Super Music Synthesizer is a superset of this card (4x76489 instead of 3) *********************************************************************/ @@ -19,10 +20,12 @@ //************************************************************************** const device_type A2BUS_ALFAM2 = &device_creator; +const device_type A2BUS_AESMS = &device_creator; #define SN1_TAG "sn76489_1" // left #define SN2_TAG "sn76489_2" // center #define SN3_TAG "sn76489_3" // right +#define SN4_TAG "sn76489_4" // center? //------------------------------------------------- // sn76496_config psg_intf @@ -47,6 +50,24 @@ MACHINE_CONFIG_FRAGMENT( a2alfam2 ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50) MACHINE_CONFIG_END +MACHINE_CONFIG_FRAGMENT( a2aesms ) + MCFG_SPEAKER_STANDARD_STEREO("alf_l", "alf_r") + MCFG_SOUND_ADD(SN1_TAG, SN76489, 1020484) + MCFG_SOUND_CONFIG(psg_intf) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_l", 0.50) + MCFG_SOUND_ADD(SN2_TAG, SN76489, 1020484) + MCFG_SOUND_CONFIG(psg_intf) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_l", 0.50) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50) + MCFG_SOUND_ADD(SN3_TAG, SN76489, 1020484) + MCFG_SOUND_CONFIG(psg_intf) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50) + MCFG_SOUND_ADD(SN4_TAG, SN76489, 1020484) + MCFG_SOUND_CONFIG(psg_intf) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_l", 0.50) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "alf_r", 0.50) +MACHINE_CONFIG_END + /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -56,54 +77,64 @@ MACHINE_CONFIG_END // machine configurations //------------------------------------------------- -machine_config_constructor a2bus_alfam2_device::device_mconfig_additions() const +machine_config_constructor a2bus_sn76489_device::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( a2alfam2 ); } +machine_config_constructor a2bus_aesms_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( a2aesms ); +} + //************************************************************************** // LIVE DEVICE //************************************************************************** -a2bus_alfam2_device::a2bus_alfam2_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : +a2bus_sn76489_device::a2bus_sn76489_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : device_t(mconfig, type, name, tag, owner, clock, shortname, source), device_a2bus_card_interface(mconfig, *this), m_sn1(*this, SN1_TAG), m_sn2(*this, SN2_TAG), - m_sn3(*this, SN3_TAG) + m_sn3(*this, SN3_TAG), + m_sn4(*this, SN4_TAG) { } a2bus_alfam2_device::a2bus_alfam2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, A2BUS_ALFAM2, "ALF MC1 / Apple Music II", tag, owner, clock, "a2alfam2", __FILE__), - device_a2bus_card_interface(mconfig, *this), - m_sn1(*this, SN1_TAG), - m_sn2(*this, SN2_TAG), - m_sn3(*this, SN3_TAG) + a2bus_sn76489_device(mconfig, A2BUS_ALFAM2, "ALF MC1 / Apple Music II", tag, owner, clock, "a2alfam2", __FILE__) { + m_has4thsn = false; +} + +a2bus_aesms_device::a2bus_aesms_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + a2bus_sn76489_device(mconfig, A2BUS_ALFAM2, "Applied Engineering Super Music Synthesizer", tag, owner, clock, "a2aesms", __FILE__) +{ + m_has4thsn = true; } //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- -void a2bus_alfam2_device::device_start() +void a2bus_sn76489_device::device_start() { // set_a2bus_device makes m_slot valid set_a2bus_device(); - m_latch0 = m_latch1 = m_latch2 = 0; + m_latch0 = m_latch1 = m_latch2 = m_latch3 = 0; save_item(NAME(m_latch0)); save_item(NAME(m_latch1)); save_item(NAME(m_latch2)); + save_item(NAME(m_latch3)); } -void a2bus_alfam2_device::device_reset() +void a2bus_sn76489_device::device_reset() { - m_latch0 = m_latch1 = m_latch2 = 0; + m_latch0 = m_latch1 = m_latch2 = m_latch3 = 0; } -UINT8 a2bus_alfam2_device::read_c0nx(address_space &space, UINT8 offset) +UINT8 a2bus_sn76489_device::read_c0nx(address_space &space, UINT8 offset) { // SN76489 can't be read, it appears from the schematics this is what happens switch (offset) @@ -116,12 +147,15 @@ UINT8 a2bus_alfam2_device::read_c0nx(address_space &space, UINT8 offset) case 2: return m_latch2; + + case 3: + return m_latch3; } return 0xff; } -void a2bus_alfam2_device::write_c0nx(address_space &space, UINT8 offset, UINT8 data) +void a2bus_sn76489_device::write_c0nx(address_space &space, UINT8 offset, UINT8 data) { switch (offset) { @@ -139,10 +173,18 @@ void a2bus_alfam2_device::write_c0nx(address_space &space, UINT8 offset, UINT8 d m_sn3->write(space, 0, data); m_latch2 = data; break; + + case 3: + if (m_has4thsn) + { + m_sn4->write(space, 0, data); + m_latch3 = data; + } + break; } } -bool a2bus_alfam2_device::take_c800() +bool a2bus_sn76489_device::take_c800() { return false; } diff --git a/src/emu/bus/a2bus/a2alfam2.h b/src/emu/bus/a2bus/a2alfam2.h index 4aab22c5d05..044ec964839 100644 --- a/src/emu/bus/a2bus/a2alfam2.h +++ b/src/emu/bus/a2bus/a2alfam2.h @@ -2,7 +2,7 @@ a2alfam2.h - Implementation of the ALF Apple Music II card + Implementation of the ALF Apple Music II card and compatibles *********************************************************************/ @@ -17,14 +17,13 @@ // TYPE DEFINITIONS //************************************************************************** -class a2bus_alfam2_device: +class a2bus_sn76489_device: public device_t, public device_a2bus_card_interface { public: // construction/destruction - a2bus_alfam2_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - a2bus_alfam2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + a2bus_sn76489_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; @@ -32,6 +31,7 @@ public: required_device m_sn1; required_device m_sn2; required_device m_sn3; + optional_device m_sn4; protected: virtual void device_start(); @@ -43,10 +43,28 @@ protected: virtual bool take_c800(); private: - UINT8 m_latch0, m_latch1, m_latch2; + UINT8 m_latch0, m_latch1, m_latch2, m_latch3; + +protected: + bool m_has4thsn; +}; + +class a2bus_alfam2_device : public a2bus_sn76489_device +{ +public: + a2bus_alfam2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +class a2bus_aesms_device : public a2bus_sn76489_device +{ +public: + a2bus_aesms_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + virtual machine_config_constructor device_mconfig_additions() const; }; // device type definition extern const device_type A2BUS_ALFAM2; +extern const device_type A2BUS_AESMS; #endif /* __A2BUS_ALFAM2__ */ diff --git a/src/mess/drivers/apple2.c b/src/mess/drivers/apple2.c index 1ff299c6bd4..22cc1fbf584 100644 --- a/src/mess/drivers/apple2.c +++ b/src/mess/drivers/apple2.c @@ -640,6 +640,7 @@ static SLOT_INTERFACE_START(apple2_cards) SLOT_INTERFACE("echoiiplus", A2BUS_ECHOPLUS) /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */ SLOT_INTERFACE("scsi", A2BUS_SCSI) /* Apple II SCSI Card */ SLOT_INTERFACE("applicard", A2BUS_APPLICARD) /* PCPI Applicard */ + SLOT_INTERFACE("aesms", A2BUS_AESMS) /* Applied Engineering Super Music Synthesizer */ SLOT_INTERFACE_END static SLOT_INTERFACE_START(apple2eaux_cards)