From 8adf19c904752395ea681c53ab957ba5a15c9e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Tue, 11 Feb 2014 03:47:25 +0100 Subject: [PATCH] Few module functions added Implemented: * cellSysutilApGetRequiredMemSize * cellGameContentErrorDialog Binded lv2 SysCall 814 to cellFsUnlink --- rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 34 ++++++++++++++++++-- rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp | 6 ++-- rpcs3/Emu/SysCalls/SysCalls.cpp | 2 +- rpcs3/rpcs3.vcxproj | 1 + rpcs3/rpcs3.vcxproj.filters | 3 ++ 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 6a9c2a9258..350d8576bc 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -92,6 +92,17 @@ enum CELL_GAME_PARAMID_APP_VER = 106, }; +//Error dialog types +enum +{ + CELL_GAME_ERRDIALOG_BROKEN_GAMEDATA = 0, + CELL_GAME_ERRDIALOG_BROKEN_HDDGAME = 1, + CELL_GAME_ERRDIALOG_NOSPACE = 2, + CELL_GAME_ERRDIALOG_BROKEN_EXIT_GAMEDATA = 100, + CELL_GAME_ERRDIALOG_BROKEN_EXIT_HDDGAME = 101, + CELL_GAME_ERRDIALOG_NOSPACE_EXIT = 102, +}; + struct CellGameContentSize { be_t hddFreeSizeKB; @@ -260,9 +271,28 @@ int cellGameGetLocalWebContentPath() return CELL_OK; } -int cellGameContentErrorDialog() +int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) { - UNIMPLEMENTED_FUNC(cellGame); + cellGame.Warning("cellGameContentErrorDialog(type=%d, errNeedSizeKB=%d, dirName_addr=0x%x)", type, errNeedSizeKB, dirName_addr); + + if (Memory.IsGoodAddr(dirName_addr)) + return CELL_GAME_ERROR_PARAM; + + char* dirName = (char*)Memory.VirtualToRealAddr(dirName_addr); + std::string errorName; + switch(type) + { + case CELL_GAME_ERRDIALOG_BROKEN_GAMEDATA: errorName = "Game data is corrupted (can be continued)."; break; + case CELL_GAME_ERRDIALOG_BROKEN_HDDGAME: errorName = "HDD boot game is corrupted (can be continued)."; break; + case CELL_GAME_ERRDIALOG_NOSPACE: errorName = "Not enough available space (can be continued)."; break; + case CELL_GAME_ERRDIALOG_BROKEN_EXIT_GAMEDATA: errorName = "Game data is corrupted (terminate application)."; break; + case CELL_GAME_ERRDIALOG_BROKEN_EXIT_HDDGAME: errorName = "HDD boot game is corrupted (terminate application)."; break; + case CELL_GAME_ERRDIALOG_NOSPACE_EXIT: errorName = "Not enough available space (terminate application)."; break; + default: return CELL_GAME_ERROR_PARAM; + } + + std::string errorMsg = wxString::Format("%s\nSpace needed: %d KB\nDirectory name: %s", errorName.c_str(), errNeedSizeKB, dirName); + wxMessageBox(errorMsg, wxGetApp().GetAppName(), wxICON_ERROR | wxOK); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp index 1aafba7138..345958529b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutilAp.cpp @@ -18,10 +18,10 @@ enum CELL_SYSUTIL_AP_ERROR_NETIF_CANNOT_CONNECT = 0x8002cd16, }; -int cellSysutilApGetRequiredMemSize() +s32 cellSysutilApGetRequiredMemSize() { - UNIMPLEMENTED_FUNC(cellSysutilAp); - return CELL_OK; + cellSysutilAp.Log("cellSysutilApGetRequiredMemSize()"); + return 1024*1024; // Return 1 MB as required size } int cellSysutilApOn() diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index 8fcf589f65..3e8d38afdd 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -248,7 +248,7 @@ static func_caller* sc_table[1024] = bind_func(cellFsMkdir), //811 (0x32B) bind_func(cellFsRename), //812 (0x32C) bind_func(cellFsRmdir), //813 (0x32D) - null_func, //814 (0x32E) + bind_func(cellFsUnlink), //814 (0x32E) null_func, null_func, null_func, bind_func(cellFsLseek), null_func, //819 null_func, null_func, null_func, null_func, null_func, //824 null_func, null_func, null_func, null_func, null_func, //829 diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 7fa98fa362..2148f4b1bf 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -286,6 +286,7 @@ + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 302473ead6..49278953be 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -385,6 +385,9 @@ Emu\SysCalls\lv2 + + Emu\SysCalls\Modules +