POPS: Multi-disc on every firmware from 5.01, by leaving the descrambling to the emulator

With the converted header's key of zeros, the emulator's descrambling of its disc switching strings only
reverses them, so ours go in backwards and its code is left alone. The tables are found by the code that
indexes them, which is the same from 3.95 on with only the registers differing.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Henrik RydgårdandClaude Opus 5.5 committed 2026-10-23 19:36:02 +02:00
1 parent 966aab50ec
commit 31fd8e8a1c
4 files changed
+23 -46

No files matched your search

+1 -14
View File
@@ -672,23 +672,10 @@ bool Load_PSP_POPS(FileLoader *fileLoader, std::string *error_string) {
return false;
}
// Several discs from a playlist need the disc switching text PopsBoot puts in the emulator, which it
// only finds in 6.20 and later.
const PS1EbootFileLoader *discImage = dynamic_cast<PS1EbootFileLoader *>(fileLoader);
if (discImage && discImage->NumDiscs() > 1) {
InstalledFirmwareInfo info;
ReadInstalledFirmwareInfo(g_Config.nandRootDirectory, &info, false);
if (FirmwareVersionToInt(info.version) < 620) {
auto po = GetI18NCategory(I18NCat::POPS);
*error_string = po->T("PS1MultiDiscFirmware", "So far, PS1 games of several discs only run with firmware 6.20 or later. Install one of those from an official PSP update file in Settings > Tools > PSP Firmware.");
return false;
}
}
// Its directory as host0:, as for a homebrew EBOOT. An EBOOT made from a disc image is the only file there.
const Path fullPath = fileLoader->GetPath();
std::string gamePath;
if (discImage) {
if (dynamic_cast<PS1EbootFileLoader *>(fileLoader)) {
pspFileSystem.Mount("host0:", std::make_shared<BlobFileSystem>(&pspFileSystem, fileLoader, "EBOOT.PBP"));
gamePath = "host0:/EBOOT.PBP";
} else {