From 062d8d82395b2377badc10e6bc9d2f2ee96c7fab Mon Sep 17 00:00:00 2001 From: igor725 Date: Wed, 10 Apr 2024 14:33:33 +0300 Subject: [PATCH 1/3] Stub sceRazorIsLoaded --- modules/libSceGraphicsDriver/entry.cpp | 4 ++++ testRunner/main.js | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/modules/libSceGraphicsDriver/entry.cpp b/modules/libSceGraphicsDriver/entry.cpp index aa080227..10681a0b 100644 --- a/modules/libSceGraphicsDriver/entry.cpp +++ b/modules/libSceGraphicsDriver/entry.cpp @@ -413,6 +413,10 @@ bool SYSV_ABI sceGnmIsUserPaEnabled() { return false; } +bool SYSV_ABI sceRazorIsLoaded() { + return false; +} + void* SYSV_ABI sceGnmGetTheTessellationFactorRingBufferBaseAddress() { LOG_USE_MODULE(libSceGraphicsDriver); LOG_TRACE(L"%S", __FUNCTION__); diff --git a/testRunner/main.js b/testRunner/main.js index a52df68f..6d07bb4e 100644 --- a/testRunner/main.js +++ b/testRunner/main.js @@ -36,6 +36,11 @@ fs.readdir(testsDir, (err, files) => { Promise.all(procs).then((values) => { values.forEach((ret) => { fs.readFile(ret[0], 'utf-8', (err, data) => { + if (err !== null) { + console.error('Failed to open %s: %s', ret[0], err); + return; + } + const jdata = JSON.parse(data); md_fd.write(`## ${jdata.name} (${jdata.time})\n`); md_fd.write('| Test class | ✅ Passed | ❌ Failed | ⏭️Skipped | ⏳Time |\n'); From 530de3e9a003c420fc43ef5981448e0592724ad1 Mon Sep 17 00:00:00 2001 From: igor725 Date: Wed, 10 Apr 2024 15:14:41 +0300 Subject: [PATCH 2/3] Implement sceKernelGettimezone --- core/timer/timer.cpp | 20 +++++++++++++++++++- core/timer/timer.h | 8 +++++++- modules/libkernel/entry.cpp | 4 ++++ modules_include/common.h | 5 +++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/core/timer/timer.cpp b/core/timer/timer.cpp index 9f6c94c4..feb05f21 100644 --- a/core/timer/timer.cpp +++ b/core/timer/timer.cpp @@ -75,6 +75,7 @@ class Timer: public ITimer { int getTime(SceKernelClockid id, SceKernelTimespec* tp) final; int getTimeRes(SceKernelClockid id, SceKernelTimespec* tp) final; int getTimeofDay(SceKernelTimeval* tp) final; + int getTimeZone(SceKernelTimezone* tz) final; }; ITimer& accessTimer() { @@ -160,4 +161,21 @@ int Timer::getTimeofDay(SceKernelTimeval* tp) { uint64_t const t = time_point_cast(system_clock::now()).time_since_epoch().count(); micro2timeval(tp, t); return Ok; -} \ No newline at end of file +} + +int Timer::getTimeZone(SceKernelTimezone* tz) { + if (tz == nullptr) return getErr(ErrCode::_EINVAL); + static bool isTZSet = false; + + if (!isTZSet) { + _tzset(); + isTZSet = true; + } + + long tz_secswest; + if (auto err = _get_timezone(&tz_secswest)) return getErr((ErrCode)err); + if (auto err = _get_daylight(&tz->tz_dsttime)) return getErr((ErrCode)err); + tz->tz_minuteswest = int(tz_secswest / 60); + + return Ok; +} diff --git a/core/timer/timer.h b/core/timer/timer.h index 7eab6100..51852c88 100644 --- a/core/timer/timer.h +++ b/core/timer/timer.h @@ -95,6 +95,12 @@ class ITimer { * @return int getErr() */ virtual int getTimeofDay(SceKernelTimeval* tp) = 0; + + /** + * @brief Get the time zone info + * + */ + virtual int getTimeZone(SceKernelTimezone* tz) = 0; }; #if defined(__APICALL_EXTERN) @@ -105,4 +111,4 @@ class ITimer { #define __APICALL #endif __APICALL ITimer& accessTimer(); -#undef __APICALL \ No newline at end of file +#undef __APICALL diff --git a/modules/libkernel/entry.cpp b/modules/libkernel/entry.cpp index ffb73f1d..a6b520b3 100644 --- a/modules/libkernel/entry.cpp +++ b/modules/libkernel/entry.cpp @@ -167,6 +167,10 @@ EXPORT SYSV_ABI int sceKernelGettimeofday(SceKernelTimeval* tp) { return accessTimer().getTimeofDay(tp); } +EXPORT SYSV_ABI int sceKernelGettimezone(SceKernelTimezone* tz) { + return accessTimer().getTimeZone(tz); +} + EXPORT SYSV_ABI int __NID(clock_getres)(SceKernelClockid clockId, SceKernelTimespec* tp) { return accessTimer().getTimeRes(clockId, tp); } diff --git a/modules_include/common.h b/modules_include/common.h index 567d4956..7c2c47fd 100644 --- a/modules_include/common.h +++ b/modules_include/common.h @@ -18,6 +18,11 @@ struct timespec64 { typedef struct timeval64 SceKernelTimeval; typedef struct timespec64 SceKernelTimespec; +struct SceKernelTimezone { + int tz_minuteswest; + int tz_dsttime; +}; + struct SceRtcTick { uint64_t tick; }; From 2875b5af2319f6c8d2199e91bd273bd9d21228b8 Mon Sep 17 00:00:00 2001 From: igor725 Date: Wed, 10 Apr 2024 15:22:17 +0300 Subject: [PATCH 3/3] Whoops --- core/timer/timer.cpp | 2 +- core/timer/timer.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/timer/timer.cpp b/core/timer/timer.cpp index feb05f21..e72b1fab 100644 --- a/core/timer/timer.cpp +++ b/core/timer/timer.cpp @@ -171,7 +171,7 @@ int Timer::getTimeZone(SceKernelTimezone* tz) { _tzset(); isTZSet = true; } - + long tz_secswest; if (auto err = _get_timezone(&tz_secswest)) return getErr((ErrCode)err); if (auto err = _get_daylight(&tz->tz_dsttime)) return getErr((ErrCode)err); diff --git a/core/timer/timer.h b/core/timer/timer.h index 51852c88..3c59a4bd 100644 --- a/core/timer/timer.h +++ b/core/timer/timer.h @@ -98,7 +98,7 @@ class ITimer { /** * @brief Get the time zone info - * + * */ virtual int getTimeZone(SceKernelTimezone* tz) = 0; };