From 61c4a88ab438d8584cd63f7c7b3e5f7ed7c5d978 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 25 Aug 2014 18:56:13 +0400 Subject: [PATCH 1/7] rFile.h, Thread.h, IdManager.h includes moved --- Utilities/AutoPause.cpp | 1 + Utilities/BEType.h | 84 +++++++++++++++++++++++++++ Utilities/Log.cpp | 2 + Utilities/SMutex.h | 2 + Utilities/SSemaphore.h | 3 + Utilities/rFile.cpp | 1 + rpcs3/Crypto/unedat.cpp | 1 + rpcs3/Crypto/unpkg.cpp | 1 + rpcs3/Crypto/unpkg.h | 2 + rpcs3/Crypto/unself.cpp | 1 + rpcs3/Emu/Audio/AudioDumper.h | 2 + rpcs3/Emu/CPU/CPUThread.h | 2 + rpcs3/Emu/CPU/CPUThreadManager.h | 3 + rpcs3/Emu/Cell/PPUProgramCompiler.cpp | 1 + rpcs3/Emu/Cell/SPURecompilerCore.cpp | 1 + rpcs3/Emu/Event.h | 1 + rpcs3/Emu/FS/vfsDevice.cpp | 1 + rpcs3/Emu/FS/vfsDevice.h | 1 + rpcs3/Emu/FS/vfsDirBase.cpp | 1 + rpcs3/Emu/FS/vfsLocalDir.h | 1 + rpcs3/Emu/FS/vfsLocalFile.h | 1 + rpcs3/Emu/IdManager.h | 1 + rpcs3/Emu/Memory/Memory.cpp | 32 ++++++++++ rpcs3/Emu/Memory/Memory.h | 32 +--------- rpcs3/Emu/Memory/MemoryBlock.h | 1 + rpcs3/Emu/RSX/GL/GLFragmentProgram.h | 1 + rpcs3/Emu/RSX/GL/GLGSRender.cpp | 1 + rpcs3/Emu/RSX/GL/GLVertexProgram.h | 1 + rpcs3/Emu/RSX/RSXThread.h | 1 + rpcs3/Emu/SysCalls/Modules.h | 1 + rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 1 + rpcs3/Emu/SysCalls/SysCalls.h | 1 + rpcs3/Emu/SysCalls/lv2/sys_spinlock.h | 2 + rpcs3/Emu/SysCalls/lv2/sys_spu.h | 2 + rpcs3/Emu/System.cpp | 1 + rpcs3/Emu/System.h | 1 + rpcs3/Gui/ConLogFrame.cpp | 1 + rpcs3/Gui/GameViewer.cpp | 1 + rpcs3/Loader/ELF.cpp | 1 + rpcs3/Loader/ELF32.cpp | 2 + rpcs3/Loader/ELF32.h | 3 + rpcs3/Loader/ELF64.cpp | 1 + rpcs3/Loader/ELF64.h | 3 + rpcs3/Loader/Loader.h | 82 +------------------------- rpcs3/Loader/PKG.cpp | 1 + rpcs3/Loader/PKG.h | 3 +- rpcs3/Loader/PSF.cpp | 1 + rpcs3/Loader/PSF.h | 2 + rpcs3/Loader/SELF.cpp | 1 + rpcs3/Loader/SELF.h | 2 + rpcs3/Loader/TRP.h | 2 + rpcs3/stdafx.h | 3 - 52 files changed, 188 insertions(+), 113 deletions(-) diff --git a/Utilities/AutoPause.cpp b/Utilities/AutoPause.cpp index 5a604f0749..9c3fc70edf 100644 --- a/Utilities/AutoPause.cpp +++ b/Utilities/AutoPause.cpp @@ -2,6 +2,7 @@ #include "rpcs3/Ini.h" #include "AutoPause.h" #include "Utilities/Log.h" +#include "Utilities/rFile.h" #include "Emu/System.h" using namespace Debug; diff --git a/Utilities/BEType.h b/Utilities/BEType.h index 8322b804f8..fd45750cb1 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -183,3 +183,87 @@ template struct _se, T1, value> : pub #define se16(x) _se::value #define se32(x) _se::value #define se64(x) _se::value + +template __forceinline static u8 Read8(T& f) +{ + u8 ret; + f.Read(&ret, sizeof(ret)); + return ret; +} + +template __forceinline static u16 Read16(T& f) +{ + be_t ret; + f.Read(&ret, sizeof(ret)); + return ret; +} + +template __forceinline static u32 Read32(T& f) +{ + be_t ret; + f.Read(&ret, sizeof(ret)); + return ret; +} + +template __forceinline static u64 Read64(T& f) +{ + be_t ret; + f.Read(&ret, sizeof(ret)); + return ret; +} + +template __forceinline static u16 Read16LE(T& f) +{ + u16 ret; + f.Read(&ret, sizeof(ret)); + return ret; +} + +template __forceinline static u32 Read32LE(T& f) +{ + u32 ret; + f.Read(&ret, sizeof(ret)); + return ret; +} + +template __forceinline static u64 Read64LE(T& f) +{ + u64 ret; + f.Read(&ret, sizeof(ret)); + return ret; +} + +template __forceinline static void Write8(T& f, const u8 data) +{ + f.Write(&data, sizeof(data)); +} + +template __forceinline static void Write16LE(T& f, const u16 data) +{ + f.Write(&data, sizeof(data)); +} + +template __forceinline static void Write32LE(T& f, const u32 data) +{ + f.Write(&data, sizeof(data)); +} + +template __forceinline static void Write64LE(T& f, const u64 data) +{ + f.Write(&data, sizeof(data)); +} + +template __forceinline static void Write16(T& f, const u16 data) +{ + Write16LE(f, re16(data)); +} + +template __forceinline static void Write32(T& f, const u32 data) +{ + Write32LE(f, re32(data)); +} + +template __forceinline static void Write64(T& f, const u64 data) +{ + Write64LE(f, re64(data)); +} \ No newline at end of file diff --git a/Utilities/Log.cpp b/Utilities/Log.cpp index 4d0749426e..f95c2db3bc 100644 --- a/Utilities/Log.cpp +++ b/Utilities/Log.cpp @@ -12,6 +12,8 @@ #include #include #include +#include "Thread.h" +#include "rFile.h" using namespace Log; diff --git a/Utilities/SMutex.h b/Utilities/SMutex.h index efd99b840f..909d8ec87b 100644 --- a/Utilities/SMutex.h +++ b/Utilities/SMutex.h @@ -1,5 +1,7 @@ #pragma once +#include + bool SM_IsAborted(); void SM_Sleep(); size_t SM_GetCurrentThreadId(); diff --git a/Utilities/SSemaphore.h b/Utilities/SSemaphore.h index 2e61262959..420d9e8469 100644 --- a/Utilities/SSemaphore.h +++ b/Utilities/SSemaphore.h @@ -1,5 +1,8 @@ #pragma once +#include +#include + class SSemaphore { const u32 m_max; diff --git a/Utilities/rFile.cpp b/Utilities/rFile.cpp index 6fcd4b4066..a4b3153541 100644 --- a/Utilities/rFile.cpp +++ b/Utilities/rFile.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Log.h" #include +#include "rFile.h" #ifdef _WIN32 // Maybe in StrFmt? diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index 9c4c96414e..b484cabf38 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -3,6 +3,7 @@ #include "key_vault.h" #include "unedat.h" #include "Utilities/Log.h" +#include "Utilities/rFile.h" void generate_key(int crypto_mode, int version, unsigned char *key_final, unsigned char *iv_final, unsigned char *key, unsigned char *iv) { diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index f762f35804..e667417359 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -7,6 +7,7 @@ #include #include "Utilities/Log.h" +#include "Utilities/rFile.h" // Decryption. bool CheckHeader(rFile& pkg_f, PKGHeader* m_header) diff --git a/rpcs3/Crypto/unpkg.h b/rpcs3/Crypto/unpkg.h index 886ffe3216..e47e061fbc 100644 --- a/rpcs3/Crypto/unpkg.h +++ b/rpcs3/Crypto/unpkg.h @@ -45,4 +45,6 @@ struct PKGEntry be_t pad; // Padding (zeros) }; +class rFile; + extern int Unpack(rFile& dec_pkg_f, std::string src, std::string dst); \ No newline at end of file diff --git a/rpcs3/Crypto/unself.cpp b/rpcs3/Crypto/unself.cpp index 10cc0200c7..61422f5328 100644 --- a/rpcs3/Crypto/unself.cpp +++ b/rpcs3/Crypto/unself.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rFile.h" #include "aes.h" #include "sha1.h" #include "utils.h" diff --git a/rpcs3/Emu/Audio/AudioDumper.h b/rpcs3/Emu/Audio/AudioDumper.h index e554b95eca..d3a6080ba4 100644 --- a/rpcs3/Emu/Audio/AudioDumper.h +++ b/rpcs3/Emu/Audio/AudioDumper.h @@ -1,5 +1,7 @@ #pragma once +#include "Utilities/rFile.h" + struct WAVHeader { struct RIFFHeader diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index e827ca77f2..c59fc08b2a 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -1,5 +1,7 @@ #pragma once +#include "Utilities/Thread.h" + enum CPUThreadType :unsigned char { CPU_THREAD_PPU, diff --git a/rpcs3/Emu/CPU/CPUThreadManager.h b/rpcs3/Emu/CPU/CPUThreadManager.h index ad312108d7..ddf149fc72 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.h +++ b/rpcs3/Emu/CPU/CPUThreadManager.h @@ -1,4 +1,7 @@ #pragma once + +#include + class CPUThread; class RawSPUThread; enum CPUThreadType : unsigned char; diff --git a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp index 5e64958d0b..fd28e84cc1 100644 --- a/rpcs3/Emu/Cell/PPUProgramCompiler.cpp +++ b/rpcs3/Emu/Cell/PPUProgramCompiler.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "PPUProgramCompiler.h" +#include "Utilities/rFile.h" using namespace PPU_instr; diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 04997c8c39..daa2cf5882 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -2,6 +2,7 @@ #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Utilities/rFile.h" #include "Emu/SysCalls/lv2/sys_time.h" diff --git a/rpcs3/Emu/Event.h b/rpcs3/Emu/Event.h index bc01aaf162..31a33e3db5 100644 --- a/rpcs3/Emu/Event.h +++ b/rpcs3/Emu/Event.h @@ -1,5 +1,6 @@ #pragma once #include "Emu/SysCalls/lv2/sys_event.h" +#include class EventManager { diff --git a/rpcs3/Emu/FS/vfsDevice.cpp b/rpcs3/Emu/FS/vfsDevice.cpp index 9090bc694c..d17917b6c2 100644 --- a/rpcs3/Emu/FS/vfsDevice.cpp +++ b/rpcs3/Emu/FS/vfsDevice.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include #include "vfsDevice.h" +#include "Utilities/rFile.h" vfsDevice::vfsDevice(const std::string& ps3_path, const std::string& local_path) : m_ps3_path(ps3_path) diff --git a/rpcs3/Emu/FS/vfsDevice.h b/rpcs3/Emu/FS/vfsDevice.h index 2be4c108ff..b5780e7add 100644 --- a/rpcs3/Emu/FS/vfsDevice.h +++ b/rpcs3/Emu/FS/vfsDevice.h @@ -1,6 +1,7 @@ #pragma once #include "vfsFileBase.h" #include "vfsDirBase.h" +#include class vfsDevice { diff --git a/rpcs3/Emu/FS/vfsDirBase.cpp b/rpcs3/Emu/FS/vfsDirBase.cpp index 14f4fdfc45..6e37d7cf1e 100644 --- a/rpcs3/Emu/FS/vfsDirBase.cpp +++ b/rpcs3/Emu/FS/vfsDirBase.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "vfsDevice.h" #include "vfsDirBase.h" +#include "Utilities/rFile.h" vfsDirBase::vfsDirBase(vfsDevice* device) : m_pos(0) diff --git a/rpcs3/Emu/FS/vfsLocalDir.h b/rpcs3/Emu/FS/vfsLocalDir.h index c914f0c7c8..f4b41509d2 100644 --- a/rpcs3/Emu/FS/vfsLocalDir.h +++ b/rpcs3/Emu/FS/vfsLocalDir.h @@ -1,5 +1,6 @@ #pragma once #include "vfsDirBase.h" +#include "Utilities/rFile.h" class vfsLocalDir : public vfsDirBase { diff --git a/rpcs3/Emu/FS/vfsLocalFile.h b/rpcs3/Emu/FS/vfsLocalFile.h index c61dd495e7..7395eb519a 100644 --- a/rpcs3/Emu/FS/vfsLocalFile.h +++ b/rpcs3/Emu/FS/vfsLocalFile.h @@ -1,5 +1,6 @@ #pragma once #include "vfsFileBase.h" +#include "Utilities/rFile.h" class vfsLocalFile : public vfsFileBase { diff --git a/rpcs3/Emu/IdManager.h b/rpcs3/Emu/IdManager.h index b985f886cc..06604ca47b 100644 --- a/rpcs3/Emu/IdManager.h +++ b/rpcs3/Emu/IdManager.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 79c6f293cb..b376b23c76 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -183,6 +183,38 @@ void MemoryBase::Close() #endif } +void MemoryBase::WriteMMIO32(u32 addr, const u32 data) +{ + { + std::lock_guard lock(m_mutex); + + if (RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET] && + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data)) + { + return; + } + } + + *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); // provoke error +} + +u32 MemoryBase::ReadMMIO32(u32 addr) +{ + u32 res; + { + std::lock_guard lock(m_mutex); + + if (RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET] && + RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res)) + { + return res; + } + } + + res = re32(*(u32*)((u8*)GetBaseAddr() + addr)); // provoke error + return res; +} + bool MemoryBase::Map(const u64 dst_addr, const u64 src_addr, const u32 size) { std::lock_guard lock(m_mutex); diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 61f2e7ed73..75b78e6eaa 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -199,20 +199,7 @@ public: } } - __noinline void WriteMMIO32(u32 addr, const u32 data) - { - { - std::lock_guard lock(m_mutex); - - if (RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET] && - RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Write32(addr, data)) - { - return; - } - } - - *(u32*)((u8*)GetBaseAddr() + addr) = re32(data); // provoke error - } + __noinline void WriteMMIO32(u32 addr, const u32 data); template void Write32(T addr, const u32 data) { @@ -286,22 +273,7 @@ public: } } - __noinline u32 ReadMMIO32(u32 addr) - { - u32 res; - { - std::lock_guard lock(m_mutex); - - if (RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET] && - RawSPUMem[(addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET]->Read32(addr, &res)) - { - return res; - } - } - - res = re32(*(u32*)((u8*)GetBaseAddr() + addr)); // provoke error - return res; - } + __noinline u32 ReadMMIO32(u32 addr); template u32 Read32(T addr) { diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index 43c36df710..d5fdb4f375 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -3,6 +3,7 @@ #define PAGE_4K(x) (x + 4095) & ~(4095) #include +#include #include struct MemInfo diff --git a/rpcs3/Emu/RSX/GL/GLFragmentProgram.h b/rpcs3/Emu/RSX/GL/GLFragmentProgram.h index 5107b86f95..f05dfc30e0 100644 --- a/rpcs3/Emu/RSX/GL/GLFragmentProgram.h +++ b/rpcs3/Emu/RSX/GL/GLFragmentProgram.h @@ -1,6 +1,7 @@ #pragma once #include "GLShaderParam.h" #include "Emu/RSX/RSXFragmentProgram.h" +#include "Utilities/Thread.h" struct GLFragmentDecompilerThread : public ThreadBase { diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 54549669c3..9a80f4d0ed 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "rpcs3/Ini.h" #include "Utilities/rPlatform.h" // only for rImage +#include "Utilities/rFile.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/RSX/GL/GLVertexProgram.h b/rpcs3/Emu/RSX/GL/GLVertexProgram.h index 2605410a34..ef87c4cca7 100644 --- a/rpcs3/Emu/RSX/GL/GLVertexProgram.h +++ b/rpcs3/Emu/RSX/GL/GLVertexProgram.h @@ -1,6 +1,7 @@ #pragma once #include "GLShaderParam.h" #include "Emu/RSX/RSXVertexProgram.h" +#include "Utilities/Thread.h" struct GLVertexDecompilerThread : public ThreadBase { diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 75aa31ffbe..ed7ab000d9 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -8,6 +8,7 @@ #include #include // For tracking a list of used gcm commands #include "Utilities/SSemaphore.h" +#include "Utilities/Thread.h" enum Method { diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index 9472d235dd..a5a6f6890a 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -1,5 +1,6 @@ #pragma once #include "Emu/SysCalls/SC_FUNC.h" +#include "Emu/IdManager.h" #include "ErrorCodes.h" #include "LogBase.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 4135045b0b..32e4c88d91 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Utilities/rFile.h" #include "Emu/FS/vfsDir.h" #include "Crypto/unedat.h" #include "sceNp.h" diff --git a/rpcs3/Emu/SysCalls/SysCalls.h b/rpcs3/Emu/SysCalls/SysCalls.h index c96cbfcfb7..0c72003b6d 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.h +++ b/rpcs3/Emu/SysCalls/SysCalls.h @@ -1,6 +1,7 @@ #pragma once #include "ErrorCodes.h" #include "LogBase.h" +#include "Emu/IdManager.h" //#define SYSCALLS_DEBUG diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h index 0dfaa371fc..cec77494c5 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h @@ -1,5 +1,7 @@ #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.h b/rpcs3/Emu/SysCalls/lv2/sys_spu.h index e050703dd4..3a6f1079eb 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.h @@ -1,5 +1,7 @@ #pragma once +#include + enum { SYS_SPU_THREAD_GROUP_TYPE_NORMAL = 0x00, diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index afba7b2d3c..01dbe9790c 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rFile.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 0e8e70d4bc..3a233b4b05 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -2,6 +2,7 @@ #include #include "Emu/CPU/CPUThreadManager.h" +#include "Emu/IdManager.h" #include "Emu/Io/Pad.h" #include "Emu/Io/Keyboard.h" #include "Emu/Io/Mouse.h" diff --git a/rpcs3/Gui/ConLogFrame.cpp b/rpcs3/Gui/ConLogFrame.cpp index 2ce0166337..ead9009409 100644 --- a/rpcs3/Gui/ConLogFrame.cpp +++ b/rpcs3/Gui/ConLogFrame.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "Ini.h" #include "Utilities/Log.h" diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 77d1b017c5..73e040c0af 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Utilities/AutoPause.h" #include "Utilities/Log.h" +#include "Utilities/rFile.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/FS/vfsDir.h" diff --git a/rpcs3/Loader/ELF.cpp b/rpcs3/Loader/ELF.cpp index aaa7af4c65..cc9003857f 100644 --- a/rpcs3/Loader/ELF.cpp +++ b/rpcs3/Loader/ELF.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Emu/FS/vfsStream.h" #include "ELF.h" void Elf_Ehdr::Show() diff --git a/rpcs3/Loader/ELF32.cpp b/rpcs3/Loader/ELF32.cpp index 6c327e0494..618ed4fbb2 100644 --- a/rpcs3/Loader/ELF32.cpp +++ b/rpcs3/Loader/ELF32.cpp @@ -1,5 +1,7 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rFile.h" +#include "Emu/FS/vfsStream.h" #include "Emu/Memory/Memory.h" #include "ELF32.h" diff --git a/rpcs3/Loader/ELF32.h b/rpcs3/Loader/ELF32.h index 6d600fd82c..9e1a8a5948 100644 --- a/rpcs3/Loader/ELF32.h +++ b/rpcs3/Loader/ELF32.h @@ -1,6 +1,9 @@ #pragma once #include "Loader.h" +struct vfsStream; +class rFile; + struct Elf32_Ehdr { u32 e_magic; diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 42c7a12042..72b70bb87c 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Utilities/rFile.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Loader/ELF64.h b/rpcs3/Loader/ELF64.h index 162d153fb7..2a98b9bbb8 100644 --- a/rpcs3/Loader/ELF64.h +++ b/rpcs3/Loader/ELF64.h @@ -1,6 +1,9 @@ #pragma once #include "Loader.h" +struct vfsStream; +class rFile; + struct Elf64_Ehdr { u32 e_magic; diff --git a/rpcs3/Loader/Loader.h b/rpcs3/Loader/Loader.h index 96134a3e34..0f14d38ab9 100644 --- a/rpcs3/Loader/Loader.h +++ b/rpcs3/Loader/Loader.h @@ -1,5 +1,7 @@ #pragma once -#include "Emu/FS/vfsFileBase.h" + +struct vfsFileBase; +class rFile; #ifdef _DEBUG //#define LOADER_DEBUG @@ -38,84 +40,6 @@ enum ShdrFlag SHF_MASKPROC = 0xf0000000, }; -__forceinline static u8 Read8(vfsStream& f) -{ - u8 ret; - f.Read(&ret, sizeof(u8)); - return ret; -} - -__forceinline static u16 Read16(vfsStream& f) -{ - return ((u16)Read8(f) << 8) | (u16)Read8(f); -} - -__forceinline static u32 Read32(vfsStream& f) -{ - return (Read16(f) << 16) | Read16(f); -} - -__forceinline static u64 Read64(vfsStream& f) -{ - return ((u64)Read32(f) << 32) | (u64)Read32(f); -} - -__forceinline static u16 Read16LE(vfsStream& f) -{ - return ((u16)Read8(f) | ((u16)Read8(f) << 8)); -} - -__forceinline static u32 Read32LE(vfsStream& f) -{ - return Read16LE(f) | (Read16LE(f) << 16); -} - -__forceinline static u64 Read64LE(vfsStream& f) -{ - return ((u64)Read32LE(f) | (u64)Read32LE(f) << 32); -} - -__forceinline static void Write8(rFile& f, const u8 data) -{ - f.Write(&data, 1); -} - -__forceinline static void Write16(rFile& f, const u16 data) -{ - Write8(f, data >> 8); - Write8(f, data); -} - -__forceinline static void Write32(rFile& f, const u32 data) -{ - Write16(f, data >> 16); - Write16(f, data); -} - -__forceinline static void Write64(rFile& f, const u64 data) -{ - Write32(f, data >> 32); - Write32(f, data); -} - -__forceinline static void Write16LE(rFile& f, const u16 data) -{ - Write8(f, data); - Write8(f, data >> 8); -} - -__forceinline static void Write32LE(rFile& f, const u32 data) -{ - Write16LE(f, data); - Write16LE(f, data >> 16); -} - -__forceinline static void Write64LE(rFile& f, const u64 data) -{ - Write32LE(f, data); - Write32LE(f, data >> 32); -} - const std::string Ehdr_DataToString(const u8 data); const std::string Ehdr_TypeToString(const u16 type); const std::string Ehdr_OS_ABIToString(const u8 os_abi); diff --git a/rpcs3/Loader/PKG.cpp b/rpcs3/Loader/PKG.cpp index 33b31725b3..71478074d5 100644 --- a/rpcs3/Loader/PKG.cpp +++ b/rpcs3/Loader/PKG.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Utilities/rMsgBox.h" +#include "Utilities/rFile.h" #include "PKG.h" #include "../Crypto/unpkg.h" diff --git a/rpcs3/Loader/PKG.h b/rpcs3/Loader/PKG.h index f616df04dd..3c18619d11 100644 --- a/rpcs3/Loader/PKG.h +++ b/rpcs3/Loader/PKG.h @@ -1,5 +1,6 @@ #pragma once -#include "Loader.h" + +class rFile; class PKGLoader { diff --git a/rpcs3/Loader/PSF.cpp b/rpcs3/Loader/PSF.cpp index bdeca14311..9f9813a950 100644 --- a/rpcs3/Loader/PSF.cpp +++ b/rpcs3/Loader/PSF.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Emu/FS/vfsStream.h" #include "PSF.h" PSFLoader::PSFLoader(vfsStream& f) : psf_f(f) diff --git a/rpcs3/Loader/PSF.h b/rpcs3/Loader/PSF.h index 7cd8db139b..8fdfa8a532 100644 --- a/rpcs3/Loader/PSF.h +++ b/rpcs3/Loader/PSF.h @@ -1,6 +1,8 @@ #pragma once #include "Loader.h" +struct vfsStream; + struct PSFHeader { u32 psf_magic; diff --git a/rpcs3/Loader/SELF.cpp b/rpcs3/Loader/SELF.cpp index 2357d6e2d7..0d3755cce9 100644 --- a/rpcs3/Loader/SELF.cpp +++ b/rpcs3/Loader/SELF.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "Utilities/Log.h" +#include "Emu/FS/vfsStream.h" #include "SELF.h" #include "ELF64.h" diff --git a/rpcs3/Loader/SELF.h b/rpcs3/Loader/SELF.h index 8c3cb70d51..3c4e7b9fbe 100644 --- a/rpcs3/Loader/SELF.h +++ b/rpcs3/Loader/SELF.h @@ -1,6 +1,8 @@ #pragma once #include "Loader.h" +struct vfsStream; + struct SceHeader { u32 se_magic; diff --git a/rpcs3/Loader/TRP.h b/rpcs3/Loader/TRP.h index 758af90989..64d491d414 100644 --- a/rpcs3/Loader/TRP.h +++ b/rpcs3/Loader/TRP.h @@ -1,6 +1,8 @@ #pragma once #include "Loader.h" +struct vfsStream; + struct TRPHeader { be_t trp_magic; diff --git a/rpcs3/stdafx.h b/rpcs3/stdafx.h index 35cd772d9c..57405a0e08 100644 --- a/rpcs3/stdafx.h +++ b/rpcs3/stdafx.h @@ -252,9 +252,6 @@ struct u128 #include "Utilities/StrFmt.h" #include "Utilities/BEType.h" -#include "Utilities/rFile.h" -#include "Utilities/Thread.h" -#include "Emu/IdManager.h" #define _PRGNAME_ "RPCS3" #define _PRGVER_ "0.0.0.5" From f6ba1eaebd2789ba0b4d7df00c93f297fdbc842d Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 25 Aug 2014 21:01:40 +0400 Subject: [PATCH 2/7] SPU spr name table --- rpcs3/Emu/Cell/SPUDisAsm.h | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUDisAsm.h b/rpcs3/Emu/Cell/SPUDisAsm.h index 5998eb693a..f03400e0a8 100644 --- a/rpcs3/Emu/Cell/SPUDisAsm.h +++ b/rpcs3/Emu/Cell/SPUDisAsm.h @@ -23,6 +23,26 @@ static const char* spu_reg_name[128] = "$120", "$121", "$122", "$123", "$124", "$125", "$126", "$127", }; +static const char* spu_spreg_name[128] = +{ + "$sp0", "$sp1", "$sp2", "$sp3", "$sp4", "$sp5", "$sp6", "$sp7", + "$sp8", "$sp9", "$sp10", "$sp11", "$sp12", "$sp13", "$sp14", "$sp15", + "$sp16", "$sp17", "$sp18", "$sp19", "$sp20", "$sp21", "$sp22", "$sp23", + "$sp24", "$sp25", "$sp26", "$sp27", "$sp28", "$sp29", "$sp30", "$sp31", + "$sp32", "$sp33", "$sp34", "$sp35", "$sp36", "$sp37", "$sp38", "$sp39", + "$sp40", "$sp41", "$sp42", "$sp43", "$sp44", "$sp45", "$sp46", "$sp47", + "$sp48", "$sp49", "$sp50", "$sp51", "$sp52", "$sp53", "$sp54", "$sp55", + "$sp56", "$sp57", "$sp58", "$sp59", "$sp60", "$sp61", "$sp62", "$sp63", + "$sp64", "$sp65", "$sp66", "$sp67", "$sp68", "$sp69", "$sp70", "$sp71", + "$sp72", "$sp73", "$sp74", "$sp75", "$sp76", "$sp77", "$sp78", "$sp79", + "$sp80", "$sp81", "$sp82", "$sp83", "$sp84", "$sp85", "$sp86", "$sp87", + "$sp88", "$sp89", "$sp90", "$sp91", "$sp92", "$sp93", "$sp94", "$sp95", + "$sp96", "$sp97", "$sp98", "$sp99", "$sp100", "$sp101", "$sp102", "$sp103", + "$sp104", "$sp105", "$sp106", "$sp107", "$sp108", "$sp109", "$sp110", "$sp111", + "$sp112", "$sp113", "$sp114", "$sp115", "$sp116", "$sp117", "$sp118", "$sp119", + "$sp120", "$sp121", "$sp122", "$sp123", "$sp124", "$sp125", "$sp126", "$sp127", +}; + static const char* spu_ch_name[128] = { "$SPU_RdEventStat", "$SPU_WrEventMask", "$SPU_WrEventAck", "$SPU_RdSigNotify1", @@ -134,7 +154,7 @@ private: } void MFSPR(u32 rt, u32 sa) { - DisAsm("mfspr", spu_reg_name[rt], spu_reg_name[sa]); + DisAsm("mfspr", spu_reg_name[rt], spu_spreg_name[sa]); } void RDCH(u32 rt, u32 ra) { @@ -258,7 +278,7 @@ private: } void MTSPR(u32 rt, u32 sa) { - DisAsm("mtspr", spu_reg_name[rt], spu_reg_name[sa]); + DisAsm("mtspr", spu_spreg_name[sa], spu_reg_name[rt]); } void WRCH(u32 ra, u32 rt) { From a74e07dc408f9d4b1accda3a55a437f4b310a941 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 25 Aug 2014 22:09:48 +0400 Subject: [PATCH 3/7] Some cleanup --- Utilities/Thread.cpp | 40 ++---- Utilities/Thread.h | 143 +------------------- rpcs3/Emu/CPU/CPUThread.cpp | 63 +++++---- rpcs3/Emu/FS/VFS.cpp | 1 + rpcs3/Emu/FS/VFS.h | 5 +- rpcs3/Emu/FS/vfsDevice.h | 5 +- rpcs3/Emu/FS/vfsDir.h | 1 + rpcs3/Emu/FS/vfsDirBase.cpp | 3 +- rpcs3/Emu/FS/vfsDirBase.h | 2 + rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 1 + rpcs3/Loader/ELF64.cpp | 1 + rpcs3/Loader/TROPUSR.cpp | 1 + rpcs3/Loader/TROPUSR.h | 2 + 15 files changed, 74 insertions(+), 196 deletions(-) diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index 5eedcc0fcd..aa59aa2384 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -1,7 +1,4 @@ #include "stdafx.h" -#include "Utilities/Log.h" -#include "Emu/Memory/Memory.h" - #include "Thread.h" thread_local NamedThreadBase* g_tls_this_thread = nullptr; @@ -27,6 +24,17 @@ void NamedThreadBase::SetThreadName(const std::string& name) m_name = name; } +void NamedThreadBase::WaitForAnySignal() // wait 1 ms for something +{ + std::unique_lock lock(m_signal_mtx); + m_signal_cv.wait_for(lock, std::chrono::milliseconds(1)); +} + +void NamedThreadBase::Notify() // wake up waiting thread or nothing +{ + m_signal_cv.notify_one(); +} + ThreadBase::ThreadBase(const std::string& name) : NamedThreadBase(name) , m_executor(nullptr) @@ -40,7 +48,8 @@ ThreadBase::~ThreadBase() if(IsAlive()) Stop(false); - safe_delete(m_executor); + delete m_executor; + m_executor = nullptr; } void ThreadBase::Start() @@ -57,18 +66,7 @@ void ThreadBase::Start() SetCurrentNamedThread(this); g_thread_count++; - try - { - Task(); - } - catch (const std::string& e) - { - LOG_ERROR(GENERAL, "Exception: %s", e.c_str()); - } - catch (const char* e) - { - LOG_ERROR(GENERAL, "Exception: %s", e); - } + Task(); m_alive = false; g_thread_count--; @@ -144,15 +142,7 @@ void thread::start(std::function func) SetCurrentNamedThread(&info); g_thread_count++; - try - { - func(); - } - catch(...) - { - LOG_ERROR(HLE, "Crash :("); - //std::terminate(); - } + func(); g_thread_count--; }); diff --git a/Utilities/Thread.h b/Utilities/Thread.h index 83401da110..ef210365a8 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -1,11 +1,9 @@ #pragma once #include #include -#include #include #include #include -//#include static std::thread::id main_thread; @@ -35,16 +33,9 @@ public: virtual std::string GetThreadName() const; virtual void SetThreadName(const std::string& name); - void WaitForAnySignal() // wait 1 ms for something - { - std::unique_lock lock(m_signal_mtx); - m_signal_cv.wait_for(lock, std::chrono::milliseconds(1)); - } + void WaitForAnySignal(); - void Notify() // wake up waiting thread or nothing - { - m_signal_cv.notify_one(); - } + void Notify(); }; NamedThreadBase* GetCurrentNamedThread(); @@ -89,132 +80,4 @@ public: void detach(); void join(); bool joinable() const; -}; - -template class MTPacketBuffer -{ -protected: - volatile bool m_busy; - volatile u32 m_put, m_get; - std::vector m_buffer; - u32 m_max_buffer_size; - mutable std::recursive_mutex m_cs_main; - - void CheckBusy() - { - m_busy = m_put >= m_max_buffer_size; - } - -public: - MTPacketBuffer(u32 max_buffer_size) - : m_max_buffer_size(max_buffer_size) - { - Flush(); - } - - ~MTPacketBuffer() - { - Flush(); - } - - void Flush() - { - std::lock_guard lock(m_cs_main); - m_put = m_get = 0; - m_buffer.clear(); - m_busy = false; - } - -private: - virtual void _push(const T& v) = 0; - virtual T _pop() = 0; - -public: - void Push(const T& v) - { - std::lock_guard lock(m_cs_main); - _push(v); - } - - T Pop() - { - std::lock_guard lock(m_cs_main); - return _pop(); - } - - bool HasNewPacket() const { std::lock_guard lock(m_cs_main); return m_put != m_get; } - bool IsBusy() const { return m_busy; } -}; - -/* -class StepThread : public ThreadBase -{ - wxSemaphore m_main_sem; - wxSemaphore m_destroy_sem; - volatile bool m_exit; - -protected: - StepThread(const std::string& name = "Unknown StepThread") - : ThreadBase(true, name) - , m_exit(false) - { - } - - virtual ~StepThread() throw() - { - } - -private: - virtual void Task() - { - m_exit = false; - - while(!TestDestroy()) - { - m_main_sem.Wait(); - - if(TestDestroy() || m_exit) break; - - Step(); - } - - while(!TestDestroy()) std::this_thread::sleep_for(std::chrono::milliseconds(0)); - if(m_destroy_sem.TryWait() != wxSEMA_NO_ERROR) m_destroy_sem.Post(); - } - - virtual void Step()=0; - -public: - void DoStep() - { - if(IsRunning()) m_main_sem.Post(); - } - - void WaitForExit() - { - if(TestDestroy()) m_destroy_sem.Wait(); - } - - void WaitForNextStep() - { - if(!IsRunning()) return; - - while(m_main_sem.TryWait() != wxSEMA_NO_ERROR) std::this_thread::sleep_for(std::chrono::milliseconds(0)); - } - - void Exit(bool wait = false) - { - if(!IsAlive()) return; - - if(m_main_sem.TryWait() != wxSEMA_NO_ERROR) - { - m_exit = true; - m_main_sem.Post(); - } - - Delete(); - - if(wait) WaitForExit(); - } -}; -*/ +}; \ No newline at end of file diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 6cc990b777..3b28ea682d 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -324,40 +324,51 @@ void CPUThread::Task() // TODO: linux version #endif - while (true) + try { - int status = ThreadStatus(); - - if (status == CPUThread_Stopped || status == CPUThread_Break) + while (true) { - break; - } + int status = ThreadStatus(); - if (status == CPUThread_Sleeping) - { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - continue; - } - - Step(); - //if (PC - 0x13ED4 < 0x288) trace.push_back(PC); - NextPc(m_dec->DecodeMemory(PC + m_offset)); - - if (status == CPUThread_Step) - { - m_is_step = false; - break; - } - - for (uint i = 0; i < bp.size(); ++i) - { - if (bp[i] == PC) + if (status == CPUThread_Stopped || status == CPUThread_Break) { - Emu.Pause(); break; } + + if (status == CPUThread_Sleeping) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + continue; + } + + Step(); + //if (PC - 0x13ED4 < 0x288) trace.push_back(PC); + NextPc(m_dec->DecodeMemory(PC + m_offset)); + + if (status == CPUThread_Step) + { + m_is_step = false; + break; + } + + for (uint i = 0; i < bp.size(); ++i) + { + if (bp[i] == PC) + { + Emu.Pause(); + break; + } + } } } + catch (const std::string& e) + { + LOG_ERROR(GENERAL, "Exception: %s", e.c_str()); + } + catch (const char* e) + { + LOG_ERROR(GENERAL, "Exception: %s", e); + } for (auto& v : trace) LOG_NOTICE(PPU, "PC = 0x%llx", v); diff --git a/rpcs3/Emu/FS/VFS.cpp b/rpcs3/Emu/FS/VFS.cpp index 8263fa1acb..c4c75202ce 100644 --- a/rpcs3/Emu/FS/VFS.cpp +++ b/rpcs3/Emu/FS/VFS.cpp @@ -2,6 +2,7 @@ #include #include "VFS.h" +#include "vfsDirBase.h" #include "Emu/HDD/HDD.h" #include "vfsDeviceLocalFile.h" #include "Ini.h" diff --git a/rpcs3/Emu/FS/VFS.h b/rpcs3/Emu/FS/VFS.h index 95434cb4ea..0f1f1539ba 100644 --- a/rpcs3/Emu/FS/VFS.h +++ b/rpcs3/Emu/FS/VFS.h @@ -1,6 +1,9 @@ #pragma once -#include "vfsDevice.h" +class vfsDevice; +struct vfsFileBase; +class vfsDirBase; +enum vfsOpenMode; enum vfsDeviceType { diff --git a/rpcs3/Emu/FS/vfsDevice.h b/rpcs3/Emu/FS/vfsDevice.h index b5780e7add..c092df5d05 100644 --- a/rpcs3/Emu/FS/vfsDevice.h +++ b/rpcs3/Emu/FS/vfsDevice.h @@ -1,8 +1,9 @@ #pragma once -#include "vfsFileBase.h" -#include "vfsDirBase.h" #include +struct vfsFileBase; +class vfsDirBase; + class vfsDevice { std::string m_ps3_path; diff --git a/rpcs3/Emu/FS/vfsDir.h b/rpcs3/Emu/FS/vfsDir.h index 09c8ee197d..02f229eab5 100644 --- a/rpcs3/Emu/FS/vfsDir.h +++ b/rpcs3/Emu/FS/vfsDir.h @@ -1,4 +1,5 @@ #pragma once +#include #include "vfsDirBase.h" class vfsDir : public vfsDirBase diff --git a/rpcs3/Emu/FS/vfsDirBase.cpp b/rpcs3/Emu/FS/vfsDirBase.cpp index 6e37d7cf1e..e5bda0eded 100644 --- a/rpcs3/Emu/FS/vfsDirBase.cpp +++ b/rpcs3/Emu/FS/vfsDirBase.cpp @@ -1,7 +1,6 @@ #include "stdafx.h" -#include "vfsDevice.h" -#include "vfsDirBase.h" #include "Utilities/rFile.h" +#include "vfsDirBase.h" vfsDirBase::vfsDirBase(vfsDevice* device) : m_pos(0) diff --git a/rpcs3/Emu/FS/vfsDirBase.h b/rpcs3/Emu/FS/vfsDirBase.h index c888f60cab..7251862976 100644 --- a/rpcs3/Emu/FS/vfsDirBase.h +++ b/rpcs3/Emu/FS/vfsDirBase.h @@ -1,5 +1,7 @@ #pragma once +class vfsDevice; + enum DirEntryFlags { DirEntry_TypeDir = 0x1, diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index c549d2fada..ddbfcfebff 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/FS/vfsFileBase.h" #include "cellUserInfo.h" //void cellUserInfo_init(); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 24a5360065..8fa76a2f74 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -8,6 +8,7 @@ #include "Loader/TRP.h" #include "Loader/TROPUSR.h" #include "Emu/FS/vfsDir.h" +#include "Emu/FS/vfsFileBase.h" #include "Emu/SysCalls/lv2/sys_time.h" #include "sceNp.h" #include "sceNpTrophy.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index b99a75b804..0f1ad2bafe 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/FS/vfsFileBase.h" #include "Emu/SysCalls/lv2/lv2Fs.h" Module *sys_fs = nullptr; diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 72b70bb87c..117a0bdbc2 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Utilities/rFile.h" +#include "Emu/FS/vfsStream.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index 35e3b7bda0..62646c83fb 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Utilities/rXml.h" +#include "Emu/FS/vfsFileBase.h" #include "Emu/System.h" #include "TROPUSR.h" diff --git a/rpcs3/Loader/TROPUSR.h b/rpcs3/Loader/TROPUSR.h index 7fca0aa590..bfdc0ff182 100644 --- a/rpcs3/Loader/TROPUSR.h +++ b/rpcs3/Loader/TROPUSR.h @@ -1,5 +1,7 @@ #pragma once +struct vfsStream; + struct TROPUSRHeader { be_t magic; // 81 8F 54 AD From 04c67c3f4b34daa73e4f33b5f2b1a5d88a6e7394 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 25 Aug 2014 22:50:24 +0400 Subject: [PATCH 4/7] Compilation fix --- rpcs3/Emu/FS/VFS.h | 2 +- rpcs3/Emu/FS/vfsFileBase.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/FS/VFS.h b/rpcs3/Emu/FS/VFS.h index 0f1f1539ba..8876072b3f 100644 --- a/rpcs3/Emu/FS/VFS.h +++ b/rpcs3/Emu/FS/VFS.h @@ -3,7 +3,7 @@ class vfsDevice; struct vfsFileBase; class vfsDirBase; -enum vfsOpenMode; +enum vfsOpenMode : u8; enum vfsDeviceType { diff --git a/rpcs3/Emu/FS/vfsFileBase.h b/rpcs3/Emu/FS/vfsFileBase.h index a74e05e251..ff7a56e349 100644 --- a/rpcs3/Emu/FS/vfsFileBase.h +++ b/rpcs3/Emu/FS/vfsFileBase.h @@ -1,7 +1,7 @@ #pragma once #include "vfsStream.h" -enum vfsOpenMode +enum vfsOpenMode : u8 { vfsRead = 0x1, vfsWrite = 0x2, From 78cbb90ef6efb11bca38c589d65bbe7be05ac15b Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 26 Aug 2014 03:55:37 +0400 Subject: [PATCH 5/7] Some leaks fixed --- rpcs3/Emu/CPU/CPUThreadManager.cpp | 1 + rpcs3/Emu/Cell/PPUThread.cpp | 2 +- rpcs3/Emu/Cell/SPUThread.cpp | 6 +- rpcs3/Emu/FS/vfsDir.cpp | 1 + rpcs3/Emu/FS/vfsFile.cpp | 1 + rpcs3/Emu/FS/vfsFile.h | 1 + rpcs3/Emu/Io/Null/NullKeyboardHandler.h | 1 - rpcs3/Emu/Io/Null/NullMouseHandler.h | 1 - rpcs3/Emu/Io/Null/NullPadHandler.h | 1 - rpcs3/Emu/RSX/GSRender.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellAudio.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/cellDmux.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellGame.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellResc.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellResc.h | 2 + rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp | 3 + .../SysCalls/Modules/cellSysutil_SaveData.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 1 + rpcs3/Emu/SysCalls/Modules/libmixer.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 1 + rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 1 + rpcs3/Emu/SysCalls/Static.cpp | 9 +-- rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_cond.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_prx.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_spu.cpp | 1 + rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 1 + rpcs3/Emu/System.cpp | 43 +++++++++++-- rpcs3/Emu/System.h | 62 ++++++++++--------- rpcs3/Gui/Debugger.cpp | 1 + rpcs3/Gui/DisAsmFrame.cpp | 1 + rpcs3/Gui/GameViewer.cpp | 1 + rpcs3/Gui/InterpreterDisAsm.cpp | 1 + rpcs3/Gui/KernelExplorer.cpp | 1 + rpcs3/Gui/RSXDebugger.cpp | 3 +- rpcs3/Gui/VFSManager.h | 1 + rpcs3/Loader/TROPUSR.cpp | 1 + rpcs3/Loader/TRP.cpp | 1 + rpcs3/rpcs3.cpp | 3 + 49 files changed, 128 insertions(+), 46 deletions(-) diff --git a/rpcs3/Emu/CPU/CPUThreadManager.cpp b/rpcs3/Emu/CPU/CPUThreadManager.cpp index 7d8c5c6072..af9368f338 100644 --- a/rpcs3/Emu/CPU/CPUThreadManager.cpp +++ b/rpcs3/Emu/CPU/CPUThreadManager.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/DbgCommand.h" +#include "Emu/IdManager.h" #include "CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" #include "Emu/Cell/SPUThread.h" diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index c76ffbb4d9..5d59de0b27 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -13,7 +13,7 @@ #include #include -extern gcmInfo gcm_info; +//extern gcmInfo gcm_info; PPUThread& GetCurrentPPUThread() { diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index b52f9cb0ba..9e7557a600 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -4,17 +4,19 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Emu/IdManager.h" +#include "Emu/CPU/CPUThreadManager.h" +#include "Emu/Cell/PPUThread.h" #include "Emu/SysCalls/ErrorCodes.h" #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/PPUThread.h" +#include "Emu/Cell/SPUDisAsm.h" #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/SPUDecoder.h" #include "Emu/Cell/SPUInterpreter.h" -#include "Emu/Cell/SPUDisAsm.h" #include "Emu/Cell/SPURecompiler.h" #include diff --git a/rpcs3/Emu/FS/vfsDir.cpp b/rpcs3/Emu/FS/vfsDir.cpp index aaec50c1ff..94ed07096a 100644 --- a/rpcs3/Emu/FS/vfsDir.cpp +++ b/rpcs3/Emu/FS/vfsDir.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Emu/System.h" +#include "VFS.h" #include "vfsDir.h" vfsDir::vfsDir() diff --git a/rpcs3/Emu/FS/vfsFile.cpp b/rpcs3/Emu/FS/vfsFile.cpp index a44d0f63f2..8d0bfb1ebb 100644 --- a/rpcs3/Emu/FS/vfsFile.cpp +++ b/rpcs3/Emu/FS/vfsFile.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Emu/System.h" +#include "VFS.h" #include "vfsFile.h" vfsFile::vfsFile() diff --git a/rpcs3/Emu/FS/vfsFile.h b/rpcs3/Emu/FS/vfsFile.h index 4ab9ddc87d..4d4bcf7189 100644 --- a/rpcs3/Emu/FS/vfsFile.h +++ b/rpcs3/Emu/FS/vfsFile.h @@ -1,4 +1,5 @@ #pragma once +#include #include "vfsFileBase.h" class vfsFile : public vfsFileBase diff --git a/rpcs3/Emu/Io/Null/NullKeyboardHandler.h b/rpcs3/Emu/Io/Null/NullKeyboardHandler.h index d4c187f489..78d25be2b3 100644 --- a/rpcs3/Emu/Io/Null/NullKeyboardHandler.h +++ b/rpcs3/Emu/Io/Null/NullKeyboardHandler.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/Io/KeyboardHandler.h" -#include //for memset class NullKeyboardHandler final : public KeyboardHandlerBase { diff --git a/rpcs3/Emu/Io/Null/NullMouseHandler.h b/rpcs3/Emu/Io/Null/NullMouseHandler.h index 4141190d82..883bca01ef 100644 --- a/rpcs3/Emu/Io/Null/NullMouseHandler.h +++ b/rpcs3/Emu/Io/Null/NullMouseHandler.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/Io/MouseHandler.h" -#include //for memset class NullMouseHandler final : public MouseHandlerBase { diff --git a/rpcs3/Emu/Io/Null/NullPadHandler.h b/rpcs3/Emu/Io/Null/NullPadHandler.h index 5add5ae3c7..d770bf4a00 100644 --- a/rpcs3/Emu/Io/Null/NullPadHandler.h +++ b/rpcs3/Emu/Io/Null/NullPadHandler.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/Io/PadHandler.h" -#include //for memset class NullPadHandler final : public PadHandlerBase { diff --git a/rpcs3/Emu/RSX/GSRender.cpp b/rpcs3/Emu/RSX/GSRender.cpp index b1111c19d7..acad3443c5 100644 --- a/rpcs3/Emu/RSX/GSRender.cpp +++ b/rpcs3/Emu/RSX/GSRender.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Emu/System.h" +#include "GSManager.h" #include "GSRender.h" GSLock::GSLock(GSRender& renderer, GSLockType type) diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 1e1b661111..41c068a329 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -12,6 +12,7 @@ extern "C" #include "libswresample/swresample.h" } +#include "Emu/CPU/CPUThreadManager.h" #include "cellPamf.h" #include "cellAdec.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp index b370717eb3..2b089fca0b 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.cpp @@ -7,7 +7,7 @@ #include "Utilities/SQueue.h" #include "Emu/Event.h" #include "Emu/SysCalls/lv2/sys_time.h" -//#include "Emu/Audio/AudioManager.h" +#include "Emu/Audio/AudioManager.h" #include "Emu/Audio/AudioDumper.h" #include "Emu/Audio/cellAudio.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 8b99c8098b..0569017e2a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/CPU/CPUThreadManager.h" #include "cellPamf.h" #include "cellDmux.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 77bd65771f..f18acfeb64 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -4,6 +4,7 @@ #include "Emu/SysCalls/Modules.h" #include "Utilities/rMsgBox.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsFile.h" #include "Loader/PSF.h" #include "cellGame.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 5c994b3baf..f7ff06beed 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -4,6 +4,7 @@ #include "Emu/SysCalls/Modules.h" //#include "Emu/RSX/GCM.h" +#include "Emu/RSX/GSManager.h" //#include "Emu/SysCalls/lv2/sys_process.h" #include "cellGcmSys.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp index e27532d895..8106aa2cd8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.cpp @@ -5,6 +5,7 @@ #include "cellSysutil.h" #include "Emu/RSX/sysutil_video.h" +#include "Emu/RSX/GSManager.h" #include "cellResc.h" Module *cellResc = nullptr; diff --git a/rpcs3/Emu/SysCalls/Modules/cellResc.h b/rpcs3/Emu/SysCalls/Modules/cellResc.h index bb83d43506..e45d54a7e0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellResc.h +++ b/rpcs3/Emu/SysCalls/Modules/cellResc.h @@ -3,6 +3,8 @@ #define roundup(x,a) (((x)+(a)-1)&(~((a)-1))) #define SEVIRITY 80.f +#include "Emu/RSX/GCM.h" + enum { CELL_RESC_ERROR_NOT_INITIALIZED = 0x80210301, diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index 1c4b688c24..a423305781 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -9,6 +9,9 @@ #include "Loader/PSF.h" #include "Emu/Audio/sysutil_audio.h" #include "Emu/RSX/sysutil_video.h" +#include "Emu/RSX/GSManager.h" +#include "Emu/Audio/AudioManager.h" +#include "Emu/FS/VFS.h" #include "cellMsgDialog.h" #include "cellGame.h" #include "cellSysutil.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp index 9a52f1b1ab..0d69f762a7 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil_SaveData.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" #include "Loader/PSF.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp index ddbfcfebff..490642db67 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUserInfo.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsFileBase.h" #include "cellUserInfo.h" diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index 73da9bb124..b8055e8afd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -12,6 +12,7 @@ extern "C" #include "libavutil/imgutils.h" } +#include "Emu/CPU/CPUThreadManager.h" #include "cellPamf.h" #include "cellVdec.h" diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index ce707c74c6..da49b51552 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Audio/cellAudio.h" #include "libmixer.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index 32e4c88d91..baf395453e 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/FS/VFS.h" #include "Utilities/rFile.h" #include "Emu/FS/vfsDir.h" #include "Crypto/unedat.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 8fa76a2f74..fbfe7fe03c 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -7,6 +7,7 @@ #include "Utilities/rXml.h" #include "Loader/TRP.h" #include "Loader/TROPUSR.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsDir.h" #include "Emu/FS/vfsFileBase.h" #include "Emu/SysCalls/lv2/sys_time.h" diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 0f1ad2bafe..519d2a666e 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsFileBase.h" #include "Emu/SysCalls/lv2/lv2Fs.h" diff --git a/rpcs3/Emu/SysCalls/Static.cpp b/rpcs3/Emu/SysCalls/Static.cpp index 866f50fe6e..e662440431 100644 --- a/rpcs3/Emu/SysCalls/Static.cpp +++ b/rpcs3/Emu/SysCalls/Static.cpp @@ -193,6 +193,10 @@ void StaticFuncManager::StaticExecute(u32 code) void StaticFuncManager::StaticFinalize() { + for (SFunc *s : m_static_funcs_list) + { + delete s; + } m_static_funcs_list.clear(); } @@ -208,9 +212,6 @@ SFunc *StaticFuncManager::operator[](size_t i) StaticFuncManager::~StaticFuncManager() { - for (SFunc *s : m_static_funcs_list) - { - delete s; - } + StaticFinalize(); } diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 15f1ee826d..a96b65f061 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -4,6 +4,7 @@ //#include "Emu/SysCalls/SysCalls.h" #include "Emu/SysCalls/Modules.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsFile.h" #include "Emu/FS/vfsDir.h" #include "lv2Fs.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp index 8a99ac7f25..ab7fdbecec 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_cond.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" #include "sys_cond.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp index 5ab4e2caac..4a4b9d67f1 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_interrupt.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" #include "Emu/Cell/RawSPUThread.h" #include "sys_interrupt.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index 61fb1141c5..6324423055 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" #include "sys_lwmutex.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp index b9e4e57371..eca0b8f297 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_mutex.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" #include "sys_mutex.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index 7dfba3b29c..496725d203 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" #include "sys_ppu_thread.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index 1da8a4cf0b..d315f41039 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsFile.h" #include "Crypto/unself.h" #include "sys_prx.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp index aebb57dff7..c539e7fc55 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_semaphore.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPUThread.h" #include "sys_semaphore.h" #include "sys_time.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp index 454b23572b..c700ff475b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp @@ -3,6 +3,7 @@ #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_spu.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp index ddc53e80e7..e5637e226f 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.cpp @@ -3,6 +3,7 @@ #include "Emu/System.h" #include "Emu/SysCalls/SysCalls.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/RawSPUThread.h" #include "Emu/FS/vfsFile.h" #include "Loader/ELF.h" diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 7250394698..1b1667ddd3 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -4,6 +4,7 @@ #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.cpp b/rpcs3/Emu/System.cpp index 01dbe9790c..52577251da 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -14,6 +14,15 @@ #include "Emu/FS/vfsDeviceLocalFile.h" #include "Emu/DbgCommand.h" +#include "Emu/CPU/CPUThreadManager.h" +#include "Emu/IdManager.h" +#include "Emu/Io/Pad.h" +#include "Emu/Io/Keyboard.h" +#include "Emu/Io/Mouse.h" +#include "Emu/RSX/GSManager.h" +#include "Emu/Audio/AudioManager.h" +#include "Emu/FS/VFS.h" + #include "Loader/PSF.h" #include "../Crypto/unself.h" @@ -35,13 +44,37 @@ Emulator::Emulator() , m_mode(DisAsm) , m_rsx_callback(0) , m_ppu_callback_thr(0) + , m_thread_manager(new CPUThreadManager()) + , m_pad_manager(new PadManager()) + , m_keyboard_manager(new KeyboardManager()) + , m_mouse_manager(new MouseManager()) + , m_id_manager(new IdManager()) + , m_gs_manager(new GSManager()) + , m_audio_manager(new AudioManager()) + , m_callback_manager(new CallbackManager()) , m_event_manager(new EventManager()) , m_sfunc_manager(new StaticFuncManager()) , m_module_manager(new ModuleManager()) - , m_thread_manager(new CPUThreadManager()) + , m_vfs(new VFS()) { } +Emulator::~Emulator() +{ + delete m_thread_manager; + delete m_pad_manager; + delete m_keyboard_manager; + delete m_mouse_manager; + delete m_id_manager; + delete m_gs_manager; + delete m_audio_manager; + delete m_callback_manager; + delete m_event_manager; + delete m_sfunc_manager; + delete m_module_manager; + delete m_vfs; +} + void Emulator::Init() { while(m_modules_init.size()) @@ -157,13 +190,13 @@ void Emulator::Load() LOG_NOTICE(LOADER, "Loading '%s'...", m_path.c_str()); GetInfo().Reset(); - m_vfs.Init(m_path); + GetVFS().Init(m_path); LOG_NOTICE(LOADER, " "); //used to be skip_line LOG_NOTICE(LOADER, "Mount info:"); - for(uint i=0; i %s", m_vfs.m_devices[i]->GetPs3Path().c_str(), m_vfs.m_devices[i]->GetLocalPath().c_str()); + LOG_NOTICE(LOADER, "%s -> %s", GetVFS().m_devices[i]->GetPs3Path().c_str(), GetVFS().m_devices[i]->GetLocalPath().c_str()); } LOG_NOTICE(LOADER, " ");//used to be skip_line @@ -436,7 +469,7 @@ void Emulator::Stop() m_break_points.clear(); m_marked_points.clear(); - m_vfs.UnMountAll(); + GetVFS().UnMountAll(); GetGSManager().Close(); GetAudioManager().Close(); diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 3a233b4b05..e600e5ceb6 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -1,14 +1,8 @@ #pragma once #include -#include "Emu/CPU/CPUThreadManager.h" -#include "Emu/IdManager.h" -#include "Emu/Io/Pad.h" -#include "Emu/Io/Keyboard.h" -#include "Emu/Io/Mouse.h" -#include "Emu/RSX/GSManager.h" -#include "Emu/Audio/AudioManager.h" -#include "Emu/FS/VFS.h" +#include +#include #include "Loader/Loader.h" enum Status @@ -19,9 +13,19 @@ enum Status Ready, }; +class CPUThreadManager; +class PadManager; +class KeyboardManager; +class MouseManager; +class IdManager; +class GSManager; +class AudioManager; +struct CallbackManager; +class CPUThread; class EventManager; class ModuleManager; class StaticFuncManager; +struct VFS; struct EmuInfo { @@ -86,20 +90,19 @@ class Emulator std::vector m_break_points; std::vector m_marked_points; - CPUThreadManager *m_thread_manager; - PadManager m_pad_manager; - KeyboardManager m_keyboard_manager; - MouseManager m_mouse_manager; - IdManager m_id_manager; - GSManager m_gs_manager; - AudioManager m_audio_manager; - CallbackManager m_callback_manager; + CPUThreadManager* m_thread_manager; + PadManager* m_pad_manager; + KeyboardManager* m_keyboard_manager; + MouseManager* m_mouse_manager; + IdManager* m_id_manager; + GSManager* m_gs_manager; + AudioManager* m_audio_manager; + CallbackManager* m_callback_manager; CPUThread* m_ppu_callback_thr; - std::unique_ptr m_event_manager; - std::unique_ptr m_sfunc_manager; - std::unique_ptr m_module_manager; - - VFS m_vfs; + EventManager* m_event_manager; + StaticFuncManager* m_sfunc_manager; + ModuleManager* m_module_manager; + VFS* m_vfs; EmuInfo m_info; @@ -111,20 +114,21 @@ public: s32 m_sdk_version; Emulator(); + ~Emulator(); void Init(); void SetPath(const std::string& path, const std::string& elf_path = ""); void SetTitleID(const std::string& id); CPUThreadManager& GetCPU() { return *m_thread_manager; } - PadManager& GetPadManager() { return m_pad_manager; } - KeyboardManager& GetKeyboardManager() { return m_keyboard_manager; } - MouseManager& GetMouseManager() { return m_mouse_manager; } - IdManager& GetIdManager() { return m_id_manager; } - GSManager& GetGSManager() { return m_gs_manager; } - AudioManager& GetAudioManager() { return m_audio_manager; } - CallbackManager& GetCallbackManager() { return m_callback_manager; } - VFS& GetVFS() { return m_vfs; } + PadManager& GetPadManager() { return *m_pad_manager; } + KeyboardManager& GetKeyboardManager() { return *m_keyboard_manager; } + MouseManager& GetMouseManager() { return *m_mouse_manager; } + IdManager& GetIdManager() { return *m_id_manager; } + GSManager& GetGSManager() { return *m_gs_manager; } + AudioManager& GetAudioManager() { return *m_audio_manager; } + CallbackManager& GetCallbackManager() { return *m_callback_manager; } + VFS& GetVFS() { return *m_vfs; } std::vector& GetBreakPoints() { return m_break_points; } std::vector& GetMarkedPoints() { return m_marked_points; } CPUThread& GetCallbackThread() { return *m_ppu_callback_thr; } diff --git a/rpcs3/Gui/Debugger.cpp b/rpcs3/Gui/Debugger.cpp index ce4955c2cc..f3203eac9f 100644 --- a/rpcs3/Gui/Debugger.cpp +++ b/rpcs3/Gui/Debugger.cpp @@ -6,6 +6,7 @@ #include "rpcs3.h" #include "Debugger.h" #include "InterpreterDisAsm.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPCThread.h" diff --git a/rpcs3/Gui/DisAsmFrame.cpp b/rpcs3/Gui/DisAsmFrame.cpp index 1d87901943..74bfddc0de 100644 --- a/rpcs3/Gui/DisAsmFrame.cpp +++ b/rpcs3/Gui/DisAsmFrame.cpp @@ -4,6 +4,7 @@ #include "Emu/System.h" #include "DisAsmFrame.h" #include "Emu/FS/vfsLocalFile.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPCThread.h" #include "Gui/DisAsmFrame.h" #include "Emu/Cell/PPUDecoder.h" diff --git a/rpcs3/Gui/GameViewer.cpp b/rpcs3/Gui/GameViewer.cpp index 73e040c0af..d9119cbbcd 100644 --- a/rpcs3/Gui/GameViewer.cpp +++ b/rpcs3/Gui/GameViewer.cpp @@ -4,6 +4,7 @@ #include "Utilities/rFile.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsDir.h" #include "Emu/FS/vfsFile.h" #include "GameViewer.h" diff --git a/rpcs3/Gui/InterpreterDisAsm.cpp b/rpcs3/Gui/InterpreterDisAsm.cpp index b0eff5c67f..674dd6bd64 100644 --- a/rpcs3/Gui/InterpreterDisAsm.cpp +++ b/rpcs3/Gui/InterpreterDisAsm.cpp @@ -4,6 +4,7 @@ #include "Emu/System.h" #include "rpcs3.h" #include "InterpreterDisAsm.h" +#include "Emu/CPU/CPUThreadManager.h" #include "Emu/Cell/PPUDecoder.h" #include "Emu/Cell/PPUDisAsm.h" #include "Emu/Cell/SPUDecoder.h" diff --git a/rpcs3/Gui/KernelExplorer.cpp b/rpcs3/Gui/KernelExplorer.cpp index d54a33fcc5..42dd1e2241 100644 --- a/rpcs3/Gui/KernelExplorer.cpp +++ b/rpcs3/Gui/KernelExplorer.cpp @@ -3,6 +3,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" +#include "Emu/IdManager.h" #include "KernelExplorer.h" KernelExplorer::KernelExplorer(wxWindow* parent) diff --git a/rpcs3/Gui/RSXDebugger.cpp b/rpcs3/Gui/RSXDebugger.cpp index 46f23308b1..441bb14389 100644 --- a/rpcs3/Gui/RSXDebugger.cpp +++ b/rpcs3/Gui/RSXDebugger.cpp @@ -7,7 +7,8 @@ #include "RSXDebugger.h" #include "Emu/RSX/sysutil_video.h" -#include "Emu/RSX/GCM.h" +#include "Emu/RSX/GSManager.h" +//#include "Emu/RSX/GCM.h" #include "MemoryViewer.h" diff --git a/rpcs3/Gui/VFSManager.h b/rpcs3/Gui/VFSManager.h index 63260b3e6c..186f136d34 100644 --- a/rpcs3/Gui/VFSManager.h +++ b/rpcs3/Gui/VFSManager.h @@ -1,4 +1,5 @@ #pragma once +#include "Emu/FS/VFS.h" class VFSEntrySettingsDialog : public wxDialog { diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index 62646c83fb..1464d9189c 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Utilities/rXml.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsFileBase.h" #include "Emu/System.h" #include "TROPUSR.h" diff --git a/rpcs3/Loader/TRP.cpp b/rpcs3/Loader/TRP.cpp index 2127e4acf6..8f3e55c4ab 100644 --- a/rpcs3/Loader/TRP.cpp +++ b/rpcs3/Loader/TRP.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "Utilities/Log.h" #include "Emu/System.h" +#include "Emu/FS/VFS.h" #include "Emu/FS/vfsFile.h" #include "TRP.h" diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index 3b32d28c5c..222b8c8bb9 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -5,12 +5,15 @@ #include "Gui/ConLogFrame.h" #include "Emu/GameInfo.h" +#include "Emu/Io/Keyboard.h" #include "Emu/Io/Null/NullKeyboardHandler.h" #include "Emu/Io/Windows/WindowsKeyboardHandler.h" +#include "Emu/Io/Mouse.h" #include "Emu/Io/Null/NullMouseHandler.h" #include "Emu/Io/Windows/WindowsMouseHandler.h" +#include "Emu/Io/Pad.h" #include "Emu/Io/Null/NullPadHandler.h" #include "Emu/Io/Windows/WindowsPadHandler.h" #if defined(_WIN32) From 5d3a612003f0c10372028dba17767d5e86f89432 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 26 Aug 2014 18:38:14 +0400 Subject: [PATCH 6/7] SC_FUNC.h rewritten Now float arguments should work correctly --- rpcs3/Emu/Memory/Memory.h | 4 + rpcs3/Emu/SysCalls/Modules.h | 1 - rpcs3/Emu/SysCalls/SC_FUNC.h | 511 ++++++++------------------------ rpcs3/Emu/SysCalls/SysCalls.cpp | 6 +- 4 files changed, 135 insertions(+), 387 deletions(-) diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 75b78e6eaa..8ce65be932 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -754,6 +754,10 @@ public: { } + mem_class_t() : m_addr(0) + { + } + template u32 operator += (T right) { mem_t& m((mem_t&)*this); diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index a5a6f6890a..776ab30200 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -141,7 +141,6 @@ __forceinline void Module::AddFuncSub(const char group[8], const u64 ops[], cons { if (!ops[0]) return; - //TODO: track down where this is supposed to be deleted SFunc* sf = new SFunc; sf->ptr = (void *)func; sf->func = bind_func(func); diff --git a/rpcs3/Emu/SysCalls/SC_FUNC.h b/rpcs3/Emu/SysCalls/SC_FUNC.h index 7e3ecc41ad..4a773bcf6c 100644 --- a/rpcs3/Emu/SysCalls/SC_FUNC.h +++ b/rpcs3/Emu/SysCalls/SC_FUNC.h @@ -1,414 +1,159 @@ #pragma once #include "Emu/Cell/PPUThread.h" -#define RESULT(x) CPU.GPR[3] = (x) - class func_caller { public: virtual void operator()() = 0; }; - -template -struct get_arg; - -template -struct get_arg // not fp, not ptr, 1..8 +namespace detail { - static __forceinline T func(PPUThread& CPU) { return (T&)CPU.GPR[i + 2]; } -}; + enum bind_arg_type + { + ARG_GENERAL, + ARG_FLOAT, + ARG_VECTOR, + ARG_STACK, + }; -template -struct get_arg // ptr, 1..8 -{ - static_assert(i == 0, "Invalid function argument type: pointer"); - static __forceinline T func(PPUThread& CPU) { return nullptr; } -}; + template + struct bind_arg; -template -struct get_arg // fp, 1..12 -{ - static __forceinline T func(PPUThread& CPU) { return CPU.FPR[i]; } -}; + template + struct bind_arg + { + static __forceinline T func(PPUThread& CPU) { return (T&)CPU.GPR[g_count + 2]; } + }; -template -struct get_arg // not fp, not ptr, 9..12 -{ - static __forceinline T func(PPUThread& CPU) { u64 res = CPU.GetStackArg(i); return (T&)res; } -}; + template + struct bind_arg + { + static __forceinline T func(PPUThread& CPU) { return (T&)CPU.FPR[f_count]; } + }; -template -struct get_arg // ptr, 9..12 -{ - static_assert(i == 0, "Invalid function argument type: pointer"); - static __forceinline T func(PPUThread& CPU) { return nullptr; } -}; + template + struct bind_arg + { + static_assert(v_count == 0, "ARG_VECTOR not supported"); + static __forceinline T func(PPUThread& CPU) { return T(); } + }; -#define ARG(n) get_arg<((n) > 8), std::is_floating_point::value, std::is_pointer::value, T##n, n>::func(CPU) + 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)); } + }; -template -class binder_func_0 : public func_caller -{ - typedef TR (*func_t)(); - const func_t m_call; + template + struct bind_result + { + static __forceinline void func(PPUThread& CPU, T value) + { + static_assert(!std::is_pointer::value, "Invalid function result type: pointer"); + if (std::is_floating_point::value) + { + (T&)CPU.FPR[1] = value; + } + else + { + (T&)CPU.GPR[3] = value; + } + } + }; -public: - binder_func_0(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call()); } -}; + template + struct call_impl + { + static __forceinline RT call(F f, Tuple && t) + { + return call_impl::call(f, std::forward(t)); + } + }; -template<> -class binder_func_0 : public func_caller -{ - typedef void (*func_t)(); - const func_t m_call; + template + struct call_impl + { + static __forceinline RT call(F f, Tuple && t) + { + return f(std::get(std::forward(t))...); + } + }; -public: - binder_func_0(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(); } -}; + template + static __forceinline RT call(F f, Tuple && t) + { + typedef typename std::decay::type ttype; + return detail::call_impl::value, std::tuple_size::value>::call(f, std::forward(t)); + } -template -class binder_func_1 : public func_caller -{ - typedef TR (*func_t)(T1); - const func_t m_call; + template + static __forceinline std::tuple<> iterate(PPUThread& CPU) + { + return std::tuple<>(); + } -public: - binder_func_1(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1))); } -}; + template + static __forceinline std::tuple iterate(PPUThread& CPU) + { + // TODO: check calculations + const bind_arg_type t = std::is_floating_point::value + ? ((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)); + } -template -class binder_func_1 : public func_caller -{ - typedef void (*func_t)(T1); - const func_t m_call; + template + class func_binder; -public: - binder_func_1(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1)); } -}; + template + class func_binder : public func_caller + { + typedef void(*func_t)(TA...); + const func_t m_call; -template -class binder_func_2 : public func_caller -{ - typedef TR (*func_t)(T1, T2); - const func_t m_call; + public: + func_binder(func_t call) + : func_caller() + , m_call(call) + { + } -public: - binder_func_2(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2))); } -}; + virtual void operator()() + { + declCPU(); + call(m_call, iterate<0, 0, 0, TA...>(CPU)); + } + }; -template -class binder_func_2 : public func_caller -{ - typedef void (*func_t)(T1, T2); - const func_t m_call; + template + class func_binder : public func_caller + { + typedef TR(*func_t)(TA...); + const func_t m_call; -public: - binder_func_2(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2)); } -}; + public: + func_binder(func_t call) + : func_caller() + , m_call(call) + { + } -template -class binder_func_3 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3); - const func_t m_call; - -public: - binder_func_3(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3))); } -}; - -template -class binder_func_3 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3); - const func_t m_call; - -public: - binder_func_3(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3)); } -}; - -template -class binder_func_4 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4); - const func_t m_call; - -public: - binder_func_4(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4))); } -}; - -template -class binder_func_4 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4); - const func_t m_call; - -public: - binder_func_4(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4)); } -}; - -template -class binder_func_5 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4, T5); - const func_t m_call; - -public: - binder_func_5(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5))); } -}; - -template -class binder_func_5 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4, T5); - const func_t m_call; - -public: - binder_func_5(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5)); } -}; - -template -class binder_func_6 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4, T5, T6); - const func_t m_call; - -public: - binder_func_6(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6))); } -}; - -template -class binder_func_6 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4, T5, T6); - const func_t m_call; - -public: - binder_func_6(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6)); } -}; - -template -class binder_func_7 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4, T5, T6, T7); - const func_t m_call; - -public: - binder_func_7(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7))); } -}; - -template -class binder_func_7 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4, T5, T6, T7); - const func_t m_call; - -public: - binder_func_7(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7)); } -}; - -template -class binder_func_8 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8); - const func_t m_call; - -public: - binder_func_8(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8))); } -}; - -template -class binder_func_8 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8); - const func_t m_call; - -public: - binder_func_8(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8)); } -}; - -template -class binder_func_9 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8, T9); - const func_t m_call; - -public: - binder_func_9(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8), ARG(9))); } -}; - -template -class binder_func_9 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8, T9); - const func_t m_call; - -public: - binder_func_9(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8), ARG(9)); } -}; - -template -class binder_func_10 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10); - const func_t m_call; - -public: - binder_func_10(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8), ARG(9), ARG(10))); } -}; - -template -class binder_func_10 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10); - const func_t m_call; - -public: - binder_func_10(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8), ARG(9), ARG(10)); } -}; - -template -class binder_func_11 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11); - const func_t m_call; - -public: - binder_func_11(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8), ARG(9), ARG(10), ARG(11))); } -}; - -template -class binder_func_11 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11); - const func_t m_call; - -public: - binder_func_11(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8), ARG(9), ARG(10), ARG(11)); } -}; - -template -class binder_func_12 : public func_caller -{ - typedef TR (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12); - const func_t m_call; - -public: - binder_func_12(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); RESULT(m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8), ARG(9), ARG(10), ARG(11), ARG(12))); } -}; - -template -class binder_func_12 : public func_caller -{ - typedef void (*func_t)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12); - const func_t m_call; - -public: - binder_func_12(func_t call) : func_caller(), m_call(call) {} - virtual void operator()() { declCPU(); m_call(ARG(1), ARG(2), ARG(3), ARG(4), ARG(5), ARG(6), ARG(7), ARG(8), ARG(9), ARG(10), ARG(11), ARG(12)); } -}; - -#undef ARG - -template -func_caller* bind_func(TR (*call)()) -{ - return new binder_func_0(call); + virtual void operator()() + { + declCPU(); + bind_result::func(CPU, call(m_call, iterate<0, 0, 0, TA...>(CPU))); + } + }; } -template -func_caller* bind_func(TR (*call)(T1)) +template +func_caller* bind_func(TR(*call)(TA...)) { - return new binder_func_1(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2)) -{ - return new binder_func_2(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3)) -{ - return new binder_func_3(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4)) -{ - return new binder_func_4(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4, T5)) -{ - return new binder_func_5(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4, T5, T6)) -{ - return new binder_func_6(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4, T5, T6, T7)) -{ - return new binder_func_7(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4, T5, T6, T7, T8)) -{ - return new binder_func_8(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4, T5, T6, T7, T8, T9)) -{ - return new binder_func_9(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)) -{ - return new binder_func_10(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)) -{ - return new binder_func_11(call); -} - -template -func_caller* bind_func(TR (*call)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)) -{ - return new binder_func_12(call); -} + return new detail::func_binder(call); +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/SysCalls.cpp b/rpcs3/Emu/SysCalls/SysCalls.cpp index ec87d6c287..999f736df0 100644 --- a/rpcs3/Emu/SysCalls/SysCalls.cpp +++ b/rpcs3/Emu/SysCalls/SysCalls.cpp @@ -924,7 +924,7 @@ void default_syscall() case 988: LOG_WARNING(HLE, "SysCall 988! r3: 0x%llx, r4: 0x%llx, pc: 0x%llx", CPU.GPR[3], CPU.GPR[4], CPU.PC); - RESULT(0); + CPU.GPR[3] = 0; return; case 999: @@ -940,7 +940,7 @@ void default_syscall() } LOG_ERROR(HLE, "Unknown syscall: %d - %08x", code, code); - RESULT(0); + CPU.GPR[3] = 0; return; } @@ -963,7 +963,7 @@ void SysCalls::DoSyscall(u32 code) LOG_ERROR(HLE, "TODO: %s", GetHLEFuncName(code).c_str()); declCPU(); - RESULT(0); + CPU.GPR[3] = 0; } IdManager& SysCallBase::GetIdManager() const From d7fd8e3ca69690941d948237a58402f6fb380377 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 26 Aug 2014 20:45:43 +0400 Subject: [PATCH 7/7] Small fix --- rpcs3/Emu/SysCalls/ModuleManager.cpp | 9 ++++++--- rpcs3/Emu/SysCalls/Modules/cellAdec.cpp | 6 +++--- rpcs3/Emu/SysCalls/Modules/cellSync.cpp | 3 +++ rpcs3/Emu/SysCalls/Modules/cellVdec.cpp | 6 +++--- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 13 ++++++++----- rpcs3/Emu/SysCalls/Modules/sys_fs.cpp | 3 +++ 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/rpcs3/Emu/SysCalls/ModuleManager.cpp b/rpcs3/Emu/SysCalls/ModuleManager.cpp index 8c919c7cb3..a5b42c6031 100644 --- a/rpcs3/Emu/SysCalls/ModuleManager.cpp +++ b/rpcs3/Emu/SysCalls/ModuleManager.cpp @@ -48,6 +48,7 @@ extern Module *cellSail; extern void cellSpurs_init(); extern Module *cellSpurs; extern void cellSync_init(); +extern void cellSync_load(); extern Module *cellSync; extern void cellSysmodule_init(); extern Module *cellSysmodule; @@ -81,8 +82,10 @@ extern void sceNpTus_unload(); extern void sceNpTus_init(); extern Module *sceNpTus; extern void sysPrxForUser_init(); +extern void sysPrxForUser_load(); extern Module *sysPrxForUser; extern void sys_fs_init(); +extern void sys_fs_load(); extern Module *sys_fs; extern void sys_io_init(); extern Module *sys_io; @@ -250,7 +253,7 @@ 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); + m_mod_init.emplace_back("cellSync", cellSync_init, cellSync_load, nullptr); cellSysutil = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0015, cellSysutil_init); cellSysutilAp = static_cast (&(m_mod_init.back())) + 1; @@ -278,9 +281,9 @@ void ModuleManager::init() sceNpTus = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0045, sceNpTus_init, nullptr, sceNpTus_unload); sysPrxForUser = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back("sysPrxForUser", sysPrxForUser_init); + m_mod_init.emplace_back("sysPrxForUser", sysPrxForUser_init, sysPrxForUser_load, nullptr); sys_fs = static_cast (&(m_mod_init.back())) + 1; - m_mod_init.emplace_back(0x000e, sys_fs_init); + m_mod_init.emplace_back(0x000e, sys_fs_init, sys_fs_load, nullptr); sys_io = static_cast (&(m_mod_init.back())) + 1; m_mod_init.emplace_back(0x0017, sys_io_init); sys_net = static_cast (&(m_mod_init.back())) + 1; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 41c068a329..7fcf739465 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -35,6 +35,9 @@ AudioDecoder::AudioDecoder(AudioCodecType type, u32 addr, u32 size, u32 func, u3 , ctx(nullptr) , fmt(nullptr) { + av_register_all(); + avcodec_register_all(); + AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_ATRAC3P); if (!codec) { @@ -824,7 +827,4 @@ void cellAdec_init() REG_FUNC(cellAdec, cellAdecDecodeAu); REG_FUNC(cellAdec, cellAdecGetPcm); REG_FUNC(cellAdec, cellAdecGetPcmItem); - - av_register_all(); - avcodec_register_all(); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 58dac98731..bd1e4fcb78 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -2217,7 +2217,10 @@ void cellSync_init() cellSync->AddFunc(0xe1bc7add, _cellSyncLFQueuePopBody); cellSync->AddFunc(0xe9bf2110, _cellSyncLFQueueGetPushPointer); cellSync->AddFunc(0xfe74e8e7, _cellSyncLFQueueCompletePopPointer); +} +void cellSync_load() +{ #ifdef PRX_DEBUG CallAfter([]() { diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index b8055e8afd..7bfb67aef1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -35,6 +35,9 @@ VideoDecoder::VideoDecoder(CellVdecCodecType type, u32 profile, u32 addr, u32 si , ctx(nullptr) , vdecCb(nullptr) { + av_register_all(); + avcodec_register_all(); + AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264); if (!codec) { @@ -808,7 +811,4 @@ void cellVdec_init() cellVdec->AddFunc(0x807c861a, cellVdecGetPicture); cellVdec->AddFunc(0x17c702b9, cellVdecGetPicItem); cellVdec->AddFunc(0xe13ef6fc, cellVdecSetFrameRate); - - av_register_all(); - avcodec_register_all(); } diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index c0b845ef55..8a1586aa35 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -397,11 +397,6 @@ void sysPrxForUser_init() REG_FUNC(sysPrxForUser, _sys_strncpy); sysPrxForUser->AddFunc(0xe75c40f2, _unnamed_E75C40F2); // real name is unknown - spu_printf_agcb = 0; - spu_printf_dgcb = 0; - spu_printf_atcb = 0; - spu_printf_dtcb = 0; - REG_FUNC(sysPrxForUser, _sys_spu_printf_initialize); REG_FUNC(sysPrxForUser, _sys_spu_printf_finalize); REG_FUNC(sysPrxForUser, _sys_spu_printf_attach_group); @@ -411,3 +406,11 @@ void sysPrxForUser_init() REG_FUNC(sysPrxForUser, _sys_printf); } + +void sysPrxForUser_load() +{ + spu_printf_agcb = 0; + spu_printf_dgcb = 0; + spu_printf_atcb = 0; + spu_printf_dtcb = 0; +} \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 519d2a666e..3f943c843c 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -314,6 +314,9 @@ void sys_fs_init() sys_fs->AddFunc(0x81f33783, cellFsStReadPutCurrentAddr); sys_fs->AddFunc(0x8f71c5b2, cellFsStReadWait); sys_fs->AddFunc(0x866f6aec, cellFsStReadWaitCallback); +} +void sys_fs_load() +{ aio_init = false; }