Add the memory search functionality back in
This commit is contained in:
parent
a201d219ea
commit
0bd9a467a1
|
@ -12,26 +12,29 @@
|
||||||
#include "Debugger UI.h"
|
#include "Debugger UI.h"
|
||||||
|
|
||||||
CDebugMemorySearch::CDebugMemorySearch(CDebugger * debugger) :
|
CDebugMemorySearch::CDebugMemorySearch(CDebugger * debugger) :
|
||||||
CDebugDialog<CDebugMemorySearch>(debugger)
|
CDebugDialog<CDebugMemorySearch>(debugger),
|
||||||
|
m_MemoryState(NULL),
|
||||||
|
m_MemoryStateSize(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
CDebugMemorySearch::~CDebugMemorySearch()
|
CDebugMemorySearch::~CDebugMemorySearch()
|
||||||
{
|
{
|
||||||
|
if (m_MemoryState)
|
||||||
|
{
|
||||||
|
delete m_MemoryState;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDebugMemorySearch::AddAlignmentOptions (CComboBox & ctrl)
|
void CDebugMemorySearch::AddAlignmentOptions (CComboBox & ctrl)
|
||||||
{
|
{
|
||||||
/*int Index =*/ ctrl.AddString("32 bits (aligned)");
|
int Index = ctrl.AddString("32 bits (aligned)");
|
||||||
g_Notify->BreakPoint(__FILE__,__LINE__);
|
|
||||||
#ifdef tofix
|
|
||||||
ctrl.SetItemData(Index,_32Bit);
|
ctrl.SetItemData(Index,_32Bit);
|
||||||
Index = ctrl.AddString("16bits (aligned)");
|
Index = ctrl.AddString("16bits (aligned)");
|
||||||
ctrl.SetItemData(Index,_16Bit);
|
ctrl.SetItemData(Index,_16Bit);
|
||||||
Index = ctrl.AddString("8bits");
|
Index = ctrl.AddString("8bits");
|
||||||
ctrl.SetCurSel(Index);
|
ctrl.SetCurSel(Index);
|
||||||
ctrl.SetItemData(Index,_8Bit);
|
ctrl.SetItemData(Index,_8Bit);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT CDebugMemorySearch::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
LRESULT CDebugMemorySearch::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||||
|
@ -136,23 +139,23 @@ LRESULT CDebugMemorySearch::OnClicked(WORD /*wNotifyCode*/, WORD wID, HWND hWndC
|
||||||
case IDC_BTN_SEARCH:
|
case IDC_BTN_SEARCH:
|
||||||
if (SendMessage(GetDlgItem(IDC_RADIO_UNKNOWN),BM_GETSTATE, 0,0) == BST_CHECKED)
|
if (SendMessage(GetDlgItem(IDC_RADIO_UNKNOWN),BM_GETSTATE, 0,0) == BST_CHECKED)
|
||||||
{
|
{
|
||||||
m_System->ExternalEvent(SysEvent_PauseCPU_SearchMemory);
|
g_BaseSystem->ExternalEvent(SysEvent_PauseCPU_SearchMemory);
|
||||||
SearchForUnknown();
|
SearchForUnknown();
|
||||||
m_System->ExternalEvent(SysEvent_ResumeCPU_SearchMemory);
|
g_BaseSystem->ExternalEvent(SysEvent_ResumeCPU_SearchMemory);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (SendMessage(GetDlgItem(IDC_RADIO_VALUE),BM_GETSTATE, 0,0) == BST_CHECKED)
|
if (SendMessage(GetDlgItem(IDC_RADIO_VALUE),BM_GETSTATE, 0,0) == BST_CHECKED)
|
||||||
{
|
{
|
||||||
m_System->ExternalEvent(SysEvent_PauseCPU_SearchMemory);
|
g_BaseSystem->ExternalEvent(SysEvent_PauseCPU_SearchMemory);
|
||||||
SearchForValue();
|
SearchForValue();
|
||||||
m_System->ExternalEvent(SysEvent_ResumeCPU_SearchMemory);
|
g_BaseSystem->ExternalEvent(SysEvent_ResumeCPU_SearchMemory);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (SendMessage(GetDlgItem(IDC_RADIO_TEXT),BM_GETSTATE, 0,0) == BST_CHECKED)
|
if (SendMessage(GetDlgItem(IDC_RADIO_TEXT),BM_GETSTATE, 0,0) == BST_CHECKED)
|
||||||
{
|
{
|
||||||
m_System->ExternalEvent(SysEvent_PauseCPU_SearchMemory);
|
g_BaseSystem->ExternalEvent(SysEvent_PauseCPU_SearchMemory);
|
||||||
SearchForText();
|
SearchForText();
|
||||||
m_System->ExternalEvent(SysEvent_ResumeCPU_SearchMemory);
|
g_BaseSystem->ExternalEvent(SysEvent_ResumeCPU_SearchMemory);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDC_RESET_BUTTON:
|
case IDC_RESET_BUTTON:
|
||||||
|
@ -235,8 +238,6 @@ void CDebugMemorySearch::EnableUnknownOptions( bool Enable )
|
||||||
|
|
||||||
void CDebugMemorySearch::SearchForValue( void )
|
void CDebugMemorySearch::SearchForValue( void )
|
||||||
{
|
{
|
||||||
g_Notify->BreakPoint(__FILE__,__LINE__);
|
|
||||||
#ifdef tofix
|
|
||||||
MemorySize Size = (MemorySize)m_ValueSize.GetItemData(m_ValueSize.GetCurSel());
|
MemorySize Size = (MemorySize)m_ValueSize.GetItemData(m_ValueSize.GetCurSel());
|
||||||
DWORD Value = m_SearchValue.GetValue();
|
DWORD Value = m_SearchValue.GetValue();
|
||||||
DWORD StartAddress = m_PAddrStart.GetValue();
|
DWORD StartAddress = m_PAddrStart.GetValue();
|
||||||
|
@ -259,7 +260,7 @@ void CDebugMemorySearch::SearchForValue( void )
|
||||||
m_SearchResults.DeleteAllItems();
|
m_SearchResults.DeleteAllItems();
|
||||||
DWORD ItemsAdded = 0;
|
DWORD ItemsAdded = 0;
|
||||||
|
|
||||||
/*while (g_MMU->SearchForValue(Value,Size,StartAddress,Len))
|
while (SearchForValue(Value,Size,StartAddress,Len))
|
||||||
{
|
{
|
||||||
SearchResultItem Result;
|
SearchResultItem Result;
|
||||||
Result.PAddr = StartAddress;
|
Result.PAddr = StartAddress;
|
||||||
|
@ -283,7 +284,7 @@ void CDebugMemorySearch::SearchForValue( void )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
::SetWindowText(GetDlgItem(IDC_BTN_SEARCH),"Search Results");
|
::SetWindowText(GetDlgItem(IDC_BTN_SEARCH),"Search Results");
|
||||||
::ShowWindow(GetDlgItem(IDC_RESET_BUTTON),SW_SHOW);
|
::ShowWindow(GetDlgItem(IDC_RESET_BUTTON),SW_SHOW);
|
||||||
::EnableWindow(GetDlgItem(IDC_VALUE_ALIGN),false);
|
::EnableWindow(GetDlgItem(IDC_VALUE_ALIGN),false);
|
||||||
|
@ -294,8 +295,30 @@ void CDebugMemorySearch::SearchForValue( void )
|
||||||
int ItemId = m_SearchResults.GetItemData(i);
|
int ItemId = m_SearchResults.GetItemData(i);
|
||||||
SearchResultItem & Result = m_SearchResult[ItemId];
|
SearchResultItem & Result = m_SearchResult[ItemId];
|
||||||
|
|
||||||
DWORD NewValue;
|
DWORD NewValue = 0;
|
||||||
/*g_MMU->LoadPhysical32(Result.PAddr,NewValue,Size,false);
|
BOOL valid = false;
|
||||||
|
|
||||||
|
switch (Size) {
|
||||||
|
case _8Bit:
|
||||||
|
{
|
||||||
|
BYTE mem = 0;
|
||||||
|
valid = g_MMU->LB_PAddr(Result.PAddr, mem);
|
||||||
|
NewValue = mem;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _16Bit:
|
||||||
|
{
|
||||||
|
WORD mem = 0;
|
||||||
|
valid = g_MMU->LH_PAddr(Result.PAddr, mem);
|
||||||
|
NewValue = mem;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _32Bit:
|
||||||
|
valid = g_MMU->LW_PAddr(Result.PAddr, NewValue);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
if (Value == NewValue)
|
if (Value == NewValue)
|
||||||
{
|
{
|
||||||
|
@ -307,20 +330,19 @@ void CDebugMemorySearch::SearchForValue( void )
|
||||||
Result.Value = NewValue;
|
Result.Value = NewValue;
|
||||||
} else {
|
} else {
|
||||||
m_SearchResults.DeleteItem(i);
|
m_SearchResults.DeleteItem(i);
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::SetWindowText(GetDlgItem(IDC_BORDER_RESULTS),stdstr_f("Results (%d)",m_SearchResults.GetItemCount()).c_str());
|
::SetWindowText(GetDlgItem(IDC_BORDER_RESULTS),stdstr_f("Results (%d)",m_SearchResults.GetItemCount()).c_str());
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDebugMemorySearch::SearchForUnknown()
|
void CDebugMemorySearch::SearchForUnknown()
|
||||||
{
|
{
|
||||||
/*CMipsMemory::SearchMemChangeState Option = (CMipsMemory::SearchMemChangeState)m_UnknownOptions.GetItemData(m_UnknownOptions.GetCurSel());
|
SearchMemChangeState Option = (SearchMemChangeState)m_UnknownOptions.GetItemData(m_UnknownOptions.GetCurSel());
|
||||||
if (Option == CMipsMemory::SearchChangeState_Reset)
|
if (Option == SearchChangeState_Reset)
|
||||||
{
|
{
|
||||||
m_SearchResults.DeleteAllItems();
|
m_SearchResults.DeleteAllItems();
|
||||||
//g_MMU->SearchSetBaseForChanges();
|
SearchSetBaseForChanges();
|
||||||
FixUnknownOptions(false);
|
FixUnknownOptions(false);
|
||||||
::ShowWindow(GetDlgItem(IDC_RESET_BUTTON),SW_SHOW);
|
::ShowWindow(GetDlgItem(IDC_RESET_BUTTON),SW_SHOW);
|
||||||
::EnableWindow(GetDlgItem(IDC_UNKNOWN_ALIGN),true );
|
::EnableWindow(GetDlgItem(IDC_UNKNOWN_ALIGN),true );
|
||||||
|
@ -359,7 +381,7 @@ void CDebugMemorySearch::SearchForUnknown()
|
||||||
m_SearchResults.DeleteAllItems();
|
m_SearchResults.DeleteAllItems();
|
||||||
DWORD ItemsAdded = 0, OldValue, NewValue;
|
DWORD ItemsAdded = 0, OldValue, NewValue;
|
||||||
|
|
||||||
while (g_MMU->SearchForChanges(Option,Size,StartAddress,Len,OldValue,NewValue))
|
while (SearchForChanges(Option,Size,StartAddress,Len,OldValue,NewValue))
|
||||||
{
|
{
|
||||||
SearchResultItem Result;
|
SearchResultItem Result;
|
||||||
Result.PAddr = StartAddress;
|
Result.PAddr = StartAddress;
|
||||||
|
@ -397,36 +419,59 @@ void CDebugMemorySearch::SearchForUnknown()
|
||||||
SearchResultItem & Result = m_SearchResult[ItemId];
|
SearchResultItem & Result = m_SearchResult[ItemId];
|
||||||
|
|
||||||
bool UpdateResult = false;
|
bool UpdateResult = false;
|
||||||
DWORD NewValue;
|
DWORD NewValue = 0;
|
||||||
g_MMU->LoadPhysical32(Result.PAddr,NewValue,Size,false);
|
BOOL valid = false;
|
||||||
|
|
||||||
|
switch (Size) {
|
||||||
|
case _8Bit:
|
||||||
|
{
|
||||||
|
BYTE mem = 0;
|
||||||
|
valid = g_MMU->LB_PAddr(Result.PAddr, mem);
|
||||||
|
NewValue = mem;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _16Bit:
|
||||||
|
{
|
||||||
|
WORD mem = 0;
|
||||||
|
valid = g_MMU->LH_PAddr(Result.PAddr, mem);
|
||||||
|
NewValue = mem;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _32Bit:
|
||||||
|
valid = g_MMU->LW_PAddr(Result.PAddr, NewValue);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
switch (Option)
|
switch (Option)
|
||||||
{
|
{
|
||||||
case CMipsMemory::SearchChangeState_Changed:
|
case SearchChangeState_Changed:
|
||||||
if (Result.Value != NewValue)
|
if (Result.Value != NewValue)
|
||||||
{
|
{
|
||||||
UpdateResult = true;
|
UpdateResult = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CMipsMemory::SearchChangeState_Unchanged:
|
case SearchChangeState_Unchanged:
|
||||||
if (Result.Value == NewValue)
|
if (Result.Value == NewValue)
|
||||||
{
|
{
|
||||||
UpdateResult = true;
|
UpdateResult = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CMipsMemory::SearchChangeState_Greater:
|
case SearchChangeState_Greater:
|
||||||
if (NewValue > Result.Value)
|
if (NewValue > Result.Value)
|
||||||
{
|
{
|
||||||
UpdateResult = true;
|
UpdateResult = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CMipsMemory::SearchChangeState_Lessthan:
|
case SearchChangeState_Lessthan:
|
||||||
if (NewValue < Result.Value)
|
if (NewValue < Result.Value)
|
||||||
{
|
{
|
||||||
UpdateResult = true;
|
UpdateResult = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Notify().BreakPoint(__FILE__,__LINE__);
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UpdateResult)
|
if (UpdateResult)
|
||||||
|
@ -443,12 +488,11 @@ void CDebugMemorySearch::SearchForUnknown()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::SetWindowText(GetDlgItem(IDC_BORDER_RESULTS),stdstr_f("Results (%d)",m_SearchResults.GetItemCount()).c_str());
|
::SetWindowText(GetDlgItem(IDC_BORDER_RESULTS),stdstr_f("Results (%d)",m_SearchResults.GetItemCount()).c_str());
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDebugMemorySearch::SearchForText()
|
void CDebugMemorySearch::SearchForText()
|
||||||
{
|
{
|
||||||
//
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDebugMemorySearch::Reset ( void )
|
void CDebugMemorySearch::Reset ( void )
|
||||||
|
@ -482,9 +526,9 @@ void CDebugMemorySearch::Reset ( void )
|
||||||
FixUnknownOptions(true);
|
FixUnknownOptions(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDebugMemorySearch::FixUnknownOptions ( bool /*Reset*/ )
|
void CDebugMemorySearch::FixUnknownOptions ( bool Reset )
|
||||||
{
|
{
|
||||||
/* CComboBox & cb = m_UnknownOptions ;
|
CComboBox & cb = m_UnknownOptions ;
|
||||||
|
|
||||||
if (!Reset && cb.GetCount() > 1)
|
if (!Reset && cb.GetCount() > 1)
|
||||||
{
|
{
|
||||||
|
@ -493,15 +537,224 @@ void CDebugMemorySearch::FixUnknownOptions ( bool /*Reset*/ )
|
||||||
cb.ResetContent();
|
cb.ResetContent();
|
||||||
if (Reset)
|
if (Reset)
|
||||||
{
|
{
|
||||||
cb.SetItemData(cb.AddString("Create compare base"),CMipsMemory::SearchChangeState_Reset);
|
cb.SetItemData(cb.AddString("Create compare base"),SearchChangeState_Reset);
|
||||||
cb.SetCurSel(0);
|
cb.SetCurSel(0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cb.SetItemData(cb.AddString("memory changed"),CMipsMemory::SearchChangeState_Changed);
|
cb.SetItemData(cb.AddString("memory changed"),SearchChangeState_Changed);
|
||||||
cb.SetItemData(cb.AddString("memory unchanged"),CMipsMemory::SearchChangeState_Unchanged);
|
cb.SetItemData(cb.AddString("memory unchanged"),SearchChangeState_Unchanged);
|
||||||
cb.SetItemData(cb.AddString("Value has increased"),CMipsMemory::SearchChangeState_Greater);
|
cb.SetItemData(cb.AddString("Value has increased"),SearchChangeState_Greater);
|
||||||
cb.SetItemData(cb.AddString("Value has descreased"),CMipsMemory::SearchChangeState_Lessthan);
|
cb.SetItemData(cb.AddString("Value has descreased"),SearchChangeState_Lessthan);
|
||||||
cb.SetCurSel(1);
|
cb.SetCurSel(1);
|
||||||
::SetWindowText(GetDlgItem(IDC_BTN_SEARCH),"Search");*/
|
::SetWindowText(GetDlgItem(IDC_BTN_SEARCH),"Search");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CDebugMemorySearch::SearchSetBaseForChanges ( void )
|
||||||
|
{
|
||||||
|
if (m_MemoryState != NULL)
|
||||||
|
{
|
||||||
|
delete [] m_MemoryState;
|
||||||
|
}
|
||||||
|
m_MemoryStateSize = g_MMU->RdramSize();
|
||||||
|
m_MemoryState = new BYTE[m_MemoryStateSize];
|
||||||
|
memcpy(m_MemoryState,g_MMU->Rdram(),m_MemoryStateSize);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CDebugMemorySearch::SearchForChanges(SearchMemChangeState SearchType, MemorySize Size,
|
||||||
|
DWORD &StartAddress, DWORD &Len,
|
||||||
|
DWORD &OldValue, DWORD &NewValue)
|
||||||
|
{
|
||||||
|
if (g_MMU == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SearchType == SearchChangeState_Reset)
|
||||||
|
{
|
||||||
|
Notify().BreakPoint(__FILE__,__LINE__);
|
||||||
|
}
|
||||||
|
if (Size == _32Bit) { StartAddress = ((StartAddress + 3) & ~3); }
|
||||||
|
if (Size == _16Bit) { StartAddress = ((StartAddress + 1) & ~1); }
|
||||||
|
|
||||||
|
//search memory
|
||||||
|
if (StartAddress < g_MMU->RdramSize())
|
||||||
|
{
|
||||||
|
DWORD EndMemSearchAddr = StartAddress + Len;
|
||||||
|
if (EndMemSearchAddr > g_MMU->RdramSize())
|
||||||
|
{
|
||||||
|
EndMemSearchAddr = g_MMU->RdramSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD pos;
|
||||||
|
switch (Size)
|
||||||
|
{
|
||||||
|
case _32Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos += 4)
|
||||||
|
{
|
||||||
|
OldValue = *(DWORD *)(m_MemoryState + pos);
|
||||||
|
NewValue = *(DWORD *)(g_MMU->Rdram() + pos);
|
||||||
|
if ((SearchType == SearchChangeState_Changed && NewValue != OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Unchanged && NewValue == OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Greater && NewValue > OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Lessthan && NewValue < OldValue))
|
||||||
|
{
|
||||||
|
*(DWORD *)(m_MemoryState + pos) = NewValue;
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _16Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos += 2)
|
||||||
|
{
|
||||||
|
OldValue = *(WORD *)(m_MemoryState + (pos ^ 2));
|
||||||
|
NewValue = *(WORD *)(g_MMU->Rdram() + (pos ^ 2));
|
||||||
|
if ((SearchType == SearchChangeState_Changed && NewValue != OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Unchanged && NewValue == OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Greater && NewValue > OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Lessthan && NewValue < OldValue))
|
||||||
|
{
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _8Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos ++)
|
||||||
|
{
|
||||||
|
OldValue = *(BYTE *)(m_MemoryState + (pos ^ 3));
|
||||||
|
NewValue = *(BYTE *)(g_MMU->Rdram() + (pos ^ 3));
|
||||||
|
if ((SearchType == SearchChangeState_Changed && NewValue != OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Unchanged && NewValue == OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Greater && NewValue > OldValue) ||
|
||||||
|
(SearchType == SearchChangeState_Lessthan && NewValue < OldValue))
|
||||||
|
{
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CDebugMemorySearch::SearchForValue (DWORD Value, MemorySize Size, DWORD &StartAddress, DWORD &Len )
|
||||||
|
{
|
||||||
|
if (g_MMU == NULL || g_Rom == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Size == _32Bit) { StartAddress = ((StartAddress + 3) & ~3); }
|
||||||
|
if (Size == _16Bit) { StartAddress = ((StartAddress + 1) & ~1); }
|
||||||
|
|
||||||
|
//search memory
|
||||||
|
if (StartAddress < g_MMU->RdramSize())
|
||||||
|
{
|
||||||
|
DWORD EndMemSearchAddr = StartAddress + Len;
|
||||||
|
if (EndMemSearchAddr > g_MMU->RdramSize())
|
||||||
|
{
|
||||||
|
EndMemSearchAddr = g_MMU->RdramSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD pos;
|
||||||
|
BYTE * RDRAM = g_MMU->Rdram();
|
||||||
|
switch (Size)
|
||||||
|
{
|
||||||
|
case _32Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos += 4)
|
||||||
|
{
|
||||||
|
if (*(DWORD *)(RDRAM + pos) == Value)
|
||||||
|
{
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _16Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos += 2)
|
||||||
|
{
|
||||||
|
if (*(WORD *)(RDRAM + (pos ^ 2)) == (WORD)Value)
|
||||||
|
{
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _8Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos ++)
|
||||||
|
{
|
||||||
|
if (*(BYTE *)(RDRAM + (pos ^ 3)) == (BYTE)Value)
|
||||||
|
{
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (StartAddress >= 0x10000000)
|
||||||
|
{
|
||||||
|
DWORD EndMemSearchAddr = StartAddress + Len - 0x10000000;
|
||||||
|
if (EndMemSearchAddr > g_Rom->GetRomSize())
|
||||||
|
{
|
||||||
|
EndMemSearchAddr = g_Rom->GetRomSize();
|
||||||
|
}
|
||||||
|
StartAddress -= 0x10000000;
|
||||||
|
|
||||||
|
DWORD pos;
|
||||||
|
BYTE * ROM = g_Rom->GetRomAddress();
|
||||||
|
switch (Size)
|
||||||
|
{
|
||||||
|
case _32Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos += 4)
|
||||||
|
{
|
||||||
|
if (*(DWORD *)(ROM + pos) == Value)
|
||||||
|
{
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos + 0x10000000;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _16Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos += 2)
|
||||||
|
{
|
||||||
|
if (*(WORD *)(ROM + (pos ^ 2)) == (WORD)Value)
|
||||||
|
{
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos + 0x10000000;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _8Bit:
|
||||||
|
for (pos = StartAddress; pos < EndMemSearchAddr; pos ++)
|
||||||
|
{
|
||||||
|
if (*(BYTE *)(ROM + (pos ^ 3)) == (BYTE)Value)
|
||||||
|
{
|
||||||
|
Len -= pos - StartAddress;
|
||||||
|
StartAddress = pos + 0x10000000;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,23 @@ private:
|
||||||
CDebugMemorySearch(const CDebugMemorySearch&); // Disable copy constructor
|
CDebugMemorySearch(const CDebugMemorySearch&); // Disable copy constructor
|
||||||
CDebugMemorySearch& operator=(const CDebugMemorySearch&); // Disable assignment
|
CDebugMemorySearch& operator=(const CDebugMemorySearch&); // Disable assignment
|
||||||
|
|
||||||
|
enum MemorySize
|
||||||
|
{
|
||||||
|
_8Bit,
|
||||||
|
_16Bit,
|
||||||
|
_32Bit,
|
||||||
|
};
|
||||||
|
|
||||||
|
//Searching for value
|
||||||
|
enum SearchMemChangeState
|
||||||
|
{
|
||||||
|
SearchChangeState_Reset,
|
||||||
|
SearchChangeState_Changed,
|
||||||
|
SearchChangeState_Unchanged,
|
||||||
|
SearchChangeState_Greater,
|
||||||
|
SearchChangeState_Lessthan,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
DWORD PAddr;
|
DWORD PAddr;
|
||||||
DWORD Value;
|
DWORD Value;
|
||||||
|
@ -52,11 +69,17 @@ private:
|
||||||
CListViewCtrl m_SearchResults;
|
CListViewCtrl m_SearchResults;
|
||||||
SearchResult m_SearchResult;
|
SearchResult m_SearchResult;
|
||||||
bool m_HaveResults;
|
bool m_HaveResults;
|
||||||
CN64System * m_System;
|
|
||||||
|
//Searching memory
|
||||||
|
BYTE * m_MemoryState;
|
||||||
|
DWORD m_MemoryStateSize;
|
||||||
|
|
||||||
void FixUnknownOptions ( bool Reset );
|
void FixUnknownOptions ( bool Reset );
|
||||||
void SearchForUnknown ( void );
|
void SearchForUnknown ( void );
|
||||||
void SearchForValue ( void );
|
void SearchForValue ( void );
|
||||||
void SearchForText ( void );
|
void SearchForText ( void );
|
||||||
void Reset ( 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 );
|
||||||
};
|
};
|
||||||
|
|
|
@ -83,6 +83,27 @@ LRESULT CDebugMemoryView::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM
|
||||||
m_MemoryList->AddColumn( _T( "Memory Ascii" ), 140 );
|
m_MemoryList->AddColumn( _T( "Memory Ascii" ), 140 );
|
||||||
::SetWindowLongPtr(m_MemoryList->m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
|
::SetWindowLongPtr(m_MemoryList->m_hWnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE);
|
||||||
RefreshMemory(false);
|
RefreshMemory(false);
|
||||||
|
int height = m_MemoryList->GetTotalHeight();
|
||||||
|
|
||||||
|
RECT MemoryListRect = {0};
|
||||||
|
::GetClientRect(GetDlgItem( IDC_MEM_DETAILS ), &MemoryListRect);
|
||||||
|
|
||||||
|
if (height > MemoryListRect.bottom)
|
||||||
|
{
|
||||||
|
RECT MemoryListWindow = {0};
|
||||||
|
GetWindowRect(&MemoryListWindow);
|
||||||
|
SetWindowPos(NULL,0,0,MemoryListWindow.right - MemoryListWindow.left,(MemoryListWindow.bottom - MemoryListWindow.top) + (height - MemoryListRect.bottom), SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOZORDER);
|
||||||
|
|
||||||
|
RECT DlgItemRect = {0};
|
||||||
|
::GetWindowRect(GetDlgItem( IDC_BORDER ), &DlgItemRect);
|
||||||
|
::SetWindowPos(GetDlgItem( IDC_BORDER ), NULL,0,0,DlgItemRect.right - DlgItemRect.left,(DlgItemRect.bottom - DlgItemRect.top) + (height - MemoryListRect.bottom), SWP_NOMOVE);
|
||||||
|
|
||||||
|
::GetWindowRect(GetDlgItem( IDC_MEM_DETAILS ), &DlgItemRect);
|
||||||
|
::SetWindowPos(GetDlgItem( IDC_MEM_DETAILS ), NULL,0,0,DlgItemRect.right - DlgItemRect.left,(DlgItemRect.bottom - DlgItemRect.top) + (height - MemoryListRect.bottom), SWP_NOMOVE);
|
||||||
|
|
||||||
|
::GetWindowRect(GetDlgItem( IDC_SCRL_BAR ), &DlgItemRect);
|
||||||
|
::SetWindowPos(GetDlgItem( IDC_SCRL_BAR ), NULL,0,0,DlgItemRect.right - DlgItemRect.left,(DlgItemRect.bottom - DlgItemRect.top) + (height - MemoryListRect.bottom), SWP_NOMOVE);
|
||||||
|
}
|
||||||
WindowCreated();
|
WindowCreated();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -186,10 +207,10 @@ LRESULT CDebugMemoryView::OnMemoryModified ( LPNMHDR lpNMHDR )
|
||||||
WriteTraceF(TraceError,__FUNCTION__ ": failed to store at %X",m_DataStartLoc + Pos);
|
WriteTraceF(TraceError,__FUNCTION__ ": failed to store at %X",m_DataStartLoc + Pos);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*if (!g_MMU->SD_VAddr(m_DataStartLoc+ Pos,Value,_8Bit))
|
if (!g_MMU->SB_PAddr(m_DataStartLoc + Pos,(BYTE)Value))
|
||||||
{
|
{
|
||||||
WriteTraceF(TraceError,__FUNCTION__ ": failed to store at %X",m_DataStartLoc + Pos);
|
WriteTraceF(TraceError,__FUNCTION__ ": failed to store at %X",m_DataStartLoc + Pos);
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
Insert_MemoryLineDump(LineNumber);
|
Insert_MemoryLineDump(LineNumber);
|
||||||
|
|
||||||
|
@ -373,10 +394,10 @@ void CDebugMemoryView::RefreshMemory ( bool ResetCompare )
|
||||||
ValidData = false;
|
ValidData = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*if (!g_MMU->LoadPhysical32(m_DataStartLoc & ~3, word.UW, _32Bit,false))
|
if (!g_MMU->LW_PAddr(m_DataStartLoc & ~3, word.UW))
|
||||||
{
|
{
|
||||||
ValidData = false;
|
ValidData = false;
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Offset = (m_DataStartLoc & 3);
|
int Offset = (m_DataStartLoc & 3);
|
||||||
|
@ -408,10 +429,10 @@ void CDebugMemoryView::RefreshMemory ( bool ResetCompare )
|
||||||
ValidData = false;
|
ValidData = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*if (!g_MMU->LoadPhysical32(Pos, word.UW, _32Bit,false))
|
if (!g_MMU->LW_PAddr(Pos, word.UW))
|
||||||
{
|
{
|
||||||
ValidData = false;
|
ValidData = false;
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
|
|
|
@ -30,11 +30,21 @@ public:
|
||||||
virtual BOOL LW_VAddr ( DWORD VAddr, DWORD & Value ) = 0;
|
virtual BOOL LW_VAddr ( DWORD VAddr, DWORD & Value ) = 0;
|
||||||
virtual BOOL LD_VAddr ( DWORD VAddr, QWORD & Value ) = 0;
|
virtual BOOL LD_VAddr ( DWORD VAddr, QWORD & Value ) = 0;
|
||||||
|
|
||||||
|
virtual BOOL LB_PAddr ( DWORD PAddr, BYTE & Value ) = 0;
|
||||||
|
virtual BOOL LH_PAddr ( DWORD PAddr, WORD & Value ) = 0;
|
||||||
|
virtual BOOL LW_PAddr ( DWORD PAddr, DWORD & Value ) = 0;
|
||||||
|
virtual BOOL LD_PAddr ( DWORD PAddr, QWORD & Value ) = 0;
|
||||||
|
|
||||||
virtual BOOL SB_VAddr ( DWORD VAddr, BYTE Value ) = 0;
|
virtual BOOL SB_VAddr ( DWORD VAddr, BYTE Value ) = 0;
|
||||||
virtual BOOL SH_VAddr ( DWORD VAddr, WORD Value ) = 0;
|
virtual BOOL SH_VAddr ( DWORD VAddr, WORD Value ) = 0;
|
||||||
virtual BOOL SW_VAddr ( DWORD VAddr, DWORD Value ) = 0;
|
virtual BOOL SW_VAddr ( DWORD VAddr, DWORD Value ) = 0;
|
||||||
virtual BOOL SD_VAddr ( DWORD VAddr, QWORD Value ) = 0;
|
virtual BOOL SD_VAddr ( DWORD VAddr, QWORD Value ) = 0;
|
||||||
|
|
||||||
|
virtual BOOL SB_PAddr ( DWORD PAddr, BYTE Value ) = 0;
|
||||||
|
virtual BOOL SH_PAddr ( DWORD PAddr, WORD Value ) = 0;
|
||||||
|
virtual BOOL SW_PAddr ( DWORD PAddr, DWORD Value ) = 0;
|
||||||
|
virtual BOOL SD_PAddr ( DWORD PAddr, QWORD Value ) = 0;
|
||||||
|
|
||||||
virtual bool ValidVaddr ( DWORD VAddr ) const = 0;
|
virtual bool ValidVaddr ( DWORD VAddr ) const = 0;
|
||||||
|
|
||||||
virtual int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer ) = 0;
|
virtual int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer ) = 0;
|
||||||
|
|
|
@ -260,8 +260,7 @@ BOOL CMipsMemoryVM::LW_VAddr ( DWORD VAddr, DWORD & Value )
|
||||||
// Command.Hex = OrigMem[(Command.Hex & 0xFFFF)].OriginalValue;
|
// Command.Hex = OrigMem[(Command.Hex & 0xFFFF)].OriginalValue;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
return TRUE;
|
return true;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CMipsMemoryVM::LD_VAddr ( DWORD VAddr, QWORD & Value )
|
BOOL CMipsMemoryVM::LD_VAddr ( DWORD VAddr, QWORD & Value )
|
||||||
|
@ -272,6 +271,67 @@ BOOL CMipsMemoryVM::LD_VAddr ( DWORD VAddr, QWORD & Value )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL CMipsMemoryVM::LB_PAddr ( DWORD PAddr, BYTE & Value )
|
||||||
|
{
|
||||||
|
if (PAddr < RdramSize())
|
||||||
|
{
|
||||||
|
Value = *(BYTE *)(m_RDRAM + (PAddr ^ 3));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (PAddr > 0x18000000)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CMipsMemoryVM::LH_PAddr ( DWORD PAddr, WORD & Value )
|
||||||
|
{
|
||||||
|
if (PAddr < RdramSize())
|
||||||
|
{
|
||||||
|
Value = *(WORD *)(m_RDRAM + (PAddr ^ 2));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (PAddr > 0x18000000)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CMipsMemoryVM::LW_PAddr ( DWORD PAddr, DWORD & Value )
|
||||||
|
{
|
||||||
|
if (PAddr < RdramSize())
|
||||||
|
{
|
||||||
|
Value = *(DWORD *)(m_RDRAM + PAddr);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (PAddr > 0x18000000)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CMipsMemoryVM::LD_PAddr ( DWORD PAddr, QWORD & Value )
|
||||||
|
{
|
||||||
|
if (PAddr < RdramSize())
|
||||||
|
{
|
||||||
|
*((DWORD *)(&Value) + 1) = *(DWORD *)(m_RDRAM + PAddr);
|
||||||
|
*((DWORD *)(&Value)) = *(DWORD *)(m_RDRAM + PAddr + 4);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (PAddr > 0x18000000)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL CMipsMemoryVM::SB_VAddr ( DWORD VAddr, BYTE Value )
|
BOOL CMipsMemoryVM::SB_VAddr ( DWORD VAddr, BYTE Value )
|
||||||
{
|
{
|
||||||
if (m_TLB_WriteMap[VAddr >> 12] == 0) { return FALSE; }
|
if (m_TLB_WriteMap[VAddr >> 12] == 0) { return FALSE; }
|
||||||
|
@ -311,6 +371,68 @@ BOOL CMipsMemoryVM::SD_VAddr ( DWORD VAddr, QWORD Value )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL CMipsMemoryVM::SB_PAddr ( DWORD PAddr, BYTE Value )
|
||||||
|
{
|
||||||
|
if (PAddr < RdramSize())
|
||||||
|
{
|
||||||
|
*(BYTE *)(m_RDRAM + (PAddr ^ 3)) = Value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (PAddr > 0x18000000)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CMipsMemoryVM::SH_PAddr ( DWORD PAddr, WORD Value )
|
||||||
|
{
|
||||||
|
if (PAddr < RdramSize())
|
||||||
|
{
|
||||||
|
*(WORD *)(m_RDRAM + (PAddr ^ 2)) = Value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (PAddr > 0x18000000)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CMipsMemoryVM::SW_PAddr ( DWORD PAddr, DWORD Value )
|
||||||
|
{
|
||||||
|
if (PAddr < RdramSize())
|
||||||
|
{
|
||||||
|
*(DWORD *)(m_RDRAM + PAddr) = Value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (PAddr > 0x18000000)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CMipsMemoryVM::SD_PAddr ( DWORD PAddr, QWORD Value )
|
||||||
|
{
|
||||||
|
if (PAddr < RdramSize())
|
||||||
|
{
|
||||||
|
*(DWORD *)(m_RDRAM + PAddr) = *((DWORD *)(&Value) + 1);
|
||||||
|
*(DWORD *)(m_RDRAM + PAddr + 4) = *((DWORD *)(&Value));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (PAddr > 0x18000000)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_Notify->BreakPoint(__FILE__,__LINE__);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool CMipsMemoryVM::ValidVaddr ( DWORD VAddr ) const
|
bool CMipsMemoryVM::ValidVaddr ( DWORD VAddr ) const
|
||||||
{
|
{
|
||||||
return m_TLB_ReadMap[VAddr >> 12] != 0;
|
return m_TLB_ReadMap[VAddr >> 12] != 0;
|
||||||
|
|
|
@ -41,11 +41,21 @@ public:
|
||||||
BOOL LW_VAddr ( DWORD VAddr, DWORD & Value );
|
BOOL LW_VAddr ( DWORD VAddr, DWORD & Value );
|
||||||
BOOL LD_VAddr ( DWORD VAddr, QWORD & Value );
|
BOOL LD_VAddr ( DWORD VAddr, QWORD & Value );
|
||||||
|
|
||||||
|
BOOL LB_PAddr ( DWORD PAddr, BYTE & Value );
|
||||||
|
BOOL LH_PAddr ( DWORD PAddr, WORD & Value );
|
||||||
|
BOOL LW_PAddr ( DWORD PAddr, DWORD & Value );
|
||||||
|
BOOL LD_PAddr ( DWORD PAddr, QWORD & Value );
|
||||||
|
|
||||||
BOOL SB_VAddr ( DWORD VAddr, BYTE Value );
|
BOOL SB_VAddr ( DWORD VAddr, BYTE Value );
|
||||||
BOOL SH_VAddr ( DWORD VAddr, WORD Value );
|
BOOL SH_VAddr ( DWORD VAddr, WORD Value );
|
||||||
BOOL SW_VAddr ( DWORD VAddr, DWORD Value );
|
BOOL SW_VAddr ( DWORD VAddr, DWORD Value );
|
||||||
BOOL SD_VAddr ( DWORD VAddr, QWORD Value );
|
BOOL SD_VAddr ( DWORD VAddr, QWORD Value );
|
||||||
|
|
||||||
|
BOOL SB_PAddr ( DWORD PAddr, BYTE Value );
|
||||||
|
BOOL SH_PAddr ( DWORD PAddr, WORD Value );
|
||||||
|
BOOL SW_PAddr ( DWORD PAddr, DWORD Value );
|
||||||
|
BOOL SD_PAddr ( DWORD PAddr, QWORD Value );
|
||||||
|
|
||||||
int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer );
|
int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer );
|
||||||
|
|
||||||
//Protect the Memory from being written to
|
//Protect the Memory from being written to
|
||||||
|
|
|
@ -501,7 +501,7 @@ FONT 8, "MS Sans Serif", 0, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
EDITTEXT IDC_ADDR_EDIT,38,13,66,12
|
EDITTEXT IDC_ADDR_EDIT,38,13,66,12
|
||||||
LTEXT "Address:",IDC_STATIC,7,14,29,11
|
LTEXT "Address:",IDC_STATIC,7,14,29,11
|
||||||
GROUPBOX "",IDC_STATIC,2,3,440,187,0,WS_EX_DLGMODALFRAME
|
GROUPBOX "",IDC_BORDER,2,3,440,187,0,WS_EX_DLGMODALFRAME
|
||||||
CONTROL "Is VAddr?",IDC_CHK_VADDR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,15,46,8
|
CONTROL "Is VAddr?",IDC_CHK_VADDR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,15,46,8
|
||||||
PUSHBUTTON "Dump",IDC_DUMP_MEM,264,12,54,13
|
PUSHBUTTON "Dump",IDC_DUMP_MEM,264,12,54,13
|
||||||
PUSHBUTTON "Search",IDC_SEARCH_MEM,322,12,54,13
|
PUSHBUTTON "Search",IDC_SEARCH_MEM,322,12,54,13
|
||||||
|
|
|
@ -240,6 +240,7 @@
|
||||||
#define IDC_AUDIO_NAME 1099
|
#define IDC_AUDIO_NAME 1099
|
||||||
#define IDC_ROM_REGCACHE 1099
|
#define IDC_ROM_REGCACHE 1099
|
||||||
#define IDC_COUNTPERBYTE_TEXT 1099
|
#define IDC_COUNTPERBYTE_TEXT 1099
|
||||||
|
#define IDC_BORDER 1099
|
||||||
#define IDC_CONT_NAME 1100
|
#define IDC_CONT_NAME 1100
|
||||||
#define IDC_COUNTPERBYTE 1100
|
#define IDC_COUNTPERBYTE 1100
|
||||||
#define IDC_DIR_FRAME1 1101
|
#define IDC_DIR_FRAME1 1101
|
||||||
|
@ -349,7 +350,7 @@
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 150
|
#define _APS_NEXT_RESOURCE_VALUE 150
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40008
|
#define _APS_NEXT_COMMAND_VALUE 40008
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1099
|
#define _APS_NEXT_CONTROL_VALUE 1100
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue