(MESS) ep64: Cleaned up devcb2. (nw)

This commit is contained in:
Curt Coder 2014-03-19 14:19:50 +00:00
parent cae402dd2e
commit 36de1d31b2
5 changed files with 52 additions and 32 deletions

View File

@ -50,7 +50,8 @@ ep64_expansion_bus_slot_device::ep64_expansion_bus_slot_device(const machine_con
device_slot_interface(mconfig, *this),
m_write_irq(*this),
m_write_nmi(*this),
m_write_wait(*this)
m_write_wait(*this),
m_dave(*this)
{
}
@ -61,7 +62,6 @@ ep64_expansion_bus_slot_device::ep64_expansion_bus_slot_device(const machine_con
void ep64_expansion_bus_slot_device::device_start()
{
m_dave = dynamic_cast<dave_device *>(m_owner->subdevice(m_dave_tag));
m_card = dynamic_cast<device_ep64_expansion_bus_card_interface *>(get_card_device());
// resolve callbacks

View File

@ -67,15 +67,22 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_EP64_EXPANSION_BUS_SLOT_ADD(_tag, _dave_tag, _def_slot) \
#define MCFG_EP64_EXPANSION_BUS_SLOT_ADD(_tag, _def_slot) \
MCFG_DEVICE_ADD(_tag, EP64_EXPANSION_BUS_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(ep64_expansion_bus_cards, _def_slot, false) \
downcast<ep64_expansion_bus_slot_device *>(device)->set_dave_tag(_dave_tag);
#define MCFG_EP64_EXPANSION_BUS_CALLBACKS(_irq, _nmi, _wait) \
downcast<ep64_expansion_bus_slot_device *>(device)->set_irq_callback(DEVCB2_##_irq); \
downcast<ep64_expansion_bus_slot_device *>(device)->set_nmi_callback(DEVCB2_##_nmi); \
downcast<ep64_expansion_bus_slot_device *>(device)->set_wait_callback(DEVCB2_##_wait);
#define MCFG_EP64_EXPANSION_BUS_SLOT_DAVE(_tag) \
ep64_expansion_bus_slot_device::static_set_dave_tag(*device, "^"_tag);
#define MCFG_EP64_EXPANSION_BUS_SLOT_IRQ_CALLBACK(_write) \
devcb = &ep64_expansion_bus_slot_device::set_irq_wr_callback(*device, DEVCB2_##_write);
#define MCFG_EP64_EXPANSION_BUS_SLOT_NMI_CALLBACK(_write) \
devcb = &ep64_expansion_bus_slot_device::set_nmi_wr_callback(*device, DEVCB2_##_write);
#define MCFG_EP64_EXPANSION_BUS_SLOT_WAIT_CALLBACK(_write) \
devcb = &ep64_expansion_bus_slot_device::set_wait_wr_callback(*device, DEVCB2_##_write);
@ -88,7 +95,7 @@
class device_ep64_expansion_bus_card_interface;
class ep64_expansion_bus_slot_device : public device_t,
public device_slot_interface
public device_slot_interface
{
friend class device_ep64_expansion_bus_card_interface;
@ -96,10 +103,10 @@ public:
// construction/destruction
ep64_expansion_bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
void set_dave_tag(const char* dave_tag) { m_dave_tag = dave_tag; }
template<class _irq> void set_irq_callback(_irq irq) { m_write_irq.set_callback(irq); }
template<class _nmi> void set_nmi_callback(_nmi nmi) { m_write_nmi.set_callback(nmi); }
template<class _wait> void set_wait_callback(_wait wait) { m_write_wait.set_callback(wait); }
static void static_set_dave_tag(device_t &device, const char* tag) { downcast<ep64_expansion_bus_slot_device &>(device).m_dave.set_tag(tag); }
template<class _Object> static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<ep64_expansion_bus_slot_device &>(device).m_write_irq.set_callback(object); }
template<class _Object> static devcb2_base &set_nmi_wr_callback(device_t &device, _Object object) { return downcast<ep64_expansion_bus_slot_device &>(device).m_write_nmi.set_callback(object); }
template<class _Object> static devcb2_base &set_wait_wr_callback(device_t &device, _Object object) { return downcast<ep64_expansion_bus_slot_device &>(device).m_write_wait.set_callback(object); }
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_write_irq(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
@ -118,8 +125,7 @@ private:
devcb2_write_line m_write_nmi;
devcb2_write_line m_write_wait;
const char *m_dave_tag;
dave_device *m_dave;
required_device<dave_device> m_dave;
device_ep64_expansion_bus_card_interface *m_card;
};

View File

@ -26,14 +26,23 @@
// INTERFACE CONFIGURATION MACROS
///*************************************************************************
#define MCFG_DAVE_ADD(_tag, _clock, _irq, _program_map, _io_map) \
#define MCFG_DAVE_ADD(_tag, _clock, _program_map, _io_map) \
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") \
MCFG_SOUND_ADD(_tag, DAVE, _clock) \
MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) \
MCFG_SOUND_ROUTE(1, "rspeaker", 0.25) \
MCFG_DEVICE_ADDRESS_MAP(AS_PROGRAM, _program_map) \
MCFG_DEVICE_ADDRESS_MAP(AS_IO, _io_map) \
downcast<dave_device *>(device)->set_irq_callback(DEVCB2_##_irq);
MCFG_DEVICE_ADDRESS_MAP(AS_IO, _io_map)
#define MCFG_DAVE_IRQ_CALLBACK(_write) \
devcb = &dave_device::set_irq_wr_callback(*device, DEVCB2_##_write);
#define MCFG_DAVE_LH_CALLBACK(_write) \
devcb = &dave_device::set_lh_wr_callback(*device, DEVCB2_##_write);
#define MCFG_DAVE_RH_CALLBACK(_write) \
devcb = &dave_device::set_rh_wr_callback(*device, DEVCB2_##_write);
@ -50,11 +59,9 @@ class dave_device : public device_t,
public:
dave_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
template<class _irq> void set_irq_callback(_irq irq) { m_write_irq.set_callback(irq); }
template<class _lh, class _rh> void set_dac_callbacks(_lh lh, _rh rh) {
m_write_lh.set_callback(lh);
m_write_rh.set_callback(rh);
}
template<class _Object> static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<dave_device &>(device).m_write_irq.set_callback(object); }
template<class _Object> static devcb2_base &set_lh_wr_callback(device_t &device, _Object object) { return downcast<dave_device &>(device).m_write_lh.set_callback(object); }
template<class _Object> static devcb2_base &set_rh_wr_callback(device_t &device, _Object object) { return downcast<dave_device &>(device).m_write_rh.set_callback(object); }
virtual DECLARE_ADDRESS_MAP(z80_program_map, 8);
virtual DECLARE_ADDRESS_MAP(z80_io_map, 8);

View File

@ -525,18 +525,22 @@ static MACHINE_CONFIG_START( ep64, ep64_state )
MCFG_CPU_IO_MAP(ep64_io)
// video hardware
MCFG_NICK_ADD(NICK_TAG, SCREEN_TAG, XTAL_8MHz, DEVWRITELINE(DAVE_TAG, dave_device, int1_w))
MCFG_NICK_ADD(NICK_TAG, SCREEN_TAG, XTAL_8MHz)
MCFG_NICK_VIRQ_CALLBACK(DEVWRITELINE(DAVE_TAG, dave_device, int1_w))
// sound hardware
MCFG_DAVE_ADD(DAVE_TAG, XTAL_8MHz, INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0), dave_64k_mem, dave_io)
MCFG_DAVE_ADD(DAVE_TAG, XTAL_8MHz, dave_64k_mem, dave_io)
MCFG_DAVE_IRQ_CALLBACK(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
// devices
MCFG_EP64_EXPANSION_BUS_SLOT_ADD(EP64_EXPANSION_BUS_TAG, DAVE_TAG, NULL)
MCFG_EP64_EXPANSION_BUS_CALLBACKS(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0), INPUTLINE(Z80_TAG, INPUT_LINE_NMI), INPUTLINE(Z80_TAG, Z80_INPUT_LINE_WAIT))
MCFG_EP64_EXPANSION_BUS_SLOT_ADD(EP64_EXPANSION_BUS_TAG, NULL)
MCFG_EP64_EXPANSION_BUS_SLOT_DAVE(DAVE_TAG)
MCFG_EP64_EXPANSION_BUS_SLOT_IRQ_CALLBACK(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
MCFG_EP64_EXPANSION_BUS_SLOT_NMI_CALLBACK(INPUTLINE(Z80_TAG, INPUT_LINE_NMI))
MCFG_EP64_EXPANSION_BUS_SLOT_WAIT_CALLBACK(INPUTLINE(Z80_TAG, Z80_INPUT_LINE_WAIT))
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "image")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(ep64_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)

View File

@ -22,7 +22,7 @@
// INTERFACE CONFIGURATION MACROS
///*************************************************************************
#define MCFG_NICK_ADD(_tag, _screen_tag, _clock, _virq) \
#define MCFG_NICK_ADD(_tag, _screen_tag, _clock) \
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
MCFG_SCREEN_REFRESH_RATE(50) \
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
@ -30,8 +30,11 @@
MCFG_SCREEN_VISIBLE_AREA(0, ENTERPRISE_SCREEN_WIDTH-1, 0, ENTERPRISE_SCREEN_HEIGHT-1) \
MCFG_SCREEN_UPDATE_DEVICE(_tag, nick_device, screen_update) \
MCFG_DEVICE_ADD(_tag, NICK, _clock) \
MCFG_VIDEO_SET_SCREEN(_screen_tag) \
downcast<nick_device *>(device)->set_virq_callback(DEVCB2_##_virq);
MCFG_VIDEO_SET_SCREEN(_screen_tag)
#define MCFG_NICK_VIRQ_CALLBACK(_write) \
devcb = &nick_device::set_virq_wr_callback(*device, DEVCB2_##_write);
/* there are 64us per line, although in reality
@ -73,7 +76,7 @@ public:
// construction/destruction
nick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
template<class _virq> void set_virq_callback(_virq virq) { m_write_virq.set_callback(virq); }
template<class _Object> static devcb2_base &set_virq_wr_callback(device_t &device, _Object object) { return downcast<nick_device &>(device).m_write_virq.set_callback(object); }
virtual DECLARE_ADDRESS_MAP(vram_map, 8);
virtual DECLARE_ADDRESS_MAP(vio_map, 8);