DSP Memory Region
The DSP communicates with userland through memory locations 0x1ff40000-0x1ff77fff. Within this region are two areas of structures that are exact duplicates of each other. The DSP alternates between the use of these two areas (much like a double-buffer). Each area has 15 structures within it. The location of these structures can be obtained by reading pipe 2.
The mixer has 24 channels, each of which are individually configurable.
| Structure Number | DSP memory address | Size | Description |
| 5 | 0x8400 | 0x20 | Status (?) |
| 9 | 0x8410 | 0x260 | Debug (?) |
| 6 | 0x8540 | 0x280 | Loopback Samples (PCM16) |
| 2 | 0x8680 | 0x120 | Channel Status (x24) |
| 8 | 0x9710 | 0x1A40 | ? |
| 4 | 0x9430 | 0xC4 | Main Configuration |
| 7 | 0x9492 | 0x1400 | ? |
| 1 | 0x9e92 | 0x1200 | Channel Config (x24) |
| 3 | 0x9430 | 0x300 | GC-ADPCM Coefficients (x24) |
| 10 | 0xa912 | 0x200 | |
| 11 | 0xaa12 | 0x180 | |
| 12 | 0xaad2 | 0x300 | |
| 13 | 0xac52 | 0x14 | |
| 14 | 0xac5c | 0x2476 | - |
| 0 | 0xbfff | 0x2 | Frame Counter |
Channel Config
A 192 byte long structure. There are 24 of them.
| Offset | Type | Description |
| 0 | u32 | Dirty flags |
| 4 | 70 bytes | TODO |
| 74 | u16 | Bitmap of which buffers in queue are valid |
| 76 | Buffer[4] | Buffer queue |
| 156 | u32 | - |
| 160 | u16 | Is Active |
| 162 | u16 | Config Serial Number (Userland) |
| 164 | 8 | TODO |
| 172 | u32 | Physical address of current buffer |
| 176 | u32 | Number of samples in current buffer |
| 180 | u16 | bits[0:1]: 1 = mono, 2 = stereo; bits[2:3]: buffer format |
| 182 | u16 | ADPCM predictor |
| 184 | s16 | ADPCM yn1 |
| 186 | s16 | ADPCM yn2 |
| 188 | u16 | bit[0]: Has ADPCM data?; bit[1]: Is looping? |
| 190 | u16 | Buffer Id of this current buffer |
Buffer
| Offset | Type | Description |
| 0 | u32 | Physical Address |
| 4 | u32 | Sample Count |
| 8 | u16 | ADPCM P/S |
| 10 | s16[2] | ADPCM yn[1,2] |
| 14 | u8 | Has ADPCM? |
| 15 | u8 | Looping? |
| 16 | u16 | Buffer Id |
| 18 | u16 | - |