memviewer ok...
lacks scrolling, auto-resize, monospace font, ... well it's a start
This commit is contained in:
parent
c3dce7dd35
commit
744081ab76
|
@ -37,17 +37,17 @@ static PangoAttrList *attr_Address, *attr_Pattern1, *attr_Pattern2, *attr_Text;
|
|||
|
||||
static GtkEntry *wAddress;
|
||||
static GtkDrawingArea *wPaint;
|
||||
void refresh();
|
||||
|
||||
|
||||
/* how to pack bytes */
|
||||
|
||||
void on_wtools_2_r8_toggled (GtkToggleButton *togglebutton, gpointer user_data) { packmode=Bit8; }
|
||||
void on_wtools_2_r16_toggled (GtkToggleButton *togglebutton, gpointer user_data) { packmode=Bit16; }
|
||||
void on_wtools_2_r32_toggled (GtkToggleButton *togglebutton, gpointer user_data) { packmode=Bit32; }
|
||||
void on_wtools_2_r8_toggled (GtkToggleButton *togglebutton, gpointer user_data) { packmode=Bit8; refresh(); }
|
||||
void on_wtools_2_r16_toggled (GtkToggleButton *togglebutton, gpointer user_data) { packmode=Bit16; refresh(); }
|
||||
void on_wtools_2_r32_toggled (GtkToggleButton *togglebutton, gpointer user_data) { packmode=Bit32; refresh(); }
|
||||
|
||||
/* which address */
|
||||
|
||||
void refresh();
|
||||
|
||||
void on_wtools_2_GotoAddress_activate (GtkEntry *entry, gpointer user_data) {
|
||||
address=strtol(gtk_entry_get_text(entry),NULL,0);
|
||||
refresh();
|
||||
|
@ -77,10 +77,10 @@ gboolean on_wtools_2_draw_expose_event (GtkWidget *widget, GdkEventExpose *event
|
|||
|
||||
void initialize() {
|
||||
if (init) return;
|
||||
pango_parse_markup("<span foreground=\"blue\"></span>", -1, 0, &attr_Address, NULL, NULL, NULL);
|
||||
pango_parse_markup("<tt foreground=\"gray\"></span>", -1, 0, &attr_Pattern1, NULL, NULL, NULL);
|
||||
pango_parse_markup("<tt></tt>", -1, 0, &attr_Pattern2, NULL, NULL, NULL);
|
||||
pango_parse_markup("<tt></tt>", -1, 0, &attr_Text, NULL, NULL, NULL);
|
||||
pango_parse_markup("<span foreground=\"blue\"> </span>", -1, 0, &attr_Address, NULL, NULL, NULL);
|
||||
pango_parse_markup("<tt foreground=\"gray\"> </span>", -1, 0, &attr_Pattern1, NULL, NULL, NULL);
|
||||
pango_parse_markup("<tt> </tt>", -1, 0, &attr_Pattern2, NULL, NULL, NULL);
|
||||
pango_parse_markup("<tt> </tt>", -1, 0, &attr_Text, NULL, NULL, NULL);
|
||||
init = TRUE;
|
||||
}
|
||||
|
||||
|
@ -89,51 +89,49 @@ void refresh() {
|
|||
GtkWidget * area = (GtkWidget*)wPaint;
|
||||
PangoLayout* playout = gtk_widget_create_pango_layout(area, NULL);
|
||||
GdkGC * GC = area->style->fg_gc[area->state];
|
||||
int i,j,addr, w,h,x,y, cpu=0; u8 c;
|
||||
char txt[80],*ptxt;
|
||||
char words[4][13];
|
||||
|
||||
initialize();
|
||||
gdk_draw_rectangle(area->window, area->style->white_gc, TRUE, 0, 0,
|
||||
area->allocation.width, area->allocation.height);
|
||||
|
||||
char * def_patt = "<tt>0000:0000 | 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF | 0123456789ABCDEF</tt>";
|
||||
pango_layout_set_markup(playout, def_patt , -1);
|
||||
pango_layout_get_pixel_size(playout, &w, &h);
|
||||
gtk_widget_set_usize(area,w+20, (10*h)+10);
|
||||
|
||||
// draw memory content here
|
||||
pango_layout_set_text(playout, "hello", -1);
|
||||
pango_layout_set_attributes(playout,attr_Address);
|
||||
gdk_draw_layout(area->window, GC, 10,20, playout);
|
||||
addr=address;
|
||||
for (i=0,x=10,y=5; i<10; i++,y+=h) {
|
||||
ptxt = txt;
|
||||
sprintf(ptxt, "%04X:%04X | ", (addr>>16), (addr&0xFFFF)); ptxt+=12;
|
||||
switch(packmode) {
|
||||
case Bit8:
|
||||
for (j=0; j<16; j++,ptxt+=3)
|
||||
sprintf(ptxt, "%02X ", MMU_readByte(cpu, addr+j));
|
||||
break;
|
||||
case Bit16:
|
||||
for (j=0; j<16; j+=2,ptxt+=6)
|
||||
sprintf(ptxt, " %04X ", MMU_readHWord(cpu, addr+j));
|
||||
break;
|
||||
case Bit32:
|
||||
for (j=0; j<16; j+=4,ptxt+=12)
|
||||
sprintf(ptxt, " %08X ", (int)MMU_readWord(cpu, addr+j));
|
||||
break;
|
||||
}
|
||||
sprintf(ptxt, "| "); ptxt +=2;
|
||||
for (j=0; j<16; j++,ptxt++)
|
||||
sprintf(ptxt, "%c", ((c=MMU_readByte(cpu, addr+j))<32)?'.':((c&0x80)?',':c));
|
||||
addr += 16;
|
||||
*(ptxt)=0;
|
||||
|
||||
pango_layout_set_text(playout, txt, -1);
|
||||
pango_layout_set_attributes(playout,attr_Text);
|
||||
gdk_draw_layout(area->window, GC, x, y, playout);
|
||||
}
|
||||
|
||||
// done
|
||||
g_object_unref(playout);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
void on_wtools_1_combo_cpu_changed (GtkComboBox *widget, gpointer user_data) {
|
||||
// c == 0 means ARM9
|
||||
cpu=gtk_combo_box_get_active(widget);
|
||||
display_current_reg();
|
||||
}
|
||||
*/
|
||||
|
||||
/* ***** ***** IO REGISTERS ***** ***** */
|
||||
/*
|
||||
|
||||
static int cpu=0;
|
||||
static u32 address;
|
||||
static BOOL hword;
|
||||
|
||||
static GtkLabel * reg_address;
|
||||
static GtkEntry * reg_value;
|
||||
|
||||
void display_current_reg() {
|
||||
char text_address[16];
|
||||
char text_value[16];
|
||||
char * patt = "0x%08X";
|
||||
u32 w = MMU_read32(cpu,address);
|
||||
|
||||
if (hword) { patt = "0x%04X"; w &= 0xFFFF; }
|
||||
sprintf(text_address, "0x%08X", address);
|
||||
sprintf(text_value, patt, w);
|
||||
gtk_label_set_text(reg_address, text_address);
|
||||
gtk_entry_set_text(reg_value, text_value);
|
||||
}
|
||||
|
||||
*/
|
Loading…
Reference in New Issue