diff --git a/scripts/autorun.sc b/scripts/autorun.sc index de249be..e16077a 100644 --- a/scripts/autorun.sc +++ b/scripts/autorun.sc @@ -3,4 +3,4 @@ #exec rm log.txt #log CC2420 >log.txt #printcalls >log.txt -start +#start diff --git a/se/sics/mspsim/core/MSP430Constants.java b/se/sics/mspsim/core/MSP430Constants.java index 27fdf95..dc59573 100644 --- a/se/sics/mspsim/core/MSP430Constants.java +++ b/se/sics/mspsim/core/MSP430Constants.java @@ -105,7 +105,7 @@ public interface MSP430Constants { }; public static final String[] REGISTER_NAMES = { - "PC", "SP", "SR", "CG1", "CG2" + "PC", "SP", "SR", "CG1", "CG2" }; public static final int PC = 0; diff --git a/se/sics/mspsim/core/MSP430Core.java b/se/sics/mspsim/core/MSP430Core.java index 3e4de23..2d5840b 100644 --- a/se/sics/mspsim/core/MSP430Core.java +++ b/se/sics/mspsim/core/MSP430Core.java @@ -598,7 +598,11 @@ public class MSP430Core extends Chip implements MSP430Constants { address &= 0xffff; val = memory[address] & 0xff; if (word) { - val |= (memory[(address + 1) & 0xffff] << 8); + val |= (memory[(address + 1) & 0xffff] << 8); + if ((address & 1) != 0) { + System.out.println("**** Illegal read - misaligned word from: " + + Utils.hex16(address) + " at " + Utils.hex16(reg[PC])); + } } } if (breakPoints[address] != null) { @@ -620,7 +624,11 @@ public class MSP430Core extends Chip implements MSP430Constants { // TODO: add check for Flash / RAM! memory[dstAddress] = dst & 0xff; if (word) { - memory[dstAddress + 1] = (dst >> 8) & 0xff; + memory[dstAddress + 1] = (dst >> 8) & 0xff; + if ((dstAddress & 1) != 0) { + System.out.println("**** Illegal write - misaligned word to: " + + Utils.hex16(dstAddress) + " at " + Utils.hex16(reg[PC])); + } } } } @@ -785,6 +793,7 @@ public class MSP430Core extends Chip implements MSP430Constants { cycles++; break; case AM_INDEX: + // TODO: needs to handle if SR is used! dstAddress = readRegisterCG(dstRegister, ad) + memory[pc] + (memory[pc + 1] << 8); @@ -812,12 +821,6 @@ public class MSP430Core extends Chip implements MSP430Constants { } break; } -// case AM_IND_AUTOINC: -// dstAddress = readRegister(dstRegister); -// writeRegister(dstRegister, dstAddress + (word ? 2 : 1)); -// cycles += 3; -// break; -// } } @@ -1035,6 +1038,7 @@ public class MSP430Core extends Chip implements MSP430Constants { // PC Could have changed above! pc = readRegister(PC); if (dstRegister == 2) { + /* absolute mode */ dstAddress = memory[pc] + (memory[pc + 1] << 8); } else { // CG here??? @@ -1112,8 +1116,8 @@ public class MSP430Core extends Chip implements MSP430Constants { sr = readRegister(SR); sr = (sr & ~(CARRY | OVERFLOW)) | (dst >= src ? CARRY : 0); - tmp = dst - src; - + tmp = (dst - src); + if (((src ^ tmp) & b) == 0 && (((src ^ dst) & b) != 0)) { sr |= OVERFLOW; }