It necessary to call mos6522_update_irq() when the interrupt flags change and unnecessary when they haven't.
Signed-off-by: Finn Thain <fth...@linux-m68k.org> Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- hw/misc/mos6522.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 6bd60f2118..bfe1719b18 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -203,10 +203,12 @@ uint64_t mos6522_read(void *opaque, hwaddr addr, unsigned size) if (now >= s->timers[0].next_irq_time) { mos6522_timer1_update(s, &s->timers[0], now); s->ifr |= T1_INT; + mos6522_update_irq(s); } if (now >= s->timers[1].next_irq_time) { mos6522_timer2_update(s, &s->timers[1], now); s->ifr |= T2_INT; + mos6522_update_irq(s); } switch (addr) { case VIA_REG_B: @@ -231,7 +233,6 @@ uint64_t mos6522_read(void *opaque, hwaddr addr, unsigned size) break; case VIA_REG_T1CH: val = get_counter(s, &s->timers[0]) >> 8; - mos6522_update_irq(s); break; case VIA_REG_T1LL: val = s->timers[0].latch & 0xff; -- 2.26.3