Merge pull request #14494 from unknownbrackets/debugger

Debugger: Expose API to reset game
This commit is contained in:
Henrik Rydgård authored and GitHub committed 2021-05-31 11:44:42 +02:00
commit d5d25d3da5
3 files changed
+36 -1

No files matched your search

@@ -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.
+1
View File
@@ -21,5 +21,6 @@
DebuggerSubscriber *WebSocketGameInit(DebuggerEventHandlerMap &map);
void WebSocketGameReset(DebuggerRequest &req);
void WebSocketGameStatus(DebuggerRequest &req);
void WebSocketVersion(DebuggerRequest &req);
+2 -1
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);