From f57c2a4ed241c9be53e89cca193c266aacd67e58 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sun, 4 Oct 2026 17:09:14 +0200 Subject: [PATCH] fix: realign five profiles, add laseractive pac roms --- emulators/geargrafx.yml | 152 +++++++++++++++++++++--------- emulators/gearlynx.yml | 42 ++++----- emulators/mednafen_supergrafx.yml | 29 +++--- emulators/melonds_ds.yml | 59 ++++++++---- emulators/xenia-edge.yml | 25 ++--- 5 files changed, 193 insertions(+), 114 deletions(-) diff --git a/emulators/geargrafx.yml b/emulators/geargrafx.yml index afe9577e..a89ae88e 100644 --- a/emulators/geargrafx.yml +++ b/emulators/geargrafx.yml @@ -3,9 +3,9 @@ type: libretro core_classification: official_port source: "https://github.com/drhelius/Geargrafx" upstream: "https://github.com/drhelius/Geargrafx" -profiled_date: "2026-09-17" -source_commit: "78fc3d7a1b9f55d78d8fe64c13368131a269e204" -core_version: "1.7.22" +profiled_date: "2026-10-04" +source_commit: "d0307bfbe4aebb67e1969502b6ccec752fd04b1d" +core_version: "1.8.1" display_name: "NEC - PC Engine / SuperGrafx / CD (Geargrafx)" cores: - geargrafx @@ -13,52 +13,71 @@ systems: - nec-pc-engine - nec-supergrafx - nec-pc-engine-cd + - laseractive notes: | Geargrafx is a PC Engine / TurboGrafx-16 / SuperGrafx / CD-ROM emulator by Ignacio Sanchez (drhelius). HuCard games run without any external file. - CD-ROM content needs a System Card image from the frontend system directory. - load_bios() in platforms/libretro/libretro.cpp:617-658 picks the file name - from the core option geargrafx_cdrom_bios (libretro.cpp:1429-1452): - System Card 1 loads syscard1.pce, System Card 2 loads syscard2.pce, System - Card 3 (the default) and Force Game Express load syscard3.pce; the older - values Auto and Game Express are still accepted and map to the same. The - path is "{system_directory}/{name}" (libretro.cpp:644). When the card is - missing the core posts "CD-ROM BIOS not found" and continues - (libretro.cpp:645-654). gexpress.pce is then always attempted from the - same directory (libretro.cpp:656-657), silently. load_bios() runs from - retro_load_game() for CD content only (libretro.cpp:466-467) and again on - retro_reset() when a CD is loaded (libretro.cpp:312). With the libretro + CD-ROM content (cue, chd, mmi) needs a System Card image from the frontend + system directory. load_bios() in platforms/libretro/libretro.cpp:709-750 + picks the file name from the core option geargrafx_cdrom_bios + (platforms/libretro/libretro.cpp:1568-1591): System Card 1 loads + syscard1.pce, System Card 2 loads syscard2.pce, System Card 3 (the default) + and Force Game Express load syscard3.pce; the older values Auto and Game + Express are still accepted and map to the same. The path is + "{system_directory}/{name}" (platforms/libretro/libretro.cpp:736). When the + card is missing the core posts "CD-ROM BIOS not found" and continues + (platforms/libretro/libretro.cpp:737-746). gexpress.pce is then always + attempted from the same directory (platforms/libretro/libretro.cpp:748-749). + load_bios() runs from retro_load_game() for CD content only + (platforms/libretro/libretro.cpp:518-519) and again on retro_reset() when a + CD is loaded (platforms/libretro/libretro.cpp:355-356). With the libretro VFS the file goes through load_bios_file() into LoadBiosFromBuffer(), - otherwise through Media::LoadBios() (libretro.cpp:580-615, - src/media.cpp:391-431). + otherwise through Media::LoadBios() (platforms/libretro/libretro.cpp:672-707, + src/media.cpp:448-491). - Media::LoadBiosData() (src/media.cpp:447-488) compares the file size with - GG_BIOS_SYSCARD_SIZE (0x40000) or GG_BIOS_GAME_EXPRESS_SIZE (0x8000) - (src/defines.h:53-54) and only logs a mismatch. A 512-byte header is - stripped when the size has bit 9 set, the data is copied into a zeroed - buffer of the expected size, and CRC32 is computed over that whole buffer. - GatherBIOSInfoFromDB() (src/media.cpp:777-811) looks the CRC up in + Media::LoadBiosData() (src/media.cpp:662-705) strips a 512-byte header when + the size is the expected size plus 512, then rejects any image whose size + is not GG_BIOS_SYSCARD_SIZE (0x40000) or GG_BIOS_GAME_EXPRESS_SIZE (0x8000) + (src/defines.h:53-54). CRC32 is computed over the accepted image. + GatherBIOSInfoFromDB() (src/media.cpp:1027-1061) looks the CRC up in k_game_database entries flagged GG_GAMEDB_BIOS_SYSCARD or GG_GAMEDB_BIOS_GAME_EXPRESS (src/game_db.h:48-56); an unknown CRC marks the - image "Unknown" and invalid but it is still used. The CRC is therefore the - CRC of the padded buffer, not of the file: the 16384-byte Game Express - Green dump (file CRC32 20E0A364) is recognised as 16AAF05A. + image "Unknown" and invalid but it is still used. For CD content the ROM banks map onto the System Card buffer, or onto the Game Express buffer when the disc is a Game Express title - (src/media.cpp:845-849). A Game Express disc is detected by its CRC in - game_db.h (GG_GAMEDB_GAME_EXPRESS, src/media.cpp:743-747) or forced by the - option (src/media.cpp:604-608). With no card loaded the buffer is zeros and - the CD does not boot. Arcade Card titles are also detected from game_db.h - and run on the selected System Card. + (src/media.cpp:1094-1103). A Game Express disc is detected by its CRC in + game_db.h (GG_GAMEDB_GAME_EXPRESS, src/media.cpp:993-997), named by the + card field of an MMI image (src/media.cpp:821-823) or forced by the option + (src/media.cpp:835-839). With no card loaded the buffer is zeros and the CD + does not boot. Arcade Card titles are also detected from game_db.h and run + on the selected System Card. - Backup RAM is exposed through RETRO_MEMORY_SAVE_RAM (libretro.cpp:540-548) - and saved by the frontend. A connected Memory Base 128 is persisted by the - core itself as geargrafx_mb128.sav in the frontend save directory - (libretro.cpp:660-740). Both are state the core writes, not files a user - obtains. + MMI content is a LaserActive LD-ROM2 image. retro_load_game() also calls + load_pac_bios() for it (platforms/libretro/libretro.cpp:521-522), which + reads the NEC PAC firmware from the system directory according to the core + option geargrafx_laseractive_region (platforms/libretro/libretro.cpp:1603-1614): + Japan loads pac-n1.bin and falls back to pce-lp1.bin, US loads pac-n10.bin, + Auto (the default) loads both regions + (platforms/libretro/libretro.cpp:775-797). Media::LoadPacBiosData() + (src/media.cpp:570-632) accepts 0x80000 bytes (GG_BIOS_LASERACTIVE_SIZE, + src/defines.h:55), with or without a 512-byte header, and compares the + CRC32 with the values hardcoded for the region; an unknown CRC is logged + and the image is still used. SelectPacBios() (src/media.cpp:634-660) follows + the option, then the regionCode of the MMI image, then whichever region is + loaded. An MMI image that names no card maps the PAC firmware + (src/media.cpp:1094-1103); one that names a card uses the System Card or + Game Express buffer. retro_load_game() fails when the firmware the MMI + image needs is not loaded (platforms/libretro/libretro.cpp:534-549). + + Backup RAM is exposed through RETRO_MEMORY_SAVE_RAM + (platforms/libretro/libretro.cpp:632-640) and saved by the frontend. A + connected Memory Base 128 is persisted by the core itself as + geargrafx_mb128.sav in the frontend save directory + (platforms/libretro/libretro.cpp:799-879). Both are state the core writes, + not files a user obtains. files: - name: "syscard3.pce" @@ -66,7 +85,7 @@ files: size: 262144 required: true validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:622, platforms/libretro/libretro.cpp:634-639, platforms/libretro/libretro.cpp:644-654, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:51-52, src/game_db.h:54" + source_ref: "platforms/libretro/libretro.cpp:714, platforms/libretro/libretro.cpp:726-731, platforms/libretro/libretro.cpp:736-746, src/media.cpp:662-705, src/defines.h:53, src/game_db.h:51-52, src/game_db.h:54" note: > Loaded for the default option value System Card 3 and for Force Game Express. game_db.h accepts three images under this name: Japan @@ -79,7 +98,7 @@ files: size: 262144 required: false validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:621, platforms/libretro/libretro.cpp:631-632, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:49-50, src/game_db.h:53" + source_ref: "platforms/libretro/libretro.cpp:713, platforms/libretro/libretro.cpp:723-724, src/media.cpp:662-705, src/defines.h:53, src/game_db.h:49-50, src/game_db.h:53" note: > Loaded when geargrafx_cdrom_bios is System Card 2. game_db.h accepts v2.0 Japan (CRC32 52520BC6), v2.1 Japan (CRC32 283B74E0) and USA @@ -91,7 +110,7 @@ files: crc32: "3F9F95A4" required: false validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:620, platforms/libretro/libretro.cpp:628-629, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:48" + source_ref: "platforms/libretro/libretro.cpp:712, platforms/libretro/libretro.cpp:720-721, src/media.cpp:662-705, src/defines.h:53, src/game_db.h:48" note: "Loaded when geargrafx_cdrom_bios is System Card 1." - name: "gexpress.pce" @@ -99,14 +118,50 @@ files: size: 32768 required: false validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:623, platforms/libretro/libretro.cpp:656-657, src/media.cpp:447-488, src/media.cpp:604-608, src/media.cpp:743-747, src/defines.h:54, src/game_db.h:55-56" + source_ref: "platforms/libretro/libretro.cpp:715, platforms/libretro/libretro.cpp:748-749, src/media.cpp:662-705, src/media.cpp:821-823, src/media.cpp:835-839, src/media.cpp:993-997, src/defines.h:54, src/game_db.h:55-56" note: > Always attempted after the System Card, used for discs flagged - GG_GAMEDB_GAME_EXPRESS in game_db.h or when the option is Force Game - Express. game_db.h accepts the Blue Version (CRC32 51A12D90, 32768 - bytes) and the Green Version (CRC32 16AAF05A over the 32768-byte - buffer; the dump is 16384 bytes, file CRC32 20E0A364, zero-padded by - LoadBiosData). + GG_GAMEDB_GAME_EXPRESS in game_db.h, for MMI images whose card is + Games Express, or when the option is Force Game Express. game_db.h + accepts the Blue Version (CRC32 51A12D90) and the Green Version + (CRC32 16AAF05A). Both CRCs are of 32768-byte images: the 16384-byte + Green dump (CRC32 20E0A364) is rejected on size and matches 16AAF05A + once zero-padded to 32768 bytes. + + - name: "pac-n1.bin" + description: "LaserActive NEC PAC-N1 v1.02 (Japan)" + size: 524288 + crc32: "A8CB694C" + region: [japan] + required: true + validation: [size, crc32] + source_ref: "platforms/libretro/libretro.cpp:780-784, platforms/libretro/libretro.cpp:534-549, src/media.cpp:570-632, src/defines.h:55" + note: > + Japanese PAC firmware, read for MMI content when + geargrafx_laseractive_region is Auto or Japan. The Japanese slot + accepts the PAC-N1 and PCE-LP1 images under either file name. + + - name: "pce-lp1.bin" + description: "LaserActive NEC PCE-LP1 v1.02 (Japan)" + size: 524288 + crc32: "76116A02" + region: [japan] + required: false + validation: [size, crc32] + source_ref: "platforms/libretro/libretro.cpp:785-789, src/media.cpp:570-632, src/defines.h:55" + note: "Read only when pac-n1.bin did not load." + + - name: "pac-n10.bin" + description: "LaserActive NEC PAC-N10 v1.02 (US)" + size: 524288 + crc32: "01223DD5" + region: [north-america] + required: true + validation: [size, crc32] + source_ref: "platforms/libretro/libretro.cpp:792-796, platforms/libretro/libretro.cpp:534-549, src/media.cpp:570-632, src/defines.h:55" + note: > + US PAC firmware, read for MMI content when + geargrafx_laseractive_region is Auto or US. valid_bios_crc32: syscard: @@ -119,4 +174,9 @@ valid_bios_crc32: - { crc32: "2B5B75FE", name: "TurboGrafx CD Super System 3.0 (USA)" } game_express: - { crc32: "51A12D90", name: "Games Express CD Card Blue Version (J)" } - - { crc32: "16AAF05A", name: "Games Express CD Card Green Version (J)", file_crc32: "20E0A364", file_size: 16384 } + - { crc32: "16AAF05A", name: "Games Express CD Card Green Version (J)" } + laseractive_japan: + - { crc32: "A8CB694C", name: "PAC-N1 v1.02" } + - { crc32: "76116A02", name: "PCE-LP1 v1.02" } + laseractive_us: + - { crc32: "01223DD5", name: "PAC-N10 v1.02" } diff --git a/emulators/gearlynx.yml b/emulators/gearlynx.yml index 1a4b9306..c84c8a2a 100644 --- a/emulators/gearlynx.yml +++ b/emulators/gearlynx.yml @@ -2,9 +2,9 @@ emulator: Gearlynx type: libretro core_classification: official_port source: "https://github.com/drhelius/Gearlynx" -profiled_date: "2026-03-23" -source_commit: "d98c154444f1610016ad60704de2eed3ef80de22" -core_version: "1.0.0" +profiled_date: "2026-10-04" +source_commit: "6a939afbca387ca615d96433928866e9d16ba2de" +core_version: "1.2.33" display_name: "Atari - Lynx (GearLynx)" cores: [gearlynx] systems: [atari-lynx] @@ -12,37 +12,37 @@ verification: existence notes: | Gearlynx is an Atari Lynx emulator by Ignacio Sanchez (drhelius). - The libretro core loads lynxboot.img from the system directory at - retro_load_game time (platforms/libretro/libretro.cpp:105-129, function load_bootroms). + The libretro core loads lynxboot.img from the system directory in + retro_load_game() and again in retro_reset() + (platforms/libretro/libretro.cpp:170-212, function load_bootroms). Path is built as: system_directory + "/lynxboot.img", no subdirectory. + With the libretro VFS the file is read by load_bios_file() and handed to + LoadBiosFromBuffer(), otherwise Media::LoadBios() opens it + (platforms/libretro/libretro.cpp:130-168, src/media.cpp:578-620). - LoadBios in src/media.cpp:578 reads exactly 512 bytes (GLYNX_BIOS_SIZE - = 0x200, src/defines.h:52). If the file size is not 0x200, the load is - rejected with BIOS_LOAD_INVALID_SIZE. After loading, bytes at offset - 0x1F8 and 0x1F9 are patched (RAM/MAPCTL registers), then CRC32 is - computed and compared against GLYNX_DB_BIOS_CRC (0x0D973C9D, + LoadBiosData in src/media.cpp:633-683 takes exactly 512 bytes + (GLYNX_BIOS_SIZE = 0x200, src/defines.h:52). If the file size is not + 0x200, the load is rejected with BIOS_LOAD_INVALID_SIZE. After loading, + bytes at offset 0x1F8 and 0x1F9 are patched (RAM/MAPCTL registers), then + CRC32 is computed and compared against GLYNX_DB_BIOS_CRC (0x0D973C9D, src/game_db.h:47). An invalid CRC triggers a warning log but the BIOS is still marked as loaded (m_is_bios_loaded = true). No HLE fallback. If the BIOS is not loaded (IsBiosLoaded() returns - false), RunToVBlank in - src/gearlynx_core.cpp:465-473 renders a static "no bios" image - and returns false, refusing to emulate. The BIOS is required for - any ROM to run. Homebrew (.o, BS93 format) bypasses the normal - boot sequence via PrepareForHomebrew() but still requires the BIOS - to be loaded for the emulation loop to execute. + false), RunToVBlank in src/gearlynx_core.cpp:216-221 renders a static + "no bios" image and returns false, refusing to emulate. The BIOS is + required for any ROM to run. Homebrew (.o, BS93 format) bypasses the + normal boot sequence via PrepareForHomebrew() but still requires the + BIOS to be loaded for the emulation loop to execute. - ROM extensions: .lnx, .lyx, .o + ROM extensions: .lnx, .lyx, .o, .bin files: - name: "lynxboot.img" description: "Atari Lynx boot ROM" - region: [world] required: true size: 512 - sha1: "e4ed47fae31693e016b081c6bda48da5b70d7ccb" - md5: "fcd403db69f54290b51035d82f835e7b" crc32: "0d973c9d" validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:160-202 (load_bootroms), src/media.cpp:578-620 (LoadBios), src/defines.h:52 (GLYNX_BIOS_SIZE=0x200), src/game_db.h:38 (GLYNX_DB_BIOS_CRC=0x0D973C9D), src/gearlynx_core.cpp:467-471 (no-bios guard)" + source_ref: "platforms/libretro/libretro.cpp:170-212 (load_bootroms), src/media.cpp:633-683 (LoadBiosData), src/defines.h:52 (GLYNX_BIOS_SIZE=0x200), src/game_db.h:47 (GLYNX_DB_BIOS_CRC=0x0D973C9D), src/gearlynx_core.cpp:216-221 (no-bios guard)" note: "512-byte boot ROM validated by CRC32 after load. Invalid CRC logs a warning but still works. Missing or wrong-size file blocks emulation entirely (no HLE fallback)." diff --git a/emulators/mednafen_supergrafx.yml b/emulators/mednafen_supergrafx.yml index 5cd3b5ef..273b56f3 100644 --- a/emulators/mednafen_supergrafx.yml +++ b/emulators/mednafen_supergrafx.yml @@ -3,52 +3,47 @@ type: libretro core_classification: community_fork source: "https://github.com/libretro/beetle-supergrafx-libretro" upstream: "https://mednafen.github.io/" -profiled_date: "2026-03-24" -source_commit: "3c6fcd3deded54ebecd69408f108407ac03d11b5" -core_version: "v1.23.0" +profiled_date: "2026-10-04" +source_commit: "eabaaa438b1732d05ff206a97e700f845d6bfa96" +core_version: "v1.29.0" display_name: "NEC - PC Engine SuperGrafx (Beetle SuperGrafx)" cores: [mednafen_supergrafx, beetle_supergrafx] systems: [nec-pc-engine] verification: existence notes: > - Fork of Mednafen's pce_fast module with SuperGrafx and CD support. - Separate codebase from beetle_pce (mednafen/pce_fast/ vs mednafen/pce/). - BIOS loaded via HuC_LoadCD() at CD-ROM load time. Core option "sgx_cdbios" - selects which card image to use (default: System Card 3). - DetectGECD() auto-detects Games Express discs and overrides to gexpress.pce. + Port of Mednafen's pce_fast module with SuperGrafx and CD support. + The card image is read from the system directory by HuC_LoadCD() at + CD-ROM load time (mednafen/pce_fast/huc.cpp:221-245); the load fails when + the file cannot be opened. Core option "sgx_cdbios" selects which image + to use (default: System Card 3). With "sgx_detect_gexpress" enabled (the + default), DetectGECD() recognises Games Express discs and loads + gexpress.pce whatever the selection (mednafen/pce_fast/pce.cpp:453-454). DetectSGXCD() detects SuperGrafx CD titles via magic bytes. - Arcade Card mode (sgx_arcadecard option, not exposed) extends System Card 3 - with extra RAM mapping. + Arcade Card emulation is always on (mednafen/settings.cpp:90-91). + HuC_LoadCD() strips a 512-byte header and copies at most 262144 bytes. No hash or size validation on BIOS load. - Upstream pce_fast module has a single pce_fast.cdbios string setting; - the 4-option dropdown is a libretro addition. Upstream has no separate - gecdbios setting (unlike the accurate pce module). files: - name: "syscard3.pce" description: "CD-ROM System Card 3.0 (Japan)" - region: [japan] required: true source_ref: "libretro.cpp:972-973, mednafen/settings.cpp:37" note: "Default value for sgx_cdbios option." - name: "syscard2.pce" description: "CD-ROM System Card 2.0 (Japan)" - region: [japan] required: false source_ref: "libretro.cpp:974-975" note: "sgx_cdbios = 'System Card 2'." - name: "syscard1.pce" description: "CD-ROM System Card 1.0 (Japan)" - region: [japan] required: false source_ref: "libretro.cpp:976-977" note: "sgx_cdbios = 'System Card 1'." - name: "gexpress.pce" description: "Games Express CD Card" - region: [japan] required: false source_ref: "libretro.cpp:978-979, mednafen/pce_fast/pce.cpp:330-367,453-454" note: "sgx_cdbios = 'Games Express' or auto-detected via DetectGECD()." diff --git a/emulators/melonds_ds.yml b/emulators/melonds_ds.yml index 605defab..0472657b 100644 --- a/emulators/melonds_ds.yml +++ b/emulators/melonds_ds.yml @@ -4,9 +4,9 @@ core_classification: community_fork cores: [melonds_ds, melondsds] source: "https://github.com/JesseTG/melonds-ds" upstream: "https://github.com/melonDS-emu/melonDS" -profiled_date: "2026-03-24" -source_commit: "bc4e4b67d2d470d7c682810a1e892cafd6f9082b" -core_version: "1.2.0" +profiled_date: "2026-10-04" +source_commit: "f394adbacb5722ee97c1b37c8064da9a25818310" +core_version: "1.4.0" display_name: "Nintendo - DS (melonDS DS)" systems: - nintendo-ds @@ -14,10 +14,31 @@ systems: notes: | Libretro-specific remake using melonDS as a statically-linked library. - DS mode has FreeBIOS/generated firmware fallback; DSi mode requires all - native files. Core searches "melonDS DS/" subfolder first, then system root. - In DSi mode, NDS BIOS (bios7/bios9) are also required alongside DSi BIOS. - Firmware and NAND filenames are user-selectable via core options. + LoadBios() looks for each BIOS in "{system}/melonDS DS/" first, then in the + system directory itself, and rejects a file whose size is not exactly the + expected one (src/libretro/config/console.cpp:1087-1133). + + DS mode: the firmware named by the core option is loaded when BIOS/Firmware + Mode is Native, otherwise (or when it fails to load) a generated firmware + is used (src/libretro/config/console.cpp:337-364). bios7.bin and bios9.bin + are only read with a native firmware; if either fails the core falls back + to FreeBIOS (src/libretro/config/console.cpp:379-410). With FreeBIOS an + encrypted retail ROM is refused (src/libretro/config/console.cpp:420-424), + and booting without content needs native BIOS and a bootable firmware + (src/libretro/config/console.cpp:398-401). + + DSi mode requires dsi_bios7.bin, dsi_bios9.bin, bios7.bin, bios9.bin, a DSi + firmware and a NAND image; each missing file throws + (src/libretro/config/console.cpp:490-551). + + Firmware and NAND images have no fixed name. RegisterCoreOptions() scans + the system directory and its "melonDS DS" subdirectory and offers every + file that passes IsFirmwareImage() or IsDsiNandImage() as a core option + value (src/libretro/config/config.cpp:1005-1020). The default firmware is + the newest file whose header matches the console type. The NAND option + defaults to Auto: for a title installed onto the NAND the core picks the + discovered image whose console region matches the ROM, otherwise the first + one found (src/libretro/config/console.cpp:564-579). files: # --- Nintendo DS (NTR) --- @@ -29,7 +50,8 @@ files: size: 16384 validation: [size] crc32: 1280f0d5 - source_ref: "src/libretro/config/console.cpp:219, src/MemConstants.h:31, src/MemConstants.h:36" + source_ref: "src/libretro/config/config.hpp:326, src/libretro/config/console.cpp:379, src/libretro/config/console.cpp:526-529, src/libretro/config/console.cpp:1098-1103, src/MemConstants.h:31, src/MemConstants.h:36" + note: "Required in DSi mode." - name: bios9.bin system: nintendo-ds @@ -39,15 +61,16 @@ files: size: 4096 validation: [size] crc32: 2ab23573 - source_ref: "src/libretro/config/console.cpp:306, src/MemConstants.h:30, src/MemConstants.h:37" + source_ref: "src/libretro/config/config.hpp:325, src/libretro/config/console.cpp:380, src/libretro/config/console.cpp:531-534, src/libretro/config/console.cpp:1098-1103, src/MemConstants.h:30, src/MemConstants.h:37" + note: "Required in DSi mode." - name: firmware.bin system: nintendo-ds description: "NDS firmware image" required: false hle_fallback: true - source_ref: "src/libretro/config/console.cpp:184" - note: "Filename configurable via core options; generated firmware used as fallback" + source_ref: "src/libretro/config/console.cpp:337-364, src/libretro/config/console.cpp:1136-1182, src/libretro/config/constants.cpp:102-176, src/libretro/config/constants.hpp:288" + note: "Any file name: the core lists every file of 131072, 262144 or 524288 bytes with a valid firmware header and the user picks one. A generated firmware is used as fallback." # --- Nintendo DSi (TWL) --- - name: dsi_bios7.bin @@ -57,8 +80,8 @@ files: size: 65536 validation: [size] crc32: 4316cc42 - source_ref: "src/libretro/config/console.cpp:333, src/MemConstants.h:32, src/MemConstants.h:44" - note: "Contains eMMC key-Y at offset 0x8308 for NAND init" + source_ref: "src/libretro/config/config.hpp:328, src/libretro/config/console.cpp:516-519, src/libretro/config/console.cpp:1098-1103, src/MemConstants.h:32, src/MemConstants.h:44" + note: "The eMMC key-Y at offset 0x8308 is used to open the NAND image (src/libretro/config/console.cpp:586)." - name: dsi_bios9.bin system: nintendo-dsi @@ -67,18 +90,18 @@ files: size: 65536 validation: [size] crc32: bae84f6c - source_ref: "src/libretro/config/console.cpp:338, src/MemConstants.h:32, src/MemConstants.h:45" + source_ref: "src/libretro/config/config.hpp:327, src/libretro/config/console.cpp:521-524, src/libretro/config/console.cpp:1098-1103, src/MemConstants.h:32, src/MemConstants.h:45" - name: dsi_firmware.bin system: nintendo-dsi description: "DSi firmware image" required: true - source_ref: "src/libretro/config/console.cpp:352-358" - note: "Filename configurable via core options; must have DSi firmware header" + source_ref: "src/libretro/config/console.cpp:497-499, src/libretro/config/console.cpp:536-551, src/libretro/config/constants.cpp:102-176" + note: "Any file name, selected through a core option; the firmware header must declare the DSi console type." - name: dsi_nand.bin system: nintendo-dsi description: "DSi NAND dump" required: true - source_ref: "src/libretro/config/console.cpp:378, src/libretro/config/console.cpp:1172-1179" - note: "Filename configurable via core options; 240MB or 245.5MB with optional no$cash footer" + source_ref: "src/libretro/config/console.cpp:490-495, src/libretro/config/console.cpp:564-592, src/libretro/config/console.cpp:1401-1416, src/libretro/config/constants.cpp:44-100, src/libretro/config/constants.hpp:283-287" + note: "Any file name, selected through a core option or picked automatically by region. 251658240 or 257425408 bytes, plus 64 when the no$gba footer is appended; the footer magic must be present at the end or at offset 0xFF800." diff --git a/emulators/xenia-edge.yml b/emulators/xenia-edge.yml index 4b431a36..3e01bb6e 100644 --- a/emulators/xenia-edge.yml +++ b/emulators/xenia-edge.yml @@ -3,7 +3,7 @@ type: standalone core_classification: community_fork source: "https://github.com/has207/xenia-edge" upstream: "https://github.com/has207/xenia-edge" -source_commit: "d059e1771888ce5f3ae2da34521dc5ca416f1c6b" +source_commit: "fb1c5bf08b16dab5422136c44c593a9f516750f0" profiled_date: "2026-09-17" core_version: "edge" display_name: "Xenia Edge (Xbox 360)" @@ -22,13 +22,13 @@ notes: | into a xenia-edge component and executes bin/xenia_edge. No Xbox 360 system file is read. xboxkrnl, xam and xbdm are C++ HLE modules - registered at startup (src/xenia/emulator.cc:392-401), the XEX2 retail and devkit AES + registered at startup (src/xenia/emulator.cc:395-404), the XEX2 retail and devkit AES keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:67-72), and every XConfig setting is synthesised from cvars and constants by BuildSetting rather than read from a flash image (src/xenia/kernel/xconfig.cc:87-246, 259-272). When the launched title is itself a system title the kernel resolves xam.xex, then $flash_xam.xex, through the guest filesystem under the \SystemRoot symlink - pointing at that title's own directory (src/xenia/emulator.cc:773-788); that is a + pointing at that title's own directory (src/xenia/emulator.cc:777-792); that is a companion module inside the dump the user launched, not a host-side lookup. The fork's data ships inside the executable. assets/font/Inter-VariableFont @@ -37,32 +37,33 @@ notes: | with no .mo written next to the binary (src/xenia/ui/CMakeLists.txt:48-76). The UI font is read from that buffer with AddFontFromMemoryTTF (src/xenia/ui/imgui_drawer.cc:374-384), and xe::EmbeddedBundle decodes the SDL controller - mappings (src/xenia/hid/sdl/sdl_input_driver.cc:147-164), the canary game patches + mappings (src/xenia/hid/sdl/sdl_input_driver.cc:237-254), the canary game patches (src/xenia/patcher/patch_db.cc:318-324), the game-compatibility master.json (src/xenia/app/game_compat_db.cc:47-58) and the x360db games.json (src/xenia/app/game_title_db.cc:50-60). Three cvars accept a file and name none by default, so nothing is expected at a fixed path: custom_font_path falls back to the embedded Inter (src/xenia/ui/imgui_drawer.cc:39-44, 360-393), mappings_file to the embedded controller DB - (src/xenia/hid/sdl/sdl_input_driver.cc:34-37, 147-151), achievement_sound_path leaves the + (src/xenia/hid/sdl/sdl_input_driver.cc:36-39, 237-241), achievement_sound_path leaves the achievement sound silent (src/xenia/ui/audio_helper.cc:21-24, 38-52). For glyphs the embedded font lacks, the host font comes from the OS: tahoma.ttf and msgothic.ttc out of the Windows fonts folder, or the fontconfig sans-serif and CJK matches on Linux (src/xenia/ui/imgui_drawer.cc:395-477, 479-563). Everything under the storage root is written by the emulator or dropped in by - the user: xenia-edge.config.toml and per-game .config.toml (src/xenia/config.cc:43-46), - patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:387, + the user: xenia-edge.config.toml and per-game .config.toml (src/xenia/config.cc:45-48), + patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:390, src/xenia/patcher/patch_db.cc:34-52, 60-75) and listed by the patches panel beside the bundled ones (src/xenia/patcher/patch_db.cc:373-397), plugins//plugins.toml behind allow_plugins, - which defaults false (src/xenia/patcher/plugin_loader.cc:16-38, 58-72), content, cache0, cache1, - scratch and mu (src/xenia/emulator.cc:1478-1537). portable.txt next to the executable + which defaults false (src/xenia/patcher/plugin_loader.cc:16-38, 58-72), content + (src/xenia/app/xenia_main.cc:563-566), scratch, cache0, cache1, cache and mu + (src/xenia/emulator.cc:1479-1547). portable.txt next to the executable keeps the storage root there instead of the user folder (src/xenia/app/xenia_main.cc:524-538). On Windows the Direct3D 12 and Vulkan runtimes are not in the release zip, - which holds only the build output (.github/workflows/build.yml:500-510). The + which holds only the build output (.github/workflows/build.yml:392-402). The emulator looks for them in D3D12/ and Vulkan/ beside the executable and offers to download pinned archives from Microsoft and LunarG, gated by d3d12_install_missing_runtime, vulkan_install_missing_loader and @@ -81,7 +82,7 @@ files: system: microsoft-xbox-360 required: true description: "DXIL signer and validator from DirectX Shader Compiler 1.9.2602.24" - source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:267-291, src/xenia/gpu/d3d12/pipeline_cache.cc:112-120, src/xenia/ui/redist_installer_wx.cc:79-87, 120-122, src/xenia/ui/redist_installer_wx.cc:174-182, src/xenia/ui/redist_installer_wx.cc:582-614" + source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:267-291, src/xenia/gpu/d3d12/pipeline_cache.cc:114-122, src/xenia/ui/redist_installer_wx.cc:79-87, 120-122, src/xenia/ui/redist_installer_wx.cc:174-182, src/xenia/ui/redist_installer_wx.cc:582-614" note: >- The only shader library the backend still needs. Loaded by full path from the D3D12 folder next to the executable, then by plain name from the @@ -89,7 +90,7 @@ files: D3D12/. D3D12 rejects an unsigned shader, so PipelineCache::Initialize stops when IsSignerAvailable() is false and asks for a recent dxil.dll in the D3D12 folder; that failure propagates to "Failed to setup - graphics_system!" (src/xenia/emulator.cc:432-443). Windows defaults to + graphics_system!" (src/xenia/emulator.cc:435-446). Windows defaults to gpu = "d3d12" (src/xenia/emulator.cc:119) and the backend factory only falls back when D3D12GraphicsSystem::IsAvailable() is false, which tests the D3D12 API itself, not the redistributable. Taken from