From d8bee5d34bf4f5a44b7eff4c57948b03154531c0 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sat, 1 Nov 2014 14:40:13 -0700 Subject: [PATCH] GBA Memory: Return misaligned addresses from LDM/STM --- src/gba/gba-memory.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gba/gba-memory.c b/src/gba/gba-memory.c index 2b817ab50..9a6281daf 100644 --- a/src/gba/gba-memory.c +++ b/src/gba/gba-memory.c @@ -676,6 +676,7 @@ uint32_t GBALoadMultiple(struct ARMCore* cpu, uint32_t address, int mask, enum L address += offset; } + uint32_t addressMisalign = address & 0x3; address &= 0xFFFFFFFC; switch (address >> BASE_OFFSET) { @@ -744,7 +745,7 @@ uint32_t GBALoadMultiple(struct ARMCore* cpu, uint32_t address, int mask, enum L address -= (popcount << 2) + 4; } - return address; + return address | addressMisalign; } #define STM_LOOP_BEGIN \ @@ -780,6 +781,7 @@ uint32_t GBAStoreMultiple(struct ARMCore* cpu, uint32_t address, int mask, enum address += offset; } + uint32_t addressMisalign = address & 0x3; address &= 0xFFFFFFFC; switch (address >> BASE_OFFSET) { @@ -848,7 +850,7 @@ uint32_t GBAStoreMultiple(struct ARMCore* cpu, uint32_t address, int mask, enum address -= (popcount << 2) + 4; } - return address; + return address | addressMisalign; } void GBAAdjustWaitstates(struct GBA* gba, uint16_t parameters) {