ZoomMultistompZDL

Safe DSP Rules for Custom ZDLs

These rules are hardware-derived and cross-checked against the TI C6000 PDFs. Follow them before porting a desktop plugin algorithm, especially Airwindows effects. See TI-PDF-NOTES.md for the manual-backed details. For Airwindows release work, also follow AIRWINDOWS-EXACT-PORTS.md: approximate DSP is an experiment, not a port.

First Build

  1. Start every new effect with audio_nop: true or a tiny dry/pass-through DSP. Verify it appears on the pedal before adding audio code. For complex effects, keep the final parameter count, descriptor shape, and edit-handler strategy in this smoke test so load-time UI/linker problems are caught before the DSP is involved.
  2. Add one DSP behavior at a time. If the pedal freezes on load or first interaction, the last DSP change is guilty until proven otherwise.
  3. Keep the initial hardware-test DSP boring: no persistent state, no stack arrays, no math-library calls, no heap, no large tables.

Hard Constraints

Known Freeze Patterns

Practical Porting Shape

For a new Airwindows port:

  1. Copy source parameter names, defaults, and formulas into manifest.json.
  2. Generate a param header with write_param_header(...).
  3. Implement a no-state smoke-test DSP that uses only scalar arithmetic.
  4. Build and inspect: prefer .fardata: 0 bytes, Applied 0 .obj relocations for the DSP object, and no unexpected external symbols.
  5. Only after the pedal loads cleanly, introduce approximations of the real algorithm in small patches.
  6. Use ctx[3] for full persistent delay/reverb/chorus buffers, validate its base/end/span fields before use, and initialize large memory lazily.
  7. Avoid the object-defined edit-handler macro for release ports until a compact reloc-free page 2/3 handler is proven. Prefer isolated handler probes before coupling a multi-page UI to a full DSP kernel.
  8. Do not publish an Airwindows effect as a port until the source DSP is the DSP being run.