Files
libretro/emulators/ymir.yml
T
Abdessamad Derraz 315dab82b7 feat: give each set its requirement and one pick
Three changes to the search-list model, one commit because the readers
and the profiles must move together for the schema to hold.

Set requirement in a groups map. pom2 falls back on apple2.rom for the
][ and the ][+, and on apple2e.rom for the //e it boots and for the
unenhanced //e: one required on the file could not say both. A profile
now declares groups: {name: {required}}, a member writes no required
of its own (schema and validate_schemas refuse one) and load_emulator_
profiles derives it, true when one of its sets is. group takes a name,
a list, or a map from set to rank where the rank differs per set. pom2
is grouped from SystemProfile.cpp and MainWindow.cpp:246-296 at its pin.

One member per required set under --required-only. The pick is the
first the code reads among the held members the region filter leaves,
by rank then declaration order; a set the platform declares a member
of is carried by that declaration. The emulator pack, verify
--emulator, the platform pack, its manifest and verify --platform read
alternatives.required_only_spares or core_file_spares.

variant_group is now selection_slot: files a core chooses between by
a rule other than first found (disc territory for PicoDrive and
Pizza Boy SC, the o2em_bios option, a WebAssembly probe in SWF
Player). Where the code takes any one, the field became a group:
ARMSX1 (ArmSxBackend.java:149-157, name order), ePSXe (load_bios
0x433540-0x433621 of the 2.0.5 Linux x64 binary, one configured path,
HLE when BiosHLE is set), FPse and FPse-NG, DXX-Rebirth's HOGs
(inferno.cpp:472-512). odin and zesarux carried it with no effect.
slot.py compares ranks only between candidates that share a set.
2026-11-09 18:19:32 +01:00

288 lines
13 KiB
YAML

emulator: "Ymir"
type: standalone + libretro
core_classification: community_fork
source:
standalone: "https://github.com/ymir-emu/Ymir"
libretro: "https://github.com/warmenhoven/Emir/tree/libretro"
upstream: "https://github.com/ymir-emu/Ymir"
profiled_date: "2026-10-21"
source_commit:
standalone: "ff9353790c191752a4d3dc19b9056c666acaf70a"
libretro: "8174cbbeea4070654841cdd4604361b3eee8fdd1"
core_version:
standalone: "0.4.2"
libretro: "0.4.0"
version_basis:
standalone:
kind: file
path: "CMakeLists.txt"
pattern: '^project\(Ymir VERSION ([0-9][^ )]*)\)'
libretro:
kind: file
path: "CMakeLists.txt"
pattern: '^project\(Ymir VERSION ([0-9][^ )]*)\)'
display_name: "Sega - Saturn (Ymir)"
cores:
- ymir
found_by: {standalone: content}
systems:
- sega-saturn
data_root:
windows:
path: "%APPDATA%/StrikerX3/Ymir"
source_ref: "apps/ymir-sdl3/src/app/profile.cpp:29-34, apps/ymir-sdl3/src/app/app.cpp:342-437, apps/ymir-sdl3/CMakeLists.txt:647-648"
note: "Portable profile: the current directory, then the folder of the executable, when it holds Ymir.toml. The first launch asks between the two. -p names a folder, -u forces this one"
macos:
path: "~/Library/Application Support/StrikerX3/Ymir"
source_ref: "apps/ymir-sdl3/src/app/profile.cpp:29-34, apps/ymir-sdl3/src/app/app.cpp:342-437, apps/ymir-sdl3/CMakeLists.txt:647-648"
note: "Portable profile: the folder of the executable when it holds Ymir.toml. The first launch asks between the two. -p names a folder, -u forces this one"
linux:
path: "$XDG_DATA_HOME/StrikerX3/Ymir, else ~/.local/share/StrikerX3/Ymir"
source_ref: "apps/ymir-sdl3/src/app/profile.cpp:29-34, apps/ymir-sdl3/src/app/app.cpp:342-437, apps/ymir-sdl3/CMakeLists.txt:647-648"
note: "Portable profile: the current directory, then the folder of the executable, when it holds Ymir.toml. The first launch asks between the two. -p names a folder, -u forces this one. Always this folder under Flatpak"
notes: |
Ymir is a Sega Saturn emulator by StrikerX3. The libretro port by
warmenhoven wraps the shared ymir-core library on the libretro branch of
warmenhoven/Emir, which the buildbot builds (include_core_ymir in
libretro-super). PR #746 was closed unmerged.
No .info file exists in libretro-core-info.
Standalone: scans configured directories recursively for files matching
the expected size. No specific filenames required. Identifies known ROMs
by XXH128 hash from an internal database (19 IPL variants, 4 CD Block
versions, 2 ROM carts). Unknown files are accepted if size matches.
Libretro: reads {system}/sega_101.bin, mpr-17933.bin and saturn_bios.bin,
each kept when it is exactly 512 KiB. A candidate's region comes from the
IPL database, else from two hashes the port knows (sega_101.bin Japan,
mpr-17933.bin North America and Europe). The ymir_region option picks the
candidate of its region, else the first found, and once the disc is loaded
a candidate whose region matches the disc's area code replaces it.
ref: apps/ymir-libretro/src/libretro.cpp:305-309, 584-712,
apps/ymir-libretro/src/libretro.cpp:1228-1238, 1285-1306
Batocera standalone: configgen maps IPLROMImages to /userdata/bios,
CDBlockROMImages to /userdata/roms/saturn/cdb/, ROMCartImages to
/userdata/roms/saturn.
No HLE fallback for IPL ROM. CD Block LLE is optional and falls back to
HLE when disabled or no ROM found. Known CDB versions: 1.04, 1.05, 1.06.
ROM cartridges: KoF95 and Ultraman shipped with physical ROM carts.
Auto-detected from game database when loading a disc.
Addon cartridges: 1M/4M DRAM expansion handled via core option (no files).
XXH128 hashes used for ROM identification only, not validation.
All file loading validates size only.
groups:
ipl:
required: true
files:
- name: "sega_101.bin"
system: sega-saturn
required: true
mode: standalone
size: 524288
validation: [size]
description: "Saturn IPL ROM (BIOS). Any region accepted."
note: "The libretro port reads sega_101.bin, mpr-17933.bin and saturn_bios.bin from its system directory (kBiosFilenames)."
source_ref:
standalone: "apps/ymir-sdl3/src/util/rom_loader.cpp:9-22, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53, libs/ymir-core/include/ymir/sys/memory_defs.hpp:9"
# The libretro build reads three names in its system directory. The md5 of
# the first two is that of the image whose XXH128 is the kLocalBiosHashes
# row the port gives a region to.
- name: "sega_101.bin"
system: sega-saturn
region: [japan]
group: ipl
priority: 1
mode: libretro
size: 524288
validation: [size]
md5: "85ec9ca47d8f6807718151cbcca8b964"
description: "Saturn IPL ROM 1.01 (1994-12-28), Japan."
note: "First name read. The port gives this image the Japan region, so it is loaded when ymir_region is japan and kept or switched to for a disc whose area code is J. Any other 512 KiB file under this name is read with the region the IPL database gives it, or none."
source_ref:
libretro: "apps/ymir-libretro/src/libretro.cpp:305-309, apps/ymir-libretro/src/libretro.cpp:596-606, apps/ymir-libretro/src/libretro.cpp:627-648, apps/ymir-libretro/src/libretro.cpp:651-702, apps/ymir-libretro/src/libretro.cpp:1231-1238, apps/ymir-libretro/src/libretro.cpp:1290-1306"
- name: "mpr-17933.bin"
system: sega-saturn
region: [north-america, europe, asia-ntsc, asia-pal, brazil, latin-america]
group: ipl
priority: 2
mode: libretro
size: 524288
validation: [size]
md5: "3240872c70984b6cbfda1586cab68dbe"
description: "Saturn IPL ROM 1.01a (1994-11-15), North America and Europe."
note: "Second name read. The port gives this image the US_EU region, loaded when ymir_region is north_america or europe and for a disc whose area code is any of T, U, B, A, E and L. Area K maps to the KR region, which neither image carries, so a Korean disc keeps the image already loaded."
source_ref:
libretro: "apps/ymir-libretro/src/libretro.cpp:305-309, apps/ymir-libretro/src/libretro.cpp:596-606, apps/ymir-libretro/src/libretro.cpp:627-648, apps/ymir-libretro/src/libretro.cpp:651-702, apps/ymir-libretro/src/libretro.cpp:1231-1238, apps/ymir-libretro/src/libretro.cpp:1290-1306, libs/ymir-core/include/ymir/media/media_defs.hpp:17-29"
- name: "saturn_bios.bin"
system: sega-saturn
group: ipl
priority: 3
mode: libretro
size: 524288
validation: [size]
description: "Saturn IPL ROM, any revision"
note: "Third name read. No region comes with the name: the image gets the one the IPL database gives its hash, or none, and is loaded when it is the first candidate found or its region is the one asked for."
source_ref:
libretro: "apps/ymir-libretro/src/libretro.cpp:305-309, apps/ymir-libretro/src/libretro.cpp:651-702, apps/ymir-libretro/src/libretro.cpp:1231-1238"
# IPL images named by the standalone XXH128 database. The md5 is that of
# the image whose seeded XXH128 matches the database row.
- name: "SAT_1.00-(J).bin"
system: sega-saturn
required: false
mode: standalone
size: 524288
validation: [size]
md5: "af5828fdff51384f99b3c4926be27762"
description: "Saturn IPL ROM 1.00 (1994-09-21), Japan."
note: "Picked up by the recursive IPL scan like any 512 KiB file and identified by its XXH128 row."
source_ref:
standalone: "libs/ymir-core/src/ymir/db/ipl_db.cpp:9, libs/ymir-core/include/ymir/sys/memory_defs.hpp:10, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53"
- name: "sega_101.bin"
system: sega-saturn
required: false
mode: standalone
size: 524288
validation: [size]
md5: "85ec9ca47d8f6807718151cbcca8b964"
description: "Saturn IPL ROM 1.01 (1994-12-28), Japan."
note: "Picked up by the recursive IPL scan like any 512 KiB file and identified by its XXH128 row."
source_ref:
standalone: "libs/ymir-core/src/ymir/db/ipl_db.cpp:10, libs/ymir-core/include/ymir/sys/memory_defs.hpp:10, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53"
- name: "SAT_1.00a-(U+E).bin"
system: sega-saturn
required: false
mode: standalone
size: 524288
validation: [size]
md5: "f273555d7d91e8a5a6bfd9bcf066331c"
description: "Saturn IPL ROM 1.00a (1994-11-15), North America and Europe."
note: "Picked up by the recursive IPL scan like any 512 KiB file and identified by its XXH128 row."
source_ref:
standalone: "libs/ymir-core/src/ymir/db/ipl_db.cpp:11, libs/ymir-core/include/ymir/sys/memory_defs.hpp:10, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53"
- name: "mpr-17933.bin"
system: sega-saturn
required: false
mode: standalone
size: 524288
validation: [size]
md5: "3240872c70984b6cbfda1586cab68dbe"
description: "Saturn IPL ROM 1.01a (1994-11-15), North America and Europe."
note: "Picked up by the recursive IPL scan like any 512 KiB file and identified by its XXH128 row."
source_ref:
standalone: "libs/ymir-core/src/ymir/db/ipl_db.cpp:12, libs/ymir-core/include/ymir/sys/memory_defs.hpp:10, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53"
- name: "hisaturn.bin"
system: sega-saturn
required: false
mode: standalone
size: 524288
validation: [size]
md5: "3ea3202e2634cb47cb90f3a05c015010"
description: "HiSaturn IPL ROM 1.01 (1995-01-30), Japan."
note: "Picked up by the recursive IPL scan like any 512 KiB file and identified by its XXH128 row."
source_ref:
standalone: "libs/ymir-core/src/ymir/db/ipl_db.cpp:14, libs/ymir-core/include/ymir/sys/memory_defs.hpp:10, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53"
- name: "mpr-18100.bin"
system: sega-saturn
required: false
mode: standalone
size: 524288
validation: [size]
md5: "cb2cebc1b6e573b7c44523d037edcd45"
description: "HiSaturn IPL ROM 1.02 (1995-05-19), Japan."
note: "Picked up by the recursive IPL scan like any 512 KiB file and identified by its XXH128 row."
source_ref:
standalone: "libs/ymir-core/src/ymir/db/ipl_db.cpp:15, libs/ymir-core/include/ymir/sys/memory_defs.hpp:10, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53"
- name: "hisaturn_v103.bin"
system: sega-saturn
required: false
mode: standalone
size: 524288
validation: [size]
md5: "0306c0e408d6682dd2d86324bd4ac661"
description: "HiSaturn IPL ROM 1.03 (1995-07-20), Japan."
note: "Picked up by the recursive IPL scan like any 512 KiB file and identified by its XXH128 row."
source_ref:
standalone: "libs/ymir-core/src/ymir/db/ipl_db.cpp:16, libs/ymir-core/include/ymir/sys/memory_defs.hpp:10, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53"
- name: "vsaturn.bin"
system: sega-saturn
required: false
mode: standalone
size: 524288
validation: [size]
md5: "ac4e4b6522e200c0d23d371a8cecbfd3"
description: "V-Saturn IPL ROM 1.01 (1995-07-03), Japan."
note: "Picked up by the recursive IPL scan like any 512 KiB file and identified by its XXH128 row."
source_ref:
standalone: "libs/ymir-core/src/ymir/db/ipl_db.cpp:17, libs/ymir-core/include/ymir/sys/memory_defs.hpp:10, apps/ymir-sdl3/src/app/rom_manager.cpp:14-53"
- name: "cdb/cdb_rom.bin"
system: sega-saturn
required: false
hle_fallback: true
size: 65536
validation: [size]
description: "SH1 CD Block ROM for low-level CD drive emulation. Scans cdb/ subdirectory for any matching file."
source_ref:
standalone: "apps/ymir-sdl3/src/util/rom_loader.cpp:25-38, apps/ymir-sdl3/src/app/rom_manager.cpp:55-91, libs/ymir-core/include/ymir/hw/sh1/sh1_defs.hpp:7"
libretro: "apps/ymir-libretro/src/libretro.cpp:720-737"
- name: "mpr-18811-mx.ic1"
system: sega-saturn
required: false
category: game_data
size: 2097152
validation: [size]
description: "ROM cartridge for The King of Fighters '95."
source_ref:
standalone: "apps/ymir-sdl3/src/app/rom_manager.cpp:93-130, libs/ymir-core/include/ymir/db/rom_cart_db.hpp:19-22"
libretro: "apps/ymir-libretro/src/libretro.cpp:760, apps/ymir-libretro/src/libretro.cpp:744-756"
- name: "mpr-19367-mx.ic1"
system: sega-saturn
required: false
category: game_data
size: 2097152
validation: [size]
description: "ROM cartridge for Ultraman: Hikari no Kyojin Densetsu."
source_ref:
standalone: "apps/ymir-sdl3/src/app/rom_manager.cpp:93-130, libs/ymir-core/include/ymir/db/rom_cart_db.hpp:25-28"
libretro: "apps/ymir-libretro/src/libretro.cpp:761, apps/ymir-libretro/src/libretro.cpp:744-756"
- name: "gamecontrollerdb.txt"
system: sega-saturn
required: false
mode: standalone
bundled: true
sha1: ["eb06dba857f50e613c997198e4bd2da8e2c9fb21", "4a1981a3ff91352c4de50fbc82e8cc960c49183b"]
md5: ["2d76f311eecb0cdab270bf3fc5547173", "ec570b054019676c6b20144cbd47e562"]
description: "SDL game controller mapping database"
note: >
Passed to SDL_AddGamepadMappingsFromFile from the working directory, then
from the profile root. A missing file or a load failure is logged and SDL
keeps its built-in mappings. The release packages copy the file from
mdqinc/SDL_GameControllerDB at build time. Hashes of the copies in the
v0.2.1 Linux and macOS packages and, with CRLF line ends, the Windows
zips.
source_ref:
standalone: "apps/ymir-sdl3/src/app/settings.hpp:42, apps/ymir-sdl3/src/app/services/rom_service.cpp:33-68, apps/ymir-sdl3/src/app/profile.cpp:36-46, .github/workflows/build.yaml:202-236"