## Features * 4 16-bit Registers * 254 8-bit Flag Registers * Start at end of memory from 0xFF00 * See [FLAGS.md](FLAGS.md) * 255 8-bit Ports * 0x00 console in/out * 0x01 tape in/out * 0x02-0x20 Reserved * Others Implementation Specific * 255 Syscall routines * Program Counter * Call Stack 16 x 16-bit * 64K x 8-bit Memory * MSB / big-endian ## ASM Parameters | Type | Symbol | Example/Use | | ----------------- | ------ | ----------------- | | Registers | R | A-D | | Marker | : | :XYZ | | Absolute Location | # | 0-65535 \| 0xFFFF | ## Location Parameter (@) | Code | ASM | Type | Values | | ---- | --- | ------------------- | -------------------------------- | | 0x0 | P | Port | 0-255 \| 0xFF | | 0x1 | R | Register | A-D | | 0x2 | M | Memory | 0-65535 \| 0xFFFF | | 0x3 | L | Immediate | 0-65535 \| 0xFFFF \| 'a' \| "a" | | 0x4 | A | Address In Register | A-D | ## ASM Instructions | Hex | ASM | Parameters | Notes | | ---- | ----- | ---------------- | ----- | | **Misc** | 0x00 | NOP | | | **Load/Save** | 0x10 | LOAD | [R] [@] | | 0x11 | SAVE | [R] [@] | | 0x12 | LOADH | [R] [@] | | 0x13 | LOADL | [R] [@] | | 0x14 | SAVEH | [R] [@] | | 0x15 | SAVEL | [R] [@] | | **Math** | 0x20 | CLR | [R] | | 0x21 | ADD | [R] [@] | | 0x22 | SUB | [R] [@] | | 0x23 | DIV | [R] [@] | | 0x24 | MUL | [R] [@] | | 0x25 | INC | [R] | | 0x26 | DEC | [R] | | **Logic** | 0x30 | NOT | [R] | | 0x31 | AND | [R] [@] | | 0x32 | OR | [R] [@] | | 0x33 | XOR | [R] [@] | | 0x34 | SHL | [R] [0-7] | Shift Left | 0x35 | SHR | [R] [0-7] | Shift Right | 0x36 | BTS | [R] [1-8] | Bit Set | 0x37 | BTC | [R] [1-8] | Bit Clear | **Stack** | 0x40 | CALL | [#\|:] | | 0x41 | RET | | | 0x42 | PUSH | [R] | | 0x43 | POP | [R] | | **Program Flow** | 0x50 | HALT | | | 0x51 | JMP | [#\|:] | | 0x52 | JZ | [R] [#\|:] | | 0x53 | JNZ | [R] [#\|:] | | 0x54 | JBS | [R] [1-8] [#\|:] | | 0x55 | JBC | [R] [1-8] [#\|:] | | **System** | 0x60 | SYS | [0-255] | Syscall, parameters depend on call | 0x61 | BRK | | Pauses program execution if debug is enabled ### Assembler Only | ASM | Parameters | Notes | | ------ | ---------- | ------------ | | ORIGIN | [#] | Sets the Memory Address for the next instruction | ALIAS | X Y | Replaces word X with word Y where X and Y are alpha numberic, only applies after the instruction ## Program Format ORIGIN 0 :MARKERA JMP :MARKERB # This is a comment :MARKERB INC A JMP :MARKERA [...ASM Instrictions...] MEMORY 0x100 "string abcd" 100 0x00 00 00