Hex editor memview:

1. expanded bookmarks to work correctly with all views (not just RAM)
2. fixed Find dialog to be able to find the first or last byte of the memory region.
This commit is contained in:
rainwarrior 2016-08-24 19:21:43 +00:00
parent bec851a768
commit ed3783db55
4 changed files with 33 additions and 23 deletions

View File

@ -124,8 +124,10 @@ popupmenu[] =
{0x8000,0xFFFF, MODE_NES_MEMORY, ID_ADDRESS_SEEK_IN_ROM, "Go Here In ROM File"},
{0x8000,0xFFFF, MODE_NES_MEMORY, ID_ADDRESS_CREATE_GG_CODE, "Create Game Genie Code At This Address"},
{0x0000,0xFFFF, MODE_NES_MEMORY, ID_ADDRESS_BOOKMARK, "Add / Remove bookmark"},
} ;
{0x0000,0xFFFF, MODE_NES_PPU, ID_ADDRESS_BOOKMARK, "Add / Remove bookmark"},
{0x0000,0xFFFF, MODE_NES_OAM, ID_ADDRESS_BOOKMARK, "Add / Remove bookmark"},
{0x0000,0xFFFF, MODE_NES_FILE, ID_ADDRESS_BOOKMARK, "Add / Remove bookmark"},
};
#define POPUPNUM (sizeof popupmenu / sizeof popupmenu[0])
int LoadTableFile();
@ -721,6 +723,7 @@ void UpdateColorTable()
for (j=0;j<nextBookmark;j++)
{
if(hexBookmarks[j].editmode != EditingMode) continue;
if(((int)hexBookmarks[j].address >= CurOffset) && ((int)hexBookmarks[j].address < CurOffset+DataAmount))
TextColorList[hexBookmarks[j].address - CurOffset] = RGB(0,0xCC,0); // Green for Bookmarks
}
@ -1316,13 +1319,12 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
if (wParam >= '0' && wParam <= '9')
{
int newValue = handleBookmarkMenu(wParam - '0');
int bookmark = wParam - '0';
int newValue = handleBookmarkMenu(bookmark);
if (newValue != -1)
{
CurOffset = newValue;
CursorEndAddy = -1;
CursorStartAddy = hexBookmarks[wParam - '0'].address;
ChangeMemViewFocus(hexBookmarks[bookmark].editmode,newValue,-1);
UpdateColorTable();
}
}
@ -1736,9 +1738,9 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
break;
case ID_ADDRESS_BOOKMARK:
{
if (toggleBookmark(hwnd, CursorStartAddy))
if (toggleBookmark(hwnd, CursorStartAddy, EditingMode))
{
MessageBox(hDebug, "Can't set more than 64 breakpoints", "Error", MB_OK | MB_ICONERROR);
MessageBox(hDebug, "Can't set more than 64 bookmarks", "Error", MB_OK | MB_ICONERROR);
}
else
{
@ -2048,13 +2050,12 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
default:
if (wParam >= ID_FIRST_BOOKMARK && wParam < (ID_FIRST_BOOKMARK + 64))
{
int newValue = handleBookmarkMenu(wParam - ID_FIRST_BOOKMARK);
int bookmark = wParam - ID_FIRST_BOOKMARK;
int newValue = handleBookmarkMenu(bookmark);
if (newValue != -1)
{
CurOffset = newValue;
CursorEndAddy = -1;
CursorStartAddy = hexBookmarks[wParam - ID_FIRST_BOOKMARK].address;
ChangeMemViewFocus(hexBookmarks[bookmark].editmode,newValue,-1);
UpdateColorTable();
}
return 0;
@ -2260,7 +2261,7 @@ void FindNext(){
return;
}
if(!FindDirectionUp){
for(i = CursorStartAddy+1;i+datasize < MaxSize;i++){
for(i = CursorStartAddy+1;i+datasize <= MaxSize;i++){
found = 1;
for(j = 0;j < datasize;j++){
if(GetMemViewData(i+j) != data[j])found = 0;
@ -2281,7 +2282,7 @@ void FindNext(){
}
}
} else { //FindDirection is up
for(i = CursorStartAddy-1;i > 0;i--){
for(i = CursorStartAddy-1;i >= 0;i--){
found = 1;
for(j = 0;j < datasize;j++){
if(GetMemViewData(i+j) != data[j])found = 0;

View File

@ -12,3 +12,6 @@ void SetHexEditorAddress(int gotoaddress);
extern HWND hMemView, hMemFind;
extern int EditingMode;
extern char EditString[4][20];

View File

@ -23,6 +23,7 @@
#include <stdio.h>
#include <assert.h>
#include "memviewsp.h"
#include "memview.h"
#include "common.h"
HexBookmark hexBookmarks[64];
@ -30,8 +31,9 @@ int nextBookmark = 0;
/// Finds the bookmark for a given address
/// @param address The address to find.
/// @param editmode The editing mode of the hex editor (RAM/PPU/OAM/ROM)
/// @return The index of the bookmark at that address or -1 if there's no bookmark at that address.
int findBookmark(unsigned int address)
int findBookmark(unsigned int address, int editmode)
{
int i;
@ -43,7 +45,7 @@ int findBookmark(unsigned int address)
for (i=0;i<nextBookmark;i++)
{
if (hexBookmarks[i].address == address)
if (hexBookmarks[i].address == address && hexBookmarks[i].editmode == editmode)
return i;
}
@ -96,19 +98,21 @@ BOOL CALLBACK nameBookmarkCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
/// Attempts to add a new bookmark to the bookmark list.
/// @param hwnd HWND of the FCEU window
/// @param address Address of the new bookmark
/// @param editmode The editing mode of the hex editor (RAM/PPU/OAM/ROM)
/// @return Returns 0 if everything's OK and an error flag otherwise.
int addBookmark(HWND hwnd, unsigned int address)
int addBookmark(HWND hwnd, unsigned int address, int editmode)
{
// Enforce a maximum of 64 bookmarks
if (nextBookmark < 64)
{
sprintf(bookmarkDescription, "%04X", address);
sprintf(bookmarkDescription, "%s %04X", EditString[editmode], address);
// Show the bookmark name dialog
DialogBox(fceu_hInstance, "NAMEBOOKMARKDLG", hwnd, nameBookmarkCallB);
// Update the bookmark description
hexBookmarks[nextBookmark].address = address;
hexBookmarks[nextBookmark].editmode = editmode;
strcpy(hexBookmarks[nextBookmark].description, bookmarkDescription);
nextBookmark++;
@ -139,14 +143,15 @@ void removeBookmark(unsigned int index)
/// Adds or removes a bookmark from a given address
/// @param hwnd HWND of the emu window
/// @param address Address of the bookmark
int toggleBookmark(HWND hwnd, uint32 address)
/// @param editmode The editing mode of the hex editor (RAM/PPU/OAM/ROM)
int toggleBookmark(HWND hwnd, uint32 address, int editmode)
{
int val = findBookmark(address);
int val = findBookmark(address, editmode);
// If there's no bookmark at the given address add one.
if (val == -1)
{
return addBookmark(hwnd, address);
return addBookmark(hwnd, address, editmode);
}
else // else remove the bookmark
{
@ -193,7 +198,7 @@ int handleBookmarkMenu(int bookmark)
{
if (bookmark < nextBookmark)
{
return hexBookmarks[bookmark].address - (hexBookmarks[bookmark].address % 0x10);
return hexBookmarks[bookmark].address;
}
return -1;

View File

@ -26,12 +26,13 @@ typedef struct
{
char description[51];
unsigned int address;
int editmode;
} HexBookmark;
extern HexBookmark hexBookmarks[64];
extern int nextBookmark;
int toggleBookmark(HWND hwnd, uint32 address);
int toggleBookmark(HWND hwnd, uint32 address, int mode);
void updateBookmarkMenus(HMENU menu);
int handleBookmarkMenu(int bookmark);
void removeAllBookmarks(HMENU menu);