mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
cpc_expansion_slot_device: converted to devcb2 (nw)
This commit is contained in:
parent
61f179bdf9
commit
1b4f7107a2
@ -15,15 +15,6 @@ const device_type CPC_ROM = &device_creator<cpc_rom_device>;
|
||||
// DEVICE CONFIG INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
CPC_EXPANSION_INTERFACE(sub_exp_intf)
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, irq_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, nmi_w),
|
||||
DEVCB_NULL, // RESET
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romdis_w), // ROMDIS
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romen_w) // /ROMEN
|
||||
};
|
||||
|
||||
// device machine config
|
||||
static MACHINE_CONFIG_FRAGMENT( cpc_rom )
|
||||
MCFG_ROMSLOT_ADD("rom1")
|
||||
@ -34,7 +25,12 @@ static MACHINE_CONFIG_FRAGMENT( cpc_rom )
|
||||
MCFG_ROMSLOT_ADD("rom6")
|
||||
|
||||
// pass-through
|
||||
MCFG_CPC_EXPANSION_SLOT_ADD("exp",sub_exp_intf,cpc_exp_cards,NULL)
|
||||
MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0)
|
||||
MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, NULL, false)
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w)) // /ROMEN
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -17,15 +17,6 @@
|
||||
const device_type CPC_SSA1 = &device_creator<cpc_ssa1_device>;
|
||||
const device_type CPC_DKSPEECH = &device_creator<cpc_dkspeech_device>;
|
||||
|
||||
CPC_EXPANSION_INTERFACE(sub_exp_intf)
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, irq_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, nmi_w),
|
||||
DEVCB_NULL, // RESET
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romdis_w), // ROMDIS
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romen_w) // /ROMEN
|
||||
};
|
||||
|
||||
//-------------------------------------------------
|
||||
// device I/O handlers
|
||||
//-------------------------------------------------
|
||||
@ -124,7 +115,12 @@ static MACHINE_CONFIG_FRAGMENT( cpc_ssa1 )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||
|
||||
// pass-through
|
||||
MCFG_CPC_EXPANSION_SLOT_ADD("exp",sub_exp_intf,cpc_exp_cards,NULL)
|
||||
MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0)
|
||||
MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, NULL, false)
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w)) // /ROMEN
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -136,7 +132,12 @@ static MACHINE_CONFIG_FRAGMENT( cpc_dkspeech )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||
|
||||
// pass-through
|
||||
MCFG_CPC_EXPANSION_SLOT_ADD("exp",sub_exp_intf,cpc_exp_cards,NULL)
|
||||
MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0)
|
||||
MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, NULL, false)
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w)) // /ROMEN
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -41,7 +41,12 @@ device_cpc_expansion_card_interface::~device_cpc_expansion_card_interface()
|
||||
|
||||
cpc_expansion_slot_device::cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, CPC_EXPANSION_SLOT, "Amstrad CPC expansion port", tag, owner, clock, "cpc_expansion_slot", __FILE__),
|
||||
device_slot_interface(mconfig, *this)
|
||||
device_slot_interface(mconfig, *this),
|
||||
m_out_irq_cb(*this),
|
||||
m_out_nmi_cb(*this),
|
||||
m_out_reset_cb(*this),
|
||||
m_out_romdis_cb(*this),
|
||||
m_out_romen_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
@ -49,33 +54,6 @@ cpc_expansion_slot_device::~cpc_expansion_slot_device()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void cpc_expansion_slot_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const cpc_expansion_slot_interface *intf = reinterpret_cast<const cpc_expansion_slot_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
{
|
||||
*static_cast<cpc_expansion_slot_interface *>(this) = *intf;
|
||||
}
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
|
||||
memset(&m_out_nmi_cb, 0, sizeof(m_out_nmi_cb));
|
||||
memset(&m_out_reset_cb, 0, sizeof(m_out_reset_cb));
|
||||
memset(&m_out_romdis_cb, 0, sizeof(m_out_romdis_cb));
|
||||
memset(&m_out_romen_cb, 0, sizeof(m_out_romen_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
@ -85,11 +63,11 @@ void cpc_expansion_slot_device::device_start()
|
||||
m_card = dynamic_cast<device_cpc_expansion_card_interface *>(get_card_device());
|
||||
|
||||
// resolve callbacks
|
||||
m_out_irq_func.resolve(m_out_irq_cb, *this);
|
||||
m_out_nmi_func.resolve(m_out_nmi_cb, *this);
|
||||
m_out_reset_func.resolve(m_out_reset_cb, *this);
|
||||
m_out_romdis_func.resolve(m_out_romdis_cb, *this);
|
||||
m_out_romen_func.resolve(m_out_romen_cb, *this);
|
||||
m_out_irq_cb.resolve_safe();
|
||||
m_out_nmi_cb.resolve_safe();
|
||||
m_out_reset_cb.resolve_safe();
|
||||
m_out_romdis_cb.resolve_safe();
|
||||
m_out_romen_cb.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
@ -102,8 +80,8 @@ void cpc_expansion_slot_device::device_reset()
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::irq_w ) { m_out_irq_func(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::nmi_w ) { m_out_nmi_func(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::reset_w ) { m_out_reset_func(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::romdis_w ) { m_out_romdis_func(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::romen_w ) { m_out_romen_func(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::irq_w ) { m_out_irq_cb(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::nmi_w ) { m_out_nmi_cb(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::reset_w ) { m_out_reset_cb(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::romdis_w ) { m_out_romdis_cb(state); }
|
||||
WRITE_LINE_MEMBER( cpc_expansion_slot_device::romen_w ) { m_out_romen_cb(state); }
|
||||
|
@ -50,33 +50,25 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define CPC_EXPANSION_INTERFACE(_name) \
|
||||
const cpc_expansion_slot_interface (_name) =
|
||||
#define MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(_devcb) \
|
||||
devcb = &cpc_expansion_slot_device::set_out_irq_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(_devcb) \
|
||||
devcb = &cpc_expansion_slot_device::set_out_nmi_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_CPC_EXPANSION_SLOT_ADD(_tag, _config, _slot_intf, _def_slot) \
|
||||
MCFG_DEVICE_ADD(_tag, CPC_EXPANSION_SLOT, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
|
||||
#define MCFG_CPC_EXPANSION_SLOT_OUT_RESET_CB(_devcb) \
|
||||
devcb = &cpc_expansion_slot_device::set_out_reset_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(_devcb) \
|
||||
devcb = &cpc_expansion_slot_device::set_out_romdis_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(_devcb) \
|
||||
devcb = &cpc_expansion_slot_device::set_out_romen_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// expansion slot interface
|
||||
|
||||
struct cpc_expansion_slot_interface
|
||||
{
|
||||
devcb_write_line m_out_irq_cb;
|
||||
devcb_write_line m_out_nmi_cb;
|
||||
devcb_write_line m_out_reset_cb;
|
||||
devcb_write_line m_out_romdis_cb;
|
||||
devcb_write_line m_out_romen_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> device_cpc_expansion_card_interface
|
||||
|
||||
// class representing interface-specific live cpc_expansion card
|
||||
@ -95,13 +87,18 @@ public:
|
||||
// ======================> cpc_expansion_slot_device
|
||||
|
||||
class cpc_expansion_slot_device : public device_t,
|
||||
public cpc_expansion_slot_interface,
|
||||
public device_slot_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
virtual ~cpc_expansion_slot_device();
|
||||
|
||||
template<class _Object> static devcb2_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_irq_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_nmi_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_nmi_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_reset_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_reset_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_romdis_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_romdis_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_romen_callback(device_t &device, _Object object) { return downcast<cpc_expansion_slot_device &>(device).m_out_romen_cb.set_callback(object); }
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( irq_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( nmi_w );
|
||||
@ -113,13 +110,12 @@ protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_config_complete();
|
||||
|
||||
devcb_resolved_write_line m_out_irq_func;
|
||||
devcb_resolved_write_line m_out_nmi_func;
|
||||
devcb_resolved_write_line m_out_reset_func;
|
||||
devcb_resolved_write_line m_out_romdis_func;
|
||||
devcb_resolved_write_line m_out_romen_func;
|
||||
devcb2_write_line m_out_irq_cb;
|
||||
devcb2_write_line m_out_nmi_cb;
|
||||
devcb2_write_line m_out_reset_cb;
|
||||
devcb2_write_line m_out_romdis_cb;
|
||||
devcb2_write_line m_out_romen_cb;
|
||||
|
||||
device_cpc_expansion_card_interface *m_card;
|
||||
};
|
||||
|
@ -14,19 +14,15 @@
|
||||
|
||||
const device_type CPC_MFACE2 = &device_creator<cpc_multiface2_device>;
|
||||
|
||||
CPC_EXPANSION_INTERFACE(sub_exp_intf)
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, irq_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, nmi_w),
|
||||
DEVCB_NULL, // RESET
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romdis_w), // ROMDIS
|
||||
DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romen_w) // /ROMEN
|
||||
};
|
||||
|
||||
// device machine config
|
||||
static MACHINE_CONFIG_FRAGMENT( cpc_mface2 )
|
||||
// pass-through
|
||||
MCFG_CPC_EXPANSION_SLOT_ADD("exp",sub_exp_intf,cpc_exp_cards,NULL)
|
||||
MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0)
|
||||
MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, NULL, false)
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romen_w)) // /ROMEN
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
DIRECT_UPDATE_MEMBER( cpc_multiface2_device::amstrad_default )
|
||||
|
@ -834,15 +834,6 @@ static SLOT_INTERFACE_START( aleste_floppies )
|
||||
SLOT_INTERFACE( "525hd", FLOPPY_525_HD )
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
CPC_EXPANSION_INTERFACE(cpc_exp_intf)
|
||||
{
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", 0),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_NMI),
|
||||
DEVCB_NULL, // RESET
|
||||
DEVCB_DRIVER_LINE_MEMBER(amstrad_state, cpc_romdis), // ROMDIS
|
||||
DEVCB_DRIVER_LINE_MEMBER(amstrad_state, cpc_romen) // /ROMEN
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( cpcplus_cartslot )
|
||||
MCFG_CARTSLOT_ADD("cart")
|
||||
MCFG_CARTSLOT_EXTENSION_LIST("cpr,bin")
|
||||
@ -913,7 +904,12 @@ static MACHINE_CONFIG_START( amstrad_nofdc, amstrad_state )
|
||||
MCFG_CASSETTE_ADD( "cassette", amstrad_cassette_interface )
|
||||
MCFG_SOFTWARE_LIST_ADD("cass_list","cpc_cass")
|
||||
|
||||
MCFG_CPC_EXPANSION_SLOT_ADD("exp",cpc_exp_intf,cpc_exp_cards,NULL)
|
||||
MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0)
|
||||
MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, NULL, false)
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(amstrad_state, cpc_romdis)) // ROMDIS
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(WRITELINE(amstrad_state, cpc_romen)) // /ROMEN
|
||||
|
||||
/* internal ram */
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
@ -995,7 +991,12 @@ static MACHINE_CONFIG_START( cpcplus, amstrad_state )
|
||||
MCFG_FLOPPY_DRIVE_ADD("upd765:0", amstrad_floppies, "3ssdd", amstrad_state::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("upd765:1", amstrad_floppies, "3ssdd", amstrad_state::floppy_formats)
|
||||
|
||||
MCFG_CPC_EXPANSION_SLOT_ADD("exp",cpc_exp_intf,cpc_exp_cards,NULL)
|
||||
MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0)
|
||||
MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, NULL, false)
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(INPUTLINE("maincpu", 0))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(INPUTLINE("maincpu", INPUT_LINE_NMI))
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(WRITELINE(amstrad_state, cpc_romdis)) // ROMDIS
|
||||
MCFG_CPC_EXPANSION_SLOT_OUT_ROMEN_CB(WRITELINE(amstrad_state, cpc_romen)) // /ROMEN
|
||||
|
||||
/* internal ram */
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
|
Loading…
Reference in New Issue
Block a user