diff --git a/Server/src/main/java/net/simon987/server/assembly/instruction/IntInstruction.java b/Server/src/main/java/net/simon987/server/assembly/instruction/IntInstruction.java index 84e0cb4..bad1b64 100644 --- a/Server/src/main/java/net/simon987/server/assembly/instruction/IntInstruction.java +++ b/Server/src/main/java/net/simon987/server/assembly/instruction/IntInstruction.java @@ -4,10 +4,12 @@ import net.simon987.server.assembly.CPU; import net.simon987.server.assembly.Instruction; import net.simon987.server.assembly.Status; /** - * Sets the PC to 0x0200 + Immediate operand + * Software Interrupt + * Pushes the flags register and the IP to the stack then + * Sets the IP to 0x0200 + 2*src. + * (x2 is to align with jmp instructions) * - * - * + * No reserved interrupt vectors yet */ public class IntInstruction extends Instruction{ diff --git a/Server/src/main/java/net/simon987/server/assembly/instruction/IretInstruction.java b/Server/src/main/java/net/simon987/server/assembly/instruction/IretInstruction.java index 59b84ba..6caec63 100644 --- a/Server/src/main/java/net/simon987/server/assembly/instruction/IretInstruction.java +++ b/Server/src/main/java/net/simon987/server/assembly/instruction/IretInstruction.java @@ -1,22 +1,28 @@ package net.simon987.server.assembly.instruction; import net.simon987.server.assembly.CPU; + import net.simon987.server.assembly.Instruction; import net.simon987.server.assembly.Status; -public class IntrInstruction extends Instruction{ - +/** + * Interrupt Return + * + * Pops the IP and status flag from the stack. + */ +public class IretInstruction extends Instruction{ + public static final int OPCODE = 49; private CPU cpu; - public IntrInstruction(CPU cpu) { + public IretInstruction(CPU cpu) { super("intr", OPCODE); this.cpu = cpu; } public Status execute(Status status) { - cpu.setIp((char)cpu.getMemory().get(cpu.getRegisterSet().getRegister("SP").getValue())); - status.fromByte((char) cpu.getMemory().get(cpu.getRegisterSet().getRegister("SP").getValue() + 1)); + cpu.setIp((char)cpu.getMemory().get(cpu.getRegisterSet().getRegister("SP").getValue())); //IP (SP + 0) + status.fromByte((char) cpu.getMemory().get(cpu.getRegisterSet().getRegister("SP").getValue() + 1)); //Status (SP + 1) cpu.getRegisterSet().getRegister("SP").setValue(cpu.getRegisterSet().getRegister("SP").getValue() + 2); //Increment SP (stack grows towards smaller) return status; }