The toughest problem in this build is display speed. SPI writes are too slow for a handheld that plays games, and the maker has already worked out the answer: a parallel 8080-16P connection, planned but not yet wired up. Getting there has meant some serious low-level work on the software side, and that is where the project really shines.
The prototype itself is refreshingly honest. It lives on a perfboard with an ESP32 S3, a 3.5 inch 320x480 SPI display, and tactile pushbuttons, with a four-button directional pad on the left and two action buttons on the right. The maker is a student on a tight budget, so most parts are cheap modules from friends; the screen was the only purchase. A red status LED sits on the ESP32 board.
The software is the standout. Instead of leaning on LVGL, the maker built a custom rendering system on esp-idf with minimal libraries. A separate compiler turns game code into binaries, and a small virtual machine inside the ESP32 interprets them, pulling assets, metadata and instructions from an SD card into RAM. A hardware abstraction layer with permanently assigned function IDs keeps binaries working across builds. Both cores are used, screen handling split from input and game logic, and screen writes got faster through dirty rectangles, sram partitioning and a partial framebuffer. It boots, navigates a menu of seven options, and runs Tetris with chiptune audio, the score climbing to 307 in the demo.
Open items remain: DMA transfers to the display have not worked yet, the VM can only load what partitioned RAM allows so chunking is planned, and plenty of 64-bit data types still need cleaning up. It is an unfinished project shared for feedback, and a promising one.