timer0 #32

Merged
Darkress merged 6 commits from timer0 into main 2023-06-17 18:45:24 +02:00
3 changed files with 24 additions and 12 deletions
Showing only changes of commit eeb7ba121e - Show all commits

View File

@@ -19,7 +19,9 @@ class Main
while(ProgramCounter.getPc() < 1024)
{
System.out.println("Command: " + program[ProgramCounter.getPc()].toString());
program[ProgramCounter.getPc()].execute();
System.out.println(Integer.toHexString(Memory.workingRegister) + " " + Cycles.getCycles());
System.out.println(Integer.toHexString(Memory.getOption()) + " " + Integer.toHexString(Memory.getTimer()));
System.out.println(Integer.toHexString(Memory.getPCLATH()) + " " + Integer.toHexString(Memory.getPCL()) + "\n");

View File

@@ -54,6 +54,12 @@ public class Memory
setDataFromIndirectAddress(indirectAddress, data);
return;
}
if(address == 0x01) //Reset PrescalerCounter if change on Option or Timer Register
{
Timer.resetTimeToTimerIncrease();
Timer.setCyclesToTimerIncrease(Timer.getCyclesToTimerIncrease() - 1); //Decrease by one to account for
// this command execution
}
if((Arrays.stream(bank0UniqueSpecialRegister).anyMatch(x -> x == address)) && getRegisterBank() == 0)
{
memory[address] = data;
@@ -67,10 +73,6 @@ public class Memory
}
memory[address] = data;
memory[address + 128] = data; //Ensure data is written to both banks to simulate mapping
if(address == 0x01) //Reset PrescalerCounter if change on Option or Timer Register
{
Timer.resetTimeToTimerIncrease();
}
if(address == 0x2) //Check if PCL is destination
{
ProgramCounter.loadPc();
@@ -84,6 +86,12 @@ public class Memory
private static void setDataFromIndirectAddress(int address, int data)
{
if(address == 0x81 || address == 0x01) //Reset PrescalerCounter if change on Option or Timer Register
{
Timer.resetTimeToTimerIncrease();
Timer.setCyclesToTimerIncrease(Timer.getCyclesToTimerIncrease() - 1); //Decrease by one to account for
// this command execution
}
if((Arrays.stream(bank0UniqueSpecialRegister).anyMatch(x -> x == address)) || (Arrays.stream(bank1UniqueSpecialRegister).anyMatch(x -> x == address)))
{
memory[address] = data;
@@ -91,14 +99,6 @@ public class Memory
}
memory[address % 128] = data; // else: Registers.Registers which are mapped
memory[address % 128 + 128] = data; //Ensure data is written to both banks to simulate mapping
if(address == 0x81 || address == 0x01) //Reset PrescalerCounter if change on Option or Timer Register
{
Timer.resetTimeToTimerIncrease();
}
if(address == 0x2 || address == 0x82) //Check if PCL is destination
{
ProgramCounter.loadPc();
}
}
private static int getRegisterBank()

View File

@@ -2,6 +2,16 @@ package de.darkress.pic16f84sim.microcontroller;
public class Timer
{
public static int getCyclesToTimerIncrease()
{
return cyclesToTimerIncrease;
}
public static void setCyclesToTimerIncrease(int cyclesToTimerIncrease)
{
Timer.cyclesToTimerIncrease = cyclesToTimerIncrease;
}
private static int cyclesToTimerIncrease = 1;
private static boolean timerEnabled()