Merge branch 'refs/heads/paul-zwischenstand'

# Conflicts:
#	src/main/java/fabrik/simulator/pic16f84/Controller_FileSelect.java
#	src/main/java/fabrik/simulator/pic16f84/DataRegister.java
This commit is contained in:
2024-04-24 21:23:23 +02:00
4 changed files with 54 additions and 4 deletions

View File

@ -172,11 +172,11 @@ public class Commands {
return;
case 0b1001:
System.out.println("RETFIE");
//TODO
RETFIE();
return;
case 0b1000:
System.out.println("RETURN");
//TODO
DataRegister.setPC(ProgramStack.pop());
return;
case 0b01100011:
System.out.println("SLEEP");
@ -196,12 +196,17 @@ public class Commands {
}
public static void RETFIE() {
DataRegister.setPC(ProgramStack.pop());
}
public static void GOTO(int jump) {
DataRegister.setPC(jump-1);
}
public static void CALL(int jump) {
//TODO
ProgramStack.push(DataRegister.getPC()+1);
DataRegister.setPC(jump-1);
}
public static void MOVWF(int file) {
@ -439,7 +444,7 @@ public class Commands {
public static void RETLW(int literal) {
wRegister = literal;
//TODO: PC vom Stack holen und laden
DataRegister.setPC(ProgramStack.pop());
}
public static void MOVLW(int literal) {

View File

@ -44,6 +44,8 @@ public class Controller_FileSelect {
System.out.println("W: " + Commands.get_wRegister());
System.out.println("C: " + DataRegister.getCarryFlag());
System.out.println("DC: " + DataRegister.getDigitCarryFlag());
System.out.println("StackPointer: " + ProgramStack.getStackPointer());
System.out.println(ProgramStack.getStack());
System.out.printf(Arrays.toString(DataRegister.getDataRegister()));
DataRegister.increasePC();
}

View File

@ -210,4 +210,5 @@ public class DataRegister {
public static int getDigitCarryFlag(){
return digitCarryFlag;
}
}

View File

@ -0,0 +1,42 @@
package fabrik.simulator.pic16f84;
import java.util.ArrayList;
import java.util.List;
public class ProgramStack {
private static List<Integer> returnStack = new ArrayList<>(8);
private static int stackIndex = 0;
private static void incIndex(){
if (stackIndex == 7){
stackIndex = 0;
}
else{
stackIndex++;
}
}
public static void push(int value) {
if (returnStack.size() != 8) {
returnStack.add(value);
incIndex();
}
else {
returnStack.set(stackIndex, value);
incIndex();
}
}
public static int pop() {
stackIndex = (stackIndex > 0) ? --stackIndex : 7;
return returnStack.get(stackIndex)-1;
}
public static int getStackPointer(){
return stackIndex;
}
public static List<Integer> getStack() {
return returnStack;
}
}