Repository navigation
Conversation
…re a hook site (repeat98#1098) dsp-sites.json gives site 5 the kind "chain" with its features in call order. The resident stub calls each packaged member in turn (a dormant member is a lone rts), then replays stock; a packaged engine leaves through the chain's trampoline. Engine arrays follow the ledger (MW_ENGINE_FEATURES = MW_DSP_COUNT), and machine controllers are named by their port's "lease" in machine-ports.json (machine_lease_policy.py replaces the Analog BD-named policy). Regions stay ledger-declared per machine. Analog BD's package code is unchanged. Two-member chain test in test_resident_engines. Replayed from the reviewed prototype (3e70e47d..32bbd838) onto current main; generated files are main's here and regenerated in the following commits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ked (Analog BD, Output Matrix, Sidechain Compressor); Analog BD's recipe recaptured; build.py pins refreshed in the standalone and candidate recipes Analog BD's machine recipe: imageSha256 6d3a27ab -> 44ac9e07 (the base's link moved) and its build.py and machine-ports.json pins. Play Modes' standalone recipe takes only build.py's new pin (its other pins stay 0.1.1's, as its declared lag needs). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…orts' recipes (POLY8, Quantizer, Synth, VECTOR: images unchanged) and Pattern Sample Locks' host recipe Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks Zac, this is the chain I had in mind, and the code reads well: no hook index moves, no module source changes, and the dormant path costs what it does today. Three things before it can go in:
Once it's refreshed it's ready for a run on a unit before it merges. |
…skipUnless per simulator test Review on repeat98#1418. The core-A fault was the harness's: Analog BD's glue takes its voice block from VBASE + 2 * X:$418 (the voice stock is rendering), which the test never set, so the filled random word sent core A's block outside the interpreter's memory. With X:$418 = 0 core A's working path runs to the stock exit (210 instructions, bit-exact placed vs resident), the 160-instruction LIMIT is gone, and the chain test covers Analog BD on both cores. The chain test had its skipUnless twice and the next test none, so that one errored without the simulator; each now has one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # public/octatrack-modules/analog-bassdrum/0.1.7-experimental.mwrm # sdk/machines/octatrack/base-binding.json # src/engine/assets/octatrack-base-variants.json # src/engine/assets/octatrack-base.elemod # src/engine/assets/octatrack-module-packages.json
…; 0.1.7 relinked to it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….2 (the same code as 0.2.1) The base moves, so the base-bound package has to be rebuilt; a declared lag keeps a package as it is (octatrack-module-packages.py), so the lag goes and the USB package is 0.2.2: 0.2.1's code, relinked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@repeat98 Thanks. All three are pushed (
Ready for a run on a unit whenever you have your MKII to hand. |
|
Thanks Zac, all three are in: one Sidechain as 0.2.2 over USB: yes. The card builder is gone since this morning (#1451, #1453), so there's no card placement left for 0.2.2 to differ in, and the USB package should simply carry the catalogue's version. #1453 landed on One question: twwwy noted on the board that What's left is my run on the MKII (Analog BD keyed, Keep/Undo, removal). I'll take this one first, since it's level with |
# Conflicts: # sdk/machines/octatrack/base-binding.json # src/engine/assets/octatrack-base-variants.json # src/engine/assets/octatrack-base.elemod # src/engine/assets/octatrack-module-packages.json
…ds since 0.1.7 test_resident_engines expected 0.1.6's 1,009 (twwwy, on the board): it fails on main as on this branch wherever the DSP assembler is present; CI has none. The chain does not change the engine. Sidechain Compressor's USB package stays 0.2.2 on the rebuilt base (agreed on repeat98#1418). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@repeat98 Thanks, and twwwy is right. My "44 OK" was out of date: I ran it before merging Analog BD 0.1.7 into the branch and didn't run the simulator tests again after the merge. That was my mistake.
Over to your MKII run. |
|
Thanks Zac, and for setting the record straight on the 1,004 words. The test fix is right. #1492 landed this morning and rebuilt the base again, so the branch conflicts with The red My MKII run comes on that refreshed build. |
# Conflicts: # public/octatrack-modules/analog-bassdrum/0.1.7-experimental.mwrm # public/octatrack-modules/output-matrix/0.1.1-experimental.mwrm # public/octatrack-modules/sidechain-compressor/0.2.2-experimental.mwrm # sdk/machines/octatrack/base-binding.json # sdk/machines/octatrack/module-adapters/controller-policies.json # sdk/machines/octatrack/module-adapters/machine-recipes.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
…ages relinked; Analog BD's recipe recaptured (cd17acc9) and build.py pins refreshed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@repeat98 Refreshed ( |
@repeat98 The hook-slot PR you cleared on #1098: Phase 1's generic DSP hook slots, built as the per-feature chain you approved there ("the chain is what I meant by hook slots"), with the ledger rule as it is.
dsp-sites.jsongives site 5"kind": "chain"with its"features"in call order. The resident stub calls each enabled member's engine in turn (one longbsreach; a dormant member is a lonerts), then replays stock.mw_engine_exit_of(site, core), generated). A member that doesn't render returns, and the track passes on.MW_ENGINE_FEATURES = MW_DSP_COUNT; the dev view stays 4)."lease"inmachine-ports.json:machine_lease_policy.pyreplaces the Analog BD-named policy, andbuild.pyandbase_bound.pyread it.analog_bd_write_lease.pyis untouched (Analog BD's native observations pin it).dsp_asmsubstitutes labels as text, so a label that prefixes another breaks (hwchk1andhwchk16). Receiver labels are padded to three digits, and the reset cursors are generated by the receiver.1677e881…; the browser.binequalsbuild_core.py's,396582db….imageSha2566d3a27ab → 44ac9e07, the same recapture as the prototype.build.py/machine-ports.jsonpins in the other machine ports (images unchanged), the standalone and candidate recipes, and Pattern Sample Locks' host recipe. Play Modes' recipe takes onlybuild.py's new pin, as its declared lag needs.test_resident_*in the toolchain container: 44 tests, with the real resident engine in the DSP56300 simulator.test_two_packaged_engines_share_a_chain_siteputs a second, made-up member (feature 16) beside Analog BD's: each renders only its own tracks, the stack is balanced at the site (stock SP = 0 at site 5 on both cores,ot_emu --dsp-pcwatch), and a mutated trampoline that skips the pop is caught..binequals the native one, every change sits inside a declared site, and the bootloader's Startup Menu recovery stays available.octatrack:module-packages -- --checkpasses.npm run pr:ready: Ready.docs/OCTATRACK_PACKAGE_DSP_HOOKS.mddescribed one packaged engine per site and a status from 20 October. It now has the chain and the current status. Changelog:changelog/2026-11-03-octatrack-dsp-hook-chains.md.Related to #1098 and #1064.
🤖 Generated with Claude Code