Merge pull request #1603 from shygoo/search-improvements

[Debugger] Improve the search tool
This commit is contained in:
zilmar 2019-04-04 09:37:08 +10:30 committed by GitHub
commit bfda4597da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 4361 additions and 777 deletions

View File

@ -100,6 +100,7 @@
<ClCompile Include="UserInterface\Debugger\Debugger-ViewMemory.cpp" />
<ClCompile Include="UserInterface\Debugger\Debugger.cpp" />
<ClCompile Include="UserInterface\Debugger\DMALog.cpp" />
<ClCompile Include="UserInterface\Debugger\MemoryScanner.cpp" />
<ClCompile Include="UserInterface\Debugger\ScriptHook.cpp" />
<ClCompile Include="UserInterface\Debugger\ScriptInstance.cpp" />
<ClCompile Include="UserInterface\Debugger\ScriptSystem.cpp" />
@ -165,6 +166,7 @@
<ClInclude Include="UserInterface\Debugger\debugger.h" />
<ClInclude Include="UserInterface\Debugger\DebuggerUI.h" />
<ClInclude Include="UserInterface\Debugger\DMALog.h" />
<ClInclude Include="UserInterface\Debugger\MemoryScanner.h" />
<ClInclude Include="UserInterface\Debugger\OpInfo.h" />
<ClInclude Include="UserInterface\Debugger\ScriptHook.h" />
<ClInclude Include="UserInterface\Debugger\ScriptInstance.h" />

View File

@ -216,6 +216,9 @@
<ClCompile Include="UserInterface\Notification.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UserInterface\Debugger\MemoryScanner.cpp">
<Filter>Source Files\User Interface Source\Debugger Source</Filter>
</ClCompile>
<ClCompile Include="UserInterface\Settings\SettingsPage-Defaults.cpp">
<Filter>Source Files\User Interface Source\Settings Source</Filter>
</ClCompile>
@ -428,6 +431,9 @@
<ClInclude Include="UserInterface\Notification.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="UserInterface\Debugger\MemoryScanner.h">
<Filter>Header Files\User Interface Headers\Settings Header</Filter>
</ClInclude>
<ClInclude Include="UserInterface\Settings\SettingsPage-Defaults.h">
<Filter>Header Files\User Interface Headers\Settings Header</Filter>
</ClInclude>

View File

@ -10,8 +10,113 @@
****************************************************************************/
#pragma once
#include "MemoryScanner.h"
#include "Debugger-AddSymbol.h"
class CEditMixed :
public CWindowImpl<CEditMixed, CEdit>,
public CMixed
{
private:
ValueType m_Type;
DisplayFormat m_DisplayFormat;
char *m_String;
int m_StringLength;
void ReloadString(void);
//void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
public:
CEditMixed(void);
~CEditMixed(void);
BOOL Attach(HWND hWndNew);
DisplayFormat GetDisplayFormat(void);
void SetDisplayFormat(DisplayFormat fmt);
bool GetValue(uint8_t& value);
bool GetValue(int8_t& value);
bool GetValue(uint16_t& value);
bool GetValue(int16_t& value);
bool GetValue(uint32_t& value);
bool GetValue(int32_t& value);
bool GetValue(uint64_t& value);
bool GetValue(int64_t& value);
bool GetValue(float& value);
bool GetValue(double& value);
bool GetValueString(const char*& value, int& length);
bool GetValueHexString(const char*& value, int& length);
BEGIN_MSG_MAP_EX(CEditMixed)
//MSG_WM_CHAR(OnChar)
END_MSG_MAP()
};
//////////////
class CSetValueDlg : public CDialogImpl<CSetValueDlg>
{
public:
enum { IDD = IDD_Debugger_Search_SetValue };
typedef struct
{
const char* str;
DWORD_PTR data;
} ComboItem;
INT_PTR DoModal(const char* caption, const char* label, const char* initialText);
INT_PTR DoModal(const char* caption, const char* label, DWORD_PTR initialData, const ComboItem items[]);
char* GetEnteredString(void);
DWORD_PTR GetEnteredData(void);
CSetValueDlg(void);
virtual ~CSetValueDlg(void);
private:
enum Mode
{
Mode_TextBox,
Mode_ComboBox
};
Mode m_Mode;
const char* m_Caption;
const char* m_Label;
const ComboItem* m_ComboItems;
const char* m_InitialText;
char *m_EnteredString;
DWORD_PTR m_InitialData;
DWORD_PTR m_EnteredData;
CStatic m_Prompt;
CEdit m_Value;
CComboBox m_CmbValue;
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
LRESULT OnDestroy(void);
LRESULT OnOK(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
BEGIN_MSG_MAP_EX(CSetValueDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_HANDLER(IDOK, BN_CLICKED, OnOK)
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnCancel)
MSG_WM_DESTROY(OnDestroy)
END_MSG_MAP()
};
//////////////
class CDebugMemorySearch :
public CDebugDialog < CDebugMemorySearch >
public CDebugDialog<CDebugMemorySearch>,
public CDialogResize<CDebugMemorySearch>
{
public:
enum { IDD = IDD_Debugger_Search };
@ -19,72 +124,236 @@ public:
CDebugMemorySearch(CDebuggerUI * debugger);
virtual ~CDebugMemorySearch(void);
void GameReset(void);
private:
enum
{
WM_GAMERESET = WM_USER + 1
};
enum {
TIMER_ID_AUTO_REFRESH
};
enum
{
GS_LINE_LEN = (sizeof("00000000 0000\n") - 1),
GS_TWOBYTE = 0x01000000
};
enum {
WatchListCtrl_Col_Lock,
WatchListCtrl_Col_BP,
WatchListCtrl_Col_Address,
WatchListCtrl_Col_Description,
WatchListCtrl_Col_Type,
WatchListCtrl_Col_Value,
WatchListCtrl_Num_Columns
};
enum {
ResultsListCtrl_Col_Address,
ResultsListCtrl_Col_Value,
ResultsListCtrl_Col_Previous
};
CDebugMemorySearch(void); // Disable default constructor
CDebugMemorySearch(const CDebugMemorySearch&); // Disable copy constructor
CDebugMemorySearch& operator=(const CDebugMemorySearch&); // Disable assignment
enum MemorySize
{
_8Bit,
_16Bit,
_32Bit,
};
static LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);
static CDebugMemorySearch* _this;
static HHOOK hWinMessageHook;
//Searching for value
enum SearchMemChangeState
{
SearchChangeState_Reset,
SearchChangeState_Changed,
SearchChangeState_Unchanged,
SearchChangeState_Greater,
SearchChangeState_Lessthan,
};
static const CSetValueDlg::ComboItem ModalChangeTypeItems[];
struct SearchResultItem
{
DWORD PAddr;
DWORD Value;
};
LRESULT OnSetFont(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(void);
LRESULT OnGameReset(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
void OnExitSizeMove(void);
void OnSizing(UINT fwSide, LPRECT pRect);
void OnTimer(UINT_PTR nIDEvent);
LRESULT OnScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnMouseDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnMouseUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
void OnInterceptMouseWheel(WPARAM wParam, LPARAM lParam);
void OnInterceptMouseMove(WPARAM wParam, LPARAM lParam);
LRESULT OnMeasureItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnHexCheckbox(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnSearchButton(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnResetButton(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnRdramButton(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnRomButton(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnSpmemButton(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnScanTypeChanged(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnValueTypeChanged(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnResultsCustomDraw(LPNMHDR lpnmh);
LRESULT OnResultsDblClick(LPNMHDR lpnmh);
LRESULT OnResultsRClick(LPNMHDR lpnmh);
LRESULT OnResultsPopupViewMemory(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnResultsPopupAddToWatchList(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnResultsPopupAddAllToWatchList(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnResultsPopupSetValue(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnResultsPopupRemove(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListItemChanged(LPNMHDR lpnmh);
LRESULT OnWatchListCustomDraw(LPNMHDR lpnmh);
LRESULT OnWatchListRClick(LPNMHDR lpnmh);
LRESULT OnWatchListDblClick(LPNMHDR lpnmh);
LRESULT OnWatchListPopupLock(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupReadBP(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupWriteBP(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupViewMemory(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupAddSymbol(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupHexadecimal(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupChangeValue(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupChangeDescription(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupChangeType(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupChangeAddress(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupChangeAddressBy(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupRemove(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupRemoveAll(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupCopyGamesharkCode(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
LRESULT OnWatchListPopupCopyAddressAndDescription(WORD wNotifyCode, WORD wID, HWND hwnd, BOOL& bHandled);
typedef std::vector<SearchResultItem> SearchResult;
CScanResult* GetFirstSelectedScanResult(void);
CScanResult* GetFirstSelectedWatchListResult(void);
void ResetResults(void);
void Search(void);
void UpdateOptions(void);
void UpdateResultsList(bool bUpdateScrollbar = false, bool bResetScrollPos = true);
void UpdateWatchList(bool bUpdateScrollbar = false);
void RefreshResultsListValues(void);
void RefreshWatchListValues(void);
void RemoveWatchListItem(int index);
void ClearWatchList(void);
void ReloadWatchList(void);
void FlushWatchList(void);
void LoadWatchList(void);
void RemoveSelectedWatchListItems(void);
void AddResultToWatchList(int resultIndex);
void SeparatorMoveCtrl(WORD ctrlId, int yChange, bool bResize);
CPath GetWatchListPath(void);
/* generic ui util */
void FixListHeader(CListViewCtrl& listCtrl);
void SetComboBoxSelByData(CComboBox& cb, DWORD_PTR data);
bool MouseHovering(WORD ctrlId, int hMargin = 0, int vMargin = 0);
int GetNumVisibleRows(CListViewCtrl& list);
/*******************/
bool m_bJalSelected;
bool m_bJalHexWasChecked;
bool m_bJalUnsignedWasChecked;
stdstr m_StrGame;
DWORD m_ThreadId;
CFile m_WatchListFile;
CSetValueDlg m_SetValueDlg;
CAddSymbolDlg m_AddSymbolDlg;
CEditMixed m_SearchValue;
CEditNumber32 m_AddrStart, m_AddrEnd;
CComboBox m_SearchTypeOptions, m_ValueTypeOptions;
CListViewCtrl m_ResultsListCtrl, m_WatchListCtrl;
CScrollBar m_ResultsScrollbar, m_WatchListScrollbar;
CButton m_PhysicalCheckbox, m_HexCheckbox;
CButton m_UnsignedCheckbox, m_IgnoreCaseCheckbox, m_UnkEncodingCheckbox;
CMemoryScanner m_MemoryScanner;
std::vector<CScanResult> m_WatchList;
bool m_bDraggingSeparator;
CRect m_InitialSeparatorRect, m_LastSeparatorRect;
int m_ListCtrlRowHeight;
HCURSOR m_hCursorSizeNS;
BEGIN_MSG_MAP_EX(CDebugMemorySearch)
MESSAGE_HANDLER(WM_GAMERESET, OnGameReset)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_CODE_HANDLER(BN_CLICKED, OnClicked)
NOTIFY_HANDLER_EX(IDC_LST_RESULTS, NM_RCLICK, OnResultRClick)
NOTIFY_HANDLER_EX(IDC_LST_RESULTS, NM_DBLCLK, OnResultDblClick)
MSG_WM_DESTROY(OnDestroy)
MSG_WM_EXITSIZEMOVE(OnExitSizeMove)
MSG_WM_SIZING(OnSizing)
MSG_WM_TIMER(OnTimer)
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnCancel)
MESSAGE_HANDLER(WM_VSCROLL, OnScroll)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnMouseDown)
MESSAGE_HANDLER(WM_LBUTTONUP, OnMouseUp)
MESSAGE_HANDLER(WM_MEASUREITEM, OnMeasureItem)
MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
COMMAND_HANDLER(IDC_CHK_HEX, BN_CLICKED, OnHexCheckbox)
COMMAND_HANDLER(IDC_BTN_SEARCH, BN_CLICKED, OnSearchButton)
COMMAND_HANDLER(IDC_BTN_RESET, BN_CLICKED, OnResetButton)
COMMAND_HANDLER(IDC_CMB_SCANTYPE, CBN_SELCHANGE, OnScanTypeChanged)
COMMAND_HANDLER(IDC_CMB_VALUETYPE, CBN_SELCHANGE, OnValueTypeChanged)
COMMAND_HANDLER(IDC_BTN_RDRAM, BN_CLICKED, OnRdramButton)
COMMAND_HANDLER(IDC_BTN_ROM, BN_CLICKED, OnRomButton)
COMMAND_HANDLER(IDC_BTN_SPMEM, BN_CLICKED, OnSpmemButton)
NOTIFY_HANDLER_EX(IDC_LST_RESULTS, NM_CUSTOMDRAW, OnResultsCustomDraw)
NOTIFY_HANDLER_EX(IDC_LST_RESULTS, NM_DBLCLK, OnResultsDblClick)
NOTIFY_HANDLER_EX(IDC_LST_RESULTS, NM_RCLICK, OnResultsRClick)
COMMAND_HANDLER(ID_RESULTS_VIEWMEMORY, BN_CLICKED, OnResultsPopupViewMemory)
COMMAND_HANDLER(ID_RESULTS_ADDTOWATCHLIST, BN_CLICKED, OnResultsPopupAddToWatchList)
COMMAND_HANDLER(ID_RESULTS_ADDALLTOWATCHLIST, BN_CLICKED, OnResultsPopupAddAllToWatchList)
COMMAND_HANDLER(ID_RESULTS_CHANGEVALUE, BN_CLICKED, OnResultsPopupSetValue)
COMMAND_HANDLER(ID_RESULTS_REMOVE, BN_CLICKED, OnResultsPopupRemove)
NOTIFY_HANDLER_EX(IDC_LST_WATCHLIST, LVN_ITEMCHANGED, OnWatchListItemChanged)
NOTIFY_HANDLER_EX(IDC_LST_WATCHLIST, NM_CUSTOMDRAW, OnWatchListCustomDraw)
NOTIFY_HANDLER_EX(IDC_LST_WATCHLIST, NM_DBLCLK, OnWatchListDblClick)
NOTIFY_HANDLER_EX(IDC_LST_WATCHLIST, NM_RCLICK, OnWatchListRClick)
COMMAND_HANDLER(ID_WATCHLIST_VIEWMEMORY, BN_CLICKED, OnWatchListPopupViewMemory)
COMMAND_HANDLER(ID_WATCHLIST_LOCKVALUE, BN_CLICKED, OnWatchListPopupLock)
COMMAND_HANDLER(ID_WATCHLIST_READBP, BN_CLICKED, OnWatchListPopupReadBP)
COMMAND_HANDLER(ID_WATCHLIST_WRITEBP, BN_CLICKED, OnWatchListPopupWriteBP)
COMMAND_HANDLER(ID_WATCHLIST_ADDSYMBOL, BN_CLICKED, OnWatchListPopupAddSymbol)
COMMAND_HANDLER(ID_WATCHLIST_HEXADECIMAL, BN_CLICKED, OnWatchListPopupHexadecimal)
COMMAND_HANDLER(ID_WATCHLIST_CHANGE_VALUE, BN_CLICKED, OnWatchListPopupChangeValue)
COMMAND_HANDLER(ID_WATCHLIST_CHANGE_DESCRIPTION, BN_CLICKED, OnWatchListPopupChangeDescription)
COMMAND_HANDLER(ID_WATCHLIST_CHANGE_TYPE, BN_CLICKED, OnWatchListPopupChangeType)
COMMAND_HANDLER(ID_WATCHLIST_CHANGE_ADDRESS, BN_CLICKED, OnWatchListPopupChangeAddress)
COMMAND_HANDLER(ID_WATCHLIST_CHANGE_ADDRESSBY, BN_CLICKED, OnWatchListPopupChangeAddressBy)
COMMAND_HANDLER(ID_WATCHLIST_REMOVE, BN_CLICKED, OnWatchListPopupRemove)
COMMAND_HANDLER(ID_WATCHLIST_REMOVEALL, BN_CLICKED, OnWatchListPopupRemoveAll)
COMMAND_HANDLER(ID_WATCHLIST_COPY_GSCODE, BN_CLICKED, OnWatchListPopupCopyGamesharkCode)
COMMAND_HANDLER(ID_WATCHLIST_COPY_ADDRDESC, BN_CLICKED, OnWatchListPopupCopyAddressAndDescription)
CHAIN_MSG_MAP(CDialogResize<CDebugMemorySearch>)
END_MSG_MAP()
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
LRESULT OnClicked(WORD wNotifyCode, WORD wID, HWND /*hWndCtl*/, BOOL& bHandled);
LRESULT OnResultRClick(LPNMHDR lpnmh);
LRESULT OnResultDblClick(LPNMHDR lpnmh);
void OnExitSizeMove(void);
void EnableUnknownOptions(bool Enable);
void EnableValueOptions(bool Enable);
void EnableTextOptions(bool Enable);
void EnableJalOptions(bool Enable);
void AddAlignmentOptions(CComboBox & ctrl);
CEditNumber32 m_PAddrStart, m_SearchLen, m_SearchValue, m_MaxSearch;
CComboBox m_UnknownOptions, m_ValueSize, m_UnknownSize;
CListViewCtrl m_SearchResults;
SearchResult m_SearchResult;
bool m_HaveResults;
//Searching memory
BYTE * m_MemoryState;
DWORD m_MemoryStateSize;
void FixUnknownOptions(bool Reset);
void SearchForUnknown(void);
void SearchForValue(void);
void SearchForText(void);
void Reset(void);
bool SearchSetBaseForChanges(void);
bool SearchForChanges(SearchMemChangeState SearchType, MemorySize Size, DWORD &StartAddress, DWORD &Len, DWORD &OldValue, DWORD &NewValue);
bool SearchForValue(DWORD Value, MemorySize Size, DWORD &StartAddress, DWORD &Len);
BEGIN_DLGRESIZE_MAP(CDebugMemorySearch)
DLGRESIZE_CONTROL(IDC_LST_WATCHLIST, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDC_SCRL_WATCHLIST, DLSZ_MOVE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDC_NUM_RESULTS, DLSZ_SIZE_X)
DLGRESIZE_CONTROL(IDC_LST_RESULTS, DLSZ_SIZE_X)
DLGRESIZE_CONTROL(IDC_SCRL_RESULTS, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_SEPARATOR, DLSZ_SIZE_X)
DLGRESIZE_CONTROL(IDC_BTN_SEARCH, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTN_RESET, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_GRP_SEARCH, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_CHK_HEX, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_CHK_UNSIGNED, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_CHK_IGNORECASE, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_CHK_UNKENCODING, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_SEARCH_VALUE, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_LBL_SCANTYPE, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_LBL_VALUETYPE, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_CMB_SCANTYPE, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_CMB_VALUETYPE, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_LBL_ADDRSTART, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_LBL_ADDREND, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_ADDR_START, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_ADDR_END, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_CHK_PHYSICAL, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTN_RDRAM, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTN_ROM, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTN_SPMEM, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_GRP_ADDR, DLSZ_MOVE_X)
END_DLGRESIZE_MAP()
};

View File

@ -49,12 +49,16 @@ CDebuggerUI::CDebuggerUI() :
CSymbols::InitializeCriticalSection();
g_Settings->RegisterChangeCB(GameRunning_InReset, this, (CSettings::SettingChangedFunc)GameReset);
g_Settings->RegisterChangeCB(Debugger_SteppingOps, this, (CSettings::SettingChangedFunc)SteppingOpsChanged);
g_Settings->RegisterChangeCB(GameRunning_CPU_Running, this, (CSettings::SettingChangedFunc)GameCpuRunningChanged);
g_Settings->RegisterChangeCB(Game_GameName, this, (CSettings::SettingChangedFunc)GameNameChanged);
}
CDebuggerUI::~CDebuggerUI(void)
{
g_Settings->UnregisterChangeCB(Debugger_SteppingOps, this, (CSettings::SettingChangedFunc)SteppingOpsChanged);
g_Settings->UnregisterChangeCB(GameRunning_InReset, this, (CSettings::SettingChangedFunc)GameReset);
g_Settings->RegisterChangeCB(GameRunning_CPU_Running, this, (CSettings::SettingChangedFunc)GameCpuRunningChanged);
g_Settings->UnregisterChangeCB(Game_GameName, this, (CSettings::SettingChangedFunc)GameNameChanged);
Debug_Reset();
delete m_MemoryView;
delete m_CommandsView;
@ -81,6 +85,25 @@ void CDebuggerUI::SteppingOpsChanged(CDebuggerUI * _this)
}
}
void CDebuggerUI::GameCpuRunningChanged(CDebuggerUI * _this)
{
if (!g_Settings->LoadBool(GameRunning_CPU_Running))
{
if (_this->m_MemorySearch)
{
_this->m_MemorySearch->GameReset();
}
}
}
void CDebuggerUI::GameNameChanged(CDebuggerUI * _this)
{
if (_this->m_MemorySearch)
{
_this->m_MemorySearch->GameReset();
}
}
void CDebuggerUI::GameReset(CDebuggerUI * _this)
{
if (!g_Settings->LoadBool(GameRunning_InReset))

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,394 @@
/****************************************************************************
* *
* Project64 - A Nintendo 64 emulator. *
* http://www.pj64-emu.com/ *
* Copyright (C) 2012 Project64. All rights reserved. *
* *
* License: *
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
* *
****************************************************************************/
#pragma once
#include <stdafx.h>
enum ValueType
{
ValueType_invalid = -1,
ValueType_uint8,
ValueType_int8,
ValueType_uint16,
ValueType_int16,
ValueType_uint32,
ValueType_int32,
ValueType_uint64,
ValueType_int64,
ValueType_float,
ValueType_double,
// non-primitives:
ValueType_string,
ValueType_istring,
ValueType_unkstring
};
enum AddressType
{
AddressType_Physical,
AddressType_Virtual
};
enum SearchType
{
SearchType_ExactValue,
SearchType_LessThanValue,
SearchType_GreaterThanValue,
SearchType_LessThanOrEqualToValue,
SearchType_GreaterThanOrEqualToValue,
// first scan only:
SearchType_UnknownValue,
SearchType_JalTo,
// next scan only:
SearchType_ChangedValue,
SearchType_UnchangedValue,
SearchType_IncreasedValue,
SearchType_DecreasedValue
};
enum DisplayFormat
{
DisplayDefault,
DisplayHex
};
typedef union {
uint8_t _uint8;
int8_t _sint8;
uint16_t _uint16;
int16_t _sint16;
uint32_t _uint32;
int32_t _sint32;
uint64_t _uint64;
int64_t _sint64;
float _float;
double _double;
const char* _string;
} MixedValue;
class CMixed
{
protected:
ValueType m_Type;
int m_StrLength;
public:
MixedValue m_Value;
CMixed()
{
m_StrLength = 0;
m_Value._uint64 = 0;
m_Type = ValueType_uint64;
}
inline void SetType(ValueType t) { m_Type = t; }
inline ValueType GetType(void) { return m_Type; }
inline void SetStrLength(int length) { m_StrLength = length; }
inline int GetStrLength(void) { return m_StrLength; }
inline void Set(uint8_t v) { SetType(ValueType_uint8); m_Value._uint8 = v; }
inline void Set(int8_t v) { SetType(ValueType_int8); m_Value._sint8 = v; }
inline void Set(uint16_t v) { SetType(ValueType_uint16); m_Value._uint16 = v; }
inline void Set(int16_t v) { SetType(ValueType_int16); m_Value._sint16 = v; }
inline void Set(uint32_t v) { SetType(ValueType_uint32); m_Value._uint32 = v; }
inline void Set(int32_t v) { SetType(ValueType_int32); m_Value._sint32 = v; }
inline void Set(uint64_t v) { SetType(ValueType_uint64); m_Value._uint64 = v; }
inline void Set(int64_t v) { SetType(ValueType_int64); m_Value._sint64 = v; }
inline void Set(float v) { SetType(ValueType_float); m_Value._float = v; }
inline void Set(double v) { SetType(ValueType_double); m_Value._double = v; }
inline void Set(const char* v) { SetType(ValueType_string); m_Value._string = v; }
inline void Get(uint8_t* v) { *v = m_Value._uint8; }
inline void Get(int8_t* v) { *v = m_Value._sint8; }
inline void Get(uint16_t* v) { *v = m_Value._uint16; }
inline void Get(int16_t* v) { *v = m_Value._sint16; }
inline void Get(uint32_t* v) { *v = m_Value._uint32; }
inline void Get(int32_t* v) { *v = m_Value._sint32; }
inline void Get(uint64_t* v) { *v = m_Value._uint64; }
inline void Get(int64_t* v) { *v = m_Value._sint64; }
inline void Get(float* v) { *v = m_Value._float; }
inline void Get(double* v) { *v = m_Value._double; }
inline void Get(const char** v) { *v = m_Value._string; }
const char* GetTypeName(void);
int GetTypeSize(void);
bool IsStringType(void);
int ToString(char* buffer, bool bHex, size_t size);
static ValueType GetTypeFromString(const char* name, int* typeArraySize);
private:
typedef struct
{
const char* name;
ValueType type;
} TypeNameEntry;
static TypeNameEntry TypeNames[];
};
class CScanResult : public CMixed
{
public:
CScanResult(AddressType addressType, DisplayFormat displayFormat);
~CScanResult(void);
uint32_t m_Address;
AddressType m_AddressType;
DisplayFormat m_DisplayFormat;
bool m_bSelected;
char* m_Description;
public:
int GetValueString(char* buffer, size_t size);
int GetMemoryValueString(char* buffer, size_t size);
int GetAddressString(char *buffer);
uint32_t GetVirtualAddress(void);
bool SetMemoryValueFromString(char* str);
//bool IsSelected(void);
//void SetSelected(bool bSelected);
void SetDescription(char* str);
const char* GetDescription(void);
void DeleteDescription(void);
bool GetMemoryValue(CMixed* v);
bool SetAddressSafe(uint32_t address);
bool SetStrLengthSafe(int length);
};
class CMemoryScanner
{
public:
CMemoryScanner(void);
bool SetAddressRange(uint32_t startAddress, uint32_t endAddress);
bool SetValueType(ValueType type);
bool SetSearchType(SearchType searchType);
void SetAddressType(AddressType addressType);
static int ParseHexString(char* dst, char* src);
static bool AddrCheck(uint32_t addr, uint32_t rangeStart, uint32_t rangeEnd);
static bool RangeCheck(uint32_t addrStart, uint32_t addrEnd, uint32_t rangeStart, uint32_t rangeEnd);
static bool PAddrValid(uint32_t physAddr);
static bool PAddrRangeValid(uint32_t physAddrStart, uint32_t physAddrEnd);
template <class T>
void SetValue(T value)
{
*(T*)&m_Value = value;
}
void SetStringValueLength(int length);
void Reset(void);
bool FirstScan(DisplayFormat resDisplayFormat = DisplayDefault);
bool NextScan(void);
bool DidFirstScan(void);
size_t GetNumResults(void);
CScanResult* GetResult(size_t index);
void RemoveResult(size_t index);
private:
static int HexDigitVal(char c);
uint8_t* m_Memory;
bool m_DidFirstScan;
uint32_t m_RangeStartAddress;
uint32_t m_RangeEndAddress;
ValueType m_ValueType;
bool m_bDataTypePrimitive;
SearchType m_SearchType;
AddressType m_AddressType;
uint32_t m_VAddrBits;
std::vector<CScanResult> m_Results;
std::vector<CScanResult> m_NewResults;
MixedValue m_Value;
int m_StringValueLength;
friend class CScanResult;
static uint8_t* GetMemoryPool(uint32_t physAddr);
template <class T> static bool CompareLessThan(T a, T b) { return a < b; }
template <class T> static bool CompareLessThanOrEqual(T a, T b) { return a <= b; }
template <class T> static bool CompareGreaterThan(T a, T b) { return a > b; }
template <class T> static bool CompareGreaterThanOrEqual(T a, T b) { return a >= b; }
template <class T> static bool CompareEqual(T a, T b) { return a == b; }
template <class T> static bool CompareNotEqual(T a, T b) { return a != b; }
template <class T> static bool NoCompare(T /*a*/, T /*b*/) { return true; }
void FirstScanLoopString(DisplayFormat resultDisplayFormat);
void FirstScanLoopIString(DisplayFormat resultDisplayFormat);
void FirstScanLoopUnkString(void);
template <class T>
void FirstScanLoopPrimitive(bool(*CompareFunc)(T, T), DisplayFormat resultDisplayFormat)
{
T searchValue = *(T*)&m_Value;
uint32_t startAddr = ((m_RangeStartAddress - 1) | (sizeof(T) - 1)) + 1;
uint32_t endAddr = m_RangeEndAddress;
CScanResult result(m_AddressType, resultDisplayFormat);
for (uint32_t addr = startAddr; addr <= endAddr; addr += sizeof(T))
{
uint32_t leAddr = (addr ^ (4 - sizeof(T)));
T memValue = *(T*)&m_Memory[leAddr];
if (CompareFunc(memValue, searchValue))
{
result.m_Address = addr | m_VAddrBits;
result.Set(memValue);
m_Results.push_back(result);
}
}
}
// for int64 and double
template <class T>
void FirstScanLoopPrimitive64(bool(*CompareFunc)(T, T), DisplayFormat resultDisplayFormat)
{
T searchValue = *(T*)&m_Value;
uint32_t startAddr = ((m_RangeStartAddress - 1) | (sizeof(T) - 1)) + 1;
uint32_t endAddr = m_RangeEndAddress;
CScanResult result(m_AddressType, resultDisplayFormat);
for (uint32_t addr = startAddr; addr <= endAddr; addr += sizeof(T))
{
T memValue;
*((uint32_t*)(&memValue) + 1) = *(uint32_t*) &m_Memory[addr];
*((uint32_t*)(&memValue) + 0) = *(uint32_t*) &m_Memory[addr + 4];
if (CompareFunc(memValue, searchValue))
{
result.m_Address = addr | m_VAddrBits;
result.Set(memValue);
m_Results.push_back(result);
}
}
}
// compare result's current value in memory against m_Value
template <class T>
void NextScanLoopPrimitive(bool(*CompareFunc)(T, T))
{
T searchValue = *(T*)&m_Value;
for (size_t index = 0; index < m_Results.size(); index++)
{
CScanResult* presult = &m_Results[index];
uint32_t addr = presult->m_Address & 0x1FFFFFFF;
uint32_t leAddr = (addr ^ (4 - sizeof(T)));
T memValue = *(T*) &m_Memory[leAddr];
if (CompareFunc(memValue, searchValue))
{
presult->Set(memValue);
m_NewResults.push_back(*presult);
}
}
m_Results.clear();
m_Results.swap(m_NewResults);
}
// compare result's current value in memory against m_Value (for 64 bit types)
template <class T>
void NextScanLoopPrimitive64(bool(*CompareFunc)(T, T))
{
T searchValue = *(T*)&m_Value;
for (size_t index = 0; index < m_Results.size(); index++)
{
CScanResult* presult = &m_Results[index];
uint32_t addr = presult->m_Address & 0x1FFFFFFF;
T memValue;
*((uint32_t*)(&memValue) + 1) = *(uint32_t*) &m_Memory[addr];
*((uint32_t*)(&memValue) + 0) = *(uint32_t*) &m_Memory[addr + 4];
if (CompareFunc(memValue, searchValue))
{
presult->Set(memValue);
m_NewResults.push_back(*presult);
}
}
m_Results.clear();
m_Results.swap(m_NewResults);
}
// compare result's current value in memory against result's old value
template <class T>
void NextScanLoopPrimitiveResults(bool(*CompareFunc)(T, T))
{
for (size_t index = 0; index < m_Results.size(); index++)
{
CScanResult* presult = &m_Results[index];
uint32_t addr = presult->m_Address & 0x1FFFFFFF;
uint32_t leAddr = (addr ^ (4 - sizeof(T)));
T memValue, oldValue;
memValue = *(T*)&m_Memory[leAddr];
presult->Get(&oldValue);
if (CompareFunc(memValue, oldValue))
{
presult->Set(memValue);
m_NewResults.push_back(*presult);
}
}
m_Results.clear();
m_Results.swap(m_NewResults);
}
// compare result's current value in memory against result's old value (for 64 bit types)
template <class T>
void NextScanLoopPrimitiveResults64(bool(*CompareFunc)(T, T))
{
for (size_t index = 0; index < m_Results.size(); index++)
{
CScanResult* presult = &m_Results[index];
uint32_t addr = presult->m_Address & 0x1FFFFFFF;
T memValue, oldValue;
*((uint32_t*)(&memValue) + 1) = *(uint32_t*)&m_Memory[addr];
*((uint32_t*)(&memValue) + 0) = *(uint32_t*)&m_Memory[addr + 4];
presult->Get(&oldValue);
if (CompareFunc(memValue, oldValue))
{
presult->Set(memValue);
m_NewResults.push_back(*presult);
}
}
m_Results.clear();
m_Results.swap(m_NewResults);
}
};

View File

@ -84,6 +84,8 @@ public:
CCPULog* CPULog();
static void GameReset(CDebuggerUI * _this);
static void GameCpuRunningChanged(CDebuggerUI * _this);
static void GameNameChanged(CDebuggerUI * _this);
static void SteppingOpsChanged(CDebuggerUI * _this);
bool DebugLW_PAddr(uint32_t vaddr, uint32_t& value);

View File

@ -531,38 +531,38 @@ BEGIN
CONTROL "Auto",IDC_CHK_AUTOREFRESH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,218,7,31,8
END
IDD_Debugger_Search DIALOGEX 0, 0, 229, 233
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
IDD_Debugger_Search DIALOGEX 0, 0, 357, 257
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Search Memory"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "Search Location:",IDC_STATIC,7,3,215,44
LTEXT "PAddr Start: ",IDC_STATIC,13,15,41,9
EDITTEXT IDC_PADDR_START,58,13,52,12,ES_AUTOHSCROLL
LTEXT "Length:",IDC_STATIC,132,14,28,9
EDITTEXT IDC_ADDR_END,164,13,52,12,ES_AUTOHSCROLL
PUSHBUTTON "RDRAM",IDC_BTN_RDRAM,13,30,59,11
PUSHBUTTON "ROM",IDC_BTN_ROM,85,30,59,11
PUSHBUTTON "SPMEN",IDC_BTN_SPMEM,157,30,59,11
GROUPBOX "Search Value",IDC_STATIC,7,49,215,74
CONTROL "Unknown",IDC_RADIO_UNKNOWN,"Button",BS_AUTORADIOBUTTON,13,63,44,9
COMBOBOX IDC_CMB_UNKNOWN,64,61,84,72,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Value",IDC_RADIO_VALUE,"Button",BS_AUTORADIOBUTTON,13,78,33,9
EDITTEXT IDC_SEARCH_VALUE,64,76,53,12,ES_AUTOHSCROLL
CONTROL "Hex",IDC_SEARCH_HEX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,123,78,27,9
COMBOBOX IDC_VALUE_ALIGN,155,76,64,104,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
CONTROL "Text",IDC_RADIO_TEXT,"Button",BS_AUTORADIOBUTTON,13,94,35,8
EDITTEXT IDC_SEARCH_TEXT,64,91,84,12,ES_AUTOHSCROLL
CONTROL "Case-sensitive",IDC_CASE_SENSITIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,155,92,62,8
CONTROL "JAL to:",IDC_RADIO_JAL,"Button",BS_AUTORADIOBUTTON,13,107,39,13
EDITTEXT IDC_JAL_ADDR,64,106,53,12,ES_AUTOHSCROLL
GROUPBOX "Results",IDC_BORDER_RESULTS,7,125,215,100
PUSHBUTTON "Search",IDC_BTN_SEARCH,12,136,61,13
PUSHBUTTON "Reset",IDC_RESET_BUTTON,76,136,45,13,NOT WS_VISIBLE
LTEXT "Max Results: ",IDC_STATIC,124,138,41,8
EDITTEXT IDC_MAX_SEARCH,170,136,44,12,ES_AUTOHSCROLL | ES_NUMBER
COMBOBOX IDC_UNKNOWN_ALIGN,155,61,64,104,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
CONTROL "List1",IDC_LST_RESULTS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,13,153,202,65
PUSHBUTTON "Search",IDC_BTN_SEARCH,193,6,44,14
PUSHBUTTON "Reset",IDC_BTN_RESET,238,6,43,14
CONTROL "Hex",IDC_CHK_HEX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,208,31,25,13
EDITTEXT IDC_SEARCH_VALUE,238,31,110,13,ES_AUTOHSCROLL
COMBOBOX IDC_CMB_SCANTYPE,238,46,110,72,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_CMB_VALUETYPE,238,62,110,13,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_ADDR_START,224,101,52,12,ES_AUTOHSCROLL
EDITTEXT IDC_ADDR_END,296,101,52,12,ES_AUTOHSCROLL
CONTROL "Physical",IDC_CHK_PHYSICAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,201,116,36,10
PUSHBUTTON "RDRAM",IDC_BTN_RDRAM,241,115,35,12
PUSHBUTTON "ROM",IDC_BTN_ROM,277,115,35,12
PUSHBUTTON "SPMEM",IDC_BTN_SPMEM,313,115,35,12
CONTROL "",IDC_LST_WATCHLIST,"SysListView32",LVS_REPORT | LVS_OWNERDRAWFIXED | LVS_NOSCROLL | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,4,139,337,114
CONTROL "List1",IDC_LST_RESULTS,"SysListView32",LVS_REPORT | LVS_OWNERDRAWFIXED | LVS_NOSCROLL | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,9,13,166,115
SCROLLBAR IDC_SCRL_RESULTS,175,13,12,115,SBS_VERT | WS_DISABLED
GROUPBOX "Address range",IDC_GRP_ADDR,193,91,159,42,0,WS_EX_TRANSPARENT
LTEXT "Start: ",IDC_LBL_ADDRSTART,201,103,19,9
LTEXT "End:",IDC_LBL_ADDREND,279,103,15,9
GROUPBOX "Search value",IDC_GRP_SEARCH,193,20,159,71,0,WS_EX_TRANSPARENT
LTEXT "Scan type",IDC_LBL_SCANTYPE,200,48,33,8
LTEXT "Value type",IDC_LBL_VALUETYPE,200,65,35,8
GROUPBOX "Results",IDC_NUM_RESULTS,3,3,188,130,0,WS_EX_TRANSPARENT
CONTROL "",IDC_SEPARATOR,"Static",SS_BLACKFRAME,4,135,349,1
SCROLLBAR IDC_SCRL_WATCHLIST,341,139,12,114,SBS_VERT | WS_DISABLED
CONTROL "Unsigned",IDC_CHK_UNSIGNED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,307,78,40,9
CONTROL "Ignore case",IDC_CHK_IGNORECASE,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,222,78,50,9
CONTROL "Unknown encoding",IDC_CHK_UNKENCODING,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,276,78,71,9
END
IDD_About_UserInfo DIALOGEX 0, 0, 186, 97
@ -1357,6 +1357,18 @@ BEGIN
CONTROL "Virt. Coherency on data read",IDC_CHK_VCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,88,106,11
END
IDD_Debugger_Search_SetValue DIALOGEX 0, 0, 109, 56
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Caption"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,52,35,50,14
EDITTEXT IDC_EDIT_VALUE,7,18,95,12,ES_AUTOHSCROLL
LTEXT "Label:",IDC_LBL_PROMPT,7,7,95,10
COMBOBOX IDC_CMB_VALUE,7,18,95,13,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
@ -1549,10 +1561,7 @@ BEGIN
IDD_Debugger_Search, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 222
TOPMARGIN, 7
BOTTOMMARGIN, 226
BOTTOMMARGIN, 256
END
IDD_About_UserInfo, DIALOG
@ -1817,6 +1826,14 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 100
END
IDD_Debugger_Search_SetValue, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 102
TOPMARGIN, 7
BOTTOMMARGIN, 49
END
END
#endif // APSTUDIO_INVOKED
@ -1872,7 +1889,12 @@ IDR_MEM_SEARCH MENU
BEGIN
POPUP "Popup"
BEGIN
MENUITEM "Show in memory &viewer...", ID_POPUP_SHOWINMEMORYVIEWER
MENUITEM "Add to watch list", ID_RESULTS_ADDTOWATCHLIST
MENUITEM "Add all to watch list", ID_RESULTS_ADDALLTOWATCHLIST
MENUITEM "Change value", ID_RESULTS_CHANGEVALUE
MENUITEM "&View memory...", ID_RESULTS_VIEWMEMORY
MENUITEM SEPARATOR
MENUITEM "Remove selected", ID_RESULTS_REMOVE
END
END
@ -1922,6 +1944,38 @@ BEGIN
END
END
IDR_MEM_WATCHLIST MENU
BEGIN
POPUP "PopupMenu"
BEGIN
POPUP "Change"
BEGIN
MENUITEM "Value", ID_WATCHLIST_CHANGE_VALUE
MENUITEM "Description", ID_WATCHLIST_CHANGE_DESCRIPTION
MENUITEM "Type", ID_WATCHLIST_CHANGE_TYPE
MENUITEM "Address", ID_WATCHLIST_CHANGE_ADDRESS
MENUITEM "Address by...", ID_WATCHLIST_CHANGE_ADDRESSBY
END
MENUITEM "Lock value", ID_WATCHLIST_LOCKVALUE
MENUITEM "Read breakpoint", ID_WATCHLIST_READBP
MENUITEM "Write breakpoint", ID_WATCHLIST_WRITEBP
MENUITEM SEPARATOR
MENUITEM "Hexadecimal", ID_WATCHLIST_HEXADECIMAL
MENUITEM SEPARATOR
MENUITEM "View memory...", ID_WATCHLIST_VIEWMEMORY
MENUITEM "Add Symbol...", ID_WATCHLIST_ADDSYMBOL
MENUITEM SEPARATOR
POPUP "Copy"
BEGIN
MENUITEM "GameShark code", ID_WATCHLIST_COPY_GSCODE
MENUITEM "Address and description", ID_WATCHLIST_COPY_ADDRDESC
END
MENUITEM SEPARATOR
MENUITEM "Remove selected", ID_WATCHLIST_REMOVE
MENUITEM "Remove all", ID_WATCHLIST_REMOVEALL
END
END
IDR_ENHANCEMENT_MENU MENU
BEGIN
POPUP "Popup"
@ -2008,6 +2062,11 @@ BEGIN
0, 0, 0, 0
END
IDD_Debugger_Search AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_Settings_Defaults AFX_DIALOG_LAYOUT
BEGIN
0
@ -2068,6 +2127,17 @@ BEGIN
0
END
IDD_Debugger_AddSymbol AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_Debugger_Search_SetValue AFX_DIALOG_LAYOUT
BEGIN
0
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog Info

View File

@ -59,7 +59,6 @@
#define IDD_Debugger_DMALog 182
#define IDD_Debugger_StackTrace 184
#define IDD_Debugger_RegCOP0 185
#define IDR_MENU1 186
#define IDR_SCRIPT_POPUP 186
#define IDR_OP_POPUP 187
#define IDR_ENHANCEMENT_MENU 188
@ -68,6 +67,7 @@
#define IDD_Debugger_RegMI 193
#define IDD_Debugger_RegAI 194
#define IDD_Debugger_RegSI 195
#define IDR_MEM_WATCHLIST 195
#define IDD_Debugger_RegRI 196
#define IDD_Debugger_RegDPC 197
#define IDD_Debugger_RegRDRAM 198
@ -79,6 +79,7 @@
#define IDD_Debugger_CPULog 204
#define IDD_Enhancement_GS 205
#define IDD_Debugger_ExceptionBP 207
#define IDD_Debugger_Search_SetValue 210
#define IDC_MENU_ITEM_TEXT 1000
#define IDC_CLOSE_BUTTON 1001
#define IDC_LIST2 1003
@ -96,9 +97,9 @@
#define IDC_RESET_PAGE 1008
#define IDC_INFO_CARTID 1009
#define IDC_VIRTUALKEY 1009
#define IDC_VALUE_ALIGN 1009
#define IDC_FRAME_DISPLAY_TYPE 1009
#define IDC_RESET_ALL 1009
#define IDC_CMB_VALUETYPE 1009
#define IDC_INFO_ROMSIZE 1010
#define IDC_KEY_PROMPT 1010
#define IDC_BTN_SPMEM 1010
@ -109,21 +110,19 @@
#define IDC_USE_ALT_PC 1011
#define IDC_HLE_GFX 1011
#define IDC_CHK_VADDR 1011
#define IDC_SEARCH_HEX 1011
#define IDC_CHK_HEX 1011
#define IDC_DISPLAY_FRAMERATE 1012
#define IDC_INFO_MANUFACTURER 1012
#define IDC_ALT 1012
#define IDC_LIST 1012
#define IDC_HLE_AUDIO 1012
#define IDC_SMM_CACHE 1012
#define IDC_CASE_SENSITIVE 1012
#define IDC_ROM_32BIT 1012
#define IDC_INFO_COUNTRY 1013
#define IDC_SHIFT 1013
#define IDC_TLB 1013
#define IDC_TLB_ENTRIES 1013
#define IDC_SMM_DMA 1013
#define IDC_UNKNOWN_ALIGN 1013
#define IDC_DELAY_DP 1013
#define IDC_INTERPRETER 1013
#define IDC_INFO_CRC1 1014
@ -176,41 +175,33 @@
#define IDC_RDRAM 1046
#define IDC_SMM_FRAME 1046
#define IDC_SP_REG 1047
#define IDC_PADDR_START 1047
#define IDC_ADDR_START 1047
#define IDC_DPC_REG 1048
#define IDC_ADDR_END 1048
#define IDC_DPS_REG 1049
#define IDC_RADIO_VALUE 1049
#define IDC_MI_REG 1050
#define IDC_RADIO_TEXT 1050
#define IDC_VI_REG 1051
#define IDC_RADIO_JAL 1051
#define IDC_AI_REG 1052
#define IDC_SEARCH_VALUE 1052
#define IDC_PI_REG 1053
#define IDC_SEARCH_TEXT 1053
#define IDC_SI_DMA 1054
#define IDC_JAL_ADDR 1054
#define IDC_DIRECT_WRITE 1055
#define IDC_BTN_SEARCH 1055
#define IDC_DMA_WRITE 1056
#define IDC_RESET_BUTTON 1056
#define IDC_BTN_RESET 1056
#define IDC_DIRECT_READ 1057
#define IDC_MAX_SEARCH 1057
#define IDC_DMA_READ 1058
#define IDC_CONT_PAK 1059
#define IDC_SEARCH_MEM 1059
#define IDC_BTN_ROM 1061
#define IDC_TEXTURE_OTHER 1062
#define IDC_RADIO_UNKNOWN 1062
#define IDC_TEXTURE_DIR 1063
#define IDC_CMB_UNKNOWN 1063
#define IDC_CMB_SCANTYPE 1063
#define IDC_TEXTURE_DEFAULT 1064
#define IDC_LST_RESULTS 1064
#define IDC_SELECT_TEXTURE_DIR 1065
#define IDC_MEM_DETAILS 1065
#define IDC_PLUGIN_OTHER 1066
#define IDC_BORDER_RESULTS 1066
#define IDC_PLUGIN_DIR 1067
#define IDC_PLUGIN_DEFAULT 1068
#define IDC_SELECT_PLUGIN_DIR 1069
@ -628,7 +619,6 @@
#define IDC_CHK_WMISS 1465
#define IDC_CHK_RADE 1466
#define IDC_CHK_WADE 1467
#define IDC_CHECK7 1468
#define IDC_CHK_IBE 1468
#define IDC_CHK_DBE 1469
#define IDC_CHK_SYSCALL 1470
@ -675,7 +665,24 @@
#define IDC_R14_LBL 1512
#define IDC_HI_LBL 1513
#define IDC_LO_LBL 1514
#define ID_POPUP_SHOWINMEMORYVIEWER 40005
#define IDC_NUM_RESULTS 1515
#define IDC_SCRL_RESULTS 1518
#define IDC_LST_WATCHLIST 1520
#define IDC_CHK_PHYSICAL 1522
#define IDC_SEPARATOR 1524
#define IDC_GRP_SEARCH 1525
#define IDC_GRP_ADDR 1526
#define IDC_LBL_SCANTYPE 1527
#define IDC_LBL_VALUETYPE 1528
#define IDC_LBL_ADDRSTART 1529
#define IDC_LBL_ADDREND 1530
#define IDC_SCRL_WATCHLIST 1531
#define IDC_EDIT_VALUE 1532
#define IDC_LBL_PROMPT 1533
#define IDC_CMB_VALUE 1534
#define IDC_CHK_UNSIGNED 1535
#define IDC_CHK_IGNORECASE 1536
#define IDC_CHK_UNKENCODING 1537
#define ID_POPUPMENU_PLAYGAMEWITHDISK 40008
#define ID_POPUPMENU_ADDSYMBOL 40013
#define ID_POPUPMENU_VIEWDISASM 40017
@ -690,12 +697,31 @@
#define ID_POPUPMENU_EDIT 40030
#define ID_POPUPMENU_FOLLOWJUMP 40032
#define ID_POPUPMENU_RUNTO 40034
#define ID_Menu 40035
#define ID_POPUPMENU_VIEWMEMORY 40036
#define ID_POPUPMENU_TOGGLEBP 40039
#define ID_POPUPMENU_CLEARBPS 40040
#define ID_POPUPMENU_TOGGLELOCK 40041
#define ID_POPUPMENU_CLEARLOCKS 40042
#define ID_RESULTS_ADDTOWATCHLIST 40054
#define ID_RESULTS_CHANGEVALUE 40055
#define ID_RESULTS_VIEWMEMORY 40056
#define ID_RESULTS_REMOVE 40057
#define ID_WATCHLIST_LOCKVALUE 40060
#define ID_WATCHLIST_READBP 40061
#define ID_WATCHLIST_WRITEBP 40062
#define ID_WATCHLIST_HEXADECIMAL 40063
#define ID_WATCHLIST_VIEWMEMORY 40064
#define ID_WATCHLIST_ADDSYMBOL 40065
#define ID_WATCHLIST_REMOVE 40066
#define ID_WATCHLIST_REMOVEALL 40067
#define ID_WATCHLIST_COPY_GSCODE 40070
#define ID_WATCHLIST_COPY_ADDRDESC 40073
#define ID_WATCHLIST_CHANGE_TYPE 40076
#define ID_WATCHLIST_CHANGE_VALUE 40077
#define ID_WATCHLIST_CHANGE_DESCRIPTION 40078
#define ID_RESULTS_ADDALLTOWATCHLIST 40080
#define ID_WATCHLIST_CHANGE_ADDRESS 40082
#define ID_WATCHLIST_CHANGE_ADDRESSBY 40084
#define ID_POPUPMENU_ROMDIRECTORY 40137
#define ID_POPUPMENU_REFRESHROMLIST 40138
#define ID_POPUPMENU_PLAYGAME 40152
@ -712,9 +738,9 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 210
#define _APS_NEXT_COMMAND_VALUE 40043
#define _APS_NEXT_CONTROL_VALUE 1515
#define _APS_NEXT_RESOURCE_VALUE 213
#define _APS_NEXT_COMMAND_VALUE 40085
#define _APS_NEXT_CONTROL_VALUE 1538
#define _APS_NEXT_SYMED_VALUE 102
#endif
#endif