diff --git a/Utilities/BEType.h b/Utilities/BEType.h index cfe3dc5b0f..fbd18f5089 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -490,14 +490,14 @@ private: }; public: - const T& ToBE() const + const type& ToBE() const { return m_data; } type ToLE() const { - return se_t::func(m_data); + return se_t::func(m_data); } void FromBE(const type& value) @@ -507,7 +507,7 @@ public: void FromLE(const type& value) { - m_data = se_t::func(value); + m_data = se_t::func(value); } static be_t MakeFromLE(const type value) @@ -533,14 +533,14 @@ public: return is_le_machine ? ToLE() : ToBE(); } - be_t() = default; - be_t(const be_t& value) = default; - - be_t(type value) - { - m_data = se_t::func(value); - } + //be_t() = default; + //be_t(const be_t& value) = default; + //be_t(type value) + //{ + // m_data = se_t::func(value); + //} + be_t& operator = (const be_t& value) = default; be_t& operator = (type value) @@ -558,7 +558,8 @@ public: template operator const be_t() const { - return _convert sizeof(T)) ? 1 : (sizeof(T1) < sizeof(T) ? 2 : 0))>::func(m_data); + return be_t::make(value()); + //return _convert sizeof(T)) ? 1 : (sizeof(T1) < sizeof(T) ? 2 : 0))>::func(m_data); } template be_t& operator += (T1 right) { return *this = T(*this) + right; } @@ -644,6 +645,8 @@ public: //be_t if need swap endianes, T otherwise typedef typename _be_type_selector< T, T2, value >::type type; + + typedef typename _be_type_selector< T, T2, !is_be_t::value >::type forced_type; }; template @@ -771,3 +774,51 @@ template __forceinline static void Write64(T& f, const u64 data) { Write64LE(f, re64(data)); } + +template +struct convert_le_be_t +{ + static Tto func(Tfrom&& value) + { + return (Tto)value; + } +}; + +template +struct convert_le_be_t, Tfrom> +{ + static be_t func(Tfrom&& value) + { + return be_t::make(value); + } +}; + +template +struct convert_le_be_t, be_t> +{ + static be_t func(be_t&& value) + { + return value; + } +}; + +template +struct convert_le_be_t> +{ + static Tto func(be_t&& value) + { + return value.value(); + } +}; + +template +__forceinline Tto convert_le_be(Tfrom&& value) +{ + return convert_le_be_t::func(value); +} + +template +__forceinline void convert_le_be(Tto& dst, Tfrom&& src) +{ + dst = convert_le_be_t::func(src) +} \ No newline at end of file diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index d5b2a94eb1..e43b78fe89 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -228,13 +228,13 @@ public: m_call_stack.erase((res + 1).base(), m_call_stack.end()); return; } - + //add a new entry otherwise CallStackItem new_item; - + new_item.branch_pc = pc; new_item.pc = PC; - + m_call_stack.push_back(new_item); } diff --git a/rpcs3/Emu/Cell/PPCThread.h b/rpcs3/Emu/Cell/PPCThread.h index f06cf4eaee..c7e5dab93c 100644 --- a/rpcs3/Emu/Cell/PPCThread.h +++ b/rpcs3/Emu/Cell/PPCThread.h @@ -9,7 +9,7 @@ public: virtual std::string GetThreadName() const { - return (GetFName() + fmt::Format("[0x%08llx]", PC)); + return (GetFName() + fmt::Format("[0x%08x]", PC)); } protected: diff --git a/rpcs3/Emu/Cell/PPUInstrTable.h b/rpcs3/Emu/Cell/PPUInstrTable.h index 250311321e..676f32fa79 100644 --- a/rpcs3/Emu/Cell/PPUInstrTable.h +++ b/rpcs3/Emu/Cell/PPUInstrTable.h @@ -643,8 +643,8 @@ namespace PPU_instr { using namespace lists; - static auto LIS = std::bind(ADDIS, std::placeholders::_1, r0, std::placeholders::_2); - static auto LI = std::bind(ADDI, std::placeholders::_1, r0, std::placeholders::_2); + //static auto LIS = std::bind(ADDIS, std::placeholders::_1, r0, std::placeholders::_2); + //static auto LI = std::bind(ADDI, std::placeholders::_1, r0, std::placeholders::_2); static auto NOP = std::bind(ORI, r0, r0, 0); static auto MR = std::bind(OR, std::placeholders::_1, std::placeholders::_2, std::placeholders::_2, false); static auto BLR = std::bind(BCLR, 0x10 | 0x04, 0, 0, 0); diff --git a/rpcs3/Emu/Cell/PPULLVMRecompiler.cpp b/rpcs3/Emu/Cell/PPULLVMRecompiler.cpp index aad5ca6d0f..07354dd068 100644 --- a/rpcs3/Emu/Cell/PPULLVMRecompiler.cpp +++ b/rpcs3/Emu/Cell/PPULLVMRecompiler.cpp @@ -4479,14 +4479,14 @@ void Compiler::SetXerSo(Value * so) { } Value * Compiler::GetUsprg0() { - auto usrpg0_i8_ptr = m_ir_builder->CreateConstGEP1_32(m_state.args[CompileTaskState::Args::State], (unsigned int)offsetof(PPUThread, USPRG0)); + auto usrpg0_i8_ptr = m_ir_builder->CreateConstGEP1_32(m_state.args[CompileTaskState::Args::State], (unsigned int)offsetof(PPUThread, USPRG)); auto usprg0_i64_ptr = m_ir_builder->CreateBitCast(usrpg0_i8_ptr, m_ir_builder->getInt64Ty()->getPointerTo()); return m_ir_builder->CreateAlignedLoad(usprg0_i64_ptr, 8); } void Compiler::SetUsprg0(Value * val_x64) { auto val_i64 = m_ir_builder->CreateBitCast(val_x64, m_ir_builder->getInt64Ty()); - auto usprg0_i8_ptr = m_ir_builder->CreateConstGEP1_32(m_state.args[CompileTaskState::Args::State], (unsigned int)offsetof(PPUThread, USPRG0)); + auto usprg0_i8_ptr = m_ir_builder->CreateConstGEP1_32(m_state.args[CompileTaskState::Args::State], (unsigned int)offsetof(PPUThread, USPRG)); auto usprg0_i64_ptr = m_ir_builder->CreateBitCast(usprg0_i8_ptr, m_ir_builder->getInt64Ty()->getPointerTo()); m_ir_builder->CreateAlignedStore(val_i64, usprg0_i64_ptr, 8); } @@ -4776,7 +4776,7 @@ void Compiler::WriteMemory(Value * addr_i64, Value * val_ix, u32 alignment, bool val_else_i32 = m_ir_builder->CreateCall(Intrinsic::getDeclaration(m_module, Intrinsic::bswap, m_ir_builder->getInt32Ty()), val_else_i32); } - Call("vm.write32", (void(*)(u64, u32))vm::write32, addr_i64, val_else_i32); + Call("vm.write32", (void(*)(u32, u32))vm::write32, addr_i64, val_else_i32); m_ir_builder->CreateBr(merge_bb); m_ir_builder->SetInsertPoint(merge_bb); diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index e8189828a6..06b2c8b926 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -88,8 +88,8 @@ void PPUThread::InitRegs() GPR[1] = align(m_stack_addr + m_stack_size, 0x200) - 0x200; GPR[2] = rtoc; - GPR[11] = entry; - GPR[12] = Emu.GetMallocPageSize(); + //GPR[11] = entry; + //GPR[12] = Emu.GetMallocPageSize(); GPR[13] = Memory.PRXMem.GetStartAddr() + 0x7060; LR = Emu.GetPPUThreadExit(); @@ -244,4 +244,48 @@ ppu_thread::ppu_thread(u32 entry, const std::string& name, u32 stack_size, u32 p thread->SetPrio(prio ? prio : Emu.GetInfo().GetProcParam().primary_prio); argc = 0; +} + +cpu_thread& ppu_thread::args(std::initializer_list values) +{ + if (!values.size()) + return *this; + + assert(argc == 0); + + envp.set(vm::alloc(align((u32)sizeof(*envp), stack_align), vm::main)); + *envp = 0; + argv.set(vm::alloc(sizeof(*argv) * values.size(), vm::main)); + + for (auto &arg : values) + { + u32 arg_size = align(u32(arg.size() + 1), stack_align); + u32 arg_addr = vm::alloc(arg_size, vm::main); + + std::strcpy(vm::get_ptr(arg_addr), arg.c_str()); + + argv[argc++] = arg_addr; + } + + return *this; +} + +cpu_thread& ppu_thread::run() +{ + thread->Run(); + + gpr(3, argc); + gpr(4, argv.addr()); + gpr(5, envp.addr()); + + return *this; +} + +ppu_thread& ppu_thread::gpr(uint index, u64 value) +{ + assert(index < 32); + + static_cast(thread)->GPR[index] = value; + + return *this; } \ No newline at end of file diff --git a/rpcs3/Emu/Cell/PPUThread.h b/rpcs3/Emu/Cell/PPUThread.h index e7f50f81e6..717dd151f1 100644 --- a/rpcs3/Emu/Cell/PPUThread.h +++ b/rpcs3/Emu/Cell/PPUThread.h @@ -808,38 +808,7 @@ class ppu_thread : cpu_thread public: ppu_thread(u32 entry, const std::string& name = "", u32 stack_size = 0, u32 prio = 0); - cpu_thread& args(std::initializer_list values) override - { - if (!values.size()) - return *this; - - assert(argc == 0); - - envp.set(vm::alloc(align((u32)sizeof(*envp), stack_align), vm::main)); - *envp = 0; - argv.set(vm::alloc(sizeof(*argv) * values.size(), vm::main)); - - for (auto &arg : values) - { - u32 arg_size = align(u32(arg.size() + 1), stack_align); - u32 arg_addr = vm::alloc(arg_size, vm::main); - - std::strcpy(vm::get_ptr(arg_addr), arg.c_str()); - - argv[argc++] = arg_addr; - } - - return *this; - } - - cpu_thread& run() override - { - thread->Run(); - - static_cast(thread)->GPR[3] = argc; - static_cast(thread)->GPR[4] = argv.addr(); - static_cast(thread)->GPR[5] = envp.addr(); - - return *this; - } + cpu_thread& args(std::initializer_list values) override; + cpu_thread& run() override; + ppu_thread& gpr(uint index, u64 value); }; \ No newline at end of file diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index 95e879e6bb..5e274ea22f 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -14,7 +14,7 @@ namespace vm #define MAP_ANONYMOUS MAP_ANON #endif - void* const g_base_addr = ::mmap(nullptr, 0x100000000, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); + void* const g_base_addr = mmap(nullptr, 0x100000000, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); #endif bool check_addr(u32 addr) diff --git a/rpcs3/Emu/Memory/vm.h b/rpcs3/Emu/Memory/vm.h index 75a9052412..ac8c1dd12e 100644 --- a/rpcs3/Emu/Memory/vm.h +++ b/rpcs3/Emu/Memory/vm.h @@ -43,24 +43,12 @@ namespace vm return (T*)((u8*)g_base_addr + addr); } - template - T* const get_ptr(u64 addr) - { - return get_ptr((u32)addr); - } - template T& get_ref(u32 addr) { return *get_ptr(addr); } - template - T& get_ref(u64 addr) - { - return get_ref((u32)addr); - } - namespace ps3 { void init(); diff --git a/rpcs3/Emu/Memory/vm_ptr.h b/rpcs3/Emu/Memory/vm_ptr.h index c984b18e0a..f4bb39ac8c 100644 --- a/rpcs3/Emu/Memory/vm_ptr.h +++ b/rpcs3/Emu/Memory/vm_ptr.h @@ -80,7 +80,7 @@ namespace vm template operator const _ptr_base() const { - typename std::remove_const::type addr = m_addr; + typename std::remove_const::type addr = convert_le_be(m_addr); return (_ptr_base&)addr; } @@ -163,7 +163,12 @@ namespace vm return vm::get_ref(m_addr); } - __forceinline T& operator [](AT index) const + __forceinline T& operator [](typename remove_be_t::type index) const + { + return vm::get_ref(m_addr + sizeof(AT)* index); + } + + __forceinline T& operator [](typename to_be_t::forced_type index) const { return vm::get_ref(m_addr + sizeof(AT)* index); } @@ -196,9 +201,10 @@ namespace vm return m_addr; } - void set(AT value) + template + void set(T&& value) { - m_addr = value; + m_addr = convert_le_be(value); } /* @@ -212,7 +218,7 @@ namespace vm template operator const _ptr_base() const { - typename std::remove_const::type addr = m_addr; + typename std::remove_const::type addr = convert_le_be(m_addr); return (_ptr_base&)addr; } @@ -270,14 +276,14 @@ namespace vm template operator const _ptr_base() const { - typename std::remove_const::type addr = m_addr; + typename std::remove_const::type addr = convert_le_be(m_addr); return (_ptr_base&)addr; } template operator const _ptr_base() const { - typename std::remove_const::type addr = m_addr; + typename std::remove_const::type addr = convert_le_be(m_addr); return (_ptr_base&)addr; } @@ -330,7 +336,7 @@ namespace vm template operator const _ptr_base() const { - typename std::remove_const::type addr; addr = m_addr; + typename std::remove_const::type addr = convert_le_be(m_addr); return (_ptr_base&)addr; } @@ -379,7 +385,7 @@ namespace vm template operator const _ptr_base() const { - typename std::remove_const::type addr = m_addr; + typename std::remove_const::type addr = convert_le_be(m_addr); return (_ptr_base&)addr; } @@ -390,7 +396,7 @@ namespace vm operator const std::function() const { - typename std::remove_const::type addr = m_addr; + typename std::remove_const::type addr = convert_le_be(m_addr); return [addr](T... args) -> RT { return make(addr)(args...); }; } diff --git a/rpcs3/Emu/SysCalls/Modules.cpp b/rpcs3/Emu/SysCalls/Modules.cpp index 7951808e2a..e74349e7ae 100644 --- a/rpcs3/Emu/SysCalls/Modules.cpp +++ b/rpcs3/Emu/SysCalls/Modules.cpp @@ -179,7 +179,7 @@ void fix_import(Module* module, u32 func, u32 addr) vm::ptr& ptr = (vm::ptr&)addr; - *ptr++ = LIS(11, func >> 16); + *ptr++ = ADDIS(11, 0, func >> 16); *ptr++ = ORI(11, 11, func & 0xffff); *ptr++ = NOP(); ++ptr; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 9a293f5476..997cd8c5f8 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -1691,7 +1691,7 @@ s64 cellSpursGetWorkloadFlag(vm::ptr spurs, vm::ptrset(be_t::make(Memory.RealToVirtualAddr(&spurs->m.wklFlag))); + flag->set(Memory.RealToVirtualAddr(&spurs->m.wklFlag)); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index e77004872a..fd68456b2c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -290,7 +290,7 @@ s32 syncRwmInitialize(vm::ptr rwm, vm::ptr buffer, u32 buffer } // prx: zeroize first u16 and second u16, write buffer_size in second u32, write buffer_addr in second u64 and sync - rwm->m_size = buffer_size; + rwm->m_size = be_t::make(buffer_size); rwm->m_buffer = buffer; rwm->data.exchange({}); return CELL_OK; @@ -479,9 +479,9 @@ s32 syncQueueInitialize(vm::ptr queue, vm::ptr buffer, u32 si } // prx: zeroize first u64, write size in third u32, write depth in fourth u32, write address in third u64 and sync - queue->m_size = size; - queue->m_depth = depth; - queue->m_buffer = buffer; + queue->m_size = be_t::make(size); + queue->m_depth = be_t::make(depth); + queue->m_buffer.set(buffer.addr()); queue->data.exchange({}); return CELL_OK; } @@ -855,7 +855,7 @@ void syncLFQueueInit(vm::ptr queue, vm::ptr buffer, u32 siz { queue->pop1.write_relaxed({}); queue->push1.write_relaxed({}); - queue->m_buffer.set(queue->m_buffer.addr() | be_t::make(1)); + queue->m_buffer.set(queue->m_buffer.addr() | 1); queue->m_bs[0] = -1; queue->m_bs[1] = -1; //m_bs[2] diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index 9c709ba37f..a7d277977b 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -15,7 +15,7 @@ s32 lwcond_create(sys_lwcond_t& lwcond, sys_lwmutex_t& lwmutex, u64 name_u64) u32 id = sys_lwcond.GetNewId(new Lwcond(name_u64), TYPE_LWCOND); u32 addr = Memory.RealToVirtualAddr(&lwmutex); - lwcond.lwmutex.set(be_t::make(addr)); + lwcond.lwmutex.set(addr); lwcond.lwcond_queue = id; std::string name((const char*)&name_u64, 8); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spu.h b/rpcs3/Emu/SysCalls/lv2/sys_spu.h index a07e6d0ca3..6cf66a7bcb 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spu.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spu.h @@ -90,7 +90,7 @@ struct sys_spu_segment union { - be_t addr; // address or fill value + be_t addr; // address or fill value u64 pad; }; }; diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 7a7aacff96..efabecda1f 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -45,10 +45,10 @@ public: SetTLSData(0, 0, 0); memset(&proc_param, 0, sizeof(sys_process_param_info)); - proc_param.malloc_pagesize = 0x100000; - proc_param.sdk_version = 0x360001; - proc_param.primary_stacksize = 0x100000; - proc_param.primary_prio = 0x50; + proc_param.malloc_pagesize = be_t::make(0x100000); + proc_param.sdk_version = be_t::make(0x360001); + proc_param.primary_stacksize = be_t::make(0x100000); + proc_param.primary_prio = be_t::make(0x50); } void SetTLSData(const u64 addr, const u64 filesz, const u64 memsz) diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 40e2b80a4d..3c497e20f0 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -323,7 +323,7 @@ namespace loader ppu_thr_stop_data[1] = BLR(); Emu.SetPPUThreadStop(ppu_thr_stop_data.addr()); - //vm::write64(Memory.PRXMem.AllocAlign(0x10000), 0xDEADBEEFABADCAFE); + vm::write64(Memory.PRXMem.AllocAlign(0x10000), 0xDEADBEEFABADCAFE); /* //TODO static const int branch_size = 6 * 4; @@ -354,7 +354,10 @@ namespace loader make_branch(entry, m_ehdr.e_entry); */ - ppu_thread(m_ehdr.e_entry, "main_thread").args({ Emu.GetPath()/*, "-emu"*/ }).run(); + ppu_thread main_thread(m_ehdr.e_entry, "main_thread"); + + main_thread.args({ Emu.GetPath()/*, "-emu"*/ }).run(); + main_thread.gpr(11, m_ehdr.e_entry).gpr(12, Emu.GetMallocPageSize()); return ok; } diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 05645dd26e..d4cec623e0 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -33,15 +33,9 @@ {28902cf4-4fa6-428b-ab94-6b410fd5077f} - - {13d20086-2188-425a-9856-0440fe6f79f2} - {037247b4-0370-4193-a25d-bc9d075bf0a7} - - {93b1cff1-0158-4327-a437-e9abcac8d724} - {5a18e5b1-2632-4849-ba94-e7a2ea0b78fa} @@ -60,24 +54,33 @@ {84c34dd1-4c49-4ecf-8ee2-4165c14f24be} - - {fadb4b36-57af-4583-891d-d22ff369e266} - - - {4adca4fa-b90f-4662-9eb0-1d29cf3cd2eb} - - - {6f1da5b2-52c5-416b-9b5c-b9897bc1b300} - {fcac6852-b45f-4cf2-afee-cf56bcea14e5} {ead7494f-a872-4b4d-a864-1a61c3b6012f} - + + {13d20086-2188-425a-9856-0440fe6f79f2} + + + {93b1cff1-0158-4327-a437-e9abcac8d724} + + {1d9e6fc4-9a79-4329-a8b5-081e24822aaa} + + {6674e2ab-90cd-47de-a852-d21643ab18c2} + + + {fadb4b36-57af-4583-891d-d22ff369e266} + + + {4adca4fa-b90f-4662-9eb0-1d29cf3cd2eb} + + + {6f1da5b2-52c5-416b-9b5c-b9897bc1b300} + @@ -309,28 +312,28 @@ Emu\HDD - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell Emu\CPU @@ -339,7 +342,7 @@ Emu\CPU - Emu\ARMv7 + Emu\CPU\ARMv7 Emu\Audio @@ -555,37 +558,37 @@ Emu\SysCalls\Modules - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX Emu\SysCalls\lv2 @@ -624,31 +627,31 @@ Emu\SysCalls\Modules - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\ARMv7 + Emu\CPU\ARMv7 - Emu\ARMv7 + Emu\CPU\ARMv7 - Emu\ARMv7 + Emu\CPU\ARMv7 - Emu\ARMv7\Modules + Emu\CPU\ARMv7\Modules - Emu\ARMv7\Modules + Emu\CPU\ARMv7\Modules - Emu\ARMv7\Modules + Emu\CPU\ARMv7\Modules - Emu\ARMv7\Modules + Emu\CPU\ARMv7\Modules @@ -878,64 +881,64 @@ Emu\HDD - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell - Emu\Cell + Emu\CPU\Cell Emu\CPU @@ -953,19 +956,19 @@ Emu\CPU - Emu\ARMv7 + Emu\CPU\ARMv7 - Emu\ARMv7 + Emu\CPU\ARMv7 - Emu\ARMv7 + Emu\CPU\ARMv7 - Emu\ARMv7 + Emu\CPU\ARMv7 - Emu\ARMv7 + Emu\CPU\ARMv7 Emu\Audio @@ -1121,58 +1124,58 @@ Emu\SysCalls - Emu\RSX\Null + Emu\GPU\RSX\Null - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX\GL + Emu\GPU\RSX\GL - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX - Emu\RSX + Emu\GPU\RSX Emu\SysCalls\lv2 @@ -1253,10 +1256,10 @@ Emu\SysCalls\Modules - Emu\Cell + Emu\CPU\Cell - Emu\ARMv7 + Emu\CPU\ARMv7 \ No newline at end of file