summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/pet/exp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/pet/exp.h')
-rw-r--r--src/devices/bus/pet/exp.h32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/devices/bus/pet/exp.h b/src/devices/bus/pet/exp.h
index 39309b65f4c..d44dcea6d19 100644
--- a/src/devices/bus/pet/exp.h
+++ b/src/devices/bus/pet/exp.h
@@ -23,6 +23,21 @@
#define PET_EXPANSION_SLOT_TAG "exp"
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_PET_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
+ MCFG_DEVICE_ADD(_tag, PET_EXPANSION_SLOT, _clock) \
+ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
+
+
+#define MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(_read, _write) \
+ downcast<pet_expansion_slot_device *>(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write);
+
+
+
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -48,13 +63,18 @@ public:
pet_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~pet_expansion_slot_device();
+ template <class Read, class Write> void set_callbacks(Read &&rd, Write &&wr) {
+ m_read_dma.set_callback(std::forward<Read>(rd));
+ m_write_dma.set_callback(std::forward<Write>(wr));
+ }
+
auto dma_read_callback() { return m_read_dma.bind(); }
auto dma_write_callback() { return m_write_dma.bind(); }
// computer interface
- int norom_r(offs_t offset, int sel);
- uint8_t read(offs_t offset, uint8_t data, int &sel);
- void write(offs_t offset, uint8_t data, int &sel);
+ int norom_r(address_space &space, offs_t offset, int sel);
+ uint8_t read(address_space &space, offs_t offset, uint8_t data, int &sel);
+ void write(address_space &space, offs_t offset, uint8_t data, int &sel);
DECLARE_READ_LINE_MEMBER( diag_r );
DECLARE_WRITE_LINE_MEMBER( irq_w );
@@ -111,9 +131,9 @@ protected:
device_pet_expansion_card_interface(const machine_config &mconfig, device_t &device);
// runtime
- virtual int pet_norom_r(offs_t offset, int sel) { return 1; }
- virtual uint8_t pet_bd_r(offs_t offset, uint8_t data, int &sel) { return data; };
- virtual void pet_bd_w(offs_t offset, uint8_t data, int &sel) { };
+ virtual int pet_norom_r(address_space &space, offs_t offset, int sel) { return 1; }
+ virtual uint8_t pet_bd_r(address_space &space, offs_t offset, uint8_t data, int &sel) { return data; };
+ virtual void pet_bd_w(address_space &space, offs_t offset, uint8_t data, int &sel) { };
virtual int pet_diag_r() { return 1; }
virtual void pet_irq_w(int state) { }