The goal is not to paste desktop Airwindows code directly into a pedal build. The goal is to make flash-safe ZDLs first, then approach the original DSP in hardware-tested increments.
Important naming rule: if the DSP is not the Airwindows DSP, the build is an
experiment, not a port. See docs/AIRWINDOWS-EXACT-PORTS.md.
Each effect directory should have:
manifest.json with source parameter names/defaults/formulas.build.py that calls write_param_header(...) when DSP needs params.<effect>.c exporting the manifest’s audio_func_name in .audio.*_params.h header, ignored by git.For first hardware tests:
.fardata: 0 bytes whenever possible.double, integer division/modulo, long long, or implicit heavy
conversions in first probes. TI may emit RTS helpers that are not bundled.ctx[11] / ctx[12] magic shuttle..fardata: 0 bytes, no unexpected external symbols, and no object
relocations from DSP code.--mem_model:data=far; scalar statics/globals otherwise become near
.bss data accessed via B14.--opt_for_space on DSP code unless you want to test the exact
emitted helper symbols. It can introduce push/pop or call-stub RTS helpers..audio with #pragma CODE_SECTION.*_params.h headers should be produced from the manifest so UI
defaults and DSP fallback defaults stay in sync.Many Airwindows plugins are state-heavy. StereoChorus has two
int[65536] delay buffers; reverbs and tape effects often have similar
state. Do not port those buffers into .fardata. For StereoChorus, hardware
probes have now proven enough per-instance space in ctx[3]; use that arena
for large state and keep .fardata tiny. Record the exact source parameter laws
in the manifest and document any math substitutions.
ToTape9 is the current warning case and success case: the full ctx[3]
kernel builds with .fardata: 0 bytes, T9InitOnly proves lazy ctx[3] init is
safe, and the no-divide release build now loads and runs on the test MS-70CDR.
VerbTiny and Galactic extend the same approach into reverb-sized state.
Before deepening another 9-parameter or helper-heavy port, prove the final
UI/descriptor/edit-handler shape with audio-NOP and tiny DSP builds, then add
DSP helpers only in isolated increments. For ToTape9 specifically, keep
watching parameter-default and preset lifecycle behavior.
Any beta core that is not source DSP is only for ABI probing. It must not be described as a finished Airwindows port unless it runs the source algorithm.
See docs/SAFE-DSP-RULES.md and build/ABI.md before making a port more
ambitious. See docs/TI-PDF-NOTES.md for the underlying TI manual notes.