diff --git a/CHANGES b/CHANGES index a27f82efd..c9e345b00 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,7 @@ Bugfixes: - GBA Memory: Don't call into GPIO write calls if GPIO devices are absent - ARM7: Extend prefetch by one stage - GBA BIOS: Fix BIOS prefetch after returning from a SWI + - Debugger: Negative PC-relative loads now properly subtract the offset Misc: - Qt: Disable sync to video by default - GBA: Exit cleanly on FATAL if the port supports it diff --git a/src/arm/decoder.c b/src/arm/decoder.c index 2c31471ec..3bf31ad7b 100644 --- a/src/arm/decoder.c +++ b/src/arm/decoder.c @@ -127,7 +127,7 @@ static int _decodeMemory(struct ARMMemoryAccess memory, int pc, char* buffer, in int written; if (memory.format & ARM_MEMORY_REGISTER_BASE) { if (memory.baseReg == ARM_PC && memory.format & ARM_MEMORY_IMMEDIATE_OFFSET) { - written = _decodePCRelative(memory.offset.immediate, pc, buffer, blen); + written = _decodePCRelative(memory.format & ARM_MEMORY_OFFSET_SUBTRACT ? -memory.offset.immediate : memory.offset.immediate, pc, buffer, blen); ADVANCE(written); } else { written = _decodeRegister(memory.baseReg, buffer, blen);