From 23da77036405aa61c1e1e046b9ac558d5170e263 Mon Sep 17 00:00:00 2001 From: brian218 Date: Tue, 21 Feb 2023 20:16:49 +0800 Subject: [PATCH] sys_game: LV2 board storage minor fixups --- rpcs3/Emu/Cell/lv2/sys_game.cpp | 23 +++++++++++------------ rpcs3/Emu/Cell/lv2/sys_game.h | 4 ++-- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_game.cpp b/rpcs3/Emu/Cell/lv2/sys_game.cpp index dbdfce95f6..b3351f0ddc 100644 --- a/rpcs3/Emu/Cell/lv2/sys_game.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_game.cpp @@ -39,10 +39,9 @@ public: board_storage() { + memset(&storage.raw(), -1, size); if (fs::file file; file.open(file_path, fs::read)) - file.read(&storage.raw(), size); - else - memset(&storage.raw(), 0, size); + file.read(&storage.raw(), std::min(file.size(), size)); } board_storage(const board_storage&) = delete; @@ -65,7 +64,7 @@ private: atomic_be_t storage; bool written = false; const std::string file_path = rpcs3::utils::get_hdd1_dir() + "/caches/board_storage.bin"; - static constexpr size_t size = sizeof(v128); + static constexpr u64 size = sizeof(v128); }; struct watchdog_t @@ -215,30 +214,30 @@ u64 _sys_game_get_system_sw_version() return stof(utils::get_firmware_version()) * 10000; } -error_code _sys_game_board_storage_read(vm::ptr buffer1, vm::ptr buffer2) +error_code _sys_game_board_storage_read(vm::ptr buffer, vm::ptr status) { - sys_game.trace("sys_game_board_storage_read(buffer1=*0x%x, buffer2=*0x%x)", buffer1, buffer2); + sys_game.trace("sys_game_board_storage_read(buffer=*0x%x, status=*0x%x)", buffer, status); - if (!buffer1 || !buffer2) + if (!buffer || !status) { return CELL_EFAULT; } - *buffer2 = g_fxo->get().read(buffer1.get_ptr()) ? 0x00 : 0xFF; + *status = g_fxo->get().read(buffer.get_ptr()) ? 0x00 : 0xFF; return CELL_OK; } -error_code _sys_game_board_storage_write(vm::ptr buffer1, vm::ptr buffer2) +error_code _sys_game_board_storage_write(vm::ptr buffer, vm::ptr status) { - sys_game.trace("sys_game_board_storage_write(buffer1=*0x%x, buffer2=*0x%x)", buffer1, buffer2); + sys_game.trace("sys_game_board_storage_write(buffer=*0x%x, status=*0x%x)", buffer, status); - if (!buffer1 || !buffer2) + if (!buffer || !status) { return CELL_EFAULT; } - *buffer2 = g_fxo->get().write(buffer1.get_ptr()) ? 0x00 : 0xFF; + *status = g_fxo->get().write(buffer.get_ptr()) ? 0x00 : 0xFF; return CELL_OK; } diff --git a/rpcs3/Emu/Cell/lv2/sys_game.h b/rpcs3/Emu/Cell/lv2/sys_game.h index 7ac3cd2768..77160216fc 100644 --- a/rpcs3/Emu/Cell/lv2/sys_game.h +++ b/rpcs3/Emu/Cell/lv2/sys_game.h @@ -6,6 +6,6 @@ error_code _sys_game_watchdog_start(u32 timeout); error_code _sys_game_watchdog_stop(); error_code _sys_game_watchdog_clear(); u64 _sys_game_get_system_sw_version(); -error_code _sys_game_board_storage_read(vm::ptr buffer1, vm::ptr buffer2); -error_code _sys_game_board_storage_write(vm::ptr buffer1, vm::ptr buffer2); +error_code _sys_game_board_storage_read(vm::ptr buffer, vm::ptr status); +error_code _sys_game_board_storage_write(vm::ptr buffer, vm::ptr status); error_code _sys_game_get_rtc_status(vm::ptr status);