Skip to content

File Structure

Retro Jack edited this page May 17, 2026 · 63 revisions

File Structure

genx-dos/
├── README.md                 one-page entry point
├── CHANGELOG.md
├── serve.sh                  starts local http.server, opens browser
├── index.html                <meta refresh> to prompt/
├── favicon.ico
├── make_fonts.py             generates f12.N.png palette variants
│
├── prompt/                   the DOS terminal
│   ├── index.html
│   ├── favicon.ico
│   ├── animated_favicon1.gif
│   ├── javascript/
│   │   ├── globals.js        shared state (palette, paths, flags)
│   │   ├── goFontGo.js       builds the 256 CSS rules
│   │   ├── classUtils.js     add/remove/test class helpers
│   │   ├── keyboard.js       keypress / keydown handlers
│   │   ├── terminal.js       echo, executeBatch, prompt rendering
│   │   ├── fs.js             the virtual C: drive
│   │   ├── commands-core.js  dir, cd, type, find, attemptExec, handleCmd
│   │   ├── commands.js       echo, cls, setcol, help, easter eggs
│   │   └── init.js           entry point + AMIBIOS POST animation
│   └── img/
│       ├── ami-logo.png      AMIBIOS POST logo
│       ├── f12.7.png         master sprite sheet (light grey)
│       └── f12.<0-15>.png    CGA palette variants
│
└── emulators/
    ├── _shared/             shared CSS for controls.html + corner-link styles
    ├── jsbeeb/               BBC Micro        (copied from mattgodbolt/jsbeeb)
    ├── archimedes-live/      Acorn Archimedes (mirror of pdjstone/archimedes-live)
    ├── jsnes/                NES              (copied from bfirsh/jsnes)
    ├── genesis/              Sega Genesis     (copied from lrusso/Genesis)
    ├── javatari/             Atari 2600       (copied from ppeccin/javatari.js)
    ├── js7800/               Atari 7800       (copied from raz0red/JS7800)
    ├── jsdos/                MS-DOS           (copied from caiiiycuk/js-dos)
    ├── webmsx/               MSX/MSX2/MSX2+   (mirror of ppeccin/WebMSX)
    ├── jsvecx/               Vectrex          (copied from DrSnuggles/jsvecx)
    ├── estyjs/               Atari ST         (copied from kaiec/EstyJS + EmuTOS)
    ├── jsspeccy/             Sinclair Spectrum (copied from gasman/JSSpeccy 3)
    ├── jtyone/               Sinclair ZX81    (copied from hammingweight/JtyOne)
    ├── xroar/                Tandy CoCo       (copied from 6809.org.uk/xroar)
    ├── atari800/             Atari 800XL      (atari800/atari800 v5.2.0, built from source to WASM)
    └── c64/                  Commodore 64     (iframe wrapper around archive.org's hosted VICE — no local emulator)

Per-emulator layout

Emulator Runtime Wrapper Game files
jsbeeb/ dist/ (Vite build) the dist's own index.html (URL-driven) dist/discs/<publisher>/*.ssd
archimedes-live/ mirrored static bundle (HTML/JS/WASM/data + ROMs) the bundle's own index.html (hash-driven) software/*.zip (catalogue: software/software.json); ROMs in emu/roms/
jsnes/ dist/jsnes.min.js play.html roms/*.nes
genesis/ Genesis.min.js play.html roms/*.bin
javatari/ javatari.js play.html roms/*.a26
js7800/ js/js7800.min.js + js/bupboop.wasm play.html roms/*.a78
jsdos/ js-dos.js + wdosbox.wasm play.html bundles/*.jsdos
webmsx/ single 5 MB index.html (engine + UI + BIOSes inlined) the bundle's own index.html (URL-driven) games/msx1/*.zip + games/msx2/*.zip
jsvecx/ js/jsvecx.js (heavily compressed) + js/seamless.js index.html?rom=… (URL-driven; never use seamless.html) roms/<publisher_or_author>/*.bin (~100 ROMs total)
estyjs/ 14 inlined JS modules + etos256us.img (EmuTOS) play.html disks/*.st
jsspeccy/ jsspeccy/jsspeccy.js + jsspeccy-core.wasm (Z80 in Web Worker) play.html games/*.z80
jtyone/ zx81_emu.js + roms/zx81.rom play.html tapes/*.p.hex (raw bytes hex-encoded)
xroar/ xroar.js + xroar.wasm + 9 system ROMs play.html roms/*.ccc
atari800/ atari800.js + atari800.wasm (AltirraOS-XL + AltirraOS-800 + AltirraBASIC baked in via --enable-altirra_bios) play.html (accepts ?game=<key> and ?machine=400|800|xl|xe|xegs) roms/*.atr + roms/*.rom (cart); 800XL menu uses 10 disk-era titles, 400 menu uses 10 cart-era titles, sharing starraid.rom
c64/ (none — visitor's iframe loads https://archive.org/embed/<archive_item>) play.html (accepts ?game=<key>; sets a full-page <iframe> src to archive.org's embed URL) games.json maps each key to an archive_item ID; no .d64 files in repo

Each play.html-based emulator also has a games.json mapping <key>{title, rom} (or {title, bundle}). The URL-driven emulators (jsbeeb, archimedes-live, webmsx, jsvecx) take all their config via query string or hash and need no per-site wrapper.

Notes on individual files

File Purpose
index.html (repo root) <meta refresh> to prompt/ — the POST animation lives in the prompt page now
prompt/index.html Loads the JS modules in order, hosts the terminal <div>
prompt/img/ami-logo.png AMIBIOS POST splash logo
prompt/img/f12.7.png 192×192 px, 16×16 grid of 12×12 px CP437 glyphs (light grey)
prompt/img/f12.<N>.png Pre-tinted variant for CGA palette index N
make_fonts.py One-shot PIL script that tints f12.7.png into the other variants
serve.sh python3 -m http.server 8765 wrapper that also opens the browser

Clone this wiki locally