From 7ae0a6898e750fb624aaf56d20769294a28eae90 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Tue, 28 Dec 2010 23:24:53 +0000 Subject: [PATCH] Fixed an ARM CPU core bug with pre-indexed addressing opcodes, that was preventing Poizone to boot [Tim Schuerewegen] new working game ---------------------- Poizone [Tim Schuerewegen] --- src/emu/cpu/arm/arm.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/emu/cpu/arm/arm.c b/src/emu/cpu/arm/arm.c index 0383e0621af..f02df9d32b9 100644 --- a/src/emu/cpu/arm/arm.c +++ b/src/emu/cpu/arm/arm.c @@ -604,11 +604,17 @@ static void HandleMemSingle( ARM_REGS* cpustate, UINT32 insn ) /* Pre-indexed addressing */ if (insn & INSN_SDT_U) { - rnv = (GetRegister(cpustate, rn) + off); + if (rn != eR15) + rnv = (GetRegister(cpustate, rn) + off); + else + rnv = (R15 & ADDRESS_MASK) + off; } else { - rnv = (GetRegister(cpustate, rn) - off); + if (rn != eR15) + rnv = (GetRegister(cpustate, rn) - off); + else + rnv = (R15 & ADDRESS_MASK) - off; } if (insn & INSN_SDT_W) @@ -619,7 +625,7 @@ static void HandleMemSingle( ARM_REGS* cpustate, UINT32 insn ) } else if (rn == eR15) { - rnv = (rnv & ADDRESS_MASK) + 8; + rnv = rnv + 8; } } else