mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 13:33:24 -05:00
fix: realign five profiles, add laseractive pac roms
This commit is contained in:
1 parent
59ccb5b7d5
commit
f57c2a4ed2
5 files changed
+193
-114
No files matched your search
+106
-46
@@ -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
@@ -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)."
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
Reference in new issue
Block a user