How To Play Doom on a Raspberry Pi Pico 1
With VGA Graphics, USB Keyboard Support and Sound
Hello Again,
I managed to complete my little project. It actually works fairly well 
I of course don’t take the credit for porting this to pico. This was done by someone named “Bad-Spyro”. His git archive is listed below.
Below are some instructions on how you can install the image I built from that source onto your own Raspberry Pi Pico 1 and play Doom like it’s 1993.
This open source build of Doom runs directly on the Raspberry Pi Pico using VGA output and DAC sound — no DOS operating system required!
Hardware you will need
- Raspberry Pi Pico (Version 1)
- Pimoroni VGA Demo Board (PIM553)
- VGA Monitor
- USB Keyboard (with micro USB plug or adaptor)
- Head Phones or Speakers (3.5mm Jack Plug)
Files You Need To Install.
The only two files you need are in the attached zip archive.
Pico-Doom.zip (1.6 MB)
- doom_tiny_usb.uf2 Compiled doom code
- doom1.whx Compressed Doom1.WAD data file
Step 1 — Install picotool
Both the .uf2 program file and the .whx compressed wad data file must be copied onto the pico.
You can simply drop the uf2 file onto the Pico but the only way get the data into the correct location is to use picotool. (I used version 2.2.0-a4 in case that makes any difference)
Here is how to download and install it.
On Linux (Debian/Ubuntu)
sudo apt install picotool
On macOS (using Homebrew)
brew install picotool
On Windows
- Download the latest release from:
Releases · raspberrypi/picotool · GitHub
- Extract the ZIP and open a Command Prompt in that folder.
Step 2 — Put Your Pico in BOOTSEL Mode
- Hold down the BOOTSEL button on the Pico.
- While holding it, plug in the Pico (not the PIM553 usb port) into your computer’s USB port.
- It will appear as a drive named RPI-RP2.
Step 3 — Flash the Doom Program
Copy the following file onto the RPI-RP2 drive:
doom_tiny_usb.uf2
The Pico will reboot automatically and disconnect.
Step 4 — Write the Game Data (WAD)
With the Pico still connected (but NOT in BOOTSEL mode)
(If this doesn’t work put it back in BOOTSEL Mode anyway.)
Open a terminal and cd to the same folder as the downloaded files and run the following command:
sudo picotool load doom1.whx -t bin -o 0x10042000
This writes the Doom data into flash memory at the correct offset and leaves the doom_tiny_usb.uf2 file in place.
Step 5 — Reboot and Play
Power off the Pico
Connect the Pico to the PIM553 board matching the USB port to the correct end.
Connect a VGA Monitor.
Connect the Keyboard directly to the Pico, you may need a micro USB adaptor.
Plug in the 3.5 mm audio jack to the port marked “DAC”.
Connect power to the USB port on the PIM553 board.
Doom should start the demo automatically.
Notes
- These instructions are only for the original Raspberry Pi Pico (RP2040), not Pico w or Pico 2.
- This build was performed with SDK 1.4 and Extras 1.4 (later SDK’s break compatibility).
- If you want to completely erase the Pico and start over: sudo picotool erase
These files won’t run on later versions of the board like Pico W or Pico 2 as the newer boards require a different version of the C SDK’s (1.5 or 2.0?) and lots of things changed in those versions that required updates to the Doom source code. I used SDK 1.4 and Extras 1.4 to compile from the source, as that was current around the time Doom was ported to the Pico 1.
I only made minimal changes to the code to suit the PIM 553 layout where required.
Once I figured out which SDK/Extras to use the only other change was to the GPIO Pins that the DAC Audio chip is connected to. PWM sound was almost non existent among the static.
I2S_DATA_PIN=26
I2S_CLOCK_PIN_BASE=27
BCK=27 and LRCK=28
If you really want to build your own from source here is the download command.
git clone https://github.com/Bad-Spyro/rp2040-doom.git
It took me a lot of “ChatGPT’ing” to get it compile and run 
Many rabbit holes were entered.
Send me a message if you get it to work!
Have Fun
David.