Skip to content

Improvement: Octatrack base keeps a WAVE track's bytes at boot - #1031

Closed
stigmagit wants to merge 7 commits into
repeat98:mainfrom
stigmagit:improvement/ot-base-known-wave
Closed

stigmagit wants to merge 7 commits into
repeat98:mainfrom
stigmagit:improvement/ot-base-known-wave

Conversation

@stigmagit

Copy link
Copy Markdown
Contributor

Improvement: Octatrack base keeps a WAVE track's bytes at boot

  • What was wrong or hard. The boot's battery restore (0x40025770) validates the battery-backed Part
    copies seconds before the saved module set reinstalls the machines, and refuses the whole restore at the
    first value it has to fix (beta finding 24). The base shields the tracks of Analog BD and FM Synth through
    known[] in machine_registry.c, a list that held only the ported PROTECT machines. WAVE, a native
    machine module (draft in the WAVE PR, sdk/drafts/wave), keeps FINE, OCT, DRIV, RTRG and two
    model controls in FLEX's SRC SETUP bytes, outside FLEX's ranges: a bank with a WAVE track would come
    back empty and silent at power-on.
  • What this changes. known[] gains WV 1-15 (WAVE's model is its signature's version byte: six models
    today, the rest leave room so a new model needs no base change). Native
    machine modules are listed by name, never by a pattern: a FLEX track whose NEIGHBOR bytes merely looked
    like a signature would render silent. test_machine_events.py now requires the PROTECT ports plus the
    native PROTECT modules it names. The beta base is regenerated (npm run octatrack:base -- --beta --write), and
    npm run octatrack:module-packages binds the five base-bound packages (Sidechain Compressor, Output Matrix,
    CC Map, Recorder Loop Fix, Analog BD) to its new identity; their bytes are unchanged.
    Changelog: changelog/2026-10-28-octatrack-base-known-wave.md.
  • For the owner. Whether module machines join this list one by one (as here) or through another
    mechanism is your call; so is the chooser's room of four contributed machines, which POLY8, Analog BD,
    VECTOR and FM Synth already fill.
  • How I checked it. PYTHONPATH=sdk/tests python3 -m unittest sdk/tests/test_machine_events.py sdk/tests/test_base_bound.py: 12 tests pass; npm run octatrack:module-packages -- --check: every package
    identical (playmodes keeps its declared lag). The base build's proofs pass (no stock run, bootloader copy identical, every change inside a
    declared site). On the author's MKII, 28 October 2026: a private RAM-booted base with this change
    (plus Fix: Octatrack base, SRC SETUP's encoder E and the double-tap window for module machines (SETUP_ALL, LIST flags) #943, in main since Octatrack beta base: more DSP room (receiver in the shared window), FX2 swaps keep their block, with the fix/base-oct28 bundle and the Python firmware codec #1017) ran WAVE beside FM Synth over USB. Then the same change with WV 1-15, flashed (private test base
    b30d9b09): a project saved with TABLE, MORPH and CHOIR tracks came back whole after a power cycle, the
    kept WAVE reloading from the card (reported by the author; missing: nothing).
  • What the guides lacked or got wrong. Nothing for this change.

🤖 Generated with Claude Code

stigmagit and others added 7 commits October 28, 2026 02:18
…ong the known PROTECT machines)

The boot's battery restore validates the battery-backed Part copies before
the saved set reinstalls the modules; a WAVE track's SRC SETUP values lie
outside FLEX's ranges, so without WV in known[] the whole bank was refused.
known[] gains WV 1-3 (the model is the version byte); the test now asks for
the PROTECT ports plus the native PROTECT modules named in it. The beta base
is regenerated (npm run octatrack:base -- --beta --write).
Not yet: the base-bound packages for the new identity, which need main's
standalone recipes re-pinned (PR repeat98#943 does it).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nown-wave (generated base files from main, regenerated next)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (npm run octatrack:base -- --beta --write)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nown-wave (generated base files from main, regenerated next)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… on main 4690b6e (npm run octatrack:base -- --beta --write)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…own (npm run octatrack:module-packages)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the enhancement New feature or request label Oct 28, 2026
@repeat98

Copy link
Copy Markdown
Owner

Hi, thanks, and thanks for the run on your MKII with the flashed base. The change itself is small and correct.

My problem is the order. WAVE is still a draft (#1028, under sdk/drafts/), so this puts a module that isn't in review yet into the base. The base would know WV 1-15 for good, and every unit would get a base update for a machine it can't install. Base changes for a module should ride with that module, so:

  1. Please keep this commit and fold it into WAVE's module PR when WAVE comes out of draft. Then the base rebuild, the known[] row and the module merge together. WAVE also needs the fifth ot_machines row (POLY8, Analog BD, VECTOR and FM Synth fill all four), and that's a base change too, so they can go in one base.
  2. Small one: the comment above known[] still says "WV 1-3" (machine_registry.c:133), and the code says 1-15.
  3. On "listed by name": I'd rather the list come from one place. Today the test checks known[] against machine-ports.json. A native module should declare PROTECT and its signature range in its own recipe, and the test should read it from there, not from a set written into the test. We can sort that out in the WAVE PR.

Also see Zac's note on #1028 about the name: Octabam already has an Octatrack synth called Wave. It's worth picking a name now, before it's in the catalogue.

I'll leave this open for now. Tell me if you'd rather close it and carry the commit yourself.

@repeat98

Copy link
Copy Markdown
Owner

Closing this one, as agreed on #1028: the known[] row rides with WAVE's module PR, together with the fifth ot_machines row and one base rebuild. Thanks!

@repeat98 repeat98 closed this Oct 29, 2026
stigmagit added a commit to stigmagit/modwerk that referenced this pull request Oct 29, 2026
The boot's battery restore keeps a SYNTIZ track's twelve bytes while the
module is not yet reinstalled (beta finding 24). Folded in from the
closed repeat98#1031, with its comment corrected (it said WV 1-3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants