hex editor memview: added OAM view and dump to file, added HOME/END key response, added bounds checking in a bunch of places to keep the view and edits within the memory bounds
This commit is contained in:
parent
35b1f160dc
commit
1814be4da5
|
@ -55,7 +55,8 @@ using namespace std;
|
||||||
|
|
||||||
#define MODE_NES_MEMORY 0
|
#define MODE_NES_MEMORY 0
|
||||||
#define MODE_NES_PPU 1
|
#define MODE_NES_PPU 1
|
||||||
#define MODE_NES_FILE 2
|
#define MODE_NES_OAM 2
|
||||||
|
#define MODE_NES_FILE 3
|
||||||
|
|
||||||
#define ID_ADDRESS_FRZ_SUBMENU 1
|
#define ID_ADDRESS_FRZ_SUBMENU 1
|
||||||
#define ID_ADDRESS_ADDBP_R 2
|
#define ID_ADDRESS_ADDBP_R 2
|
||||||
|
@ -97,6 +98,9 @@ int HexFreezeColorB = 255;
|
||||||
int RomFreezeColorR = 255; // Red
|
int RomFreezeColorR = 255; // Red
|
||||||
int RomFreezeColorG = 0;
|
int RomFreezeColorG = 0;
|
||||||
int RomFreezeColorB = 0;
|
int RomFreezeColorB = 0;
|
||||||
|
int HexBoundColorR = 220; // Grey
|
||||||
|
int HexBoundColorG = 220;
|
||||||
|
int HexBoundColorB = 220;
|
||||||
|
|
||||||
// This defines all of our right click popup menus
|
// This defines all of our right click popup menus
|
||||||
struct
|
struct
|
||||||
|
@ -130,9 +134,7 @@ void InputData(char *input);
|
||||||
int GetMemViewData(uint32 i);
|
int GetMemViewData(uint32 i);
|
||||||
int UpdateCheatColorCallB(char *name, uint32 a, uint8 v, int compare,int s,int type, void *data); //mbg merge 6/29/06 - added arg
|
int UpdateCheatColorCallB(char *name, uint32 a, uint8 v, int compare,int s,int type, void *data); //mbg merge 6/29/06 - added arg
|
||||||
int DeleteCheatCallB(char *name, uint32 a, uint8 v, int compare,int s,int type); //mbg merge 6/29/06 - added arg
|
int DeleteCheatCallB(char *name, uint32 a, uint8 v, int compare,int s,int type); //mbg merge 6/29/06 - added arg
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
void FreezeRam(int address, int mode, int final);
|
void FreezeRam(int address, int mode, int final);
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
int GetHexScreenCoordx(int offset);
|
int GetHexScreenCoordx(int offset);
|
||||||
int GetHexScreenCoordy(int offset);
|
int GetHexScreenCoordy(int offset);
|
||||||
int GetAddyFromCoord(int x,int y);
|
int GetAddyFromCoord(int x,int y);
|
||||||
|
@ -173,7 +175,7 @@ static char chartable[256];
|
||||||
HDC HDataDC;
|
HDC HDataDC;
|
||||||
int CursorX=2, CursorY=9;
|
int CursorX=2, CursorY=9;
|
||||||
int CursorStartAddy, CursorEndAddy = PREVIOUS_VALUE_UNDEFINED;
|
int CursorStartAddy, CursorEndAddy = PREVIOUS_VALUE_UNDEFINED;
|
||||||
int CursorDragPoint;//, CursorShiftPoint = -1;
|
int CursorDragPoint = -1;//, CursorShiftPoint = -1;
|
||||||
//int CursorStartNibble=1, CursorEndNibble; //1 means that only half of the byte is selected
|
//int CursorStartNibble=1, CursorEndNibble; //1 means that only half of the byte is selected
|
||||||
int TempData = PREVIOUS_VALUE_UNDEFINED;
|
int TempData = PREVIOUS_VALUE_UNDEFINED;
|
||||||
int DataAmount;
|
int DataAmount;
|
||||||
|
@ -253,7 +255,7 @@ void UndoLastPatch(){
|
||||||
|
|
||||||
undo_list=undo_list->last;
|
undo_list=undo_list->last;
|
||||||
|
|
||||||
ChangeMemViewFocus(2,tmp->addr, -1); //move to the focus to where we are undoing at.
|
ChangeMemViewFocus(MODE_NES_FILE,tmp->addr, -1); //move to the focus to where we are undoing at.
|
||||||
|
|
||||||
free(tmp->data);
|
free(tmp->data);
|
||||||
free(tmp);
|
free(tmp);
|
||||||
|
@ -474,7 +476,10 @@ void UpdateMemoryView(int draw_all)
|
||||||
if ((PreviousCurOffset != CurOffset) || draw_all)
|
if ((PreviousCurOffset != CurOffset) || draw_all)
|
||||||
{
|
{
|
||||||
MoveToEx(HDataDC,0,MemFontHeight*((i-CurOffset)/16),NULL);
|
MoveToEx(HDataDC,0,MemFontHeight*((i-CurOffset)/16),NULL);
|
||||||
SetTextColor(HDataDC,RGB(HexForeColorR,HexForeColorG,HexForeColorB)); //addresses text color 000 = black, 255255255 = white
|
if (i < MaxSize)
|
||||||
|
SetTextColor(HDataDC,RGB(HexForeColorR,HexForeColorG,HexForeColorB)); //addresses text color 000 = black, 255255255 = white
|
||||||
|
else
|
||||||
|
SetTextColor(HDataDC,RGB(HexBoundColorR,HexBoundColorG,HexBoundColorB)); // addresses out of bounds
|
||||||
SetBkColor(HDataDC,RGB(HexBackColorR,HexBackColorG,HexBackColorB)); //addresses back color
|
SetBkColor(HDataDC,RGB(HexBackColorR,HexBackColorG,HexBackColorB)); //addresses back color
|
||||||
sprintf(str,"%06X: ",i);
|
sprintf(str,"%06X: ",i);
|
||||||
TextOut(HDataDC,0,0,str,strlen(str));
|
TextOut(HDataDC,0,0,str,strlen(str));
|
||||||
|
@ -610,7 +615,7 @@ void UpdateMemoryView(int draw_all)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char EditString[3][20] = {"RAM","PPU","ROM"};
|
char EditString[4][20] = {"RAM","PPU","OAM","ROM"};
|
||||||
|
|
||||||
void UpdateCaption()
|
void UpdateCaption()
|
||||||
{
|
{
|
||||||
|
@ -681,6 +686,11 @@ int GetMemViewData(uint32 i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (EditingMode == MODE_NES_OAM)
|
||||||
|
{
|
||||||
|
return SPRAM[i & 0xFF];
|
||||||
|
}
|
||||||
|
|
||||||
if (EditingMode == MODE_NES_FILE)
|
if (EditingMode == MODE_NES_FILE)
|
||||||
{
|
{
|
||||||
//todo: use getfiledata() here
|
//todo: use getfiledata() here
|
||||||
|
@ -709,16 +719,12 @@ void UpdateColorTable()
|
||||||
TextColorList[i] = RGB(HexForeColorR,HexForeColorG,HexForeColorB); //Regular color text - 2 columns
|
TextColorList[i] = RGB(HexForeColorR,HexForeColorG,HexForeColorB); //Regular color text - 2 columns
|
||||||
}
|
}
|
||||||
|
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
|
|
||||||
for (j=0;j<nextBookmark;j++)
|
for (j=0;j<nextBookmark;j++)
|
||||||
{
|
{
|
||||||
if(((int)hexBookmarks[j].address >= CurOffset) && ((int)hexBookmarks[j].address < CurOffset+DataAmount))
|
if(((int)hexBookmarks[j].address >= CurOffset) && ((int)hexBookmarks[j].address < CurOffset+DataAmount))
|
||||||
TextColorList[hexBookmarks[j].address - CurOffset] = RGB(0,0xCC,0); // Green for Bookmarks
|
TextColorList[hexBookmarks[j].address - CurOffset] = RGB(0,0xCC,0); // Green for Bookmarks
|
||||||
}
|
}
|
||||||
|
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
|
|
||||||
//mbg merge 6/29/06 - added argument
|
//mbg merge 6/29/06 - added argument
|
||||||
if (EditingMode == MODE_NES_MEMORY)
|
if (EditingMode == MODE_NES_MEMORY)
|
||||||
FCEUI_ListCheats(UpdateCheatColorCallB, 0);
|
FCEUI_ListCheats(UpdateCheatColorCallB, 0);
|
||||||
|
@ -815,8 +821,6 @@ int DeleteCheatCallB(char *name, uint32 a, uint8 v, int compare,int s,int type,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
|
|
||||||
void dumpToFile(const char* buffer, unsigned int size)
|
void dumpToFile(const char* buffer, unsigned int size)
|
||||||
{
|
{
|
||||||
char name[513] = {0};
|
char name[513] = {0};
|
||||||
|
@ -884,13 +888,11 @@ void UnfreezeAllRam() {
|
||||||
|
|
||||||
void FreezeRam(int address, int mode, int final){
|
void FreezeRam(int address, int mode, int final){
|
||||||
// mode: -1 == Unfreeze; 0 == Toggle; 1 == Freeze
|
// mode: -1 == Unfreeze; 0 == Toggle; 1 == Freeze
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
if(FrozenAddressCount <= 256 && (address < 0x2000) || ((address >= 0x6000) && (address <= 0x7FFF))){
|
if(FrozenAddressCount <= 256 && (address < 0x2000) || ((address >= 0x6000) && (address <= 0x7FFF))){
|
||||||
//adelikat: added FrozenAddressCount check to if statement to prevent user from freezing more than 256 address (unfreezing when > 256 crashes)
|
//adelikat: added FrozenAddressCount check to if statement to prevent user from freezing more than 256 address (unfreezing when > 256 crashes)
|
||||||
addrtodelete = address;
|
addrtodelete = address;
|
||||||
cheatwasdeleted = 0;
|
cheatwasdeleted = 0;
|
||||||
|
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
if (mode == 0 || mode == -1)
|
if (mode == 0 || mode == -1)
|
||||||
{
|
{
|
||||||
//mbg merge 6/29/06 - added argument
|
//mbg merge 6/29/06 - added argument
|
||||||
|
@ -903,7 +905,6 @@ void FreezeRam(int address, int mode, int final){
|
||||||
FCEUI_ListCheats(DeleteCheatCallB,0);
|
FCEUI_ListCheats(DeleteCheatCallB,0);
|
||||||
FCEUI_AddCheat("",address,GetMem(address),-1,1);
|
FCEUI_AddCheat("",address,GetMem(address),-1,1);
|
||||||
}
|
}
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
|
|
||||||
//if (final)
|
//if (final)
|
||||||
//{
|
//{
|
||||||
|
@ -954,6 +955,8 @@ void InputData(char *input){
|
||||||
//return;
|
//return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (datasize < 1) return; // avoid adjusting cursor and accidentally writing at end
|
||||||
|
|
||||||
//its possible for this loop not to get executed at all
|
//its possible for this loop not to get executed at all
|
||||||
// for(addr = CursorStartAddy;addr < datasize+CursorStartAddy;addr++){
|
// for(addr = CursorStartAddy;addr < datasize+CursorStartAddy;addr++){
|
||||||
//sprintf(str,"datasize = %d",datasize);
|
//sprintf(str,"datasize = %d",datasize);
|
||||||
|
@ -962,6 +965,8 @@ void InputData(char *input){
|
||||||
for(i = 0;i < datasize;i++){
|
for(i = 0;i < datasize;i++){
|
||||||
addr = CursorStartAddy+i;
|
addr = CursorStartAddy+i;
|
||||||
|
|
||||||
|
if (addr >= MaxSize) continue;
|
||||||
|
|
||||||
if (EditingMode == MODE_NES_MEMORY)
|
if (EditingMode == MODE_NES_MEMORY)
|
||||||
{
|
{
|
||||||
// RAM (system bus)
|
// RAM (system bus)
|
||||||
|
@ -976,6 +981,10 @@ void InputData(char *input){
|
||||||
vnapage[(addr>>10)&0x3][addr&0x3FF] = data[i]; //todo: this causes 0x3000-0x3f00 to mirror 0x2000-0x2f00, is this correct?
|
vnapage[(addr>>10)&0x3][addr&0x3FF] = data[i]; //todo: this causes 0x3000-0x3f00 to mirror 0x2000-0x2f00, is this correct?
|
||||||
if((addr >= 0x3F00) && (addr < 0x3FFF))
|
if((addr >= 0x3F00) && (addr < 0x3FFF))
|
||||||
PALRAM[addr&0x1F] = data[i];
|
PALRAM[addr&0x1F] = data[i];
|
||||||
|
} else if (EditingMode == MODE_NES_OAM)
|
||||||
|
{
|
||||||
|
addr &= 0xFF;
|
||||||
|
SPRAM[addr] = data[i];
|
||||||
} else if (EditingMode == MODE_NES_FILE)
|
} else if (EditingMode == MODE_NES_FILE)
|
||||||
{
|
{
|
||||||
// ROM
|
// ROM
|
||||||
|
@ -1047,6 +1056,7 @@ void ChangeMemViewFocus(int newEditingMode, int StartOffset,int EndOffset){
|
||||||
CursorStartAddy = std::min(StartOffset,EndOffset);
|
CursorStartAddy = std::min(StartOffset,EndOffset);
|
||||||
CursorEndAddy = std::max(StartOffset,EndOffset);
|
CursorEndAddy = std::max(StartOffset,EndOffset);
|
||||||
}
|
}
|
||||||
|
CursorDragPoint = -1;
|
||||||
|
|
||||||
|
|
||||||
if(std::min(StartOffset,EndOffset) >= MaxSize)return; //this should never happen
|
if(std::min(StartOffset,EndOffset) >= MaxSize)return; //this should never happen
|
||||||
|
@ -1121,6 +1131,8 @@ void AutoScrollFromCoord(int x,int y)
|
||||||
if (si.nPos < si.nMin) si.nPos = si.nMin;
|
if (si.nPos < si.nMin) si.nPos = si.nMin;
|
||||||
if ((si.nPos+(int)si.nPage) > si.nMax) si.nPos = si.nMax-si.nPage;
|
if ((si.nPos+(int)si.nPage) > si.nMax) si.nPos = si.nMax-si.nPage;
|
||||||
CurOffset = si.nPos*16;
|
CurOffset = si.nPos*16;
|
||||||
|
if (CurOffset + DataAmount >= MaxSize) CurOffset = MaxSize - DataAmount;
|
||||||
|
if (CurOffset < 0) CurOffset = 0;
|
||||||
SetScrollInfo(hMemView,SB_VERT,&si,TRUE);
|
SetScrollInfo(hMemView,SB_VERT,&si,TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1134,6 +1146,8 @@ void AutoScrollFromCoord(int x,int y)
|
||||||
if (si.nPos < si.nMin) si.nPos = si.nMin;
|
if (si.nPos < si.nMin) si.nPos = si.nMin;
|
||||||
if ((si.nPos+(int)si.nPage) > si.nMax) si.nPos = si.nMax-si.nPage;
|
if ((si.nPos+(int)si.nPage) > si.nMax) si.nPos = si.nMax-si.nPage;
|
||||||
CurOffset = si.nPos*16;
|
CurOffset = si.nPos*16;
|
||||||
|
if (CurOffset + DataAmount >= MaxSize) CurOffset = MaxSize - DataAmount;
|
||||||
|
if (CurOffset < 0) CurOffset = 0;
|
||||||
SetScrollInfo(hMemView,SB_VERT,&si,TRUE);
|
SetScrollInfo(hMemView,SB_VERT,&si,TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1168,9 +1182,7 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
|
|
||||||
char c[2];
|
char c[2];
|
||||||
char str[100];
|
char str[100];
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
extern int debuggerWasActive;
|
extern int debuggerWasActive;
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
|
|
||||||
switch (message) {
|
switch (message) {
|
||||||
|
|
||||||
|
@ -1187,9 +1199,7 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
SetWindowPos(hwnd,0,MemView_wndx,MemView_wndy,MemViewSizeX,MemViewSizeY,SWP_NOZORDER|SWP_NOOWNERZORDER);
|
SetWindowPos(hwnd,0,MemView_wndx,MemView_wndy,MemViewSizeX,MemViewSizeY,SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||||||
|
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
debuggerWasActive = 1;
|
debuggerWasActive = 1;
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
mDC = GetDC(hwnd);
|
mDC = GetDC(hwnd);
|
||||||
HDataDC = mDC;//deleteme
|
HDataDC = mDC;//deleteme
|
||||||
SelectObject (HDataDC, debugSystem->hHexeditorFont);
|
SelectObject (HDataDC, debugSystem->hHexeditorFont);
|
||||||
|
@ -1304,8 +1314,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
|
|
||||||
if(GetKeyState(VK_CONTROL) & 0x8000){
|
if(GetKeyState(VK_CONTROL) & 0x8000){
|
||||||
|
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
|
|
||||||
if (wParam >= '0' && wParam <= '9')
|
if (wParam >= '0' && wParam <= '9')
|
||||||
{
|
{
|
||||||
int newValue = handleBookmarkMenu(wParam - '0');
|
int newValue = handleBookmarkMenu(wParam - '0');
|
||||||
|
@ -1319,8 +1327,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
|
|
||||||
switch(wParam){
|
switch(wParam){
|
||||||
case 0x43: //Ctrl+C
|
case 0x43: //Ctrl+C
|
||||||
MemViewCallB(hMemView,WM_COMMAND,MENU_MV_EDIT_COPY,0); //recursion at work
|
MemViewCallB(hMemView,WM_COMMAND,MENU_MV_EDIT_COPY,0); //recursion at work
|
||||||
|
@ -1357,8 +1363,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
//if(CursorStartAddy == CursorEndAddy)CursorEndAddy = -1;
|
//if(CursorStartAddy == CursorEndAddy)CursorEndAddy = -1;
|
||||||
if(CursorStartAddy < 0)CursorStartAddy = 0;
|
if(CursorStartAddy < 0) CursorStartAddy = 0;
|
||||||
if(CursorStartAddy >= MaxSize)CursorStartAddy = MaxSize-1; //todo: fix this up when I add support for editing more stuff
|
if(CursorStartAddy >= MaxSize) CursorStartAddy = MaxSize-1;
|
||||||
|
|
||||||
if((wParam == VK_DOWN) || (wParam == VK_UP) ||
|
if((wParam == VK_DOWN) || (wParam == VK_UP) ||
|
||||||
(wParam == VK_RIGHT) || (wParam == VK_LEFT)){
|
(wParam == VK_RIGHT) || (wParam == VK_LEFT)){
|
||||||
|
@ -1368,10 +1374,20 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
if(CursorStartAddy > CurOffset+DataAmount-0x10)CurOffset = ((CursorStartAddy-DataAmount+0x10)/16)*16;
|
if(CursorStartAddy > CurOffset+DataAmount-0x10)CurOffset = ((CursorStartAddy-DataAmount+0x10)/16)*16;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(wParam == VK_PRIOR)CurOffset-=DataAmount;
|
if(wParam == VK_PRIOR) { CurOffset-=DataAmount; CursorStartAddy-=DataAmount; }
|
||||||
if(wParam == VK_NEXT)CurOffset+=DataAmount;
|
if(wParam == VK_NEXT) { CurOffset+=DataAmount; CursorStartAddy+=DataAmount; }
|
||||||
if(CurOffset < 0)CurOffset = 0;
|
if(wParam == VK_HOME) { CurOffset=0; CursorStartAddy=0; }
|
||||||
if(CurOffset >= MaxSize)CurOffset = MaxSize-1;
|
if(wParam == VK_END) { CurOffset = MaxSize-DataAmount; CursorStartAddy=MaxSize-1; }
|
||||||
|
|
||||||
|
if (CurOffset >= MaxSize - DataAmount) CurOffset = MaxSize - DataAmount;
|
||||||
|
if (CurOffset < 0) CurOffset = 0;
|
||||||
|
if(wParam == VK_PRIOR || wParam == VK_NEXT || wParam == VK_HOME || wParam == VK_END)
|
||||||
|
{
|
||||||
|
CursorEndAddy = -1;
|
||||||
|
TempData = PREVIOUS_VALUE_UNDEFINED;
|
||||||
|
if (CursorStartAddy < 0) CursorStartAddy = 0;
|
||||||
|
if (CursorStartAddy >= MaxSize) CursorStartAddy = MaxSize-1;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
if((wParam == VK_PRIOR) || (wParam == VK_NEXT)){
|
if((wParam == VK_PRIOR) || (wParam == VK_NEXT)){
|
||||||
ZeroMemory(&si, sizeof(SCROLLINFO));
|
ZeroMemory(&si, sizeof(SCROLLINFO));
|
||||||
|
@ -1406,7 +1422,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
lbuttondown = 1;
|
lbuttondown = 1;
|
||||||
x = GET_X_LPARAM(lParam);
|
x = GET_X_LPARAM(lParam);
|
||||||
y = GET_Y_LPARAM(lParam);
|
y = GET_Y_LPARAM(lParam);
|
||||||
if((i = GetAddyFromCoord(x,y)) == -1)return 0;
|
if((i = GetAddyFromCoord(x,y)) < 0) { CursorDragPoint = -1; return 0; }
|
||||||
|
if(i > MaxSize) { CursorDragPoint = -1; return 0; }
|
||||||
EditingText = AddyWasText;
|
EditingText = AddyWasText;
|
||||||
lbuttondownx = x;
|
lbuttondownx = x;
|
||||||
lbuttondowny = y;
|
lbuttondowny = y;
|
||||||
|
@ -1422,7 +1439,7 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
x = GET_X_LPARAM(lParam);
|
x = GET_X_LPARAM(lParam);
|
||||||
y = GET_Y_LPARAM(lParam);
|
y = GET_Y_LPARAM(lParam);
|
||||||
i = GetAddyFromCoord(x,y);
|
i = GetAddyFromCoord(x,y);
|
||||||
if (i != -1)
|
if (i >= 0 && i < MaxSize)
|
||||||
{
|
{
|
||||||
EditingText = AddyWasText;
|
EditingText = AddyWasText;
|
||||||
CursorStartAddy = i;
|
CursorStartAddy = i;
|
||||||
|
@ -1434,6 +1451,7 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
|
if (CursorDragPoint < 0) return 0;
|
||||||
mousex = x = GET_X_LPARAM(lParam);
|
mousex = x = GET_X_LPARAM(lParam);
|
||||||
mousey = y = GET_Y_LPARAM(lParam);
|
mousey = y = GET_Y_LPARAM(lParam);
|
||||||
if(lbuttondown){
|
if(lbuttondown){
|
||||||
|
@ -1441,7 +1459,7 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
i = GetAddyFromCoord(x,y);
|
i = GetAddyFromCoord(x,y);
|
||||||
if (i >= MaxSize)i = MaxSize-1;
|
if (i >= MaxSize)i = MaxSize-1;
|
||||||
EditingText = AddyWasText;
|
EditingText = AddyWasText;
|
||||||
if(i != -1){
|
if(i >= 0){
|
||||||
CursorStartAddy = std::min(i,CursorDragPoint);
|
CursorStartAddy = std::min(i,CursorDragPoint);
|
||||||
CursorEndAddy = std::max(i,CursorDragPoint);
|
CursorEndAddy = std::max(i,CursorDragPoint);
|
||||||
if(CursorEndAddy == CursorStartAddy)CursorEndAddy = -1;
|
if(CursorEndAddy == CursorStartAddy)CursorEndAddy = -1;
|
||||||
|
@ -1485,7 +1503,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
switch(popupmenu[i].id)
|
switch(popupmenu[i].id)
|
||||||
{
|
{
|
||||||
//this will set the text for the menu dynamically based on the id
|
//this will set the text for the menu dynamically based on the id
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
case ID_ADDRESS_FRZ_SUBMENU:
|
case ID_ADDRESS_FRZ_SUBMENU:
|
||||||
{
|
{
|
||||||
HMENU sub = CreatePopupMenu();
|
HMENU sub = CreatePopupMenu();
|
||||||
|
@ -1505,7 +1522,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
case ID_ADDRESS_ADDBP_R:
|
case ID_ADDRESS_ADDBP_R:
|
||||||
{
|
{
|
||||||
// We want this to give the address to add the read breakpoint for
|
// We want this to give the address to add the read breakpoint for
|
||||||
|
@ -1576,7 +1592,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
switch(i)
|
switch(i)
|
||||||
{
|
{
|
||||||
case ID_ADDRESS_FRZ_TOGGLE_STATE:
|
case ID_ADDRESS_FRZ_TOGGLE_STATE:
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
for (n=CursorStartAddy;(CursorEndAddy == -1 && n == CursorStartAddy) || n<=CursorEndAddy;n++)
|
for (n=CursorStartAddy;(CursorEndAddy == -1 && n == CursorStartAddy) || n<=CursorEndAddy;n++)
|
||||||
|
@ -1608,7 +1623,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
UnfreezeAllRam();
|
UnfreezeAllRam();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_ADDRESS_ADDBP_R:
|
case ID_ADDRESS_ADDBP_R:
|
||||||
|
@ -1637,10 +1651,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
checkCondition(condition, numWPs);
|
checkCondition(condition, numWPs);
|
||||||
|
|
||||||
numWPs++;
|
numWPs++;
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
{ extern int myNumWPs;
|
{ extern int myNumWPs;
|
||||||
myNumWPs++; }
|
myNumWPs++; }
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
if (hDebug)
|
if (hDebug)
|
||||||
AddBreakList();
|
AddBreakList();
|
||||||
else
|
else
|
||||||
|
@ -1674,10 +1686,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
checkCondition(condition, numWPs);
|
checkCondition(condition, numWPs);
|
||||||
|
|
||||||
numWPs++;
|
numWPs++;
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
{ extern int myNumWPs;
|
{ extern int myNumWPs;
|
||||||
myNumWPs++; }
|
myNumWPs++; }
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
if (hDebug)
|
if (hDebug)
|
||||||
AddBreakList();
|
AddBreakList();
|
||||||
else
|
else
|
||||||
|
@ -1709,10 +1719,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
checkCondition(condition, numWPs);
|
checkCondition(condition, numWPs);
|
||||||
|
|
||||||
numWPs++;
|
numWPs++;
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
{ extern int myNumWPs;
|
{ extern int myNumWPs;
|
||||||
myNumWPs++; }
|
myNumWPs++; }
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
if (hDebug)
|
if (hDebug)
|
||||||
AddBreakList();
|
AddBreakList();
|
||||||
else
|
else
|
||||||
|
@ -1721,12 +1729,11 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ID_ADDRESS_SEEK_IN_ROM:
|
case ID_ADDRESS_SEEK_IN_ROM:
|
||||||
ChangeMemViewFocus(2,GetNesFileAddress(j),-1);
|
ChangeMemViewFocus(MODE_NES_FILE,GetNesFileAddress(j),-1);
|
||||||
break;
|
break;
|
||||||
case ID_ADDRESS_CREATE_GG_CODE:
|
case ID_ADDRESS_CREATE_GG_CODE:
|
||||||
SetGGConvFocus(j,GetMem(j));
|
SetGGConvFocus(j,GetMem(j));
|
||||||
break;
|
break;
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
case ID_ADDRESS_BOOKMARK:
|
case ID_ADDRESS_BOOKMARK:
|
||||||
{
|
{
|
||||||
if (toggleBookmark(hwnd, CursorStartAddy))
|
if (toggleBookmark(hwnd, CursorStartAddy))
|
||||||
|
@ -1740,7 +1747,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
case ID_ADDRESS_SYMBOLIC_NAME:
|
case ID_ADDRESS_SYMBOLIC_NAME:
|
||||||
{
|
{
|
||||||
if (DoSymbolicDebugNaming(j, hMemView))
|
if (DoSymbolicDebugNaming(j, hMemView))
|
||||||
|
@ -1767,10 +1773,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
x = GET_X_LPARAM(lParam);
|
x = GET_X_LPARAM(lParam);
|
||||||
y = GET_Y_LPARAM(lParam);
|
y = GET_Y_LPARAM(lParam);
|
||||||
i = GetAddyFromCoord(x,y);
|
i = GetAddyFromCoord(x,y);
|
||||||
if(i == -1)return 0;
|
if(i < 0)return 0;
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
FreezeRam(i, 0, 1);
|
FreezeRam(i, 0, 1);
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case WM_MOUSEWHEEL:
|
case WM_MOUSEWHEEL:
|
||||||
|
@ -1784,6 +1788,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
if (si.nPos < si.nMin) si.nPos = si.nMin;
|
if (si.nPos < si.nMin) si.nPos = si.nMin;
|
||||||
if ((si.nPos+(int)si.nPage) > si.nMax) si.nPos = si.nMax-si.nPage; //added cast
|
if ((si.nPos+(int)si.nPage) > si.nMax) si.nPos = si.nMax-si.nPage; //added cast
|
||||||
CurOffset = si.nPos*16;
|
CurOffset = si.nPos*16;
|
||||||
|
if (CurOffset >= MaxSize - DataAmount) CurOffset = MaxSize - DataAmount;
|
||||||
|
if (CurOffset < 0) CurOffset = 0;
|
||||||
SetScrollInfo(hwnd,SB_VERT,&si,TRUE);
|
SetScrollInfo(hwnd,SB_VERT,&si,TRUE);
|
||||||
UpdateColorTable();
|
UpdateColorTable();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1799,8 +1805,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
if (DataAmount != ((ClientHeight/MemFontHeight)*16))
|
if (DataAmount != ((ClientHeight/MemFontHeight)*16))
|
||||||
{
|
{
|
||||||
DataAmount = ((ClientHeight/MemFontHeight)*16);
|
DataAmount = ((ClientHeight/MemFontHeight)*16);
|
||||||
if (CurOffset > MaxSize - DataAmount)
|
if (CurOffset >= MaxSize - DataAmount) CurOffset = MaxSize - DataAmount;
|
||||||
CurOffset = MaxSize - DataAmount;
|
if (CurOffset < 0) CurOffset = 0;
|
||||||
//mbg merge 7/18/06 added casts:
|
//mbg merge 7/18/06 added casts:
|
||||||
TextColorList = (COLORREF*)realloc(TextColorList,DataAmount*sizeof(COLORREF));
|
TextColorList = (COLORREF*)realloc(TextColorList,DataAmount*sizeof(COLORREF));
|
||||||
BGColorList = (COLORREF*)realloc(BGColorList,DataAmount*sizeof(COLORREF));
|
BGColorList = (COLORREF*)realloc(BGColorList,DataAmount*sizeof(COLORREF));
|
||||||
|
@ -1846,7 +1852,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
UpdateColorTable();
|
UpdateColorTable();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
case MENU_MV_FILE_DUMP_RAM:
|
case MENU_MV_FILE_DUMP_RAM:
|
||||||
{
|
{
|
||||||
char bar[0x800];
|
char bar[0x800];
|
||||||
|
@ -1880,7 +1885,14 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
dumpToFile(bar, sizeof(bar));
|
dumpToFile(bar, sizeof(bar));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// ################################## End of SP CODE ###########################
|
case MENU_MV_FILE_DUMP_OAM:
|
||||||
|
{
|
||||||
|
char bar[0x100];
|
||||||
|
unsigned int i;
|
||||||
|
for (i=0;i<0x100;i++) bar[i] = SPRAM[i];
|
||||||
|
dumpToFile(bar,0x100);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
case ID_MEMWVIEW_FILE_CLOSE:
|
case ID_MEMWVIEW_FILE_CLOSE:
|
||||||
KillMemView();
|
KillMemView();
|
||||||
|
@ -1945,6 +1957,7 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
|
|
||||||
case MENU_MV_VIEW_RAM:
|
case MENU_MV_VIEW_RAM:
|
||||||
case MENU_MV_VIEW_PPU:
|
case MENU_MV_VIEW_PPU:
|
||||||
|
case MENU_MV_VIEW_OAM:
|
||||||
case MENU_MV_VIEW_ROM:
|
case MENU_MV_VIEW_ROM:
|
||||||
EditingMode = wParam - MENU_MV_VIEW_RAM;
|
EditingMode = wParam - MENU_MV_VIEW_RAM;
|
||||||
for (i = MODE_NES_MEMORY; i <= MODE_NES_FILE; i++)
|
for (i = MODE_NES_MEMORY; i <= MODE_NES_FILE; i++)
|
||||||
|
@ -1958,11 +1971,14 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
if (GameInfo->type==GIT_NSF) {MaxSize = 0x2000;} //Also disabled under GetMemViewData
|
if (GameInfo->type==GIT_NSF) {MaxSize = 0x2000;} //Also disabled under GetMemViewData
|
||||||
else {MaxSize = 0x4000;}
|
else {MaxSize = 0x4000;}
|
||||||
}
|
}
|
||||||
|
if (EditingMode == MODE_NES_OAM)
|
||||||
|
MaxSize = 0x100;
|
||||||
if (EditingMode == MODE_NES_FILE)
|
if (EditingMode == MODE_NES_FILE)
|
||||||
MaxSize = 16+CHRsize[0]+PRGsize[0]; //todo: add trainer size
|
MaxSize = 16+CHRsize[0]+PRGsize[0]; //todo: add trainer size
|
||||||
if(DataAmount+CurOffset > MaxSize)CurOffset = MaxSize-DataAmount;
|
if (CurOffset >= MaxSize - DataAmount) CurOffset = MaxSize - DataAmount;
|
||||||
if(CursorEndAddy > MaxSize)CursorEndAddy = -1;
|
if (CurOffset < 0) CurOffset = 0;
|
||||||
if(CursorStartAddy > MaxSize)CursorStartAddy= MaxSize-1;
|
if(CursorEndAddy >= MaxSize) CursorEndAddy = -1;
|
||||||
|
if(CursorStartAddy >= MaxSize) CursorStartAddy= MaxSize-1;
|
||||||
|
|
||||||
//Set vertical scroll bar range and page size
|
//Set vertical scroll bar range and page size
|
||||||
ZeroMemory(&si, sizeof(SCROLLINFO));
|
ZeroMemory(&si, sizeof(SCROLLINFO));
|
||||||
|
@ -2013,7 +2029,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ################################## Start of SP CODE ###########################
|
|
||||||
case MENU_MV_BOOKMARKS_RM_ALL:
|
case MENU_MV_BOOKMARKS_RM_ALL:
|
||||||
if (nextBookmark)
|
if (nextBookmark)
|
||||||
{
|
{
|
||||||
|
@ -2043,7 +2058,6 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// ################################## End of SP CODE ###########################
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_MOVE: {
|
case WM_MOVE: {
|
||||||
|
|
|
@ -2045,6 +2045,7 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Ram", MENU_MV_FILE_DUMP_RAM
|
MENUITEM "&Ram", MENU_MV_FILE_DUMP_RAM
|
||||||
MENUITEM "&PPU Memory", MENU_MV_FILE_DUMP_PPU
|
MENUITEM "&PPU Memory", MENU_MV_FILE_DUMP_PPU
|
||||||
|
MENUITEM "&OAM Memory", MENU_MV_FILE_DUMP_OAM
|
||||||
MENUITEM "6502 64K", MENU_MV_FILE_DUMP_64K
|
MENUITEM "6502 64K", MENU_MV_FILE_DUMP_64K
|
||||||
END
|
END
|
||||||
MENUITEM "&Goto Address\tCtrl+A", MENU_MV_FILE_GOTO_ADDRESS
|
MENUITEM "&Goto Address\tCtrl+A", MENU_MV_FILE_GOTO_ADDRESS
|
||||||
|
@ -2064,6 +2065,7 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&NES Memory", MENU_MV_VIEW_RAM
|
MENUITEM "&NES Memory", MENU_MV_VIEW_RAM
|
||||||
MENUITEM "&PPU Memory", MENU_MV_VIEW_PPU
|
MENUITEM "&PPU Memory", MENU_MV_VIEW_PPU
|
||||||
|
MENUITEM "&OAM Memory", MENU_MV_VIEW_OAM
|
||||||
MENUITEM "&ROM File", MENU_MV_VIEW_ROM
|
MENUITEM "&ROM File", MENU_MV_VIEW_ROM
|
||||||
END
|
END
|
||||||
POPUP "Highlighting"
|
POPUP "Highlighting"
|
||||||
|
|
|
@ -384,9 +384,10 @@
|
||||||
#define MENU_BACKGROUND_INPUT 302
|
#define MENU_BACKGROUND_INPUT 302
|
||||||
#define IDC_LABEL_UNDOCOUNT 302
|
#define IDC_LABEL_UNDOCOUNT 302
|
||||||
#define IDC_BTN_CHEAT_DEL 302
|
#define IDC_BTN_CHEAT_DEL 302
|
||||||
#define MENU_MV_VIEW_ROM 302
|
|
||||||
#define IDC_VIDEOCONFIG_XSCALE 302
|
#define IDC_VIDEOCONFIG_XSCALE 302
|
||||||
#define IDC_DEBUGGER_BP_LIST 302
|
#define IDC_DEBUGGER_BP_LIST 302
|
||||||
|
#define MENU_MV_VIEW_OAM 302
|
||||||
|
#define MENU_MV_VIEW_ROM 303
|
||||||
#define MENU_SHOW_STATUS_ICON 303
|
#define MENU_SHOW_STATUS_ICON 303
|
||||||
#define IDC_LABEL_AUTHORINFO 303
|
#define IDC_LABEL_AUTHORINFO 303
|
||||||
#define IDC_BTN_CHEAT_UPD 303
|
#define IDC_BTN_CHEAT_UPD 303
|
||||||
|
@ -1227,6 +1228,7 @@
|
||||||
#define ID_DUMPTOFILE_CPUBUS 40589
|
#define ID_DUMPTOFILE_CPUBUS 40589
|
||||||
#define MENU_MV_FILE_DUMP_64K 40590
|
#define MENU_MV_FILE_DUMP_64K 40590
|
||||||
#define ID_CONFIG_REGION 40591
|
#define ID_CONFIG_REGION 40591
|
||||||
|
#define MENU_MV_FILE_DUMP_OAM 40592
|
||||||
#define IDC_DEBUGGER_ICONTRAY 55535
|
#define IDC_DEBUGGER_ICONTRAY 55535
|
||||||
#define MW_ValueLabel2 65423
|
#define MW_ValueLabel2 65423
|
||||||
#define MW_ValueLabel1 65426
|
#define MW_ValueLabel1 65426
|
||||||
|
|
Loading…
Reference in New Issue