Very angry virtual machine
app | ||
doc | ||
gradle/wrapper | ||
.gitattributes | ||
.gitignore | ||
gradlew | ||
gradlew.bat | ||
makefile | ||
README.md | ||
settings.gradle.kts |
HateLace - A Simple Computer
classDiagram
class Computer {
- Memory memory
- Program program
+ Computer(Memory Memory)
+ void load(Program program)
+ void run()
}
class Memory {
+ Word read(Address address)
+ int size()
+ void write(Address address, Word data)
+ 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 ArrayList
class 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)
}
class Address {
- int address
+ Address(int address)
+ int getAddress()
+ String toString()
}
class LongMemory
class LongWord
Computer --> Memory
Computer --> Program
Computer --> ProgramCounter
Program <-- ArrayList
Program : +toString()
Memory --|> LongMemory
Word --|> LongWord
classDiagram
class Operand {
+ Word getValue()
}
class Instruction {
+ void execute(Memory memory, ProgramCounter pc)
# String opcode()
# Object[] operands()
+ String toString()
}
class Add
class Copy
class Halt
class Jump
class JumpEq
class Mul
class Print
Instruction *-- Operand
Operand <|-- Word
Operand <|-- Address
Add --|> Instruction
Copy --|> Instruction
Halt --|> Instruction
Jump --|> Instruction
JumpEq --|> Instruction
Mul --|> Instruction
Print --|> Instruction
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