VIBE FM Mk1 Open firmware, officially supported. The first 100 get 10% off Join the list →

The Firmware Hub · FM-1 · B1

B1 for the M-VAVE FM-1

B15.6

by Joppe Sikken (SikkenWorks) GitHub ↗

synth

B1 turns the M-VAVE FM1 into a compact drawbar rock organ with 91 shared tonewheels, nine drawbars per registration, percussion, Leslie, B3/ROCK tones, MIDI and expressive live controls.

Text by the maker.

About it

Engines
Organ
Its own: SINE/ORGAN tonewheels · SAWTOOTH
Runs on
FM-1
Release
5.6 · released 2 Nov 2026 · on the hub since 2 Nov 2026596 KB · what's new
Licence
GPL-3.0 · source ↗ · copy on the hub
Flash chip
Every FM-1: it does not check the chipNot tried by us on the newer chip 0xB36014
Identity
FM-1_481026what it reports over USB while it runs
Build
Built by its maker, not signed
Popular
↓ 32 installs via the hub · ★ 4 on GitHub

More by Joppe Sikken (SikkenWorks)

Like B1

Changelog

What changed, version by version37 versions

V5.6

  • Port the production OTA core and pinned app-only loader from RUPTURE V1.52.
  • Accept the exact original V15 eight-entry directory, including empty info.log and offsets aligned according to each entry padding rather than 256 bytes.
  • Decode and validate compressed Felucca loader blocks before accepting them.
  • Always stage the built-in audited loader for compatible community packages.
  • Recognize bounded residual LOADER.BIN without requiring a commit record that the previous loader may have erased after installation.
  • Keep B1/BEETLE owner tokens compatible with prior staging attempts.
  • Use the hardware clock and a bounded eight-minute session deadline.
  • Keep USB polling in TIMER5 to avoid main-loop/interrupt SIE reentry.
  • Retain product ID FM-1_481026 and the protected boot region.
  • 17 native protocol replay cases pass; hardware validation remains outstanding.

V5.5 — Restore The Firmware Hub cross-firmware + official V15 CHECK support (2026-11-02)

  • Fix confirmed native ota_ufw regression: the updater previously recognized only two-entry community .fwsc UFWs, rejecting the eight-entry original M-VAVE V15 at CHECK before the OTA loader transition.
  • Validate both explicit UFW families with strict entry bounds, CRCs and nonoverlapping ranges. Eight-entry vendor layout also checks all eight payloads, an independently published V15 app-region SHA-256 and the complete original V15 .fwsc SHA-256 reconstructed from the host's logical packet stream. No wildcard full-flash authorization.
  • Keep the approved loader, staging, readback, success acknowledgement and OTA record unchanged. Preserve permanent FM-1_481026 identity, AUTO SAVE OFF default, 12 project slots and bit-exact audio.
  • New native 8-entry synthetic OTA positive/negative regressions and optional original-V15 replay tool. No claim that genuine V15 or on-device The Firmware Hub A→B→A has been tested yet.

V5.4 — Safer cross-firmware OTA retry and lossless transient improvement (2026-11-02)

  • Keep B1 identity FM-1_481026 in application USB-MIDI, .fwsc and WebInstaller, preserve opt-in AUTO SAVE (default OFF) and all prior projects/patches.
  • Native OTA staging ownership: previously a nonblank stage with a valid differently compiled Felucca-family loader could trigger -15 and prevent switching away. Recognize that existing reserved OTA staging only when a valid JLFS LOADER.BIN header, known loader family and CRC-validated pending update record all match. Unknown or damaged data still cause -15 and zero erases. No change to unrelated data sectors.
  • Native APP_ONLY compatibility: allow incoming app directory slots below B1's own padded app size, but no larger than the existing safe app flash region; verify the actual declared slot length and its full calculated SFC-decrypted CRC. Fix an initially discovered bug where verification still used the old fixed length. Preserve chip key (0x980F), XIP (0x02000120), app flash base (0x4000), UFW checksums and the protected boot region.
  • Audio losslessness: hoist oscillator target and click contact window from the PCM loop; when CLICK=0, avoid already-expired attack contact calculations. No change to tonewheel/voice count, filters, limiter, amplifier or rendered samples. A more aggressive nine-drawbar caching experiment regressed in host benchmarks and was not included.
  • Verification: real JieLi pi32v2 compile and packed UFW, byte-identical PCM and full DSP state across the reference scenarios, 16 host-native OTA CHECK replays plus staged-loader retry/readback/CRC-negative cases; synthetic shortened-app fixture verified. OTA host emulation does not prove actual device handoff/flash success.
  • Stock V15: retain prior strictly verified single-package vendor restore validation (no wildcard); actual stock V15 return from running V5.4 not physically confirmed.
  • Stock V16: not enabled and not claimed compatible, because the genuine original V16 package and loader/flash map were not available for native replay and physical validation. The Firmware Hub's stock catalog cannot be changed by B1's code.
  • Known hardware limitations: multiple drawbars/voices may still exceed FM1 CPU/DMA budget or cause analog/digital overload; no FM1 PEAK/DMA MISSES measurement is available. No claim of fully fixed crackling or universal firmware switching. Do not flash unknown V16/foreign-loader images through this updater.

V5.3 — Optional AUTO SAVE in the SAVE menu (2026-11-02)

  • AUTO SAVE defaults to OFF on new installations and for existing V5.2/V4.9 journals. Old live snapshots are not silently restored while OFF.
  • SAVE / PROJECT MENU, K4: clockwise ON, counterclockwise OFF. Display ON/OFF plus SETTING PENDING during deferred persistence.
  • Store the preference in the previously reserved four bytes of the existing CRC-validated, copy-on-write journal header (offset 28); old schema-3 project archive, twelve slots and older journal compatibility remain unchanged. Only the recognized 0xA5073AD5 token enables automatic saving; legacy and unknown tokens mean OFF.
  • Defer preference and scene flash writes until 5 seconds without edits and all voices/effect tails silent. The existing once-per-minute wear throttle still applies to ordinary scene autosaves. On preference change, the debounce and silence check remain mandatory; the old validated bank survives interrupted writes.
  • Manual named-project SAVE/LOAD still works with AUTO SAVE OFF. No new flash sectors, no OTA or audio engine changes, and no overwrite of foreign flash.
  • Fixed B1 package/USB identity FM-1_481026 preserved. No claim of physical headroom or cross-firmware hardware verification added.

V5.2 — Lossless Leslie/ROCK optimization (2026-11-02)

  • Reuse the same four Leslie sine lookups for Doppler delay and stereo amplitude modulation in the FULL DSP route; no change to phase or output samples.
  • Add bounded exact 32-bit fast paths to the ROCK amplifier drive, sag, cabinet blend and B3/ROCK crossfade. Original 64-bit arithmetic remains for out-of-range signals.
  • Preserve the existing exact reverb reciprocal/correction; do not claim a reverb speedup without a benchmark.
  • All effects, 91 tonewheels, 12 voices, autosave, storage, OTA and permanent FM-1_481026 identity remain unchanged.
  • Host bitwise PCM + full-state checks and target build do not prove physical 12-voice FM1 CPU headroom; measure PEAK and DMA MISSES on the real device.

V5.1 — Lossless sustained-organ kernel and realtime headroom work (2026-11-02)

  • FAST SAFE/ORGAN path: while the organ oscillator blend is fully settled and the existing FM1 low-cost DSP route is active, the dense chord mixer directly reads the *same* 2048-entry sine table. This removes repeated calls and mode/SAW/harmonic checks per active tonewheel. Fallback unchanged for SAW, full DSP and live oscillator-mode transitions.
  • Zero-leakage specialization: avoid leakage loads and multiplications when LEAKAGE is OFF, without altering the other mixer or the meaning of a zero drawbar.
  • Transient shared-wheel prefetch: the existing adaptive distinct-wheel list also uses the direct sine lookup under the exact same SAFE/ORGAN condition; phase advance, wheel caching and complete internal state remain exact.
  • No acoustic compromise: all 91 tonewheels, nine drawbars, 12 voice slots, UPPER/LOWER/SOLO, percussion, click, chorus, Leslie, cabinet, delay/reverb, SAW, B3/ROCK, USB-MIDI, autosave and storage are retained. No altered sample rate, additional limiter, compressor or reduced effective polyphony.
  • 320 host native PCM+full-engine-state comparisons are exactly identical to V5.0 (96 poly scenarios + 128 gesture/transient scenarios + 96 further varied FX/organ/saw/sustained scenarios). Clipping/DMA chunking and short native OTA replay tests pass. Host safe ORGAN sustained-chord benchmarks improved significantly, but these times are not measurements of the real FM1.
  • Same package/USB identity FM-1_481026. Native OTA/USB/flash policy, staging, recovery, autosave and user-interface logic unchanged. WebInstaller embeds the new FWSC and its SHA-256.
  • Not certified: exact 60 MHz pi32v2 worst-case cycles per 256-frame interrupt and 12-voice full-FX headroom on actual FM1 have not been measured. AUDIO DIAG PEAK / DMA MISSES hardware test is mandatory before calling hardware crackle solved. Do not assume untested cross-firmware updates are safe.

V5.0 — Lossless dynamic tonewheel and polyphonic DSP efficiency (2026-11-02)

  • Preserve all 91 shared tonewheels, 12 voices, nine drawbars, three registrations, ORGAN/SAW, B3/ROCK, percussion, key click, leakage, scanner, Leslie, delay, reverb, MIDI and autosave. No reduced sample rate, discarded oscillators or fixed voice limit.
  • Dynamic transient oscillator work-list: on sufficiently shared 3+ voice attack/release blocks, collect only the distinct tonewheels and compute each once per frame, reusing cached samples per voice/harmonic. If the overlap is too low or a voice will finish releasing in the block, use the original low-overhead lazy lookup. No change to note contact timing or tonewheel phase continuity.
  • Per-block / 16-frame drawbar gain caching: compute smoothed Q8 registration levels once per existing smoothing tick rather than read and shift the same Q16 coefficients for every active harmonic and sample.
  • Exact percussion decay fast path: replace a per-sample integer division by 10,000 with four comparisons for the actual 1–32767 envelope range; retain original general formula for exceptional states.
  • Headroom and clipping: retain the existing linked input/output peak-guard and registration-aware headroom. No audio compression or added saturation introduced. AUDIO DIAG still reports the measured peak render time and DMA misses.
  • Native reference verification: 96 1–12 voice PCM+entire-DSP-state reference scenarios and 128 added live transition scenarios exactly equal to V4.9; 72 clipping stress tests and 48 128/256-frame equivalence cases. A short native OTA replay accepts B1 V5.0 and original BEETLE RC1.01 through CHECK/success/staging/commit. The full extended 16-case OTA suite is retained but did not complete in the timed run.
  • Identity remains FM-1_481026 in USB-MIDI and the .fwsc; native OTA code, staging/boot/recovery, storage, UI, MIDI and autosave unchanged from V4.9. The WebInstaller embeds this exact package and SHA-256.
  • Hardware limitation: real FM1 CPU utilization, DMA misses while playing, headphone/line-output clipping and Firmware Hub multi-firmware round trips remain to be measured. Host benchmarks were not sufficiently stable to claim a numerical realtime speedup or a confirmed crackle fix.

V4.9 — Auto-save live parameters, OTA regression safeguards (2026-10-23)

  • AUTO SAVE: after 5 seconds without parameter edits, and after playback plus effects are fully silent, automatically persist the entire live project parameter snapshot in B1's existing dual-bank copy-on-write journal. At most one flash write per 60 seconds during editing; no erase/program during note playback. Restart restores the last live setup automatically.
  • The twelve named project slots remain independent and unchanged. Existing schema 1/2 journals automatically migrate on their NEXT save; old project sectors are never erased on boot. CRC32 and commit-last journal safety remain. Power loss before commit retains the previous valid bank.
  • Boot in REC recovery never restores parameter state or accesses the project flash. If no B1-owned/blank two-bank journal can be found, autosave fails closed and unknown sectors are not touched.
  • OTA route, verified loader staging, application and loader checks, protected boot region and Firmware Hub/SLOOP HF2 WebInstaller remain unchanged from V4.8, so this iteration cannot introduce speculative changes to the already unverified hardware round-trip protocol. Native OTA replay is rerun with the new firmware.
  • Identity remains FM-1_481026 in every package and USB response. All tonewheels, 12 voices, audio DMA, project UI and effects are unchanged.

V4.8 — New B1 identity, DMA headroom and underrun recovery (2026-10-22)

  • New permanent B1 identity: FM-1_481026 replaces the previously shared/mislabelled FM-1_2147. This is deliberate for this release; freeze FM-1_481026 for subsequent updates. Native USB SysEx application and .fwsc identity now agree; USB MIDI class, VID/PID and SikkenWorks manufacturer are preserved.
  • Keep the native V4.7 cross-firmware APP_ONLY and compatible Felucca-family OTA input validation, 16 KiB protected boot region, USB-MIDI read/success/write/commit protocol, flash staging, readback and recovery. Update B1's staging owner token, while recognizing previous BEETLE/ETCH tokens for reattempts. Do not execute unknown loaders.
  • Package the B1 firmware as SikkenWorks-B1-V4.8.fwsc, not as a BEETLE-named release file. The BEETLE RC1.01 package remains a pinned build-time boot-header reference, not B1's firmware identity or a guaranteed restore image.
  • Increase stereo audio DMA half size from 128 to 256 frames, reducing the ALNK callback frequency while keeping the same 44.1kHz waveform calculations, 91 wheels, 12 voices, registrations and effects. Budget thresholds are scaled to the longer DMA interval; this adds up to 2.9ms scheduling latency in exchange for fewer interrupts.
  • Clickless DMA recovery: when an overrun is detected and the DMA half is still CPU-owned, fade the last output smoothly to zero rather than replacing the half with a hard zero step. On the next available half, crossfade from the previous output over 64 frames. Never touch DMA-owned memory. Counters and fail-safe relief remain active.
  • Use 64-bit intermediates in the exceptional underrun fade, guarding future DAC-wide output ranges without changing normal PCM.
  • Host-only regression: 72 polyphony/FX stress combinations, 48 one-block/two-block PCM equivalence combinations, 256-frame fade math validation, native OTA packet replays, 96 historical DSP reference scenarios, compiler/CRC/identity/installer checks. FM1 actual CPU load and end-to-end cross-firmware hardware transfers are unverified.
  • Known limitations: no original Felucca 1.6/1.1.5 package is present in the local fixtures, actual The Firmware Hub round-trip needs FM1 hardware, and firmware flash/recovery remains at the user's risk. The original V4.7 crackling could also have causes beyond DMA deadlines.

V4.7 — Hub handoff and lossless polyphony efficiency (2026-10-22)

  • Preserve package and application SysEx identity FM-1_2147; NO new product ID.
  • Correct USB descriptor strings: SikkenWorks manufacturer, standard FM-1 USB product/port (previous B1 code incorrectly advertised ETCH). VID/PID and MIDI class unchanged.
  • Fix transition metadata: stage known pinned app-only loader with ota-FM-1_015; for structurally checked alternate FELUCCA-family loader use ota-FM-1_900 (matching the chosen staging family). Do not identify the running B1 as the loader.
  • Optimize polyphonic note-on/release: precompute active voice indices, audible drawbars and per-contact stagger offsets per PCM sub-block. Exactly same voice behaviour and 91 tonewheel sound.
  • Confirm byte-identical PCM AND entire DSP state vs V4.6 across 96 baseline configurations including 1–12 voices, B3/ROCK, ORGAN/SAW, percussion and effects.
  • Offline native OTA replay covers input validation, loader staging/readback, success confirmation, rejection before flash erase, timeout and rollback/abort. A successful actual Firmware Hub cross-firmware transition has NOT yet been established on physical FM1.
  • BEETLE label in The Firmware Hub is assigned by its identity catalogue. A real identity collision for FM-1_2147 cannot be solved without updating the Hub listing, because this project deliberately keeps its existing ID.
  • Any remaining crackling on hardware requires measured AUDIO DIAG overruns and PCM capture; offline PCM equality does not prove on-device DMA deadlines.

Version history and technical notes for SikkenWorks B1, the drawbar-organ firmware for the M-VAVE FM-1.

This file contains release-specific changes, build validation, performance measurements and outstanding hardware-verification limits. For an overview of the instrument and its controls, see the [README](README.md).

---

V4.6 — The Firmware Hub cross-firmware OTA compatibility (2026-10-22)

  • Retain the exact B1 V4.5 package/USB identity FM-1_2147 (no new product ID).
  • Native OTA CHECK now recognizes version-tagged FELUCCA-LOADER-1 compatible incoming loader containers, checks complete incoming body CRC16 independently of UFW entry CRC, validates existing header, runtime entry address, size and protected staging boundaries. Loaders that match only the first 6,898 bytes but are larger are treated as distinct incoming loaders (fixes a staging-length false match).
  • Keep B1's original pinned loader for known input; stage a different, fully container- and CRC-validated FELUCCA-LOADER-1 second-stage writer for other structurally compatible Felucca-family packages. The Firmware Hub must SHA-256-pin the original package; CRC alone cannot prove authorship.
  • Verify read-back CRC16 of the *actual staged loader* before special success acknowledgment and commit.
  • Keep APP_ONLY boot-header independence, exact chip/app/XIP/CRC checks, verified stock V15 separate path, USB-MIDI and recovery unchanged.
  • Native OTA packet replays include real B1/BEETLE reference packages and checksum-consistent mutations; actual Felucca 1.6, 1.1.5, stock V15 and hardware firmware switching remain unverified without those fixtures/devices.
  • Audio, MIDI, UI, storage and performance engine are byte-for-byte unchanged from V4.5.

V4.5 — October 19, 2026 (Polyphonic realtime DSP performance)

  • Respond to physical FM1 feedback: audio in V4.4 no longer exhibits the earlier severe square-wave issue, but crackling begins at about three simultaneous notes. V4.5 targets expensive per-sample computations in the three-plus-voice and Hammond percussion paths. This is a hardware-test candidate, not yet a confirmed fix for hardware crackling.
  • Preserve all audio results: retain 91 free-running shared tonewheels, nine drawbars, twelve voices, the original voice-stealing policy, ORGAN/SAW, B3/ROCK, key-click/leakage, single-trigger shared Hammond percussion, scanner, Leslie, delay, reverb and MIDI/CHORD/KEY ASSIGN. No reduced sample rate, effects downgrade, harmonic drop or fixed voice cap.
  • Faster dense chord phase bookkeeping: when the mixer has a unique list of sounding wheels, align their virtual phase to the chunk start once and then increment directly per sample. Skip redundant per-wheel cache checks. Where percussion does not need the per-sample wheel memo, defer two stamp writes per wheel to the end of the render chunk. Preserve exact memo state, first-sample phase, drawbar ramp, rare 32-bit clock wrap and transitions back to transient rendering.
  • Exact shared-percussion divider: algebraically replace the signed 64-bit division by 260,000 with a fixed native 32-bit split, relying on 260000 = 32*8125. Preserve signed truncation precisely; keep the old wide fallback if the bus/envelope are outside documented bounds. Native test checks 2,000,285 input pairs against the unmodified signed 64-bit formula.
  • Exact polyphonic voice-envelope multiply: use native signed 32-bit multiplication when ORGAN or SAW waveform blending is settled. Worst-case normal drawbar, key-click and leakage bounds fit in 32 bits. Keep the previous 64-bit path during the oscillator crossfade to preserve exceptional transient values.
  • A rejected initial optimization that prebuilt every voice's active-harmonic list was not shipped, because host measurements showed it could increase cost. The remaining paths pass differential tests against the untouched V4.4 PCM engine and entire DSP state for 96 configurations (1–12 voices, combinations of SAFE/FULL, ROCK/B3, ORGAN/SAW, maximal drawbars and exaggerated click/leakage), plus long-idle comparisons, historic golden PCM, ORGAN/SAW/FX and KEY ASSIGN LED regressions.
  • Native AC791N firmware identity FM-1_2147, checksum-verified 610,086-byte .fwsc, exact SHA-256-pinned WebInstaller preserving the proven SLOOP/Felucca HF2 source path, original protected 16KiB boot region and V4.4 native OTA safety repairs. No physical hardware timing/flash/rollback result is claimed.

V4.4 — October 19, 2026 (Native cross-firmware OTA repair)

  • Fix actual on-device updater, not merely the WebInstaller. Remove blanket protected-bootheader byte-match -5 for validated APP_ONLY updates; protect the existing boot sector by never writing it from an APP_ONLY package.
  • Fix overly strict loader-body rejection -16 for compatible app-only firmware. Validate the foreign ota.bin container and complete payload CRC; never execute its untrusted loader body. Stage and read back the exact pinned, previously used B1/Felucca app-only loader instead. Continue reporting its real identity ota-FM-1_015 across reboot.
  • Validate incoming UFW entries for CRC, duplicates, boundary overflow and overlap; check target AC791N chip key 0x980F, XIP 0x02000120, app flash 0x4000 and fully decrypted app.bin slot CRC before any staging erasure.
  • Keep exact-hash-gated official V15 FULL_FLASH as a distinct, non-universal restore route. Retain the mandatory 0xE0000000 / eight-byte success handshake, staging verification, ownership protection and cancellation behavior.
  • Add real native packet-replay tests that reproduce baseline V4.3 -5, -16, and corrupt-app commit, and verify 10 passing V4.4 cases, including aborts and erase failures. See docs/V4.4-NATIVE-OTA-AUDIT.md.
  • New AC791N target-compiled firmware identity FM-1_2146, same protected BEETLE boot header, and refreshed SHA-256-pinned SLOOP-HF2-compatible WebInstaller.
  • The audio, 91 shared tonewheels, 12 voices, keyboard handling, effects, KEY ASSIGN LEDs and persistent project layout are unchanged. Actual physical cross-flashing, original Felucca release packages and official V15 stock restore still require testing. The BEETLE and NERVE native installed updater sources are not audited in this B1 release.

Installer HF2 — SLOOP/Felucca source compatibility (no firmware changes)

  • Removed the source-identity CONNECT block for SLOOP (FM-1_900).
  • Added the documented ota-FM-1_9xx loader family to the CHECK/LOADER/WRITE transition.
  • Advanced Mode now controls only foreign *target* firmware selection, not the source identity.
  • Preserved all target SHA-256, UFW CRC, boot header and loader checks.
  • Source-format and loader compatibility still must be validated on real hardware.

V4.3 Installer HF1 (firmware unchanged)

  • Prevent Advanced Mode from unchecking itself when choosing another firmware.
  • Add an explicit, opt-in source compatibility path for shared FM-1_900 identities with read-only identity identification and protocol-checked flashing stages.
  • Keep existing pinned firmware hashes, known protected boot header and loader checks; require the expected loader identity.
  • See INSTALLER-HF1-VERIFICATION.md for limitations and hardware-test status.

V4.3 — October 19, 2026 (10 kHz keyboard IRQ: lossless settled-key fast path)

  • No concessions to sound or responsiveness. Retain V4.2's exact b1_engine.c, b1_performance.c, 91 virtual tonewheels, 12 voices, all nine drawbars, ROCK/B3, ORGAN/SAW, Leslie, effects, MIDI, saved projects, KEY ASSIGN persistent LEDs, 10kHz physical GPIO/LED scan and 2kHz USB polling.
  • Optimize only the FM1 input matrix's *software debounce*. Every column is still sampled and its LEDs latched at the exact same 10kHz timer rate. For a stable column, where no relevant key-row bits have changed and all debounce counters are zero, bypass the redundant per-key C handler calls. A physical key change or pending debouncer immediately uses the unmodified press=2-frame / release=8-frame algorithm. Unrelated encoder row changes do not wake the key handler. Note-on and note-off scheduling remains on the original scan tick.
  • Replace the runtime column selection shifts/XORs in the high-frequency ISR with 11 precomputed byte-identical 74HC595 shift-register values. No changes to bit-banging, LED dim timing, encoder scan or GPIO waveforms are intended.
  • Add deterministic 1,100,000-column reference-versus-optimized simulation over overlapping key presses, contact bounce, long idle, button edges and encoder-only input bits; exact note state, button state, edge timing, debounce counters and stored note timing match. 4,100,000 reference per-key calls vs 108,153 optimized in this scenario, 97.4% fewer calls (NOT 97.4% CPU reduction). Eleven column words and key masks independently checked against the original equations and matrix map.
  • Retain V4.2 pi32v2 foreground IRQ-idle instructions and V4.1 DSP Smart Idle; unchanged b1_engine.c still produces exact multi-stage PCM plus full internal DSP state vs reference V4.0; native ORGAN/SAW, ROCK, FX, KEY ASSIGN LED, package CRC, protected boot bytes, WebInstaller embedded hash and cross-firmware gating all pass.
  • FM-1_2145 native JieLi pi32v2 binary and SHA256-pinned .fwsc with matching WebInstaller, one-command repeatable target build. Real FM1 idle CPU percentage, hardware keyboard/LED electrical timing, hardware boot/OTA (historical -16), emulator note-halt and physical sound remain UNVERIFIED. Do not infer a measured FM1 CPU percentage from host tests.

V4.2 — October 19, 2026 (Main-loop IRQ Idle / zero audio concessions)

  • No audio-engine changes at all: V4.1 b1_engine.c, b1_engine.h, performance renderer, FX, PCM arithmetic, 91 lazy-phase tonewheels, 12 voices, KEY ASSIGN LED policy, MIDI and storage remain unchanged.
  • Replace the V4.1 main-loop 10ms tight busy spin with the native pi32v2 idle instruction. TIMER5 (10kHz), audio DMA and USB hardware interrupts remain enabled and wake the CPU.
  • Reduce foreground watchdog feed, USB reconnect checks, and OTA identity-service polling from every busy-loop iteration to once per actual millisecond. Explicit bootloader/update requests and audio overruns bypass this throttle immediately. USB SIE polling and the 27-key/LED matrix scan remain in the original TIMER5 IRQ and are not rate-limited.
  • Add b1_cpu_idle.h, pure scheduling tests for 10kHz-to-1kHz pacing, urgent flags, millisecond wrapping and actual pi32v2 opcode verification. Physical CPU-load percentage is not claimed from host-only checks.
  • Native build FM-1_2144, pinned SHA256 WebInstaller and V4.1->V4.2 source-firmware allowlist. CRC, protected boot header, complete PCM regression tests and V4.0->V4.1 DSP exact-state differential remain checked.
  • Important: this release addresses CPU0 main-loop spinning, NOT the 10kHz TIMER5 IRQ cost, DMA scheduling nor unverified hardware OTA error -16. Users should collect 10-second idle load (with USB attached/detached), full polyphony, USB MIDI, and recovery measurements on actual FM1 hardware before treating it as stable.
  • No claim of hardware boot validation. Earlier emulator halt-on-note remains unexplained and may be unrelated.

V4.1 — October 19, 2026 (Smart Idle Engine)

  • Add a whole-block silence fast path in b1_render_stereo after all voice release, percussion, output-gate fade, delay/reverb tail and incremental FX ring-clearing work has finished. Stereo DMA still receives a fully written zero PCM buffer. No extra allocations, any latency wake-up or voice reductions.
  • The 91 tonewheels remain logically free-running: their sample time advances with one frame-counter addition per silent block, and the existing exact lazy-phase reconstruction supplies the correct phase on the very first reactivated note. ORGAN/SAW crossfade and drawbar smoothing also advance mathematically/sample-identically during silence.
  • The rare 32-bit frame-clock wrap takes the unchanged normal sample renderer, preserving wheel stamp clearing. During any release/FX tail or active note, the previous V4.0 audio path is unchanged.
  • No rotor/scanner phase changes during fully gated silence: retains V4.0 phase semantics and PCM exactly. This release does not attempt new physical Leslie free-running behaviour as it would alter the existing sound.
  • Native host differential test compares the entire PCM stream and all DSP state bytes against unmodified V4.0 across ORGAN/SAW, FULL/SAFE, long idle, live parameter changes, chord attacks, effect tails, and the wrap boundary. Legacy rock/percussion, LED and PCM golden tests remain intact.
  • Host-only idle render microbenchmark: roughly 9.06 ns/sample for V4.0 vs 0.39 ns/sample for V4.1 on the test machine (single warm run, not physical FM1 CPU measurement). Playing-note CPU is not claimed to improve.
  • Native AC791N pi32v2 .fwsc rebuilt as FM-1_2143, WebInstaller pins its exact SHA-256 and retains V4.0 (FM-1_2142) as an allowed upgrade source. Offline packaging does not prove physical flash/boot. Hardware test and historical OTA -16 remain outstanding.

V4.0 — October 19, 2026 (KEY ASSIGN LED visibility)

  • Based directly on V3.9, retaining its byte-for-byte untouched sound engine and all 91 tonewheels, 12 voices, drawbars, ROCK/LORD, B3/Leslie, ORGAN/SAW, effects, projects, MIDI and recovery safeguards.
  • Active CHORD selector keys now stay steadily illuminated on the FM1's physical 27-key keyboard whenever CHORD ASSIGN is ON, including on other performance pages. All idle ORGAN or DISABLED keys stay dark, allowing immediate distinction between chord triggers and normal notes.
  • LED ownership uses exactly the same effective, priority-ordered keyboard ranges as note-on routing. Only an *active* CHORD key lights: a saved chord quality on an ORGAN key is not enough; overlapping higher-priority ranges and ASSIGN OFF are respected.
  • The dedicated SCALE page retains the original SCALE GUIDE, even when chord assignment is enabled. A pressed key still lights temporarily, so existing performance feedback is retained. When ASSIGN is OFF on the CHORD editor, unpressed keys are dark.
  • The CHORD ASSIGN display now labels the LED convention LIT=CHORD DARK=KEYS.
  • New hardware-policy regression tests cover 27 physical note LEDs, 14 function LEDs, real CHORD range priority, toggling, saved/loaded assignments, scale-guide priority, pressed keys and legacy project formats.
  • Target-compiled new FM-1_2142 .fwsc and matching hash-pinned WebInstaller; actual FM1 hardware boot, LED scan, audio and OTA operation require user hardware testing. Do NOT infer real hardware functionality from emulation or offline tests.

V3.9 — October 18, 2026 (bit-exact DSP efficiency)

  • No sound or functionality removed. Retains the entire V3.8 engine, ROCK/LORD amp, B3, 91 tonewheels, 12 voices, every drawbar and mode, percussion, MIDI, UI, rotary, chorus, delay/reverb, project saving and BEETLE-safe flash guards.
  • Replace four costly signed 64-bit multiply/divide pairs per sample in the full ROCK/LORD filter path with an exact 32-bit unsigned-magnitude Q15 helper. It follows signed truncation toward zero, including negative filter differences. Safe ROCK, B3, SAW/ORGAN, mode switching and all other DSP paths remain intact.
  • Reduce the table softclip interpolator from two 32-bit multiplies to one using its monotone LUT property; preserve all old integer output values (exhaustive check of all 3 tables, all interpolation fractions). This also benefits the default SAFE ROCK path.
  • Precompute ROCK tone, treble, presence and air coefficients once per b1_render_stereo call rather than inside the sample loop. Current hardware control values remain live at every new audio call (normally 128 frames).
  • Validation: 2,500,090 randomized/edge fixed-point arithmetic comparisons plus 3,145,728 exhaustive LUT cases; 16 ORGAN/SAW/B3/ROCK/SAFE/FULL/Leslie/effect scenarios with 128 blocks each, 1,048,576 PCM bytes identical to V3.8; existing native, OTA-package, installer, backward-compatibility, header and corruption tests. Actual FM1 CPU/headroom measurement and physical update remain unverified.
  • New FM-1_2139 target compile and .fwsc, with a WebInstaller embedding the exact byte-identical image and keeping V3.8 in the approved previous-firmware list. One-command tools/build_v39_release.py requires the user's installed toolchain; compiler/toolchain binaries are not redistributed.

V3.8 — October 18, 2026 (upper percussion bus + rock tone)

  • Real UPPER percussion bus: all currently held upper-manual notes feed a single decaying percussion envelope. Single-trigger behaviour, second/third harmonic selection, upper-only routing and automatic 1' drawbar cancellation are preserved. B3 single-note reference PCM is byte-identical to V3.7; chords intentionally sound different because additional upper notes now have the missing percussion tone. Lower and SOLO keys do not feed the upper percussion bus.
  • ROCK / LORD SAFE DSP: replace the single symmetric speaker-saturation stage with one polarity-dependent nonlinear stage (different knees for positive/negative half-cycles), followed by a separate bass roll-off, upper-mid presence shaping and high-frequency ceiling. DRIVE still works even with CABINET MIX 0, while AMP GAIN, TONE, CABINET, scanner, Leslie, delay and reverb are preserved. ROCK samples intentionally differ from V3.7; clean/B3 remains unchanged except for the corrected polyphonic percussion.
  • Bounded performance: cache the held UPPER keys' percussion tonewheel indices once per audio sub-block rather than checking 12 voice flags for each of 44,100 samples/second. No new heap allocation, no saved-project schema changes and no extra audio/FX buffers.
  • Native release: freshly compiled with JieLi pi32v2 clang/ld, product FM-1_2138. The .fwsc matches the WebInstaller embedded image and pinned SHA-256. The versioned build script is rerunnable without losing its V3.7 upgrade source whitelist. Full source and previous functionality retained.
  • Tests: rock/percussion bus, mono latch, held chord addition, lower exclusion, B3 V3.7 bit-exact reference, full 16-case ORGAN/SAW/FX stress, exact constant-division tests, native target build, bootheader, installer identity and corrupt-payload rejection. Physical FM1 boot, OTA compatibility and 60 MHz CPU margin not yet measured. Historical OTA error -16 remains hardware-unverified.

V3.7 — October 18, 2026 (experimental, target-compiled)

  • Exact branchless-magnitude audio master gain for all 16-bit PCM values and 0–32767 levels, replacing signed division by 32767 per L/R sample. Values match old integer PCM bit-for-bit (tested).
  • RGB565 LCD damage fingerprint reduced from two FNV multiplication steps per pixel to one, preserving bounded strips and full refresh every 64 frames.
  • Prevent old-project MIDI note-on messages in the input queue from replaying during/after long project load/reset transactions.
  • Native pi32v2 application target, firmware product FM-1_2137, regenerated .fwsc, built-in WebInstaller hash and byte-for-byte payload checks; still no physical FM1 verification.
  • No changes to patch format, EEPROM/flash write boundaries, 91-tonewheel engine, 12 voices, sound modes, drawbars, or FX settings.

V3.6 — Compiled FM1 update, nonblocking project transactions

  • Shorter interrupt masking on project changes. A queued LOAD or NEW operation now runs after the UI event has released the global interrupt mask; only the small pause/resume flag updates are atomic. Previously resetting the 56 KB organ engine or applying a saved project happened while all hardware interrupts were disabled. The DMA ISR now writes silence to the currently CPU-owned half while project data is being replaced, without disabling the USB/timer interrupts, stopping ALNK0, or waiting through the 330 ms codec restart required for flash writes.
  • Consistent project saves. Pause audio before snapshotting the project. This prevents an evolving audio/performance state from being captured across separate callback boundaries while a flash write is being prepared; the normal flash-write stop/restart protocol and two-sector journal remain unchanged.
  • More precise diagnostics. Measure the longest interrupt-disabled UI event and display UI … US alongside the peak callback time in the SCL AUDIO DIAG screen. Short audio IRQ latency is more important than average desktop CPU time.
  • Preserve 91 shared wheels, 12 voices, ORGAN and SAW modes, effects, MIDI, all controls, 12 project slots and partition protections. No engine sound-generation code was changed.
  • Built the complete native application using the user-supplied JieLi pi32v2 clang/ld toolchain (20250324.1 tool root from the 20250805.1 package); linked B1.elf, generated and audited B1-app.bin, and built SikkenWorks-B1-V3.6-BEETLE-OTA.fwsc (product FM-1_2136).
  • Offline fwsc validation checks the protected 16 KiB BEETLE bootheader, OTA container, app entry, section layout, app CRC and package integrity. The WebInstaller embeds and SHA-256 pins this exact new firmware. The original protected bootheader bytes and BEETLE project storage exclusion have not been modified.
  • New tools/build_v36_release.py builds the native ELF, app.bin, fwsc and WebInstaller, then runs static package audits in a single command. It requires JIELI_TOOLCHAIN in the environment; the toolchain itself is not redistributed.
  • Passed native LCD damage tests, deterministic original ORGAN/SAW PCM golden tests, sixteen high-polyphony scenarios, exact fixed-point division/ramp comparisons, WebInstaller security/compatibility tests and the full native compiler+packer pipeline.

This is a genuinely newly compiled, internally validated V3.6 .fwsc, not a renamed older image. Successful host-native build and CRC/package checks cannot establish successful flashing, boot, sound or recoverability on a physical FM-1. The reported historical OTA FAILED -16 remains unresolved by physical verification. Back up before installing and retain a proven independent recovery route.

V3.5 — FM1 Open V12-informed realtime and LCD work (experimental source)

  • Compared the M-VAVE FM1 Open V12 Development Kit and public repo, notably the board audio IRQ and DMA buffer ownership logic. The M-VAVE proprietary engine library is supplied as a binary, not complete engine source. B1 retains its own Felucca HAL and original sound engines.
  • Acknowledge the current ALNK half event before B1's PCM render; verify actual DMA half ownership using the double selector / new pending-flag check before and after committing output. Fail safely and latch low-cost DSP on a missed deadline.
  • Track peak audio callback time in TIMER4 ticks; show microseconds on the AUDIO DIAG screen, refreshing diagnostics at 2 Hz.
  • Avoid transferring unchanged LCD rows: FNV-1a RGB565 row hashes, bounded <=115-row SPI windows, <=2-row gap coalescing and periodic full refresh. No extra full-size framebuffer, preserving the same 240x240 UI rasterizer.
  • Keep the original ORGAN/SAW engine, 91 wheels, all polyphony/FX, B1 project format and protected flash regions unchanged.
  • New deterministic native LCD-damage test passed; native C syntax checks passed on the host.
  • Historical test script passed the first 21 logged checks through V1.7 but did not complete before the execution timeout. Separately, V3.3 ORGAN/SAW and 16 dense-FX cases, the V3.0 exact comparisons and V3.1 division equivalence tests passed.
  • This is a source-only experimental build. The pi32v2 toolchain and physical FM1 are unavailable here for target build, DMA measurements, or hardware OTA testing. No V3.5 .fwsc or updated WebInstaller is included. Any earlier V3.4 binaries included as references are not V3.5 firmware.
  • A hardware run must measure UI-rate under load and DMA ownership transitions. The known earlier OTA FAILED -16 remains unverified on physical hardware.

V3.4 — Realtime tonewheel and Leslie optimization

  • Oscillator shaping: moved three fixed, per-tonewheel ORGAN-character values into compact, build-generated ROM tables. The 91 shared tonewheels retain the exact V3.3 sine/partial arithmetic while avoiding repeated modulus calculations during active samples.
  • Polyphonic leakage: determine each voice's leakage tonewheel once on note-on instead of repeatedly calculating modulo 91 inside the per-voice sample loop. One additional byte per transient voice; the saved project schema is unchanged.
  • SAFE-DSP Leslie: replaced the two repeated signed horn / 1100 divisions per sample with an exact, signed, 2,048-entry table derived from the existing sine oscillator ROM. No change to the horn waveform, pan or wet/dry arithmetic.
  • ORGAN, frequency-banded SAWTOOTH, HOME + FX, twelve voices, drawbars, percussion, CHORD ATTACK, all effects, saved projects and UBOOT/OTA support remain available. No heap allocation has been introduced in the audio callback.
  • Eight deterministic byte-identical extended PCM stress renders compared against V3.3: full/SAFE DSP × ORGAN/SAW × B3/ROCK, with twelve notes, leakage, Leslie, chorus, delay, Cathedral-reverb, live engine switching and note release.
  • Full historical DSP, headroom, chord, project-journal and scale regressions passed; all sixteen original SAW/polyphony stress scenarios passed.
  • Nine-run desktop host benchmark (medians, same machine, 128-sample buffers) measured approximately 21–26% less computation for four or twelve active voices in the original benchmark configuration. These figures do not establish realtime performance or DMA timing on the FM1.
  • Native AC791N/pi32v2 firmware, standalone .fwsc, embedded WebInstaller and 67 genuine native RGB565 screenshots validated; the protected BEETLE bootheader was retained byte-for-byte.
  • V3.4 has not been physically installed or measured on the 60MHz M-VAVE FM1. Reduced host computation cannot guarantee crackle-free audio or resolve the previously reported on-device OTA FAILED -16 issue.
  • External custom firmware installation continues to depend on compatible bootloaders and each firmware's own installer; B1 cannot promise universal flashing or recovery.

V3.3 — Experimental ORGAN / SAWTOOTH engine

  • Added a genuine ENGINE MODE for all 91 shared tonewheels: SINE / ORGAN retains the original tonewheel calculation; SAWTOOTH replaces the oscillator waveform without adding a second synthesizer or extra voices.
  • HOME + FX together opens the native mode screen. K1 selects ORGAN or SAWTOOTH; SEL also toggles the mode and HOME returns to the normal drawbar page. A short key-combination grace period prevents accidental standalone HOME/FX actions.
  • Added eight precomputed, 512-sample band-limited saw tables, selected by tonewheel frequency to limit aliasing. No Fourier transforms, trigonometry, heap allocation or additional voices are required in the audio thread.
  • Added an approximately 6 ms crossfade between engines, including while notes are held.
  • Saved the engine choice in a previously unused, checksum-covered byte of the existing V6 project record. The record remains 124 bytes with its checksum at the same offset. New and older projects default to ORGAN.
  • Retained all nine drawbars per registration, 12-voice polyphony, percussion, chords, Leslie, chorus, delay, reverb, startup animation and cross-firmware/UBOOT controls.
  • Two reproducible, byte-identical native builds; firmware ID FM-1_2133 and checked WebInstaller image.
  • Six ORGAN PCM references were byte-identical to V3.2. SAW/ORGAN passed 16 demanding polyphony/FX host scenarios in full and light DSP with B3 and ROCK processing.
  • Mode switching, HOME+FX detection, project save/load and legacy project-default behavior passed native tests.
  • 67 native 240 × 240 screen/boot captures passed pixel-for-pixel verification, including both ENGINE MODE screens; 240 × 240, 960 × 960 and 1920 × 1920 PNG collections were provided.
  • SAW mode and OTA installation have not been tested on the physical FM-1. The previous OTA FAILED -16 hardware issue has not been proven fixed.
  • The band-limited waveforms reduce avoidable aliasing; they do not guarantee a noise-free analog output or no realtime buffer underruns.
  • Projects saved by V3.3 are not guaranteed to be readable by older B1 releases.

V3.2 — Cross-firmware bridge and loader verification

  • Replaced the FM-1-side OTA loader SHA-256 decision with an exact byte-for-byte comparison against the pinned BEETLE RC1.01 update-loader bytes, without allowing an unknown loader through.
  • Distinguished -16 (loader mismatch before staging) from -18 (NOR-flash staged readback mismatch).
  • Added an OTHER CUSTOM .FWSC route to the WebInstaller for FM-1 images with the exact compatible protected boot header and loader. UFW structure, CRCs, image bounds and loader identity are checked before writing.
  • Expanded ENTER UBOOT handoff: the installer waits for a responding, compatible USB-MIDI update loader before enabling an installation. For other bootloader protocols or layouts, use the target firmware's original installer.
  • Two identical native JieLi builds, package CRC and 16 KiB BEETLE header checks, pinned loader tests and installer SHA-256 checks passed.
  • Known B1/BEETLE files passed compatibility checks; deliberately corrupted or truncated UFW files were rejected.
  • Historical organ, chords, effects and storage tests and 65 native screen captures passed.
  • A new firmware cannot retroactively change a defective OTA verifier already running on the FM-1; the UBOOT alternative requires a working device bootloader.
  • The original -16 issue, physical UBOOT re-enumeration, third-party installer compatibility and recovery have not been validated on hardware. Arbitrary firmware layouts are deliberately not flashed blindly.

V3.1 — Reverb and amplifier DSP pass

  • Replaced three variable reverb damping divisions per audio sample with a block-level Q16 reciprocal, multiplication and bounded integer correction, preserving signed rounding behavior.
  • Simplified the ROCK/LORD amplifier sag calculation by selecting its two fixed divisors directly.
  • Kept project schema, UI, tonewheels, effects, startup, UBOOT and protected BEETLE boot header unchanged.
  • Updated native firmware and the WebInstaller to FM-1_2131. A later installer-only repair corrected recognition of some stock and OTA-loader device identities after users encountered Unsupported firmware.
  • Two byte-identical native builds; six PCM files and four additional full/light-DSP FX references matched V3.0 byte for byte.
  • 250,000 signed arithmetic comparisons, heavy 12-voice effects, CHORD ATTACK, project tests and 65 native UI captures passed.
  • The on-device OTA FAILED -16 reported during V3.1 installation was not resolved merely by the installer identity repair. Actual FM-1 audio-interrupt headroom and cross-firmware recovery were not measured.

V3.0 — Gain and ramp optimization

  • Avoided unnecessary runtime division for small Leslie/drawbar ramp changes while keeping the original ramp results.
  • Simplified full-range signed-magnitude calculations in the gain/headroom helpers to avoid expensive 64-bit arithmetic where not required.
  • Updated firmware identity to FM-1_2130, retaining the existing WebInstaller and BEETLE/UBOOT structure.
  • Kept the project format, audio controls, voice count and UI layout unchanged.
  • Two byte-identical JieLi builds and 250,000 arithmetic-equivalence comparisons passed.
  • Four long-form PCM references were byte-identical to V2.9.
  • 65 native 240 × 240 captures passed. Host benchmarks showed workload-dependent improvements, not one universal speedup figure.
  • Host timings do not establish audio-DMA stability or crackle-free polyphony on a physical 60 MHz FM-1.

V2.9 — Realtime processing and external-installer handoff

  • Moved scanner, rotary, delay and reverb coefficients that stay constant within a buffer out of the per-sample path.
  • Simplified fixed-point gain calculations while retaining the previous signal and saturation behavior.
  • Added ENTER UBOOT / EXTERNAL INSTALLER to the WebInstaller, requesting the existing FM-1 update mode without first writing a firmware file. Preserved OCT− at boot and REC safe-mode entry points.
  • Updated firmware identity to FM-1_2129. Compatible B1/BEETLE-style packages remain checked before OTA; alternative loaders require their own compatible update procedure.
  • Seven base WAV comparisons and four longer 12-voice, all-FX PCM comparisons were byte-identical to V2.8.
  • Native build reproducibility, source/installer SHA-256, BEETLE header and 65 UI screenshots passed.
  • An UBOOT command being sent is not proof that a bootloader becomes available or accepts any specific third-party installer. Actual FM-1 firmware switching was not validated.

V2.8 — CHORD ATTACK timing and audio optimization

  • Corrected CHORD ASSIGN monitoring: the old page suppressed the physical key state delivered to audio, so the selected chord could not be heard while editing.
  • CHORD ATTACK now spans simultaneous onset at 0 through approximately 65 ms of staggered, randomized note order at 100, with sample-based scheduling, reliable note-off and cancellation.
  • Skipped unnecessary tonewheel contact calculations when KEY CLICK = 0 and optimized a bounded scanner interpolation operation.
  • Retained project schema V6, effects, keyboard ranges, 12 voices and the native startup.
  • New tests covered attack extremes, randomized timing, playing chords from the editor, note-off and project persistence.
  • Existing native tests, the installed-image SHA checks and 65 code-rendered UI captures passed.
  • Two reproducible FM-1 builds were generated.
  • Reduced host DSP work does not prove that remaining FM-1 crackling or DMA underruns are fixed on hardware.

V2.7 — CHORD ASSIGN range and ON/OFF controls

  • Corrected KEY OUTSIDE CHORD RANGE for new projects: CHORD ASSIGN now has an explicit K3 ON/OFF control, defaulting to OFF. When enabled, a suitable unused range can become a chord-selector zone on keys 21–27, without overwriting existing ORGAN ranges.
  • K1 browses keys, K2 selects the chord quality, K3 toggles ASSIGN and K4 adjusts CHORD ATTACK (0–100). Press a real key in the active selector range to assign the chosen chord.
  • Disabling the chord selector returns normal keyboard behavior without deleting assignments. The enabled state persists in an unused V6 project byte; the 124-byte project size and checksum position stay unchanged.
  • Native assignment, keyboard-role, ON/OFF, attack, backward-compatible project save/load and historical regressions passed.
  • Two byte-identical native builds, installer/firmware hash and 64 native UI images passed.
  • Physical FM-1 operation and recovery were not confirmed by the offline suite.

V2.6 — Realtime polyphony & audio stability

  • Dense-polyphony fast mixer: when at least three sustained voices are stable, shared tonewheel harmonic coefficients are combined once per PCM chunk. Each shared wheel is rendered once per sample, regardless of how many held notes use it. All 12 voices, nine drawbars and MIDI/range routing remain available.
  • Accurate note transitions: note-on, note-off, drawbar changes and key-click onset automatically use the original sample-by-sample, per-voice path.
  • Reduced idle work: the firmware skips scans of all 27 pending chord-key queues when there is no queued CHORD ATTACK note. Performance routing only updates when the physical-key bitset changes.
  • Output gain path: two variable 64-bit per-sample divisions have been replaced by Q15 fixed-point shifts. Conservative reciprocal tables replace further runtime variable divisions in the input/output peak controls. Limiting and headroom protection remain active.
  • Drawbar smoothing: moved to an economical 16-sample control interval while retaining smooth audible transitions.
  • Factory percussion: enabled by default, using the third harmonic on newly created or reset projects. Existing saved-project percussion values are preserved.
  • No planned feature removals: UPPER/LOWER/SOLO, key click, leakage, percussion, Leslie controls, scanner C/V, B3/ROCK amps, delay, four reverb types, chords, humanized attack, 48 scales, 12 persistent projects, OTA/stock/BEETLE options, startup branding and the native UI remain.
  • Two repeated builds from the final pi32v2 firmware source produced byte-identical firmware and .fwsc packages.
  • OTA CRC, BEETLE protected header bytes and embedded WebInstaller image hash were checked against the packaged update.
  • Historical DSP, MIDI, chord, keyboard-range and project regression tests passed.
  • 16 demanding chord cases and eight longer reference-versus-optimized mixer cases covered B3/ROCK, full/SAFE DSP and effects on/off. Across the tested sustained twelve-note chords, mean audio-output deviation remained below 0.5% relative to the reference mixer; integer output is not bit-identical.
  • AddressSanitizer/UndefinedBehaviorSanitizer host stress tests passed. Note-off eventually returned to zero PCM output.
  • All 62 code-derived, 240 × 240 UI captures were regenerated and checked.
  • In the existing native_audio_perf.c desktop-host benchmark with 12 held notes and scanner/rotor, the optimized path measured approximately 39–41% less per-sample computation than V2.5 (seven-run median on the same host). This is not a 60 MHz FM-1 hardware-timing measurement.
  • A separate all-effects comparison reported latency similar to V2.4. Benchmark configurations and version baselines differ, so these results should not be treated as the same measurement.
  • New three-second B3 and ROCK reference WAVs are rendered by the C DSP in software, not recorded from a physical FM-1.
  • V2.6 has not been verified running on a physical FM-1. Offline tests do not establish that underruns, audible clicks or distortion are eliminated, nor that flash, boot, project migration or rollback will succeed on every device.
  • Preserve an independent working recovery path and the original BEETLE package. Do not erase unknown flash regions to resolve storage issues.

V2.5 — Cleaner signal path

  • Added a polyphonic peak follower that reduces excessive chord gain before the amp, scanner and cabinet stages. Attack is immediate; recovery is slower.
  • Removed mandatory soft clipping before the scanner in the B3/LESLIE SAFE-DSP route and removed always-on final stereo soft clipping from both routes, preserving more of the summed tonewheel signal.
  • Added a linked-stereo final peak limiter to keep output transients under the PCM ceiling without disrupting the left/right balance.
  • Retained an additional approximately −2.5 dB output trim to avoid increasing FM-1 output level unexpectedly.
  • ROCK/LORD retains user-controlled amplifier saturation; high AMP GAIN / DRIVE settings are intentionally distorted without multiple unintended clipping stages.
  • No additional heap allocation, flash write, UI control, storage-format change, user-project migration or OTA/recovery entry change.
  • Sixteen native stress cases tested one to twelve voices, nine fully open drawbars, B3/ROCK, regular/SAFE DSP and effects on/off. Tested PCM peaks stayed below 24,500 / 32,767, and UBSan checks passed.
  • A user-recorded video did not indicate full-scale digital clipping after the phone microphone. That does not rule out earlier signal-path distortion or audio DMA underruns.

V2.4 — Factory rotor defaults

  • New/reset projects use FAST rotor mode by default.
  • New/reset projects use ROTOR MIX 60 instead of 90.
  • Initial rotor phase increments now match FAST to avoid a hidden SLOW-to-FAST warm-up.
  • Existing projects continue to load their saved rotor mode and mix without migration or rewriting.
  • Organ parameters, effects, project format, boot animation and other firmware paths remain present.
  • Made 62 pixel-exact 240 × 240 firmware screen images available as a separate ZIP of individually named PNGs.

V2.3 — Effects and project handling

  • Scanner chorus/vibrato: replaced stepped integer tap positions with fractional-delay, 8-bit-interpolated scanning in full and SAFE-DSP paths. Added smoothed dry/wet transitions to address a known DSP-level source of zipper noise; the physical-device result still requires listening tests.
  • FX 5/6, DELAY: K1 MIX (0–100); K2 TIME (0–100, approximately 32–350 ms); K3 FEEDBACK (0–90); K4 STEREO (0–100).
  • FX 6/6, REVERB: K1 TYPE (OFF, SPRING, ROOM, HALL, CATHEDRAL); K2 MIX (0–100); K3 DECAY (0–100); K4 DAMP (0–100). The reverb algorithms use original low-memory integer DSP, not convolution impulse-response samples.
  • Effect tails: bounded delay and reverb tails continue after the last note; dry registrations still return to silence. No unkeyed tonewheel signal is mixed into the tails.
  • Project loading: choose one of 12 slots using K1 or the SELECT encoder and confirm with the physical SEL button (upper row, second from left). ALGORITHM is not used for confirming a load.
  • Project feedback: PROJECT SAVED and PROJECT LOADED are shown for approximately 1.6 seconds; errors have separate messages.
  • Complete project storage: drawbars for all three organ registrations; four keyboard ranges and chord ATTACK; chord assignments; scale/root/KEYLOCK/GUIDE; percussion, key click, leakage, Leslie controls, B3/ROCK amp, chorus/vibrato, rotor speeds, delay/reverb, global octave and organ-bank selection.
  • Compatibility: reads the schema 1 / project V5 format from B1 V2.2 and migrates it to schema 2 / project V6. The next successful save commits the new copy-on-write journal without overwriting the previous flash sector until the new archive is verified.
  • Retained the SikkenWorks particle startup, safe mode, BEETLE-compatible OTA header and updater, and the supplied BEETLE backup.

---

Firmware packaging and verification notes

For the current V3.3 package:

  • build/SikkenWorks-B1-V3.3-BEETLE-OTA.fwsc is an offline-checked JieLi application-update candidate with product ID FM-1_2133, based on the protected BEETLE RC1.01 header reference. Physical installation remains unverified.
  • B1-WebInstaller.html embeds the same SHA-256-checked firmware image. Compatible FM-1 images can be validated against the exact recognized loader/boot layout; external images requiring another loader must use a verified UBOOT/vendor route.
  • build/BEETLE-RC1.01-RESTORE-ORIGINAL.fwsc is the unchanged BEETLE reference file, not a universal or

CHANGELOG.md on GitHub ↗