Adjust memory index column header according to number of data columns
[emu8051.git] / src / emugtk.c
index de5d48b..3ca0c04 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "common.h"
 #include "cpu8051.h"
+#include "memory.h"
 #include "options.h"
 #include "hexfile.h"
 
@@ -55,6 +56,16 @@ GtkWidget *mainwin;
 extern struct app_config_t *cfg;
 extern struct options_t options;
 
+void
+emugtk_UpdateDisplay(void)
+{
+       log_debug("UpdateDisplay()");
+       regwin_refresh();
+       pgmwin_refresh();
+       memwin_refresh(INT_MEM_ID);
+       memwin_refresh(EXT_MEM_ID);
+}
+
 /* Step out of running state */
 static void
 emugtk_stop_running()
@@ -63,9 +74,7 @@ emugtk_stop_running()
                log_info("StopRunning()");
                g_source_remove(running_function_tag);
                running = 0;
-               regwin_Show();
-               pgmwin_Disasm();
-               memwin_DumpD();
+               emugtk_UpdateDisplay();
        }
 }
 
@@ -116,9 +125,7 @@ static void
 emugtk_Reset(void)
 {
        cpu8051_Reset();
-       regwin_Show();
-       pgmwin_Disasm();
-       memwin_DumpD();
+       emugtk_UpdateDisplay();
 }
 
 /* Signal ResetEvent (ResetButton) */
@@ -135,9 +142,7 @@ static void
 emugtk_Step(void)
 {
        cpu8051_Exec();
-       regwin_Show();
-       pgmwin_Disasm();
-       memwin_DumpD();
+       emugtk_UpdateDisplay();
 }
 
 /* Signal RunEvent (RunButton) */
@@ -256,6 +261,14 @@ vpaned_notify_event(GtkWindow *window, GdkEvent *event, gpointer data)
        cfg->vpane_pos = gtk_paned_get_position(GTK_PANED(vpaned));
 }
 
+static void
+vpaned_mem_notify_event(GtkWindow *window, GdkEvent *event, gpointer data)
+{
+       GtkWidget *vpaned = data;
+
+       cfg->vpane_mem_pos = gtk_paned_get_position(GTK_PANED(vpaned));
+}
+
 /*
  *  mainwin
  * +---------------------------------------------------------------------+
@@ -292,9 +305,21 @@ vpaned_notify_event(GtkWindow *window, GdkEvent *event, gpointer data)
  * |  |  |                                                         |  |  |
  * |  |  |--------------------------***-----------------------------  |  |
  * |  |  |                                                         |  |  |
- * |  |  |  scrollwin                                              |  |  |
+ * |  |  |  vpaned_mem                                             |  |  |
  * |  |  |  +---------------------------------------------------+  |  |  |
- * |  |  |  | Memory window                                     |  |  |  |
+ * |  |  |  |                                                   |  |  |  |
+ * |  |  |  |  scrollwin                                        |  |  |  |
+ * |  |  |  |  +---------------------------------------------+  |  |  |  |
+ * |  |  |  |  | Internal memory window                      |  |  |  |  |
+ * |  |  |  |  +---------------------------------------------+  |  |  |  |
+ * |  |  |  |                                                   |  |  |  |
+ * |  |  |  +-----------------------***-------------------------|  |  |  |
+ * |  |  |  |                                                   |  |  |  |
+ * |  |  |  |  scrollwin                                        |  |  |  |
+ * |  |  |  |  +---------------------------------------------+  |  |  |  |
+ * |  |  |  |  | External memory window                      |  |  |  |  |
+ * |  |  |  |  +---------------------------------------------+  |  |  |  |
+ * |  |  |  |                                                   |  |  |  |
  * |  |  |  +---------------------------------------------------+  |  |  |
  * |  |  |                                                         |  |  |
  * |  |  +---------------------------------------------------------+  |  |
@@ -314,6 +339,7 @@ emugtk_window_init(void)
        GtkWidget *scrollwin;
        GtkWidget *hpaned;
        GtkWidget *vpaned;
+       GtkWidget *vpaned_mem;
 
        mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(mainwin), PACKAGE);
@@ -347,7 +373,7 @@ emugtk_window_init(void)
        /*
         * vpaned will contain:
         *   Top:    registers and disassembly windows.
-        *   Bottom: memory window
+        *   Bottom: memory windows
         */
        vpaned = gtk_vpaned_new();
        gtk_paned_set_position(GTK_PANED(vpaned), cfg->vpane_pos);
@@ -370,9 +396,20 @@ emugtk_window_init(void)
 
        gtk_paned_pack1(GTK_PANED(vpaned), hpaned, FALSE, FALSE);
 
-       /* Memory dump frame. */
-       scrollwin = memwin_init();
-       gtk_paned_pack2(GTK_PANED(vpaned), scrollwin, TRUE, FALSE);
+       vpaned_mem = gtk_vpaned_new();
+       gtk_paned_set_position(GTK_PANED(vpaned_mem), cfg->vpane_mem_pos);
+       g_signal_connect(G_OBJECT(vpaned_mem), "notify::position",
+                        G_CALLBACK(vpaned_mem_notify_event), vpaned_mem);
+
+       /* Internal memory dump frame. */
+       scrollwin = memwin_init("Internal memory (IRAM)", INT_MEM_ID);
+       gtk_paned_pack1(GTK_PANED(vpaned_mem), scrollwin, FALSE, FALSE);
+
+       /* External memory dump frame. */
+       scrollwin = memwin_init("External memory (XRAM)", EXT_MEM_ID);
+       gtk_paned_pack2(GTK_PANED(vpaned_mem), scrollwin, TRUE, FALSE);
+
+       gtk_paned_pack2(GTK_PANED(vpaned), vpaned_mem, TRUE, FALSE);
 
        /* Adding vpaned window to vbox */
        gtk_box_pack_start(GTK_BOX(vbox), vpaned, true, true, 1);
@@ -383,15 +420,6 @@ emugtk_window_init(void)
        gtk_widget_show_all(mainwin);
 }
 
-static void
-emugtk_UpdateDisplay(void)
-{
-       log_debug("UpdateDisplay()");
-       regwin_Show();
-       pgmwin_Disasm();
-       memwin_DumpD();
-}
-
 void
 AddMenuSeparator(GtkWidget *menu)
 {