memory_map
This is an old revision of the document!
Memory map
The gamepad has a pretty simple memory map.
| Start | End | Desc. |
|---|---|---|
| 0x00000000 | 0x3FFFFFFF | main RAM (4MB, mirrored) |
| 0xE0010000 | 0xE001FFFF | SDIO registers (256 bytes, mirrored) |
| 0xF0000000 | ? | I/O |
| 0xFFFF0000 | ? | presumably bootloader |
It is not yet known how to access the bootloader or if it exists at FFFF0000. That region reads as zero.
The I/O region only properly supports 32-bit writes. 16-bit and 8-bit writes will cause the incoming data to be repeated across the entire 32-bit register, ie. a 16-bit write of 0x1234 will result in 0x12341234 being written to the entire 32-bit register.
The SDIO region has specific access requirements for each register, and trying to write to a register with the wrong size is simply ignored. TODO: document exactly which registers require which sizes.
I/O map
The I/O region is split into basic blocks for the various hardware components.
| Base | Desc. |
|---|---|
| 0xF0000000 | General registers |
| 0xF0000400 | Timers |
| 0xF0000800 | ? |
| 0xF0001200 | IRQ controller |
| 0xF0001300 | IRQ controller |
| 0xF0001400 | IRQ controller |
| 0xF0001900 | IRQ controller |
| 0xF0004000 | DMA |
| 0xF0004400 | SPI |
| 0xF0004C00 | UART |
| 0xF0005000 | GPIO |
| 0xF0005100 | GPIO |
| 0xF0005200 | ??? |
| 0xF0005400 | Audio |
| 0xF0005800 | I2C general registers |
| 0xF0005900 | I2C bus 0? |
| 0xF0005C00 | I2C bus 1 |
| 0xF0005D00 | I2C bus 1 |
| 0xF0006000 | I2C bus 2 |
| 0xF0006400 | I2C bus 3 |
| 0xF0006800 | I2C bus 4 |
| 0xF0009400 | Video |
| 0xF0009500 | Video |
| 0xF0009600 | Video capture? |
| 0xF0009700 | Video capture? |
memory_map.1742165490.txt.gz · Last modified: 2025/03/16 22:51 by arisotura
