37 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
## Boot ROM
 | 
						|
Execution starts here, at address `$0000`.
 | 
						|
The OS bootloader is located here.
 | 
						|
 | 
						|
## GPIO
 | 
						|
Contains hardware multiplication (`$0400`-`$0401`) and division (`$0402`-`$0403`), popcount (`$0404`), and a timer (`$0405`).
 | 
						|
 | 
						|
## 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.
 | 
						|
 | 
						|
## 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.
 | 
						|
 | 
						|
## 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.
 | 
						|
 | 
						|
## 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.
 | 
						|
 | 
						|
## System RAM
 | 
						|
The OS may use this memory for the stack, system variables, etc., located at `$1000` to `$1FFF`.
 | 
						|
 | 
						|
## User ROM
 | 
						|
Your program and data go here, 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.
 |