diff --git a/CMakeLists.txt b/CMakeLists.txt index 1da14c4b..05d277e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,12 @@ set(SYSTEMSERVICE_SOURCES src/Emulator/HLE/Libraries/LibSystemService/system_ser src/Emulator/HLE/Libraries/LibSystemService/system_service.h ) +set(FILESYSTEM_SOURCES src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.cpp + src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h + src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp + src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.h +) + set(UTIL_SOURCES src/Emulator/Util/singleton.h ) @@ -53,6 +59,7 @@ add_executable(shadps4 ${USERSERVICE_SOURCES} ${PAD_SOURCES} ${SYSTEMSERVICE_SOURCES} + ${FILESYSTEM_SOURCES} ${UTIL_SOURCES} src/main.cpp src/types.h diff --git a/src/Core/PS4/HLE/LibKernel.cpp b/src/Core/PS4/HLE/LibKernel.cpp index 77fb3c71..81252174 100644 --- a/src/Core/PS4/HLE/LibKernel.cpp +++ b/src/Core/PS4/HLE/LibKernel.cpp @@ -10,6 +10,8 @@ #include "Kernel/event_queues.h" #include "Kernel/memory_management.h" #include "Libs.h" +#include "Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h" +#include "Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.h" namespace HLE::Libs::LibKernel { @@ -44,6 +46,9 @@ void LibKernel_Register(SymbolsResolver* sym) { LIB_FUNCTION("Ou3iL1abvng", "libkernel", 1, "libkernel", 1, 1, stack_chk_fail); // time LIB_FUNCTION("-2IRUCO--PM", "libkernel", 1, "libkernel", 1, 1, sceKernelReadTsc); + // fs + LIB_FUNCTION("1G3lF1Gg1k8", "libkernel", 1, "libkernel", 1, 1, Emulator::HLE::Libraries::LibKernel::FileSystem::sceKernelOpen); + LIB_FUNCTION("wuCroIGjt2g", "libScePosix", 1, "libkernel", 1, 1, Emulator::HLE::Libraries::LibKernel::FileSystem::POSIX::open); } }; // namespace HLE::Libs::LibKernel \ No newline at end of file diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.cpp b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.cpp new file mode 100644 index 00000000..cdf35595 --- /dev/null +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.cpp @@ -0,0 +1,13 @@ +#include "file_system.h" +#include +#include + +namespace Emulator::HLE::Libraries::LibKernel::FileSystem { +constexpr bool log_file_fs = true; // disable it to disable logging + +int PS4_SYSV_ABI sceKernelOpen(const char* path, int flags, u16 mode) { + LOG_INFO_IF(log_file_fs, "sceKernelOpen path = {} flags = {} mode = {}\n", path, log_hex_full(flags), log_hex_full(mode)); + return 0; +} + +} // namespace Emulator::HLE::Libraries::LibKernel::FileSystem \ No newline at end of file diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h new file mode 100644 index 00000000..98f090f0 --- /dev/null +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/file_system.h @@ -0,0 +1,7 @@ +#pragma once +#include + +namespace Emulator::HLE::Libraries::LibKernel::FileSystem { +int PS4_SYSV_ABI sceKernelOpen(const char *path, int flags, /* SceKernelMode*/ u16 mode); + +} \ No newline at end of file diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp new file mode 100644 index 00000000..caa6fb43 --- /dev/null +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.cpp @@ -0,0 +1,15 @@ +#include "posix_file_system.h" + +#include + +#include "file_system.h" + +namespace Emulator::HLE::Libraries::LibKernel::FileSystem::POSIX { +int PS4_SYSV_ABI open(const char* path, int flags, /* SceKernelMode*/ u16 mode) { + int result = sceKernelOpen(path, flags, mode); + if (result < 0) { + BREAKPOINT(); // posix calls different only for their return values + } + return result; +} +} // namespace Emulator::HLE::Libraries::LibKernel::FileSystem::POSIX diff --git a/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.h b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.h new file mode 100644 index 00000000..cce1c6c0 --- /dev/null +++ b/src/Emulator/HLE/Libraries/LibKernel/FileSystem/posix_file_system.h @@ -0,0 +1,6 @@ +#pragma once +#include "types.h" + +namespace Emulator::HLE::Libraries::LibKernel::FileSystem::POSIX { +int PS4_SYSV_ABI open(const char *path, int flags, /* SceKernelMode*/ u16 mode); +} \ No newline at end of file