Four coordinated changes so /games is more than a C64 portal.
1. Schema migration: c64_games → platform_games
- Single
platform_gamestable keyed by(platform, slug). Holds titles for every emulated system on the site instead of a new table per machine. - All six existing C64 titles and seven recorded plays were copied over with their ids intact; the old
c64_games/c64_game_playstables are left in place as a rollback seat. - Routes:
/games/{platform}serves any platform's shelf (C64, Atari 2600, ZX Spectrum, Atari 5200, MEGA65). Old admin URLs/admin/games-c64redirect to the unified/admin/games. - Controllers:
GameC64Controller+C64Gamemodel deleted in favour ofPlatformGameController+PlatformGame.
2. New EmulatorJS cores installed
- Atari 2600 (stella2014) — 4.4 MB WASM. File-exchange
.a26/.binlaunches route here. - Atari 5200 (a5200) — 3.4 MB WASM. Catches
.a52. - ZX Spectrum (fuse) — 5.2 MB WASM. Catches
.z80/.sna/.tzx/.szx/.rzx. FileController::launchEmulatornow maps file extensions to platform slugs and emits anX-Emu-Platformresponse header so the launching JS knows which EJS_core to set.- Atari 8-bit (400/800/XL/XE) deferred. The EmulatorJS CDN doesn't ship an
atari800_libretroWASM build and the libretro buildbot only publishes whole-RetroArch 7z bundles. When an official build lands — or we stand up an emscripten toolchain to build from source — it's a drop-in.
3. /games is now a cartridge case
The old /games was three identical cards pointing at the terminal mini-games. Now it's three stacked sections:
- Emulator shelves — one horizontally-scrollable strip per platform with an active title. Each cart card has a media-type accent (cartridge gets a chunky top cap, disk gets a left spine, tape gets horizontal reel lines, ROM/PRG their own edges).
- Terminal games — Guess the Byte, Retro Trivia, Hangman, and the Door Games entry card.
- High-score tables for the three terminal games, unchanged.
4. MEGA65 via xemu
- New player page at
/emulators/mega65running xemu's emscripten WASM build (28 MB acrossxmega65.js/.wasm/.data, shipped from/assets/xemu/mega65/). - Not a libretro core — has its own loader path, independent of EmulatorJS.
- HYPPO / KickStart / BASIC 10 come baked into xemu's emscripten
.data, so the page boots to the MEGA65 ready prompt without any ROM upload. - Flagged "experimental" on the page itself: audio glitches and a couple of menu quirks survive from upstream.
- MEGA65 is listed in
PlatformGame::PLATFORMSso game rows for it surface on/games— but clicking the card sends you to the xemu standalone page (no ROM loading via credits flow yet; xemu doesn't share the EmulatorJS gameUrl pipeline).
Admin-side: Platform Games under the admin subnav replaces C64 Games. The create form now has a platform dropdown and the accepted-file-extension set narrows accordingly. The "Copy to Games" button on an approved file upload still works for C64 disk images and is extendable per-platform once the admin UI grows that affordance.
. __ ____ ___ ____ _ _
/ /_| ___| / _ \___ \(_)___| |__
| '_ \___ \| | | |__) | / __| '_ \
| (_) |__) | |_| / __/| \__ \ | | |
\___/____/ \___/_____|_|___/_| |_|
D2sk - Sysop