diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 9959922730..127428d0d8 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -689,84 +689,5 @@ public: mem_t& operator >>= (T right) { return *this = (*this) >> right; } }; -template -struct _func_arg -{ - __forceinline static u64 get_value(const T& arg) - { - return arg; - } -}; - -template -struct _func_arg> -{ - __forceinline static u64 get_value(const mem_base_t arg) - { - return arg.GetAddr(); - } -}; - -template struct _func_arg> : public _func_arg> {}; -template struct _func_arg> : public _func_arg>{}; -template struct _func_arg> : public _func_arg> {}; - -template -struct _func_arg> -{ - __forceinline static u64 get_value(const be_t& arg) - { - return arg.ToLE(); - } -}; - -template class mem_func_ptr_t; -template class mem_func_beptr_t : public mem_func_ptr_t> {}; - -template -class mem_func_ptr_t : public mem_base_t -{ - __forceinline RT call_func(bool is_async) const - { - Callback cb; - cb.SetAddr(this->m_addr); - return (RT)cb.Branch(!is_async); - } - -public: - __forceinline RT operator()() const - { - return call_func(false); - } - - __forceinline void async() const - { - call_func(true); - } -}; - -template -class mem_func_ptr_t : public mem_base_t -{ - __forceinline RT call_func(bool is_async, T... args) const - { - Callback cb; - cb.SetAddr(this->m_addr); - cb.Handle(_func_arg::get_value(args)...); - return (RT)cb.Branch(!is_async); - } - -public: - __forceinline RT operator()(T... args) const - { - return call_func(false, args...); - } - - __forceinline void async(T... args) const - { - call_func(true, args...); - } -}; - #include "vm.h" diff --git a/rpcs3/Emu/Memory/vm_ptr.h b/rpcs3/Emu/Memory/vm_ptr.h index 169bfab71b..88cab76b3c 100644 --- a/rpcs3/Emu/Memory/vm_ptr.h +++ b/rpcs3/Emu/Memory/vm_ptr.h @@ -293,11 +293,6 @@ namespace vm return m_addr; } - type const get_ptr() const - { - return *((type*)vm::get_ptr(m_addr)); - } - operator bool() const { return m_addr != 0; @@ -307,6 +302,12 @@ namespace vm { return (ptr&)addr; } + + operator std::function() const + { + const AT addr = m_addr; + return [addr]() -> RT { return make(addr)(); }; + } }; template @@ -341,6 +342,17 @@ namespace vm } }; + template + struct _func_arg> + { + static_assert(!i, "Invalid callback argument type (mem_ptr_t), use vm::ptr"); + + __forceinline static u64 get_value(const mem_ptr_t arg) + { + return 0; + } + }; + __forceinline RT call_func(bool is_async, T... args) const { Callback cb; @@ -367,11 +379,6 @@ namespace vm return m_addr; } - type const get_ptr() const - { - return *((type*)vm::get_ptr(m_addr)); - } - operator bool() const { return m_addr != 0; @@ -381,6 +388,12 @@ namespace vm { return (ptr&)addr; } + + operator std::function() const + { + const AT addr = m_addr; + return [addr](T... args) -> RT { return make(addr)(args...); }; + } }; template diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.h b/rpcs3/Emu/SysCalls/Modules/cellAdec.h index a72c126094..a77840187e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.h @@ -360,7 +360,7 @@ enum CellAdecMsgType CELL_ADEC_MSG_TYPE_SEQDONE, }; -typedef mem_func_ptr_t CellAdecCbMsg; +typedef s32(*CellAdecCbMsg)(u32 handle, CellAdecMsgType msgType, int msgData, u32 cbArg); struct CellAdecCb { diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.h b/rpcs3/Emu/SysCalls/Modules/cellDmux.h index cd0e5c6af7..c44418ea5d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.h +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.h @@ -222,7 +222,7 @@ struct CellDmuxResource2 be_t shit[4]; }; -typedef mem_func_ptr_t demuxerMsg, u32 cbArg_addr)> CellDmuxCbMsg; +typedef u32(*CellDmuxCbMsg)(u32 demuxerHandle, vm::ptr demuxerMsg, u32 cbArg_addr); struct CellDmuxCb { @@ -231,7 +231,7 @@ struct CellDmuxCb be_t cbArg_addr; }; -typedef mem_func_ptr_t esMsg, u32 cbArg_addr)> CellDmuxCbEsMsg; +typedef u32(*CellDmuxCbEsMsg)(u32 demuxerHandle, u32 esHandle, vm::ptr esMsg, u32 cbArg_addr); struct CellDmuxEsCb { diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index d0b6548da3..ba2aadd2a5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -199,10 +199,10 @@ int cellGameContentPermit(vm::ptr contentInfoPath, vm::ptr usrdirPat } int cellGameDataCheckCreate2(u32 version, vm::ptr dirName, u32 errDialog, - mem_func_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set)> funcStat, u32 container) + vm::ptr cbResult, vm::ptr get, vm::ptr set)> funcStat, u32 container) { cellGame->Warning("cellGameDataCheckCreate2(version=0x%x, dirName_addr=0x%x, errDialog=0x%x, funcStat_addr=0x%x, container=%d)", - version, dirName.addr(), errDialog, funcStat.GetAddr(), container); + version, dirName.addr(), errDialog, funcStat.addr(), container); if (version != CELL_GAMEDATA_VERSION_CURRENT || errDialog > 1) { @@ -265,7 +265,7 @@ int cellGameDataCheckCreate2(u32 version, vm::ptr dirName, u32 errDi strcpy_trunc(cbGet->getParam.title, psf.GetString("TITLE")); // TODO: write lang titles - funcStat(cbResult.addr(), cbGet.addr(), cbSet.addr()); + funcStat(cbResult, cbGet, cbSet); if (cbSet->setParam.GetAddr()) { @@ -305,7 +305,7 @@ int cellGameDataCheckCreate2(u32 version, vm::ptr dirName, u32 errDi } int cellGameDataCheckCreate(u32 version, vm::ptr dirName, u32 errDialog, - mem_func_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set)> funcStat, u32 container) + vm::ptr cbResult, vm::ptr get, vm::ptr set)> funcStat, u32 container) { // TODO: almost identical, the only difference is that this function will always calculate the size of game data return cellGameDataCheckCreate2(version, dirName, errDialog, funcStat, container); diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 57196033bc..714f45c1bf 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -60,10 +60,10 @@ void MsgDialogClose() g_msg_dialog_wait_until = get_system_time(); } -int cellMsgDialogOpen2(u32 type, vm::ptr msgString, mem_func_ptr_t callback, u32 userData, u32 extParam) +int cellMsgDialogOpen2(u32 type, vm::ptr msgString, vm::ptr callback, u32 userData, u32 extParam) { cellSysutil->Warning("cellMsgDialogOpen2(type=0x%x, msgString_addr=0x%x, callback_addr=0x%x, userData=0x%x, extParam=0x%x)", - type, msgString.addr(), callback.GetAddr(), userData, extParam); + type, msgString.addr(), callback.addr(), userData, extParam); //type |= CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE | CELL_MSGDIALOG_TYPE_BG_INVISIBLE; //type |= CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO | CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_NO; @@ -139,10 +139,10 @@ int cellMsgDialogOpen2(u32 type, vm::ptr msgString, mem_func_ptr_t callback, u32 userData, u32 extParam) +int cellMsgDialogOpenErrorCode(u32 errorCode, vm::ptr callback, u32 userData, u32 extParam) { cellSysutil->Warning("cellMsgDialogOpenErrorCode(errorCode=0x%x, callback_addr=0x%x, userData=0x%x, extParam=%d)", - errorCode, callback.GetAddr(), userData, extParam); + errorCode, callback.addr(), userData, extParam); std::string errorMessage; switch (errorCode) diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h index dbfd1438d4..820d2a7792 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h @@ -81,8 +81,8 @@ enum typedef void(*CellMsgDialogCallback)(int buttonType, u32 userData); -int cellMsgDialogOpen2(u32 type, vm::ptr msgString, mem_func_ptr_t callback, u32 userData, u32 extParam); -int cellMsgDialogOpenErrorCode(u32 errorCode, mem_func_ptr_t callback, u32 userData, u32 extParam); +int cellMsgDialogOpen2(u32 type, vm::ptr msgString, vm::ptr callback, u32 userData, u32 extParam); +int cellMsgDialogOpenErrorCode(u32 errorCode, vm::ptr callback, u32 userData, u32 extParam); int cellMsgDialogProgressBarSetMsg(u32 progressBarIndex, vm::ptr msgString); int cellMsgDialogProgressBarReset(u32 progressBarIndex); diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index dd03de2960..e3b992bd0c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -29,9 +29,9 @@ int cellNetCtlGetState(vm::ptr> state) return CELL_OK; } -int cellNetCtlAddHandler(mem_func_ptr_t handler, vm::ptr> arg, s32 hid) +int cellNetCtlAddHandler(vm::ptr handler, vm::ptr> arg, s32 hid) { - cellNetCtl->Todo("cellNetCtlAddHandler(handler_addr=0x%x, arg_addr=0x%x, hid=%x)", handler.GetAddr(), arg.addr(), hid); + cellNetCtl->Todo("cellNetCtlAddHandler(handler_addr=0x%x, arg_addr=0x%x, hid=%x)", handler.addr(), arg.addr(), hid); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index aedf3de8c9..daf21dded9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -92,14 +92,14 @@ int cellPngDecExtOpen(u32 mainHandle, vm::ptr> subHandle, mem_ptr_tWarning("cellPngDecExtOpen(mainHandle=0x%x, subHandle=0x%x, src_addr=0x%x, openInfo=0x%x, cbCtrlStrm_addr=0x%x, opnParam=0x%x)", mainHandle, subHandle.addr(), src.GetAddr(), openInfo, cbCtrlStrm.GetAddr(), opnParam.GetAddr()); - cellPngDec->Warning("*** cbCtrlStrm->cbCtrlStrmFunc_addr=0x%x", cbCtrlStrm->cbCtrlStrmFunc.GetAddr()); + cellPngDec->Warning("*** cbCtrlStrm->cbCtrlStrmFunc_addr=0x%x", cbCtrlStrm->cbCtrlStrmFunc.addr()); vm::var streamInfo; vm::var streamParam; int res = cellPngDecOpen(mainHandle, subHandle, src, openInfo); - if (!res) cbCtrlStrm->cbCtrlStrmFunc(streamInfo.addr(), streamParam.addr(), cbCtrlStrm->cbCtrlStrmArg); + if (!res) cbCtrlStrm->cbCtrlStrmFunc(streamInfo, streamParam, cbCtrlStrm->cbCtrlStrmArg); return res; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.h b/rpcs3/Emu/SysCalls/Modules/cellPngDec.h index 271e1e837f..57372d5f3b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.h @@ -122,7 +122,7 @@ struct CellPngDecStrmParam struct CellPngDecCbCtrlStrm { - mem_func_beptr_t strmInfo, mem_ptr_t strmParam, u32 cbCtrlStrmArg)> cbCtrlStrmFunc; + vm::beptr strmInfo, vm::ptr strmParam, u32 cbCtrlStrmArg)> cbCtrlStrmFunc; be_t cbCtrlStrmArg; }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSail.h b/rpcs3/Emu/SysCalls/Modules/cellSail.h index 9361081976..55dc556dc3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSail.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSail.h @@ -110,28 +110,28 @@ typedef void(*CellSailMemAllocatorFuncFree)(u32 pArg, u32 boundary, u32 pMemory) typedef int(*CellSailSoundAdapterFuncMakeup)(u32 pArg); typedef int(*CellSailSoundAdapterFuncCleanup)(u32 pArg); -typedef void(*CellSailSoundAdapterFuncFormatChanged)(u32 pArg, mem_ptr_t pFormat, u32 sessionId); +typedef void(*CellSailSoundAdapterFuncFormatChanged)(u32 pArg, vm::ptr pFormat, u32 sessionId); typedef int(*CellSailGraphicsAdapterFuncMakeup)(u32 pArg); typedef int(*CellSailGraphicsAdapterFuncCleanup)(u32 pArg); -typedef void(*CellSailGraphicsAdapterFuncFormatChanged)(u32 pArg, mem_ptr_t pFormat, u32 sessionId); +typedef void(*CellSailGraphicsAdapterFuncFormatChanged)(u32 pArg, vm::ptr pFormat, u32 sessionId); typedef int(*CellSailGraphicsAdapterFuncAllocFrame)(u32 pArg, u32 size, s32 num, u8 ppFrame); typedef int(*CellSailGraphicsAdapterFuncFreeFrame)(u32 pArg, s32 num, u8 ppFrame); typedef int(*CellSailSourceFuncMakeup)(u32 pArg, s8 pProtocolNames); typedef int(*CellSailSourceFuncCleanup)(u32 pArg); -typedef void(*CellSailSourceFuncOpen)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, mem_ptr_t pProfile); +typedef void(*CellSailSourceFuncOpen)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, vm::ptr pProfile); typedef void(*CellSailSourceFuncClose)(u32 pArg); -typedef void(*CellSailSourceFuncStart)(u32 pArg, mem_ptr_t pCommand, u32 sessionId); +typedef void(*CellSailSourceFuncStart)(u32 pArg, vm::ptr pCommand, u32 sessionId); typedef void(*CellSailSourceFuncStop)(u32 pArg); typedef void(*CellSailSourceFuncCancel)(u32 pArg); -typedef int(*CellSailSourceFuncCheckout)(u32 pArg, mem_ptr_t ppItem); -typedef int(*CellSailSourceFuncCheckin)(u32 pArg, mem_ptr_t pItem); +typedef int(*CellSailSourceFuncCheckout)(u32 pArg, vm::ptr ppItem); +typedef int(*CellSailSourceFuncCheckin)(u32 pArg, vm::ptr pItem); typedef int(*CellSailSourceFuncClear)(u32 pArg); typedef int(*CellSailSourceFuncRead)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize); typedef int(*CellSailSourceFuncReadSync)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize); typedef int(*CellSailSourceFuncGetCapabilities)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 pCapabilities); -typedef int(*CellSailSourceFuncInquireCapability)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, mem_ptr_t pCommand); +typedef int(*CellSailSourceFuncInquireCapability)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, vm::ptr pCommand); typedef void(*CellSailSourceCheckFuncError)(u32 pArg, s8 pMsg, s32 line); typedef int(*CellSailFsFuncOpen)(s8 pPath, s32 flag, s32 pFd, u32 pArg, u64 size); @@ -144,25 +144,25 @@ typedef int(*CellSailFsFuncCancel)(s32 fd); typedef int(*CellSailRendererAudioFuncMakeup)(u32 pArg); typedef int(*CellSailRendererAudioFuncCleanup)(u32 pArg); -typedef void(*CellSailRendererAudioFuncOpen)(u32 pArg, mem_ptr_t pInfo, u32 frameNum); +typedef void(*CellSailRendererAudioFuncOpen)(u32 pArg, vm::ptr pInfo, u32 frameNum); typedef void(*CellSailRendererAudioFuncClose)(u32 pArg); typedef void(*CellSailRendererAudioFuncStart)(u32 pArg, bool buffering); typedef void(*CellSailRendererAudioFuncStop)(u32 pArg, bool flush); typedef void(*CellSailRendererAudioFuncCancel)(u32 pArg); -typedef int(*CellSailRendererAudioFuncCheckout)(u32 pArg, mem_ptr_t ppInfo); -typedef int(*CellSailRendererAudioFuncCheckin)(u32 pArg, mem_ptr_t pInfo); +typedef int(*CellSailRendererAudioFuncCheckout)(u32 pArg, vm::ptr ppInfo); +typedef int(*CellSailRendererAudioFuncCheckin)(u32 pArg, vm::ptr pInfo); typedef int(*CellSailRendererVideoFuncMakeup)(u32 pArg); typedef int(*CellSailRendererVideoFuncCleanup)(u32 pArg); -typedef void(*CellSailRendererVideoFuncOpen)(u32 pArg, mem_ptr_t pInfo, u32 frameNum, u32 minFrameNum); +typedef void(*CellSailRendererVideoFuncOpen)(u32 pArg, vm::ptr pInfo, u32 frameNum, u32 minFrameNum); typedef void(*CellSailRendererVideoFuncClose)(u32 pArg); typedef void(*CellSailRendererVideoFuncStart)(u32 pArg, bool buffering); typedef void(*CellSailRendererVideoFuncStop)(u32 pArg, bool flush, bool keepRendering); typedef void(*CellSailRendererVideoFuncCancel)(u32 pArg); -typedef int(*CellSailRendererVideoFuncCheckout)(u32 pArg, mem_ptr_t ppInfo); -typedef int(*CellSailRendererVideoFuncCheckin)(u32 pArg, mem_ptr_t pInfo); +typedef int(*CellSailRendererVideoFuncCheckout)(u32 pArg, vm::ptr ppInfo); +typedef int(*CellSailRendererVideoFuncCheckin)(u32 pArg, vm::ptr pInfo); -typedef void(*CellSailPlayerFuncNotified)(u32 pArg, mem_ptr_t event, u64 arg0, u64 arg1); +typedef void(*CellSailPlayerFuncNotified)(u32 pArg, vm::ptr event, u64 arg0, u64 arg1); struct CellSailMemAllocatorFuncs { diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 506152dfe0..8a606fadc0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -9,7 +9,7 @@ //Module cellSpurs(0x000a, cellSpurs_init); Module *cellSpurs = nullptr; -#ifdef _WIN32 +#ifdef PRX_DEBUG extern u32 libsre; extern u32 libsre_rtoc; #endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp index 2f768a85a3..95c27a9a9e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp @@ -8,7 +8,7 @@ Module* cellSpursJq = nullptr; -#ifdef _WIN32 +#ifdef PRX_DEBUG #include "prx_libspurs_jq.h" u32 libspurs_jq; u32 libspurs_jq_rtoc; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 1daae5a56b..0ce8261e7e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -11,7 +11,7 @@ //Module cellSync("cellSync", cellSync_init); Module *cellSync = nullptr; -#ifdef _WIN32 +#ifdef PRX_DEBUG #include "prx_libsre.h" u32 libsre; u32 libsre_rtoc; @@ -1471,12 +1471,12 @@ s32 syncLFQueueCompletePushPointer(vm::ptr queue, s32 pointer, assert(0); } -s32 _cellSyncLFQueueCompletePushPointer(vm::ptr queue, s32 pointer, mem_func_ptr_t fpSendSignal) +s32 _cellSyncLFQueueCompletePushPointer(vm::ptr queue, s32 pointer, vm::ptr fpSendSignal) { cellSync->Todo("_cellSyncLFQueueCompletePushPointer(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x)", - queue.addr(), pointer, fpSendSignal.GetAddr()); + queue.addr(), pointer, fpSendSignal.addr()); - return syncLFQueueCompletePushPointer(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }); + return syncLFQueueCompletePushPointer(queue, pointer, fpSendSignal); } s32 syncLFQueueCompletePushPointer2(vm::ptr queue, s32 pointer, const std::function fpSendSignal) @@ -1487,13 +1487,13 @@ s32 syncLFQueueCompletePushPointer2(vm::ptr queue, s32 pointer, return CELL_OK; } -s32 _cellSyncLFQueueCompletePushPointer2(vm::ptr queue, s32 pointer, mem_func_ptr_t fpSendSignal) +s32 _cellSyncLFQueueCompletePushPointer2(vm::ptr queue, s32 pointer, vm::ptr fpSendSignal) { // arguments copied from _cellSyncLFQueueCompletePushPointer cellSync->Todo("_cellSyncLFQueueCompletePushPointer2(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x)", - queue.addr(), pointer, fpSendSignal.GetAddr()); + queue.addr(), pointer, fpSendSignal.addr()); - return syncLFQueueCompletePushPointer2(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }); + return syncLFQueueCompletePushPointer2(queue, pointer, fpSendSignal); } s32 _cellSyncLFQueuePushBody(vm::ptr queue, u32 buffer_addr, u32 isBlocking) @@ -1864,13 +1864,13 @@ s32 syncLFQueueCompletePopPointer(vm::ptr queue, s32 pointer, c assert(0); } -s32 _cellSyncLFQueueCompletePopPointer(vm::ptr queue, s32 pointer, mem_func_ptr_t fpSendSignal, u32 noQueueFull) +s32 _cellSyncLFQueueCompletePopPointer(vm::ptr queue, s32 pointer, vm::ptr fpSendSignal, u32 noQueueFull) { // arguments copied from _cellSyncLFQueueCompletePushPointer + unknown argument (noQueueFull taken from LFQueue2CompletePopPointer) cellSync->Todo("_cellSyncLFQueueCompletePopPointer(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x, noQueueFull=%d)", - queue.addr(), pointer, fpSendSignal.GetAddr(), noQueueFull); + queue.addr(), pointer, fpSendSignal.addr(), noQueueFull); - return syncLFQueueCompletePopPointer(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }, noQueueFull); + return syncLFQueueCompletePopPointer(queue, pointer, fpSendSignal, noQueueFull); } s32 syncLFQueueCompletePopPointer2(vm::ptr queue, s32 pointer, const std::function fpSendSignal, u32 noQueueFull) @@ -1881,13 +1881,13 @@ s32 syncLFQueueCompletePopPointer2(vm::ptr queue, s32 pointer, return CELL_OK; } -s32 _cellSyncLFQueueCompletePopPointer2(vm::ptr queue, s32 pointer, mem_func_ptr_t fpSendSignal, u32 noQueueFull) +s32 _cellSyncLFQueueCompletePopPointer2(vm::ptr queue, s32 pointer, vm::ptr fpSendSignal, u32 noQueueFull) { // arguments copied from _cellSyncLFQueueCompletePopPointer cellSync->Todo("_cellSyncLFQueueCompletePopPointer2(queue_addr=0x%x, pointer=%d, fpSendSignal_addr=0x%x, noQueueFull=%d)", - queue.addr(), pointer, fpSendSignal.GetAddr(), noQueueFull); + queue.addr(), pointer, fpSendSignal.addr(), noQueueFull); - return syncLFQueueCompletePopPointer2(queue, pointer, [fpSendSignal](u32 addr, u32 arg){ return fpSendSignal(addr, arg); }, noQueueFull); + return syncLFQueueCompletePopPointer2(queue, pointer, fpSendSignal, noQueueFull); } s32 _cellSyncLFQueuePopBody(vm::ptr queue, u32 buffer_addr, u32 isBlocking) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index 3ac09b97f1..700617edb5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -9,7 +9,7 @@ //Module cellSync2(0x0055, cellSync2_init); Module* cellSync2 = nullptr; -#ifdef _WIN32 +#ifdef PRX_DEBUG #include "prx_libsync2.h" u32 libsync2; u32 libsync2_rtoc; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 8ad66a0c32..aa13463ecb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -17,7 +17,7 @@ #include "cellSysutil.h" #include "cellSysutil_SaveData.h" -typedef void (*CellHddGameStatCallback)(mem_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set); +typedef void (*CellHddGameStatCallback)(vm::ptr cbResult, vm::ptr get, vm::ptr set); //void cellSysutil_init(); @@ -672,10 +672,10 @@ int cellSysCacheMount(mem_ptr_t param) return CELL_SYSCACHE_RET_OK_RELAYED; } -int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_t funcStat, u32 container) +int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, vm::ptr funcStat, u32 container) { cellSysutil->Warning("cellHddGameCheck(version=%d, dirName_addr=0x%xx, errDialog=%d, funcStat_addr=0x%x, container=%d)", - version, dirName_addr, errDialog, funcStat, container); + version, dirName_addr, errDialog, funcStat.addr(), container); std::string dirName = Memory.ReadString(dirName_addr); if (dirName.size() != 9) @@ -730,7 +730,7 @@ int cellHddGameCheck(u32 version, u32 dirName_addr, u32 errDialog, mem_func_ptr_ // TODO ? - funcStat(result.addr(), get.addr(), set.addr()); + funcStat(result, get, set); if (result->result != CELL_HDDGAME_CBRESULT_OK && result->result != CELL_HDDGAME_CBRESULT_OK_CANCEL) return CELL_HDDGAME_ERROR_CBRESULT; @@ -818,10 +818,10 @@ int cellWebBrowserEstimate2(const vm::ptr _config, vm::ptr> } extern int cellGameDataCheckCreate2(u32 version, vm::ptr dirName, u32 errDialog, - mem_func_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set)> funcStat, u32 container); + vm::ptr cbResult, vm::ptr get, vm::ptr set)> funcStat, u32 container); extern int cellGameDataCheckCreate(u32 version, vm::ptr dirName, u32 errDialog, - mem_func_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set)> funcStat, u32 container); + vm::ptr cbResult, vm::ptr get, vm::ptr set)> funcStat, u32 container); void cellSysutil_init() { diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index 8066857f18..6361e3d7b4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -214,7 +214,7 @@ void getSaveDataStat(SaveDataEntry entry, mem_ptr_t statGet memcpy(&statGet->fileList[i], &fileEntries[i], sizeof(CellSaveDataFileStat)); } -s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ptr_t result, const std::string& saveDataDir) +s32 modifySaveDataFiles(vm::ptr funcFile, vm::ptr result, const std::string& saveDataDir) { vm::var fileGet; vm::var fileSet; @@ -225,7 +225,7 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ fileGet->excSize = 0; while (true) { - funcFile(result.GetAddr(), fileGet.addr(), fileSet.addr()); + funcFile(result, fileGet, fileSet); if (result->result < 0) { cellSysutil->Error("modifySaveDataFiles: CellSaveDataFileCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; @@ -288,11 +288,11 @@ s32 modifySaveDataFiles(mem_func_ptr_t& funcFile, mem_ // Functions int cellSaveDataListSave2(u32 version, mem_ptr_t setList, mem_ptr_t setBuf, - mem_func_ptr_t funcList, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcList, vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr) { cellSysutil->Warning("cellSaveDataListSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=0x%x, userdata_addr=0x%x)", - version, setList.GetAddr(), setBuf.GetAddr(), funcList.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + version, setList.GetAddr(), setBuf.GetAddr(), funcList.addr(), funcStat.addr(), funcFile.addr(), container, userdata_addr); vm::var result; vm::var listGet; @@ -333,7 +333,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m memcpy(dirList[i].listParam, saveEntries[i].listParam.c_str(), CELL_SAVEDATA_SYSP_LPARAM_SIZE); } - funcList(result.addr(), listGet.addr(), listSet.addr()); + funcList(result, listGet, listSet); if (result->result < 0) { cellSysutil->Error("cellSaveDataListSave2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. @@ -354,7 +354,7 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m getSaveDataStat(saveEntries[selectedIndex], statGet.addr()); result->userdata_addr = userdata_addr; - funcStat(result.addr(), statGet.addr(), statSet.addr()); + funcStat(result, statGet, statSet); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { cellSysutil->Error("cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. @@ -366,17 +366,17 @@ int cellSaveDataListSave2(u32 version, mem_ptr_t setList, m */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result, saveBaseDir + (char*)statGet->dir.dirName); return ret; } int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, mem_ptr_t setBuf, - mem_func_ptr_t funcList, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcList, vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr) { cellSysutil->Warning("cellSaveDataListLoad2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcList_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=0x%x, userdata_addr=0x%x)", - version, setList.GetAddr(), setBuf.GetAddr(), funcList.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + version, setList.GetAddr(), setBuf.GetAddr(), funcList.addr(), funcStat.addr(), funcFile.addr(), container, userdata_addr); vm::var result; vm::var listGet; @@ -418,7 +418,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m memcpy(dirList[i].listParam, saveEntries[i].listParam.c_str(), CELL_SAVEDATA_SYSP_LPARAM_SIZE); } - funcList(result.addr(), listGet.addr(), listSet.addr()); + funcList(result, listGet, listSet); if (result->result < 0) { cellSysutil->Error("cellSaveDataListLoad2: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. @@ -439,7 +439,7 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m getSaveDataStat(saveEntries[selectedIndex], statGet.addr()); result->userdata_addr = userdata_addr; - funcStat(result.addr(), statGet.addr(), statSet.addr()); + funcStat(result, statGet, statSet); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { cellSysutil->Error("cellSaveDataListLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. @@ -451,17 +451,17 @@ int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, m */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result, saveBaseDir + (char*)statGet->dir.dirName); return ret; } int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, mem_ptr_t setBuf, - mem_func_ptr_t funcFixed, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcFixed, vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr) { cellSysutil->Warning("cellSaveDataFixedSave2(version=%d, setList_addr=0x%x, setBuf_addr=0x%x, funcFixed_addr=0x%x, funcStat_addr=0x%x, funcFile_addr=0x%x, container=0x%x, userdata_addr=0x%x)", - version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.addr(), funcStat.addr(), funcFile.addr(), container, userdata_addr); vm::var result; vm::var listGet; @@ -499,7 +499,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, memcpy(dirList[i].dirName, saveEntries[i].dirName.c_str(), CELL_SAVEDATA_DIRNAME_SIZE); memcpy(dirList[i].listParam, saveEntries[i].listParam.c_str(), CELL_SAVEDATA_SYSP_LPARAM_SIZE); } - funcFixed(result.addr(), listGet.addr(), fixedSet.addr()); + funcFixed(result, listGet, fixedSet); if (result->result < 0) { cellSysutil->Error("cellSaveDataFixedSave2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; @@ -509,7 +509,7 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, // TODO: Display the Yes|No dialog here result->userdata_addr = userdata_addr; - funcStat(result.addr(), statGet.addr(), statSet.addr()); + funcStat(result, statGet, statSet); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { cellSysutil->Error("cellSaveDataFixedSave2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. @@ -520,17 +520,17 @@ int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result, saveBaseDir + (char*)statGet->dir.dirName); return ret; } int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, mem_ptr_t setBuf, - mem_func_ptr_t funcFixed, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcFixed, vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr) { cellSysutil->Warning("cellSaveDataFixedLoad2(version=%d, setList_addr=0x%x, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", - version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + version, setList.GetAddr(), setBuf.GetAddr(), funcFixed.addr(), funcStat.addr(), funcFile.addr(), container, userdata_addr); vm::var result; vm::var listGet; @@ -568,7 +568,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, memcpy(dirList[i].dirName, saveEntries[i].dirName.c_str(), CELL_SAVEDATA_DIRNAME_SIZE); memcpy(dirList[i].listParam, saveEntries[i].listParam.c_str(), CELL_SAVEDATA_SYSP_LPARAM_SIZE); } - funcFixed(result.addr(), listGet.addr(), fixedSet.addr()); + funcFixed(result, listGet, fixedSet); if (result->result < 0) { cellSysutil->Error("cellSaveDataFixedLoad2: CellSaveDataFixedCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; @@ -578,7 +578,7 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, // TODO: Display the Yes|No dialog here result->userdata_addr = userdata_addr; - funcStat(result.addr(), statGet.addr(), statSet.addr()); + funcStat(result, statGet, statSet); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { cellSysutil->Error("cellSaveDataFixedLoad2: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. @@ -589,17 +589,17 @@ int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result, saveBaseDir + (char*)statGet->dir.dirName); return ret; } int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_t setBuf, - mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr) { cellSysutil->Warning("cellSaveDataAutoSave2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", - version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.addr(), funcFile.addr(), container, userdata_addr); vm::var result; vm::var statGet; @@ -630,7 +630,7 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ getSaveDataStat(saveEntries[0], statGet.addr()); // There should be only one element in this list result->userdata_addr = userdata_addr; - funcStat(result.addr(), statGet.addr(), statSet.addr()); + funcStat(result, statGet, statSet); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { @@ -642,17 +642,17 @@ int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result, saveBaseDir + (char*)statGet->dir.dirName); return CELL_SAVEDATA_RET_OK; } int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_t setBuf, - mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr) { cellSysutil->Warning("cellSaveDataAutoLoad2(version=%d, dirName_addr=0x%x, errDialog=%d, setBuf=0x%x, funcList=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", - version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + version, dirName_addr, errDialog, setBuf.GetAddr(), funcStat.addr(), funcFile.addr(), container, userdata_addr); vm::var result; vm::var statGet; @@ -680,7 +680,7 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ getSaveDataStat(saveEntries[0], statGet.addr()); // There should be only one element in this list result->userdata_addr = userdata_addr; - funcStat(result.addr(), statGet.addr(), statSet.addr()); + funcStat(result, statGet, statSet); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { @@ -692,20 +692,20 @@ int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_ */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result, saveBaseDir + (char*)statGet->dir.dirName); return CELL_SAVEDATA_RET_OK; } -int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, mem_func_ptr_t funcFixed, - mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) +int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, vm::ptr funcFixed, + vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr) { cellSysutil->Warning("cellSaveDataListAutoSave(version=%d, errDialog=%d, setBuf=0x%x, funcFixed=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", - version, errDialog, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + version, errDialog, setList.GetAddr(), setBuf.GetAddr(), funcFixed.addr(), funcStat.addr(), funcFile.addr(), container, userdata_addr); vm::var result; vm::var listGet; - vm::var listSet; + vm::var fixedSet; vm::var statGet; vm::var statSet; @@ -743,14 +743,15 @@ int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_tresult < 0) { cellSysutil->Error("cellSaveDataListAutoSave: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); + /*setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); if (listSet->newData.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { @@ -764,32 +765,32 @@ int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_tuserdata_addr = userdata_addr; - funcStat(result.addr(), statGet.addr(), statSet.addr()); + funcStat(result, statGet, statSet); Memory.Free(statGet->fileList.GetAddr()); if (result->result < 0) { cellSysutil->Error("cellSaveDataListAutoSave: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; - } + }*/ /*if (statSet->setParam.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); // TODO: This *is* wrong */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result, saveBaseDir + (char*)statGet->dir.dirName); return CELL_SAVEDATA_RET_OK; } -int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, mem_func_ptr_t funcFixed, - mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr) +int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, vm::ptr funcFixed, + vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr) { cellSysutil->Warning("cellSaveDataListAutoLoad(version=%d, errDialog=%d, setBuf=0x%x, funcFixed=0x%x, funcStat=0x%x, funcFile=0x%x, container=0x%x, userdata_addr=0x%x)", - version, errDialog, setList.GetAddr(), setBuf.GetAddr(), funcFixed.GetAddr(), funcStat.GetAddr(), funcFile.GetAddr(), container, userdata_addr); + version, errDialog, setList.GetAddr(), setBuf.GetAddr(), funcFixed.addr(), funcStat.addr(), funcFile.addr(), container, userdata_addr); vm::var result; vm::var listGet; - vm::var listSet; + vm::var fixedSet; vm::var statGet; vm::var statSet; @@ -827,14 +828,15 @@ int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_tresult < 0) { cellSysutil->Error("cellSaveDataListAutoLoad: CellSaveDataListCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; } - setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); + /*setSaveDataList(saveEntries, (u32)listSet->fixedList.GetAddr(), listSet->fixedListNum); if (listSet->newData.GetAddr()) addNewSaveDataEntry(saveEntries, (u32)listSet->newData.GetAddr()); if (saveEntries.size() == 0) { @@ -854,14 +856,14 @@ int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_tresult < 0) { cellSysutil->Error("cellSaveDataListAutoLoad: CellSaveDataStatCallback failed."); // TODO: Once we verify that the entire SysCall is working, delete this debug error message. return CELL_SAVEDATA_ERROR_CBRESULT; - } + }*/ /*if (statSet->setParam.GetAddr()) // TODO: Write PARAM.SFO file */ // Enter the loop where the save files are read/created/deleted. - s32 ret = modifySaveDataFiles(funcFile, result.addr(), saveBaseDir + (char*)statGet->dir.dirName); + s32 ret = modifySaveDataFiles(funcFile, result, saveBaseDir + (char*)statGet->dir.dirName); return CELL_SAVEDATA_RET_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.h b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.h index 6dc680cf92..6ec2ea1605 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.h @@ -247,11 +247,11 @@ struct CellSaveDataDoneGet // Callback Functions -typedef void (*CellSaveDataFixedCallback)(mem_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set); -typedef void (*CellSaveDataListCallback) (mem_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set); -typedef void (*CellSaveDataStatCallback) (mem_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set); -typedef void (*CellSaveDataFileCallback) (mem_ptr_t cbResult, mem_ptr_t get, mem_ptr_t set); -typedef void (*CellSaveDataDoneCallback) (mem_ptr_t cbResult, mem_ptr_t get); +typedef void(*CellSaveDataFixedCallback)(vm::ptr cbResult, vm::ptr get, vm::ptr set); +typedef void(*CellSaveDataListCallback) (vm::ptr cbResult, vm::ptr get, vm::ptr set); +typedef void(*CellSaveDataStatCallback) (vm::ptr cbResult, vm::ptr get, vm::ptr set); +typedef void(*CellSaveDataFileCallback) (vm::ptr cbResult, vm::ptr get, vm::ptr set); +typedef void(*CellSaveDataDoneCallback) (vm::ptr cbResult, vm::ptr get); // Auxiliary Structs @@ -274,31 +274,31 @@ struct SaveDataEntry // Function declarations int cellSaveDataListSave2(u32 version, mem_ptr_t setList, mem_ptr_t setBuf, - mem_func_ptr_t funcList, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcList, vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr); int cellSaveDataListLoad2(u32 version, mem_ptr_t setList, mem_ptr_t setBuf, - mem_func_ptr_t funcList, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcList, vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr); int cellSaveDataFixedSave2(u32 version, mem_ptr_t setList, mem_ptr_t setBuf, - mem_func_ptr_t funcFixed, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcFixed, vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr); int cellSaveDataFixedLoad2(u32 version, mem_ptr_t setList, mem_ptr_t setBuf, - mem_func_ptr_t funcFixed, mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcFixed, vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr); int cellSaveDataAutoSave2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_t setBuf, - mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr); int cellSaveDataAutoLoad2(u32 version, u32 dirName_addr, u32 errDialog, mem_ptr_t setBuf, - mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, + vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr); -int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, mem_func_ptr_t funcFixed, - mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr); +int cellSaveDataListAutoSave(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, vm::ptr funcFixed, + vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr); -int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, mem_func_ptr_t funcFixed, - mem_func_ptr_t funcStat, mem_func_ptr_t funcFile, u32 container, u32 userdata_addr); \ No newline at end of file +int cellSaveDataListAutoLoad(u32 version, u32 errDialog, mem_ptr_t setList, mem_ptr_t setBuf, vm::ptr funcFixed, + vm::ptr funcStat, vm::ptr funcFile, u32 container, u32 userdata_addr); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.h b/rpcs3/Emu/SysCalls/Modules/cellVdec.h index 10fb65a16e..e36b792526 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.h +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.h @@ -167,7 +167,7 @@ struct CellVdecPicFormat u8 alpha; }; -typedef mem_func_ptr_t CellVdecCbMsg; +typedef void(*CellVdecCbMsg)(u32 handle_addr, CellVdecMsgType msgType, int msgData, u32 cbArg_addr); // Callback Function Information struct CellVdecCb diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 9b7b6b1bb0..3969646ff9 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -136,10 +136,10 @@ int sceNpTrophyCreateHandle(vm::ptr> handle) return CELL_OK; } -int sceNpTrophyRegisterContext(u32 context, u32 handle, mem_func_ptr_t statusCb, u32 arg_addr, u64 options) +int sceNpTrophyRegisterContext(u32 context, u32 handle, vm::ptr statusCb, u32 arg_addr, u64 options) { sceNpTrophy->Warning("sceNpTrophyRegisterContext(context=%d, handle=%d, statusCb_addr=0x%x, arg_addr=0x%x, options=0x%llx)", - context, handle, statusCb.GetAddr(), arg_addr, options); + context, handle, statusCb.addr(), arg_addr, options); if (!(s_npTrophyInstance.m_bInitialized)) return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED; diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index fb0fd704b5..298538f481 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -150,7 +150,7 @@ std::atomic g_FsAioReadID( 0 ); std::atomic g_FsAioReadCur( 0 ); bool aio_init = false; -void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_t xaio, int error, int xid, u64 size)> func) +void fsAioRead(u32 fd, vm::ptr aio, int xid, vm::ptr xaio, int error, int xid, u64 size)> func) { while (g_FsAioReadCur != xid) { @@ -199,9 +199,9 @@ void fsAioRead(u32 fd, mem_ptr_t aio, int xid, mem_func_ptr_t aio, vm::ptr> aio_id, mem_func_ptr_t xaio, int error, int xid, u64 size)> func) +int cellFsAioRead(vm::ptr aio, vm::ptr> aio_id, vm::ptr xaio, int error, int xid, u64 size)> func) { - sys_fs->Warning("cellFsAioRead(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.GetAddr(), aio_id.addr(), func.GetAddr()); + sys_fs->Warning("cellFsAioRead(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.addr(), aio_id.addr(), func.addr()); if (!aio_init) { @@ -228,9 +228,9 @@ int cellFsAioRead(mem_ptr_t aio, vm::ptr> aio_id, mem_func_ return CELL_OK; } -int cellFsAioWrite(mem_ptr_t aio, vm::ptr> aio_id, mem_func_ptr_t xaio, int error, int xid, u64 size)> func) +int cellFsAioWrite(vm::ptr aio, vm::ptr> aio_id, vm::ptr xaio, int error, int xid, u64 size)> func) { - sys_fs->Todo("cellFsAioWrite(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.GetAddr(), aio_id.addr(), func.GetAddr()); + sys_fs->Todo("cellFsAioWrite(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.addr(), aio_id.addr(), func.addr()); // TODO: diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 0f58bfe074..77470ce7f4 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -681,9 +681,9 @@ s32 cellFsStReadWait(u32 fd, u64 size) return CELL_OK; } -s32 cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_t func) +s32 cellFsStReadWaitCallback(u32 fd, u64 size, vm::ptr func) { - sys_fs->Todo("cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.GetAddr()); + sys_fs->Todo("cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.addr()); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h index 132a501fc4..df017a78d3 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h @@ -157,4 +157,4 @@ s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, vm::ptr> rsize); s32 cellFsStReadGetCurrentAddr(u32 fd, vm::ptr> addr_addr, vm::ptr> size); s32 cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size); s32 cellFsStReadWait(u32 fd, u64 size); -s32 cellFsStReadWaitCallback(u32 fd, u64 size, mem_func_ptr_t func); +s32 cellFsStReadWaitCallback(u32 fd, u64 size, vm::ptr func);