Merge pull request #1603 from shygoo/search-improvements
[Debugger] Improve the search tool
This commit is contained in:
commit
bfda4597da
|
@ -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" />
|
||||
|
|
|
@ -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>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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()
|
||||
};
|
||||
|
|
|
@ -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
|
@ -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);
|
||||
}
|
||||
};
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue