all repos — mgba @ 1bc6c13e6bbf341953530f49ec2bc9ce3428bca5

mGBA Game Boy Advance Emulator

GBA: Fix keypad IRQs not firing when extra buttons are pressed
Vicki Pfau vi@endrift.com
Sun, 17 Sep 2017 16:46:10 -0700
commit

1bc6c13e6bbf341953530f49ec2bc9ce3428bca5

parent

8d1b41f6952d561165fc7033239f4a99e00ec594

3 files changed, 3 insertions(+), 5 deletions(-)

jump to
M CHANGESCHANGES

@@ -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.csrc/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.csrc/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); } }