Skip to content

Virtual Filesystem

Retro Jack edited this page May 20, 2026 · 56 revisions

Virtual Filesystem

The simulated C: drive lives in prompt/javascript/fs.js as a JS object tree. Every directory and file in the prompt is defined here.

Top-level layout

C:\
├── AUTOEXEC.BAT          runs on boot — calls `menu`
├── menu.bat              `cd emulators\nmenu` (drops straight into the EMULATOR LAUNCHER)
└── EMULATORS\
    ├── DOS\              MS-DOS games (jsdos)
    │   ├── DUKE\         Duke Nukem 1, II, 3D
    │   └── KEEN\         Commander Keen 1-6 + Keen Dreams
    ├── CONSOLE\          ATARI (2600 / 7800) / NES / GENESIS / INTV / CVISION /
    │                     ODYSSEY2 / VECTREX
    └── HOMECOMP\         ACORN (BBC / ARCHIMDS) /
                          COMMODRE (PET / VIC20 / MAX / C64 / C16 / PLUS4 / C128) /
                          ATARI (400 / 800XL / ST) / SINCLAIR (SPECTRUM / ZX81) /
                          CPC / COCO / MSX (MSX1 / MSX2)

Available vs placeholder systems

All 26 bundled sub-systems run their games locally — every byte of game data is on the same origin. The remaining 1 system (Magnavox Odyssey²) is a placeholder without an emulator yet.

System Backing emulator
DOS jsdos (emulators/jsdos/)
CONSOLE → NES JSNES (emulators/jsnes/)
CONSOLE → GENESIS lrusso/Genesis (emulators/genesis/)
CONSOLE → ATARI → 2600 javatari.js (emulators/javatari/)
CONSOLE → ATARI → 7800 JS7800 (emulators/js7800/)
CONSOLE → VECTREX DrSnuggles/jsvecx (emulators/jsvecx/)
CONSOLE → CVISION EmulatorJS + gearcoleco (emulators/coleco/) — 10 1982/83 launch-era classics: Donkey Kong (pack-in), Cosmic Avenger, Lady Bug, Mouse Trap, Carnival, Venture, Smurf, Zaxxon, Mr. Do!, Q*bert; BIOS colecovision.rom (©1982 Coleco) bundled
CONSOLE → INTV jzIntv WASM (emulators/intellivision/) — 10 first-in-series Mattel + Imagic classics: Astrosmash, BurgerTime, TRON: Deadly Discs, Snafu, B-17 Bomber, Night Stalker, Adventure (AD&D), Atlantis, Lock 'N' Chase, Star Strike; BIOS exec.bin + grom.bin (©1979 Mattel) bundled
HOMECOMP → ACORN → BBC jsbeeb (emulators/jsbeeb/)
HOMECOMP → ACORN → ARCHIMDS archimedes-live (emulators/archimedes-live/)
HOMECOMP → ATARI → 400 atari800 v5.2.0 (emulators/atari800/, ?machine=atari → OS-B / AltirraOS-800)
HOMECOMP → ATARI → 800XL atari800 v5.2.0 (emulators/atari800/, default → AltirraOS-XL)
HOMECOMP → ATARI → ST EstyJS + EmuTOS (emulators/estyjs/)
HOMECOMP → SINCLAIR → SPECTRUM JSSpeccy 3 (emulators/jsspeccy/)
HOMECOMP → SINCLAIR → ZX81 JtyOne (emulators/jtyone/)
HOMECOMP → CPC floooh tiny8bit CPC WASM (emulators/amstradcpc/) — 10 first-in-series CPC classics: Roland on the Run, Knight Lore, Bruce Lee, Elite, Bomb Jack, Get Dexter, Head over Heels, Rick Dangerous, Chase H.Q., Prince of Persia. BASIC entry boots to Locomotive BASIC 1.1
HOMECOMP → COCO XRoar (emulators/xroar/)
HOMECOMP → MSX → MSX1 / MSX2 WebMSX (emulators/webmsx/)
HOMECOMP → COMMODRE → PET EmulatorJS + VICE xpet (emulators/pet/) — default model 3032 (BASIC 2 chargen); per-game override to 4032 for PETSCII Robots; 9 .prg classics + the PETSCII Robots shareware .d64 (David Murray, 2022)
HOMECOMP → COMMODRE → VIC20 EmulatorJS + VICE xvic (emulators/vic20/) — 10 cartridge .prgs loading at $A000; vice_vic20_memory_expansions='all' gives the full 35K expansion
HOMECOMP → COMMODRE → MAX EmulatorJS + VICE x64 in Ultimax mode (emulators/max/) — Japan-only 1982 console, 2 KB RAM + cart-only; 8 .crt carts (TOSEC + Internet Archive Slalom + Multimax-extracted) + MAX BASIC cart
HOMECOMP → COMMODRE → C64 EmulatorJS + VICE x64 (emulators/c64/) — 10 .d64 disk images; real-time IEC loading with authentic 1541 drive sounds during loads
HOMECOMP → COMMODRE → C16 EmulatorJS + VICE xplus4 in C16 mode (emulators/c16/) — vice_plus4_model='c16pal' for 16K RAM; 10 first-in-series C16 16K .prgs from plus4world.com
HOMECOMP → COMMODRE → PLUS4 EmulatorJS + VICE xplus4 (emulators/plus4/) — 10 first-in-series Plus/4 classics from plus4world.com
Placeholders (no emulator yet) ODYSSEY2

All seven VICE-family bundles ship the same input config: keyboardInput: 'enabled' + altKeyboardInput: 'enabled' (typed keys → VICE keyboard callback) + vice_joyport_type: '1' for the six with a joystick port (PET excepted — no joystick). Numpad 8/4/6/2 drives joystick directions; 0 or 5 is fire; everything else types. Esc is browser-captured so RUN/STOP is remapped to Scroll Lock (+ Pause/Break + a top-left soft button) via emulators/_shared/genx-vice-softkeys.js. A defensive UX banner (emulators/_shared/genx-numlock-warn.js) fires after the first keydown if NumLock is off. All seven bundles share one copy of the EmulatorJS framework + 5 VICE cores at emulators/_shared-ejs/.

Available systems have 10 games each plus a PROMPT (command-line systems) or DESKTOP (RISC OS) entry that boots a clean machine. MSX has 10 + 10 (MSX1 + MSX2 sub-menus). Placeholder GAMES menus collapse to a single (No locally-hosted titles yet) line + Back option.

See Emulators for the integration recipe and how to add more systems.

Per-system menu pattern

A typical <SYSTEM>\GAMES\ directory looks like:

GAMES\
├── menu.bat              numbered title list (45-char wide CP437 box)
├── 0.bat                 cd .. / cd .. / menu (back two levels)
├── 1.bat .. N.bat        each runs a named .bat
└── <key>.bat             one per title, with link: → emulator URL

Navigation (NES example):

1   → cd emulators / menu        (EMULATOR LAUNCHER → CONSOLE / HOMECOMP)
2   → cd console / menu          (CONSOLE SYSTEMS)
2   → cd nes / menu              (NES GAMES — auto-cd into games)
3   → contra                     (opens emulators/jsnes/play.html?game=contra)
0   → cd .. / cd .. / menu       (back to CONSOLE menu)

File object schema

A node in fs.js is { name, directories?, files? } for directories, or one of these for files:

Field on a file Meaning
data: '<batch>' Treats the "file" as a batch script — each \n-separated line is dispatched as a command
link: '<url>' Treats the file as a launcher — window.open(link, "_blank")
hidden: true Hidden from dir output (still navigable via cd)

Game .bat files use link: to the emulator wrapper. menu.bat and numbered launchers use data:.

No .html files in the tree. The virtual filesystem only lists .bat files — game launchers, menu scripts, and the numbered shortcuts that route between them. Auxiliary HTML pages (each emulator's controls.html, future bezels, etc.) live on disk under emulators/<name>/ but are reached from inside the emulator's entry HTML (via a corner link), not from the DOS prompt. Period-correct: a DOS user typing dir shouldn't see .html.

See Customising the Filesystem for examples of adding entries.

Clone this wiki locally