From 36e691c2db0bb8a7010fcfc1c98f87f3c6ab1170 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 27 Aug 2014 01:09:50 +0400 Subject: [PATCH 01/19] Small fix --- rpcs3/Emu/SysCalls/SC_FUNC.h | 44 ++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/SysCalls/SC_FUNC.h b/rpcs3/Emu/SysCalls/SC_FUNC.h index 4a773bcf6..aa3cc4c5d 100644 --- a/rpcs3/Emu/SysCalls/SC_FUNC.h +++ b/rpcs3/Emu/SysCalls/SC_FUNC.h @@ -23,26 +23,46 @@ namespace detail template struct bind_arg { - static __forceinline T func(PPUThread& CPU) { return (T&)CPU.GPR[g_count + 2]; } + static_assert(sizeof(T) <= 8, "Wrong argument type for ARG_GENERAL"); + + static __forceinline T func(PPUThread& CPU) + { + return (T&)CPU.GPR[g_count + 2]; + } }; template struct bind_arg { - static __forceinline T func(PPUThread& CPU) { return (T&)CPU.FPR[f_count]; } + static_assert(sizeof(T) <= 8, "Wrong argument type for ARG_FLOAT"); + + static __forceinline T func(PPUThread& CPU) + { + return (T&)CPU.FPR[f_count]; + } }; template struct bind_arg { - static_assert(v_count == 0, "ARG_VECTOR not supported"); - static __forceinline T func(PPUThread& CPU) { return T(); } + static_assert(sizeof(T) == 16, "Wrong argument type for ARG_VECTOR"); + + static __forceinline T func(PPUThread& CPU) + { + return (T&)CPU.VPR[v_count + 1]._u128; + } }; template struct bind_arg { - static __forceinline T func(PPUThread& CPU) { return CPU.GetStackArg(8 + std::max(g_count - 8, 0) + std::max(f_count - 12, 0)); } + static_assert(sizeof(T) <= 8 && v_count <= 12, "Wrong argument type for ARG_STACK"); + + static __forceinline T func(PPUThread& CPU) + { + const u64 res = CPU.GetStackArg(8 + std::max(g_count - 8, 0) + std::max(f_count - 12, 0)); + return (T&)res; + } }; template @@ -96,16 +116,16 @@ namespace detail template static __forceinline std::tuple iterate(PPUThread& CPU) { + static_assert(!std::is_pointer::value, "Invalid function argument type: pointer"); // TODO: check calculations - const bind_arg_type t = std::is_floating_point::value + const bool is_float = std::is_floating_point::value; + const bind_arg_type t = is_float ? ((f_count >= 12) ? ARG_STACK : ARG_FLOAT) : ((g_count >= 8) ? ARG_STACK : ARG_GENERAL); - const int g = g_count + (std::is_floating_point::value ? 0 : 1); - const int f = f_count + (std::is_floating_point::value ? 1 : 0); - const int v = v_count; // TODO: vector arguments support (if possible) - static_assert(!v_count, "ARG_VECTOR not supported"); - static_assert(!std::is_pointer::value, "Invalid function argument type: pointer"); - return std::tuple_cat, std::tuple>(std::tuple(bind_arg::func(CPU)), iterate(CPU)); + const int g = g_count + (is_float ? 0 : 1); + const int f = f_count + (is_float ? 1 : 0); + const int v = v_count; // TODO: vector argument support (if possible) + return std::tuple_cat(std::tuple(bind_arg::func(CPU)), iterate(CPU)); } template From bbf7508d41587d54c10f9bcb57efc522fb649776 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 27 Aug 2014 02:44:32 +0400 Subject: [PATCH 02/19] cellSync2 stub activated --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 7 +- rpcs3/Emu/SysCalls/Modules.cpp | 13 +++ rpcs3/Emu/SysCalls/Modules.h | 4 + rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 23 +----- rpcs3/Emu/SysCalls/Modules/cellSync2.cpp | 100 +++++++++++------------ rpcs3/Emu/SysCalls/Modules/cellSync2.h | 18 ++++ rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 83 ++++++++++--------- 8 files changed, 134 insertions(+), 115 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellSync2.h diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index a5b42c603..4b0dd03e2 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -48,8 +48,9 @@ extern Module *cellSail; extern void cellSpurs_init(); extern Module *cellSpurs; extern void cellSync_init(); -extern void cellSync_load(); extern Module *cellSync; +extern void cellSync2_init(); +extern Module *cellSync2; extern void cellSysmodule_init(); extern Module *cellSysmodule; extern void cellSysutil_init(); @@ -253,7 +254,9 @@ void ModuleManager::init() cellSpurs = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x000a, cellSpurs_init); cellSync = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back("cellSync", cellSync_init, cellSync_load, nullptr); + m_mod_init.emplace_back("cellSync", cellSync_init); + cellSync2 = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back("cellSync2", cellSync2_init); cellSysutil = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0015, cellSysutil_init); cellSysutilAp = static_cast (&(m_mod_init.back())) + 1; diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 64d1bda99..aa44809d2 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/Static.h" @@ -187,4 +188,16 @@ IdManager& Module::GetIdManager() const void Module::PushNewFuncSub(SFunc* func) { Emu.GetSFuncManager().push_back(func); +} + +void fix_import(Module* module, u32 func, u32 addr) +{ + Memory.Write32(addr + 0x0, 0x3d600000 | (func >> 16)); /* lis r11, (func_id >> 16) */ + Memory.Write32(addr + 0x4, 0x616b0000 | (func & 0xffff)); /* ori r11, (func_id & 0xffff) */ + Memory.Write32(addr + 0x8, 0x60000000); /* nop */ + // leave rtoc saving at 0xC + Memory.Write64(addr + 0x10, 0x440000024e800020ull); /* sc + blr */ + Memory.Write64(addr + 0x18, 0x6000000060000000ull); /* nop + nop */ + + module->Load(func); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index 776ab3020..c6c72cbf6 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -162,6 +162,10 @@ __forceinline void Module::AddFuncSub(const char group[8], const u64 ops[], cons PushNewFuncSub(sf); } +void fix_import(Module* module, u32 func, u32 addr); + +#define FIX_IMPORT(module, func, addr) fix_import(module, getFunctionId(#func), addr) + #define REG_SUB(module, group, name, ...) \ static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ module->AddFuncSub(group, name ## _table, #name, name) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index bd1e4fcb7..a9a3f6d84 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -14,22 +14,7 @@ Module *cellSync = nullptr; #ifdef PRX_DEBUG #include "prx_libsre.h" u32 libsre; -u32 libsre_rtoc; - -void fix_import(Module* module, u32 func, u32 addr) -{ - Memory.Write32(addr + 0x0, 0x3d600000 | (func >> 16)); /* lis r11, (func_id >> 16) */ - Memory.Write32(addr + 0x4, 0x616b0000 | (func & 0xffff)); /* ori r11, (func_id & 0xffff) */ - Memory.Write32(addr + 0x8, 0x60000000); /* nop */ - // leave rtoc saving at 0xC - Memory.Write64(addr + 0x10, 0x440000024e800020ull); /* sc + blr */ - Memory.Write64(addr + 0x18, 0x6000000060000000ull); /* nop + nop */ - - module->Load(func); -} - -#define FIX_IMPORT(module, func, addr) fix_import(module, getFunctionId(#func), addr) - +u32 libsre_rtoc; #endif s32 syncMutexInitialize(mem_ptr_t mutex) @@ -2217,10 +2202,7 @@ void cellSync_init() cellSync->AddFunc(0xe1bc7add, _cellSyncLFQueuePopBody); cellSync->AddFunc(0xe9bf2110, _cellSyncLFQueueGetPushPointer); cellSync->AddFunc(0xfe74e8e7, _cellSyncLFQueueCompletePopPointer); -} -void cellSync_load() -{ #ifdef PRX_DEBUG CallAfter([]() { @@ -2317,5 +2299,4 @@ void cellSync_load() #endif } -#undef PRX_DEBUG -#undef FIX_IMPORT \ No newline at end of file +#undef PRX_DEBUG \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index 1a7017de4..6097de8ea 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -1,25 +1,19 @@ #include "stdafx.h" -#if 0 +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/Modules.h" -void cellSync2_init(); -Module cellSync2(0x0055, cellSync2_init); +#include "cellSync2.h" -// Return Codes -enum -{ - CELL_SYNC2_ERROR_AGAIN = 0x80410C01, - CELL_SYNC2_ERROR_INVAL = 0x80410C02, - CELL_SYNC2_ERROR_NOMEM = 0x80410C04, - CELL_SYNC2_ERROR_DEADLK = 0x80410C08, - CELL_SYNC2_ERROR_PERM = 0x80410C09, - CELL_SYNC2_ERROR_BUSY = 0x80410C0A, - CELL_SYNC2_ERROR_STAT = 0x80410C0F, - CELL_SYNC2_ERROR_ALIGN = 0x80410C10, - CELL_SYNC2_ERROR_NULL_POINTER = 0x80410C11, - CELL_SYNC2_ERROR_NOT_SUPPORTED_THREAD = 0x80410C12, - CELL_SYNC2_ERROR_NO_NOTIFIER = 0x80410C13, - CELL_SYNC2_ERROR_NO_SPU_CONTEXT_STORAGE = 0x80410C14, -}; +//void cellSync2_init(); +//Module cellSync2(0x0055, cellSync2_init); +Module* cellSync2 = nullptr; + +#ifdef PRX_DEBUG +#include "prx_libsync2.h" +u32 libsync2; +u32 libsync2_rtoc; +#endif int _cellSync2MutexAttributeInitialize() { @@ -215,40 +209,42 @@ int cellSync2QueueGetDepth() void cellSync2_init() { - cellSync2.AddFunc(0x55836e73, _cellSync2MutexAttributeInitialize); - cellSync2.AddFunc(0xd51bfae7, cellSync2MutexEstimateBufferSize); - cellSync2.AddFunc(0xeb81a467, cellSync2MutexInitialize); - cellSync2.AddFunc(0x27f2d61c, cellSync2MutexFinalize); - cellSync2.AddFunc(0xa400d82e, cellSync2MutexLock); - cellSync2.AddFunc(0xa69c749c, cellSync2MutexTryLock); - cellSync2.AddFunc(0x0080fe88, cellSync2MutexUnlock); + cellSync2->AddFunc(0x55836e73, _cellSync2MutexAttributeInitialize); + cellSync2->AddFunc(0xd51bfae7, cellSync2MutexEstimateBufferSize); + cellSync2->AddFunc(0xeb81a467, cellSync2MutexInitialize); + cellSync2->AddFunc(0x27f2d61c, cellSync2MutexFinalize); + cellSync2->AddFunc(0xa400d82e, cellSync2MutexLock); + cellSync2->AddFunc(0xa69c749c, cellSync2MutexTryLock); + cellSync2->AddFunc(0x0080fe88, cellSync2MutexUnlock); - cellSync2.AddFunc(0xdf3c532a, _cellSync2CondAttributeInitialize); - cellSync2.AddFunc(0x5b1e4d7a, cellSync2CondEstimateBufferSize); - cellSync2.AddFunc(0x58be9a0f, cellSync2CondInitialize); - cellSync2.AddFunc(0x63062249, cellSync2CondFinalize); - cellSync2.AddFunc(0xbc96d751, cellSync2CondWait); - cellSync2.AddFunc(0x871af804, cellSync2CondSignal); - cellSync2.AddFunc(0x8aae07c2, cellSync2CondSignalAll); + cellSync2->AddFunc(0xdf3c532a, _cellSync2CondAttributeInitialize); + cellSync2->AddFunc(0x5b1e4d7a, cellSync2CondEstimateBufferSize); + cellSync2->AddFunc(0x58be9a0f, cellSync2CondInitialize); + cellSync2->AddFunc(0x63062249, cellSync2CondFinalize); + cellSync2->AddFunc(0xbc96d751, cellSync2CondWait); + cellSync2->AddFunc(0x871af804, cellSync2CondSignal); + cellSync2->AddFunc(0x8aae07c2, cellSync2CondSignalAll); - cellSync2.AddFunc(0x2d77fe17, _cellSync2SemaphoreAttributeInitialize); - cellSync2.AddFunc(0x74c2780f, cellSync2SemaphoreEstimateBufferSize); - cellSync2.AddFunc(0xc5dee254, cellSync2SemaphoreInitialize); - cellSync2.AddFunc(0x164843a7, cellSync2SemaphoreFinalize); - cellSync2.AddFunc(0xd1b0d146, cellSync2SemaphoreAcquire); - cellSync2.AddFunc(0x5e4b0f87, cellSync2SemaphoreTryAcquire); - cellSync2.AddFunc(0x0c2983ac, cellSync2SemaphoreRelease); - cellSync2.AddFunc(0x4e2ee031, cellSync2SemaphoreGetCount); + cellSync2->AddFunc(0x2d77fe17, _cellSync2SemaphoreAttributeInitialize); + cellSync2->AddFunc(0x74c2780f, cellSync2SemaphoreEstimateBufferSize); + cellSync2->AddFunc(0xc5dee254, cellSync2SemaphoreInitialize); + cellSync2->AddFunc(0x164843a7, cellSync2SemaphoreFinalize); + cellSync2->AddFunc(0xd1b0d146, cellSync2SemaphoreAcquire); + cellSync2->AddFunc(0x5e4b0f87, cellSync2SemaphoreTryAcquire); + cellSync2->AddFunc(0x0c2983ac, cellSync2SemaphoreRelease); + cellSync2->AddFunc(0x4e2ee031, cellSync2SemaphoreGetCount); - cellSync2.AddFunc(0x5e00d433, _cellSync2QueueAttributeInitialize); - cellSync2.AddFunc(0xc08cc0f9, cellSync2QueueEstimateBufferSize); - cellSync2.AddFunc(0xf125e044, cellSync2QueueInitialize); - cellSync2.AddFunc(0x6af85cdf, cellSync2QueueFinalize); - cellSync2.AddFunc(0x7d967d91, cellSync2QueuePush); - cellSync2.AddFunc(0x7fd479fe, cellSync2QueueTryPush); - cellSync2.AddFunc(0xd83ab0c9, cellSync2QueuePop); - cellSync2.AddFunc(0x0c9a0ea9, cellSync2QueueTryPop); - cellSync2.AddFunc(0x12f0a27d, cellSync2QueueGetSize); - cellSync2.AddFunc(0xf0e1471c, cellSync2QueueGetDepth); -} + cellSync2->AddFunc(0x5e00d433, _cellSync2QueueAttributeInitialize); + cellSync2->AddFunc(0xc08cc0f9, cellSync2QueueEstimateBufferSize); + cellSync2->AddFunc(0xf125e044, cellSync2QueueInitialize); + cellSync2->AddFunc(0x6af85cdf, cellSync2QueueFinalize); + cellSync2->AddFunc(0x7d967d91, cellSync2QueuePush); + cellSync2->AddFunc(0x7fd479fe, cellSync2QueueTryPush); + cellSync2->AddFunc(0xd83ab0c9, cellSync2QueuePop); + cellSync2->AddFunc(0x0c9a0ea9, cellSync2QueueTryPop); + cellSync2->AddFunc(0x12f0a27d, cellSync2QueueGetSize); + cellSync2->AddFunc(0xf0e1471c, cellSync2QueueGetDepth); + +#ifdef PRX_DEBUG #endif +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.h b/rpcs3/Emu/SysCalls/Modules/cellSync2.h new file mode 100644 index 000000000..1db88a8f7 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.h @@ -0,0 +1,18 @@ +#pragma once + +// Return Codes +enum +{ + CELL_SYNC2_ERROR_AGAIN = 0x80410C01, + CELL_SYNC2_ERROR_INVAL = 0x80410C02, + CELL_SYNC2_ERROR_NOMEM = 0x80410C04, + CELL_SYNC2_ERROR_DEADLK = 0x80410C08, + CELL_SYNC2_ERROR_PERM = 0x80410C09, + CELL_SYNC2_ERROR_BUSY = 0x80410C0A, + CELL_SYNC2_ERROR_STAT = 0x80410C0F, + CELL_SYNC2_ERROR_ALIGN = 0x80410C10, + CELL_SYNC2_ERROR_NULL_POINTER = 0x80410C11, + CELL_SYNC2_ERROR_NOT_SUPPORTED_THREAD = 0x80410C12, + CELL_SYNC2_ERROR_NO_NOTIFIER = 0x80410C13, + CELL_SYNC2_ERROR_NO_SPU_CONTEXT_STORAGE = 0x80410C14, +}; \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 36a7cbe50..f7c503046 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -371,6 +371,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index cfe45e61b..6254e2035 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -60,9 +60,6 @@ {84c34dd1-4c49-4ecf-8ee2-4165c14f24be} - - {ead7494f-a872-4b4d-a864-1a61c3b6012f} - {fadb4b36-57af-4583-891d-d22ff369e266} @@ -75,6 +72,9 @@ {fcac6852-b45f-4cf2-afee-cf56bcea14e5} + + {ead7494f-a872-4b4d-a864-1a61c3b6012f} + @@ -369,109 +369,106 @@ Emu\Cell - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused Emu\SysCalls\Modules - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused Emu\Cell\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused - - - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused Utilities @@ -605,6 +602,9 @@ Utilities + + Emu\SysCalls\Modules + @@ -974,10 +974,10 @@ Emu\Cell - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused - Emu\Cell\currently_unused + Emu\SysCalls\currently_unused Emu\SysCalls @@ -1159,5 +1159,8 @@ Emu\Io\Null + + Emu\SysCalls\Modules + \ No newline at end of file From 0fb45cccbc043c2f897178021ae024e947b41973 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 27 Aug 2014 17:11:34 +0400 Subject: [PATCH 03/19] cellSync2 stub --- rpcs3/Emu/Cell/PPUInterpreter.h | 20 +- rpcs3/Emu/SysCalls/Modules.cpp | 52 +++ rpcs3/Emu/SysCalls/Modules.h | 2 + rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp | 398 ++++++++++++++--------- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 54 +-- rpcs3/Emu/SysCalls/Modules/cellSync2.cpp | 188 +++++++++++ 6 files changed, 499 insertions(+), 215 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 89524cfd2..4eeed301a 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -64,24 +64,22 @@ private: void SysCall() { - CPU.m_last_syscall = CPU.GPR[11]; - SysCalls::DoSyscall(CPU.GPR[11]); + const u64 sc = CPU.GPR[11]; + const u64 old_sc = CPU.m_last_syscall; + + CPU.m_last_syscall = sc; + SysCalls::DoSyscall(sc); if(Ini.HLELogging.GetValue()) { - LOG_WARNING(PPU, "SysCall[0x%llx ('%s')] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], SysCalls::GetHLEFuncName(CPU.GPR[11]).c_str(), CPU.GPR[3], CPU.PC); + LOG_WARNING(PPU, "SysCall[0x%llx ('%s')] done with code [0x%llx]! #pc: 0x%llx", + sc, SysCalls::GetHLEFuncName(sc).c_str(), CPU.GPR[3], CPU.PC); } - /*else if ((s64)CPU.GPR[3] < 0) // probably, error code - { - LOG_ERROR(PPU, "SysCall[0x%llx] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); - if(CPU.GPR[11] > 1024) - SysCalls::DoFunc(CPU.GPR[11]); - }*/ #ifdef HLE_CALL_DEBUG - LOG_NOTICE(PPU, "SysCall[%lld] done with code [0x%llx]! #pc: 0x%llx", CPU.GPR[11], CPU.GPR[3], CPU.PC); + LOG_NOTICE(PPU, "SysCall[%lld] done with code [0x%llx]! #pc: 0x%llx", sc, CPU.GPR[3], CPU.PC); #endif - CPU.m_last_syscall = 0; + CPU.m_last_syscall = old_sc; } void NULL_OP() diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index aa44809d2..b7fe76598 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -200,4 +200,56 @@ void fix_import(Module* module, u32 func, u32 addr) Memory.Write64(addr + 0x18, 0x6000000060000000ull); /* nop + nop */ module->Load(func); +} + +void fix_relocs(Module* module, u32 lib, u32 start, u32 end, u32 seg2) +{ + // start of table: + // addr = (u64) addr - seg2, (u32) 1, (u32) 1, (u64) ptr + // addr = (u64) addr - seg2, (u32) 0x101, (u32) 1, (u64) ptr - seg2 (???) + // addr = (u64) addr, (u32) 0x100, (u32) 1, (u64) ptr - seg2 (???) + // addr = (u64) addr, (u32) 0, (u32) 1, (u64) ptr (???) + + for (u32 i = lib + start; i < lib + end; i += 24) + { + u64 addr = Memory.Read64(i); + const u64 flag = Memory.Read64(i + 8); + + if (flag == 0x10100000001ull) + { + addr = addr + seg2 + lib; + u32 value = Memory.Read32(addr); + assert(value == Memory.Read64(i + 16) + seg2); + Memory.Write32(addr, value + lib); + } + else if (flag == 0x100000001ull) + { + addr = addr + seg2 + lib; + u32 value = Memory.Read32(addr); + assert(value == Memory.Read64(i + 16)); + Memory.Write32(addr, value + lib); + } + else if (flag == 0x10000000001ull) + { + addr = addr + lib; + u32 value = Memory.Read32(addr); + assert(value == Memory.Read64(i + 16) + seg2); + Memory.Write32(addr, value + lib); + } + else if (flag == 1) + { + addr = addr + lib; + u32 value = Memory.Read32(addr); + assert(value == Memory.Read64(i + 16)); + Memory.Write32(addr, value + lib); + } + else if (flag == 0x10000000004ull || flag == 0x10000000006ull) + { + // seems to be instruction modifiers for imports (done in other way in FIX_IMPORT) + } + else + { + module->Notice("fix_relocs(): 0x%x : 0x%llx", i - lib, flag); + } + } } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index c6c72cbf6..0f2200094 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -166,6 +166,8 @@ void fix_import(Module* module, u32 func, u32 addr); #define FIX_IMPORT(module, func, addr) fix_import(module, getFunctionId(#func), addr) +void fix_relocs(Module* module, u32 lib, u32 start, u32 end, u32 seg2); + #define REG_SUB(module, group, name, ...) \ static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ module->AddFuncSub(group, name ## _table, #name, name) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 16860d49a..d11100efe 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -115,11 +115,11 @@ s32 cellSpursAttributeSetNamePrefix(mem_ptr_t attr, const me s32 cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t attr) { - cellSpurs->Warning("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x7150, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } @@ -159,525 +159,553 @@ s32 cellSpursAttributeEnableSystemWorkload(mem_ptr_t attr, m s32 cellSpursGetSpuThreadGroupId(mem_ptr_t spurs, mem32_t group) { - cellSpurs->Warning("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)", spurs.GetAddr(), group.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)", spurs.GetAddr(), group.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x8B30, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetNumSpuThread(mem_ptr_t spurs, mem32_t nThreads) { - cellSpurs->Warning("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), nThreads.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), nThreads.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x8B78, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetSpuThreadId(mem_ptr_t spurs, mem32_t thread, mem32_t nThreads) { - cellSpurs->Warning("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)", spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x8A98, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursSetMaxContention(mem_ptr_t spurs, u32 workloadId, u32 maxContention) { - cellSpurs->Warning("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%d, maxContention=%d)", spurs.GetAddr(), workloadId, maxContention); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%d, maxContention=%d)", spurs.GetAddr(), workloadId, maxContention); return GetCurrentPPUThread().FastCall2(libsre + 0x8E90, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursSetPriorities(mem_ptr_t spurs, u32 workloadId, const mem8_ptr_t priorities) { - cellSpurs->Warning("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%d, priorities_addr=0x%x)", spurs.GetAddr(), workloadId, priorities.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%d, priorities_addr=0x%x)", spurs.GetAddr(), workloadId, priorities.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x8BC0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, mem8_ptr_t isPreemptible) { - cellSpurs->Warning("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible_addr=0x%x)", spurs.GetAddr(), isPreemptible.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible_addr=0x%x)", spurs.GetAddr(), isPreemptible.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0xF5A4, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t port, s32 isDynamic) { +#ifdef PRX_DEBUG cellSpurs->Warning("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=%d, port_addr=0x%x, isDynamic=%d)", spurs.GetAddr(), queue, port.GetAddr(), isDynamic); - -#ifdef PRX_DEBUG return GetCurrentPPUThread().FastCall2(libsre + 0xAFE0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) { - cellSpurs->Warning("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); return GetCurrentPPUThread().FastCall2(libsre + 0xB144, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEnableExceptionEventHandler(mem_ptr_t spurs, bool flag) { - cellSpurs->Warning("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%d)", spurs.GetAddr(), flag); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%d)", spurs.GetAddr(), flag); return GetCurrentPPUThread().FastCall2(libsre + 0xDCC0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursSetGlobalExceptionEventHandler(mem_ptr_t spurs, u32 eaHandler_addr, u32 arg_addr) { +#ifdef PRX_DEBUG cellSpurs->Warning("cellSpursSetGlobalExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x)", spurs.GetAddr(), eaHandler_addr, arg_addr); - -#ifdef PRX_DEBUG return GetCurrentPPUThread().FastCall2(libsre + 0xD6D0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t spurs) { - cellSpurs->Warning("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0xD674, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetInfo(mem_ptr_t spurs, mem_ptr_t info) { - cellSpurs->Warning("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0xE540, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursEventFlagInitialize(mem_ptr_t spurs, mem_ptr_t taskset, mem_ptr_t eventFlag, u32 flagClearMode, u32 flagDirection) { +#ifdef PRX_DEBUG cellSpurs->Warning("_cellSpursEventFlagInitialize(spurs_addr=0x%x, taskset_addr=0x%x, eventFlag_addr=0x%x, flagClearMode=%d, flagDirection=%d)", spurs.GetAddr(), taskset.GetAddr(), eventFlag.GetAddr(), flagClearMode, flagDirection); - -#ifdef PRX_DEBUG return GetCurrentPPUThread().FastCall2(libsre + 0x1564C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagAttachLv2EventQueue(mem_ptr_t eventFlag) { - cellSpurs->Warning("cellSpursEventFlagAttachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagAttachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x157B8, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagDetachLv2EventQueue(mem_ptr_t eventFlag) { - cellSpurs->Warning("cellSpursEventFlagDetachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagDetachLv2EventQueue(eventFlag_addr=0x%x)", eventFlag.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x15998, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) { - cellSpurs->Warning("cellSpursEventFlagWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=%d)", eventFlag.GetAddr(), mask.GetAddr(), mode); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=%d)", eventFlag.GetAddr(), mask.GetAddr(), mode); return GetCurrentPPUThread().FastCall2(libsre + 0x15E68, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagClear(mem_ptr_t eventFlag, u16 bits) { - cellSpurs->Warning("cellSpursEventFlagClear(eventFlag_addr=0x%x, bits=0x%x)", eventFlag.GetAddr(), bits); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagClear(eventFlag_addr=0x%x, bits=0x%x)", eventFlag.GetAddr(), bits); return GetCurrentPPUThread().FastCall2(libsre + 0x15E9C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagSet(mem_ptr_t eventFlag, u16 bits) { - cellSpurs->Warning("cellSpursEventFlagSet(eventFlag_addr=0x%x, bits=0x%x)", eventFlag.GetAddr(), bits); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagSet(eventFlag_addr=0x%x, bits=0x%x)", eventFlag.GetAddr(), bits); return GetCurrentPPUThread().FastCall2(libsre + 0x15F04, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagTryWait(mem_ptr_t eventFlag, mem16_t mask, u32 mode) { - cellSpurs->Warning("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=0x%x)", eventFlag.GetAddr(), mask.GetAddr(), mode); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, mask_addr=0x%x, mode=0x%x)", eventFlag.GetAddr(), mask.GetAddr(), mode); return GetCurrentPPUThread().FastCall2(libsre + 0x15E70, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagGetDirection(mem_ptr_t eventFlag, mem32_t direction) { - cellSpurs->Warning("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=0x%x)", eventFlag.GetAddr(), direction.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagGetDirection(eventFlag_addr=0x%x, direction_addr=0x%x)", eventFlag.GetAddr(), direction.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x162C4, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem32_t clear_mode) { - cellSpurs->Warning("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=0x%x)", eventFlag.GetAddr(), clear_mode.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagGetClearMode(eventFlag_addr=0x%x, clear_mode_addr=0x%x)", eventFlag.GetAddr(), clear_mode.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x16310, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursEventFlagGetTasksetAddress(mem_ptr_t eventFlag, mem_ptr_t taskset) { - cellSpurs->Warning("cellSpursEventFlagGetTasksetAddress(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursEventFlagGetTasksetAddress(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x1635C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursLFQueueInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17028, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursLFQueuePushBody() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x170AC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursLFQueueDetachLv2EventQueue() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x177CC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursLFQueueAttachLv2EventQueue() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x173EC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursLFQueuePopBody() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17238, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursLFQueueGetTasksetAddress() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17C34, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursQueueInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x163B4, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueuePopBody() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x16BF0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueuePushBody() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x168C4, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueueAttachLv2EventQueue() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1666C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueueDetachLv2EventQueue() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x16524, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueueGetTasksetAddress() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x16F50, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueueClear() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1675C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueueDepth() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1687C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueueGetEntrySize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x16FE0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueueSize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x167F0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursQueueGetDirection() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x16F98, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursCreateJobChainWithAttribute() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1898C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursCreateJobChain() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x18B84, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJoinJobChain() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x18DB0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursKickJobChain() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x18E8C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursJobChainAttributeInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1845C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetJobChainId() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x19064, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobChainSetExceptionEventHandler() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1A5A0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobChainUnsetExceptionEventHandler() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1A614, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetJobChainInfo() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1A7A0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobChainGetSpursAddress() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1A900, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursCreateTasksetWithAttribute() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x14BEC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } @@ -699,33 +727,33 @@ s32 cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_t taskset) { - cellSpurs->Warning("cellSpursJoinTaskset(taskset_addr=0x%x)", taskset.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursJoinTaskset(taskset_addr=0x%x)", taskset.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x152F8, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetTasksetId(mem_ptr_t taskset, mem32_t workloadId) { - cellSpurs->Warning("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x14EA0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursShutdownTaskset(mem_ptr_t taskset) { - cellSpurs->Warning("cellSpursShutdownTaskset(taskset_addr=0x%x)", taskset.GetAddr()); - #ifdef PRX_DEBUG + cellSpurs->Warning("cellSpursShutdownTaskset(taskset_addr=0x%x)", taskset.GetAddr()); return GetCurrentPPUThread().FastCall2(libsre + 0x14868, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } @@ -733,63 +761,67 @@ s32 cellSpursShutdownTaskset(mem_ptr_t taskset) s32 cellSpursCreateTask(mem_ptr_t taskset, mem32_t taskID, u32 elf_addr, u32 context_addr, u32 context_size, mem_ptr_t lsPattern, mem_ptr_t argument) { +#ifdef PRX_DEBUG cellSpurs->Warning("cellSpursCreateTask(taskset_addr=0x%x, taskID_addr=0x%x, elf_addr_addr=0x%x, context_addr_addr=0x%x, context_size=%d, lsPattern_addr=0x%x, argument_addr=0x%x)", taskset.GetAddr(), taskID.GetAddr(), elf_addr, context_addr, context_size, lsPattern.GetAddr(), argument.GetAddr()); - -#ifdef PRX_DEBUG return GetCurrentPPUThread().FastCall2(libsre + 0x12414, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursSendSignal(mem_ptr_t taskset, u32 taskID) { - cellSpurs->Warning("_cellSpursSendSignal(taskset_addr=0x%x, taskID=%d)", taskset.GetAddr(), taskID); - #ifdef PRX_DEBUG + cellSpurs->Warning("_cellSpursSendSignal(taskset_addr=0x%x, taskID=%d)", taskset.GetAddr(), taskID); return GetCurrentPPUThread().FastCall2(libsre + 0x124CC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursCreateTaskWithAttribute() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x12204, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTasksetAttributeSetName() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x14210, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTasksetAttributeSetTasksetSize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x14254, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTasksetAttributeEnableClearLS() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x142AC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } @@ -820,80 +852,88 @@ s32 _cellSpursTasksetAttribute2Initialize(mem_ptr_t s32 cellSpursTaskExitCodeGet() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1397C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTaskExitCodeInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1352C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTaskExitCodeTryGet() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x13974, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTaskGetLoadableSegmentPattern() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x13ED4, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTaskGetReadOnlyAreaPattern() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x13CFC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTaskGenerateLsPattern() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x13B78, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursTaskAttributeInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x10C30, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTaskAttributeSetExitCodeContainer() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x10A98, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } @@ -927,540 +967,594 @@ s32 _cellSpursTaskAttribute2Initialize(mem_ptr_t attrib s32 cellSpursTaskGetContextSaveAreaSize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1409C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursCreateTaskset2() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x15108, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursCreateTask2() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x11E54, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJoinTask2() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x11378, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTryJoinTask2() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x11748, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursDestroyTaskset2() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x14EE8, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursCreateTask2WithBinInfo() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x120E0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTasksetSetExceptionEventHandler() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x13124, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTasksetUnsetExceptionEventHandler() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x13194, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursLookUpTasksetAddress() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x133AC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursTasksetGetSpursAddress() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x14408, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursSetExceptionEventHandler() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xDB54, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursUnsetExceptionEventHandler() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xD77C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetTasksetInfo() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1445C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursTasksetAttributeInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x142FC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobGuardInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1807C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobChainAttributeSetName() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1861C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursShutdownJobChain() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x18D2C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobChainAttributeSetHaltOnError() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x18660, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobChainAttributeSetJobTypeMemoryCheck() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x186A4, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobGuardNotify() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17FA4, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobGuardReset() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17F60, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursRunJobChain() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x18F94, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobChainGetError() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x190AC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursWorkloadAttributeSetName() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x9664, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursWorkloadAttributeSetShutdownCompletionEventHook() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x96A4, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursAddWorkloadWithAttribute() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x9E14, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursRemoveWorkload() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xA414, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursWaitForWorkloadShutdown() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xA20C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursAddWorkload() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x9ED0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursWakeUp() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x84D8, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursShutdownWorkload() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xA060, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursWorkloadFlagReceiver() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xF158, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetWorkloadFlag() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xEC00, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursReadyCountStore() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xAB2C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursWorkloadAttributeInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x9F08, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursSendWorkloadSignal() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xA658, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetWorkloadData() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xA78C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursReadyCountAdd() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xA868, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursReadyCountCompareAndSwap() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xA9CC, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursReadyCountSwap() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xAC34, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursRequestIdleSpu() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xAD88, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetWorkloadInfo() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xE70C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetSpuGuid() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xEFB0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursWorkloadFlagReceiver2() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0xF298, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursGetJobPipelineInfo() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1A954, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobSetMaxGrab() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1AC88, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursJobHeaderSetJobbin2Param() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1AD58, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursAddUrgentCommand() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x18160, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursAddUrgentCall() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x1823C, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursBarrierInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17CD8, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursBarrierGetTasksetAddress() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17DB0, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 _cellSpursSemaphoreInitialize() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17DF8, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } s32 cellSpursSemaphoreGetTasksetAddress() { - cellSpurs->Warning("%s()", __FUNCTION__); #ifdef PRX_DEBUG + cellSpurs->Warning("%s()", __FUNCTION__); return GetCurrentPPUThread().FastCall2(libsre + 0x17F18, libsre_rtoc); #else + UNIMPLEMENTED_FUNC(cellSpurs); return CELL_OK; #endif } @@ -1619,6 +1713,6 @@ void cellSpurs_init() REG_FUNC(cellSpurs, _cellSpursSemaphoreInitialize); REG_FUNC(cellSpurs, cellSpursSemaphoreGetTasksetAddress); -} -#undef PRX_DEBUG \ No newline at end of file + // TODO: some trace funcs +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index a9a3f6d84..b4ef823c4 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -2246,57 +2246,7 @@ void cellSync_init() FIX_IMPORT(sysPrxForUser, _sys_vprintf , libsre + 0x1D97C); FIX_IMPORT(sysPrxForUser, _sys_memcmp , libsre + 0x1D99C); - const u32 seg2 = 0x2DF00; - // start of table: - // addr = (u64) addr - seg2, (u32) 1, (u32) 1, (u64) ptr - // addr = (u64) addr - seg2, (u32) 0x101, (u32) 1, (u64) ptr - seg2 (???) - // addr = (u64) addr, (u32) 0x100, (u32) 1, (u64) ptr - seg2 (???) - // addr = (u64) addr, (u32) 0, (u32) 1, (u64) ptr (???) - - for (u32 i = libsre + 0x31EE0; i < libsre + 0x3A4F0; i += 24) - { - u64 addr = Memory.Read64(i); - const u64 flag = Memory.Read64(i + 8); - - if (flag == 0x10100000001ull) - { - addr = addr + seg2 + libsre; - u32 value = Memory.Read32(addr); - assert(value == Memory.Read64(i + 16) + seg2); - Memory.Write32(addr, value + libsre); - } - else if (flag == 0x100000001ull) - { - addr = addr + seg2 + libsre; - u32 value = Memory.Read32(addr); - assert(value == Memory.Read64(i + 16)); - Memory.Write32(addr, value + libsre); - } - else if (flag == 0x10000000001ull) - { - addr = addr + libsre; - u32 value = Memory.Read32(addr); - assert(value == Memory.Read64(i + 16) + seg2); - Memory.Write32(addr, value + libsre); - } - else if (flag == 1) - { - addr = addr + libsre; - u32 value = Memory.Read32(addr); - assert(value == Memory.Read64(i + 16)); - Memory.Write32(addr, value + libsre); - } - else if (flag == 0x10000000004ull || flag == 0x10000000006ull) - { - // seems to be instruction modifiers for imports (done in other way in FIX_IMPORT) - } - else - { - cellSync->Notice("libsre: 0x%x : 0x%llx", i - libsre, flag); - } - } + fix_relocs(cellSync, libsre, 0x31EE0, 0x3A4F0, 0x2DF00); }); #endif -} - -#undef PRX_DEBUG \ No newline at end of file +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index 6097de8ea..08366bbe5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -17,194 +17,354 @@ u32 libsync2_rtoc; int _cellSync2MutexAttributeInitialize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x16A0, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2MutexEstimateBufferSize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0xC3C, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2MutexInitialize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x1584, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2MutexFinalize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x142C, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2MutexLock() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x1734, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2MutexTryLock() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x1A2C, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2MutexUnlock() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x186C, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int _cellSync2CondAttributeInitialize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x26DC, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2CondEstimateBufferSize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x1B90, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2CondInitialize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x25DC, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2CondFinalize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x23E0, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2CondWait() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x283C, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2CondSignal() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x2768, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2CondSignalAll() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x2910, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int _cellSync2SemaphoreAttributeInitialize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x5644, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2SemaphoreEstimateBufferSize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x4AC4, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2SemaphoreInitialize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x54E0, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2SemaphoreFinalize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x52F0, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2SemaphoreAcquire() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x57A4, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2SemaphoreTryAcquire() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x56D8, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2SemaphoreRelease() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x5870, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2SemaphoreGetCount() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x4B4C, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int _cellSync2QueueAttributeInitialize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x3C5C, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueueEstimateBufferSize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x2A98, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueueInitialize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x3F98, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueueFinalize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x3C28, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueuePush() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x478C, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueueTryPush() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x4680, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueuePop() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x4974, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueueTryPop() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x4880, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueueGetSize() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x2C00, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } int cellSync2QueueGetDepth() { +#ifdef PRX_DEBUG + cellSync2->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libsync2 + 0x2B90, libsync2_rtoc); +#else UNIMPLEMENTED_FUNC(cellSync2); return CELL_OK; +#endif } void cellSync2_init() @@ -246,5 +406,33 @@ void cellSync2_init() cellSync2->AddFunc(0xf0e1471c, cellSync2QueueGetDepth); #ifdef PRX_DEBUG + CallAfter([]() + { + libsync2 = Memory.PRXMem.AllocAlign(sizeof(libsync2_data), 4096); + memcpy(Memory + libsync2, libsync2_data, sizeof(libsync2_data)); + libsync2_rtoc = libsync2 + 0xF280; + + extern Module* sysPrxForUser; + extern Module* cellSpurs; + //extern Module* cellSpursJq; + //extern Module* cellFiber; + + FIX_IMPORT(cellSpurs, _cellSpursSendSignal , libsync2 + 0x61F0); + FIX_IMPORT(cellSync2, cellSpursJobQueueSendSignal , libsync2 + 0x6210); // ! + FIX_IMPORT(cellSync2, cellFiberPpuUtilWorkerControlSendSignal , libsync2 + 0x6230); // ! + FIX_IMPORT(cellSync2, cellFiberPpuSelf , libsync2 + 0x6250); // ! + FIX_IMPORT(cellSync2, cellFiberPpuWaitSignal , libsync2 + 0x6270); // ! + FIX_IMPORT(sysPrxForUser, sys_lwmutex_lock , libsync2 + 0x6290); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_unlock , libsync2 + 0x62B0); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_create , libsync2 + 0x62D0); + FIX_IMPORT(sysPrxForUser, sys_ppu_thread_get_id , libsync2 + 0x62F0); + FIX_IMPORT(sysPrxForUser, _sys_memset , libsync2 + 0x6310); + FIX_IMPORT(sysPrxForUser, _sys_printf , libsync2 + 0x6330); + fix_import(sysPrxForUser, 0x9FB6228E , libsync2 + 0x6350); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_destroy , libsync2 + 0x6370); + FIX_IMPORT(sysPrxForUser, _sys_strncpy , libsync2 + 0x6390); + + fix_relocs(cellSync2, libsync2, 0x73A0, 0x95A0, 0x6B90); + }); #endif } \ No newline at end of file From 6a996fcd0ad92ff1c71fba0e85a86c71eec67b8c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 27 Aug 2014 18:37:51 +0400 Subject: [PATCH 04/19] cellSpursJq stub --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp | 766 +++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSpursJq.h | 2 + rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 + 5 files changed, 781 insertions(+), 1 deletion(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp create mode 100644 rpcs3/Emu/SysCalls/Modules/cellSpursJq.h diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 4b0dd03e2..63f558f20 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -48,6 +48,8 @@ extern Module *cellSail; extern void cellSpurs_init(); extern Module *cellSpurs; extern void cellSync_init(); +extern Module *cellSpursJq; +extern void cellSpursJq_init(); extern Module *cellSync; extern void cellSync2_init(); extern Module *cellSync2; @@ -253,10 +255,12 @@ void ModuleManager::init() m_mod_init.emplace_back("cellSail", cellSail_init); cellSpurs = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x000a, cellSpurs_init); + cellSpursJq = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0050, cellSpursJq_init); cellSync = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back("cellSync", cellSync_init); cellSync2 = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back("cellSync2", cellSync2_init); + m_mod_init.emplace_back(0x0055, cellSync2_init); cellSysutil = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0015, cellSysutil_init); cellSysutilAp = static_cast (&(m_mod_init.back())) + 1; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp new file mode 100644 index 000000000..04c364498 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp @@ -0,0 +1,766 @@ +#include "stdafx.h" +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/Modules.h" + +#include "cellSpursJq.h" + +Module* cellSpursJq = nullptr; + +#ifdef PRX_DEBUG +#include "prx_libspurs_jq.h" +u32 libspurs_jq; +u32 libspurs_jq_rtoc; +#endif + +s64 cellSpursJobQueueAttributeInitialize() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x000010, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueAttributeSetMaxGrab() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x000058, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueAttributeSetSubmitWithEntryLock() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x000098, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueAttributeSetDoBusyWaiting() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0000BC, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueAttributeSetIsHaltOnError() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0000E0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueAttributeSetIsJobTypeMemoryCheck() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x000104, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueAttributeSetMaxSizeJobDescriptor() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x000128, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueAttributeSetGrabParameters() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x000178, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueSetWaitingMode() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0001C8, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursShutdownJobQueue() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0002F0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursCreateJobQueueWithJobDescriptorPool() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0003CC, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursCreateJobQueue() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x000CA8, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJoinJobQueue() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x000CF0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePushJobListBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x001B24, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePushJobBody2() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x001BF0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePushJob2Body() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x001CD0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePushAndReleaseJobBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x001DC8, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePushJobBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x001EC8, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePushBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x001F90, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueueAllocateJobDescriptorBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002434, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePushSync() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002498, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePushFlush() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002528, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueGetSpurs() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002598, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueGetHandleCount() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0025C4, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueGetError() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002600, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueGetMaxSizeJobDescriptor() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002668, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursGetJobQueueId() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0026A4, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueGetSuspendedJobSize() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002700, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueClose() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002D70, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueOpen() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x002E50, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueSemaphoreTryAcquire() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003370, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueSemaphoreAcquire() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003378, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueSemaphoreInitialize() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003380, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueSendSignal() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0033E0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePortGetJobQueue() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x00354C, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortPushSync() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003554, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortPushFlush() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0035C0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortPushJobListBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003624, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortPushJobBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003A88, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortPushJobBody2() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003A94, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortPushBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003A98, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePortTrySync() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003C38, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePortSync() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003C40, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePortInitialize() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003C48, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePortInitializeWithDescriptorBuffer() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003D78, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePortFinalize() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x003E40, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortCopyPushJobBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004280, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortCopyPushJobBody2() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x00428C, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePortCopyPushBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004290, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePort2GetJobQueue() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0042A4, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePort2PushSync() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0042AC, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePort2PushFlush() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004330, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePort2PushJobListBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0043B0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePort2Sync() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0045AC, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePort2Create() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0046C4, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePort2Destroy() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x0047E4, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueuePort2AllocateJobDescriptor() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004928, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePort2PushAndReleaseJobBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004D94, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePort2CopyPushJobBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004DD0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 _cellSpursJobQueuePort2PushJobBody() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004E0C, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueSetExceptionEventHandler() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004E48, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +s64 cellSpursJobQueueUnsetExceptionEventHandler() +{ +#ifdef PRX_DEBUG + cellSpursJq->Warning("%s()", __FUNCTION__); + return GetCurrentPPUThread().FastCall2(libspurs_jq + 0x004EC0, libspurs_jq_rtoc); +#else + UNIMPLEMENTED_FUNC(cellSpursJq); + return CELL_OK; +#endif +} + +void cellSpursJq_init() +{ + REG_FUNC(cellSpursJq, cellSpursJobQueueAttributeInitialize); + REG_FUNC(cellSpursJq, cellSpursJobQueueAttributeSetMaxGrab); + REG_FUNC(cellSpursJq, cellSpursJobQueueAttributeSetSubmitWithEntryLock); + REG_FUNC(cellSpursJq, cellSpursJobQueueAttributeSetDoBusyWaiting); + REG_FUNC(cellSpursJq, cellSpursJobQueueAttributeSetIsHaltOnError); + REG_FUNC(cellSpursJq, cellSpursJobQueueAttributeSetIsJobTypeMemoryCheck); + REG_FUNC(cellSpursJq, cellSpursJobQueueAttributeSetMaxSizeJobDescriptor); + REG_FUNC(cellSpursJq, cellSpursJobQueueAttributeSetGrabParameters); + REG_FUNC(cellSpursJq, cellSpursJobQueueSetWaitingMode); + REG_FUNC(cellSpursJq, cellSpursShutdownJobQueue); + REG_FUNC(cellSpursJq, _cellSpursCreateJobQueueWithJobDescriptorPool); + REG_FUNC(cellSpursJq, _cellSpursCreateJobQueue); + REG_FUNC(cellSpursJq, cellSpursJoinJobQueue); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePushJobListBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePushJobBody2); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePushJob2Body); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePushAndReleaseJobBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePushJobBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePushBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueueAllocateJobDescriptorBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePushSync); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePushFlush); + REG_FUNC(cellSpursJq, cellSpursJobQueueGetSpurs); + REG_FUNC(cellSpursJq, cellSpursJobQueueGetHandleCount); + REG_FUNC(cellSpursJq, cellSpursJobQueueGetError); + REG_FUNC(cellSpursJq, cellSpursJobQueueGetMaxSizeJobDescriptor); + REG_FUNC(cellSpursJq, cellSpursGetJobQueueId); + REG_FUNC(cellSpursJq, cellSpursJobQueueGetSuspendedJobSize); + REG_FUNC(cellSpursJq, cellSpursJobQueueClose); + REG_FUNC(cellSpursJq, cellSpursJobQueueOpen); + REG_FUNC(cellSpursJq, cellSpursJobQueueSemaphoreTryAcquire); + REG_FUNC(cellSpursJq, cellSpursJobQueueSemaphoreAcquire); + REG_FUNC(cellSpursJq, cellSpursJobQueueSemaphoreInitialize); + REG_FUNC(cellSpursJq, cellSpursJobQueueSendSignal); + REG_FUNC(cellSpursJq, cellSpursJobQueuePortGetJobQueue); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortPushSync); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortPushFlush); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortPushJobListBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortPushJobBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortPushJobBody2); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortPushBody); + REG_FUNC(cellSpursJq, cellSpursJobQueuePortTrySync); + REG_FUNC(cellSpursJq, cellSpursJobQueuePortSync); + REG_FUNC(cellSpursJq, cellSpursJobQueuePortInitialize); + REG_FUNC(cellSpursJq, cellSpursJobQueuePortInitializeWithDescriptorBuffer); + REG_FUNC(cellSpursJq, cellSpursJobQueuePortFinalize); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortCopyPushJobBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortCopyPushJobBody2); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePortCopyPushBody); + REG_FUNC(cellSpursJq, cellSpursJobQueuePort2GetJobQueue); + REG_FUNC(cellSpursJq, cellSpursJobQueuePort2PushSync); + REG_FUNC(cellSpursJq, cellSpursJobQueuePort2PushFlush); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePort2PushJobListBody); + REG_FUNC(cellSpursJq, cellSpursJobQueuePort2Sync); + REG_FUNC(cellSpursJq, cellSpursJobQueuePort2Create); + REG_FUNC(cellSpursJq, cellSpursJobQueuePort2Destroy); + REG_FUNC(cellSpursJq, cellSpursJobQueuePort2AllocateJobDescriptor); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePort2PushAndReleaseJobBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePort2CopyPushJobBody); + REG_FUNC(cellSpursJq, _cellSpursJobQueuePort2PushJobBody); + REG_FUNC(cellSpursJq, cellSpursJobQueueSetExceptionEventHandler); + REG_FUNC(cellSpursJq, cellSpursJobQueueUnsetExceptionEventHandler); + +#ifdef PRX_DEBUG + +#endif +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.h b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.h new file mode 100644 index 000000000..3f59c932d --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.h @@ -0,0 +1,2 @@ +#pragma once + diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index f7c503046..70bef9dbd 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -164,6 +164,7 @@ + @@ -370,6 +371,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 6254e2035..023f4c67f 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -605,6 +605,9 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + @@ -1162,5 +1165,8 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + \ No newline at end of file From 1065eb17dece5c2656ee172b8c483a20be5e23d6 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 27 Aug 2014 23:05:46 +0400 Subject: [PATCH 05/19] sys_memory_get_page_attribute faked correctly --- rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp | 34 ++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellSync2.cpp | 4 +-- rpcs3/Emu/SysCalls/lv2/sys_memory.cpp | 7 ++--- rpcs3/Emu/SysCalls/lv2/sys_memory.h | 8 ++--- 4 files changed, 43 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp index 04c364498..a831d2701 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "cellSpurs.h" #include "cellSpursJq.h" Module* cellSpursJq = nullptr; @@ -761,6 +762,39 @@ void cellSpursJq_init() REG_FUNC(cellSpursJq, cellSpursJobQueueUnsetExceptionEventHandler); #ifdef PRX_DEBUG + CallAfter([]() + { + libspurs_jq = Memory.PRXMem.AllocAlign(sizeof(libspurs_jq_data), 4096); + memcpy(Memory + libspurs_jq, libspurs_jq_data, sizeof(libspurs_jq_data)); + libspurs_jq_rtoc = libspurs_jq + 0x17E80; + extern Module* sysPrxForUser; + extern Module* cellSpurs; + //extern Module* cellFiber; + + FIX_IMPORT(cellSpurs, cellSpursSendWorkloadSignal , libspurs_jq + 0x6728); + FIX_IMPORT(cellSpurs, cellSpursWorkloadAttributeSetName , libspurs_jq + 0x6748); + FIX_IMPORT(cellSpurs, cellSpursRemoveWorkload , libspurs_jq + 0x6768); + FIX_IMPORT(cellSpurs, cellSpursWaitForWorkloadShutdown , libspurs_jq + 0x6788); + FIX_IMPORT(cellSpurs, cellSpursWakeUp , libspurs_jq + 0x67A8); + FIX_IMPORT(cellSpurs, cellSpursShutdownWorkload , libspurs_jq + 0x67C8); + FIX_IMPORT(cellSpurs, cellSpursAddWorkloadWithAttribute , libspurs_jq + 0x67E8); + FIX_IMPORT(cellSpurs, cellSpursSetExceptionEventHandler , libspurs_jq + 0x6808); + FIX_IMPORT(cellSpurs, _cellSpursWorkloadAttributeInitialize , libspurs_jq + 0x6828); + FIX_IMPORT(cellSpurs, cellFiberPpuSelf , libspurs_jq + 0x6848); // ! + FIX_IMPORT(cellSpurs, cellFiberPpuWaitSignal , libspurs_jq + 0x6868); // ! + FIX_IMPORT(sysPrxForUser, _sys_strncmp , libspurs_jq + 0x6888); + FIX_IMPORT(sysPrxForUser, _sys_snprintf , libspurs_jq + 0x68A8); + FIX_IMPORT(sysPrxForUser, sys_lwcond_destroy , libspurs_jq + 0x68C8); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_create , libspurs_jq + 0x68E8); + FIX_IMPORT(sysPrxForUser, _sys_memset , libspurs_jq + 0x6908); + FIX_IMPORT(sysPrxForUser, _sys_printf , libspurs_jq + 0x6928); + fix_import(sysPrxForUser, 0x9FB6228E , libspurs_jq + 0x6948); + FIX_IMPORT(sysPrxForUser, sys_lwmutex_destroy , libspurs_jq + 0x6968); + FIX_IMPORT(sysPrxForUser, sys_lwcond_create , libspurs_jq + 0x6988); + fix_import(sysPrxForUser, 0xE75C40F2 , libspurs_jq + 0x69A8); + + fix_relocs(cellSpursJq, libspurs_jq, 0xFF70, 0x12370, 0xED00); + }); #endif } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index 08366bbe5..d02b46683 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -414,11 +414,11 @@ void cellSync2_init() extern Module* sysPrxForUser; extern Module* cellSpurs; - //extern Module* cellSpursJq; + extern Module* cellSpursJq; //extern Module* cellFiber; FIX_IMPORT(cellSpurs, _cellSpursSendSignal , libsync2 + 0x61F0); - FIX_IMPORT(cellSync2, cellSpursJobQueueSendSignal , libsync2 + 0x6210); // ! + FIX_IMPORT(cellSpursJq, cellSpursJobQueueSendSignal , libsync2 + 0x6210); FIX_IMPORT(cellSync2, cellFiberPpuUtilWorkerControlSendSignal , libsync2 + 0x6230); // ! FIX_IMPORT(cellSync2, cellFiberPpuSelf , libsync2 + 0x6250); // ! FIX_IMPORT(cellSync2, cellFiberPpuWaitSignal , libsync2 + 0x6270); // ! diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp index 082f933bd..0c78a868c 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.cpp @@ -91,10 +91,9 @@ s32 sys_memory_get_page_attribute(u32 addr, mem_ptr_t attr) sys_memory.Warning("sys_memory_get_page_attribute(addr=0x%x, attr_addr=0x%x)", addr, attr.GetAddr()); // TODO: Implement per thread page attribute setting. - attr->attribute = 0; - attr->page_size = 0; - attr->access_right = 0; - attr->pad = 0; + attr->attribute = 0x40000ull; // SYS_MEMORY_PROT_READ_WRITE + attr->access_right = 0xFull; // SYS_MEMORY_ACCESS_RIGHT_ANY + attr->page_size = 4096; return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_memory.h b/rpcs3/Emu/SysCalls/lv2/sys_memory.h index 3cd28d32c..940882a29 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_memory.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_memory.h @@ -24,10 +24,10 @@ struct sys_memory_info_t struct sys_page_attr_t { - u64 attribute; - u64 access_right; - u32 page_size; - u32 pad; + be_t attribute; + be_t access_right; + be_t page_size; + be_t pad; }; struct MemoryContainerInfo From d5aa7aae432bcf3cf69d3bf54a3fbd59b4366ff0 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 28 Aug 2014 01:04:55 +0400 Subject: [PATCH 06/19] sys_spu_thread_group_exit --- rpcs3/Emu/Cell/SPUThread.cpp | 52 +++++++++++++++++++++++++++--- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 20 ++++++++++-- rpcs3/Emu/SysCalls/lv2/sys_spu.h | 9 ++++-- 3 files changed, 70 insertions(+), 11 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 9e7557a60..0a272050f 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -494,6 +494,7 @@ bool SPUThread::CheckEvents() { // checks events: // SPU_EVENT_LR: + if (R_ADDR) { for (u32 i = 0; i < 16; i++) { @@ -949,11 +950,14 @@ void SPUThread::ReadChannel(SPU_GPR_hdr& r, u32 ch) void SPUThread::StopAndSignal(u32 code) { SetExitStatus(code); // exit code (not status) + // TODO: process interrupts for RawSPU switch (code) { - case 0x110: /* ===== sys_spu_thread_receive_event ===== */ + case 0x110: { + /* ===== sys_spu_thread_receive_event ===== */ + u32 spuq = 0; if (!SPU.Out_MBox.Pop(spuq)) { @@ -1027,22 +1031,60 @@ void SPUThread::StopAndSignal(u32 code) return; } } - } break; + } + + case 0x101: + { + /* ===== sys_spu_thread_group_exit ===== */ + + if (!group) + { + LOG_ERROR(Log::SPU, "sys_spu_thread_group_exit(): group not set"); + break; + } + else if (!SPU.Out_MBox.GetCount()) + { + LOG_ERROR(Log::SPU, "sys_spu_thread_group_exit(): Out_MBox is empty"); + } + else if (Ini.HLELogging.GetValue()) + { + LOG_NOTICE(Log::SPU, "sys_spu_thread_group_exit(status=0x%x)", SPU.Out_MBox.GetValue()); + } + + group->m_group_exit = true; + group->m_exit_status = SPU.Out_MBox.GetValue(); + for (auto& v : group->list) + { + if (CPUThread* t = Emu.GetCPU().GetThread(v)) + { + t->Stop(); + } + } + + break; + } + case 0x102: + { + /* ===== sys_spu_thread_exit ===== */ + if (!SPU.Out_MBox.GetCount()) { - LOG_ERROR(Log::SPU, "sys_spu_thread_exit (no status, code 0x102)"); + LOG_ERROR(Log::SPU, "sys_spu_thread_exit(): Out_MBox is empty"); } else if (Ini.HLELogging.GetValue()) { // the real exit status - LOG_NOTICE(Log::SPU, "sys_spu_thread_exit (status=0x%x)", SPU.Out_MBox.GetValue()); + LOG_NOTICE(Log::SPU, "sys_spu_thread_exit(status=0x%x)", SPU.Out_MBox.GetValue()); } SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); Stop(); break; + } + default: + { if (!SPU.Out_MBox.GetCount()) { LOG_ERROR(Log::SPU, "Unknown STOP code: 0x%x (no message)", code); @@ -1051,8 +1093,8 @@ void SPUThread::StopAndSignal(u32 code) { LOG_ERROR(Log::SPU, "Unknown STOP code: 0x%x (message=0x%x)", code, SPU.Out_MBox.GetValue()); } - SPU.Status.SetValue(SPU_STATUS_STOPPED_BY_STOP); Stop(); break; } + } } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index e5637e226..5a1a75aea 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -387,6 +387,7 @@ s32 sys_spu_thread_group_terminate(u32 id, int value) { if (CPUThread* t = Emu.GetCPU().GetThread(group_info->list[i])) { + ((SPUThread*)t)->SPU.Status.SetValue(SPU_STATUS_STOPPED); t->Stop(); } } @@ -435,15 +436,17 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) return CELL_EBUSY; } - if (cause.GetAddr()) cause = SYS_SPU_THREAD_GROUP_JOIN_ALL_THREADS_EXIT; - if (status.GetAddr()) status = 0; //unspecified because of ALL_THREADS_EXIT - + bool all_threads_exit = true; for (u32 i = 0; i < group_info->list.size(); i++) { while (CPUThread* t = Emu.GetCPU().GetThread(group_info->list[i])) { if (!t->IsRunning()) { + if (((SPUThread*)t)->SPU.Status.GetValue() != SPU_STATUS_STOPPED_BY_STOP) + { + all_threads_exit = false; + } break; } if (Emu.IsStopped()) @@ -455,6 +458,17 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status) } } + if (cause.GetAddr()) + { + cause = group_info->m_group_exit + ? SYS_SPU_THREAD_GROUP_JOIN_GROUP_EXIT + : (all_threads_exit + ? SYS_SPU_THREAD_GROUP_JOIN_ALL_THREADS_EXIT + : SYS_SPU_THREAD_GROUP_JOIN_TERMINATED); + } + + if (status.GetAddr()) status = group_info->m_exit_status; + group_info->m_state = SPU_THREAD_GROUP_STATUS_INITIALIZED; group_info->lock = 0; // release lock TODO: this LOCK may be replaced. return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.h b/rpcs3/Emu/SysCalls/lv2/sys_spu.h index 3a6f1079e..732f62dd5 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.h @@ -89,21 +89,24 @@ struct SpuGroupInfo int m_ct; u32 m_count; int m_state; //SPU Thread Group State. - int m_exit_status; + u32 m_exit_status; + bool m_group_exit; - SpuGroupInfo(const std::string& name, u32 num, int prio, int type, u32 ct) + SpuGroupInfo(const std::string& name, u32 num, int prio, int type, u32 ct) : m_name(name) , m_prio(prio) , m_type(type) , m_ct(ct) , lock(0) , m_count(num) + , m_state(0) + , m_exit_status(0) + , m_group_exit(false) { m_state = SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED; //Before all the nums done, it is not initialized. list.resize(256); for (auto& v : list) v = 0; m_state = SPU_THREAD_GROUP_STATUS_INITIALIZED; //Then Ready to Start. Cause Reference use New i can only place this here. - m_exit_status = 0; } }; From f6bb62a76c9f170be35cb88fc9e0253391895108 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 28 Aug 2014 02:14:24 +0400 Subject: [PATCH 07/19] cellFiber stub activated --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 4 + rpcs3/Emu/SysCalls/Modules/cellFiber.cpp | 128 ++++++++++----------- rpcs3/Emu/SysCalls/Modules/cellFiber.h | 17 +++ rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp | 6 +- rpcs3/Emu/SysCalls/Modules/cellSync2.cpp | 8 +- rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 9 +- 7 files changed, 94 insertions(+), 79 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellFiber.h diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 63f558f20..89db1b531 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -9,6 +9,8 @@ extern void cellAudio_init(); extern Module *cellAudio; extern void cellDmux_init(); extern Module *cellDmux; +extern void cellFiber_init(); +extern Module *cellFiber; extern void cellFont_init(); extern void cellFont_load(); extern void cellFont_unload(); @@ -225,6 +227,8 @@ void ModuleManager::init() m_mod_init.emplace_back(0x0011, cellAudio_init); cellDmux = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0007, cellDmux_init); + cellFiber = static_cast (&(m_mod_init.back())) + 1; + m_mod_init.emplace_back(0x0043, cellFiber_init); cellFont = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0019, cellFont_init, cellFont_load, cellFont_unload); cellFontFT = static_cast (&(m_mod_init.back())) + 1; diff --git a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp index eadca3d19..7a5dec9d1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFiber.cpp @@ -1,24 +1,13 @@ #include "stdafx.h" -#if 0 +#include "Emu/Memory/Memory.h" +#include "Emu/System.h" +#include "Emu/SysCalls/Modules.h" -void cellFiber_init(); -Module cellFiber(0x0043, cellFiber_init); +#include "cellFiber.h" -// Return Codes -enum -{ - CELL_FIBER_ERROR_AGAIN = 0x80760001, - CELL_FIBER_ERROR_INVAL = 0x80760002, - CELL_FIBER_ERROR_NOMEM = 0x80760004, - CELL_FIBER_ERROR_DEADLK = 0x80760008, - CELL_FIBER_ERROR_PERM = 0x80760009, - CELL_FIBER_ERROR_BUSY = 0x8076000A, - CELL_FIBER_ERROR_ABORT = 0x8076000C, - CELL_FIBER_ERROR_STAT = 0x8076000F, - CELL_FIBER_ERROR_ALIGN = 0x80760010, - CELL_FIBER_ERROR_NULL_POINTER = 0x80760011, - CELL_FIBER_ERROR_NOSYSINIT = 0x80760020, -}; +//void cellFiber_init(); +//Module cellFiber(0x0043, cellFiber_init); +Module* cellFiber = nullptr; int _cellFiberPpuInitialize() { @@ -92,10 +81,12 @@ int cellFiberPpuJoinFiber() return CELL_OK; } -int cellFiberPpuSelf() +u32 cellFiberPpuSelf() { - UNIMPLEMENTED_FUNC(cellFiber); - return CELL_OK; + cellFiber->Log("cellFiberPpuSelf() -> nullptr"); // TODO + + // returns fiber structure (zero for simple PPU thread) + return 0; } int cellFiberPpuSendSignal() @@ -304,58 +295,57 @@ int cellFiberPpuUtilWorkerControlInitializeWithAttribute() void cellFiber_init() { - cellFiber.AddFunc(0x55870804, _cellFiberPpuInitialize); + cellFiber->AddFunc(0x55870804, _cellFiberPpuInitialize); - cellFiber.AddFunc(0x9e25c72d, _cellFiberPpuSchedulerAttributeInitialize); - cellFiber.AddFunc(0xee3b604d, cellFiberPpuInitializeScheduler); - cellFiber.AddFunc(0x8b6baa01, cellFiberPpuFinalizeScheduler); - cellFiber.AddFunc(0x12b1acf0, cellFiberPpuRunFibers); - cellFiber.AddFunc(0xf6c6900c, cellFiberPpuCheckFlags); - cellFiber.AddFunc(0xe492a675, cellFiberPpuHasRunnableFiber); + cellFiber->AddFunc(0x9e25c72d, _cellFiberPpuSchedulerAttributeInitialize); + cellFiber->AddFunc(0xee3b604d, cellFiberPpuInitializeScheduler); + cellFiber->AddFunc(0x8b6baa01, cellFiberPpuFinalizeScheduler); + cellFiber->AddFunc(0x12b1acf0, cellFiberPpuRunFibers); + cellFiber->AddFunc(0xf6c6900c, cellFiberPpuCheckFlags); + cellFiber->AddFunc(0xe492a675, cellFiberPpuHasRunnableFiber); - cellFiber.AddFunc(0xc11f8056, _cellFiberPpuAttributeInitialize); - cellFiber.AddFunc(0x7c2f4034, cellFiberPpuCreateFiber); - cellFiber.AddFunc(0xfa8d5f95, cellFiberPpuExit); - cellFiber.AddFunc(0x0c44f441, cellFiberPpuYield); - cellFiber.AddFunc(0xa6004249, cellFiberPpuJoinFiber); - cellFiber.AddFunc(0x5d9a7034, cellFiberPpuSelf); - cellFiber.AddFunc(0x8afb8356, cellFiberPpuSendSignal); - cellFiber.AddFunc(0x6c164b3b, cellFiberPpuWaitSignal); - cellFiber.AddFunc(0xa4599cf3, cellFiberPpuWaitFlag); - cellFiber.AddFunc(0xb0594b2d, cellFiberPpuGetScheduler); - cellFiber.AddFunc(0xfbf5fe40, cellFiberPpuSetPriority); - cellFiber.AddFunc(0xf3e81219, cellFiberPpuCheckStackLimit); + cellFiber->AddFunc(0xc11f8056, _cellFiberPpuAttributeInitialize); + cellFiber->AddFunc(0x7c2f4034, cellFiberPpuCreateFiber); + cellFiber->AddFunc(0xfa8d5f95, cellFiberPpuExit); + cellFiber->AddFunc(0x0c44f441, cellFiberPpuYield); + cellFiber->AddFunc(0xa6004249, cellFiberPpuJoinFiber); + cellFiber->AddFunc(0x5d9a7034, cellFiberPpuSelf); + cellFiber->AddFunc(0x8afb8356, cellFiberPpuSendSignal); + cellFiber->AddFunc(0x6c164b3b, cellFiberPpuWaitSignal); + cellFiber->AddFunc(0xa4599cf3, cellFiberPpuWaitFlag); + cellFiber->AddFunc(0xb0594b2d, cellFiberPpuGetScheduler); + cellFiber->AddFunc(0xfbf5fe40, cellFiberPpuSetPriority); + cellFiber->AddFunc(0xf3e81219, cellFiberPpuCheckStackLimit); - cellFiber.AddFunc(0x31252ec3, _cellFiberPpuContextAttributeInitialize); - cellFiber.AddFunc(0x72086315, cellFiberPpuContextInitialize); - cellFiber.AddFunc(0xb3a48079, cellFiberPpuContextFinalize); - cellFiber.AddFunc(0xaba1c563, cellFiberPpuContextRun); - cellFiber.AddFunc(0xd0066b17, cellFiberPpuContextSwitch); - cellFiber.AddFunc(0x34a81091, cellFiberPpuContextSelf); - cellFiber.AddFunc(0x01036193, cellFiberPpuContextReturnToThread); - cellFiber.AddFunc(0xb90c871b, cellFiberPpuContextCheckStackLimit); + cellFiber->AddFunc(0x31252ec3, _cellFiberPpuContextAttributeInitialize); + cellFiber->AddFunc(0x72086315, cellFiberPpuContextInitialize); + cellFiber->AddFunc(0xb3a48079, cellFiberPpuContextFinalize); + cellFiber->AddFunc(0xaba1c563, cellFiberPpuContextRun); + cellFiber->AddFunc(0xd0066b17, cellFiberPpuContextSwitch); + cellFiber->AddFunc(0x34a81091, cellFiberPpuContextSelf); + cellFiber->AddFunc(0x01036193, cellFiberPpuContextReturnToThread); + cellFiber->AddFunc(0xb90c871b, cellFiberPpuContextCheckStackLimit); - cellFiber.AddFunc(0x081c98be, cellFiberPpuContextRunScheduler); - cellFiber.AddFunc(0x0a25b6c8, cellFiberPpuContextEnterScheduler); + cellFiber->AddFunc(0x081c98be, cellFiberPpuContextRunScheduler); + cellFiber->AddFunc(0x0a25b6c8, cellFiberPpuContextEnterScheduler); - cellFiber.AddFunc(0xbf9cd933, cellFiberPpuSchedulerTraceInitialize); - cellFiber.AddFunc(0x3860a12a, cellFiberPpuSchedulerTraceFinalize); - cellFiber.AddFunc(0xadedbebf, cellFiberPpuSchedulerTraceStart); - cellFiber.AddFunc(0xe665f9a9, cellFiberPpuSchedulerTraceStop); + cellFiber->AddFunc(0xbf9cd933, cellFiberPpuSchedulerTraceInitialize); + cellFiber->AddFunc(0x3860a12a, cellFiberPpuSchedulerTraceFinalize); + cellFiber->AddFunc(0xadedbebf, cellFiberPpuSchedulerTraceStart); + cellFiber->AddFunc(0xe665f9a9, cellFiberPpuSchedulerTraceStop); - cellFiber.AddFunc(0x68ba4568, _cellFiberPpuUtilWorkerControlAttributeInitialize); - cellFiber.AddFunc(0x1e7a247a, cellFiberPpuUtilWorkerControlRunFibers); - cellFiber.AddFunc(0x3204b146, cellFiberPpuUtilWorkerControlInitialize); - cellFiber.AddFunc(0x392c5aa5, cellFiberPpuUtilWorkerControlSetPollingMode); - cellFiber.AddFunc(0x3b417f82, cellFiberPpuUtilWorkerControlJoinFiber); - cellFiber.AddFunc(0x4fc86b2c, cellFiberPpuUtilWorkerControlDisconnectEventQueue); - cellFiber.AddFunc(0x5d3992dd, cellFiberPpuUtilWorkerControlSendSignal); - cellFiber.AddFunc(0x62a20f0d, cellFiberPpuUtilWorkerControlConnectEventQueueToSpurs); - cellFiber.AddFunc(0xa27c95ca, cellFiberPpuUtilWorkerControlFinalize); - cellFiber.AddFunc(0xbabf714b, cellFiberPpuUtilWorkerControlWakeup); - cellFiber.AddFunc(0xbfca88d3, cellFiberPpuUtilWorkerControlCreateFiber); - cellFiber.AddFunc(0xc04e2438, cellFiberPpuUtilWorkerControlShutdown); - cellFiber.AddFunc(0xea6dc1ad, cellFiberPpuUtilWorkerControlCheckFlags); - cellFiber.AddFunc(0xf2ccad4f, cellFiberPpuUtilWorkerControlInitializeWithAttribute); + cellFiber->AddFunc(0x68ba4568, _cellFiberPpuUtilWorkerControlAttributeInitialize); + cellFiber->AddFunc(0x1e7a247a, cellFiberPpuUtilWorkerControlRunFibers); + cellFiber->AddFunc(0x3204b146, cellFiberPpuUtilWorkerControlInitialize); + cellFiber->AddFunc(0x392c5aa5, cellFiberPpuUtilWorkerControlSetPollingMode); + cellFiber->AddFunc(0x3b417f82, cellFiberPpuUtilWorkerControlJoinFiber); + cellFiber->AddFunc(0x4fc86b2c, cellFiberPpuUtilWorkerControlDisconnectEventQueue); + cellFiber->AddFunc(0x5d3992dd, cellFiberPpuUtilWorkerControlSendSignal); + cellFiber->AddFunc(0x62a20f0d, cellFiberPpuUtilWorkerControlConnectEventQueueToSpurs); + cellFiber->AddFunc(0xa27c95ca, cellFiberPpuUtilWorkerControlFinalize); + cellFiber->AddFunc(0xbabf714b, cellFiberPpuUtilWorkerControlWakeup); + cellFiber->AddFunc(0xbfca88d3, cellFiberPpuUtilWorkerControlCreateFiber); + cellFiber->AddFunc(0xc04e2438, cellFiberPpuUtilWorkerControlShutdown); + cellFiber->AddFunc(0xea6dc1ad, cellFiberPpuUtilWorkerControlCheckFlags); + cellFiber->AddFunc(0xf2ccad4f, cellFiberPpuUtilWorkerControlInitializeWithAttribute); } -#endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellFiber.h b/rpcs3/Emu/SysCalls/Modules/cellFiber.h new file mode 100644 index 000000000..cfeaac232 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellFiber.h @@ -0,0 +1,17 @@ +#pragma once + +// Return Codes +enum +{ + CELL_FIBER_ERROR_AGAIN = 0x80760001, + CELL_FIBER_ERROR_INVAL = 0x80760002, + CELL_FIBER_ERROR_NOMEM = 0x80760004, + CELL_FIBER_ERROR_DEADLK = 0x80760008, + CELL_FIBER_ERROR_PERM = 0x80760009, + CELL_FIBER_ERROR_BUSY = 0x8076000A, + CELL_FIBER_ERROR_ABORT = 0x8076000C, + CELL_FIBER_ERROR_STAT = 0x8076000F, + CELL_FIBER_ERROR_ALIGN = 0x80760010, + CELL_FIBER_ERROR_NULL_POINTER = 0x80760011, + CELL_FIBER_ERROR_NOSYSINIT = 0x80760020, +}; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp index a831d2701..9a74ec090 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp @@ -770,7 +770,7 @@ void cellSpursJq_init() extern Module* sysPrxForUser; extern Module* cellSpurs; - //extern Module* cellFiber; + extern Module* cellFiber; FIX_IMPORT(cellSpurs, cellSpursSendWorkloadSignal , libspurs_jq + 0x6728); FIX_IMPORT(cellSpurs, cellSpursWorkloadAttributeSetName , libspurs_jq + 0x6748); @@ -781,8 +781,8 @@ void cellSpursJq_init() FIX_IMPORT(cellSpurs, cellSpursAddWorkloadWithAttribute , libspurs_jq + 0x67E8); FIX_IMPORT(cellSpurs, cellSpursSetExceptionEventHandler , libspurs_jq + 0x6808); FIX_IMPORT(cellSpurs, _cellSpursWorkloadAttributeInitialize , libspurs_jq + 0x6828); - FIX_IMPORT(cellSpurs, cellFiberPpuSelf , libspurs_jq + 0x6848); // ! - FIX_IMPORT(cellSpurs, cellFiberPpuWaitSignal , libspurs_jq + 0x6868); // ! + FIX_IMPORT(cellFiber, cellFiberPpuSelf , libspurs_jq + 0x6848); + FIX_IMPORT(cellFiber, cellFiberPpuWaitSignal , libspurs_jq + 0x6868); FIX_IMPORT(sysPrxForUser, _sys_strncmp , libspurs_jq + 0x6888); FIX_IMPORT(sysPrxForUser, _sys_snprintf , libspurs_jq + 0x68A8); FIX_IMPORT(sysPrxForUser, sys_lwcond_destroy , libspurs_jq + 0x68C8); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index d02b46683..fdfe773f6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -415,13 +415,13 @@ void cellSync2_init() extern Module* sysPrxForUser; extern Module* cellSpurs; extern Module* cellSpursJq; - //extern Module* cellFiber; + extern Module* cellFiber; FIX_IMPORT(cellSpurs, _cellSpursSendSignal , libsync2 + 0x61F0); FIX_IMPORT(cellSpursJq, cellSpursJobQueueSendSignal , libsync2 + 0x6210); - FIX_IMPORT(cellSync2, cellFiberPpuUtilWorkerControlSendSignal , libsync2 + 0x6230); // ! - FIX_IMPORT(cellSync2, cellFiberPpuSelf , libsync2 + 0x6250); // ! - FIX_IMPORT(cellSync2, cellFiberPpuWaitSignal , libsync2 + 0x6270); // ! + FIX_IMPORT(cellFiber, cellFiberPpuUtilWorkerControlSendSignal , libsync2 + 0x6230); + FIX_IMPORT(cellFiber, cellFiberPpuSelf , libsync2 + 0x6250); + FIX_IMPORT(cellFiber, cellFiberPpuWaitSignal , libsync2 + 0x6270); FIX_IMPORT(sysPrxForUser, sys_lwmutex_lock , libsync2 + 0x6290); FIX_IMPORT(sysPrxForUser, sys_lwmutex_unlock , libsync2 + 0x62B0); FIX_IMPORT(sysPrxForUser, sys_lwmutex_create , libsync2 + 0x62D0); diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 70bef9dbd..061fe05aa 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -355,6 +355,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 023f4c67f..bb9b9ad7e 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -380,9 +380,6 @@ Emu\SysCalls\currently_unused - - Emu\SysCalls\currently_unused - Emu\SysCalls\Modules @@ -608,6 +605,9 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + @@ -1168,5 +1168,8 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + \ No newline at end of file From b37f3e1b93acc2ebff85b1c7965dcb30b94a36c3 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 28 Aug 2014 05:18:35 +0400 Subject: [PATCH 08/19] mem_class_t eliminated It didn't work for some reasons anyway, --- rpcs3/Emu/Io/Keyboard.h | 4 +- rpcs3/Emu/Io/KeyboardHandler.h | 31 ++++++----- rpcs3/Emu/Io/Mouse.h | 4 +- rpcs3/Emu/Io/MouseHandler.h | 42 +++++++-------- rpcs3/Emu/Memory/Memory.h | 33 ------------ rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp | 49 +++++++---------- rpcs3/Emu/SysCalls/Modules/SC_Keyboard.h | 51 ++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp | 55 ++++++++----------- rpcs3/Emu/SysCalls/Modules/SC_Mouse.h | 62 ++++++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellNetCtl.h | 2 +- rpcs3/Emu/SysCalls/Modules/sys_io.cpp | 27 ++-------- rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 +++ 14 files changed, 207 insertions(+), 163 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/SC_Keyboard.h create mode 100644 rpcs3/Emu/SysCalls/Modules/SC_Mouse.h diff --git a/rpcs3/Emu/Io/Keyboard.h b/rpcs3/Emu/Io/Keyboard.h index 241913f72..ff01933bd 100644 --- a/rpcs3/Emu/Io/Keyboard.h +++ b/rpcs3/Emu/Io/Keyboard.h @@ -18,8 +18,8 @@ public: std::vector& GetKeyboards() { return m_keyboard_handler->GetKeyboards(); } KbInfo& GetInfo() { return m_keyboard_handler->GetInfo(); } std::vector& GetButtons(const u32 keyboard) { return m_keyboard_handler->GetButtons(keyboard); } - CellKbData& GetData(const u32 keyboard) { return m_keyboard_handler->GetData(keyboard); } - CellKbConfig& GetConfig(const u32 keyboard) { return m_keyboard_handler->GetConfig(keyboard); } + KbData& GetData(const u32 keyboard) { return m_keyboard_handler->GetData(keyboard); } + KbConfig& GetConfig(const u32 keyboard) { return m_keyboard_handler->GetConfig(keyboard); } bool IsInited() const { return m_inited; } }; diff --git a/rpcs3/Emu/Io/KeyboardHandler.h b/rpcs3/Emu/Io/KeyboardHandler.h index 9eff36490..a934a2816 100644 --- a/rpcs3/Emu/Io/KeyboardHandler.h +++ b/rpcs3/Emu/Io/KeyboardHandler.h @@ -191,26 +191,25 @@ enum CellKbMappingType CELL_KB_MAPPING_PORTUGUESE_BRAZIL, }; -static const u32 CELL_KB_MAX_KEYBOARDS = 127; -static const u32 CELL_KB_MAX_PORT_NUM = 7; -static const u32 CELL_KB_MAX_KEYCODES = 62; +static const u32 KB_MAX_KEYBOARDS = 127; +static const u32 KB_MAX_KEYCODES = 62; struct KbInfo { u32 max_connect; u32 now_connect; u32 info; - u8 status[CELL_KB_MAX_KEYBOARDS]; + u8 status[KB_MAX_KEYBOARDS]; }; -struct CellKbData +struct KbData { u32 led; u32 mkey; s32 len; - u16 keycode[CELL_KB_MAX_KEYCODES]; + u16 keycode[KB_MAX_KEYCODES]; - CellKbData() + KbData() : led(0) , mkey(0) , len(0) @@ -218,13 +217,13 @@ struct CellKbData } }; -struct CellKbConfig +struct KbConfig { u32 arrange; u32 read_mode; u32 code_type; - CellKbConfig() + KbConfig() : arrange(CELL_KB_MAPPING_106) , read_mode(CELL_KB_RMODE_INPUTCHAR) , code_type(CELL_KB_CODETYPE_ASCII) @@ -248,8 +247,8 @@ struct KbButton struct Keyboard { - CellKbData m_data; - CellKbConfig m_config; + KbData m_data; + KbConfig m_config; std::vector m_buttons; Keyboard() @@ -278,8 +277,8 @@ public: if(button.m_keyCode != code) continue; - CellKbData& data = keyboard.m_data; - CellKbConfig& config = keyboard.m_config; + KbData& data = keyboard.m_data; + KbConfig& config = keyboard.m_config; if (pressed) { @@ -305,7 +304,7 @@ public: { kcode = cellKbCnvRawCode(config.arrange, data.mkey, data.led, button.m_outKeyCode); } - data.keycode[data.len % CELL_KB_MAX_KEYCODES] = kcode; + data.keycode[data.len % KB_MAX_KEYCODES] = kcode; data.len++; } } @@ -327,6 +326,6 @@ public: KbInfo& GetInfo() { return m_info; } std::vector& GetKeyboards() { return m_keyboards; } std::vector& GetButtons(const u32 keyboard) { return m_keyboards[keyboard].m_buttons; } - CellKbData& GetData(const u32 keyboard) { return m_keyboards[keyboard].m_data; } - CellKbConfig& GetConfig(const u32 keyboard) { return m_keyboards[keyboard].m_config; } + KbData& GetData(const u32 keyboard) { return m_keyboards[keyboard].m_data; } + KbConfig& GetConfig(const u32 keyboard) { return m_keyboards[keyboard].m_config; } }; \ No newline at end of file diff --git a/rpcs3/Emu/Io/Mouse.h b/rpcs3/Emu/Io/Mouse.h index 405155ac9..2ccc5611c 100644 --- a/rpcs3/Emu/Io/Mouse.h +++ b/rpcs3/Emu/Io/Mouse.h @@ -17,8 +17,8 @@ public: std::vector& GetMice() { return m_mouse_handler->GetMice(); } MouseInfo& GetInfo() { return m_mouse_handler->GetInfo(); } - CellMouseData& GetData(const u32 mouse) { return m_mouse_handler->GetData(mouse); } - CellMouseRawData& GetRawData(const u32 mouse) { return m_mouse_handler->GetRawData(mouse); } + MouseData& GetData(const u32 mouse) { return m_mouse_handler->GetData(mouse); } + MouseRawData& GetRawData(const u32 mouse) { return m_mouse_handler->GetRawData(mouse); } bool IsInited() const { return m_inited; } }; diff --git a/rpcs3/Emu/Io/MouseHandler.h b/rpcs3/Emu/Io/MouseHandler.h index c081ae2f7..6029bda1a 100644 --- a/rpcs3/Emu/Io/MouseHandler.h +++ b/rpcs3/Emu/Io/MouseHandler.h @@ -26,32 +26,32 @@ enum MouseButtonCodes CELL_MOUSE_BUTTON_8 = 0x00000080, }; -static const u32 CELL_MAX_MICE = 127; -static const u32 CELL_MOUSE_MAX_DATA_LIST_NUM = 8; -static const u32 CELL_MOUSE_MAX_CODES = 64; +static const u32 MAX_MICE = 127; +static const u32 MOUSE_MAX_DATA_LIST_NUM = 8; +static const u32 MOUSE_MAX_CODES = 64; struct MouseInfo { u32 max_connect; u32 now_connect; u32 info; - u16 vendor_id[CELL_MAX_MICE]; - u16 product_id[CELL_MAX_MICE]; - u8 status[CELL_MAX_MICE]; + u16 vendor_id[MAX_MICE]; + u16 product_id[MAX_MICE]; + u8 status[MAX_MICE]; }; -struct CellMouseRawData +struct MouseRawData { s32 len; - u8 data[CELL_MOUSE_MAX_CODES]; + u8 data[MOUSE_MAX_CODES]; - CellMouseRawData() + MouseRawData() : len(0) { } }; -struct CellMouseData +struct MouseData { u8 update; u8 buttons; @@ -60,7 +60,7 @@ struct CellMouseData s8 wheel; s8 tilt; // (TODO) - CellMouseData() + MouseData() : update(0) , buttons(0) , x_axis(0) @@ -71,12 +71,12 @@ struct CellMouseData } }; -struct CellMouseDataList +struct MouseDataList { u32 list_num; - CellMouseData list[CELL_MOUSE_MAX_DATA_LIST_NUM]; + MouseData list[MOUSE_MAX_DATA_LIST_NUM]; - CellMouseDataList() + MouseDataList() : list_num(0) { } @@ -87,8 +87,8 @@ struct Mouse s16 x_pos; s16 y_pos; - CellMouseData m_data; - CellMouseRawData m_rawdata; + MouseData m_data; + MouseRawData m_rawdata; Mouse() : m_data() @@ -113,7 +113,7 @@ public: { if (m_info.status[p] == CELL_MOUSE_STATUS_CONNECTED) { - CellMouseData& data = GetData(p); + MouseData& data = GetData(p); data.update = CELL_MOUSE_DATA_UPDATE; if (pressed) data.buttons |= button; else data.buttons &= ~button; @@ -127,7 +127,7 @@ public: { if (m_info.status[p] == CELL_MOUSE_STATUS_CONNECTED) { - CellMouseData& data = GetData(p); + MouseData& data = GetData(p); data.update = CELL_MOUSE_DATA_UPDATE; data.wheel = rotation/120; //120=event.GetWheelDelta() } @@ -140,7 +140,7 @@ public: { if (m_info.status[p] == CELL_MOUSE_STATUS_CONNECTED) { - CellMouseData& data = GetData(p); + MouseData& data = GetData(p); data.update = CELL_MOUSE_DATA_UPDATE; data.x_axis += x_pos_new - m_mice[p].x_pos; data.y_axis += y_pos_new - m_mice[p].y_pos; @@ -157,6 +157,6 @@ public: MouseInfo& GetInfo() { return m_info; } std::vector& GetMice() { return m_mice; } - CellMouseData& GetData(const u32 mouse) { return m_mice[mouse].m_data; } - CellMouseRawData& GetRawData(const u32 mouse) { return m_mice[mouse].m_rawdata; } + MouseData& GetData(const u32 mouse) { return m_mice[mouse].m_data; } + MouseRawData& GetRawData(const u32 mouse) { return m_mice[mouse].m_rawdata; } }; \ No newline at end of file diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 8ce65be93..cc9150669 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -745,39 +745,6 @@ public: } }; -class mem_class_t -{ - u32 m_addr; - -public: - mem_class_t(u32 addr) : m_addr(addr) - { - } - - mem_class_t() : m_addr(0) - { - } - - template u32 operator += (T right) - { - mem_t& m((mem_t&)*this); - m = right; - m_addr += sizeof(T); - return m_addr; - } - - template operator T() - { - mem_t& m((mem_t&)*this); - const T ret = m; - m_addr += sizeof(T); - return ret; - } - - u64 GetAddr() const { return m_addr; } - void SetAddr(const u64 addr) { m_addr = addr; } -}; - template struct _func_arg { diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp index 8f529f6e1..d93739c59 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.cpp @@ -4,21 +4,10 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/Io/Keyboard.h" +#include "SC_Keyboard.h" extern Module *sys_io; -enum CELL_KB_ERROR_CODE -{ - CELL_KB_ERROR_FATAL = 0x80121001, - CELL_KB_ERROR_INVALID_PARAMETER = 0x80121002, - CELL_KB_ERROR_ALREADY_INITIALIZED = 0x80121003, - CELL_KB_ERROR_UNINITIALIZED = 0x80121004, - CELL_KB_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121005, - CELL_KB_ERROR_READ_FAILED = 0x80121006, - CELL_KB_ERROR_NO_DEVICE = 0x80121007, - CELL_KB_ERROR_SYS_SETTING_FAILED = 0x80121008, -}; - int cellKbInit(u32 max_connect) { sys_io->Warning("cellKbInit(max_connect=%d)", max_connect); @@ -96,24 +85,24 @@ u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode) return 0x0000; } -int cellKbGetInfo(mem_class_t info) +int cellKbGetInfo(mem_ptr_t info) { sys_io->Log("cellKbGetInfo(info_addr=0x%x)", info.GetAddr()); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; const KbInfo& current_info = Emu.GetKeyboardManager().GetInfo(); - info += current_info.max_connect; - info += current_info.now_connect; - info += current_info.info; + info->max_connect = current_info.max_connect; + info->now_connect = current_info.now_connect; + info->info = current_info.info; for(u32 i=0; istatus[i] = current_info.status[i]; } return CELL_OK; } -int cellKbRead(u32 port_no, mem_class_t data) +int cellKbRead(u32 port_no, mem_ptr_t data) { sys_io->Log("cellKbRead(port_no=%d,info_addr=0x%x)", port_no, data.GetAddr()); @@ -121,13 +110,13 @@ int cellKbRead(u32 port_no, mem_class_t data) if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; if(port_no >= keyboards.size()) return CELL_KB_ERROR_INVALID_PARAMETER; - CellKbData& current_data = Emu.GetKeyboardManager().GetData(port_no); - data += current_data.led; - data += current_data.mkey; - data += std::min((u32)current_data.len, CELL_KB_MAX_KEYCODES); + KbData& current_data = Emu.GetKeyboardManager().GetData(port_no); + data->led = current_data.led; + data->mkey = current_data.mkey; + data->len = std::min((u32)current_data.len, CELL_KB_MAX_KEYCODES); for(s32 i=0; ikeycode[i] = current_data.keycode[i]; } current_data.len = 0; @@ -140,7 +129,7 @@ int cellKbSetCodeType(u32 port_no, u32 type) sys_io->Log("cellKbSetCodeType(port_no=%d,type=%d)", port_no, type); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; - CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); + KbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); current_config.code_type = type; return CELL_OK; } @@ -156,21 +145,21 @@ int cellKbSetReadMode(u32 port_no, u32 rmode) sys_io->Log("cellKbSetReadMode(port_no=%d,rmode=%d)", port_no, rmode); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; - CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); + KbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); current_config.read_mode = rmode; return CELL_OK; } -int cellKbGetConfiguration(u32 port_no, mem_class_t config) +int cellKbGetConfiguration(u32 port_no, mem_ptr_t config) { sys_io->Log("cellKbGetConfiguration(port_no=%d,config_addr=0x%x)", port_no, config.GetAddr()); if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED; - const CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); - config += current_config.arrange; - config += current_config.read_mode; - config += current_config.code_type; + const KbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no); + config->arrange = current_config.arrange; + config->read_mode = current_config.read_mode; + config->code_type = current_config.code_type; return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.h b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.h new file mode 100644 index 000000000..ca77078e1 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/SC_Keyboard.h @@ -0,0 +1,51 @@ +#pragma once + +enum CELL_KB_ERROR_CODE +{ + CELL_KB_ERROR_FATAL = 0x80121001, + CELL_KB_ERROR_INVALID_PARAMETER = 0x80121002, + CELL_KB_ERROR_ALREADY_INITIALIZED = 0x80121003, + CELL_KB_ERROR_UNINITIALIZED = 0x80121004, + CELL_KB_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121005, + CELL_KB_ERROR_READ_FAILED = 0x80121006, + CELL_KB_ERROR_NO_DEVICE = 0x80121007, + CELL_KB_ERROR_SYS_SETTING_FAILED = 0x80121008, +}; + +static const u32 CELL_KB_MAX_KEYBOARDS = 127; + +struct CellKbInfo +{ + be_t max_connect; + be_t now_connect; + be_t info; + u8 status[CELL_KB_MAX_KEYBOARDS]; +}; + +static const u32 CELL_KB_MAX_KEYCODES = 62; + +struct CellKbData +{ + be_t led; + be_t mkey; + be_t len; + be_t keycode[CELL_KB_MAX_KEYCODES]; +}; + +struct CellKbConfig +{ + be_t arrange; + be_t read_mode; + be_t code_type; +}; + +int cellKbInit(u32 max_connect); +int cellKbEnd(); +int cellKbClearBuf(u32 port_no); +u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode); +int cellKbGetInfo(mem_ptr_t info); +int cellKbRead(u32 port_no, mem_ptr_t data); +int cellKbSetCodeType(u32 port_no, u32 type); +int cellKbSetLEDStatus(u32 port_no, u8 led); +int cellKbSetReadMode(u32 port_no, u32 rmode); +int cellKbGetConfiguration(u32 port_no, mem_ptr_t config); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp index 99648ea32..210bcbbb9 100644 --- a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp +++ b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.cpp @@ -4,21 +4,10 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/Io/Mouse.h" +#include "SC_Mouse.h" extern Module *sys_io; -enum CELL_MOUSE_ERROR_CODE -{ - CELL_MOUSE_ERROR_FATAL = 0x80121201, - CELL_MOUSE_ERROR_INVALID_PARAMETER = 0x80121202, - CELL_MOUSE_ERROR_ALREADY_INITIALIZED = 0x80121203, - CELL_MOUSE_ERROR_UNINITIALIZED = 0x80121204, - CELL_MOUSE_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121205, - CELL_MOUSE_ERROR_DATA_READ_FAILED = 0x80121206, - CELL_MOUSE_ERROR_NO_DEVICE = 0x80121207, - CELL_MOUSE_ERROR_SYS_SETTING_FAILED = 0x80121208, -}; - int cellMouseInit(u32 max_connect) { sys_io->Warning("cellMouseInit(max_connect=%d)", max_connect); @@ -49,47 +38,47 @@ int cellMouseEnd() return CELL_OK; } -int cellMouseGetInfo(mem_class_t info) +int cellMouseGetInfo(mem_ptr_t info) { sys_io->Log("cellMouseGetInfo(info_addr=0x%x)", info.GetAddr()); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; const MouseInfo& current_info = Emu.GetMouseManager().GetInfo(); - info += current_info.max_connect; - info += current_info.now_connect; - info += current_info.info; - for(u32 i=0; imax_connect = current_info.max_connect; + info->now_connect = current_info.now_connect; + info->info = current_info.info; + for(u32 i=0; ivendor_id[i] = current_info.vendor_id[i]; + for(u32 i=0; iproduct_id[i] = current_info.product_id[i]; + for(u32 i=0; istatus[i] = current_info.status[i]; return CELL_OK; } -int cellMouseInfoTabletMode(u32 port_no, mem_class_t info) +int cellMouseInfoTabletMode(u32 port_no, mem_ptr_t info) { sys_io->Log("cellMouseInfoTabletMode(port_no=%d,info_addr=0x%x)", port_no, info.GetAddr()); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; if(port_no >= Emu.GetMouseManager().GetMice().size()) return CELL_MOUSE_ERROR_INVALID_PARAMETER; - info += 0; // Unimplemented: (0=Tablet mode is not supported) - info += 1; // Unimplemented: (1=Mouse mode) + info->is_supported = 0; // Unimplemented: (0=Tablet mode is not supported) + info->mode = 1; // Unimplemented: (1=Mouse mode) return CELL_OK; } -int cellMouseGetData(u32 port_no, mem_class_t data) +int cellMouseGetData(u32 port_no, mem_ptr_t data) { sys_io->Log("cellMouseGetData(port_no=%d,data_addr=0x%x)", port_no, data.GetAddr()); if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED; if(port_no >= Emu.GetMouseManager().GetMice().size()) return CELL_MOUSE_ERROR_NO_DEVICE; - CellMouseData& current_data = Emu.GetMouseManager().GetData(port_no); - data += current_data.update; - data += current_data.buttons; - data += current_data.x_axis; - data += current_data.y_axis; - data += current_data.wheel; - data += current_data.tilt; + MouseData& current_data = Emu.GetMouseManager().GetData(port_no); + data->update = current_data.update; + data->buttons = current_data.buttons; + data->x_axis = current_data.x_axis; + data->y_axis = current_data.y_axis; + data->wheel = current_data.wheel; + data->tilt = current_data.tilt; current_data.update = CELL_MOUSE_DATA_NON; current_data.x_axis = 0; @@ -99,7 +88,7 @@ int cellMouseGetData(u32 port_no, mem_class_t data) return CELL_OK; } -int cellMouseGetDataList(u32 port_no, mem_class_t data) +int cellMouseGetDataList(u32 port_no, mem_ptr_t data) { UNIMPLEMENTED_FUNC(sys_io); @@ -113,14 +102,14 @@ int cellMouseSetTabletMode(u32 port_no, u32 mode) return CELL_OK; } -int cellMouseGetTabletDataList(u32 port_no, mem_class_t data) +int cellMouseGetTabletDataList(u32 port_no, u32 data_addr) { UNIMPLEMENTED_FUNC(sys_io); return CELL_OK; } -int cellMouseGetRawData(u32 port_no, mem_class_t data) +int cellMouseGetRawData(u32 port_no, u32 data_addr) { UNIMPLEMENTED_FUNC(sys_io); diff --git a/rpcs3/Emu/SysCalls/Modules/SC_Mouse.h b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.h new file mode 100644 index 000000000..02915c7ab --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/SC_Mouse.h @@ -0,0 +1,62 @@ +#pragma once + +enum CELL_MOUSE_ERROR_CODE +{ + CELL_MOUSE_ERROR_FATAL = 0x80121201, + CELL_MOUSE_ERROR_INVALID_PARAMETER = 0x80121202, + CELL_MOUSE_ERROR_ALREADY_INITIALIZED = 0x80121203, + CELL_MOUSE_ERROR_UNINITIALIZED = 0x80121204, + CELL_MOUSE_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121205, + CELL_MOUSE_ERROR_DATA_READ_FAILED = 0x80121206, + CELL_MOUSE_ERROR_NO_DEVICE = 0x80121207, + CELL_MOUSE_ERROR_SYS_SETTING_FAILED = 0x80121208, +}; + +static const u32 CELL_MAX_MICE = 127; + +struct CellMouseInfo +{ + be_t max_connect; + be_t now_connect; + be_t info; + be_t vendor_id[CELL_MAX_MICE]; + be_t product_id[CELL_MAX_MICE]; + u8 status[CELL_MAX_MICE]; +}; + +struct CellMouseInfoTablet +{ + be_t is_supported; + be_t mode; +}; + +struct CellMouseData +{ + u8 update; + u8 buttons; + s8 x_axis; + s8 y_axis; + s8 wheel; + s8 tilt; +}; + +static const u32 CELL_MOUSE_MAX_DATA_LIST_NUM = 8; + +struct CellMouseDataList +{ + be_t list_num; + CellMouseData list[CELL_MOUSE_MAX_DATA_LIST_NUM]; +}; + +static const u32 CELL_MOUSE_MAX_CODES = 64; + +int cellMouseInit(u32 max_connect); +int cellMouseClearBuf(u32 port_no); +int cellMouseEnd(); +int cellMouseGetInfo(mem_ptr_t info); +int cellMouseInfoTabletMode(u32 port_no, mem_ptr_t info); +int cellMouseGetData(u32 port_no, mem_ptr_t data); +int cellMouseGetDataList(u32 port_no, mem_ptr_t data); +int cellMouseSetTabletMode(u32 port_no, u32 mode); +int cellMouseGetTabletDataList(u32 port_no, u32 data_addr); +int cellMouseGetRawData(u32 port_no, u32 data_addr); diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index aa5b1460d..790d991a1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -29,7 +29,7 @@ int cellNetCtlGetState(mem32_t state) return CELL_OK; } -int cellNetCtlAddHandler(mem_ptr_t handler, mem32_t arg, s32 hid) +int cellNetCtlAddHandler(mem_func_ptr_t handler, mem32_t arg, s32 hid) { cellNetCtl->Todo("cellNetCtlAddHandler(handler_addr=0x%x, arg_addr=0x%x, hid=%x)", handler.GetAddr(), arg.GetAddr(), hid); diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h index fc25822aa..b4f43d0c5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h @@ -257,4 +257,4 @@ struct CellNetCtlNatInfo be_t mapped_addr; }; -typedef void(cellNetCtlHandler)(s32 prev_state, s32 new_state, s32 event, s32 error_code, mem32_t arg); \ No newline at end of file +typedef void(*cellNetCtlHandler)(s32 prev_state, s32 new_state, s32 event, s32 error_code, mem32_t arg); \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp index 1eca9381a..02821baeb 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_io.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_io.cpp @@ -2,6 +2,9 @@ #include "Emu/Memory/Memory.h" #include "Emu/SysCalls/Modules.h" +#include "SC_Keyboard.h" +#include "SC_Mouse.h" + //void sys_io_init(); //Module sys_io(0x0017, sys_io_init); Module *sys_io = nullptr; @@ -22,30 +25,6 @@ extern int cellPadSetPressMode(u32 port_no, u32 mode); extern int cellPadSetSensorMode(u32 port_no, u32 mode); extern int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr); -//cellKb -extern int cellKbInit(u32 max_connect); -extern int cellKbEnd(); -extern int cellKbClearBuf(u32 port_no); -extern u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode); -extern int cellKbGetInfo(mem_class_t info); -extern int cellKbRead(u32 port_no, mem_class_t data); -extern int cellKbSetCodeType(u32 port_no, u32 type); -extern int cellKbSetLEDStatus(u32 port_no, u8 led); -extern int cellKbSetReadMode(u32 port_no, u32 rmode); -extern int cellKbGetConfiguration(u32 port_no, mem_class_t config); - -//cellMouse -extern int cellMouseInit(u32 max_connect); -extern int cellMouseClearBuf(u32 port_no); -extern int cellMouseEnd(); -extern int cellMouseGetInfo(mem_class_t info); -extern int cellMouseInfoTabletMode(u32 port_no, mem_class_t info); -extern int cellMouseGetData(u32 port_no, mem_class_t data); -extern int cellMouseGetDataList(u32 port_no, mem_class_t data); -extern int cellMouseSetTabletMode(u32 port_no, u32 mode); -extern int cellMouseGetTabletDataList(u32 port_no, mem_class_t data); -extern int cellMouseGetRawData(u32 port_no, mem_class_t data); - void sys_io_init() { sys_io->AddFunc(0x1cf98800, cellPadInit); diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 061fe05aa..bf42bedd3 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -389,6 +389,8 @@ + + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index bb9b9ad7e..729660c39 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1171,5 +1171,11 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + \ No newline at end of file From 693e7a38fa39bcd59ee6f1dbcfc6047e5da4309d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 28 Aug 2014 20:29:05 +0400 Subject: [PATCH 09/19] Some std include moved --- Utilities/BEType.h | 5 ----- Utilities/Log.cpp | 8 ------- Utilities/Log.h | 7 ------ Utilities/MTRingbuffer.h | 4 ---- Utilities/SMutex.cpp | 2 +- Utilities/SMutex.h | 2 -- Utilities/SSemaphore.h | 3 --- Utilities/StrFmt.h | 6 ----- Utilities/Thread.h | 5 ----- Utilities/rFile.h | 2 -- Utilities/rPlatform.h | 2 -- Utilities/rXml.cpp | 3 --- rpcs3/Emu/CPU/CPUDecoder.h | 1 - rpcs3/Emu/CPU/CPUThread.cpp | 4 ++-- rpcs3/Emu/CPU/CPUThreadManager.h | 2 -- rpcs3/Emu/Cell/PPUProgramCompiler.h | 1 - rpcs3/Emu/Cell/PPUThread.cpp | 5 ----- rpcs3/Emu/Cell/PPUThread.h | 1 - rpcs3/Emu/Cell/SPUThread.h | 1 - rpcs3/Emu/FS/VFS.cpp | 2 -- rpcs3/Emu/FS/vfsDevice.cpp | 1 - rpcs3/Emu/FS/vfsDevice.h | 1 - rpcs3/Emu/FS/vfsDir.h | 1 - rpcs3/Emu/FS/vfsFile.h | 1 - rpcs3/Emu/HDD/HDD.h | 1 - rpcs3/Emu/IdManager.h | 2 -- rpcs3/Emu/Io/Keyboard.h | 2 -- rpcs3/Emu/Io/KeyboardHandler.h | 2 -- rpcs3/Emu/Io/Mouse.h | 2 -- rpcs3/Emu/Io/MouseHandler.h | 2 -- rpcs3/Emu/Io/Pad.h | 2 -- rpcs3/Emu/Io/PadHandler.h | 2 -- rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h | 3 --- rpcs3/Emu/Io/Windows/WindowsMouseHandler.h | 2 -- rpcs3/Emu/Io/Windows/WindowsPadHandler.h | 2 -- rpcs3/Emu/Io/XInput/XInputPadHandler.cpp | 2 -- rpcs3/Emu/Memory/Memory.cpp | 6 ++--- rpcs3/Emu/Memory/MemoryBlock.h | 2 -- rpcs3/Emu/RSX/RSXThread.cpp | 22 ++++++++++++++++--- rpcs3/Emu/RSX/RSXThread.h | 1 - rpcs3/Emu/SysCalls/Modules.cpp | 1 - .../SysCalls/Modules/cellSysutil_SaveData.cpp | 1 - rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 2 -- rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp | 1 - rpcs3/Emu/SysCalls/lv2/sys_spinlock.h | 2 -- rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 1 - rpcs3/Emu/SysCalls/lv2/sys_spu.h | 2 -- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 1 - rpcs3/Emu/System.h | 10 +++++---- rpcs3/Gui/ConLogFrame.cpp | 3 --- rpcs3/Gui/ConLogFrame.h | 1 - rpcs3/Gui/VHDDManager.h | 1 - rpcs3/Ini.cpp | 1 - rpcs3/stdafx.h | 13 +++++++++++ 54 files changed, 44 insertions(+), 121 deletions(-) diff --git a/Utilities/BEType.h b/Utilities/BEType.h index fd45750cb..0915a0b73 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -1,10 +1,5 @@ #pragma once -#include - -using std::min; -using std::max; - #define re16(val) _byteswap_ushort(val) #define re32(val) _byteswap_ulong(val) #define re64(val) _byteswap_uint64(val) diff --git a/Utilities/Log.cpp b/Utilities/Log.cpp index f95c2db3b..46b72ca75 100644 --- a/Utilities/Log.cpp +++ b/Utilities/Log.cpp @@ -3,15 +3,7 @@ #include "Log.h" #include "rMsgBox.h" #include -#include #include -#include -#include -#include -#include -#include -#include -#include #include "Thread.h" #include "rFile.h" diff --git a/Utilities/Log.h b/Utilities/Log.h index a57cb3f0b..c1826ef72 100644 --- a/Utilities/Log.h +++ b/Utilities/Log.h @@ -1,11 +1,4 @@ #pragma once -#include -#include -#include -#include -#include -#include -#include #include #include "Utilities/MTRingbuffer.h" diff --git a/Utilities/MTRingbuffer.h b/Utilities/MTRingbuffer.h index 8d9a27b29..991dbc077 100644 --- a/Utilities/MTRingbuffer.h +++ b/Utilities/MTRingbuffer.h @@ -1,8 +1,4 @@ #pragma once -#include -#include -#include -#include //Simple non-resizable FIFO Ringbuffer that can be simultaneously be read from and written to //if we ever get to use boost please replace this with boost::circular_buffer, there's no reason diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index efee7801f..80b9fc849 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -1,4 +1,4 @@ -#include +#include "stdafx.h" #include "Emu/System.h" #include "Emu/CPU/CPUThread.h" diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index 909d8ec87..efd99b840 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -1,7 +1,5 @@ #pragma once -#include - bool SM_IsAborted(); void SM_Sleep(); size_t SM_GetCurrentThreadId(); diff --git a/Utilities/SSemaphore.h b/Utilities/SSemaphore.h index 420d9e846..2e6126295 100644 --- a/Utilities/SSemaphore.h +++ b/Utilities/SSemaphore.h @@ -1,8 +1,5 @@ #pragma once -#include -#include - class SSemaphore { const u32 m_max; diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 596a4d1a9..3fe2de28a 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -1,10 +1,4 @@ #pragma once -#include -#include -#include -#include -#include -#include #if defined(_MSC_VER) #define snprintf _snprintf diff --git a/Utilities/Thread.h b/Utilities/Thread.h index ef210365a..987a9ea3d 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -1,9 +1,4 @@ #pragma once -#include -#include -#include -#include -#include static std::thread::id main_thread; diff --git a/Utilities/rFile.h b/Utilities/rFile.h index 7b596db7d..563b7475b 100644 --- a/Utilities/rFile.h +++ b/Utilities/rFile.h @@ -1,7 +1,5 @@ #pragma once -#include - struct FileInfo { std::string name; std::string fullName; diff --git a/Utilities/rPlatform.h b/Utilities/rPlatform.h index 716afd1db..ce88b70ec 100644 --- a/Utilities/rPlatform.h +++ b/Utilities/rPlatform.h @@ -1,6 +1,4 @@ #pragma once -#include -#include struct rPlatform { diff --git a/Utilities/rXml.cpp b/Utilities/rXml.cpp index 0a8fabf51..7d2ed9a53 100644 --- a/Utilities/rXml.cpp +++ b/Utilities/rXml.cpp @@ -1,7 +1,4 @@ #include "stdafx.h" - -#include - #include "Utilities/rXml.h" #include diff --git a/rpcs3/Emu/CPU/CPUDecoder.h b/rpcs3/Emu/CPU/CPUDecoder.h index 95b168b7a..b9b47dd7f 100644 --- a/rpcs3/Emu/CPU/CPUDecoder.h +++ b/rpcs3/Emu/CPU/CPUDecoder.h @@ -1,5 +1,4 @@ #pragma once -#include #include "CPUInstrTable.h" #pragma warning( disable : 4800 ) diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 3b28ea682..30a0f9402 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -286,8 +286,6 @@ void _se_translator(unsigned int u, EXCEPTION_POINTERS* pExp) if (u == EXCEPTION_ACCESS_VIOLATION && addr < 0x100000000) { // TODO: allow recovering from a page fault - //GetCurrentPPUThread().Stop(); - Emu.Pause(); throw fmt::Format("Access violation: addr = 0x%x (last_syscall=0x%llx (%s))", (u32)addr, (u64)GetCurrentCPUThread()->m_last_syscall, SysCalls::GetHLEFuncName((u64)GetCurrentCPUThread()->m_last_syscall).c_str()); } @@ -364,10 +362,12 @@ void CPUThread::Task() catch (const std::string& e) { LOG_ERROR(GENERAL, "Exception: %s", e.c_str()); + Emu.Pause(); } catch (const char* e) { LOG_ERROR(GENERAL, "Exception: %s", e); + Emu.Pause(); } for (auto& v : trace) LOG_NOTICE(PPU, "PC = 0x%llx", v); diff --git a/rpcs3/Emu/CPU/CPUThreadManager.h b/rpcs3/Emu/CPU/CPUThreadManager.h index ddf149fc7..480ef940f 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.h +++ b/rpcs3/Emu/CPU/CPUThreadManager.h @@ -1,7 +1,5 @@ #pragma once -#include - class CPUThread; class RawSPUThread; enum CPUThreadType : unsigned char; diff --git a/rpcs3/Emu/Cell/PPUProgramCompiler.h b/rpcs3/Emu/Cell/PPUProgramCompiler.h index 631233187..70c46b995 100644 --- a/rpcs3/Emu/Cell/PPUProgramCompiler.h +++ b/rpcs3/Emu/Cell/PPUProgramCompiler.h @@ -1,5 +1,4 @@ #pragma once -#include #include "PPUInstrTable.h" #include "Loader/ELF64.h" diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 5d59de0b2..5d4d02fef 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -10,11 +10,6 @@ #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUInterpreter.h" -#include -#include - -//extern gcmInfo gcm_info; - PPUThread& GetCurrentPPUThread() { PPCThread* thread = GetCurrentPPCThread(); diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index 0e8ff4786..195994a2b 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -1,6 +1,5 @@ #pragma once #include "Emu/Cell/PPCThread.h" -#include enum { diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index 3829db3c6..7736d821b 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -2,7 +2,6 @@ #include "PPCThread.h" #include "Emu/Event.h" #include "MFC.h" -#include enum SPUchannels { diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index c4c75202c..8cdd06837 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -1,6 +1,4 @@ #include "stdafx.h" -#include - #include "VFS.h" #include "vfsDirBase.h" #include "Emu/HDD/HDD.h" diff --git a/rpcs3/Emu/FS/vfsDevice.cpp b/rpcs3/Emu/FS/vfsDevice.cpp index d17917b6c..84d701210 100644 --- a/rpcs3/Emu/FS/vfsDevice.cpp +++ b/rpcs3/Emu/FS/vfsDevice.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#include #include "vfsDevice.h" #include "Utilities/rFile.h" diff --git a/rpcs3/Emu/FS/vfsDevice.h b/rpcs3/Emu/FS/vfsDevice.h index c092df5d0..d3921a529 100644 --- a/rpcs3/Emu/FS/vfsDevice.h +++ b/rpcs3/Emu/FS/vfsDevice.h @@ -1,5 +1,4 @@ #pragma once -#include struct vfsFileBase; class vfsDirBase; diff --git a/rpcs3/Emu/FS/vfsDir.h b/rpcs3/Emu/FS/vfsDir.h index 02f229eab..09c8ee197 100644 --- a/rpcs3/Emu/FS/vfsDir.h +++ b/rpcs3/Emu/FS/vfsDir.h @@ -1,5 +1,4 @@ #pragma once -#include #include "vfsDirBase.h" class vfsDir : public vfsDirBase diff --git a/rpcs3/Emu/FS/vfsFile.h b/rpcs3/Emu/FS/vfsFile.h index 4d4bcf718..4ab9ddc87 100644 --- a/rpcs3/Emu/FS/vfsFile.h +++ b/rpcs3/Emu/FS/vfsFile.h @@ -1,5 +1,4 @@ #pragma once -#include #include "vfsFileBase.h" class vfsFile : public vfsFileBase diff --git a/rpcs3/Emu/HDD/HDD.h b/rpcs3/Emu/HDD/HDD.h index 1c7cba7c5..f71fa77f3 100644 --- a/rpcs3/Emu/HDD/HDD.h +++ b/rpcs3/Emu/HDD/HDD.h @@ -1,5 +1,4 @@ #pragma once -#include #include "Emu/FS/vfsDevice.h" #include "Emu/FS/vfsLocalFile.h" diff --git a/rpcs3/Emu/IdManager.h b/rpcs3/Emu/IdManager.h index 06604ca47..b1170cce0 100644 --- a/rpcs3/Emu/IdManager.h +++ b/rpcs3/Emu/IdManager.h @@ -1,7 +1,5 @@ #pragma once -#include #include -#include #define rID_ANY -1 // was wxID_ANY diff --git a/rpcs3/Emu/Io/Keyboard.h b/rpcs3/Emu/Io/Keyboard.h index ff01933bd..bbcd8561b 100644 --- a/rpcs3/Emu/Io/Keyboard.h +++ b/rpcs3/Emu/Io/Keyboard.h @@ -1,6 +1,4 @@ #pragma once - -#include #include "KeyboardHandler.h" class KeyboardManager diff --git a/rpcs3/Emu/Io/KeyboardHandler.h b/rpcs3/Emu/Io/KeyboardHandler.h index a934a2816..c2acaa394 100644 --- a/rpcs3/Emu/Io/KeyboardHandler.h +++ b/rpcs3/Emu/Io/KeyboardHandler.h @@ -1,7 +1,5 @@ #pragma once -#include - extern u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode); // (TODO: Can it be problematic to place SysCalls in middle of nowhere?) enum KbPortStatus diff --git a/rpcs3/Emu/Io/Mouse.h b/rpcs3/Emu/Io/Mouse.h index 2ccc5611c..c6dbdd61d 100644 --- a/rpcs3/Emu/Io/Mouse.h +++ b/rpcs3/Emu/Io/Mouse.h @@ -1,6 +1,4 @@ #pragma once - -#include #include "MouseHandler.h" class MouseManager diff --git a/rpcs3/Emu/Io/MouseHandler.h b/rpcs3/Emu/Io/MouseHandler.h index 6029bda1a..e21e0d090 100644 --- a/rpcs3/Emu/Io/MouseHandler.h +++ b/rpcs3/Emu/Io/MouseHandler.h @@ -1,7 +1,5 @@ #pragma once -#include - enum MousePortStatus { CELL_MOUSE_STATUS_DISCONNECTED = 0x00000000, diff --git a/rpcs3/Emu/Io/Pad.h b/rpcs3/Emu/Io/Pad.h index f9758beb8..e6a326046 100644 --- a/rpcs3/Emu/Io/Pad.h +++ b/rpcs3/Emu/Io/Pad.h @@ -1,6 +1,4 @@ #pragma once - -#include #include "PadHandler.h" class PadManager diff --git a/rpcs3/Emu/Io/PadHandler.h b/rpcs3/Emu/Io/PadHandler.h index 104af38a8..4937d90cb 100644 --- a/rpcs3/Emu/Io/PadHandler.h +++ b/rpcs3/Emu/Io/PadHandler.h @@ -1,7 +1,5 @@ #pragma once -#include - enum PortStatus { CELL_PAD_STATUS_DISCONNECTED = 0x00000000, diff --git a/rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h b/rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h index b7df34dda..aab3f137e 100644 --- a/rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h +++ b/rpcs3/Emu/Io/Windows/WindowsKeyboardHandler.h @@ -1,7 +1,4 @@ #pragma once - -#include -#include #include "Emu/Io/KeyboardHandler.h" class WindowsKeyboardHandler final diff --git a/rpcs3/Emu/Io/Windows/WindowsMouseHandler.h b/rpcs3/Emu/Io/Windows/WindowsMouseHandler.h index 06f095e9b..a10dd123d 100644 --- a/rpcs3/Emu/Io/Windows/WindowsMouseHandler.h +++ b/rpcs3/Emu/Io/Windows/WindowsMouseHandler.h @@ -1,6 +1,4 @@ #pragma once - -#include #include "Emu/Io/MouseHandler.h" class WindowsMouseHandler final diff --git a/rpcs3/Emu/Io/Windows/WindowsPadHandler.h b/rpcs3/Emu/Io/Windows/WindowsPadHandler.h index e67b659c3..47bdefa98 100644 --- a/rpcs3/Emu/Io/Windows/WindowsPadHandler.h +++ b/rpcs3/Emu/Io/Windows/WindowsPadHandler.h @@ -1,6 +1,4 @@ #pragma once - -#include #include "Emu/Io/PadHandler.h" class WindowsPadHandler final diff --git a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp index 36364d452..484e362a8 100644 --- a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp +++ b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp @@ -1,9 +1,7 @@ #include "stdafx.h" #if defined (_WIN32) -#include #include "Utilities/Log.h" #include "XInputPadHandler.h" -#include namespace { const DWORD THREAD_TIMEOUT = 1000; diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index b376b23c7..741ae8ddf 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -1,9 +1,7 @@ #include "stdafx.h" -#include - #include "Utilities/Log.h" -#include "Memory.h" #include "Emu/System.h" +#include "Memory.h" #ifndef _WIN32 #include @@ -36,6 +34,7 @@ void MemoryBase::RegisterPages(u64 addr, u32 size) if (m_pages[i]) { LOG_ERROR(MEMORY, "Page already registered (addr=0x%llx)", i * 4096); + Emu.Pause(); } m_pages[i] = 1; // TODO: define page parameters } @@ -56,6 +55,7 @@ void MemoryBase::UnregisterPages(u64 addr, u32 size) if (!m_pages[i]) { LOG_ERROR(MEMORY, "Page not registered (addr=0x%llx)", i * 4096); + Emu.Pause(); } m_pages[i] = 0; // TODO: define page parameters } diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index d5fdb4f37..e03192212 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -2,8 +2,6 @@ #define PAGE_4K(x) (x + 4095) & ~(4095) -#include -#include #include struct MemInfo diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index bc261ca67..50d2c050d 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -2155,7 +2155,7 @@ void RSXThread::Task() }); vblank.detach(); - while(!TestDestroy()) + while(!TestDestroy()) try { if (Emu.IsStopped()) { @@ -2246,6 +2246,16 @@ void RSXThread::Task() m_ctrl->get = get + (count + 1) * 4; //memset(Memory.GetMemFromAddr(p.m_ioAddress + get), 0, (count + 1) * 4); } + catch (const std::string& e) + { + LOG_ERROR(RSX, "Exception: %s", e.c_str()); + Emu.Pause(); + } + catch (const char* e) + { + LOG_ERROR(RSX, "Exception: %s", e); + Emu.Pause(); + } while (!is_vblank_stopped) { @@ -2278,11 +2288,17 @@ void RSXThread::Init(const u32 ioAddress, const u32 ioSize, const u32 ctrlAddres u32 RSXThread::ReadIO32(u32 addr) { u32 value; - Memory.RSXIOMem.Read32(Memory.RSXIOMem.GetStartAddr() + addr, &value); + if (!Memory.RSXIOMem.Read32(Memory.RSXIOMem.GetStartAddr() + addr, &value)) + { + throw fmt::Format("%s(rsxio_addr=0x%x): RSXIO memory not mapped", __FUNCTION__, addr); + } return value; } void RSXThread::WriteIO32(u32 addr, u32 value) { - Memory.RSXIOMem.Write32(Memory.RSXIOMem.GetStartAddr() + addr, value); + if (!Memory.RSXIOMem.Write32(Memory.RSXIOMem.GetStartAddr() + addr, value)) + { + throw fmt::Format("%s(rsxio_addr=0x%x): RSXIO memory not mapped", __FUNCTION__, addr); + } } \ No newline at end of file diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index ed7ab000d..031b00455 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -6,7 +6,6 @@ #include "Emu/SysCalls/Callback.h" #include -#include // For tracking a list of used gcm commands #include "Utilities/SSemaphore.h" #include "Utilities/Thread.h" diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index b7fe76598..3880c1bda 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -4,7 +4,6 @@ #include "Emu/SysCalls/Modules.h" #include "Emu/SysCalls/Static.h" #include "Crypto/sha1.h" -#include #include "ModuleManager.h" u32 getFunctionId(const char* name) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index 0d69f762a..978c7ce08 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -8,7 +8,6 @@ #include "Emu/FS/vfsDir.h" #include "Loader/PSF.h" #include "cellSysutil_SaveData.h" -#include extern Module *cellSysutil; diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index fbfe7fe03..44a2e43e2 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -13,8 +13,6 @@ #include "Emu/SysCalls/lv2/sys_time.h" #include "sceNp.h" #include "sceNpTrophy.h" -#include -#include //void sceNpTrophy_unload(); //void sceNpTrophy_init(); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp index c700ff475..454b23572 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp @@ -3,7 +3,6 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" -#include #include "sys_spinlock.h" SysCallBase sys_spinlock("sys_spinlock"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h index cec77494c..0dfaa371f 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h @@ -1,7 +1,5 @@ #pragma once -#include - // SysCalls void sys_spinlock_initialize(mem_ptr_t>> lock); void sys_spinlock_lock(mem_ptr_t>> lock); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index 5a1a75aea..be2171720 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -8,7 +8,6 @@ #include "Emu/FS/vfsFile.h" #include "Loader/ELF.h" #include "sys_spu.h" -#include static SysCallBase sys_spu("sys_spu"); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.h b/rpcs3/Emu/SysCalls/lv2/sys_spu.h index 732f62dd5..df56f7cb8 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.h @@ -1,7 +1,5 @@ #pragma once -#include - enum { SYS_SPU_THREAD_GROUP_TYPE_NORMAL = 0x00, diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 1b1667ddd..725039469 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -4,7 +4,6 @@ #include "Emu/SysCalls/SysCalls.h" #include "Emu/Event.h" -#include #include "sys_timer.h" SysCallBase sys_timer("sys_timer"); diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index e600e5ceb..2b3462ffa 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -1,8 +1,4 @@ #pragma once - -#include -#include -#include #include "Loader/Loader.h" enum Status @@ -90,6 +86,8 @@ class Emulator std::vector m_break_points; std::vector m_marked_points; + std::recursive_mutex m_core_mutex; + CPUThreadManager* m_thread_manager; PadManager* m_pad_manager; KeyboardManager* m_keyboard_manager; @@ -120,6 +118,8 @@ public: void SetPath(const std::string& path, const std::string& elf_path = ""); void SetTitleID(const std::string& id); + std::recursive_mutex& GetCoreMutex() { return m_core_mutex; } + CPUThreadManager& GetCPU() { return *m_thread_manager; } PadManager& GetPadManager() { return *m_pad_manager; } KeyboardManager& GetKeyboardManager() { return *m_keyboard_manager; } @@ -175,6 +175,8 @@ public: __forceinline bool IsReady() const { return m_status == Ready; } }; +#define LV2_LOCK(x) std::lock_guard x(Emu.GetCoreMutex()) + extern Emulator Emu; typedef void(*CallAfterCbType)(std::function func); diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index ead900940..7cb9d1031 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -3,9 +3,6 @@ #include #include #include -#include -#include -#include #include "Ini.h" #include "Utilities/Log.h" diff --git a/rpcs3/Gui/ConLogFrame.h b/rpcs3/Gui/ConLogFrame.h index 911d4f313..cecff5fcf 100644 --- a/rpcs3/Gui/ConLogFrame.h +++ b/rpcs3/Gui/ConLogFrame.h @@ -1,6 +1,5 @@ #pragma once #include -#include namespace Log { diff --git a/rpcs3/Gui/VHDDManager.h b/rpcs3/Gui/VHDDManager.h index b3b8ad9a4..ee9f8d128 100644 --- a/rpcs3/Gui/VHDDManager.h +++ b/rpcs3/Gui/VHDDManager.h @@ -1,5 +1,4 @@ #pragma once -#include #include #include "Emu/HDD/HDD.h" diff --git a/rpcs3/Ini.cpp b/rpcs3/Ini.cpp index 2dccbfc0d..609d3c285 100644 --- a/rpcs3/Ini.cpp +++ b/rpcs3/Ini.cpp @@ -3,7 +3,6 @@ #include "Utilities/StrFmt.h" #include "Ini.h" -#include #include #include diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 57405a0e0..eba339fe0 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -42,6 +42,19 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "Utilities/GNU.h" From 028ce2dd9f86fb1077b2753f0747bea4653f475a Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 02:49:26 +0400 Subject: [PATCH 10/19] stdafx_gui.h created, wx removed from stdafx.h --- Utilities/GNU.h | 11 + Utilities/StrFmt.cpp | 4 + Utilities/StrFmt.h | 5 + Utilities/rFile.cpp | 4 + Utilities/rMsgBox.cpp | 1 + Utilities/rPlatform.cpp | 1 + rpcs3/Emu/Cell/PPUProgramCompiler.cpp | 2 +- rpcs3/Emu/Cell/SPUThread.cpp | 3 +- rpcs3/Emu/FS/VFS.cpp | 2 + rpcs3/Emu/Io/XInput/XInputPadHandler.cpp | 2 +- rpcs3/Emu/Memory/Memory.cpp | 2 + rpcs3/Emu/Memory/Memory.h | 2 +- rpcs3/Emu/Memory/MemoryBlock.h | 2 +- rpcs3/Emu/RSX/GL/OpenGL.h | 1 + rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 5 + rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 4 +- rpcs3/Emu/SysCalls/lv2/sys_time.cpp | 3 + rpcs3/Emu/System.cpp | 9 +- rpcs3/Gui/AutoPauseManager.cpp | 2 +- rpcs3/Gui/CompilerELF.cpp | 2 +- rpcs3/Gui/ConLogFrame.cpp | 2 +- rpcs3/Gui/Debugger.cpp | 2 +- rpcs3/Gui/DisAsmFrame.cpp | 2 +- rpcs3/Gui/GLGSFrame.cpp | 2 +- rpcs3/Gui/GSFrame.cpp | 2 +- rpcs3/Gui/GameViewer.cpp | 2 +- rpcs3/Gui/InterpreterDisAsm.cpp | 2 +- rpcs3/Gui/KernelExplorer.cpp | 2 +- rpcs3/Gui/MainFrame.cpp | 2 +- rpcs3/Gui/MemoryViewer.cpp | 2 +- rpcs3/Gui/PADManager.cpp | 2 +- rpcs3/Gui/RSXDebugger.cpp | 2 +- rpcs3/Gui/SaveDataUtility.cpp | 3 +- rpcs3/Gui/TextInputDialog.cpp | 2 +- rpcs3/Gui/VFSManager.cpp | 2 +- rpcs3/Gui/VHDDManager.cpp | 2 +- rpcs3/emucore.vcxproj | 13 +- rpcs3/emucore.vcxproj.filters | 69 +++-- rpcs3/rpcs3.cpp | 2 +- rpcs3/rpcs3.vcxproj | 37 +-- rpcs3/rpcs3.vcxproj.filters | 87 ++---- rpcs3/stdafx.h | 24 -- rpcs3/stdafx_gui.cpp | 1 + rpcs3/stdafx_gui.h | 270 +++++++++++++++++++ 45 files changed, 421 insertions(+), 183 deletions(-) create mode 100644 rpcs3/stdafx_gui.cpp create mode 100644 rpcs3/stdafx_gui.h diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 58074f983..4087004e4 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -83,3 +83,14 @@ int clock_gettime(int foo, struct timespec *ts); #define DWORD int32_t #endif + +#ifndef InterlockedCompareExchange +static __forceinline uint32_t InterlockedCompareExchange(volatile uint32_t* dest, uint32_t exch, uint32_t comp) +{ + return _InterlockedCompareExchange((volatile long*)dest, exch, comp); +} +static __forceinline uint64_t InterlockedCompareExchange(volatile uint64_t* dest, uint64_t exch, uint64_t comp) +{ + return _InterlockedCompareExchange64((volatile long long*)dest, exch, comp); +} +#endif \ No newline at end of file diff --git a/Utilities/StrFmt.cpp b/Utilities/StrFmt.cpp index 2ee8d8c9f..cc20761d6 100644 --- a/Utilities/StrFmt.cpp +++ b/Utilities/StrFmt.cpp @@ -14,7 +14,11 @@ std::string fmt::FormatV(const char *fmt, va_list args) for (;;) { std::vector buffptr(length); +#if !defined(_MSC_VER) size_t printlen = vsnprintf(buffptr.data(), length, fmt, args); +#else + size_t printlen = vsnprintf_s(buffptr.data(), length, length - 1, fmt, args); +#endif if (printlen < length) { str = std::string(buffptr.data(), printlen); diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 3fe2de28a..fb8e2ff1f 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -1,4 +1,5 @@ #pragma once +#include #if defined(_MSC_VER) #define snprintf _snprintf @@ -111,10 +112,14 @@ namespace fmt{ for (;;) { std::vector buffptr(length); +#if !defined(_MSC_VER) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wformat-security" size_t printlen = snprintf(buffptr.data(), length, fmt.c_str(), std::forward(parameters)...); #pragma clang diagnostic pop +#else + size_t printlen = _snprintf_s(buffptr.data(), length, length - 1, fmt.c_str(), std::forward(parameters)...); +#endif if (printlen < length) { str = string(buffptr.data(), printlen); diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index a4b315354..7608f0e4c 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -1,9 +1,13 @@ #include "stdafx.h" #include "Log.h" #include +#include +#include #include "rFile.h" #ifdef _WIN32 +#include + // Maybe in StrFmt? std::wstring ConvertUTF8ToWString(const std::string &source) { int len = (int)source.size(); diff --git a/Utilities/rMsgBox.cpp b/Utilities/rMsgBox.cpp index cabb309e1..4ce0ac546 100644 --- a/Utilities/rMsgBox.cpp +++ b/Utilities/rMsgBox.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include #include "rMsgBox.h" #ifndef QT_UI diff --git a/Utilities/rPlatform.cpp b/Utilities/rPlatform.cpp index 4ba72684f..c6b86dd77 100644 --- a/Utilities/rPlatform.cpp +++ b/Utilities/rPlatform.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include #ifndef _WIN32 #include diff --git a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp index fd28e84cc..fcc47c1be 100644 --- a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp +++ b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "PPUProgramCompiler.h" #include "Utilities/rFile.h" diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 0a272050f..71485213a 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -11,7 +11,6 @@ #include "Emu/SysCalls/lv2/sys_spu.h" #include "Emu/SysCalls/lv2/sys_event_flag.h" #include "Emu/SysCalls/lv2/sys_time.h" -#include "Emu/Event.h" #include "Emu/Cell/SPUDisAsm.h" #include "Emu/Cell/SPUThread.h" @@ -424,7 +423,7 @@ void SPUThread::EnqMfcCmd(MFCReg& MFCArgs) { if (buf[i] != R_DATA[i]) { - if (InterlockedCompareExchange64((volatile long long*)(Memory + (ea + i * 8)), buf[i], R_DATA[i]) != R_DATA[i]) + if (InterlockedCompareExchange((volatile u64*)(Memory + (ea + i * 8)), buf[i], R_DATA[i]) != R_DATA[i]) { m_events |= SPU_EVENT_LR; MFCArgs.AtomicStat.PushUncond(MFC_PUTLLC_FAILURE); diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index 8cdd06837..518ec6b6b 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -5,6 +5,8 @@ #include "vfsDeviceLocalFile.h" #include "Ini.h" +#undef CreateFile // TODO: what's wrong with it? + int sort_devices(const void* _a, const void* _b) { const vfsDevice& a = **(const vfsDevice**)_a; diff --git a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp index 484e362a8..27033c5d3 100644 --- a/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp +++ b/rpcs3/Emu/Io/XInput/XInputPadHandler.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #if defined (_WIN32) #include "Utilities/Log.h" #include "XInputPadHandler.h" diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 741ae8ddf..f772145cc 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -5,6 +5,8 @@ #ifndef _WIN32 #include +#else +#include #endif /* OS X uses MAP_ANON instead of MAP_ANONYMOUS */ diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index cc9150669..3f5e2c649 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -365,7 +365,7 @@ public: template void WriteString(const T addr, const std::string& str) { - strcpy((char*)GetMemFromAddr(addr), str.c_str()); + memcpy(GetMemFromAddr(addr), str.c_str(), str.size()); } u32 GetUserMemTotalSize() diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index e03192212..117d0bb32 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -2,7 +2,7 @@ #define PAGE_4K(x) (x + 4095) & ~(4095) -#include +//#include struct MemInfo { diff --git a/rpcs3/Emu/RSX/GL/OpenGL.h b/rpcs3/Emu/RSX/GL/OpenGL.h index 42eb742f7..ce4612c66 100644 --- a/rpcs3/Emu/RSX/GL/OpenGL.h +++ b/rpcs3/Emu/RSX/GL/OpenGL.h @@ -4,6 +4,7 @@ #endif #ifdef _WIN32 +#include #include "GL/gl.h" #include "GL/glext.h" typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC) (int interval); diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 59f240d2b..9858942e0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -3,6 +3,11 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include +#include +#include +#include +#include #include "Utilities/rMsgBox.h" #include "Emu/SysCalls/lv2/sys_time.h" #include "cellSysutil.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 8106aa2cd..d33458153 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include #include "cellSysutil.h" #include "Emu/RSX/sysutil_video.h" #include "Emu/RSX/GSManager.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 44a2e43e2..9a0c1b590 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -161,7 +161,7 @@ int sceNpTrophyRegisterContext(u32 context, u32 handle, mem_func_ptr_t +#endif #include "sys_time.h" SysCallBase sys_time("sys_time"); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 52577251d..c7983a224 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -422,7 +422,7 @@ void Emulator::Pause() //ConLog.Write("pause..."); SendDbgCommand(DID_PAUSE_EMU); - if (InterlockedCompareExchange((volatile unsigned long*)&m_status, Paused, Running) == Running) + if (InterlockedCompareExchange((volatile u32*)&m_status, Paused, Running) == Running) { SendDbgCommand(DID_PAUSED_EMU); } @@ -512,9 +512,10 @@ void Emulator::SavePoints(const std::string& path) void Emulator::LoadPoints(const std::string& path) { - struct stat buf; - if (!stat(path.c_str(), &buf)) - return; + if (!rExists(path)) return; + //struct stat buf; + //if (!stat(path.c_str(), &buf)) + //return; std::ifstream f(path, std::ios::binary); if (!f.is_open()) return; diff --git a/rpcs3/Gui/AutoPauseManager.cpp b/rpcs3/Gui/AutoPauseManager.cpp index 14bb12d8c..11dbc5e9d 100644 --- a/rpcs3/Gui/AutoPauseManager.cpp +++ b/rpcs3/Gui/AutoPauseManager.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Emu/System.h" #include "AutoPauseManager.h" #include diff --git a/rpcs3/Gui/CompilerELF.cpp b/rpcs3/Gui/CompilerELF.cpp index 072fa5364..c4254163e 100644 --- a/rpcs3/Gui/CompilerELF.cpp +++ b/rpcs3/Gui/CompilerELF.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/rMsgBox.h" #include "Emu/Cell/PPUProgramCompiler.h" diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index 7cb9d1031..0dd80f269 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include #include diff --git a/rpcs3/Gui/Debugger.cpp b/rpcs3/Gui/Debugger.cpp index f3203eac9..26018d056 100644 --- a/rpcs3/Gui/Debugger.cpp +++ b/rpcs3/Gui/Debugger.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include #include "Emu/Memory/Memory.h" diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index 74bfddc0d..48e6ff726 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Gui/GLGSFrame.cpp b/rpcs3/Gui/GLGSFrame.cpp index a52c07be1..98883da47 100644 --- a/rpcs3/Gui/GLGSFrame.cpp +++ b/rpcs3/Gui/GLGSFrame.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "GLGSFrame.h" #include "Utilities/Timer.h" diff --git a/rpcs3/Gui/GSFrame.cpp b/rpcs3/Gui/GSFrame.cpp index fde662b2d..589d940f5 100644 --- a/rpcs3/Gui/GSFrame.cpp +++ b/rpcs3/Gui/GSFrame.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "GSFrame.h" #include "Emu/System.h" #include "Emu/RSX/sysutil_video.h" diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index d9119cbbc..b59ccae3c 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/AutoPause.h" #include "Utilities/Log.h" #include "Utilities/rFile.h" diff --git a/rpcs3/Gui/InterpreterDisAsm.cpp b/rpcs3/Gui/InterpreterDisAsm.cpp index 674dd6bd6..33274274a 100644 --- a/rpcs3/Gui/InterpreterDisAsm.cpp +++ b/rpcs3/Gui/InterpreterDisAsm.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Gui/KernelExplorer.cpp b/rpcs3/Gui/KernelExplorer.cpp index 42dd1e224..3e51442db 100644 --- a/rpcs3/Gui/KernelExplorer.cpp +++ b/rpcs3/Gui/KernelExplorer.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index ccb24ac58..dca2b82f8 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Gui/MemoryViewer.cpp b/rpcs3/Gui/MemoryViewer.cpp index fad7023fa..0a674c563 100644 --- a/rpcs3/Gui/MemoryViewer.cpp +++ b/rpcs3/Gui/MemoryViewer.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" diff --git a/rpcs3/Gui/PADManager.cpp b/rpcs3/Gui/PADManager.cpp index 3626f1b8b..918797524 100644 --- a/rpcs3/Gui/PADManager.cpp +++ b/rpcs3/Gui/PADManager.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Gui/RSXDebugger.cpp b/rpcs3/Gui/RSXDebugger.cpp index 441bb1438..7b0a95877 100644 --- a/rpcs3/Gui/RSXDebugger.cpp +++ b/rpcs3/Gui/RSXDebugger.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "rpcs3/Ini.h" #include "Utilities/rPlatform.h" #include "Utilities/Log.h" diff --git a/rpcs3/Gui/SaveDataUtility.cpp b/rpcs3/Gui/SaveDataUtility.cpp index 2bebd478a..534188d07 100644 --- a/rpcs3/Gui/SaveDataUtility.cpp +++ b/rpcs3/Gui/SaveDataUtility.cpp @@ -1,6 +1,5 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "SaveDataUtility.h" -#include "stdafx.h" #include #include #include "Utilities/Log.h" diff --git a/rpcs3/Gui/TextInputDialog.cpp b/rpcs3/Gui/TextInputDialog.cpp index 071904d77..a95795b2d 100644 --- a/rpcs3/Gui/TextInputDialog.cpp +++ b/rpcs3/Gui/TextInputDialog.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "TextInputDialog.h" TextInputDialog::TextInputDialog(wxWindow* parent, const std::string& defvalue, const std::string& label) diff --git a/rpcs3/Gui/VFSManager.cpp b/rpcs3/Gui/VFSManager.cpp index 9df763384..d83680fd1 100644 --- a/rpcs3/Gui/VFSManager.cpp +++ b/rpcs3/Gui/VFSManager.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Gui/VHDDManager.cpp b/rpcs3/Gui/VHDDManager.cpp index 580884825..4033c2986 100644 --- a/rpcs3/Gui/VHDDManager.cpp +++ b/rpcs3/Gui/VHDDManager.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Utilities/Log.h" #include "VHDDManager.h" #include "TextInputDialog.h" diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index bf42bedd3..9860e3d59 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -29,6 +29,11 @@ + + + + + @@ -55,7 +60,6 @@ - @@ -221,9 +225,10 @@ + - + @@ -262,7 +267,6 @@ - @@ -409,6 +413,9 @@ + + + {C4A10229-4712-4BD2-B63E-50D93C67A038} emucore diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 729660c39..d045709d8 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -365,9 +365,6 @@ Emu\SysCalls - - Emu\Cell - Emu\SysCalls\currently_unused @@ -608,6 +605,21 @@ Emu\SysCalls\Modules + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + @@ -919,9 +931,6 @@ Loader - - Loader - Header Files @@ -949,9 +958,6 @@ Emu\SysCalls - - Utilities - Utilities\SimpleIni @@ -961,21 +967,6 @@ Emu - - Utilities - - - Utilities - - - Utilities - - - Utilities - - - Emu\Cell - Emu\SysCalls\currently_unused @@ -1054,9 +1045,6 @@ Emu\SysCalls\lv2 - - Header Files - Utilities @@ -1177,5 +1165,32 @@ Emu\SysCalls\Modules + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Utilities + + + Loader + + + + \ No newline at end of file diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index 9aeb33c2f..4588e8ca8 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx_gui.h" #include "Emu/System.h" #include "rpcs3.h" #include "Ini.h" diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 747314539..723c26520 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -82,6 +82,8 @@ Use ..\wxWidgets\include\msvc Async + stdafx_gui.h + $(IntDir)$(TargetName)_gui.pch true @@ -106,6 +108,8 @@ ..\wxWidgets\include\msvc _UNICODE;UNICODE;MSVC_CRT_MEMLEAK_DETECTION;%(PreprocessorDefinitions) Async + stdafx_gui.h + $(IntDir)$(TargetName)_gui.pch true @@ -136,6 +140,8 @@ Async false true + stdafx_gui.h + $(IntDir)$(TargetName)_gui.pch Windows @@ -155,14 +161,7 @@ - - - - - - - - + @@ -183,30 +182,18 @@ - - Create - Create + Create + Create + Create - - - - - - - - - - - - - + @@ -232,7 +219,7 @@ - + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index b9aa2a304..2adfacee2 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -4,9 +4,6 @@ {98fb6fa5-9a9a-48a6-a6b4-be4b9a69b76e} - - {47155d25-741d-42c0-8850-f22aafca082a} - {9bd88f78-8528-48f3-b9e0-78e06476b04d} @@ -19,14 +16,14 @@ {b30572ce-b602-4c10-ad69-bd3f1c8a0144} + + {47155d25-741d-42c0-8850-f22aafca082a} + rpcs3 - - rpcs3 - Gui @@ -45,9 +42,6 @@ Gui - - Utilities - Gui @@ -66,27 +60,6 @@ Gui - - Utilities - - - Utilities - - - Utilities - - - Utilities - - - Utilities - - - Utilities - - - Utilities - Gui @@ -108,35 +81,20 @@ Io\XInput + + rpcs3 + + + Gui + - - Utilities - Utilities - - Utilities - - - Utilities - - - Utilities - - - Utilities - - - Utilities - - - Utilities - Gui @@ -170,9 +128,6 @@ Gui - - rpcs3 - rpcs3 @@ -185,21 +140,6 @@ Gui - - Utilities - - - Utilities - - - Utilities - - - Utilities - - - Utilities - Gui @@ -209,9 +149,6 @@ Gui - - Utilities - Gui @@ -233,5 +170,11 @@ Io\XInput + + rpcs3 + + + Gui + \ No newline at end of file diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index eba339fe0..232bfd704 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -7,30 +7,6 @@ #endif #define NOMINMAX -#ifndef QT_UI -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif #if defined(MSVC_CRT_MEMLEAK_DETECTION) && defined(_DEBUG) && !defined(DBG_NEW) #define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ ) diff --git a/rpcs3/stdafx_gui.cpp b/rpcs3/stdafx_gui.cpp new file mode 100644 index 000000000..b4f62112d --- /dev/null +++ b/rpcs3/stdafx_gui.cpp @@ -0,0 +1 @@ +#include "stdafx_gui.h" \ No newline at end of file diff --git a/rpcs3/stdafx_gui.h b/rpcs3/stdafx_gui.h new file mode 100644 index 000000000..91043b4ba --- /dev/null +++ b/rpcs3/stdafx_gui.h @@ -0,0 +1,270 @@ +#pragma once + +#ifdef MSVC_CRT_MEMLEAK_DETECTION +#define _CRTDBG_MAP_ALLOC +#include +#include +#endif + +#define NOMINMAX +#ifndef QT_UI +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#if defined(MSVC_CRT_MEMLEAK_DETECTION) && defined(_DEBUG) && !defined(DBG_NEW) +#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ ) +#define new DBG_NEW +#endif + +// This header should be frontend-agnostic, so don't assume wx includes everything +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Utilities/GNU.h" + +typedef unsigned int uint; + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +typedef int8_t s8; +typedef int16_t s16; +typedef int32_t s32; +typedef int64_t s64; + +union u128 +{ + struct + { + u64 hi; + u64 lo; + }; + + u64 _u64[2]; + u32 _u32[4]; + u16 _u16[8]; + u8 _u8[16]; + + operator u64() const { return _u64[0]; } + operator u32() const { return _u32[0]; } + operator u16() const { return _u16[0]; } + operator u8() const { return _u8[0]; } + + operator bool() const { return _u64[0] != 0 || _u64[1] != 0; } + + static u128 From128(u64 hi, u64 lo) + { + u128 ret = { hi, lo }; + return ret; + } + + static u128 From64(u64 src) + { + u128 ret = { 0, src }; + return ret; + } + + static u128 From32(u32 src) + { + u128 ret; + ret._u32[0] = src; + ret._u32[1] = 0; + ret._u32[2] = 0; + ret._u32[3] = 0; + return ret; + } + + static u128 FromBit(u32 bit) + { + u128 ret; + if (bit < 64) + { + ret.hi = 0; + ret.lo = (u64)1 << bit; + } + else if (bit < 128) + { + ret.hi = (u64)1 << (bit - 64); + ret.lo = 0; + } + else + { + ret.hi = 0; + ret.lo = 0; + } + return ret; + } + + bool operator == (const u128& right) const + { + return (lo == right.lo) && (hi == right.hi); + } + + bool operator != (const u128& right) const + { + return (lo != right.lo) || (hi != right.hi); + } + + u128 operator | (const u128& right) const + { + return From128(hi | right.hi, lo | right.lo); + } + + u128 operator & (const u128& right) const + { + return From128(hi & right.hi, lo & right.lo); + } + + u128 operator ^ (const u128& right) const + { + return From128(hi ^ right.hi, lo ^ right.lo); + } + + u128 operator ~ () const + { + return From128(~hi, ~lo); + } + + static __forceinline u128 byteswap(const u128 val) + { + u128 ret; + ret.lo = _byteswap_uint64(val.hi); + ret.hi = _byteswap_uint64(val.lo); + return ret; + } +}; + +union s128 +{ + struct + { + s64 hi; + s64 lo; + }; + + u64 _i64[2]; + u32 _i32[4]; + u16 _i16[8]; + u8 _i8[16]; + + operator s64() const { return _i64[0]; } + operator s32() const { return _i32[0]; } + operator s16() const { return _i16[0]; } + operator s8() const { return _i8[0]; } + + operator bool() const { return _i64[0] != 0 || _i64[1] != 0; } + + static s128 From64(s64 src) + { + s128 ret = { src, 0 }; + return ret; + } + + static s128 From32(s32 src) + { + s128 ret; + ret._i32[0] = src; + ret._i32[1] = 0; + ret.hi = 0; + return ret; + } + + bool operator == (const s128& right) const + { + return (lo == right.lo) && (hi == right.hi); + } + + bool operator != (const s128& right) const + { + return (lo != right.lo) || (hi != right.hi); + } +}; + +//TODO: SSE style +/* +struct u128 +{ +__m128 m_val; + +u128 GetValue128() +{ +u128 ret; +_mm_store_ps( (float*)&ret, m_val ); +return ret; +} + +u64 GetValue64() +{ +u64 ret; +_mm_store_ps( (float*)&ret, m_val ); +return ret; +} + +u32 GetValue32() +{ +u32 ret; +_mm_store_ps( (float*)&ret, m_val ); +return ret; +} + +u16 GetValue16() +{ +u16 ret; +_mm_store_ps( (float*)&ret, m_val ); +return ret; +} + +u8 GetValue8() +{ +u8 ret; +_mm_store_ps( (float*)&ret, m_val ); +return ret; +} +}; +*/ + +#define AlignAddr(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1)) + +#include "Utilities/StrFmt.h" +#include "Utilities/BEType.h" + +#define _PRGNAME_ "RPCS3" +#define _PRGVER_ "0.0.0.5" \ No newline at end of file From 0be2728e1927231cf4983ab773d497f9115abe75 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 16:07:50 +0400 Subject: [PATCH 11/19] Compilation fix --- rpcs3/stdafx_gui.h | 244 +-------------------------------------------- 1 file changed, 1 insertion(+), 243 deletions(-) diff --git a/rpcs3/stdafx_gui.h b/rpcs3/stdafx_gui.h index 91043b4ba..090192991 100644 --- a/rpcs3/stdafx_gui.h +++ b/rpcs3/stdafx_gui.h @@ -1,12 +1,5 @@ #pragma once -#ifdef MSVC_CRT_MEMLEAK_DETECTION -#define _CRTDBG_MAP_ALLOC -#include -#include -#endif - -#define NOMINMAX #ifndef QT_UI #include #include @@ -32,239 +25,4 @@ #include #endif -#if defined(MSVC_CRT_MEMLEAK_DETECTION) && defined(_DEBUG) && !defined(DBG_NEW) -#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ ) -#define new DBG_NEW -#endif - -// This header should be frontend-agnostic, so don't assume wx includes everything -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Utilities/GNU.h" - -typedef unsigned int uint; - -typedef uint8_t u8; -typedef uint16_t u16; -typedef uint32_t u32; -typedef uint64_t u64; - -typedef int8_t s8; -typedef int16_t s16; -typedef int32_t s32; -typedef int64_t s64; - -union u128 -{ - struct - { - u64 hi; - u64 lo; - }; - - u64 _u64[2]; - u32 _u32[4]; - u16 _u16[8]; - u8 _u8[16]; - - operator u64() const { return _u64[0]; } - operator u32() const { return _u32[0]; } - operator u16() const { return _u16[0]; } - operator u8() const { return _u8[0]; } - - operator bool() const { return _u64[0] != 0 || _u64[1] != 0; } - - static u128 From128(u64 hi, u64 lo) - { - u128 ret = { hi, lo }; - return ret; - } - - static u128 From64(u64 src) - { - u128 ret = { 0, src }; - return ret; - } - - static u128 From32(u32 src) - { - u128 ret; - ret._u32[0] = src; - ret._u32[1] = 0; - ret._u32[2] = 0; - ret._u32[3] = 0; - return ret; - } - - static u128 FromBit(u32 bit) - { - u128 ret; - if (bit < 64) - { - ret.hi = 0; - ret.lo = (u64)1 << bit; - } - else if (bit < 128) - { - ret.hi = (u64)1 << (bit - 64); - ret.lo = 0; - } - else - { - ret.hi = 0; - ret.lo = 0; - } - return ret; - } - - bool operator == (const u128& right) const - { - return (lo == right.lo) && (hi == right.hi); - } - - bool operator != (const u128& right) const - { - return (lo != right.lo) || (hi != right.hi); - } - - u128 operator | (const u128& right) const - { - return From128(hi | right.hi, lo | right.lo); - } - - u128 operator & (const u128& right) const - { - return From128(hi & right.hi, lo & right.lo); - } - - u128 operator ^ (const u128& right) const - { - return From128(hi ^ right.hi, lo ^ right.lo); - } - - u128 operator ~ () const - { - return From128(~hi, ~lo); - } - - static __forceinline u128 byteswap(const u128 val) - { - u128 ret; - ret.lo = _byteswap_uint64(val.hi); - ret.hi = _byteswap_uint64(val.lo); - return ret; - } -}; - -union s128 -{ - struct - { - s64 hi; - s64 lo; - }; - - u64 _i64[2]; - u32 _i32[4]; - u16 _i16[8]; - u8 _i8[16]; - - operator s64() const { return _i64[0]; } - operator s32() const { return _i32[0]; } - operator s16() const { return _i16[0]; } - operator s8() const { return _i8[0]; } - - operator bool() const { return _i64[0] != 0 || _i64[1] != 0; } - - static s128 From64(s64 src) - { - s128 ret = { src, 0 }; - return ret; - } - - static s128 From32(s32 src) - { - s128 ret; - ret._i32[0] = src; - ret._i32[1] = 0; - ret.hi = 0; - return ret; - } - - bool operator == (const s128& right) const - { - return (lo == right.lo) && (hi == right.hi); - } - - bool operator != (const s128& right) const - { - return (lo != right.lo) || (hi != right.hi); - } -}; - -//TODO: SSE style -/* -struct u128 -{ -__m128 m_val; - -u128 GetValue128() -{ -u128 ret; -_mm_store_ps( (float*)&ret, m_val ); -return ret; -} - -u64 GetValue64() -{ -u64 ret; -_mm_store_ps( (float*)&ret, m_val ); -return ret; -} - -u32 GetValue32() -{ -u32 ret; -_mm_store_ps( (float*)&ret, m_val ); -return ret; -} - -u16 GetValue16() -{ -u16 ret; -_mm_store_ps( (float*)&ret, m_val ); -return ret; -} - -u8 GetValue8() -{ -u8 ret; -_mm_store_ps( (float*)&ret, m_val ); -return ret; -} -}; -*/ - -#define AlignAddr(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1)) - -#include "Utilities/StrFmt.h" -#include "Utilities/BEType.h" - -#define _PRGNAME_ "RPCS3" -#define _PRGVER_ "0.0.0.5" \ No newline at end of file +#include "stdafx.h" From 12f4f35cfaa31a64a47ced419e6f7c264d91748a Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 16:21:23 +0400 Subject: [PATCH 12/19] Compilation fix 2 --- Utilities/GNU.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 4087004e4..0546d664a 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -24,6 +24,7 @@ void strcpy_trunc(char (&dst)[size], const std::string& src) #include #include #include +#include #ifndef __APPLE__ #include From 851ae920b9346b6c67f06f224047f522a40df0d2 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 16:27:25 +0400 Subject: [PATCH 13/19] Compilation fix 3 --- Utilities/GNU.h | 1 - rpcs3/Emu/System.cpp | 7 +++---- rpcs3/stdafx.h | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 0546d664a..4087004e4 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -24,7 +24,6 @@ void strcpy_trunc(char (&dst)[size], const std::string& src) #include #include #include -#include #ifndef __APPLE__ #include diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index c7983a224..09d02891f 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -512,10 +512,9 @@ void Emulator::SavePoints(const std::string& path) void Emulator::LoadPoints(const std::string& path) { - if (!rExists(path)) return; - //struct stat buf; - //if (!stat(path.c_str(), &buf)) - //return; + struct stat buf; + if (!stat(path.c_str(), &buf)) + return; std::ifstream f(path, std::ios::binary); if (!f.is_open()) return; diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 232bfd704..fdac429bb 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -32,6 +32,7 @@ #include #include +#include #include "Utilities/GNU.h" typedef unsigned int uint; From 2c8b485ba0635990d7b95b82bf86da32db33e1ab Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 17:06:58 +0400 Subject: [PATCH 14/19] Compilation fix 4 --- Utilities/GNU.h | 1 - Utilities/rFile.cpp | 12 ++++++++++-- Utilities/rPlatform.cpp | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 4087004e4..43b00feaf 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -34,7 +34,6 @@ void strcpy_trunc(char (&dst)[size], const std::string& src) #define _byteswap_ushort(x) __builtin_bswap16(x) #define _byteswap_ulong(x) __builtin_bswap32(x) #define _byteswap_uint64(x) __builtin_bswap64(x) -#define mkdir(x) mkdir(x, 0777) #define INFINITE 0xFFFFFFFF #define _CRT_ALIGN(x) __attribute__((aligned(x))) #define InterlockedCompareExchange(ptr,new_val,old_val) __sync_val_compare_and_swap(ptr,old_val,new_val) diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 7608f0e4c..302813e50 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -66,7 +66,11 @@ bool rIsDir(const std::string &filename) { bool rMkdir(const std::string &dir) { - return !mkdir(dir.c_str()); +#ifdef _WIN32 + return !_mkdir(dir.c_str()); +#else + return !mkdir(dir.c_str(), 0777); +#endif } bool rMkpath(const std::string &path) @@ -83,7 +87,11 @@ bool rMkpath(const std::string &path) start = pos; if(dir.size() == 0) continue; - if((ret = mkdir(dir.c_str())) && errno != EEXIST){ +#ifdef _WIN32 + if((ret = _mkdir(dir.c_str())) && errno != EEXIST){ +#else + if((ret = mkdir(dir.c_str(), 0777)) && errno != EEXIST){ +#endif return !ret; } if (pos >= path.length()) diff --git a/Utilities/rPlatform.cpp b/Utilities/rPlatform.cpp index c6b86dd77..c246692d6 100644 --- a/Utilities/rPlatform.cpp +++ b/Utilities/rPlatform.cpp @@ -48,7 +48,7 @@ std::string rPlatform::getConfigDir() else // Just in case dir = "./config"; dir = dir + "/rpcs3/"; - mkdir(dir.c_str()); + mkdir(dir.c_str(), 0777); #endif } return dir; From 21e254d05fcd3821da633e27dce79f32fb84572c Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 17:25:01 +0400 Subject: [PATCH 15/19] Compilation fix 5 --- rpcs3/Emu/SysCalls/Modules/sys_net.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp index 40332c724..9f660fde7 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp @@ -11,6 +11,7 @@ extern "C" #include #include #include +#include } #endif From 56ba26ab24dd43a84c2c7e5ae7bea21126a620f2 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 22:30:21 +0400 Subject: [PATCH 16/19] cellMsgDialog code moved --- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 212 ++++++------------- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h | 16 +- rpcs3/Gui/MsgDialog.cpp | 163 ++++++++++++++ rpcs3/Gui/MsgDialog.h | 7 + rpcs3/emucore.vcxproj | 3 - rpcs3/emucore.vcxproj.filters | 3 - rpcs3/rpcs3.cpp | 9 + rpcs3/rpcs3.vcxproj | 2 + rpcs3/rpcs3.vcxproj.filters | 6 + 9 files changed, 263 insertions(+), 158 deletions(-) create mode 100644 rpcs3/Gui/MsgDialog.cpp create mode 100644 rpcs3/Gui/MsgDialog.h diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 9858942e0..17e19899d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -3,11 +3,6 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include -#include -#include -#include -#include #include "Utilities/rMsgBox.h" #include "Emu/SysCalls/lv2/sys_time.h" #include "cellSysutil.h" @@ -24,20 +19,53 @@ enum MsgDialogState }; std::atomic g_msg_dialog_state(msgDialogNone); -wxDialog* g_msg_dialog = nullptr; -wxGauge* m_gauge1 = nullptr; -wxGauge* m_gauge2 = nullptr; -wxStaticText* m_text1 = nullptr; -wxStaticText* m_text2 = nullptr; -u64 m_wait_until; +u64 g_msg_dialog_wait_until; +u32 g_msg_dialog_progress_bar_count; + +MsgDialogCreateCb MsgDialogCreate = nullptr; +MsgDialogDestroyCb MsgDialogDestroy = nullptr; +MsgDialogProgressBarSetMsgCb MsgDialogProgressBarSetMsg = nullptr; +MsgDialogProgressBarResetCb MsgDialogProgressBarReset = nullptr; +MsgDialogProgressBarIncCb MsgDialogProgressBarInc = nullptr; + +void SetMsgDialogCreateCallback(MsgDialogCreateCb cb) +{ + MsgDialogCreate = cb; +} + +void SetMsgDialogDestroyCallback(MsgDialogDestroyCb cb) +{ + MsgDialogDestroy = cb; +} + +void SetMsgDialogProgressBarSetMsgCallback(MsgDialogProgressBarSetMsgCb cb) +{ + MsgDialogProgressBarSetMsg = cb; +} + +void SetMsgDialogProgressBarResetCallback(MsgDialogProgressBarResetCb cb) +{ + MsgDialogProgressBarReset = cb; +} + +void SetMsgDialogProgressBarIncCallback(MsgDialogProgressBarIncCb cb) +{ + MsgDialogProgressBarInc = cb; +} + +void MsgDialogClose() +{ + g_msg_dialog_state = msgDialogClose; + g_msg_dialog_wait_until = get_system_time(); +} int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_t 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.GetAddr(), callback.GetAddr(), userData, extParam); - //type |= CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE; - //type |= CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO; + //type |= CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE | CELL_MSGDIALOG_TYPE_BG_INVISIBLE; + //type |= CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO | CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_NO; MsgDialogState old = msgDialogNone; if (!g_msg_dialog_state.compare_exchange_strong(old, msgDialogOpen)) @@ -45,6 +73,15 @@ int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_t msgString, mem_func_ptr_tSetExtraStyle(g_msg_dialog->GetExtraStyle() | wxWS_EX_TRANSIENT); - - wxSizer* sizer1 = new wxBoxSizer(wxVERTICAL); - - wxStaticText* m_text = new wxStaticText(g_msg_dialog, wxID_ANY, wxString(msgString.GetString(), wxConvUTF8)); - sizer1->Add(m_text, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); - - switch (type & CELL_MSGDIALOG_TYPE_PROGRESSBAR) - { - case CELL_MSGDIALOG_TYPE_PROGRESSBAR_DOUBLE: - m_gauge2 = new wxGauge(g_msg_dialog, wxID_ANY, 100, wxDefaultPosition, wxSize(300, -1), wxGA_HORIZONTAL | wxGA_SMOOTH); - m_text2 = new wxStaticText(g_msg_dialog, wxID_ANY, ""); - m_text2->SetAutoLayout(true); - - case CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE: - m_gauge1 = new wxGauge(g_msg_dialog, wxID_ANY, 100, wxDefaultPosition, wxSize(300, -1), wxGA_HORIZONTAL | wxGA_SMOOTH); - m_text1 = new wxStaticText(g_msg_dialog, wxID_ANY, ""); - m_text1->SetAutoLayout(true); - - case CELL_MSGDIALOG_TYPE_PROGRESSBAR_NONE: - break; - } - - if (m_gauge1) - { - sizer1->Add(m_text1, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 8); - sizer1->Add(m_gauge1, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, 16); - m_gauge1->SetValue(0); - } - if (m_gauge2) - { - sizer1->Add(m_text2, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 8); - sizer1->Add(m_gauge2, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, 16); - m_gauge2->SetValue(0); - } - - wxBoxSizer* buttons = new wxBoxSizer(wxHORIZONTAL); - - switch (type & CELL_MSGDIALOG_TYPE_BUTTON_TYPE) - { - case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_NONE: - break; - - case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO: - m_button_yes = new wxButton(g_msg_dialog, wxID_YES); - buttons->Add(m_button_yes, 0, wxALIGN_CENTER_HORIZONTAL | wxRIGHT, 8); - m_button_no = new wxButton(g_msg_dialog, wxID_NO); - buttons->Add(m_button_no, 0, wxALIGN_CENTER_HORIZONTAL, 16); - - sizer1->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); - break; - - case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_OK: - m_button_ok = new wxButton(g_msg_dialog, wxID_OK); - buttons->Add(m_button_ok, 0, wxALIGN_CENTER_HORIZONTAL, 16); - - sizer1->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); - break; - } - - sizer1->AddSpacer(16); - - g_msg_dialog->SetSizerAndFit(sizer1); - g_msg_dialog->Centre(wxBOTH); - g_msg_dialog->Show(); - g_msg_dialog->Enable(); - - g_msg_dialog->Bind(wxEVT_BUTTON, [&](wxCommandEvent& event) - { - status = (event.GetId() == wxID_NO) ? CELL_MSGDIALOG_BUTTON_NO : CELL_MSGDIALOG_BUTTON_YES /* OK */; - g_msg_dialog->Hide(); - m_wait_until = get_system_time(); - g_msg_dialog_state = msgDialogClose; - }); - - - g_msg_dialog->Bind(wxEVT_CLOSE_WINDOW, [&](wxCloseEvent& event) - { - if (type & CELL_MSGDIALOG_TYPE_DISABLE_CANCEL) - { - } - else - { - status = CELL_MSGDIALOG_BUTTON_ESCAPE; - g_msg_dialog->Hide(); - m_wait_until = get_system_time(); - g_msg_dialog_state = msgDialogClose; - } - }); + MsgDialogCreate(type, (char*)msgString.GetPtr(), status); m_signal = true; }); @@ -186,7 +111,7 @@ int cellMsgDialogOpen2(u32 type, mem_list_ptr_t msgString, mem_func_ptr_t msgString, mem_func_ptr_t msgS return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; } - if (progressBarIndex >= (m_gauge1 ? 1u : 0u) + (m_gauge2 ? 1u : 0u)) + if (progressBarIndex >= g_msg_dialog_progress_bar_count) { return CELL_MSGDIALOG_ERROR_PARAM; } @@ -373,13 +297,7 @@ int cellMsgDialogProgressBarSetMsg(u32 progressBarIndex, mem_list_ptr_t msgS CallAfter([text, progressBarIndex]() { - if (g_msg_dialog && !Emu.IsStopped()) - { - if (progressBarIndex == 0 && m_text1) m_text1->SetLabelText(fmt::FromUTF8(text)); - if (progressBarIndex == 1 && m_text2) m_text2->SetLabelText(fmt::FromUTF8(text)); - g_msg_dialog->Layout(); - g_msg_dialog->Fit(); - } + MsgDialogProgressBarSetMsg(progressBarIndex, text.c_str()); }); return CELL_OK; } @@ -393,18 +311,14 @@ int cellMsgDialogProgressBarReset(u32 progressBarIndex) return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; } - if (progressBarIndex >= (m_gauge1 ? 1u : 0u) + (m_gauge2 ? 1u : 0u)) + if (progressBarIndex >= g_msg_dialog_progress_bar_count) { return CELL_MSGDIALOG_ERROR_PARAM; } CallAfter([=]() { - if (g_msg_dialog) - { - if (progressBarIndex == 0 && m_gauge1) m_gauge1->SetValue(0); - if (progressBarIndex == 1 && m_gauge2) m_gauge2->SetValue(0); - } + MsgDialogProgressBarReset(progressBarIndex); }); return CELL_OK; } @@ -418,18 +332,14 @@ int cellMsgDialogProgressBarInc(u32 progressBarIndex, u32 delta) return CELL_MSGDIALOG_ERROR_DIALOG_NOT_OPENED; } - if (progressBarIndex >= (m_gauge1 ? 1u : 0u) + (m_gauge2 ? 1u : 0u)) + if (progressBarIndex >= g_msg_dialog_progress_bar_count) { return CELL_MSGDIALOG_ERROR_PARAM; } CallAfter([=]() { - if (g_msg_dialog) - { - if (progressBarIndex == 0 && m_gauge1) m_gauge1->SetValue(m_gauge1->GetValue() + delta); - if (progressBarIndex == 1 && m_gauge2) m_gauge2->SetValue(m_gauge2->GetValue() + delta); - } + MsgDialogProgressBarInc(progressBarIndex, delta); }); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h index 33b8ab667..cc1150082 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.h @@ -88,4 +88,18 @@ int cellMsgDialogProgressBarSetMsg(u32 progressBarIndex, mem_list_ptr_t msgS int cellMsgDialogProgressBarReset(u32 progressBarIndex); int cellMsgDialogProgressBarInc(u32 progressBarIndex, u32 delta); int cellMsgDialogClose(float delay); -int cellMsgDialogAbort(); \ No newline at end of file +int cellMsgDialogAbort(); + +typedef void(*MsgDialogCreateCb)(u32 type, const char* msg, u64& status); +typedef void(*MsgDialogDestroyCb)(); +typedef void(*MsgDialogProgressBarSetMsgCb)(u32 progressBarIndex, const char* msg); +typedef void(*MsgDialogProgressBarResetCb)(u32 progressBarIndex); +typedef void(*MsgDialogProgressBarIncCb)(u32 progressBarIndex, u32 delta); + +void SetMsgDialogCreateCallback(MsgDialogCreateCb cb); +void SetMsgDialogDestroyCallback(MsgDialogDestroyCb cb); +void SetMsgDialogProgressBarSetMsgCallback(MsgDialogProgressBarSetMsgCb cb); +void SetMsgDialogProgressBarResetCallback(MsgDialogProgressBarResetCb cb); +void SetMsgDialogProgressBarIncCallback(MsgDialogProgressBarIncCb cb); + +void MsgDialogClose(); diff --git a/rpcs3/Gui/MsgDialog.cpp b/rpcs3/Gui/MsgDialog.cpp new file mode 100644 index 000000000..8ede9a853 --- /dev/null +++ b/rpcs3/Gui/MsgDialog.cpp @@ -0,0 +1,163 @@ +#include "stdafx_gui.h" +#include "Emu/Memory/Memory.h" + +#include "Emu/SysCalls/lv2/sys_time.h" +#include "Emu/SysCalls/Modules/cellMsgDialog.h" +#include "MsgDialog.h" + +wxDialog* m_dialog = nullptr; +wxGauge* m_gauge1 = nullptr; +wxGauge* m_gauge2 = nullptr; +wxStaticText* m_text1 = nullptr; +wxStaticText* m_text2 = nullptr; + +void MsgDialogCreate(u32 type, const char* msg, u64& status) +{ + wxWindow* parent = nullptr; // TODO: align it better + + m_gauge1 = nullptr; + m_gauge2 = nullptr; + m_text1 = nullptr; + m_text2 = nullptr; + wxButton* m_button_ok = nullptr; + wxButton* m_button_yes = nullptr; + wxButton* m_button_no = nullptr; + + m_dialog = new wxDialog(parent, wxID_ANY, type & CELL_MSGDIALOG_TYPE_SE_TYPE ? "" : "Error", wxDefaultPosition, wxDefaultSize); + + m_dialog->SetExtraStyle(m_dialog->GetExtraStyle() | wxWS_EX_TRANSIENT); + m_dialog->SetTransparent(127 + (type & CELL_MSGDIALOG_TYPE_BG) * (128 / CELL_MSGDIALOG_TYPE_BG_INVISIBLE)); + + wxSizer* sizer1 = new wxBoxSizer(wxVERTICAL); + + wxStaticText* m_text = new wxStaticText(m_dialog, wxID_ANY, wxString(msg, wxConvUTF8)); + sizer1->Add(m_text, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); + + switch (type & CELL_MSGDIALOG_TYPE_PROGRESSBAR) + { + case CELL_MSGDIALOG_TYPE_PROGRESSBAR_DOUBLE: + m_gauge2 = new wxGauge(m_dialog, wxID_ANY, 100, wxDefaultPosition, wxSize(300, -1), wxGA_HORIZONTAL | wxGA_SMOOTH); + m_text2 = new wxStaticText(m_dialog, wxID_ANY, ""); + m_text2->SetAutoLayout(true); + + case CELL_MSGDIALOG_TYPE_PROGRESSBAR_SINGLE: + m_gauge1 = new wxGauge(m_dialog, wxID_ANY, 100, wxDefaultPosition, wxSize(300, -1), wxGA_HORIZONTAL | wxGA_SMOOTH); + m_text1 = new wxStaticText(m_dialog, wxID_ANY, ""); + m_text1->SetAutoLayout(true); + + default: // ??? + break; + } + + if (m_gauge1) + { + sizer1->Add(m_text1, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 8); + sizer1->Add(m_gauge1, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, 16); + m_gauge1->SetValue(0); + } + if (m_gauge2) + { + sizer1->Add(m_text2, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 8); + sizer1->Add(m_gauge2, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, 16); + m_gauge2->SetValue(0); + } + + wxBoxSizer* buttons = new wxBoxSizer(wxHORIZONTAL); + + switch (type & CELL_MSGDIALOG_TYPE_BUTTON_TYPE) + { + case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_NONE: + break; + + case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO: + m_button_yes = new wxButton(m_dialog, wxID_YES); + buttons->Add(m_button_yes, 0, wxALIGN_CENTER_HORIZONTAL | wxRIGHT, 8); + m_button_no = new wxButton(m_dialog, wxID_NO); + buttons->Add(m_button_no, 0, wxALIGN_CENTER_HORIZONTAL, 16); + if ((type & CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR) == CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_NO) + { + m_button_no->SetFocus(); + } + else + { + m_button_yes->SetFocus(); + } + + sizer1->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); + break; + + case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_OK: + m_button_ok = new wxButton(m_dialog, wxID_OK); + buttons->Add(m_button_ok, 0, wxALIGN_CENTER_HORIZONTAL, 16); + if ((type & CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR) == CELL_MSGDIALOG_TYPE_DEFAULT_CURSOR_OK) + { + m_button_ok->SetFocus(); + } + + sizer1->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT | wxTOP, 16); + break; + } + + sizer1->AddSpacer(16); + + m_dialog->SetSizerAndFit(sizer1); + m_dialog->Centre(wxBOTH); + m_dialog->Show(); + m_dialog->Enable(); + + m_dialog->Bind(wxEVT_BUTTON, [&](wxCommandEvent& event) + { + status = (event.GetId() == wxID_NO) ? CELL_MSGDIALOG_BUTTON_NO : CELL_MSGDIALOG_BUTTON_YES /* OK */; + m_dialog->Hide(); + MsgDialogClose(); + }); + + + m_dialog->Bind(wxEVT_CLOSE_WINDOW, [&](wxCloseEvent& event) + { + if (type & CELL_MSGDIALOG_TYPE_DISABLE_CANCEL) + { + } + else + { + status = CELL_MSGDIALOG_BUTTON_ESCAPE; + m_dialog->Hide(); + MsgDialogClose(); + } + }); +} + +void MsgDialogDestroy() +{ + delete m_dialog; + m_dialog = nullptr; +} + +void MsgDialogProgressBarSetMsg(u32 index, const char* msg) +{ + if (m_dialog) + { + if (index == 0 && m_text1) m_text1->SetLabelText(wxString(msg, wxConvUTF8)); + if (index == 1 && m_text2) m_text2->SetLabelText(wxString(msg, wxConvUTF8)); + m_dialog->Layout(); + m_dialog->Fit(); + } +} + +void MsgDialogProgressBarReset(u32 index) +{ + if (m_dialog) + { + if (index == 0 && m_gauge1) m_gauge1->SetValue(0); + if (index == 1 && m_gauge2) m_gauge2->SetValue(0); + } +} + +void MsgDialogProgressBarInc(u32 index, u32 delta) +{ + if (m_dialog) + { + if (index == 0 && m_gauge1) m_gauge1->SetValue(m_gauge1->GetValue() + delta); + if (index == 1 && m_gauge2) m_gauge2->SetValue(m_gauge2->GetValue() + delta); + } +} diff --git a/rpcs3/Gui/MsgDialog.h b/rpcs3/Gui/MsgDialog.h new file mode 100644 index 000000000..2f669b973 --- /dev/null +++ b/rpcs3/Gui/MsgDialog.h @@ -0,0 +1,7 @@ +#pragma once + +void MsgDialogCreate(u32 type, const char* msg, u64& status); +void MsgDialogDestroy(); +void MsgDialogProgressBarSetMsg(u32 index, const char* msg); +void MsgDialogProgressBarReset(u32 index); +void MsgDialogProgressBarInc(u32 index, u32 delta); diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 9860e3d59..b1ffe1846 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -413,9 +413,6 @@ - - - {C4A10229-4712-4BD2-B63E-50D93C67A038} emucore diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index d045709d8..b1500a5f1 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1190,7 +1190,4 @@ Loader - - - \ No newline at end of file diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index 4588e8ca8..c5fb28160 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -1,4 +1,5 @@ #include "stdafx_gui.h" +#include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "rpcs3.h" #include "Ini.h" @@ -20,6 +21,9 @@ #include "Emu/Io/XInput/XInputPadHandler.h" #endif +#include "Emu/SysCalls/Modules/cellMsgDialog.h" +#include "Gui/MsgDialog.h" + #include "Gui/GLGSFrame.h" #include @@ -113,6 +117,11 @@ bool Rpcs3App::OnInit() { return new GLGSFrame(); }); + SetMsgDialogCreateCallback(MsgDialogCreate); + SetMsgDialogDestroyCallback(MsgDialogDestroy); + SetMsgDialogProgressBarSetMsgCallback(MsgDialogProgressBarSetMsg); + SetMsgDialogProgressBarResetCallback(MsgDialogProgressBarReset); + SetMsgDialogProgressBarIncCallback(MsgDialogProgressBarInc); TheApp = this; SetAppName(_PRGNAME_); diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 723c26520..e0a1cc7f0 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -175,6 +175,7 @@ + @@ -212,6 +213,7 @@ + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 2adfacee2..56cbf5be6 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -87,6 +87,9 @@ Gui + + Gui + @@ -176,5 +179,8 @@ Gui + + Gui + \ No newline at end of file From 120c3261b47cea3596912f3d9af861b1dec79741 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 23:51:11 +0400 Subject: [PATCH 17/19] excluded, wxString forwarded --- Utilities/StrFmt.cpp | 1 + Utilities/StrFmt.h | 2 +- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Utilities/StrFmt.cpp b/Utilities/StrFmt.cpp index cc20761d6..6e79d92d0 100644 --- a/Utilities/StrFmt.cpp +++ b/Utilities/StrFmt.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "StrFmt.h" +#include extern const std::string fmt::placeholder = "???"; diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index fb8e2ff1f..de78cb74a 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -1,5 +1,5 @@ #pragma once -#include +class wxString; #if defined(_MSC_VER) #define snprintf _snprintf diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index d33458153..40fd35cc2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -3,7 +3,6 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" -#include #include "cellSysutil.h" #include "Emu/RSX/sysutil_video.h" #include "Emu/RSX/GSManager.h" @@ -15,7 +14,8 @@ static const float PICTURE_SIZE = (1.0f), UV_DELTA_PS = (1.f / 8.f), UV_DELTA_LB = (1.f / 6.f), -XY_DELTA_LB = (1.f / 8.f); +XY_DELTA_LB = (1.f / 8.f), +M_PI = 3.1415926535897932384626433832795; void BuildupVertexBufferNR() { From 6cb2518a8100dbb6e3fe1dddda0af12c5c458cb2 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 29 Aug 2014 23:59:17 +0400 Subject: [PATCH 18/19] Compilation fix --- rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index 40fd35cc2..2dd1db404 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -15,7 +15,7 @@ PICTURE_SIZE = (1.0f), UV_DELTA_PS = (1.f / 8.f), UV_DELTA_LB = (1.f / 6.f), XY_DELTA_LB = (1.f / 8.f), -M_PI = 3.1415926535897932384626433832795; +PI = 3.1415926535897932384626433832795; void BuildupVertexBufferNR() { @@ -1113,10 +1113,10 @@ u16 FloatToHalf(float val) static void blackman(float window[]) { - const float x0 = ((1.f * 2.f*M_PI) / 5.f) - M_PI; - const float x1 = ((2.f * 2.f*M_PI) / 5.f) - M_PI; - const float x2 = ((3.f * 2.f*M_PI) / 5.f) - M_PI; - const float x3 = ((4.f * 2.f*M_PI) / 5.f) - M_PI; + const float x0 = ((1.f * 2.f*PI) / 5.f) - PI; + const float x1 = ((2.f * 2.f*PI) / 5.f) - PI; + const float x2 = ((3.f * 2.f*PI) / 5.f) - PI; + const float x3 = ((4.f * 2.f*PI) / 5.f) - PI; const float a0 = 0.42f + (0.50f * cosf(x0)) + (0.08f * cosf(2.f*x0)); const float a1 = 0.42f + (0.50f * cosf(x1)) + (0.08f * cosf(2.f*x1)); @@ -1134,7 +1134,7 @@ int CreateInterlaceTable(u32 ea_addr, float srcH, float dstH, CellRescTableEleme float phi[4], transient[4]; float y_fraction; float bandwidth = 0.5f / (srcH / dstH); - float phi_b = 2.f * M_PI * bandwidth; + float phi_b = 2.f * PI * bandwidth; float window[4]; mem16_ptr_t buf16(ea_addr); mem32_ptr_t buf32(ea_addr); From d14f22d0592dad854b4ec266a5acce9ecb4d791b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 30 Aug 2014 00:26:27 +0400 Subject: [PATCH 19/19] Compilation fix 2 --- rpcs3/Emu/Cell/PPUInterpreter.h | 24 ++++++++++++------------ rpcs3/stdafx.h | 5 +++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 4eeed301a..e8a94377f 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -771,10 +771,10 @@ private: { float result = CPU.VPR[vb]._f[w] * nScale; - if (result > INT_MAX) - CPU.VPR[vd]._s32[w] = (int)INT_MAX; - else if (result < INT_MIN) - CPU.VPR[vd]._s32[w] = (int)INT_MIN; + if (result > S32_MAX) + CPU.VPR[vd]._s32[w] = (int)S32_MAX; + else if (result < S32_MIN) + CPU.VPR[vd]._s32[w] = (int)S32_MIN; else // C rounding = Round towards 0 CPU.VPR[vd]._s32[w] = (int)result; } @@ -788,8 +788,8 @@ private: // C rounding = Round towards 0 s64 result = (s64)(CPU.VPR[vb]._f[w] * nScale); - if (result > UINT_MAX) - CPU.VPR[vd]._u32[w] = (u32)UINT_MAX; + if (result > U32_MAX) + CPU.VPR[vd]._u32[w] = (u32)U32_MAX; else if (result < 0) CPU.VPR[vd]._u32[w] = 0; else @@ -1061,14 +1061,14 @@ private: result += CPU.VPR[vc]._s32[w]; - if (result > INT_MAX) + if (result > S32_MAX) { - saturated = INT_MAX; + saturated = S32_MAX; CPU.VSCR.SAT = 1; } - else if (result < INT_MIN) + else if (result < S32_MIN) { - saturated = INT_MIN; + saturated = S32_MIN; CPU.VSCR.SAT = 1; } else @@ -1121,9 +1121,9 @@ private: result += CPU.VPR[vc]._u32[w]; - if (result > UINT_MAX) + if (result > U32_MAX) { - saturated = UINT_MAX; + saturated = U32_MAX; CPU.VSCR.SAT = 1; } else diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index fdac429bb..14109af0e 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -42,11 +42,16 @@ typedef uint16_t u16; typedef uint32_t u32; typedef uint64_t u64; +static const u32 U32_MAX = 0xffffffff; + typedef int8_t s8; typedef int16_t s16; typedef int32_t s32; typedef int64_t s64; +static const s32 S32_MIN = -0x80000000; +static const s32 S32_MAX = 0x7fffffff; + union u128 { struct