summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorhrydgard <hrydgard@gmail.com>2009-06-17 19:50:59 +0000
committerhrydgard <hrydgard@gmail.com>2009-06-17 19:50:59 +0000
commit51cbdea782705f22053f6b15b2bcc4e99be305fb (patch)
treebdfb4e6095bf2cb97c78b75c7f4a6406755db154 /Source/Core
parent9d9ce4274b571170b66dee06c583f896cd165c4e (diff)
MemoryView can now view ARAM (rightclick -> toggle memory). Add "search for instruction" capability to debugger. Code cleanup, log zelda pb type (9 all the time in Zelda Four Swords)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3479 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/Debugger/DebugInterface.h3
-rw-r--r--Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp25
-rw-r--r--Source/Core/Core/Src/Debugger/PPCDebugInterface.h7
-rw-r--r--Source/Core/Core/Src/HW/DSP.cpp1
-rw-r--r--Source/Core/Core/Src/HW/StreamADPCM.cpp7
-rw-r--r--Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp5
-rw-r--r--Source/Core/Core/Src/PowerPC/PPCTables.cpp12
-rw-r--r--Source/Core/Core/Src/PowerPC/PPCTables.h3
-rw-r--r--Source/Core/DebuggerWX/Src/CodeView.cpp2
-rw-r--r--Source/Core/DebuggerWX/Src/CodeWindow.cpp14
-rw-r--r--Source/Core/DebuggerWX/Src/CodeWindow.h1
-rw-r--r--Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp1
-rw-r--r--Source/Core/DebuggerWX/Src/MemoryView.cpp20
-rw-r--r--Source/Core/DebuggerWX/Src/MemoryView.h88
-rw-r--r--Source/Core/DebuggerWX/Src/MemoryWindow.cpp25
15 files changed, 124 insertions, 90 deletions
diff --git a/Source/Core/Core/Src/Debugger/DebugInterface.h b/Source/Core/Core/Src/Debugger/DebugInterface.h
index 0cf8ca746e..574d41ffbe 100644
--- a/Source/Core/Core/Src/Debugger/DebugInterface.h
+++ b/Source/Core/Core/Src/Debugger/DebugInterface.h
@@ -11,7 +11,7 @@ protected:
public:
virtual void disasm(unsigned int /*address*/, char *dest, int /*max_size*/) {strcpy(dest, "NODEBUGGER");}
- virtual void getRawMemoryString(unsigned int /*address*/, char *dest, int /*max_size*/) {strcpy(dest, "NODEBUGGER");}
+ virtual void getRawMemoryString(int memory, unsigned int /*address*/, char *dest, int /*max_size*/) {strcpy(dest, "NODEBUGGER");}
virtual int getInstructionSize(int /*instruction*/) {return 1;}
virtual bool isAlive() {return true;}
virtual bool isBreakpoint(unsigned int /*address*/) {return false;}
@@ -20,6 +20,7 @@ public:
virtual void clearAllBreakpoints() {}
virtual void toggleBreakpoint(unsigned int /*address*/){}
virtual unsigned int readMemory(unsigned int /*address*/){return 0;}
+ virtual unsigned int readExtraMemory(int memory, unsigned int address){return 0;}
virtual unsigned int readInstruction(unsigned int /*address*/){return 0;}
virtual unsigned int getPC() {return 0;}
virtual void setPC(unsigned int /*address*/) {}
diff --git a/Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp b/Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp
index 934da93158..9919a1307a 100644
--- a/Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp
+++ b/Source/Core/Core/Src/Debugger/PPCDebugInterface.cpp
@@ -21,6 +21,7 @@
#include "PPCDebugInterface.h"
#include "PowerPCDisasm.h"
#include "../Core.h"
+#include "../HW/DSP.h"
#include "../HW/Memmap.h"
#include "../PowerPC/PowerPC.h"
#include "../PowerPC/Jit64/Jit.h"
@@ -51,17 +52,17 @@ void PPCDebugInterface::disasm(unsigned int address, char *dest, int max_size)
}
}
-void PPCDebugInterface::getRawMemoryString(unsigned int address, char *dest, int max_size)
+void PPCDebugInterface::getRawMemoryString(int memory, unsigned int address, char *dest, int max_size)
{
if (Core::GetState() != Core::CORE_UNINITIALIZED)
{
- if (Memory::IsRAMAddress(address, true))
+ if (memory || Memory::IsRAMAddress(address, true))
{
- snprintf(dest, max_size, "%08X", readMemory(address));
+ snprintf(dest, max_size, "%08X%s", readExtraMemory(memory, address), memory ? " (ARAM)" : "");
}
else
{
- strcpy(dest, "--------");
+ strcpy(dest, memory ? "--ARAM--" : "--------");
}
}
else
@@ -75,6 +76,22 @@ unsigned int PPCDebugInterface::readMemory(unsigned int address)
return Memory::ReadUnchecked_U32(address);
}
+unsigned int PPCDebugInterface::readExtraMemory(int memory, unsigned int address)
+{
+ switch (memory)
+ {
+ case 0:
+ return Memory::ReadUnchecked_U32(address);
+ case 1:
+ return (DSP::ReadARAM(address) << 24) |
+ (DSP::ReadARAM(address + 1) << 16) |
+ (DSP::ReadARAM(address + 2) << 8) |
+ (DSP::ReadARAM(address + 3));
+ default:
+ return 0;
+ }
+}
+
unsigned int PPCDebugInterface::readInstruction(unsigned int address)
{
return Memory::Read_Instruction(address);
diff --git a/Source/Core/Core/Src/Debugger/PPCDebugInterface.h b/Source/Core/Core/Src/Debugger/PPCDebugInterface.h
index 70da7a703e..8e0ab21957 100644
--- a/Source/Core/Core/Src/Debugger/PPCDebugInterface.h
+++ b/Source/Core/Core/Src/Debugger/PPCDebugInterface.h
@@ -12,7 +12,7 @@ class PPCDebugInterface : public DebugInterface
public:
PPCDebugInterface(){}
virtual void disasm(unsigned int address, char *dest, int max_size);
- virtual void getRawMemoryString(unsigned int address, char *dest, int max_size);
+ virtual void getRawMemoryString(int memory, unsigned int address, char *dest, int max_size);
virtual int getInstructionSize(int instruction) {return 4;}
virtual bool isAlive();
virtual bool isBreakpoint(unsigned int address);
@@ -21,6 +21,11 @@ public:
virtual void clearAllBreakpoints();
virtual void toggleBreakpoint(unsigned int address);
virtual unsigned int readMemory(unsigned int address);
+
+ enum {
+ EXTRAMEM_ARAM = 1,
+ };
+ virtual unsigned int readExtraMemory(int memory, unsigned int address);
virtual unsigned int readInstruction(unsigned int address);
virtual unsigned int getPC();
virtual void setPC(unsigned int address);
diff --git a/Source/Core/Core/Src/HW/DSP.cpp b/Source/Core/Core/Src/HW/DSP.cpp
index acd13dd662..de0c6db11a 100644
--- a/Source/Core/Core/Src/HW/DSP.cpp
+++ b/Source/Core/Core/Src/HW/DSP.cpp
@@ -474,6 +474,7 @@ void UpdateAudioDMA()
// Latch new parameters
g_audioDMA.BlocksLeft = g_audioDMA.AudioDMAControl.NumBlocks;
g_audioDMA.ReadAddress = g_audioDMA.SourceAddress;
+ DEBUG_LOG(DSPLLE, "ADMA read addresses: %08x", g_audioDMA.ReadAddress);
GenerateDSPInterrupt(DSP::INT_AID);
}
} else {
diff --git a/Source/Core/Core/Src/HW/StreamADPCM.cpp b/Source/Core/Core/Src/HW/StreamADPCM.cpp
index b5f0c1f0cd..57526905a3 100644
--- a/Source/Core/Core/Src/HW/StreamADPCM.cpp
+++ b/Source/Core/Core/Src/HW/StreamADPCM.cpp
@@ -11,11 +11,12 @@ static int histl2;
static int histr1;
static int histr2;
-short ADPDecodeSample(int bits, int q, int *hist1p, int *hist2p) {
- int hist, cur;
+short ADPDecodeSample(int bits, int q, int *hist1p, int *hist2p)
+{
const int hist1 = *hist1p;
const int hist2 = *hist2p;
+ int hist;
switch (q >> 4)
{
case 0:
@@ -35,7 +36,7 @@ short ADPDecodeSample(int bits, int q, int *hist1p, int *hist2p) {
if (hist > 0x1fffff) hist = 0x1fffff;
if (hist < -0x200000) hist = -0x200000;
- cur = (((short)(bits << 12) >> (q & 0xf)) << 6) + hist;
+ int cur = (((short)(bits << 12) >> (q & 0xf)) << 6) + hist;
*hist2p = *hist1p;
*hist1p = cur;
diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp
index fdcb2bb1d7..d74088193a 100644
--- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp
+++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Paired.cpp
@@ -108,7 +108,6 @@ void ps_div(UGeckoInstruction _inst)
{
rPS0(_inst.FD) = static_cast<float>(rPS0(_inst.FA) / rPS0(_inst.FB));
rPS1(_inst.FD) = static_cast<float>(rPS1(_inst.FA) / rPS1(_inst.FB));
- FPSCR.FI = 0;
if (fabs(rPS0(_inst.FB)) == 0.0) {
FPSCR.ZX = 1;
}
@@ -119,12 +118,14 @@ void ps_res(UGeckoInstruction _inst)
{
rPS0(_inst.FD) = 1.0f / static_cast<float>(rPS0(_inst.FB));
rPS1(_inst.FD) = 1.0f / static_cast<float>(rPS1(_inst.FB));
+ if (fabs(rPS0(_inst.FB)) == 0.0) {
+ FPSCR.ZX = 1;
+ }
if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD));
}
void ps_rsqrte(UGeckoInstruction _inst)
{
- // PanicAlert("ps_rsqrte");
rPS0(_inst.FD) = static_cast<double>(1.0f / sqrtf((float)rPS0(_inst.FB)));
rPS1(_inst.FD) = static_cast<double>(1.0f / sqrtf((float)rPS1(_inst.FB)));
if (fabs(rPS0(_inst.FB)) == 0.0) {
diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.cpp b/Source/Core/Core/Src/PowerPC/PPCTables.cpp
index 76690f783f..798cc35147 100644
--- a/Source/Core/Core/Src/PowerPC/PPCTables.cpp
+++ b/Source/Core/Core/Src/PowerPC/PPCTables.cpp
@@ -687,7 +687,7 @@ void InitTables()
}
#define OPLOG
-#define OP_TO_LOG "mffs"
+#define OP_TO_LOG "mtfsb0x"
#ifdef OPLOG
namespace {
@@ -695,6 +695,12 @@ namespace {
}
#endif
+const char *GetInstructionName(UGeckoInstruction _inst)
+{
+ const GekkoOPInfo *info = GetOpInfo(_inst);
+ return info ? info->opname : 0;
+}
+
void CompileInstruction(UGeckoInstruction _inst)
{
(jit.*dynaOpTable[_inst.OPCD])(_inst);
@@ -712,9 +718,9 @@ void CompileInstruction(UGeckoInstruction _inst)
}
}
-bool IsValidInstruction(UGeckoInstruction _instCode)
+bool IsValidInstruction(UGeckoInstruction _inst)
{
- const GekkoOPInfo *info = GetOpInfo(_instCode);
+ const GekkoOPInfo *info = GetOpInfo(_inst);
return info != 0;
}
diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.h b/Source/Core/Core/Src/PowerPC/PPCTables.h
index c9df44c8b0..1c71d44575 100644
--- a/Source/Core/Core/Src/PowerPC/PPCTables.h
+++ b/Source/Core/Core/Src/PowerPC/PPCTables.h
@@ -102,8 +102,6 @@ class Jit64;
namespace PPCTables
{
-
-
typedef void (Jit64::*_recompilerInstruction) (UGeckoInstruction instCode);
typedef void (*_interpreterInstruction)(UGeckoInstruction instCode);
@@ -115,6 +113,7 @@ void CountInstruction(UGeckoInstruction _inst);
void PrintInstructionRunCounts();
void LogCompiledInstructions();
void CompileInstruction(UGeckoInstruction _inst);
+const char *GetInstructionName(UGeckoInstruction _inst);
} // namespace
diff --git a/Source/Core/DebuggerWX/Src/CodeView.cpp b/Source/Core/DebuggerWX/Src/CodeView.cpp
index c958e30f56..bcd953102d 100644
--- a/Source/Core/DebuggerWX/Src/CodeView.cpp
+++ b/Source/Core/DebuggerWX/Src/CodeView.cpp
@@ -283,9 +283,11 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
// Insert blr or restore old value
case IDM_INSERTBLR:
InsertBlrNop(0);
+ redraw();
break;
case IDM_INSERTNOP:
InsertBlrNop(1);
+ redraw();
break;
case IDM_JITRESULTS:
diff --git a/Source/Core/DebuggerWX/Src/CodeWindow.cpp b/Source/Core/DebuggerWX/Src/CodeWindow.cpp
index 60b46928c7..aef91973d4 100644
--- a/Source/Core/DebuggerWX/Src/CodeWindow.cpp
+++ b/Source/Core/DebuggerWX/Src/CodeWindow.cpp
@@ -46,6 +46,7 @@
#include "FileUtil.h"
#include "Core.h"
+#include "HW/Memmap.h"
#include "HLE/HLE.h"
#include "Boot/Boot.h"
#include "LogManager.h"
@@ -140,6 +141,7 @@ BEGIN_EVENT_TABLE(CCodeWindow, wxFrame)
EVT_MENU(IDM_CLEARCODECACHE, CCodeWindow::OnJitMenu)
EVT_MENU(IDM_LOGINSTRUCTIONS, CCodeWindow::OnJitMenu)
+ EVT_MENU(IDM_SEARCHINSTRUCTION, CCodeWindow::OnJitMenu)
EVT_MENU(IDM_PROFILEBLOCKS, CCodeWindow::OnProfilerMenu)
EVT_MENU(IDM_WRITEPROFILE, CCodeWindow::OnProfilerMenu)
@@ -656,6 +658,18 @@ void CCodeWindow::OnJitMenu(wxCommandEvent& event)
case IDM_CLEARCODECACHE:
jit.ClearCache(); break;
+
+ case IDM_SEARCHINSTRUCTION:
+ {
+ wxString str;
+ str = wxGetTextFromUser("", "Op?", wxEmptyString, this);
+ for (u32 addr = 0x80000000; addr < 0x80100000; addr += 4) {
+ const char *name = PPCTables::GetInstructionName(Memory::ReadUnchecked_U32(addr));
+ if (name && !strcmp(str.c_str(), name))
+ NOTICE_LOG(POWERPC, "Found %s at %08x", str.c_str(), addr);
+ }
+ break;
+ }
}
}
// =====================================
diff --git a/Source/Core/DebuggerWX/Src/CodeWindow.h b/Source/Core/DebuggerWX/Src/CodeWindow.h
index 2ab3436855..469c45cab4 100644
--- a/Source/Core/DebuggerWX/Src/CodeWindow.h
+++ b/Source/Core/DebuggerWX/Src/CodeWindow.h
@@ -106,6 +106,7 @@ class CCodeWindow
// JIT
IDM_CLEARCODECACHE,
IDM_LOGINSTRUCTIONS,
+ IDM_SEARCHINSTRUCTION,
// Profiler
IDM_PROFILEBLOCKS,
diff --git a/Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp b/Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp
index 30b07268f6..f8bd2274a1 100644
--- a/Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp
+++ b/Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp
@@ -110,6 +110,7 @@ void CCodeWindow::CreateSymbolsMenu()
wxMenu *pJitMenu = new wxMenu;
pJitMenu->Append(IDM_CLEARCODECACHE, _T("&Clear code cache"));
pJitMenu->Append(IDM_LOGINSTRUCTIONS, _T("&Log JIT instruction coverage"));
+ pJitMenu->Append(IDM_SEARCHINSTRUCTION, _T("&Search for an op"));
pMenuBar->Append(pJitMenu, _T("&JIT"));
wxMenu *pProfilerMenu = new wxMenu;
diff --git a/Source/Core/DebuggerWX/Src/MemoryView.cpp b/Source/Core/DebuggerWX/Src/MemoryView.cpp
index 2509e3a836..0a3d2193cd 100644
--- a/Source/Core/DebuggerWX/Src/MemoryView.cpp
+++ b/Source/Core/DebuggerWX/Src/MemoryView.cpp
@@ -31,6 +31,7 @@ enum
IDM_COPYCODE,
IDM_RUNTOHERE,
IDM_DYNARECRESULTS,
+ IDM_TOGGLEMEMORY,
};
@@ -54,7 +55,8 @@ CMemoryView::CMemoryView(DebugInterface* debuginterface, wxWindow* parent, wxWin
selectionChanged(false),
selecting(false),
hasFocus(false),
- showHex(false)
+ showHex(false),
+ memory(0)
{
rowHeight = 13;
align = debuginterface->getInstructionSize(0);
@@ -169,10 +171,15 @@ void CMemoryView::OnPopupMenu(wxCommandEvent& event)
case IDM_COPYHEX:
{
char temp[24];
- sprintf(temp, "%08x", debugger->readMemory(selection));
+ sprintf(temp, "%08x", debugger->readExtraMemory(memory, selection));
wxTheClipboard->SetData(new wxTextDataObject(wxString::FromAscii(temp)));
}
- break;
+ break;
+
+ case IDM_TOGGLEMEMORY:
+ memory ^= 1;
+ redraw();
+ break;
#endif
}
@@ -192,6 +199,7 @@ void CMemoryView::OnMouseUpR(wxMouseEvent& event)
menu.Append(IDM_COPYADDRESS, wxString::FromAscii("Copy &address"));
menu.Append(IDM_COPYHEX, wxString::FromAscii("Copy &hex"));
#endif
+ menu.Append(IDM_TOGGLEMEMORY, wxString::FromAscii("Toggle &memory (RAM/ARAM)"));
PopupMenu(&menu);
event.Skip(true);
}
@@ -276,7 +284,7 @@ void CMemoryView::OnPaint(wxPaintEvent& event)
dc.SetTextForeground(_T("#600000"));
dc.DrawText(temp, 17, rowY1);
char mem[256];
- debugger->getRawMemoryString(address, mem, 256);
+ debugger->getRawMemoryString(memory, address, mem, 256);
dc.SetTextForeground(_T("#000080"));
dc.DrawText(wxString::FromAscii(mem), 17+fontSize*(8), rowY1);
dc.SetTextForeground(_T("#000000"));
@@ -284,12 +292,12 @@ void CMemoryView::OnPaint(wxPaintEvent& event)
if (debugger->isAlive())
{
char dis[256] = {0};
- u32 mem = debugger->readMemory(address);
+ u32 mem = debugger->readExtraMemory(memory, address);
float flt = *(float *)(&mem);
sprintf(dis, "f: %f", flt);
char desc[256] = "";
- dc.DrawText(wxString::FromAscii(dis), 17 + fontSize*(8 + 8), rowY1);
+ dc.DrawText(wxString::FromAscii(dis), 77 + fontSize*(8 + 8), rowY1);
if (desc[0] == 0)
{
diff --git a/Source/Core/DebuggerWX/Src/MemoryView.h b/Source/Core/DebuggerWX/Src/MemoryView.h
index 6463f9b1af..1d42c821c9 100644
--- a/Source/Core/DebuggerWX/Src/MemoryView.h
+++ b/Source/Core/DebuggerWX/Src/MemoryView.h
@@ -22,55 +22,47 @@
#include "Common.h"
#include "Debugger/DebugInterface.h"
-
-class CMemoryView
- : public wxControl
+class CMemoryView : public wxControl
{
- public:
-
- CMemoryView(DebugInterface* debuginterface, wxWindow* parent, wxWindowID Id = -1, const wxSize& Size = wxDefaultSize);
- wxSize DoGetBestSize() const;
- void OnPaint(wxPaintEvent& event);
- void OnErase(wxEraseEvent& event);
- void OnMouseDown(wxMouseEvent& event);
- void OnMouseMove(wxMouseEvent& event);
- void OnMouseUpL(wxMouseEvent& event);
- void OnMouseUpR(wxMouseEvent& event);
- void OnPopupMenu(wxCommandEvent& event);
-
-
- u32 GetSelection() {return(selection);}
-
-
- void Center(u32 addr)
- {
- curAddress = addr;
- redraw();
- }
-
-
- private:
-
- int YToAddress(int y);
-
-
- void redraw() {Refresh();}
-
-
- DebugInterface* debugger;
-
- int curAddress;
- int align;
- int rowHeight;
-
- u32 selection;
- u32 oldSelection;
- bool selectionChanged;
- bool selecting;
- bool hasFocus;
- bool showHex;
-
- DECLARE_EVENT_TABLE()
+public:
+ CMemoryView(DebugInterface* debuginterface, wxWindow* parent, wxWindowID Id = -1, const wxSize& Size = wxDefaultSize);
+ wxSize DoGetBestSize() const;
+ void OnPaint(wxPaintEvent& event);
+ void OnErase(wxEraseEvent& event);
+ void OnMouseDown(wxMouseEvent& event);
+ void OnMouseMove(wxMouseEvent& event);
+ void OnMouseUpL(wxMouseEvent& event);
+ void OnMouseUpR(wxMouseEvent& event);
+ void OnPopupMenu(wxCommandEvent& event);
+
+ u32 GetSelection() {return(selection);}
+
+ void Center(u32 addr)
+ {
+ curAddress = addr;
+ redraw();
+ }
+
+private:
+ int YToAddress(int y);
+ void redraw() {Refresh();}
+
+ DebugInterface* debugger;
+
+ int curAddress;
+ int align;
+ int rowHeight;
+
+ u32 selection;
+ u32 oldSelection;
+ bool selectionChanged;
+ bool selecting;
+ bool hasFocus;
+ bool showHex;
+
+ int memory;
+
+ DECLARE_EVENT_TABLE()
};
#endif /*MEMORYVIEW_H_*/
diff --git a/Source/Core/DebuggerWX/Src/MemoryWindow.cpp b/Source/Core/DebuggerWX/Src/MemoryWindow.cpp
index 0f9375fb6f..fd9711137d 100644
--- a/Source/Core/DebuggerWX/Src/MemoryWindow.cpp
+++ b/Source/Core/DebuggerWX/Src/MemoryWindow.cpp
@@ -42,24 +42,11 @@
enum
{
- IDM_DEBUG_GO = 350,
- IDM_STEP,
- IDM_STEPOVER,
- IDM_SKIP,
- IDM_SETPC,
- IDM_GOTOPC,
- IDM_ADDRBOX,
- IDM_CALLSTACKLIST,
+ IDM_ADDRBOX = 350,
IDM_SYMBOLLIST,
- IDM_INTERPRETER,
- IDM_DUALCORE,
- IDM_LOGWINDOW,
- IDM_REGISTERWINDOW,
- IDM_BREAKPOINTWINDOW,
- IDM_VALBOX,
IDM_SETVALBUTTON,
IDM_DUMP_MEMORY,
-
+ IDM_VALBOX,
};
BEGIN_EVENT_TABLE(CMemoryWindow, wxFrame)
@@ -70,7 +57,6 @@ BEGIN_EVENT_TABLE(CMemoryWindow, wxFrame)
EVT_BUTTON(IDM_DUMP_MEMORY, CMemoryWindow::OnDumpMemory)
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)
@@ -87,9 +73,7 @@ CMemoryWindow::CMemoryWindow(wxWindow* parent, wxWindowID id,
//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")));
@@ -162,14 +146,15 @@ void CMemoryWindow::SetMemoryValue(wxCommandEvent& event)
Memory::Write_U32(val, addr);
memview->Refresh();
}
+
void CMemoryWindow::OnAddrBoxChange(wxCommandEvent& event)
{
wxString txt = addrbox->GetValue();
- if (txt.size() == 8)
+ if (txt.size())
{
u32 addr;
sscanf(txt.mb_str(), "%08x", &addr);
- memview->Center(addr);
+ memview->Center(addr & ~3);
}
event.Skip(1);