summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/z80/z80daisy_generic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/z80/z80daisy_generic.cpp')
-rw-r--r--src/devices/cpu/z80/z80daisy_generic.cpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/devices/cpu/z80/z80daisy_generic.cpp b/src/devices/cpu/z80/z80daisy_generic.cpp
new file mode 100644
index 00000000000..59168b072a0
--- /dev/null
+++ b/src/devices/cpu/z80/z80daisy_generic.cpp
@@ -0,0 +1,102 @@
+// license: BSD-3-Clause
+// copyright-holders: Dirk Best
+/***************************************************************************
+
+ Generic Z80 daisy chain device
+
+***************************************************************************/
+
+#include "emu.h"
+#include "z80daisy_generic.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(Z80DAISY_GENERIC, z80daisy_generic_device, "z80daisy_generic", "Generic Z80 daisy chain device")
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// z80daisy_generic_device - constructor
+//-------------------------------------------------
+
+z80daisy_generic_device::z80daisy_generic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, Z80DAISY_GENERIC, tag, owner, clock),
+ device_z80daisy_interface(mconfig, *this),
+ m_int(0), m_mask(0), m_vector(0xff)
+{
+}
+
+//-------------------------------------------------
+// static_set_vector - static configuration
+//-------------------------------------------------
+
+void z80daisy_generic_device::static_set_vector(device_t &device, uint8_t vector)
+{
+ z80daisy_generic_device &dev = downcast<z80daisy_generic_device &>(device);
+ dev.m_vector = vector;
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void z80daisy_generic_device::device_start()
+{
+ // register for save states
+ save_item(NAME(m_int));
+ save_item(NAME(m_mask));
+ save_item(NAME(m_vector));
+}
+
+//-------------------------------------------------
+// z80daisy_irq_state - return the overall IRQ
+// state for this device
+//-------------------------------------------------
+
+int z80daisy_generic_device::z80daisy_irq_state()
+{
+ if (m_int & ~m_mask)
+ return Z80_DAISY_INT;
+
+ return 0;
+}
+
+//-------------------------------------------------
+// z80daisy_irq_ack - acknowledge an IRQ and
+// return the appropriate vector
+//-------------------------------------------------
+
+int z80daisy_generic_device::z80daisy_irq_ack()
+{
+ return m_vector;
+}
+
+//-------------------------------------------------
+// z80daisy_irq_reti - clear the interrupt
+// pending state to allow other interrupts through
+//-------------------------------------------------
+
+void z80daisy_generic_device::z80daisy_irq_reti()
+{
+}
+
+
+//**************************************************************************
+// INTERFACE
+//**************************************************************************
+
+WRITE_LINE_MEMBER( z80daisy_generic_device::int_w )
+{
+ m_int = state;
+}
+
+WRITE_LINE_MEMBER( z80daisy_generic_device::mask_w )
+{
+ m_mask = state;
+}