# HateLace - A Simple Computer ```mermaid classDiagram class Computer { - Memory memory - Program program + Computer(Memory Memory) + void load(Program program) + void run() } class Memory { + abstract Word read(Address address) + abstract int size() + abstract void write(Address address, Word data) + abstract void dump() } class ProgramCounter { - int PC - int SysTick - boolean haltFlag + ProgramCounter() + ProgramCounter(int PC) + int getPC() + int getSysTicks() + int incPC() + int setPC(int PC) + boolean halted() + void halt() } class Program class Instruction { + abstract void execute(Memory memory, ProgramCounter pc) # abstract String opcode() # abstract Object[] operands() + abstract String toString() } class ArrayList class Word { + abstract T getValue() + abstract Word add(Word other) + abstract Word subtract(Word other) + abstract Word multiply(Word other) + abstract Word divide(Word other) + abstract String toString() + abstract boolean equals(Object other) } class Address { - int address + Address(int address) + int getAddress() + String toString() } class LongWord { - Long value + LongWord(Long value) + Long getValue() + Word add(Word other) + Word subtract(Word other) + Word multiply(Word other) + Word divide(Word other) + String toString() + boolean equals(Object other) } class LongMemory { - long[] memory + LongMemory() + LongMemory(int size) + Word read(Address address) + int size() + void write(Address address, Word data) + void dump() } Memory <|-- LongMemory Word <|-- LongWord Program <-- ArrayList Program --|> Instruction Program : +toString() Computer --> Memory Computer --> Program Computer --> ProgramCounter ```