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. makewithout a target, the tests also need clang's sanitizer runtime (compiler-rt, on Ubuntulibclang-rt-20-dev). The tests need mtools and dosfstools (fsck.fat), the Renode tests Renode 1.17 and Pillow.tools/install.py,tools/restore.pyandtests/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!