Prescaler, Watchdog, (Cycle-) Timer

This commit is contained in:
2024-05-13 20:53:56 +02:00
parent 3722bff281
commit af17397a1c
6 changed files with 117 additions and 91 deletions

View File

@ -0,0 +1,43 @@
package fabrik.simulator.pic16f84;
public class PreScaler {
private static final int PSA = 0x3;
private static final int OPTION = 0x81;
private static int scaler = 0b111;
public static boolean isPrescalerOnTimer (){
return DataRegister.getDirectBit(OPTION, PSA) == 0;
}
public static int getFactor () {
int scale = DataRegister.getDirectRegister(OPTION) & 0b111;
int timer = isPrescalerOnTimer() ? 1 : 0;
return (int) Math.pow (2, scale+timer);
}
public static void reset (){
DataRegister.setDirectBit(OPTION, 0, 0);
DataRegister.setDirectBit(OPTION, 1, 0);
DataRegister.setDirectBit(OPTION, 2, 0);
}
public static void resetFromRegister() {
scaler = getFactor();
}
public static void decrement() {
scaler--;
if (scaler == 0) {
scaler = getFactor();
Timer.incrementFromInstructionCycle();
}
System.err.println("VT: " + scaler);
}
public static void cycles(int i) {
for (int j = 0; j < i; j++) {
decrement();
}
}
}