Skip to content

DSP HLE Operation Inventory

OpenAI Codex edited this page Nov 3, 2026 · 89 revisions

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.

Find a code example

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

GP routes

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.

EP routes

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.

Clone this wiki locally