Added JA and JNA Instructions

This commit is contained in:
simon 2018-01-20 14:18:44 -05:00
parent c772abe0bf
commit 8d961ce572
3 changed files with 78 additions and 0 deletions

View File

@ -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"));

View File

@ -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;
}
}

View File

@ -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;
}
}