diff --git a/src/main/java/fabrik/simulator/pic16f84/Commands.java b/src/main/java/fabrik/simulator/pic16f84/Commands.java index 3a6c3d7..0ed749f 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Commands.java +++ b/src/main/java/fabrik/simulator/pic16f84/Commands.java @@ -488,7 +488,7 @@ public class Commands { } DataRegister.determineZeroFlag(result); DataRegister.determineCarryFlag(result); - DataRegister.determineDigitCarryFlag(result); + DataRegister.determineDigitCarryFlag((wRegister&0b11101111) & (DataRegister.getRegister(file)&0b1111)); } @@ -500,7 +500,7 @@ public class Commands { } else { DataRegister.determineCarryFlag(result); - DataRegister.determineDigitCarryFlag(result); + DataRegister.determineDigitCarryFlag((wRegister&0b11101111) + (DataRegister.getRegister(file)&0b1111)); } if (destination == 0) { wRegister = result & 0xFF; @@ -533,7 +533,7 @@ public class Commands { wRegister = result & 0xFF; DataRegister.determineZeroFlag(result); DataRegister.determineCarryFlag(result); - DataRegister.determineDigitCarryFlag(result); + DataRegister.determineDigitCarryFlag((wRegister&0b11101111) + (literal&0b1111)); } public static void RETLW(int literal) { diff --git a/src/main/java/fabrik/simulator/pic16f84/DataRegister.java b/src/main/java/fabrik/simulator/pic16f84/DataRegister.java index 4f76dfb..e317aee 100644 --- a/src/main/java/fabrik/simulator/pic16f84/DataRegister.java +++ b/src/main/java/fabrik/simulator/pic16f84/DataRegister.java @@ -44,6 +44,9 @@ public class DataRegister { dataRegister[TRISB] = 0b11111111; dataRegister[0x80 + PCLATH] = dataRegister[PCLATH]; dataRegister[0x80 + INTCON] = dataRegister[INTCON]; + carryFlag = 0; + zeroFlag = 0; + digitCarryFlag = 0; IOPorts.resetTRIS(); System.out.println(Arrays.toString(dataRegister)); } @@ -294,7 +297,7 @@ public class DataRegister { } public static void determineDigitCarryFlag(int result){ - if (result > 0xF){ + if (result >> 4 == 1){ setDigitCarryFlag(1); } else { diff --git a/src/main/java/fabrik/simulator/pic16f84/Table.java b/src/main/java/fabrik/simulator/pic16f84/Table.java index c601bd9..4a24c16 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Table.java +++ b/src/main/java/fabrik/simulator/pic16f84/Table.java @@ -22,7 +22,7 @@ public class Table { //Tabelle aktualisieren private static final int NUM_COLUMNS = 8; // Anzahl der Spalten - private static final double TABLE_WIDTH = 420; // Breite der TableView + private static final double TABLE_WIDTH = 425; // Breite der TableView private static final double TABLE_HEIGHT = 600; // Höhe der TableView private static String formatHex(String s) { @@ -90,17 +90,16 @@ public class Table { Label spacing = new Label(" "); Label spacing2 = new Label(" "); Label wRegisterLabel = new Label("W-Register: 0x" + formatHex(Integer.toHexString(Commands.get_wRegister()).toUpperCase())); - Label cLabel = new Label("Carry: 0x" + formatHex(Integer.toHexString(DataRegister.getCarryFlag()))); - Label dcLabel = new Label("Digit-Carry: 0x" + formatHex(Integer.toHexString(DataRegister.getDigitCarryFlag()))); - Label zLabel = new Label("Zero-Flag: 0x" + formatHex(Integer.toHexString(DataRegister.getZeroFlag()))); + Label cLabel = new Label("Carry-Flag: " + DataRegister.getCarryFlag()); + Label dcLabel = new Label("DigitCarry-Flag: " + DataRegister.getDigitCarryFlag()); + Label zLabel = new Label("Zero-Flag: " + DataRegister.getZeroFlag()); Label pcLabel = new Label("PC: 0x" + formatHex(Integer.toHexString(DataRegister.getPC()).toUpperCase())); Label pclLabel = new Label("PCL: 0x" + formatHex(Integer.toHexString(DataRegister.getRegister(DataRegister.getPCL())).toUpperCase())); Label pclathLabel = new Label("PCLATH: 0x" + formatHex(Integer.toHexString(DataRegister.getRegister(DataRegister.getPCLATH())).toUpperCase())); Label statusLabel = new Label("STATUS: 0b" + formatBin(Integer.toBinaryString(DataRegister.getRegister(DataRegister.getSTATUS())))+ " (0x" + formatHex(Integer.toHexString(DataRegister.getRegister(DataRegister.getSTATUS())).toUpperCase()) + ")"); - Label fsrLabel = new Label("FSR: 0x" + formatHex(Integer.toHexString(DataRegister.getRegister(DataRegister.getFSR())).toUpperCase())); + Label fsrLabel = new Label("FSR: 0x" + formatHex(Integer.toHexString(DataRegister.getFSR()).toUpperCase())); Label prescalerLabel = new Label("Prescaler: 0x" + formatHex(Integer.toHexString(PreScaler.getScaler())).toUpperCase()); Label intconLabel = new Label("INTCON: 0b" + formatBin(Integer.toBinaryString(DataRegister.getRegister(DataRegister.getINTCON()))) + " (0x" + formatHex(Integer.toHexString(DataRegister.getRegister(DataRegister.getINTCON())).toUpperCase()) + ")"); - wRegisterLabel.setStyle("-fx-font-weight: bold"); pcLabel.setStyle("-fx-font-weight: bold"); statusLabel.setStyle("-fx-font-weight: bold"); diff --git a/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml b/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml index d8d4aa1..587a88a 100644 --- a/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml +++ b/src/main/resources/fabrik/simulator/pic16f84/frontend.fxml @@ -14,7 +14,7 @@ - +