summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/z80/z80daisy.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/z80/z80daisy.h')
-rw-r--r--src/emu/cpu/z80/z80daisy.h97
1 files changed, 66 insertions, 31 deletions
diff --git a/src/emu/cpu/z80/z80daisy.h b/src/emu/cpu/z80/z80daisy.h
index ad3adcfbc0d..dee7525f44d 100644
--- a/src/emu/cpu/z80/z80daisy.h
+++ b/src/emu/cpu/z80/z80daisy.h
@@ -13,56 +13,91 @@
-/***************************************************************************
- CONSTANTS
-***************************************************************************/
+//**************************************************************************
+// CONSTANTS
+//**************************************************************************
+
+// these constants are returned from the irq_state function
+const UINT8 Z80_DAISY_INT = 0x01; // interrupt request mask
+const UINT8 Z80_DAISY_IEO = 0x02; // interrupt disable mask (IEO)
+
-/* these constants are returned from the irq_state function */
-#define Z80_DAISY_INT 0x01 /* interrupt request mask */
-#define Z80_DAISY_IEO 0x02 /* interrupt disable mask (IEO) */
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
-enum
+
+// ======================> z80_daisy_config
+
+struct z80_daisy_config
{
- DEVINFO_FCT_IRQ_STATE = DEVINFO_FCT_DEVICE_SPECIFIC, /* R/O: z80_daisy_irq_state */
- DEVINFO_FCT_IRQ_ACK, /* R/O: z80_daisy_irq_ack */
- DEVINFO_FCT_IRQ_RETI /* R/O: z80_daisy_irq_reti */
+ const char * devname; // name of the device
};
-/***************************************************************************
- TYPE DEFINITIONS
-***************************************************************************/
+// ======================> device_config_z80daisy_interface
-/* per-device callback functions */
-typedef int (*z80_daisy_irq_state)(running_device *device);
-typedef int (*z80_daisy_irq_ack)(running_device *device);
-typedef int (*z80_daisy_irq_reti)(running_device *device);
+// device_config_z80daisy_interface represents configuration information for a z80daisy device
+class device_config_z80daisy_interface : public device_config_interface
+{
+public:
+ // construction/destruction
+ device_config_z80daisy_interface(const machine_config &mconfig, device_config &devconfig);
+ virtual ~device_config_z80daisy_interface();
+};
-/* opaque internal daisy chain state */
-typedef struct _z80_daisy_state z80_daisy_state;
+// ======================> device_z80daisy_interface
-/* daisy chain structure */
-typedef struct _z80_daisy_chain z80_daisy_chain;
-struct _z80_daisy_chain
+class device_z80daisy_interface : public device_interface
{
- const char * devname; /* name of the device */
+public:
+ // construction/destruction
+ device_z80daisy_interface(running_machine &machine, const device_config &config, device_t &device);
+ virtual ~device_z80daisy_interface();
+
+ // required operation overrides
+ virtual int z80daisy_irq_state() = 0;
+ virtual int z80daisy_irq_ack() = 0;
+ virtual void z80daisy_irq_reti() = 0;
+
+protected:
+ const device_config_z80daisy_interface &m_z80daisy_config;
};
-/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
+// ======================> z80_daisy_chain
-z80_daisy_state *z80daisy_init(running_device *cpudevice, const z80_daisy_chain *daisy);
+class z80_daisy_chain
+{
+public:
+ z80_daisy_chain();
+ void init(device_t *cpudevice, const z80_daisy_config *daisy);
+
+ bool present() const { return (m_daisy_list != NULL); }
+
+ void reset();
+ int update_irq_state();
+ int call_ack_device();
+ void call_reti_device();
+
+protected:
+ class daisy_entry
+ {
+ public:
+ daisy_entry(device_t *device);
+
+ daisy_entry * m_next; // next device
+ device_t * m_device; // associated device
+ device_z80daisy_interface * m_interface; // associated device's daisy interface
+ };
+
+ daisy_entry * m_daisy_list; // head of the daisy chain
+};
-void z80daisy_reset(z80_daisy_state *daisy);
-int z80daisy_update_irq_state(z80_daisy_state *chain);
-int z80daisy_call_ack_device(z80_daisy_state *chain);
-void z80daisy_call_reti_device(z80_daisy_state *chain);
#endif