RAM watch entry window bug fixes.
This commit is contained in:
parent
ab5d3f5f14
commit
4490f650f1
|
@ -86,16 +86,35 @@ struct ramWatch_t
|
||||||
std::string name;
|
std::string name;
|
||||||
int addr;
|
int addr;
|
||||||
int type;
|
int type;
|
||||||
|
int size;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
int8_t i;
|
int8_t i8;
|
||||||
uint8_t u;
|
uint8_t u8;
|
||||||
|
int16_t i16;
|
||||||
|
uint16_t u16;
|
||||||
} val;
|
} val;
|
||||||
|
|
||||||
ramWatch_t(void)
|
ramWatch_t(void)
|
||||||
{
|
{
|
||||||
addr = 0; type = 0; val.u = 0;
|
addr = 0; type = 0; size = 0; val.u16 = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void updateMem(void)
|
||||||
|
{
|
||||||
|
if ( size == 1)
|
||||||
|
{
|
||||||
|
val.u8 = GetMem( addr );
|
||||||
|
}
|
||||||
|
else if ( size == 2)
|
||||||
|
{
|
||||||
|
val.u16 = GetMem( addr ) | (GetMem( addr+1 ) << 8);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
val.u8 = GetMem( addr );
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ramWatchList_t
|
struct ramWatchList_t
|
||||||
|
@ -124,23 +143,27 @@ struct ramWatchList_t
|
||||||
|
|
||||||
size_t size(void){ return ls.size(); };
|
size_t size(void){ return ls.size(); };
|
||||||
|
|
||||||
void add_entry( const char *name, int addr, int type )
|
void add_entry( const char *name, int addr, int type, int size )
|
||||||
{
|
{
|
||||||
ramWatch_t *rw = new ramWatch_t;
|
ramWatch_t *rw = new ramWatch_t;
|
||||||
|
|
||||||
rw->name.assign(name);
|
rw->name.assign(name);
|
||||||
rw->addr = addr;
|
rw->addr = addr;
|
||||||
rw->type = type;
|
rw->type = type;
|
||||||
|
rw->size = size;
|
||||||
ls.push_back(rw);
|
ls.push_back(rw);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateMemoryValues(void)
|
void updateMemoryValues(void)
|
||||||
{
|
{
|
||||||
|
ramWatch_t *rw;
|
||||||
std::list <ramWatch_t*>::iterator it;
|
std::list <ramWatch_t*>::iterator it;
|
||||||
|
|
||||||
for (it=ls.begin(); it!=ls.end(); it++)
|
for (it=ls.begin(); it!=ls.end(); it++)
|
||||||
{
|
{
|
||||||
(*it)->val.u = GetMem( (*it)->addr );
|
rw = *it;
|
||||||
|
|
||||||
|
rw->updateMem();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1474,6 +1497,9 @@ void toggleAutoResume (GtkToggleAction *action)
|
||||||
g_config->setOption("SDL.AutoResume", (int)autoResume);
|
g_config->setOption("SDL.AutoResume", (int)autoResume);
|
||||||
AutoResumePlay = autoResume;
|
AutoResumePlay = autoResume;
|
||||||
}
|
}
|
||||||
|
//*******************************************************************************************************
|
||||||
|
// Cheat Window
|
||||||
|
//*******************************************************************************************************
|
||||||
|
|
||||||
static int ShowCheatSearchResultsCallB(uint32 a, uint8 last, uint8 current)
|
static int ShowCheatSearchResultsCallB(uint32 a, uint8 last, uint8 current)
|
||||||
{
|
{
|
||||||
|
@ -2278,14 +2304,26 @@ static void showRamWatchResults(void)
|
||||||
rw = *it;
|
rw = *it;
|
||||||
sprintf( addrStr, "0x%04x", rw->addr );
|
sprintf( addrStr, "0x%04x", rw->addr );
|
||||||
|
|
||||||
rw->val.u = GetMem(rw->addr);
|
rw->updateMem();
|
||||||
|
|
||||||
|
if ( rw->size == 2 )
|
||||||
|
{
|
||||||
if ( rw->type ){
|
if ( rw->type ){
|
||||||
sprintf( valStr1, "%4u", rw->val.u);
|
sprintf( valStr1, "%6u", rw->val.u16);
|
||||||
} else {
|
} else {
|
||||||
sprintf( valStr1, "%4i", rw->val.i);
|
sprintf( valStr1, "%6i", rw->val.i16);
|
||||||
|
}
|
||||||
|
sprintf( valStr2, "0x%04x", rw->val.u16);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( rw->type ){
|
||||||
|
sprintf( valStr1, "%6u", rw->val.u8);
|
||||||
|
} else {
|
||||||
|
sprintf( valStr1, "%6i", rw->val.i8);
|
||||||
|
}
|
||||||
|
sprintf( valStr2, "0x%02x", rw->val.u8);
|
||||||
}
|
}
|
||||||
sprintf( valStr2, "0x%02x", rw->val.u);
|
|
||||||
|
|
||||||
gtk_tree_store_set(ram_watch_store, &iter,
|
gtk_tree_store_set(ram_watch_store, &iter,
|
||||||
0, addrStr, 1, valStr1, 2, valStr2, 3, rw->name.c_str(),
|
0, addrStr, 1, valStr1, 2, valStr2, 3, rw->name.c_str(),
|
||||||
|
@ -2394,7 +2432,7 @@ static GtkWidget* CreateRamWatchMenubar( GtkWidget* window)
|
||||||
return gtk_ui_manager_get_widget (ui_manager, "/Menubar");
|
return gtk_ui_manager_get_widget (ui_manager, "/Menubar");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int openRamWatchEntryDialog( char *name, int *addr, int *type )
|
static int openRamWatchEntryDialog( char *name, int *addr, int *type, int *size )
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
GtkWidget* win;
|
GtkWidget* win;
|
||||||
|
@ -2402,6 +2440,7 @@ static int openRamWatchEntryDialog( char *name, int *addr, int *type )
|
||||||
GtkWidget* hbox;
|
GtkWidget* hbox;
|
||||||
GtkWidget* label;
|
GtkWidget* label;
|
||||||
GtkWidget* chkbox;
|
GtkWidget* chkbox;
|
||||||
|
GtkWidget* button1, *button2, *button4;
|
||||||
GtkWidget* txt_entry_name;
|
GtkWidget* txt_entry_name;
|
||||||
GtkWidget* txt_entry_addr;
|
GtkWidget* txt_entry_addr;
|
||||||
char stmp[32];
|
char stmp[32];
|
||||||
|
@ -2413,7 +2452,7 @@ static int openRamWatchEntryDialog( char *name, int *addr, int *type )
|
||||||
NULL);
|
NULL);
|
||||||
gtk_window_set_default_size(GTK_WINDOW(win), 400, 200);
|
gtk_window_set_default_size(GTK_WINDOW(win), 400, 200);
|
||||||
|
|
||||||
vbox = gtk_vbox_new(FALSE, 4);
|
vbox = gtk_vbox_new(FALSE, 6);
|
||||||
|
|
||||||
label = gtk_label_new("Name:");
|
label = gtk_label_new("Name:");
|
||||||
txt_entry_name = gtk_entry_new();
|
txt_entry_name = gtk_entry_new();
|
||||||
|
@ -2444,7 +2483,27 @@ static int openRamWatchEntryDialog( char *name, int *addr, int *type )
|
||||||
chkbox = gtk_check_button_new_with_label("Value is Unsigned");
|
chkbox = gtk_check_button_new_with_label("Value is Unsigned");
|
||||||
gtk_box_pack_start (GTK_BOX(vbox), chkbox, FALSE, FALSE, 0);
|
gtk_box_pack_start (GTK_BOX(vbox), chkbox, FALSE, FALSE, 0);
|
||||||
|
|
||||||
gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(win))), vbox, TRUE, TRUE, 0);
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
|
label = gtk_label_new("Size in Bytes:");
|
||||||
|
button1 = gtk_radio_button_new_with_label (NULL, "1");
|
||||||
|
//gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 1);
|
||||||
|
gtk_box_pack_start (GTK_BOX(hbox), button1, TRUE, FALSE, 1);
|
||||||
|
|
||||||
|
button2 = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON (button1), "2");
|
||||||
|
gtk_box_pack_start (GTK_BOX(hbox), button2, TRUE, FALSE, 1);
|
||||||
|
|
||||||
|
button4 = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON (button1), "4");
|
||||||
|
gtk_box_pack_start (GTK_BOX(hbox), button4, TRUE, FALSE, 1);
|
||||||
|
|
||||||
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button1), TRUE);
|
||||||
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button2), FALSE);
|
||||||
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button4), FALSE);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, TRUE, 1);
|
||||||
|
|
||||||
|
gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(win))), vbox, TRUE, TRUE, 1);
|
||||||
|
|
||||||
gtk_widget_show_all(win);
|
gtk_widget_show_all(win);
|
||||||
|
|
||||||
|
@ -2461,8 +2520,24 @@ static int openRamWatchEntryDialog( char *name, int *addr, int *type )
|
||||||
|
|
||||||
*type = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(chkbox) );
|
*type = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(chkbox) );
|
||||||
|
|
||||||
|
if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(button4) ) )
|
||||||
|
{
|
||||||
|
*size = 4;
|
||||||
|
}
|
||||||
|
else if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(button2) ) )
|
||||||
|
{
|
||||||
|
*size = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*size = 1;
|
||||||
|
}
|
||||||
|
|
||||||
//printf("retval %i\n", retval );
|
//printf("retval %i\n", retval );
|
||||||
|
|
||||||
|
g_signal_connect(win, "delete-event", G_CALLBACK(closeDialog), NULL);
|
||||||
|
g_signal_connect(win, "response", G_CALLBACK(closeDialog), NULL);
|
||||||
|
|
||||||
gtk_widget_destroy(win);
|
gtk_widget_destroy(win);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2472,10 +2547,10 @@ static void editRamWatch( GtkButton *button,
|
||||||
void *userData )
|
void *userData )
|
||||||
{
|
{
|
||||||
char name[256];
|
char name[256];
|
||||||
int addr = 0, type = 0;
|
int addr = 0, type = 0, size = 0;
|
||||||
name[0] = 0;
|
name[0] = 0;
|
||||||
openRamWatchEntryDialog( name, &addr, &type );
|
openRamWatchEntryDialog( name, &addr, &type, &size );
|
||||||
printf("Edit RamWatch '%s' 0x%04x %i\n", name, addr, type);
|
printf("Edit RamWatch '%s' 0x%04x %i %i\n", name, addr, type, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void removeRamWatch( GtkButton *button,
|
static void removeRamWatch( GtkButton *button,
|
||||||
|
@ -2488,19 +2563,19 @@ static void newRamWatch( GtkButton *button,
|
||||||
void *userData )
|
void *userData )
|
||||||
{
|
{
|
||||||
char name[256];
|
char name[256];
|
||||||
int addr = 0, type = 0;
|
int addr = 0, type = 0, size = 0;
|
||||||
name[0] = 0;
|
name[0] = 0;
|
||||||
openRamWatchEntryDialog( name, &addr, &type );
|
openRamWatchEntryDialog( name, &addr, &type, &size );
|
||||||
printf("New RamWatch '%s' 0x%04x %i\n", name, addr, type);
|
printf("New RamWatch '%s' 0x%04x %i %i\n", name, addr, type, size);
|
||||||
|
|
||||||
ramWatchList.add_entry( name, addr, type );
|
ramWatchList.add_entry( name, addr, type, size );
|
||||||
|
|
||||||
showRamWatchResults();
|
showRamWatchResults();
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint updateRamWatchTree( void *userData )
|
static gint updateRamWatchTree( void *userData )
|
||||||
{
|
{
|
||||||
static uint32_t c = 0;
|
//static uint32_t c = 0;
|
||||||
//printf("RamWatch: %u\n", c++ );
|
//printf("RamWatch: %u\n", c++ );
|
||||||
showRamWatchResults();
|
showRamWatchResults();
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue