Windows: Separate Pause and Break actions.

It was confusing that "Pause" made PPSSPP appear to hang.

This has the side effect of making "Break on Load" work outside Windows.
This commit is contained in:
Unknown W. Brackets 2018-06-23 10:14:36 -07:00
parent 9f307fd6e9
commit 0d4bd341e9
11 changed files with 39 additions and 32 deletions

View File

@ -56,7 +56,7 @@ struct CoreParameter {
std::string mountRoot; // If non-empty, and fileToStart is an ELF or PBP, mount this as host0: / umd0:.
std::string errorString;
bool startPaused;
bool startBreak;
bool printfEmuLog; // writes "emulator:" logging to stdout
std::string *collectEmuLog;
bool headLess; // Try to avoid messageboxes etc

View File

@ -260,7 +260,7 @@ bool Load_PSP_ISO(FileLoader *fileLoader, std::string *error_string) {
// TODO: We can't use the initial error_string pointer.
bool success = __KernelLoadExec(bootpath.c_str(), 0, &PSP_CoreParameter().errorString);
if (success && coreState == CORE_POWERUP) {
coreState = PSP_CoreParameter().startPaused ? CORE_STEPPING : CORE_RUNNING;
coreState = PSP_CoreParameter().startBreak ? CORE_STEPPING : CORE_RUNNING;
} else {
coreState = CORE_ERROR;
// TODO: This is a crummy way to communicate the error...
@ -375,7 +375,7 @@ bool Load_PSP_ELF_PBP(FileLoader *fileLoader, std::string *error_string) {
std::thread th([finalName] {
bool success = __KernelLoadExec(finalName.c_str(), 0, &PSP_CoreParameter().errorString);
if (success && coreState == CORE_POWERUP) {
coreState = PSP_CoreParameter().startPaused ? CORE_STEPPING : CORE_RUNNING;
coreState = PSP_CoreParameter().startBreak ? CORE_STEPPING : CORE_RUNNING;
} else {
coreState = CORE_ERROR;
// TODO: This is a crummy way to communicate the error...
@ -393,7 +393,7 @@ bool Load_PSP_GE_Dump(FileLoader *fileLoader, std::string *error_string) {
std::thread th([] {
bool success = __KernelLoadGEDump("disc0:/data.ppdmp", &PSP_CoreParameter().errorString);
if (success && coreState == CORE_POWERUP) {
coreState = PSP_CoreParameter().startPaused ? CORE_STEPPING : CORE_RUNNING;
coreState = PSP_CoreParameter().startBreak ? CORE_STEPPING : CORE_RUNNING;
} else {
coreState = CORE_ERROR;
// TODO: This is a crummy way to communicate the error...

View File

@ -224,7 +224,7 @@ void EmuScreen::bootGame(const std::string &filename) {
coreParam.fileToStart = filename;
coreParam.mountIso = "";
coreParam.mountRoot = "";
coreParam.startPaused = false;
coreParam.startBreak = !g_Config.bAutoRun;
coreParam.printfEmuLog = false;
coreParam.headLess = false;

View File

@ -393,10 +393,9 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
CtrlDisAsmView *ptr = CtrlDisAsmView::getFrom(GetDlgItem(m_hDlg,IDC_DISASMVIEW));
CtrlRegisterList *reglist = CtrlRegisterList::getFrom(GetDlgItem(m_hDlg,IDC_REGLIST));
switch(LOWORD(wParam))
{
case ID_TOGGLE_PAUSE:
SendMessage(MainWindow::GetHWND(),WM_COMMAND,ID_TOGGLE_PAUSE,0);
switch (LOWORD(wParam)) {
case ID_TOGGLE_BREAK:
SendMessage(MainWindow::GetHWND(), WM_COMMAND, ID_TOGGLE_BREAK, 0);
break;
case ID_DEBUG_DISPLAYMEMVIEW:

View File

@ -60,10 +60,11 @@ namespace MainWindow {
EnableMenuItem(menu, ID_FILE_LOADSTATEFILE, menuEnable);
EnableMenuItem(menu, ID_FILE_QUICKSAVESTATE, menuEnable);
EnableMenuItem(menu, ID_FILE_QUICKLOADSTATE, menuEnable);
EnableMenuItem(menu, ID_TOGGLE_PAUSE, menuEnable);
EnableMenuItem(menu, ID_EMULATION_PAUSE, menuEnable);
EnableMenuItem(menu, ID_EMULATION_STOP, menuEnable);
EnableMenuItem(menu, ID_EMULATION_RESET, menuEnable);
EnableMenuItem(menu, ID_EMULATION_SWITCH_UMD, umdSwitchEnable);
EnableMenuItem(menu, ID_TOGGLE_BREAK, menuEnable);
EnableMenuItem(menu, ID_DEBUG_LOADMAPFILE, menuEnable);
EnableMenuItem(menu, ID_DEBUG_SAVEMAPFILE, menuEnable);
EnableMenuItem(menu, ID_DEBUG_LOADSYMFILE, menuEnable);
@ -270,7 +271,7 @@ namespace MainWindow {
TranslateMenuItem(menu, ID_FILE_EXIT, L"\tAlt+F4");
// Emulation menu
TranslateMenuItem(menu, ID_TOGGLE_PAUSE, L"\tF8", "Pause");
TranslateMenuItem(menu, ID_EMULATION_PAUSE);
TranslateMenuItem(menu, ID_EMULATION_STOP, L"\tCtrl+W");
TranslateMenuItem(menu, ID_EMULATION_RESET, L"\tCtrl+B");
TranslateMenuItem(menu, ID_EMULATION_SWITCH_UMD, L"\tCtrl+U", "Switch UMD");
@ -281,16 +282,17 @@ namespace MainWindow {
TranslateMenuItem(menu, ID_EMULATION_ROTATION_V_R);
// Debug menu
TranslateMenuItem(menu, ID_TOGGLE_BREAK, L"\tF8", "Break");
TranslateMenuItem(menu, ID_DEBUG_BREAKONLOAD);
TranslateMenuItem(menu, ID_DEBUG_IGNOREILLEGALREADS);
TranslateMenuItem(menu, ID_DEBUG_LOADMAPFILE);
TranslateMenuItem(menu, ID_DEBUG_SAVEMAPFILE);
TranslateMenuItem(menu, ID_DEBUG_LOADSYMFILE);
TranslateMenuItem(menu, ID_DEBUG_SAVESYMFILE);
TranslateMenuItem(menu, ID_DEBUG_RESETSYMBOLTABLE);
TranslateMenuItem(menu, ID_DEBUG_DUMPNEXTFRAME);
TranslateMenuItem(menu, ID_DEBUG_TAKESCREENSHOT, L"\tF12");
TranslateMenuItem(menu, ID_DEBUG_DUMPNEXTFRAME);
TranslateMenuItem(menu, ID_DEBUG_SHOWDEBUGSTATISTICS);
TranslateMenuItem(menu, ID_DEBUG_IGNOREILLEGALREADS);
TranslateMenuItem(menu, ID_DEBUG_RUNONLOAD);
TranslateMenuItem(menu, ID_DEBUG_DISASSEMBLY, L"\tCtrl+D");
TranslateMenuItem(menu, ID_DEBUG_GEDEBUGGER, L"\tCtrl+G");
TranslateMenuItem(menu, ID_DEBUG_EXTRACTFILE);
@ -582,7 +584,7 @@ namespace MainWindow {
ShellExecute(NULL, L"open", ConvertUTF8ToWString(g_Config.memStickDirectory).c_str(), 0, 0, SW_SHOW);
break;
case ID_TOGGLE_PAUSE:
case ID_TOGGLE_BREAK:
if (GetUIState() == UISTATE_PAUSEMENU) {
// Causes hang
//NativeMessageReceived("run", "");
@ -603,6 +605,11 @@ namespace MainWindow {
noFocusPause = !noFocusPause; // If we pause, override pause on lost focus
break;
case ID_EMULATION_PAUSE:
NativeMessageReceived("pause", "");
Core_EnableStepping(false);
break;
case ID_EMULATION_STOP:
if (Core_IsStepping())
Core_EnableStepping(false);
@ -821,7 +828,7 @@ namespace MainWindow {
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
case ID_DEBUG_RUNONLOAD:
case ID_DEBUG_BREAKONLOAD:
g_Config.bAutoRun = !g_Config.bAutoRun;
break;
@ -1055,7 +1062,7 @@ namespace MainWindow {
CHECKITEM(ID_DEBUG_IGNOREILLEGALREADS, g_Config.bIgnoreBadMemAccess);
CHECKITEM(ID_DEBUG_SHOWDEBUGSTATISTICS, g_Config.bShowDebugStats);
CHECKITEM(ID_OPTIONS_HARDWARETRANSFORM, g_Config.bHardwareTransform);
CHECKITEM(ID_DEBUG_RUNONLOAD, g_Config.bAutoRun);
CHECKITEM(ID_DEBUG_BREAKONLOAD, !g_Config.bAutoRun);
CHECKITEM(ID_OPTIONS_VERTEXCACHE, g_Config.bVertexCache);
CHECKITEM(ID_OPTIONS_SHOWFPS, g_Config.iShowFPSCounter);
CHECKITEM(ID_OPTIONS_FRAMESKIP_AUTO, g_Config.bAutoFrameSkip);
@ -1322,7 +1329,7 @@ namespace MainWindow {
lastGlobalUIState = GetUIState();
bool isPaused = Core_IsStepping() && GetUIState() == UISTATE_INGAME;
TranslateMenuItem(menu, ID_TOGGLE_PAUSE, L"\tF8", isPaused ? "Run" : "Pause");
TranslateMenuItem(menu, ID_TOGGLE_BREAK, L"\tF8", isPaused ? "Run" : "Break");
}
// Message handler for about box.

View File

@ -244,7 +244,6 @@ void WindowsHost::BootDone() {
PostMessage(mainWindow_, WM_USER + 1, 0, 0);
SetDebugMode(!g_Config.bAutoRun);
Core_EnableStepping(!g_Config.bAutoRun);
}
static std::string SymbolMapFilename(const char *currentFilename, const char* ext) {

View File

@ -79,7 +79,7 @@ BEGIN
"1", ID_OPTIONS_RESOLUTIONDUMMY, VIRTKEY, CONTROL, NOINVERT
VK_F7, ID_OPTIONS_FRAMESKIPDUMMY, VIRTKEY, NOINVERT
VK_F12, ID_DEBUG_TAKESCREENSHOT, VIRTKEY, NOINVERT
VK_F8, ID_TOGGLE_PAUSE, VIRTKEY, NOINVERT
VK_F8, ID_TOGGLE_BREAK, VIRTKEY, NOINVERT
VK_RETURN, ID_OPTIONS_FULLSCREEN, ALT, VIRTKEY, NOINVERT
VK_F11, ID_OPTIONS_FULLSCREEN, VIRTKEY, NOINVERT
END
@ -94,7 +94,7 @@ BEGIN
"2", ID_DEBUG_DISPLAYBREAKPOINTLIST, VIRTKEY, CONTROL, NOINVERT
"3", ID_DEBUG_DISPLAYTHREADLIST, VIRTKEY, CONTROL, NOINVERT
"4", ID_DEBUG_DISPLAYSTACKFRAMELIST, VIRTKEY, CONTROL, NOINVERT
VK_F7, ID_TOGGLE_PAUSE, VIRTKEY, NOINVERT
VK_F7, ID_TOGGLE_BREAK, VIRTKEY, NOINVERT
VK_F8, ID_DEBUG_STEPOUT, VIRTKEY, NOINVERT
VK_F9, ID_DEBUG_RUNTOLINE, VIRTKEY, NOINVERT
VK_F10, ID_DEBUG_STEPOVER, VIRTKEY, NOINVERT
@ -483,7 +483,7 @@ BEGIN
POPUP "Emulation"
BEGIN
MENUITEM "Run", ID_TOGGLE_PAUSE
MENUITEM "Pause", ID_EMULATION_PAUSE
MENUITEM "Stop", ID_EMULATION_STOP
MENUITEM "Reset", ID_EMULATION_RESET
MENUITEM "Switch UMD", ID_EMULATION_SWITCH_UMD
@ -498,18 +498,19 @@ BEGIN
POPUP "Debug"
BEGIN
MENUITEM "Run", ID_TOGGLE_BREAK
MENUITEM "Break on Load", ID_DEBUG_BREAKONLOAD
MENUITEM "Ignore Illegal Reads/Writes", ID_DEBUG_IGNOREILLEGALREADS
MENUITEM SEPARATOR
MENUITEM "Load Map File...", ID_DEBUG_LOADMAPFILE
MENUITEM "Save Map File...", ID_DEBUG_SAVEMAPFILE
MENUITEM "Load .sym File...", ID_DEBUG_LOADSYMFILE
MENUITEM "Save .sym File...", ID_DEBUG_SAVESYMFILE
MENUITEM "Reset Symbol Table", ID_DEBUG_RESETSYMBOLTABLE
MENUITEM SEPARATOR
MENUITEM "Dump Next Frame to Log", ID_DEBUG_DUMPNEXTFRAME
MENUITEM "Take Screenshot", ID_DEBUG_TAKESCREENSHOT
MENUITEM SEPARATOR
MENUITEM "Dump Next Frame to Log", ID_DEBUG_DUMPNEXTFRAME
MENUITEM "Show Debug Statistics", ID_DEBUG_SHOWDEBUGSTATISTICS
MENUITEM "Ignore Illegal Reads/Writes", ID_DEBUG_IGNOREILLEGALREADS
MENUITEM "Run on Load", ID_DEBUG_RUNONLOAD
MENUITEM SEPARATOR
MENUITEM "Disassembly", ID_DEBUG_DISASSEMBLY
MENUITEM "GE Debugger...", ID_DEBUG_GEDEBUGGER

View File

@ -176,7 +176,7 @@
#define ID_DISASM_COPYINSTRUCTIONDISASM 40006
#define ID_DISASM_COPYINSTRUCTIONHEX 40007
#define ID_EMULATION_SPEEDLIMIT 40008
#define ID_TOGGLE_PAUSE 40009
#define ID_TOGGLE_BREAK 40009
#define ID_EMULATION_STOP 40010
#define ID_FILE_LOAD 40011
#define ID_HELP_ABOUT 40012
@ -205,7 +205,7 @@
#define ID_FILE_QUICKSAVESTATE_HC 40036
#define ID_FILE_QUICKLOADSTATE_HC 40037
#define ID_OPTIONS_CONTROLS 40038
#define ID_DEBUG_RUNONLOAD 40039
#define ID_DEBUG_BREAKONLOAD 40039
#define ID_DEBUG_DUMPNEXTFRAME 40040
#define ID_OPTIONS_VERTEXCACHE 40041
#define ID_OPTIONS_SHOWFPS 40042
@ -339,6 +339,7 @@
#define ID_OPTIONS_WINDOW8X 40174
#define ID_OPTIONS_WINDOW9X 40175
#define ID_OPTIONS_WINDOW10X 40176
#define ID_EMULATION_PAUSE 40177
// Dummy option to let the buffered rendering hotkey cycle through all the options.
#define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500
@ -351,7 +352,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 256
#define _APS_NEXT_COMMAND_VALUE 40177
#define _APS_NEXT_COMMAND_VALUE 40178
#define _APS_NEXT_CONTROL_VALUE 1200
#define _APS_NEXT_SYMED_VALUE 101
#endif

View File

@ -92,7 +92,7 @@ bool RunTests() {
coreParam.graphicsContext = nullptr;
coreParam.mountIso = "";
coreParam.mountRoot = baseDirectory + "pspautotests/";
coreParam.startPaused = false;
coreParam.startBreak = false;
coreParam.printfEmuLog = false;
coreParam.headLess = true;
coreParam.renderWidth = 480;

View File

@ -333,7 +333,7 @@ int main(int argc, const char* argv[])
coreParameter.enableSound = false;
coreParameter.mountIso = mountIso ? mountIso : "";
coreParameter.mountRoot = mountRoot ? mountRoot : "";
coreParameter.startPaused = false;
coreParameter.startBreak = false;
coreParameter.printfEmuLog = !autoCompare;
coreParameter.headLess = true;
coreParameter.renderWidth = 480;

View File

@ -549,7 +549,7 @@ bool retro_load_game(const struct retro_game_info *game) {
coreParam.enableSound = true;
coreParam.fileToStart = std::string(game->path);
coreParam.mountIso = "";
coreParam.startPaused = false;
coreParam.startBreak = false;
coreParam.printfEmuLog = true;
coreParam.headLess = true;
coreParam.unthrottle = true;