DSP Memory Region: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
Added Channel Context |
||
| Line 84: | Line 84: | ||
| 0x2 | | 0x2 | ||
| Frame Counter | | Frame Counter | ||
|} | |||
== Channel Config == | |||
A 192 byte long structure. There are 24 of them. | |||
{| class="wikitable" | |||
|- | |||
| 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 === | |||
{| class="wikitable" | |||
|- | |||
| 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 | |||
| - | |||
|} | |} | ||
Revision as of 18:58, 23 January 2016
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 | - |