diff --git a/memoryMap.md b/memoryMap.md
index cc1ea6d..d87c386 100644
--- a/memoryMap.md
+++ b/memoryMap.md
@@ -1,36 +1,45 @@
## Boot ROM
-Execution starts here, at address `$0000`.
-The OS bootloader is located here.
+Execution starts here, at address `$0000`.
+The main program is located here, or the OS bootloader if an OS is present.
## GPIO
-Contains hardware multiplication (`$0400`-`$0401`) and division (`$0402`-`$0403`), popcount (`$0404`), and a timer (`$0405`).
+Contains hardware multiplication (`$0400 * $0401 -> $0400`) and division (`$0402 / $0403 -> $0402 r $0403`), popcount (`$0404 -> $0404`), and a timer (`$0405`).
+Value written to timer register = number of game ticks (32 ms) between interrupt triggers.
+Write 0 to disable.
## Keyboard
-Read address `$0500` to get the next key event (7-bit Windows VKey code, MSB on indicates press/release). Returns 0 if empty.
-Write 1 to `$0500` to enable interrupts.
+Read address `$0500` to get the next key event
+7-bit Windows VKey code, MSB 1 = press, 0 = release
+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
-Not directly mentioned in the provided code snippets, but if it follows a similar addressing scheme, it would have a specific range not covered here.
+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.
+Write a 6-bit color ID to `$0700` to set the color of the bricks the robot plants.
+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 addresses `$0800` to `$0FFF` to display characters at certain positions on the screen.
-`$0800` is the top left, `$0FFF` would be the bottom right, considering the character display dimensions and memory layout.
+Write ASCII values to `$0800` to `$0BFF` to display characters at certain positions on screen.
+`$0800` is top left, `$0BFF` is bottom right, rows are 64 bytes.
## Text Display Color
-Write 6-bit color IDs to addresses `$0800` to `$0FFF` to set the color of characters on screen.
-MSB = whether to invert character mask (i.e., for highlighting). This might need clarification or correction based on the actual implementation, as it seems to overlap with the Text Display's address range.
+Write 6-bit color IDs to `$0C00` to `$0FFF` to set the color of characters on screen.
+MSB = whether to invert character mask (i.e. for highlighting).
## System RAM
-The OS may use this memory for the stack, system variables, etc., located at `$1000` to `$1FFF`.
+The OS may use this memory for the stack, system variables, etc.
+If no OS is present, this memory can be used for any purpose, etc.
+Located at `$1000` to `$1FFF`.
## User ROM
-Your program and data go here, located at `$2000` to `$2FFF`.
+User program and data can go here.
+If no OS is present, the boot ROM will need to jump into this code.
+Located at `$2000` to `$2FFF`.
## User RAM
-Your code can use this memory for variables, arrays, a heap, etc., located at `$3000` to `$3FFF`.
-
-## Video Display
-Not directly mentioned in the provided snippets for addressing, but based on the peripheral configuration, it would be addressed from `$8000` to `$FFFF` for direct pixel manipulation or other video-related functions.
+Your code can use this memory for variables, arrays, a heap, etc.
+Located at `$3000` to `$3FFF`.