Skip to content

Commit

Permalink
GBA IO: Fix regression breaking keyCallbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
endrift committed Feb 26, 2020
1 parent 03d85b4 commit 32a515e
Showing 1 changed file with 18 additions and 20 deletions.
38 changes: 18 additions & 20 deletions src/gba/io.c
Expand Up @@ -723,38 +723,36 @@ uint16_t GBAIORead(struct GBA* gba, uint32_t address) {
GBATimerUpdateRegister(gba, 3, 2);
break;

case REG_KEYINPUT:
{
case REG_KEYINPUT: {
size_t c;
for (c = 0; c < mCoreCallbacksListSize(&gba->coreCallbacks); ++c) {
struct mCoreCallbacks* callbacks = mCoreCallbacksListGetPointer(&gba->coreCallbacks, c);
if (callbacks->keysRead) {
callbacks->keysRead(callbacks->context);
}
}
}
uint16_t input = 0;
if (gba->keyCallback) {
input = gba->keyCallback->readKeys(gba->keyCallback);
if (gba->keySource) {
*gba->keySource = input;
}
} else if (gba->keySource) {
input = *gba->keySource;
if (!gba->allowOpposingDirections) {
unsigned rl = input & 0x030;
unsigned ud = input & 0x0C0;
input &= 0x30F;
if (rl != 0x030) {
input |= rl;
uint16_t input = 0;
if (gba->keyCallback) {
input = gba->keyCallback->readKeys(gba->keyCallback);
if (gba->keySource) {
*gba->keySource = input;
}
if (ud != 0x0C0) {
input |= ud;
} else if (gba->keySource) {
input = *gba->keySource;
if (!gba->allowOpposingDirections) {
unsigned rl = input & 0x030;
unsigned ud = input & 0x0C0;
input &= 0x30F;
if (rl != 0x030) {
input |= rl;
}
if (ud != 0x0C0) {
input |= ud;
}
}
}
return 0x3FF ^ input;
}

case REG_SIOCNT:
return gba->sio.siocnt;
case REG_RCNT:
Expand Down

0 comments on commit 32a515e

Please sign in to comment.