m6801: fix new regression with eat_cycles

This commit is contained in:
hap 2024-04-16 19:40:32 +02:00
parent 036777b70e
commit 75818fcbd3
2 changed files with 15 additions and 2 deletions

View File

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

View File

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