Compare commits

..

1 Commits

Author SHA1 Message Date
Darkress
f0f6179059 implemented Retlw instruction 2023-05-31 01:43:48 +02:00
4 changed files with 18 additions and 23 deletions

View File

@@ -17,6 +17,8 @@ public class Retlw extends CommandUtils implements Command
public void execute() public void execute()
{ {
Memory.workingRegister = literal; Memory.workingRegister = literal;
ProgramCounter.setPcFromStack(Stack.pop()); 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
} }
} }

View File

@@ -8,6 +8,8 @@ public class Return extends CommandUtils implements Command
@Override @Override
public void execute() public void execute()
{ {
ProgramCounter.setPcFromStack(Stack.pop()); 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
} }
} }

View File

@@ -59,10 +59,6 @@ public class Memory
} }
memory[address] = data; memory[address] = data;
memory[address + 128] = data; //Ensure data is written to both banks to simulate mapping 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) private static int getDataFromIndirectAddress(int address)
@@ -79,10 +75,6 @@ public class Memory
} }
memory[address % 128] = data; // else: Registers.Registers which are mapped 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 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() private static int getRegisterBank()

View File

@@ -20,20 +20,19 @@ public class ProgramCounter
pc = (pch) + pcl; 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 public static void incPC() //is called after every instruction execution
{ {
pc++; int pcl = Memory.getPCL();
Memory.setPCL(pc & 0x00FF); int pclath = Memory.getPCLATH();
if(pcl == 0xFF)
{
pclath++;
pcl = 0;
} else {
pcl++;
}
Memory.setPCL(pcl);
Memory.setPCLATH(pclath);
pc = (pclath <<8) + pcl;
} }
} }