Merge pull request #14494 from unknownbrackets/debugger

Debugger: Expose API to reset game
This commit is contained in:
Henrik Rydgård 2021-05-31 11:44:42 +02:00 committed by GitHub
commit d5d25d3da5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 1 deletions

View file

@ -18,15 +18,48 @@
#include "Core/Debugger/WebSocket/GameSubscriber.h"
#include "Core/Debugger/WebSocket/WebSocketUtils.h"
#include "Core/ELF/ParamSFO.h"
#include "Core/Host.h"
#include "Core/System.h"
DebuggerSubscriber *WebSocketGameInit(DebuggerEventHandlerMap &map) {
map["game.reset"] = &WebSocketGameReset;
map["game.status"] = &WebSocketGameStatus;
map["version"] = &WebSocketVersion;
return nullptr;
}
// Reset emulation (game.reset)
//
// Use this if you need to break on start and do something before the game starts.
//
// Parameters:
// - break: optional boolean, true to break CPU on start. Use cpu.resume afterward.
//
// Response (same event name) with no extra data or error.
void WebSocketGameReset(DebuggerRequest &req) {
if (!PSP_IsInited())
return req.Fail("Game not running");
bool needBreak = false;
if (!req.ParamBool("break", &needBreak, DebuggerParamType::OPTIONAL))
return;
if (needBreak)
PSP_CoreParameter().startBreak = true;
PSP_Shutdown();
std::string resetError;
if (!PSP_Init(PSP_CoreParameter(), &resetError)) {
ERROR_LOG(BOOT, "Error resetting: %s", resetError.c_str());
return req.Fail("Could not reset");
}
host->BootDone();
host->UpdateDisassembly();
req.Respond();
}
// Check game status (game.status)
//
// No parameters.

View file

@ -21,5 +21,6 @@
DebuggerSubscriber *WebSocketGameInit(DebuggerEventHandlerMap &map);
void WebSocketGameReset(DebuggerRequest &req);
void WebSocketGameStatus(DebuggerRequest &req);
void WebSocketVersion(DebuggerRequest &req);

View file

@ -468,7 +468,8 @@ bool PSP_InitUpdate(std::string *error_string) {
}
bool PSP_Init(const CoreParameter &coreParam, std::string *error_string) {
PSP_InitStart(coreParam, error_string);
if (!PSP_InitStart(coreParam, error_string))
return false;
while (!PSP_InitUpdate(error_string))
sleep_ms(10);