(MESS) Apple II: Support for Applied Engineering Super Music Synthesizer [R. Belmont]

This commit is contained in:
R. Belmont 2013-11-07 03:59:42 +00:00
parent 3b7fff857d
commit a82ac7cf00
3 changed files with 81 additions and 20 deletions

View File

@ -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<a2bus_alfam2_device>;
const device_type A2BUS_AESMS = &device_creator<a2bus_aesms_device>;
#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;
}

View File

@ -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<sn76489_device> m_sn1;
required_device<sn76489_device> m_sn2;
required_device<sn76489_device> m_sn3;
optional_device<sn76489_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__ */

View File

@ -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)