Close
0%
0%

Yes, Arduino Nano ESP32 can play Doom!

Create your handheld gaming console using an Arduino Nano ESP32 and play Doom on the go.

Public Chat
Similar projects worth following
We have successfully ported Doom and achieved acceptable performance on an Arduino Nano ESP32. The game is playable at an average frame rate of 34 FPS with a resolution of 320x240 pixels. The device is compact, lightweight, and user-friendly. It also has a retro and nostalgic appeal, as it recreates the original DOOM experience on modern hardware.

Doom is a classic first-person shooter game developed and published by id Software in 1993. The game is set in a futuristic sci-fi world, where the player takes the role of a space marine who must fight his way through hordes of demons from Hell. Doom is regarded as one of the most influential and popular games ever, spawning numerous sequels, spin-offs, and adaptations. Many gamers who grew up in the 1990s feel nostalgic about playing DOOM when they were younger.

Doom was primarily developed in the C programming language, with a few components written in assembly language. The developers used NeXT computers running the NeXTSTEP operating system. The game's level and graphical data were stored separately from the engine in WAD files, which stands for "Where's All the Data?". This enabled easy modification of the design without altering the engine code.

The original DOOM game required at least 4MB of RAM and 20MB of disk space, which are much larger than the typical microcontroller specifications. To port the game, some compression and optimization techniques are needed to fit the game data and code into the microcontroller's flash memory and RAM and some modifications and adaptations are needed to make the game engine run on a different platform and architecture, such as an ESP32 or RP2040 chip. However, these changes may introduce some errors or differences in the game's behavior and performance, which may affect the gameplay experience.

  • 1 × Arduino Nano ESP32
  • 1 × Adafruit 2.8 TFT Touch Shield
  • 1 × M5Stack Joystick Unit
  • 1 × Seeed Studio Grove - Dual Button
  • 1 × ArduEZ ONE Stackable Breadboard

View all 7 components

  • 1
    Hardware Selection

    The main objective of this project is to demonstrate the feasibility and performance of running DOOM on a microcontroller with limited resources and capabilities. In this project, we have ported the classic DOOM game on an Arduino Nano ESP32 and used an Adafruit 2.8" TFT display shield, an M5Stack Joystick unit, and Seeed Grove Dual buttons to make it a handheld gaming console.

  • 2
    Connection

    The Adafruit TFT display shield is connected to the Arduino Nano ESP32 via the SPI interface using jumper wires and a stackable breadboard shield.

    The Arduino Nano ESP32 is placed at the back of the breadboard shield, on top of the stack.

    The Joystick and buttons are connected via I2C and GPIO connections respectively, using a male jumper to Grove 4-pin conversion cable. The connection diagram is given in the Schematics section.

  • 3
    Setup development environment

    Although we will compile the firmware on macOS, the workflow is similar for other operating systems. First, we need to download and install the ESP-IDF development framework

    $ mkdir ~/Nano_ESP32_DOOM
    $ cd ~/Nano_ESP32_DOOM
    $ git clone -b release/v4.4 https://github.com/espressif/esp-idf
    $ cd esp-idf
    $ ./install.sh
    $ source export.sh

     Now we can clone the Retro-Go repository

    $ cd ~/Nano_ESP32_DOOM
    $ git clone https://github.com/ducalex/retro-go
    $ cd retro-go

View all 9 instructions

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates