diff --git a/src/devices/cpu/m6800/m6801.cpp b/src/devices/cpu/m6800/m6801.cpp index 8e44e9c40a5..260333574a6 100644 --- a/src/devices/cpu/m6800/m6801.cpp +++ b/src/devices/cpu/m6800/m6801.cpp @@ -898,8 +898,20 @@ void hd6301x_cpu_device::increment_counter(int amount) void m6801_cpu_device::eat_cycles() { - while (m_icount > 0) - increment_counter(1); + int cycles_to_eat = std::min(int(m_timer_next - CTD), m_icount); + if (cycles_to_eat > 0) + increment_counter(cycles_to_eat); +} + +void hd6301x_cpu_device::eat_cycles() +{ + if (BIT(m_tcsr3, 4)) + { + while (m_icount > 0 && m_wai_state & (M6800_WAI | M6800_SLP)) + increment_counter(1); + } + else + m6801_cpu_device::eat_cycles(); } /* cleanup high-word of counters */ diff --git a/src/devices/cpu/m6800/m6801.h b/src/devices/cpu/m6800/m6801.h index aa1518487ff..12d618856c2 100644 --- a/src/devices/cpu/m6800/m6801.h +++ b/src/devices/cpu/m6800/m6801.h @@ -400,6 +400,7 @@ protected: virtual void check_irq2() override; virtual void set_timer_event() override; virtual void modified_counters() override; + virtual void eat_cycles() override; virtual void increment_counter(int amount) override; virtual void check_timer_event() override; virtual void cleanup_counters() override;