From 0fb45cccbc043c2f897178021ae024e947b41973 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 27 Aug 2014 17:11:34 +0400 Subject: [PATCH] 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 89524cfd27..4eeed301a6 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 aa44809d21..b7fe76598e 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 c6c72cbf6b..0f22000945 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 16860d49a4..d11100efea 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 a9a3f6d843..b4ef823c47 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 6097de8ea6..08366bbe5c 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