diff options
Diffstat (limited to 'src/devices/machine/i8214.cpp')
-rw-r--r-- | src/devices/machine/i8214.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/devices/machine/i8214.cpp b/src/devices/machine/i8214.cpp index 4eb767d9396..fa511e32963 100644 --- a/src/devices/machine/i8214.cpp +++ b/src/devices/machine/i8214.cpp @@ -40,7 +40,8 @@ void i8214_device::trigger_interrupt(int level) // set interrupt line m_write_int(ASSERT_LINE); - m_write_int(CLEAR_LINE); + if (!m_int_dis_hack) + m_write_int(CLEAR_LINE); // TODO: wait one clock cycle to clear } @@ -52,7 +53,12 @@ void i8214_device::check_interrupt() { if (m_int_dis) { - LOG("not checking interrupts because m_int_dis\n"); + LOG("not checking interrupts because m_int_dis (%02x)\n", m_r); + if (m_int_dis_hack && m_r == 0xff) + { + m_int_dis = 0; + m_write_int(CLEAR_LINE); + } return; } if (!m_etlg) @@ -89,6 +95,12 @@ void i8214_device::check_interrupt() } } } + + if (m_int_dis_hack) + { + m_int_dis = 0; + m_write_int(CLEAR_LINE); + } } @@ -105,6 +117,7 @@ i8214_device::i8214_device(const machine_config &mconfig, const char *tag, devic : device_t(mconfig, I8214, tag, owner, clock) , m_write_int(*this) , m_write_enlg(*this) + , m_int_dis_hack(false) , m_inte(0) , m_int_dis(0) , m_a(0) @@ -122,10 +135,6 @@ i8214_device::i8214_device(const machine_config &mconfig, const char *tag, devic void i8214_device::device_start() { - // resolve callbacks - m_write_int.resolve_safe(); - m_write_enlg.resolve_safe(); - m_int_dis = 0; m_etlg = 1; |