From aa0f988daa2319272e3d6816b75ebf66896c6f32 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 24 Jun 2018 16:26:47 -0700 Subject: [PATCH] GB, GBA: Fix interrupted cores from restarting early --- src/gb/gb.c | 8 ++++---- src/gba/gba.c | 9 ++++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/gb/gb.c b/src/gb/gb.c index 859c1119f..d308dc977 100644 --- a/src/gb/gb.c +++ b/src/gb/gb.c @@ -644,17 +644,17 @@ void GBProcessEvents(struct LR35902Core* cpu) { } while (gb->cpuBlocked); cpu->nextEvent = nextEvent; - if (gb->earlyExit) { - gb->earlyExit = false; - break; - } if (cpu->halted) { cpu->cycles = cpu->nextEvent; if (!gb->memory.ie || !gb->memory.ime) { break; } } + if (gb->earlyExit) { + break; + } } while (cpu->cycles >= cpu->nextEvent); + gb->earlyExit = false; } void GBSetInterrupts(struct LR35902Core* cpu, bool enable) { diff --git a/src/gba/gba.c b/src/gba/gba.c index 48f8ee2af..13dceff92 100644 --- a/src/gba/gba.c +++ b/src/gba/gba.c @@ -264,11 +264,6 @@ static void GBAProcessEvents(struct ARMCore* cpu) { } while (gba->cpuBlocked); cpu->nextEvent = nextEvent; - - if (gba->earlyExit) { - gba->earlyExit = false; - break; - } if (cpu->halted) { cpu->cycles = nextEvent; if (!gba->memory.io[REG_IME >> 1] || !gba->memory.io[REG_IE >> 1]) { @@ -280,7 +275,11 @@ static void GBAProcessEvents(struct ARMCore* cpu) { mLOG(GBA, FATAL, "Negative cycles will pass: %i", nextEvent); } #endif + if (gba->earlyExit) { + break; + } } + gba->earlyExit = false; #ifndef NDEBUG if (gba->cpuBlocked) { mLOG(GBA, FATAL, "CPU is blocked!");