diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index a475b85eb7..2f91be639a 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -2,12 +2,14 @@ namespace vm { - //TODO bool check_addr(u32 addr) { + // Checking address before using it is unsafe. + // The only safe way to check it is to protect both actions (checking and using) with mutex that is used for mapping/allocation. return false; } + //TODO bool map(u32 addr, u32 size, u32 flags) { return false; @@ -32,13 +34,7 @@ namespace vm return 0; } - bool read32(u32 addr, u32& value) + void write32(u32 addr, u32 value) { - return false; - } - - bool write32(u32 addr, u32 value) - { - return false; } } \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm.h b/rpcs3/Emu/Memory/vm.h index 97a43cb78a..4cd5b42ec2 100644 --- a/rpcs3/Emu/Memory/vm.h +++ b/rpcs3/Emu/Memory/vm.h @@ -2,7 +2,6 @@ namespace vm { - bool check_addr(u32 addr); bool map(u32 addr, u32 size, u32 flags); bool unmap(u32 addr, u32 size = 0, u32 flags = 0); u32 alloc(u32 size); @@ -20,10 +19,8 @@ namespace vm return (T&)Memory[addr]; } - //TODO u32 read32(u32 addr); - bool read32(u32 addr, u32& value); - bool write32(u32 addr, u32 value); + void write32(u32 addr, u32 value); } #include "vm_ptr.h" diff --git a/rpcs3/Emu/Memory/vm_ref.h b/rpcs3/Emu/Memory/vm_ref.h index 797c6da784..0d15220a08 100644 --- a/rpcs3/Emu/Memory/vm_ref.h +++ b/rpcs3/Emu/Memory/vm_ref.h @@ -28,9 +28,9 @@ namespace vm return Memory.IsGoodAddr(m_addr, sizeof(T)); } - static ref make(u32 addr) + static _ref_base make(u32 addr) { - return (ref&)addr; + return (_ref_base&)addr; } }; @@ -49,15 +49,15 @@ namespace vm namespace ps3 { //default reference for HLE functions (LE reference to BE data) - template class ref : public lrefb {}; + template class ref : public lrefb {}; //default reference for HLE structures (BE reference to BE data) - template class bref : public brefb {}; + template class bref : public brefb {}; } namespace psv { //default reference for HLE functions & structures (LE reference to LE data) - template class ref : public lrefl {}; + template class ref : public lrefl {}; } } \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm_var.h b/rpcs3/Emu/Memory/vm_var.h index adb4338c0d..ec2a97057f 100644 --- a/rpcs3/Emu/Memory/vm_var.h +++ b/rpcs3/Emu/Memory/vm_var.h @@ -34,7 +34,7 @@ namespace vm void alloc() { m_addr = Memory.Alloc(size(), m_align); - m_ptr = Memory.IsGoodAddr(m_addr, size()) ? get_ptr(m_addr) : nullptr; + m_ptr = (T*)Memory.VirtualToRealAddr(m_addr); } void dealloc() @@ -54,7 +54,7 @@ namespace vm res.m_addr = addr; res.m_size = size; res.m_align = align; - res.m_ptr = Memory.IsGoodAddr(addr, size) ? get_ptr(addr) : nullptr; + res.m_ptr = (T*)Memory.VirtualToRealAddr(addr); return res; } @@ -156,7 +156,7 @@ namespace vm void alloc() { m_addr = Memory.Alloc(size(), m_align); - m_ptr = Memory.IsGoodAddr(m_addr, size()) ? get_ptr(m_addr) : nullptr; + m_ptr = (T*)Memory.VirtualToRealAddr(m_addr); } void dealloc() @@ -177,7 +177,7 @@ namespace vm res.m_count = count; res.m_size = size; res.m_align = align; - res.m_ptr = Memory.IsGoodAddr(addr, size * count) ? get_ptr(addr) : nullptr; + res.m_ptr = (T*)Memory.VirtualToRealAddr(addr); return res; } @@ -355,7 +355,7 @@ namespace vm void alloc() { m_addr = Memory.Alloc(size(), m_align); - m_ptr = Memory.IsGoodAddr(m_addr, size()) ? get_ptr(m_addr) : nullptr; + m_ptr = (T*)Memory.VirtualToRealAddr(m_addr); } void dealloc() diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 5ef3020554..c6ee6ff64a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -129,8 +129,8 @@ u32 cellGcmGetNotifyDataAddress(u32 index) cellGcmSys->Warning("cellGcmGetNotifyDataAddress(index=%d)", index); // Get address of 'IO table' and 'EA table' - MemoryAllocator table; - cellGcmGetOffsetTable(table.GetAddr()); + vm::var table; + cellGcmGetOffsetTable(table.addr()); // If entry not in use, return NULL u16 entry = mem_ptr_t(table->eaAddress)[241]; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index ad4a67c6ac..733fb8feaa 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -9,7 +9,7 @@ //Module cellSpurs(0x000a, cellSpurs_init); Module *cellSpurs = nullptr; -#ifdef PRX_DEBUG +#ifdef _WIN32 extern u32 libsre; extern u32 libsre_rtoc; #endif diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp index 95c27a9a9e..2f768a85a3 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpursJq.cpp @@ -8,7 +8,7 @@ Module* cellSpursJq = nullptr; -#ifdef PRX_DEBUG +#ifdef _WIN32 #include "prx_libspurs_jq.h" u32 libspurs_jq; u32 libspurs_jq_rtoc; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index a3c9b9cee5..14eeeea745 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -11,7 +11,7 @@ //Module cellSync("cellSync", cellSync_init); Module *cellSync = nullptr; -#ifdef PRX_DEBUG +#ifdef _WIN32 #include "prx_libsre.h" u32 libsre; u32 libsre_rtoc; @@ -1514,7 +1514,7 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, //syncLFQueueDump(queue); #ifdef PRX_DEBUG - MemoryAllocator> position_v; + vm::var> position_v; #endif while (true) { @@ -1523,7 +1523,7 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { #ifdef PRX_DEBUG_XXX - res = GetCurrentPPUThread().FastCall(libsre + 0x24B0, libsre_rtoc, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x24B0, libsre_rtoc, queue.GetAddr(), position_v.addr(), isBlocking, 0); position = position_v->ToLE(); #else res = syncLFQueueGetPushPointer(queue, position, isBlocking, 0); @@ -1532,7 +1532,7 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t queue, u32 buffer_addr, else { #ifdef PRX_DEBUG - res = (s32)GetCurrentPPUThread().FastCall(libsre + 0x3050, libsre_rtoc, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); + res = (s32)GetCurrentPPUThread().FastCall(libsre + 0x3050, libsre_rtoc, queue.GetAddr(), position_v.addr(), isBlocking, 0); position = position_v->ToLE(); #else res = syncLFQueueGetPushPointer2(queue, position, isBlocking, 0); @@ -1906,7 +1906,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u s32 position; #ifdef PRX_DEBUG - MemoryAllocator> position_v; + vm::var> position_v; #endif while (true) { @@ -1914,7 +1914,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u if (queue->m_direction.ToBE() != se32(CELL_SYNC_QUEUE_ANY2ANY)) { #ifdef PRX_DEBUG_XXX - res = GetCurrentPPUThread().FastCall(libsre + 0x2A90, libsre_rtoc, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0, 0); + res = GetCurrentPPUThread().FastCall(libsre + 0x2A90, libsre_rtoc, queue.GetAddr(), position_v.addr(), isBlocking, 0, 0); position = position_v->ToLE(); #else res = syncLFQueueGetPopPointer(queue, position, isBlocking, 0, 0); @@ -1923,7 +1923,7 @@ s32 _cellSyncLFQueuePopBody(mem_ptr_t queue, u32 buffer_addr, u else { #ifdef PRX_DEBUG - res = (s32)GetCurrentPPUThread().FastCall(libsre + 0x39AC, libsre_rtoc, queue.GetAddr(), position_v.GetAddr(), isBlocking, 0); + res = (s32)GetCurrentPPUThread().FastCall(libsre + 0x39AC, libsre_rtoc, queue.GetAddr(), position_v.addr(), isBlocking, 0); position = position_v->ToLE(); #else res = syncLFQueueGetPopPointer2(queue, position, isBlocking, 0); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp index 700617edb5..3ac09b97f1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync2.cpp @@ -9,7 +9,7 @@ //Module cellSync2(0x0055, cellSync2_init); Module* cellSync2 = nullptr; -#ifdef PRX_DEBUG +#ifdef _WIN32 #include "prx_libsync2.h" u32 libsync2; u32 libsync2_rtoc;