summaryrefslogtreecommitdiff
path: root/Source/Core/DebuggerWX/Src/MemoryWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DebuggerWX/Src/MemoryWindow.cpp')
-rw-r--r--Source/Core/DebuggerWX/Src/MemoryWindow.cpp442
1 files changed, 221 insertions, 221 deletions
diff --git a/Source/Core/DebuggerWX/Src/MemoryWindow.cpp b/Source/Core/DebuggerWX/Src/MemoryWindow.cpp
index ccd563ae8b..c406bc1a84 100644
--- a/Source/Core/DebuggerWX/Src/MemoryWindow.cpp
+++ b/Source/Core/DebuggerWX/Src/MemoryWindow.cpp
@@ -1,221 +1,221 @@
-// Copyright (C) 2003-2008 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include "Debugger.h"
-
-#include "IniFile.h"
-
-#include <wx/button.h>
-#include <wx/textctrl.h>
-#include <wx/listctrl.h>
-#include <wx/thread.h>
-#include <wx/listctrl.h>
-#include "MemoryWindow.h"
-#include "HW/CPU.h"
-#include "PowerPC/PowerPC.h"
-#include "Host.h"
-
-#include "Debugger/PPCDebugInterface.h"
-#include "PowerPC/SymbolDB.h"
-
-#include "Core.h"
-#include "LogManager.h"
-
-#include "HW/Memmap.h"
-
-// ugly that this lib included code from the main
-#include "../../DolphinWX/Src/Globals.h"
-
-
-enum
-{
- IDM_DEBUG_GO = 350,
- IDM_STEP,
- IDM_STEPOVER,
- IDM_SKIP,
- IDM_SETPC,
- IDM_GOTOPC,
- IDM_ADDRBOX,
- IDM_CALLSTACKLIST,
- IDM_SYMBOLLIST,
- IDM_INTERPRETER,
- IDM_DUALCORE,
- IDM_LOGWINDOW,
- IDM_REGISTERWINDOW,
- IDM_BREAKPOINTWINDOW,
- IDM_VALBOX,
- IDM_SETVALBUTTON
-};
-
-BEGIN_EVENT_TABLE(CMemoryWindow, wxFrame)
- EVT_TEXT(IDM_ADDRBOX, CMemoryWindow::OnAddrBoxChange)
- EVT_LISTBOX(IDM_SYMBOLLIST, CMemoryWindow::OnSymbolListChange)
- EVT_HOST_COMMAND(wxID_ANY, CMemoryWindow::OnHostMessage)
- EVT_BUTTON(IDM_SETVALBUTTON, CMemoryWindow::SetMemoryValue)
-END_EVENT_TABLE()
-
-
-CMemoryWindow::CMemoryWindow(wxWindow* parent, wxWindowID id,
- const wxString& title, const wxPoint& pos, const wxSize& size, long style)
- : wxFrame(parent, id, title, pos, size, style)
-{
- wxBoxSizer* sizerBig = new wxBoxSizer(wxHORIZONTAL);
- wxBoxSizer* sizerRight = new wxBoxSizer(wxVERTICAL);
- // didn't see anything usefull in the left part
- //wxBoxSizer* sizerLeft = new wxBoxSizer(wxVERTICAL);
-
- DebugInterface* di = new PPCDebugInterface();
-
- //sizerLeft->Add(symbols = new wxListBox(this, IDM_SYMBOLLIST, wxDefaultPosition, wxSize(20, 100), 0, NULL, wxLB_SORT), 1, wxEXPAND);
- memview = new CMemoryView(di, this, wxID_ANY);
- //sizerBig->Add(sizerLeft, 1, wxEXPAND);
- sizerBig->Add(memview, 20, wxEXPAND);
- sizerBig->Add(sizerRight, 0, wxEXPAND | wxALL, 3);
- sizerRight->Add(buttonGo = new wxButton(this, IDM_DEBUG_GO, _T("&Go")));
- sizerRight->Add(addrbox = new wxTextCtrl(this, IDM_ADDRBOX, _T("")));
- sizerRight->Add(new wxButton(this, IDM_SETPC, _T("S&et PC")));
- sizerRight->Add(valbox = new wxTextCtrl(this, IDM_VALBOX, _T("")));
- sizerRight->Add(new wxButton(this, IDM_SETVALBUTTON, _T("Set &Value")));
-
- SetSizer(sizerBig);
-
- //sizerLeft->SetSizeHints(this);
- //sizerLeft->Fit(this);
- sizerRight->SetSizeHints(this);
- sizerRight->Fit(this);
- sizerBig->SetSizeHints(this);
- sizerBig->Fit(this);
-}
-
-
-CMemoryWindow::~CMemoryWindow()
-{
-}
-
-
-void CMemoryWindow::Save(IniFile& _IniFile) const
-{
- // Prevent these bad values that can happen after a crash or hanging
- if(GetPosition().x != -32000 && GetPosition().y != -32000)
- {
- _IniFile.Set("MemoryWindow", "x", GetPosition().x);
- _IniFile.Set("MemoryWindow", "y", GetPosition().y);
- _IniFile.Set("MemoryWindow", "w", GetSize().GetWidth());
- _IniFile.Set("MemoryWindow", "h", GetSize().GetHeight());
- }
-}
-
-
-void CMemoryWindow::Load(IniFile& _IniFile)
-{
- int x,y,w,h;
- _IniFile.Get("MemoryWindow", "x", &x, GetPosition().x);
- _IniFile.Get("MemoryWindow", "y", &y, GetPosition().y);
- _IniFile.Get("MemoryWindow", "w", &w, GetSize().GetWidth());
- _IniFile.Get("MemoryWindow", "h", &h, GetSize().GetHeight());
- SetSize(x, y, w, h);
-}
-
-
-void CMemoryWindow::JumpToAddress(u32 _Address)
-{
- memview->Center(_Address);
-}
-
-
-void CMemoryWindow::SetMemoryValue(wxCommandEvent& event)
-{
- std::string str_addr = std::string(addrbox->GetValue().mb_str());
- std::string str_val = std::string(valbox->GetValue().mb_str());
- u32 addr;
- u32 val;
-
- if (!TryParseUInt(std::string("0x") + str_addr, &addr)) {
- PanicAlert("Invalid Address: %s", str_addr.c_str());
- return;
- }
-
- if (!TryParseUInt(std::string("0x") + str_val, &val)) {
- PanicAlert("Invalid Value: %s", str_val.c_str());
- return;
- }
-
- Memory::Write_U32(val, addr);
- memview->Refresh();
-}
-void CMemoryWindow::OnAddrBoxChange(wxCommandEvent& event)
-{
- wxString txt = addrbox->GetValue();
- if (txt.size() == 8)
- {
- u32 addr;
- sscanf(txt.mb_str(), "%08x", &addr);
- memview->Center(addr);
- }
-
- event.Skip(1);
-}
-
-void CMemoryWindow::Update()
-{
- memview->Refresh();
- memview->Center(PC);
-}
-
-void CMemoryWindow::NotifyMapLoaded()
-{
- symbols->Show(false); // hide it for faster filling
- symbols->Clear();
- /*
-#ifdef _WIN32
- const FunctionDB::XFuncMap &syms = g_symbolDB.Symbols();
- for (FuntionDB::XFuncMap::iterator iter = syms.begin(); iter != syms.end(); ++iter)
- {
- int idx = symbols->Append(iter->second.name.c_str());
- symbols->SetClientData(idx, (void*)&iter->second);
- }
-
- //
-#endif
-*/
- symbols->Show(true);
- Update();
-}
-
-void CMemoryWindow::OnSymbolListChange(wxCommandEvent& event)
-{
- int index = symbols->GetSelection();
- if (index >= 0) {
- Symbol* pSymbol = static_cast<Symbol *>(symbols->GetClientData(index));
- if (pSymbol != NULL)
- {
- memview->Center(pSymbol->address);
- }
- }
-}
-
-void CMemoryWindow::OnHostMessage(wxCommandEvent& event)
-{
- switch (event.GetId())
- {
- case IDM_NOTIFYMAPLOADED:
- NotifyMapLoaded();
- break;
- }
-}
-
-
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#include "Debugger.h"
+
+#include "IniFile.h"
+
+#include <wx/button.h>
+#include <wx/textctrl.h>
+#include <wx/listctrl.h>
+#include <wx/thread.h>
+#include <wx/listctrl.h>
+#include "MemoryWindow.h"
+#include "HW/CPU.h"
+#include "PowerPC/PowerPC.h"
+#include "Host.h"
+
+#include "Debugger/PPCDebugInterface.h"
+#include "PowerPC/SymbolDB.h"
+
+#include "Core.h"
+#include "LogManager.h"
+
+#include "HW/Memmap.h"
+
+// ugly that this lib included code from the main
+#include "../../DolphinWX/Src/Globals.h"
+
+
+enum
+{
+ IDM_DEBUG_GO = 350,
+ IDM_STEP,
+ IDM_STEPOVER,
+ IDM_SKIP,
+ IDM_SETPC,
+ IDM_GOTOPC,
+ IDM_ADDRBOX,
+ IDM_CALLSTACKLIST,
+ IDM_SYMBOLLIST,
+ IDM_INTERPRETER,
+ IDM_DUALCORE,
+ IDM_LOGWINDOW,
+ IDM_REGISTERWINDOW,
+ IDM_BREAKPOINTWINDOW,
+ IDM_VALBOX,
+ IDM_SETVALBUTTON
+};
+
+BEGIN_EVENT_TABLE(CMemoryWindow, wxFrame)
+ EVT_TEXT(IDM_ADDRBOX, CMemoryWindow::OnAddrBoxChange)
+ EVT_LISTBOX(IDM_SYMBOLLIST, CMemoryWindow::OnSymbolListChange)
+ EVT_HOST_COMMAND(wxID_ANY, CMemoryWindow::OnHostMessage)
+ EVT_BUTTON(IDM_SETVALBUTTON, CMemoryWindow::SetMemoryValue)
+END_EVENT_TABLE()
+
+
+CMemoryWindow::CMemoryWindow(wxWindow* parent, wxWindowID id,
+ const wxString& title, const wxPoint& pos, const wxSize& size, long style)
+ : wxFrame(parent, id, title, pos, size, style)
+{
+ wxBoxSizer* sizerBig = new wxBoxSizer(wxHORIZONTAL);
+ wxBoxSizer* sizerRight = new wxBoxSizer(wxVERTICAL);
+ // didn't see anything usefull in the left part
+ //wxBoxSizer* sizerLeft = new wxBoxSizer(wxVERTICAL);
+
+ DebugInterface* di = new PPCDebugInterface();
+
+ //sizerLeft->Add(symbols = new wxListBox(this, IDM_SYMBOLLIST, wxDefaultPosition, wxSize(20, 100), 0, NULL, wxLB_SORT), 1, wxEXPAND);
+ memview = new CMemoryView(di, this, wxID_ANY);
+ //sizerBig->Add(sizerLeft, 1, wxEXPAND);
+ sizerBig->Add(memview, 20, wxEXPAND);
+ sizerBig->Add(sizerRight, 0, wxEXPAND | wxALL, 3);
+ sizerRight->Add(buttonGo = new wxButton(this, IDM_DEBUG_GO, _T("&Go")));
+ sizerRight->Add(addrbox = new wxTextCtrl(this, IDM_ADDRBOX, _T("")));
+ sizerRight->Add(new wxButton(this, IDM_SETPC, _T("S&et PC")));
+ sizerRight->Add(valbox = new wxTextCtrl(this, IDM_VALBOX, _T("")));
+ sizerRight->Add(new wxButton(this, IDM_SETVALBUTTON, _T("Set &Value")));
+
+ SetSizer(sizerBig);
+
+ //sizerLeft->SetSizeHints(this);
+ //sizerLeft->Fit(this);
+ sizerRight->SetSizeHints(this);
+ sizerRight->Fit(this);
+ sizerBig->SetSizeHints(this);
+ sizerBig->Fit(this);
+}
+
+
+CMemoryWindow::~CMemoryWindow()
+{
+}
+
+
+void CMemoryWindow::Save(IniFile& _IniFile) const
+{
+ // Prevent these bad values that can happen after a crash or hanging
+ if(GetPosition().x != -32000 && GetPosition().y != -32000)
+ {
+ _IniFile.Set("MemoryWindow", "x", GetPosition().x);
+ _IniFile.Set("MemoryWindow", "y", GetPosition().y);
+ _IniFile.Set("MemoryWindow", "w", GetSize().GetWidth());
+ _IniFile.Set("MemoryWindow", "h", GetSize().GetHeight());
+ }
+}
+
+
+void CMemoryWindow::Load(IniFile& _IniFile)
+{
+ int x,y,w,h;
+ _IniFile.Get("MemoryWindow", "x", &x, GetPosition().x);
+ _IniFile.Get("MemoryWindow", "y", &y, GetPosition().y);
+ _IniFile.Get("MemoryWindow", "w", &w, GetSize().GetWidth());
+ _IniFile.Get("MemoryWindow", "h", &h, GetSize().GetHeight());
+ SetSize(x, y, w, h);
+}
+
+
+void CMemoryWindow::JumpToAddress(u32 _Address)
+{
+ memview->Center(_Address);
+}
+
+
+void CMemoryWindow::SetMemoryValue(wxCommandEvent& event)
+{
+ std::string str_addr = std::string(addrbox->GetValue().mb_str());
+ std::string str_val = std::string(valbox->GetValue().mb_str());
+ u32 addr;
+ u32 val;
+
+ if (!TryParseUInt(std::string("0x") + str_addr, &addr)) {
+ PanicAlert("Invalid Address: %s", str_addr.c_str());
+ return;
+ }
+
+ if (!TryParseUInt(std::string("0x") + str_val, &val)) {
+ PanicAlert("Invalid Value: %s", str_val.c_str());
+ return;
+ }
+
+ Memory::Write_U32(val, addr);
+ memview->Refresh();
+}
+void CMemoryWindow::OnAddrBoxChange(wxCommandEvent& event)
+{
+ wxString txt = addrbox->GetValue();
+ if (txt.size() == 8)
+ {
+ u32 addr;
+ sscanf(txt.mb_str(), "%08x", &addr);
+ memview->Center(addr);
+ }
+
+ event.Skip(1);
+}
+
+void CMemoryWindow::Update()
+{
+ memview->Refresh();
+ memview->Center(PC);
+}
+
+void CMemoryWindow::NotifyMapLoaded()
+{
+ symbols->Show(false); // hide it for faster filling
+ symbols->Clear();
+ /*
+#ifdef _WIN32
+ const FunctionDB::XFuncMap &syms = g_symbolDB.Symbols();
+ for (FuntionDB::XFuncMap::iterator iter = syms.begin(); iter != syms.end(); ++iter)
+ {
+ int idx = symbols->Append(iter->second.name.c_str());
+ symbols->SetClientData(idx, (void*)&iter->second);
+ }
+
+ //
+#endif
+*/
+ symbols->Show(true);
+ Update();
+}
+
+void CMemoryWindow::OnSymbolListChange(wxCommandEvent& event)
+{
+ int index = symbols->GetSelection();
+ if (index >= 0) {
+ Symbol* pSymbol = static_cast<Symbol *>(symbols->GetClientData(index));
+ if (pSymbol != NULL)
+ {
+ memview->Center(pSymbol->address);
+ }
+ }
+}
+
+void CMemoryWindow::OnHostMessage(wxCommandEvent& event)
+{
+ switch (event.GetId())
+ {
+ case IDM_NOTIFYMAPLOADED:
+ NotifyMapLoaded();
+ break;
+ }
+}
+
+