summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/i8214.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/i8214.cpp')
-rw-r--r--src/devices/machine/i8214.cpp21
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;