61 lines
1.3 KiB
Java
61 lines
1.3 KiB
Java
package fabrik.simulator.pic16f84;
|
|
|
|
import fabrik.simulator.pic16f84.interfaces.*;
|
|
|
|
public class PreScaler extends PICComponent implements PreScalerInterface {
|
|
|
|
private final int PSA = 0x3;
|
|
private final int OPTION = 0x81;
|
|
private int scaler;
|
|
|
|
public PreScaler () {
|
|
super();
|
|
scaler = 0b111;
|
|
}
|
|
|
|
@Override
|
|
public boolean isPrescalerOnTimer(){
|
|
return dataRegister.getDirectBit(OPTION, PSA) == 0;
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
public int getScaler() {
|
|
return scaler;
|
|
}
|
|
|
|
@Override
|
|
public int getFactor() {
|
|
int scale = dataRegister.getDirectRegister(OPTION) & 0b111;
|
|
int timer = isPrescalerOnTimer() ? 1 : 0;
|
|
return (int) Math.pow (2, scale+timer);
|
|
}
|
|
|
|
@Override
|
|
public void reset(){
|
|
dataRegister.setDirectBit(OPTION, 0, 0);
|
|
dataRegister.setDirectBit(OPTION, 1, 0);
|
|
dataRegister.setDirectBit(OPTION, 2, 0);
|
|
}
|
|
|
|
@Override
|
|
public void resetFromRegister() {
|
|
scaler = getFactor();
|
|
}
|
|
|
|
@Override
|
|
public void decrement(boolean manual) {
|
|
scaler--;
|
|
if (scaler == 0) {
|
|
scaler = getFactor();
|
|
timer.increment(manual);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void initialize(PICComponents picComponents) {
|
|
super.initialize(picComponents);
|
|
}
|
|
}
|