# hence

Virtual CPU with Assembler and Emulator.

## Architecture

### Memory mapping

| Start    | End      | Name            | Description                                                  |
| -------- | -------- | --------------- | ------------------------------------------------------------ |
| `0x0000` | `0x8000` | `PRG` (Program) | ROM of program binary                                        |
| `0x8000` | `0x9fff` | `ST` (Stack)    | RAM used as stack                                            |
| `0xa000` | `0xbfff` | `MEM` (Memory)  | Generic RAM                                                  |
| `0xc000` |          | `OUT` (Out)     | Writes value as decimal number to standard output when trying to be overwritten |
| `0xc001` |          | `CHR` (Char)    | Writes value as UTF-8 char to standard output when trying to be overwritten |
| `0xc002` |          | `KEY` (Key)     | Waits for key press and returns UTF-8 value of it when trying to be read from |

### Registers

| Hex   | Name                   | Description                    |
| ----- | ---------------------- | ------------------------------ |
| `0x1` | `PC` (Program counter) | Address of current instruction |
| `0x2` | `OPC`                  | Opcode of current instruction  |
|       |                        |                                |

***TODO***
