GB, GBA: Fix interrupted cores from restarting early

This commit is contained in:
Vicki Pfau 2018-06-24 16:26:47 -07:00
parent e78333611d
commit aa0f988daa
2 changed files with 8 additions and 9 deletions

View File

@ -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) {

View File

@ -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!");