From 679f772779d33f7ac228b174cc92a3660de753a2 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Mon, 27 Dec 2010 14:25:05 +0000 Subject: [PATCH] Fixed LDM opcode register writeback in ARM CPU core [Tim Schuerewegen] --- src/emu/cpu/arm/arm.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/emu/cpu/arm/arm.c b/src/emu/cpu/arm/arm.c index bed6c0f4579..0383e0621af 100644 --- a/src/emu/cpu/arm/arm.c +++ b/src/emu/cpu/arm/arm.c @@ -321,6 +321,17 @@ INLINE void SetRegister( ARM_REGS* cpustate, int rIndex, UINT32 value ) cpustate->sArmRegister[sRegisterTable[MODE][rIndex]] = value; } +INLINE UINT32 GetModeRegister( ARM_REGS* cpustate, int mode, int rIndex ) +{ + return cpustate->sArmRegister[sRegisterTable[mode][rIndex]]; +} + +INLINE void SetModeRegister( ARM_REGS* cpustate, int mode, int rIndex, UINT32 value ) +{ + cpustate->sArmRegister[sRegisterTable[mode][rIndex]] = value; +} + + /***************************************************************************/ static CPU_RESET( arm ) @@ -1071,6 +1082,8 @@ static void HandleMemBlock( ARM_REGS* cpustate, UINT32 insn ) /* Loading */ if (insn & INSN_BDT_U) { + int mode = MODE; + /* Incrementing */ if (!(insn & INSN_BDT_P)) rbp = rbp + (- 4); @@ -1098,7 +1111,7 @@ static void HandleMemBlock( ARM_REGS* cpustate, UINT32 insn ) logerror("%08x: Illegal LDRM writeback to r15\n",R15); if ((insn&(1<