[Debugger] Fix Read break points

This commit is contained in:
zilmar 2018-02-05 17:43:46 +11:00
parent 076280b9ba
commit 622d5d5d3f
7 changed files with 181 additions and 9 deletions

View File

@ -1025,6 +1025,10 @@ void R4300iOp::LDL()
uint64_t Value; uint64_t Value;
Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
if (HaveReadBP() && g_Debugger->ReadBP64(Address) && MemoryBreakpoint())
{
return;
}
Offset = Address & 7; Offset = Address & 7;
if (!g_MMU->LD_VAddr((Address & ~7), Value)) if (!g_MMU->LD_VAddr((Address & ~7), Value))
@ -1052,6 +1056,10 @@ void R4300iOp::LDR()
uint64_t Value; uint64_t Value;
Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
if (HaveReadBP() && g_Debugger->ReadBP64(Address) && MemoryBreakpoint())
{
return;
}
Offset = Address & 7; Offset = Address & 7;
if (!g_MMU->LD_VAddr((Address & ~7), Value)) if (!g_MMU->LD_VAddr((Address & ~7), Value))
@ -1071,6 +1079,10 @@ void R4300iOp::LDR()
void R4300iOp::LB() void R4300iOp::LB()
{ {
uint32_t Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; uint32_t Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
if (HaveReadBP() && g_Debugger->ReadBP8(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LB_VAddr(Address, _GPR[m_Opcode.rt].UB[0])) if (!g_MMU->LB_VAddr(Address, _GPR[m_Opcode.rt].UB[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -1092,6 +1104,10 @@ void R4300iOp::LH()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP16(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LH_VAddr(Address, _GPR[m_Opcode.rt].UHW[0])) if (!g_MMU->LH_VAddr(Address, _GPR[m_Opcode.rt].UHW[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -1111,6 +1127,10 @@ void R4300iOp::LWL()
uint32_t Offset, Address, Value; uint32_t Offset, Address, Value;
Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
Offset = Address & 3; Offset = Address & 3;
if (!g_MMU->LW_VAddr((Address & ~3), Value)) if (!g_MMU->LW_VAddr((Address & ~3), Value))
@ -1134,7 +1154,10 @@ void R4300iOp::LW()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (GenerateLog()) if (GenerateLog())
{ {
Log_LW((*_PROGRAM_COUNTER), Address); Log_LW((*_PROGRAM_COUNTER), Address);
@ -1157,6 +1180,10 @@ void R4300iOp::LW()
void R4300iOp::LBU() void R4300iOp::LBU()
{ {
uint32_t Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; uint32_t Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
if (HaveReadBP() && g_Debugger->ReadBP8(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LB_VAddr(Address, _GPR[m_Opcode.rt].UB[0])) if (!g_MMU->LB_VAddr(Address, _GPR[m_Opcode.rt].UB[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -1178,6 +1205,10 @@ void R4300iOp::LHU()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP16(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LH_VAddr(Address, _GPR[m_Opcode.rt].UHW[0])) if (!g_MMU->LH_VAddr(Address, _GPR[m_Opcode.rt].UHW[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -1198,6 +1229,10 @@ void R4300iOp::LWR()
Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
Offset = Address & 3; Offset = Address & 3;
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LW_VAddr((Address & ~3), Value)) if (!g_MMU->LW_VAddr((Address & ~3), Value))
{ {
@ -1220,6 +1255,10 @@ void R4300iOp::LWU()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LW_VAddr(Address, _GPR[m_Opcode.rt].UW[0])) if (!g_MMU->LW_VAddr(Address, _GPR[m_Opcode.rt].UW[0]))
{ {
@ -1507,6 +1546,11 @@ void R4300iOp::LL()
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LW_VAddr(Address, _GPR[m_Opcode.rt].UW[0])) if (!g_MMU->LW_VAddr(Address, _GPR[m_Opcode.rt].UW[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -1530,6 +1574,10 @@ void R4300iOp::LWC1()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LW_VAddr(Address, *(uint32_t *)_FPR_S[m_Opcode.ft])) if (!g_MMU->LW_VAddr(Address, *(uint32_t *)_FPR_S[m_Opcode.ft]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -1573,6 +1621,10 @@ void R4300iOp::LD()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP64(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LD_VAddr(Address, _GPR[m_Opcode.rt].UDW)) if (!g_MMU->LD_VAddr(Address, _GPR[m_Opcode.rt].UDW))
{ {
if (HaveDebugger()) if (HaveDebugger())
@ -1602,6 +1654,10 @@ void R4300iOp::LDC1()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP64(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LD_VAddr(Address, *(uint64_t *)_FPR_D[m_Opcode.ft])) if (!g_MMU->LD_VAddr(Address, *(uint64_t *)_FPR_D[m_Opcode.ft]))
{ {
if (HaveDebugger()) if (HaveDebugger())

View File

@ -15,6 +15,7 @@
#include <Project64-core/N64System/Mips/SystemTiming.h> #include <Project64-core/N64System/Mips/SystemTiming.h>
#include <Project64-core/N64System/Interpreter/InterpreterCPU.h> #include <Project64-core/N64System/Interpreter/InterpreterCPU.h>
#include <Project64-core/Logging.h> #include <Project64-core/Logging.h>
#include <Project64-core/Debugger.h>
bool DelaySlotEffectsCompare(uint32_t PC, uint32_t Reg1, uint32_t Reg2); bool DelaySlotEffectsCompare(uint32_t PC, uint32_t Reg1, uint32_t Reg2);
@ -891,6 +892,10 @@ void R4300iOp32::BGTZL()
void R4300iOp32::LB() void R4300iOp32::LB()
{ {
uint32_t Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; uint32_t Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
if (HaveReadBP() && g_Debugger->ReadBP8(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LB_VAddr(Address, _GPR[m_Opcode.rt].UB[0])) if (!g_MMU->LB_VAddr(Address, _GPR[m_Opcode.rt].UB[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -912,6 +917,10 @@ void R4300iOp32::LH()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP16(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LH_VAddr(Address, _GPR[m_Opcode.rt].UHW[0])) if (!g_MMU->LH_VAddr(Address, _GPR[m_Opcode.rt].UHW[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -933,6 +942,10 @@ void R4300iOp32::LWL()
Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
Offset = Address & 3; Offset = Address & 3;
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LW_VAddr((Address & ~3), Value)) if (!g_MMU->LW_VAddr((Address & ~3), Value))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -954,6 +967,10 @@ void R4300iOp32::LW()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (GenerateLog()) if (GenerateLog())
{ {
@ -977,6 +994,10 @@ void R4300iOp32::LW()
void R4300iOp32::LBU() void R4300iOp32::LBU()
{ {
uint32_t Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; uint32_t Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
if (HaveReadBP() && g_Debugger->ReadBP8(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LB_VAddr(Address, _GPR[m_Opcode.rt].UB[0])) if (!g_MMU->LB_VAddr(Address, _GPR[m_Opcode.rt].UB[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -998,6 +1019,10 @@ void R4300iOp32::LHU()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP16(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LH_VAddr(Address, _GPR[m_Opcode.rt].UHW[0])) if (!g_MMU->LH_VAddr(Address, _GPR[m_Opcode.rt].UHW[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -1018,7 +1043,10 @@ void R4300iOp32::LWR()
Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset; Address = _GPR[m_Opcode.base].UW[0] + (int16_t)m_Opcode.offset;
Offset = Address & 3; Offset = Address & 3;
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LW_VAddr((Address & ~3), Value)) if (!g_MMU->LW_VAddr((Address & ~3), Value))
{ {
g_Notify->BreakPoint(__FILE__, __LINE__); g_Notify->BreakPoint(__FILE__, __LINE__);
@ -1041,6 +1069,10 @@ void R4300iOp32::LWU()
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LW_VAddr(Address, _GPR[m_Opcode.rt].UW[0])) if (!g_MMU->LW_VAddr(Address, _GPR[m_Opcode.rt].UW[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())
@ -1062,7 +1094,10 @@ void R4300iOp32::LL()
{ {
ADDRESS_ERROR_EXCEPTION(Address, true); ADDRESS_ERROR_EXCEPTION(Address, true);
} }
if (HaveReadBP() && g_Debugger->ReadBP32(Address) && MemoryBreakpoint())
{
return;
}
if (!g_MMU->LW_VAddr(Address, _GPR[m_Opcode.rt].UW[0])) if (!g_MMU->LW_VAddr(Address, _GPR[m_Opcode.rt].UW[0]))
{ {
if (bShowTLBMisses()) if (bShowTLBMisses())

View File

@ -26,6 +26,7 @@ bool CDebugSettings::m_bShowDivByZero = false;
bool CDebugSettings::m_RecordExecutionTimes = false; bool CDebugSettings::m_RecordExecutionTimes = false;
bool CDebugSettings::m_HaveExecutionBP = false; bool CDebugSettings::m_HaveExecutionBP = false;
bool CDebugSettings::m_HaveWriteBP = false; bool CDebugSettings::m_HaveWriteBP = false;
bool CDebugSettings::m_HaveReadBP = false;
CDebugSettings::CDebugSettings() CDebugSettings::CDebugSettings()
{ {
@ -42,6 +43,7 @@ CDebugSettings::CDebugSettings()
g_Settings->RegisterChangeCB(Debugger_SkipOp, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_SkipOp, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->RegisterChangeCB(Debugger_HaveExecutionBP, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_HaveExecutionBP, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->RegisterChangeCB(Debugger_WriteBPExists, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_WriteBPExists, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->RegisterChangeCB(Debugger_ReadBPExists, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->RegisterChangeCB(Debugger_WaitingForStep, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_WaitingForStep, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
RefreshSettings(); RefreshSettings();
@ -78,6 +80,7 @@ void CDebugSettings::RefreshSettings()
m_WaitingForStep = g_Settings->LoadBool(Debugger_WaitingForStep); m_WaitingForStep = g_Settings->LoadBool(Debugger_WaitingForStep);
m_HaveExecutionBP = m_HaveDebugger && g_Settings->LoadBool(Debugger_HaveExecutionBP); m_HaveExecutionBP = m_HaveDebugger && g_Settings->LoadBool(Debugger_HaveExecutionBP);
m_HaveWriteBP = m_HaveDebugger && g_Settings->LoadBool(Debugger_WriteBPExists); m_HaveWriteBP = m_HaveDebugger && g_Settings->LoadBool(Debugger_WriteBPExists);
m_HaveReadBP = m_HaveDebugger && g_Settings->LoadBool(Debugger_ReadBPExists);
m_Debugging = m_HaveDebugger && (m_HaveExecutionBP || m_WaitingForStep || m_HaveWriteBP); m_Debugging = m_HaveDebugger && (m_HaveExecutionBP || m_WaitingForStep || m_HaveWriteBP || m_HaveReadBP);
} }

View File

@ -318,6 +318,7 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Debugger_SkipOp, new CSettingTypeTempBool(false)); AddHandler(Debugger_SkipOp, new CSettingTypeTempBool(false));
AddHandler(Debugger_HaveExecutionBP, new CSettingTypeTempBool(false)); AddHandler(Debugger_HaveExecutionBP, new CSettingTypeTempBool(false));
AddHandler(Debugger_WriteBPExists, new CSettingTypeTempBool(false)); AddHandler(Debugger_WriteBPExists, new CSettingTypeTempBool(false));
AddHandler(Debugger_ReadBPExists, new CSettingTypeTempBool(false));
AddHandler(Debugger_WaitingForStep, new CSettingTypeTempBool(false)); AddHandler(Debugger_WaitingForStep, new CSettingTypeTempBool(false));
AddHandler(Debugger_DebugLanguage, new CSettingTypeApplication("Debugger", "Debug Language", false)); AddHandler(Debugger_DebugLanguage, new CSettingTypeApplication("Debugger", "Debug Language", false));
AddHandler(Debugger_ShowDivByZero, new CSettingTypeApplication("Debugger", "Show Div by zero", false)); AddHandler(Debugger_ShowDivByZero, new CSettingTypeApplication("Debugger", "Show Div by zero", false));

View File

@ -23,9 +23,14 @@ CBreakpoints::CBreakpoints()
bool CBreakpoints::RBPAdd(uint32_t address) bool CBreakpoints::RBPAdd(uint32_t address)
{ {
if (!ReadBPExists(address)) if (!ReadBPExists8(address))
{ {
m_ReadMem.insert(breakpoints_t::value_type(address, false)); m_ReadMem.insert(breakpoints_t::value_type(address, false));
UpdateAlignedReadBP();
if (!HaveReadBP())
{
g_Settings->SaveBool(Debugger_ReadBPExists, true);
}
return true; return true;
} }
return false; return false;
@ -67,6 +72,11 @@ void CBreakpoints::RBPRemove(uint32_t address)
if (itr != m_ReadMem.end()) if (itr != m_ReadMem.end())
{ {
m_ReadMem.erase(itr); m_ReadMem.erase(itr);
UpdateAlignedWriteBP();
if (m_ReadMem.size() == 0)
{
g_Settings->SaveBool(Debugger_ReadBPExists, false);
}
} }
} }
@ -77,7 +87,7 @@ void CBreakpoints::WBPRemove(uint32_t address)
{ {
m_WriteMem.erase(itr); m_WriteMem.erase(itr);
UpdateAlignedWriteBP(); UpdateAlignedWriteBP();
if (m_Execution.size() == 0) if (m_WriteMem.size() == 0)
{ {
g_Settings->SaveBool(Debugger_WriteBPExists, false); g_Settings->SaveBool(Debugger_WriteBPExists, false);
} }
@ -124,6 +134,8 @@ void CBreakpoints::EBPToggle(uint32_t address, bool bTemporary)
void CBreakpoints::RBPClear() void CBreakpoints::RBPClear()
{ {
m_ReadMem.clear(); m_ReadMem.clear();
UpdateAlignedReadBP();
g_Settings->SaveBool(Debugger_ReadBPExists, false);
} }
void CBreakpoints::WBPClear() void CBreakpoints::WBPClear()
@ -136,6 +148,7 @@ void CBreakpoints::WBPClear()
void CBreakpoints::EBPClear() void CBreakpoints::EBPClear()
{ {
m_Execution.clear(); m_Execution.clear();
g_Settings->SaveBool(Debugger_HaveExecutionBP, false);
} }
void CBreakpoints::BPClear() void CBreakpoints::BPClear()
@ -145,7 +158,7 @@ void CBreakpoints::BPClear()
EBPClear(); EBPClear();
} }
CBreakpoints::BPSTATE CBreakpoints::ReadBPExists(uint32_t address) CBreakpoints::BPSTATE CBreakpoints::ReadBPExists8(uint32_t address)
{ {
breakpoints_t::const_iterator itr = m_ReadMem.find(address); breakpoints_t::const_iterator itr = m_ReadMem.find(address);
if (itr != m_ReadMem.end()) if (itr != m_ReadMem.end())
@ -155,6 +168,36 @@ CBreakpoints::BPSTATE CBreakpoints::ReadBPExists(uint32_t address)
return BP_NOT_SET; return BP_NOT_SET;
} }
CBreakpoints::BPSTATE CBreakpoints::ReadBPExists16(uint32_t address)
{
breakpoints_t::const_iterator itr = m_ReadMem16.find(address);
if (itr != m_ReadMem.end())
{
return BP_SET;
}
return BP_NOT_SET;
}
CBreakpoints::BPSTATE CBreakpoints::ReadBPExists32(uint32_t address)
{
breakpoints_t::const_iterator itr = m_ReadMem32.find(address);
if (itr != m_ReadMem.end())
{
return BP_SET;
}
return BP_NOT_SET;
}
CBreakpoints::BPSTATE CBreakpoints::ReadBPExists64(uint32_t address)
{
breakpoints_t::const_iterator itr = m_ReadMem64.find(address);
if (itr != m_ReadMem.end())
{
return BP_SET;
}
return BP_NOT_SET;
}
CBreakpoints::BPSTATE CBreakpoints::WriteBPExists8(uint32_t address) CBreakpoints::BPSTATE CBreakpoints::WriteBPExists8(uint32_t address)
{ {
breakpoints_t::const_iterator itr = m_WriteMem.find(address); breakpoints_t::const_iterator itr = m_WriteMem.find(address);
@ -213,6 +256,20 @@ CBreakpoints::BPSTATE CBreakpoints::ExecutionBPExists(uint32_t address, bool bRe
return BP_NOT_SET; return BP_NOT_SET;
} }
void CBreakpoints::UpdateAlignedReadBP()
{
m_ReadMem16.clear();
m_ReadMem32.clear();
m_ReadMem64.clear();
for (breakpoints_t::const_iterator itr = m_ReadMem.begin(); itr != m_ReadMem.end(); itr++)
{
m_ReadMem16.insert(breakpoints_t::value_type((itr->first & ~0x1), false));
m_ReadMem32.insert(breakpoints_t::value_type((itr->first & ~0x3), false));
m_ReadMem64.insert(breakpoints_t::value_type((itr->first & ~0x7), false));
}
}
void CBreakpoints::UpdateAlignedWriteBP() void CBreakpoints::UpdateAlignedWriteBP()
{ {
m_WriteMem16.clear(); m_WriteMem16.clear();

View File

@ -717,7 +717,7 @@ void CDebugMemoryView::SelectColors(uint32_t vaddr, bool changed, COLORREF& bgCo
CSymbols::LeaveCriticalSection(); CSymbols::LeaveCriticalSection();
bool bHaveReadBP = m_Breakpoints->ReadBPExists(vaddr) == CBreakpoints::BP_SET; bool bHaveReadBP = m_Breakpoints->ReadBPExists8(vaddr) == CBreakpoints::BP_SET;
bool bHaveWriteBP = m_Breakpoints->WriteBPExists8(vaddr) == CBreakpoints::BP_SET; bool bHaveWriteBP = m_Breakpoints->WriteBPExists8(vaddr) == CBreakpoints::BP_SET;
fgHiColor = RGB(0x00, 0x00, 0x00); fgHiColor = RGB(0x00, 0x00, 0x00);

View File

@ -405,7 +405,7 @@ void CDebuggerUI::CPUStepStarted()
{ {
m_ScriptSystem->HookCPURead()->InvokeByParamInRange(memoryAddress); m_ScriptSystem->HookCPURead()->InvokeByParamInRange(memoryAddress);
if (m_Breakpoints->ReadBPExists(memoryAddress)) if (m_Breakpoints->ReadBPExists8(memoryAddress))
{ {
goto breakpoint_hit; goto breakpoint_hit;
} }
@ -535,6 +535,26 @@ bool CDebuggerUI::ExecutionBP(uint32_t address)
return m_Breakpoints != NULL && m_Breakpoints->ExecutionBPExists(address, true) != CBreakpoints::BP_NOT_SET; return m_Breakpoints != NULL && m_Breakpoints->ExecutionBPExists(address, true) != CBreakpoints::BP_NOT_SET;
} }
bool CDebuggerUI::ReadBP8(uint32_t address)
{
return m_Breakpoints != NULL && m_Breakpoints->ReadBPExists8(address) != CBreakpoints::BP_NOT_SET;
}
bool CDebuggerUI::ReadBP16(uint32_t address)
{
return m_Breakpoints != NULL && m_Breakpoints->ReadBPExists16(address) != CBreakpoints::BP_NOT_SET;
}
bool CDebuggerUI::ReadBP32(uint32_t address)
{
return m_Breakpoints != NULL && m_Breakpoints->ReadBPExists32(address) != CBreakpoints::BP_NOT_SET;
}
bool CDebuggerUI::ReadBP64(uint32_t address)
{
return m_Breakpoints != NULL && m_Breakpoints->ReadBPExists64(address) != CBreakpoints::BP_NOT_SET;
}
bool CDebuggerUI::WriteBP8(uint32_t address) bool CDebuggerUI::WriteBP8(uint32_t address)
{ {
return m_Breakpoints != NULL && m_Breakpoints->WriteBPExists8(address) != CBreakpoints::BP_NOT_SET; return m_Breakpoints != NULL && m_Breakpoints->WriteBPExists8(address) != CBreakpoints::BP_NOT_SET;