chore: merge round 4 fixes (retrobat)

This commit is contained in:
Abdessamad Derraz committed 2026-10-21 13:17:10 +02:00
commit 3e5deed8fd
5 files changed
+3114 -2

No files matched your search

+1 -1
View File
@@ -75,7 +75,7 @@ files:
hle_fallback: true
size: 524288
description: "Saturn BIOS"
note: "Any dump of the 512 KiB console ROM, the compatible machines included. Area code is chosen by [Peripheral] Areacode and AutoAreacode, not by the image, so no region selects this file."
note: "Any dump of the 512 KiB console ROM, the compatible machines included. Area code is chosen by [Peripheral] Areacode and AutoAreacode, not by the image, so no region selects this file. Each alias labels one of those dumps: mpr-17933.bin, sega_100.bin, sega_100a.bin, sega1003.bin, hisaturn.bin and vsaturn.bin."
source_ref: "SSF.exe 0x43d770 (SaturnBIOS 0x129b1f8), SSF.exe 0x129a2f8 with the filter at 0x129a310, SSF.exe 0x43ff96 (NoBIOS 0x129b4cc), libnative-lib.so SSF::CStateSaveBase::_GetBIOSHash 0x134b8ec-0x134b924, SSF-archive Document/Readme.txt BIOSファイルについて"
- name: "epr-20091.ic8"
+1
View File
@@ -63,6 +63,7 @@ files:
validation: [size]
aliases: [mpr-17933.bin, saturn_bios.bin]
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"
libretro: "apps/ymir-libretro/src/libretro.cpp:305-309, apps/ymir-libretro/src/libretro.cpp:651-690, apps/ymir-libretro/src/libretro.cpp:692-703"
+749
View File
@@ -3190,6 +3190,42 @@ launchers:
fails_when_missing: warning, kickstart_ext_rom_file not written
source_ref: "emulatorLauncher/Generators/Amiberry.Generator.cs:147-154, 553-557,\
\ 686-711"
- emulator: arcadeduck
build: standalone
kind: names_searched
names:
- <bios archive of the game's system in resources/arcadedb.yaml>
case_insensitive: false
search_dir: <rom directory>, then bios
passes_to: "settings.ini [BIOS] SearchDirectory = <folder found>"
fails_when_missing: "ApplicationException 'Missing BIOS '<biosArchive>' : place\
\ it next to the game or in the RetroBat bios folder.'"
source_ref: "emulatorLauncher/Generators/ArcadeDuck.Generator.cs:52, 102-122, 219,\
\ emulatorLauncher/Generators/ArcadeDuck.Database.cs:62, 221-222"
- emulator: arcadeduck
build: standalone
kind: names_searched
names:
- konamigv.zip
slot: konami_gv
case_insensitive: false
search_dir: <rom directory>, then bios
passes_to: "settings.ini [BIOS] SearchDirectory = <folder found>"
fails_when_missing: "ApplicationException 'Missing BIOS '<biosArchive>' : place\
\ it next to the game or in the RetroBat bios folder.'"
depends_on_option: resources/arcadedb.yaml names no archive for konami_gv
source_ref: "emulatorLauncher/Generators/ArcadeDuck.Generator.cs:52, 102-122, 219,\
\ emulatorLauncher/Generators/ArcadeDuck.Database.cs:62, 221-222"
- emulator: arcadeduck
build: standalone
kind: passes_path
names: []
search_dir: bios
passes_to: "settings.ini [BIOS] SearchDirectory = bios"
fails_when_missing: false
depends_on_option: no bios archive known for the game's system
source_ref: "emulatorLauncher/Generators/ArcadeDuck.Generator.cs:52, 102-122, 219,\
\ emulatorLauncher/Generators/ArcadeDuck.Database.cs:62, 221-222"
- emulator: ares
build: standalone
kind: names_searched
@@ -3213,6 +3249,265 @@ launchers:
passes_to: "settings.bml LaserActiveSEGAPAC/Firmware/BIOS.US (first found)"
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Ares.Generator.cs:524-531"
- emulator: bizhawk
build: standalone
kind: fixed_name
names:
- gb_bios.bin
slot: other systems
case_insensitive: true
search_dir: bios
passes_to: config.ini BizHawk.Emulation.Cores.Nintendo.Sameboy.Sameboy EnableBIOS
= true, only if the file exists, the path itself is not written
fails_when_missing: EnableBIOS = false
depends_on_option: core == "SameBoy", bizhawk_gb_bios on, system != "gbc"
source_ref: "emulatorLauncher/Generators/Bizhawk.CoreOptions.cs:517-518, 524-531"
- emulator: bizhawk
build: standalone
kind: fixed_name
names:
- gbc_bios.bin
slot: gbc
case_insensitive: true
search_dir: bios
passes_to: config.ini BizHawk.Emulation.Cores.Nintendo.Sameboy.Sameboy EnableBIOS
= true, only if the file exists, the path itself is not written
fails_when_missing: EnableBIOS = false
depends_on_option: core == "SameBoy", bizhawk_gb_bios on, system == "gbc"
source_ref: "emulatorLauncher/Generators/Bizhawk.CoreOptions.cs:517-518, 524-531"
- emulator: bizhawk
build: standalone
kind: fixed_name
names:
- gb_bios.bin
slot: other systems
case_insensitive: true
search_dir: bios
passes_to: config.ini BizHawk.Emulation.Cores.Nintendo.Gameboy.Gameboy EnableBIOS
= true, only if the file exists, the path itself is not written
fails_when_missing: EnableBIOS = false
depends_on_option: core == "Gambatte", bizhawk_gb_bios on, system != "gbc" && system
!= "gba"
source_ref: "emulatorLauncher/Generators/Bizhawk.CoreOptions.cs:536-537, 543-552"
- emulator: bizhawk
build: standalone
kind: fixed_name
names:
- gbc_bios.bin
slot: gbc
case_insensitive: true
search_dir: bios
passes_to: config.ini BizHawk.Emulation.Cores.Nintendo.Gameboy.Gameboy EnableBIOS
= true, only if the file exists, the path itself is not written
fails_when_missing: EnableBIOS = false
depends_on_option: core == "Gambatte", bizhawk_gb_bios on, system == "gbc"
source_ref: "emulatorLauncher/Generators/Bizhawk.CoreOptions.cs:536-537, 543-552"
- emulator: bizhawk
build: standalone
kind: fixed_name
names:
- gba_bios.bin
slot: gba
case_insensitive: true
search_dir: bios
passes_to: config.ini BizHawk.Emulation.Cores.Nintendo.Gameboy.Gameboy EnableBIOS
= true, only if the file exists, the path itself is not written
fails_when_missing: EnableBIOS = false
depends_on_option: core == "Gambatte", bizhawk_gb_bios on, system == "gba"
source_ref: "emulatorLauncher/Generators/Bizhawk.CoreOptions.cs:536-537, 543-552"
- emulator: blastem
build: standalone
kind: fixed_name
names:
- bios_CD_U.bin
case_insensitive: true
search_dir: bios
passes_to: blastem.cfg system.scd_bios_us, only if the file exists
fails_when_missing: info log, scd_bios_us left as it is
source_ref: "emulatorLauncher/Generators/Blastem.Generator.cs:258, 262, 272-279"
- emulator: blastem
build: standalone
kind: fixed_name
names:
- bios_CD_E.bin
case_insensitive: true
search_dir: bios
passes_to: blastem.cfg system.scd_bios_eu, only if the file exists
fails_when_missing: info log, scd_bios_eu left as it is
source_ref: "emulatorLauncher/Generators/Blastem.Generator.cs:258, 263, 272-279"
- emulator: blastem
build: standalone
kind: fixed_name
names:
- bios_CD_J.bin
case_insensitive: true
search_dir: bios
passes_to: blastem.cfg system.scd_bios_jp, only if the file exists
fails_when_missing: info log, scd_bios_jp left as it is
source_ref: "emulatorLauncher/Generators/Blastem.Generator.cs:258, 264, 272-279"
- emulator: blastem
build: standalone
kind: fixed_name
names:
- colecovision.rom
case_insensitive: true
search_dir: bios
passes_to: blastem.cfg system.coleco_bios_path, only if the file exists
fails_when_missing: info log, coleco_bios_path left as it is
source_ref: "emulatorLauncher/Generators/Blastem.Generator.cs:258, 265, 272-279"
- emulator: blastem
build: standalone
kind: fixed_name
names:
- 32X_M_BIOS.BIN
case_insensitive: true
search_dir: bios
passes_to: blastem.cfg system.s32x_main_bios, only if the file exists
fails_when_missing: info log, s32x_main_bios left as it is
source_ref: "emulatorLauncher/Generators/Blastem.Generator.cs:258, 267, 272-279"
- emulator: blastem
build: standalone
kind: fixed_name
names:
- 32X_S_BIOS.BIN
case_insensitive: true
search_dir: bios
passes_to: blastem.cfg system.s32x_sub_bios, only if the file exists
fails_when_missing: info log, s32x_sub_bios left as it is
source_ref: "emulatorLauncher/Generators/Blastem.Generator.cs:258, 268, 272-279"
- emulator: blastem
build: standalone
kind: fixed_name
names:
- 32X_G_BIOS.BIN
case_insensitive: true
search_dir: bios
passes_to: blastem.cfg system.s32x_68k_bios, only if the file exists
fails_when_missing: info log, s32x_68k_bios left as it is
source_ref: "emulatorLauncher/Generators/Blastem.Generator.cs:258, 269, 272-279"
- emulator: bsyndrome
build: standalone
kind: passes_path
names: []
search_dir: bios/bsyndrome/MUSIC
passes_to: command line --musicpath=bios/bsyndrome/MUSIC
fails_when_missing: false
depends_on_option: _emulator == "bsyndrome"
source_ref: "emulatorLauncher/Generators/PortsLauncher.Configuration.cs:133-134,\
\ 153, 157-158"
- emulator: amiberry, hatari, hatarib, puae
build: libretro
kind: copies
names:
- capsimg.dll
case_insensitive: true
search_dir: bios
passes_to: copied to <retroarch>/<name>, only when the target does not exist
fails_when_missing: false
depends_on_option: core in capsimgCore, rom extension ".ipf"
source_ref: "emulatorLauncher/Generators/LibRetro.Generator.cs:1008-1017, 2659"
- emulator: demul
build: standalone
kind: passes_path
names: []
search_dir: bios/dc
passes_to: "Demul.ini [files] roms0 = bios/dc"
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Demul.Generator.cs:106, 109-114, 123-124"
- emulator: demul
build: standalone
kind: passes_path
names: []
search_dir: bios
passes_to: "Demul.ini [files] roms1 = bios"
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Demul.Generator.cs:106, 109-114, 123-124"
- emulator: desmume
build: standalone
kind: fixed_name
names:
- bios7.bin
- bios9.bin
case_insensitive: true
search_dir: bios
passes_to: "desmume.ini [BIOS] ARM7BIOSFile, ARM9BIOSFile, only if every listed\
\ file exists"
fails_when_missing: UseExtBIOS left at 0
depends_on_option: desmume_UseExtBIOS on
source_ref: "emulatorLauncher/Generators/Desmume.Generator.cs:97-105"
- emulator: desmume
build: standalone
kind: fixed_name
names:
- firmware.bin
case_insensitive: true
search_dir: bios
passes_to: "desmume.ini [Firmware] FirmwareFile, only if the file exists"
fails_when_missing: UseExtFirmware left at 0
depends_on_option: desmume_UseExtFirmware on, desmume_firmwareFile unset or not
an existing file
source_ref: "emulatorLauncher/Generators/Desmume.Generator.cs:111-123"
- emulator: dolphin
build: standalone
kind: fixed_name
names:
- gba_bios.bin
case_insensitive: true
search_dir: bios
passes_to: "User/Config/Dolphin.ini [GBA] BIOS, written without an existence check"
fails_when_missing: path written without an existence check
source_ref: "emulatorLauncher/Generators/Dolphin.Generator.cs:742-743"
- emulator: dolphin
build: standalone
kind: copies
names:
- triforce/segaboot.gcm
- segaboot.gcm
case_insensitive: true
search_dir: bios
passes_to: first found copied to <emulator>/User/Triforce/segaboot.gcm, skipped
when the target is as large and not older
fails_when_missing: "warning '[WARNING] Triforce: segaboot.gcm not found in bios\\\
triforce, test menu will not be available.' when the target is absent too"
depends_on_option: _triforce, !_crediar
source_ref: "emulatorLauncher/Generators/Dolphin.Generator.cs:782-783, 1048-1083"
- emulator: dosbox-pure
build: standalone
kind: copies
names:
- MT32_CONTROL.ROM
- MT32_PCM.ROM
- Roland_SC-55.sf2
- Roland_SC-88.sf2
case_insensitive: true
search_dir: bios/scummvm/extra
passes_to: copied to <emulator>/system/<name>, only when the target does not exist
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/DosBoxPure.Generator.cs:132, 137-155"
- emulator: dosbox-staging
build: standalone
kind: copies
names:
- MT32_CONTROL.ROM
- MT32_PCM.ROM
case_insensitive: true
search_dir: bios/scummvm/extra
passes_to: copied to <emulator>/mt32-roms/<name>, only when the target does not
exist
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/DosBoxStaging.Generator.cs:328, 333-341"
- emulator: dosbox-staging
build: standalone
kind: copies
names:
- Roland_SC-55.sf2
- Roland_SC-88.sf2
case_insensitive: true
search_dir: bios/scummvm/extra
passes_to: copied to <emulator>/soundfonts/<name>, only when the target does not
exist
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/DosBoxStaging.Generator.cs:325, 343-351"
- emulator: duckstation
build: standalone
kind: passes_path
@@ -3238,6 +3533,62 @@ launchers:
fails_when_missing: not checked by the launcher
depends_on_option: duck_bios
source_ref: "emulatorLauncher/Generators/Duckstation.Generator.cs:204-209, .emulationstation/es_features.cfg:11638-11646"
- emulator: eka2l1
build: standalone
kind: passes_path
names: []
search_dir: bios/eka2l1/data
passes_to: config.yml data-storage = bios/eka2l1/data
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Eka2l1.Generator.cs:153, 156"
- emulator: fbneo
build: standalone
kind: passes_path
names: []
search_dir: bios
passes_to: "config/fbneo64.ini szAppRomPaths[1] = bios"
fails_when_missing: false
depends_on_option: "File.Exists(iniFile)"
source_ref: "emulatorLauncher/Generators/Fbneo.Generator.cs:111"
- emulator: fbneo
build: standalone
kind: passes_path
names: []
search_dir: bios/fbneo
passes_to: "config/fbneo64.ini szAppRomPaths[2] = bios/fbneo"
fails_when_missing: false
depends_on_option: "File.Exists(iniFile)"
source_ref: "emulatorLauncher/Generators/Fbneo.Generator.cs:113, 116"
- emulator: fbneo
build: standalone
kind: passes_path
names: []
search_dir: bios/fbneo/cheats
passes_to: config/fbneo64.ini szAppCheatsPath = bios/fbneo/cheats
fails_when_missing: false
depends_on_option: "File.Exists(iniFile)"
source_ref: "emulatorLauncher/Generators/Fbneo.Generator.cs:113, 118, 121"
- emulator: fbneo
build: standalone
kind: passes_path
names: []
search_dir: bios/fbneo/samples
passes_to: config/fbneo64.ini szAppSamplesPath = bios/fbneo/samples
fails_when_missing: false
depends_on_option: "File.Exists(iniFile)"
source_ref: "emulatorLauncher/Generators/Fbneo.Generator.cs:123, 126"
- emulator: gsplus
build: standalone
kind: fixed_name
names:
- APPLE2GS.ROM
case_insensitive: true
search_dir: bios
passes_to: config.txt g_cfg_rom_path, written without an existence check
fails_when_missing: path written without an existence check
depends_on_option: "!string.IsNullOrEmpty(AppConfig[\"bios\"]) && Directory.Exists(AppConfig[\"\
bios\"])"
source_ref: "emulatorLauncher/Generators/GsPlus.Generator.cs:66-67"
- emulator: jgenesis
build: standalone
kind: fixed_name
@@ -3559,6 +3910,189 @@ launchers:
fails_when_missing: option not written when the file is absent
depends_on_option: hatarib_tos
source_ref: "emulatorLauncher/Generators/LibRetro.CoreOptions.cs:3184-3187, .emulationstation/es_features.cfg:6667-6676"
- emulator: jzintv
build: standalone
kind: fixed_name
names:
- exec.bin
- grom.bin
case_insensitive: true
search_dir: bios
passes_to: command line -e <bios>/exec.bin -g <bios>/grom.bin
fails_when_missing: ApplicationException 'grom.bin or exec.bin not found in bios
folder!'
source_ref: "emulatorLauncher/Generators/Jzintv.Generator.cs:35-44"
- emulator: jzintv
build: standalone
kind: fixed_name
names:
- ecs.bin
case_insensitive: true
search_dir: bios
passes_to: command line -E <bios>/ecs.bin, only if the file exists
fails_when_missing: "warning '[WARN] ECS option enabled but ecs.bin not found in\
\ bios folder!', -s0 passed"
depends_on_option: jzintv_useECS on, no <rom>.commands and no roms/intellivision/default.commands
source_ref: "emulatorLauncher/Generators/Jzintv.Generator.cs:47-52, 65-79"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios;<rom directory>
passes_to: command line -rp bios;<rom directory>
fails_when_missing: false
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
\ == \"hbmame\", !string.IsNullOrEmpty(AppConfig[\"bios\"]) && Directory.Exists(AppConfig[\"\
bios\"])"
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:90-93"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios/hbmame/samples when hbmame, else bios/mame/samples
passes_to: command line -sp bios/hbmame/samples when hbmame, else bios/mame/samples
fails_when_missing: false
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
\ == \"hbmame\", !string.IsNullOrEmpty(samplePath) && Directory.Exists(samplePath)"
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:98, 103-104"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios/mame/artwork
passes_to: command line -artpath bios/mame/artwork
fails_when_missing: false
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
\ == \"hbmame\", !string.IsNullOrEmpty(artPath) && Directory.Exists(artPath),\
\ disable_artwork on"
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:108, 115-117"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios/mame/artwork;<emulator>/artwork;<saves>/hbmame/artwork when hbmame,
else <saves>/mame/artwork
passes_to: command line -artpath bios/mame/artwork;<emulator>/artwork;<saves>/hbmame/artwork
when hbmame, else <saves>/mame/artwork
fails_when_missing: false
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
\ == \"hbmame\", !string.IsNullOrEmpty(artPath) && Directory.Exists(artPath),\
\ not (disable_artwork on)"
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:108-109, 115, 118-119"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios/hbmame/ini when hbmame, else bios/mame/ini, or bios/groovymame/ini
when _groovy
passes_to: command line -inipath bios/hbmame/ini when hbmame, else bios/mame/ini,
or bios/groovymame/ini when _groovy
fails_when_missing: false
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
\ == \"hbmame\", !string.IsNullOrEmpty(iniPath) && Directory.Exists(iniPath)"
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:71-73, 164-165"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios/hbmame/hash when hbmame, else bios/mame/hash
passes_to: command line -hash bios/hbmame/hash when hbmame, else bios/mame/hash
fails_when_missing: false
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
\ == \"hbmame\", !string.IsNullOrEmpty(hashPath) && Directory.Exists(hashPath)"
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:169, 174-175"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios/mess;bios;<rom directory>
passes_to: command line -rp bios/mess;bios;<rom directory>
fails_when_missing: false
depends_on_option: "!string.IsNullOrEmpty(AppConfig[\"bios\"]) && Directory.Exists(AppConfig.GetFullPath(\"\
bios\")), Directory.Exists(Path.Combine(bios, \"mess\"))"
source_ref: "emulatorLauncher/Generators/MessSystem.cs:612, 660, 663-664"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: bios/mess;bios;<rom directory>
passes_to: command line -rp bios/mess;bios;<rom directory>
fails_when_missing: false
depends_on_option: "!string.IsNullOrEmpty(AppConfig[\"bios\"]) && Directory.Exists(AppConfig.GetFullPath(\"\
bios\")), Directory.Exists(Path.Combine(bios, \"mess\"))"
source_ref: "emulatorLauncher/Generators/MessSystem.cs:612, 660, 663-664"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios;<rom directory>
passes_to: command line -rp bios;<rom directory>
fails_when_missing: false
depends_on_option: "!string.IsNullOrEmpty(AppConfig[\"bios\"]) && Directory.Exists(AppConfig.GetFullPath(\"\
bios\")), !Directory.Exists(Path.Combine(bios, \"mess\"))"
source_ref: "emulatorLauncher/Generators/MessSystem.cs:612, 660, 665-666"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: bios;<rom directory>
passes_to: command line -rp bios;<rom directory>
fails_when_missing: false
depends_on_option: "!string.IsNullOrEmpty(AppConfig[\"bios\"]) && Directory.Exists(AppConfig.GetFullPath(\"\
bios\")), !Directory.Exists(Path.Combine(bios, \"mess\"))"
source_ref: "emulatorLauncher/Generators/MessSystem.cs:612, 660, 665-666"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios/mame/ini
passes_to: command line -inipath bios/mame/ini
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/MessSystem.cs:612, 702-703"
- emulator: mame64
build: standalone
kind: passes_path
names: []
search_dir: bios/mame/hash
passes_to: command line -hash bios/mame/hash
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/MessSystem.cs:612, 705-706"
- emulator: melonds
build: standalone
kind: fixed_name
names:
- dsi_firmware.bin
- dsi_bios7.bin
- dsi_bios9.bin
- dsi_nand.bin
case_insensitive: true
search_dir: bios
passes_to: "melonDS.toml [DSi] FirmwarePath, BIOS7Path, BIOS9Path, NANDPath"
fails_when_missing: ApplicationException 'Cannot run dsi system, dsi bios files
are missing'
depends_on_option: melonds_console == "dsi" || rom extension ".bin"
source_ref: "emulatorLauncher/Generators/MelonDS.Generator.cs:34, 134-137, 187-191,\
\ 221-227"
- emulator: melonds
build: standalone
kind: scans_dir
names:
- "dsi_nand*{region}*.bin"
expands:
region:
- USA
- EUR
- JPN
- KOR
- AUS
- CHN
case_insensitive: true
search_dir: bios
passes_to: "melonDS.toml [DSi] NANDPath, first file whose name holds the region"
fails_when_missing: falls back to dsi_nand.bin
depends_on_option: melonds_console == "dsi", melonds_nandregion set, rom extension
not ".bin"
source_ref: "emulatorLauncher/Generators/MelonDS.Generator.cs:193-202, .emulationstation/es_features.cfg:15797-15804"
- emulator: mesen
build: standalone
kind: copies
@@ -3722,6 +4256,101 @@ launchers:
fails_when_missing: ApplicationException '<machine> machine has missing BIOS file
'<c>' in 'bios\openmsx\share\systemroms' folder.'
source_ref: "emulatorLauncher/Generators/OpenMSX.Generator.cs:156-159, 467"
- emulator: kronos
build: standalone
kind: fixed_name
names:
- saturn_bios.bin
case_insensitive: true
search_dir: bios
passes_to: "kronos.ini [1.0] General\\Bios, only if the file exists"
fails_when_missing: General\Bios not written
depends_on_option: kronos_force_bios unset
source_ref: "emulatorLauncher/Generators/Kronos.Generator.cs:161, 169-170"
- emulator: kronos
build: standalone
kind: core_option
names:
- saturn_bios.bin
- sega_101.bin
- mpr-17933.bin
case_insensitive: true
search_dir: bios
passes_to: "kronos.ini [1.0] General\\Bios = <bios>/<value>, only if the file exists"
fails_when_missing: General\Bios not written
depends_on_option: kronos_force_bios
source_ref: "emulatorLauncher/Generators/Kronos.Generator.cs:162-170, .emulationstation/es_features.cfg:13529-13534"
- emulator: ssf
build: standalone
kind: core_option
names:
- saturn_bios.bin
- sega_101.bin
- mpr-17933.bin
case_insensitive: true
search_dir: bios
passes_to: "SSF.ini [Peripheral] SaturnBIOS = <bios>/<value>, only if the file exists"
fails_when_missing: SaturnBIOS not written
depends_on_option: use_external_bios
source_ref: "emulatorLauncher/Generators/SSF.Generator.cs:76-83, .emulationstation/es_features.cfg:19240-19245"
- emulator: yabasanshiro
build: standalone
kind: fixed_name
names:
- saturn_bios.bin
case_insensitive: true
search_dir: bios
passes_to: "yabause.ini [0.9.11] General\\Bios, only if the file exists"
fails_when_missing: General\Bios not written
depends_on_option: yabasanshiro_force_bios unset
source_ref: "emulatorLauncher/Generators/Yabasanshiro.Generator.cs:122, 130-131"
- emulator: yabasanshiro
build: standalone
kind: core_option
names:
- saturn_bios.bin
- sega_101.bin
- mpr-17933.bin
case_insensitive: true
search_dir: bios
passes_to: "yabause.ini [0.9.11] General\\Bios = <bios>/<value>, only if the file\
\ exists"
fails_when_missing: General\Bios not written
depends_on_option: yabasanshiro_force_bios
source_ref: "emulatorLauncher/Generators/Yabasanshiro.Generator.cs:123-131, .emulationstation/es_features.cfg:21111-21116"
- emulator: ymir
build: standalone
kind: fixed_name
names:
- saturn_bios.bin
case_insensitive: true
search_dir: bios
passes_to: "Ymir.toml [System.IPL] Path, written without an existence check"
fails_when_missing: path written without an existence check
depends_on_option: ymir_force_bios unset
source_ref: "emulatorLauncher/Generators/Ymir.Generator.cs:118, 125"
- emulator: ymir
build: standalone
kind: core_option
names:
- saturn_bios.bin
- sega_101.bin
- mpr-17933.bin
case_insensitive: true
search_dir: bios
passes_to: "Ymir.toml [System.IPL] Path = <bios>/<value>, written without an existence\
\ check"
fails_when_missing: path written without an existence check
depends_on_option: ymir_force_bios
source_ref: "emulatorLauncher/Generators/Ymir.Generator.cs:120-125, .emulationstation/es_features.cfg:21170-21174"
- emulator: ymir
build: standalone
kind: passes_path
names: []
search_dir: bios
passes_to: "Ymir.toml [General.PathOverrides] IPLROMImages = bios"
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Ymir.Generator.cs:143, 150"
- emulator: pcsx2
build: standalone
kind: names_searched
@@ -3888,6 +4517,95 @@ launchers:
passes_to: swanstation_BIOS_PathNTSCJ, swanstation_BIOS_PathNTSCU, swanstation_BIOS_PathPAL
fails_when_missing: names written without an existence check
source_ref: "emulatorLauncher/Generators/LibRetro.CoreOptions.cs:5982-6009"
- emulator: psxmame
build: standalone
kind: passes_path
names: []
search_dir: bios/psxmame/bios;<rom directory>
passes_to: command line -rompath bios/psxmame/bios;<rom directory>
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/PSXMame.Generator.cs:38, 42, 47-48"
- emulator: raine
build: standalone
kind: passes_path
names: []
search_dir: bios
passes_to: "config/raine32_sdl.cfg [Directories] rom_dir_1 = bios"
fails_when_missing: false
depends_on_option: "!string.IsNullOrEmpty(biosPath)"
source_ref: "emulatorLauncher/Generators/Raine.Generator.cs:87, 92"
- emulator: raine
build: standalone
kind: fixed_name
names:
- neocdz.zip
case_insensitive: true
search_dir: bios
passes_to: "config/raine32_sdl.cfg [neocd] neocd_bios, written without an existence\
\ check"
fails_when_missing: path written without an existence check
depends_on_option: "!string.IsNullOrEmpty(biosPath)"
source_ref: "emulatorLauncher/Generators/Raine.Generator.cs:87, 93"
- emulator: rpcs3
build: standalone
kind: fixed_name
names:
- PS3UPDAT.PUP
case_insensitive: true
search_dir: bios
passes_to: command line --installfw <bios>/PS3UPDAT.PUP, launched instead of the
game
fails_when_missing: ApplicationException 'PS3 firmware is not installed in rpcs3
emulator, either place it in \bios folder, or launch the emulator and install
the firware.'
depends_on_option: <emulator>/dev_flash/vsh/etc/version.txt absent
source_ref: "emulatorLauncher/Generators/Rpcs3.Generator.cs:195-218"
- emulator: snes9x
build: standalone
kind: passes_path
names: []
search_dir: bios
passes_to: "snes9x.conf [Settings\\Win\\Files] Dir:Bios = bios"
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Snes9x.Generator.cs:126-134"
- emulator: tsugaru
build: standalone
kind: passes_path
names:
- FMT_SYS.ROM
case_insensitive: true
search_dir: bios/fmtowns, then bios/fmtownsux, then <emulator>/roms, then <emulator>/fmtownsux
passes_to: "command line: first argument <folder found>, -CMOS <folder found>/CMOS.DAT"
fails_when_missing: "info '[TsugaruGenerator] Bios path not found', no launch"
depends_on_option: "bios/fmtowns is a directory (biosPath stays null otherwise when\
\ FMT_SYS.ROM is checked)"
source_ref: "emulatorLauncher/Generators/Tsugaru.Generator.cs:37-56"
- emulator: flycast
build: standalone
kind: passes_path
names: []
search_dir: bios/dc
passes_to: "emu.cfg [config] Dreamcast.BiosPath = bios/dc"
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Flycast.Generator.cs:149, 167"
- emulator: scummvm
build: standalone
kind: passes_path
names: []
search_dir: bios/scummvm/theme
passes_to: "<exe>.ini [scummvm] themepath = bios/scummvm/theme"
fails_when_missing: false
depends_on_option: "Directory.Exists(themePath)"
source_ref: "emulatorLauncher/Generators/ScummVm.Generator.cs:265-266, 271"
- emulator: scummvm
build: standalone
kind: passes_path
names: []
search_dir: bios/scummvm/extra
passes_to: "<exe>.ini [scummvm] extrapath = bios/scummvm/extra"
fails_when_missing: false
depends_on_option: "Directory.Exists(extraPath)"
source_ref: "emulatorLauncher/Generators/ScummVm.Generator.cs:265-267, 275"
- emulator: winuae
build: standalone
kind: names_searched
@@ -4094,3 +4812,34 @@ launchers:
fails_when_missing: "warning '[Generator] Chihiro media board flash missing next\
\ to the BIOS.'"
source_ref: "emulatorLauncher/Generators/Xemu.Generator.cs:438-441"
- emulator: xm6pro
build: standalone
kind: copies
names:
- IPLROM.DAT
- CGROM.DAT
- IPLROMXV.DAT
- IPLROMCO.DAT
- IPLROM30.DAT
case_insensitive: true
search_dir: bios/keropi
passes_to: copied to <emulator>/<name>, only when the target does not exist
fails_when_missing: false
depends_on_option: "!string.IsNullOrEmpty(biosRoot), Directory.Exists(biosPath)"
source_ref: "emulatorLauncher/Generators/Xm6pro.Generator.cs:118-141"
- emulator: xroar
build: standalone
kind: passes_path
names: []
search_dir: bios/dragon, or bios/coco when system == "coco"
passes_to: command line -rompath bios/dragon, or bios/coco when system == "coco"
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Xroar.Generator.cs:76-80"
- emulator: xroar
build: standalone
kind: passes_path
names: []
search_dir: bios/dragon
passes_to: xroar.conf rompath ".\\..\\..\\bios\\dragon"
fails_when_missing: false
source_ref: "emulatorLauncher/Generators/Xroar.Generator.cs:176, 191"
File diff suppressed because it is too large. Load diff
+672
View File
@@ -464,6 +464,678 @@ class GuardedConfigWrites(unittest.TestCase):
self.assertEqual(rl.GUARDED_WRITES[f"{G}/KegaFusion.Generator.cs"], "kega-fusion")
SATURN_FEATURES = """
<features>
<emulator name="kronos">
<feature name="FORCE BIOS" value="kronos_force_bios" order="103">
<choice name="Multi-region" value="saturn_bios.bin"/>
<choice name="JAP" value="sega_101.bin"/>
<choice name="HLE" value="hle"/>
</feature>
</emulator>
<emulator name="ymir">
<feature name="FORCE BIOS" value="ymir_force_bios" order="100">
<choice name="Multi-region" value="saturn_bios.bin"/>
<choice name="EUR/US" value="mpr-17933.bin"/>
</feature>
</emulator>
<emulator name="ssf">
<feature name="FORCE BIOS" value="use_external_bios" order="100">
<choice name="JAP" value="sega_101.bin"/>
<choice name="HLE" value="hle"/>
</feature>
</emulator>
</features>
"""
KRONOS = """
private void SetupConfig(string path)
{
string iniFile = Path.Combine(path, "kronos.ini");
using (var ini = new IniFile(iniFile, IniOptions.KeepEmptyValues))
{
string bios = Path.Combine(AppConfig.GetFullPath("bios"), "saturn_bios.bin");
if (SystemConfig.isOptSet("kronos_force_bios") && !string.IsNullOrEmpty(SystemConfig["kronos_force_bios"]))
{
if (SystemConfig["kronos_force_bios"] != "hle")
bios = Path.Combine(AppConfig.GetFullPath("bios"), SystemConfig["kronos_force_bios"]);
else
hleBios = true;
}
if (File.Exists(bios))
ini.WriteValue("1.0", "General\\\\Bios", bios.Replace("\\\\", "/"));
}
}
"""
YMIR = """
private void SetupConfiguration(string path)
{
string iniFile = Path.Combine(path, "Ymir.toml");
using (var ini = new IniFile(iniFile))
{
string saturnBiosPath = Path.Combine(AppConfig.GetFullPath("bios"), "saturn_bios.bin");
if (SystemConfig.isOptSet("ymir_force_bios") && !string.IsNullOrEmpty(SystemConfig["ymir_force_bios"]))
{
saturnBiosPath = Path.Combine(AppConfig.GetFullPath("bios"), SystemConfig["ymir_force_bios"]);
}
ini.WriteValue("System.IPL", "Path", "'" + saturnBiosPath + "'");
string iplPath = AppConfig.GetFullPath("bios");
ini.WriteValue("General.PathOverrides", "IPLROMImages", "'" + iplPath + "'");
}
}
"""
SSF = """
private void SetupConfiguration(string path)
{
string iniFile = Path.Combine(path, "SSF.ini");
using (var ini = IniFile.FromFile(iniFile, IniOptions.KeepEmptyValues))
{
if (SystemConfig.isOptSet("use_external_bios") && !string.IsNullOrEmpty(SystemConfig["use_external_bios"]))
{
string saturnBios = Path.Combine(AppConfig.GetFullPath("bios"), SystemConfig["use_external_bios"]);
if (File.Exists(saturnBios) && SystemConfig["use_external_bios"] != "hle")
ini.WriteValue("Peripheral", "SaturnBIOS", "\\"" + saturnBios + "\\"");
else
ini.WriteValue("Peripheral", "SaturnBIOS", "\\"" + "" + "\\"");
}
}
}
"""
DESMUME = """
private void SetupConfiguration(string path, string rom)
{
string settingsFile = Path.Combine(path, "desmume.ini");
using (IniFile ini = IniFile.FromFile(settingsFile, IniOptions.KeepEmptyValues))
{
ini.WriteValue("BIOS", "UseExtBIOS", "0");
if (SystemConfig.isOptSet("desmume_UseExtBIOS") && SystemConfig.getOptBoolean("desmume_UseExtBIOS"))
{
string bios7 = Path.Combine(AppConfig.GetFullPath("bios"), "bios7.bin");
string bios9 = Path.Combine(AppConfig.GetFullPath("bios"), "bios9.bin");
if (File.Exists(bios7) && File.Exists(bios9))
{
ini.WriteValue("BIOS", "ARM9BIOSFile", bios9);
ini.WriteValue("BIOS", "ARM7BIOSFile", bios7);
ini.WriteValue("BIOS", "UseExtBIOS", "1");
}
}
if (SystemConfig.isOptSet("desmume_UseExtFirmware") && SystemConfig.getOptBoolean("desmume_UseExtFirmware"))
{
string firmware = Path.Combine(AppConfig.GetFullPath("bios"), "firmware.bin");
if (SystemConfig.isOptSet("desmume_firmwareFile") && !string.IsNullOrEmpty(SystemConfig["desmume_firmwareFile"]))
{
string newFirmware = SystemConfig["desmume_firmwareFile"];
if (File.Exists(newFirmware))
firmware = newFirmware;
}
if (File.Exists(firmware))
{
ini.WriteValue("Firmware", "FirmwareFile", firmware);
ini.WriteValue("Firmware", "UseExtFirmware", "1");
}
}
}
}
"""
MELONDS_DSI = """
bool bootToDSINand = Path.GetExtension(rom).ToLowerInvariant() == ".bin";
private void SetupConfiguration(string path, string rom, bool bootToDSINand = false)
{
string settingsFile = Path.Combine(path, "melonDS.toml");
using (IniTomlFile ini = IniTomlFile.FromFile(settingsFile, IniTomlOptions.UseSpaces))
{
bool dsi = SystemConfig.isOptSet("melonds_console") && SystemConfig["melonds_console"] == "dsi";
if (bootToDSINand)
dsi = true;
if (dsi)
{
string biosPath = AppConfig.GetFullPath("bios");
string dsibios9 = Path.Combine(biosPath, "dsi_bios9.bin");
string dsinand = Path.Combine(biosPath, "dsi_nand.bin");
if (SystemConfig.isOptSet("melonds_nandregion") && !string.IsNullOrEmpty(SystemConfig["melonds_nandregion"]))
{
string region = SystemConfig["melonds_nandregion"];
string match = Directory.GetFiles(biosPath, "dsi_nand*.bin")
.FirstOrDefault(f => Path.GetFileNameWithoutExtension(f)
.IndexOf(region, StringComparison.OrdinalIgnoreCase) >= 0);
if (match != null)
dsinand = match;
}
if (!File.Exists(dsibios9) || !File.Exists(dsinand))
throw new ApplicationException("Cannot run dsi system, dsi bios files are missing");
ini.WriteValue("DSi", "BIOS9Path", "\\"" + dsibios9.Replace("\\\\", "/") + "\\"");
ini.WriteValue("DSi", "NANDPath", "\\"" + dsinand.Replace("\\\\", "/") + "\\"");
}
}
}
"""
MELONDS_FEATURES = """
<emulator name="melonds">
<feature name="DSI NAND REGION" value="melonds_nandregion" order="103">
<choice name="USA" value="USA"/>
<choice name="Japan" value="JPN"/>
</feature>
</emulator>
"""
JZINTV = """
public override ProcessStartInfo Generate(string system, string rom)
{
string gromPath = Path.Combine(AppConfig.GetFullPath("bios"), "grom.bin");
string execPath = Path.Combine(AppConfig.GetFullPath("bios"), "exec.bin");
if (!File.Exists(gromPath) || !File.Exists(execPath))
throw new ApplicationException("grom.bin or exec.bin not found in bios folder!");
commandArray.Add("-e");
commandArray.Add("\\"" + execPath + "\\"");
commandArray.Add("-g");
commandArray.Add("\\"" + gromPath + "\\"");
string commandFile = rom.Replace(Path.GetExtension(rom), ".commands");
if (!File.Exists(commandFile))
commandFile = Path.Combine(AppConfig.GetFullPath("roms"),"intellivision", "default.commands");
if (File.Exists(commandFile))
{
}
else
{
if (SystemConfig.getOptBoolean("jzintv_useECS"))
{
string ecsPath = Path.Combine(AppConfig.GetFullPath("bios"), "ecs.bin");
if (File.Exists(ecsPath))
{
commandArray.Add("-E");
commandArray.Add("\\"" + ecsPath + "\\"");
}
else
{
SimpleLogger.Instance.Warning("[WARN] ecs.bin not found in bios folder!");
commandArray.Add("-s0");
}
}
}
}
"""
BLASTEM = """
private void SetupConfiguration(string path)
{
string targetCfg = Path.Combine(path, "blastem.cfg");
var sys = cfg.GetOrCreateSection("system");
}
private void SetupSystem(BlastemConfigNode sys, string path)
{
string bios = AppConfig.GetFullPath("bios");
SetBiosPath(sys, "scd_bios_us", bios, "bios_CD_U.bin");
SetBiosPath(sys, "coleco_bios_path", bios, "colecovision.rom");
}
private static void SetBiosPath(BlastemConfigNode sys, string key, string biosPath, string fileName)
{
string file = Path.Combine(biosPath, fileName);
if (File.Exists(file))
sys[key] = file;
else
SimpleLogger.Instance.Info("[Generator] BIOS not found, leaving " + key + " alone : " + file);
}
"""
DOLPHIN = """
private void SetupGeneralConfig(string path)
{
string iniFile = Path.Combine(path, "User", "Config", "Dolphin.ini");
using (var ini = new IniFile(iniFile, IniOptions.UseSpaces))
{
string gbaBiosPath = Path.Combine(AppConfig.GetFullPath("bios"), "gba_bios.bin");
ini.WriteValue("GBA", "BIOS", gbaBiosPath);
if (_triforce)
{
if (!_crediar)
CopySegaBoot(path);
}
}
}
private void CopySegaBoot(string path)
{
string target = Path.Combine(path, "User", "Triforce", "segaboot.gcm");
string[] candidates = new string[]
{
Path.Combine(AppConfig.GetFullPath("bios"), "triforce", "segaboot.gcm"),
Path.Combine(AppConfig.GetFullPath("bios"), "segaboot.gcm")
};
string source = candidates.FirstOrDefault(f => File.Exists(f));
if (source == null)
{
if (!File.Exists(target))
SimpleLogger.Instance.Warning("[WARNING] segaboot.gcm not found");
return;
}
if (dst.Exists && dst.Length == src.Length && dst.LastWriteTimeUtc >= src.LastWriteTimeUtc)
return;
}
private static bool GetRvzHash(string rvzPath)
{
string dolphinTool = Path.Combine(Program.AppConfig.GetFullPath("bios"), "dolphin-emu", "DolphinTool.exe");
}
"""
DOSBOX = """
private void SearchAndCopySoundFiles(string path)
{
string targetPathFluidSynth = Path.Combine(path, "soundfonts");
string targetPathmt32 = Path.Combine(path, "mt32-roms");
try
{
string mtcontrolsource = Path.Combine(AppConfig.GetFullPath("bios"), "scummvm", "extra", "MT32_CONTROL.ROM");
string mtcontroltarget = Path.Combine(targetPathmt32, "MT32_CONTROL.ROM");
if (!File.Exists(mtcontroltarget) && File.Exists(mtcontrolsource))
try { File.Copy(mtcontrolsource, mtcontroltarget); } catch { }
string roland55source = Path.Combine(AppConfig.GetFullPath("bios"), "scummvm", "extra", "Roland_SC-55.sf2");
string roland55target = Path.Combine(targetPathFluidSynth, "Roland_SC-55.sf2");
if (!File.Exists(roland55target) && File.Exists(roland55source))
try { File.Copy(roland55source, roland55target); } catch { }
}
catch
{
}
}
"""
TSUGARU = """
public override ProcessStartInfo Generate(string system, string rom)
{
string biosPath = null;
if (Directory.Exists(Path.Combine(AppConfig.GetFullPath("bios"), "fmtowns")))
biosPath = Path.Combine(AppConfig.GetFullPath("bios"), "fmtowns");
if (!File.Exists(Path.Combine(biosPath, "FMT_SYS.ROM")))
biosPath = Path.Combine(AppConfig.GetFullPath("bios"), "fmtownsux");
if (!File.Exists(Path.Combine(biosPath, "FMT_SYS.ROM")))
biosPath = Path.Combine(path, "roms");
if (!File.Exists(Path.Combine(biosPath, "FMT_SYS.ROM")))
{
SimpleLogger.Instance.Info("[TsugaruGenerator] Bios path not found");
return null;
}
commandArray.Add(biosPath);
commandArray.Add("-CMOS");
commandArray.Add(Path.Combine(biosPath, "CMOS.DAT"));
}
"""
EKA2L1 = """
public override ProcessStartInfo Generate(string system, string rom)
{
/*if (rom != null)
{
string bios = Path.Combine(AppConfig.GetFullPath("bios"), "N-Gage Installer.sis");
}*/
}
private void SetupConfiguration(string path)
{
var yml = YmlFile.Load(Path.Combine(path, "config.yml"));
string dataFolder = Path.Combine(AppConfig.GetFullPath("bios"), "eka2l1", "data").Replace("\\\\", "/");
yml["data-storage"] = dataFolder;
}
"""
BIZHAWK_GB = """
private void ConfigureGambatte(DynamicJson coreSyncSettings, string core, string system)
{
if (core != "Gambatte")
return;
var gambatteSync = coreSyncSettings.GetOrCreateContainer("BizHawk.Emulation.Cores.Nintendo.Gameboy.Gameboy");
string gbBios = Path.Combine(AppConfig.GetFullPath("bios"), "gb_bios.bin");
if (system == "gbc")
gbBios = Path.Combine(AppConfig.GetFullPath("bios"), "gbc_bios.bin");
else if (system == "gba")
gbBios = Path.Combine(AppConfig.GetFullPath("bios"), "gba_bios.bin");
if (File.Exists(gbBios) && SystemConfig.getOptBoolean("bizhawk_gb_bios"))
gambatteSync["EnableBIOS"] = "true";
else
gambatteSync["EnableBIOS"] = "false";
}
"""
BIZHAWK_CONFIG = """
string configFile = Path.Combine(path, "config.ini");
"""
MESS = """
public List<string> GetMameCommandLineArguments(string system, string rom, bool standalone = false)
{
string bios = AppConfig.GetFullPath("bios");
commandArray.Add("-rp");
if (!string.IsNullOrEmpty(AppConfig["bios"]) && Directory.Exists(AppConfig.GetFullPath("bios")))
{
if (Directory.Exists(Path.Combine(bios, "mess")))
commandArray.Add(Path.Combine(bios, "mess") + ";" + bios + ";" + Path.GetDirectoryName(rom));
else
commandArray.Add(bios + ";" + Path.GetDirectoryName(rom));
}
if (standalone)
{
commandArray.Add("-hash");
commandArray.Add(EnsureDirectoryExists(Path.Combine(bios, "mame", "hash")));
}
}
"""
MAME64 = """
public override ProcessStartInfo Generate(string system, string rom)
{
if (messMode == null)
{
List<string> commandArray = new List<string>
{
"-skip_gameinfo",
"-rp"
};
if (!string.IsNullOrEmpty(AppConfig["bios"]) && Directory.Exists(AppConfig["bios"]))
commandArray.Add(AppConfig.GetFullPath("bios") + ";" + Path.GetDirectoryName(rom));
string samplePath = hbmame? Path.Combine(AppConfig.GetFullPath("bios"), "hbmame", "samples") : Path.Combine(AppConfig.GetFullPath("bios"), "mame", "samples");
commandArray.Add("-sp");
commandArray.Add(samplePath);
}
}
"""
XROAR = """
public override ProcessStartInfo Generate(string system, string rom)
{
commandArray.Add("-rompath");
string romPath = Path.Combine(AppConfig.GetFullPath("bios"), "dragon");
if (system == "coco")
romPath = Path.Combine(AppConfig.GetFullPath("bios"), "coco");
commandArray.Add("\\"" + romPath + "\\"");
string setupPath = Path.Combine(path, "xroar.conf");
}
private void SetupConfiguration(string setupPath)
{
string rompath = "rompath \\".\\\\\\\\..\\\\\\\\..\\\\\\\\bios\\\\\\\\dragon\\"";
for (int i = 0; i < lines.Count; i++)
{
if (lines[i].StartsWith("rompath "))
lines[i] = rompath;
}
}
"""
def _feature_sources(path: str, text: str, features: str) -> dict[str, rl.Source]:
return _sources(**{path: text, rl.FEATURES: features})
class OptionReplacesThePath(unittest.TestCase):
def test_kronos_default_then_option_without_hle(self):
path = f"{G}/Kronos.Generator.cs"
sources = _feature_sources(path, KRONOS, SATURN_FEATURES)
fixed, option = rl._option_path_in(sources[path], sources[rl.FEATURES], "kronos")
self.assertEqual(fixed["names"], ["saturn_bios.bin"])
self.assertEqual(fixed["depends_on_option"], "kronos_force_bios unset")
self.assertEqual(
fixed["passes_to"], "kronos.ini [1.0] General\\Bios, only if the file exists"
)
self.assertEqual(fixed["source_ref"], f"{path}:6, 14-15")
self.assertEqual(option["kind"], "core_option")
self.assertEqual(option["names"], ["saturn_bios.bin", "sega_101.bin"])
self.assertEqual(option["source_ref"], f"{path}:7-15, {rl.FEATURES}:3-7")
def test_ymir_writes_without_a_check_and_passes_the_folder(self):
path = f"{G}/Ymir.Generator.cs"
sources = _feature_sources(path, YMIR, SATURN_FEATURES)
fixed, option, folder = rl._option_path_in(sources[path], sources[rl.FEATURES], "ymir")
self.assertEqual(
fixed["passes_to"], "Ymir.toml [System.IPL] Path, written without an existence check"
)
self.assertEqual(option["names"], ["saturn_bios.bin", "mpr-17933.bin"])
self.assertEqual(folder["kind"], "passes_path")
self.assertEqual(
folder["passes_to"], "Ymir.toml [General.PathOverrides] IPLROMImages = bios"
)
def test_ssf_has_no_default_name(self):
path = f"{G}/SSF.Generator.cs"
sources = _feature_sources(path, SSF, SATURN_FEATURES)
[option] = rl._option_path_in(sources[path], sources[rl.FEATURES], "ssf")
self.assertEqual(option["names"], ["sega_101.bin"])
self.assertEqual(
option["passes_to"],
"SSF.ini [Peripheral] SaturnBIOS = <bios>/<value>, only if the file exists",
)
class FilesNeededTogether(unittest.TestCase):
def test_desmume_pair_and_firmware_override(self):
pair, firmware = rl.desmume(_sources(**{f"{G}/Desmume.Generator.cs": DESMUME}))
self.assertEqual(pair["names"], ["bios7.bin", "bios9.bin"])
self.assertEqual(
pair["passes_to"],
"desmume.ini [BIOS] ARM7BIOSFile, ARM9BIOSFile, only if every listed file exists",
)
self.assertEqual(pair["fails_when_missing"], "UseExtBIOS left at 0")
self.assertEqual(pair["depends_on_option"], "desmume_UseExtBIOS on")
self.assertEqual(firmware["names"], ["firmware.bin"])
self.assertEqual(
firmware["depends_on_option"],
"desmume_UseExtFirmware on, desmume_firmwareFile unset or not an existing file",
)
def test_melonds_dsi_files_and_nand_region(self):
fixed, region = rl.melonds_dsi(
_sources(**{f"{G}/MelonDS.Generator.cs": MELONDS_DSI, rl.FEATURES: MELONDS_FEATURES})
)
self.assertEqual(fixed["names"], ["dsi_bios9.bin", "dsi_nand.bin"])
self.assertEqual(fixed["passes_to"], "melonDS.toml [DSi] BIOS9Path, NANDPath")
self.assertEqual(
fixed["fails_when_missing"],
"ApplicationException 'Cannot run dsi system, dsi bios files are missing'",
)
self.assertEqual(
fixed["depends_on_option"], 'melonds_console == "dsi" || rom extension ".bin"'
)
self.assertEqual(region["kind"], "scans_dir")
self.assertEqual(region["names"], ["dsi_nand*{region}*.bin"])
self.assertEqual(region["expands"], {"region": ["USA", "JPN"]})
self.assertEqual(region["fails_when_missing"], "falls back to dsi_nand.bin")
def test_jzintv_flags_in_command_line_order(self):
both, ecs = rl.jzintv(_sources(**{f"{G}/Jzintv.Generator.cs": JZINTV}))
self.assertEqual(both["names"], ["exec.bin", "grom.bin"])
self.assertEqual(both["passes_to"], "command line -e <bios>/exec.bin -g <bios>/grom.bin")
self.assertEqual(ecs["names"], ["ecs.bin"])
self.assertEqual(
ecs["depends_on_option"],
"jzintv_useECS on, no <rom>.commands and no roms/intellivision/default.commands",
)
self.assertEqual(
ecs["fails_when_missing"],
"warning '[WARN] ecs.bin not found in bios folder!', -s0 passed",
)
class HelpersAndCopies(unittest.TestCase):
def test_blastem_one_record_per_helper_call(self):
records = rl.blastem(_sources(**{f"{G}/Blastem.Generator.cs": BLASTEM}))
self.assertEqual(
[(r["names"], r["passes_to"]) for r in records],
[
(["bios_CD_U.bin"], "blastem.cfg system.scd_bios_us, only if the file exists"),
(
["colecovision.rom"],
"blastem.cfg system.coleco_bios_path, only if the file exists",
),
],
)
self.assertEqual(records[0]["source_ref"], f"{G}/Blastem.Generator.cs:9-10, 14-21")
def test_dolphin_unchecked_write_and_segaboot_candidates(self):
gba, segaboot = rl.dolphin(_sources(**{f"{G}/Dolphin.Generator.cs": DOLPHIN}))
self.assertEqual(gba["names"], ["gba_bios.bin"])
self.assertEqual(
gba["passes_to"],
"User/Config/Dolphin.ini [GBA] BIOS, written without an existence check",
)
self.assertEqual(segaboot["kind"], "copies")
self.assertEqual(segaboot["names"], ["triforce/segaboot.gcm", "segaboot.gcm"])
self.assertEqual(segaboot["depends_on_option"], "_triforce, !_crediar")
def test_dosbox_copies_grouped_by_target_folder(self):
sources = _sources(
**{f"{G}/DosBoxPure.Generator.cs": DOSBOX, f"{G}/DosBoxStaging.Generator.cs": DOSBOX}
)
records = rl.dosbox_copies(sources)
self.assertEqual(
[(r["emulator"], r["names"], r["passes_to"]) for r in records[:2]],
[
(
"dosbox-pure",
["MT32_CONTROL.ROM"],
"copied to <emulator>/mt32-roms/<name>, only when the target does not exist",
),
(
"dosbox-pure",
["Roland_SC-55.sf2"],
"copied to <emulator>/soundfonts/<name>, only when the target does not exist",
),
],
)
self.assertEqual(records[0]["search_dir"], "bios/scummvm/extra")
def test_tsugaru_folder_chain(self):
[record] = rl.tsugaru(_sources(**{f"{G}/Tsugaru.Generator.cs": TSUGARU}))
self.assertEqual(record["names"], ["FMT_SYS.ROM"])
self.assertEqual(
record["search_dir"], "bios/fmtowns, then bios/fmtownsux, then <emulator>/roms"
)
self.assertEqual(
record["fails_when_missing"], "info '[TsugaruGenerator] Bios path not found', no launch"
)
def test_commented_code_is_not_read(self):
[record] = rl.eka2l1(_sources(**{f"{G}/Eka2l1.Generator.cs": EKA2L1}))
self.assertEqual(record["passes_to"], "config.yml data-storage = bios/eka2l1/data")
def test_bizhawk_gb_one_slot_per_system(self):
records = rl.bizhawk_gb(
_sources(
**{
f"{G}/Bizhawk.CoreOptions.cs": BIZHAWK_GB,
f"{G}/Bizhawk.Generator.cs": BIZHAWK_CONFIG,
}
)
)
self.assertEqual(
[(r["slot"], r["names"]) for r in records],
[
("other systems", ["gb_bios.bin"]),
("gbc", ["gbc_bios.bin"]),
("gba", ["gba_bios.bin"]),
],
)
self.assertEqual(
records[0]["depends_on_option"],
'core == "Gambatte", bizhawk_gb_bios on, system != "gbc" && system != "gba"',
)
self.assertEqual(records[0]["fails_when_missing"], "EnableBIOS = false")
class FolderArguments(unittest.TestCase):
def test_mess_folders_shared_with_the_libretro_core(self):
sources = _sources(**{f"{G}/MessSystem.cs": MESS, f"{G}/Mame64.Generator.cs": MAME64})
records = rl.mame(sources)
mess = [r for r in records if r["source_ref"].startswith(f"{G}/MessSystem.cs")]
self.assertEqual(
[(r["emulator"], r["passes_to"]) for r in mess],
[
("mame64", "command line -rp bios/mess;bios;<rom directory>"),
("mame", "command line -rp bios/mess;bios;<rom directory>"),
("mame64", "command line -rp bios;<rom directory>"),
("mame", "command line -rp bios;<rom directory>"),
("mame64", "command line -hash bios/mame/hash"),
],
)
self.assertTrue(
mess[2]["depends_on_option"].endswith('!Directory.Exists(Path.Combine(bios, "mess"))')
)
self.assertNotIn("depends_on_option", mess[4])
def test_mame64_ternary_folder(self):
sources = _sources(**{f"{G}/MessSystem.cs": MESS, f"{G}/Mame64.Generator.cs": MAME64})
own = [r for r in rl.mame(sources) if r["source_ref"].startswith(f"{G}/Mame64")]
self.assertEqual(own[0]["passes_to"], "command line -rp bios;<rom directory>")
self.assertEqual(
own[1]["search_dir"], "bios/hbmame/samples when hbmame, else bios/mame/samples"
)
def test_xroar_reassigned_folder_and_config_line(self):
argument, config = rl.xroar(_sources(**{f"{G}/Xroar.Generator.cs": XROAR}))
self.assertEqual(argument["search_dir"], 'bios/dragon, or bios/coco when system == "coco"')
self.assertEqual(config["search_dir"], "bios/dragon")
self.assertEqual(
config["passes_to"], 'xroar.conf rompath ".\\\\..\\\\..\\\\bios\\\\dragon"'
)
class EveryBiosReferenceIsRead(unittest.TestCase):
def test_unread_reference_stops_the_scrape(self):
extra = EKA2L1 + (
"\n private void Other()\n {\n"
' string other = Path.Combine(AppConfig.GetFullPath("bios"), "other.bin");\n'
" }\n"
)
with self.assertRaises(rl.LauncherPatternMissing) as caught:
rl.eka2l1(_sources(**{f"{G}/Eka2l1.Generator.cs": extra}))
self.assertIn("bios reference at line", str(caught.exception))
def test_semicolon_inside_a_string_does_not_end_the_value(self):
src = rl.Source(
"x.cs",
'void f(string rom)\n{\n string p = AppConfig.GetFullPath("bios") + ";" + Path.GetDirectoryName(rom);\n}\n',
)
self.assertEqual(rl._render(src, "p", 0, len(src.text))[0], "bios;<rom directory>")
class AbsentConstructStopsTheScrape(unittest.TestCase):
def test_each_extractor_raises_on_an_empty_source(self):
empty = {path: rl.Source(path, "") for path in rl.SOURCE_FILES}