Files
libretro/emulators/lrps2.yml
T
Abdessamad Derraz 0a6c70c388 feat: read retrodeck and emudeck at shipped builds
RetroDECK carries GZDoom g4.14.2 in its components and installs LRPS2
14d19f8 from the buildbot's stable 1.22.2 cores. EmuDeck runs the
Flathub ares, v148. Each gets its own config_reads entry, and an entry
read at the pin no longer stands for a platform another entry names.

At v148 ares reads NeoGeoAES/Firmware/BIOS.World, so that EmuDeck record
holds. It names MSX2 firmware MAIN and SUB, and PC Engine CD and
SuperGrafx CD firmware by card: EmuDeck's BIOS.* keys for those three
are never read and stay unproven.
2026-11-11 12:17:04 +01:00

242 lines
10 KiB
YAML

# LRPS2 - libretro PlayStation 2 core
# Source: https://github.com/libretro/parallel-ps2
# Upstream: https://github.com/PCSX2/pcsx2
emulator: LRPS2
type: libretro
core_classification: community_fork
bios_mode: agnostic
source: "https://github.com/libretro/parallel-ps2"
upstream: "https://github.com/PCSX2/pcsx2"
profiled_date: "2026-11-09"
source_commit: "87bcc96bbc3b4da7318fd1c2a7450f0c78bdc09e"
prose_written_at: "87bcc96bbc3b4da7318fd1c2a7450f0c78bdc09e"
upstream_commit: "f0523f8acb1d3a765ee73b74cffec63093569199"
core_version: "v2.0.0"
version_basis:
kind: file
path: "libretro/main.cpp"
pattern: 'library_version\s*=\s*"(v[0-9.]+)-"'
display_name: "Sony - PlayStation 2 (LRPS2)"
cores: [lrps2, pcsx2, "ps2"]
systems: [sony-playstation-2]
bios_directory: "pcsx2/bios/"
resources_directory: "pcsx2/resources/"
config_reads:
- file: "core options"
source_ref: "libretro/main.cpp:506, 525-527"
keys:
- key: "pcsx2_bios"
source_ref: "libretro/main.cpp:525-536, 2552-2560"
- file: "core options"
platforms: [retrodeck]
revision: "14d19f8339e3646b645c1c33e612b1888e632145"
revision_from: "library_version 14d19f8 of pcsx2_libretro.so in the buildbot's stable 1.22.2 RetroArch_cores.7z (2025-11-20), which RetroDECK's retroarch component installs (retroarch/component_recipe.json at fcd0d729)"
source_ref: "libretro/main.cpp:341, 1915-1926, 2013"
keys:
- key: "pcsx2_bios"
source_ref: "libretro/main.cpp:360-365, 1801-1830, pcsx2/VMManager.cpp:247-256, 1076-1092, 601, pcsx2/Pcsx2Config.cpp:887-891, 995-1000, pcsx2/ps2/BiosTools.cpp:267-281"
condition: "the value is a file of system/pcsx2/bios; without the option the core scans that folder for a 4 to 8 MiB BIOS"
notes: |
Hard fork of PCSX2 (pre-Qt, 1.7-dev era) ported to libretro, x86_64 only,
with much of the emulator since rewritten in C89. The system directory of
the core is system/pcsx2 (libretro/main.cpp:2699-2708).
BIOS detection is filename-agnostic: pcsx2/bios/ is scanned for any file
between 4 and 8 MB with a valid romdir structure (RESET and ROMVER
entries). No hash is checked. The companion files (.rom1, .rom2, .nvm,
.mec, .flash) take their path from the selected BIOS, and the MagicGate key
files sit in the same directory.
A COH-H BIOS is the BIOS of an arcade board: the core boots it as that
board, and its mechacon answers with the arcade key set (pcsx2/ps2/BiosTools.cpp:384-386, pcsx2/CDVD/CDVD.c:861-871).
A Konami Python game boots the selected BIOS when it is a COH-H one, else
the first COH-H BIOS of pcsx2/bios/ by name
(libretro/main.cpp:2548-2561, pcsx2/ps2/BiosTools.cpp:292-337). A Python 2
game is a .py2 descriptor whose files, HDD image, identity files, dongles
and cards, sit beside it (pcsx2/USB/usb-python2/py2desc.h:1-4).
GameIndex.yaml, the per-game patch, settings override and compatibility
database, is compiled into the core. pcsx2/resources/GameIndex.yaml is read
only when the pcsx2_use_external_gameindex option is enabled, off by
default, and the built-in copy applies when the file is missing
(libretro/main.cpp:3694-3728, libretro/libretro_core_options.h:261-264).
The buildbot still publishes one in LRPS2.zip (the lrps2 data directory).
Widescreen patches are largely compiled into the core (libretro/patches.cpp).
The DEV9 hard disk is DEV9hdd.chd or DEV9hdd.vhd when the user puts one in
system/pcsx2, otherwise a DEV9hdd.raw the core creates
(libretro/main.cpp:473-504): it is user storage, not a file to obtain.
.info firmware_count=2 counts the bios folder and GameIndex.yaml.
.info description mentions EROM.BIN but no EROM loading path exists in the code.
data_directories:
- ref: lrps2
installed_on: [batocera, lakka, recalbox, retrobat, retrodeck]
unread_on: [romm]
destination: ""
source_ref: "source pcsx2/GameDatabase.cpp:40, source pcsx2/GameDatabase.cpp:1144, source libretro/main.cpp:3694-3728"
files:
- name: "<bios>.bin"
found_by: content
path: "pcsx2/bios/<bios>.bin"
required: true
description: "PS2 BIOS binary"
min_size: 4194304
max_size: 8388608
validation: [size, romdir]
romdir:
reset_compare: 10
missing_reset: ends_walk
terminated_names: true
extinfo: true
unreadable_romver: ends_walk
truncated_walk: ends_walk
config_key: "pcsx2_bios"
source_ref: "source pcsx2/ps2/BiosTools.cpp:32-33, 64-187, 257-289, 349-415, source libretro/main.cpp:525-536"
note: >
Scans pcsx2/bios/ for any file between 4 MB and 8 MB. Validates via romdir
structure parsing (RESET + ROMVER entries). User selects BIOS via core option
pcsx2_bios. Falls back to first valid BIOS found if configured BIOS is missing.
A Konami Python game takes the first COH-H BIOS by name instead when the
selected one is not COH-H.
- name: "<bios>.rom1"
path: "pcsx2/bios/<bios>.rom1"
required: false
max_size: 4194304
description: "DVD player ROM"
source_ref: "source pcsx2/ps2/BiosTools.cpp:204-237, 406"
note: >
DVD player ROM. Tries <biospath>.rom1 (appended) then <biosbase>.rom1
(extension replaced). Silently skipped if not found.
- name: "<bios>.rom2"
path: "pcsx2/bios/<bios>.rom2"
required: false
max_size: 524288
description: "Chinese ROM extension"
source_ref: "source pcsx2/ps2/BiosTools.cpp:204-237, 407"
note: >
Chinese region ROM extension. Same naming convention as rom1.
Only present on Chinese region consoles.
- name: "<bios>.nvm"
path: "pcsx2/bios/<bios>.nvm"
required: false
hle_fallback: true
size: 1024
description: "NVRAM / EEPROM data"
source_ref: "source pcsx2/CDVD/CDVD.c:59, source pcsx2/CDVD/CDVD.c:198-271"
note: >
Console EEPROM data (language, timezone, region, iLink ID, OSD settings).
Path derived from BIOS path with extension replaced to .nvm.
Auto-created with region-appropriate defaults if missing or invalid.
With a COH-H BIOS a file that reads whole is kept as it is.
- name: "<bios>.mec"
path: "pcsx2/bios/<bios>.mec"
required: false
hle_fallback: true
size: 4
description: "Mechacon version"
source_ref: "source pcsx2/CDVD/CDVD.c:64, source pcsx2/CDVD/CDVD.c:278-292"
note: >
Mechacon (disc drive controller) version as u32.
Auto-created with default 0x00020603 if missing.
- name: "<bios>.flash"
path: "pcsx2/bios/<bios>.flash"
required: false
hle_fallback: true
size: 8650752
description: "DEV9 flash memory with ECC"
source_ref: "source pcsx2/DEV9/flash.cpp:26-33, source pcsx2/DEV9/flash.cpp:43-52, source pcsx2/DEV9/flash.cpp:110-146"
note: >
The 64 Mbit flash behind DEV9, 1024 blocks of 16 pages of 528 bytes.
Path derived from the BIOS path with the extension replaced. A bare
flash.dat in the working directory is read when it is absent, and the
flash is blank (0xFF) when neither exists. Written back only after the
emulated system programs it.
- name: "eeprom.dat"
load_from: working_directory
required: false
hle_fallback: true
size: 64
description: "DEV9 EEPROM"
source_ref: "source pcsx2/DEV9/DEV9.cpp:111-123, source pcsx2/DEV9/DEV9.cpp:159-176"
note: "Opened from the working directory when DEV9 starts and mapped over 64 bytes. A compiled-in image stands in when the file is missing."
- name: "mg_keystore.bin"
path: "pcsx2/bios/mg_keystore.bin"
required: false
size: 1024
description: "Mechacon MagicGate key store, encrypted"
source_ref: "source pcsx2/CDVD/MechaMg.h:33-36, source pcsx2/CDVD/MechaMg.c:266-335, source pcsx2/CDVD/CDVD.c:861-871"
note: >
Read from the directory of the selected BIOS with mg_card_keystore.bin and
mg_keystore_key.bin. With all three at their exact sizes the MagicGate
commands 0x80 to 0x98 run for real: memory card handshake, KELF header
and bit table checks, content decryption. Without them the fixed replies
stand. The retail key set is used, or the arcade one with a COH-H BIOS.
- name: "mg_card_keystore.bin"
path: "pcsx2/bios/mg_card_keystore.bin"
required: false
size: 96
description: "Mechacon MagicGate card key store"
source_ref: "source pcsx2/CDVD/MechaMg.h:33-36, source pcsx2/CDVD/MechaMg.c:301-317"
note: "Second of the three key files, see mg_keystore.bin."
- name: "mg_keystore_key.bin"
path: "pcsx2/bios/mg_keystore_key.bin"
required: false
size: 16
description: "Key of the MagicGate key store"
source_ref: "source pcsx2/CDVD/MechaMg.h:33-36, source pcsx2/CDVD/MechaMg.c:301-317"
note: "Third of the three key files, see mg_keystore.bin."
- name: "mg_kelf07_kbit.bin"
path: "pcsx2/bios/mg_kelf07_kbit.bin"
required: false
size: 16
description: "Arcade MagicGate Kbit for KELF application type 0x07"
source_ref: "source pcsx2/CDVD/MechaMg.h:38-44, source pcsx2/CDVD/MechaMg.c:318-326, source pcsx2/CDVD/MechaMg.c:499-507"
note: >
Read with mg_kelf07_kc.bin, only with a COH-H BIOS and the three key
files loaded. A KELF of application type 0x07 takes its Kbit and Kc from
these two files, and is refused without them.
- name: "mg_kelf07_kc.bin"
path: "pcsx2/bios/mg_kelf07_kc.bin"
required: false
size: 16
description: "Arcade MagicGate Kc for KELF application type 0x07"
source_ref: "source pcsx2/CDVD/MechaMg.h:38-44, source pcsx2/CDVD/MechaMg.c:318-326"
note: "Pair of mg_kelf07_kbit.bin."
- name: "cheats_ws.zip"
path: "pcsx2/resources/cheats_ws.zip"
required: false
description: "widescreen patches archive"
source_ref: "source pcsx2/VMManager.cpp:436-457"
note: >
ZIP archive of per-game widescreen (16:9) patches in pnach format.
Only loaded when widescreen patches are enabled via core options.
Fallback if no patches found in pcsx2/cheats_ws/ folder.
- name: "cheats_ni.zip"
path: "pcsx2/resources/cheats_ni.zip"
required: false
description: "no-interlacing patches archive"
source_ref: "source pcsx2/VMManager.cpp:469-491"
note: >
ZIP archive of per-game no-interlacing patches in pnach format.
Only loaded when no-interlacing patches are enabled via core options.
Fallback if no patches found in pcsx2/cheats_ni/ folder.