#include "pgmwin.h"
#include "memwin.h"
#include "pswwin.h"
+#include "timerwin.h"
#include "app-config.h"
#define BUTTONS_BORDER 2
static int running;
static int running_function_tag;
-static int restart_gui = true;
+
+static int emugtk_window_init_complete;
+static GtkWidget *vpaned1;
+static GtkWidget *scrollwin_int;
+static GtkWidget *scrollwin_ext;
GtkWidget *mainwin;
regwin_refresh();
pgmwin_refresh();
pswwin_refresh();
+ timerwin_update();
- if (cfg->view_int_memory)
+ if (cfg->view_int_memory && scrollwin_int)
memwin_refresh(INT_MEM_ID);
- if (cfg->view_ext_memory)
+ if (cfg->view_ext_memory && scrollwin_ext)
memwin_refresh(EXT_MEM_ID);
}
static gboolean
emugtk_running(gpointer data)
{
+ int breakpoint_hit;
+
(void) data; /* Remove compiler warning about unused variable. */
- cpu8051_Exec();
- if (IsBreakpoint(cpu8051.pc)) {
- log_info("Breakpoint Hit");
+ breakpoint_hit = cpu8051_run(1, NULL);
+
+ if (breakpoint_hit)
emugtk_stop_running();
- }
return TRUE;
}
}
void
-emugtk_restart_gui(void)
+emugtk_quit_gui(void)
{
- emugtk_stop_running();
+ gtk_main_quit();
+}
+
+static void
+emugtk_show_memory_paned(void)
+{
+ gtk_widget_show_all(mainwin);
+ emugtk_UpdateDisplay();
+}
- gtk_widget_destroy(mainwin);
+void
+emugtk_create_int_memory_paned(void)
+{
+ scrollwin_int = memwin_init("Internal memory (IRAM)",
+ INT_MEM_ID);
+ gtk_paned_pack1(GTK_PANED(vpaned1), scrollwin_int,
+ FALSE, FALSE);
+ if (emugtk_window_init_complete == true)
+ emugtk_show_memory_paned();
+}
- restart_gui = true;
+void
+emugtk_destroy_int_memory_paned(void)
+{
+ if (scrollwin_int == NULL)
+ return;
+
+ gtk_widget_destroy(scrollwin_int);
+ scrollwin_int = NULL;
}
void
-emugtk_quit_gui(void)
+emugtk_create_ext_memory_paned(void)
{
- gtk_main_quit();
+ scrollwin_ext = memwin_init("External memory (XRAM)",
+ EXT_MEM_ID);
- restart_gui = false;
+ gtk_paned_pack2(GTK_PANED(vpaned1), scrollwin_ext,
+ TRUE, FALSE);
+
+ if (emugtk_window_init_complete == true)
+ emugtk_show_memory_paned();
+}
+
+void
+emugtk_destroy_ext_memory_paned(void)
+{
+ if (scrollwin_ext == NULL)
+ return;
+
+ gtk_widget_destroy(scrollwin_ext);
+ scrollwin_ext = NULL;
+}
+
+void
+emugtk_recreate_memory_paned(void)
+{
+ if (cfg->view_int_memory) {
+ emugtk_destroy_int_memory_paned();
+ emugtk_create_int_memory_paned();
+ }
+
+ if (cfg->view_ext_memory) {
+ emugtk_destroy_ext_memory_paned();
+ emugtk_create_ext_memory_paned();
+ }
+
+ if (emugtk_window_init_complete == true)
+ emugtk_show_memory_paned();
}
static GtkWidget *
emugtk_create_memory_paned(void)
{
- GtkWidget *vpaned;
- GtkWidget *scrollwin;
-
/* Create vpaned (memory windows) only if necessary. */
if (cfg->view_int_memory || cfg->view_ext_memory) {
- vpaned = gtk_vpaned_new();
- gtk_paned_set_position(GTK_PANED(vpaned), cfg->vpane_pos);
- g_signal_connect(G_OBJECT(vpaned), "notify::position",
- G_CALLBACK(vpaned_notify_event), vpaned);
-
- /* Internal memory dump frame. */
- if (cfg->view_int_memory) {
- scrollwin = memwin_init("Internal memory (IRAM)",
- INT_MEM_ID);
- gtk_paned_pack1(GTK_PANED(vpaned), scrollwin,
- FALSE, FALSE);
- }
-
- /* External memory dump frame. */
- if (cfg->view_ext_memory) {
- scrollwin = memwin_init("External memory (XRAM)",
- EXT_MEM_ID);
- gtk_paned_pack2(GTK_PANED(vpaned), scrollwin,
- TRUE, FALSE);
- }
-
- return vpaned;
+ vpaned1 = gtk_vpaned_new();
+
+ gtk_paned_set_position(GTK_PANED(vpaned1), cfg->vpane_pos);
+ g_signal_connect(G_OBJECT(vpaned1), "notify::position",
+ G_CALLBACK(vpaned_notify_event), vpaned1);
+
+ emugtk_recreate_memory_paned();
+
+ return vpaned1;
} else
return NULL;
}
GtkWidget *vpaned;
GtkWidget *main_paned;
+ emugtk_window_init_complete = false;
+
mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(mainwin), PACKAGE);
gtk_window_set_default_size(GTK_WINDOW(mainwin),
scrollwin = pswwin_init();
gtk_box_pack_start(GTK_BOX(buttons_bar), scrollwin, FALSE, FALSE, 100);
+ scrollwin = timerwin_init();
+ gtk_box_pack_start(GTK_BOX(buttons_bar), scrollwin, FALSE, FALSE, 100);
+
/* hpaned will contain registers and disassembly windows. */
hpaned = gtk_hpaned_new();
gtk_paned_set_position(GTK_PANED(hpaned), cfg->hpane_pos);
g_signal_connect(mainwin, "destroy", G_CALLBACK(emugtk_quit_gui), NULL);
gtk_widget_show_all(mainwin);
+
+ emugtk_window_init_complete = true;
}
void
cpu8051_Reset();
- while (restart_gui == true) {
- log_info("Init GUI");
-
- emugtk_window_init();
- emugtk_UpdateDisplay();
- gtk_main();
- }
+ log_info("Init GUI");
+ emugtk_window_init();
+ emugtk_UpdateDisplay();
+ gtk_main();
log_info("Terminate");