
Tinyjoypad SDL
A downloadable game for Windows, macOS, and Linux
A native SDL2, SDL3 & Playdate port bringing 82 games behind one shared game-select menu, running as a plain desktop executable - no emulator required. 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.
This port was built with the help of Claude AI (Anthropic) - the platform layer, the dialect conversion, every bug found during the port, and the optimization/verification passes documented in CLAUDE.md/ OPTIMIZATIONS.md were all done through an AI-assisted development workflow.
Running
Identical CLI/behavior on both ports - examples below use the SDL3 binary, substitute TinyjoypadSDL2 (from src/sdl2/build/) for the SDL2 one.
./TinyjoypadSDL3 # opens the menu ./TinyjoypadSDL3 -g "TINY INVADERS" # launches a game directly by title ./TinyjoypadSDL3 -list # prints every game's title, then exits ./TinyjoypadSDL3 -help # full command-line reference
See -help for the complete flag list (window size/fullscreen, -ns to skip audio, -fps for a live FPS overlay, -nd to uncap the framerate, -s to force software rendering instead of the default GPU-accelerated one, -ms to batch-capture a gameplay screenshot of every game, -joy to write a .joy stub file per game for external frontends, and a .joy file itself as a positional argument to launch straight into that game).
Controls
| Action | Keyboard | Gamepad |
|---|---|---|
| Move / navigate menu | Arrow keys | D-pad or left stick |
| Fire / confirm / A | X | South button (A on Xbox) |
| Fire2 / B (only Tiny Minez - instant flag toggle) | C | East button (B on Xbox) |
| Start / pause / quit-confirmation dialog | Escape | Start or Back |
| Cycle glow / CRT scanlines / pixel-grid effect | G | West button (X on Xbox) |
| Toggle fullscreen | F3 | - |
| Volume down / up | PageDown / PageUp | Left/Right shoulder |
| Mute / unmute sound | S | North button (Y on Xbox) |
The quit-confirmation dialog (Start, mid-game) freezes the current game and asks YES/NO before returning to the menu - unless the game was launched directly (-g <NAME> or a .joy file), in which case there's no menu to return to, so Start quits the app immediately instead, with no dialog. The glow/CRT/pixel-grid cycle is a single button stepping through 5 combinations (none → pixel-grid+glow → pixel-grid → CRT scanlines → glow alone → back to none) and only has any visible effect during actual gameplay, not on the menu screen. Fullscreen/volume/ mute work everywhere (menu and in-game) and are logged to the console on every change, since there's no on-screen indicator for them; -f/-ns on the command line still cover fullscreen/no-sound at launch time.
Games
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 |
|
Credits
- tinyjoypad_vircon32 - the original Vircon32 port this project is itself ported from: every game's own C logic (
src/gameworld/games/), already ported once from the original ATtiny85 sources and already bug-fixed through its own extensive play-testing history, was carried over here essentially unchanged - only a mechanical dialect conversion (seeCLAUDE.md) touched it to make it build as standard C instead of Vircon32's own restricted dialect. This project's own platform layer (SDL3/SDL2/ Playdate) is new; the game code underneath it is not. - Vircon32 - the fantasy console the game logic here was originally ported through. This project's own menu/ dialog text is drawn with a faithful reproduction of Vircon32's real BIOS font (
src/gameworld/biosFont.h- 10x20px, codepage 1252, all 256 glyphs extracted directly from the actual BIOS font asset, not hand- transcribed), authored by Carra (Vircon32's own author) and published on OpenGameArt.org as "Pixel Art Outlined Text Fonts" under CC-BY 4.0 - a separate license from this project's own GPLv3 below; this credit is that license's own attribution requirement. crisp-game-lib-portable-sdl(same author, a different game collection) - the source of theCInputkeyboard/gamepad abstraction, the single- voice audio oscillator shape, the original inspiration for the glow/ CRT/pixel-grid presentation effects, and (for the SDL2 and Playdate ports) the direct API-porting reference - seeCLAUDE.mdfor exactly where each was reused versus redesigned.- Every individual game's own original author/license is preserved unmodified in its own header comment under
src/gameworld/games/and listed per-game in the "Games" table above.
License
This project is GPLv3 (LICENSE.txt), for the same reason: at least one ported game (Tiny Invaders v4.2) is itself GPLv3, and combining GPLv3 code into one executable makes the whole executable a GPLv3 combined work. This covers this project's own new code (both the SDL3 and SDL2 platform layers, the shared menu, the presentation effects) - each individual game's own original license/attribution is preserved unmodified in its own header comment in src/gameworld/games/.
| Published | 2 days ago |
| Status | Released |
| Platforms | Windows, macOS, Linux |
| Author | joyrider3774 |
| Made with | SDL, Playdate |
| Tags | minigames, Playdate, Retro, sdl |
| Average session | A few minutes |
| Links | Source code |
| AI Disclosure | AI Assisted, Code, Graphics |























































































Leave a comment
Log in with itch.io to leave a comment.