diff options
Diffstat (limited to 'src/devices/bus/nubus/nubus.h')
-rw-r--r-- | src/devices/bus/nubus/nubus.h | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h index 2fc5f048e67..68ba2aca96a 100644 --- a/src/devices/bus/nubus/nubus.h +++ b/src/devices/bus/nubus/nubus.h @@ -13,6 +13,10 @@ #pragma once +#include <functional> +#include <utility> +#include <vector> + //************************************************************************** // TYPE DEFINITIONS @@ -26,18 +30,14 @@ class nubus_device; class device_nubus_card_interface : public device_interface { friend class nubus_device; - template <class ElementType> friend class simple_list; public: // construction/destruction virtual ~device_nubus_card_interface(); - device_nubus_card_interface *next() const { return m_next; } - - void set_nubus_device(); - // helper functions for card devices - void install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb = false, bool reverse_rom = false); - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); + void install_declaration_rom(const char *romregion, bool mirror_all_mb = false, bool reverse_rom = false); + void install_bank(offs_t start, offs_t end, void *data); + void install_view(offs_t start, offs_t end, memory_view &view); uint32_t get_slotspace() { return 0xf0000000 | (m_slot<<24); } uint32_t get_super_slotspace() { return m_slot<<28; } @@ -45,6 +45,8 @@ public: void raise_slot_irq(); void lower_slot_irq(); + void set_pds_slot(int slot) { m_slot = slot; } + // inline configuration void set_nubus_tag(nubus_device *nubus, const char *slottag) { m_nubus = nubus; m_nubus_slottag = slottag; } @@ -60,7 +62,6 @@ private: const char *m_nubus_slottag; int m_slot; std::vector<uint8_t> m_declaration_rom; - device_nubus_card_interface *m_next; }; class nubus_slot_device : public device_t, public device_single_card_slot_interface<device_nubus_card_interface> @@ -90,7 +91,7 @@ public: protected: nubus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides + // device_t implementation virtual void device_resolve_objects() override; virtual void device_start() override; @@ -110,7 +111,7 @@ class nubus_device : public device_t public: // construction/destruction nubus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - ~nubus_device() { m_device_list.detach_all(); } + ~nubus_device(); // inline configuration template <typename T> void set_space(T &&tag, int spacenum) { m_space.set_tag(std::forward<T>(tag), spacenum); } @@ -121,25 +122,26 @@ public: auto out_irqd_callback() { return m_out_irqd_cb.bind(); } auto out_irqe_callback() { return m_out_irqe_cb.bind(); } - void add_nubus_card(device_nubus_card_interface *card); - template<typename R, typename W> void install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask=0xffffffff); - void install_readonly_device(offs_t start, offs_t end, read32_delegate rhandler, uint32_t mask=0xffffffff); - void install_writeonly_device(offs_t start, offs_t end, write32_delegate whandler, uint32_t mask=0xffffffff); - void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data); + void add_nubus_card(device_nubus_card_interface &card); + template <typename R, typename W> void install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask=0xffffffff); + template <typename R> void install_readonly_device(offs_t start, offs_t end, R rhandler, uint32_t mask=0xffffffff); + template <typename W> void install_writeonly_device(offs_t start, offs_t end, W whandler, uint32_t mask=0xffffffff); + void install_bank(offs_t start, offs_t end, void *data); + void install_view(offs_t start, offs_t end, memory_view &view); void set_irq_line(int slot, int state); + void set_address_mask(uint32_t mask) { m_addr_mask = mask; } - DECLARE_WRITE_LINE_MEMBER( irq9_w ); - DECLARE_WRITE_LINE_MEMBER( irqa_w ); - DECLARE_WRITE_LINE_MEMBER( irqb_w ); - DECLARE_WRITE_LINE_MEMBER( irqc_w ); - DECLARE_WRITE_LINE_MEMBER( irqd_w ); - DECLARE_WRITE_LINE_MEMBER( irqe_w ); + void irq9_w(int state); + void irqa_w(int state); + void irqb_w(int state); + void irqc_w(int state); + void irqd_w(int state); + void irqe_w(int state); 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; + // device_t implementation virtual void device_start() override; // internal state @@ -152,7 +154,9 @@ protected: devcb_write_line m_out_irqd_cb; devcb_write_line m_out_irqe_cb; - simple_list<device_nubus_card_interface> m_device_list; + std::vector<std::reference_wrapper<device_nubus_card_interface> > m_device_list; + + uint32_t m_addr_mask; }; inline void device_nubus_card_interface::raise_slot_irq() |