From 9c5c4457b688cd505450d02f54f52a9f4bac27df Mon Sep 17 00:00:00 2001 From: clienthax Date: Sat, 17 Jul 2021 12:08:21 +0100 Subject: [PATCH] Stub libfs_utility_init to bypass FSCK checks by vsh. --- rpcs3/Emu/CMakeLists.txt | 1 + rpcs3/Emu/Cell/Modules/libfs_utility_init.cpp | 85 +++++++++++++++++++ rpcs3/Emu/Cell/Modules/libfs_utility_init.h | 1 + rpcs3/Emu/Cell/PPUModule.cpp | 1 + rpcs3/Emu/Cell/PPUModule.h | 1 + rpcs3/Emu/Cell/lv2/sys_prx.cpp | 3 +- rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 ++ 8 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 rpcs3/Emu/Cell/Modules/libfs_utility_init.cpp create mode 100644 rpcs3/Emu/Cell/Modules/libfs_utility_init.h diff --git a/rpcs3/Emu/CMakeLists.txt b/rpcs3/Emu/CMakeLists.txt index cb9fb70c8e..148fd1dab3 100644 --- a/rpcs3/Emu/CMakeLists.txt +++ b/rpcs3/Emu/CMakeLists.txt @@ -333,6 +333,7 @@ target_sources(rpcs3_emu PRIVATE Cell/Modules/sys_rsxaudio_.cpp Cell/Modules/sys_spinlock.cpp Cell/Modules/sys_spu_.cpp + Cell/Modules/libfs_utility_init.cpp ) if(NOT MSVC) diff --git a/rpcs3/Emu/Cell/Modules/libfs_utility_init.cpp b/rpcs3/Emu/Cell/Modules/libfs_utility_init.cpp new file mode 100644 index 0000000000..cd7346c3de --- /dev/null +++ b/rpcs3/Emu/Cell/Modules/libfs_utility_init.cpp @@ -0,0 +1,85 @@ +#include "stdafx.h" +#include "Emu/Cell/PPUModule.h" + + +LOG_CHANNEL(libfs_utility_init); + +error_code fs_utility_init_1F3CD9F1() +{ + libfs_utility_init.todo("fs_utility_init_1F3CD9F1()"); + return CELL_OK; +} + +error_code fs_utility_init_263172B8(u32 arg1) +{ + libfs_utility_init.todo("fs_utility_init_263172B8(0x%0x)", arg1); + // arg1 usually 0x3 ?? + + // This method seems to call fsck on the various partitions, among other checks + // Negative numbers indicate an error + // Some positive numbers are deemed illegal, others (including 0) are accepted as valid + return CELL_OK; +} + +error_code fs_utility_init_4E949DA4() +{ + libfs_utility_init.todo("fs_utility_init_4E949DA4()"); + return CELL_OK; +} + +error_code fs_utility_init_665DF255() +{ + libfs_utility_init.todo("fs_utility_init_665DF255()"); + return CELL_OK; +} + +error_code fs_utility_init_6B5896B0(vm::ptr dest) +{ + libfs_utility_init.todo("fs_utility_init_6B5896B0(dest=*0x%0x)", dest); + + if (!dest) + { + return CELL_EFAULT; + } + + // This method writes the number of partitions to the address pointed to by dest + *dest = 2; + + return CELL_OK; +} + + +error_code fs_utility_init_A9B04535(u32 arg1) +{ + libfs_utility_init.todo("fs_utility_init_A9B04535(0x%0x)", arg1); + // This method seems to call fsck on the various partitions, among other checks + // Negative numbers indicate an error + // Some positive numbers are deemed illegal, others (including 0) are accepted as valid + return CELL_OK; +} + + +error_code fs_utility_init_E7563CE6() +{ + libfs_utility_init.todo("fs_utility_init_E7563CE6()"); + return CELL_OK; +} + + +error_code fs_utility_init_F691D443() +{ + libfs_utility_init.todo("fs_utility_init_F691D443()"); + return CELL_OK; +} + +DECLARE(ppu_module_manager::libfs_utility_init)("fs_utility_init", []() +{ + REG_FNID(fs_utility_init, 0x1F3CD9F1, fs_utility_init_1F3CD9F1); + REG_FNID(fs_utility_init, 0x263172B8, fs_utility_init_263172B8); + REG_FNID(fs_utility_init, 0x4E949DA4, fs_utility_init_4E949DA4); + REG_FNID(fs_utility_init, 0x665DF255, fs_utility_init_665DF255); + REG_FNID(fs_utility_init, 0x6B5896B0, fs_utility_init_6B5896B0); + REG_FNID(fs_utility_init, 0xA9B04535, fs_utility_init_A9B04535); + REG_FNID(fs_utility_init, 0xE7563CE6, fs_utility_init_E7563CE6); + REG_FNID(fs_utility_init, 0xF691D443, fs_utility_init_F691D443); +}); diff --git a/rpcs3/Emu/Cell/Modules/libfs_utility_init.h b/rpcs3/Emu/Cell/Modules/libfs_utility_init.h new file mode 100644 index 0000000000..6f70f09bee --- /dev/null +++ b/rpcs3/Emu/Cell/Modules/libfs_utility_init.h @@ -0,0 +1 @@ +#pragma once diff --git a/rpcs3/Emu/Cell/PPUModule.cpp b/rpcs3/Emu/Cell/PPUModule.cpp index 0ed43f4569..e0ca883781 100644 --- a/rpcs3/Emu/Cell/PPUModule.cpp +++ b/rpcs3/Emu/Cell/PPUModule.cpp @@ -228,6 +228,7 @@ static void ppu_initialize_modules(ppu_linkage_info* link) &ppu_module_manager::cellVpost, &ppu_module_manager::libad_async, &ppu_module_manager::libad_core, + &ppu_module_manager::libfs_utility_init, &ppu_module_manager::libmedi, &ppu_module_manager::libmixer, &ppu_module_manager::libsnd3, diff --git a/rpcs3/Emu/Cell/PPUModule.h b/rpcs3/Emu/Cell/PPUModule.h index 7b09ffca63..cf660630f3 100644 --- a/rpcs3/Emu/Cell/PPUModule.h +++ b/rpcs3/Emu/Cell/PPUModule.h @@ -248,6 +248,7 @@ public: static const ppu_static_module cellVpost; static const ppu_static_module libad_async; static const ppu_static_module libad_core; + static const ppu_static_module libfs_utility_init; static const ppu_static_module libmedi; static const ppu_static_module libmixer; static const ppu_static_module libsnd3; diff --git a/rpcs3/Emu/Cell/lv2/sys_prx.cpp b/rpcs3/Emu/Cell/lv2/sys_prx.cpp index 7ab9da8de5..5f99282de2 100644 --- a/rpcs3/Emu/Cell/lv2/sys_prx.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_prx.cpp @@ -25,6 +25,7 @@ LOG_CHANNEL(sys_prx); // extern const std::map g_prx_list { + { "/dev_flash/sys/internal/libfs_utility_init.sprx", 1 }, { "libaacenc.sprx", 0 }, { "libaacenc_spurs.sprx", 0 }, { "libac3dec.sprx", 0 }, @@ -225,7 +226,7 @@ static error_code prx_load_module(const std::string& vpath, u64 flags, vm::ptrtrue + @@ -439,6 +440,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 0c993c93ca..a5bef0104d 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -996,6 +996,9 @@ Utilities + + Emu\Cell\Modules + @@ -1968,6 +1971,9 @@ Utilities + + Emu\Cell\Modules +