From 061021748e3ff7a2c63d487757cb6c6c3520b5bb Mon Sep 17 00:00:00 2001 From: paulmart-n Date: Mon, 6 May 2024 16:14:07 +0200 Subject: [PATCH] Fix Flags --- .../java/fabrik/simulator/pic16f84/Commands.java | 2 +- .../fabrik/simulator/pic16f84/DataRegister.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/fabrik/simulator/pic16f84/Commands.java b/src/main/java/fabrik/simulator/pic16f84/Commands.java index e539ce6..29a02f8 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Commands.java +++ b/src/main/java/fabrik/simulator/pic16f84/Commands.java @@ -295,7 +295,7 @@ public class Commands { public static void RRF(int file, int destination) { int fcontent = DataRegister.getRegister(file); - int carry = DataRegister.getCarryFlag() << 7; + int carry = DataRegister.getCarryFlag(); int contentlow = fcontent & 0b1; int result = fcontent >> 1 | carry; DataRegister.setCarryFlag(contentlow); diff --git a/src/main/java/fabrik/simulator/pic16f84/DataRegister.java b/src/main/java/fabrik/simulator/pic16f84/DataRegister.java index 017efc8..8888b4f 100644 --- a/src/main/java/fabrik/simulator/pic16f84/DataRegister.java +++ b/src/main/java/fabrik/simulator/pic16f84/DataRegister.java @@ -89,6 +89,9 @@ public class DataRegister { else { dataRegister[address] = content; dataRegister[0x80 + address] = content; + if (address == STATUS){ + setFlags(); + } } } @@ -116,6 +119,9 @@ public class DataRegister { if (getBit(address, bit) == 1) { dataRegister[address] -= (int) Math.pow(2, bit); dataRegister[0x80 + address] = dataRegister[address]; + if (address == STATUS){ + setFlags(); + } } } } @@ -135,6 +141,9 @@ public class DataRegister { if (getBit(address, bit) == 0) { dataRegister[address] += (int) Math.pow(2, bit); dataRegister[0x80 + address] = dataRegister[address]; + if (address == STATUS){ + setFlags(); + } } } } @@ -173,6 +182,12 @@ public class DataRegister { return programCounter; } + private static void setFlags() { + carryFlag = getDirectBit(STATUS, C); + digitCarryFlag = getDirectBit(STATUS, DC); + zeroFlag = getDirectBit(STATUS, Z); + } + private static int zeroFlag = 0; public static void determineZeroFlag(int result){