From 36de1d31b23d911135dfa39fa8306d3d6bb42dd1 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Wed, 19 Mar 2014 14:19:50 +0000 Subject: [PATCH] (MESS) ep64: Cleaned up devcb2. (nw) --- src/emu/bus/ep64/exp.c | 4 ++-- src/emu/bus/ep64/exp.h | 32 +++++++++++++++++++------------- src/mess/audio/dave.h | 23 +++++++++++++++-------- src/mess/drivers/ep64.c | 14 +++++++++----- src/mess/video/nick.h | 11 +++++++---- 5 files changed, 52 insertions(+), 32 deletions(-) diff --git a/src/emu/bus/ep64/exp.c b/src/emu/bus/ep64/exp.c index be7003617a7..4fa75ac94aa 100644 --- a/src/emu/bus/ep64/exp.c +++ b/src/emu/bus/ep64/exp.c @@ -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(m_owner->subdevice(m_dave_tag)); m_card = dynamic_cast(get_card_device()); // resolve callbacks diff --git a/src/emu/bus/ep64/exp.h b/src/emu/bus/ep64/exp.h index e823aa6df85..ae077f830d9 100644 --- a/src/emu/bus/ep64/exp.h +++ b/src/emu/bus/ep64/exp.h @@ -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(device)->set_dave_tag(_dave_tag); -#define MCFG_EP64_EXPANSION_BUS_CALLBACKS(_irq, _nmi, _wait) \ - downcast(device)->set_irq_callback(DEVCB2_##_irq); \ - downcast(device)->set_nmi_callback(DEVCB2_##_nmi); \ - downcast(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 void set_irq_callback(_irq irq) { m_write_irq.set_callback(irq); } - template void set_nmi_callback(_nmi nmi) { m_write_nmi.set_callback(nmi); } - template 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(device).m_dave.set_tag(tag); } + template static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_irq.set_callback(object); } + template static devcb2_base &set_nmi_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_nmi.set_callback(object); } + template static devcb2_base &set_wait_wr_callback(device_t &device, _Object object) { return downcast(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 m_dave; device_ep64_expansion_bus_card_interface *m_card; }; diff --git a/src/mess/audio/dave.h b/src/mess/audio/dave.h index 78be61b75ff..2387240fa5c 100644 --- a/src/mess/audio/dave.h +++ b/src/mess/audio/dave.h @@ -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(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 void set_irq_callback(_irq irq) { m_write_irq.set_callback(irq); } - template void set_dac_callbacks(_lh lh, _rh rh) { - m_write_lh.set_callback(lh); - m_write_rh.set_callback(rh); - } + template static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_irq.set_callback(object); } + template static devcb2_base &set_lh_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_lh.set_callback(object); } + template static devcb2_base &set_rh_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_rh.set_callback(object); } virtual DECLARE_ADDRESS_MAP(z80_program_map, 8); virtual DECLARE_ADDRESS_MAP(z80_io_map, 8); diff --git a/src/mess/drivers/ep64.c b/src/mess/drivers/ep64.c index 8ae8311217f..c71b195ff0f 100644 --- a/src/mess/drivers/ep64.c +++ b/src/mess/drivers/ep64.c @@ -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) diff --git a/src/mess/video/nick.h b/src/mess/video/nick.h index f71010cd14d..65adbe4678f 100644 --- a/src/mess/video/nick.h +++ b/src/mess/video/nick.h @@ -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(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 void set_virq_callback(_virq virq) { m_write_virq.set_callback(virq); } + template static devcb2_base &set_virq_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_virq.set_callback(object); } virtual DECLARE_ADDRESS_MAP(vram_map, 8); virtual DECLARE_ADDRESS_MAP(vio_map, 8);