From 8954bd75a9f191c73eb28927dbff869e87ba124e Mon Sep 17 00:00:00 2001 From: Joakim Eriksson Date: Thu, 11 Oct 2012 10:41:18 +0200 Subject: [PATCH] fixed CALLA INDX --- se/sics/mspsim/core/MSP430Core.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/se/sics/mspsim/core/MSP430Core.java b/se/sics/mspsim/core/MSP430Core.java index ce38185..b343028 100644 --- a/se/sics/mspsim/core/MSP430Core.java +++ b/se/sics/mspsim/core/MSP430Core.java @@ -1361,9 +1361,17 @@ public class MSP430Core extends Chip implements MSP430Constants { dst = readRegister(dstRegister); /* what happens if wrapping here??? */ - System.out.println("CALLA INDX: Reg = " + Utils.hex20(dst) + " Mem: " + - currentSegment.read(pc, AccessMode.WORD, AccessType.READ)); - dst += currentSegment.read(pc, AccessMode.WORD, AccessType.READ); + /* read the index which is from -15 bit - +15 bit. - so extend sign to 20-bit */ + int v = currentSegment.read(pc, AccessMode.WORD, AccessType.READ); + if ((v & 0x8000) != 0) { + v |= 0xf0000; + } + + System.out.println("CALLA INDX: Reg = " + Utils.hex20(dst) + " INDX: " + v); + + dst += v; + dst &= 0xfffff; + System.out.println("CALLA INDX => " + Utils.hex20(dst)); dst = currentSegment.read(dst, AccessMode.WORD20, AccessType.READ); System.out.println("CALLA Read from INDX => " + Utils.hex20(dst));