Instruction abstract -> interface

This commit is contained in:
Imbus 2024-04-21 22:17:49 +02:00
parent a05b2fbeee
commit 1bdb35a899
8 changed files with 26 additions and 29 deletions

View file

@ -1,11 +1,8 @@
package hatelace; package hatelace;
public abstract class Instruction { public interface Instruction {
public abstract void execute(Memory memory, ProgramCounter pc); void execute(Memory memory, ProgramCounter pc);
String opcode();
protected abstract String opcode(); Object[] operands();
String toString();
protected abstract Object[] operands();
public abstract String toString();
} }

View file

@ -2,7 +2,7 @@ package hatelace.instructions;
import hatelace.*; import hatelace.*;
public class Add extends Instruction { public class Add implements Instruction {
private Address src; private Address src;
private Word imm; private Word imm;
private Address dest; private Address dest;
@ -19,7 +19,7 @@ public class Add extends Instruction {
PC.incPC(); PC.incPC();
} }
protected String opcode() { public String opcode() {
return "ADD"; return "ADD";
} }
@ -27,7 +27,7 @@ public class Add extends Instruction {
return String.format("%s [%s] %s [%s]", this.opcode(), this.src, this.imm, this.dest); return String.format("%s [%s] %s [%s]", this.opcode(), this.src, this.imm, this.dest);
} }
protected Object[] operands() { public Object[] operands() {
return new Object[] { this.src, this.imm, this.dest }; return new Object[] { this.src, this.imm, this.dest };
} }
} }

View file

@ -2,7 +2,7 @@ package hatelace.instructions;
import hatelace.*; import hatelace.*;
public class Copy extends Instruction { public class Copy implements Instruction {
private Word imm; private Word imm;
private Address dest; private Address dest;
@ -17,11 +17,11 @@ public class Copy extends Instruction {
PC.incPC(); PC.incPC();
} }
protected String opcode() { public String opcode() {
return "CPY"; return "CPY";
} }
protected Object[] operands() { public Object[] operands() {
return new Object[] {this.imm, this.dest}; return new Object[] {this.imm, this.dest};
} }

View file

@ -2,7 +2,7 @@ package hatelace.instructions;
import hatelace.*; import hatelace.*;
public class Halt extends Instruction { public class Halt implements Instruction {
/** Halts the CPU */ /** Halts the CPU */
public Halt(){}; public Halt(){};
@ -10,11 +10,11 @@ public class Halt extends Instruction {
PC.halt(); PC.halt();
} }
protected String opcode() { public String opcode() {
return "HLT"; return "HLT";
} }
protected Object[] operands() { public Object[] operands() {
return new Object[] {}; return new Object[] {};
} }

View file

@ -2,7 +2,7 @@ package hatelace.instructions;
import hatelace.*; import hatelace.*;
public class Jump extends Instruction { public class Jump implements Instruction {
private int index; private int index;
/** Unconditional jump, non-relative */ /** Unconditional jump, non-relative */
@ -14,11 +14,11 @@ public class Jump extends Instruction {
PC.setPC(this.index); PC.setPC(this.index);
} }
protected String opcode() { public String opcode() {
return "JMP"; return "JMP";
} }
protected Object[] operands() { public Object[] operands() {
return new Object[] {this.index}; return new Object[] {this.index};
} }

View file

@ -2,7 +2,7 @@ package hatelace.instructions;
import hatelace.*; import hatelace.*;
public class JumpEq extends Instruction { public class JumpEq implements Instruction {
private int index; private int index;
private Address src; private Address src;
private Word imm; private Word imm;
@ -22,11 +22,11 @@ public class JumpEq extends Instruction {
} }
} }
protected String opcode() { public String opcode() {
return "JEQ"; return "JEQ";
} }
protected Object[] operands() { public Object[] operands() {
return new Object[] {this.index, this.src, this.imm}; return new Object[] {this.index, this.src, this.imm};
} }

View file

@ -2,7 +2,7 @@ package hatelace.instructions;
import hatelace.*; import hatelace.*;
public class Mul extends Instruction { public class Mul implements Instruction {
private Address src1; private Address src1;
private Address src2; private Address src2;
private Address dest; private Address dest;
@ -19,11 +19,11 @@ public class Mul extends Instruction {
PC.incPC(); PC.incPC();
} }
protected String opcode() { public String opcode() {
return "MUL"; return "MUL";
} }
protected Object[] operands() { public Object[] operands() {
return new Object[] { this.src1, this.src2, this.dest }; return new Object[] { this.src1, this.src2, this.dest };
} }

View file

@ -2,7 +2,7 @@ package hatelace.instructions;
import hatelace.*; import hatelace.*;
public class Print extends Instruction { public class Print implements Instruction {
private Address address; private Address address;
/** Print content of memory address */ /** Print content of memory address */
@ -15,11 +15,11 @@ public class Print extends Instruction {
PC.incPC(); PC.incPC();
} }
protected String opcode() { public String opcode() {
return "PRT"; return "PRT";
} }
protected Object[] operands() { public Object[] operands() {
return new Object[] { this.address }; return new Object[] { this.address };
} }