Firmware

fm1-doom

Rising68/100

Doom as firmware for the M-VAVE FM-1 pocket synth, and the browser installer at doom.deadlockinteractive.com

fm1-doom is custom firmware for the M-VAVE FM-1, by @seanohollaren. Open source under GPL-3.0, 2 stars on GitHub.

forM-VAVE FM-1·by@seanohollaren

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

Downloads
0
Stars
2
Forks
0
Commits
105
Last commit
Get the source

No release files yet. Build from source.

GPL-3.0· seanohollaren/fm1-doom·downloads come from the creator’s GitHub releases

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

Doom for the M-VAVE FM-1

The first level of Doom, running as firmware on an M-VAVE FM-1 pocket synthesizer: its own 240×240 screen, its own keys and knobs, its own speaker. The chip has 1 MB of flash and 512 KB of RAM, so this is one level (E1M1) with the title screen, sound and music, on the engine of rp2040-doom and the hardware layer and update loader of Felucca.

Experimental. It has been installed and played on one FM-1. It replaces the synth firmware (which can be put back). Use it at your own risk.

Install it from the browser: https://doom.deadlockinteractive.com (Chrome or Edge, USB).

What is here

PathWhat
firmware/The device firmware: doom_dev.c (recovery-first start-up, USB update, screen, sound, input on Felucca's HAL), the build and packaging scripts, host tests.
engine/The game engine's source: a patch series on upstream rp2040-doom, and a script that fetches and applies it.
web/The install logic as plain JavaScript modules (cut a WAD, convert it, pack it, the update protocol), a single-file installer page, and the browser build of the game used for development.
site/The public installer site (Vite + React) and its AWS set-up (CDK). See site/README.md.
tools/Mac-side tools: cutting the game data, and boot-mode backup / restore of the FM-1's flash.
NOTES.mdThe running log: every measurement, decision, build and device result, in order. Start here for detail.

No game data is in this repository, and none may be added: no WAD, nothing cut or converted from one. The site downloads id Software's shareware DOOM1.WAD into the visitor's browser (or takes their own copy) and prepares it there.

Building

The firmware builds with JieLi's pi32v2 toolchain and AC79 SDK, set up as Felucca's BUILDING.md describes (on macOS: in a linux/amd64 Docker container). It also needs, cloned next to this file:

CloneVersion
Feluccatag v1.1.5 (276f72a), https://github.com/hugelton/Felucca
rp2040-doomsh engine/get.sh (upstream 29a453c plus engine/rp2040-doom/*.patch)
pico-sdktag 2.3.1, https://github.com/raspberrypi/pico-sdk (headers only)
pico-extrastag sdk-2.3.0, https://github.com/raspberrypi/pico-extras (headers only)
sh firmware/build.sh                               # the firmware image
python3 firmware/pack.py data/e1m1_6h.whx          # installable packages (needs game data you cut yourself)
sh firmware/test.sh                                # host tests of the update and data paths

The game data file comes from your own doom1.wad: tools/cut_wad.py wads/doom1.wad data/e1m1_6h.wad 6 --half-sfx, then rp2040-doom's whd_gen. NOTES.md has the exact commands, the environment variables, and what each step was checked against. The site and the browser tools are described in site/README.md.

Safety

The firmware is built to stay recoverable: it never writes the boot code, it accepts a new firmware over USB in every state (hold HOME while switching on for a screen that only waits for one), and a start that fails drops back to that screen by itself. tools/fm1boot.py and tools/fm1restore.py can read and restore the whole flash through the chip's built-in USB boot mode. A firmware that fails before any of that runs can only be recovered with extra hardware (see NOTES.md, "Recovery").

Licence

Copyright (C) 2026 Sean O'Hollaren. This project is free software under the GNU General Public License, version 3 only (LICENSE). It is built from, and its firmware contains, other people's work:

  • Doom source © id Software, via Chocolate Doom © Simon Howard and rp2040-doom © Graham Sanderson: GPL-2.0-or-later (engine), BSD-3-Clause (rp2040-doom's additions).
  • Felucca © 2026 Leo Kuroshita (@kurogedelic), Hügelton Instruments: GPL-3.0-only. Its hardware layer, USB and update code and update loader are used unmodified; web/vendor/felucca/ holds unmodified copies of its package and update-protocol scripts.
  • Three files of the JieLi AC79 SDK inside every firmware package: Apache-2.0.
  • adpcm-xq © David Bryant, in the data converter: BSD-3-Clause.

The licence texts that travel with the firmware and the converter are in site/frontend/public/licenses/.

DOOM is a trademark of id Software. M-VAVE and FM-1 are trademarks of their owners. This project is not affiliated with or endorsed by id Software, ZeniMax, M-VAVE or Hügelton Instruments.