A Doom-esque Port To The ATmega328

Doom holds a special place as one of the biggest games of the 1990s, as well as being one of the foundational blocks of the FPS genre. Long before 3D accelerators hit the market, iD Software’s hit was being played on computers worldwide, and later spread to all manner of other platforms. [David Ruiz] decided to build a cutdown version for everyone’s favourite, the ATmega328.

Due to the limited resources available, it’s not a direct port of Doom. [David] instead took some sprites and map data from the original game, and built a raycasting engine similar to that of Wolfenstein 3D. Despite the limited memory and CPU cycles, the basic game can run at between 8-11 FPS. There are fancy dithering tricks to help improve the sense of depth, a simplified enemy AI, and even a custom text library for generating the UI.

It’s a great example of what can be done with a seemingly underpowered part. We’ve seen similar work before, with Star Fox replicated on the Arduboy. A hacker’s ingenuity truly knows no bounds.

 

10 thoughts on “A Doom-esque Port To The ATmega328

  1. With a 1280 or Atmega8515 with external ram, or memory mapped graphics, thjis is perfectly feasible. Doom ran without problems in a 68000/68020. Both with less IPC than any Atmega.

    1. Doom certainly didn’t run well on a 68000. Maybe a few FPS on a 28MHz 68000 as a few A500 accelerators had.
      The Amiga certainly had some Doom clones (Gloom, AB3D, etc) that were limited/optimised by/for the architecture, but even they ran poorly on a base A1200, which was a 68020. ISTR a 50MHz 68030 was the minimum for a good experience, maybe a 28MHz 68020 for a low-detail small-screen DoomAttack run.

      Now there was that RPG with a 3D ‘Wolf3D’ style viewpoint, but even that was quite jerky on the base A500.

      OTOH there are some really optimised ports of Quake/Descent/etc for AGA Amiga nowadays that can run on a 50MHz 68060 without looking rubbish.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.