From 8d961ce57232fde2ea59e35900329c188a9fbf1a Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 20 Jan 2018 14:18:44 -0500 Subject: [PATCH] Added JA and JNA Instructions --- .../net/simon987/server/assembly/CPU.java | 2 + .../assembly/instruction/JaInstruction.java | 38 +++++++++++++++++++ .../assembly/instruction/JnaInstruction.java | 38 +++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 Server/src/main/java/net/simon987/server/assembly/instruction/JaInstruction.java create mode 100644 Server/src/main/java/net/simon987/server/assembly/instruction/JnaInstruction.java 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