Doom on a microcontroller is old news. Quake II is a much heavier game: it has more geometry, bigger maps and much larger data files. A new GitHub project called frank-quake2, from developer rh1tech, now runs it on Raspberry Pi's RP2350. The repository was created on 24 October 2026 and last pushed on 27 October, according to the GitHub API. The README marks it as "Work in progress". Its author reports a demo1 timedemo of about 33 fps: 689 frames in roughly 20.5 seconds.
Every performance figure and design detail in this piece comes from the project's own README. We did not find any independent coverage of the port, and we have not run it ourselves. The Waveshare board documentation and Raspberry Pi's RP2350 datasheet back up the hardware side, but nobody outside the project has confirmed the frame rates yet.
What hardware does it target?
The README lists two hardware families:
- FRANK / Murmulator M2 boards, with HDMI driven by the RP2350's HSTX peripheral.
- Waveshare RP2350-PiZero, which the project calls "Z0". HDMI is driven by PIO on this board.
The common requirements are 8 MB of PSRAM, a USB keyboard and mouse, and an SD card for the game data. Sound goes out over HDMI or an I2S DAC. The project ships a separate UF2 for each target and audio path. The M2 builds are named m2p2_frank-quake2_hdmi and m2p2_frank-quake2_i2s. The Z0 builds use a z0p2_ prefix.
Waveshare's RP2350-PiZero wiki lists these specs for the board:
- RP2350B with dual Cortex-M33 and dual Hazard3 RISC-V cores, "up to 150 MHz"
- 520 KB SRAM and 16 MB on-chip flash, with a reserved PSRAM pad
- Onboard DVI port and TF card slot
- PIO-USB port (USB 1.1 host/device)
- 40-pin Raspberry Pi-compatible GPIO header
- USB Type-C and a lithium battery header
Two points matter for anyone planning to buy this board for the port. First, Waveshare describes the PSRAM as a reserved pad, while the port requires 8 MB of PSRAM and the README says the Z0 has PSRAM on board. Check what your board actually has fitted. Second, Waveshare calls the video connector a DVI port, while the project describes its output as HDMI via PIO.
Why two HDMI paths?
The RP2350 datasheet lists one HSTX (high-speed serial transmit) peripheral, available on GPIO12-19, and 12 PIO state machines. HSTX is documented in chapter 12.11, and the SIO TMDS encoder in section 3.1.9. The M2 boards use HSTX for video.
On the Z0, the README puts the PIO video output on GPIO32-39. That range is outside the GPIO12-19 window the datasheet gives for HSTX. This fits with the port using PIO on that board, but the README does not give a reason for the choice.
The README also lists other Z0 pin assignments:
- SD card on SPI1
- PSRAM chip-select on GPIO47
- PSRAM clock of 504/4 = 126 MHz on the Z0, compared with 168 MHz on the M2
How does Quake II fit in 520 KB of SRAM?
Much of it doesn't. The engine is the ESP32-S3 port of Quake II (recrof/Quake2-ESP32S3, by way of quake2generic), using the software renderer and the baseq2 game code. The hardware platform layer comes from rh1tech's earlier frank-castle project.
The README says 8 MB of PSRAM is not enough to hold the maps unless the models and skins are used straight from flash. So models and skins are streamed from flash. On first boot the firmware reads the game data from the SD card and builds an image of about 14 MB of models and skins in flash. The README says this takes about 90 seconds.
Boards with only 8 MB of flash need care. On those boards the image holds about 6 MB, and the biggest models and skins load to PSRAM instead. According to the README, firmware 1.01 and older assumed 16 MB of flash. On an 8 MB board, the build stopped at 37% and erased the firmware. Make sure you are running a current release before you try it on a smaller-flash board.
What does it render, and how fast?
The README describes the rendering setup like this:
- The game renders in software at 320x240 with 8-bit colour.
- That image is shown pixel-doubled on a 640x480 at 60 Hz HDMI output.
- Both cores render. Core 1 contributes work between HDMI interrupts.
- Audio is 11025 Hz, 16-bit stereo.
The author's performance claims are about 33 fps in the demo1 timedemo and 30-45 fps in real-time play. The port is single-player only and has no networking.
The README does not say which board or clock the timedemo ran on. Its build notes list a 504 MHz CPU clock for the M2 build, far above the "up to 150 MHz" Waveshare quotes for the RP2350-PiZero. The figure is best read as one developer's result on their own setup, not a reproducible benchmark.
What do you need to supply?
You need the retail game data, patched to version 3.20. The files pak0.pak, pak1.pak and pak2.pak go in /quake2/baseq2/ on the SD card. The README is explicit that no game data is included in the repository or its releases. If you don't own a retail copy of Quake II, you can't play it on this port.
What It Means for Makers
Quake II needs much more memory and storage than Doom. The useful part of frank-quake2 is how it fits the game onto an RP2350 anyway: it streams models and skins from flash, uses PSRAM for the rest, and splits rendering between both cores around the HDMI interrupt timing. Anyone building an RP2350 handheld, retro console or video project can learn from the approach, whether or not they ever finish a level. The two video paths are also useful reference code, because the same game drives HSTX on the M2 and PIO on the Z0.
The intended audience is people who already own a FRANK / Murmulator M2 board or a Waveshare RP2350-PiZero with 8 MB of PSRAM. The README names only those two board families. Note that Waveshare's documentation describes the RP2350-PiZero's PSRAM as a reserved pad, so check your board's population before you count on running the port.
On price and availability: the firmware is published as UF2 builds in the public GitHub repository. None of our sources states a price for the software or for the boards it targets. The README calls the project a work in progress. Pending independent testing, treat the 33 fps timedemo and the 30-45 fps gameplay figures as the author's own claims.