r16
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| number | instruction | argument 1 | argument 2 | fullname | explanation |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x00 | HLT | | | Halt | halts the CPU |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x01 | ADD | value 1 | value 2 | Add | ACU = value 1 + value 2 |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x02 | SUB | value 1 | value 2 | Subtract | ACU = value 1 - value 2 |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x03 | MUL | value 1 | value 2 | Multiply | ACU = value 1 * value 2 |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x04 | DIV | value 1 | value 2 | Divide | ACU = value 1 / value 2 |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x05 | LBS | value | amount | Left Bit-Shift | ACU = value << amount |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x06 | RBS | value | amount | Right Bit-Shift | ACU = value << amount |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x07 | BAN | value 1 | value 2 | Bitwise And | ACU = value 1 & value 2 |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x08 | BOR | value 1 | value 2 | Bitwise Or | ACU = value 1 \ |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x09 | BXO | value 1 | value 2 | Bitwise Exclusive Or | ACU = value 1 ^ value 2 |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x0A | BNO | value | | Bitwise Not | ACU = ~ value |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x0B | PUS | value | | Push | pushes value onto the stack |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x0C | POP | | | Pop | pops a value from the stack and stores it in ACU |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x0D | JMP | address | | Jump | jumps to address |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x0E | JEQ | address | value | Jump If Equal | jumps to address, if value is equal to ACU |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x0F | JNZ | address | value | Jump If Not Zero | jumps to address, if value is not zero |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x10 | CAL | address | | Call | pushes PC + 1 to the stack, then jumps to address |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x11 | RET | | | Return | pops value from stack and jumps to it |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x12 | REG | int type | address | Register Interrupt | registers int type to address |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x13 | INT | int type | | Interrupt | interrupts as int type |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x14 | INP | | | Input | inputs a character into ACU |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x15 | OUT | value | | Output | outputs value |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x16 | DIN | location | | Disk In | reads value from disk at location to ACU |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x17 | DOT | location | value | Disk Out | writes value to disk at location |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
| 0x18 | MOV | value 1 | value 2 | Move | move value 2 to value 1 |
+--------+-------------+------------+------------+----------------------+---------------------------------------------------+
+--------+----------+-----------------+
| Number | Register | Usage |
+--------+----------+-----------------+
| 0x0 | R0 | general usage |
+--------+----------+-----------------+
| 0x1 | R1 | general usage |
+--------+----------+-----------------+
| 0x2 | R2 | general usage |
+--------+----------+-----------------+
| 0x3 | R3 | general usage |
+--------+----------+-----------------+
| 0x4 | ACU | Accumulator |
+--------+----------+-----------------+
| 0x5 | PC | Program Counter |
+--------+----------+-----------------+
| 0x6 | SP | Stack Pointer |
+--------+----------+-----------------+
+---------------+----------+----------+-------------------+
| Area of RAM | reserved | Writable | usage |
+---------------+----------+----------+-------------------+
| 00000 - 00064 | YES | NO | system header |
+---------------+----------+----------+-------------------+
| 00064 - 65023 | NO | YES | executable |
+---------------+----------+----------+-------------------+
| 65023 - 65279 | YES | YES | interupt pointers |
+---------------+----------+----------+-------------------+
| 65279 - 65535 | YES | YES | stack |
+---------------+----------+----------+-------------------+
+-------------------------------------------+------------+------------+
| BYTE 1 | BYTE 2 | BYTE 2 |
+--------+--------+------------+------------+------------+------------+
| OPCODE | UNUSED | ARG 1 INFO | ARG 2 INFO | ARGUMENT 1 | ARGUMENT 2 |
+--------+--------+------------+------------+------------+------------+
| 8 bits | 4 bits | 2 bits | 2 bits | 16 bits | 16 bits |
+--------+--------+------------+------------+------------+------------+
+-------+---------------------------------------------+
| State | Argument Interpretation |
+-------+---------------------------------------------+
| 0x0 | Value in argument |
+-------+---------------------------------------------+
| 0x1 | Value in register |
+-------+---------------------------------------------+
| 0x2 | Value in RAM |
+-------+---------------------------------------------+
| 0x3 | Value in RAM, at address stored in register |
+-------+---------------------------------------------+