From 507fe1aad3d5b224cfbba333fe9bd73e0598d43e Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sun, 6 Nov 2016 22:22:01 -0800 Subject: [PATCH] GBA: Fix IRQs firing after already being cleared --- CHANGES | 1 + src/gba/gba.c | 2 +- src/gba/io.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 188427ac7..810fe9378 100644 --- a/CHANGES +++ b/CHANGES @@ -18,6 +18,7 @@ Bugfixes: - Qt: Only reset window dimensions when first shown - GB Memory: Fix starting HDMAs during mode 0 - Qt: Fix Qt Multimedia audio driver on big endian + - GBA: Fix IRQs firing after already being cleared Misc: - PSP2: Improved controller rumble - GB, GBA: Prevent loading null ROMs diff --git a/src/gba/gba.c b/src/gba/gba.c index 5f95bf158..549de6ca2 100644 --- a/src/gba/gba.c +++ b/src/gba/gba.c @@ -666,7 +666,7 @@ void GBARaiseIRQ(struct GBA* gba, enum GBAIRQ irq) { void GBATestIRQ(struct ARMCore* cpu) { struct GBA* gba = (struct GBA*) cpu->master; if (gba->memory.io[REG_IME >> 1] && gba->memory.io[REG_IE >> 1] & gba->memory.io[REG_IF >> 1]) { - gba->springIRQ = 1; + gba->springIRQ = gba->memory.io[REG_IE >> 1] & gba->memory.io[REG_IF >> 1]; gba->cpu->nextEvent = gba->cpu->cycles; } } diff --git a/src/gba/io.c b/src/gba/io.c index efb64616c..888d8af70 100644 --- a/src/gba/io.c +++ b/src/gba/io.c @@ -536,6 +536,7 @@ void GBAIOWrite(struct GBA* gba, uint32_t address, uint16_t value) { GBAWriteIE(gba, value); break; case REG_IF: + gba->springIRQ &= ~value; value = gba->memory.io[REG_IF >> 1] & ~value; break; case REG_IME: