memory_map
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 |
0xF0005000 | GPIO |
0xF0005100 | GPIO |
0xF0005400 | Audio |
0xF0005800 | I2C general registers |
0xF0005C00 | 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.txt · Last modified: 2024/11/01 15:02 by arisotura