DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
FREEDOM251

Freedom251 › Blog › DOOM

Why DOOM Runs on Tiny Devices: A Practical Guide to Porting the Game

By Freedom251 Team · · 13 min read

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

DOOM runs on microcontrollers not because the original game had modern hardware requirements, but because its engine can be adapted to a new processor, display, storage system and input hardware—and because its game data can be reorganized to fit a tightly measured memory budget. Documented Raspberry Pi Pico projects show the practical limits: one RP2040 build fits the shareware DOOM1.WAD in 2 MB of flash, while an RP2350 implementation uses 8 MB of PSRAM, HDMI, SD storage and external peripherals.

The important distinction is between the engine source, the game-data files and the hardware port. Each has separate technical and licensing requirements.

As an Amazon Associate I earn from qualifying purchases.

What “running DOOM” means on a microcontroller

A tiny-device port is a complete adaptation project, not a matter of copying a desktop executable onto a smaller board. The port supplies an operating environment for the engine: a way to draw pixels, play sound, read controls, load data and preserve saves without the services normally supplied by a PC operating system.

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

The classic source code is portable, but portability is not the same as universal compatibility. John Carmack’s id Software source-release note said the code compiled and ran on Linux and was “quite portable,” while also warning: “You still need real DOOM data to work with this code.” A microcontroller port therefore has to solve two independent problems:

#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'.
  • Engine adaptation: compile the game logic for the target CPU and replace platform-dependent video, audio, input, timing, file and memory routines.
  • Data packaging: fit maps, textures, sprites, sounds and other WAD content into the target’s flash, RAM, PSRAM, SD card or other storage.

The board then needs physical interfaces for the result. A port can be perfectly compiled and still show no picture, accept no keyboard or produce no sound if its display timing, GPIO wiring or peripheral configuration is wrong.

Why the original engine is a good candidate for small hardware

Fixed-function work instead of a modern 3D pipeline

Classic DOOM renders a software image using a known set of maps, textures, sprites and effects. It does not require a contemporary graphics processor, a large operating system or a network service. A port can render directly into a small framebuffer and send that image to a simple display interface.

That does not make the workload trivial. The processor still has to maintain game state, transform visible geometry, draw walls and sprites, mix audio and service input. The advantage is that the entire workload is understood by the engine and can be tuned for one target rather than supported across an unpredictable range of desktop hardware.

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

Flash, working memory and removable storage have different jobs

“Memory” on a microcontroller is not one interchangeable pool. Flash normally stores the executable and resident data; RAM holds active game state, rendering buffers and temporary work; PSRAM or an SD card can provide additional room for larger assets. A build can fail even when its WAD fits in flash if the framebuffer or runtime allocations do not fit in RAM.

The documented RP2040 project illustrates this accounting with compressed WHX data and larger WHD data formats. Its build choices also change when USB keyboard support is included. These are project-specific formats and limits, not universal DOOM requirements.

Compression changes the storage problem, not the game rules

For the RP2040 implementation, the maintainers report that the entire shareware DOOM1.WAD fits in a Raspberry Pi Pico with 2 MB of flash when stored in the project’s compressed format. The same project documents Ultimate Doom and Doom II as playable on devices with 8 MB of flash. The 2 MB figure describes that implementation and its conversion process; it is not a general minimum for every port or every WAD.

Compression can reduce flash use, but the engine still needs to decode data at runtime and retain enough working memory for rendering. A port must therefore choose a data layout, decoder and loading strategy together.

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

Two documented microcontroller paths

The following projects demonstrate different engineering choices. They should not be treated as interchangeable recipes.

Port path Documented memory and data Display Input and peripherals Storage and other features What it illustrates
RP2040 Raspberry Pi Pico project 2 MB flash for shareware DOOM1.WAD in the project’s compressed format; 8 MB devices are documented for Ultimate Doom and Doom II. 320×200 VGA generated through GPIO synchronization and color signals. USB keyboard; audio hardware; keyboard compatibility varies, with host-computer key forwarding offered as a fallback. Save/load, custom WAD conversion and I2C networking are documented. How aggressive compression, direct GPIO video and a carefully selected build can fit a shareware game into a very small flash budget.
RP2350-based FRANK DOOM 8 MB PSRAM is a stated mandatory requirement; game data is stored on an SD card. 320×240 HDMI output. PS/2 or USB keyboard and mouse on supported hardware; separate audio hardware is required. SD-card loading and board-specific HDMI, input and audio connections. How adding PSRAM and external storage enables a different peripheral set and a larger, less flash-constrained design.

An RP2040 Pico board is a sensible starting point only for the RP2040 project. The board itself does not automatically include a VGA connector, audio circuit, keyboard interface or every accessory shown in the project documentation. The RP2350 design has its own mandatory PSRAM and peripheral requirements.

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

How the RP2040 Pico port fits DOOM into 2 MB

1. Choose the exact target build

Start by deciding whether the goal is the documented 2 MB shareware configuration or an 8 MB build intended for larger commercial WADs. Do not assume that a binary or data file made for one configuration will fit another. The project documents separate formats and build variants, including variants affected by USB keyboard support.

2. Assemble the hardware around the video interface

The documented output is 320×200 VGA. The Pico drives synchronization and color through mapped GPIO pins, so the wiring, resistor network or adapter and display must match the project’s pin assignment and signal design. A general-purpose HDMI monitor cannot be substituted without a converter or a different port; the RP2040 project and the RP2350 project use different display paths.

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

Add the project’s audio circuit or compatible audio hardware, then connect the chosen input device. The Pico build documents USB keyboard support, but USB host behavior depends on the keyboard and the firmware’s compatibility. A host computer can forward key presses when a particular keyboard is not recognized.

3. Install the software toolchain named by the project

The RP2040 implementation is derived from Chocolate Doom and uses the Pico SDK and an embedded compiler toolchain. Install the SDK revision and compiler family specified by the project version you are building. Embedded SDK changes can alter board definitions, USB behavior or linker layout, so substituting a newer toolchain without checking the project’s compatibility notes can create failures unrelated to DOOM itself.

Use the project’s build instructions to select the board target and optional USB-keyboard configuration. The precise build commands belong to the project revision; copying commands from a different revision can select the wrong linker script or output format.

4. Convert the WAD into the project’s format

The Pico build does not simply place an untouched desktop WAD beside the executable. Run the project-provided conversion process and select the compressed WHX or larger WHD arrangement documented for your flash capacity and game edition. Keep the original WAD unchanged as a source file and treat the generated data as a target-specific build artifact.

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

Verify the edition before conversion. The 2 MB claim applies to the shareware DOOM1.WAD in this implementation. Ultimate Doom and Doom II are associated with the project’s 8 MB device guidance, not with the 2 MB claim.

5. Flash and perform a staged first boot

  1. Build the firmware and confirm that the generated image is for the intended RP2040 board and memory layout.
  2. Program the board using the flashing method specified by the Pico project.
  3. Connect VGA, audio and keyboard hardware before starting the game, observing the documented GPIO assignments.
  4. Check for a stable picture at 320×200 before troubleshooting game data or input.
  5. Start with the shareware data set and test movement, firing, sound and saving separately. This isolates wiring and configuration problems from WAD-conversion problems.

6. Add networking and larger data only after the base build works

The RP2040 project documents I2C networking and save/load support, but those features add wiring and software configuration. Establish a reliable single-board game first, then enable networking or move to an 8 MB device. A larger flash chip does not automatically provide the I2C topology, storage layout or firmware options required by those features.

How the RP2350 FRANK DOOM path differs

PSRAM is a requirement, not an optional upgrade

FRANK DOOM’s RP2350 documentation states that an RP2350-compatible board with 8 MB of PSRAM is mandatory. That requirement changes the memory architecture from the 2 MB RP2040 example: the project can keep larger working data outside the RP2350’s small internal memory while loading game files from an SD card.

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.

Do not use the RP2040 project’s flash assumptions to size an RP2350 build, or assume that any RP2350 board includes the required PSRAM. Verify the board’s actual memory and the project’s supported hardware list.

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

HDMI, SD and external controls form a different system

The documented native output is 320×240 HDMI. The project also supports SD-card storage and PS/2 or USB keyboard and mouse input on specified hardware, plus an audio setup that requires the appropriate external circuitry. This is a more peripheral-heavy build than the direct-GPIO VGA path.

Because the display timing, storage driver and input stack differ, an RP2040 VGA wiring diagram is not a shortcut for FRANK DOOM. Select one project, follow its board and peripheral requirements, and keep its firmware, data preparation and wiring as one coherent configuration.

A practical RP2350 workflow

  1. Confirm the board is RP2350-compatible and has the documented 8 MB PSRAM.
  2. Prepare an SD card using the directory and data arrangement required by the FRANK DOOM build.
  3. Connect the supported HDMI output and verify that the display can accept the project’s 320×240 signal.
  4. Choose PS/2 or USB keyboard and mouse hardware from the project’s supported options, then connect the documented audio hardware.
  5. Install the project’s stated toolchain and build the GNU GPL v2 project for the selected board target.
  6. Boot with a legal shareware or Freedoom data set first, confirm SD access and input, then troubleshoot game-specific data.

Engine source, WAD data and licenses are separate

The source release does not include commercial game data

John Carmack’s source-release note explicitly separates code from data: “The DOOM source code is released for your non-profit use. You still need real DOOM data to work with this code.” A source repository is therefore not a license to redistribute the commercial WAD files, even when the engine code is publicly available.

FRANK DOOM identifies shareware data and Freedoom as options and notes that full DOOM or DOOM II can be purchased through Steam or GOG. Obtain commercial data through a legitimate channel and check the terms that apply to copying, modification and redistribution. Whether a person may use a particular file in a public firmware image depends on that file’s license, not on the engine’s license.

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.

Check every component’s license

The RP2040 project says code derived from Chocolate Doom generally retains GPLv2 licensing, while new project-specific code that does not implement existing Chocolate Doom interfaces is BSD-3; it also identifies additional component licenses. FRANK DOOM states GNU GPL v2. Read the license files in the exact repositories and for the exact revision you build. A mixed-license project may impose different obligations on engine code, board support, conversion utilities and bundled assets.

This is a technical guide, not jurisdiction-specific legal advice. If you plan to distribute hardware, firmware or a preloaded SD card, obtain advice appropriate to your country and the licenses of every included file.

What the porting work actually changes

Video and timing

The original engine expects a screen buffer and a timing loop. A microcontroller port replaces the desktop presentation path with a driver that emits either GPIO-level VGA signals or HDMI frames. The driver must maintain the required synchronization while the CPU renders, so resolution and pixel format are part of the performance budget.

A 320×200 VGA target and a 320×240 HDMI target are not merely different cables. They require different scan-out timing, framebuffer dimensions and board support. A display that accepts one signal may not accept the other.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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.

Input

Desktop DOOM expects a keyboard and, depending on the port, a mouse. Embedded projects must implement USB host handling, PS/2 decoding or a forwarding protocol. The Pico documentation warns that keyboard compatibility can vary; a working USB port does not guarantee that every keyboard enumerates correctly. Host-computer key forwarding is a documented fallback for that project.

Audio

Sound is another hardware interface, not an automatic consequence of compiling the engine. The Pico path documents audio support as part of its build, while FRANK DOOM requires audio hardware alongside its HDMI and SD setup. Confirm the output circuit, pin assignment and firmware option before treating silent operation as a game-data problem.

Storage and saves

Small flash budgets encourage compressed, read-only game data, while an SD card permits a larger external library. Save/load support also needs a persistent layout and a write path that the target hardware can safely use. A build that can play a level may still need additional storage handling for saves or multiple WADs.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Choosing between the two approaches

Choose the RP2040 Pico approach when… Choose the RP2350 FRANK DOOM approach when…
You want the smallest documented flash configuration and are comfortable with a 320×200 VGA signal. You need the documented HDMI output and can provide the required 8 MB PSRAM.
A shareware DOOM1.WAD in the project’s compressed format is sufficient. You prefer SD-card storage and a design built around external game-data access.
You can wire GPIO video, audio and USB keyboard hardware. You can provide HDMI, SD, PS/2 or USB input and the specified audio hardware.
You want the project’s documented I2C networking and compact-board experimentation. You want the RP2350 project’s keyboard/mouse-oriented peripheral setup.

Neither table column establishes a faster frame rate, lower power draw or easier port. No independent benchmark in the available documentation compares those characteristics, so configuration differences should not be turned into a performance ranking.

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.

Troubleshooting by symptom

The board boots but the display is blank

  • Confirm that the firmware target matches the board and the documented display mode.
  • For the RP2040 path, check GPIO synchronization and color wiring and use a display that accepts the 320×200 VGA signal.
  • For FRANK DOOM, verify the HDMI connection and 320×240 compatibility rather than applying VGA assumptions.
  • Test video before changing WAD files; a display-timing fault can look like a failed game launch.

The picture works but the keyboard does not

  • Check whether the build includes the USB-keyboard option and whether the keyboard is compatible with the project’s host implementation.
  • Try the documented host-computer key-forwarding fallback on the Pico project.
  • On FRANK DOOM, confirm that the chosen PS/2 or USB device and board wiring are among the supported combinations.

The build exceeds flash or RAM

  • Confirm that the WAD was converted into the correct WHX or WHD format for the selected build.
  • Use the 2 MB claim only for the documented shareware configuration; larger editions require the project’s 8 MB guidance or another storage strategy.
  • Check whether optional USB, networking, audio or save features select a larger firmware variant.
  • On RP2350, verify that the board actually has the required 8 MB PSRAM and that the build is using it.

The game starts but data is missing or corrupted

  • Use the WAD edition expected by the project and repeat the project’s conversion process from an unmodified source file.
  • Check the generated file’s location, naming and storage layout against the project’s documentation.
  • Do not mix an RP2040-converted data set with FRANK DOOM’s SD-card layout unless the project explicitly supports that format.

There is no sound

  • Verify the audio circuit, pin assignment and firmware option for the selected port.
  • Test audio independently from keyboard and WAD troubleshooting; the two projects use different hardware arrangements.

Cost and project planning

The board price is only one line in the build budget. A Pico VGA system may need a display adapter or resistor network, audio components, USB host hardware and wiring. An RP2350 system adds a compatible board with 8 MB PSRAM, HDMI hardware, an SD card, input peripherals and audio circuitry.

A Raspberry Pi article describing the RP2040 port cited historical figures of $1 per unit and 70 cents in volume. The publication year for that passage is not established here, so those numbers should be read as historical context rather than current prices or a purchasing estimate. Retail availability, accessory costs and board revisions change independently of the engine.

Before buying parts, freeze the software target and make a bill of materials from that target’s documented interfaces. Mixing a VGA display with an HDMI-oriented port, or buying an RP2350 board without the required PSRAM, creates an avoidable compatibility problem.

A repeatable checklist for a legal, working port

  • Define the target board, display resolution, input method, audio path and storage medium.
  • Separate engine source from WAD data and identify the license for each.
  • Choose shareware data or Freedoom for a redistributable demonstration; obtain commercial data lawfully for personal use.
  • Install the SDK and compiler versions specified by the selected project.
  • Convert the WAD using that project’s documented data tool and format.
  • Build the matching board configuration, including or excluding USB keyboard, networking and save features deliberately.
  • Wire and test video first, then input, audio, storage and saves.
  • Keep the original WAD, converted files, firmware image and license notices organized so the build can be reproduced.
  • Do not claim a universal 2 MB minimum, an 8 MB requirement for every port, or a performance advantage that the project documentation does not establish.

What these projects prove—and what they do not

The projects prove that a classic DOOM engine can be adapted to highly constrained processors when the data format, memory map and hardware drivers are designed together. They also show why “tiny device” is not a single specification: one implementation emphasizes compressed flash and GPIO VGA, while another uses PSRAM, HDMI and SD storage.

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

They do not establish one universal hardware minimum, a guaranteed frame rate, power consumption, input latency or porting effort for every microcontroller. Those values depend on the selected engine revision, compiler, WAD, display path, optional features and board design. The useful lesson is methodological: measure every resource, treat each peripheral as part of the port, and keep code rights separate from game-data rights.

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.

DOOMembedded programminggame portingMicrocontrollersRaspberry Pi Picoretro gamingRP2040RP2350

Leave a Reply

Your email address will not be published. Required fields are marked *

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

Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.