Firmware Hero
0

FM-1 Doom

Watch it: Can it run Doom?

  • Custom firmware
  • Alpha
  • Medium brick risk
  • Reversible

Source code

This project hasn't been claimed by its maintainer yet, so its details come from the community. Is it yours? Claim it

Before you start

How hard is it?
EasyCopy a file or use a web page. No extra software.
What you need
  • A USB or MIDI cable
  • Comfort with the command line
  • A computer
Can it break my device?
Small chance of trouble, with a way to recover.
Can I undo it?
Yes. You can go back to the official software.
Get itOpens github.com

Did it work for you?

Did FM-1 Doom work on your M-VAVE FM-1?

No reports yet.

One-tap reports from owners. Bricked reports are checked before they count.

Compatibility

Devices: M-VAVE FM-1.

No compatibility information yet.

Getting started

From the project's README ("FM-1 Doom"):

Doom on the M-VAVE FM-1 (JieLi AC791N, 1 MiB flash, ~430 KB RAM, 240×240 LCD). A side project of sloopDX.

Watch it: Can it run Doom? (YouTube Short) · Try it: web installer (Chrome / Edge, USB)

  • Engine: doomgeneric (Chocolate Doom, GPL-2.0-or-later) in src/, changed for a small WAD (missing switch textures and music are skipped) and a zone in KiB (-kb).
  • Data: one arena of FreeDM (Freedoom project, BSD-3-Clause), MAP12 made a single-player level: tools/mkwad.py freedm.wad MAP12 build/freedm.wad keeps only its textures (rare ones painted with common ones: 17 textures from 25 patches), its flats, the imp, fist / pistol / shotgun and the status bar: 562 KB raw, 276 KB with zlib per lump. The installer writes only the app area (0x4000..0x93000, ~570 KB), which the engine (~280 KB) and the data share.
  • Host build: sh host/build.sh, then build/fm1doom-host : headless, a virtual clock, scripted keys, every 35th frame a PPM.

Status

  1. The engine runs the mini WAD on the host (renders, monsters fight back).
  2. RAM: lumps read in place, no wipe, the screen outside the zone; renderer limits for one small arena (FM1SMALL: 48 visplanes, openings ×28, 128 drawsegs, viewangletox as short); no Doom status bar or HUD font: health, armour, ammo, weapon and messages are the FM-1's own HUD in the strips above and below the picture; the sky is four copies of a 64-column slice. The host runs the level for 100 s in a 150 KB zone. …

Read the full instructions

Risk and recovery

Brick risk
Medium
Reversible
Yes
Requires opening the device
No

From the project's README ("Status"):

  1. The engine runs the mini WAD on the host (renders, monsters fight back).
  2. RAM: lumps read in place, no wipe, the screen outside the zone; renderer limits for one small arena (FM1SMALL: 48 visplanes, openings ×28, 128 drawsegs, viewangletox as short); no Doom status bar or HUD font: health, armour, ammo, weapon and messages are the FM-1's own HUD in the strips above and below the picture; the sky is four copies of a 64-column slice. The host runs the level for 100 s in a 150 KB zone.
  3. The WAD image (raw deflate per lump, PLAYPAL / COLORMAP raw): 239 KB in the app's flash.
  4. The firmware: ./build.sh -> build/fm1doom.fwsc (identity FM-1980): sloopDX's boot guard, USB-MIDI, M-UPGRADE updater and USB rescue (OCT- at power-on), so the web installer can always put sloopDX back; the SDK's trimmed newlib plus firmware/src/fm1libc.c (printf family, a growing heap, no files); the finale, intermission, savegames and the network checksum stubbed (the arena restarts at its exit). Flash 549 of 581 KB, RAM 227 KB + zone 195 KB.
  5. On the device (0.1). 0.3: Freedoom's logo at boot, then the controls.
  6. Sound (0.4): the effects synthesized (src/fm1sfx.c: a sweeping oscillator plus filtered noise per effect, 8 voices at 44.1 kHz in the audio interrupt); no music. host/sfxdemo.c writes them all to a WAV.

Read the full instructions

Credits, license and support

License
GPL-2.0