Compare commits

...

2 Commits

Author SHA1 Message Date
Darkress
f0f6179059 implemented Retlw instruction 2023-05-31 01:43:48 +02:00
darkress
eed0b2e3eb implemented return instruction; Fixed Bug in Stack.pop() (#4)
Co-authored-by: Darkress <30271678+DarkressX@users.noreply.github.com>
Reviewed-on: darkress/pic16f84-sim#4
2023-05-31 01:30:20 +02:00
5 changed files with 50 additions and 13 deletions

View File

@@ -12,13 +12,14 @@ class Main
public static void main(String[] args) {
ArrayList<Command> program = new ArrayList<>();
Memory.workingRegister = 0xAA;
int input1 = 0x27FF;
program.add(CommandDecoder.decode(input1));
Memory.setPCLATH(0xFF);
program.get(0).execute();
//ProgramCounter.incPC();
program.add(CommandDecoder.decode(0x3011));
program.add(CommandDecoder.decode(0x2003));
program.add(CommandDecoder.decode(0x3022));
program.add(CommandDecoder.decode(0x0008));
while(true)
{
program.get(ProgramCounter.getPc()).execute();
}
}
}

View File

@@ -0,0 +1,24 @@
package de.darkress.pic16f84sim.commands;
import de.darkress.pic16f84sim.microcontroller.Memory;
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
import de.darkress.pic16f84sim.microcontroller.Stack;
public class Retlw extends CommandUtils implements Command
{
private final int literal;
public Retlw(int input)
{
literal = input & 0x00FF;
}
@Override
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
}
}

View File

@@ -0,0 +1,15 @@
package de.darkress.pic16f84sim.commands;
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
import de.darkress.pic16f84sim.microcontroller.Stack;
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
}
}

View File

@@ -110,8 +110,7 @@ public class CommandDecoder
case 0x3000:
return new Movlw(input);
case 0x3400:
//retlw();
break;
return new Retlw(input);
}
if ((input | 0x0060) == 0x0060)
@@ -131,8 +130,7 @@ public class CommandDecoder
if (input == 0x0008)
{
//return();
//This is the function name. Do not mistake this for a normal return!
return new Return();
}
if (input == 0x0063)

View File

@@ -14,9 +14,8 @@ public class Stack
public static int pop()
{
int tmp = stack[stackPointer];
pointPrevious();
return tmp;
return stack[stackPointer];
}
public static int peek()