Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

DOOM runs on tiny devices because its engine can be rebuilt around a specific processor, memory budget, display link, audio path, and input method. The result is not a universal “minimum hardware” recipe. A Raspberry Pi Pico project fits the shareware game in 2 MB of flash by converting and compressing its data, while an RP2350 project uses 8 MB of PSRAM, HDMI, SD storage, and external peripherals. Porting is the work of making each of those pieces agree.

What “running DOOM” actually means

A playable port has at least four separate parts:

  • Engine code: the executable that updates the game, draws frames, handles sound, and reads controls.
  • Game data: maps, textures, sprites, sounds, music, and other content normally delivered in a WAD file.
  • Platform layer: code that talks to the target board’s display, audio device, storage, timers, and input hardware.
  • Build and data-conversion tools: the compiler, SDK, linker settings, and utilities that turn the source and WAD into files the board can use.

Those parts are related but not interchangeable. A source tree can compile successfully while still lacking game data, a video driver, a keyboard driver, or enough memory for a level. Conversely, a board can have enough flash for a WAD but no practical way to produce video or accept input.

The source release did not include the commercial game

When id Software released the DOOM source in 1997, John Carmack made the separation explicit: “The DOOM source code is released for your non-profit use. You still need real DOOM data to work with this code.” The source release is therefore an engine starting point, not a complete copy of the commercial game. Carmack also wrote that the code was portable and could be brought to other platforms “with effort.” That effort is the port.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Modern embedded projects commonly start from a maintained source base such as Chocolate Doom, then replace or adapt the operating-system and hardware portions for a microcontroller. The original source was able to compile and run on Linux, but that does not mean it runs unchanged on a microcontroller. A tiny target has different startup code, memory mapping, timing, graphics output, storage, and input.

#1 Best Overall
2Pcs Raspberry Pi Pico Development Board, Raspberry Pi RP2040 Dual-core ARM Cortex M0+ Processor, Running Up to 133 MHz, Support C/C++/Python, 2MB Quad SPI Flash Integrated with SPI/I2C/UART Interface
  • The Raspberry Pi Pico is a beginner-friendly microcontroller board that uses MicroPython to give you a taste of the Internet of Things and microcontrollers. The RP2040 is a well-designed microprocessor that can be utilized in almost any Internet of Things project. It has enough power to complete the task quickly.
  • 【Raspberry Pi RP2040 Microcontroller】Raspberry Pi Pico features Dual-core ARM Cortex M0+ processor, flexible clock running up to 133 MHz. With 264KB of SRAM, and 2MB of on-board Flash memory.Supports up to 16 MB of off chip flash memory via a dedicated QSPI bus
  • 【Multiple Software Support】Pico has rich and complete software support, it comes with a complete Rasberry Pi official C/C++ SDK, Micropython SDK.The programming and burning of Pico need to be carried out on the computer. Supported operating systems and computers include:Raspberry Pie with Raspberry Pi OS,Other platforms equipped with Debian based Linux system Computer with MacOS, Computers with Windows, etc.
  • 【Rich Hardware Interface】Raspberry Pi Pico has 30 GPIO pins, 4 pins for analog signal input and 26 × multi-function GPIO pins, 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels.USB 1.1 supported by host and device, The installation mode can be flexibly selected by users to facilitate welding with other development boards.
  • 【Build Project in Tiny Size】Only 2.1cm*5.1cm ( as small as your thumb). Pico has been designed to use either soldered 0.1" pin-headers or can be used as a surface-mountable 'module'.

Why a microcontroller can hold a 1990s game

The key is not that every tiny board has desktop-class resources. It is that the port controls exactly what is stored, when it is loaded, and how it is represented.

Memory is budgeted by function

Memory use What the port must account for
Program flash Executable code, startup code, drivers, and any built-in assets.
Game-data storage WAD content or a project-specific converted representation of it.
Runtime RAM Game state, working buffers, decompression space, input state, and audio buffers.
Display buffers Enough memory for the renderer’s working data and whatever scan-out method the display interface requires.
Save data Persistent storage for save games, configuration, or other state when the port supports it.
External memory PSRAM, an SD card, or another device when the board’s internal memory is not sufficient.

Keeping the executable small is only half the problem. The game data must also be stored in a form the port can read quickly without exhausting flash or RAM. The RP2040 project documents separate project-specific WHX compressed and WHD larger data formats, along with different builds depending on whether USB keyboard support is included.

The 2 MB example is real, but it is not a universal requirement

The documented RP2040 Raspberry Pi Pico implementation says the complete shareware DOOM1.WAD, together with its executable and compressed representation, fits in a Pico with 2 MB of flash. The same project says Ultimate Doom and Doom II are playable on devices with 8 MB of flash. These figures describe those builds, their conversion process, and their hardware configuration; they are not official minimum requirements for every DOOM port.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A different port can use more memory for a different renderer, higher-resolution output, larger buffers, or a less compressed data format. Treat the project’s stated capacity as a requirement for that implementation, not as a promise that any 2 MB board will run any WAD.

Two practical porting paths

These projects demonstrate why “a tiny DOOM device” is not one standard configuration.

Path Documented configuration Main engineering trade-offs
RP2040 / Raspberry Pi Pico Shareware DOOM1.WAD on a 2 MB Pico build; the project reports Ultimate Doom and Doom II on 8 MB devices. It documents 320×200 VGA, audio, USB keyboard input, I2C networking, save/load, and custom WAD conversion. Very small flash budget; compressed data; GPIO timing and VGA wiring; keyboard compatibility; optional networking and storage details.
RP2350 / FRANK DOOM RP2350-compatible board with mandatory 8 MB PSRAM; 320×240 HDMI output; SD-card storage; PS/2 or USB keyboard and mouse; separate audio hardware. More external memory and peripherals; HDMI and SD interfaces; board-specific support; a different build and data layout from the RP2040 project.

An RP2040 board is a sensible starting point for the Pico implementation, but the board by itself does not supply every VGA, audio, USB, storage, or wiring component used by that build. The FRANK DOOM requirements are likewise specific: an RP2350 board without the required 8 MB PSRAM or supported peripherals is not an equivalent substitute.

A porting workflow that scales from a Pico to a custom board

1. Choose the target before touching the source

Write down the board’s processor, internal flash, available RAM, external memory, display interface, audio output, input devices, and storage. Decide whether the target is the RP2040 VGA configuration or the RP2350 HDMI configuration before selecting a build. This prevents a common mistake: compiling a port for one peripheral set and then discovering that the physical board exposes another.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
With Pre-Soldered Header Raspberry Pi Pico Microcontroller Development Board Based on Raspberry Pi RP2040 Chip,Dual-Core ARM Cortex M0+ Processor
  • with pre-soldered header Raspberry Pi Pico. RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom
  • Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz. 264KB of SRAM, and 2MB of on-board Flash memory.
  • Castellated module allows soldering direct to carrier boards. USB 1.1 with device and host support. Low-power sleep and dormant modes. Drag-and-drop programming using mass storage over USB. 26 × multi-function GPIO pins.
  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels.Accurate clock and timer on-chip.Temperature sensor.
  • Accelerated floating-point libraries on-chip.8 × Programmable I/O (PIO) state machines for custom peripheral support
  • For the RP2040 path, plan around the project’s 2 MB shareware build or its 8 MB configuration for larger game sets.
  • For FRANK DOOM, budget for the stated 8 MB PSRAM and the HDMI, SD, input, and audio hardware the project expects.
  • Decide whether USB keyboard support, save/load, or networking is required. The Pico documentation describes different builds when USB keyboard support is included.

2. Set up the matching software toolchain

Use the SDK and compiler expected by the selected project. The RP2040 example is based on Chocolate Doom and uses the Pico SDK and its embedded compiler toolchain. Do not mix a board support package, linker script, or SDK from another target unless you are deliberately doing a new port. The build must know the board’s flash layout, RAM regions, startup code, and peripheral registers.

Read the project’s build instructions for the exact repository revision and options. A successful desktop compile is useful for checking the game logic, but it does not prove that the embedded target will fit or that its display and input drivers work.

3. Convert the game data for the target

Start with data you are entitled to use. The RP2040 project provides a project-specific conversion path rather than placing an untouched WAD directly into the smallest flash configuration. Its documentation distinguishes compressed WHX data from larger WHD data. The conversion step determines how much flash is consumed and how much RAM is needed while assets are read.

  1. Obtain the shareware data or another legally usable data set.
  2. Run the converter supplied by the chosen project, using the format and options documented for your board.
  3. Check the generated file size against the board’s flash or SD-card budget.
  4. Build the executable with the matching data-format support; a binary expecting one format cannot automatically read another.
  5. Keep the original WAD separate from the converted output so that you can repeat the process for another target without overwriting source data.

If a larger WAD does not fit, do not simply remove random files. The game may depend on specific maps, sounds, or directory entries. Use the project’s supported larger format, external storage, or a board with more flash instead.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

4. Implement the display path

Video output is a hardware driver, not a cosmetic setting. The RP2040 implementation maps GPIO pins for VGA synchronization and color and renders at a documented 320×200 resolution. That means the firmware must generate the expected timing and electrical signals while the game is running. Wiring, pin assignments, clock configuration, and cable compatibility all matter.

FRANK DOOM takes a different route: 320×240 HDMI output. HDMI support brings a different signal path, memory requirement, and board design. Code and wiring written for the Pico VGA configuration should not be assumed to work on an RP2350 HDMI board.

5. Add input and handle compatibility limits

The Pico project supports USB keyboard input, but its documentation warns that keyboard compatibility can vary. It offers forwarding of key presses from a host computer as a fallback. That is useful during development because it separates game logic from the question of whether a particular USB keyboard enumerates correctly on the board.

Rank #3
3-Pack RP2040 Microcontroller Board, Dual-Core ARM Cortex-M0+ up to 133MHz, 2MB Flash, 30 GPIO Pins, Compatible with Raspberry Pi Pico, Supports MicroPython & C/C++ (USB-C Port)
  • ⚡ Dual-Core RP2040 Performance:Equipped with the RP2040 dual-core ARM Cortex-M0+ processor running up to 133MHz, this board delivers fast execution and stable multitasking for a wide range of embedded and DIY projects.
  • 💻 MicroPython & C/C++ Support:Fully compatible with MicroPython and the official C/C++ SDK, making firmware development easy for both beginners and experienced developers on Windows, macOS, Linux, and Raspberry Pi OS.
  • 🔧 Rich I/O for Hardware Expansion:Features 30 GPIO pins, 4 analog inputs, 3 ADC channels, 16 PWM channels, plus SPI, I2C, and UART interfaces—ideal for robotics, sensing, automation, and IoT applications.
  • 📏 Compact Size for Embedded Projects:With a compact 2.1 × 5.1 cm footprint, the board fits well in tight spaces including enclosures, wearables, small devices, and custom electronics. Supports both soldered headers and surface-mount installation.
  • 🔌 Stable Memory & USB Connectivity:Built with 264KB SRAM and 2MB QSPI flash (expandable up to 16MB), offering reliable storage for larger codebases. USB 1.1 device/host support ensures simple programming and dependable data transfer.

FRANK DOOM supports PS/2 or USB keyboard and mouse input on specified hardware. Confirm which connector, adapter, and driver your board supports before buying peripherals. Input support also includes practical details such as key mapping, boot-time detection, and whether the chosen USB implementation supplies enough power.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

6. Connect audio as its own subsystem

A port can render a game and still be silent if its audio path is not implemented. The Pico project documents audio as part of its hardware configuration; FRANK DOOM documents separate audio hardware. In both cases, the engine’s sound mixer must be connected to a board-specific output, and the hardware must provide the required amplifier, DAC, PWM, or other interface described by that project.

Do not infer the audio circuit from the video circuit. A board that produces VGA or HDMI does not automatically provide a speaker output.

7. Decide where saves and larger assets live

The RP2040 project documents save/load support and I2C networking, while FRANK DOOM uses SD storage for its data path. These are optional capabilities with different code and hardware costs. Internal flash is convenient but limited and may require a carefully defined layout. An SD card adds capacity but also adds a controller, wiring, a filesystem, and removable-media failure modes. I2C networking adds another bus and a protocol that must coexist with the game loop.

8. Build, flash, and verify one subsystem at a time

  1. Build the smallest target configuration and confirm that the linker reports a size within the board’s flash and RAM limits.
  2. Flash the board with the project’s documented image method.
  3. Verify startup and video timing before loading a full game-data set.
  4. Test one input device, then audio, then storage and save/load.
  5. Load the converted shareware data and check that a known level starts, renders, accepts input, and produces sound.
  6. Only after the base build is stable, enable optional keyboard, networking, or larger-data features.

This order localizes failures. If the screen is blank before the WAD is loaded, changing the game data is unlikely to fix the display driver. If a level loads but a keyboard does not respond, test enumeration and key forwarding rather than rebuilding the renderer.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Building the RP2040 Pico version

What the documented configuration includes

  • RP2040 Raspberry Pi Pico-class board.
  • 2 MB flash for the documented shareware configuration.
  • 320×200 VGA output through mapped GPIO synchronization and color signals.
  • Audio hardware matching the project’s wiring and firmware.
  • USB keyboard support, subject to compatibility; host-computer key forwarding is documented as a fallback.
  • Project-specific converted game data, with larger data support on 8 MB devices.
  • Optional save/load and I2C networking features.

The most important constraint is the flash layout. The project reports that the executable and compressed shareware data fit together in 2 MB. Adding a feature, changing compiler settings, or selecting a different data format can change that result. Recheck the final image size after every substantial change.

Typical Pico failure points

  • No or unstable VGA: check GPIO assignments, synchronization wiring, clock configuration, and the display’s ability to accept the project’s timing.
  • Keyboard does not work: try a keyboard known to be compatible with the project or use host key forwarding while diagnosing USB support.
  • Image fits but data does not: confirm that the converted compressed format is being used and that the selected WAD is supported by that build.
  • Sound is missing: verify the separate audio circuit and its firmware configuration; video output does not imply audio output.
  • Optional features break the build: remove USB, networking, or other optional components, confirm the base build, and then add features one at a time.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Building the RP2350 FRANK DOOM path

Hardware requirements are different

FRANK DOOM’s documented configuration requires an RP2350-compatible board with 8 MB PSRAM. It targets 320×240 HDMI, reads data from an SD card, accepts PS/2 or USB keyboard and mouse input on supported hardware, and expects audio hardware. Those requirements move much of the capacity problem away from the RP2040’s 2 MB flash budget, but they add board-level interfaces that must be wired and initialized correctly.

Rank #4
5 Pack Development Board Compatible with Raspberry Pi Pico RP2040, Solderable Pin Header Version, Dual-Core ARM Cortex-M0+ MCU up to 133MHz, 2MB Flash, MicroPython and C/C++ for Education and DIY
  • 🔌Solderable Raspberry Pi Pico RP2040 Development Boards This version comes with unsoldered pin headers, allowing flexible custom wiring and integration with breadboards or custom PCBs, perfect for hobbyists, makers, and embedded projects requiring tailored connections.
  • ⚡High-Performance RP2040 Microcontroller Powered by the dual-core ARM Cortex-M0+ RP2040 processor running up to 133MHz, these boards provide fast processing, 264KB SRAM, and 2MB onboard flash, delivering reliable performance for real-time control and IoT experiments.
  • 🧰Flexible Hardware Interfaces Equipped with 30 GPIO pins, analog inputs, PWM channels, SPI, I2C, UART, and USB 1.1 support, these solderable Pico boards allow users to connect sensors, displays, motors, and other peripherals for educational, DIY, and embedded applications.
  • 📐Compact Design for Custom Projects With its small thumb-sized footprint and solderable headers, the boards can be used on breadboards, custom PCBs, or as surface-mounted modules, making them ideal for space-constrained or portable projects.
  • 🎓Ideal for Learning, DIY and Embedded Systems These Raspberry Pi Pico boards are widely used in education, robotics, automation, and hobby electronics, providing beginners and advanced makers with a reliable platform for firmware development, electronics experiments, and project prototyping.

Because the display, storage, memory, and input assumptions differ, the FRANK DOOM build is not a drop-in replacement for the Pico VGA build. Choose it when the target board and peripherals match its documented design, not merely because the processor has a newer model number.

What to check before flashing

  • Confirm that the board actually exposes the required 8 MB PSRAM.
  • Confirm that the HDMI output path and display timing are supported by the project.
  • Prepare an SD card in the format and directory layout expected by the project.
  • Test the selected PS/2 or USB keyboard and mouse on the specified connector or adapter.
  • Connect the documented audio hardware before judging the port’s sound support.

How to choose between the two approaches

Decision factor RP2040 Pico project RP2350 FRANK DOOM project
Internal/external memory focus 2 MB flash shareware build; 8 MB devices for the project’s larger game support; compression is central. 8 MB PSRAM is a stated requirement; SD storage is part of the design.
Video 320×200 VGA via GPIO wiring. 320×240 HDMI.
Input USB keyboard; compatibility varies, with host forwarding as a fallback. PS/2 or USB keyboard and mouse on supported hardware.
Storage and extras Converted data in flash; save/load and I2C networking are documented features. SD-card data path and board-specific peripheral setup.
Best fit A minimal, tightly budgeted embedded build or a project focused on VGA and low flash use. A board design that already provides PSRAM, HDMI, SD, and the required input and audio interfaces.

There is no evidence here for a reliable ranking of frame rate, power draw, input latency, or porting effort. The published configurations establish what each project supports, not which one is faster or more efficient under identical conditions.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Source-code and game-data licensing

Licensing must be checked in two layers. The code license covers the source and the project-specific additions; it does not automatically grant permission to redistribute commercial game data.

The RP2040 project says code derived from Chocolate Doom generally remains under GPLv2, while new project-specific code that does not implement existing Chocolate Doom interfaces is BSD-3-Clause. It also identifies other component licenses. FRANK DOOM states GNU GPL v2. Read the exact license files in the repository and for each included component before publishing a binary or modified source tree.

For data, the FRANK DOOM repository identifies shareware data and Freedoom as options and notes that full DOOM or DOOM II can be purchased through Steam or GOG. A purchased copy may give you a license to use its data, but it does not by itself authorize uploading that data with your firmware or sharing it with others. Keep commercial WAD files private unless the applicable terms clearly permit redistribution.

What these examples prove—and what they do not

They prove that a carefully adapted engine, a converted data set, and purpose-built hardware interfaces can make a playable DOOM installation fit on contemporary microcontroller boards. They also show that “portable” means adaptable, not automatic. Display timing, keyboard drivers, audio output, storage layout, memory allocation, and data conversion all require target-specific work.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

They do not establish a universal 2 MB minimum, a universal 8 MB recommendation, or a performance contest between RP2040 and RP2350. They also do not provide independent measurements of frame rate, power consumption, latency, or development time. Use the project-specific requirements when planning a build, and measure any additional property yourself rather than inferring it from flash or PSRAM capacity.

A compact checklist for a first port

  • Identify the exact board and the port that supports it.
  • Record flash, RAM, PSRAM, display, audio, input, and storage requirements.
  • Use the project’s stated SDK, compiler, linker settings, and data converter.
  • Start with shareware DOOM1.WAD or another legally usable data set.
  • Keep engine source, converted data, and commercial WAD files as separate items.
  • Validate video, input, audio, and storage independently before enabling optional features.
  • Recheck image size and memory use after each feature or data-format change.
  • Read the repository licenses for the engine, project-specific code, libraries, and game data before distributing anything.

The bottom line

DOOM runs on tiny devices because the engine is portable enough to be reshaped and the game data can be compressed, moved to external storage, or selected to fit the target. The RP2040 example demonstrates an aggressively constrained 2 MB VGA build; the RP2350 example demonstrates a roomier design built around PSRAM, HDMI, SD storage, and external peripherals. A successful port is therefore less about discovering a magic minimum specification and more about matching one complete implementation—code, data, memory, display, audio, input, and licenses—to one board.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.