summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/devices/cpu/i86/i186.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/devices/cpu/i86/i186.cpp b/src/devices/cpu/i86/i186.cpp
index 7f64274ce6e..8312c306773 100644
--- a/src/devices/cpu/i86/i186.cpp
+++ b/src/devices/cpu/i86/i186.cpp
@@ -1258,9 +1258,9 @@ TIMER_CALLBACK_MEMBER(i80186_cpu_device::timer_elapsed)
if (which == 2)
{
- if ((m_dma[0].control & (TIMER_DRQ | ST_STOP)) == TIMER_DRQ)
+ if ((m_dma[0].control & (TIMER_DRQ | ST_STOP)) == (TIMER_DRQ | ST_STOP))
drq_callback(0);
- if ((m_dma[1].control & (TIMER_DRQ | ST_STOP)) == TIMER_DRQ)
+ if ((m_dma[1].control & (TIMER_DRQ | ST_STOP)) == (TIMER_DRQ | ST_STOP))
drq_callback(1);
if ((m_timer[0].control & 0x800c) == 0x8008)
inc_timer(0);
@@ -1308,6 +1308,10 @@ TIMER_CALLBACK_MEMBER(i80186_cpu_device::timer_elapsed)
void i80186_cpu_device::restart_timer(int which)
{
timer_state *t = &m_timer[which];
+ /* Only run timer 0,1 when not incremented via timer 2 pre-scaler */
+ if (which != 2 && (t->control & 0x800c) == 0x8008)
+ return;
+
int count = (t->control & 0x1000) ? t->maxB : t->maxA;
if (!(t->control & 4))
t->int_timer->adjust((attotime::from_hz(clock() / 8) * (count ? count : 0x10000)), which);