Gamebuino Classic games ported to vircon32 selectable in one convient menu

A Vircon32 cartridge that ports 99 games from the Gamebuino Classic library (an Arduino-based handheld with an 84x48 Nokia 5110/PCD8544 monochrome display and 7 real digital buttons) behind one shared game-select menu - the same overall shape as the sibling tinyjoypad_vircon32 project, reusing its menu system and column-atlas rendering trick, adapted for Gamebuino Classic’s own smaller display and genuinely-classed, real-framebuffer API instead of TinyJoypad’s byte-stream one.
Vircon32’s GPU is a texture-region blitter with no CPU-writable
framebuffer, so display output is routed through a 256-tile “column atlas”
(one pre-baked texture tile per possible PCD8544 byte value) instead of
writing pixels directly - see CLAUDE.md for the full architecture
writeup.
This port was built with the help of Claude AI (Anthropic), directly
reusing the methodology and much of the shared infrastructure already
proven in the sibling tinyjoypad_vircon32 project.
| Console input | Used for |
|---|---|
| D-pad | Move / navigate the menu |
| Button A | Confirm / Gamebuino’s own Button A |
| Button B | Gamebuino’s own Button B |
| Button X | Gamebuino’s own Button C |
| Button Y | Toggle sound on/off globally - works on the menu, mid-game, and during the quit-confirmation dialog |
| Button L | Toggle a pixel-grid overlay on/off - only while a game is actually running (no effect on the menu) |
| Button R | Toggle real solid-gray rendering on/off - GB_GRAY normally renders as real hardware’s own flickering checkerboard dither; this shows it as a real, solid, flat gray instead. Works globally (menu, mid-game, dialog) like the mute toggle above, though it’s only visible in games that actually draw GB_GRAY content |
| Button 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 up to the Vircon32 emulator’s own input configuration - this cartridge doesn’t assume a specific keyboard layout.
This project is GPLv3 (LICENSE.txt): several of the games shipped in
this cartridge (Agaruino, CrazyCar, Shufflepuck Cafe, Taquin) are
themselves 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) - 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.
Known concern: Firemen’s own upstream LICENSE.md says only “GPL V2”,
with no “or later version” clause found - GPLv2-only code is not
license-compatible with GPLv3 the way every other GPL’d game in this
cartridge (all GPLv3) is, so combining it into this same GPLv3 binary as-is
is a real, unresolved licensing conflict, not just a compatible-license
bookkeeping detail. Flagged here rather than silently ignored; not yet
resolved.
Every game below is a real, faithful port of its actual upstream C/C++
source - not a rewrite. The same handful of translation patterns recur
across almost all 99, since this dialect (see VIRCON32_C_DIALECT.md)
diverges from standard C/C++ in a few consistent ways:
struct plus
functions taking an explicit pointer (or array index, for games with
multiple instances like bullets/enemies).gb.titleScreen()/
gb.menu()-style blocking calls become named states in a flat
switch/if-else chain, since a game may only run one gbUpdate()/
gbRenderFrame() pair per engine tick.a ? b : c becomes an explicit
if/else.B01011010
binary literals to hex where needed, with element counts checked
against each bitmap’s own declared size rather than hand-transcribed.==0xFFFF/
==0xFFFFFFFF) before trusting a value read off a blank card, matching
real hardware’s own factory-erased state.int is always a full 32-bit word (no 8/16-bit narrowing or
wraparound), so anywhere real upstream code relied on that - especially
composed EEPROM values - was traced through and fixed if the two
platforms would actually diverge.playTick()); this port has no noise waveform at
all, so a noise-flagged step plays as a plain tone at the same pitch/
duration instead. Each game also gets its own short, unique global/
function name prefix to keep 99 games’ worth of C code collision-free in
one shared build.Click a thumbnail for the full-size screenshot. Every game here runs on the same real Gamebuino Classic hardware (an ATmega328 driving an 84x48 PCD8544/Nokia 5110 display). In the cartridge’s own menu, a handful of titles are shown in red text instead of white - a plain visual “known unfinished” warning (e.g. missing scoring/win-lose conditions, built from a genuinely incomplete upstream source, or a known bug like a ball that can get stuck). They’re still fully selectable and playable like any other game, just flagged.
The table also includes Sound Test, which uses the same red-text
flagging but for a different reason: it’s not a ported game at all, just
an in-cartridge diagnostic tool for exercising the sound shim’s own
primitives directly (playOK()/playCancel()/playTick(), a raw pitch
sweep, and a few instrument/volume/slide extras).
| Game | Author | License | Save | Source | Screenshot |
|---|---|---|---|---|---|
| 101 Starships | Zoglu | None | — | zoglu.net (no stable link) | ![]() |
| A to K | Carlos Mari | CC-BY 4.0 (+ no-selling note) | ✅ | carloslabs.com (no stable link) | ![]() |
| Aerial-Assault | SkylarHylar | None | — | Strike Down | ![]() |
| Agaruino | ogbaba | GPLv3 | — | Agaruino | ![]() |
| Aimbuino | Baptiste Pouget (hosted under ogbaba’s account) | GPLv3 | ✅ | Aimbuino | ![]() |
| Another 2048 | grafMakulaDer2te | None | — | another2048 | ![]() |
| Armageddon | wuuff | GPLv3 | ✅ | armageddon | ![]() |
| Artillery | Frakasss | None | — | Artillery | ![]() |
| Asterocks | Yoda Zhang | None | ✅ | yodasvideoarcade.com | ![]() |
| AsteroidRipper | ripper121 | None | — | Recovered via direct download (no stable link) | ![]() |
| B-Rally | scmar | MIT | ✅ | B Rally | ![]() |
| Bang! Bang! | RackhamLeNoir | GPLv3 | — | gamebuino bangbang | ![]() |
| BigBlackBox | STUDIOCRAFTapps | Custom (non-commercial, keep credit - see source) | ✅ | akkera102 08 gamebuino | ![]() |
| Blob Attack | LudumDareDevelopment | None | ✅ | Blob Attack | ![]() |
| Blockdude | Sorunome | None | ✅ | blockdude gamebuino | ![]() |
| BlocksBuino | frthery | None | — | BlocksBuino | ![]() |
| Bomber | Clement83 | None | — | Bomber | ![]() |
| Breakout Ripper | ripper121 | None | — | Recovered via direct download (no stable link) | ![]() |
| Bub | smogheap | GPLv3 | ✅ | smogheap.github.io/bub | ![]() |
| Castle Defence | kh9282 | None | ✅ | CastleDefence | ![]() |
| Catcher | qubist | None | — | Gamebuino Catcher | ![]() |
| Community RPG | Sorunome | None | — | gamebuino community rpg | ![]() |
| Conduit | adekto | MIT | — | conduit | ![]() |
| Copter | Clement83 | None | — | Copter | ![]() |
| CopterStrike | Frakasss | None | — | CopterStrike | ![]() |
| Crabator | Rodot | None | ✅ | Crabator | ![]() |
| CrazyCar | Baptiste Pouget | GPLv3 | — | CRAZYCAR Gamebuino | ![]() |
| CrazyTown | Clement Quintard | None | ✅ | CrazyTown | ![]() |
| Cruiser | Michael Specht | None | — | cruiser | ![]() |
| Dark Tower | Marcus Hutchings | GPLv3 | — | DarkTower | ![]() |
| DarkShmup | Clement83 | None | — | DarkShmup | ![]() |
| DeathMaze | msevilgenius | None | ✅ | Recovered via direct download (no stable link) | ![]() |
| Descent into Hell | etienne72230 | None | ✅ | DescentIntoHeel | ![]() |
| Digger | scmar | None | ✅ | Digger | ![]() |
| Elventure | trodoss (original, TEAM a.r.g.) / wuuff (Gamebuino port) | GPLv3 | — | Elventure | ![]() |
| Fifteen | Tnxec2 | None | ✅ | fifteen | ![]() |
| FireBuino! | LADBSoft | LGPLv3 | ✅ | makerbuino firebuino | ![]() |
| Firemen | Vicking69 | GPLv2 | ✅ | firemen | ![]() |
| Flappy Birdo | Forklift5 | None | ✅ | FlappyBirdo | ![]() |
| Footlol | Baptiste Pouget (hosted under ogbaba’s account) | GPLv3 | — | FOOTLOL Gamebuino | ![]() |
| Gamebuino2048 | Josiah Winslow | None | ✅ | Mediafire (no stable link) | ![]() |
| Gemgem | Tnxec2 | None | ✅ | gemgem gamebuino | ![]() |
| GlaciGlaca | Clement83 | None | — | GlaciGlaca | ![]() |
| Gruniozerca | Arkadiusz Kaminski (arhneu) | Unlicense | ✅ | gruniozerca gamebuino | ![]() |
| Invaders | Yoda Zhang | None | ✅ | yodasvideoarcade.com | ![]() |
| Jezzball | RackhamLeNoir | GPLv3 | ✅ | gamebuino jezzball | ![]() |
| Kill Race | Yoda Zhang | None | ✅ | yodasvideoarcade.com | ![]() |
| Lander | Yoda Zhang | None | ✅ | yodasvideoarcade.com | ![]() |
| Lights Out AD | 94k | WTFPL | — | Recovered via direct download (no stable link) | ![]() |
| Maruino | ajsb113 | None | — | Dropbox (no stable link) | ![]() |
| Master Kebab | ogbaba | GPLv3 | ✅ | RMKebab | ![]() |
| Maze | Andy O’Neill | MIT | — | gamebuino maze | ![]() |
| microHexagon | valdenthoranar | None | ✅ | microhexagon | ![]() |
| Minesweeper | dirksteindorf | None | — | Gamebuino Minesweeper | ![]() |
| Mole Control | grafMakulaDer2te | None | — | mole control | ![]() |
| MotoCross | Clement83 | None | — | MotoCross | ![]() |
| MyRPG | Frakasss | None | — | MyRPG | ![]() |
| No Name Platform Game | Frakasss | None | — | NoNamePlatformGame | ![]() |
| Paqman | Yoda Zhang | None | ✅ | yodasvideoarcade.com | ![]() |
| Parachute | Jicehel | None | — | Parachute Gamebuino | ![]() |
| PetitMonstre | Clement83 | None | — | PetitMonstre | ![]() |
| PinBall | Clement83 | None | — | pinBall | ![]() |
| Pong 2017 | yawn-g | None | — | pong 2017 | ![]() |
| Pong Local Multiplayer | qubist | None | — | Gamebuino PongLocalMultiplayer | ![]() |
| Pong Solo | Aurelien Rodot | LGPLv3 | — | Gamebuino Classic examples | ![]() |
| Punkt | Andy O’Neill | MIT | ✅ | gamebuino punkt | ![]() |
| Ralph | Clement83 | None | — | Ralph | ![]() |
| Robot | Frakasss | None | — | Robot | ![]() |
| Save Princesse | Clement83 | None | — | SavePrincesse | ![]() |
| Senet | Maximilian Timmerkamp | Apache 2.0 | — | Recovered via direct download (originally hosted on Bitbucket, no stable link) | ![]() |
| shipwrek | yawn-g | None | — | shipwrek | ![]() |
| ShootBuino | frthery | None | ✅ | ShootBuino | ![]() |
| Shufflepuck Cafe | AWOT83 | GPLv3 | — | Gamebuino Shufflepuck cafe | ![]() |
| Simonbuino | Jerom (Forklift5) | None | — | Simonbuino | ![]() |
| Skibuino | Mike Del Pozzo | GPLv3 | ✅ | skibuino | ![]() |
| Smash-and-Crash | Skyrunner65 | None | — | Smash and Crash | ![]() |
| Snake 5110 | Lady Awesome & MakerSquirrel | CC-BY-SA 2018 / GPLv3 (unresolved conflict, see source) | ✅ | Gamebuino Classic Snake 5110 | ![]() |
| Snake ABC | frthery | None | — | SnakeAbcBuino | ![]() |
| Snake Classic | Ripper121 (original), Tnxec2 (fork) | None | — | snake gamebuino classic | ![]() |
| Sokobuino | martinsustek | None | ✅ | Recovered via direct download (no stable link) | ![]() |
| Solitaire | Andy O’Neill | MIT | ✅ | gamebuino solitaire | ![]() |
| Sound Test | willems davy | GPLv3 (this project’s own code) | — | Not a ported game - a sound-shim diagnostic tool, see above | ![]() |
| Spin Spin Spinbuino! | Charly Piva “Zoglu” / Margot Piva “Isil” | None | ✅ | zoglu.net (no stable link) | ![]() |
| Star Honor | Wenceslao Villanueva Jr (original) / wuuff (Gamebuino port) | MIT | — | StarHonor | ![]() |
| StickFighter | Clement83 (art by Quirby64) | None | — | StickFighter | ![]() |
| Stijn’s Pong | Stijn Caerts | MIT | — | Gamebuino (StijnCaerts) | ![]() |
| Stijn’s Snake | Stijn Caerts | MIT | — | Gamebuino (StijnCaerts) | ![]() |
| Super Crate Buino | Aurelien Rodot | None | ✅ | Super Crate Buino | ![]() |
| Super Space Shooter | msevilgenius | None | — | Gamebuino SuperSpaceShooter | ![]() |
| T-Rex Quest | Awot83 | GPLv3 | — | Gamebuino TREX QUEST | ![]() |
| Taquin | RackhamLeNoir | GPLv3 | — | gamebuino taquin | ![]() |
| Tetrino | j0ff | MIT | — | tetrino | ![]() |
| Thunder Shoot | Awot83 | GPLv3 | — | Gamebuino Thunder Shoot | ![]() |
| Tron | Clement83 | None | — | Tron | ![]() |
| UFO Race | Rodot | None | ✅ | UFO Race | ![]() |
| Under the Tower | wuuff | GPLv3 | ✅ | under the tower | ![]() |
| Video Poker | Mike Del Pozzo | GPLv3 | ✅ | videopoker gamebuino | ![]() |
| World’s Hardest Game | Sorunome | None | ✅ | Worlds Hardest Game Gamebuino | ![]() |
| Xonix | Tnxec2 | None | — | xonix gamebuino | ![]() |
| ZombiEscape | Frakasss | None | — | ZombiEscape | ![]() |
gamebuinoShim.h/.c
reproduces its real API (buttons, display, sound) on top of Vircon32, and
its own real font5x7/font3x5/font3x3 bitmap fonts are ported
verbatim for text rendering.src/games/ for
its own license and full credit.