Files
libretro/emulators/pcsx2-libretro-408e3b2.yml
T
Abdessamad Derraz 45db717db9 feat: check PS2 BIOS images by their romdir
Each PCSX2 fork declares how its LoadBiosVersion reads the table:
the strncmp length on RESET, the NUL test on names, EXTINFO, and what a
read past the end does, from the source at the pin or the shipped
libemucore.so for NetherSX2 and its Turnip builds. The Recalbox libretro
PCSX2 and PCEE2 check no size, so their 4 to 8 MB bounds are gone, and
the PCEE2 and ARMSX2 arcade images require the COH-H zone.
2026-11-10 12:52:46 +01:00

130 lines
5.8 KiB
YAML

# libretro PCSX2 at 408e3b2 with Recalbox's BIOS path patch
# Source: https://gitlab.com/recalbox/packages/libretro/libretro-pcsx2
# Upstream: https://github.com/PCSX2/pcsx2
emulator: "PCSX2 libretro (408e3b2, Recalbox)"
type: libretro
core_classification: community_fork
bios_mode: agnostic
source: "https://gitlab.com/recalbox/packages/libretro/libretro-pcsx2"
upstream: "https://github.com/PCSX2/pcsx2"
profiled_date: "2026-11-10"
source_commit: "408e3b253847b25536ad77e4ab0c3aff6b8b896f"
pin_frozen: "Recalbox, the only platform that ships it, builds this revision with package/libretro-pcsx2/0003-bios-path.patch (Recalbox package/libretro-pcsx2/libretro-pcsx2.mk:8 at tag 10.1.1). Later commits are not part of that build."
pin_build:
- platform: recalbox
repo: "https://gitlab.com/recalbox/recalbox"
revision: "10.1.1"
path: "package/libretro-pcsx2/libretro-pcsx2.mk"
variable: LIBRETRO_PCSX2_VERSION
value: "408e3b253847b25536ad77e4ab0c3aff6b8b896f"
core_version: "1.7.0"
version_basis:
kind: file
path: "pcsx2/SysForwardDefs.h"
pattern: 'PCSX2_VersionHi\s*=\s*(\d+);\s*\n.*PCSX2_VersionMid\s*=\s*(\d+);\s*\n.*PCSX2_VersionLo\s*=\s*(\d+);'
format: "{1}.{2}.{3}"
display_name: "Sony - PlayStation 2 (PCSX2 libretro 408e3b2 for Recalbox)"
cores: [pcsx2]
built_by: [recalbox]
systems: [sony-playstation-2]
bios_directory: "ps2/"
notes: |
The wxWidgets-era libretro port of PCSX2 1.7.0. Recalbox builds it for
x86_64 only (Recalbox package/libretro-pcsx2/Config.in:3, Recalbox
configs/recalbox-x86_64_defconfig:352), installs it as pcsx2_libretro.so
(Recalbox package/libretro-pcsx2/libretro-pcsx2.mk:30-31) and lists it as
the libretro core pcsx2 of the ps2 system (Recalbox
package/recalbox-romfs2/systems/ps2/system.ini:54-58).
The library version is git describe of the build tree, empty when the tree
has no .git (cmake/Pcsx2Utils.cmake:38-52, 70-72, libretro/main.cpp:447-448).
Its patch moves the BIOS scan from pcsx2/bios to ps2 below the system
directory (libretro/main.cpp:264), /recalbox/share/bios/ps2 on Recalbox.
BIOS detection is filename-agnostic: every file in ps2/ whose romdir holds
a RESET and a ROMVER entry is listed, no size or hash is checked, and the
list fills the pcsx2_bios core option whose default is the first BIOS found
(libretro/main.cpp:262-303). Without one, retro_init returns before it
creates the emulator and no game starts (libretro/main.cpp:282-287,
325-328). The companion files take their path from the selected BIOS.
GameIndex.yaml and the widescreen, no-interlacing and 60 fps patch archives
are compiled in (pcsx2/CMakeLists.txt:338-367,
pcsx2/gui/AppGameDatabase.cpp:20-24, pcsx2/Patch.cpp:30-32). DEV9 is the
null device (pcsx2/DEV9/DEV9.cpp:59-64), so no hard disk, EEPROM or flash
file is read. Memory cards and pnach patches under system/pcsx2 are user
files.
files:
- name: "<bios>.bin"
found_by: content
path: "ps2/<bios>.bin"
required: true
validation: [romdir]
romdir:
reset_compare: 5
missing_reset: rejects
terminated_names: false
extinfo: false
unreadable_romver: rejects
truncated_walk: rejects
offset_width: 32
description: "PS2 BIOS binary"
config_key: "pcsx2_bios"
source_ref: "source libretro/main.cpp:262-303, source libretro/main.cpp:317-328, source libretro/main.cpp:653-654, source pcsx2/ps2/BiosTools.cpp:74-167, 261-319, 340-356, source common/src/Utilities/pxStreams.cpp:74-93, source common/include/Utilities/Exceptions.h:346, source pcsx2/MemoryTypes.h:21"
note: >
Any file in ps2/ whose name holds a dot (the *.* mask of wxDir) and
whose romdir holds RESET and ROMVER, picked by the pcsx2_bios core
option. No size is checked. The table is read 16 bytes at a time from
the start of the file until a name starting with RESET, within 512 Ki
entries, then walked to an entry named ROMVER, whose 14 bytes are read
at the sum of the sizes before it. Every read past the end of the file
throws EndOfStream and the file is not listed. The first 4 MB are
mapped.
- name: "<bios>.rom1"
path: "ps2/<bios>.rom1"
required: false
description: "DVD player ROM"
source_ref: "source pcsx2/ps2/BiosTools.cpp:191-229, 294, source pcsx2/MemoryTypes.h:22"
note: "Tries <bios path>.rom1, then the BIOS path with its extension replaced by rom1. Skipped when neither exists. The first 256 KB are read."
- name: "<bios>.rom2"
path: "ps2/<bios>.rom2"
required: false
description: "Chinese ROM extension"
source_ref: "source pcsx2/ps2/BiosTools.cpp:191-229, 295, source pcsx2/MemoryTypes.h:23"
note: "Same naming as rom1. Present only on Chinese consoles. The first 512 KB are read."
- name: "<bios>.erom"
path: "ps2/<bios>.erom"
required: false
description: "DVD player extension ROM"
source_ref: "source pcsx2/ps2/BiosTools.cpp:191-229, 296, source pcsx2/MemoryTypes.h:24"
note: "Same naming as rom1. The first 0x1C0000 bytes are read."
- name: "<bios>.nvm"
path: "ps2/<bios>.nvm"
required: false
hle_fallback: true
size: 1024
description: "NVRAM / EEPROM data"
source_ref: "source pcsx2/CDVD/CDVD.cpp:142-187, source libretro/main.cpp:634-642, source libretro/language_injector.cpp:231-262"
note: >
Read at the BIOS path with the extension replaced by nvm. A file shorter
than 1024 bytes is replaced by a blank one with a dummy i.LINK ID.
Without it the fast boot option is ignored. When it exists and the BIOS
is in the language table, the system language option is written into it.
- name: "<bios>.mec"
path: "ps2/<bios>.mec"
required: false
hle_fallback: true
size: 4
description: "Mechacon version"
source_ref: "source pcsx2/CDVD/CDVD.cpp:96-126"
note: "Read at the BIOS path with the extension replaced by mec. Written as bytes 03 06 02 00 when missing."