From 13bf4d83fa5894706242ef32c885380c59bf6503 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 14 Dec 2013 14:54:05 -0800 Subject: [PATCH] Add memchecks for common HLE copy operations. Better to catch some than miss everything. --- Core/HLE/sceDmac.cpp | 5 +++++ Core/HLE/sceKernelInterrupt.cpp | 21 +++++++++++++-------- Core/MemMap.cpp | 6 +++++- GPU/GLES/GLES_GPU.cpp | 6 ++++++ GPU/Software/SoftGpu.cpp | 6 ++++++ 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Core/HLE/sceDmac.cpp b/Core/HLE/sceDmac.cpp index c5e82b72a3..36191f743c 100644 --- a/Core/HLE/sceDmac.cpp +++ b/Core/HLE/sceDmac.cpp @@ -20,6 +20,7 @@ #include "Core/MemMap.h" #include "Core/Reporting.h" #include "Core/HLE/HLE.h" +#include "Core/Debugger/Breakpoints.h" #include "GPU/GPUInterface.h" #include "GPU/GPUState.h" @@ -41,6 +42,10 @@ void __DmacDoState(PointerWrap &p) { int __DmacMemcpy(u32 dst, u32 src, u32 size) { Memory::Memcpy(dst, Memory::GetPointer(src), size); +#ifndef USING_GLES2 + CBreakPoints::ExecMemCheck(src, false, size, currentMIPS->pc); + CBreakPoints::ExecMemCheck(dst, true, size, currentMIPS->pc); +#endif src &= ~0x40000000; dst &= ~0x40000000; diff --git a/Core/HLE/sceKernelInterrupt.cpp b/Core/HLE/sceKernelInterrupt.cpp index 044fa02133..a45d2d4a49 100644 --- a/Core/HLE/sceKernelInterrupt.cpp +++ b/Core/HLE/sceKernelInterrupt.cpp @@ -19,15 +19,16 @@ #include #include -#include "HLE.h" -#include "../MIPS/MIPS.h" -#include "ChunkFile.h" +#include "Core/HLE/HLE.h" +#include "Core/MIPS/MIPS.h" +#include "Common/ChunkFile.h" -#include "sceKernel.h" -#include "sceKernelThread.h" -#include "sceKernelInterrupt.h" -#include "sceKernelMemory.h" -#include "sceKernelMutex.h" +#include "Core/Debugger/Breakpoints.h" +#include "Core/HLE/sceKernel.h" +#include "Core/HLE/sceKernelThread.h" +#include "Core/HLE/sceKernelInterrupt.h" +#include "Core/HLE/sceKernelMemory.h" +#include "Core/HLE/sceKernelMutex.h" #include "GPU/GPUCommon.h" void __DisableInterrupts(); @@ -580,6 +581,10 @@ u32 sceKernelMemcpy(u32 dst, u32 src, u32 size) *dstp++ = *srcp++; } } +#ifndef USING_GLES2 + CBreakPoints::ExecMemCheck(src, false, size, currentMIPS->pc); + CBreakPoints::ExecMemCheck(dst, true, size, currentMIPS->pc); +#endif return dst; } diff --git a/Core/MemMap.cpp b/Core/MemMap.cpp index b38da4710b..7222504465 100644 --- a/Core/MemMap.cpp +++ b/Core/MemMap.cpp @@ -28,7 +28,8 @@ #include "MIPS/JitCommon/JitCommon.h" #include "HLE/HLE.h" #include "CPU.h" -#include "Debugger/SymbolMap.h" +#include "Core/Debugger/SymbolMap.h" +#include "Core/Debugger/Breakpoints.h" #include "Core/Config.h" namespace Memory @@ -210,6 +211,9 @@ void Memset(const u32 _Address, const u8 _iValue, const u32 _iLength) for (size_t i = 0; i < _iLength; i++) Write_U8(_iValue, (u32)(_Address + i)); } +#ifndef USING_GLES2 + CBreakPoints::ExecMemCheck(_Address, true, _iLength, currentMIPS->pc); +#endif } void GetString(std::string& _string, const u32 em_address) diff --git a/GPU/GLES/GLES_GPU.cpp b/GPU/GLES/GLES_GPU.cpp index fbc3665b45..0d0968b14d 100644 --- a/GPU/GLES/GLES_GPU.cpp +++ b/GPU/GLES/GLES_GPU.cpp @@ -18,6 +18,7 @@ #include "base/logging.h" #include "gfx_es2/gl_state.h" +#include "Core/Debugger/Breakpoints.h" #include "Core/MemMap.h" #include "Core/Host.h" #include "Core/Config.h" @@ -1562,6 +1563,11 @@ void GLES_GPU::DoBlockTransfer() { dstStride == 512 && height == 272) { framebufferManager_.DrawPixels(Memory::GetPointerUnchecked(dstBasePtr), GE_FORMAT_8888, 512); } + +#ifndef USING_GLES2 + CBreakPoints::ExecMemCheck(srcBasePtr + (srcY * srcStride + srcX) * bpp, false, height * srcStride * bpp, currentMIPS->pc); + CBreakPoints::ExecMemCheck(dstBasePtr + (srcY * dstStride + srcX) * bpp, true, height * dstStride * bpp, currentMIPS->pc); +#endif } void GLES_GPU::InvalidateCache(u32 addr, int size, GPUInvalidationType type) { diff --git a/GPU/Software/SoftGpu.cpp b/GPU/Software/SoftGpu.cpp index 28933eff2e..8f3136db53 100644 --- a/GPU/Software/SoftGpu.cpp +++ b/GPU/Software/SoftGpu.cpp @@ -19,6 +19,7 @@ #include "GPU/GPUState.h" #include "GPU/ge_constants.h" #include "GPU/Common/TextureDecoder.h" +#include "Core/Debugger/Breakpoints.h" #include "Core/MemMap.h" #include "Core/HLE/sceKernelInterrupt.h" #include "Core/HLE/sceGe.h" @@ -564,6 +565,11 @@ void SoftGPU::ExecuteOp(u32 op, u32 diff) memcpy(dst, src, width * bpp); } +#ifndef USING_GLES2 + CBreakPoints::ExecMemCheck(srcBasePtr + (srcY * srcStride + srcX) * bpp, false, height * srcStride * bpp, currentMIPS->pc); + CBreakPoints::ExecMemCheck(dstBasePtr + (srcY * dstStride + srcX) * bpp, true, height * dstStride * bpp, currentMIPS->pc); +#endif + break; }