diff options
Diffstat (limited to 'src/devices/bus/nubus/nubus.h')
-rw-r--r-- | src/devices/bus/nubus/nubus.h | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h index a1b9496fcf8..919f989ebfb 100644 --- a/src/devices/bus/nubus/nubus.h +++ b/src/devices/bus/nubus/nubus.h @@ -14,6 +14,44 @@ #pragma once + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_NUBUS_CPU(_cputag) \ + downcast<nubus_device &>(*device).set_cputag(_cputag); + +#define MCFG_NUBUS_OUT_IRQ9_CB(_devcb) \ + downcast<nubus_device &>(*device).set_out_irq9_callback(DEVCB_##_devcb); + +#define MCFG_NUBUS_OUT_IRQA_CB(_devcb) \ + downcast<nubus_device &>(*device).set_out_irqa_callback(DEVCB_##_devcb); + +#define MCFG_NUBUS_OUT_IRQB_CB(_devcb) \ + downcast<nubus_device &>(*device).set_out_irqb_callback(DEVCB_##_devcb); + +#define MCFG_NUBUS_OUT_IRQC_CB(_devcb) \ + downcast<nubus_device &>(*device).set_out_irqc_callback(DEVCB_##_devcb); + +#define MCFG_NUBUS_OUT_IRQD_CB(_devcb) \ + downcast<nubus_device &>(*device).set_out_irqd_callback(DEVCB_##_devcb); + +#define MCFG_NUBUS_OUT_IRQE_CB(_devcb) \ + downcast<nubus_device &>(*device).set_out_irqe_callback(DEVCB_##_devcb); + +#define MCFG_NUBUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, NUBUS_SLOT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ + downcast<nubus_slot_device &>(*device).set_nubus_slot(_nbtag, _tag); +#define MCFG_NUBUS_SLOT_REMOVE(_tag) \ + MCFG_DEVICE_REMOVE(_tag) + +#define MCFG_NUBUS_ONBOARD_ADD(_nbtag, _tag, _dev_type, _def_inp) \ + MCFG_DEVICE_ADD(_tag, _dev_type, 0) \ + MCFG_DEVICE_INPUT_DEFAULTS(_def_inp) \ + downcast<device_nubus_card_interface &>(*device).set_nubus_tag(_nbtag, _tag); + //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -62,7 +100,13 @@ public: ~nubus_device() { m_device_list.detach_all(); } // inline configuration - template <typename T> void set_space(T &&tag, int spacenum) { m_space.set_tag(std::forward<T>(tag), spacenum); } + void set_cputag(const char *tag) { m_cputag = tag; } + template <class Object> devcb_base &set_out_irq9_callback(Object &&cb) { return m_out_irq9_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_out_irqa_callback(Object &&cb) { return m_out_irqa_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_out_irqb_callback(Object &&cb) { return m_out_irqb_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_out_irqc_callback(Object &&cb) { return m_out_irqc_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_out_irqd_callback(Object &&cb) { return m_out_irqd_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_out_irqe_callback(Object &&cb) { return m_out_irqe_cb.set_callback(std::forward<Object>(cb)); } auto out_irq9_callback() { return m_out_irq9_cb.bind(); } auto out_irqa_callback() { return m_out_irqa_cb.bind(); } auto out_irqb_callback() { return m_out_irqb_cb.bind(); } @@ -90,11 +134,11 @@ protected: nubus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_resolve_objects() override; virtual void device_start() override; + virtual void device_reset() override; // internal state - required_address_space m_space; + cpu_device *m_maincpu; devcb_write_line m_out_irq9_cb; devcb_write_line m_out_irqa_cb; @@ -104,6 +148,7 @@ protected: devcb_write_line m_out_irqe_cb; simple_list<device_nubus_card_interface> m_device_list; + const char *m_cputag; }; |