Firmware

FM1-J6

Hype: hot · 89

Six-voice polysynth modeled on a classic early-80s analog poly.

forM-VAVE FM-1·by@JackieAlacrity2373

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

Download v1.4.0

j6-1.4.0.fwsc· 597 KB· +1 file

MPL-2.0· JackieAlacrity2373/fm1-j6·downloads come from the creator’s GitHub releases

15 commits and 6 releases in the last year

J6: a JUNO-60 style firmware for the M-VAVE FM-1

A six-voice polysynth after the Roland JUNO-60 for the M-VAVE FM-1, built on fm1-base (MPL-2.0) and felucca-bsp. Independent project, not affiliated with Roland. The sound is an approximation, not a circuit model.

New to J6? Read the beginner's guide.

J6 screen

Features

  • Voices: 6, one DCO each: band-limited saw, pulse (manual width or LFO PWM), sub square, noise; 16'/8'/4' range
  • Filter: 24 dB resonant low-pass (self-oscillates), 4-position HPF (boost / flat / thin / thinner), key follow
  • Envelope: one ADSR shared by VCF and VCA (inverted option, gate VCA)
  • LFO: rate, delay, to pitch, to cutoff, PWM; the key pressure also moves its depth
  • Chorus: stereo, off / I / II / I+II
  • Play modes: Poly, Unison (with spread), Solo; portamento; bend range; hold
  • Arpeggiator: up / down / up-down, 1-3 octaves, rate
  • Recorder / sequencer: 16 steps with rests, tempo follows the ARP rate, saved with SAVE
  • Memories: 56, all factory sounds (brass, strings, pads, keys, basses, leads, organs, effects), stored in flash; MIDI program change selects. A unit that already has a saved bank gets the new sounds only in memories it still holds as INIT
  • MIDI: notes, velocity, pitch bend, channel pressure, program change and a CC for every control (see docs/MIDI_CC.md)
  • Web editor: editor/ is a browser page with knobs for every parameter over Web MIDI; it runs on your computer, not on the FM-1
  • UI: page tabs, six colour themes (JUNO blue by default, GREEN, AMBER, CYAN, RED, MONO), status page with a pattern strip

MIDI

J6 answers to USB-MIDI notes, velocity, pitch bend, channel pressure, program change (memory 1–56) and a control change for every parameter. The full chart with ranges and values is the MIDI CC Implementation Chart.

SectionCCs
Performance1 mod wheel, 64 sustain, 120 all sound off, 121 reset controllers, 123 all notes off
DCO20 range, 21 saw, 22 pulse, 23 sub, 24 noise, 25 pulse width, 26 PWM source
VCF / HPF / VCA74 cutoff, 71 resonance, 27 env amount, 28 key follow, 29 env polarity, 30 VCA mode, 31 HPF, 7 level
Envelope73 attack, 75 decay, 70 sustain, 72 release
LFO76 rate, 77 delay, 78 to DCO, 79 to VCF
Voice80 mode, 5 portamento, 85 unison spread, 86 bend range, 93 chorus
Global102 tune, 103 velocity, 104–106 arp direction / octaves / tempo, 107–110 arp, seq play, seq record, hold, 111 screen theme

The FM-1 only receives MIDI, and there is no SysEx. Build your own front end from the chart, or use the web editor below.

Controls

ControlAction
HOMEstatus page (sound name, mode, arp / hold / seq state, 16-step pattern strip)
EDIT / SEL / ENV / LFO / FX / GLOpages DCO, VCF+HPF, envelope, LFO, chorus+mode+porta, global. Press the button again for the page's second half; DCO, VCF and GLO have two
K1..K4the four values shown
SELECT encoderflip a page's halves
PRESET / ALGO encodersmemory ±1 / ±8
SAVEstore the sound, settings and pattern (lit when something changed)
ARParpeggiator on/off; while recording, inserts a rest; says "SEQ RUNNING" if the sequence plays
PLAYhold on/off
RECstart recording (clears the pattern, play keys, ARP = rest); press again to finish
SEQplay / stop the pattern ("EMPTY: REC" if none). Starting it turns the arp off
OCT- / OCT+octave; both together = panic (all notes off, stops the sequence and recording)
Touch keysthe 27-key keyboard

GLO page 2 holds TEMPO (the arp/sequence rate), and THEME.

Web editor

A browser-based front end for J6, in editor/. It is a static page that runs on your computer and talks to the FM-1 over Web MIDI (Chrome, Edge or Opera); nothing is installed on the FM-1.

  • A knob, switch or selector for every parameter: DCO, VCF/HPF, envelope, LFO, voice, chorus, arpeggiator and global settings
  • Performance controls (mod wheel, pitch bend, sustain, panic) and an on-screen keyboard
  • All 56 factory sounds, plus a local sound library with save, export and import
  • A theme picker (JUNO blue, GREEN, AMBER, CYAN, RED, MONO) that recolours the page and sets the screen theme on the FM-1 (CC 111)
  • Knobs: drag, mouse wheel or arrow keys; double-click resets

See docs/MIDI_CC.md for how it works and the full CC chart.

Open it online: https://jackiealacrity2373.github.io/fm1-j6/ (hosted free by GitHub Pages from editor/).

Run it locally instead (no internet needed; Python 3 required):

  1. Open a terminal in the repository folder.
  2. Run python -m http.server 8080 -d editor
  3. Browse to http://localhost:8080 in Chrome, Edge or Opera and click Connect MIDI.

Web MIDI only works on https:// pages or localhost, so don't open index.html by double-clicking it. To host your own copy, serve the editor/ folder from any static web host over HTTPS.

Install

Download j6-1.4.0.fwsc from the releases and install it with the Firmware Hub installer or python fm1-base/tools/fm1_install.py j6-1.4.0.fwsc. The package carries the felucca update loader, so you can leave J6 by installing any other FM-1 firmware the same way. Flashing custom firmware is at your own risk.

What it keeps

J6 keeps only its own data: its 56 memories, settings and sequencer pattern. It does not read the projects, samples or settings of other firmwares, and they cannot read J6's.

Build

Host simulator (any OS with a C compiler and Python + Pillow):

python fm1-base/tools/build.py . --host
build/host/j6_host tests/basic.txt build/host     # runs the script, writes screenshots and a WAV

On Windows with MinGW see shim/: set PYTHONPATH=shim, set CC=shim\cc.bat.

Engine test (levels, NaN, voice counts, CPU, MIDI CC map), then python tests/analyze.py OUT for spectra:

gcc -O2 -ffp-contract=off -I fm1-base/include -o engine_test tests/engine_test.c src/juno.c -lm

Web editor (a static page; Chrome, Edge or Opera): python -m http.server 8080 -d editor, then open http://localhost:8080/. After changing the factory sounds in src/juno.c, run python tools/gen_patches.py; python tests/editor_test.py checks that the firmware, the editor and docs/MIDI_CC.md agree.

Firmware, Linux: set JIELI_TOOLCHAIN and AC79_SDK (see fm1-base/README.md), then ./build.sh → build/j6.fwsc (./build.sh --release 1.4.0 → build/j6-1.4.0.fwsc, identity FM-1_66010400). Windows: Docker Desktop, then .\build_device.ps1 (see the script header for the toolchain layout). Pushing a vX.Y.Z tag builds, signs and releases through GitHub Actions.

Status

Host simulator and engine tests pass. Real CPU headroom (app_overload sheds voices if the render runs late), the exact output level and the chorus / HPF values are by ear-of-the-spec, not measured from hardware.

Licence and credits

MPL-2.0 (LICENSE). Built on fm1-base (Charles Vestal, Leo Kuroshita) and felucca-bsp, vendored here under their own MPL-2.0 licences. fm1-base/tools/build.py has one local change (POSIX container paths on Windows).