fm1 emu
Emulator for the M-VAVE FM-1 pocket synth: runs its firmwares unchanged in the browser and natively
OrigenGitHub WebAssembly emu
TecnologíaEmulador Nativo Multiplataforma (JIT / Dinámico)
Disponible paraWeb, Web
Ver proyecto oficialSobre el proyecto
Emulador indexado en PortsNative optimizado para ejecutar títulos de GitHub WebAssembly emu en Web, Web. Ofrece alta compatibilidad, ajustes gráficos y soporte para mandos modernos.
Información oficial del proyecto
FM-1 emulator
The M-VAVE FM-1 is a pocket FM synthesizer, and a small community writes its own firmwares for it: drum machines, grooveboxes, ambient generators, a chord harp. This project emulates the FM-1 itself, its CPU, screen, keys, knobs and audio, so every one of those firmwares runs unchanged in a browser, on a computer or as an instrument plugin in a DAW (AU, VST3). You can try a firmware before you install it, write one without a synth on the desk, or just play.
Play it: joakimeriksson.github.io/fm1-emu: pick a firmware, press Start, play with the computer keyboard, the mouse, a touch screen or a MIDI keyboard.
With sound: nine of the firmwares in 50 seconds.
https://github.com/user-attachments/assets/6849316e-7239-497e-b617-be74317dc2b1
The browser keeps the firmware you run and automatically saves flash changes, including settings
and patches saved through the firmware's own controls. Each exact firmware version has its own
save. Save & backup offers a manual save, portable .fm1save backup export/import, reset,
and a check for firmware updates. This also works with locally opened packages and on the
SMK-37 page. Edits held only in firmware RAM need its normal save command first; browser saves
survive reloads but clearing browser data removes them. Export a backup to keep a separate copy.
The page hosts no firmware: it downloads each one from its author's own site when you start
it, the same update package you would install on a real FM-1. M-VAVE's own firmware can't be
fetched that way, so download FM-1.fwsc from M-VAVE and open it on the page.
And the M-VAVE SMK-37: a 37-key keyboard with the FM-1's chip inside, whose community ports run here too (below).
Also here: FM-1 SID (fm1-sid/, a submodule: clone with
--recurse-submodules), a firmware that turns the FM-1 into a Commodore 64 SID
synth, with a step sequencer and stereo chorus, delay and reverb, that also plays C64 tunes
and GoatTracker songs (its page plays all of HVSC).
On a real FM-1 it is its own firmware on fm1-dock, which
keeps USB, the installers and the rescue.
What runs
153 community firmwares: every one on the FM-1 Firmware Hub that
runs here (its packages, fetched from the Hub; tools/hub_catalog.mjs follows its catalog), and a
few more from fm1-editor.com/firmware. Also FM-1 SID, and
M-VAVE's stock firmware (V13 and V15) with both CPU cores running. The ones the Hub doesn't list
are our own list, web/firmwares-own.json: add a firmware there, and the tool appends it. Each
name below opens the page with that firmware picked; press Start. (?fw= takes the Hub's ids
too; &embed=1 shows only the device and its controls, for a window on another site.)
A page on this site can hand the emulator a try-out (web/tryout.js): &flash=PATH lays flash
sectors over the package's fresh flash (records of a 4-byte little-endian offset and the 4096-byte
sector, as the saves keep them), &script=PATH plays an input script from the boot (fm1-live's
FM1_BENCH_KEYS: ms:mHEX MIDI into the DIN jack, ms:id keys, ms:eN:clicks encoders). Both
come from the page's own origin only, the try-out starts by itself where the browser lets it, and
it is a session of its own: the browser's saved flash is neither loaded nor overwritten. fm1-dock's
catalog uses it for its "Try it": a module installed and picked
(fm1-dock's tools/tryit.py).
| Firmware (opens it on the page) | By | What it is |
|---|---|---|
| M-VAVE stock firmware | M-VAVE | The firmware the FM-1 ships with: a DX7-style FM synth, both cores running. Bring your own FM-1.fwsc. |
| Felucca 1.8.2-beta | hugelton | The original open firmware: a four-operator FM synth with sequencer, arpeggiator and effects. |
| Felucca [Salt] 0.9-salt14 | ChanceTheMaker | A Felucca fork with its own sound and editor changes. |
| 386DX 2.0 | seajaysec | A karaoke robot with a band: it sings songs from karaoke and MIDI files, or lines you type, to the notes you play. |
| AISLING 0.4 | CU_STE | A generative Irish ambient instrument: harps in a jig's threes and a flute over a held drone, with surf, wind and rain. |
| AMB-1 1.3 | charlesvestal | A generative ambient machine inspired by Music for Airports. |
| Amenity 1.0.0 | Presethead | A live jungle tool built around the Amen break. |
| April OS BETA 1.1 | beashoko | A sampler inspired by the Casio SK-1: no synth engines, only samples, recorded through the installer page's microphone bridge. |
| Arctic Scream 1.3.1 | p0larpatch | Dark ambient drones and feedback screams from the frozen tundra. |
| Arcturus S6 1.7 | Zeptosecond DSP | An experimental, self-playing wavetable instrument for generative, evolving soundscapes. |
| B1 5.6 | Joppe Sikken (SikkenWorks) | 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. |
| BB1 1.5 | Ole Big Beat / TexasRADIO | Two independent drum layers and Dillo, an Open303-derived acid bass, through tape echo and spring reverb: a synthesised 808 and seven sampled machines, 67 songs, 21 eras and 205 ACID phrases. |
| BEETLE 1.8.2 | Joppe Sikken (SikkenWorks) | A tracker for the FM-1: patterns written top to bottom, step by step, with note, instrument, chord and effect columns, the way trackers have always worked. |
| BEETLE BLUE 1.3 | Joppe Sikken (SikkenWorks) | BEETLE BLUE turns your M-VAVE FM1 into a six-lane drum tracker. |
| Berlinan 0.5.1 | Jiří Píša | A generative Berlin School MIDI sequencer: a small ensemble of voices that repeat, phase against each other on loops of unequal length and earn their mutations over time. |
| Bigorna 2026.10.31 | Nuno Zimas | Rhythmic noise, power noise, industrial and IDM after the Elektron Digitone II: six tracks, four machines (4-OP, DRUM, WAVY, HIVE), parameter locks on a 16-step sequencer, a looper, send effects and USB audio. |
| Blop 1.1.0 | Obsimo | Explore sound with your Blop: one-finger chords from 38 grids, chord rhythms, a bass with its own riffs and a few discreet drums with sidechain, while a little creature swims to your chords in an aquarium on the screen. |
| bocjuhn 1.0.0-rc7 | ryuji kanagawa | An experimental instrument with six tracks and eight sound engines. |
| Bubba Machine 0.10.0-beta | Erbubar23 | A six-track groovebox written from scratch: TR drums from Plaits' 808 and 909 models, a sampler with a 16-slice slicer, a bass and three free tracks (analog, 6-op FM, 303 acid), scenes and fills, all at 44.1 kHz. |
| Bunker Evolved 1.0.0 | Kid Bunka | Generative ambient: four editable layers from 64 sound recipes, 24 worlds, 24 motifs and 32 scales. |
| Bytemania 1.2.0 | lloyd (llozd) | A bytebeat synth: play one-line formulas, tweak them with the knobs, and write your own, with a random button in the formula creator that is really fun. |
| Caravel 0.11.0 | BonszaiMusic | Multi-engine synth firmware with DRONE, STASIS texture capture, Pair Morph, and per-track Random Morph and Morph Journey for evolving, ambient and experimental sound design. |
| Carnac OS 0.9.6 | OrbVorgis | A dual-timbral wavetable synth after Carnac's standing stones: 15 morphing wavetable banks, seven voice architectures, a MAQ 16/3-style sequencer for modulated sequences and a chord sequencer for progressions, spring, tomb and tank reverbs. |
| Chipbox 1.4.0-helpfulharold | Pasquale Barilla | A chiptune groovebox with replicas of the NES, Game Boy and Sega Master System sound chips, in three views: RACK for the 16 steps of a page, CHIP to set up each channel, SONG to chain the pages into a song. |
| ChoralRoot 0.29.2 | Quixotic7 | A port of the Choral Root synth. |
| fm1-chord 0.3 | math0ne | A chord machine after the HiChord, with extras: chords in a key under the white keys, slash chords and inversions, sounds, envelopes, effects and a looper. |
| CLATTER Pocket 1.0.0 | allmyfriendsaresynths | A generative drum machine on the LXR sound engine. |
| Clipper 1.3.1 | isod89 | A deep synth grown out of SLOOP: 23 engines and 407 sounds, from HYBRID (three oscillators, two filters, a mod matrix) to six-operator FM, wavetables, wave sequencing, a Juno and physical models; arp, step sequencer, MPE and a web editor for every parameter. |
| CoralFlower 0.6.1 | FicusFicusov | Chords after the Orchid, with a UX made for the FM-1: one key turns every note into a chord with a bass, 27 scales, an arpeggiator, a looper, a plate reverb, and a pixel flower that grows as you play. |
| CS-1 2026.10.22 | twochannels | A Yamaha CS-80 in spirit: eight voices of two channels, high- and low-pass filters in series, ring modulator, the touch response and 22 tones from the owner's manual. |
| CTL-1 1.0 | charlesvestal | A MIDI controller: the keys play in a scale with its chords on the black keys, four banks of knobs, an arpeggiator and Euclidean drums, with General MIDI sounds of its own. |
| Cut-A-Dor 1.2.1 | Kid Bunka | A beat dojo for scratch DJs and beatmakers: boom bap, lo-fi and breaks from 16 rhythm families with swing and fills, an eight-lane 32-step sequencer, punch-in effects you record bar by bar, a bass voice. |
| DARK-1 1.0.4 | Polystellarflow | Dark-music firmware for the FM-1: 21 genres, 210 pieces, from dark techno and cinema to dark ambient, witch house and dungeon synth. |
| Daurade 0.1-7e8d7ae | delirioux | Generative French house after a certain robotic duo: a filtered loop opening over sixteen bars, a mix that pumps on every kick and a robot voice singing the hook. |
| Del Rio 1.0 | Jess Del Rio | A rhythm box of ceremony percussion: djembe, cajon, udu, clapsticks, maracas and triangle, their real strokes on the black keys, a step sequencer on the white keys and 31 rhythms from the literature. |
| Demake 0.4.24 | Sequencist | An ambient lofi machine on 64 of its author's own pedal recordings: three synths, each with a piano roll, eight patterns, its own reverb, delay or tape echo and motion; huge shared reverbs, colour and old media over the whole mix; a chord machine and an arpeggiator, sixteen scenes, a song mode. |
| Dinghy 0.4 | zvenson | Your base for your own FM-1 firmware: everything under it done and documented (updates, USB rescue, USB-MIDI, USB audio, keys, screen, settings), a 4-voice sine on top. |
| DRIFT 0.9.6 | FBNFRTG | An ambient instrument for live sessions: warm synths, spacious pads and delicate plucks over a generative Euclidean sequencer on one track, with delays and reverbs from spring to shimmer. |
| DUB-1 1.4.3 | sbegueria | A generative dub techno machine that plays itself from the moment it is on: chord stabs into a tape echo, FM pings, a sub bass on five grooves, a ducking kick, crackle, and an eight-bar arrangement with breaks and fills. |
| DUELL 1.1 | OSCILL/R | A multimorphing bitimbral synthesizer: two complete parts, three ways to play them together, and a morph that glides between two versions of every sound. |
| Dungeon Tracker 1.0.0 | Bourbon Weather | A four-track groovebox that is a dungeon crawler: your party plays the music, the rogue drums, the fighter bass, the cleric pads and the mage the melody. |
| Evander's Music Box 1.5.2 | Michail Tsakiroglou | A bard's instrument for LARP, medieval and high fantasy: recorder, hurdy-gurdy, harp and a tavern kit on four tracks, encounters and songs for the table. |
| ESTAMPIE 0.3.7 | Drew Robinson | A groovebox for lively mediæval dance music: hurdy-gurdy, lutes, shawms and frame drums over drones, four tracks with 64-step sequencers, mediæval modes and temperaments, and velocity from the FM-1's own keys. |
| ETCH 1.88 | SikkenWorks | Draw the sound: a waveform drawn and changed with the knobs, morphed into another one, and a third modulating the result. |
| Fart Machine One 1.1.0 | adamcharleswilsonmusic-code | A questionable musical instrument: eleven artisanal farts, reverb, delay and a sixteen-step sequencer. |
| Felucca 8 Patterns 1.6.1_and_sequences_2 | echoe | Felucca 1.5.1 with eight sequences a track to switch between and chain one after another; the user samples are left out to make room. |
| FiMba-1 0.6.1 | jadamsowers | A physically modelled kalimba (thumb piano), with mbira patterns, tape and grains. |
| FIZZ 0.12.0-beta.13 | Quixotic7 | A groovebox around one engine, ChoralRoot's FM TONE: eight tracks, p-locks and preset sound locks, conditions, ratchets, chords, and MIDI FX for generative patterns and for reworking the ones you have. |
| Flyfish 1.0.3-777fa1c | delirioux | One piece on the FM-1: Chopin's Étude Op. |
| FM-106 beta7 | PatttF | The Juno-106 emulation of KR-106 ported to the FM-1: six voices on both cores, the BBD stereo chorus, 128 factory presets and a 1980s Roland look. |
| fm1-dock 0.7.1 | joakimeriksson | One firmware, many synths: CS-1, Scintilla and OberVave as modules in flash, the sine built in; HOME opens the picker. |
| FM-1 Doom 0.5 | zvenson | Doom on the FM-1: one arena from FreeDM, played on the keys and a knob, on the FM-1's screen, with synthesised sound effects and no music. |
| FM1-GM 1.1.1 | jartificer | A General MIDI sequencer with 16 tracks, 128 General MIDI instruments to choose from and a drum kit (on track 10). |
| FM1-TRAX 0.9.3 | jartificer | A Mega Drive / Genesis music tracker. |
| FMDj 2026.10.22 | DEADACTIVE | Game Boy music programs on the FM-1: LSDj, the tracker, and DMGo!, the drum machine, in a Game Boy emulator on its screen, keys and knobs. |
| FMEL-1 1.0 | Antonio Altea | Mellotron-style tape sounds, coloured with effects and lo-fi tape: flutes, strings and choirs as on the old tape frames, played from the keys. |
| FMini-1 2.1.0 | Ruppert | A three-oscillator monosynth in the spirit of the classic Moogs: a 24 dB/octave ladder filter, two contours, 100 factory patches, an arpeggiator, a sequencer and MIDI. |
| FOMAJAM 0.1.9 | konsumer | A drum machine in the classic step-grid style: voices after the 909, 808, 707, 606, DMX and more, a machine per voice, accents and patterns. |
| FoMni 0.4 | charlesvestal | A chord harp inspired by the Omnichord: hold a chord, strum the keys. |
| FRASIL 3.0 | Styves Goupil | An ambient drone and texture instrument: tap a key to latch a drone, a note or a chord in your key, press to swell it. |
| Frodhes 0.9.7 | Leonardo Mirabal | A Rhodes electric piano, physically modelled, no samples: four piano types, compressor, drive, tremolo or wah, phaser, chorus, delay and reverb, tap tempo, MIDI clock, scales and presets. |
| FuMi-1 1.1.0 | cartesive | Inspired by the Suiko ST-50 shigin conductor: koto and shakuhachi-style tones. |
| Pocket GammaWave 1.2.1-GW | ShadowTune (GammaWave Audio) | The companion to the GammaWave desktop synth: four industrial distortions, vowel and scream filters, an FFT spectrogram, a four-track tape deck screen and a song generator with 49 genres, trap and drill too. |
| GATOR 0.6 | ivanvoid | A monophonic macro-oscillator on the open Plaits DSP: all 24 models with harmonics, timbre and morph, an 8-slot mod matrix fed by an envelope, two LFOs, velocity, aftertouch and random, a low-pass gate, and a DRONE mode. |
| GHOULBOX 2.4 | jasonpersinger | Dungeon synth (a Felucca fork): cathedral reverb and dark drones. |
| Golana 1.3 | Gadlele | One analog-style synth laid out like the classic microKORG, with a screen that draws the sound. |
| Golana DZ Edition 0.1.0-beta | dzwerg | Golana's synth with a sequencer for whole songs: 64 steps a pattern, 32 programs (up to 2,048 steps), a SONGMODE that plays from a first to a last program once or on repeat, and USB MIDI out to sequence other synths. |
| GR!MM 2.0.2 | GRiMMBIENT | Dark ambient, dungeon synth and deathdream: four tracks, seven sound sources from VA and 6-op FM to formant voices and physical models, tape, granular freeze and reverbs up to infinite, a 64-step sequencer and song mode. |
| GuitChordi 0.1.0-beta.1 | Stoogs | A chord and string instrument: 16 synthesized sounds, 50 chord styles, editable voicings, guitar tunings, and Freeplay, Strum and Arp modes with partial-chord pulses. |
| hawk-chua 1.7 | plieuwski | Noise and modeling synth with GM-style presets (4 banks, 512) and a 4-track tape recorder: each voice a live Chua circuit or noise program, through vactrol gates into resonators and piano, drum, voice, flute, brass, bowed, reed and bird waveguides, with temple, cathedral and mosque reverbs. |
| HERA 1.1 | Ben Badio | A chord groovebox after the Roland J-6: 100 chord sets, 9 phrase styles with 12 variations each and a 64-pattern step sequencer, on a four-voice Juno-style synth from Clipper with chorus, delay and reverb. |
| Hortator 1.0.1 | DeadActive | A drum-focused firmware based on Felucca. |
| Hortator (Bluetooth) 1.0.1 | DEADACTIVE | Hortator's Bluetooth build: the same eight-track drum machine, plus Bluetooth MIDI for a BLE keyboard or clock, or the M-VAVE SMC-Mixer as a mixer for the eight tracks. |
| HYP-1 1.5.54 | RedtailWorks | Hypnotic techno and acid: a breathing pad, a deep drone, a generative 303 line and grain over drums you sequence. |
| J6 1.4.0 | JackieAlacrity2373 | A six-voice JUNO-60 style polysynth with chorus, arpeggiator and a 16-step recorder. |
| Jam Playground 1.2.0 | Bob Perry | Jam Playground plays a new song the moment you turn the FM-1 on. |
| Jangada 1.0.1 | zednaked | Superwave analog voices and a modulation matrix. |
| JIANT FM V10.6c | juanjiant-bit | A bio-synthetic groovebox: six tracks drawn as living beings, eight engines (FM6 with Dexed, analog, phase, voice), mutating macros and SLOOP's song mode. |
| KARMA 3.0.3 | Ariel Muchnik | A four-track groovebox: an acid bass or a Juno-style poly, physical modelling, two dozen synthesis models and a drum synth. |
| Ketch 0.1-beta | risseraka | A tracker in the LSDJ / picoTracker / M8 line: song, chain and phrase screens, instruments, effects and a mixer, on the FM-1's own keys and screen. |
| Kitten Synths 2.8-kitten.8 | Black Kitten Devices | NEW: two drum tracks. |
| Kitten Rack 1.3.0 | Black Kitten Devices | A Eurorack-style modular synth: over 50 modules (VCOs, a Moog-style ladder, a low pass gate, Turing, Marbles, chaos, effects) patched with cables on the FM-1 itself, a 64-step sequencer with live recording, 33 factory patches, visuals, USB audio and MIDI. |
| K-WASUB 1.0.52 | Omnipotard (Guizmoh) | K-WA SUB is a powerful bass synthesizer for the M-VAVE FM-1, featuring 9 synthesis engines with 2 engines playable simultaneously and morphing capabilities. |
| LOOM-8 0.12.1 | Charles Vestal | A groovebox inspired by the OP-XY: eight tracks on nine engines, step tricks and locks, weave, a conductor and throws. |
| Loom FM-1 0.1.0 | Co-oscillator | Four synth and sampler tracks and a drum track on 14 engines, among them wavetable, 6-op FM, tape scrub, granular and a slicer; a 64-step sequencer, a chord progression generator, macros and sidechain ducking. |
| LUXR 2026.10.25 | HOLODECK AUDIOTOOLS | An LXR-style drum machine: eight sounds, each a synth and a sample layer, with drive, delay, reverb, filter, compressor and limiter. |
| Makohai 1.3 | delirioux | A generative groovebox in the style of early-90s PC tracker music: six lanes (lead, arp, pad, bass, drums, sfx) composed live in ten S3M-scene styles. |
| MAKU 1.0 | okumurari | An ambience machine for DJ interludes: switch it on and a random world in key plays, four parts, buttons that are verbs, and the worlds you like breed new ones. |
| Matryoshka 1.9.1 | glvno | A modular synth you patch in the browser: modules (oscillators, filters, envelopes, delays) nest into assemblies you save and reuse, and the patch plays on the FM-1, polyphonic with a Voicing module. |
| MC-1 1.2.0 | dspaudio | An original four-part groovebox with a 1990s workflow: three melodic parts and a 16-lane drum part, 128 melodic presets, eight drum kits, song arrangement, an arpeggiator and recorded knob moves. |
| Melodee 1.6.1 | keremimo | Total playing pleasure, far beyond Felucca: recording without quantize, microtonal scales, a Casio CZ-1, a bit-by-bit Dexed, scale modes made for an MPC Sample as its companion. |
| MIDIMON 0.4 | ignis32 | A MIDI monitor for USB, the TRS jack and Bluetooth (as device and host at once): hex or words, filters, stats. |
| MIN-1 0.2.1 | Reytian | A tiny minimalist ensemble after Philip Glass: it starts playing when you switch on, you join whenever you like. |
| Mini-Tone 1.0.5 | Stéphane Schmitz | Felucca with six tracks and new engines: SID, Braids' 48 models, a TB-303 and engines after Elektron's Analog Four, SY Chip and Digitone 2, a ping-pong delay and a new reverb. |
| MNM-1 1.0.1 | Veff | Six monophonic tracks of synth and FX machines, pages of eight knobs, a filter and a tape delay on every track, three LFOs a track, parameter locks and slides. |
| MODELAR 0.3 | Hirakos | A semi-modular drone synth played like a Kaoss Pad: four oscillators modulating each other through eight routings, and keys that move a cursor on an XY pad instead of playing notes: white keys are points, black keys gestures. |
| MONK-1 0.9.1 | Charles Vestal | Twelve singers, from Jerry the monk to Snider the punk, each in its own voice: MonkSynth's formant voices, played with velocity and pressure from the FM-1's own keys. |
| MONO2K 1.7 | Iñigo Hernandez | Six mono machines in the spirit of Elektron's Monomachine: FM, superwaves, wavetables, a SID, a voice and four drum synths, one per track. |
| Monohull 0.2.0 | Mark White | A monosynth: one voice with analogue-modelled oscillators and five filters (ladder, diode ladder, OTA, Sallen-Key, state-variable), unison, chorus, delay and reverb, and 14 presets. |
| MOPE-1 0.3.0 | slothpallas | A sad wavetable synth played by a pixel blob in a rainy room: its eyes are the filter, its mouth the envelope, its tears the delay. |
| MORPHEUS 1.0.0 | Ben Badio | A pattern sequencer after Reason's Matrix: up to four channels of MIDI sequence data out, and a few voices built in to build the patterns with. |
| Mutable Dreams 1.4 | Kid Bunka | A generative instrument after a small modular setup: six interchangeable tracks on eight engines (selected Plaits algorithms, Rings' modal resonator, a Choir of its own), 64 Biomes, Euclidean rhythms with probability, four macros and a granular bus. |
| MYCELIUM 1.0-test | Mandalars | Forest, Psytrance, Goa and Hitech grooves, built on Felucca and SLOOP: original drums and icons and four factory songs. |
| NACHTFAHRT 1.0.0 | Cranky Man | Generative 1970s Berlin School: two sequencers drift against each other over a drone, in eight endless pieces. |
| Nauclerus 0.25.0 | Mr. Roboto | Hortator's eight-track groovebox taken further: ORB Remix with 256 pattern mappings, the TB-3PO acid melody generator with 22 scales, more acid waveshaping, four bipolar LFOs and Grids rhythms copied into editable steps. |
| Niagara Drift 0.2.1 | evanyerburgh | A drone synth: two drifting virtual-analog drones, each with its own part, swells, LFOs, effects and a sequencer. |
| No Man Sky FM 0.9 | Hericdk | A space adventure while you make music, built on SLOOP 2.7.1: fly between planets with two knobs, land, mine, fight sentinels and warp between stars, every SLOOP screen floating over the game. |
| NOIZ DEMONS 666 | SPIKE the Percussionist | Felucca with randomization as a ritual: every new sound summons one of 30 demons of the Ars Goetia, its sigil takes the screen and its rank decides how wild the sound gets. |
| OberVave 3.3.2 | zvenson | An 8-voice analog-style poly in the spirit of the classic American polys of 1979-84: two oscillators a voice, sync, cross-mod, a 12 / 24 dB filter with a SEM-style morph, an arpeggiator with hold, chorus, ping-pong delay and a plate reverb. |
| OPN-1 2.0.0 | putchdev | The Sega Genesis / Mega Drive's Yamaha YM2612: six channels of 4-operator FM. |
| ORBIT 1.0.1B | dspaudio | A four-track groovebox based on SLOOP: three synth parts and a drum machine, an event tape to rearrange them, OP-1-inspired screens. |
| Penumbra 1.1 | Lunar Eclipse Forge | A cinematic space drone you travel through, not one that plays itself. |
| PERF-1 0.16.1 | deamonSLINKY | A generative groovebox you perform on: ten genres of self-playing pieces, an auto-DJ with breakdowns, builds and drops, Euclidean drums, an acid line that answers itself, beat FX and DX7-style FM voices from your own .syx. |
| PIGEON 0.5.0-beta.1 | The Shrimp Blimp | An old-school hip-hop and house sampler after the SP-404 and the PO-33: two song samples and a 16-pad kit, up to 32 chops a song, a 64-step sequencer, patterns and a song arrangement. |
| Polly 0.6 | charlesvestal | A pocket arranger after the Yamaha QY70: pick a style, play a chord and a band of eight follows, with General MIDI sounds. |
| PT/FM 0.26 | hitosu | A ProTracker-style pocket studio: DX7 FM, JUNO-106, TB-303, chip, sampler and FUSION instruments side by side, 16 voices on both cores, a loop station, a two-deck DJ mode, punch-in effects and over 500 built-in instruments. |
| PULHRA 1.5.1 | 646timur-cell | A minimal Elektron-style groovebox: four tracks, patterns in banks A to E, parameter locks, trig conditions, chains, an arpeggiator per track and per-pattern kits on the MONOFM sound core. |
| PurpleMonkey 0.11 | Quixotic7 | A firmware for kids. |
| FM1 Quest 42 | hericdk | A live RPG adventure inside the synth. |
| Rainbow Mode 1.1.5-rb | joshbartlettband-web | A music toy for little hands (a Felucca fork). |
| Ravel 1.12.0 | De-Pattern | An eight-track groovebox for sound design: thirteen synth engines, struck percussion and 33 drum machines after the Machinedrum, on an influence grid where any track can trigger, excite or modulate any other. |
| RUPTURE 1.67 | Joppe Sikken (SikkenWorks) | A monophonic bass synth on Cycle Exchange Synthesis: two sub-oscillators, a ladder filter, Channel EQ, eight effects from MOSFET drive to octave fuzz, a step sequencer up to 128 steps and an arpeggiator. |
| S1Vave 1.12 | Andrew GG | An 8-voice virtual analog tweak synth: authentic 4-pole resonant filter, dual sub-oscillator, ADSR envelopes, 64-step sequencer, and hands-on live performance controls. |
| Scintilla 0.2.0 | Joakim Eriksson | The 1981 Elka Synthex on the FM-1: all 80 factory sounds, Paul Wiffen's laser harp among them, checked sample by sample against the original. |
| Shine On 3.0.1 | zvenson | A string ensemble in the spirit of the late-70s machines, grown out of OberVave: divide-down keyers with 16', 8' and 4' footages, register filters, a three-tap BBD ensemble and a phaser, on two tracks with the sequencer. |
| FM-1 SID 0.3 | joakimeriksson | A SID chip on the FM-1, its own firmware on fm1-dock (fm1-dock's USB, installer and rescue; the sine as the fallback): a C64 tune player (reSID 0.16 and a 6510 running the tune's own code, PSID and RSID) starting with GoatTracker 2's example songs, Dojo first; a GoatTracker editor; and a synth: the keys play 12 instruments, KNOB1-4 are cutoff, resonance, attack, release; FX opens chorus, delay and reverb. |
| SID-1 1.0.0 | putchdev | The Commodore 64's SID chip, twice for six voices. |
| SiDJ 1.3.0 | thomasj (tubesockor) | Plays C64 SID music from HVSC on an emulated 6581 or 8580 and lets you remix every voice live: transpose, mute, solo, swap waveforms, bend envelopes and filter, add LFOs, ride the tempo. |
| SIDOU 1.6.0 | Denis Sablić | Turns the FM-1 into a C64 SID machine: two SIDs (6581 and 8580) with the chip's character dialled in, a GoatTracker 2 compatible tracker and step sequencer, and a live instrument to play over a song. |
| Sill 1.0-8b94d39 | delirioux | Generative 90s eurodance, pickled in 1995: a song in intro, verse, pre-chorus, chorus and break, with lift, pump, vox and energy on the knobs, the hook, the groove and a key change up for the last chorus. |
| Skiff 2.2 | illuminus5 | A six-track groovebox built on Felucca 1.1.5: fourteen synth and drum engines, a 64-step sequencer with chords, ratchets and locks, songs and a performance layer. |
| SLOOP 2.8.5 | isod89 | A live groovebox: four looping tracks. |
| SLOOP ALG ALG05-TEST | shaw-core | A SLOOP test build with extra FM algorithms. |
| SLOOP DX7 Banks 2.5-b28-test | majnikool | SLOOP with up to twelve DX7 voice banks and presets grouped by kind. |
| SLOOP Floyd FM 2.4 | renebohne | SLOOP with a four-operator FM engine after Floyd Steinberg's 4-OP idea: an envelope per operator and a live oscilloscope that draws the envelopes as you play. |
| sloopDX 4.0.1 | zvenson | SLOOP's live workflow with a six-operator DX7 engine from Dexed: 32 algorithms, your own .syx banks, every voice edited on the FM-1, and FM drums. |
| Smileyface 1.0.6 | pbarilla | You're making acid, baby! Smash that LFO button until you hear something you like, and then twist those knobs! Now with 100% more FX! A truly trippy experience! Built on Chipbox. |
| SPAMPY 949 | Spampy-Droid | SLOOP in synthwave colours: 16 sound engines (OberVave's among them), 170 synth presets, 44 drum kits, scenes, effects, loudness per sound – and two arcade games built in, Neon Pang and Neon Bubbles. |
| SPELLBOX 0.3 | Philippe Jaccoud | SPELLBOX turns the FM-1 into a talking spelling toy after the 1978 Speak & Spell: an 8-character fluorescent display, a 10-pole LPC voice at 8 kHz through an 8-bit DAC, and the SPELL, LETTER, SAY IT, SECRET CODE and MYSTERY WORD games over four levels, with the keys as an A-to-Z keyboard. |
| TastyWaves 1.0.1 | marksweiss | A 12-voice wavetable synth: two oscillators a voice, a resonant filter, two envelopes, an LFO, four effects, an arpeggiator and two step sequencers for chords and counterpoint; load your own Serum, WaveEdit, Ableton or Surge tables. |
| Tessera 3.2.2 | Theo Dainis (Rastapopolix) | Generative music on four tracks: each plays its own steps, an arpeggio or one of 13 generators (Turing, Euclid, Markov, Constellation, Chord and more), and the tracks evolve, follow and modulate each other. |
| Tonitor 2026.11.03 | Nuno Zimas | Six tracks for live ambient and experimental music: three synth engines, patches generated by algorithm, free-length loops with up to ten overdubs each, a granulator, filters and a lush reverb. |
| TRIBE 0.3-beta | apiel | A ten-track groovebox built on X0X where any engine plays on any track: kicks, 909 and 808 voices, a 303, sixteen clips a track and scatter effects. |
| Tuna 1.0-73bd65f | delirioux | Generative music built on Felucca: composer profiles write the music as it plays, you steer them. |
| Unholy Union 0.2.3 | actuallysparky | Generative ambient and drone: Immaculate Permutation rolls an arrangement in one key, a pad, a sequence and a chord arpeggio under a fourth voice for your hands. |
| Vector37 0.3.2 | genkigenki | An orbiting overtone synth: four corners of two overtone generators each, a sun on a path and a moon around it decide how much of each you hear; the knobs shape the selected planet. |
| VESPER 2.0.1 | Fat Cat Studios | An ambient worship synth. |
| Wanderer 0.9.0-wip | Nicholas James / Low Vision Music | Wanderer 1.4: author-tested synth for low-vision musicians. |
| WaveLoop FM-1 1.0.5.2-midi23 | ELI7VH | A Felucca mod: standalone Arturia MiniLab 3 control, fine track mixing, a DJ filter, momentary effects and MIDI feedback. |
| winampFM Synth 0.12 | hericdk | Winamp 2.x on the FM-1, built on SLOOP: your sounds as a playlist, four tracks recorded as loops, effects on sliders and a visualizer of lines. |
| X0X 1.2.0 | charlesvestal | A groovebox: 909, 808, two 303s and a break player. |
| X0X-RMX 1.1.0 | Mr-Roboto (Oliver) | X0X remixed after The Orb: banks and patterns reordered live per voice, Grids MAP and EUCLID drum generation, an extended TB-3PO with 22 scales and a morphing 303 waveform. |
| XMOD 1.2.0 | Kot Morderca | A MOD / XM tracker, sampler and groovebox: play, write and save FastTracker 2 and ProTracker songs on the FM-1, up to 32 channels, with a ProTracker mode for MODs and a song manager in the browser for moving songs to and from the computer. |
| ZEN-1 1.2 | aceyprime | Ambient as a living window: cherry petals on a river, koi in a pond, fireflies under a real moon, and every movement a note. |
| zp12 2.5 | zvenson | A 12-bit sampling drum machine after the E-mu SP-1200: 32 pads at 26 kHz with no interpolation, filtered channels on the knobs, loops and songs. |
MIDI in works through the emulated MIDI IN jack, so each firmware reads MIDI with its own driver: Web MIDI on the page (Chrome, Edge, Firefox), any MIDI input natively. M-VAVE's firmware listens on channel 2 in the emulator (not yet checked on a real FM-1); Felucca plays its parts on channels 1–4.
The SMK-37
M-VAVE's SMK-37 (Pro / Elite, the MKE-P37 and the Donner Starrykey 37 Play share its hardware) is a 37-key keyboard with 16 RGB pads, 8 knobs, 4 faders, pitch and mod wheels and a screen, around the FM-1's chip: same flash layout, audio and update path, only the panel is wired differently. genkigenki's fm1-to-smk37 kit maps that wiring and ports FM-1 firmwares to it. The emulator models the SMK-37's panel from that map, and a package's identity says which board it runs on.
Play it: joakimeriksson.github.io/fm1-emu/smk37.
The firmwares come from genkigenki's install page
(node tools/smk37_catalog.mjs refreshes the list). M-VAVE's own SMK-37 firmware runs as the
MIDI controller it is (screen, buttons, pads, keys; it names the chord you hold): with PATCH on, the
keys play its DX7 synth from this emulator's own bank (the factory patches are not in the package; the
notes also go to USB / Bluetooth MIDI), slower than real time in the browser so far.
| Firmware (opens it on the page) | By | What it is |
|---|---|---|
| M-VAVE stock firmware 016 | M-VAVE | The firmware the SMK-37 Pro ships with: a MIDI controller. Bring your own SMK-37 Pro_016.fwsc. |
| Makkuro37 0.1 | genkigenki | A microtonal drone synth: eight voices as eight soot creatures, 96 presets. |
| Vector37 0.2.2 | genkigenki | An orbiting overtone synth: a moon circles a sun along a path, and where it is decides how much of each of four sounds you hear. |
| Snoop37 2.6.5 | isod89 (port: genkigenki) | SLOOP, the four-track looper groovebox, adapted for the SMK-37. |
| X0X 0.2 | Charles Vestal (port: genkigenki) | A 909, an 808, two 303s with a line generator and a breakbeat player, all at once. |
| FoMni 0.2 | Charles Vestal (port: genkigenki) | An Omnichord-style chord harp: the 16 pads become the strum plate, the keybed holds the chords. |
| MAKU 0.1 | okumurari2 (port: genkigenki) | An always-on ambience machine: power it on and a new, random, in-key world is already playing. |
| Rainbow mode 0.2 | joshbartlettband-web (port: genkigenki) | A music toy for kids: colour-coded notes, 40 friends who sing along, no menus. |
| GHOULBOX 2.1 | Jason Persinger (port: genkigenki) | Dungeon-synth firmware: dark ambient, medieval and fantasy sounds, with drones, a hurdy-gurdy crank and two sounds at once. |
| ChoralRoot 0.21 | Quixotic7 (port: genkigenki) | A chord instrument in the manner of the Orchid: one hand plays roots, the other picks the chord. |
| ORBIT 0.7.0 | dspaudio (port: genkigenki) | A four-track groovebox with OP-1-inspired screens: three synth parts, a drum machine, an event tape and a mixer. |
| AMB-1 1.1 | Charles Vestal (port: genkigenki) | A generative ambient machine inspired by Music for Airports: loops of different lengths drift past each other and never repeat. |
| Polly 0.4.1 | Charles Vestal (port: genkigenki) | A pocket arranger inspired by the Yamaha QY70: a band of eight General MIDI instruments follows the chords you play. |
| winampFM 0.1 | Hericdk (port: genkigenki) | A synth groovebox in the look of Winamp 2.x, built on SLOOP: player, playlist, effect sliders and a visualizer. |
| OberVave 1.2.1 | zvenson | One 8-voice analog-style polysynth in the spirit of the American poly synths of 1979–84, with chorus, delay and a plate reverb. |
On your computer
Download fm1-live for macOS (Apple silicon) or Linux (ARM64, x86-64) from
the releases, and play a firmware
package: ./fm1-live --fwsc felucca.fwsc. Or build it from a checkout:
cargo run --release -p fm1-live -- --fw list # the firmwares
node tools/fetch_firmwares.mjs # download them into reference/firmwares
cargo run --release -p fm1-live -- --fw felucca # a window with the synth, audio out
cargo run --release -p fm1-live -- --fwsc FM-1.fwsc # M-VAVE's own, from its package
fm1-live compiles the firmware to native code on Macs (Apple silicon and Intel), on Linux (ARM64
and x86-64) and on Windows (x86-64), and runs the real 240 MHz clock with it; elsewhere it interprets
(--mhz lowers the clock if that can't keep up). It plays every MIDI input of the computer (--midi NAME, --midi none,
--midi-ch N) and loads a DX7 bank into M-VAVE's firmware with --syx bank.syx.
fm1-emu is the batch runner for tests and debugging (WAV and screen output, breakpoints,
memory dumps).
Both take --flaky-core1 RATE [--seed N]: the second core misreads RAM now and then, as on
some units, to test a firmware's fallback to one core (docs/stock-firmware.md).
fm1-live --flash FILE keeps the flash chip (saved presets, samples) in FILE between runs: read
at the start if it is there, written back at the end. FM1_FLASH_CUT=N cuts the power half way
through the Nth erase or page program, to see what a firmware makes of a half-written save.
fm1-live --usb plugs in a USB cable: the FM-1's USB controller answers (without it, it stays
silent, as on a unit with no cable), a host enumerates it, and a USB-MIDI firmware shows up on the
computer (macOS and Linux; on Windows the bus runs, but no MIDI device appears) as a MIDI device
"<its product name> (emu)" that any program can play or talk to, Felucca's fm1_install.py
included. It goes away when the firmware drops off USB. The controller raises no interrupt yet:
firmwares that poll it (Felucca's family) enumerate, M-VAVE's own (interrupt-driven) does not. Headless, --shot with
FM1_USB_SEND='MS:HEX;…' sends MIDI over USB at those times and prints what comes back
(FM1_USB_TRACE: the bus's transactions; FM1_USB_SIE_NS: the controller's register access time,
an estimate, 1 µs by default).
USB audio: with FM1_USB_WAV=FILE (--bench or --shot) the host also records the firmware's
USB audio input as a computer's recording program would: it chooses the audio streaming
interface's setting that has the isochronous endpoint, asks for FM1_USB_RATE (44100 by
default) if the endpoint can be set to it and the format offers it (else the device's own rate),
takes one packet a millisecond and writes the samples to FILE (16-bit, interleaved as the device's
channels come, no header), printing how many packets came empty (nothing queued: an underrun).
Realistic mode: by default the emulator is generous where an FM-1 is not, so firmwares boot and
play as they always have here. FM1_STRICT=1 (fm1-live) runs it as an FM-1 is: a misaligned 16- or
32-bit RAM access faults, each instruction takes its measured cycles (both cores, the flash
cache's misses, the HW DSP / EQ / SRC units' jobs), and the LCD's transfers take their time at
the SPI clock (a 240 x 240 frame ~77 ms at 12 MHz), so a firmware whose main loop waits for whole
frames gets as little done in between as on the device; it interprets, without the JIT, so it
is slower. FM1_LCD_TIMED=1 (fm1-live, fm1-emu) times the LCD alone; FM1_LCD_INSTANT=1 keeps it
instant under FM1_STRICT. A firmware that boots under it boots later (its first frames take
their time). fm1-live --shot then reports the LCD's share of the run.
The page builds with web/build.sh (Rust to WebAssembly; needs the wasm32-unknown-unknown
target), the whole site with tools/build_site.sh.
In your DAW: AU and VST3
The emulator also comes as an instrument plugin, so a firmware plays in a DAW like any other synth:
| Format | Loads in |
|---|---|
| AU | Logic Pro, GarageBand, MainStage, and most other Mac DAWs |
| VST3 | Ableton Live, Cubase, FL Studio, Reaper, Bitwig, Studio One, Cakewalk… |
| CLAP | Bitwig, Reaper, FL Studio, Studio One… |
What it does:
- The firmware: Load firmware / save… in the plugin’s window picks a
.fwscpackage: any community firmware (the table above links each author's) or M-VAVE's own. An SMK-37 package gets the SMK-37's panel. - Playing it: MIDI from the DAW plays it, as through the FM-1's MIDI IN. A MIDI channel setting moves all notes to one channel; M-VAVE's firmware listens on 2. The panel is the page's, played with the mouse: keys, buttons, knobs, and on the SMK-37 the pads, faders and wheels.
- Automation: Master (the MASTER pot) is a parameter the DAW can automate.
- CPU clock: the emulated clock, 240 MHz as on the chip by default. 120 or 160 let a heavy firmware keep up on a slower computer; 320 or 400 give a firmware that runs out of time more, at the cost of more of the computer's CPU.
- Share setups with the browser or another DAW. “Load firmware / save…” opens a
.fwscpackage or.fm1savesetup. “Export save…” writes the firmware and its latest saved patches and settings to one portable file. Edits in RAM need the firmware’s own Save command first. - The project keeps the firmware and its patches. The package and every flash sector the firmware has written are saved with the song, so it reopens with the same sounds.
- Timing: the emulator runs a little ahead of the DAW and reports that delay as the plugin's latency, so the DAW compensates and notes land where they were placed. The status bar shows how much faster than real time the firmware could run on this computer; most run at 3–6x, the heaviest at about 1.5x.
Download it from the releases:
a zip for Macs with Apple silicon (M1 or later; AU, VST3 and CLAP) and one for Windows (x86-64;
VST3 and CLAP). Each has an INSTALL.txt that says where the files go. Until a release is signed
with an Apple Developer ID, macOS blocks it until you allow it, with one Terminal command that
INSTALL.txt gives; the Windows build is unsigned too, and Windows hosts load it as it is.
Build and install it yourself (macOS, Apple silicon). You need Rust, CMake and Ninja
(brew install cmake ninja), then:
tools/build_plugin.sh
This builds the plugin and installs FM-1.component, FM-1.vst3 and FM-1.clap in
~/Library/Audio/Plug-Ins. It then runs Apple's AU validator on them.
Build and install it yourself (Windows, x86-64). You need Rust (MSVC), Visual Studio Build Tools with the C++ workload, CMake and git, then:
tools\build_plugin.ps1
This builds FM-1.vst3 and FM-1.clap and installs them in %LOCALAPPDATA%\Programs\Common
(VST3 and CLAP). The two go together: the VST3 loads the CLAP from the CLAP folder.
crates/fm1-plugin has the details, and where to put them for a
DAW that only scans C:\Program Files\Common Files.
In GarageBand:
- Settings → Audio/MIDI: tick Enable Audio Units, then quit and reopen GarageBand.
- Make a Software Instrument track and open its Smart Controls (B).
- Click the Instrument slot and choose AU Instruments → fm1-emu → FM-1.
- Click the slot to open its window, then Load firmware / save….
- Play it with ⌘K (Musical Typing) or a MIDI keyboard.
In Logic: a Software Instrument track's instrument slot, AU Instruments → fm1-emu → FM-1.
In VST3 or CLAP hosts: add FM-1 (by fm1-emu) as an instrument on a track.
On Windows, in Waveform Free (REAPER works the same way; both find the plugin in
Common Files and in the per-user folders, where the release's INSTALL.txt and
tools\build_plugin.ps1 put it):
- Track → Create New Track, then the + at the right end of the track: Plugins → fm1-emu → FM-1.
- Click the FM-1 box on the track to open its window, then Load firmware / save… and pick a
.fwscpackage. - Play it from a MIDI keyboard, or click the panel's keys. A MIDI clip on the track plays it too.
The clip above is three tracks at 100 BPM, each with its own FM-1: a pad on Scintilla (an Elka Synthex; preset 29, Filtered strings), then a bass and a lead joining on Felucca (Analog Acid and FM6 Tine EP). Each window's status bar shows the headroom: on a laptop each instance could run at about 3x real time with all three playing, 4.5x idle. FM-1 Dock, which runs both of the chip's cores, is the heaviest: under real time on that laptop even at 120 MHz, so a synth it carries as a module is lighter as its own firmware, as Scintilla is here.
How it's built: it's one plugin written in Rust as a CLAP with nih-plug. clap-wrapper makes the AU and VST3 of it, and the plugin stays MIT. All its parts are MIT, ISC or Apache-2.0, including Apple's AudioUnitSDK and Steinberg's VST3 SDK, which is MIT since 3.8.
So far it has passed:
- Apple's AU validator (
auval); - Steinberg's VST3 validator (47 of 47 tests);
- GarageBand, as an AU;
- Steinberg's VST3 test host.
On Windows the VST3 passes Steinberg's validator too (47 of 47) and plays in REAPER and Waveform Free. Logic, Ableton and the Linux build haven't been tried yet. More in crates/fm1-plugin.
How it works
The FM-1 is built on a JieLi AC791N: two cores of JieLi's own 32-bit pi32v2 CPU, with no
public instruction set manual. The instruction set here was recovered from the firmwares
themselves (isa/, docs/isa-notes.md) and checked against test programs built with JieLi's
toolchain. On top of the CPU sit models of the chip's timers, interrupts, flash, the
240×240 screen, the key matrix and encoders, the knobs, the audio output and the MIDI UART.
Hot code is compiled, to AArch64 natively and to WebAssembly in the browser.
How it was built and checked, step by step, is told in a technical report:
Emulating a Synthesizer Before It Arrives
(PDF, 12 pages), with a section on the real FM-1: what releasing FM-1 SID before it ran on one cost
its first users, the rounds that made it work there, and what fm1-dock's probes measured on the chip.
crates/:fm1-isa(decoder tables),fm1-core(CPU and JITs),fm1-soc(the chip and the board),fm1-live(the native synth),fm1-emu(batch runner),fm1-web(the wasm build),fm1-gdbstubweb/: the page;web/fwsc.jsunpacks the update packagesdocs/: the hardware notes (recon.md), the instruction set (isa-notes.md), M-VAVE's firmware (stock-firmware.md);PLAN.mdis the work logtools/,probes/: ISA extraction, benchmarks, differential test programsfm1-sid/: the SID study and player firmware, joakimeriksson/fm1-sid as a submodule (its own README;git submodule update --initafter a plain clone)
Licences
The emulator is MIT (LICENSE). The firmwares are their authors' and are not part of this
repository; the page fetches them from the authors' sites. fm1-sid/ (its own repository) has
files under other licences, among them its player firmware, GPL-3.0 since it is built on
Felucca's code: its LICENSING.md lists them. The plugin (crates/fm1-plugin) is MIT too; the libraries and SDKs it
builds with are permissive: MIT, ISC, Apache-2.0, BSD, Zlib, BSL-1.0, Unicode-3.0 and Unlicense, egui's built-in
fonts OFL-1.1 and the Ubuntu font licence, and Steinberg's VST3 SDK (3.8, through clap-wrapper) MIT. nih-plug is built
without its VST3 bindings, which are GPL. What the emulator emulates it learned from the chips' behaviour, the
community's reverse engineering and the firmwares' own sources as references; no GPL code is in this repository
(the test probe probes/x0x/d909.c builds X0X's GPL drum against it from a checkout outside it).
Credits
Built on the community's reverse engineering of the FM-1: AL-255/FM-1-RE, ip2k/lunar-modulator, kagaimiq's jielie, the hardware layer of hugelton/Felucca and awesome-fm-1. Thanks to every firmware author for publishing their work.

