← selected work

Low-level systems

Plants vs. Zombies — Bare-Metal ARM Engine

2023

A full PvZ game rendered straight to a raw framebuffer — no graphics library, on an ARM SoC.

  • C++
  • ARM
  • raw framebuffer
  • software rasterizer
  • collision detection
graphics stack
zero libraries
target
bare-metal ARM

/ the problem

Build a real-time game with nothing underneath you — no OS graphics stack, no SDL, no OpenGL. On a bare-metal ARM target you own everything from the pixel buffer up: drawing, sprites, collision, and frame timing.

/ approach

  • Rendered the entire game to a raw memory-mapped framebuffer — every sprite blitted pixel-by-pixel with a hand-written software rasterizer
  • Tile grid, plants, projectiles, and zombies drawn with transparency/masking, no graphics library involved
  • Collision detection between plants, projectiles, and zombies driving the game state
  • Input handling and a game loop with manual frame pacing on the ARM SoC

/ results

  • A playable Plants vs. Zombies clone running on bare-metal ARM, rendered straight to the framebuffer
  • Full plant / projectile / zombie systems with win-and-lose game states

/ architecture

Input
game loop (state machine, collision)
software rasterizer
memory-mapped framebuffer
display.

/ media

Plants vs. Zombies running on the ARM SoC — the game rendered directly to the display's framebuffer

/ links