Skip to content

Repository files navigation

TinyJoypad → Vircon32

DownloadCountTotal DownloadCountLatest LatestVersion License

Menu screenshot

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.md for 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.

Controls

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.

License

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.

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

Optimizations

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.

Building

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.

About

A Port of the attiny85, esp8265, ... + ssd1306 oled screen games like Tinyjoypad and other games to the vircon32 fantasy console

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages