-
Notifications
You must be signed in to change notification settings - Fork 0
Virtual Filesystem
The simulated C: drive lives in prompt/javascript/fs.js as a JS object tree. Every directory and file the user can dir is defined there. It's editable: change the file, hard-refresh, the prompt sees the new tree.
C:\
├── AUTOEXEC.BAT runs on boot — calls `menu`
├── menu.bat `cd emulators\nmenu` (drops straight into the EMULATOR LAUNCHER)
└── EMULATORS\
├── CONSOLE\ ATARI (2600 / 7800) / CVISION / INTV / NES /
│ ODYSSEY2 / VECTREX
└── HOMECOMP\ APPLE (APPLE1 / APPLEII) /
COMMODRE (PET / VIC20 / MAX / C64 / C16 / PLUS4 / C128) /
ATARI (400 / 800XL) / ACORN (BBC / ELECTRON / MASTER) /
SINCLAIR (SPECTRUM / ZX81) /
CPC / COCO / MSX (MSX1 / MSX2) / TI99
All 28 bundled sub-systems run their games locally — every byte of game data is on the same origin.
| Menu path | Backing emulator | Notes |
|---|---|---|
| CONSOLE → NES | EmulatorJS + FCEUmm | dir name is jsnes/ for legacy reasons |
| CONSOLE → ATARI → 2600 | EmulatorJS + Stella | |
| CONSOLE → ATARI → 7800 | JS7800 | |
| CONSOLE → VECTREX | DrSnuggles/jsvecx | |
| CONSOLE → CVISION | EmulatorJS + gearcoleco | colecovision.rom BIOS bundled |
| CONSOLE → INTV | jzIntv WASM | exec.bin + grom.bin BIOS bundled |
| CONSOLE → ODYSSEY2 | libretro-o2em → WASM + custom SDL2 frontend | o2rom.bin BIOS bundled |
| HOMECOMP → APPLE → APPLE1 | apple1js | tapes + Woz Monitor |
| HOMECOMP → APPLE → APPLEII | apple2js |
.dsk images converted to JSON |
| HOMECOMP → ACORN → BBC | jsbeeb | |
| HOMECOMP → ACORN → ELECTRON | ElkJS | UEF snapshots |
| HOMECOMP → ACORN → MASTER | jsbeeb (?model=Master) |
Elite uses DSD for drive 2 |
| HOMECOMP → ATARI → 400 | atari800 (?machine=atari → OS-B / AltirraOS-800) |
|
| HOMECOMP → ATARI → 800XL | atari800 (default → AltirraOS-XL) | shares build with 400 |
| HOMECOMP → SINCLAIR → SPECTRUM | JSSpeccy 3 | |
| HOMECOMP → SINCLAIR → ZX81 | JtyOne | |
| HOMECOMP → CPC | floooh tiny8bit CPC WASM | sokol_args URL params |
| HOMECOMP → COCO | XRoar | |
| HOMECOMP → MSX → MSX1 / MSX2 | WebMSX | shared core, ?M=MSX1 flag |
| HOMECOMP → COMMODRE → PET | Thomas Skibo's pet2001 (vanilla JS) | PET 2001 / BASIC 2 / 32 K |
| HOMECOMP → COMMODRE → VIC20 | EmulatorJS + VICE xvic | memory_expansions='all' |
| HOMECOMP → COMMODRE → MAX | EmulatorJS + VICE x64 (Ultimax mode) | Japan-only 1982 console |
| HOMECOMP → COMMODRE → C64 | EmulatorJS + VICE x64 | real-time IEC loading |
| HOMECOMP → COMMODRE → C16 | EmulatorJS + VICE xplus4 (C16 mode) | |
| HOMECOMP → COMMODRE → PLUS4 | EmulatorJS + VICE xplus4 | |
| HOMECOMP → COMMODRE → C128 | EmulatorJS + VICE x128 (native mode) | per-game VICII/VDC switch |
| HOMECOMP → TI99 | js99er (vanilla JS build) |
Every menu has 10 games plus a PROMPT (command-line systems) or BASIC entry that boots a clean machine. MSX has 10 + 10 (MSX1 + MSX2 sub-menus).
For the integration stories per emulator, see Emulators.
A typical <SYSTEM>\GAMES\ directory looks like:
GAMES\
├── menu.bat numbered title list (45-char wide box-drawn menu)
├── 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
How a user gets from the prompt to a game (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)
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:. menu.bat and numbered launchers use data:.
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.
This is period-correct: a DOS user typing dir shouldn't see .html.
See Customising the Filesystem for worked examples of adding entries.