Compare commits

...

2 commits

Author SHA1 Message Date
Imbus
422344097b Word abstract -> interface 2024-04-21 22:26:03 +02:00
Imbus
1bdb35a899 Instruction abstract -> interface 2024-04-21 22:17:49 +02:00
11 changed files with 36 additions and 39 deletions

View file

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

View file

@ -1,11 +1,11 @@
package hatelace;
public abstract class Word {
public abstract <T> 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);
public interface Word {
<T> T getValue();
Word add(Word other);
Word subtract(Word other);
Word multiply(Word other);
Word divide(Word other);
String toString();
boolean equals(Object other);
}

View file

@ -2,7 +2,7 @@ package hatelace.instructions;
import hatelace.*;
public class Add extends Instruction {
public class Add implements Instruction {
private Address src;
private Word imm;
private Address dest;
@ -19,7 +19,7 @@ public class Add extends Instruction {
PC.incPC();
}
protected String opcode() {
public String opcode() {
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);
}
protected Object[] operands() {
public Object[] operands() {
return new Object[] { this.src, this.imm, this.dest };
}
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -2,7 +2,7 @@ package hatelace.memtypes;
import hatelace.Word;
public class IntWord extends Word {
public class IntWord implements Word {
private Integer value;
public IntWord(Integer value) {

View file

@ -2,7 +2,7 @@ package hatelace.memtypes;
import hatelace.Word;
public class LongWord extends Word {
public class LongWord implements Word {
private Long value;
public LongWord(Long value) {