Rotate 16-bit unaligned loads

This commit is contained in:
Jeffrey Pfau 2013-09-27 02:07:44 -07:00
parent f6e1e6e6d5
commit f8341f2d20
1 changed files with 3 additions and 1 deletions

View File

@ -231,7 +231,9 @@ int16_t GBALoad16(struct ARMMemory* memory, uint32_t address, int* cycleCounter)
if (cycleCounter) {
*cycleCounter += 2 + wait;
}
return value;
// Unaligned 16-bit loads are "unpredictable", but the GBA rotates them, so we have to, too.
int rotate = (address & 1) << 3;
return (value >> rotate) | ((value << rotate) & 0xFF00);
}
uint8_t GBALoadU8(struct ARMMemory* memory, uint32_t address, int* cycleCounter) {