summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorScott Mansell <phiren@gmail.com>2016-09-15 10:46:07 +1200
committerGitHub <noreply@github.com>2016-09-15 10:46:07 +1200
commit4c004b6dc978d7585bf0765e22351ef1edd39a3a (patch)
tree02e7a01b262c5ef1395ffdcc5dd86721209157fa /Source/Core
parent514ce3c6eddf196f61196b3ddcd8d210f07072c7 (diff)
parent72f1d9963410e5c80e74a0d99f56b6ac7ed39e03 (diff)
Merge pull request #4131 from aldelaro5/memoryViewer-memChecks-improvements
Add the configuration of how a memory check is added via the memory window
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/DebugInterface.h4
-rw-r--r--Source/Core/Core/Debugger/PPCDebugInterface.cpp8
-rw-r--r--Source/Core/Core/Debugger/PPCDebugInterface.h3
-rw-r--r--Source/Core/Core/HW/DSPLLE/DSPDebugInterface.cpp2
-rw-r--r--Source/Core/Core/HW/DSPLLE/DSPDebugInterface.h3
-rw-r--r--Source/Core/DolphinWX/Debugger/MemoryView.cpp2
-rw-r--r--Source/Core/DolphinWX/Debugger/MemoryView.h11
-rw-r--r--Source/Core/DolphinWX/Debugger/MemoryWindow.cpp27
-rw-r--r--Source/Core/DolphinWX/Debugger/MemoryWindow.h6
9 files changed, 56 insertions, 10 deletions
diff --git a/Source/Core/Common/DebugInterface.h b/Source/Core/Common/DebugInterface.h
index a8fbea4efc..3aa8faec8f 100644
--- a/Source/Core/Common/DebugInterface.h
+++ b/Source/Core/Common/DebugInterface.h
@@ -28,7 +28,9 @@ public:
virtual void AddWatch(unsigned int /*address*/) {}
virtual void ClearAllMemChecks() {}
virtual bool IsMemCheck(unsigned int /*address*/) { return false; }
- virtual void ToggleMemCheck(unsigned int /*address*/) {}
+ virtual void ToggleMemCheck(unsigned int /*address*/, bool /*read*/, bool /*write*/, bool /*log*/)
+ {
+ }
virtual unsigned int ReadMemory(unsigned int /*address*/) { return 0; }
virtual void WriteExtraMemory(int /*memory*/, unsigned int /*value*/, unsigned int /*address*/) {}
virtual unsigned int ReadExtraMemory(int /*memory*/, unsigned int /*address*/) { return 0; }
diff --git a/Source/Core/Core/Debugger/PPCDebugInterface.cpp b/Source/Core/Core/Debugger/PPCDebugInterface.cpp
index e96a44f923..b07b3737c8 100644
--- a/Source/Core/Core/Debugger/PPCDebugInterface.cpp
+++ b/Source/Core/Core/Debugger/PPCDebugInterface.cpp
@@ -140,7 +140,7 @@ bool PPCDebugInterface::IsMemCheck(unsigned int address)
return (PowerPC::memchecks.HasAny() && PowerPC::memchecks.GetMemCheck(address));
}
-void PPCDebugInterface::ToggleMemCheck(unsigned int address)
+void PPCDebugInterface::ToggleMemCheck(unsigned int address, bool read, bool write, bool log)
{
if (PowerPC::memchecks.HasAny() && !PowerPC::memchecks.GetMemCheck(address))
{
@@ -148,10 +148,10 @@ void PPCDebugInterface::ToggleMemCheck(unsigned int address)
TMemCheck MemCheck;
MemCheck.StartAddress = address;
MemCheck.EndAddress = address;
- MemCheck.OnRead = true;
- MemCheck.OnWrite = true;
+ MemCheck.OnRead = read;
+ MemCheck.OnWrite = write;
- MemCheck.Log = true;
+ MemCheck.Log = log;
MemCheck.Break = true;
PowerPC::memchecks.Add(MemCheck);
diff --git a/Source/Core/Core/Debugger/PPCDebugInterface.h b/Source/Core/Core/Debugger/PPCDebugInterface.h
index be4a7a1502..21777089de 100644
--- a/Source/Core/Core/Debugger/PPCDebugInterface.h
+++ b/Source/Core/Core/Debugger/PPCDebugInterface.h
@@ -26,7 +26,8 @@ public:
void ToggleBreakpoint(unsigned int address) override;
void ClearAllMemChecks() override;
bool IsMemCheck(unsigned int address) override;
- void ToggleMemCheck(unsigned int address) override;
+ void ToggleMemCheck(unsigned int address, bool read = true, bool write = true,
+ bool log = true) override;
unsigned int ReadMemory(unsigned int address) override;
enum
diff --git a/Source/Core/Core/HW/DSPLLE/DSPDebugInterface.cpp b/Source/Core/Core/HW/DSPLLE/DSPDebugInterface.cpp
index 56330dc963..a97077346b 100644
--- a/Source/Core/Core/HW/DSPLLE/DSPDebugInterface.cpp
+++ b/Source/Core/Core/HW/DSPLLE/DSPDebugInterface.cpp
@@ -132,7 +132,7 @@ void DSPDebugInterface::ClearAllMemChecks()
PanicAlert("MemCheck functionality not supported in DSP module.");
}
-void DSPDebugInterface::ToggleMemCheck(unsigned int address)
+void DSPDebugInterface::ToggleMemCheck(unsigned int address, bool read, bool write, bool log)
{
PanicAlert("MemCheck functionality not supported in DSP module.");
}
diff --git a/Source/Core/Core/HW/DSPLLE/DSPDebugInterface.h b/Source/Core/Core/HW/DSPLLE/DSPDebugInterface.h
index cb71639617..c492c8946f 100644
--- a/Source/Core/Core/HW/DSPLLE/DSPDebugInterface.h
+++ b/Source/Core/Core/HW/DSPLLE/DSPDebugInterface.h
@@ -24,7 +24,8 @@ public:
void ToggleBreakpoint(unsigned int address) override;
void ClearAllMemChecks() override;
bool IsMemCheck(unsigned int address) override;
- void ToggleMemCheck(unsigned int address) override;
+ void ToggleMemCheck(unsigned int address, bool read = true, bool write = true,
+ bool log = true) override;
unsigned int ReadMemory(unsigned int address) override;
unsigned int ReadInstruction(unsigned int address) override;
unsigned int GetPC() override;
diff --git a/Source/Core/DolphinWX/Debugger/MemoryView.cpp b/Source/Core/DolphinWX/Debugger/MemoryView.cpp
index 195cd965b3..485b131584 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryView.cpp
+++ b/Source/Core/DolphinWX/Debugger/MemoryView.cpp
@@ -82,7 +82,7 @@ void CMemoryView::OnMouseDownL(wxMouseEvent& event)
}
else
{
- debugger->ToggleMemCheck(YToAddress(y));
+ debugger->ToggleMemCheck(YToAddress(y), memCheckRead, memCheckWrite, memCheckLog);
Refresh();
diff --git a/Source/Core/DolphinWX/Debugger/MemoryView.h b/Source/Core/DolphinWX/Debugger/MemoryView.h
index c540e96c70..03cb68d21f 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryView.h
+++ b/Source/Core/DolphinWX/Debugger/MemoryView.h
@@ -35,6 +35,13 @@ public:
Refresh();
}
+ void SetMemCheckOptions(bool read, bool write, bool log)
+ {
+ memCheckRead = read;
+ memCheckWrite = write;
+ memCheckLog = log;
+ }
+
private:
void OnPaint(wxPaintEvent& event);
void OnMouseDownL(wxMouseEvent& event);
@@ -60,6 +67,10 @@ private:
int curAddress;
MemoryDataType dataType;
+ bool memCheckRead;
+ bool memCheckWrite;
+ bool memCheckLog;
+
enum EViewAsType
{
VIEWAS_ASCII = 0,
diff --git a/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp b/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp
index bfd5829ef0..17dea4a17d 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp
+++ b/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp
@@ -12,6 +12,7 @@
#include <wx/listbox.h>
#include <wx/msgdlg.h>
#include <wx/panel.h>
+#include <wx/radiobut.h>
#include <wx/sizer.h>
#include <wx/srchctrl.h>
#include <wx/textctrl.h>
@@ -47,7 +48,8 @@ enum
IDM_U32,
IDM_SEARCH,
IDM_ASCII,
- IDM_HEX
+ IDM_HEX,
+ IDM_MEMCHECK_OPTIONS_CHANGE
};
BEGIN_EVENT_TABLE(CMemoryWindow, wxPanel)
@@ -63,6 +65,8 @@ EVT_CHECKBOX(IDM_U32, CMemoryWindow::U32)
EVT_BUTTON(IDM_SEARCH, CMemoryWindow::onSearch)
EVT_CHECKBOX(IDM_ASCII, CMemoryWindow::onAscii)
EVT_CHECKBOX(IDM_HEX, CMemoryWindow::onHex)
+EVT_RADIOBUTTON(IDM_MEMCHECK_OPTIONS_CHANGE, CMemoryWindow::onMemCheckOptionChange)
+EVT_CHECKBOX(IDM_MEMCHECK_OPTIONS_CHANGE, CMemoryWindow::onMemCheckOptionChange)
END_EVENT_TABLE()
CMemoryWindow::CMemoryWindow(CCodeWindow* code_window, wxWindow* parent, wxWindowID id,
@@ -104,12 +108,24 @@ CMemoryWindow::CMemoryWindow(CCodeWindow* code_window, wxWindow* parent, wxWindo
sizerDataTypes->Add(chk16 = new wxCheckBox(this, IDM_U16, "U16"));
sizerDataTypes->Add(chk32 = new wxCheckBox(this, IDM_U32, "U32"));
+ wxStaticBoxSizer* const sizerMemCheckOptions =
+ new wxStaticBoxSizer(wxVERTICAL, this, "Memory check options");
+ sizerMemCheckOptions->Add(rdbReadWrite = new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE,
+ "Read and Write", wxDefaultPosition,
+ wxDefaultSize, wxRB_GROUP));
+ sizerMemCheckOptions->Add(rdbRead =
+ new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE, "Read only"));
+ sizerMemCheckOptions->Add(rdbWrite =
+ new wxRadioButton(this, IDM_MEMCHECK_OPTIONS_CHANGE, "Write only"));
+ sizerMemCheckOptions->Add(chkLog = new wxCheckBox(this, IDM_MEMCHECK_OPTIONS_CHANGE, "Log"));
+
wxBoxSizer* const sizerRight = new wxBoxSizer(wxVERTICAL);
sizerRight->Add(search_sizer);
sizerRight->AddSpacer(5);
sizerRight->Add(dump_sizer);
sizerRight->Add(sizerSearchType);
sizerRight->Add(sizerDataTypes);
+ sizerRight->Add(sizerMemCheckOptions);
wxBoxSizer* const sizerBig = new wxBoxSizer(wxHORIZONTAL);
sizerBig->Add(memview, 20, wxEXPAND);
@@ -118,6 +134,7 @@ CMemoryWindow::CMemoryWindow(CCodeWindow* code_window, wxWindow* parent, wxWindo
SetSizer(sizerBig);
chkHex->SetValue(1); // Set defaults
chk8->SetValue(1);
+ chkLog->SetValue(1);
sizerRight->Fit(this);
sizerBig->Fit(this);
@@ -450,3 +467,11 @@ void CMemoryWindow::onHex(wxCommandEvent& event)
{
chkAscii->SetValue(0);
}
+
+void CMemoryWindow::onMemCheckOptionChange(wxCommandEvent& event)
+{
+ if (rdbReadWrite->GetValue())
+ memview->SetMemCheckOptions(true, true, chkLog->GetValue());
+ else
+ memview->SetMemCheckOptions(rdbRead->GetValue(), rdbWrite->GetValue(), chkLog->GetValue());
+}
diff --git a/Source/Core/DolphinWX/Debugger/MemoryWindow.h b/Source/Core/DolphinWX/Debugger/MemoryWindow.h
index 3eca29e613..f9ff2ca285 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryWindow.h
+++ b/Source/Core/DolphinWX/Debugger/MemoryWindow.h
@@ -15,6 +15,7 @@ class wxCheckBox;
class wxListBox;
class wxSearchCtrl;
class wxTextCtrl;
+class wxRadioButton;
class CMemoryWindow : public wxPanel
{
@@ -48,6 +49,7 @@ private:
void OnDumpMemory(wxCommandEvent& event);
void OnDumpMem2(wxCommandEvent& event);
void OnDumpFakeVMEM(wxCommandEvent& event);
+ void onMemCheckOptionChange(wxCommandEvent& event);
wxCheckBox* chk8;
wxCheckBox* chk16;
@@ -55,6 +57,10 @@ private:
wxButton* btnSearch;
wxCheckBox* chkAscii;
wxCheckBox* chkHex;
+ wxCheckBox* chkLog;
+ wxRadioButton* rdbRead;
+ wxRadioButton* rdbWrite;
+ wxRadioButton* rdbReadWrite;
CCodeWindow* m_code_window;