From 4017550e4135dae2db64ccc8b13633f9ea081a72 Mon Sep 17 00:00:00 2001 From: The Dax Date: Wed, 12 Jun 2013 04:46:06 -0400 Subject: [PATCH] Implement some missing syscalls and "fix" one, which fixes a Project Diva 2nd hang, and possibly other games that rely on sceUtilityScreenshotGetStatus to return success, since they tend to wait forever for the dialog to finish. I'd like to implement the dialog and functionality someday, but for now, this works fine. Also implement stub for sceRtcSetAlarmTick, though Diva 2nd doesn't care if it's implemented or not. --- Core/HLE/sceRtc.cpp | 9 ++++++++- Core/HLE/sceUtility.cpp | 34 +++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/Core/HLE/sceRtc.cpp b/Core/HLE/sceRtc.cpp index 7092c005e0..65f0942ec2 100644 --- a/Core/HLE/sceRtc.cpp +++ b/Core/HLE/sceRtc.cpp @@ -866,6 +866,13 @@ int sceRtcGetLastAdjustedTime(u32 tickPtr) return 0; } +//Returns 0 on success, according to Project Diva 2nd jpcsptrace log +int sceRtcSetAlarmTick(u32 unknown1, u32 unknown2) +{ + ERROR_LOG(HLE, "UNIMPL sceRtcSetAlarmTick(%x, %x)", unknown1, unknown2); + return 0; +} + const HLEFunction sceRtc[] = { {0xC41C2853, &WrapU_V, "sceRtcGetTickResolution"}, @@ -908,7 +915,7 @@ const HLEFunction sceRtc[] = {0x1909c99b, &WrapI_UU64, "sceRtcSetTime64_t"}, {0x62685E98, &WrapI_U, "sceRtcGetLastAdjustedTime"}, {0x203ceb0d, 0, "sceRtcGetLastReincarnatedTime"}, - {0x7d1fbed3, 0, "sceRtcSetAlarmTick"}, + {0x7d1fbed3, &WrapI_UU, "sceRtcSetAlarmTick"}, {0xf5fcc995, 0, "sceRtc_F5FCC995"}, }; diff --git a/Core/HLE/sceUtility.cpp b/Core/HLE/sceUtility.cpp index e8c7db559b..d242d252fe 100644 --- a/Core/HLE/sceUtility.cpp +++ b/Core/HLE/sceUtility.cpp @@ -377,10 +377,34 @@ int sceUtilityNetconfGetStatus() return netDialog.GetStatus(); } +//TODO: Implement all sceUtilityScreenshot* for real, it doesn't seem to be complex +//but it requires more investigation +u32 sceUtilityScreenshotInitStart(u32 unknown1, u32 unknown2, u32 unknown3, u32 unknown4, u32 unknown5, u32 unknown6) +{ + WARN_LOG(HLE, "UNIMPL %i=sceUtilityScreenshotInitStart(): fake success again", 0); + return 0; +} + +u32 sceUtilityScreenshotShutdownStart() +{ + WARN_LOG(HLE, "UNTESTED sceUtilityScreenshotShutdownStart()"); + return 0; +} + +u32 sceUtilityScreenshotUpdate(u32 unknown) +{ + ERROR_LOG(HLE, "UNIMPL sceUtilityScreenshotUpdate(%d)", unknown); + return 0; +} + +//Fake success, because Diva 2nd(and other games?) hang(s) in an infinite loop +//if you try to take a screenshot without it, due to waiting for success forever int sceUtilityScreenshotGetStatus() { - u32 retval = __UtilityGetStatus(); - ERROR_LOG(HLE, "UNIMPL %i=sceUtilityScreenshotGetStatus()", retval); + //u32 retval = __UtilityGetStatus(); + u32 retval = 0; + + WARN_LOG(HLE, "UNIMPL %i=sceUtilityScreenshotGetStatus(): fake success", retval); return retval; } @@ -561,9 +585,9 @@ const HLEFunction sceUtility[] = {0x2a2b3de0, &WrapU_U, "sceUtilityLoadModule"}, {0xe49bfe92, &WrapU_U, "sceUtilityUnloadModule"}, - {0x0251B134, 0, "sceUtilityScreenshotInitStart"}, - {0xF9E0008C, 0, "sceUtilityScreenshotShutdownStart"}, - {0xAB083EA9, 0, "sceUtilityScreenshotUpdate"}, + {0x0251B134, &WrapU_UUUUUU, "sceUtilityScreenshotInitStart"}, + {0xF9E0008C, &WrapU_V, "sceUtilityScreenshotShutdownStart"}, + {0xAB083EA9, &WrapU_U, "sceUtilityScreenshotUpdate"}, {0xD81957B7, &WrapI_V, "sceUtilityScreenshotGetStatus"}, {0x86A03A27, 0, "sceUtilityScreenshotContStart"},