diff --git a/Server/src/main/java/net/simon987/server/assembly/CPU.java b/Server/src/main/java/net/simon987/server/assembly/CPU.java index 873907f..1643ed6 100755 --- a/Server/src/main/java/net/simon987/server/assembly/CPU.java +++ b/Server/src/main/java/net/simon987/server/assembly/CPU.java @@ -99,6 +99,8 @@ public class CPU implements MongoSerialisable { instructionSet.add(new JoInstruction(this)); instructionSet.add(new PushfInstruction(this)); instructionSet.add(new PopfInstruction(this)); + instructionSet.add(new JnaInstruction(this)); + instructionSet.add(new JaInstruction(this)); status = new Status(); memory = new Memory(config.getInt("memory_size")); diff --git a/Server/src/main/java/net/simon987/server/assembly/instruction/JaInstruction.java b/Server/src/main/java/net/simon987/server/assembly/instruction/JaInstruction.java new file mode 100644 index 0000000..20dca0f --- /dev/null +++ b/Server/src/main/java/net/simon987/server/assembly/instruction/JaInstruction.java @@ -0,0 +1,38 @@ +package net.simon987.server.assembly.instruction; + +import net.simon987.server.assembly.CPU; +import net.simon987.server.assembly.Instruction; +import net.simon987.server.assembly.Status; +import net.simon987.server.assembly.Target; + +/** + * Jump if above + */ +public class JaInstruction extends Instruction { + + public static final int OPCODE = 46; + + private CPU cpu; + + public JaInstruction(CPU cpu) { + super("ja", OPCODE); + + this.cpu = cpu; + } + + @Override + public Status execute(Target src, int srcIndex, Status status) { + if (!status.isCarryFlag() && !status.isZeroFlag()) { + cpu.setIp((char) src.get(srcIndex)); + } + return status; + } + + @Override + public Status execute(int src, Status status) { + if (!status.isCarryFlag() && !status.isZeroFlag()) { + cpu.setIp((char) src); + } + return status; + } +} diff --git a/Server/src/main/java/net/simon987/server/assembly/instruction/JnaInstruction.java b/Server/src/main/java/net/simon987/server/assembly/instruction/JnaInstruction.java new file mode 100644 index 0000000..e143f7e --- /dev/null +++ b/Server/src/main/java/net/simon987/server/assembly/instruction/JnaInstruction.java @@ -0,0 +1,38 @@ +package net.simon987.server.assembly.instruction; + +import net.simon987.server.assembly.CPU; +import net.simon987.server.assembly.Instruction; +import net.simon987.server.assembly.Status; +import net.simon987.server.assembly.Target; + +/** + * Jump if not above + */ +public class JnaInstruction extends Instruction { + + public static final int OPCODE = 47; + + private CPU cpu; + + public JnaInstruction(CPU cpu) { + super("jna", OPCODE); + + this.cpu = cpu; + } + + @Override + public Status execute(Target src, int srcIndex, Status status) { + if (status.isCarryFlag() || status.isZeroFlag()) { + cpu.setIp((char) src.get(srcIndex)); + } + return status; + } + + @Override + public Status execute(int src, Status status) { + if (status.isCarryFlag() || status.isZeroFlag()) { + cpu.setIp((char) src); + } + return status; + } +} \ No newline at end of file