all repos — mgba @ 6a223ccd3f09099d6651fc0dce92cf159c2c7006

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

6a223ccd3f09099d6651fc0dce92cf159c2c7006

parent

e6f81b0385cd63c91ead8231684d7d2a391eae18

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

jump to
M CHANGESCHANGES

@@ -25,6 +25,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: - Qt: Don't rebuild library view if style hasn't changed - SDL: Fix 2.0.5 build on macOS under some circumstances
M src/gba/core.csrc/gba/core.c

@@ -489,7 +489,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

@@ -695,19 +695,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); } }