Join Our Free Newsletter Community

Free, weekly updates about retro gaming news, nostalgic collectibles and in-depth reviews.

Subscribe Retro Dodo cover image
Sebastian Santabarbara profile image Sebastian Santabarbara

DOOM Has Been Ported... To A $30 Multimeter

Doom running on a multimeter, powered by a DJI controller
Credit: Artur Bieniek
🤝
Like our website? Support us as an independent publisher by tipping, joining our paid community or checking out our accessories brand GAMENOOK!

It's been happening for a while now, I know, but I still love seeing DOOM ported to new stuff. A McDonald's menu screen, a pregnancy test, a lawnmower; it never fails to make me smile. Now, thanks to the genius of Artur Bieniek, it's running on a $30 FNIRSI DMC-100 multimeter, or a clamp meter depending on where you are in the world.

A multimeter measures current across a circuit. It isn't designed to bring forth the armies of hell, but it seems like it's a good fit for the task thanks to Artur's work. Thanks to some digging by our friends at Hackaday, we know that Artur managed to get the doomgeneric engine up and running on the Artery AT32F415 chip that is the brains of the multimeter.

The multimeter now plays Episode 1 of Freedoom: Phase 1 with the original E1M1 to E1M9 levels available to work through. There are four save slots, and everything from the title screen and intermissions to the finale works. It's all in colour, and wildly, Artur is controlling the multimeter with the controller from a DJI drone!

To follow in Artur's footsteps, you'll need:

  • A FNIRSI DMC-100 and a USB-C cable to a computer. Linux was used throughout, any system that can copy files to a USB drive should do.
  • To build: GNU make 4.3 or newer, clang and ld.lld 20 or newer, the LLVM tools llvm-objcopy, llvm-nm, llvm-size and llvm-dwarfdump, python3 and git, and for the first build ca-certificates and network access. With clang 19 or older, the firmware does not fit (ld.lld: error: the image runs into the settings page). clang and lld 23 and Python 3.14 were used.
  • make without a target, the tests also need clang's sanitizer runtime (compiler-rt, on Ubuntu libclang-rt-20-dev). The tests need mtools and dosfstools (fsck.fat), the Renode tests Renode 1.17 and Pillow. tools/install.py, tools/restore.py and tests/device/usbtest.py (optional) need udisks2.
  • The path of the checkout must not contain spaces.
  • Optional: a DJI RC-N1 controller (see controller/rc-n1).

On Ubuntu 24.04, the following code installs everything but Renode:

sudo apt install make clang-20 lld-20 llvm-20 libclang-rt-20-dev python3 git ca-certificates \
mtools dosfstools python3-pil
export PATH=/usr/lib/llvm-20/bin:$PATH

You can definitely make this happen yourself if you want to measure hellfire instead of electrical current, and you can head to Artur's GitHub if you get stuck!

❤️
Like what you are reading? If you do and want to support us, you can do so by becoming a member, tipping us or taking a look at our gaming accessory company GAMENOOK (10% off just for you). This allows us to continue what we do without succumbing to algorithms, clickbait and over-intrusive ads, while paying human writers instead of AI.
Sebastian Santabarbara profile image Sebastian Santabarbara
Sebastian is fuelled by a lifelong passion for Zelda, Banjo Kazooie, Donkey Kong, and all things retro. He uses his misspent youth with retro consoles to create content for readers around the world.