From d2f7a9974fe80ad1c0cec6914753f8a1a721134c Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sat, 26 Apr 2014 04:41:01 +0800 Subject: [PATCH] Add sceDisplaySetMode error code base on JPCSP --- Core/HLE/sceDisplay.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Core/HLE/sceDisplay.cpp b/Core/HLE/sceDisplay.cpp index 12c3741e0e..584ad54273 100644 --- a/Core/HLE/sceDisplay.cpp +++ b/Core/HLE/sceDisplay.cpp @@ -101,6 +101,7 @@ static int numVBlanksSinceFlip; static u64 frameStartTicks; const int hCountPerVblank = 286; +const int PSP_DISPLAY_MODE_LCD = 0; std::vector vblankWaitingThreads; // Key is the callback id it was for, or if no callback, the thread id. @@ -637,8 +638,17 @@ u32 sceDisplayIsVblank() { } u32 sceDisplaySetMode(int displayMode, int displayWidth, int displayHeight) { - DEBUG_LOG(SCEDISPLAY,"sceDisplaySetMode(%i, %i, %i)", displayMode, displayWidth, displayHeight); + if (displayWidth <= 0 || displayHeight <= 0 || (displayWidth & 0x7) != 0) { + WARN_LOG(SCEDISPLAY, "sceDisplaySetMode INVALID SIZE (%i, %i, %i)", displayMode, displayWidth, displayHeight); + return SCE_KERNEL_ERROR_INVALID_SIZE; + } + + if (displayMode != PSP_DISPLAY_MODE_LCD) { + WARN_LOG(SCEDISPLAY, "sceDisplaySetMode INVALID MODE(%i, %i, %i)", displayMode, displayWidth, displayHeight); + return SCE_KERNEL_ERROR_INVALID_MODE; + } + DEBUG_LOG(SCEDISPLAY,"sceDisplaySetMode(%i, %i, %i)", displayMode, displayWidth, displayHeight); if (!hasSetMode) { gpu->InitClear(); hasSetMode = true;