z80dma: Added IEO callback. [Curt Coder]

This commit is contained in:
Curt Coder 2020-08-22 15:48:53 +03:00
parent bb1670b623
commit f85348e977
2 changed files with 8 additions and 0 deletions

View File

@ -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);
}

View File

@ -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