fix: realign five profiles, add laseractive pac roms

This commit is contained in:
Abdessamad Derraz committed 2026-10-04 17:09:14 +02:00
1 parent 59ccb5b7d5
commit f57c2a4ed2
5 files changed
+193 -114

No files matched your search

+106 -46
View File
@@ -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" }
+21 -21
View File
@@ -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)."
+12 -17
View File
@@ -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()."
+41 -18
View File
@@ -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."
+13 -12
View File
@@ -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/<title id>/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