Remove obsolescent macro AM_PROG_CC_C_O
[emu8051.git] / src / pgmwin.c
index 69410bc..0e8961b 100644 (file)
@@ -33,6 +33,7 @@
 
 static GtkWidget *pgmlist;
 
+#define LIST_VIEW_NAME "Program"
 #define DATA_ROWS 100
 
 enum
@@ -48,7 +49,7 @@ enum
        N_COLUMNS,
 };
 
-char *col_names[N_COLUMNS] = {
+static char *col_names[N_COLUMNS] = {
        "BPT",
        "Address",
        "B0",
@@ -162,7 +163,7 @@ pgmwin_init(void)
        GtkListStore *store;
        GtkTreeSelection *selection;
 
-       frame = gtk_frame_new("Program");
+       frame = gtk_frame_new(LIST_VIEW_NAME);
 
        scrollwin = gtk_scrolled_window_new(NULL, NULL);
        gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin),
@@ -219,7 +220,8 @@ pgmwin_refresh(void)
                int valid;
                GtkTreeIter iter;
                char str[128];
-               int k;          int col_id;
+               int k;
+               int col_id;
                int InstSize;
                unsigned char OpCode;
 
@@ -238,38 +240,60 @@ pgmwin_refresh(void)
                        return;
                }
 
-               /* Display breakpoints. */
-               if (IsBreakpoint(Address))
-                       sprintf(str, "*");
-               else
-                       str[0] = '\0';
+               if (Address > 0xFFFF) {
+                       /*
+                        * Not the most elegant solution, but it works to not
+                        * display instructions past last address, 0xFFFF.
+                        */
+                       gtk_list_store_set(store, &iter,
+                                          COL_BREAKPT, NULL,
+                                          COL_ADDR, NULL,
+                                          COL_B0, NULL,
+                                          COL_B1, NULL,
+                                          COL_B2, NULL,
+                                          COL_INST, NULL,
+                                          COL_ARGS, NULL,
+                                          COL_COLOR, NULL,
+                                          -1);
+               } else {
+                       /* Display breakpoints. */
+                       if (IsBreakpoint(Address))
+                               sprintf(str, "*");
+                       else
+                               str[0] = '\0';
 
-               gtk_list_store_set(store, &iter, COL_BREAKPT, str, -1);
+                       gtk_list_store_set(store, &iter, COL_BREAKPT, str, -1);
 
-               /* Display base address. */
-               int2asciihex(Address, str, 4);
+                       /* Display base address. */
+                       int2asciihex(Address, str, 4);
 
-               gtk_list_store_set(store, &iter, COL_ADDR, str, -1);
+                       gtk_list_store_set(store, &iter, COL_ADDR, str, -1);
 
-               OpCode = memory_read8(PGM_MEM_ID, Address);
-               InstSize = cpu8051_get_instruction_size(OpCode);
+                       OpCode = memory_read8(PGM_MEM_ID, Address);
+                       InstSize = cpu8051_get_instruction_size(OpCode);
 
-               /* Display instruction hex bytes. */
-               for (k = 0, col_id = COL_B0; k < InstSize; k++, col_id++) {
-                       int2asciihex(memory_read8(PGM_MEM_ID, Address + k),
-                                    str, 2);
-                       gtk_list_store_set(store, &iter, col_id, str, -1);
-               }
+                       /* Display instruction hex bytes. */
+                       for (k = 0, col_id = COL_B0; k < 3; k++, col_id++) {
+                               if (k < InstSize)
+                                       int2asciihex(memory_read8(PGM_MEM_ID,
+                                                                 Address + k),
+                                                    str, 2);
+                               else
+                                       str[0] = '\0';
 
-               /* Display instruction menmonic. */
-               cpu8051_disasm_mnemonic(OpCode, str);
-               gtk_list_store_set(store, &iter, COL_INST, str, -1);
+                               gtk_list_store_set(store, &iter, col_id, str, -1);
+                       }
 
-               /* Display instruction arguments (if applicable). */
-               str[0] = '\0';
-               cpu8051_disasm_args(Address, str);
-               gtk_list_store_set(store, &iter, COL_ARGS, str, -1);
+                       /* Display instruction menmonic. */
+                       cpu8051_disasm_mnemonic(OpCode, str);
+                       gtk_list_store_set(store, &iter, COL_INST, str, -1);
 
-               Address += InstSize;
+                       /* Display instruction arguments (if applicable). */
+                       str[0] = '\0';
+                       cpu8051_disasm_args(Address, str);
+                       gtk_list_store_set(store, &iter, COL_ARGS, str, -1);
+
+                       Address += InstSize;
+               }
        }
 }