diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index 8c5a741254..a05970e885 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -3236,7 +3236,7 @@ private: void DCBZ(u32 ra, u32 rb) { const u64 addr = ra ? CPU.GPR[ra] + CPU.GPR[rb] : CPU.GPR[rb]; - u8 *const cache_line = Memory.GetMemFromAddr(addr & ~127); + auto const cache_line = vm::get_ptr(addr & ~127); if (cache_line) memset(cache_line, 0, 128); _mm_mfence(); diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index 73bc023bea..13e94814f6 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -48,7 +48,7 @@ void SPURecompilerCore::Compile(u16 pos) u64 time0 = 0; SPUDisAsm dis_asm(CPUDisAsm_InterpreterMode); - dis_asm.offset = Memory.GetMemFromAddr(CPU.dmac.ls_offset); + dis_asm.offset = vm::get_ptr(CPU.dmac.ls_offset); StringLogger stringLogger; stringLogger.setOption(kLoggerOptionBinaryForm, true); diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 7b5ace6a67..6584aba784 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -449,7 +449,7 @@ void SPUThread::EnqMfcCmd(MFCReg& MFCArgs) for (s32 i = (s32)PC; i < (s32)PC + 4 * 7; i += 4) { dis_asm.dump_pc = i; - dis_asm.offset = Memory.GetMemFromAddr(dmac.ls_offset); + dis_asm.offset = vm::get_ptr(dmac.ls_offset); const u32 opcode = Memory.Read32(i + dmac.ls_offset); (*SPU_instr::rrr_list)(&dis_asm, opcode); if (i >= 0 && i < 0x40000) diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index ae1b8d03b0..c44dc20a4c 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -299,14 +299,14 @@ void MemoryBlock::Init() range_start = 0; range_size = 0; - mem = Memory.GetMemFromAddr(0); + mem = vm::get_ptr(0); } void MemoryBlock::InitMemory() { if (!range_size) { - mem = Memory.GetMemFromAddr(range_start); + mem = vm::get_ptr(range_start); } else { diff --git a/rpcs3/Emu/Memory/Memory.h b/rpcs3/Emu/Memory/Memory.h index 72edaa7ec8..23cc389e64 100644 --- a/rpcs3/Emu/Memory/Memory.h +++ b/rpcs3/Emu/Memory/Memory.h @@ -108,11 +108,6 @@ public: } } - template void* VirtualToRealAddr(const T vaddr) - { - return GetMemFromAddr(vaddr); - } - u32 RealToVirtualAddr(const void* addr) { const u64 res = (u64)addr - (u64)GetBaseAddr(); @@ -313,11 +308,6 @@ public: } } - //template void WriteString(const T addr, const std::string& str) - //{ - // memcpy((char*)GetMemFromAddr(addr), str.c_str(), str.size() + 1); - //} - u32 GetUserMemTotalSize() { return UserMemory->GetSize(); diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 9a80f4d0ed..eb30741f2c 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -116,7 +116,7 @@ void GLTexture::Init(RSXTexture& tex) int format = tex.GetFormat() & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN); bool is_swizzled = !(tex.GetFormat() & CELL_GCM_TEXTURE_LN); - const u8 *pixels = const_cast(Memory.GetMemFromAddr(texaddr)); + auto pixels = vm::get_ptr(texaddr); u8 *unswizzledPixels; static const GLint glRemapStandard[4] = { GL_ALPHA, GL_RED, GL_GREEN, GL_BLUE }; // NOTE: This must be in ARGB order in all forms below. @@ -2005,14 +2005,14 @@ void GLGSRender::Flip() if (m_read_buffer) { format = GL_BGRA; - CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(m_gcm_buffers_addr); + CellGcmDisplayInfo* buffers = vm::get_ptr(m_gcm_buffers_addr); u32 addr = GetAddress(buffers[m_gcm_current_buffer].offset, CELL_GCM_LOCATION_LOCAL); if (Memory.IsGoodAddr(addr)) { width = buffers[m_gcm_current_buffer].width; height = buffers[m_gcm_current_buffer].height; - src_buffer = (u8*)Memory.VirtualToRealAddr(addr); + src_buffer = vm::get_ptr(addr); } else { diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 8ae24d58ac..4a440f1630 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -84,7 +84,7 @@ void RSXVertexData::Load(u32 start, u32 count, u32 baseOffset, u32 baseIndex=0) for(u32 i=start; i(addr + baseOffset + stride * (i + baseIndex)); u8* dst = &data[i * tsize * size]; switch(tsize) @@ -1341,7 +1341,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case 2: m_surface_pitch_a = ARGS(1); } - CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(m_gcm_buffers_addr); + auto buffers = vm::get_ptr(m_gcm_buffers_addr); m_width = buffers[m_gcm_current_buffer].width; m_height = buffers[m_gcm_current_buffer].height; diff --git a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp index 0c288d07ae..1cad5040c6 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellAdec.cpp @@ -724,9 +724,9 @@ int cellAdecDecodeAu(u32 handle, vm::ptr auInfo) return CELL_OK; } -int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) +int cellAdecGetPcm(u32 handle, vm::ptr outBuffer) { - cellAdec->Log("cellAdecGetPcm(handle=%d, outBuffer_addr=0x%x)", handle, outBuffer_addr); + cellAdec->Log("cellAdecGetPcm(handle=%d, outBuffer_addr=0x%x)", handle, outBuffer.addr()); AudioDecoder* adec; if (!Emu.GetIdManager().GetIDData(handle, adec)) @@ -752,11 +752,10 @@ int cellAdecGetPcm(u32 handle, u32 outBuffer_addr) float* in_f[2]; in_f[0] = (float*)frame->extended_data[0]; in_f[1] = (float*)frame->extended_data[1]; - be_t* out_f = (be_t*)Memory.GetMemFromAddr(outBuffer_addr); for (u32 i = 0; i < af.size / 8; i++) { - out_f[i*2] = in_f[0][i]; - out_f[i*2+1] = in_f[1][i]; + outBuffer[i * 2 + 0] = in_f[0][i]; + outBuffer[i * 2 + 1] = in_f[1][i]; } if (af.data) diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp index 46761b0dc5..b44a01a5f1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.cpp @@ -276,7 +276,7 @@ void dmuxQueryAttr(u32 info_addr /* may be 0 */, vm::ptr attr) attr->memSize = 0x10000; // 0x3e8e6 from ps3 } -void dmuxQueryEsAttr(u32 info_addr /* may be 0 */, const vm::ptr esFilterId, +void dmuxQueryEsAttr(u32 info_addr /* may be 0 */, vm::ptr esFilterId, const u32 esSpecificInfo_addr, vm::ptr attr) { if (esFilterId->filterIdMajor >= 0xe0) @@ -713,7 +713,7 @@ u32 dmuxOpen(Demuxer* data) return dmux_id; } -int cellDmuxQueryAttr(const vm::ptr demuxerType, vm::ptr demuxerAttr) +int cellDmuxQueryAttr(vm::ptr demuxerType, vm::ptr demuxerAttr) { cellDmux->Warning("cellDmuxQueryAttr(demuxerType_addr=0x%x, demuxerAttr_addr=0x%x)", demuxerType.addr(), demuxerAttr.addr()); @@ -726,7 +726,7 @@ int cellDmuxQueryAttr(const vm::ptr demuxerType, vm::ptr demuxerType2, vm::ptr demuxerAttr) +int cellDmuxQueryAttr2(vm::ptr demuxerType2, vm::ptr demuxerAttr) { cellDmux->Warning("cellDmuxQueryAttr2(demuxerType2_addr=0x%x, demuxerAttr_addr=0x%x)", demuxerType2.addr(), demuxerAttr.addr()); @@ -739,8 +739,8 @@ int cellDmuxQueryAttr2(const vm::ptr demuxerType2, vm::ptr demuxerType, const vm::ptr demuxerResource, - const vm::ptr demuxerCb, vm::ptr> demuxerHandle) +int cellDmuxOpen(vm::ptr demuxerType, vm::ptr demuxerResource, + vm::ptr demuxerCb, vm::ptr> demuxerHandle) { cellDmux->Warning("cellDmuxOpen(demuxerType_addr=0x%x, demuxerResource_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType.addr(), demuxerResource.addr(), demuxerCb.addr(), demuxerHandle.addr()); @@ -757,8 +757,8 @@ int cellDmuxOpen(const vm::ptr demuxerType, const vm::ptr demuxerType, const vm::ptr demuxerResourceEx, - const vm::ptr demuxerCb, vm::ptr> demuxerHandle) +int cellDmuxOpenEx(vm::ptr demuxerType, vm::ptr demuxerResourceEx, + vm::ptr demuxerCb, vm::ptr> demuxerHandle) { cellDmux->Warning("cellDmuxOpenEx(demuxerType_addr=0x%x, demuxerResourceEx_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType.addr(), demuxerResourceEx.addr(), demuxerCb.addr(), demuxerHandle.addr()); @@ -775,8 +775,8 @@ int cellDmuxOpenEx(const vm::ptr demuxerType, const vm::ptr demuxerType2, const vm::ptr demuxerResource2, - const vm::ptr demuxerCb, vm::ptr> demuxerHandle) +int cellDmuxOpen2(vm::ptr demuxerType2, vm::ptr demuxerResource2, + vm::ptr demuxerCb, vm::ptr> demuxerHandle) { cellDmux->Warning("cellDmuxOpen2(demuxerType2_addr=0x%x, demuxerResource2_addr=0x%x, demuxerCb_addr=0x%x, demuxerHandle_addr=0x%x)", demuxerType2.addr(), demuxerResource2.addr(), demuxerCb.addr(), demuxerHandle.addr()); @@ -907,7 +907,7 @@ int cellDmuxResetStreamAndWaitDone(u32 demuxerHandle) return CELL_OK; } -int cellDmuxQueryEsAttr(const vm::ptr demuxerType, const vm::ptr esFilterId, +int cellDmuxQueryEsAttr(vm::ptr demuxerType, vm::ptr esFilterId, const u32 esSpecificInfo_addr, vm::ptr esAttr) { cellDmux->Warning("cellDmuxQueryEsAttr(demuxerType_addr=0x%x, esFilterId_addr=0x%x, esSpecificInfo_addr=0x%x, esAttr_addr=0x%x)", @@ -924,7 +924,7 @@ int cellDmuxQueryEsAttr(const vm::ptr demuxerType, const vm::ptr demuxerType2, const vm::ptr esFilterId, +int cellDmuxQueryEsAttr2(vm::ptr demuxerType2, vm::ptr esFilterId, const u32 esSpecificInfo_addr, vm::ptr esAttr) { cellDmux->Warning("cellDmuxQueryEsAttr2(demuxerType2_addr=0x%x, esFilterId_addr=0x%x, esSpecificInfo_addr=0x%x, esAttr_addr=0x%x)", @@ -941,8 +941,8 @@ int cellDmuxQueryEsAttr2(const vm::ptr demuxerType2, const vm::pt return CELL_OK; } -int cellDmuxEnableEs(u32 demuxerHandle, const vm::ptr esFilterId, - const vm::ptr esResourceInfo, const vm::ptr esCb, +int cellDmuxEnableEs(u32 demuxerHandle, vm::ptr esFilterId, + vm::ptr esResourceInfo, vm::ptr esCb, const u32 esSpecificInfo_addr, vm::ptr> esHandle) { cellDmux->Warning("cellDmuxEnableEs(demuxerHandle=%d, esFilterId_addr=0x%x, esResourceInfo_addr=0x%x, esCb_addr=0x%x, " diff --git a/rpcs3/Emu/SysCalls/Modules/cellDmux.h b/rpcs3/Emu/SysCalls/Modules/cellDmux.h index c44418ea5d..1b3fc33a1d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellDmux.h +++ b/rpcs3/Emu/SysCalls/Modules/cellDmux.h @@ -316,7 +316,7 @@ struct DemuxerStream { if (sizeof(T) > size) return false; - out = *(T*)Memory.VirtualToRealAddr(addr); + out = vm::get_ref(addr); addr += sizeof(T); size -= sizeof(T); @@ -328,7 +328,7 @@ struct DemuxerStream { if (sizeof(T) + shift > size) return false; - out = *(T*)Memory.VirtualToRealAddr(addr + shift); + out = vm::get_ref(addr + shift); return true; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp index aa2eaa7fb6..8c7e04b163 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFont.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFont.cpp @@ -78,7 +78,7 @@ int cellFontOpenFontMemory(vm::ptr library, u32 fontAddr, u32 f font->stbfont = (stbtt_fontinfo*)((u8*)&(font->stbfont) + sizeof(void*)); // hack: use next bytes of the struct - if (!stbtt_InitFont(font->stbfont, (unsigned char*)Memory.VirtualToRealAddr(fontAddr), 0)) + if (!stbtt_InitFont(font->stbfont, vm::get_ptr(fontAddr), 0)) return CELL_FONT_ERROR_FONT_OPEN_FAILED; font->renderer_addr = 0; @@ -99,7 +99,7 @@ int cellFontOpenFontFile(vm::ptr library, vm::ptr f u32 fileSize = (u32)f.GetSize(); u32 bufferAddr = (u32)Memory.Alloc(fileSize, 1); // Freed in cellFontCloseFont - f.Read(Memory.VirtualToRealAddr(bufferAddr), fileSize); + f.Read(vm::get_ptr(bufferAddr), fileSize); int ret = cellFontOpenFontMemory(library, bufferAddr, fileSize, subNum, uniqueId, font); font->origin = CELL_FONT_OPEN_FONT_FILE; return ret; @@ -345,7 +345,7 @@ int cellFontRenderCharGlyphImage(vm::ptr font, u32 code, vm::ptrbuffer_addr); + unsigned char* buffer = vm::get_ptr(surface->buffer_addr); for (u32 ypos = 0; ypos < (u32)height; ypos++){ if ((u32)y + ypos + yoff + baseLineY >= surface->height) break; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp index 401a38b827..097106036e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGame.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGame.cpp @@ -422,18 +422,11 @@ int cellGameGetLocalWebContentPath() return CELL_OK; } -int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) +int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, vm::ptr dirName) { - cellGame->Warning("cellGameContentErrorDialog(type=%d, errNeedSizeKB=%d, dirName_addr=0x%x)", type, errNeedSizeKB, dirName_addr); + cellGame->Warning("cellGameContentErrorDialog(type=%d, errNeedSizeKB=%d, dirName_addr=0x%x)", type, errNeedSizeKB, dirName.addr()); + std::string errorName; - std::string errorMsg; - char* dirName = "Unknown"; - - if (type == CELL_GAME_ERRDIALOG_NOSPACE || type == CELL_GAME_ERRDIALOG_NOSPACE_EXIT && dirName_addr) - { - dirName = (char*)Memory.VirtualToRealAddr(dirName_addr); - } - switch (type) { case CELL_GAME_ERRDIALOG_BROKEN_GAMEDATA: errorName = "Game data is corrupted (can be continued)."; break; @@ -445,15 +438,21 @@ int cellGameContentErrorDialog(s32 type, s32 errNeedSizeKB, u32 dirName_addr) default: return CELL_GAME_ERROR_PARAM; } + std::string errorMsg; if (type == CELL_GAME_ERRDIALOG_NOSPACE || type == CELL_GAME_ERRDIALOG_NOSPACE_EXIT) { - errorMsg = fmt::Format("ERROR: %s\nSpace needed: %d KB\nDirectory name: %s", errorName.c_str(), errNeedSizeKB, dirName); + errorMsg = fmt::Format("ERROR: %s\nSpace needed: %d KB", errorName.c_str(), errNeedSizeKB, dirName); } else { errorMsg = fmt::Format("ERROR: %s", errorName.c_str()); } + if (dirName) + { + errorMsg += fmt::Format("\nDirectory name: %s", dirName.get_ptr()); + } + rMessageBox(errorMsg, "Error", rICON_ERROR | rOK); return CELL_OK; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 05d2fa4cdd..8cc4bda3b9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -434,7 +434,7 @@ int cellGcmSetDisplayBuffer(u32 id, u32 offset, u32 pitch, u32 width, u32 height return CELL_EINVAL; } - CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(Emu.GetGSManager().GetRender().m_gcm_buffers_addr); + auto buffers = vm::get_ptr(Emu.GetGSManager().GetRender().m_gcm_buffers_addr); buffers[id].offset = offset; buffers[id].pitch = pitch; diff --git a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp index 891a6ad7ad..5a27fe8b47 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGifDec.cpp @@ -84,7 +84,7 @@ int cellGifDecReadHeader(u32 mainHandle, u32 subHandle, vm::ptr case se32(CELL_GIFDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, buffer.addr(), buffer.size(), nread); + cellFsRead(fd, vm::ptr::make(buffer.addr()), buffer.size(), nread); break; } @@ -109,7 +109,7 @@ int cellGifDecReadHeader(u32 mainHandle, u32 subHandle, vm::ptr return CELL_OK; } -int cellGifDecSetParameter(u32 mainHandle, u32 subHandle, const vm::ptr inParam, vm::ptr outParam) +int cellGifDecSetParameter(u32 mainHandle, u32 subHandle, vm::ptr inParam, vm::ptr outParam) { cellGifDec->Warning("cellGifDecSetParameter(mainHandle=0x%x, subHandle=0x%x, inParam_addr=0x%x, outParam_addr=0x%x)", mainHandle, subHandle, inParam.addr(), outParam.addr()); @@ -139,7 +139,7 @@ int cellGifDecSetParameter(u32 mainHandle, u32 subHandle, const vm::ptr data, const vm::ptr dataCtrlParam, vm::ptr dataOutInfo) +int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, vm::ptr dataCtrlParam, vm::ptr dataOutInfo) { cellGifDec->Warning("cellGifDecDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x)", mainHandle, subHandle, data.addr(), dataCtrlParam.addr(), dataOutInfo.addr()); @@ -166,7 +166,7 @@ int cellGifDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, const case se32(CELL_GIFDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, gif.addr(), gif.size(), nread); + cellFsRead(fd, vm::ptr::make(gif.addr()), gif.size(), nread); break; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp index 20d85a8171..367007c33d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellJpgDec.cpp @@ -104,7 +104,7 @@ int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, vm::ptr case se32(CELL_JPGDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, buffer.addr(), buffer.size(), nread); + cellFsRead(fd, vm::ptr::make(buffer.addr()), buffer.size(), nread); break; } @@ -147,7 +147,7 @@ int cellJpgDecReadHeader(u32 mainHandle, u32 subHandle, vm::ptr return CELL_OK; } -int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, const vm::ptr dataCtrlParam, vm::ptr dataOutInfo) +int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, vm::ptr dataCtrlParam, vm::ptr dataOutInfo) { cellJpgDec->Log("cellJpgDecDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x)", mainHandle, subHandle, data.addr(), dataCtrlParam.addr(), dataOutInfo.addr()); @@ -173,7 +173,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, const case se32(CELL_JPGDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, jpg.addr(), jpg.size(), nread); + cellFsRead(fd, vm::ptr::make(jpg.addr()), jpg.size(), nread); break; } @@ -278,7 +278,7 @@ int cellJpgDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, const return CELL_OK; } -int cellJpgDecSetParameter(u32 mainHandle, u32 subHandle, const vm::ptr inParam, vm::ptr outParam) +int cellJpgDecSetParameter(u32 mainHandle, u32 subHandle, vm::ptr inParam, vm::ptr outParam) { cellJpgDec->Log("cellJpgDecSetParameter(mainHandle=0x%x, subHandle=0x%x, inParam_addr=0x%x, outParam_addr=0x%x)", mainHandle, subHandle, inParam.addr(), outParam.addr()); diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 361768451b..ca395e5875 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -77,7 +77,7 @@ int pamfStreamTypeToEsFilterId(u8 type, u8 ch, vm::ptr pEsF u8 pamfGetStreamType(vm::ptr pSelf, u8 stream) { //TODO: get stream type correctly - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); switch (pAddr->stream_headers[stream].type) { @@ -94,7 +94,7 @@ u8 pamfGetStreamType(vm::ptr pSelf, u8 stream) u8 pamfGetStreamChannel(vm::ptr pSelf, u8 stream) { //TODO: get stream channel correctly - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); switch (pAddr->stream_headers[stream].type) { @@ -169,7 +169,7 @@ int cellPamfVerify(vm::ptr pAddr, u64 fileSize) return CELL_OK; } -int cellPamfReaderInitialize(vm::ptr pSelf, vm::ptr pAddr, u64 fileSize, u32 attribute) +int cellPamfReaderInitialize(vm::ptr pSelf, vm::ptr pAddr, u64 fileSize, u32 attribute) { cellPamf->Warning("cellPamfReaderInitialize(pSelf=0x%x, pAddr=0x%x, fileSize=%d, attribute=0x%x)", pSelf.addr(), pAddr.addr(), fileSize, attribute); @@ -181,7 +181,7 @@ int cellPamfReaderInitialize(vm::ptr pSelf, vm::ptr { pSelf->fileSize = ((u64)pAddr->data_offset << 11) + ((u64)pAddr->data_size << 11); } - pSelf->pAddr = vm::ptr::make(pAddr.addr()); + pSelf->pAddr = pAddr; if (attribute & CELL_PAMF_ATTRIBUTE_VERIFY_ON) { @@ -196,7 +196,7 @@ int cellPamfReaderGetPresentationStartTime(vm::ptr pSelf, vm::pt { cellPamf->Warning("cellPamfReaderGetPresentationStartTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.addr(), pTimeStamp.addr()); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); const u32 upper = (u16)pAddr->start_pts_high; pTimeStamp->upper = upper; pTimeStamp->lower = pAddr->start_pts_low; @@ -207,7 +207,7 @@ int cellPamfReaderGetPresentationEndTime(vm::ptr pSelf, vm::ptr< { cellPamf->Warning("cellPamfReaderGetPresentationEndTime(pSelf=0x%x, pTimeStamp_addr=0x%x)", pSelf.addr(), pTimeStamp.addr()); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); const u32 upper = (u16)pAddr->end_pts_high; pTimeStamp->upper = upper; pTimeStamp->lower = pAddr->end_pts_low; @@ -218,7 +218,7 @@ int cellPamfReaderGetMuxRateBound(vm::ptr pSelf) { cellPamf->Warning("cellPamfReaderGetMuxRateBound(pSelf=0x%x)", pSelf.addr()); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); return pAddr->mux_rate_max; } @@ -226,7 +226,7 @@ int cellPamfReaderGetNumberOfStreams(vm::ptr pSelf) { cellPamf->Warning("cellPamfReaderGetNumberOfStreams(pSelf=0x%x)", pSelf.addr()); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); return pAddr->stream_count; } @@ -234,7 +234,7 @@ int cellPamfReaderGetNumberOfSpecificStreams(vm::ptr pSelf, u8 s { cellPamf->Warning("cellPamfReaderGetNumberOfSpecificStreams(pSelf=0x%x, streamType=%d)", pSelf.addr(), streamType); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); int counts[6] = {0, 0, 0, 0, 0, 0}; @@ -265,7 +265,7 @@ int cellPamfReaderSetStreamWithIndex(vm::ptr pSelf, u8 streamInd { cellPamf->Warning("cellPamfReaderSetStreamWithIndex(pSelf=0x%x, streamIndex=%d)", pSelf.addr(), streamIndex); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); if (streamIndex < pAddr->stream_count) { @@ -283,7 +283,7 @@ int cellPamfReaderSetStreamWithTypeAndChannel(vm::ptr pSelf, u8 { cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndChannel(pSelf=0x%x, streamType=%d, ch=%d)", pSelf.addr(), streamType, ch); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); if (streamType > 5) { @@ -311,7 +311,7 @@ int cellPamfReaderSetStreamWithTypeAndIndex(vm::ptr pSelf, u8 st { cellPamf->Warning("cellPamfReaderSetStreamWithTypeAndIndex(pSelf=0x%x, streamType=%d, streamIndex=%d)", pSelf.addr(), streamType, streamIndex); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); u32 found = 0; @@ -390,7 +390,7 @@ int cellPamfReaderGetStreamInfo(vm::ptr pSelf, u32 pInfo_addr, u { cellPamf->Warning("cellPamfReaderGetStreamInfo(pSelf=0x%x, stream=%d, pInfo_addr=0x%x, size=%d)", pSelf.addr(), pSelf->stream, pInfo_addr, size); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); memset(Memory + pInfo_addr, 0, size); @@ -497,7 +497,7 @@ int cellPamfReaderGetNumberOfEp(vm::ptr pSelf) { cellPamf->Warning("cellPamfReaderGetNumberOfEp(pSelf=0x%x, stream=%d)", pSelf.addr(), pSelf->stream); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); return pAddr->stream_headers[pSelf->stream].ep_num; } @@ -505,7 +505,7 @@ int cellPamfReaderGetEpIteratorWithIndex(vm::ptr pSelf, u32 epIn { cellPamf->Todo("cellPamfReaderGetEpIteratorWithIndex(pSelf=0x%x, stream=%d, epIndex=%d, pIt_addr=0x%x)", pSelf.addr(), pSelf->stream, epIndex, pIt.addr()); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); //TODO: return CELL_OK; } @@ -514,7 +514,7 @@ int cellPamfReaderGetEpIteratorWithTimeStamp(vm::ptr pSelf, vm:: { cellPamf->Todo("cellPamfReaderGetEpIteratorWithTimeStamp(pSelf=0x%x, pTimeStamp_addr=0x%x, pIt_addr=0x%x)", pSelf.addr(), pTimeStamp.addr(), pIt.addr()); - const vm::ptr pAddr(pSelf->pAddr); + vm::ptr pAddr(pSelf->pAddr); //TODO: diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.h b/rpcs3/Emu/SysCalls/Modules/cellPamf.h index 468d735ed9..639b02b662 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.h +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.h @@ -330,7 +330,7 @@ struct CellPamfReader { //this struct can be used in any way, if it is not accessed directly by virtual CPU //be_t internalData[16]; - vm::ptr pAddr; + vm::ptr pAddr; int stream; u64 fileSize; u32 internalData[28]; diff --git a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp index 9020bcd724..d166a36b45 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPngDec.cpp @@ -144,7 +144,7 @@ int cellPngDecReadHeader(u32 mainHandle, u32 subHandle, vm::ptr break; case se32(CELL_PNGDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, buffer.addr(), buffer.size(), nread); + cellFsRead(fd, vm::ptr::make(buffer.addr()), buffer.size(), nread); break; } @@ -184,7 +184,7 @@ int cellPngDecExtReadHeader(u32 mainHandle, u32 subHandle, vm::ptr data, const vm::ptr dataCtrlParam, vm::ptr dataOutInfo) +int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, vm::ptr dataCtrlParam, vm::ptr dataOutInfo) { cellPngDec->Warning("cellPngDecDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x)", mainHandle, subHandle, data.addr(), dataCtrlParam.addr(), dataOutInfo.addr()); @@ -210,7 +210,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, const case se32(CELL_PNGDEC_FILE): cellFsLseek(fd, 0, CELL_SEEK_SET, pos); - cellFsRead(fd, png.addr(), png.size(), nread); + cellFsRead(fd, vm::ptr::make(png.addr()), png.size(), nread); break; } @@ -308,7 +308,7 @@ int cellPngDecDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, const return CELL_OK; } -int cellPngDecExtDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, const vm::ptr dataCtrlParam, +int cellPngDecExtDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, vm::ptr dataCtrlParam, vm::ptr dataOutInfo, vm::ptr cbCtrlDisp, vm::ptr dispParam) { cellPngDec->Warning("cellPngDecExtDecodeData(mainHandle=0x%x, subHandle=0x%x, data_addr=0x%x, dataCtrlParam_addr=0x%x, dataOutInfo_addr=0x%x, cbCtrlDisp_addr=0x%x, dispParam=0x%x)", @@ -319,7 +319,7 @@ int cellPngDecExtDecodeData(u32 mainHandle, u32 subHandle, vm::ptr data, con return cellPngDecDecodeData(mainHandle, subHandle, data, dataCtrlParam, dataOutInfo); } -int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, const vm::ptr inParam, vm::ptr outParam) +int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, vm::ptr inParam, vm::ptr outParam) { cellPngDec->Warning("cellPngDecSetParameter(mainHandle=0x%x, subHandle=0x%x, inParam_addr=0x%x, outParam_addr=0x%x)", mainHandle, subHandle, inParam.addr(), outParam.addr()); @@ -360,7 +360,7 @@ int cellPngDecSetParameter(u32 mainHandle, u32 subHandle, const vm::ptr inParam, vm::ptr outParam, +int cellPngDecExtSetParameter(u32 mainHandle, u32 subHandle, vm::ptr inParam, vm::ptr outParam, vm::ptr extInParam, vm::ptr extOutParam) { cellPngDec->Warning("cellPngDecExtSetParameter(mainHandle=0x%x, subHandle=0x%x, inParam_addr=0x%x, outParam_addr=0x%x, extInParam=0x%x, extOutParam=0x%x", diff --git a/rpcs3/Emu/SysCalls/Modules/cellSaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSaveData.cpp index 15e029dad8..ee812c6151 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSaveData.cpp @@ -326,7 +326,7 @@ int cellSaveDataListSave2(u32 version, vm::ptr setList, vm: // Sort the entries and fill the listGet->dirList array std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList = vm::bptr::make(setBuf->buf.addr()); - CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.addr()); + auto dirList = vm::get_ptr(listGet->dirList.addr()); for (u32 i=0; i setList, vm: // Sort the entries and fill the listGet->dirList array std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList = vm::bptr::make(setBuf->buf.addr()); - CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.addr()); + auto dirList = vm::get_ptr(listGet->dirList.addr()); for (u32 i=0; i setList, v // Sort the entries and fill the listGet->dirList array std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList = vm::bptr::make(setBuf->buf.addr()); - CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.addr()); + auto dirList = vm::get_ptr(listGet->dirList.addr()); for (u32 i = 0; i setList, v // Sort the entries and fill the listGet->dirList array std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList = vm::bptr::make(setBuf->buf.addr()); - CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.addr()); + auto dirList = vm::get_ptr(listGet->dirList.addr()); for (u32 i = 0; idirList array std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList = vm::bptr::make(setBuf->buf.addr()); - CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.addr()); + auto dirList = vm::get_ptr(listGet->dirList.addr()); for (u32 i = 0; idirList array std::sort(saveEntries.begin(), saveEntries.end(), sortSaveDataEntry(setList->sortType, setList->sortOrder)); listGet->dirList = vm::bptr::make(setBuf->buf.addr()); - CellSaveDataDirList* dirList = (CellSaveDataDirList*)Memory.VirtualToRealAddr(listGet->dirList.addr()); + auto dirList = vm::get_ptr(listGet->dirList.addr()); for (u32 i = 0; i spurs) #endif } -s64 cellSpursInitializeWithAttribute(vm::ptr spurs, const vm::ptr attr) +s64 cellSpursInitializeWithAttribute(vm::ptr spurs, vm::ptr attr) { cellSpurs->Warning("cellSpursInitializeWithAttribute(spurs_addr=0x%x, spurs_addr=0x%x)", spurs.addr(), attr.addr()); @@ -54,7 +54,7 @@ s64 cellSpursInitializeWithAttribute(vm::ptr spurs, const vm::ptr spurs, const vm::ptr attr) +s64 cellSpursInitializeWithAttribute2(vm::ptr spurs, vm::ptr attr) { cellSpurs->Warning("cellSpursInitializeWithAttribute2(spurs_addr=0x%x, spurs_addr=0x%x)", spurs.addr(), attr.addr()); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp index de92a27157..9153af791c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSysutil.cpp @@ -787,7 +787,7 @@ int cellSysutilGetBgmPlaybackStatus2(vm::ptr stat return CELL_OK; } -int cellWebBrowserEstimate2(const vm::ptr _config, vm::ptr> memSize) +int cellWebBrowserEstimate2(vm::ptr _config, vm::ptr> memSize) { cellSysutil->Warning("cellWebBrowserEstimate2(config_addr=0x%x, memSize_addr=0x%x)", _config.addr(), memSize.addr()); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp index ebecbca4b8..786e2a03f1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVdec.cpp @@ -482,21 +482,21 @@ u32 vdecOpen(VideoDecoder* data) return vdec_id; } -int cellVdecQueryAttr(const vm::ptr type, vm::ptr attr) +int cellVdecQueryAttr(vm::ptr type, vm::ptr attr) { cellVdec->Warning("cellVdecQueryAttr(type_addr=0x%x, attr_addr=0x%x)", type.addr(), attr.addr()); return vdecQueryAttr(type->codecType, type->profileLevel, 0, attr); } -int cellVdecQueryAttrEx(const vm::ptr type, vm::ptr attr) +int cellVdecQueryAttrEx(vm::ptr type, vm::ptr attr) { cellVdec->Warning("cellVdecQueryAttrEx(type_addr=0x%x, attr_addr=0x%x)", type.addr(), attr.addr()); return vdecQueryAttr(type->codecType, type->profileLevel, type->codecSpecificInfo_addr, attr); } -int cellVdecOpen(const vm::ptr type, const vm::ptr res, const vm::ptr cb, vm::ptr> handle) +int cellVdecOpen(vm::ptr type, vm::ptr res, vm::ptr cb, vm::ptr> handle) { cellVdec->Warning("cellVdecOpen(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.addr(), res.addr(), cb.addr(), handle.addr()); @@ -506,7 +506,7 @@ int cellVdecOpen(const vm::ptr type, const vm::ptr type, const vm::ptr res, const vm::ptr cb, vm::ptr> handle) +int cellVdecOpenEx(vm::ptr type, vm::ptr res, vm::ptr cb, vm::ptr> handle) { cellVdec->Warning("cellVdecOpenEx(type_addr=0x%x, res_addr=0x%x, cb_addr=0x%x, handle_addr=0x%x)", type.addr(), res.addr(), cb.addr(), handle.addr()); @@ -593,7 +593,7 @@ int cellVdecEndSeq(u32 handle) return CELL_OK; } -int cellVdecDecodeAu(u32 handle, CellVdecDecodeMode mode, const vm::ptr auInfo) +int cellVdecDecodeAu(u32 handle, CellVdecDecodeMode mode, vm::ptr auInfo) { cellVdec->Log("cellVdecDecodeAu(handle=%d, mode=0x%x, auInfo_addr=0x%x)", handle, mode, auInfo.addr()); @@ -617,9 +617,9 @@ int cellVdecDecodeAu(u32 handle, CellVdecDecodeMode mode, const vm::ptr format, u32 out_addr) +int cellVdecGetPicture(u32 handle, vm::ptr format, vm::ptr outBuff) { - cellVdec->Log("cellVdecGetPicture(handle=%d, format_addr=0x%x, out_addr=0x%x)", handle, format.addr(), out_addr); + cellVdec->Log("cellVdecGetPicture(handle=%d, format_addr=0x%x, outBuff_addr=0x%x)", handle, format.addr(), outBuff.addr()); VideoDecoder* vdec; if (!Emu.GetIdManager().GetIDData(handle, vdec)) @@ -632,7 +632,7 @@ int cellVdecGetPicture(u32 handle, const vm::ptr format, u32 return CELL_VDEC_ERROR_EMPTY; } - if (out_addr) + if (outBuff) { u32 buf_size = a128(av_image_get_buffer_size(vdec->ctx->pix_fmt, vdec->ctx->width, vdec->ctx->height, 1)); @@ -656,7 +656,7 @@ int cellVdecGetPicture(u32 handle, const vm::ptr format, u32 // TODO: zero padding bytes - int err = av_image_copy_to_buffer(Memory.GetMemFromAddr(out_addr), buf_size, frame.data, frame.linesize, vdec->ctx->pix_fmt, frame.width, frame.height, 1); + int err = av_image_copy_to_buffer(outBuff.get_ptr(), buf_size, frame.data, frame.linesize, vdec->ctx->pix_fmt, frame.width, frame.height, 1); if (err < 0) { cellVdec->Error("cellVdecGetPicture: av_image_copy_to_buffer failed(%d)", err); diff --git a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp index 8f0f800198..16ee6c464a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellVpost.cpp @@ -14,7 +14,7 @@ extern "C" //Module cellVpost(0x0008, cellVpost_init); Module *cellVpost = nullptr; -int cellVpostQueryAttr(const vm::ptr cfgParam, vm::ptr attr) +int cellVpostQueryAttr(vm::ptr cfgParam, vm::ptr attr) { cellVpost->Warning("cellVpostQueryAttr(cfgParam_addr=0x%x, attr_addr=0x%x)", cfgParam.addr(), attr.addr()); @@ -37,7 +37,7 @@ u32 vpostOpen(VpostInstance* data) return id; } -int cellVpostOpen(const vm::ptr cfgParam, const vm::ptr resource, vm::ptr> handle) +int cellVpostOpen(vm::ptr cfgParam, vm::ptr resource, vm::ptr> handle) { cellVpost->Warning("cellVpostOpen(cfgParam_addr=0x%x, resource_addr=0x%x, handle_addr=0x%x)", cfgParam.addr(), resource.addr(), handle.addr()); @@ -47,7 +47,7 @@ int cellVpostOpen(const vm::ptr cfgParam, const vm::ptr cfgParam, const vm::ptr resource, vm::ptr> handle) +int cellVpostOpenEx(vm::ptr cfgParam, vm::ptr resource, vm::ptr> handle) { cellVpost->Warning("cellVpostOpenEx(cfgParam_addr=0x%x, resource_addr=0x%x, handle_addr=0x%x)", cfgParam.addr(), resource.addr(), handle.addr()); @@ -71,11 +71,11 @@ int cellVpostClose(u32 handle) return CELL_OK; } -int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const vm::ptr ctrlParam, - u32 outPicBuff_addr, vm::ptr picInfo) +int cellVpostExec(u32 handle, vm::ptr inPicBuff, vm::ptr ctrlParam, + vm::ptr outPicBuff, vm::ptr picInfo) { cellVpost->Log("cellVpostExec(handle=0x%x, inPicBuff_addr=0x%x, ctrlParam_addr=0x%x, outPicBuff_addr=0x%x, picInfo_addr=0x%x)", - handle, inPicBuff_addr, ctrlParam.addr(), outPicBuff_addr, picInfo.addr()); + handle, inPicBuff.addr(), ctrlParam.addr(), outPicBuff.addr(), picInfo.addr()); VpostInstance* vpost; if (!Emu.GetIdManager().GetIDData(handle, vpost)) @@ -137,9 +137,9 @@ int cellVpostExec(u32 handle, const u32 inPicBuff_addr, const vm::ptr(ow*4), 0, 0, 0 }; sws_scale(sws, in_data, in_line, 0, h, out_data, out_line); diff --git a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp index c41e29b132..e54018c29b 100644 --- a/rpcs3/Emu/SysCalls/Modules/libmixer.cpp +++ b/rpcs3/Emu/SysCalls/Modules/libmixer.cpp @@ -295,7 +295,7 @@ int cellSSPlayerGetState(u32 handle) return CELL_SSPLAYER_STATE_OFF; } -int cellSurMixerCreate(const vm::ptr config) +int cellSurMixerCreate(vm::ptr config) { libmixer->Warning("cellSurMixerCreate(config_addr=0x%x)", config.addr()); diff --git a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp index 326eac215f..28d4407706 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_fs.cpp @@ -161,34 +161,40 @@ void fsAioRead(u32 fd, vm::ptr aio, int xid, vm::ptrCheckId(fd, orig_file)) return; - - u64 nbytes = aio->size; - u32 buf_addr = aio->buf_addr; - u32 error = CELL_OK; - - vfsStream& file = *(vfsStream*)orig_file; - const u64 old_pos = file.Tell(); - file.Seek((u64)aio->offset); - - // TODO: use code from cellFsRead or something - u64 res = 0; - if (nbytes != (u32)nbytes) { - error = CELL_ENOMEM; - } - else - { - res = nbytes ? file.Read(Memory.GetMemFromAddr(buf_addr), nbytes) : 0; - } + LV2_LOCK(0); - file.Seek(old_pos); + vfsFileBase* orig_file; + if (!sys_fs->CheckId(fd, orig_file)) + { + sys_fs->Error("Wrong fd (%s)", fd); + Emu.Pause(); + return; + } - sys_fs->Log("*** fsAioRead(fd=%d, offset=0x%llx, buf_addr=0x%x, size=0x%x, error=0x%x, res=0x%x, xid=0x%x [%s])", - fd, (u64)aio->offset, buf_addr, (u64)aio->size, error, res, xid, orig_file->GetPath().c_str()); + u64 nbytes = aio->size; + + vfsStream& file = *(vfsStream*)orig_file; + const u64 old_pos = file.Tell(); + file.Seek((u64)aio->offset); + + // TODO: use code from cellFsRead or something + if (nbytes != (u32)nbytes) + { + error = CELL_ENOMEM; + } + else + { + res = nbytes ? file.Read(aio->buf.get_ptr(), nbytes) : 0; + } + + file.Seek(old_pos); + + sys_fs->Log("*** fsAioRead(fd=%d, offset=0x%llx, buf_addr=0x%x, size=0x%x, error=0x%x, res=0x%x, xid=0x%x [%s])", + fd, (u64)aio->offset, aio->buf.addr(), (u64)aio->size, error, res, xid, orig_file->GetPath().c_str()); + } if (func) // start callback thread { @@ -202,6 +208,8 @@ int cellFsAioRead(vm::ptr aio, vm::ptr> aio_id, vm::ptrWarning("cellFsAioRead(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.addr(), aio_id.addr(), func.addr()); + LV2_LOCK(0); + if (!aio_init) { return CELL_ENXIO; @@ -231,6 +239,8 @@ int cellFsAioWrite(vm::ptr aio, vm::ptr> aio_id, vm::ptrTodo("cellFsAioWrite(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.addr(), aio_id.addr(), func.addr()); + LV2_LOCK(0); + // TODO: return CELL_OK; @@ -239,6 +249,9 @@ int cellFsAioWrite(vm::ptr aio, vm::ptr> aio_id, vm::ptr mount_point) { sys_fs->Warning("cellFsAioInit(mount_point_addr=0x%x (%s))", mount_point.addr(), mount_point.get_ptr()); + + LV2_LOCK(0); + aio_init = true; return CELL_OK; } @@ -246,14 +259,19 @@ int cellFsAioInit(vm::ptr mount_point) int cellFsAioFinish(vm::ptr mount_point) { sys_fs->Warning("cellFsAioFinish(mount_point_addr=0x%x (%s))", mount_point.addr(), mount_point.get_ptr()); + + LV2_LOCK(0); + aio_init = false; return CELL_OK; } -int cellFsReadWithOffset(u32 fd, u64 offset, u32 buf_addr, u64 buffer_size, vm::ptr> nread) +int cellFsReadWithOffset(u32 fd, u64 offset, vm::ptr buf, u64 buffer_size, vm::ptr> nread) { sys_fs->Warning("cellFsReadWithOffset(fd=%d, offset=0x%llx, buf_addr=0x%x, buffer_size=%lld nread=0x%llx)", - fd, offset, buf_addr, buffer_size, nread.addr()); + fd, offset, buf.addr(), buffer_size, nread.addr()); + + LV2_LOCK(0); int ret; vm::var> oldPos, newPos; @@ -261,7 +279,7 @@ int cellFsReadWithOffset(u32 fd, u64 offset, u32 buf_addr, u64 buffer_size, vm:: if (ret) return ret; ret = cellFsLseek(fd, offset, CELL_SEEK_SET, newPos); // Move to the specified offset if (ret) return ret; - ret = cellFsRead(fd, buf_addr, buffer_size, nread); // Read the file + ret = cellFsRead(fd, buf, buffer_size, nread); // Read the file if (ret) return ret; ret = cellFsLseek(fd, oldPos.value(), CELL_SEEK_SET, newPos); // Return to the old position if (ret) return ret; @@ -316,5 +334,7 @@ void sys_fs_init() void sys_fs_load() { + g_FsAioReadID = 0; + g_FsAioReadCur = 0; aio_init = false; } diff --git a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp index 770c7ffdf4..133592d26b 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_net.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_net.cpp @@ -94,7 +94,7 @@ using pck_len_t = u32; #endif // Functions -int sys_net_accept(s32 s, vm::ptr addr, vm::ptr> paddrlen) +int sys_net_accept(s32 s, vm::ptr addr, vm::ptr paddrlen) { sys_net->Warning("accept(s=%d, family_addr=0x%x, paddrlen=0x%x)", s, addr.addr(), paddrlen.addr()); if (!addr) { @@ -106,8 +106,9 @@ int sys_net_accept(s32 s, vm::ptr addr, vm::ptr> pad sockaddr _addr; memcpy(&_addr, addr.get_ptr(), sizeof(sockaddr)); _addr.sa_family = addr->sa_family; - pck_len_t *_paddrlen = (pck_len_t *)Memory.VirtualToRealAddr(paddrlen.addr()); - int ret = accept(s, &_addr, _paddrlen); + pck_len_t _paddrlen; + int ret = accept(s, &_addr, &_paddrlen); + *paddrlen = _paddrlen; *g_lastError = getLastError(); return ret; } @@ -217,12 +218,11 @@ int inet_ntop() return CELL_OK; } -int sys_net_inet_pton(s32 af, u32 src_addr, u32 dst_addr) +int sys_net_inet_pton(s32 af, vm::ptr src, vm::ptr dst) { - sys_net->Warning("inet_pton(af=%d, src_addr=0x%x, dst_addr=0x%x)", af, src_addr, dst_addr); - char *src = (char *)Memory.VirtualToRealAddr(src_addr); - char *dst = (char *)Memory.VirtualToRealAddr(dst_addr); - return inet_pton(af, src, dst); + sys_net->Warning("inet_pton(af=%d, src_addr=0x%x, dst_addr=0x%x)", af, src.addr(), dst.addr()); + + return inet_pton(af, src.get_ptr(), dst.get_ptr()); } int sys_net_listen(s32 s, s32 backlog) @@ -233,26 +233,26 @@ int sys_net_listen(s32 s, s32 backlog) return ret; } -int sys_net_recv(s32 s, u32 buf_addr, u32 len, s32 flags) +int sys_net_recv(s32 s, vm::ptr buf, u32 len, s32 flags) { - sys_net->Warning("recv(s=%d, buf_addr=0x%x, len=%d, flags=0x%x)", s, buf_addr, len, flags); - char *buf = (char *)Memory.VirtualToRealAddr(buf_addr); - int ret = recv(s, buf, len, flags); + sys_net->Warning("recv(s=%d, buf_addr=0x%x, len=%d, flags=0x%x)", s, buf.addr(), len, flags); + + int ret = recv(s, buf.get_ptr(), len, flags); *g_lastError = getLastError(); return ret; } -int sys_net_recvfrom(s32 s, u32 buf_addr, u32 len, s32 flags, vm::ptr addr, vm::ptr> paddrlen) +int sys_net_recvfrom(s32 s, vm::ptr buf, u32 len, s32 flags, vm::ptr addr, vm::ptr paddrlen) { sys_net->Warning("recvfrom(s=%d, buf_addr=0x%x, len=%u, flags=0x%x, addr_addr=0x%x, paddrlen=0x%x)", - s, buf_addr, len, flags, addr.addr(), paddrlen.addr()); + s, buf.addr(), len, flags, addr.addr(), paddrlen.addr()); - char *_buf_addr = (char *)Memory.VirtualToRealAddr(buf_addr); sockaddr _addr; memcpy(&_addr, addr.get_ptr(), sizeof(sockaddr)); _addr.sa_family = addr->sa_family; - pck_len_t *_paddrlen = (pck_len_t *) Memory.VirtualToRealAddr(paddrlen.addr()); - int ret = recvfrom(s, _buf_addr, len, flags, &_addr, _paddrlen); + pck_len_t _paddrlen; + int ret = recvfrom(s, buf.get_ptr(), len, flags, &_addr, &_paddrlen); + *paddrlen = _paddrlen; *g_lastError = getLastError(); return ret; } @@ -263,11 +263,11 @@ int recvmsg() return CELL_OK; } -int sys_net_send(s32 s, u32 buf_addr, u32 len, s32 flags) +int sys_net_send(s32 s, vm::ptr buf, u32 len, s32 flags) { - sys_net->Warning("send(s=%d, buf_addr=0x%x, len=%d, flags=0x%x)", s, buf_addr, len, flags); - char *buf = (char *)Memory.VirtualToRealAddr(buf_addr); - int ret = send(s, buf, len, flags); + sys_net->Warning("send(s=%d, buf_addr=0x%x, len=%d, flags=0x%x)", s, buf.addr(), len, flags); + + int ret = send(s, buf.get_ptr(), len, flags); *g_lastError = getLastError(); return ret; } @@ -278,25 +278,24 @@ int sendmsg() return CELL_OK; } -int sys_net_sendto(s32 s, u32 buf_addr, u32 len, s32 flags, vm::ptr addr, u32 addrlen) +int sys_net_sendto(s32 s, vm::ptr buf, u32 len, s32 flags, vm::ptr addr, u32 addrlen) { sys_net->Warning("sendto(s=%d, buf_addr=0x%x, len=%u, flags=0x%x, addr=0x%x, addrlen=%u)", - s, buf_addr, len, flags, addr.addr(), addrlen); + s, buf.addr(), len, flags, addr.addr(), addrlen); - char *_buf_addr = (char *)Memory.VirtualToRealAddr(buf_addr); sockaddr _addr; memcpy(&_addr, addr.get_ptr(), sizeof(sockaddr)); _addr.sa_family = addr->sa_family; - int ret = sendto(s, _buf_addr, len, flags, &_addr, addrlen); + int ret = sendto(s, buf.get_ptr(), len, flags, &_addr, addrlen); *g_lastError = getLastError(); return ret; } -int sys_net_setsockopt(s32 s, s32 level, s32 optname, u32 optval_addr, u32 optlen) +int sys_net_setsockopt(s32 s, s32 level, s32 optname, vm::ptr optval, u32 optlen) { - sys_net->Warning("socket(s=%d, level=%d, optname=%d, optval_addr=0x%x, optlen=%u)", s, level, optname, optval_addr, optlen); - char *_optval_addr = (char *)Memory.VirtualToRealAddr(optval_addr); - int ret = setsockopt(s, level, optname, _optval_addr, optlen); + sys_net->Warning("socket(s=%d, level=%d, optname=%d, optval_addr=0x%x, optlen=%u)", s, level, optname, optval.addr(), optlen); + + int ret = setsockopt(s, level, optname, optval.get_ptr(), optlen); *g_lastError = getLastError(); return ret; } diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp index 02b191a821..94e784b60e 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.cpp @@ -37,6 +37,8 @@ s32 cellFsOpen(vm::ptr path, s32 flags, vm::ptr> fd, vm::p const std::string _path = path.get_ptr(); + LV2_LOCK(0); + s32 _oflags = flags; if(flags & CELL_O_CREAT) { @@ -114,10 +116,13 @@ s32 cellFsOpen(vm::ptr path, s32 flags, vm::ptr> fd, vm::p return CELL_OK; } -s32 cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, vm::ptr> nread) +s32 cellFsRead(u32 fd, vm::ptr buf, u64 nbytes, vm::ptr> nread) { sys_fs->Log("cellFsRead(fd=%d, buf_addr=0x%x, nbytes=0x%llx, nread_addr=0x%x)", - fd, buf_addr, nbytes, nread.addr()); + fd, buf.addr(), nbytes, nread.addr()); + + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -125,17 +130,20 @@ s32 cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, vm::ptr> nread) // TODO: checks - const u64 res = nbytes ? file->Read(Memory.GetMemFromAddr(buf_addr), nbytes) : 0; + const u64 res = nbytes ? file->Read(buf.get_ptr(), nbytes) : 0; if (nread) *nread = res; return CELL_OK; } -s32 cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, vm::ptr> nwrite) +s32 cellFsWrite(u32 fd, vm::ptr buf, u64 nbytes, vm::ptr> nwrite) { sys_fs->Log("cellFsWrite(fd=%d, buf_addr=0x%x, nbytes=0x%llx, nwrite_addr=0x%x)", - fd, buf_addr, nbytes, nwrite.addr()); + fd, buf.addr(), nbytes, nwrite.addr()); + + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -143,7 +151,7 @@ s32 cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, vm::ptr> nwrite) // TODO: checks - const u64 res = nbytes ? file->Write(Memory.GetMemFromAddr(buf_addr), nbytes) : 0; + const u64 res = nbytes ? file->Write(buf.get_ptr(), nbytes) : 0; if (nwrite) *nwrite = res; @@ -154,6 +162,8 @@ s32 cellFsClose(u32 fd) { sys_fs->Warning("cellFsClose(fd=%d)", fd); + LV2_LOCK(0); + if(!Emu.GetIdManager().RemoveID(fd)) return CELL_ESRCH; @@ -163,6 +173,8 @@ s32 cellFsClose(u32 fd) s32 cellFsOpendir(vm::ptr path, vm::ptr> fd) { sys_fs->Warning("cellFsOpendir(path=\"%s\", fd_addr=0x%x)", path.get_ptr(), fd.addr()); + + LV2_LOCK(0); vfsDirBase* dir = Emu.GetVFS().OpenDir(path.get_ptr()); if(!dir || !dir->IsOpened()) @@ -179,6 +191,8 @@ s32 cellFsReaddir(u32 fd, vm::ptr dir, vm::ptr> nread) { sys_fs->Warning("cellFsReaddir(fd=%d, dir_addr=0x%x, nread_addr=0x%x)", fd, dir.addr(), nread.addr()); + LV2_LOCK(0); + vfsDirBase* directory; if(!sys_fs->CheckId(fd, directory)) return CELL_ESRCH; @@ -203,6 +217,8 @@ s32 cellFsClosedir(u32 fd) { sys_fs->Warning("cellFsClosedir(fd=%d)", fd); + LV2_LOCK(0); + if(!Emu.GetIdManager().RemoveID(fd)) return CELL_ESRCH; @@ -213,6 +229,8 @@ s32 cellFsStat(vm::ptr path, vm::ptr sb) { sys_fs->Warning("cellFsStat(path=\"%s\", sb_addr: 0x%x)", path.get_ptr(), sb.addr()); + LV2_LOCK(0); + const std::string _path = path.get_ptr(); sb->st_mode = @@ -254,6 +272,8 @@ s32 cellFsFstat(u32 fd, vm::ptr sb) { sys_fs->Warning("cellFsFstat(fd=%d, sb_addr: 0x%x)", fd, sb.addr()); + LV2_LOCK(0); + IDType type; vfsStream* file; if(!sys_fs->CheckId(fd, file, type) || type != TYPE_FS_FILE) { @@ -281,6 +301,8 @@ s32 cellFsMkdir(vm::ptr path, u32 mode) { sys_fs->Warning("cellFsMkdir(path=\"%s\", mode=0x%x)", path.get_ptr(), mode); + LV2_LOCK(0); + const std::string _path = path.get_ptr(); if(Emu.GetVFS().ExistsDir(_path)) @@ -295,6 +317,8 @@ s32 cellFsRename(vm::ptr from, vm::ptr to) { sys_fs->Warning("cellFsRename(from='%s', to='%s')", from.get_ptr(), to.get_ptr()); + LV2_LOCK(0); + std::string _from = from.get_ptr(); std::string _to = to.get_ptr(); @@ -327,6 +351,8 @@ s32 cellFsChmod(vm::ptr path, u32 mode) { sys_fs->Todo("cellFsChmod(path=\"%s\", mode=0x%x)", path.get_ptr(), mode); + LV2_LOCK(0); + // TODO: return CELL_OK; @@ -336,6 +362,8 @@ s32 cellFsFsync(u32 fd) { sys_fs->Todo("cellFsFsync(fd=0x%x)", fd); + LV2_LOCK(0); + // TODO: return CELL_OK; @@ -345,6 +373,8 @@ s32 cellFsRmdir(vm::ptr path) { sys_fs->Warning("cellFsRmdir(path=\"%s\")", path.get_ptr()); + LV2_LOCK(0); + std::string _path = path.get_ptr(); vfsDir d; @@ -361,6 +391,8 @@ s32 cellFsUnlink(vm::ptr path) { sys_fs->Warning("cellFsUnlink(path=\"%s\")", path.get_ptr()); + LV2_LOCK(0); + std::string _path = path.get_ptr(); if (Emu.GetVFS().ExistsDir(_path)) @@ -377,8 +409,11 @@ s32 cellFsUnlink(vm::ptr path) s32 cellFsLseek(u32 fd, s64 offset, u32 whence, vm::ptr> pos) { - vfsSeekMode seek_mode; sys_fs->Log("cellFsLseek(fd=%d, offset=0x%llx, whence=0x%x, pos_addr=0x%x)", fd, offset, whence, pos.addr()); + + LV2_LOCK(0); + + vfsSeekMode seek_mode; switch(whence) { case CELL_SEEK_SET: seek_mode = vfsSeekSet; break; @@ -401,6 +436,8 @@ s32 cellFsLseek(u32 fd, s64 offset, u32 whence, vm::ptr> pos) s32 cellFsFtruncate(u32 fd, u64 size) { sys_fs->Warning("cellFsFtruncate(fd=%d, size=%lld)", fd, size); + + LV2_LOCK(0); IDType type; vfsStream* file; @@ -431,6 +468,8 @@ s32 cellFsTruncate(vm::ptr path, u64 size) { sys_fs->Warning("cellFsTruncate(path=\"%s\", size=%lld)", path.get_ptr(), size); + LV2_LOCK(0); + vfsFile f(path.get_ptr(), vfsReadWrite); if(!f.IsOpened()) { @@ -462,6 +501,8 @@ s32 cellFsFGetBlockSize(u32 fd, vm::ptr> sector_size, vm::ptrWarning("cellFsFGetBlockSize(fd=%d, sector_size_addr=0x%x, block_size_addr=0x%x)", fd, sector_size.addr(), block_size.addr()); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -476,6 +517,8 @@ s32 cellFsGetBlockSize(vm::ptr path, vm::ptr> sector_size, sys_fs->Warning("cellFsGetBlockSize(file='%s', sector_size_addr=0x%x, block_size_addr=0x%x)", path.get_ptr(), sector_size.addr(), block_size.addr()); + LV2_LOCK(0); + *sector_size = 4096; // ? *block_size = 4096; // ? @@ -487,6 +530,8 @@ s32 cellFsGetFreeSize(vm::ptr path, vm::ptr> block_size, v sys_fs->Warning("cellFsGetFreeSize(path=\"%s\", block_size_addr=0x%x, block_count_addr=0x%x)", path.get_ptr(), block_size.addr(), block_count.addr()); + LV2_LOCK(0); + // TODO: Get real values. Currently, it always returns 40 GB of free space divided in 4 KB blocks *block_size = 4096; // ? *block_count = 10485760; // ? @@ -499,6 +544,8 @@ s32 cellFsGetDirectoryEntries(u32 fd, vm::ptr entries, u32 sys_fs->Warning("cellFsGetDirectoryEntries(fd=%d, entries_addr=0x%x, entries_size=0x%x, data_count_addr=0x%x)", fd, entries.addr(), entries_size, data_count.addr()); + LV2_LOCK(0); + vfsDirBase* directory; if(!sys_fs->CheckId(fd, directory)) return CELL_ESRCH; @@ -535,6 +582,8 @@ s32 cellFsStReadInit(u32 fd, vm::ptr ringbuf) { sys_fs->Warning("cellFsStReadInit(fd=%d, ringbuf_addr=0x%x)", fd, ringbuf.addr()); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -557,6 +606,8 @@ s32 cellFsStReadFinish(u32 fd) { sys_fs->Warning("cellFsStReadFinish(fd=%d)", fd); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -570,6 +621,8 @@ s32 cellFsStReadGetRingBuf(u32 fd, vm::ptr ringbuf) { sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, ringbuf_addr=0x%x)", fd, ringbuf.addr()); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -584,6 +637,8 @@ s32 cellFsStReadGetStatus(u32 fd, vm::ptr> status) { sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, status_addr=0x%x)", fd, status.addr()); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -596,6 +651,8 @@ s32 cellFsStReadGetRegid(u32 fd, vm::ptr> regid) { sys_fs->Warning("cellFsStReadGetRingBuf(fd=%d, regid_addr=0x%x)", fd, regid.addr()); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -608,6 +665,8 @@ s32 cellFsStReadStart(u32 fd, u64 offset, u64 size) { sys_fs->Todo("cellFsStReadStart(fd=%d, offset=0x%llx, size=0x%llx)", fd, offset, size); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -621,6 +680,8 @@ s32 cellFsStReadStop(u32 fd) { sys_fs->Warning("cellFsStReadStop(fd=%d)", fd); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -632,6 +693,8 @@ s32 cellFsStReadStop(u32 fd) s32 cellFsStRead(u32 fd, u32 buf_addr, u64 size, vm::ptr> rsize) { sys_fs->Todo("cellFsStRead(fd=%d, buf_addr=0x%x, size=0x%llx, rsize_addr = 0x%x)", fd, buf_addr, size, rsize.addr()); + + LV2_LOCK(0); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -646,6 +709,8 @@ s32 cellFsStReadGetCurrentAddr(u32 fd, vm::ptr> addr, vm::ptrTodo("cellFsStReadGetCurrentAddr(fd=%d, addr_addr=0x%x, size_addr = 0x%x)", fd, addr.addr(), size.addr()); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -655,6 +720,8 @@ s32 cellFsStReadGetCurrentAddr(u32 fd, vm::ptr> addr, vm::ptrTodo("cellFsStReadPutCurrentAddr(fd=%d, addr_addr=0x%x, size = 0x%llx)", fd, addr_addr, size); + + LV2_LOCK(0); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -665,6 +732,8 @@ s32 cellFsStReadPutCurrentAddr(u32 fd, u32 addr_addr, u64 size) s32 cellFsStReadWait(u32 fd, u64 size) { sys_fs->Todo("cellFsStReadWait(fd=%d, size = 0x%llx)", fd, size); + + LV2_LOCK(0); vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; @@ -676,6 +745,8 @@ s32 cellFsStReadWaitCallback(u32 fd, u64 size, vm::ptrTodo("cellFsStReadWaitCallback(fd=%d, size = 0x%llx, func_addr = 0x%x)", fd, size, func.addr()); + LV2_LOCK(0); + vfsStream* file; if(!sys_fs->CheckId(fd, file)) return CELL_ESRCH; diff --git a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h index 8a49f44ed2..841a7b994b 100644 --- a/rpcs3/Emu/SysCalls/lv2/lv2Fs.h +++ b/rpcs3/Emu/SysCalls/lv2/lv2Fs.h @@ -104,7 +104,7 @@ struct CellFsAio { be_t fd; be_t offset; - be_t buf_addr; + vm::bptr buf; be_t size; be_t user_data; }; @@ -125,8 +125,8 @@ struct CellFsRingBuffer // SysCalls s32 cellFsOpen(vm::ptr path, s32 flags, vm::ptr> fd, vm::ptr> arg, u64 size); -s32 cellFsRead(u32 fd, u32 buf_addr, u64 nbytes, vm::ptr> nread); -s32 cellFsWrite(u32 fd, u32 buf_addr, u64 nbytes, vm::ptr> nwrite); +s32 cellFsRead(u32 fd, vm::ptr buf, u64 nbytes, vm::ptr> nread); +s32 cellFsWrite(u32 fd, vm::ptr buf, u64 nbytes, vm::ptr> nwrite); s32 cellFsClose(u32 fd); s32 cellFsOpendir(vm::ptr path, vm::ptr> fd); s32 cellFsReaddir(u32 fd, vm::ptr dir, vm::ptr> nread); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index 50e31e6d31..43e1d449e5 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -37,7 +37,7 @@ s32 sys_prx_load_module(vm::ptr path, u64 flags, vm::ptrpath = path; // Load the PRX into memory - f.Read(Memory.VirtualToRealAddr(prx->address), prx->size); + f.Read(vm::get_ptr(prx->address), prx->size); u32 id = sys_prx.GetNewId(prx, TYPE_PRX); return id; diff --git a/rpcs3/Gui/InterpreterDisAsm.cpp b/rpcs3/Gui/InterpreterDisAsm.cpp index 33274274a6..c27ce44f3c 100644 --- a/rpcs3/Gui/InterpreterDisAsm.cpp +++ b/rpcs3/Gui/InterpreterDisAsm.cpp @@ -248,7 +248,7 @@ void InterpreterDisAsmFrame::ShowAddr(const u64 addr) } else { - disasm->offset = Memory.GetMemFromAddr(CPU->GetOffset()); + disasm->offset = vm::get_ptr(CPU->GetOffset()); for(uint i=0, count = 4; iGetOffset() + PC, 4)) diff --git a/rpcs3/Gui/MemoryViewer.cpp b/rpcs3/Gui/MemoryViewer.cpp index 0a674c5632..d304011dc4 100644 --- a/rpcs3/Gui/MemoryViewer.cpp +++ b/rpcs3/Gui/MemoryViewer.cpp @@ -233,7 +233,7 @@ void MemoryViewerPanel::ShowImage(wxWindow* parent, u32 addr, int mode, u32 widt f_image_viewer->Show(); wxClientDC dc_canvas(f_image_viewer); - unsigned char* originalBuffer = (unsigned char*)Memory.VirtualToRealAddr(addr); + unsigned char* originalBuffer = vm::get_ptr(addr); unsigned char* convertedBuffer = (unsigned char*)malloc(width * height * 3); switch(mode) { diff --git a/rpcs3/Gui/RSXDebugger.cpp b/rpcs3/Gui/RSXDebugger.cpp index 8688c189b9..b99b03c931 100644 --- a/rpcs3/Gui/RSXDebugger.cpp +++ b/rpcs3/Gui/RSXDebugger.cpp @@ -412,13 +412,13 @@ void RSXDebugger::GetBuffers() if(!Memory.IsGoodAddr(render.m_gcm_buffers_addr)) continue; - CellGcmDisplayInfo* buffers = (CellGcmDisplayInfo*)Memory.GetMemFromAddr(render.m_gcm_buffers_addr); + auto buffers = vm::get_ptr(render.m_gcm_buffers_addr); u32 RSXbuffer_addr = render.m_local_mem_addr + buffers[bufferId].offset; if(!Memory.IsGoodAddr(RSXbuffer_addr)) continue; - unsigned char* RSXbuffer = (unsigned char*)Memory.VirtualToRealAddr(RSXbuffer_addr); + auto RSXbuffer = vm::get_ptr(RSXbuffer_addr); u32 width = buffers[bufferId].width; u32 height = buffers[bufferId].height; @@ -470,7 +470,7 @@ void RSXDebugger::GetBuffers() if(!Memory.IsGoodAddr(TexBuffer_addr)) return; - unsigned char* TexBuffer = (unsigned char*)Memory.VirtualToRealAddr(TexBuffer_addr); + unsigned char* TexBuffer = vm::get_ptr(TexBuffer_addr); u32 width = render.m_textures[m_cur_texture].GetWidth(); u32 height = render.m_textures[m_cur_texture].GetHeight(); diff --git a/rpcs3/Loader/ELF64.cpp b/rpcs3/Loader/ELF64.cpp index 65b9106e7a..fc5ee30990 100644 --- a/rpcs3/Loader/ELF64.cpp +++ b/rpcs3/Loader/ELF64.cpp @@ -418,7 +418,7 @@ bool ELF64Loader::LoadPhdrData(u64 offset) for(u32 s=proc_prx_param.libstubstart; s(offset + s); const std::string module_name = vm::get_ptr(stub.s_modulename); Module* module = Emu.GetModuleManager().GetModuleByName(module_name);