diff --git a/src/ARM.cpp b/src/ARM.cpp index 3ecae2c8..f667e0f6 100644 --- a/src/ARM.cpp +++ b/src/ARM.cpp @@ -647,7 +647,7 @@ void ARMv5::Execute() R[15] += 2; CurInstr = NextInstr[0]; NextInstr[0] = NextInstr[1]; - if (R[15] & 0x2) { NextInstr[1] >>= 16; CodeCycles = 0; } + if (R[15] & 0x2) { NextInstr[1] >>= 16; CodeCycles = 1; } else NextInstr[1] = CodeRead32(R[15], false); // actually execute diff --git a/src/ARM.h b/src/ARM.h index 8efb8fa6..20d11ad2 100644 --- a/src/ARM.h +++ b/src/ARM.h @@ -317,15 +317,16 @@ public: void AddCycles_C() override { // code only. always nonseq 32-bit for ARM9. - s32 numC = (R[15] & 0x2) ? 0 : CodeCycles; + s32 numC = CodeCycles; Cycles += numC; } void AddCycles_CI(s32 numI) override { // code+internal - s32 numC = (R[15] & 0x2) ? 0 : CodeCycles; - Cycles += numC + numI; + s32 numC = CodeCycles; + numI += 1; + Cycles += std::max(numC, numI); } void AddCycles_CDI_LDR() override;