diff --git a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java index f7e3e9d..683c300 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java +++ b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java @@ -30,6 +30,7 @@ import javafx.util.Callback; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Set; import static java.lang.Math.max; @@ -121,20 +122,20 @@ public class Controller_Frontend { wakeUpFromSleep(); else DataRegister.resetPC(); -// Stage stoppedStage = new Stage(); -// stoppedStage.setTitle("Programm unterbrochen!"); -// VBox vbox = new VBox(); -// vbox.setAlignment(javafx.geometry.Pos.CENTER); -// Label grundlabel = new Label("Grund: " + message); -// grundlabel.setStyle("-fx-font-size: 16px; -fx-font-weight: bold;"); -// Label ueberlabel = new Label("Programm unterbrochen!"); -// vbox.getChildren().add(ueberlabel); -// vbox.getChildren().add(grundlabel); -// VBox.setMargin(grundlabel, new javafx.geometry.Insets(10, 10, 10, 10)); -// Scene scene = new Scene(vbox, 300, 90); -// stoppedStage.setAlwaysOnTop(true); -// stoppedStage.setScene(scene); -// stoppedStage.show(); + Stage stoppedStage = new Stage(); + stoppedStage.setTitle("Programm unterbrochen!"); + VBox vbox = new VBox(); + vbox.setAlignment(javafx.geometry.Pos.CENTER); + Label grundlabel = new Label("Grund: " + message); + grundlabel.setStyle("-fx-font-size: 16px; -fx-font-weight: bold;"); + Label ueberlabel = new Label("Programm unterbrochen!"); + vbox.getChildren().add(ueberlabel); + vbox.getChildren().add(grundlabel); + VBox.setMargin(grundlabel, new javafx.geometry.Insets(10, 10, 10, 10)); + Scene scene = new Scene(vbox, 300, 90); + stoppedStage.setAlwaysOnTop(true); + stoppedStage.setScene(scene); + stoppedStage.show(); } public static void sleep() { @@ -263,8 +264,8 @@ public class Controller_Frontend { Stage stage = (Stage) stepintoButton.getScene().getWindow(); CreateWindow.refreshTable(stage); IOPorts.refreshUI(getTRISbuttons(), getPORTbuttons()); - - + updateStack(); + updateWatchdog(); long totalExecutionTime = Commands.getTotalExecutionTime(); totalExecutionTimeLabel.setText("Total Execution Time: " + totalExecutionTime + "µs"); } @@ -317,6 +318,7 @@ public class Controller_Frontend { IOPorts.setPORTfromUI(toggleButtonGroup); } catch (NullPointerException ignored) {} } + wakeUpFromSleep(); breakpoints.clear(); IOPorts.refreshUI(getTRISbuttons(), getPORTbuttons()); Commands.resetTotalExecutionTime(); @@ -326,6 +328,7 @@ public class Controller_Frontend { read = ParseFile.parseDatei(fileAddress); prog = read [0]; ind = read[1]; + updateStack(); System.out.println(Arrays.toString(Arrays.stream(prog).toArray())); displayLSTFileContent(selectedFile); markSelectedRow(0, "-fx-background-color: red; -fx-text-fill: white;"); @@ -577,6 +580,31 @@ public class Controller_Frontend { public void toggleLEDs (ActionEvent actionEvent) { IOPorts.setLEDs(new boolean[]{ledCheckA.isSelected(), ledCheckB.isSelected()}); } + + @FXML + private Label stackIndex; + + @FXML + private ListView stackVisual; + + private static String format (String s) { + return (s.length() == 1) ? "0" + s : s; + } + + private void updateStack (){ + stackIndex.setText("Stack-Pointer: " + ProgramStack.getStackPointer()); + ObservableList observedList = FXCollections.observableArrayList(); + List stackList = ProgramStack.getStack(); + for (Integer integer : stackList) { + observedList.add("0x" + format(Integer.toHexString(integer).toUpperCase())); + } + stackVisual.setItems(observedList); + } + + private void updateWatchdog (){ + wdtCheck.setText("Watchdog-Timer: " + WatchdogTimer.get() + "µs"); + } + } diff --git a/src/main/java/fabrik/simulator/pic16f84/Table.java b/src/main/java/fabrik/simulator/pic16f84/Table.java index 2167ba1..c25f233 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Table.java +++ b/src/main/java/fabrik/simulator/pic16f84/Table.java @@ -79,9 +79,9 @@ public class Table { Label fsrLabel = new Label("FSR: 0x" + format(Integer.toHexString(DataRegister.getRegister(DataRegister.getFSR())).toUpperCase())); Label pclathLabel = new Label("PCLATH: 0x" + format(Integer.toHexString(DataRegister.getRegister(DataRegister.getPCLATH())).toUpperCase())); Label intconLabel = new Label("INTCON: 0x" + format(Integer.toHexString(DataRegister.getRegister(DataRegister.getINTCON())).toUpperCase())); - Label wRegisterLabel = new Label("W Register: 0x" + format(Integer.toHexString(Commands.get_wRegister()).toUpperCase())); + Label wRegisterLabel = new Label("W-Register: 0x" + format(Integer.toHexString(Commands.get_wRegister()).toUpperCase())); Label PCLabel = new Label("PC: 0x" + format(Integer.toHexString(DataRegister.getPC()).toUpperCase())); - Label Prescaler = new Label("Prescaler: " + format(Integer.toHexString(PreScaler.getScaler())).toUpperCase()); + Label Prescaler = new Label("Prescaler: 0x" + format(Integer.toHexString(PreScaler.getScaler())).toUpperCase()); diff --git a/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java b/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java index af6eeb8..8da2957 100644 --- a/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java +++ b/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java @@ -4,6 +4,8 @@ public class WatchdogTimer { private static long watchdogTime; private static long lastReset = 0; private static boolean enabled = false; + private static long rawtimer = 0; + private static long realtimer = 0; private static long getTimeFromRegister() { return (PreScaler.isPrescalerOnTimer()) ? 18L : PreScaler.getFactor() * 18L; @@ -12,16 +14,22 @@ public class WatchdogTimer { public static void testAndTrigger() { watchdogTime = getTimeFromRegister() * 1000; if (enabled) { - if (Commands.getTotalExecutionTime() >= (watchdogTime + lastReset - 1)) { + if (realtimer >= (watchdogTime + lastReset - 1)) { DataRegister.clearBit(3, 4); lastReset = Commands.getTotalExecutionTime(); Controller_Frontend.stopRunFromBackend("Watchdog Timer"); } + else { + rawtimer++; + realtimer = (long) (rawtimer * Controller_Frontend.getExecutionTimeMultiplier()); + } } } public static void reset (){ lastReset = Commands.getTotalExecutionTime(); + rawtimer = 0; + realtimer = 0; PreScaler.reset(); DataRegister.setBit(3, 3); DataRegister.setBit(3, 4); @@ -34,4 +42,8 @@ public class WatchdogTimer { public static void disable() { enabled = false; } + + public static long get (){ + return realtimer; + } } diff --git a/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml b/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml index 2a4cbb3..37ac6d2 100644 --- a/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml +++ b/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml @@ -1,34 +1,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - + @@ -66,7 +49,7 @@ + + + + + - + @@ -751,7 +739,7 @@ - + @@ -1022,7 +1010,14 @@ - + + + + + +