summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2020-08-22 15:48:53 +0300
committer Curt Coder <curtcoder@mail.com>2020-08-22 15:48:53 +0300
commitf85348e97789d71dea86f65ec221773973a701eb (patch)
tree356b21b9ea7ef982a4926d421c709912edf7bd35
parentbb1670b623d41dd8f8bad21830957b25bc0ca0ca (diff)
z80dma: Added IEO callback. [Curt Coder]
-rw-r--r--src/devices/machine/z80dma.cpp4
-rw-r--r--src/devices/machine/z80dma.h4
2 files changed, 8 insertions, 0 deletions
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