GBA: Fix keypad IRQs not firing when extra buttons are pressed
Vicki Pfau vi@endrift.com
Sun, 17 Sep 2017 16:46:10 -0700
3 files changed,
3 insertions(+),
5 deletions(-)
M
CHANGES
→
CHANGES
@@ -39,6 +39,7 @@ - GB Audio: Fix NRx2 writes while active (fixes mgba.io/i/866)
- GBA BIOS: Use core's VRAM variable instead of renderer's - GBA Savedata: Fix 512 byte EEPROM saving as 8kB (fixes mgba.io/i/877) - SDL: Fix potential race condition when pressing keys (fixes mgba.io/i/872) + - GBA: Fix keypad IRQs not firing when extra buttons are pressed Misc: - GBA Timer: Use global cycles for timers - GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722)
M
src/gba/core.c
→
src/gba/core.c
@@ -491,7 +491,6 @@
static void _GBACoreClearKeys(struct mCore* core, uint32_t keys) { struct GBACore* gbacore = (struct GBACore*) core; gbacore->keys &= ~keys; - GBATestKeypadIRQ(core->board); } static int32_t _GBACoreFrameCounter(const struct mCore* core) {
M
src/gba/gba.c
→
src/gba/gba.c
@@ -755,19 +755,17 @@ if (!(keycnt & 0x4000)) {
return; } int isAnd = keycnt & 0x8000; - uint16_t keyInput; - if (!gba->keySource) { // TODO? return; } keycnt &= 0x3FF; - keyInput = *gba->keySource; + uint16_t keyInput = *gba->keySource & keycnt; if (isAnd && keycnt == keyInput) { GBARaiseIRQ(gba, IRQ_KEYPAD); - } else if (!isAnd && keycnt & keyInput) { + } else if (!isAnd && keyInput) { GBARaiseIRQ(gba, IRQ_KEYPAD); } }