2024-04-21 20:47:21 +02:00
|
|
|
# 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> 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
|
|
|
|
```
|
2024-04-21 20:53:38 +02:00
|
|
|
|
|
|
|
```mermaid
|
|
|
|
sequenceDiagram
|
|
|
|
participant Computer
|
|
|
|
participant Program
|
|
|
|
participant Memory
|
|
|
|
participant ProgramCounter
|
|
|
|
participant Instruction
|
|
|
|
|
|
|
|
Computer -> Program: load(program)
|
|
|
|
loop Program Execution
|
|
|
|
Program -> Computer: run()
|
|
|
|
loop Instructions Execution
|
|
|
|
Computer -> ProgramCounter: incPC()
|
|
|
|
ProgramCounter -> Program: getPC()
|
|
|
|
Program -> Program: executeInstruction()
|
|
|
|
Program -> Instruction: execute(memory, PC)
|
|
|
|
Instruction -> Memory: read/write(address)
|
|
|
|
Program -> ProgramCounter: incPC()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|