Repository navigation
DSP HLE Operation Inventory
Experimental; incomplete. These are recognized operations from observed DSP programs, not a complete Xbox audio-command list. A PC below is an emulated DSP program-memory address for a particular identified program, not a guest audio API command, hardware register or universal address. Other programs and states can differ.
Runtime HLE still uses the DSP JIT. Native projections are guarded and some are available only in offline replay. Full DSP bypass, game-audio parity, Dolby decoding and physical Xbox behavior are not proven. Private captures and game program data are not published here.
Code examples and tests for these fixes · Current status and measurements
Source inventory was checked against branch commit bb0de1e40c and the then-uncommitted worktree on 2026-11-03. Worktree-only means the named new or modified implementation was not present in that form at the public commit. Source links below are pinned to the committed version. The user interface remains experimental.
| Route | Example |
|---|---|
| Filter | Program and PC admission |
| Gain | 24-bit saturation |
| Multiply-accumulate | Fixed-point MAC |
| Special effect controls | Control and ramp examples |
| Decimation | Phase and gain |
| EP mixer | Program identity guard |
| Frame state and handoffs | Meter, add and matrix examples |
| Operation | DSP PC(s) | Implementation | Observed coverage and limit |
|---|---|---|---|
| Start-frame interrupt acknowledgement |
0x2b → 0x2d
|
gp-frame-entry-project.h: gp_frame_entry_project — worktree-only
|
16/16 captured entry states matched the JIT reference; 16/16 mixed native/stepped full frames matched. Guarded 14-guest-cycle projection, wired into offline replay only. |
| Frame counter transfer |
0x2d → 0x31
|
gp-frame-entry-project.h: gp_frame_counter_project — worktree-only
|
Exact-program guarded projection reads the existing emulated counter at 0xffffb3, writes X:0x7f, and accounts for 4 guest cycles. 16/16 state cases and 16/16 mixed full frames matched; offline only. |
| Frame DMA setup |
0x31 → 0x10a
|
gp-frame-entry-project.h: gp_frame_setup_project — worktree-only
|
Guarded 14-guest-cycle projection; after fixing A0/A2 clearing, 16/16 full-state cases with nonzero accumulators and 16/16 mixed full frames matched. Offline only. |
| Frame DMA handoff |
0x112 → 0x118
|
gp-frame-entry-project.h: gp_frame_dma_prepare_project — worktree-only
|
Guarded 10-guest-cycle projection prepares the DMA next-block and enters the existing native sequence. 16/16 state and 16/16 mixed-frame comparisons matched. |
| Frame DMA completion |
0x120 → 0x12c
|
gp-frame-entry-project.h: gp_frame_dma_complete_project — worktree-only
|
Guarded 18-guest-cycle end-of-list acknowledgement and return; 16/16 full-state pairs and 16/16 mixed frames matched the JIT reference. Offline only. |
| Frame DMA return |
0x12c → 0x33 (zero X:4), or 0x66 (nonzero X:4) |
gp-frame-entry-project.h: gp_frame_return_project — worktree-only
|
Guarded zero path takes 15 guest cycles; nonzero path takes 12. 16/16 zero states and 16,512 nonzero synthetic states matched the stepped JIT offline. |
| First filter-entry handoff |
0x33 → 0x185
|
gp-frame-entry-project.h: gp_frame_filter_entry_project — worktree-only
|
Guarded 33-guest-cycle projection reads the counter and three XRAM control/address words; only odd X:0x84 is supported. 16/16 captured and 4,096/4,096 synthetic states matched offline. |
| Feedback | 0x788 |
gp-feedback-project.h: gp_feedback_project |
176/176 captured pairs matched across 16 frames; identity and state guards apply. Offline and opt-in block dispatcher. |
| Two-input mix | 0x761 |
gp-mix2-project.h: gp_mix2_project |
32/32 captured pairs matched across 16 frames; guarded arithmetic. Offline and opt-in block dispatcher. |
| Add | 0x4a0 |
gp-add-project.h: gp_add_project |
352/352 captured pairs matched across 16 frames; 16 synthetic variants tested. Offline and opt-in block dispatcher. |
| Four-input matrix accumulation | 0x6a2 |
gp-matrix-project.h: gp_matrix_project |
64/64 captured pairs matched across 16 frames; 16 synthetic variants tested. Offline projection; does not model the run-loop budget. |
| Meter |
0x431 whole loop; 0x433 continuation |
gp-meter-project.h: gp_meter_project, gp_meter_slice_project |
96/96 captured whole-loop pairs matched; guarded continuation is also selected in the experimental JIT-backed route when its remaining work fits. |
| Filter |
0x185–0x413, positions where (PC - 0x185) % 0x55 is 0 or 0x3b
|
gp-filter-hle.c: gp_filter_hle_try_run, gp_filter_hle_run_verified |
Exact-program and state guards; 16 captured GP frames matched in the filter campaign. Unsupported input remains on DSP. |
| First filter bridge |
0x185 → 0x1c4
|
gp-filter-hle.c: gp_filter_hle_start_verified, gp_filter_hle_tail_verified — worktree-only changes
|
Start and tail each matched 16/16 captured and 2,048/2,048 synthetic states; strict offline replay completes one 32-sample filter without DSP steps. |
| Eight-channel filter and transitions | Filter positions 0x185–0x413; final next PC 0x417
|
gp-filter-hle.c generalized start/tail; gp-frame-entry-project.h: gp_filter_transition_project — worktree-only changes
|
Strict replay completes 8 filters and 7 active-channel transitions per frame for 16 saved frames, with zero DSP steps. Inactive channels remain unqualified. |
| Post-filter meter setup |
0x417 → 0x431 (odd control), or 0x42b (even control) |
gp-frame-entry-project.h: gp_frame_meter_entry_project — worktree-only
|
Odd/even paths take 45/43 guest cycles; the even path marks the control active. 16 captured and 4,096 synthetic states matched the DSP reference offline. |
| Meter channel transition |
0x43e → 0x431
|
gp-frame-entry-project.h: gp_meter_transition_project — worktree-only
|
Guarded 12-guest-cycle projection stores the meter and begins the next channel. 80/80 captured pairs and 20,480/20,480 varied states matched the stepped JIT offline. |
| Final meter exit |
0x43e → 0x422 when LC = 1 |
gp-frame-entry-project.h: gp_meter_final_project — worktree-only
|
Guarded 8-guest-cycle projection writes the final meter and restores loop/stack state. 16/16 captured pairs and 4,096 varied states matched stepped JIT offline. |
| Post-meter dispatch |
0x422 → 0x8d1 when X:0x1df = 3 |
gp-frame-entry-project.h: gp_post_meter_dispatch_project — worktree-only
|
Guarded 43-guest-cycle route sets up the stack. 16/16 saved and 4,096/4,096 varied states matched stepped JIT; other control routes are unsupported. |
| DMA return handoffs |
0x8d9 → 0x8df
|
gp-frame-entry-project.h: gp_dma_return_project; dsp-replay.c — worktree-only
|
Guarded 10-guest-cycle projection writes the verified DMA next-block via the existing peripheral. Supports tested 0x8f5 and 0x8ee return sites. Nonzero accumulator upper bits, changed instructions and non-stopped/frozen DMA are rejected. |
| Late DMA wait entry |
0x8e7 → 0x8e8
|
gp-frame-entry-project.h: gp_late_dma_wait_entry_project — worktree-only
|
Guarded seven-cycle return into the completion wait; 3,328 varied states matched stepped JIT. The completion path is described in the next row. |
| Late DMA completion |
0x8e8 → 0x48c
|
gp-frame-entry-project.h: gp_late_dma_wait_complete_project — worktree-only
|
Guarded 20-cycle acknowledgement and returns; completed DMA clears EOL through the peripheral. Incomplete DMA is rejected. 3,328 varied states matched stepped JIT. |
| Post-DMA audio entry |
0x48c → 0x91c
|
gp-frame-entry-project.h: gp_post_dma_audio_entry_project — worktree-only
|
Guarded 28-cycle setup for observed active control; 3,328 varied states matched stepped JIT. Other control values are rejected. |
| Post-DMA delay setup |
0x91c → 0x944
|
gp-frame-entry-project.h: gp_post_dma_delay_entry_project — worktree-only
|
Guarded 32-cycle pointer and coefficient setup; 3,328 varied states matched stepped JIT. |
| Post-DMA next delay |
0x96c → 0x944
|
gp-frame-entry-project.h: gp_post_dma_delay_next_project — worktree-only
|
Guarded 40-cycle return saves delay state and sets up the next channel; 3,328 varied states matched stepped JIT. |
| Post-DMA final delay return |
0x96c → 0x97e
|
gp-frame-entry-project.h: gp_post_dma_delay_final_project — worktree-only
|
Guarded 28-cycle return saves delay state and selects the observed next stage; 3,328 varied states matched stepped JIT. |
| Decimation setup |
0x97e → 0x986
|
gp-frame-entry-project.h: gp_decimate_setup_project — worktree-only
|
Guarded 13-cycle setup loads buffer pointers, phase and gain, and updates accumulator and flags. 3,328 varied states matched six stepped DSP instructions; offline replay only. |
| Decimation DMA handoff |
0x996 → 0x9dd, 0xa12 → 0xa59, 0xa8e → 0xad5, 0xb0a → 0xb51
|
gp-frame-entry-project.h: gp_decimate_dma_entry_project — worktree-only
|
Guarded 13-cycle handoff saves phase and output length, then enters the existing DMA routine. 3,328 varied states matched five stepped DSP instructions; offline replay only. |
| Decimation DMA stop entry and return |
0x9dd → 0x9c1, 0x9c9 → 0x9de; second channel 0xa59 → 0xa3d, 0xa45 → 0xa5a
|
gp-frame-entry-project.h: gp_decimate_dma_stop_entry_project, gp_decimate_dma_stop_return_project — worktree-only
|
Guarded call and return preserve the stack around the existing native DMA stop/freeze; 3,328 varied states per handoff matched stepped DSP. Offline only. |
| Decimation DMA descriptor setup |
0x9de → 0x9cf, 0xa5a → 0xa4b
|
gp-frame-entry-project.h: gp_decimate_dma_prepare_project — worktree-only
|
Guarded 7-cycle setup updates DSP status and stack and writes the next DMA descriptor through the existing peripheral. 3,328 varied states matched three stepped DSP instructions; offline only. |
| Decimation DMA completion |
0x9d7 → 0x9d8 → 0x97c, 0xa53 → 0xa54 → 0x9f8
|
gp-frame-entry-project.h: gp_decimate_dma_wait_entry_project, gp_decimate_dma_wait_complete_project — worktree-only
|
Guarded wait entry and completed-transfer acknowledgement use the DMA peripheral; incomplete transfers are rejected. 3,328 varied states per handoff matched stepped DSP; offline only. |
| Next decimation channel |
0x97c → 0xa02, 0x9f8 → 0xa7e, 0xa74 → 0xafa
|
gp-frame-entry-project.h: gp_decimate_next_channel_project — worktree-only
|
Guarded 32-cycle channel selection and setup. 3,328 varied states matched 12 stepped DSP instructions; inactive control is rejected. Offline only. |
| Decimation frame exit |
0xaf0 → 0x39
|
gp-frame-entry-project.h: gp_decimate_frame_exit_project — worktree-only
|
Guarded 8-cycle return to frame-tail work. 3,328 varied states matched three stepped DSP instructions; offline only. |
| Frame-tail counter |
0x39 → 0x3e
|
gp-frame-entry-project.h: gp_frame_tail_counter_project — worktree-only
|
Reads the existing emulated counter and prepares the frame-tail comparison. Only the current zero counter is admitted; 3,328 varied states matched three stepped DSP instructions. Offline only. |
| Frame-tail comparison and DMA dispatch |
0x3e → 0x10a
|
gp-frame-entry-project.h: gp_frame_tail_dispatch_project — worktree-only
|
Handles zero and nonzero comparison values; 3,328 varied states matched stepped DSP. Offline only. |
| Frame-tail DMA transfers |
0x112 → 0x118, 0x120 → 0x48 or 0x4c, 0x48 → 0x10a
|
gp-frame-entry-project.h: gp_frame_tail_dma_prepare_project, gp_frame_tail_dma_complete_project, gp_frame_tail_second_dma_project — worktree-only
|
Prepares and acknowledges two DMA transfers through the existing peripheral. Each stage matched 3,328 varied states; incomplete transfers are rejected. Offline only. |
| Frame-tail finish and halt |
0x4c → 0x29 → 0x2b
|
gp-frame-entry-project.h: gp_frame_tail_finish_project, gp_frame_tail_halt_project — worktree-only
|
Both comparison branches and the halt request matched 3,328 varied states per stage. Only the current zero counter is admitted; the halt uses the existing peripheral. Offline only. |
| DMA return to gain |
0x8e7 → 0x493
|
gp-frame-entry-project.h: gp_dma_to_gain_project — worktree-only
|
Guarded 25-guest-cycle route sets six address-modulo registers and loads the gain buffer pointer. 16/16 saved and 4,096/4,096 varied states matched the JIT reference offline. |
| First gain return |
0x498 → 0x493
|
gp-frame-entry-project.h: gp_gain_next_project — worktree-only
|
Guarded 8-guest-cycle return retains status and updates return stack. 16/16 captured and 4,096/4,096 varied states matched two stepped JIT instructions. |
| Second gain return to feedback |
0x498 → 0x788
|
gp-frame-entry-project.h: gp_gain_to_feedback_project — worktree-only
|
Guarded 15-guest-cycle handoff sets up feedback and projects status/stack. 16/16 captured and 4,096/4,096 varied states matched six stepped JIT instructions. |
| First feedback return |
0x792 → 0x788
|
gp-frame-entry-project.h: gp_feedback_next_project — worktree-only
|
Guarded 8-guest-cycle return starts a second native 16-sample feedback block. 16/16 captured and 4,096/4,096 varied states matched two stepped JIT instructions. |
| Feedback-to-copy handoff |
0x792 → 0x608
|
gp-frame-entry-project.h: gp_feedback_to_copy_project — worktree-only
|
Guarded 28-guest-cycle setup; 16/16 captured and 4,096/4,096 varied states matched 11 stepped JIT instructions. |
| Stride audio copy |
0x608 → 0x60a
|
gp-frame-entry-project.h: gp_stride_copy_project — worktree-only
|
Guarded 32-guest-cycle loop preserves ordered in-place overlapping samples and loop state. 16/16 captured and 4,096/4,096 varied states matched 32 stepped JIT instructions; scope is the tested alias-buffer range and matching state. |
| Copy DMA acknowledgement |
0x60a → 0x60c
|
gp-frame-entry-project.h: gp_copy_ack_project — worktree-only
|
Guarded 16-guest-cycle route acknowledges DMA EOL through the existing peripheral. 16/16 saved states and 4,096/4,096 variants matched four stepped DSP instructions. |
| Acknowledgement to mix |
0x60c → 0x5a9
|
gp-frame-entry-project.h: gp_ack_to_mix_project — worktree-only
|
Guarded 42-guest-cycle route prepares the mixing loop for control 0xce–0xdd and increments it. 16/16 saved states and 4,096/4,096 variants matched 15 stepped DSP instructions. |
| Interpolation/mix loop |
0x5a9 → 0x5b1
|
gp-frame-entry-project.h: gp_mix_loop_project — worktree-only
|
Guarded 48-guest-cycle six-value fixed-point projection covers source/destination, accumulator and flags. Overlap or unqualified clipping/delta is rejected. 16/16 saved and 4,096/4,096 bounded synthetic states matched 42 JIT steps. |
| Mix-end control dispatch |
0x5b1 → 0x4e2 (nonzero second control), or 0x501 (zero) |
gp-frame-entry-project.h: gp_mix_end_control_project — worktree-only
|
Guarded 26-guest-cycle projection accepts first control 0x1000/0x2000 and second control 0–0x100. 16/16 captured and 4,096/4,096 varied states matched eight JIT steps. |
Control 0x100
|
0x4e2 → 0x4a0
|
gp-frame-entry-project.h: gp_control_100_project — worktree-only
|
Clears the control, updates the tested effect state and starts the native add loop. One saved input and 256 varied states matched the DSP; offline only. |
Control 0x80
|
0x4e2 → 0x8b5 → 0x585 → 0x4f4
|
gp-frame-entry-project.h: gp_control_80_entry_project, gp_control_80_effect_project, gp_control_80_ramp_setup_project — worktree-only
|
Guarded effect setup and bounded wrap arithmetic feed a signed gain ramp. 256 setup, 512 effect, 256 ramp setup and 256 negative-ramp variants matched the DSP. The 4,096-iteration limit was checked; larger loops are rejected. Offline only. |
| Zero control reset and ramp |
0x501 → 0x4f4
|
gp-frame-entry-project.h: gp_control_zero_project — worktree-only
|
Resets the tested effect pointers and prepares the native gain ramp. One saved input and 256 varied states matched the DSP; offline only. |
| Control to gain ramp |
0x4e2 → 0x4f4
|
gp-frame-entry-project.h: gp_control_to_ramp_project — worktree-only
|
Guarded 31-guest-cycle setup; 13/13 captured and 3,328/3,328 varied states matched the stepped DSP reference. Other controls remain unsupported. |
| Gain ramp |
0x4f4 → 0x4f9
|
gp-frame-entry-project.h: gp_ramp_loop_project — worktree-only
|
Guarded 80-guest-cycle 16-sample native ramp supports tested ±0x10000 steps and signed clipping. 13/13 captured and 3,328/3,328 varied states matched the stepped DSP reference. |
| Ramp to audio add |
0x4f9 → 0x4a0
|
gp-frame-entry-project.h: gp_ramp_to_add_project — worktree-only
|
Guarded 32-guest-cycle handoff writes completed gain/control, restores loop stack and sets up native add. 13/13 captured and 3,328/3,328 varied states matched 10 stepped JIT operations. |
| Add continuation |
0x4a6 → 0x4a0
|
gp-frame-entry-project.h: gp_add_next_project — worktree-only
|
Guarded 12-guest-cycle return to the next add. 13/13 saved states and 3,328/3,328 varied states matched stepped JIT offline. |
| Final add to MAC |
0x4a6 → 0x49b
|
gp-frame-entry-project.h: gp_add_final_to_mac_project — worktree-only
|
Guarded 30-guest-cycle handoff to multiply-accumulate. 13/13 saved states and 3,328/3,328 varied states matched stepped JIT offline. |
| MAC continuation |
0x49f → 0x49b
|
gp-frame-entry-project.h: gp_mac_next_project — worktree-only
|
Guarded 15-guest-cycle continuation, not final exit. 13 saved starting states × 256 variants produced 3,328 matches against the JIT reference. |
| MAC final exit |
0x49f → 0x625
|
gp-frame-entry-project.h: gp_mac_final_project — worktree-only
|
Guarded four-guest-cycle exit restores loop stack and LF/FV flags; nested loop and modified program are rejected. 3,328 varied states matched two stepped JIT instructions. |
| Second MAC setup |
0x625 → 0x49b
|
gp-frame-entry-project.h: gp_mac_second_setup_project — worktree-only
|
Guarded 32-guest-cycle buffer pointer, gain, nested loop and stack setup. 3,328 varied states from 13 saved starts matched 11 stepped JIT instructions. |
| Nested MAC continuation |
0x49f → 0x49b
|
gp-frame-entry-project.h: gp_mac_nested_next_project — worktree-only
|
Guarded 16-guest-cycle return loads the next gain and restores destination pointer and nested stack. 3,328 varied states from 13 starts matched six stepped JIT instructions. |
| Outer MAC continuation |
0x49f → 0x49b
|
gp-frame-entry-project.h: gp_mac_outer_next_project — worktree-only
|
Guarded 22-guest-cycle inner-loop exit advances source/destination by N2 = 16, then sets the next gain and stack. 3,328 varied states from 13 starts matched eight stepped JIT instructions. |
| Outer MAC final exit |
0x49f → 0x637
|
gp-frame-entry-project.h: gp_mac_outer_final_project — worktree-only
|
Guarded five-guest-cycle final inner/outer exit, XRAM read, pointer advance and stack/LF/FV restoration. 3,328 varied states from 13 starts matched three stepped JIT instructions. |
| Three-pointer mix setup |
0x637 → 0x4a9
|
gp-frame-entry-project.h: gp_mix3_setup_project — worktree-only
|
Guarded 19-guest-cycle setup; 3,328 varied states from 13 starts matched five stepped DSP instructions. |
| Two-input signed mix |
0x4a9 → 0x4ad
|
gp-frame-entry-project.h: gp_mix3_loop_project — worktree-only
|
Guarded 64-guest-cycle loop sums 16 signed 24-bit input pairs into separate output. Clipping and output/input overlap are rejected; 3,328 varied states matched 64 stepped DSP instructions. |
| Mix return to mix |
0x4ad → 0x4a9
|
gp-frame-entry-project.h: gp_mix3_next_project — worktree-only
|
Guarded 16-guest-cycle handoff selects the tested return address and reloads buffers. 3,328 varied states from 13 starts matched four stepped DSP instructions. |
| Mix return to add |
0x4ad → 0x4a0
|
gp-frame-entry-project.h: gp_mix3_to_add_project — worktree-only
|
Guarded 14-guest-cycle handoff selects a different return address and reloads buffers. 3,328 varied states from 13 starts matched four stepped DSP instructions. |
| Mix return to gain |
0x4ad → 0x493
|
gp-frame-entry-project.h: gp_mix3_to_gain_project — worktree-only
|
Guarded 14-guest-cycle return reloads buffer/gain for native gain. 3,328 varied states from 13 starts matched four stepped DSP instructions. |
| Post-mix gain returns |
0x498 → 0x493 via 0x663 or 0x669
|
gp-frame-entry-project.h: gp_post_mix_gain_next_project — worktree-only
|
Guarded gain/buffer reload or direct continuation takes 14/8 guest cycles. 6,656 varied states across 13 starts and two phases matched four/two stepped JIT instructions. |
| Post-gain add handoffs |
0x498 via 0x66b, or 0x4a6 via 0x671 → 0x4a0
|
gp-frame-entry-project.h: gp_post_gain_add_project — worktree-only
|
Guarded pointer reload or direct continuation takes 14/8 guest cycles. 6,656 varied states across 13 starts and two phases matched four/two stepped JIT instructions. |
| Post-gain copy setup |
0x4a6 → 0x490
|
gp-frame-entry-project.h: gp_post_gain_copy_setup_project — worktree-only
|
Guarded 19-guest-cycle setup. 3,328 varied states across 13 starts matched five stepped DSP instructions. |
| Post-gain copy loop |
0x490 → 0x492
|
gp-frame-entry-project.h: gp_post_gain_copy_loop_project — worktree-only
|
Guarded 32-guest-cycle, 16-sample copy preserves ordered overlap and recognized XRAM aliases. 3,328 varied cases matched 32 stepped DSP instructions. |
| Post-gain copy continuation |
0x492 → 0x490 via 0x679
|
gp-frame-entry-project.h: gp_post_gain_copy_next_project — worktree-only
|
Guarded 13-guest-cycle handoff sets loop state for the next copy. 3,328 varied states across 13 starts matched three stepped DSP instructions. |
| Copy to feedback |
0x492 → 0x788 via 0x67b
|
gp-frame-entry-project.h: gp_copy_to_feedback_project — worktree-only
|
Guarded 15-guest-cycle handoff reloads audio buffer and sets feedback pointer, accumulator, flags and return stack. 3,328 varied states across 13 starts matched six stepped DSP instructions. |
| Post-copy feedback returns |
0x792 → 0x788 via 0x683 or 0x689
|
gp-frame-entry-project.h: gp_post_copy_feedback_next_project — worktree-only
|
Guarded 12/22-guest-cycle handoffs; the second sets up a three-block loop with buffer/state pointers. 6,656 varied states matched five/nine stepped DSP instructions. |
| Feedback loop continuation and exit |
0x792 via 0x695 → 0x788 or 0x697
|
gp-frame-entry-project.h: gp_feedback_loop_next_project — worktree-only
|
Guarded 10-cycle continuation or five-cycle final exit advances buffer/state pointers, restores loop stack and handles XRAM aliases. 9,984 varied states matched stepped JIT offline. |
| Feedback to matrix |
0x697 → 0x6a2
|
gp-frame-entry-project.h: gp_feedback_to_matrix_project — worktree-only
|
Guarded 16-cycle buffer/coefficient pointers and four-iteration setup enters native four-input matrix. 3,328 varied states matched seven stepped DSP instructions. |
| Matrix loop continuation and exit |
0x6ae → 0x6a2 or 0x6af
|
gp-frame-entry-project.h: gp_matrix_loop_next_project — worktree-only
|
Guarded four-cycle continuation or one-cycle final exit preserves coefficient, buffer and loop state. 13,312 varied states matched stepped JIT offline. |
| Matrix-to-add setup |
0x6af → 0x4a0
|
gp-frame-entry-project.h: gp_matrix_add_setup_project — worktree-only
|
Guarded 16-cycle setup loads two buffers and prepares a four-channel add. 13 captured and 3,328 varied states matched the stepped JIT offline. |
| Matrix add loop returns |
0x4a6 → 0x4a0 or 0x6b8
|
gp-frame-entry-project.h: gp_matrix_add_next_project — worktree-only
|
Guarded 12-cycle continuation or four-cycle final exit. 13,312 varied states matched stepped JIT across four phases. |
| Matrix-to-feedback setup |
0x6b8 → 0x788
|
gp-frame-entry-project.h: gp_matrix_feedback_setup_project — worktree-only
|
Guarded 18-cycle setup; 3,328 varied states from 13 starts matched stepped JIT. Unverified accumulator states are rejected. |
| Matrix feedback loop returns |
0x792 → 0x788 or 0x6c4
|
gp-frame-entry-project.h: gp_matrix_feedback_next_project — worktree-only
|
Guarded ten-cycle continuation or four-cycle exit; 13,312 varied states matched stepped JIT. |
| Matrix feedback to sample copy |
0x6c4 → 0x490
|
gp-frame-entry-project.h: gp_matrix_copy_setup_project — worktree-only
|
Guarded 16-cycle setup; 3,328 varied states from 13 starts matched stepped JIT. |
| Matrix sample-copy return |
0x492 → 0x6d2
|
gp-frame-entry-project.h: gp_matrix_copy_return_project — worktree-only
|
Guarded 15-cycle return loads four pointers; 3,328 varied states from 13 starts matched stepped JIT. |
| Matrix mixer dispatch |
0x6d2 → 0x761
|
gp-frame-entry-project.h: gp_matrix_mix_dispatch_project — worktree-only
|
Guarded 24-cycle setup for control value 4; 3,328 varied states matched stepped JIT. Other control values are rejected. |
| Matrix mixer continuation |
0x77b → 0x761
|
gp-frame-entry-project.h: gp_matrix_mix_next_project — worktree-only
|
Guarded 39-cycle return sets up the second mix for control 4; 3,328 varied states matched stepped JIT. |
| Matrix second mixer to copy |
0x77b → 0x796
|
gp-frame-entry-project.h: gp_matrix_mix_to_copy_project — worktree-only
|
Guarded 24-cycle return and copy-loop setup; 3,328 varied states matched stepped JIT. |
| Matrix duplicate-sample copy |
0x796 → 0x799
|
gp-frame-entry-project.h: gp_matrix_duplicate_copy_project — worktree-only
|
Copies 16 samples twice in DSP order, including overlapping buffers; 3,328 varied states matched stepped JIT. |
| Matrix duplicate-copy return |
0x799 → 0x4a0
|
gp-frame-entry-project.h: gp_matrix_duplicate_return_project — worktree-only
|
Guarded 24-cycle returns via 0x70c, 0x71e, 0x730 or 0x742 prepare an add; 3,328 varied states matched stepped JIT for each return. |
| Post-duplicate add returns |
0x4a6 → 0x4a0 or 0x796
|
gp-frame-entry-project.h: gp_matrix_post_duplicate_add_project — worktree-only
|
Guarded 8/24/20-cycle transitions across eight return sites, including DMA setup; 26,624 varied states matched stepped JIT. |
| Post-mix add returns |
0x4a6 → 0x4a0
|
gp-frame-entry-project.h: gp_post_mix_add_next_project — worktree-only
|
Recognizes return addresses 0x649, 0x64b, 0x651, with 8/14/11 guest cycles and guarded pointer loads. 9,984 varied states matched stepped JIT offline. |
| Add to mix |
0x4a6 → 0x4a9
|
gp-frame-entry-project.h: gp_add_to_mix3_project — worktree-only
|
Guarded 22-guest-cycle handoff reloads three audio buffer pointers and loop state. 3,328 varied states from 13 saved starts matched six stepped JIT instructions. |
| Gain | 0x493 |
gp-gain-hle.h: gp_gain_hle; gp-gain-project.h: gp_gain_project — worktree-only changes
|
80/80 captured state pairs matched; post-clipping-fix stress matched 4,096/4,096 across 16 entries. Standalone math does not execute the JIT. |
| Multiply-accumulate | 0x49b |
gp-mac-hle.h: gp_mac_hle; gp-mac-project.h: gp_mac_project — worktree-only changes
|
192/192 captured state pairs matched; 4,096/4,096 synthetic cases matched after clipping repair at one entry. No general effect-chain proof. |
| Delay |
0x944 whole operation; 0x946, 0x95e continuations |
gp-delay-project.h: gp_delay_project; gp-delay-slice-project.h: gp_delay_slice_project
|
34 captured and 64 synthetic continuation transitions matched in focused tests. Live JIT-backed continuation has guards and a remaining-budget check. |
| Decimation |
0x986, 0xa02, 0xa7e, 0xafa
|
gp-decimate-hle.h: gp_decimate_hle; gp-decimate-project.h: gp_decimate_project — worktree-only changes
|
4,096/4,096 cases matched at one synthetic entry with all 36 gain/phase combinations. Other entry/state coverage remains incomplete; projection does not execute following DMA. |
| DMA stop/freeze |
0x10a, 0x8d1, 0x9c1, 0xa3d, 0xab9, 0xb35
|
dsp-replay.c: dsp_replay_native_dma_stopfreeze — worktree-only changes
|
Offline replay uses existing peripheral behavior; this is not a complete standalone DMA replacement. |
| DMA unfreeze/start |
0x118, 0x8df, 0x9cf, 0xa4b, 0xac7, 0xb43
|
dsp-replay.c: dsp_replay_native_dma_sequence — worktree-only changes
|
Offline replay preserves ordered side effects and checks results; unsupported state is rejected. |
| DMA start |
0x11c, 0x8e3, 0x9d3, 0xa4f, 0xacb, 0xb47
|
dsp-replay.c: dsp_replay_native_dma_start — worktree-only changes
|
Existing peripheral path still executes; resulting state is re-read so DMA side effects are not overwritten. |
The DMA handoffs also cover the third and fourth channels at corresponding program offsets; each fourth-channel stage matched 3,328 varied states.
The opt-in block dispatcher covers only a subset of these projections and remains experimental. Its committed dispatch logic uses the provider for unsupported work. Strict offline replay completes 16 of 16 saved GP frames with zero DSP steps and matches their recorded final state and I/O, including the tested control 0x80 frame. The worktree-only candidate uses dsp_init_gp_native_state without constructing a DSP JIT; its separate comparison path constructs a JIT reference. This is limited offline GP evidence, not complete DSP-free playback.
| Operation | DSP PC(s) | Implementation | Observed coverage and limit |
|---|---|---|---|
| Startup setup |
0x000, 0x2f3
|
ep-native-startup.h: ep_native_startup_project — worktree-only
|
Two consecutive captured setup frames matched state; this is a narrowly identified startup sequence. |
| Initial code load and mix | 0x030 |
ep-native-startup.h: ep_native_startup_mix_project — worktree-only
|
The 16-frame startup-to-steady capture matched; its recorded audio was silent. 52/52 separate synthetic inputs matched JIT PCM/state; 51 were nonzero. |
| Steady mixer and meters |
0x030 guarded entry |
ep-mix-hle.h: ep_mix_frame_hle; ep-native-engine.h: ep_native_engine_process — worktree-only
|
64/64 and 16/16 saved nonzero consecutive frames matched PCM and state. Coverage is confined to identified program/overlay and tested state. |
| EP memory, state and FIFO | Not a single DSP PC |
ep-native-engine.h, ep-native-fifo.h, dsp-ep-native.c — worktree-only
|
Offline engine validates program identity, rejects unsupported memory/state and stages output. Existing separate JIT-backed path has guest-RAM FIFO span tests; standalone engine is not connected to the live device. |
Detailed counts, negative controls, CPU and memory figures are on the HLE overview. No new live-game campaign is implied by this inventory.
DSP tooling guide and navigation updated November 2, 2026 for experimental PR #384, source 8f51d237. Capture/replay usage and limits.
The earlier wiki-wide review was published November 1, 2026. Emulator source: b7140848. Reviewed wiki content: 1d2b671. Current status · Release availability · Publication process.
- Home
- Current status
- Stable versus main
- Implemented mechanisms
- Controls and defaults
- Measured results and limits
- Complete change register
- System
- CPU and vCPU
- Memory and DMA
- Graphics / NV2A
- APU and audio
- Timing and timers
- Platform and I/O
- Hardware observations
- Fidelity boundaries
- Methodology
- PGR2 routes
- Debugging lag / hot paths
- Tools and commands
- DSP capture, replay and fuzzing
- HLE readiness and public XISO proof
- Concurrent DSP shadow and OpenAL proof
- DSP HLE operation inventory
- DSP HLE fix examples and testing
- Development
- Upstream shortlist
- Wiki maintenance
- Research / retired work
- Optimization catalog
- Hot-path shortcuts
- Researched experiments
- Unproven proposal directory
- PR lessons
- September26 snapshot
Repository · PRs · Issues