mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-23 20:29:06 -05:00
chore: merge round 2 fixes (pins)
# Conflicts: # install.ps1 # install.sh
This commit is contained in:
commit
fd1d1b7b96
28 files changed
+525
-176
No files matched your search
@@ -5,6 +5,7 @@ source: "https://github.com/libretro/blastem"
|
||||
upstream: "https://www.retrodev.com/blastem/"
|
||||
profiled_date: "2026-10-20"
|
||||
source_commit: "1e0de94dc7e669c0925a22c0fccf6cdc837af0a0"
|
||||
prose_written_at: "1e0de94dc7e669c0925a22c0fccf6cdc837af0a0"
|
||||
core_version: "1.0.1-pre"
|
||||
display_name: "Sega - Mega Drive - Genesis (BlastEm)"
|
||||
cores:
|
||||
|
||||
@@ -83,13 +83,13 @@ files:
|
||||
system: nintendo-gamecube
|
||||
required: false
|
||||
hle_fallback: true
|
||||
region: [north-america]
|
||||
region: [north-america, latin-america]
|
||||
size: 2097152
|
||||
crc32: ["6dac1f2a", "d5e6feea", "86573808", "667d0b64"]
|
||||
validation: [crc32]
|
||||
on_mismatch: warn
|
||||
description: "GameCube boot ROM, NTSC-U directory"
|
||||
note: "Read whole into a 2 MiB buffer with no size check, then descrambled from 0x100 for 0x1afe00 bytes. The crc32 gate runs when the IPL itself is booted, and the four non-PAL dumps pass here without complaint."
|
||||
note: "Read whole into a 2 MiB buffer with no size check, then descrambled from 0x100 for 0x1afe00 bytes. The crc32 gate runs when the IPL itself is booted, and the four non-PAL dumps pass here without complaint. Discs with the Brazilian country code B map to NTSC-U, so Latin America reads this directory too (Source/Core/DiscIO/Enums.cpp:184-186)."
|
||||
source_ref: "source Source/Core/Core/ConfigManager.cpp:861-868, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:99-112, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.h:43, source Source/Core/Core/Boot/Boot.cpp:296-330"
|
||||
|
||||
- name: IPL.bin
|
||||
|
||||
@@ -119,13 +119,13 @@ files:
|
||||
system: nintendo-gamecube
|
||||
required: false
|
||||
hle_fallback: true
|
||||
region: [north-america]
|
||||
region: [north-america, latin-america]
|
||||
size: 2097152
|
||||
crc32: ["6dac1f2a", "d5e6feea", "86573808", "667d0b64"]
|
||||
validation: [crc32]
|
||||
on_mismatch: warn
|
||||
description: "GameCube boot ROM, NTSC-U directory"
|
||||
note: "Read whole into a 2 MiB buffer with no size check, then descrambled from 0x100 for 0x1afe00 bytes. The crc32 gate runs when the IPL itself is booted and only warns: the four non-PAL dumps, the Brazilian MPAL one included, pass here without complaint."
|
||||
note: "Read whole into a 2 MiB buffer with no size check, then descrambled from 0x100 for 0x1afe00 bytes. The crc32 gate runs when the IPL itself is booted and only warns: the four non-PAL dumps, the Brazilian MPAL one included, pass here without complaint. Discs with the Brazilian country code B and SYSCONF countries of the Americas map to NTSC-U, so Latin America reads this directory too (Source/Core/DiscIO/Enums.cpp:172-173, 223-225)."
|
||||
source_ref: "source Source/Core/Core/Config/MainSettings.cpp:594-600, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:105-113, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.h:43, upstream Source/Core/Core/Boot/Boot.cpp:408-442, source Source/Core/Core/Boot/Boot.cpp:444-449"
|
||||
|
||||
- name: IPL.bin
|
||||
|
||||
@@ -41,11 +41,11 @@ files:
|
||||
path: "dolphin-emu/Sys/GC/USA/IPL.bin"
|
||||
standalone_path: "GC/USA/IPL.bin"
|
||||
system: nintendo-gamecube
|
||||
region: [north-america]
|
||||
region: [north-america, latin-america]
|
||||
size: 2097152
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts"
|
||||
note: "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts. Discs with the Brazilian country code B and SYSCONF countries of the Americas map to NTSC-U, so Latin America reads this directory too (Source/Core/DiscIO/Enums.cpp:198-199, 249-251)."
|
||||
source_ref: "upstream Source/Core/Common/CommonPaths.h:139, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:108"
|
||||
|
||||
- name: "IPL.bin"
|
||||
|
||||
@@ -103,7 +103,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5112, source src/gui/mt32emu.h:5129"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5112, upstream src/gui/mt32emu.h:5129"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v1.05"
|
||||
@@ -112,7 +112,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "e17a3a6d265bf1fa150312061134293d2b58288c"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5113, source src/gui/mt32emu.h:5130"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5113, upstream src/gui/mt32emu.h:5130"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v1.06"
|
||||
@@ -121,7 +121,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "a553481f4e2794c10cfe597fef154eef0d8257de"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5114, source src/gui/mt32emu.h:5131"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5114, upstream src/gui/mt32emu.h:5131"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v1.07"
|
||||
@@ -130,7 +130,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5115, source src/gui/mt32emu.h:5132"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5115, upstream src/gui/mt32emu.h:5132"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control BlueRidge"
|
||||
@@ -139,7 +139,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5116, source src/gui/mt32emu.h:5133"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5116, upstream src/gui/mt32emu.h:5133"
|
||||
|
||||
# -- MT-32 v2.x control ROMs (128 KB, pair with MT32_PCM.ROM) --
|
||||
|
||||
@@ -150,7 +150,7 @@ files:
|
||||
size: 131072
|
||||
sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5118, source src/gui/mt32emu.h:5135"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5118, upstream src/gui/mt32emu.h:5135"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v2.04"
|
||||
@@ -159,7 +159,7 @@ files:
|
||||
size: 131072
|
||||
sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5119, source src/gui/mt32emu.h:5136"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5119, upstream src/gui/mt32emu.h:5136"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v2.06"
|
||||
@@ -168,7 +168,7 @@ files:
|
||||
size: 131072
|
||||
sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5120, source src/gui/mt32emu.h:5137"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5120, upstream src/gui/mt32emu.h:5137"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v2.07"
|
||||
@@ -177,7 +177,7 @@ files:
|
||||
size: 131072
|
||||
sha1: "47b52adefedaec475c925e54340e37673c11707c"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5121, source src/gui/mt32emu.h:5138"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5121, upstream src/gui/mt32emu.h:5138"
|
||||
|
||||
# -- CM-32L / LAPC-I control ROMs (64 KB, pair with CM32L_PCM.ROM) --
|
||||
|
||||
@@ -188,7 +188,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "73683d585cd6948cc19547942ca0e14a0319456d"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5122, source src/gui/mt32emu.h:5139"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5122, upstream src/gui/mt32emu.h:5139"
|
||||
|
||||
- name: "CM32L_CONTROL.ROM"
|
||||
description: "CM-32L/LAPC-I Control v1.02"
|
||||
@@ -197,7 +197,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5123, source src/gui/mt32emu.h:5140"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5123, upstream src/gui/mt32emu.h:5140"
|
||||
|
||||
# -- CM-32LN / CM-500 / LAPC-N control ROM (64 KB, pairs with CM32L_PCM.ROM) --
|
||||
|
||||
@@ -208,7 +208,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5124, source src/gui/mt32emu.h:5141"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5124, upstream src/gui/mt32emu.h:5141"
|
||||
|
||||
# -- PCM ROMs --
|
||||
|
||||
@@ -219,7 +219,7 @@ files:
|
||||
size: 524288
|
||||
sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5126, source src/gui/mt32emu.h:5143"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5126, upstream src/gui/mt32emu.h:5143"
|
||||
note: "accepted by every MT-32 control ROM, v1.x and v2.x (pcmCount 128)"
|
||||
|
||||
- name: "CM32L_PCM.ROM"
|
||||
@@ -230,7 +230,7 @@ files:
|
||||
sha1: "289cc298ad532b702461bfc738009d9ebe8025ea"
|
||||
validation: [sha1, size]
|
||||
aliases: ["CM32LN_PCM.ROM"]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5127, source src/gui/mt32emu.h:5144"
|
||||
source_ref: "upstream src/gui/mt32emu.h:5127, upstream src/gui/mt32emu.h:5144"
|
||||
note: >
|
||||
accepted by the CM-32L and CM-32LN control ROMs (pcmCount 256). The
|
||||
alias covers the name derived from CM32LN_CONTROL.ROM.
|
||||
|
||||
+14
-14
@@ -61,7 +61,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5112, source src/gui/mt32emu.h:5129"
|
||||
source_ref: "source src/gui/mt32emu.h:5112, source src/gui/mt32emu.h:5129"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v1.05"
|
||||
@@ -70,7 +70,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "e17a3a6d265bf1fa150312061134293d2b58288c"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5113, source src/gui/mt32emu.h:5130"
|
||||
source_ref: "source src/gui/mt32emu.h:5113, source src/gui/mt32emu.h:5130"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v1.06"
|
||||
@@ -79,7 +79,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "a553481f4e2794c10cfe597fef154eef0d8257de"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5114, source src/gui/mt32emu.h:5131"
|
||||
source_ref: "source src/gui/mt32emu.h:5114, source src/gui/mt32emu.h:5131"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v1.07"
|
||||
@@ -88,7 +88,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5115, source src/gui/mt32emu.h:5132"
|
||||
source_ref: "source src/gui/mt32emu.h:5115, source src/gui/mt32emu.h:5132"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control BlueRidge"
|
||||
@@ -97,7 +97,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5116, source src/gui/mt32emu.h:5133"
|
||||
source_ref: "source src/gui/mt32emu.h:5116, source src/gui/mt32emu.h:5133"
|
||||
|
||||
# -- MT-32 v2.x Control ROMs (128 KB) --
|
||||
|
||||
@@ -108,7 +108,7 @@ files:
|
||||
size: 131072
|
||||
sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5118, source src/gui/mt32emu.h:5135"
|
||||
source_ref: "source src/gui/mt32emu.h:5118, source src/gui/mt32emu.h:5135"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v2.04"
|
||||
@@ -117,7 +117,7 @@ files:
|
||||
size: 131072
|
||||
sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5119, source src/gui/mt32emu.h:5136"
|
||||
source_ref: "source src/gui/mt32emu.h:5119, source src/gui/mt32emu.h:5136"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v2.06"
|
||||
@@ -126,7 +126,7 @@ files:
|
||||
size: 131072
|
||||
sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5120, source src/gui/mt32emu.h:5137"
|
||||
source_ref: "source src/gui/mt32emu.h:5120, source src/gui/mt32emu.h:5137"
|
||||
|
||||
- name: "MT32_CONTROL.ROM"
|
||||
description: "MT-32 Control v2.07"
|
||||
@@ -135,7 +135,7 @@ files:
|
||||
size: 131072
|
||||
sha1: "47b52adefedaec475c925e54340e37673c11707c"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5121, source src/gui/mt32emu.h:5138"
|
||||
source_ref: "source src/gui/mt32emu.h:5121, source src/gui/mt32emu.h:5138"
|
||||
|
||||
# -- CM-32L / LAPC-I Control ROMs (64 KB) --
|
||||
|
||||
@@ -146,7 +146,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "73683d585cd6948cc19547942ca0e14a0319456d"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5122, source src/gui/mt32emu.h:5139"
|
||||
source_ref: "source src/gui/mt32emu.h:5122, source src/gui/mt32emu.h:5139"
|
||||
|
||||
- name: "CM32L_CONTROL.ROM"
|
||||
description: "CM-32L/LAPC-I Control v1.02"
|
||||
@@ -155,7 +155,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5123, source src/gui/mt32emu.h:5140"
|
||||
source_ref: "source src/gui/mt32emu.h:5123, source src/gui/mt32emu.h:5140"
|
||||
|
||||
# -- CM-32LN / CM-500 / LAPC-N Control ROM (64 KB) --
|
||||
|
||||
@@ -166,7 +166,7 @@ files:
|
||||
size: 65536
|
||||
sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5124, source src/gui/mt32emu.h:5141"
|
||||
source_ref: "source src/gui/mt32emu.h:5124, source src/gui/mt32emu.h:5141"
|
||||
|
||||
# -- PCM ROMs --
|
||||
|
||||
@@ -177,7 +177,7 @@ files:
|
||||
size: 524288
|
||||
sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252"
|
||||
validation: [sha1, size]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5126, source src/gui/mt32emu.h:5143"
|
||||
source_ref: "source src/gui/mt32emu.h:5126, source src/gui/mt32emu.h:5143"
|
||||
note: >
|
||||
accepted by every MT-32 control ROM, v1.x and v2.x. Each control ROM
|
||||
fixes the PCM size it accepts through its pcmCount: 128 requires this
|
||||
@@ -191,7 +191,7 @@ files:
|
||||
sha1: "289cc298ad532b702461bfc738009d9ebe8025ea"
|
||||
validation: [sha1, size]
|
||||
aliases: ["CM32LN_PCM.ROM"]
|
||||
source_ref: "upstream src/gui/mt32emu.h:5127, source src/gui/mt32emu.h:5144"
|
||||
source_ref: "source src/gui/mt32emu.h:5127, source src/gui/mt32emu.h:5144"
|
||||
note: >
|
||||
accepted by the CM-32L and CM-32LN control ROMs, which carry pcmCount
|
||||
256 and require this 1048576 byte image. The alias covers the name
|
||||
|
||||
+197
-82
@@ -1,12 +1,11 @@
|
||||
emulator: Flycast
|
||||
type: standalone + libretro
|
||||
core_classification: official_port
|
||||
source: "https://github.com/libretro/flycast"
|
||||
upstream: "https://github.com/flyinghead/flycast"
|
||||
source: "https://github.com/flyinghead/flycast"
|
||||
logo: "https://raw.githubusercontent.com/flyinghead/flycast/master/shell/linux/flycast.png"
|
||||
profiled_date: "2026-03-23"
|
||||
source_commit: "bde196bfbf541435d0e7d3e3fa91dbd154e7c502"
|
||||
core_version: "0.1"
|
||||
profiled_date: "2026-10-21"
|
||||
source_commit: "34ad8c8262c82db237a8b9cee0d8046d9cdd6f78"
|
||||
core_version: "Git"
|
||||
display_name: "Sega - Dreamcast/Naomi (Flycast)"
|
||||
cores:
|
||||
- flycast
|
||||
@@ -18,43 +17,47 @@ systems:
|
||||
- sega-naomi
|
||||
- sega-naomi2
|
||||
- sega-atomiswave
|
||||
- sega-systemsp
|
||||
|
||||
notes: |
|
||||
Flycast has a built-in HLE BIOS (reios) for Dreamcast that can boot most
|
||||
games without real BIOS files. Arcade systems (NAOMI, Atomiswave) require
|
||||
MAME-format BIOS ROM archives.
|
||||
The libretro core is built from flyinghead/flycast, the same tree as the
|
||||
standalone emulator: the wrapper lives in shell/libretro and is compiled
|
||||
with -DLIBRETRO=ON.
|
||||
|
||||
The libretro port (libretro/flycast, last updated 2025-12-12) is significantly
|
||||
behind upstream (flyinghead/flycast). Key divergences:
|
||||
- NAOMI 2 has no separate BIOS entry or platform detection: NAOMI 2 games
|
||||
run as NAOMI using naomi.zip. Upstream has naomi2.zip with dedicated ROMs.
|
||||
- System SP is not supported. Upstream has segasp.zip support.
|
||||
- The n2_ prefix for NAOMI 2 flat boot ROMs is dead code (DC_PLATFORM_NAOMI2
|
||||
is never assigned to settings.System in the libretro port).
|
||||
- Flash search includes legacy names (%flash_wb.bin, %flash.bin, %flash.bin.bin)
|
||||
that upstream has removed.
|
||||
- NAOMI flat boot ROM search includes epr-21576d.bin fallback not in upstream.
|
||||
Flycast has a built-in HLE BIOS (reios) for Dreamcast that boots most
|
||||
games without a real boot ROM. A short list of product ids forces the
|
||||
real BIOS (core/emulator.cpp:277-278) and is told "This game requires a
|
||||
real BIOS" when it is absent (core/emulator.cpp:616-621). Without content,
|
||||
the core boots the BIOS and fails when none is found
|
||||
(core/emulator.cpp:601-605). Arcade systems (NAOMI, NAOMI 2, Atomiswave,
|
||||
System SP) load MAME-format BIOS archives.
|
||||
|
||||
BIOS file search uses prefix + name pattern. The libretro port appends "dc/"
|
||||
to the system directory (core/libretro/libretro.cpp:1972). All files below are relative
|
||||
to system_dir/dc/.
|
||||
The libretro port appends "dc/" to the system directory
|
||||
(shell/libretro/libretro.cpp:2249-2250). All files below are relative to
|
||||
system_dir/dc/.
|
||||
|
||||
The prefix is determined by platform (core/hw/holly/sb_mem.cpp:32-49):
|
||||
Dreamcast -> dc_
|
||||
Dev Unit -> hkt_
|
||||
NAOMI -> naomi_
|
||||
Atomiswave -> (no prefix, BIOS loaded from awbios.zip)
|
||||
Only the Dreamcast reads flat files. The prefix is dc_ for Dreamcast
|
||||
(core/hw/flashrom/nvmem.cpp:35-50), and the boot ROM is searched as
|
||||
{prefix}boot.bin then {prefix}bios.bin (core/hw/flashrom/nvmem.cpp:304).
|
||||
Flash is {prefix}nvmem.bin and is created when absent
|
||||
(core/hw/flashrom/nvmem.cpp:252-256). Arcade platforms return before the
|
||||
boot ROM search (core/hw/flashrom/nvmem.cpp:300-302), and their flash is a
|
||||
per-game save file. The system font is a resource compiled into the
|
||||
binary (core/reios/reios.cpp:761-764).
|
||||
|
||||
Boot ROM search pattern (core/hw/holly/sb_mem.cpp:51-68):
|
||||
{prefix}boot.bin, {prefix}boot.bin.bin, {prefix}bios.bin, {prefix}bios.bin.bin
|
||||
NAOMI also tries: epr-21576d.bin (core/hw/holly/sb_mem.cpp:59)
|
||||
Flash/NVRAM search pattern (core/hw/holly/sb_mem.cpp:231):
|
||||
{prefix}nvmem.bin, {prefix}flash_wb.bin, {prefix}flash.bin, {prefix}flash.bin.bin
|
||||
Arcade BIOS archives are opened as <name>.zip, then <name>.7z
|
||||
(core/hw/naomi/naomi_cart.cpp:75-78), first in system_dir/dc, then in
|
||||
the content directory (shell/libretro/oslib.cpp:118-130). Each ROM inside
|
||||
is looked up by CRC, then by file name, in the game archive, its parent,
|
||||
then the BIOS archive (core/hw/naomi/naomi_cart.cpp:89-106). The blob of
|
||||
the configured region is mapped first, any region otherwise, and a game
|
||||
whose BIOS cannot be loaded aborts (core/hw/naomi/naomi_cart.cpp:196-207).
|
||||
Games whose bios field is naomi2 run as NAOMI 2 and those whose bios
|
||||
field is segasp as System SP (core/hw/naomi/naomi_cart.cpp:810-821).
|
||||
|
||||
BIOS[] also declares airlbios and naomigd. No entry of Games[] carries
|
||||
either name in its bios field and naomi_LoadBios is only ever called with
|
||||
that field or the literal naomi, so neither archive is opened.
|
||||
ref: core/hw/naomi/naomi_cart.cpp:79,229-240,476-479, core/hw/naomi/naomi_roms.h:79,191
|
||||
BIOS[] also declares naomidev and naomigd. No entry of Games[] carries
|
||||
either name in its bios field, so neither archive is opened. naomi-jp-d
|
||||
and naomi-ko-h read naomi.zip (core/hw/naomi/naomi_roms.cpp:219-242).
|
||||
|
||||
files:
|
||||
# -------------------------------------------------------
|
||||
@@ -62,104 +65,194 @@ files:
|
||||
# -------------------------------------------------------
|
||||
- name: "dc_boot.bin"
|
||||
path: "dc/dc_boot.bin"
|
||||
aliases: ["dc_bios.bin", "dc_boot.bin.bin", "dc_bios.bin.bin"]
|
||||
aliases: ["dc_bios.bin"]
|
||||
system: sega-dreamcast
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 2097152
|
||||
note: "Dreamcast boot ROM. HLE BIOS (reios) used as fallback. Code searches prefix + boot.bin, boot.bin.bin, bios.bin, bios.bin.bin sequentially."
|
||||
source_ref: "upstream core/hw/holly/sb_mem.cpp:219, 55-57"
|
||||
note: "Dreamcast boot ROM. reios is used when it is absent, except for the product ids that force the real BIOS. Searched as dc_boot.bin then dc_bios.bin."
|
||||
source_ref: "core/hw/flashrom/nvmem.cpp:298-316, core/emulator.cpp:613-622"
|
||||
|
||||
- name: "dc_nvmem.bin"
|
||||
path: "dc/dc_nvmem.bin"
|
||||
aliases: ["dc_flash_wb.bin", "dc_flash.bin", "dc_flash.bin.bin"]
|
||||
system: sega-dreamcast
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 131072
|
||||
note: "Dreamcast flash memory / NVRAM. Created if not found. Code searches prefix + nvmem.bin, flash_wb.bin, flash.bin, flash.bin.bin sequentially."
|
||||
source_ref: "upstream core/hw/holly/sb_mem.cpp:231, 196-213"
|
||||
|
||||
- name: "font.bin"
|
||||
path: "dc/font.bin"
|
||||
system: sega-dreamcast
|
||||
required: false
|
||||
note: "Dreamcast system font for HLE BIOS text rendering. Built-in font used as fallback."
|
||||
source_ref: "upstream core/reios/reios.cpp:737-753"
|
||||
note: "Dreamcast flash memory. Created with factory settings when absent, written back on exit."
|
||||
source_ref: "core/hw/flashrom/nvmem.cpp:252-256, core/hw/flashrom/nvmem.cpp:321-322"
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Sega NAOMI
|
||||
# -------------------------------------------------------
|
||||
- name: "naomi_boot.bin"
|
||||
path: "dc/naomi_boot.bin"
|
||||
aliases: ["naomi_bios.bin", "naomi_boot.bin.bin", "naomi_bios.bin.bin", "epr-21576d.bin"]
|
||||
system: sega-naomi
|
||||
required: false
|
||||
size: 2097152
|
||||
note: "NAOMI boot ROM (flat binary). Alternative to naomi.zip. epr-21576d.bin is searched without prefix."
|
||||
source_ref: "upstream core/hw/holly/sb_mem.cpp:219, 58-59"
|
||||
|
||||
- name: "naomi.zip"
|
||||
path: "dc/naomi.zip"
|
||||
system: sega-naomi
|
||||
required: true
|
||||
note: >
|
||||
NAOMI system BIOS archive (MAME format). Contains region-specific
|
||||
BIOS ROMs: epr-21576h.ic27 (Japan), epr-21577h.ic27 (USA),
|
||||
epr-21578h.ic27 (Export), epr-21579d.ic27 (Korea).
|
||||
Also used for NAOMI 2 games in the libretro port (no separate naomi2.zip).
|
||||
source_ref: "source core/hw/naomi/naomi_roms.h:133-188"
|
||||
category: bios_zip
|
||||
note: "NAOMI system BIOS archive. Games with no bios field or with naomi, naomi-jp-d or naomi-ko-h read it and abort without it."
|
||||
source_ref: "core/hw/naomi/naomi_roms.cpp:86-144, core/hw/naomi/naomi_roms.cpp:219-242, core/hw/naomi/naomi_cart.cpp:196-207"
|
||||
contents:
|
||||
- name: "epr-21576h.ic27"
|
||||
description: Japan
|
||||
size: 2097152
|
||||
crc32: "d4895685"
|
||||
- name: "epr-21576g.ic27"
|
||||
description: Japan
|
||||
size: 2097152
|
||||
crc32: "d2a1c6bf"
|
||||
- name: "epr-21578h.ic27"
|
||||
description: Export
|
||||
size: 2097152
|
||||
crc32: "7b452946"
|
||||
- name: "epr-21578g.ic27"
|
||||
description: Export
|
||||
size: 2097152
|
||||
crc32: "55413214"
|
||||
- name: "epr-21577h.ic27"
|
||||
description: USA
|
||||
size: 2097152
|
||||
crc32: "fdf17452"
|
||||
- name: "epr-21577g.ic27"
|
||||
description: USA
|
||||
size: 2097152
|
||||
crc32: "25f64af7"
|
||||
- name: "epr-21579d.ic27"
|
||||
description: Korea
|
||||
size: 2097152
|
||||
crc32: "33513691"
|
||||
- name: "epr-21576h_multi.ic27"
|
||||
description: "Multi-region, the BIOS of naomi-ko-h"
|
||||
size: 2097152
|
||||
crc32: "cce01f1f"
|
||||
- name: "epr-21576d.ic27"
|
||||
description: "Japan, the BIOS of naomi-jp-d"
|
||||
size: 2097152
|
||||
crc32: "3b2afa7b"
|
||||
|
||||
- name: "airlbios.zip"
|
||||
path: "dc/airlbios.zip"
|
||||
system: sega-naomi
|
||||
required: false
|
||||
category: bios_zip
|
||||
note: "Airline Pilots Deluxe BIOS. Required by the two Airline Pilots entries."
|
||||
source_ref: "core/hw/naomi/naomi_roms.cpp:29-37, core/hw/naomi/naomi_roms.cpp:1000, core/hw/naomi/naomi_roms.cpp:1032"
|
||||
contents:
|
||||
- name: "epr-21802.ic27"
|
||||
description: Export
|
||||
size: 2097152
|
||||
crc32: "a77c6b1c"
|
||||
- name: "epr-21801.ic27"
|
||||
description: USA
|
||||
size: 2097152
|
||||
crc32: "a21bef24"
|
||||
|
||||
- name: "f355bios.zip"
|
||||
path: "dc/f355bios.zip"
|
||||
system: sega-naomi
|
||||
required: false
|
||||
note: "Ferrari F355 Challenge BIOS. Japan/USA/Export variants."
|
||||
source_ref: "source core/hw/naomi/naomi_roms.h:96-103"
|
||||
category: bios_zip
|
||||
note: "Ferrari F355 Challenge twin BIOS. Required by the three twin entries."
|
||||
source_ref: "core/hw/naomi/naomi_roms.cpp:49-59, core/hw/naomi/naomi_roms.cpp:1887, core/hw/naomi/naomi_roms.cpp:1926, core/hw/naomi/naomi_roms.cpp:1965"
|
||||
contents:
|
||||
- name: "epr-22851.ic27"
|
||||
description: Export
|
||||
size: 2097152
|
||||
crc32: "62483677"
|
||||
- name: "epr-22850.ic27"
|
||||
description: USA
|
||||
size: 2097152
|
||||
crc32: "28aa539d"
|
||||
- name: "epr-22849.ic27"
|
||||
description: Japan
|
||||
size: 2097152
|
||||
crc32: "121e009c"
|
||||
|
||||
- name: "f355dlx.zip"
|
||||
path: "dc/f355dlx.zip"
|
||||
system: sega-naomi
|
||||
required: false
|
||||
note: "Ferrari F355 Challenge Deluxe BIOS. Japan/USA/Export variants."
|
||||
source_ref: "source core/hw/naomi/naomi_roms.h:105-119"
|
||||
category: bios_zip
|
||||
note: "Ferrari F355 Challenge deluxe BIOS. Required by f355."
|
||||
source_ref: "core/hw/naomi/naomi_roms.cpp:60-74, core/hw/naomi/naomi_roms.cpp:1843"
|
||||
contents:
|
||||
- name: "epr-21864.ic27"
|
||||
description: Export
|
||||
size: 2097152
|
||||
crc32: "12ed7c66"
|
||||
- name: "epr-21863.ic27"
|
||||
description: USA
|
||||
size: 2097152
|
||||
crc32: "0615a4d1"
|
||||
- name: "epr-21862.ic27"
|
||||
description: Japan
|
||||
size: 2097152
|
||||
crc32: "1f630716"
|
||||
|
||||
- name: "hod2bios.zip"
|
||||
path: "dc/hod2bios.zip"
|
||||
system: sega-naomi
|
||||
required: false
|
||||
note: "House of the Dead 2 BIOS. Japan/USA/Export variants."
|
||||
source_ref: "source core/hw/naomi/naomi_roms.h:121-131"
|
||||
category: bios_zip
|
||||
note: "The House of the Dead 2 BIOS. Required by the four hotd2 entries."
|
||||
source_ref: "core/hw/naomi/naomi_roms.cpp:75-85, core/hw/naomi/naomi_roms.cpp:2203, core/hw/naomi/naomi_roms.cpp:2241, core/hw/naomi/naomi_roms.cpp:2279, core/hw/naomi/naomi_roms.cpp:2317"
|
||||
contents:
|
||||
- name: "epr-21331.ic27"
|
||||
description: Export
|
||||
size: 2097152
|
||||
crc32: "065f8500"
|
||||
- name: "epr-21330.ic27"
|
||||
description: USA
|
||||
size: 2097152
|
||||
crc32: "9e3bfa1b"
|
||||
- name: "epr-21329.ic27"
|
||||
description: Japan
|
||||
size: 2097152
|
||||
crc32: "d99e5b9b"
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Sega NAOMI 2
|
||||
# -------------------------------------------------------
|
||||
- name: "naomi2.zip"
|
||||
path: "dc/naomi2.zip"
|
||||
system: sega-naomi2
|
||||
required: true
|
||||
category: bios_zip
|
||||
note: "NAOMI 2 system BIOS archive. Every game whose bios field is naomi2 aborts without it."
|
||||
source_ref: "core/hw/naomi/naomi_roms.cpp:182-202, core/hw/naomi/naomi_cart.cpp:818-819, core/hw/naomi/naomi_cart.cpp:196-207"
|
||||
contents:
|
||||
- name: "epr-23605c.ic27"
|
||||
description: Japan
|
||||
size: 2097152
|
||||
crc32: "297ea6ed"
|
||||
- name: "epr-23605b.ic27"
|
||||
description: Japan
|
||||
size: 2097152
|
||||
crc32: "3a3242d4"
|
||||
- name: "epr-23607c.ic27"
|
||||
description: USA
|
||||
size: 2097152
|
||||
crc32: "750e254b"
|
||||
- name: "epr-23607b.ic27"
|
||||
description: USA
|
||||
size: 2097152
|
||||
crc32: "f308c5e9"
|
||||
- name: "epr-23608c.ic27"
|
||||
description: Export
|
||||
size: 2097152
|
||||
crc32: "6ef1dd8e"
|
||||
- name: "epr-23608b.ic27"
|
||||
description: Export
|
||||
size: 2097152
|
||||
crc32: "a554b1e3"
|
||||
- name: "epr-23609b.ic27"
|
||||
description: Korea
|
||||
size: 2097152
|
||||
crc32: "99e3751f"
|
||||
- name: "epr-23605c_multi.ic27"
|
||||
description: Multi-region
|
||||
size: 2097152
|
||||
crc32: "353fdbcd"
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Sega Atomiswave
|
||||
@@ -168,20 +261,36 @@ files:
|
||||
path: "dc/awbios.zip"
|
||||
system: sega-atomiswave
|
||||
required: true
|
||||
note: "Atomiswave system BIOS archive (MAME format). Contains bios0.ic23 (Sammy, 128 KB)."
|
||||
source_ref: "upstream core/hw/naomi/naomi_roms.h:87-94"
|
||||
category: bios_zip
|
||||
note: "Atomiswave system BIOS archive. The first 64 KB of bios0.ic23 are mapped. Every Atomiswave game aborts without it."
|
||||
source_ref: "core/hw/naomi/naomi_roms.cpp:38-48, core/hw/naomi/naomi_cart.cpp:196-207"
|
||||
contents:
|
||||
- name: "bios0.ic23"
|
||||
size: 131072
|
||||
crc32: "719b2b0b"
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Not supported by libretro port
|
||||
# Sega System SP
|
||||
# -------------------------------------------------------
|
||||
# naomi2.zip: no BIOS[] entry in libretro fork (naomi_roms.h). NAOMI 2 games
|
||||
# use the "naomi" BIOS. naomi_cart_GetSystemType() never returns
|
||||
# DC_PLATFORM_NAOMI2. Upstream has full naomi2.zip support.
|
||||
#
|
||||
# segasp.zip: no System SP support in libretro fork. Upstream has full support.
|
||||
- name: "segasp.zip"
|
||||
path: "dc/segasp.zip"
|
||||
system: sega-systemsp
|
||||
required: true
|
||||
category: bios_zip
|
||||
note: "System SP BIOS archive. The USA and Export regions also load a default motherboard EEPROM from it. Every game whose bios field is segasp aborts without it."
|
||||
source_ref: "core/hw/naomi/naomi_roms.cpp:203-218, core/hw/naomi/naomi_cart.cpp:820-821, core/hw/naomi/naomi_cart.cpp:126-139"
|
||||
contents:
|
||||
- name: "epr-24328a.ic50"
|
||||
size: 2097152
|
||||
crc32: "03ec3805"
|
||||
- name: "mb_eeprom_us.ic54s"
|
||||
description: USA
|
||||
size: 128
|
||||
crc32: "4186d7ab"
|
||||
- name: "mb_eeprom_exp.ic54s"
|
||||
description: Export
|
||||
size: 128
|
||||
crc32: "947ddfad"
|
||||
|
||||
platform_details:
|
||||
dreamcast:
|
||||
@@ -189,26 +298,32 @@ platform_details:
|
||||
flash_size: 131072
|
||||
ram_size: 16777216
|
||||
hle_available: true
|
||||
source_ref: "source core/nullDC.cpp:333-345"
|
||||
source_ref: "core/emulator.cpp:456-462"
|
||||
|
||||
naomi:
|
||||
bios_size: 2097152
|
||||
sram_size: 32768
|
||||
ram_size: 33554432
|
||||
hle_available: false
|
||||
source_ref: "source core/nullDC.cpp:346-354"
|
||||
source_ref: "core/emulator.cpp:463-469"
|
||||
|
||||
naomi2:
|
||||
bios_size: 2097152
|
||||
sram_size: 32768
|
||||
ram_size: 33554432
|
||||
hle_available: false
|
||||
note: "Treated as NAOMI in the libretro port. Separate platform only in upstream."
|
||||
source_ref: "source core/nullDC.cpp:355-363"
|
||||
source_ref: "core/emulator.cpp:470-477"
|
||||
|
||||
atomiswave:
|
||||
bios_size: 131072
|
||||
sram_size: 131072
|
||||
ram_size: 16777216
|
||||
hle_available: false
|
||||
source_ref: "source core/nullDC.cpp:364-375"
|
||||
source_ref: "core/emulator.cpp:478-484"
|
||||
|
||||
systemsp:
|
||||
bios_size: 2097152
|
||||
sram_size: 131072
|
||||
ram_size: 33554432
|
||||
hle_available: false
|
||||
source_ref: "core/emulator.cpp:485-491"
|
||||
@@ -63,9 +63,9 @@ files:
|
||||
# -------------------------------------------------------
|
||||
- name: bios_U.sms
|
||||
system: sega-mastersystem
|
||||
region: [north-america, europe]
|
||||
region: [north-america, latin-america, europe, oceania]
|
||||
required: false
|
||||
note: "Master System (NTSC-U) boot ROM. Snail maze game built in. REGION_USA is the default of sms_cart_region_detect for any export header outside the PAL CRC list, so European cartridges load it too (core/cart_hw/sms_cart.c:831-874)."
|
||||
note: "Master System (NTSC-U) boot ROM. Snail maze game built in. REGION_USA is the default of sms_cart_region_detect for any export header outside the PAL CRC list, so European, Australian and Brazilian cartridges outside that list load it too (core/cart_hw/sms_cart.c:831-874)."
|
||||
source_ref: "source core/loadrom.c:511"
|
||||
|
||||
- name: bios_E.sms
|
||||
|
||||
@@ -68,9 +68,9 @@ files:
|
||||
|
||||
- name: bios_U.sms
|
||||
system: sega-mastersystem
|
||||
region: [north-america, europe]
|
||||
region: [north-america, latin-america, europe, oceania]
|
||||
required: false
|
||||
note: "Master System (NTSC-U) boot ROM, loaded for REGION_USA when the bios option is on."
|
||||
note: "Master System (NTSC-U) boot ROM, loaded for REGION_USA when the bios option is on. REGION_USA is the default of sms_cart_region_detect for any export header outside its CRC list, so European, Australian and Brazilian cartridges outside that list load it too (core/cart_hw/sms_cart.c:865-866)."
|
||||
source_ref: "source core/loadrom.c:510"
|
||||
|
||||
- name: bios_E.sms
|
||||
|
||||
@@ -49,9 +49,9 @@ files:
|
||||
|
||||
- name: bios_U.sms
|
||||
system: sega-mastersystem
|
||||
region: [north-america, europe]
|
||||
region: [north-america, latin-america, europe, oceania]
|
||||
required: false
|
||||
note: "REGION_USA is the default of sms_cart_region_detect for any export header outside the PAL CRC list, so European cartridges load it too (core/cart_hw/sms_cart.c:863-864)."
|
||||
note: "REGION_USA is the default of sms_cart_region_detect for any export header outside the PAL CRC list, so European, Australian and Brazilian cartridges outside that list load it too (core/cart_hw/sms_cart.c:863-864)."
|
||||
source_ref: "source core/loadrom.c:512"
|
||||
|
||||
- name: bios_E.sms
|
||||
|
||||
@@ -37,11 +37,11 @@ files:
|
||||
path: "dolphin-emu/Sys/GC/USA/IPL.bin"
|
||||
standalone_path: "GC/USA/IPL.bin"
|
||||
system: nintendo-gamecube
|
||||
region: [north-america]
|
||||
region: [north-america, latin-america]
|
||||
size: 2097152
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts"
|
||||
note: "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts. Discs with the Brazilian country code B map to NTSC-U, so Latin America reads this directory too (Source/Core/DiscIO/Enums.cpp:162-166)."
|
||||
source_ref: "source Source/Core/Core/ConfigManager.cpp:876-883, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:105"
|
||||
|
||||
- name: "IPL.bin"
|
||||
|
||||
+29
-20
@@ -1,10 +1,9 @@
|
||||
emulator: PPSSPP
|
||||
type: standalone + libretro
|
||||
core_classification: official_port
|
||||
source: "https://github.com/libretro/ppsspp"
|
||||
upstream: "https://github.com/hrydgard/ppsspp"
|
||||
profiled_date: "2026-03-24"
|
||||
source_commit: "7b4ddb426bbe9e287bb7f19b0cfaebb4ea0d41d8"
|
||||
source: "https://github.com/hrydgard/ppsspp"
|
||||
profiled_date: "2026-10-21"
|
||||
source_commit: "58935bbf282ddd446cc490574c2c09b9c8f8b470"
|
||||
core_version: "Git"
|
||||
display_name: "Sony - PlayStation Portable (PPSSPP)"
|
||||
cores:
|
||||
@@ -19,22 +18,32 @@ data_directories:
|
||||
installed_on: [batocera, emudeck, lakka, recalbox, retrobat, retrodeck, retropie]
|
||||
mode: libretro
|
||||
destination: ""
|
||||
source_ref: "libretro/libretro.cpp:537, 546, 549"
|
||||
source_ref: "libretro/libretro.cpp:1216-1225, libretro/libretro.cpp:1271"
|
||||
|
||||
notes: |
|
||||
Full HLE emulator. No Sony firmware or BIOS required.
|
||||
All PSP kernel modules (flash0:/kd/*.prx) are reimplemented in C++.
|
||||
Libretro core loads assets from system/PPSSPP/ via VFS.
|
||||
Assets include replacement PGF fonts (18 files in flash0/font/),
|
||||
The libretro core is built from hrydgard/ppsspp, the tree of the
|
||||
standalone emulator, with its wrapper in libretro/.
|
||||
Libretro core loads assets from system/PPSSPP/ via VFS
|
||||
(libretro/libretro.cpp:1216-1225, 1271) and warns that core system files
|
||||
are missing when compat.ini is absent (libretro/libretro.cpp:1229-1261).
|
||||
Assets include replacement PGF fonts (flash0/font/),
|
||||
game compatibility database (compat.ini), language mapping (langregion.ini),
|
||||
and post-processing shaders (shaders/).
|
||||
flash0/ is read from system/PPSSPP/flash0/ (libretro/libretro.cpp:546).
|
||||
Without its fonts the font library holds no internal font and
|
||||
sceFontOpen returns ERROR_FONT_INVALID_PARAMETER to the game
|
||||
(Core/HLE/sceFont.cpp:805-864, 984-986), so text a game draws with the
|
||||
PSP system fonts is lost. Without ppge_atlas.zim the system dialogs are
|
||||
not drawn (Core/Util/PPGeDraw.cpp:227-230).
|
||||
Libretro fork (2020-03-18) behind upstream.
|
||||
Fonts are read from the game disc, then from flash0:/font of the NAND,
|
||||
then from flash0/font/ in system/PPSSPP/ (Core/HLE/sceFont.cpp:1026-1048).
|
||||
Without any of them the font library holds no internal font and
|
||||
sceFontOpen returns SCE_FONT_ERROR_INVALID_PARAMETER to the game
|
||||
(Core/HLE/sceFont.cpp:1197-1199), so text a game draws with the PSP system
|
||||
fonts is lost. Without ppge_atlas.zim the system dialogs are not drawn
|
||||
(Core/Util/PPGeDraw.cpp:252-255).
|
||||
A real firmware is optional. The NAND is <memstick>/PSP/NAND
|
||||
(Core/Util/PathUtil.cpp:144-145), which the libretro core places under
|
||||
the save directory (libretro/libretro.cpp:1265, 1269). On boot, a game
|
||||
disc carrying a newer firmware updater than the installed one is
|
||||
unpacked into it (Core/System.cpp:575-578). Its flash0:/font,
|
||||
kd/libmp4.prx, kd/mp4msv.prx and kd/mpeg.prx replace the HLE modules
|
||||
when present (Core/HLE/HLE.cpp:408-446).
|
||||
PSP_DEFAULT_FIRMWARE = 660 (Core/ConfigValues.h:40).
|
||||
|
||||
files:
|
||||
@@ -44,8 +53,8 @@ files:
|
||||
path: "PPSSPP/ppge_atlas.zim"
|
||||
description: "PPGe dialog texture atlas for save/load dialogs, on-screen keyboard, system UI"
|
||||
required: false
|
||||
source_ref: "source Core/Util/PPGeDraw.cpp:227-228"
|
||||
note: "PanicAlert if missing. System dialogs render without graphics but core continues running. Batocera, Recalbox, Lakka, RetroPie, RetroBat, EmuDeck and RetroDECK install the assets folder where their core reads it."
|
||||
source_ref: "Core/Util/PPGeDraw.cpp:252-255"
|
||||
note: "Logged as an error if missing. System dialogs render without graphics but core continues running. Batocera, Recalbox, Lakka, RetroPie, RetroBat, EmuDeck and RetroDECK install the assets folder where their core reads it."
|
||||
|
||||
- name: "ppge_atlas.meta"
|
||||
installed_on: [batocera, emudeck, lakka, recalbox, retrobat, retrodeck, retropie]
|
||||
@@ -53,7 +62,7 @@ files:
|
||||
path: "PPSSPP/ppge_atlas.meta"
|
||||
description: "PPGe atlas metadata (glyph positions, UV coords)"
|
||||
required: false
|
||||
source_ref: "source Core/Util/PPGeDraw.cpp:235-237"
|
||||
source_ref: "Core/Util/PPGeDraw.cpp:257-263"
|
||||
note: "Loaded after ppge_atlas.zim. Without it, dialog UI has no glyph layout. Batocera, Recalbox, Lakka, RetroPie, RetroBat, EmuDeck and RetroDECK install the assets folder where their core reads it."
|
||||
|
||||
- name: "ppge_atlas.zim"
|
||||
@@ -64,7 +73,7 @@ files:
|
||||
size: 666530
|
||||
sha1: "30a33f3651f8e1b0967a5dfe6ff714baebcce41a"
|
||||
bundled: true
|
||||
source_ref: "source Core/Util/PPGeDraw.cpp:227-228"
|
||||
source_ref: "Core/Util/PPGeDraw.cpp:252-255"
|
||||
note: "Shipped in assets/ of the PPSSPP 1.20.4 Windows zip, which the standalone reads it from."
|
||||
|
||||
- name: "ppge_atlas.meta"
|
||||
@@ -75,5 +84,5 @@ files:
|
||||
size: 50242
|
||||
sha1: "ab398f667d6fd778859307c105fe16388b8fdf63"
|
||||
bundled: true
|
||||
source_ref: "source Core/Util/PPGeDraw.cpp:235-237"
|
||||
source_ref: "Core/Util/PPGeDraw.cpp:257-263"
|
||||
note: "Shipped in assets/ of the PPSSPP 1.20.4 Windows zip, beside ppge_atlas.zim."
|
||||
@@ -36,11 +36,11 @@ files:
|
||||
- name: "IPL.bin"
|
||||
path: "GC/USA/IPL.bin"
|
||||
system: nintendo-gamecube
|
||||
region: [north-america]
|
||||
region: [north-america, latin-america]
|
||||
size: 2097152
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts"
|
||||
note: "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts. Discs with the Brazilian country code B and SYSCONF countries of the Americas map to NTSC-U, so Latin America reads this directory too (Source/Core/DiscIO/Enums.cpp:198-199, 249-251)."
|
||||
source_ref: "upstream Source/Core/Common/CommonPaths.h:138, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:109-110"
|
||||
|
||||
- name: "IPL.bin"
|
||||
|
||||
+80
-11
@@ -1,18 +1,87 @@
|
||||
emulator: Stella
|
||||
type: alias
|
||||
alias_of: stella2014
|
||||
source: "https://github.com/libretro/stella-libretro"
|
||||
profiled_date: "2026-03-25"
|
||||
core_version: "3.9.3"
|
||||
type: standalone + libretro
|
||||
core_classification: official_port
|
||||
source: "https://github.com/stella-emu/stella"
|
||||
profiled_date: "2026-10-21"
|
||||
source_commit: "2c3d7023e9136f75c789803b44f119d8749dc104"
|
||||
core_version: "8.0_pre"
|
||||
display_name: "Atari - 2600 (Stella)"
|
||||
cores:
|
||||
- stella
|
||||
systems:
|
||||
- atari-2600
|
||||
|
||||
note: |
|
||||
Identical codebase to stella2014-libretro. Both repos share the same HEAD
|
||||
commit and produce a binary reporting library_name "Stella 2014". The
|
||||
stella_libretro.info lists display_version "6.6", and the binary reports
|
||||
3.9.3. See stella2014.yml for firmware requirements
|
||||
and KidVid audio files.
|
||||
notes: |
|
||||
The libretro core is built from stella-emu/stella, the tree of the
|
||||
standalone emulator, with its wrapper in src/os/libretro. The binary
|
||||
reports library_name "Stella" (src/os/libretro/StellaLIBRETRO.hxx:59)
|
||||
and the version of src/common/Version.hxx:35. The stella_libretro.info
|
||||
lists display_version "6.6".
|
||||
|
||||
The Atari 2600 has no BIOS ROM: TIA, RIOT and 6507 CPU are emulated in
|
||||
software. The SuperCharger (Starpath) BIOS is replaced by built-in code
|
||||
(ourDummyROMCode in src/emucore/CartAR.cxx:635).
|
||||
|
||||
The libretro core reads the system directory (src/os/libretro/libretro.cxx:1716-1724)
|
||||
but nothing reads the path it stores. Its base directory is a stella
|
||||
folder under the save directory, or ./ without one
|
||||
(src/os/libretro/OSystemLIBRETRO.hxx:71-79). The standalone base
|
||||
directory is the configuration directory, $XDG_CONFIG_HOME/stella on
|
||||
Linux and the application data folder on Windows
|
||||
(src/os/unix/OSystemUNIX.cxx:79, src/os/windows/OSystemWINDOWS.cxx:32).
|
||||
|
||||
KidVid Voice Module tapes: the tape the game selects and KVSHARED.WAV are
|
||||
looked up in KidVidAudio.zip in the base directory, then loose in the
|
||||
base directory, and both must be present (src/emucore/KidVid.cxx:255-268).
|
||||
The archive holds the same seven files listed below.
|
||||
The libretro build compiles with SOUND_SUPPORT and ZIP_SUPPORT
|
||||
(src/os/libretro/Makefile:599) and plays them (src/os/libretro/SoundLIBRETRO.hxx:127-133).
|
||||
Without them the game runs on a timing-based fallback with a beep
|
||||
(src/emucore/KidVid.cxx:343-348).
|
||||
|
||||
EEPROM save data for AtariVox and SaveKey peripherals is managed as
|
||||
NVRAM, not user-supplied.
|
||||
|
||||
files:
|
||||
- name: KVS1.WAV
|
||||
description: "KidVid Voice Module audio tape 1 (Smurfs Save the Day)"
|
||||
required: false
|
||||
load_from: {libretro: save_dir, standalone: config_dir}
|
||||
category: game_data
|
||||
source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268"
|
||||
- name: KVS2.WAV
|
||||
description: "KidVid Voice Module audio tape 2 (Smurfs Save the Day)"
|
||||
required: false
|
||||
load_from: {libretro: save_dir, standalone: config_dir}
|
||||
category: game_data
|
||||
source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268"
|
||||
- name: KVS3.WAV
|
||||
description: "KidVid Voice Module audio tape 3 (Smurfs Save the Day)"
|
||||
required: false
|
||||
load_from: {libretro: save_dir, standalone: config_dir}
|
||||
category: game_data
|
||||
source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268"
|
||||
- name: KVB1.WAV
|
||||
description: "KidVid Voice Module audio tape 1 (Berenstain Bears)"
|
||||
required: false
|
||||
load_from: {libretro: save_dir, standalone: config_dir}
|
||||
category: game_data
|
||||
source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268"
|
||||
- name: KVB2.WAV
|
||||
description: "KidVid Voice Module audio tape 2 (Berenstain Bears)"
|
||||
required: false
|
||||
load_from: {libretro: save_dir, standalone: config_dir}
|
||||
category: game_data
|
||||
source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268"
|
||||
- name: KVB3.WAV
|
||||
description: "KidVid Voice Module audio tape 3 (Berenstain Bears)"
|
||||
required: false
|
||||
load_from: {libretro: save_dir, standalone: config_dir}
|
||||
category: game_data
|
||||
source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268"
|
||||
- name: KVSHARED.WAV
|
||||
description: "KidVid Voice Module shared audio samples"
|
||||
required: false
|
||||
load_from: {libretro: save_dir, standalone: config_dir}
|
||||
category: game_data
|
||||
source_ref: "src/emucore/KidVid.cxx:255-268, src/emucore/KidVid.cxx:329-331"
|
||||
@@ -9,7 +9,6 @@ core_version: "7.0_pre"
|
||||
display_name: "Atari - 2600 (Stella 2023)"
|
||||
cores:
|
||||
- stella2023
|
||||
- stella
|
||||
systems:
|
||||
- atari_2600
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ files:
|
||||
path: "GC/USA/IPL_TRI.bin"
|
||||
description: "Triforce boot ROM, NTSC-U directory"
|
||||
system: sega-triforce
|
||||
region: [north-america]
|
||||
region: [north-america, latin-america]
|
||||
size: 2097152
|
||||
crc32: "d1883221"
|
||||
validation: [crc32]
|
||||
@@ -199,12 +199,12 @@ files:
|
||||
path: "GC/USA/IPL.bin"
|
||||
description: "GameCube NTSC-U boot ROM"
|
||||
system: nintendo-gamecube
|
||||
region: [north-america]
|
||||
region: [north-america, latin-america]
|
||||
size: 2097152
|
||||
required: false
|
||||
hle_fallback: true
|
||||
source_ref: "source Source/Core/Common/CommonPaths.h:148, source Source/Core/Core/Config/MainSettings.cpp:627-630, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:109-118, 182-183"
|
||||
note: "Needed to boot the GameCube menu and to take the fonts from a real dump."
|
||||
note: "Needed to boot the GameCube menu and to take the fonts from a real dump. Discs with the Brazilian country code B and SYSCONF countries of the Americas map to NTSC-U, so Latin America reads this directory too (Source/Core/DiscIO/Enums.cpp:198-199, 249-251)."
|
||||
|
||||
- name: "IPL.bin"
|
||||
path: "GC/EUR/IPL.bin"
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$defaultInstallUrl = "https://raw.githubusercontent.com/Abdess/retrobios/main/install.py"
|
||||
$defaultInstallSha256 = "e87551e14291c044adef27a2db1c76e268df8653648b557bdd30ea2cd2f80dea"
|
||||
$defaultInstallSha256 = "7edd155bb1f50a71007cd3500d6e41003e969dfa3c09570ba517399e94faa428"
|
||||
$maximumInstallerBytes = 2MB
|
||||
$installerExit = 0
|
||||
$installer = if ($PSScriptRoot) { Join-Path $PSScriptRoot "install.py" } else { $null }
|
||||
|
||||
+24
@@ -138,6 +138,30 @@ REGION_ALIASES: dict[str, str] = {
|
||||
"korea": "south-korea",
|
||||
"auto": WORLD_REGION,
|
||||
"gb": "uk",
|
||||
"ca": "canada",
|
||||
"br": "brazil",
|
||||
"mx": "mexico",
|
||||
"ar": "argentina",
|
||||
"fr": "france",
|
||||
"de": "germany",
|
||||
"it": "italy",
|
||||
"es": "spain",
|
||||
"nl": "netherlands",
|
||||
"pt": "portugal",
|
||||
"gr": "greece",
|
||||
"pl": "poland",
|
||||
"ru": "russia",
|
||||
"se": "sweden",
|
||||
"no": "norway",
|
||||
"dk": "denmark",
|
||||
"fi": "finland",
|
||||
"cn": "china",
|
||||
"tw": "taiwan",
|
||||
"hk": "hong-kong",
|
||||
"sg": "singapore",
|
||||
"in": "india",
|
||||
"au": "australia",
|
||||
"nz": "new-zealand",
|
||||
}
|
||||
AREA_TERRITORIES: dict[str, frozenset] = {
|
||||
"asia-ntsc": frozenset({"taiwan"}),
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ esac
|
||||
TEMP_INSTALLER=""
|
||||
TEMP_DIRECTORY=""
|
||||
DEFAULT_INSTALL_URL="https://raw.githubusercontent.com/Abdess/retrobios/main/install.py"
|
||||
DEFAULT_INSTALL_SHA256="e87551e14291c044adef27a2db1c76e268df8653648b557bdd30ea2cd2f80dea"
|
||||
DEFAULT_INSTALL_SHA256="7edd155bb1f50a71007cd3500d6e41003e969dfa3c09570ba517399e94faa428"
|
||||
MAX_INSTALLER_BYTES=2097152
|
||||
|
||||
cleanup() {
|
||||
|
||||
@@ -537,6 +537,10 @@ def landed_changes(exporter: object, systems: dict) -> LandedChanges:
|
||||
"added", entry, None, None, _added_fields(exporter, entry)
|
||||
))
|
||||
continue
|
||||
if entry.name and exporter.names_anew(entry):
|
||||
records.append(_change(
|
||||
"added", entry, None, None, _added_fields(exporter, entry)
|
||||
))
|
||||
# Asked of the exporter: a format that names each entry's cores
|
||||
# reads every entry of those cores, not only the paired one.
|
||||
if (
|
||||
|
||||
@@ -155,6 +155,13 @@ class BaseExporter(ABC):
|
||||
the render learned from the platform's own file."""
|
||||
return self.writable(fe)
|
||||
|
||||
def names_anew(self, fe: NativeFile) -> bool:
|
||||
"""Whether the render wrote, for the first time, a file the platform
|
||||
layer already declares. Only a format whose unit is not the entry
|
||||
does: a RetroPie help sentence can lack a name the inherited RetroArch
|
||||
list carries."""
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def writable(cls, fe: NativeFile, require: str = "") -> bool:
|
||||
"""Whether this format can carry the entry.
|
||||
|
||||
@@ -400,6 +400,11 @@ class Exporter(BaseExporter):
|
||||
return self.writable(fe)
|
||||
return id(fe) in getattr(self, "_named", set())
|
||||
|
||||
def names_anew(self, fe: NativeFile) -> bool:
|
||||
"""flycast's naomi2.zip is in the RetroArch list RetroPie inherits,
|
||||
yet no flycast help sentence named it: the render adds it there."""
|
||||
return fe.platform is not None and id(fe) in getattr(self, "_named", set())
|
||||
|
||||
def outcome(
|
||||
self,
|
||||
systems: dict[str, NativeSystem],
|
||||
|
||||
+39
-7
@@ -916,6 +916,33 @@ def resolve_by_shift(part: PartResult, shifts: dict[str, int]) -> PartResult:
|
||||
)
|
||||
|
||||
|
||||
def refuse_collapsing_moves(parts: list[PartResult]) -> list[PartResult]:
|
||||
"""Hold back a recale that would land on another part of the same ref.
|
||||
|
||||
Two parts of one source_ref cite two places on purpose. dosbox_pure cited
|
||||
the SHA-1 line of mt32emu.h and the ROMInfo line that ties it to a file
|
||||
name, under two repository words: the second was self-checked alone,
|
||||
found the hash once, and read MOVED onto the first line. Recaling it
|
||||
would drop the ROMInfo citation without a word, so the part goes to
|
||||
review instead.
|
||||
"""
|
||||
cited = {
|
||||
(p.part.path, p.part.start, p.part.last)
|
||||
for p in parts if p.part.start is not None
|
||||
}
|
||||
held = []
|
||||
for part in parts:
|
||||
target = (part.new_path or part.part.path, part.start, part.end or part.start)
|
||||
own = (part.part.path, part.part.start, part.part.last)
|
||||
if part.status in REBASE_STATUSES and target != own and target in cited:
|
||||
part = replace(
|
||||
part, status="AMBIGUOUS", candidates=[part.start],
|
||||
reason="lands on a line another part of this ref already cites",
|
||||
)
|
||||
held.append(part)
|
||||
return held
|
||||
|
||||
|
||||
@dataclass
|
||||
class EntryReport:
|
||||
name: str
|
||||
@@ -1268,14 +1295,19 @@ def reconcile_self_check(
|
||||
against HEAD rather than self-checked is never rewritten.
|
||||
"""
|
||||
eligible = eligible if eligible is not None else [True] * len(parts)
|
||||
anchored_files = {
|
||||
part.part.path
|
||||
for part, ok in zip(parts, eligible)
|
||||
if ok and part.status == "ANCHORED"
|
||||
}
|
||||
# The settled part lies in the tree its anchor was found in: without the
|
||||
# repository, attribution wrote dosbox-pure-unleashed's ROMInfo line
|
||||
# under `source`, a repository that carries no mt32emu.h.
|
||||
anchored_files: dict[str, str | None] = {}
|
||||
for part, ok in zip(parts, eligible):
|
||||
if ok and part.status == "ANCHORED":
|
||||
anchored_files.setdefault(part.part.path, part.repo)
|
||||
kept = ("ANCHORED", "GONE", "EXTERNAL", "BINARY")
|
||||
return [
|
||||
PartResult(part.part, "ANCHORED", None, None, None, [])
|
||||
PartResult(
|
||||
part.part, "ANCHORED", None, None, None, [],
|
||||
repo=anchored_files[part.part.path],
|
||||
)
|
||||
if ok and part.status not in kept and part.part.path in anchored_files
|
||||
else part
|
||||
for part, ok in zip(parts, eligible)
|
||||
@@ -1940,7 +1972,7 @@ def build_report(
|
||||
|
||||
shifts = dominant_shifts([p for _, _, _, parts in staged for p in parts])
|
||||
for entry_name, ref, citation, parts in staged:
|
||||
parts = [resolve_by_shift(p, shifts) for p in parts]
|
||||
parts = refuse_collapsing_moves([resolve_by_shift(p, shifts) for p in parts])
|
||||
status = worst_status([p.status for p in parts])
|
||||
report.entries.append(EntryReport(
|
||||
entry_name, ref, status, parts, citation.kind, citation.field
|
||||
|
||||
+27
-1
@@ -64,7 +64,9 @@ _PARENT: dict[str, str] = {
|
||||
|
||||
REGIONS: frozenset[str] = frozenset({WORLD} | set(REGION_TREE) | set(_PARENT))
|
||||
|
||||
# Accepted on the CLI and for legacy profile values.
|
||||
# Accepted on the CLI and for legacy profile values. Every territory also
|
||||
# answers to its ISO 3166-1 code: `au` alone was unknown, and the closest
|
||||
# spelling offered first was `auto`, which means world.
|
||||
ALIASES: dict[str, str] = {
|
||||
"jp": "japan",
|
||||
"ntsc-j": "japan",
|
||||
@@ -78,6 +80,30 @@ ALIASES: dict[str, str] = {
|
||||
"korea": "south-korea",
|
||||
"auto": WORLD,
|
||||
"gb": "uk",
|
||||
"ca": "canada",
|
||||
"br": "brazil",
|
||||
"mx": "mexico",
|
||||
"ar": "argentina",
|
||||
"fr": "france",
|
||||
"de": "germany",
|
||||
"it": "italy",
|
||||
"es": "spain",
|
||||
"nl": "netherlands",
|
||||
"pt": "portugal",
|
||||
"gr": "greece",
|
||||
"pl": "poland",
|
||||
"ru": "russia",
|
||||
"se": "sweden",
|
||||
"no": "norway",
|
||||
"dk": "denmark",
|
||||
"fi": "finland",
|
||||
"cn": "china",
|
||||
"tw": "taiwan",
|
||||
"hk": "hong-kong",
|
||||
"sg": "singapore",
|
||||
"in": "india",
|
||||
"au": "australia",
|
||||
"nz": "new-zealand",
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3247,15 +3247,16 @@ class TheDatabaseCacheIsWrittenWhole(unittest.TestCase):
|
||||
class KidVidTapesStayWithTheContent(unittest.TestCase):
|
||||
"""Stella opens its KidVid tapes by bare name (stella2014, from the
|
||||
working directory) or from its base directory (stella2023, the content
|
||||
folder): never the system directory. Without load_from every Linux pack
|
||||
put about 68 MB of WAVs at the BIOS root, in two cases."""
|
||||
folder, and stella, a folder under the save directory): never the system
|
||||
directory. Without load_from every Linux pack put about 68 MB of WAVs at
|
||||
the BIOS root, in two cases."""
|
||||
|
||||
def test_no_pack_places_them_in_the_system_directory(self):
|
||||
from scripts.common import load_emulator_profiles
|
||||
from scripts.validation import outside_gap_scope
|
||||
|
||||
profiles = load_emulator_profiles(str(ROOT / "emulators"))
|
||||
for name in ("stella2014", "stella2023"):
|
||||
for name in ("stella", "stella2014", "stella2023"):
|
||||
tapes = [f for f in profiles[name]["files"]
|
||||
if f["name"].lower().endswith(".wav")]
|
||||
with self.subTest(profile=name):
|
||||
|
||||
@@ -4222,6 +4222,15 @@ class TestReconcilePerFile(unittest.TestCase):
|
||||
result = profile_sync.reconcile_self_check([anchored, same, other])
|
||||
self.assertEqual([p.status for p in result], ["ANCHORED", "ANCHORED", "AMBIGUOUS"])
|
||||
|
||||
def test_a_settled_part_keeps_the_repository_of_its_anchor(self):
|
||||
anchored = PartResult(RefPart("mt32emu.h", 5112, 5112, "5112"), "ANCHORED",
|
||||
None, None, None, [], repo="schelling/dosbox-pure")
|
||||
same = PartResult(RefPart("mt32emu.h", 5129, 5129, "5129"), "MOVED",
|
||||
None, 5112, 5112, [5112])
|
||||
result = profile_sync.reconcile_self_check([anchored, same])
|
||||
self.assertEqual(result[1].status, "ANCHORED")
|
||||
self.assertEqual(result[1].repo, "schelling/dosbox-pure")
|
||||
|
||||
def test_a_compared_part_is_never_rewritten(self):
|
||||
anchored = PartResult(RefPart("a.c", 5, 5, "5"), "ANCHORED", None, None, None, [])
|
||||
shifted = PartResult(RefPart("a.c", 9, 9, "9"), "SHIFTED", None, 12, 12, [])
|
||||
@@ -4229,6 +4238,24 @@ class TestReconcilePerFile(unittest.TestCase):
|
||||
self.assertEqual(result[1].status, "SHIFTED")
|
||||
|
||||
|
||||
class TestCollapsingMoves(unittest.TestCase):
|
||||
"""A recale never folds two parts of one ref onto the same line."""
|
||||
|
||||
def test_a_move_onto_a_sibling_part_goes_to_review(self):
|
||||
sha = PartResult(RefPart("mt32emu.h", 5112, 5112, "upstream mt32emu.h:5112", "upstream"),
|
||||
"ANCHORED", None, None, None, [])
|
||||
info = PartResult(RefPart("mt32emu.h", 5129, 5129, "source mt32emu.h:5129", "source"),
|
||||
"MOVED", None, 5112, 5112, [5112])
|
||||
result = profile_sync.refuse_collapsing_moves([sha, info])
|
||||
self.assertEqual([p.status for p in result], ["ANCHORED", "AMBIGUOUS"])
|
||||
|
||||
def test_a_move_to_a_free_line_is_kept(self):
|
||||
first = PartResult(RefPart("a.c", 5, 5, "a.c:5"), "ANCHORED", None, None, None, [])
|
||||
moved = PartResult(RefPart("a.c", 9, 9, "a.c:9"), "MOVED", None, 12, 12, [12])
|
||||
result = profile_sync.refuse_collapsing_moves([first, moved])
|
||||
self.assertEqual(result[1].status, "MOVED")
|
||||
|
||||
|
||||
class TestRealignFlagMatrix(unittest.TestCase):
|
||||
"""--realign-prose applies a flag or refuses it, never swallows it."""
|
||||
|
||||
|
||||
@@ -919,6 +919,17 @@ class RegionalRequestsKeepWhatTheCodeLoads(unittest.TestCase):
|
||||
("bizhawk", ["north-america"], "DSi_Nand_USA.bin"),
|
||||
("bizhawk", ["oceania"], "DSi_Nand_AUS.bin"),
|
||||
("bizhawk", ["china", "japan"], "DSi_Nand_CHN.bin"),
|
||||
("genesis_plus_gx", ["australia", "japan"], "bios_U.sms"),
|
||||
("genesis_plus_gx", ["brazil", "japan"], "bios_U.sms"),
|
||||
("genesis_plus_gx_wide", ["australia", "japan"], "bios_U.sms"),
|
||||
("genesis_plus_gx_expanded", ["brazil", "japan"], "bios_U.sms"),
|
||||
("dolphin", ["brazil", "europe"], "dolphin-emu/Sys/GC/USA/IPL.bin"),
|
||||
("ishiiruka", ["brazil", "europe"], "dolphin-emu/Sys/GC/USA/IPL.bin"),
|
||||
("dolphin-mmjr", ["brazil", "europe"], "GC/USA/IPL.bin"),
|
||||
("dolphin-mmjr2", ["brazil", "europe"], "GC/USA/IPL.bin"),
|
||||
("primehack", ["brazil", "europe"], "GC/USA/IPL.bin"),
|
||||
("triforce", ["brazil", "europe"], "GC/USA/IPL.bin"),
|
||||
("triforce", ["brazil", "europe"], "GC/USA/IPL_TRI.bin"),
|
||||
)
|
||||
|
||||
def test_each_request_keeps_its_file(self):
|
||||
@@ -1044,6 +1055,24 @@ class UnknownRegionSaysWhatToType(unittest.TestCase):
|
||||
self.assertIn("Short forms:", str(caught.exception))
|
||||
|
||||
|
||||
class CountryCodesNameTheirTerritory(unittest.TestCase):
|
||||
"""`au` was unknown while `jp`, `us`, `kr` and `gb` were aliases, and the
|
||||
first spelling offered for it was `auto`, which means world."""
|
||||
|
||||
def test_au_is_australia(self):
|
||||
self.assertEqual(region.parse_requested("au,jp"), ["australia", "japan"])
|
||||
|
||||
def test_every_territory_answers_to_a_two_letter_code(self):
|
||||
areas = set(region.AREA_TERRITORIES)
|
||||
territories = {
|
||||
member for members in region.REGION_TREE.values() for member in members
|
||||
} - areas
|
||||
coded = {
|
||||
target for alias, target in region.ALIASES.items() if len(alias) == 2
|
||||
} | {slug for slug in territories if len(slug) == 2}
|
||||
self.assertEqual(territories - coded, set())
|
||||
|
||||
|
||||
|
||||
class GenesisPlusGxUsBiosServesEurope(unittest.TestCase):
|
||||
"""sms_cart_region_detect returns REGION_USA for any export header
|
||||
|
||||
@@ -76,8 +76,9 @@ fall back to Japan. It does not mean "keep all three": when a US BIOS exists for
|
||||
a system, the European and Japanese ones are dropped.
|
||||
|
||||
Accepted names are territory slugs (`japan`, `north-america`, `europe`,
|
||||
`south-korea`, `taiwan`, `brazil`, `france`...) plus short aliases (`jp`, `us`,
|
||||
`eu`, `kr`) and the signal spellings (`ntsc-j`, `ntsc-u`, `pal`). Territories
|
||||
`south-korea`, `taiwan`, `brazil`, `france`...) plus short aliases (`us`, `eu`,
|
||||
and the ISO 3166 code of each territory: `jp`, `kr`, `au`, `br`, `fr`...) and
|
||||
the signal spellings (`ntsc-j`, `ntsc-u`, `pal`). Territories
|
||||
nest, so `--region europe` keeps a BIOS declared `[france]`, and `--region france`
|
||||
keeps one declared `[europe]`.
|
||||
|
||||
|
||||
Reference in new issue
Block a user