46 lines
1.8 KiB
Markdown
46 lines
1.8 KiB
Markdown
## Boot ROM
|
|
Execution starts here, at address `$0000`.<br>
|
|
The main program is located here, or the OS bootloader if an OS is present.
|
|
|
|
## GPIO
|
|
Contains hardware multiplication (`$0400 * $0401 -> $0400`) and division (`$0402 / $0403 -> $0402 r $0403`), popcount (`$0404 -> $0404`), and a timer (`$0405`).<br>
|
|
Value written to timer register = number of game ticks (32 ms) between interrupt triggers.<br>
|
|
Write 0 to disable.
|
|
|
|
## Keyboard
|
|
Read address `$0500` to get the next key event<br>
|
|
7-bit Windows VKey code, MSB 1 = press, 0 = release<br>
|
|
Returns 0 if buffer is empty.
|
|
Write 1 to `$0500` to enable keyboard interrupts, 0 to disable.
|
|
|
|
## Serial Peripheral Interface
|
|
Not yet implemented.
|
|
|
|
## Robot Controller
|
|
Write to `$0701` to control the robot. Each bit is an action - MSB to LSB: Plant brick, destroy brick, move forward, backward, left, right, up, down.<br>
|
|
Write a 6-bit color ID to `$0700` to set the color of the bricks the robot plants.<br>
|
|
Read `$0700` to get the color of the brick the robot is on. MSB = brick exists. Returns 0 if no brick.
|
|
|
|
|
|
## Text Display
|
|
Write ASCII values to `$0800` to `$0BFF` to display characters at certain positions on screen.<br>
|
|
`$0800` is top left, `$0BFF` is bottom right, rows are 64 bytes.
|
|
|
|
## Text Display Color
|
|
Write 6-bit color IDs to `$0C00` to `$0FFF` to set the color of characters on screen.<br>
|
|
MSB = whether to invert character mask (i.e. for highlighting).
|
|
|
|
## System RAM
|
|
The OS may use this memory for the stack, system variables, etc.<br>
|
|
If no OS is present, this memory can be used for any purpose, etc.<br>
|
|
Located at `$1000` to `$1FFF`.
|
|
|
|
## User ROM
|
|
User program and data can go here.<br>
|
|
If no OS is present, the boot ROM will need to jump into this code.<br>
|
|
Located at `$2000` to `$2FFF`.
|
|
|
|
## User RAM
|
|
Your code can use this memory for variables, arrays, a heap, etc.<br>
|
|
Located at `$3000` to `$3FFF`.
|