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:
@ -172,11 +172,11 @@ public class Commands {
|
|||||||
return;
|
return;
|
||||||
case 0b1001:
|
case 0b1001:
|
||||||
System.out.println("RETFIE");
|
System.out.println("RETFIE");
|
||||||
//TODO
|
RETFIE();
|
||||||
return;
|
return;
|
||||||
case 0b1000:
|
case 0b1000:
|
||||||
System.out.println("RETURN");
|
System.out.println("RETURN");
|
||||||
//TODO
|
DataRegister.setPC(ProgramStack.pop());
|
||||||
return;
|
return;
|
||||||
case 0b01100011:
|
case 0b01100011:
|
||||||
System.out.println("SLEEP");
|
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) {
|
public static void GOTO(int jump) {
|
||||||
DataRegister.setPC(jump-1);
|
DataRegister.setPC(jump-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CALL(int jump) {
|
public static void CALL(int jump) {
|
||||||
//TODO
|
ProgramStack.push(DataRegister.getPC()+1);
|
||||||
|
DataRegister.setPC(jump-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void MOVWF(int file) {
|
public static void MOVWF(int file) {
|
||||||
@ -439,7 +444,7 @@ public class Commands {
|
|||||||
|
|
||||||
public static void RETLW(int literal) {
|
public static void RETLW(int literal) {
|
||||||
wRegister = literal;
|
wRegister = literal;
|
||||||
//TODO: PC vom Stack holen und laden
|
DataRegister.setPC(ProgramStack.pop());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void MOVLW(int literal) {
|
public static void MOVLW(int literal) {
|
||||||
|
|||||||
@ -44,6 +44,8 @@ public class Controller_FileSelect {
|
|||||||
System.out.println("W: " + Commands.get_wRegister());
|
System.out.println("W: " + Commands.get_wRegister());
|
||||||
System.out.println("C: " + DataRegister.getCarryFlag());
|
System.out.println("C: " + DataRegister.getCarryFlag());
|
||||||
System.out.println("DC: " + DataRegister.getDigitCarryFlag());
|
System.out.println("DC: " + DataRegister.getDigitCarryFlag());
|
||||||
|
System.out.println("StackPointer: " + ProgramStack.getStackPointer());
|
||||||
|
System.out.println(ProgramStack.getStack());
|
||||||
System.out.printf(Arrays.toString(DataRegister.getDataRegister()));
|
System.out.printf(Arrays.toString(DataRegister.getDataRegister()));
|
||||||
DataRegister.increasePC();
|
DataRegister.increasePC();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -210,4 +210,5 @@ public class DataRegister {
|
|||||||
public static int getDigitCarryFlag(){
|
public static int getDigitCarryFlag(){
|
||||||
return digitCarryFlag;
|
return digitCarryFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
42
src/main/java/fabrik/simulator/pic16f84/ProgramStack.java
Normal file
42
src/main/java/fabrik/simulator/pic16f84/ProgramStack.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user