diff options
| author | hrydgard <hrydgard@gmail.com> | 2009-01-20 19:15:33 +0000 |
|---|---|---|
| committer | hrydgard <hrydgard@gmail.com> | 2009-01-20 19:15:33 +0000 |
| commit | 8cdbaa27144516ee9093bee02198688aa246604f (patch) | |
| tree | 2bbc5be63509705bd732e81f80a17d9a8ef88d0a /Source/Core/DebuggerWX/Src/RegisterView.cpp | |
| parent | d3d4cc641c8df4a6067079bc84f3b4bf53eb1c53 (diff) | |
Improve register view window (now shows fp, various special regs). If the window is too small, delete the RegisterView section in your Debugger.ini.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1963 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DebuggerWX/Src/RegisterView.cpp')
| -rw-r--r-- | Source/Core/DebuggerWX/Src/RegisterView.cpp | 76 |
1 files changed, 61 insertions, 15 deletions
diff --git a/Source/Core/DebuggerWX/Src/RegisterView.cpp b/Source/Core/DebuggerWX/Src/RegisterView.cpp index e8293ba981..113bf0133e 100644 --- a/Source/Core/DebuggerWX/Src/RegisterView.cpp +++ b/Source/Core/DebuggerWX/Src/RegisterView.cpp @@ -19,21 +19,74 @@ #include "RegisterView.h" #include "PowerPC/PowerPC.h" -extern const char* GetGPRName(unsigned int index); +// F-zero 80005e60 wtf?? +extern const char* GetGPRName(unsigned int index); +extern const char* GetFPRName(unsigned int index); + +static const char *special_reg_names[] = { + "PC", "LR", "CTR", "CR", "FPSCR", "SRR0", "SRR1", +}; + +static u32 GetSpecialRegValue(int reg) { + switch (reg) { + case 0: return PowerPC::ppcState.pc; + case 1: return PowerPC::ppcState.spr[SPR_LR]; + case 2: return PowerPC::ppcState.spr[SPR_CTR]; + case 3: return GetCR(); + case 4: return PowerPC::ppcState.fpscr; + case 5: return PowerPC::ppcState.spr[SPR_SRR0]; + case 6: return PowerPC::ppcState.spr[SPR_SRR1]; + default: return 0; + } +} wxString CRegTable::GetValue(int row, int col) { - if (col % 2 == 0) - return wxString::FromAscii(GetGPRName(16*col/2 + row)); - else - return wxString::Format(wxT("0x%08x"), GPR(col == 1 ? row : 16 + row)); + if (row < 32) { + switch (col) { + case 0: return wxString::FromAscii(GetGPRName(row)); + case 1: return wxString::Format(wxT("0x%08x"), GPR(row)); + case 2: return wxString::FromAscii(GetFPRName(row)); + case 3: return wxString::Format(wxT("%f"), rPS0(row)); + case 4: return wxString::Format(wxT("%f"), rPS1(row)); + default: return wxString::FromAscii(""); + } + } else { + if (row - 32 < NUM_SPECIALS) { + switch (col) { + case 0: return wxString::FromAscii(special_reg_names[row - 32]); + case 1: return wxString::Format(wxT("0x%08x"), GetSpecialRegValue(row - 32)); + default: return wxString::FromAscii(""); + } + } + } + return wxString::FromAscii(""); } void CRegTable::SetValue(int, int, const wxString &) { } +void CRegTable::UpdateCachedRegs() +{ + for (int i = 0; i < 32; ++i) + { + m_CachedRegHasChanged[i] = (m_CachedRegs[i] != GPR(i)); + m_CachedRegs[i] = GPR(i); + + m_CachedFRegHasChanged[i][0] = (m_CachedFRegs[i][0] != rPS0(i)); + m_CachedFRegs[i][0] = rPS0(i); + m_CachedFRegHasChanged[i][1] = (m_CachedFRegs[i][1] != rPS1(i)); + m_CachedFRegs[i][1] = rPS1(i); + } + for (int i = 0; i < 6; ++i) + { + m_CachedSpecialRegHasChanged[i] = (m_CachedSpecialRegs[i] != GetSpecialRegValue(i)); + m_CachedSpecialRegs[i] = GetSpecialRegValue(i); + } +} + wxGridCellAttr *CRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind) { wxGridCellAttr *attr = new wxGridCellAttr(); @@ -42,17 +95,15 @@ wxGridCellAttr *CRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind) attr->SetFont(DefaultFont); attr->SetAlignment(col & 1 ? wxALIGN_CENTER : wxALIGN_LEFT, wxALIGN_CENTER); - if (col % 2 == 0) + if (col == 0) attr->SetTextColour(wxColour(wxT("#000000"))); else - attr->SetTextColour(((CRegisterView*)GetView())->m_CachedRegHasChanged[col == 1 ? row : 16 + row] - ? wxColor(wxT("#FF0000")) : wxColor(wxT("#000000"))); + attr->SetTextColour(m_CachedRegHasChanged[row] ? wxColor(wxT("#FF0000")) : wxColor(wxT("#000000"))); attr->IncRef(); return attr; } - CRegisterView::CRegisterView(wxWindow *parent, wxWindowID id) : wxGrid(parent, id) { @@ -68,10 +119,5 @@ CRegisterView::CRegisterView(wxWindow *parent, wxWindowID id) void CRegisterView::Update() { ForceRefresh(); - - for (size_t i = 0; i < 32; ++i) - { - m_CachedRegHasChanged[i] = (m_CachedRegs[i] != GPR(i)); - m_CachedRegs[i] = GPR(i); - } + ((CRegTable *)GetTable())->UpdateCachedRegs(); } |
