Repository navigation
Analog BD 0.1.6-experimental: TYPE and FIXD switches, SETUP reorder, LPF OFF clockwise, 808 variation, leaner DSP - #944
Conversation
…for module machines (SETUP_ALL, LIST flags) The base's SRC SETUP editor hook (machine_registry.s, from POLY8's shared hooks) left encoder E (slot 10) read-only for every module machine, POLY8's hidden slot; Analog BD keeps HIGH there, so HIGH never moved over USB. A machine now sets MODWERK_MACHINE_SETUP_ALL to edit it. A track whose machine has no pool opened its double-tap window on stock's (empty) sample list, because Analog BD and FM Synth tracks are FLEX underneath; the base corrected it afterwards, which flickered. A new owned site at 0x400788c4 (mw_chooser_column) lets a MODWERK_MACHINE_LIST machine open on the machine list at once, as PICKUP does. Both are opt-in: POLY8, VECTOR, FM Synth and Analog BD 0.1.5 are unchanged (Analog BD 0.1.6 sets both). Beta base regenerated; the base-bound packages only change requiredBase; the machine recipes re-pin machine_ports.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wise, 808 variation, ~15% leaner DSP SRC SETUP reads TYPE, FIXD, ACNT above LOW, HIGH, LPF on both models. TYPE (808 left, 909 right) and FIXD are stock's two-state switch, as AMP SETUP's SYNC. FIXD OFF (default) varies every hit slightly: the 909 as in 0.1.5, and now the 808 too (its trigger transient scaled by 1 +/- 4% per hit); FIXD ON makes every hit open identically (808 ON is the 0.1.5 sound). LPF runs 500 Hz at 0 to 18 kHz at 126, OFF fully clockwise (127, the default). The track double tap, or a track window switched to an Analog BD track, shows the machine list with Analog BD highlighted. Labels are four letters. Projects saved with 0.1.5 need ACNT, LPF and FIXD set again. Needs the base Fix PR (SETUP_ALL and LIST flags): Analog BD sets both, so HIGH edits over USB and the double tap opens the machine list at once. Both engines are rescheduled with bit-identical audio and state: 909 peak 6534 -> 5999 and mean -15%, 808 mean -16% executed instructions per block. Base-bound release: trust row, beta base, recipe, base-bound packages, card-build packages, native comparison and the 212 composition proofs are regenerated on current main. Tested on a MKII (RAM boot, then flashed with 14 modules; survives a power cycle). The owner approval record for 0.1.6 is not included. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
repeat98
left a comment
There was a problem hiding this comment.
Thanks for this, and for the careful DSP work. The red checks are expected: modules:check fails until I write the 0.1.6 approval record. Before I do, a few things need changing:
-
0.1.5 projects change sound when they load. ACNT and LPF moved slots, and the Part signature stays
AB/1, so nothing can migrate the bytes. A track left on 0.1.5's defaults loads with ACNT 127 (old LPF byte), LPF 0, which is now 500 Hz (old hidden slot 11), and FIXD ON (old ACCNT byte).ab_clamp_switches(control.c:129) only fixes the selected track, and the DSP reads any nonzero FIXD as ON (bd909.asm, zq06), so the other tracks play FIXD ON until you select them. Octabam's trap list warns about exactly this ("A PART SAVED UNDER AN OLDER SLOT LAYOUT…"). Please migrate them: for example a new signatureAB/2(sig_lo 1), withAB/1tracks rewritten once in every Part copy when a project loads, so a 0.1.5 project keeps its sound. README line 34 should then say so; today it says saved patches keep their control bytes. -
Fresh captures instead of the waiver. You already have
ot_emucaptures of the new layout. Please replacemedia/ot-setup.png,ot-909.pngandot-808.pngwith 0.1.6 captures (scripts/capture-module-ui.py), so the approval doesn't have to waive release documentation orretainedUiVersion. -
Make the docs say what 0.1.6 does. A few places still describe earlier versions:
- FIXD is on both models, but README lines 3 and 30, TESTING.md lines 8 and 33, and the
ot-setupcaption say "909 only". - The
ot-808caption says the 808 engine is "unchanged", and TESTING.md line 8 says the 808 has no random source. - TESTING.md line 46 says 972 P words, while the manifest says 1008 and line 205 credits the 11 words to "the FIXD switch". It's −26 from rescheduling plus 37 for the 808 variation.
Please merge the 0.1.6 sections of TESTING.md into one current one.
- FIXD is on both models, but README lines 3 and 30, TESTING.md lines 8 and 33, and the
-
The "15% less DSP" claim. That's the mean count of instructions the emulator executes. The peaks fell about 8 % (909) and 5 % (808), there's no chip measurement, and the declared price of 411 per voice is unchanged, so players don't get more room. Please word the changelog line and the title along those lines ("about 15 % fewer DSP instructions on average, emulator count").
-
Small things: the changelog date is 2026-10-24, the version was never released then, and "HIGH can be edited over USB again" (it never could). Also the
if(1) return;inab_engine_open(control.c:268) leaves the whole engine-browser body as dead code. Fine for now if the UI fixtures need the symbols, but say so in a comment.
The hardware results match the build this PR publishes today (base 9976a5e8, package dfcb89a1). The changes above mean a new build anyway, and other base pull requests are ahead of #943 in the queue, so please hold the next unit run until #943 is rebuilt on current main. I'll merge #943 and this back to back after that.
|
Thanks, this is careful work, and the bit-exact reschedule is a nice find. Two things on my side before the approval.
It's stacked on #943, so it waits for that one, and it now conflicts with main in the base files after #857. |
Regenerated with their producers: events.py --write, then npm run octatrack:base -- --beta --write (beta base 68e6a90b) and npm run octatrack:module-packages (only requiredBase moved). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Thanks for the thorough review. I'll work through all of the items (AB/2 with a one-time rewrite of 0.1.5 tracks, fresh 0.1.6 captures, the doc fixes, the reworded DSP claim, the changelog date and wording, and a comment on On the controller: the point of 0.1.6 is the steady-hits switch (FIXD) on SRC SETUP, with TYPE replacing the engine browser. Those are controller changes by nature, and so is the AB/2 migration you asked for. Only the leaner DSP fits inside the current controller. Since #943 already needs a base rebuild that every unit will take, could Analog BD 0.1.6's new trust row ride that same base update if the two merge back to back, as you planned in your review? If you'd rather keep it separate, I can split this: ship the DSP-only part now and hold the switch until Phase 2 admits controllers without trust rows. Happy to go either way, and 0.1.7 for your 909 refit sounds right. Generated by Claude Code |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…log-bd-0.1.6 Generated files regenerated with their producers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> # Conflicts: # public/octatrack-modules/analog-bassdrum/0.1.6-experimental.mwrm # sdk/machines/octatrack/base-binding.json # sdk/machines/octatrack/module-adapters/controller-policies.json # sdk/machines/octatrack/module-adapters/machine-recipes.json # sdk/machines/octatrack/module-adapters/standalone-recipes.json # sdk/tests/test_resident_engines.py # 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-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
…ures) FIXD plays ON only at its stored 1, so a 0.1.5 track's accent byte in that slot reads OFF on every track. No migration and no new signature: README and the release notes say 0.1.5 projects need ACNT, LPF and FIXD set again. Docs say FIXD is on both models and the 808 now varies; the P-word count is 1009 (-26 rescheduling, +37 808 variation); the DSP claim is about 15% fewer executed instructions on average (emulator count, peaks -8%/-5%, 411 per voice unchanged). TESTING.md has one current 0.1.6 section. Fresh ot_emu captures of this source. The unreachable engine browser in ab_engine_open is explained. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e recipe for base 68e6a90b Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Card-build packages rebuilt in the toolchain image (modules:import); the Tape Echo and Euclid standalone recipes and the other machine recipes re-pin the inputs that moved. Beta base f0a01f62 carries 0.1.6's trust row; the base-bound packages relinked (octatrack:module-packages). Analog BD's 212 composition proofs re-exported natively (146 builds and 66 refusals, the refusals as on main); verify-analog-bd-native passes. module:verify: 160 selections, 0 mismatches. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Regenerated with their producers: events.py --write, then npm run octatrack:base -- --beta --write (beta base b2810a87) and npm run octatrack:module-packages (only requiredBase moved). The Tape Echo and Euclid standalone recipes re-pin module-build.ts and the card-build assets repeat98#993 changed, or octatrack:module-packages refuses. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…log-bd-0.1.6 Generated files regenerated with their producers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> # Conflicts: # sdk/machines/octatrack/base-binding.json # sdk/machines/octatrack/module-adapters/standalone-recipes.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-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
Card-build packages re-imported from the toolchain image; the Tape Echo and Euclid standalone recipes re-pin the assets that moved; Analog BD's recipe recaptured (image unchanged); beta base rebuilt with 0.1.6's trust row; the base-bound packages relinked. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…, 0 mismatches) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…log-bd-0.1.6 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ted-link-proofs.py, toolchain image) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…log-bd-0.1.6 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Hardware results of this build (base 64ce4825, package a2def725) and of the flashed personal base; the DSP load measured on dev twins of both bases (one voice: 909 -26 %, 808 -21 % mean), kept apart from the emulator count in TESTING.md, README, the manifest and the release notes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
I've pushed the review fixes, except one: there's no AB/2 migration. Here's why, and what I did instead. Why no AB/2. AB/1 is wired into the base as well as the module: What changed instead
The rest of your list
Both branches carry main at Hardware (my MKII, today). On Generated by Claude Code |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Thanks for working through the whole list. Here's where I've landed on the two open points:
Two small things before the merge:
I'll add the approval record for 0.1.6 myself once those are pushed. |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nto claude/analog-bd-0.1.6 Generated files regenerated with their producers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> # Conflicts: # docs/module-guides/machines.md # public/octatrack-modules/analog-bassdrum/0.1.6-experimental.mwrm # scripts/module-source.test.mjs # sdk/machines/octatrack/HOOKS.md # sdk/machines/octatrack/base-binding.json # sdk/machines/octatrack/elekloader/runtime_events.h # sdk/machines/octatrack/events.json # sdk/machines/octatrack/include/modwerk_events.h # sdk/machines/octatrack/module-adapters/analog_bd_native_observations.json # sdk/machines/octatrack/module-adapters/controller-policies.json # sdk/machines/octatrack/module-adapters/machine-recipes.json # sdk/machines/octatrack/module-adapters/machine_ports.py # 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-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
Card-build packages re-imported from the toolchain image; Analog BD's recipe recaptured on the new base's lease entries; the beta base rebuilt with 0.1.6's trust row; the base-bound packages relinked; the Tape Echo and Euclid standalone recipes and the machine recipes re-pin their inputs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ested builds Analog BD's 212 composition proofs re-exported natively (146 builds, 66 refusals as on main; verify-analog-bd-native passes). module:verify: 164 selections, 0 mismatches. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Thanks! Both points are in, and it's ready for your approval record.
The hardware results in TESTING.md and the description are from the 27 October build (base Generated by Claude Code |
Generated base files regenerated with their producers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> # 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
octatrack:base --beta --write with 0.1.6's trust row and octatrack:module-packages; Analog BD's recipe and package are unchanged (f83c7f81). TESTING names the new base. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Addressed: the requested changes are in, and the owner approved the 0.1.6 record.
Brings in Analog BD 0.1.6 (repeat98#944, beta base 6483508a) and the later docs merges. The generated base files were regenerated with their producers, not resolved by hand: octatrack:base --stock OS1.40C --beta --write and octatrack:module-packages. The five base-bound packages rebind byte-identical (requiredBase a542a515); Analog BD's package is unchanged (f83c7f81). Test mode 64 does not clash: main's board test ends at mode 63. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Requested by Nathaniel
#943 (base flags
SETUP_ALLandLIST) landed onmainin #1017; this branch carriesmainat4690b6eb.Analog BD 0.1.6-experimental
What changes for players:
SETUP_ALL).LIST).dsp_host, 52 scenarios): about 15 % fewer executed instructions on average; peaks about 8 % lower on the 909 (6534 → 5999 per 16-sample block) and 5 % lower on the 808 (4260 → 4034).Review follow-up (repeat98's 26 October review)
known[],machine_contributors.c, the card composition, the Part-restore tests). A new signature needs base code so that an absent Analog BD's tracks stay protected through the boot restore (finding 24). With the base in flux, I'd rather add no migration code to the base or the module for an experimental module whose re-set is documented. What changed instead:ot_emucaptures of this source (SETUP, 808 page, 909 page). They come from a native card build with Analog BD alone,media/capture.jsonrecords the plan, and every image was opened. NoretainedUiVersionorrelease-documentationwaiver is needed.if(1) return;inab_engine_openhas a comment saying why the browser code stays compiled (the card build's list hooks and the CF verifier name its symbols).Compatibility: conflicts unchanged (synth). Base-bound: this release needs the regenerated beta base
6483508a, which carries 0.1.6's trust row (rebuilt onmainafter #1017, #1026 and #1030). Analog BD's package isf83c7f81. The trust row, the recipe and the packages are in this PR. The Analog BD package isa2def725.Attribution: Analog BD is repeat98's module, and repeat98 is also the owner reviewing this PR; I have no separate author approval to link.
What the guides lacked: how to make a SETUP control a two-state switch, and the encoder-E rule. Both were fixed in #943, now on
main(docs/module-guides/machines.md). This release carries no guide edit.Owner approval needed
modules:check(and with itmodules:generateinpr:ready) fails untilsdk/analog-bassdrum-build-approval.jsoncovers 0.1.6. I did not write it. The fields it needs:version:0.1.6-experimentalsourceSha256:0ddc82a295d320300a0e03c0c9cf836d19d887dfd2d340ff442d5185a4c23d43waived:current-build-hardware,chip-worst-case-cycles,complete-memory-bounds. Norelease-documentationorretainedUiVersion, now that the captures are fresh.approvedBy,approvedOn,ownerStatementandreason: yoursWith a stand-in record committed locally (never pushed),
npm run pr:readysays Ready (28 October, onmainat4690b6eb, check passed in 238 s).Hardware results
The rebuild on base
6483508a(packagef83c7f81) differs from the tested build only in the base link (the lease entries moved withmain's base); it is not yet tested on hardware.Tested build: base
64ce4825, packagea2def725(MKII, reported by me, npp1993, 27 October):64ce4825RAM-booted, Analog BDa2def725kept: self-test passed. SRC SETUP reads TYPE FIXD ACNT / LOW HIGH LPF with 4-letter labels; TYPE flips 808/909 live; FIXD shows and switches on both models; encoder E moves HIGH; LPF reads OFF fully clockwise; the double tap opens the machine list at once with no flicker.5afa623e(this branch plus a separate base fix, not in this PR) with 13 other modules: self-test passed (14/14, 9 DSP effects together, cores 77 % / 80 %); after a power cycle it started from that slot and reloaded all 14.Earlier 0.1.6 builds, reported by me (npp1993) on a MKII. The last was flashed base
9976a5e8with Analog BDdfcb89a1and 13 other modules. These worked:Validation (this build)
Card-build packages: rebuilt in the toolchain image (
build-modules-isolated.sh,modules:import). The requested GNU link proofs were refreshed (export-requested-link-proofs.py).Recipe pins: the reviewed Analog BD source pins were moved for
control.c/control.s. Analog BD's recipe was recaptured against the base's lease symbols. The other machine recipes re-pinmachine-ports.json, and the Tape Echo and Euclid standalone recipes re-pin the card-build assets.module:verify: 164 selections, 0 mismatches (rerun on base06bdc59e;module:doctorconfirms it still matches on6483508a).Composition proofs: Analog BD's 212 proofs were re-exported natively on base
06bdc59e(146 builds, 66 refusals; the refusals are the same set as onmain).verify-analog-bd-nativepasses.dsp_hostand exact render: unchanged from the previous push, since the DSP code is unchanged.exact-render.jsonholds 0.1.6's hashes.npm run pr:ready: Ready with the stand-in approval (check passed in 189 s). Without it, only the approval record is missing.Changing a module someone else wrote: author said yes (the author is the owner reviewing this)
I read the machines guide, and TESTING.md lists what I did not test.
Source and media are mine or properly licensed; nothing comes from Elektron firmware.
Screenshots are real captures of the current module UI (fresh
ot_emucaptures of this source).🤖 Generated with Claude Code