fixed PC (#6)
Co-authored-by: Darkress <30271678+DarkressX@users.noreply.github.com> Reviewed-on: darkress/pic16f84-sim#6
This commit was merged in pull request #6.
This commit is contained in:
@@ -17,8 +17,6 @@ public class Retlw extends CommandUtils implements Command
|
||||
public void execute()
|
||||
{
|
||||
Memory.workingRegister = literal;
|
||||
ProgramCounter.setPcFrom11BitLiteral(Stack.pop());
|
||||
//TODO: This may need some rework since it does not really load all 13 Bit into the PC. Only 8 Bit are
|
||||
// effectively set
|
||||
ProgramCounter.setPcFromStack(Stack.pop());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,6 @@ public class Return extends CommandUtils implements Command
|
||||
@Override
|
||||
public void execute()
|
||||
{
|
||||
ProgramCounter.setPcFrom11BitLiteral(Stack.pop());
|
||||
//TODO: This may need some rework since it does not really load all 13 Bit into the PC. Only 8 Bit are
|
||||
// effectively set
|
||||
ProgramCounter.setPcFromStack(Stack.pop());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,10 @@ public class Memory
|
||||
}
|
||||
memory[address] = data;
|
||||
memory[address + 128] = data; //Ensure data is written to both banks to simulate mapping
|
||||
if(address == 0x2) //Check if PCL is destination
|
||||
{
|
||||
ProgramCounter.loadPc();
|
||||
}
|
||||
}
|
||||
|
||||
private static int getDataFromIndirectAddress(int address)
|
||||
@@ -75,6 +79,10 @@ 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 == 0x2) //Check if PCL is destination
|
||||
{
|
||||
ProgramCounter.loadPc();
|
||||
}
|
||||
}
|
||||
|
||||
private static int getRegisterBank()
|
||||
|
||||
@@ -20,19 +20,20 @@ public class ProgramCounter
|
||||
pc = (pch) + pcl;
|
||||
}
|
||||
|
||||
public static void setPcFromStack(int stack)
|
||||
{
|
||||
pc = stack;
|
||||
Memory.setPCL(pc & 0x00FF);
|
||||
}
|
||||
|
||||
public static void loadPc()
|
||||
{
|
||||
pc = (Memory.getPCLATH() <<8) + Memory.getPCL();
|
||||
}
|
||||
|
||||
public static void incPC() //is called after every instruction execution
|
||||
{
|
||||
int pcl = Memory.getPCL();
|
||||
int pclath = Memory.getPCLATH();
|
||||
if(pcl == 0xFF)
|
||||
{
|
||||
pclath++;
|
||||
pcl = 0;
|
||||
} else {
|
||||
pcl++;
|
||||
}
|
||||
Memory.setPCL(pcl);
|
||||
Memory.setPCLATH(pclath);
|
||||
pc = (pclath <<8) + pcl;
|
||||
pc++;
|
||||
Memory.setPCL(pc & 0x00FF);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user