"NOVA Gameboy" is a custom-built, retro-inspired handheld console powered by the STM32F401 "Black Pill" and written entirely in 32-bit ARM Assembly.
Featuring a vibrant 2.8" TFT display, physical gamepad input, and a sleek in-system game launcher, it brings classic games like Snake, Pong, and Space Shooter to life with bare-metal performance and pixel-accurate graphics.
Engineered without an OS or high-level libraries, this project is a full demonstration of real-time embedded systems, showcasing manual hardware control, modular game architecture, and smooth 2D renderingโall running directly on the ARM Cortex-M4.
Itโs not just a consoleโitโs a hands-on journey into the world of low-level game development and embedded design.
Click on any game below to go to their corresponding repo.
| Component | Specification |
|---|---|
| MCU | STM32F401RCT6 (Black Pill โ ARM Cortex-M4 @ 84 MHz) |
| Debugger | ST-Link V2 (for programming and debugging) |
| Display | ILI9341 (2.8" TFT LCD โ parallel interface) |
| Breadboards | 80-pin and 40-pin solderless breadboards |
| Input | Push buttons and switches (physical GPIO input) |
| Wiring | Jumper wires (male-to-male and male-to-female) |
| Resistors | Assorted values (used for pull-up/pull-down configs) |
| Audio | Passive buzzer (for simple sound output) |
Here's an overview of the wiring and breadboard layout for this project:
- Programming Language: 32-bit ARM Assembly
- IDE: Keil ยตVision
- Toolchain: Keil ARM Compiler
- Display Interface: GPIO (FSMC or bit-banged parallel)
- Input Interface: GPIO with polling or interrupt support
- ๐ฎ Dual-player gamepad input system with independent controls
- ๐ Menu-driven multi-game launcher with instant switching
- ๐ผ๏ธ Custom 2D graphics engine with pixel-perfect rendering
- ๐จ Sprite and UI engine for smooth animation and effects
- ๐งฉ Modular architecture with isolated game modules
- ๐ Seamless in-game switching without system reset
- โฑ๏ธ Hand-tuned delay and timing routines for consistent gameplay
- โ๏ธ Direct register-level control for all hardware I/O
- ๐ง Fully bare-metal with zero OS or high-level libraries
- ๐งช Expandable design for future games and features
Set up and play in just a few steps:
Download the project by cloning this repository:
git clone https://github.com/gameboy-nova/nova-main.gitLaunch Keil ยตVision, then open the (Gameboy.uvprojx) and you will be greeted with this window.
Click the Build button to compile the project using the Keil ARM Compiler.
Plug the STM32F401RCT6 (Black Pill) into your PC using the ST-Link V2 programmer.
Use the Flash button to upload the compiled binary to the STM32 via ST-Link.
After flashing, the console boots into the game launcher. Use the physical push buttons to navigate and play!






