diff options
Diffstat (limited to 'src/devices/bus/apricot/expansion/expansion.h')
-rw-r--r-- | src/devices/bus/apricot/expansion/expansion.h | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/devices/bus/apricot/expansion/expansion.h b/src/devices/bus/apricot/expansion/expansion.h index 85b0e47dc5e..93c529f24e3 100644 --- a/src/devices/bus/apricot/expansion/expansion.h +++ b/src/devices/bus/apricot/expansion/expansion.h @@ -89,16 +89,14 @@ class apricot_expansion_bus_device : public device_t { public: // construction/destruction - template <typename T, typename U> - apricot_expansion_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&cpu_tag, U &&iop_tag) - : apricot_expansion_bus_device(mconfig, tag, owner, (uint32_t)0) - { - m_cpu.set_tag(std::forward<T>(cpu_tag)); - m_iop.set_tag(std::forward<U>(iop_tag)); - } apricot_expansion_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual ~apricot_expansion_bus_device(); + template <typename T> void set_program_space(T &&tag, int spacenum) { m_program.set_tag(std::forward<T>(tag), spacenum); } + template <typename T> void set_io_space(T &&tag, int spacenum) { m_io.set_tag(std::forward<T>(tag), spacenum); } + template <typename T> void set_program_iop_space(T &&tag, int spacenum) { m_program_iop.set_tag(std::forward<T>(tag), spacenum); } + template <typename T> void set_io_iop_space(T &&tag, int spacenum) { m_io_iop.set_tag(std::forward<T>(tag), spacenum); } + auto dma1() { return m_dma1_handler.bind(); } auto dma2() { return m_dma2_handler.bind(); } auto ext1() { return m_ext1_handler.bind(); } @@ -118,19 +116,26 @@ public: void install_ram(offs_t addrstart, offs_t addrend, void *baseptr); + template<typename T> void install_io_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(class address_map &map), uint64_t unitmask = ~u64(0)) + { + m_io->install_device(addrstart, addrend, device, map, unitmask); + + if (m_io_iop) + m_io_iop->install_device(addrstart, addrend, device, map, unitmask); + } + protected: // device-level overrides virtual void device_start() override; - virtual void device_reset() override; private: simple_list<device_apricot_expansion_card_interface> m_dev; // address spaces we have access to - address_space *m_program; - address_space *m_io; - address_space *m_program_iop; - address_space *m_io_iop; + required_address_space m_program; + required_address_space m_io; + optional_address_space m_program_iop; + optional_address_space m_io_iop; devcb_write_line m_dma1_handler; devcb_write_line m_dma2_handler; @@ -138,10 +143,6 @@ private: devcb_write_line m_ext2_handler; devcb_write_line m_int2_handler; devcb_write_line m_int3_handler; - - // configuration - required_device<cpu_device> m_cpu; - required_device<cpu_device> m_iop; }; // device type definition |