ROM library & emulators (ES-DE on av)¶
The single source of truth for game ROMs on the gaming box is
/opt/games/roms-flat/, owned by guest (group gamers). ES-DE reads it
via ~guest/ROMs → /opt/games/roms-flat (ES-DE's ROMDirectory is empty, so it
defaults to ~/ROMs). Standalone RetroArch (guest-only) reads the same tree.
Session/host wiring is in session-setup.md; PS3/RPCS3
specifics in rpcs3.md.
/opt/games/ (root:gamers, setgid)
└── roms-flat/ (guest:gamers) ← the only ROM tree
├── arcade/ gb/ gbc/ gba/ gc/ genesis/ n64/ nes/
├── ps3/ psx/ snes/ steam/ xbox/
└── lost-cart-roms-2026-07-26.tsv ← manifest of ROMs lost in the incident below
Ownership model¶
Everything under roms-flat is guest-owned. There is intentionally one
tree — no skill-lava-owned duplicate. RetroArch is only ever run as guest.
Per-system emulators¶
| System dir | Emulator (how) | Notes |
|---|---|---|
nes |
RetroArch mesen | pacman /usr/lib/libretro |
snes |
RetroArch snes9x | pacman |
gb gbc gba |
RetroArch mgba | pacman |
genesis |
RetroArch genesis_plus_gx | pacman |
n64 |
RetroArch mupen64plus_next | pacman |
psx |
RetroArch mednafen_psx_hw (beetle) | pacman |
gc |
Dolphin | pacman dolphin |
ps3 |
RPCS3 (standalone AppImage) | see rpcs3.md |
steam |
Steam launchers | see session-setup.md |
arcade |
RetroArch mame (current) | see below |
xbox |
xemu (standalone) | see below |
Emulator install policy on this box: system packages via pacman/AUR
(paru), not loose AppImages. The one sanctioned exception is RetroArch's own
core downloader (libretro buildbot → ~guest/.config/retroarch/cores). RPCS3 is a
pre-existing AppImage exception documented in rpcs3.md.
RetroArch (guest-only)¶
- Cores: pacman
libretro-*in/usr/lib/libretro, plus the MAME core in~guest/.config/retroarch/cores(see below).libretro_directorypoints at the latter; ES-DE'sCORE_RETROARCHsearch path includes both. - Playlists (
~guest/.config/retroarch/playlists/*.lpl) andrgui_browser_directorypoint at/opt/games/roms-flat. Pre-consolidation backups:playlists.bak-20260726020955andretroarch.cfg.bak-20260726020955.
MAME / Arcade¶
- 572 curated classic-arcade romsets in
roms-flat/arcade/(parents; a merged set keeps clones inside the parent zip). Extracted from~skill-lava/Downloads/mame.tar(the full MAME 0.257 merged set, 14,345 romsets — mostly unplayable fruit/mechanical machines, so it is not wired in wholesale). - Core:
mame_libretro.so(MAME 0.287) from the libretro buildbot in~guest/.config/retroarch/cores. ES-DE'sarcadesystem defaults to "MAME - Current" → this core. - ⚠️ Version gap: core is 0.287, romsets are 0.257 (~30 versions). Most classic parents boot fine; a handful may fail audit. Swap individual sets if needed.
- Names: ES-DE auto-translates romnames → real titles via its bundled
/usr/share/es-de/resources/MAME/mamenames.xml(no gamelist/scrape needed). - BIOS:
neogeo.zip,pgm.zip,decocass.ziplive inarcade/(needed by Neo Geo / PGM / DECO games) and are hidden from the menu via~guest/ES-DE/gamelists/arcade/gamelist.xml. - Add more: the curated 572-romname set is recorded in
mame-arcade-set.txt; to add a title, extract its zip frommame.tarintoroms-flat/arcade/as guest.
Xbox / xemu¶
- xemu installed from the AUR (
xemu-bin, viaparu), system-wide at/usr/bin/xemu. ES-DE'sxboxsystem launchesxemu -dvd_path <iso>. - BIOS/HDD (user-supplied, copyrighted — from
Xbox-Emulator-Files.zip) live in~guest/.local/share/xemu/xemu/:mcpx_1.0.bin(MCPX boot ROM),Complex_4627.bin(1 MB flash BIOS),xbox_hdd.qcow2(pre-formatted FATX HDD).eeprom.binis auto-generated. Wired viaxemu.toml[sys.files]in the same dir. - Games:
roms-flat/xbox/*.iso(XISO). Currently:Fuzion Frenzy (USA).iso. - Add more: drop the
.isoinroms-flat/xbox/as guest.
⚠️ Incident 2026-07-26 — cartridge ROMs lost during consolidation¶
The pre-consolidation layout had two trees: /opt/games/roms
(skill-lava-owned, folder-per-game — the real files) and /opt/games/roms-flat
(guest-owned). For the cartridge systems, roms-flat entries were symlinks
into roms, not copies. While consolidating to a single guest-owned tree,
/opt/games/roms was deleted — which destroyed the real files behind those
symlinks: 3,618 ROMs across gb gbc gba nes snes genesis n64 psx (~11 GB).
GameCube, PS3, Steam, and the new Arcade/Xbox sets were unaffected (real files).
- No btrfs snapshots existed (no snapper/timeshift) → no restore point.
- The 3,618 dangling symlinks are intentionally left in place (user's choice)
as an in-tree marker; a full manifest (system + No-Intro filename + original
path) is saved durably at
/opt/games/lost-cart-roms-2026-07-26.tsvand indocs/gaming/recovery/. - Recovery plan: re-download the standard No-Intro sets and drop real files
into
roms-flat/<system>/matching the manifest'sflat_filename. The dangling symlinks should be cleared first (they'd shadow the new files).
Lesson: before deleting a tree that another is "a copy/flatten of", verify the
other tree's entries are real files, not symlinks pointing into it
(find … -xtype l); a name-only presence check (os.listdir) counts symlink names
as present and hides exactly this failure.