From 32d42de3674f365a965780be88ea7bac3635f72c Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Tue, 24 May 2016 18:52:16 +0300 Subject: [PATCH] Force-finished blitter interrupt state restore. --- blitter.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/blitter.cpp b/blitter.cpp index 4c8ab2c7..08b5d63e 100644 --- a/blitter.cpp +++ b/blitter.cpp @@ -1103,6 +1103,15 @@ void decide_blitter (int hpos) { int hsync = hpos < 0; + if (hsync && blt_delayed_irq) { + if (blt_delayed_irq > 0) + blt_delayed_irq--; + if (blt_delayed_irq <= 0) { + blt_delayed_irq = 0; + send_interrupt(6, 2 * CYCLE_UNIT); + } + } + if (immediate_blits) { if (bltstate == BLT_done) return; @@ -1114,12 +1123,6 @@ void decide_blitter (int hpos) if (blit_startcycles > 0) do_startcycles (hpos); - if (blt_delayed_irq > 0 && hsync) { - blt_delayed_irq--; - if (!blt_delayed_irq) - send_interrupt (6, 2 * CYCLE_UNIT); - } - if (bltstate == BLT_done) return; @@ -1784,7 +1787,7 @@ void restore_blitter_finish (void) if (blt_delayed_irq < 0) { if (intreq & 0x0040) blt_delayed_irq = 3; - intreq &= 0x0040; + intreq &= ~0x0040; } } else { last_blitter_hpos = 0; -- 2.47.3