Merge remote-tracking branch 'origin/main'

# Conflicts:
#	src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java
This commit is contained in:
2024-05-06 16:43:32 +02:00
2 changed files with 16 additions and 1 deletions

View File

@ -297,7 +297,7 @@ public class Commands {
int fcontent = DataRegister.getRegister(file); int fcontent = DataRegister.getRegister(file);
int carry = DataRegister.getCarryFlag() << 7; int carry = DataRegister.getCarryFlag() << 7;
int contentlow = fcontent & 0b1; int contentlow = fcontent & 0b1;
int result = fcontent >> 1 | carry; int result = (fcontent >> 1) | carry;
DataRegister.setCarryFlag(contentlow); DataRegister.setCarryFlag(contentlow);
if (destination == 0){ if (destination == 0){
wRegister = result & 0xFF; wRegister = result & 0xFF;

View File

@ -89,6 +89,9 @@ public class DataRegister {
else { else {
dataRegister[address] = content; dataRegister[address] = content;
dataRegister[0x80 + address] = content; dataRegister[0x80 + address] = content;
if (address == STATUS){
setFlags();
}
} }
} }
@ -116,6 +119,9 @@ public class DataRegister {
if (getBit(address, bit) == 1) { if (getBit(address, bit) == 1) {
dataRegister[address] -= (int) Math.pow(2, bit); dataRegister[address] -= (int) Math.pow(2, bit);
dataRegister[0x80 + address] = dataRegister[address]; dataRegister[0x80 + address] = dataRegister[address];
if (address == STATUS){
setFlags();
}
} }
} }
} }
@ -135,6 +141,9 @@ public class DataRegister {
if (getBit(address, bit) == 0) { if (getBit(address, bit) == 0) {
dataRegister[address] += (int) Math.pow(2, bit); dataRegister[address] += (int) Math.pow(2, bit);
dataRegister[0x80 + address] = dataRegister[address]; dataRegister[0x80 + address] = dataRegister[address];
if (address == STATUS){
setFlags();
}
} }
} }
} }
@ -173,6 +182,12 @@ public class DataRegister {
return programCounter; return programCounter;
} }
private static void setFlags() {
carryFlag = getDirectBit(STATUS, C);
digitCarryFlag = getDirectBit(STATUS, DC);
zeroFlag = getDirectBit(STATUS, Z);
}
private static int zeroFlag = 0; private static int zeroFlag = 0;
public static void determineZeroFlag(int result){ public static void determineZeroFlag(int result){