fm1-dock, image 1 from its README
1/10
Firmware

fm1-dock

Loud91/100

One FM-1 firmware, installed once: synths as modules in flash slots, deployed over MIDI (based on Dinghy, GPL-3.0)

fm1-dock is custom firmware for the M-VAVE FM-1, by @joakimeriksson. Open source under GPL-3.0, latest release v0.7.1 (October 2026), 18 stars on GitHub.

forM-VAVE FM-1·by@joakimeriksson

Unclaimed. Is this yours? Sign in with GitHub as @joakimeriksson to claim it.

Downloads
0
Stars
18
Forks
5
Commits
134
Last commit
Download v0.7.1

fm1-dock-0.7.1.fwsc· 596 KB· +4 files

GPL-3.0· joakimeriksson/fm1-dock·downloads come from the creator’s GitHub releases

87
Commits
4
Releases
87 commits and 4 releases in the last year
Activity · last 12 months
4 releases
  1. v0.7.1fm1-dock 0.7.1Latest5 files

    fm1-dock 0.7.1: Scintilla sounds closer to the Elka Synthex. Everything else is as in 0.7.

    Built from source and signed on GitHub like 0.7 (gh attestation verify fm1-dock-0.7.1.fwsc -R joakimeriksson/fm1-dock --signer-repo zvenson/fm1-build). Install or update from the page: your added modules, settings and presets stay.

    Scintilla, up to scintilla-fm1 0927bbd

    • Band-limited hard sync for every slave wave: synced leads without the old aliasing on high notes.
    • A cleaner triangle, derived from the phase.
    • The resonance curve remade.
    • The factory bank regenerated: filter envelope reach, LFO pitch depth and PWM depth measured against a recording of the hardware.
    • The chorus as the schematic has it: two bucket-brigade lines, triangle LFOs at 0.49 Hz and 0.60 / 4.6 Hz.

    The oscillators are built small (SC_SMALL_OSC), so Scintilla still fits the SMK-37's flash map: 94 KB. Eight voices on an emulated FM-1: under half a block at worst, no overruns.

    Also

    • The site now rebuilds itself after each release.
  2. v0.7fm1-dock 0.75 files

    fm1-dock 0.7: Bluetooth MIDI that connects, both CPU cores, five new modules, a master EQ, and a real catalog page.

    This is the first fm1-dock built from source and signed on GitHub by the Firmware Hub's shared workflow (zvenson/fm1-build): every .fwsc here carries a build attestation (gh attestation verify fm1-dock-0.7.fwsc -R joakimeriksson/fm1-dock --signer-repo zvenson/fm1-build).

    Install

    Open the page in Chrome or Edge, press Connect over USB, then Install fm1-dock. Coming from 0.6 or earlier, your added modules, settings and presets stay. Then add modules from the catalog with one click.

    PackageFor
    fm1-dock-0.7.fwscM-VAVE FM-1
    fm1-dock-0.7-smk37.fwscM-Vave SMK-37 Pro, Starrykey 37 Play
    fm1-dock-0.7-smk37-elite.fwscSMK-37 Elite
    fm1-dock-0.7-smk37-mke.fwscMKE-P37

    Bluetooth MIDI that connects, with both cores

    Bluetooth MIDI advertised, but on a real FM-1 a connection fell apart within a fraction of a second. Reading the radio's own counters from RAM showed why: on the data channels it heard nothing. The radio was started from values recorded from the stock firmware in an emulator, and the chip's own tuning was eleven steps away.

    • The radio calibrates itself at every start, with the AC79 SDK's calibration as Charles Vestal wrote it for fm1-base and Melodee (fm1_rf_cal.h, Apache-2.0). A Mac connects in half a second and MIDI flows both ways. Turning BLUETOOTH ON pauses the sound for about 0.2 s while it measures.
    • A dead link is let go and the FM-1 advertises again (it could hang on one for 40 s, or for good).
    • The radio's interrupts come before the audio's, so a busy module no longer makes it miss a connection.
    • Both CPU cores keep running with Bluetooth on, with M-VAVE's whole power-up at boot (after Melodee and Optimist). Tested: three minutes of eight-note chords over Bluetooth into CS-1, half its voices on the second core.

    On a Mac: Audio MIDI Setup → Window → Show MIDI Studio → the Bluetooth button → Connect on FM1-DOCK xxxx.

    Five new modules

    Each is its author's own code, taken by a take.py and changed only where a module's 272 KiB of RAM needs it. Add them from the page.

    by
    FM-106PatttFThe Juno-106: six voices, three of them on the second core; the 128 factory presets, its chorus, arpeggiator and sequencer
    MONK-1Charles VestalTwelve singers on MonkSynth's formant voice; velocity and pressure from the keys. Large: 240 KiB
    FiMba-1Adam SowersA kalimba by modal synthesis: 16 tines, thumb-roll chords, the sound hole's wah under the keys' pressure
    GATORnpi3pakA macro oscillator after Mutable Instruments' Plaits (Emilie Gillet's DSP): 24 models, 16 presets
    DUB-1sbegueriaA generative dub techno machine that plays itself, eight pieces. Large: 265 KiB

    The add-ons share 296 KiB of flash; the page's meter shows what fits before you add one.

    The second core

    Modules can play voices on the chip's second CPU: CS-1 plays half its voices there, FM-106 three of its six. The top line shows 2CPU or 1CPU. After a crash with both cores, fm1-dock runs on one until power-off instead of crashing again.

    Sound and MIDI, for every module

    • Master EQ (OPTIONS → EQ): LOW, MID and HIGH, ±12 dB, in the chip's hardware EQ, heard while you set it; KNOB1–3 turn the bands.
    • CC7 VOLUME and MASTER CC7: CC 7 sets the level of whatever plays; MASTER can send CC 7.
    • MIDI CH: ALL, or one channel the module hears as channel 1.
    • LOCAL: OFF, the keys only send MIDI (no doubled notes from a computer).
    • MIDI THRU: the TRS jack's MIDI on to USB and Bluetooth.
    • KNOBS CC: KNOB1–4 send CC 74, 71, 73, 72.

    Also

    • Scintilla up to date: the factory bank, velocity and aftertouch, CC 7, Take-off without the click.
    • USB audio records every module cleanly.
    • The page is a catalog and installer: your device (read only until you press a button), fm1-dock's install and update, every module with Add / Remove, and the flash meter.

    Thanks

    Kerem Kilic (Melodee): the power-up and the second core's safe hold. w0ts (Optimist): the Bluetooth stack. Charles Vestal (fm1-base): the radio calibration, MONK-1, AMB-1 and FoMni. Leo Kuroshita (Felucca). PatttF, Adam Sowers, npi3pak, sbegueria, twochannels and zvenson for their synths. Licences and credits: LICENSING.md.

    Known limits

    • FM-1 SID, MONK-1 and DUB-1 are large: with one of them added, little else fits.
    • The new modules are tested in the emulator; FiMba-1 also on an FM-1.
  3. v0.6fm1-dock 0.62 files

    One firmware for the M-VAVE FM-1, many synths. fm1-dock: CS-1 (twochannels), Scintilla (Joakim Eriksson: the Elka Synthex, the laser harp among its 80 patches), OberVave (zvenson: a 4-track analog poly with arpeggiator, sequencer and effects) and the built-in sine. Hold HOME to pick one.

    Install (over USB; asks before it writes):

    pip3 install mido python-rtmidi
    python3 tools/fm1_install.py fm1-dock-0.6.fwsc
    

    Back to any other firmware with the FM-1 Firmware Hub. Installing over 0.4 keeps your deployed modules, settings and presets. Installing firmware is at your own risk; OCT− held at power-on is the USB rescue.

    New since 0.4:

    • BLE-MIDI (off by default): the picker's last line, BLUETOOTH, turns it on with SEL. A computer, phone or controller connects to FM1-DOCK xxxx without pairing, and notes go both ways. OCT+ at power-on is a safe start: the sine only, the radio not started.
    • A file from the computer into the module playing, never written to flash: tools/dock.py send FILE. FM-1 SID uses it to play any .sid sent over USB at once, from its page ("Play on my FM-1"). Modules opt in with HB_F_DATA and data(); existing modules load as before.
    • Safer: a release takes no boot firmware, the keys at power-on are read for 500 ms, and OCT− is read again while fm1-dock starts (the USB rescue).
    • Solo apps: tools/build.py --modules PATH --name ... builds a firmware of one module of your own on fm1-dock, keeping its USB, installer and rescue. FM-1 SID's own firmware is built this way.
    • The fm1-dock name everywhere: tools/dock.py, .dock module files (.hrbr still works), FM1-DOCK on the crash and rescue screens. The protocol and module format are unchanged: modules from 0.4 keep working.
    • USB keeps four command frames waiting instead of one. EXEC probes work again.

    Files:

    • fm1-dock-0.6.fwsc: the package (610 110 B, identity FM-1_956)
    • fm1-dock-0.6.syms: its symbols, for the console to name the function of a crash PC

    Try it in the browser first: https://joakimeriksson.github.io/fm1-dock/#emulator

    Built from e177e83 with tools/build.py --release 0.6. GPL-3.0-only.

  4. v0.4fm1-dock 0.42 files

    One firmware for the M-VAVE FM-1, many synths. The first release as fm1-dock (formerly harbor).

    In the package: CS-1 (twochannels), Scintilla (Joakim Eriksson: the Elka Synthex, the laser harp among its 80 patches), OberVave (zvenson: a 4-track analog poly with arpeggiator, sequencer and effects), and the built-in sine. Hold HOME to pick one.

    Install (over USB; asks before it writes):

    pip3 install mido python-rtmidi
    python3 tools/fm1_install.py fm1-dock-0.4.fwsc
    

    Back to any other firmware with the FM-1 Firmware Hub. Installing over an earlier harbor keeps your deployed modules, settings and presets. Installing firmware is at your own risk; OCT− held at power-on is the USB rescue.

    New since harbor 0.3:

    • OberVave as a module; its programs and patterns in flash banks
    • banks by index for modules (bank_load_n / bank_save_n / bank_free) and the glow LEDs (led(id, 2))
    • code may run from RAM and from deployed modules on a real FM-1 (the chip's PC limits), so probes and deployed modules work there
    • modules can build from outside the tree (includes =, HB_MOUNT)
    • probes measured on the chip: instruction, DSP and cache costs, alignment, the clock, the LCD, MIDI out

    Files:

    • fm1-dock-0.4.fwsc: the package (610 110 B, identity FM-1_954). The tools and file names inside still say harbor until the code is renamed.
    • fm1-dock-0.4.syms: its symbols: load them in the console to name the function of a crash PC.

    Try it first in the browser: https://joakimeriksson.github.io/fm1-dock/#emulator

    Built from 9a05ef6 with tools/build.py --release 0.4 --modules cs1,scintilla,obervave. GPL-3.0-only.