Firmware

mvave-fm1

Rising60/100

mvave-fm1 is custom firmware for the M-VAVE FM-1, by @maxfridbe. Open source under MIT, 6 stars on GitHub.

forM-VAVE FM-1·by@maxfridbe

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

Downloads
0
Stars
6
Forks
0
Commits
7
Last commit
Get the source

No release files yet. Build from source.

MIT· maxfridbe/mvave-fm1·downloads come from the creator’s GitHub releases

7
Commits
0
Releases
7 commits and 0 releases in the last year
Activity · last 12 months

mvave-fm1

A starting point for working with the M-VAVE FM-1 synthesizer (JieLi AC791N): back it up, flash community firmware, recover it, and write your own firmware. Written as Claude Code skills plus a podman build container. Nothing here is affiliated with M-VAVE. Flashing firmware is at your own risk.

skills/
  mvave-fm1-firmware/              back up, flash (ORBIT example), restore, unbrick; protocol, flash map, safety rules
  mvave-fm1-software-development/  write firmware: hardware API, memory map, chip rules, build/package, firmware catalog
readme/
  build-container.md               how the build container works and what is verified
docker/
  Containerfile                    podman image: JieLi pi32v2 clang + SDK files + Python/Pillow + gcc
  vendor/README.md                 the JieLi files you must supply (hash-pinned; not in this repo)
mvave-build.sh                     fetch-vendor | image | clone | build | run | shell | check

Use the skills

Copy (or symlink) the folders in skills/ into ~/.claude/skills/ (or a project's .claude/skills/). They are also plain Markdown: read them directly.

Order of work: back up first (mvave-fm1-firmware, section 5.2), then flash, then develop.

Build firmware in a container (also what CI does: .github/workflows/build.yml)

./mvave-build.sh fetch-vendor        # on a network that can reach JieLi's hosts; or copy the files into docker/vendor/
./mvave-build.sh image
./mvave-build.sh clone dinghy
./mvave-build.sh run dinghy tests/run_host.sh    # try an idea on the PC: WAV + PNG, no toolchain needed
./mvave-build.sh build dinghy                    # -> out/dinghy/dinghy.fwsc

Flashing happens on the host with the installers described in the firmware skill, never inside the container.

Status: what is and is not verified

Verified on real hardware (one FM-1, Linux): identity read, full-flash double-read backup via MvaveFM1Unbricker, and an ORBIT 0.7.1 install (upstream release package) with the unit reporting FM-1_900 afterwards. The owner then tested the installed firmware and reports it works (their report; no measurements recorded here). CI (GitHub Actions, 2026-10-22, run 39823372989): the full image built with JieLi's toolchain (hash-verified) and Dinghy, Felucca and ORBIT all built without a failing step (an initial run exposed a missing Pillow text library, libraqm, now in the Containerfile). The fwsc-packages artifact is 1.35 MB zipped, consistent with three packages, but I could not download it to inspect it. No package built here has been flashed. Not verified: a flash of a container-built package, rollback from a custom firmware to stock, and the claims taken from other repos' documentation. The firmware catalog in the development skill comes from the community hub README; only the platform bases were read in depth.

Sources and related repos

Read in depth while writing the skills:

RepoWhat it isLicence (GitHub's detection, 2026-10-22)
aroum/fm1-custom-fwCommunity hub: catalog of ~130 firmwares, hardware teardown, SysEx/OTA reverse-engineering notesnone declared on GitHub
hugelton/FeluccaThe hardware layer and platform most community firmwares forkGPL-3.0
zvenson/dinghySmallest Felucca-based template: a sine synth plus updater, USB rescue, MIDI, audio, host modeGPL-3.0
dspaudio/orbitORBIT groovebox firmware (the one flashed in the example); web installer at dspaudio.github.io/orbitGPL-3.0
isod89/sloop-fm1SLOOP, the groovebox ORBIT descends fromGPL-3.0
m-vave/fm1_openM-VAVE's official open firmware and binary SDK (Windows toolchain)GPLv3 + SDK linking exception (its LICENSE.md; GitHub reports no SPDX id)
Keitark/fm1-nesBare-metal example (NES emulator), application-only update flowApache-2.0
Quixotic7/MvaveFM1UnbrickerFull-flash backup, restore to stock V15, soft-brick recovery over plain USBMIT
kagaimiq/jl-uboot-toolReads/writes JieLi flash in WL82 UBOOT1.00 mode (used by the Unbricker)MIT
Quixotic7/RemoteFM1Turns the FM-1 into a USB panel for firmware running on a computerGPL-3.0
Quixotic7/TransitFM1Safe stopover firmware between two custom firmwaresGPL-3.0
w0ts/optimistModular firmware builder; source of the pinned toolchain hashes used in docker/GPL-3.0

Pointed to by the skills but not read in depth: AL-255/FM-1-RE (protocol and firmware reverse engineering), kurogedelic/FM-1-transporter (RP2040 hard-brick recovery), merthsoft/flipper-fm1-recovery (Flipper Zero recovery), czietz/fm1-firmware-patcher and smememe/fm1-macropad-patch (binary patches of stock V15), kagaimiq/jielie (JieLi chip documentation), r/MVaveFM1 (community), and the other firmwares listed in the hub. Check each repo's own licence before reusing its code.

Licence

MIT, see LICENSE: this repo's own text, scripts and workflow.