From f85348e97789d71dea86f65ec221773973a701eb Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Sat, 22 Aug 2020 15:48:53 +0300 Subject: z80dma: Added IEO callback. [Curt Coder] --- src/devices/machine/z80dma.cpp | 4 ++++ src/devices/machine/z80dma.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/devices/machine/z80dma.cpp b/src/devices/machine/z80dma.cpp index 831c20e7aff..1a347cc2f24 100644 --- a/src/devices/machine/z80dma.cpp +++ b/src/devices/machine/z80dma.cpp @@ -154,6 +154,7 @@ z80dma_device::z80dma_device(const machine_config &mconfig, const char *tag, dev , device_z80daisy_interface(mconfig, *this) , m_out_busreq_cb(*this) , m_out_int_cb(*this) + , m_out_ieo_cb(*this) , m_out_bao_cb(*this) , m_in_mreq_cb(*this) , m_out_mreq_cb(*this) @@ -172,6 +173,7 @@ void z80dma_device::device_start() // resolve callbacks m_out_busreq_cb.resolve_safe(); m_out_int_cb.resolve_safe(); + m_out_ieo_cb.resolve_safe(); m_out_bao_cb.resolve_safe(); m_in_mreq_cb.resolve_safe(0); m_out_mreq_cb.resolve_safe(); @@ -189,6 +191,7 @@ void z80dma_device::device_start() save_item(NAME(m_status)); save_item(NAME(m_dma_enabled)); save_item(NAME(m_vector)); + save_item(NAME(m_iei)); save_item(NAME(m_ip)); save_item(NAME(m_ius)); save_item(NAME(m_addressA)); @@ -331,6 +334,7 @@ int z80dma_device::is_ready() void z80dma_device::interrupt_check() { m_out_int_cb(m_ip ? ASSERT_LINE : CLEAR_LINE); + m_out_ieo_cb(m_iei && !m_ip); } diff --git a/src/devices/machine/z80dma.h b/src/devices/machine/z80dma.h index ec49d9ea2b6..14725329bd0 100644 --- a/src/devices/machine/z80dma.h +++ b/src/devices/machine/z80dma.h @@ -53,6 +53,7 @@ public: auto out_busreq_callback() { return m_out_busreq_cb.bind(); } auto out_int_callback() { return m_out_int_cb.bind(); } + auto out_ieo_callback() { return m_out_ieo_cb.bind(); } auto out_bao_callback() { return m_out_bao_cb.bind(); } auto in_mreq_callback() { return m_in_mreq_cb.bind(); } auto out_mreq_callback() { return m_out_mreq_cb.bind(); } @@ -62,6 +63,7 @@ public: uint8_t read(); void write(uint8_t data); + DECLARE_WRITE_LINE_MEMBER(iei_w) { m_iei = state; interrupt_check(); } DECLARE_WRITE_LINE_MEMBER(rdy_w); DECLARE_WRITE_LINE_MEMBER(wait_w); DECLARE_WRITE_LINE_MEMBER(bai_w); @@ -94,6 +96,7 @@ private: // internal state devcb_write_line m_out_busreq_cb; devcb_write_line m_out_int_cb; + devcb_write_line m_out_ieo_cb; devcb_write_line m_out_bao_cb; devcb_read8 m_in_mreq_cb; devcb_write8 m_out_mreq_cb; @@ -125,6 +128,7 @@ private: uint8_t m_latch; // interrupts + bool m_iei; int m_ip; // interrupt pending int m_ius; // interrupt under service uint8_t m_vector; // interrupt vector -- cgit v1.2.3