Skip to content

Sega Saturn

codingncaffeine edited this page Jun 6, 2026 · 1 revision

Sega Saturn

Default Core: Mednafen Saturn (Beetle)

Emutastic ships Mednafen Saturn (mednafen_saturn_libretro.so) as the default Saturn core. It's software-rendered (CPU-bound but easily full-speed on any modern PC), based on Mednafen's accuracy framework, and — crucially — its save states round-trip across app launches. Save a state, exit Emutastic, click that state from the Save States browser tomorrow → it loads back into the exact moment you saved.

Kronos and Yabause are also supported as alternatives, selectable per-console in Preferences → Cores or per-game via the Cores override.

Known Issue: Kronos Save States Don't Survive App Exit

If you switch the Saturn core to Kronos (kronos_libretro.so), be aware:

Kronos save states only work within the same Emutastic session. If you save a state, close the game (or close Emutastic), and later try to load that state from the Save States browser, the game will appear to "load" — you'll hear a click of audio and see the saved frame — but it will be frozen and won't accept input.

This is not an Emutastic bug. Kronos explicitly declares the libretro RETRO_SERIALIZATION_QUIRK_SINGLE_SESSION flag, which means the core author has documented that its serialized state is only valid in the same process where it was created. Kronos's retro_serialize doesn't capture its SH-2 dynarec caches, VDP1/VDP2 render thread state, CD-block reader thread, or SCSP audio sync — those subsystems are runtime-only. A cold launch can't reconstitute them from the snapshot, so the game wedges.

When Emutastic detects a SINGLE_SESSION core trying to load a state at startup, it now refuses the load and shows a transient message:

"This core doesn't support resuming save states across launches."

The game boots normally instead of presenting a frozen "loaded" state.

When You'd Still Want Kronos Anyway

Kronos has real advantages over Beetle Saturn that may be worth the save-state limitation for specific titles:

  • OpenGL hardware renderer with internal-resolution upscaling (2×, 4×, 8×) — Beetle is locked to 1× native. On Linux the GL path renders into an FBO (read back through the never-blocking PBO ring) and presents through the native Wayland toplevel.
  • Beetle-incompatible titles — a handful of Saturn releases only boot reliably on Kronos. Kronos also has bespoke fixes for a couple of fighting titles that Beetle can't run at all.
  • ST-V arcade ROMs — only Kronos supports these.

If you play one of these, set Kronos as the per-game core and use in-session save states (save and load while the game is still open). Don't rely on the Save States browser to resume after closing the game.

Save State Compatibility Across Cores

Save states are not portable between cores. A state saved on Beetle Saturn cannot be loaded on Kronos and vice versa — the snapshot format is core-specific. If you switch the Saturn core for a game, your existing states for that game become unreadable from the new core (the files stay on disk but show "Failed to load" if you click them).

BIOS Files

Both Beetle Saturn and Kronos accept the same Saturn BIOS dumps. Emutastic looks for them under the system BIOS directory:

  • kronos/saturn_bios.bin (Kronos accepts this generic file regardless of region) or
  • Per-region Beetle/Kronos filenames: sega_101.bin (Japan v1.00), mpr-17933.bin (Japan v1.01), mpr-17941.bin (USA / Europe v1.01)

Some community guides reverse mpr-17933 and mpr-17941. Per the libretro docs the v1.01 USA/EU BIOS is mpr-17941 and the v1.01 Japan BIOS is mpr-17933 — Emutastic's BIOS resolver follows the libretro convention.

If you previously had Saturn working with Kronos, the same BIOS files will work with Beetle Saturn — no separate BIOS pack needed.

RetroAchievements

Saturn .chds identify and unlock achievements end-to-end via the libchdr-backed cdreader (v1.6.9). .cue+.bin continues to work through rcheevos's default reader. See RetroAchievements for the integration overview.

Visual Upgrades (Kronos Only)

The default Beetle Saturn core is software-rendered with no upscaling options. Kronos (kronos_libretro.so) has an OpenGL HW renderer with limited but effective visual upgrades:

Option Native Upscaled (suggested)
kronos_resolution_mode original 4X
kronos_meshmode disabled enabled (improved mesh transparency)
kronos_bandingmode disabled enabled (reduced color banding)

These are surfaced in the cog menu (Internal Resolution / Mesh Transparency / Color Banding Fix); runtime validation strips whichever option set doesn't match the loaded core. Options take effect immediately without restarting the game. Saturn's architecture limits what GPU upscaling can do compared to PS1 or N64, but 4X resolution still makes a noticeable difference on 2D and 3D titles alike.

Reminder: Kronos save states only work within the same session — see the save state note above.

Performance Notes

Beetle Saturn is software-only. On a modern x64 desktop (Ryzen 5 / Core i5 from 2018 or newer) it holds full speed at native resolution without breaking a sweat. If you want widescreen hacks or upscaled output, that's Kronos territory.

Clone this wiki locally