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 | ? |
0xF0000C00 | ? |
0xF0001200 | IRQ controller |
0xF0001300 | IRQ controller |
0xF0001400 | IRQ controller |
0xF0001900 | IRQ controller |
0xF0004000 | DMA - general registers and peripheral DMA |
0xF0004100 | DMA - general purpose 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 |
0xF0008400 | Video capture?? |
0xF0008800 | Video capture?? |
0xF0008900 | Video capture?? |
0xF0008C00 | Video capture?? |
0xF0009000 | Video - ? |
0xF0009400 | Video - output/framebuffer |
0xF0009500 | Video - palette |
0xF0009600 | Video - color correction |
0xF0009700 | Video - timings? |
memory_map.1742771335.txt.gz · Last modified: 2025/03/23 23:08 by arisotura