From a1efcd9832ae4caa149e501c739fd9d177342a4c Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sat, 8 Jun 2024 22:41:25 +0300 Subject: [PATCH 1/5] added rtc and disc_map modules --- CMakeLists.txt | 5 + src/common/logging/filter.cpp | 2 + src/common/logging/types.h | 2 + src/core/libraries/disc_map/disc_map.cpp | 48 +++ src/core/libraries/disc_map/disc_map.h | 20 ++ src/core/libraries/disc_map/disc_map_codes.h | 10 + src/core/libraries/libs.cpp | 4 + src/core/libraries/rtc/rtc.cpp | 303 +++++++++++++++++++ src/core/libraries/rtc/rtc.h | 67 ++++ 9 files changed, 461 insertions(+) create mode 100644 src/core/libraries/disc_map/disc_map.cpp create mode 100644 src/core/libraries/disc_map/disc_map.h create mode 100644 src/core/libraries/disc_map/disc_map_codes.h create mode 100644 src/core/libraries/rtc/rtc.cpp create mode 100644 src/core/libraries/rtc/rtc.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 17ca8ec0..d706359c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,6 +154,11 @@ set(SYSTEM_LIBS src/core/libraries/system/commondialog.cpp src/core/libraries/system/userservice.h src/core/libraries/app_content/app_content.cpp src/core/libraries/app_content/app_content.h + src/core/libraries/rtc/rtc.cpp + src/core/libraries/rtc/rtc.h + src/core/libraries/disc_map/disc_map.cpp + src/core/libraries/disc_map/disc_map.h + src/core/libraries/disc_map/disc_map_codes.h ) set(VIDEOOUT_LIB src/core/libraries/videoout/buffer.h diff --git a/src/common/logging/filter.cpp b/src/common/logging/filter.cpp index e6e79def..1e49561c 100644 --- a/src/common/logging/filter.cpp +++ b/src/common/logging/filter.cpp @@ -102,6 +102,8 @@ bool ParseFilterRule(Filter& instance, Iterator begin, Iterator end) { SUB(Lib, Screenshot) \ SUB(Lib, LibCInternal) \ SUB(Lib, AppContent) \ + SUB(Lib, Rtc) \ + SUB(Lib, DiscMap) \ CLS(Frontend) \ CLS(Render) \ SUB(Render, Vulkan) \ diff --git a/src/common/logging/types.h b/src/common/logging/types.h index 2defd7be..af52df88 100644 --- a/src/common/logging/types.h +++ b/src/common/logging/types.h @@ -69,6 +69,8 @@ enum class Class : u8 { Lib_Screenshot, ///< The LibSceScreenshot implementation Lib_LibCInternal, ///< The LibCInternal implementation. Lib_AppContent, ///< The LibSceAppContent implementation. + Lib_Rtc, ///< The LibSceRtc implementation. + Lib_DiscMap, ///< The LibSceDiscMap implementation. Frontend, ///< Emulator UI Render, ///< Video Core Render_Vulkan, ///< Vulkan backend diff --git a/src/core/libraries/disc_map/disc_map.cpp b/src/core/libraries/disc_map/disc_map.cpp new file mode 100644 index 00000000..7fd5ed3c --- /dev/null +++ b/src/core/libraries/disc_map/disc_map.cpp @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +// Generated By moduleGenerator +#include "common/logging/log.h" +#include "core/libraries/error_codes.h" +#include "core/libraries/libs.h" +#include "disc_map.h" +#include "disc_map_codes.h" + +namespace Libraries::DiscMap { + +int PS4_SYSV_ABI sceDiscMapGetPackageSize() { + LOG_WARNING(Lib_DiscMap, "(DUMMY) called"); + return ORBIS_DISC_MAP_ERROR_NO_BITMAP_INFO; +} + +int PS4_SYSV_ABI sceDiscMapIsRequestOnHDD() { + LOG_WARNING(Lib_DiscMap, "(DUMMY) called"); + return ORBIS_DISC_MAP_ERROR_NO_BITMAP_INFO; +} + +int PS4_SYSV_ABI Func_7C980FFB0AA27E7A() { + LOG_ERROR(Lib_DiscMap, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_8A828CAEE7EDD5E9() { + LOG_ERROR(Lib_DiscMap, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI Func_E7EBCE96E92F91F8() { + LOG_ERROR(Lib_DiscMap, "(STUBBED) called"); + return ORBIS_OK; +} + +void RegisterlibSceDiscMap(Core::Loader::SymbolsResolver* sym) { + LIB_FUNCTION("fl1eoDnwQ4s", "libSceDiscMap", 1, "libSceDiscMap", 1, 1, + sceDiscMapGetPackageSize); + LIB_FUNCTION("lbQKqsERhtE", "libSceDiscMap", 1, "libSceDiscMap", 1, 1, + sceDiscMapIsRequestOnHDD); + LIB_FUNCTION("fJgP+wqifno", "libSceDiscMap", 1, "libSceDiscMap", 1, 1, Func_7C980FFB0AA27E7A); + LIB_FUNCTION("ioKMruft1ek", "libSceDiscMap", 1, "libSceDiscMap", 1, 1, Func_8A828CAEE7EDD5E9); + LIB_FUNCTION("5+vOlukvkfg", "libSceDiscMap", 1, "libSceDiscMap", 1, 1, Func_E7EBCE96E92F91F8); +}; + +} // namespace Libraries::DiscMap \ No newline at end of file diff --git a/src/core/libraries/disc_map/disc_map.h b/src/core/libraries/disc_map/disc_map.h new file mode 100644 index 00000000..08abee63 --- /dev/null +++ b/src/core/libraries/disc_map/disc_map.h @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/types.h" + +namespace Core::Loader { +class SymbolsResolver; +} +namespace Libraries::DiscMap { + +int PS4_SYSV_ABI sceDiscMapGetPackageSize(); +int PS4_SYSV_ABI sceDiscMapIsRequestOnHDD(); +int PS4_SYSV_ABI Func_7C980FFB0AA27E7A(); +int PS4_SYSV_ABI Func_8A828CAEE7EDD5E9(); +int PS4_SYSV_ABI Func_E7EBCE96E92F91F8(); + +void RegisterlibSceDiscMap(Core::Loader::SymbolsResolver* sym); +} // namespace Libraries::DiscMap \ No newline at end of file diff --git a/src/core/libraries/disc_map/disc_map_codes.h b/src/core/libraries/disc_map/disc_map_codes.h new file mode 100644 index 00000000..841f0a9a --- /dev/null +++ b/src/core/libraries/disc_map/disc_map_codes.h @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +constexpr int ORBIS_DISC_MAP_ERROR_INVALID_ARGUMENT = 0x81100001; +constexpr int ORBIS_DISC_MAP_ERROR_LOCATION_NOT_MAPPED = 0x81100002; +constexpr int ORBIS_DISC_MAP_ERROR_FILE_NOT_FOUND = 0x81100003; +constexpr int ORBIS_DISC_MAP_ERROR_NO_BITMAP_INFO = 0x81100004; +constexpr int ORBIS_DISC_MAP_ERROR_FATAL = 0x811000FF; diff --git a/src/core/libraries/libs.cpp b/src/core/libraries/libs.cpp index 4675fd60..97de991a 100644 --- a/src/core/libraries/libs.cpp +++ b/src/core/libraries/libs.cpp @@ -5,6 +5,7 @@ #include "core/libraries/app_content/app_content.h" #include "core/libraries/audio/audioin.h" #include "core/libraries/audio/audioout.h" +#include "core/libraries/disc_map/disc_map.h" #include "core/libraries/gnmdriver/gnmdriver.h" #include "core/libraries/kernel/libkernel.h" #include "core/libraries/libc/libc.h" @@ -18,6 +19,7 @@ #include "core/libraries/np_score/np_score.h" #include "core/libraries/np_trophy/np_trophy.h" #include "core/libraries/pad/pad.h" +#include "core/libraries/rtc/rtc.h" #include "core/libraries/save_data/savedata.h" #include "core/libraries/screenshot/screenshot.h" #include "core/libraries/system/commondialog.h" @@ -61,6 +63,8 @@ void InitHLELibs(Core::Loader::SymbolsResolver* sym) { Libraries::ScreenShot::RegisterlibSceScreenShot(sym); Libraries::LibcInternal::RegisterlibSceLibcInternal(sym); Libraries::AppContent::RegisterlibSceAppContent(sym); + Libraries::Rtc::RegisterlibSceRtc(sym); + Libraries::DiscMap::RegisterlibSceDiscMap(sym); } } // namespace Libraries diff --git a/src/core/libraries/rtc/rtc.cpp b/src/core/libraries/rtc/rtc.cpp new file mode 100644 index 00000000..6bf6a91b --- /dev/null +++ b/src/core/libraries/rtc/rtc.cpp @@ -0,0 +1,303 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +// Generated By moduleGenerator +#include +#include "common/logging/log.h" +#include "core/libraries/error_codes.h" +#include "core/libraries/libs.h" +#include "rtc.h" + +namespace Libraries::Rtc { + +int PS4_SYSV_ABI sceRtcCheckValid() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcCompareTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcConvertLocalTimeToUtc() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcConvertUtcToLocalTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcEnd() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcFormatRFC2822() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcFormatRFC2822LocalTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcFormatRFC3339() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcFormatRFC3339LocalTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcFormatRFC3339Precise() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcFormatRFC3339PreciseLocalTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetCurrentAdNetworkTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetCurrentClock() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetCurrentClockLocalTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetCurrentDebugNetworkTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetCurrentNetworkTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetCurrentRawNetworkTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetCurrentTick(OrbisRtcTick* pTick) { + pTick->tick = std::chrono::duration_cast( + std::chrono::high_resolution_clock::now().time_since_epoch()) + .count(); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetDayOfWeek() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetDaysInMonth() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetDosTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetTickResolution() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetTime_t() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcGetWin32FileTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcInit() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcIsLeapYear() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcParseDateTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcParseRFC3339() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetConf() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetCurrentAdNetworkTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetCurrentDebugNetworkTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetCurrentNetworkTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetCurrentTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetDosTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetTick() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetTime_t() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcSetWin32FileTime() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddDays() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddHours() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddMicroseconds() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddMinutes() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddMonths() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddSeconds() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddTicks() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddWeeks() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceRtcTickAddYears() { + LOG_ERROR(Lib_Rtc, "(STUBBED) called"); + return ORBIS_OK; +} + +void RegisterlibSceRtc(Core::Loader::SymbolsResolver* sym) { + LIB_FUNCTION("lPEBYdVX0XQ", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcCheckValid); + LIB_FUNCTION("fNaZ4DbzHAE", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcCompareTick); + LIB_FUNCTION("8Yr143yEnRo", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcConvertLocalTimeToUtc); + LIB_FUNCTION("M1TvFst-jrM", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcConvertUtcToLocalTime); + LIB_FUNCTION("8SljQx6pDP8", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcEnd); + LIB_FUNCTION("eiuobaF-hK4", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcFormatRFC2822); + LIB_FUNCTION("AxHBk3eat04", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcFormatRFC2822LocalTime); + LIB_FUNCTION("WJ3rqFwymew", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcFormatRFC3339); + LIB_FUNCTION("DwuHIlLGW8I", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcFormatRFC3339LocalTime); + LIB_FUNCTION("lja0nNPWojg", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcFormatRFC3339Precise); + LIB_FUNCTION("tOZ6fwwHZOA", "libSceRtc", 1, "libSceRtc", 1, 1, + sceRtcFormatRFC3339PreciseLocalTime); + LIB_FUNCTION("LN3Zcb72Q0c", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetCurrentAdNetworkTick); + LIB_FUNCTION("8lfvnRMqwEM", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetCurrentClock); + LIB_FUNCTION("ZPD1YOKI+Kw", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetCurrentClockLocalTime); + LIB_FUNCTION("Ot1DE3gif84", "libSceRtc", 1, "libSceRtc", 1, 1, + sceRtcGetCurrentDebugNetworkTick); + LIB_FUNCTION("zO9UL3qIINQ", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetCurrentNetworkTick); + LIB_FUNCTION("HWxHOdbM-Pg", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetCurrentRawNetworkTick); + LIB_FUNCTION("18B2NS1y9UU", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetCurrentTick); + LIB_FUNCTION("CyIK-i4XdgQ", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetDayOfWeek); + LIB_FUNCTION("3O7Ln8AqJ1o", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetDaysInMonth); + LIB_FUNCTION("E7AR4o7Ny7E", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetDosTime); + LIB_FUNCTION("8w-H19ip48I", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetTick); + LIB_FUNCTION("jMNwqYr4R-k", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetTickResolution); + LIB_FUNCTION("BtqmpTRXHgk", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetTime_t); + LIB_FUNCTION("jfRO0uTjtzA", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcGetWin32FileTime); + LIB_FUNCTION("LlodCMDbk3o", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcInit); + LIB_FUNCTION("Ug8pCwQvh0c", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcIsLeapYear); + LIB_FUNCTION("NxEI1KByvCI", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcParseDateTime); + LIB_FUNCTION("99bMGglFW3I", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcParseRFC3339); + LIB_FUNCTION("fFLgmNUpChg", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcSetConf); + LIB_FUNCTION("sV2tK+yOhBU", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcSetCurrentAdNetworkTick); + LIB_FUNCTION("VLDUPKmw5L8", "libSceRtc", 1, "libSceRtc", 1, 1, + sceRtcSetCurrentDebugNetworkTick); + LIB_FUNCTION("qhDBtIo+auw", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcSetCurrentNetworkTick); + LIB_FUNCTION("d4fHLCGmY80", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcSetCurrentTick); + LIB_FUNCTION("aYPCd1cChyg", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcSetDosTime); + LIB_FUNCTION("ueega6v3GUw", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcSetTick); + LIB_FUNCTION("bDEVVP4bTjQ", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcSetTime_t); + LIB_FUNCTION("n5JiAJXsbcs", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcSetWin32FileTime); + LIB_FUNCTION("NR1J0N7L2xY", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddDays); + LIB_FUNCTION("MDc5cd8HfCA", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddHours); + LIB_FUNCTION("XPIiw58C+GM", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddMicroseconds); + LIB_FUNCTION("mn-tf4QiFzk", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddMinutes); + LIB_FUNCTION("CL6y9q-XbuQ", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddMonths); + LIB_FUNCTION("07O525HgICs", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddSeconds); + LIB_FUNCTION("AqVMssr52Rc", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddTicks); + LIB_FUNCTION("gI4t194c2W8", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddWeeks); + LIB_FUNCTION("-5y2uJ62qS8", "libSceRtc", 1, "libSceRtc", 1, 1, sceRtcTickAddYears); +}; + +} // namespace Libraries::Rtc \ No newline at end of file diff --git a/src/core/libraries/rtc/rtc.h b/src/core/libraries/rtc/rtc.h new file mode 100644 index 00000000..ee6afa70 --- /dev/null +++ b/src/core/libraries/rtc/rtc.h @@ -0,0 +1,67 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "common/types.h" + +namespace Core::Loader { +class SymbolsResolver; +} + +namespace Libraries::Rtc { + +struct OrbisRtcTick { + u64 tick; +}; + +int PS4_SYSV_ABI sceRtcCheckValid(); +int PS4_SYSV_ABI sceRtcCompareTick(); +int PS4_SYSV_ABI sceRtcConvertLocalTimeToUtc(); +int PS4_SYSV_ABI sceRtcConvertUtcToLocalTime(); +int PS4_SYSV_ABI sceRtcEnd(); +int PS4_SYSV_ABI sceRtcFormatRFC2822(); +int PS4_SYSV_ABI sceRtcFormatRFC2822LocalTime(); +int PS4_SYSV_ABI sceRtcFormatRFC3339(); +int PS4_SYSV_ABI sceRtcFormatRFC3339LocalTime(); +int PS4_SYSV_ABI sceRtcFormatRFC3339Precise(); +int PS4_SYSV_ABI sceRtcFormatRFC3339PreciseLocalTime(); +int PS4_SYSV_ABI sceRtcGetCurrentAdNetworkTick(); +int PS4_SYSV_ABI sceRtcGetCurrentClock(); +int PS4_SYSV_ABI sceRtcGetCurrentClockLocalTime(); +int PS4_SYSV_ABI sceRtcGetCurrentDebugNetworkTick(); +int PS4_SYSV_ABI sceRtcGetCurrentNetworkTick(); +int PS4_SYSV_ABI sceRtcGetCurrentRawNetworkTick(); +int PS4_SYSV_ABI sceRtcGetCurrentTick(OrbisRtcTick* pTick); +int PS4_SYSV_ABI sceRtcGetDayOfWeek(); +int PS4_SYSV_ABI sceRtcGetDaysInMonth(); +int PS4_SYSV_ABI sceRtcGetDosTime(); +int PS4_SYSV_ABI sceRtcGetTick(); +int PS4_SYSV_ABI sceRtcGetTickResolution(); +int PS4_SYSV_ABI sceRtcGetTime_t(); +int PS4_SYSV_ABI sceRtcGetWin32FileTime(); +int PS4_SYSV_ABI sceRtcInit(); +int PS4_SYSV_ABI sceRtcIsLeapYear(); +int PS4_SYSV_ABI sceRtcParseDateTime(); +int PS4_SYSV_ABI sceRtcParseRFC3339(); +int PS4_SYSV_ABI sceRtcSetConf(); +int PS4_SYSV_ABI sceRtcSetCurrentAdNetworkTick(); +int PS4_SYSV_ABI sceRtcSetCurrentDebugNetworkTick(); +int PS4_SYSV_ABI sceRtcSetCurrentNetworkTick(); +int PS4_SYSV_ABI sceRtcSetCurrentTick(); +int PS4_SYSV_ABI sceRtcSetDosTime(); +int PS4_SYSV_ABI sceRtcSetTick(); +int PS4_SYSV_ABI sceRtcSetTime_t(); +int PS4_SYSV_ABI sceRtcSetWin32FileTime(); +int PS4_SYSV_ABI sceRtcTickAddDays(); +int PS4_SYSV_ABI sceRtcTickAddHours(); +int PS4_SYSV_ABI sceRtcTickAddMicroseconds(); +int PS4_SYSV_ABI sceRtcTickAddMinutes(); +int PS4_SYSV_ABI sceRtcTickAddMonths(); +int PS4_SYSV_ABI sceRtcTickAddSeconds(); +int PS4_SYSV_ABI sceRtcTickAddTicks(); +int PS4_SYSV_ABI sceRtcTickAddWeeks(); +int PS4_SYSV_ABI sceRtcTickAddYears(); + +void RegisterlibSceRtc(Core::Loader::SymbolsResolver* sym); +} // namespace Libraries::Rtc \ No newline at end of file From 5be677722046647bdb654f756218a94ab4ad52b8 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sat, 8 Jun 2024 23:25:20 +0300 Subject: [PATCH 2/5] added sceKernelPread --- src/core/libraries/kernel/file_system.cpp | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp index a2dfcbc1..5708f150 100644 --- a/src/core/libraries/kernel/file_system.cpp +++ b/src/core/libraries/kernel/file_system.cpp @@ -203,6 +203,34 @@ int PS4_SYSV_ABI posix_stat(const char* path, OrbisKernelStat* sb) { return ORBIS_OK; } +s64 PS4_SYSV_ABI sceKernelPread(int d, void* buf, size_t nbytes, s64 offset) { + if (d < 3) { + return ORBIS_KERNEL_ERROR_EPERM; + } + + if (buf == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + + if (offset < 0) { + return ORBIS_KERNEL_ERROR_EINVAL; + } + + auto* h = Common::Singleton::Instance(); + auto* file = h->GetFile(d); + + if (file == nullptr) { + return ORBIS_KERNEL_ERROR_EBADF; + } + file->m_mutex.lock(); + if (file->f.Tell() != offset) { + file->f.Seek(offset); + } + u32 bytes_read = file->f.ReadRaw(buf, static_cast(nbytes)); + file->m_mutex.unlock(); + return bytes_read; +} + void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("1G3lF1Gg1k8", "libkernel", 1, "libkernel", 1, 1, sceKernelOpen); LIB_FUNCTION("wuCroIGjt2g", "libScePosix", 1, "libkernel", 1, 1, posix_open); @@ -216,6 +244,7 @@ void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("1-LFLmRFxxM", "libkernel", 1, "libkernel", 1, 1, sceKernelMkdir); LIB_FUNCTION("eV9wAD2riIA", "libkernel", 1, "libkernel", 1, 1, sceKernelStat); LIB_FUNCTION("E6ao34wPw+U", "libScePosix", 1, "libkernel", 1, 1, posix_stat); + LIB_FUNCTION("+r3rMFwItV4", "libkernel", 1, "libkernel", 1, 1, sceKernelPread); // openOrbis (to check if it is valid out of OpenOrbis LIB_FUNCTION("6c3rCVE-fTU", "libkernel", 1, "libkernel", 1, 1, From 2e6c28c34cce2b0cdb7a3a99bdf48979041d9e12 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sat, 8 Jun 2024 23:53:38 +0300 Subject: [PATCH 3/5] partial sceKernelFStat --- src/core/libraries/kernel/file_system.cpp | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp index 5708f150..f4e2d5e5 100644 --- a/src/core/libraries/kernel/file_system.cpp +++ b/src/core/libraries/kernel/file_system.cpp @@ -231,6 +231,28 @@ s64 PS4_SYSV_ABI sceKernelPread(int d, void* buf, size_t nbytes, s64 offset) { return bytes_read; } +int PS4_SYSV_ABI sceKernelFStat(int fd, OrbisKernelStat* sb) { + LOG_INFO(Kernel_Fs, "(PARTIAL) fd = {}", fd); + auto* h = Common::Singleton::Instance(); + auto* file = h->GetFile(fd); + memset(sb, 0, sizeof(OrbisKernelStat)); + + if (file->is_directory) { + sb->st_mode = 0000777u | 0040000u; + sb->st_size = 0; + sb->st_blksize = 512; + sb->st_blocks = 0; + // TODO incomplete + } else { + sb->st_mode = 0000777u | 0100000u; + sb->st_size = file->f.GetSize(); + sb->st_blksize = 512; + sb->st_blocks = (sb->st_size + 511) / 512; + // TODO incomplete + } + return ORBIS_OK; +} + void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("1G3lF1Gg1k8", "libkernel", 1, "libkernel", 1, 1, sceKernelOpen); LIB_FUNCTION("wuCroIGjt2g", "libScePosix", 1, "libkernel", 1, 1, posix_open); @@ -243,6 +265,8 @@ void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("Cg4srZ6TKbU", "libkernel", 1, "libkernel", 1, 1, sceKernelRead); LIB_FUNCTION("1-LFLmRFxxM", "libkernel", 1, "libkernel", 1, 1, sceKernelMkdir); LIB_FUNCTION("eV9wAD2riIA", "libkernel", 1, "libkernel", 1, 1, sceKernelStat); + LIB_FUNCTION("kBwCPsYX-m4", "libkernel", 1, "libkernel", 1, 1, sceKernelFStat); + LIB_FUNCTION("E6ao34wPw+U", "libScePosix", 1, "libkernel", 1, 1, posix_stat); LIB_FUNCTION("+r3rMFwItV4", "libkernel", 1, "libkernel", 1, 1, sceKernelPread); From 84dca0a5dde8fe965631e9db40ce2cb48c2ebb24 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sun, 9 Jun 2024 00:23:58 +0300 Subject: [PATCH 4/5] added sceKernelTriggerUserEvent,sceKernelDeleteUserEvent --- src/core/libraries/kernel/event_queues.cpp | 9 +++++++++ src/core/libraries/kernel/event_queues.h | 2 ++ src/core/libraries/kernel/libkernel.cpp | 3 +++ 3 files changed, 14 insertions(+) diff --git a/src/core/libraries/kernel/event_queues.cpp b/src/core/libraries/kernel/event_queues.cpp index 0949ea33..8b45f53e 100644 --- a/src/core/libraries/kernel/event_queues.cpp +++ b/src/core/libraries/kernel/event_queues.cpp @@ -102,4 +102,13 @@ void* PS4_SYSV_ABI sceKernelGetEventUserData(const SceKernelEvent* ev) { return ev->udata; } +int PS4_SYSV_ABI sceKernelTriggerUserEvent(SceKernelEqueue eq, int id, void* udata) { + eq->triggerEvent(id, Kernel::EVFILT_USER, udata); + return ORBIS_OK; +} + +int PS4_SYSV_ABI sceKernelDeleteUserEvent(SceKernelEqueue eq, int id) { + eq->removeEvent(id); + return ORBIS_OK; +} } // namespace Libraries::Kernel diff --git a/src/core/libraries/kernel/event_queues.h b/src/core/libraries/kernel/event_queues.h index 3c08ed5f..9e0f2eb4 100644 --- a/src/core/libraries/kernel/event_queues.h +++ b/src/core/libraries/kernel/event_queues.h @@ -15,6 +15,8 @@ int PS4_SYSV_ABI sceKernelDeleteEqueue(SceKernelEqueue eq); int PS4_SYSV_ABI sceKernelWaitEqueue(SceKernelEqueue eq, SceKernelEvent* ev, int num, int* out, SceKernelUseconds* timo); void* PS4_SYSV_ABI sceKernelGetEventUserData(const SceKernelEvent* ev); +int PS4_SYSV_ABI sceKernelTriggerUserEvent(SceKernelEqueue eq, int id, void* udata); +int PS4_SYSV_ABI sceKernelDeleteUserEvent(SceKernelEqueue eq, int id); int PS4_SYSV_ABI sceKernelAddUserEvent(SceKernelEqueue eq, int id); } // namespace Libraries::Kernel diff --git a/src/core/libraries/kernel/libkernel.cpp b/src/core/libraries/kernel/libkernel.cpp index a215fcb4..3d62907e 100644 --- a/src/core/libraries/kernel/libkernel.cpp +++ b/src/core/libraries/kernel/libkernel.cpp @@ -261,6 +261,9 @@ void LibKernel_Register(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("fzyMKs9kim0", "libkernel", 1, "libkernel", 1, 1, sceKernelWaitEqueue); LIB_FUNCTION("vz+pg2zdopI", "libkernel", 1, "libkernel", 1, 1, sceKernelGetEventUserData); LIB_FUNCTION("4R6-OvI2cEA", "libkernel", 1, "libkernel", 1, 1, sceKernelAddUserEvent); + LIB_FUNCTION("F6e0kwo4cnk", "libkernel", 1, "libkernel", 1, 1, sceKernelTriggerUserEvent); + LIB_FUNCTION("LJDwdSNTnDg", "libkernel", 1, "libkernel", 1, 1, sceKernelDeleteUserEvent); + // misc LIB_FUNCTION("WslcK1FQcGI", "libkernel", 1, "libkernel", 1, 1, sceKernelIsNeoMode); LIB_FUNCTION("Ou3iL1abvng", "libkernel", 1, "libkernel", 1, 1, stack_chk_fail); From 908eaa102d203a6d121d768cd421afb462d7ecab Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sun, 9 Jun 2024 00:26:12 +0300 Subject: [PATCH 5/5] clang format fix --- src/core/libraries/kernel/file_system.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp index f4e2d5e5..f0acb66d 100644 --- a/src/core/libraries/kernel/file_system.cpp +++ b/src/core/libraries/kernel/file_system.cpp @@ -266,7 +266,7 @@ void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("1-LFLmRFxxM", "libkernel", 1, "libkernel", 1, 1, sceKernelMkdir); LIB_FUNCTION("eV9wAD2riIA", "libkernel", 1, "libkernel", 1, 1, sceKernelStat); LIB_FUNCTION("kBwCPsYX-m4", "libkernel", 1, "libkernel", 1, 1, sceKernelFStat); - + LIB_FUNCTION("E6ao34wPw+U", "libScePosix", 1, "libkernel", 1, 1, posix_stat); LIB_FUNCTION("+r3rMFwItV4", "libkernel", 1, "libkernel", 1, 1, sceKernelPread);