Attribution
GenX-DOS bundles third-party emulators, libraries, system ROMs, and visual assets. This file is the canonical record of those components and the terms under which they are redistributed.
It is maintained alongside CHANGELOG.md: whenever a new emulator, BIOS, ROM, bezel, font, or other asset is added or replaced, an entry is added here.
The summary list in README.md is a quick-reference; this file is the authoritative version.
Site code
- DOS terminal, virtual filesystem, and 12×12 CP437 font sprite system
— by Mike, who wrote it informally for LGR — Lazy Game Reviews
(Clint Basinger, https://www.lazygamereviews.com). LGR's own site
metadata credits Mike —
<meta name="Generator" content="Mike">and<meta name="Originator" content="Mike's brain -- thanks, Mike!">. The interactive prompt underprompt/, thefs.jsvirtualC:drive layout, the command dispatcher, and the CP437 sprite font and renderer originate from LGR-DOS (the "LGR-DOS Command Prompt"), LGR's in-browser DOS-prompt project. GenX-DOS extends that base. - AMIBIOS POST animation, emulator integration wrappers, menu tree, and all bundled-emulator-specific code — © Retro-Jack. Original work added on top of the LGR terminal base.
- Retro-Jack's original work (above) is licensed CC BY-NC 4.0 — see
LICENSE.TXT. The LGR terminal base is explicitly excluded from that licence and stays under LGR's own terms: source-available, with a clear credit to the LGR base required in any derivative work.
Emulators
Each bundle directory contains the upstream LICENSE or COPYING file where
one was provided. Build recipes for self-compiled WASM bundles live with their
bundle (systems/odyssey2/build.sh, systems/cpc/BUILDING-WASM.md); atari800's
build-wasm.sh lives in the Retro-Jack/atari800
fork rather than the bundle.
| Bundle directory | Upstream project | Author(s) | Licence |
|---|---|---|---|
systems/apple1/ |
apple1js | whscullin | MIT |
systems/apple2/ |
apple2js | whscullin | MIT |
systems/bbcmicro/, systems/bbcmaster/ |
jsbeeb, built from the Retro-Jack/jsbeeb fork (same engine in two bundles — the Micro bundle boots Model B, the Master bundle boots model=Master; local changes in the fork's GENX-CHANGES.md) |
Matt Godbolt | GPL-3.0-or-later |
systems/electron/ |
ElkJS | Darren Coles (6502 core ported from Tom Walker's Elkulator) | © Darren Coles 2013 (no SPDX header in source) |
systems/jsnes/ |
EmulatorJS + FCEUmm libretro core | EmulatorJS team; libretro/libretro-fceumm | GPL-3.0 (EmulatorJS), GPL-2.0 (FCEUmm) |
systems/stella/ |
EmulatorJS + Stella (stella2014) libretro core |
EmulatorJS team; stella-emu / libretro | GPL-3.0 (EmulatorJS), GPL-2.0 (Stella) |
systems/js7800/ |
EmulatorJS + ProSystem (prosystem) libretro core |
EmulatorJS team; libretro/prosystem | GPL-3.0 (EmulatorJS), GPL-2.0 (ProSystem) |
systems/msx1/, systems/msx2/ |
WebMSX (same engine in two bundles — the MSX1 bundle boots M=MSX1, the MSX2 bundle boots M=MSX2) |
Paulo Peccin | MIT |
systems/jsspeccy/ |
JSSpeccy 3.2 | Matt Westcott (gasman) | GPL-3.0 |
systems/jtyone/ |
JtyOne (port of Mike Wynne's EightyOne) | Simon Holdsworth | GPL-2.0 |
systems/xroar/ |
XRoar (WASM) | Ciaran Anscomb | GPL-3.0-or-later |
systems/trs80/ |
sdltrs (SDL2 TRS-80 emulator), built from source to WASM | Mark Grebe / Jens Guenther (gitlab.com/jengun/sdltrs) | BSD-2-Clause |
systems/trs80/sdltrs.wasm (embedded) |
TRS-80 Model I Level II BASIC ROM (12 KB) | © Tandy / Microsoft | Bundled for emulator-only use; embedded into the WASM at build time via --embed-file (no separate ROM file ships) |
systems/js99er/ |
Js99'er (vanilla-JS build) | Rasmus Moustgaard | GPL-2.0 |
systems/js99er/carts/*.rpk |
TI-99/4A cartridge ROMs (10 commercial titles, 1980-1983) | Texas Instruments / Imagic / Sega — original publishers | Distributed for retro-preservation; carts are 40+ years out of commerce. |
systems/atari800/, systems/atari400/ |
atari800 v5.2.0, built from source to WASM (same core shipped in two bundles — the 400 bundle boots OS-B, the 800XL bundle boots OS-XL) | atari800 project | GPL-2.0+ |
systems/atari800/atari800.wasm, systems/atari400/atari800.wasm (embedded) |
AltirraOS-XL 3.41 + AltirraOS-800 + AltirraBASIC | Avery Lee | Freely-redistributable open-source OS replacement, compiled into the WASM via --enable-altirra_bios (no separate ROM file ships) |
systems/intv/ |
jzIntv (WASM build) | Joe Zbiciak | Free for personal/non-commercial use. WASM build mirrored from mholzinger/intellivision-overlay-editor |
systems/odyssey2/ |
libretro-o2em, custom SDL2/emscripten frontend | original o2em by Daniel Boris + Andre de la Rocha; libretro fork by libretro authors; frontend by Retro-Jack | GPL-2.0+ (libretro-o2em); frontend bundled under repo terms |
systems/cpc/ |
floooh's tiny8bit CPC WASM — locally rebuilt from floooh/chips-test (status bar + muted-speaker icon patched out, plus gx_state_* save-state wrappers; see systems/cpc/BUILDING-WASM.md) |
Andre Weissflog | MIT |
systems/pet/pet2001/ |
pet2001 (vanilla-JS PET 2001 emulator) | Thomas Skibo | BSD-2-Clause |
systems/_shared-ejs/ |
EmulatorJS framework | EmulatorJS team | GPL-3.0 |
systems/_shared-ejs/ejs/data/cores/ |
VICE libretro cores (x64, x128, xvic, xplus4) |
vice-emu.sourceforge.net | GPL-2.0 |
systems/_shared-ejs/ejs/data/cores/ |
gearcoleco libretro core (ColecoVision) | Drhelius | GPL-3.0 |
systems/_shared-ejs/ejs/data/cores/ |
FCEUmm libretro core (NES) | libretro/libretro-fceumm | GPL-2.0 |
systems/_shared-ejs/ejs/data/cores/ |
Stella libretro core (stella2014, Atari 2600) |
stella-emu / libretro | GPL-2.0 |
systems/_shared-ejs/ejs/data/cores/ |
gambatte libretro core (Game Boy / Game Boy Color) | libretro/gambatte (sinamas) | GPL-2.0 |
systems/_shared-ejs/ejs/data/cores/ |
handy libretro core (Atari Lynx) | libretro/libretro-handy (K. Wilkins) | zlib / GPL-compatible |
systems/_shared-ejs/ejs/data/cores/ |
genesis_plus_gx libretro core (Sega Game Gear / Master System / Mega Drive) | libretro/Genesis-Plus-GX (Eke-Eke) | non-commercial redistribution licence (see core) |
systems/_shared-ejs/ejs/data/cores/ |
prosystem libretro core (Atari 7800) | libretro/prosystem (Greg Stanton, libretro port) | GPL-2.0 |
How the cores are mirrored
EmulatorJS-flavoured libretro cores (FCEUmm, VICE family, gearcoleco, Stella,
gambatte, handy, genesis_plus_gx, prosystem) are mirrored from cdn.emulatorjs.org/stable/ rather than rebuilt
locally. The upstream CDN serves the same .data archives EmulatorJS itself
loads from.
Exception — vice_x128 (C128) and gambatte (Game Boy): the current
stable builds are broken — vice_x128 cold-boots to uninitialised-RAM
garbage, and gambatte renders a blank white panel (no ROM ever displays).
Both verified June 2026. We mirror the nightly builds of these two instead
(cdn.emulatorjs.org/nightly/), which work. All other cores stay on stable.
Self-compiled WASM builds
- atari800 — built from
atari800/atari800v5.2.0 source viaRetro-Jack/atari800fork (addsbuild-wasm.sh+BUILDING-WASM.mdon top of upstream). The pre-built.js+.wasmin this repo correspond to that build script. The fork also addsgx_state_*EMSCRIPTEN_KEEPALIVEwrappers around atari800'sStateSav_*AtariState, run from agx_state_poll()in thesdl/main.cframe loop so the file-based save/load is deferred onto the main-loop ASYNCIFY stack (a direct call would be a second concurrent asyncify op and corrupt the heap) — that's what drives the page's save/load buttons. - cpc (tiny8bit) — rebuilt from
floooh/chips-testvia fibs (Deno + emsdk), recipe insystems/cpc/BUILDING-WASM.md. Beyond the overlay removal,examples/emus/cpc.cgainsgx_state_*EMSCRIPTEN_KEEPALIVEwrappers around chips'cpc_save_snapshot/cpc_load_snapshot, withHEAPU8added toEXPORTED_RUNTIME_METHODSin the fibsemscripten.ts. The chips snapshot is a self-contained struct copy (noemscripten_sleep), so unlike atari800 the adapter calls it straight from the button — no frame-loop deferral. - jsbeeb (BBC Micro / Master) — built from the
Retro-Jack/jsbeebfork (a pure-JS Vite build; the pre-builtdist/assets/engine files in both bundles come fromnpm run buildon the fork'smainbranch). Two local changes, both documented in the fork'sGENX-CHANGES.md: (1) d-pad gamepad remap — fourGP.D12–GP.D15cases insrc/gamepads.jsso a launch URL can map the d-pad buttons to any BBC key (jsbeeb hardwires them to Z/X/:/? with no remap hook); this is a general improvement offered upstream on the fork's cleangamepad-dpad-remapbranch. (2) monitor inset —src/main.jsbottomReservedSizewidened 68→120 for the sitewide-wallpaper breathing room (GenX-local, not upstreamed). The fork tracks upstream releases — currently rebased onto jsbeeb 1.14.0 (July 2026). Hats off to Matt Godbolt for being on the ball: 1.14.0 shipped the #704 workaround for a Chrome 150 V8 bug that had been wedging the emulator, within a day of it surfacing — rebasing this fork onto it cleared the BBC freeze on GenX-DOS with nothing more to do on our side. - libretro-o2em — built from upstream libretro/libretro-o2em via
systems/odyssey2/build.sh. Custom SDL2/emscripten frontend (frontend.c) statically linked with the libretro core; reproducible with emsdk.frontend.calso addsgx_state_*EMSCRIPTEN_KEEPALIVEwrappers around the core'sretro_serialize/retro_unserializeto expose save/load state to the page (withHEAPU8inEXPORTED_RUNTIME_METHODS). - sdltrs (TRS-80 Model I) — built from
jengun/sdltrs(gitlab.com/jengun/sdltrs) to WASM via emscripten (build-wasm.sh,-sASYNCIFY+-sUSE_SDL=2,-sMODULARIZE). Two#ifdef __EMSCRIPTEN__patches swap sdltrs's blockingSDL_Delaythrottle (trs_interrupt.c) andSDL_WaitEvent(trs_sdl_interface.c) foremscripten_sleep, so the continuous Z80 loop yields once per timer tick and the page stays responsive. The Model I Level II BASIC ROM is embedded via--embed-file. sdltrs ships a built-in save-state (trs_state_save/trs_state_load) that isn't wired to the page yet. - VirtualT (Tandy TRS-80 Model 100) — Stephen Hurd & Ken Pettit's VirtualT
(BSD, © 2004; sourceforge.net/projects/virtualt)
is a full FLTK desktop emulator; this bundle is built from its core only.
The FLTK-free 8085 CPU, memory, HD44102 LCD and keyboard-matrix sources are
compiled to WASM with emscripten (
-sASYNCIFY+-sUSE_SDL=2) behind a small headless SDL2 frontend (frontend_sdl.c) plus headless display / file / clock / stub units written for this project; the ~40 FLTK GUI/IDE/debugger files are dropped. Because so much of the original is stripped away this is an acknowledgement, not a fork — VirtualT's BSD licence and the original copyright are preserved in the retained sources. The 32 KB Model 100 ROM is embedded via--embed-file. The five headless units (frontend_sdl.cplus the display / file / clock / stub replacements), a reproduciblebuild.sh,BUILDING-WASM.mdand VirtualT's BSD licence are insystems/m100/src/.
BIOS and system ROMs
Bundled for emulator-only use. These remain the property of their copyright holders.
| File | System | Copyright |
|---|---|---|
systems/coleco/colecovision.rom |
ColecoVision | © 1982 Coleco Industries |
systems/lynx/lynxboot.img |
Atari Lynx boot ROM (512 bytes) | © 1989 Atari Corp. (required by the handy core to start games) |
systems/intv/exec.bin, grom.bin |
Intellivision EXEC + GROM | © 1979 Mattel Electronics |
systems/odyssey2/o2rom.bin |
Magnavox Odyssey² (MD5 562d5ebf…) | © 1978 Magnavox/Philips. |
Game ROMs
The repo bundles several hundred 8-bit-era game ROMs across all platforms. These remain the copyright of their original publishers and are included for historical preservation, emulator integration, and educational use.
Notable inclusions where the rights holder has explicitly released the software under permissive terms:
- Apple I cassette tapes — Integer BASIC era homebrew + Apple's own 30th Anniversary demo by Brian Wiser. Sourced from the Apple I Project archive.
- AltirraOS-800 / -XL (counted under BIOS, above) — Avery Lee's free re-implementation of Atari OS-B / OS-XL.
- 3D Construction Kit demos and indie homebrew across various
platforms — license varies; check the per-bundle
games.jsonor source archive when in doubt. - Attack of the PETSCII Robots (C64,
systems/c64/games/petrobot.d64) — David Murray ("The 8-Bit Guy") / 8-Bit Productions, 2021. The official free shareware build (2 of the full game's 13 levels) is explicitly redistributable — "You are free to distribute this archive." Downloaded from the8bitguy.com; the full game is for sale. Bundled disk only — the manual PDF and notes in the original archive are not shipped.
For every other commercial title, redistribution within this repo is on a preservation / personal-use basis. If you are a rights holder and want a title removed, open an issue at https://github.com/Retro-Jack/GenX-DOS/issues.
Research and reference sources
Reference works — not bundled code — consulted to get the per-game gamedocs right (control schemes and in-game behaviour). The project leans on them and is glad to say so.
-
Paul Farrow — ZX81 disassemblies (www.fruitcake.plus.com). Paul's meticulous, fully-commented disassembly of 3D Monster Maze (Malcolm Evans, New Generation Software, 1981) is the authority behind that ZX81 gamedoc — the verified in-game keys and menu details we would otherwise have had to guess at. Painstaking preservation work, freely shared decades on. Thank you.
-
Mark Moxon — bbcelite.com (www.bbcelite.com). Mark's fully-commented, line-by-line disassembly of Elite (Ian Bell & David Braben, Acornsoft 1984) across its 8-bit versions is the authority behind our Elite gamedocs — the correct publisher and year, the real flight and chart keys, and which features each port actually has (no Thargoids or suns on the Electron, the Master's fractional scoring). A monumental preservation effort, freely shared. Thank you.
-
David D. Busch — 25 Games for your TRS-80 Model 100 (TAB Books, 1984). The Model 100 bundle's games are hand-transcribed BASIC type-in listings from this book, and its per-game chapters are the authority behind those gamedocs — the controls, scoring and how-to-play. A lovely artefact of the type-in era, leaned on here with thanks. As with the other bundled game code, these listings are included on a preservation / personal-use basis; a rights holder who wants them removed can open an issue.
-
Tandy — TRS-80 Model 100 Owner's Manual (Radio Shack, 1983; archive.org). The authority behind the Model 100 controls page — the exact TEXT / ADDRSS / SCHEDL usage and function-key labels (Find, Load, Save, Sel, Copy, Cut, Menu; and that ADDRSS and SCHEDL find records you enter in TEXT) come straight from it rather than memory.
-
dplassgit — proposed the Tandy Model 100 as a GenX-DOS platform in discussion #2, "Tandy 100?" ("Based on the Intel 8085 CPU… it definitely has the 8-bit feel"). The whole platform exists because of that suggestion — and thanks to the above book, we were able to ship the usual amount of games, even when the primary source failed. Thanks for the nudge.
Bezel artwork
systems/_shared/bezels/ holds the transparent PNG monitor/console frames used by the CRT-bezel overlays. Every platform is now wired to a bezel (the per-emulator integration pass is complete).
Per maintainer policy, bezel / wallpaper / texture artwork is not provenance-tracked — these are anonymous hardware shots or generic CRT frames sourced from public web archives where the original photographer is no longer reachable, then processed locally (alpha-keying, screen cutout) in GIMP. Source-code dependencies stay fully tracked (above). Wired bezels ship without credit comments.
Exception — Amstrad.png is properly source-cleared and carries a binding obligation: cropped from File:Amstrad_CPC464.jpg (Wikimedia Commons) by Bill Bertram (username Pixel8), 7 May 2005, CC-BY-SA 2.5. Modifications inherit share-alike; systems/cpc/play.html carries the author + licence as an attribution comment.
(Note: jsbeeb's CUB monitor frame lives inside systems/bbcmicro/dist/ and systems/bbcmaster/dist/ as part of the upstream build, not this shared set.)
Fonts
-
systems/_shared/styles/VGA_font/f12.*.png— 12×12 CP437 bitmap font sprites. Generated locally bymake_fonts.pyfrom Unicode CP437 mappings; the rendered glyph shapes derive from public-domain VGA CP437 reference data. -
styles/fonts/web437-vga.woff— Web437 IBM VGA 9×16, from the Ultimate Oldschool PC Font Pack by VileR (https://int10h.org/oldschool-pc-fonts/), © 2016–2020 VileR. Licensed CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/). A genuine IBM VGA text-mode CP437 font; used on the landing page (index.html) for the spec sheet and the "Enter the museum" button. Unmodified. -
styles/fonts/michroma-400.woff2— Michroma by Vernon Adams. Licensed SIL Open Font License 1.1. Display face on the landing page and the feature article (docs/article/index.html). -
styles/fonts/ibm-plex-mono-*.woff2,styles/fonts/ibm-plex-serif-*.woff2— IBM Plex Mono and IBM Plex Serif by Mike Abbink & Bold Monday for IBM. Licensed SIL Open Font License 1.1. Body / UI faces on the landing page and the feature article. Subsetted to the Latin range.
CSS / JS dependencies bundled per-emulator
systems/electron/jquery/jquery-1.9.1.js+jquery-ui-1.10.3.custom.min.js— jQuery 1.9.1 and jQuery UI 1.10.3 custom build, MIT — required by ElkJS upstream. Kept as-is to avoid divergence from the ElkJS source.systems/electron/— ElkJS (© Darren Coles 2013) is locally patched from the upstream source:display.jsrow-doubling (removes upstream's baked-in scanlines),sound.js(adds thesoundInit()AudioContext resume the upstreamsoundToggle()referenced but never defined, plus a 25% output mix), andelkjs.js(resumeAudio(), to start sound on a user gesture). The upstream duplicate jQuery 1.7.2 was removed. See CHANGELOG / wiki for the why.
Other emulator bundles vendor their upstream dependencies; where a bundle's
runtime is locally modified (e.g. ElkJS above, the atari800 / CPC / o2em WASM
rebuilds) the change is recorded here or in the CHANGELOG. The upstream
LICENSE / COPYING files in each bundle directory cover the originals.
How to add a new attribution entry
When adding code or assets to the repo:
- Identify the upstream source and licence. If the licence is unclear, ask before bundling.
- Place the upstream
LICENSE/COPYINGfile in the bundle directory alongside the binary or source it covers. - Add a row to the relevant table above.
- Add a parallel entry in
CHANGELOG.mdunder## [Unreleased]. - If the licence is one of the BY-SA family, note in the table that modifications inherit share-alike — this affects what we can do with derived work.