Hackster is hosting Impact Spotlights highlighting smart energy storage. Start streaming on Thursday!Stream Impact Spotlights on Thursday!

But Can It Run Quake?

Forget Doom, Nicola Wrachien has ported a full implementation of Quake to an Arduino Nano Matter-based handheld with 256KB of RAM.

Nick Bild
21 days agoGaming
Playing Quake on an Arduino Nano Matter board (📷: Silicon Labs)

Software engineers and hardware hackers that want to prove their chops have turned the first-person shooter Doom into a measuring stick of sorts, with the goal being to get the game to run on as small of a hardware platform as possible. Over the years we have seen some impressive projects that managed to get Doom running on everything from a toothbrush to a GPS receiver and a thermostat. It is still a challenge to get the game running on modern embedded systems, but as these devices grow in terms of computational horsepower, it is becoming somewhat easier.

So maybe it is time for a new challenge? A software engineer named Nicola Wrachien thinks so. After getting Doom to run on a SparkFun Things Plus Matter microcontroller development board recently, Wrachien decided to take on a new project that involved porting Quake to a similarly resource-constrained embedded system. For those unfamiliar with the game, Quake was another first-person shooter that followed Doom’s release by a few years. But this time, the game featured improved graphics, better physics, and all sorts of other updates that drive up the system requirements.

The hardware platform used by Wrachien was centered around an Arduino Nano Matter board featuring the MGM240SD22VNA from Silicon Labs. This is a fairly powerful embedded system with impressive specs, but even still, they pale in comparison to the requirements of this late-1990s video game that needed a minimum of 8MB of RAM and a Pentium-class CPU. The Nano Matter, by comparison, comes equipped with 256KB of RAM.

The main board was incorporated into a custom PCB designed by Wrachien that takes the shape of a gamepad and has 16 pushbuttons and a pair of analog thumbsticks. A 320 x 240 pixel Adafruit LCD display was also included, in addition to audio amplifiers and speakers. A pair of 16 MB flash memory chips were leveraged to store the game data.

With the hardware sorted out, Wrachien got started on the port of the source code. This process started with SDLQuake1.09, which allowed for development on a modern Windows-based computer. The next task involved some heavy optimization. Constants, for example, were stored in flash memory instead of RAM to save space. Other optimizations, like using array indexes instead of pointers to array elements, and reducing the size of some of the allocated data types were also implemented. After some work on the display buffer and a number of other optimizations, the code was ready to be ported to the Nano Matter board.

When all was said and done, the full gameplay experience had been implemented. This included the 3D engine, all of the game’s logic, enemy AI, lighting effects, secrets, and teleporters. It took some overclocking of the MGM240SD22VNA to get there, but on average, Quake ran at 27 frames per second.

It looks like the bar has just been raised. Moving forward, we will now have to ask: but can it run Quake?

Nick Bild
R&D, creativity, and building the next big thing you never knew you wanted are my specialties.
Latest articles
Sponsored articles
Related articles
Latest articles
Read more
Related articles