-
Notifications
You must be signed in to change notification settings - Fork 0
Disk Swapping
Multi-disc CD-based RPGs and adventures, plus disk-side games on the Famicom Disk System, all need a way to swap discs/sides without restarting the game. Emutastic handles this in two parts: an import-time auto-bundle that produces a single library entry per game, and an in-game disk swap chord that flips between images mid-play.
Default chord: L3 + Start (click the left analog stick + Start). Rebindable in Preferences → Controls → Disk Swap to any two-button chord (controller or keyboard).
When the chord fires, the bottom status bar shows one of:
-
Disk N / M— successfully advanced to the next disc -
Disk: side change— FDS side flip injected (Nestopia / Mesen / FCEUmm) -
Disk swap: only one disc loaded — put all discs in the same folder and re-import— game has a single image; see auto-bundling below -
Disk swap: this core doesn't support disc switching— the core never registered the libretro disk control interface
The chord is round-robin: it cycles 1 → 2 → 3 → 1 again. RetroArch's deferred-insert timing is mirrored (a ~100-frame delay between set_image_index and the matching set_eject_state(false)) so cores like Beetle PSX get their CD audio engine the spin-down they expect. The chord and disk-control handling live in EmulatorSession.cs.
Start + Select would be the obvious default, but it conflicts with the Steam overlay toggle. L3 is rarely used in retro games and free of system-level conflicts, so the default chord stays out of the way of every shipping libretro game.
Drop a folder containing a multi-disc set and Emutastic writes an .m3u playlist next to the disc files, then imports only the playlist:
MyGame (USA) (Disc 1).cue
MyGame (USA) (Disc 2).cue
MyGame (USA) (Disc 3).cue
MyGame (USA).bin sidecars (×3)
→ produces one library entry: MyGame (USA).m3u.
The auto-bundler looks for (Disc N), (Disk N), (CD N) patterns in filenames (case-insensitive, regex tolerant of separators and "of M" suffixes). Files are grouped when all of these match:
- Same parent folder
- Same base title (filename minus the disc tag)
- Same extension (so a
.cueset and a.chdset in the same folder stay separate)
Conservative gates:
- Bundle requires at least 2 disc files
- Disc numbers must form a contiguous sequence starting at 1 — pathological pairs like
(Disc 1)+(Disc 5)are left as individual imports - Base title must be at least 3 characters to avoid false matches like
cd1.cue+cd2.cuefrom unrelated dumps - Disc tag must appear within 30 characters of the end of the filename to filter out matches in title-words like
Audio CD 32 Sampler
When the auto-bundler folds files into an .m3u, it also:
- Adds
.binsidecars of bundled.cuefiles to the skip set so they don't import as separate library entries -
Honors hand-authored
.m3ufiles in the same folder — if you've already curated a playlist, the bundler leaves it alone and imports it as the single entry - Removes stale single-disc library rows for any file that's now part of a bundle, so re-importing converts scattered per-disc entries into one playlist entry
| Folder contents | Library result |
|---|---|
Game.cue (single disc) |
One Game entry |
Game (Disc 1).cue/.bin + (Disc 2).cue/.bin
|
One Game entry (the auto-generated .m3u) |
Game (Disc 1).chd + (Disc 2).chd
|
One Game entry |
Game.m3u (you wrote it) + the discs it lists |
One Game entry (your .m3u) |
Mixed compilation: Anthology - Game V.cue + Anthology - Game VI.cue
|
Two entries (different game names → not bundled) |
| Console | Mechanism | Notes |
|---|---|---|
| FDS | JOYPAD_L injection on port 0 | Nestopia / Mesen / FCEUmm convention. The chord injects the libretro NES "Disk Side Change" button for ~6 frames. Keep nestopia_fds_auto_insert = enabled (cores never register the env disk control interface for FDS, so the chord falls back to the input convention) |
| PS1 |
SET_DISK_CONTROL_INTERFACE (env 13 / 58 EXT) |
Beetle PSX registers the interface in retro_init. Use an .m3u so the core sees every disc |
| Saturn | env 13 / 58 EXT | Kronos accepts cue / iso / mds / ccd / chd / zip / m3u. Disk swap requires .m3u (single-disc loads register the callback but disk_total = 1) |
| Sega CD | env 13 (legacy only) | Genesis Plus GX registers the interface, deregisters with NULL when system_hw != MCD
|
| Amiga | env 13 / 58 EXT | PUAE supports the interface. Plain .m3u entries land in DF0 only — games that need DF1 mounted simultaneously require (MD) filename markers (PUAE convention) which the auto-bundler doesn't generate |
Cores that don't expose disk control (Beetle PCE / PCE Fast / Opera 3DO) won't surface the swap chord. Most 3DO and PC Engine CD games are single-disc anyway.
Chord doesn't fire. Check the log at ~/.local/share/Emutastic/Logs/emulator.log for [DiskDiag] poll alive heartbeats. If you see ctlConnected=False, the controller isn't reaching the EmuThread. If ctrlA=False while you're clicking L3, your controller may not expose the left thumb button via SDL3 — try a different controller or rebind the chord.
Status shows "only one disc loaded". The library entry is for a single image. Put every disc file in the same folder and re-import the folder; the bundler will write the .m3u and replace the single-disc entry.
Status shows "this core doesn't support disc switching". The current core didn't register SET_DISK_CONTROL_INTERFACE. Check the per-console table above — for FDS, this is normal (chord uses input injection instead). For Sega CD it means the loaded ROM isn't an MCD image (Genesis Plus GX deregisters disk control for non-MCD content). For other consoles, try a different core via Preferences → Cores.
Game won't boot, status says "PLEASE SET DISK CARD" (FDS). You disabled nestopia_fds_auto_insert. Re-enable it — that option is the entire boot mechanism for FDS in Nestopia; without it the core waits forever for a frontend disk-control UI that doesn't exist for FDS.
Console Notes
- Nintendo 64
- Nintendo 3DS
- GameCube
- Sega Saturn
- Dreamcast
- PlayStation
- PlayStation Portable
- TurboGrafx-CD
- Neo Geo
- Arcade
- Vectrex
- Philips CD-i
- Atari Jaguar
Features
- Artwork & Metadata
- Cheats
- Cloud Sync
- Controllers
- Disc-Based Systems
- Disk Swapping
- Portable Mode
- RetroAchievements
- ROM Hacks
- Hardcore Compliance
Technical
Platforms
Legal