mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-01 20:18:15 +01:00
A disc game or memory stick EBOOT started from the XMB used to be swapped in under the XMB's session, so it ran without its PARAM.SFO, compat flags, game config, window title, savestates and so on. Much of that is decided once, at boot (the memory map, the GPU backend, the shader cache), so sceKernelLoadExec now asks the frontend for a reboot into the disc image or EBOOT (PSP_RequestBoot) and stops. The app and headless boot it like a game from the game list. The game keeps the XMB's launch args (CoreParameter::launchedFromVSH), so exiting boots the XMB again, with the disc that's in the drive and those args, and the XMB comes back where it was without auto-starting the disc. Homebrew keeps the disc that was in the drive. A disc whose executables are all zeroes (the EUR Video Demo Disc's "game") still loads in place and fails back to the XMB. In headless, the run carries on through the reboot, starting stopped under the debugger like the first boot, since the reboot loses a pending cpu.runUntilTime. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
54 lines
1.7 KiB
C++
54 lines
1.7 KiB
C++
// Copyright (c) 2012- PPSSPP Project.
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, version 2.0 or later versions.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License 2.0 for more details.
|
|
|
|
// A copy of the GPL 2.0 should have been included with the program.
|
|
// If not, see http://www.gnu.org/licenses/
|
|
|
|
// Official git repository and contact information can be found at
|
|
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
|
|
|
#pragma once
|
|
|
|
#include "Common/File/Path.h"
|
|
class PointerWrap;
|
|
|
|
enum pspUmdState {
|
|
PSP_UMD_INIT = 0x00,
|
|
PSP_UMD_NOT_PRESENT = 0x01,
|
|
PSP_UMD_PRESENT = 0x02,
|
|
PSP_UMD_CHANGED = 0x04,
|
|
PSP_UMD_NOT_READY = 0x08,
|
|
PSP_UMD_READY = 0x10,
|
|
PSP_UMD_READABLE = 0x20,
|
|
};
|
|
|
|
enum pspUmdType {
|
|
PSP_UMD_TYPE_GAME = 0x10,
|
|
PSP_UMD_TYPE_VIDEO = 0x20,
|
|
PSP_UMD_TYPE_AUDIO = 0x40,
|
|
};
|
|
|
|
void __UmdInit();
|
|
void __UmdDoState(PointerWrap &p);
|
|
|
|
void __UmdReplace(const Path &filepath);
|
|
// A drive that can be empty: the XMB's, booted without a game. Insert fails if a disc is in.
|
|
bool __UmdInsert(const Path &filepath, std::string *error);
|
|
void __UmdEject();
|
|
bool __UmdIsInserted();
|
|
// The host path of the disc image in the drive, or empty if there's none.
|
|
Path __UmdGetPath();
|
|
// What's on the disc in the drive (PSP_UMD_TYPE_* bits), or 0 for an empty drive.
|
|
u32 __UmdDiscType();
|
|
bool getUMDReplacePermit();
|
|
|
|
void Register_sceUmdUser();
|