diff --git a/app/src/main/java/hatelace/Instruction.java b/app/src/main/java/hatelace/Instruction.java index 43d5bfb..f7d04be 100644 --- a/app/src/main/java/hatelace/Instruction.java +++ b/app/src/main/java/hatelace/Instruction.java @@ -1,8 +1,11 @@ package hatelace; -public interface Instruction { - void execute(Memory memory, ProgramCounter pc); - String opcode(); - Object[] operands(); - String toString(); +public abstract class Instruction { + public abstract void execute(Memory memory, ProgramCounter pc); + + protected abstract String opcode(); + + protected abstract Object[] operands(); + + public abstract String toString(); } diff --git a/app/src/main/java/hatelace/Word.java b/app/src/main/java/hatelace/Word.java index 4ac199f..db74dbc 100644 --- a/app/src/main/java/hatelace/Word.java +++ b/app/src/main/java/hatelace/Word.java @@ -1,11 +1,11 @@ package hatelace; -public interface Word { - T getValue(); - Word add(Word other); - Word subtract(Word other); - Word multiply(Word other); - Word divide(Word other); - String toString(); - boolean equals(Object other); +public abstract class Word { + public abstract T getValue(); + public abstract Word add(Word other); + public abstract Word subtract(Word other); + public abstract Word multiply(Word other); + public abstract Word divide(Word other); + public abstract String toString(); + public abstract boolean equals(Object other); } diff --git a/app/src/main/java/hatelace/instructions/Add.java b/app/src/main/java/hatelace/instructions/Add.java index e45609c..fc5c2ab 100644 --- a/app/src/main/java/hatelace/instructions/Add.java +++ b/app/src/main/java/hatelace/instructions/Add.java @@ -2,7 +2,7 @@ package hatelace.instructions; import hatelace.*; -public class Add implements Instruction { +public class Add extends Instruction { private Address src; private Word imm; private Address dest; @@ -19,7 +19,7 @@ public class Add implements Instruction { PC.incPC(); } - public String opcode() { + protected String opcode() { return "ADD"; } @@ -27,7 +27,7 @@ public class Add implements Instruction { return String.format("%s [%s] %s [%s]", this.opcode(), this.src, this.imm, this.dest); } - public Object[] operands() { + protected Object[] operands() { return new Object[] { this.src, this.imm, this.dest }; } } diff --git a/app/src/main/java/hatelace/instructions/Copy.java b/app/src/main/java/hatelace/instructions/Copy.java index 215b500..985ce1a 100644 --- a/app/src/main/java/hatelace/instructions/Copy.java +++ b/app/src/main/java/hatelace/instructions/Copy.java @@ -2,7 +2,7 @@ package hatelace.instructions; import hatelace.*; -public class Copy implements Instruction { +public class Copy extends Instruction { private Word imm; private Address dest; @@ -17,11 +17,11 @@ public class Copy implements Instruction { PC.incPC(); } - public String opcode() { + protected String opcode() { return "CPY"; } - public Object[] operands() { + protected Object[] operands() { return new Object[] {this.imm, this.dest}; } diff --git a/app/src/main/java/hatelace/instructions/Halt.java b/app/src/main/java/hatelace/instructions/Halt.java index 3fc8485..7823e35 100644 --- a/app/src/main/java/hatelace/instructions/Halt.java +++ b/app/src/main/java/hatelace/instructions/Halt.java @@ -2,7 +2,7 @@ package hatelace.instructions; import hatelace.*; -public class Halt implements Instruction { +public class Halt extends Instruction { /** Halts the CPU */ public Halt(){}; @@ -10,11 +10,11 @@ public class Halt implements Instruction { PC.halt(); } - public String opcode() { + protected String opcode() { return "HLT"; } - public Object[] operands() { + protected Object[] operands() { return new Object[] {}; } diff --git a/app/src/main/java/hatelace/instructions/Jump.java b/app/src/main/java/hatelace/instructions/Jump.java index 5761c4c..972945f 100644 --- a/app/src/main/java/hatelace/instructions/Jump.java +++ b/app/src/main/java/hatelace/instructions/Jump.java @@ -2,7 +2,7 @@ package hatelace.instructions; import hatelace.*; -public class Jump implements Instruction { +public class Jump extends Instruction { private int index; /** Unconditional jump, non-relative */ @@ -14,11 +14,11 @@ public class Jump implements Instruction { PC.setPC(this.index); } - public String opcode() { + protected String opcode() { return "JMP"; } - public Object[] operands() { + protected Object[] operands() { return new Object[] {this.index}; } diff --git a/app/src/main/java/hatelace/instructions/JumpEq.java b/app/src/main/java/hatelace/instructions/JumpEq.java index 9152637..f2538be 100644 --- a/app/src/main/java/hatelace/instructions/JumpEq.java +++ b/app/src/main/java/hatelace/instructions/JumpEq.java @@ -2,7 +2,7 @@ package hatelace.instructions; import hatelace.*; -public class JumpEq implements Instruction { +public class JumpEq extends Instruction { private int index; private Address src; private Word imm; @@ -22,11 +22,11 @@ public class JumpEq implements Instruction { } } - public String opcode() { + protected String opcode() { return "JEQ"; } - public Object[] operands() { + protected Object[] operands() { return new Object[] {this.index, this.src, this.imm}; } diff --git a/app/src/main/java/hatelace/instructions/Mul.java b/app/src/main/java/hatelace/instructions/Mul.java index 0cf60da..cd61d81 100644 --- a/app/src/main/java/hatelace/instructions/Mul.java +++ b/app/src/main/java/hatelace/instructions/Mul.java @@ -2,7 +2,7 @@ package hatelace.instructions; import hatelace.*; -public class Mul implements Instruction { +public class Mul extends Instruction { private Address src1; private Address src2; private Address dest; @@ -19,11 +19,11 @@ public class Mul implements Instruction { PC.incPC(); } - public String opcode() { + protected String opcode() { return "MUL"; } - public Object[] operands() { + protected Object[] operands() { return new Object[] { this.src1, this.src2, this.dest }; } diff --git a/app/src/main/java/hatelace/instructions/Print.java b/app/src/main/java/hatelace/instructions/Print.java index f73ce0b..17e7ce6 100644 --- a/app/src/main/java/hatelace/instructions/Print.java +++ b/app/src/main/java/hatelace/instructions/Print.java @@ -2,7 +2,7 @@ package hatelace.instructions; import hatelace.*; -public class Print implements Instruction { +public class Print extends Instruction { private Address address; /** Print content of memory address */ @@ -15,11 +15,11 @@ public class Print implements Instruction { PC.incPC(); } - public String opcode() { + protected String opcode() { return "PRT"; } - public Object[] operands() { + protected Object[] operands() { return new Object[] { this.address }; } diff --git a/app/src/main/java/hatelace/memtypes/IntWord.java b/app/src/main/java/hatelace/memtypes/IntWord.java index eea0583..75c00a8 100644 --- a/app/src/main/java/hatelace/memtypes/IntWord.java +++ b/app/src/main/java/hatelace/memtypes/IntWord.java @@ -2,7 +2,7 @@ package hatelace.memtypes; import hatelace.Word; -public class IntWord implements Word { +public class IntWord extends Word { private Integer value; public IntWord(Integer value) { diff --git a/app/src/main/java/hatelace/memtypes/LongWord.java b/app/src/main/java/hatelace/memtypes/LongWord.java index adb8855..f01ace2 100644 --- a/app/src/main/java/hatelace/memtypes/LongWord.java +++ b/app/src/main/java/hatelace/memtypes/LongWord.java @@ -2,7 +2,7 @@ package hatelace.memtypes; import hatelace.Word; -public class LongWord implements Word { +public class LongWord extends Word { private Long value; public LongWord(Long value) {