Homebrew developers figured out how to run DOOM on the Neo Geo

The Neo Geo doesn't have a frame buffer, but that didn't stop developers from finding three different ways to get DOOM running on SNK's hardware.

Homebrew developers figured out how to run DOOM on the Neo Geo

Homebrew developers have successfully ported actual DOOM map geometry to the SNK Neo Geo. The project solves a long-standing technical hurdle regarding how the arcade hardware processes images. Just six weeks after Modern Vintage Gamer published a video explaining why running the 1993 shooter on the system was nearly impossible, the community responded with three distinct rendering solutions. I love when the collective audience sees a "this can't be done" declaration as a direct challenge.

The core issue comes down to how SNK designed the hardware. "The Neo Geo does not have the concept of a frame buffer, which means that everything that you see on the screen on a Neo Geo is rendered as a sprite," MVG explains in his latest analysis.

Previous homebrew attempts relied on raycasting engines. Raycasters work well for drawing flat grids of square blocks, but they force all walls to sit at right angles. DOOM requires a much more complex engine to handle varying floor heights, staircases, and angled walls. Real DOOM code expects to plot pixels directly to a frame buffer.

Faking a frame buffer

The first new approach comes from developer Frankle IS with a port called Doom 64KB. This version uses the Neo Geo's fixed text layer as a makeshift frame buffer. Games typically use this fixed layer to display static HUD elements and score counters. By writing pixels directly to this layer, the engine runs completely unmodified E1M1 map geometry. The catch is the resolution. The game runs at a very chunky 38 by 28 blocks.

Doom 64KB running at a very low 38x28 resolution using the fixed layer.
Doom 64KB running at a very low 38x28... - Modern Vintage Gamer - YouTube.com

Developer Sabino took this concept further by building a micro frame buffer entirely out of sprites. Sabino's engine takes the hardware sprite scaler and shrinks the output down to tiny 4x4 blocks. The engine then tiles the entire screen with these blocks and treats each one as a single pixel. This method pushes the resolution up to 80 by 56.

Sabino's sprite micro frame buffer version showing significantly higher detail.
Sabino's sprite micro frame buffer version... - Modern Vintage Gamer - YouTube.com

The V-Slice renderer

The most advanced solution is a project called DOOM-NG by developer Retro Ports. Instead of brute-forcing a tiny frame buffer, this engine splits the workload between the CPU and the hardware sprite scaler.

The math behind this is clever. The stock 12 MHz Motorola 68000 CPU walks the original DOOM BSP tree every frame to calculate visibility. Once the CPU knows what is visible, the Neo Geo's hardware sprite scaler draws the textured wall columns. There is absolutely no per-pixel software rasterization happening on the CPU.

Doom NG demonstration showing complex map geometry and free-roam movement.
Doom NG demonstration showing complex map... - Modern Vintage Gamer - YouTube.com

"It keeps the hardware scalar to draw all the pixels, so there's no frame buffer, and there is no per-pixel CPU work," MVG notes. The engine uses pre-baked lookup tables for floors and ceilings to keep the math fast. It also utilizes a haze effect to dynamically pull back the draw distance in wide-open areas to maintain performance.

To comply with copyright rules, the DOOM-NG repository contains no id Software assets. Users have to supply their own WAD file. The build pipeline then generates all the necessary textures, sprites, and lookup tables locally.

Hardware overhead

These engines are still in active development. Frame rates drop when the screen fills with complex geometry, but the underlying rendering logic works on unmodified 1990s arcade hardware.

There is also a hardware solution on the horizon. The upcoming Neo Geo AES Plus console revision is currently on track for a November 2026 release. This new hardware includes overclocking options. Giving these custom engines a faster CPU might be exactly what they need to hit a stable frame rate.

Getting a Motorola 68000 to walk a BSP tree is an impressive hack. It proves there is always a workaround when developers stop playing by the original hardware rules.