A single Vircon32 cartridge that ports 82
games onto Vircon32's 640x360 GPU, behind one shared game-select menu.
Most originally targeted the TinyJoypad
itself (an ATtiny85 driving a 128x64 SSD1306 monochrome OLED); the rest
come from other small handhelds sharing that same 128x64 SSD1306 display/
button shape but built on a different microcontroller (ESP8266, ESP8285,
or the CH32V003 - a RISC-V chip, not AVR at all, behind the 22-game
"Cate engine" batch from inufuto's own UIAPduino boards)
- see each game's own MCU column in the table below. Vircon32's GPU is a
texture-region blitter with no CPU-writable framebuffer, so every game's
display output is routed
through a 256-tile "column atlas" (one pre-baked texture tile per possible
SSD1306 byte value) instead of writing pixels directly - see
CLAUDE.mdfor the full architecture writeup, porting log, and every bug found along the way.
This port was built with the help of Claude AI (Anthropic) - the shim
layer, every individual game port, bug fixes, and the optimization passes
documented in CLAUDE.md/OPTIMIZATIONS.md were all done through an
AI-assisted development workflow.
Vircon32 is a fantasy console with its own abstract gamepad (D-pad + 6 buttons + Start) - the games in this cartridge only ever use a small part of that:
| Console input | Used for |
|---|---|
| D-pad | Move / navigate the menu |
| Button 1 ("A"/Fire) | Confirm, jump, shoot, rotate, etc. - context-sensitive per game |
| Button 2 ("B") | Secondary action - only Tiny Minez uses this (instant flag-toggle, as an alternative to holding Button 1) |
| Button 3 ("X") | Toggle a pixel-grid overlay on/off - only while a game is actually running (no effect on the menu) |
| Button 4 ("Y") | Toggle sound on/off globally - works on the menu, mid-game, and during the quit-confirmation dialog |
| Start | Pause mid-game and open the quit-confirmation dialog (YES/NO, defaults to NO) |
Which physical keyboard key or real gamepad button maps to which of
these is entirely up to the Vircon32 emulator's own input configuration
(Config-Controls.xml in the desktop emulator, or the equivalent in
whichever emulator/frontend is used) - this cartridge doesn't fix or
assume a specific keyboard layout, the same way a real console game
doesn't. See vircon32.com for the emulator's
own default bindings and how to change them.
This project is GPLv3 (LICENSE.txt), because at least one ported
game (Tiny Invaders v4.2) is itself GPLv3, and combining GPLv3 code into
one cartridge binary makes the cartridge as a whole a GPLv3 combined work.
This covers this project's own new code (the shim layer, the menu,
portVircon32.c, etc.) - each individual game's own original
license/attribution is preserved unmodified in its own header comment in
src/games/, and is also listed per-game in the table below.
Click a thumbnail for the full-size screenshot.
| Game | Author | MCU | License | Save | Source | Screenshot |
|---|---|---|---|---|---|---|
| 2048 | Obono | ATtiny85 | MIT | — | TinyJoypadWorks | ![]() |
| Aerial | Inufuto | CH32V003 | None specified | — | UIAPduino_aerial | ![]() |
| Antiair | Inufuto | CH32V003 | None specified | — | UIAPduino_antiair | ![]() |
| Ardumania | Daniel C | ESP8285 | GPLv3 | ✅ | Tinyjoypad | ![]() |
| Ascend | Inufuto | CH32V003 | None specified | — | UIAPduino_ascend | ![]() |
| Asteroid | Tony M (tonym128) | ESP8266 | GPLv3 | — | ESP8266GameOn | ![]() |
| Astro Barrier | Sean Price | ATtiny85 | GPLv3 | ✅ | attiny astro barrier | ![]() |
| ATtiny Snake | Sean Price | ATtiny85 | GPLv3 | ✅ | attiny snake | ![]() |
| ATtiny Tetromino | Sunpazed | ATtiny85 | GPLv3 | ✅ | attiny tetromino | ![]() |
| Awass | Inufuto | CH32V003 | None specified | — | UIAPduino_awass | ![]() |
| Bat Bonanza | Andy Jackson | ATtiny85 | Non-commercial, with attribution | — | Attiny Arduino Games | ![]() |
| Battlot | Inufuto | CH32V003 | None specified | — | UIAPduino_battlot | ![]() |
| Blocks Gold | Andy Jackson / Jarosław Mazurkiewicz | ATtiny85 | Non-commercial | ✅ | ATtiny Tetris Gold | ![]() |
| Bootskell | Inufuto | CH32V003 | None specified | — | UIAPduino_bootskell | ![]() |
| Breakout | Ilya Titov | ATtiny85 | Non-commercial, with attribution | ✅ | AttinyArcade | ![]() |
| Cacorm | Inufuto | CH32V003 | None specified | — | UIAPduino_cacorm | ![]() |
| Car Race | hoangminh5210119 | ESP8266 | None specified | ✅ | Esp8266OledGame | ![]() |
| Cavit | Inufuto | CH32V003 | None specified | — | UIAPduino_cavit | ![]() |
| Cracky | Inufuto | CH32V003 | None specified | — | UIAPduino_cracky | ![]() |
| DFlight | Tony M (tonym128) | ESP8266 | GPLv3 | — | BFlight | ![]() |
| Dino Game | tiny-handheld project (original) | ATtiny85 | None specified | — | tiny handheld | ![]() |
| Falling Blocks | Andy Jackson | ATtiny85 | Non-commercial, with attribution | ✅ | Attiny Arduino Games | ![]() |
| Flappy Bird | Alex Wulff | ATtiny85 | None specified | — | Instructables | ![]() |
| Four in a Row | Unknown | ATtiny85 | None specified | — | tiny handheld | ![]() |
| Frogger | Andy Jackson (art: @senkunmusashi) | ATtiny85 | Non-commercial, with attribution | ✅ | Attiny Arduino Games | ![]() |
| Gilbert in the Downland | Daniel C | ESP8285 | GPLv3 | ✅ | Tinyjoypad | ![]() |
| Guntus | Inufuto | CH32V003 | None specified | — | UIAPduino_guntus | ![]() |
| Helicopter | Finn Harms (innif) | ESP8266 | GPLv3 | ✅ | Arduino Game System | ![]() |
| HollowSeeker | Obono | ATtiny85 | MIT | — | TinyJoypadWorks | ![]() |
| Hopman | Inufuto | CH32V003 | None specified | — | UIAPduino_hopman | ![]() |
| Impetus | Inufuto | CH32V003 | None specified | — | UIAPduino_impetus | ![]() |
| Jump Slime | Kondolab (近藤さんちの研究室) | ATtiny85 | None specified | — | kondolab | ![]() |
| Laser Pong | Winston Lu | ATtiny85 | MIT | — | ATTiny85 Pong | ![]() |
| Lift | Inufuto | CH32V003 | None specified | — | UIAPduino_lift | ![]() |
| Mazy | Inufuto | CH32V003 | None specified | — | UIAPduino_mazy | ![]() |
| Mazy2 | Inufuto | CH32V003 | None specified | — | UIAPduino_mazy2 | ![]() |
| Meteor Storm | Albert Gonzalez | ATtiny85 | Unlicense (public domain) | — | attiny85 microgame meteor storm | ![]() |
| Mieyen | Inufuto | CH32V003 | None specified | — | UIAPduino_mieyen | ![]() |
| MRunnr | Tony M (tonym128) | ESP8266 | GPLv3 | — | BFlight | ![]() |
| Neuras | Inufuto | CH32V003 | None specified | — | UIAPduino_neuras | ![]() |
| Nohzdyve | Daniel C | ESP8285 | GPLv3 | ✅ | Tinyjoypad | ![]() |
| NumberPlace | Obono | ATtiny85 | MIT | — | TinyJoypadWorks | ![]() |
| Oroboros | Ilya Titov | ATtiny85 | Non-commercial, with attribution | ✅ | AttinyArcade | ![]() |
| Osotos | Inufuto | CH32V003 | None specified | — | UIAPduino_osotos | ![]() |
| Pipe Bird | Ioannis Lampropoulos | ATtiny85 | None specified | ✅ | attiny85 flappy bird | ![]() |
| Road Rush | Tony M (tonym128) | ESP8266 | GPLv3 | — | BFlight | ![]() |
| Run Dude Run | Ilya Titov | ATtiny85 | Non-commercial, with attribution | ✅ | AttinyArcade | ![]() |
| Ruptus | Inufuto | CH32V003 | None specified | — | UIAPduino_ruptus | ![]() |
| SnakeGame85 | terezaza | ATtiny85 | GPLv3 | — | SnakeGame85 | ![]() |
| Space Attack | Andy Jackson | ATtiny85 | Non-commercial, with attribution | ✅ | Attiny Arduino Games | ![]() |
| Stacker | Andy Jackson | ATtiny85 | Non-commercial, with attribution | ✅ | Attiny Arduino Games | ![]() |
| Svellas | Inufuto | CH32V003 | None specified | — | UIAPduino_svellas | ![]() |
| Sword | Inufuto | CH32V003 | None specified | — | UIAPduino_sword | ![]() |
| Tiny Arena | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Arkanoid | Daniel Champagne | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Bert | Daniel C | ATtiny85 | GPLv3 | ✅ | tinyjoypad.com | ![]() |
| Tiny Bike | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Blocks | RobotMasterC | ATtiny85 | None specified | — | TinyTetris | ![]() |
| Tiny Bomber | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Bulls And Cows | Datacute | ATtiny85 | MIT | — | TinyBullsAndCows | ![]() |
| Tiny DDug | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Doc | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Dungeon | Sven B / Lorandil | ATtiny85 | MIT | — | TinyDungeon | ![]() |
| TinY Fi | Kondolab (近藤さんちの研究室) | ATtiny85 | None specified | — | kondolab | ![]() |
| Tiny Gilbert | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Invaders | Daniel C / Sven B | ATtiny85 | GPLv3 | ✅ | Tiny invaders v4.2 | ![]() |
| Tiny Lander | Roger Buehler (tscha70) | ATtiny85 | GPLv3 | — | TinyLanderV1.0 | ![]() |
| Tiny Mania | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Minez | Sven B / Lorandil | ATtiny85 | GPLv3 | — | TinyMinez | ![]() |
| Tiny Missile | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Morpion | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Pacman | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Pinball | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Pipe | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Plaque | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny SQuest | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Trick | Daniel C | ATtiny85 | GPLv3 | — | tinyjoypad.com | ![]() |
| Tiny Tris | Daniel C | ATtiny85 | GPLv3 | ✅ | tinyjoypad.com | ![]() |
| TinyRoG | Kondolab (近藤さんちの研究室) | ATtiny85 | None specified | — | kondolab | ![]() |
| UFO | Ilya Titov | ATtiny85 | Non-commercial, with attribution | ✅ | AttinyArcade | ![]() |
| Wren Rollercoaster | Andy Jackson | ATtiny85 | Non-commercial, with attribution | ✅ | Attiny Arduino Games | ![]() |
| Yewdow | Inufuto | CH32V003 | None specified | — | UIAPduino_yewdow | ![]() |
Vircon32 runs a fixed 15 MHz / 60 fps / 250,000-CPU-cycles-per-frame budget - several ports needed real optimization work to stay under it, mostly the same recurring shape (per-pixel work redone every frame instead of cached, or a self-gated function still costing a full call every time it's invoked). See OPTIMIZATIONS.md for a short per-game summary of what was done.
See Make.sh/Make.bat (requires the Vircon32 dev tools - compile,
assemble, png2vircon, wav2vircon, packrom - on PATH) and
CLAUDE.md for the full architecture and porting notes.


















































































