From beab088139df1e7ebb09af94b31036e72b0f13db Mon Sep 17 00:00:00 2001 From: Fabrice de Gans Date: Fri, 10 Nov 2023 15:42:49 -0800 Subject: [PATCH] Store the PC register at the appropriate offset In ARM mode, the GBA CPU stores the PC (r15) register with an offset of 4. This was not handled correctly by the core emulator. Fixes #1200 --- src/gba/GBA-arm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gba/GBA-arm.cpp b/src/gba/GBA-arm.cpp index 656d5df0..af964c7f 100644 --- a/src/gba/GBA-arm.cpp +++ b/src/gba/GBA-arm.cpp @@ -1528,7 +1528,7 @@ static INSN_REGPARM void arm121(uint32_t opcode) #define ADDRESS_PREDEC (reg[base].I - offset) #define ADDRESS_PREINC (reg[base].I + offset) -#define OP_STR CPUWriteMemory(address, reg[dest].I) +#define OP_STR CPUWriteMemory(address, reg[dest].I + (dest == 15 ? 4 : 0)) #define OP_STRH CPUWriteHalfWord(address, reg[dest].W.W0) #define OP_STRB CPUWriteByte(address, reg[dest].B.B0) #define OP_LDR reg[dest].I = CPUReadMemory(address)