mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Finally hacked Super Monkey Ball into submission! Some bonus hacking tools included.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@282 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -16,13 +16,18 @@
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
#include "Debugger.h"
|
||||
#include "Debugger/PPCDebugInterface.h"
|
||||
#include "Debugger/Debugger_SymbolMap.h"
|
||||
#include "Common.h"
|
||||
#include "StringUtil.h"
|
||||
|
||||
#include "Host.h"
|
||||
#include "CodeView.h"
|
||||
#include "JitWindow.h"
|
||||
|
||||
#include <wx/event.h>
|
||||
#include <wx/clipbrd.h>
|
||||
#include <wx/textdlg.h>
|
||||
|
||||
|
||||
enum
|
||||
@ -34,6 +39,9 @@ enum
|
||||
IDM_INSERTBLR,
|
||||
IDM_RUNTOHERE,
|
||||
IDM_JITRESULTS,
|
||||
IDM_RENAMESYMBOL,
|
||||
IDM_PATCHALERT,
|
||||
IDM_COPYFUNCTION,
|
||||
};
|
||||
|
||||
|
||||
@ -174,6 +182,22 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
|
||||
wxTheClipboard->SetData(new wxTextDataObject(wxString::FromAscii(temp)));
|
||||
}
|
||||
break;
|
||||
case IDM_COPYFUNCTION:
|
||||
{
|
||||
int sel = Debugger::FindSymbol(selection);
|
||||
if (sel > 0) {
|
||||
std::string text;
|
||||
text = text + Debugger::GetSymbol(sel).GetName() + "\r\n";
|
||||
// we got a function
|
||||
u32 start = Debugger::GetSymbol(sel).vaddress;
|
||||
u32 end = start + Debugger::GetSymbol(sel).size;
|
||||
for (u32 addr = start; addr != end; addr += 4) {
|
||||
text = text + StringFromFormat("%08x: ", addr) + debugger->disasm(addr) + "\r\n";
|
||||
}
|
||||
wxTheClipboard->SetData(new wxTextDataObject(wxString::FromAscii(text.c_str())));
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case IDM_RUNTOHERE:
|
||||
@ -190,6 +214,26 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
|
||||
case IDM_JITRESULTS:
|
||||
CJitWindow::ViewAddr(selection);
|
||||
break;
|
||||
|
||||
case IDM_RENAMESYMBOL:
|
||||
{
|
||||
int sel = Debugger::FindSymbol(selection);
|
||||
if (sel > 0) {
|
||||
wxTextEntryDialog input_symbol(this, "Rename symbol:", wxGetTextFromUserPromptStr, Debugger::GetSymbol(sel).GetName().c_str());
|
||||
if (input_symbol.ShowModal() == wxID_OK) {
|
||||
Debugger::AccessSymbol(sel).SetName(input_symbol.GetValue().c_str());
|
||||
}
|
||||
// redraw();
|
||||
Host_NotifyMapLoaded();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case IDM_PATCHALERT:
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#if wxUSE_CLIPBOARD
|
||||
@ -206,12 +250,17 @@ void CCodeView::OnMouseUpR(wxMouseEvent& event)
|
||||
//menu.Append(IDM_GOTOINMEMVIEW, "&Goto in mem view");
|
||||
#if wxUSE_CLIPBOARD
|
||||
menu.Append(IDM_COPYADDRESS, wxString::FromAscii("Copy &address"));
|
||||
menu.Append(IDM_COPYCODE, wxString::FromAscii("Copy &code"));
|
||||
menu.Append(IDM_COPYFUNCTION, wxString::FromAscii("Copy &function"));
|
||||
menu.Append(IDM_COPYCODE, wxString::FromAscii("Copy &code line"));
|
||||
menu.Append(IDM_COPYHEX, wxString::FromAscii("Copy &hex"));
|
||||
menu.AppendSeparator();
|
||||
#endif
|
||||
menu.Append(IDM_RENAMESYMBOL, wxString::FromAscii("Rename &symbol"));
|
||||
menu.AppendSeparator();
|
||||
menu.Append(IDM_RUNTOHERE, _T("&Run To Here"));
|
||||
menu.Append(IDM_INSERTBLR, wxString::FromAscii("Insert &blr"));
|
||||
menu.Append(IDM_JITRESULTS, wxString::FromAscii("PPC vs X86"));
|
||||
menu.Append(IDM_INSERTBLR, wxString::FromAscii("Insert &blr"));
|
||||
menu.Append(IDM_PATCHALERT, wxString::FromAscii("Patch alert"));
|
||||
PopupMenu(&menu);
|
||||
event.Skip(true);
|
||||
}
|
||||
|
@ -17,9 +17,9 @@
|
||||
|
||||
#include "wx/button.h"
|
||||
#include "wx/textctrl.h"
|
||||
#include "wx/textdlg.h"
|
||||
#include "wx/listctrl.h"
|
||||
#include "wx/thread.h"
|
||||
#include "wx/listctrl.h"
|
||||
#include "wx/mstream.h"
|
||||
|
||||
// ugly that this lib included code from the main
|
||||
@ -39,7 +39,9 @@
|
||||
#include "CodeWindow.h"
|
||||
#include "CodeView.h"
|
||||
|
||||
#include "FileUtil.h"
|
||||
#include "Core.h"
|
||||
#include "Boot/Boot.h"
|
||||
#include "LogManager.h"
|
||||
#include "HW/CPU.h"
|
||||
#include "PowerPC/PowerPC.h"
|
||||
@ -241,7 +243,9 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParam
|
||||
|
||||
{
|
||||
wxMenu *pSymbolsMenu = new wxMenu;
|
||||
pSymbolsMenu->Append(IDM_SCANFUNCTIONS, _T("&Scan for functions"));
|
||||
pSymbolsMenu->Append(IDM_SCANFUNCTIONS, _T("&Load symbol map"));
|
||||
pSymbolsMenu->Append(IDM_SAVEMAPFILE, _T("&Save symbol map"));
|
||||
pSymbolsMenu->Append(IDM_RENAMEFUNCTION, _T("&Rename function..."));
|
||||
pMenuBar->Append(pSymbolsMenu, _T("&Symbols"));
|
||||
}
|
||||
|
||||
@ -293,50 +297,27 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event)
|
||||
// TODO: disable menu items instead :P
|
||||
return;
|
||||
}
|
||||
wxString path;
|
||||
std::string mapfile = CBoot::GenerateMapFilename();
|
||||
switch (event.GetId())
|
||||
{
|
||||
case IDM_SCANFUNCTIONS:
|
||||
PPCAnalyst::FindFunctions(0x80003100, 0x80400000);
|
||||
PPCAnalyst::LoadFuncDB("Data/totaldb.dsy");
|
||||
Debugger::GetFromAnalyzer();
|
||||
NotifyMapLoaded();
|
||||
break;
|
||||
case IDM_LOADMAPFILE:
|
||||
path = wxFileSelector(
|
||||
_T("Select the mapfile to load"),
|
||||
wxEmptyString, wxEmptyString, wxEmptyString,
|
||||
wxString::Format
|
||||
(
|
||||
_T("Map files (*.map)|*.map|All files (%s)|%s"),
|
||||
wxFileSelectorDefaultWildcardStr,
|
||||
wxFileSelectorDefaultWildcardStr
|
||||
),
|
||||
wxFD_OPEN | wxFD_FILE_MUST_EXIST,
|
||||
this);
|
||||
if (!path)
|
||||
if (!File::Exists(mapfile))
|
||||
{
|
||||
return;
|
||||
PPCAnalyst::FindFunctions(0x80003100, 0x80400000);
|
||||
if (PPCAnalyst::LoadFuncDB("Data/totaldb.dsy"))
|
||||
{
|
||||
Debugger::GetFromAnalyzer();
|
||||
NotifyMapLoaded();
|
||||
}
|
||||
} else {
|
||||
Debugger::LoadSymbolMap(mapfile.c_str());
|
||||
}
|
||||
Debugger::LoadSymbolMap(path.ToAscii());
|
||||
break;
|
||||
// case IDM_LOADMAPFILE:
|
||||
// Debugger::LoadSymbolMap(mapfile.c_str());
|
||||
// break;
|
||||
case IDM_SAVEMAPFILE:
|
||||
path = wxFileSelector(
|
||||
_T("Name your mapfile"),
|
||||
wxEmptyString, wxEmptyString, wxEmptyString,
|
||||
wxString::Format
|
||||
(
|
||||
_T("Map files (*.map)|*.map|All files (%s)|%s"),
|
||||
wxFileSelectorDefaultWildcardStr,
|
||||
wxFileSelectorDefaultWildcardStr
|
||||
),
|
||||
wxFD_SAVE,
|
||||
this);
|
||||
if (!path)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Debugger::SaveSymbolMap(path.ToAscii());
|
||||
Debugger::SaveSymbolMap(mapfile.c_str());
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -362,7 +343,7 @@ void CCodeWindow::OnCodeStep(wxCommandEvent& event)
|
||||
|
||||
Update();
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case IDM_STEP:
|
||||
SingleCPUStep();
|
||||
|
@ -83,6 +83,7 @@ class CCodeWindow
|
||||
IDM_LOGINSTRUCTIONS,
|
||||
IDM_LOADMAPFILE,
|
||||
IDM_SAVEMAPFILE,
|
||||
IDM_RENAMEFUNCTION,
|
||||
IDM_CLEARCODECACHE,
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user