From 72ef1643c7807e222b1c82018179c10670d668e0 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sat, 26 Oct 2013 16:40:31 -0700 Subject: [PATCH] Rotate 16-bit without using AND --- src/gba/gba-memory.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gba/gba-memory.c b/src/gba/gba-memory.c index eb3cff2c6..713536538 100644 --- a/src/gba/gba-memory.c +++ b/src/gba/gba-memory.c @@ -194,7 +194,7 @@ uint16_t GBALoadU16(struct ARMMemory* memory, uint32_t address, int* cycleCounte int16_t GBALoad16(struct ARMMemory* memory, uint32_t address, int* cycleCounter) { struct GBAMemory* gbaMemory = (struct GBAMemory*) memory; - int16_t value = 0; + uint16_t value = 0; int wait = 0; switch (address & ~OFFSET_MASK) { @@ -260,7 +260,7 @@ int16_t GBALoad16(struct ARMMemory* memory, uint32_t address, int* cycleCounter) } // 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); + return (value >> rotate) | (value << (16 - rotate)); } uint8_t GBALoadU8(struct ARMMemory* memory, uint32_t address, int* cycleCounter) {