diff options
Diffstat (limited to 'src/devices/bus/cbmiec/cbmiec.h')
-rw-r--r-- | src/devices/bus/cbmiec/cbmiec.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/devices/bus/cbmiec/cbmiec.h b/src/devices/bus/cbmiec/cbmiec.h index ceb03d44948..4977bfc97be 100644 --- a/src/devices/bus/cbmiec/cbmiec.h +++ b/src/devices/bus/cbmiec/cbmiec.h @@ -21,6 +21,46 @@ #define CBM_IEC_TAG "iec_bus" + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_CBM_IEC_BUS_ADD() \ + MCFG_DEVICE_ADD(CBM_IEC_TAG, CBM_IEC, 0) + + +#define MCFG_CBM_IEC_BUS_SRQ_CALLBACK(_write) \ + downcast<cbm_iec_device *>(device)->set_srq_callback(DEVCB_##_write); + +#define MCFG_CBM_IEC_BUS_ATN_CALLBACK(_write) \ + downcast<cbm_iec_device *>(device)->set_atn_callback(DEVCB_##_write); + +#define MCFG_CBM_IEC_BUS_CLK_CALLBACK(_write) \ + downcast<cbm_iec_device *>(device)->set_clk_callback(DEVCB_##_write); + +#define MCFG_CBM_IEC_BUS_DATA_CALLBACK(_write) \ + downcast<cbm_iec_device *>(device)->set_data_callback(DEVCB_##_write); + +#define MCFG_CBM_IEC_BUS_RESET_CALLBACK(_write) \ + downcast<cbm_iec_device *>(device)->set_reset_callback(DEVCB_##_write); + + +#define MCFG_CBM_IEC_SLOT_ADD(_tag, _address, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, CBM_IEC_SLOT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ + downcast<cbm_iec_slot_device *>(device)->set_address(_address); + + +#define MCFG_CBM_IEC_ADD(_default_drive) \ + MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, nullptr) \ + MCFG_CBM_IEC_SLOT_ADD("iec8", 8, cbm_iec_devices, _default_drive) \ + MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, nullptr) \ + MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, nullptr) \ + MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, nullptr) \ + MCFG_CBM_IEC_BUS_ADD() + + void cbm_iec_devices(device_slot_interface &device); //************************************************************************** @@ -38,6 +78,11 @@ public: // construction/destruction cbm_iec_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template <class Object> devcb_base &set_srq_callback(Object &&wr) { return m_write_srq.set_callback(std::forward<Object>(wr)); } + template <class Object> devcb_base &set_atn_callback(Object &&wr) { return m_write_atn.set_callback(std::forward<Object>(wr)); } + template <class Object> devcb_base &set_clk_callback(Object &&wr) { return m_write_clk.set_callback(std::forward<Object>(wr)); } + template <class Object> devcb_base &set_data_callback(Object &&wr) { return m_write_data.set_callback(std::forward<Object>(wr)); } + template <class Object> devcb_base &set_reset_callback(Object &&wr) { return m_write_reset.set_callback(std::forward<Object>(wr)); } auto srq_callback() { return m_write_srq.bind(); } auto atn_callback() { return m_write_atn.bind(); } auto clk_callback() { return m_write_clk.bind(); } |