From 061021748e3ff7a2c63d487757cb6c6c3520b5bb Mon Sep 17 00:00:00 2001 From: paulmart-n Date: Mon, 6 May 2024 16:14:07 +0200 Subject: [PATCH 1/2] 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){ From e6928339deb9a051ab71a8a15c2d369425431a01 Mon Sep 17 00:00:00 2001 From: paulmart-n Date: Mon, 6 May 2024 16:25:17 +0200 Subject: [PATCH 2/2] Fix RRF --- src/main/java/fabrik/simulator/pic16f84/Commands.java | 4 ++-- .../fabrik/simulator/pic16f84/Controller_Frontend.java | 9 ++------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/fabrik/simulator/pic16f84/Commands.java b/src/main/java/fabrik/simulator/pic16f84/Commands.java index 29a02f8..6d54acd 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Commands.java +++ b/src/main/java/fabrik/simulator/pic16f84/Commands.java @@ -295,9 +295,9 @@ public class Commands { public static void RRF(int file, int destination) { int fcontent = DataRegister.getRegister(file); - int carry = DataRegister.getCarryFlag(); + int carry = DataRegister.getCarryFlag() << 7; int contentlow = fcontent & 0b1; - int result = fcontent >> 1 | carry; + int result = (fcontent >> 1) | carry; DataRegister.setCarryFlag(contentlow); if (destination == 0){ wRegister = result & 0xFF; diff --git a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java index 186c949..773b447 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java +++ b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java @@ -74,16 +74,11 @@ public class Controller_Frontend { @FXML private Button autoRunGUI; - - - - - @FXML private void autoRunGUI(ActionEvent event) { Thread autoRunThread = new Thread(() -> { try { - while (DataRegister.getPC() < prog.length) { + while (DataRegister.getPC() < prog.length ) { Platform.runLater(() -> { try { @@ -92,7 +87,7 @@ public class Controller_Frontend { e.printStackTrace(); } }); - Thread.sleep(200); // Millisekunden + Thread.sleep(20); // Millisekunden } } catch (InterruptedException e) { e.printStackTrace();