charlesvestal/fm1-x0x

X0X: groovebox firmware for the M-VAVE FM-1 (909, 808, two 303s with TB-3PO, breakbeat generator, song mode). A fork of Felucca.

C

77

92 commits

updated Oct 7, 2026

See the code

README

X0X for the M-VAVE FM-1

X0X turns the M-VAVE FM-1 into a groovebox: a 909, an 808, two 303s with an acid line generator, and a breakbeat player, all playing at once. Each part can play its own pattern, you can string patterns into a song, and you can record knob moves. Everything runs in stereo, with a shared reverb and tape delay and a punchy master compressor. Over USB, the FM-1 is both a MIDI device and an audio input, with no driver needed.

The factory sound is set up for big beat, so it should make noise the moment you press PLAY.

X0X running on the FM-1 (watch on YouTube)

X0X is in beta. It's solid for everyday playing, but a very busy pattern can push the FM-1 to its limit. When that happens, X0X trades a little sound quality to keep playing rather than drop out. Installing it is at your own risk, though it's hard to get stuck: the web installer can put M-VAVE's firmware back, an FM-1 that keeps crashing starts in a safe mode, and the manual's Troubleshooting section covers the rest.

What's inside

PartWhat it isBased on
90911 voices: modelled kick, snare, toms, rim and clap, with sampled hats and cymbals9W9 (samples from ER-99)
80811 tracks, including the 808's tom/conga, rim/claves and clap/maracas switches8W8
303 A and BOpen303 with Devilfish-style ranges, each with a TB-3PO line generatorschwung-303, schwung-tb3po
BreakA loop cut into eight slices and rearranged as it playsBB Gen

Each part has its own step length (up to 32 steps) and rate, so parts can drift against each other. Pattern changes wait for the end of the bar, and patterns can be chained.

X0X is a fork of Felucca by Leo Kuroshita (Hügelton Instruments). It keeps Felucca's foundations (the hardware layer, USB, the update loader, the web installer and the storage) and replaces the instrument on top.

Your own breaks

X0X doesn't ship with any recorded breaks, only two loops played by its own 909. You can load your own into the FM-1's three sample slots, which hold about nine one-bar loops in total:

tools/upload_breaks.py --bars amen.wav think.wav ...   # take one bar of each and upload them
tools/upload_breaks.py --dry-run OUTDIR ...            # see what fits, without the FM-1

Recorded breaks belong to whoever made them and aren't covered by this project's licence.

Building and testing

BUILDING.md explains the toolchain. In short:

tests/run_tests.sh      # the maths, the sequencer, every engine against its original, the app in a simulator
./build.sh              # build/x0x.fwsc

host/x0x_host runs the whole app on a computer from a script (tests/scenarios/*.x0x). Button presses, keys, knob turns and MIDI go in; audio and screenshots come out. That's how most of X0X is tested before it reaches the FM-1.

Licence and credits

X0X is GPL-3.0-only, like Felucca, 9W9, 8W8 and schwung-tb3po. Open303 (by Robin Schmidt) is MIT. BB Gen is ported from mestela's schwung-breakbeat with the author's permission. The 909's hi-hat, ride and crash samples come from ER-99 (Matthew Cieplak, GPL-3.0). The fonts are Barlow Semi Condensed and Terminus (SIL OFL 1.1).

Felucca's own assets that aren't under its GPL (the icon set, the panel photo and the Hügelton drum pack) aren't part of this fork.

M-VAVE and FM-1 are trademarks of their owners. TR-808, TR-909 and TB-303 are Roland trademarks, used here only to describe what the parts are modelled on. X0X isn't affiliated with or endorsed by M-VAVE, Roland or Hügelton Instruments.

charlesvestal/fm1-x0x

X0X: groovebox firmware for the M-VAVE FM-1 (909, 808, two 303s with TB-3PO, breakbeat generator, song mode). A fork of Felucca.

C

77

92 commits

updated Oct 7, 2026

See the code

README

X0X for the M-VAVE FM-1

X0X turns the M-VAVE FM-1 into a groovebox: a 909, an 808, two 303s with an acid line generator, and a breakbeat player, all playing at once. Each part can play its own pattern, you can string patterns into a song, and you can record knob moves. Everything runs in stereo, with a shared reverb and tape delay and a punchy master compressor. Over USB, the FM-1 is both a MIDI device and an audio input, with no driver needed.

The factory sound is set up for big beat, so it should make noise the moment you press PLAY.

X0X running on the FM-1 (watch on YouTube)

X0X is in beta. It's solid for everyday playing, but a very busy pattern can push the FM-1 to its limit. When that happens, X0X trades a little sound quality to keep playing rather than drop out. Installing it is at your own risk, though it's hard to get stuck: the web installer can put M-VAVE's firmware back, an FM-1 that keeps crashing starts in a safe mode, and the manual's Troubleshooting section covers the rest.

What's inside

PartWhat it isBased on
90911 voices: modelled kick, snare, toms, rim and clap, with sampled hats and cymbals9W9 (samples from ER-99)
80811 tracks, including the 808's tom/conga, rim/claves and clap/maracas switches8W8
303 A and BOpen303 with Devilfish-style ranges, each with a TB-3PO line generatorschwung-303, schwung-tb3po
BreakA loop cut into eight slices and rearranged as it playsBB Gen

Each part has its own step length (up to 32 steps) and rate, so parts can drift against each other. Pattern changes wait for the end of the bar, and patterns can be chained.

X0X is a fork of Felucca by Leo Kuroshita (Hügelton Instruments). It keeps Felucca's foundations (the hardware layer, USB, the update loader, the web installer and the storage) and replaces the instrument on top.

Your own breaks

X0X doesn't ship with any recorded breaks, only two loops played by its own 909. You can load your own into the FM-1's three sample slots, which hold about nine one-bar loops in total:

tools/upload_breaks.py --bars amen.wav think.wav ...   # take one bar of each and upload them
tools/upload_breaks.py --dry-run OUTDIR ...            # see what fits, without the FM-1

Recorded breaks belong to whoever made them and aren't covered by this project's licence.

Building and testing

BUILDING.md explains the toolchain. In short:

tests/run_tests.sh      # the maths, the sequencer, every engine against its original, the app in a simulator
./build.sh              # build/x0x.fwsc

host/x0x_host runs the whole app on a computer from a script (tests/scenarios/*.x0x). Button presses, keys, knob turns and MIDI go in; audio and screenshots come out. That's how most of X0X is tested before it reaches the FM-1.

Licence and credits

X0X is GPL-3.0-only, like Felucca, 9W9, 8W8 and schwung-tb3po. Open303 (by Robin Schmidt) is MIT. BB Gen is ported from mestela's schwung-breakbeat with the author's permission. The 909's hi-hat, ride and crash samples come from ER-99 (Matthew Cieplak, GPL-3.0). The fonts are Barlow Semi Condensed and Terminus (SIL OFL 1.1).

Felucca's own assets that aren't under its GPL (the icon set, the panel photo and the Hügelton drum pack) aren't part of this fork.

M-VAVE and FM-1 are trademarks of their owners. TR-808, TR-909 and TB-303 are Roland trademarks, used here only to describe what the parts are modelled on. X0X isn't affiliated with or endorsed by M-VAVE, Roland or Hügelton Instruments.