Repository navigation
Sidechain Compressor 0.2.2: ColdFire units join the DRAM runtime when the set has one (#1175) - #1195
Conversation
…F0 (repeat98#1064) Frees Y $7F0-$9FF on both cores for a DSP machine's voice. The key bus moves to the tail of the first internal FX2 slot (+$3E00, past every +$3DFD ring), Sidechain Compressor's MON words to Y $FF0-$FFF (no stock effect writes either range: emulator, every stock effect through FX1/FX2 on all tracks, both cores). - dsp-sites.json / dsp_ledger.h / resident_dsp: feature 1 owns three regions, feature 8 the window and the bus at $7E00. A reset chunk stops at every region end from the ledger (MW_DSP_RESET_END); the board's 528 and the driver's single split assumed two regions. - Sidechain Compressor 0.2.1: manifest tokens and declared ranges only (source: Zac-Kyoti/octatrack-kyoti-fw 8868867). - Sidechain Ringmod 0.2.1: the same-core read at $7E00 (npp1993 agreed). - BBD Delay 0.1.2: buffer_words 0x203A as octabam repeat98#783 (JamCones agreed), so it stays clear of the bus on T1/T5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sidechain Compressor 0.2.1 and BBD Delay 0.1.2: hardware reports from the author's MKI (30 October 2026), native images fb7c5e31 / c234d13c. Sidechain Ringmod 0.2.1: screens on its native card image; hardware pending (USB only). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ay 0.1.2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- octatrack:base --beta --write: base 62ed0ec0 (controller trust rows, base binding and base assets); Analog BD's machine recipe recaptured (only imageSha256 moved: the base's symbols shifted). - octatrack:module-packages --stock: Sidechain Compressor 0.2.1 (fd275bf2), Sidechain Ringmod 0.2.1 (91281f07), BBD Delay 0.1.2 (58b77069, buffer 8,250); Output Matrix and Analog BD rebound to the new base. Earlier versions' files kept as on main. - Tape Echo's and Euclid's standalone recipes re-pin the rebuilt shared assets (as repeat98#969). - Sidechain Compressor's composed image recorded (9b8c9ed3, captures pixel-identical to the native image's). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, import record author pin Suites sidechain / sidechain-visible / analog-bd: the same selections build and refuse as with 0.2.0; only selections containing the module changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…records - module:verify: Sidechain Compressor, Sidechain Ringmod and BBD Delay, 0 mismatches of 162 selections each. - modules:pairs: bbd+sidechain-compressor is no longer refused in card builds (BBD's 8,250-word claim stays clear of Sidechain's key window). - Tests that pinned Sidechain's two-region reset or the old MON address (test_owned_transfer, test_resident_boot, sidechain-compressor.test.ts). - BBD and Ringmod performance records carried to their new versions (same instructions); the hooks doc does not grow. Sidechain Ringmod 0.2.1's qualification stays 0.2.0's until its USB run on a unit, so modules:generate refuses and module-documents.json is not regenerated in this branch yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dalone recipes re-pinned Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d's release note names the T1/T5 limit BBD's conflict with Sidechain Compressor existed only because of the 16K claim (repeat98#731); with 8,250 words the pair builds (review on repeat98#1098). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…generated next) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… base-bound packages relinked Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n another module carries one Native: remix.machine_composition.join_runtime (compose_map) sets dram=True on them, and build_bus resolves raw descriptor words after the platform runtime link. Browser: createStaticColdFireRuntime links them at the module's place in the selection, module-menus resolves the module's raw pointers and detours from the runtime. Packages: build-module-packages emits the joining units for the runtime's ISA (coldfire-packages.json, joinRuntime). Sidechain Compressor lists sc_cf and sc_ui (repeat98#1175). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ock-replacing module leads while stock FX2 stays) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ve; native compose_map) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…when the set carries one (repeat98#1175) Source pin Zac-Kyoti/octatrack-kyoti-fw ad7ecd2 (placement.json added; every other source is 0.2.1's). Hardware: the author's MKI, 3 November 2026, beside Direct Jump (MAIN e77ec14b) and the six modules of repeat98#1175 (ebaf5116), all tests pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…modwerk-source-tools 2c78cdad) coldfire-packages.json gains the two joining units (sc_cf, sc_ui; byte-identical to the objects in the flashed images); the other assets change only SC's version labels, the source commit and the builder's own hash. TESTING.md records how the release images differ from the flashed ones: the core logger's identity text only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…time; effects guide and SDK changelog Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ls and builder hash only) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 0 mismatches) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, Zac, this is a good way to do option 3. No need to split it. The placement rule has one user and its tests are built on Sidechain, so I'll review the builder part here. One thing before it's ready: |
… build_bus after compose_map tools/remix is again the base's byte for byte, so the reviewed pins over tools/remix/*.py (the standalone recipes, Mute Modes' table declaration on repeat98#1007) do not move with this change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…card placement only) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…only); Tape Echo and Euclid standalone recipes re-pinned Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, Jannik. Both points are pushed (head
Once #1098 is in, I'll merge |
|
Hi Zac, #1098 is merged, so this one can move again. It conflicts with |
# Conflicts: # sdk/catalog.json # sdk/machines/octatrack/base-binding.json # sdk/machines/octatrack/module-adapters/controller-policies.json # sdk/machines/octatrack/module-adapters/standalone-recipes.json # sdk/native-comparisons/sidechain-compressor.json # sdk/octabam/modules/ring-sc/README.md # sdk/octabam/modules/ring-sc/TESTING.md # sdk/octabam/modules/sidechain-compressor/README.md # sdk/octabam/modules/sidechain-compressor/TESTING.md # sdk/octabam/modules/sidechain-compressor/evidence/hardware.md # sdk/octabam/modules/sidechain-compressor/media/capture.json # sdk/octabam/modules/sidechain-compressor/octamod.module.json # sdk/octabam/modules/sidechain-compressor/upstream/README.md # sdk/tests/test_sidechain_compressor.py # src/community/module-changelogs/sidechain-compressor.json # src/engine/assets/analog-bd-composition-proofs.json # src/engine/assets/bootstrap-package.json # src/engine/assets/coldfire-packages.json # src/engine/assets/descriptor-recipes.json # src/engine/assets/dsp-packages.json # src/engine/assets/menu-recipes.json # src/engine/assets/module-build.json # src/engine/assets/octatrack-base-fills.json # src/engine/assets/octatrack-base-sources.json # src/engine/assets/octatrack-base-variants.json # src/engine/assets/octatrack-base.elemod # src/engine/assets/octatrack-module-packages.json # src/engine/assets/platform-writes.json # src/engine/assets/requested-packages.json # src/engine/assets/resident-dsp.json # src/engine/assets/rom-packages.json # src/engine/assets/usb-audio-packages.json # src/engine/assets/utility-packages.json # src/engine/coldfire-runtime.ts # src/engine/static-compose.ts
… stays 0.2.1 (lagsBehind, card placement only) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ho and Euclid standalone recipes re-pinned Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ainst the flashed ones (logger identity only beside Direct Jump; Mute Modes 0.2.2 in the repeat98#1175 set) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ctions change: its units join Analog BD's DRAM runtime; every refusal identical); builder record runtime-join-builder.json (128 identical); Sidechain's 0.2.2 comparison record restored Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ide Direct Jump; the module alone still builds 0.2.1's image Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y makes (typecheck) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@repeat98 Done: One thing for you in the description, under Track Solo in card comparisons: Track Solo is USB-only, but native octabam still builds its DRAM units into card images, so every module's |
# Conflicts: # sdk/machines/octatrack/module-adapters/standalone-recipes.json # src/engine/assets/analog-bd-composition-proofs.json # src/engine/assets/bootstrap-package.json # src/engine/assets/coldfire-packages.json # src/engine/assets/descriptor-recipes.json # src/engine/assets/dsp-packages.json # src/engine/assets/menu-recipes.json # src/engine/assets/module-build.json # src/engine/assets/octatrack-module-packages.json # src/engine/assets/platform-writes.json # src/engine/assets/requested-packages.json # src/engine/assets/resident-dsp.json # src/engine/assets/rom-packages.json # src/engine/assets/usb-audio-packages.json # src/engine/assets/utility-packages.json
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…idechain selections change as before; every menu and refusal identical) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Hi Zac, sorry, two of my merges this morning (Analog BD 0.1.7 and the new base) conflicted with yours again. Every conflict was a generated file, so I merged On Track Solo: please send the |
Related to #1175. @repeat98: option 3 from #1175, as agreed. #1098 is in, and
mainis merged (not rebased).What was wrong
FM Synth + Sidechain Compressor + Mute Modes, with the stock FX2 effects kept, ran 8 bytes short of menu cave (
PERSONALIZE setters: 68 bytes needed, 60 left), so the build fell back to the module-only FX2 chooser: COMPRESSOR alone (#1175). Your fix for the silent fallback is separate; this one frees the space.What this changes
A shared placement rule, in both builders (owner review):
modules/<id>/placement.json. They link into the DRAM runtime only when another selected module already carries one, and into the menu cave otherwise. The runtime is a fixed ~10 MB sample-memory reserve, so this never makes a set start paying it.tools/build/runtime_join.py, whichbuild_bus.pyapplies right aftercompose_map.tools/remix/is untouched, so the pins over it (standalone recipes, table declarations) don't move.build_bus.pyalso resolves raw descriptor words after the platform runtime link (stage 1e), so a joined unit is named like a ROM one.createStaticColdFireRuntimelinks joining units at their module's place in native placement order. A module that replaces a stock effect in place leads while the stock FX2 rows stay;leadingModulesis shared withcomposeChoosers.module-menus.tsresolves the descriptor's raw pointers and detours from the runtime. With Fix: the configurator's DRAM link takes the ROM units' symbols, as the native builder does (#1312) #1343'sromparameter,leadingis the eighth parameter, so Fix: the configurator's DRAM link takes the ROM units' symbols, as the native builder does (#1312) #1343's callers are unchanged.build-module-packages.pyemits the joining units for the runtime's ISA intocoldfire-packages.json(joinRuntime: true). Both builders refuse the rule for anything but a stock-DSP effect's descriptor units.Sidechain Compressor 0.2.2, its first user:
placement.jsonnamessc_cfandsc_ui(1,314 B). The code is 0.2.1's.ad7ecd2(sdk/imports/sidechain-compressor-ad7ecd2.json).lagsBehind, card placement only), as you asked.main's text, with the 0.2.2 lines on top.How I checked it
sdk/infrastructure-verification/runtime-join-builder.json, with its test and chain entry. Two fresh native builds of the dram-rom-symbols record's 128 selections: one with the base commit'sbuild_bus.py, one with this andruntime_join.py. Everything else is the base commit's, including Sidechain's folder withoutplacement.json, so the builder is the only difference. Every image (98) and every refusal (30) is identical.module:verify -- sidechain-compressor:main: 190 selections, 72 images and 110 refusals matching, 8 mismatches, every one a selection with Track Solo.main, without it,npm run module:verify -- track-solohas 81 mismatches of 190 (sidechain-compressor+track-soloamong them). Track Solo is USB-only, so the configurator leaves it out of card builds, while native octabam still builds its DRAM units and detours into the card image. Every module's coverage set now contains Track Solo selections, so every re-run hits it. Details below.src/engine/runtime-join.test.ts: placement, native order, no reserve without another runtime.sdk/tests/test_runtime_join.py: native rule.capture-module-ui.py, MKI panel): the [sidechain-compressor] compressor only fx available on fx2 #1175 image and the module alone show identical pixels on the FX1 chooser, COMPRESSOR's main page and page 2 with KEY selected. The [sidechain-compressor] compressor only fx available on fx2 #1175 image's FX2 chooser lists the stock effects.npm run pr:ready: Ready.Not run: the USB beta base (Sidechain's USB package is unchanged, still 0.2.1) and Sidechain Ringmod on a unit.
Track Solo in card comparisons (found here, not fixed here)
Track Solo 0.2.4 is
usbOnly, socardBuildErrorrefuses it and the configurator's static runtime never links it. Its native manifest still declares threeLinked(..., dram=True)units and seven detours, soexport-composition-proofs.pybuilds them into the card image, and every selection with Track Solo differs "outside the platform writes". It's incomparisonPool(availableModules(true)), so any module'smodule:verifynow reports these.Two possible fixes: leave USB-only modules out of the card comparison pool, or have native refuse a USB-only module in a card build so both sides match as refusals. Which do you prefer? I'm happy to send it as its own
Fix:. This PR keeps its pre-merge Sidechain record until then.What the guides lacked
The effects guide had nothing on where a module's ColdFire units go. A "ColdFire units that may move" bullet is in
docs/module-guides/effects.md(Declare), and there's an SDK changelog entry.docs/module-guides/, and TESTING.md lists what I did not test. An effect module holds one effect.🤖 Generated with Claude Code