Saturn.emu - RetroBIOS¶
Technical notes
Member of the EX Emulator series by Robert Broglia, published as com.explusalpha.SaturnEmu and built for arm64 and x86_64 only (Saturn.emu/metadata/conf.mk:2-7, Saturn.emu/config.mk:7-9). ES-DE reaches it through the SATURN-EMU find rule, which only the Android rule set carries, and offers it under both the saturn and saturnjp systems. Mednafen's Saturn module is vendored under Saturn.emu/src/ss on the 1.32 line (EmuFramework/include/shared/mednafen/mednafen-config.h:167) and driven by the app's own video, audio, input and save layers (Saturn.emu/src/CMakeLists.txt:6-40). Seventeen files differ from the Mednafen 1.32.1 release, none of it touching file loading: statics become externals the app reads (Saturn.emu/src/ss/ss.cpp:146, Saturn.emu/src/ss/smpc.cpp:96,146, Saturn.emu/src/ss/vdp2.cpp:46,63, Saturn.emu/src/ss/cdb.cpp:535), backup memory moves to the app's file objects and the periodic save timers are dropped (Saturn.emu/src/ss/ss.cpp:1836-1849, mednafen 1.32.1 src/ss/ss.cpp:927-970, 1592-1600,1867-1874), the VDP2 work queue becomes a framework ring buffer (Saturn.emu/src/ss/vdp2_render.cpp:3211-3231), and the rest is enum and virtual qualifier tidying. The BIOS and cart ROM block is byte-identical to the release, as are cart.cpp, cart/rom.cpp and db.cpp.
Content is read from .cue, .ccd, .chd, .toc and .m3u files (Saturn.emu/metadata/conf.mk:5, Saturn.emu/src/main/system.ccm:106-109). An archive is opened by the app, which prefers an .m3u member and otherwise keeps the first entry passing that filter, and an .m3u names up to 16 images (Saturn.emu/src/main/Main.cc:186-246). Every load goes through the module's LoadCD entry point (Saturn.emu/src/main/Main.cc:275, Saturn.emu/src/ss/ss.cpp:1757-1806). The ROM entry point Load is never called: its only call site in the tree is a shared helper this app does not use (EmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:133-146).
Four files the user supplies carry no name of their own. Pickers store arbitrary URIs under NA/EU BIOS, JP BIOS, KoF '95 ROM and Ultraman ROM, each filtered to names ending in .bin and each refusing to descend into archives (Saturn.emu/src/main/EmuMenuViews.cc:34-37,44-145, EmuFramework/include/emuframework/DataPathSelectView.hh:77-102, Saturn.emu/src/main/system.ccm:85-95,128-131, Saturn.emu/src/main/options.cc:65-68,98-101). MDFN_GetSettingS answers the four path settings with the fixed tokens jp, na, kof95 and ultraman, and MDFN_MakeFName turns each token back into the matching URI, ending the load with a message pointing at the File Paths menu when it is unset (Saturn.emu/src/main/options.cc:215-228,245-285). Every other setting name reaches unreachable(), so no other firmware request can be made.
Which BIOS is read follows the emulated area: Japan and Asia NTSC take the JP path, every other area the NA/EU path (Saturn.emu/src/ss/ss.cpp:1388-1394). The area comes from the Region menu, or when that is Auto from the first 16 sectors of the disc, checked against the security code hash and the "SEGA SEGASATURN " magic (Saturn.emu/src/main/EmuMenuViews.cc:216-251, Saturn.emu/src/main/options.cc:203-204, Saturn.emu/src/ss/ss.cpp:959-968, 1126-1144,1778-1787). The image is rejected at any length other than 524288 and then hashed (Saturn.emu/src/ss/ss.cpp:1400-1404). With ss.bios_sanity forced on (Saturn.emu/src/main/options.cc:193-194) a table of five known images drives two further tests: a file whose name is one of the five must hash to that entry, and a file whose hash is one of the five must belong to the area being emulated (Saturn.emu/src/ss/ss.cpp:1406-1439). An image outside the table passes both, since each test only rejects on a match. A third test compares Saturn against ST-V images and can never fire here.
Cart type comes from the Cart Type menu when it is not Auto, otherwise from the internal game database, otherwise none (Saturn.emu/src/main/EmuMenuViews.cc:180-214, Saturn.emu/src/main/options.cc:161-164, Saturn.emu/src/ss/ss.cpp:1761-1790). The database forces the KoF '95 cart for MK-81088 and T-3101G and the Ultraman cart for T-13308G, marking all three a game requirement (Saturn.emu/src/ss/db.cpp:93-96,403), so those three discs read a ROM image and every other disc reads none.
ST-V, the bootable ROM cart and Action Replay 4M Plus are compiled and unreachable. All three exist only behind cart types the Cart Type menu does not list and the database never assigns, and the first two are entered from Load alone (Saturn.emu/src/ss/ss.cpp:1630,1669, Saturn.emu/src/ss/cart.cpp:166-181). Their paths would ask for ss.bios_stv_jp, ss.bios_stv_na, ss.bios_stv_eu and ss.cart.satar4mp_path, none of which MDFN_GetSettingS answers (Saturn.emu/src/ss/ss.cpp:1379-1387,1293, Saturn.emu/src/main/options.cc:215-228). The ST-V EEPROM save file and the ST-V branches in the app's own backup memory code are dead for the same reason (Saturn.emu/src/main/Main.cc:119-123,141-142).
Per content the app writes and reads back a .bkr backup RAM image, a .smpc real time clock block, .mca save states and, when a memory cart is selected, a gzipped .bcr cart image; settings live in SaturnEmu.config (Saturn.emu/src/main/Main.cc:50-129,152-155, Saturn.emu/src/main/system.ccm:180, Saturn.emu/src/ss/cart/backup.cpp:69-73, Saturn.emu/src/main/AppMeta.cc:28). Mednafen's image reader picks up an .sbi beside a cue sheet when one is present (EmuFramework/src/shared/mednafen/cdrom/CDAccess_Image.cpp:924-941). Cheats are off (Saturn.emu/src/main/options.cc:187-188), and ui.png, gpOverlay.png and the shader sources are drawn from the application bundle (EmuFramework/include/emuframework/AssetManager.hh:61-66, EmuFramework/src/AssetManager.cc:63-69, EmuFramework/src/VideoImageEffect.cc:163-173).
7 files | 2 required, 5 optional | 7 in repo, 0 missing
sega_101.bin required in repo japan, asia-ntsc
Saturn BIOS v1.01, read for Japan and Asia NTSC
- System: sega-saturn
- Size: 512.0 KB
- SHA256:
dcfef4b99605... - Validation: existence, size, sha256
- Source:
Saturn.emu/src/ss/ss.cpp:1388-1394,Saturn.emu/src/ss/ss.cpp:1396-1404,Saturn.emu/src/ss/ss.cpp:1418,Saturn.emu/src/ss/ss.cpp:2398,Saturn.emu/src/main/options.cc:218-219,Saturn.emu/src/main/options.cc:276-281,Saturn.emu/src/main/EmuMenuViews.cc:67-88 - Platforms: batocera, emudeck, lakka, recalbox, retroarch, retrobat, retrodeck, retropie, rocknix, romm
- Config key:
CFGKEY_JP_BIOS_PATH - The image the module's own setting table names for the JP path (Saturn.emu/src/ss/ss.cpp:2398), and one of three the sanity table accepts for Japan and Asia NTSC. Any 524288-byte image the user picks loads unless the sanity table contradicts it, but a file carrying this name must carry this hash.
mpr-17933.bin required in repo north-america, europe, south-korea, asia-pal, brazil, latin-america
Saturn BIOS read for every area outside Japan and Asia NTSC
- System: sega-saturn
- Size: 512.0 KB
- SHA256:
96e106f740ab... - Validation: existence, size, sha256
- Source:
Saturn.emu/src/ss/ss.cpp:1388-1394,Saturn.emu/src/ss/ss.cpp:1396-1404,Saturn.emu/src/ss/ss.cpp:1420,Saturn.emu/src/ss/ss.cpp:2399,Saturn.emu/src/main/options.cc:220-221,Saturn.emu/src/main/options.cc:270-275,Saturn.emu/src/main/EmuMenuViews.cc:44-65,Saturn.emu/src/main/EmuMenuViews.cc:162-176 - Platforms: batocera, emudeck, lakka, recalbox, retroarch, retrobat, retrodeck, retropie, rocknix, romm
- Config key:
CFGKEY_NA_BIOS_PATH - The image the module's own setting table names for the NA/EU path (Saturn.emu/src/ss/ss.cpp:2399). The sanity table grants it every area except Japan and Asia NTSC, which covers North America, Europe, South Korea, Asia PAL, Brazil and Latin America as the Region menu names them.
sega_100.bin optional in repo japan, asia-ntsc
Saturn BIOS v1.00, accepted for Japan and Asia NTSC
- System: sega-saturn
- Size: 512.0 KB
- SHA256:
ae4058627bb5... - Validation: existence, size, sha256
- Source:
Saturn.emu/src/ss/ss.cpp:1417,Saturn.emu/src/ss/ss.cpp:1396-1439 - Platforms: lakka, retroarch, retrodeck, retropie, romm
- Config key:
CFGKEY_JP_BIOS_PATH - Interchangeable with the other two Japan images: the sanity table gives all three the same areas, and nothing in the module ranks them.
sega1003.bin optional in repo japan, asia-ntsc
Saturn BIOS v1.003, accepted for Japan and Asia NTSC
- System: sega-saturn
- Size: 512.0 KB
- SHA256:
cc1e1b7f88f1... - Validation: existence, size, sha256
- Source:
Saturn.emu/src/ss/ss.cpp:1416,Saturn.emu/src/ss/ss.cpp:1396-1439 - Platforms: lakka, retroarch, retrodeck, retropie, romm
- Config key:
CFGKEY_JP_BIOS_PATH
sega_100a.bin optional in repo north-america, europe, south-korea, asia-pal, brazil, latin-america
Saturn BIOS v1.00a, accepted for every area outside Japan and Asia NTSC
- System: sega-saturn
- Size: 512.0 KB
- SHA256:
87293093fad8... - Validation: existence, size, sha256
- Source:
Saturn.emu/src/ss/ss.cpp:1419,Saturn.emu/src/ss/ss.cpp:1396-1439 - Platforms: lakka, retroarch, retrodeck, retropie, romm
- Config key:
CFGKEY_NA_BIOS_PATH
mpr-18811-mx.ic1 optional in repo
King of Fighters '95 ROM cart
- System: sega-saturn
- Size: min 2.0 MB
- Validation: existence, size
- Source:
Saturn.emu/src/ss/ss.cpp:1291,Saturn.emu/src/ss/ss.cpp:1348-1357,Saturn.emu/src/ss/cart.cpp:162-164,Saturn.emu/src/ss/cart/rom.cpp:37-47,Saturn.emu/src/ss/db.cpp:94-95,Saturn.emu/src/ss/db.cpp:403,Saturn.emu/src/ss/ss.cpp:2434,Saturn.emu/src/main/options.cc:222-223,Saturn.emu/src/main/options.cc:258-263,Saturn.emu/src/main/EmuMenuViews.cc:90-111 - Platforms: batocera, lakka, recalbox, retroarch, retrobat, retrodeck, retropie, rocknix, romm
- Config key:
CFGKEY_KOF_ROM_PATH - Read when the cart type is KoF '95, which the internal database forces for MK-81088 and T-3101G and which the Cart Type menu also offers. Those two discs end the load when the path is unset; every other disc ignores it. CART_ROM_Init takes a fixed 2097152 bytes and Stream::read throws on a shorter file, so anything smaller aborts and anything larger has its tail ignored. The name comes from the module's setting table, which this build never reads: settings.cpp is out of the shared source list, and the picker lists names ending in .bin.
mpr-19367-mx.ic1 optional in repo
Ultraman - Hikari no Kyojin Densetsu ROM cart
- System: sega-saturn
- Size: min 2.0 MB
- Validation: existence, size
- Source:
Saturn.emu/src/ss/ss.cpp:1292,Saturn.emu/src/ss/ss.cpp:1348-1357,Saturn.emu/src/ss/cart.cpp:163-164,Saturn.emu/src/ss/cart/rom.cpp:37-47,Saturn.emu/src/ss/db.cpp:96,Saturn.emu/src/ss/db.cpp:403,Saturn.emu/src/ss/ss.cpp:2435,Saturn.emu/src/main/options.cc:224-225,Saturn.emu/src/main/options.cc:264-269,Saturn.emu/src/main/EmuMenuViews.cc:113-134 - Platforms: batocera, lakka, recalbox, retroarch, retrobat, retrodeck, retropie, rocknix, romm
- Config key:
CFGKEY_ULTRAMAN_ROM_PATH - Read when the cart type is Ultraman, which the internal database forces for T-13308G and which the Cart Type menu also offers. Same fixed 2097152-byte read as the other ROM cart, and the same picker filtered to .bin.
Generated on 2026-08-23T16:12:06Z