-
Notifications
You must be signed in to change notification settings - Fork 0
Dreamcast
Status on Linux: available. Dreamcast was hidden through v0.7.8 while a sustained- framerate issue at scene changes was investigated. Root-caused (June 2026): two stacked pacing bugs in the emulation loop — not the core, not the hardware. Both fixed; boot screens, menus, and gameplay now run gapless. Details in the pacing section below and Emulation Timing.
Getting battery saves to work requires satisfying five conditions simultaneously — missing any one results in "No VMU Found":
-
RETRO_ENVIRONMENT_SET_CONTROLLER_INFO(cmd 35) must returntrue. Returningfalsecauses Flycast to skip all sub-peripheral initialization. -
RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE(cmd 23) must supply a function pointer. Even a no-op stub works, but returningfalseblocks sub-peripheral setup. -
Core options
reicast_device_portN_slot1 = "VMU"must be pre-seeded beforeretro_load_game. The core reads these during maple bus reconfiguration on load. -
retro_set_controller_port_devicemust be called for all 4 ports, not just port 0. This triggers full maple bus reconfiguration. -
The
system/dc/directory must exist, but VMU files must NOT be pre-created. Flycast auto-createsvmu_save_A1.binetc. using its own zlib-compressed format. Pre-creating empty files → core sees them as corrupt → "No VMU Found".
All five are handled by DreamcastHandler.cs.
Note: The core option prefix is
reicast_in this build, notflycast_.
Dreamcast .chds identify and unlock achievements end-to-end (v1.6.9). The libchdr-backed cdreader handles the GD-ROM HD-area canonical-anchor rebase that Dreamcast PVDs depend on — see RetroAchievements for the implementation detail. .gdi, .cdi, and .cue+.bin continue to work through rcheevos's default reader.
Out of the box, Dreamcast renders at native 640x480 through the OpenGL HW path (GL context → FBO → never-blocking PBO readback ring → native Wayland toplevel present, with X11/SDL fallback). The Flycast core has strong upscaling support — change these in Preferences → Cores → Flycast Options or per-game:
| Option | Native | Upscaled (suggested) |
|---|---|---|
reicast_internal_resolution |
640x480 |
1920x1440 or 2560x1920
|
reicast_anisotropic_filtering |
4x |
16x |
reicast_texupscale |
1x |
4x (xBRZ texture upscaling) |
reicast_mipmapping |
enabled |
enabled |
reicast_alpha_sorting |
per-triangle |
per-pixel (most accurate, slightly heavier) |
All options take effect immediately without restarting the game.
AMD/Intel GPU note: like Dolphin, Flycast binds a non-zero FBO that some AMD/Intel GL drivers misrender. Enabling the global AMD/Intel compatibility toggle in Preferences renders to FBO 0 and disables the GL overlay path for Dreamcast (the overlay needs a separate FBO to blit from); NVIDIA users keep the fast direct-present path.
The Linux build sets reicast_gdrom_fast_loading = enabled by default. The core default (disabled) emulates authentic GD-ROM read speed, which makes games sit in loading/buffering scenes in real time (logged as ~5fps emu windows at every scene change, then full 60). Fast loading is the libretro docs' recommended cure and is user-overridable in Core Options.
Some Dreamcast titles run at native 30fps — they advance two game frames per retro_run()
and produce ~33ms of audio per call. Pacing every call to the nominal 60Hz budget (16.7ms)
floods the audio queue at 2× realtime; the loop's overfill backstop then becomes the de facto
clock, and a frozen buffer-occupancy read inside that backstop turned each correction into a
multi-second stall — the long-standing "18fps bursts with 3–4 second gaps" symptom in menus
(Hydro Thunder was the canonical repro), plus crunchy audio as the real buffer drained to
empty underneath.
Both halves are fixed: the loop now paces each retro_run by the audio it actually
produced — the game's own clock — so 30fps titles settle at 30, 60fps titles at 60, with
no special-casing and a stable cushion (see Emulation Timing). Verified: Hydro Thunder
menus lock at 30fps with zero underruns; Soulcalibur (a 60fps title) locks at 60.
Flycast's threaded rendering stays at its core default (enabled) — it benches slightly faster than single-threaded and the apparent "render-thread deadlocks" investigated during this work turned out to be the frontend's own stalled loop, not Flycast.
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