diff options
Diffstat (limited to 'src/devices/bus/cpc/cpcexp.h')
-rw-r--r-- | src/devices/bus/cpc/cpcexp.h | 51 |
1 files changed, 21 insertions, 30 deletions
diff --git a/src/devices/bus/cpc/cpcexp.h b/src/devices/bus/cpc/cpcexp.h index e24c0b99d1c..51796dc7edd 100644 --- a/src/devices/bus/cpc/cpcexp.h +++ b/src/devices/bus/cpc/cpcexp.h @@ -50,31 +50,6 @@ //************************************************************************** -// CONSTANTS -//************************************************************************** - -#define CPC_EXP_SLOT_TAG "cpcexp" - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(_devcb) \ - downcast<cpc_expansion_slot_device &>(*device).set_out_irq_callback(DEVCB_##_devcb); - -#define MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(_devcb) \ - downcast<cpc_expansion_slot_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb); - -#define MCFG_CPC_EXPANSION_SLOT_OUT_RESET_CB(_devcb) \ - downcast<cpc_expansion_slot_device &>(*device).set_out_reset_callback(DEVCB_##_devcb); - -#define MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(_devcb) \ - downcast<cpc_expansion_slot_device &>(*device).set_out_romdis_callback(DEVCB_##_devcb); - -#define MCFG_CPC_EXPANSION_SLOT_ROM_SELECT(_devcb) \ - downcast<cpc_expansion_slot_device &>(*device).set_out_rom_select_callback(DEVCB_##_devcb); - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -119,13 +94,24 @@ class cpc_expansion_slot_device : public device_t, public: // construction/destruction cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template <typename T> + cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&opts, const char *dflt) + : cpc_expansion_slot_device(mconfig, tag, owner, clock) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } virtual ~cpc_expansion_slot_device(); - template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_out_reset_callback(Object &&cb) { return m_out_reset_cb.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_out_romdis_callback(Object &&cb) { return m_out_romdis_cb.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_out_rom_select_callback(Object &&cb) { return m_out_rom_select.set_callback(std::forward<Object>(cb)); } + template <class Object> void set_cpu_tag(Object &&tag) { m_cpu.set_tag(std::forward<Object>(tag)); } + + auto irq_callback() { return m_out_irq_cb.bind(); } + auto nmi_callback() { return m_out_nmi_cb.bind(); } + auto reset_callback() { return m_out_reset_cb.bind(); } + auto romdis_callback() { return m_out_romdis_cb.bind(); } + auto rom_select_callback() { return m_out_rom_select.bind(); } DECLARE_WRITE_LINE_MEMBER( irq_w ); DECLARE_WRITE_LINE_MEMBER( nmi_w ); @@ -138,11 +124,16 @@ public: DECLARE_WRITE_LINE_MEMBER( cursor_w ) { if(m_card) m_card->cursor_w(state); } // pass on CRTC Cursor signal DECLARE_WRITE_LINE_MEMBER( romen_w ) { if(m_card) m_card->romen_w(state); } // pass on /ROMEN signal + cpu_device &cpu() const { return *m_cpu; } + protected: // device-level overrides + virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; + required_device<cpu_device> m_cpu; + devcb_write_line m_out_irq_cb; devcb_write_line m_out_nmi_cb; devcb_write_line m_out_reset_cb; |