summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/nubus/nubus.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/nubus/nubus.h')
-rw-r--r--src/devices/bus/nubus/nubus.h52
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()