Name | Description |
---|---|
ip | Instruction pointer |
acc | Accumulator |
r1 | General-purpose |
r2 | General-purpose |
r3 | General-purpose |
r4 | General-purpose |
r5 | General-purpose |
r6 | General-purpose |
r7 | General-purpose |
r8 | General-purpose |
sp | Stack pointer |
fp | Frame pointer |
Opcode | Mnemonic | Description | Format |
---|---|---|---|
0x10 | MOV_LIT_REG | Move literal into register | 0x10 [lit_lo] [lit_hi] [reg_id] |
0x11 | MOV_REG_REG | Move value between registers | 0x11 [src_reg_id] [dest_reg_id] |
0x12 | MOV_REG_MEM | Move register value to memory | 0x12 [reg_id] [addr_lo] [addr_hi] |
0x13 | MOV_MEM_REG | Load memory value into register | 0x13 [addr_lo] [addr_hi] [reg_id] |
0x14 | ADD_REG_REG | Add two registers → acc | 0x14 [reg1_id] [reg2_id] |
0x15 | JMP_NOT_EQ | Jump if acc != value | 0x15 [val_lo] [val_hi] [addr_lo] [addr_hi] |
0x16 | PSH_LIT | Push literal to stack | 0x16 [lit_lo] [lit_hi] |
0x17 | PSH_REG | Push register to stack | 0x17 [reg_id] |
0x18 | POP | Pop from stack to register | 0x18 [reg_id] |
0x1A | CAL_LIT | Call subroutine at address | 0x1A [addr_lo] [addr_hi] |
0x5E | CAL_REG | Call subroutine in register | 0x5E [reg_id] |
0x5F | RET | Return from subroutine | 0x5F |
0xFF | HLT | Halt execution | 0xFF |
All literal and address values are 16-bit, little-endian.
- Memory Mapped I/O: Screen device mapped to 0x3000-0x30FF
- Stack Operations: Push/pop operations with SP and FP registers
- Subroutine Calls: Call and return with state preservation
- Extensible Architecture: Memory mapper for device integration
Address | Byte | Meaning
--------|------|------------------------------
0x00 | 0x10 | MOV_LIT_REG
0x01 | 0x34 | → r1 = 0x1234
0x02 | 0x12 |
0x03 | 0x04 | (register R1 address)
0x04 | 0x16 | PSH_LIT
0x05 | 0xAB | → push 0xCDAB to stack
0x06 | 0xCD |
0x07 | 0x1A | CAL_LIT
0x08 | 0x20 | → call subroutine at 0x0020
0x09 | 0x00 |
0x0A | 0xFF | HLT
go run main.go