This is an old revision of the document!
−Table of Contents
Memory map
The gamepad has a pretty simple memory map.
Start | End | Desc. |
---|---|---|
0x00000000 | 0x3FFFFFFF | main RAM (4MB, mirrored) |
0x00000000 | 0x00000FFF | boot ROM overlay |
0xE0010000 | 0xE001FFFF | SDIO registers (256 bytes, mirrored) |
0xF0000000 | ? | I/O |
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.
The DRH SoC (on WiiU side) has a USB device controller at 0xE0000000. Not sure if this exists at all on the gamepad.
Boot ROM
The boot ROM is mapped at 0x00000000 as an overlay. Writes go through to main RAM.
Before jumping to the second stage bootloader, the boot ROM disables its overlay, presumably by setting bit 12 in register 0xF0000000.
I/O map
The I/O region is split into basic blocks for the various hardware components.
Base | Desc. |
---|---|
0xF0000000 | General registers |
0xF0000100 | Device ID (16 bytes) |
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 |
0xF0004800 | SDIO |
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? |