- char TextTmp[255];
- int row = 0;
- unsigned char PSW = cpu8051_ReadD( _PSW_ );
- unsigned char Rbank;
-
- gtk_clist_freeze( GTK_CLIST( regclist ) );
-
- // Main registers
- sprintf( TextTmp , "PC = %.4X", cpu8051.pc );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "SP = %.2X", cpu8051_ReadD( _SP_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "A = %.2X", cpu8051_ReadD( _ACC_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "B = %.2X", cpu8051_ReadD( _B_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "DPTR = %.4X", ( cpu8051_ReadD( _DPTRHIGH_ ) << 8 ) + cpu8051_ReadD( _DPTRLOW_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
-
- // Program Status Word
- sprintf( TextTmp , "PSW = %.2X",PSW);
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
-
- // Ports registers
- sprintf( TextTmp , "P0 = %.2X", cpu8051_ReadD( _P0_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "P1 = %.2X", cpu8051_ReadD( _P1_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "P2 = %.2X", cpu8051_ReadD( _P2_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "P3 = %.2X", cpu8051_ReadD( _P3_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
-
- // Misc Registers
- sprintf( TextTmp , "TCON = %.2X", cpu8051_ReadD( _TCON_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "TMOD = %.2X", cpu8051_ReadD( _TMOD_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "SCON = %.2X", cpu8051_ReadD( _SCON_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "IE = %.2X", cpu8051_ReadD( _IE_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "IP = %.2X", cpu8051_ReadD( _IP_ ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
-
- // R0-R7 Registers in current Bank
- Rbank = cpu8051_ReadD( _PSW_ ) & 0x18;
- sprintf( TextTmp , "Bank = %.2X", Rbank);
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "R0 = %.2X", cpu8051_ReadD( _R0_ + Rbank ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "R1 = %.2X", cpu8051_ReadD( _R1_ + Rbank ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "R2 = %.2X", cpu8051_ReadD( _R2_ + Rbank ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "R3 = %.2X", cpu8051_ReadD( _R3_ + Rbank ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "R4 = %.2X", cpu8051_ReadD( _R4_ + Rbank ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "R5 = %.2X", cpu8051_ReadD( _R5_ + Rbank ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "R6 = %.2X", cpu8051_ReadD( _R6_ + Rbank ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
- sprintf( TextTmp , "R7 = %.2X", cpu8051_ReadD( _R7_ + Rbank ) );
- gtk_clist_set_text( GTK_CLIST( regclist ), row++, 0, TextTmp );
-
- gtk_clist_select_row(GTK_CLIST(regclist),0,0);
- gtk_clist_thaw( GTK_CLIST( regclist ) );
+ int row;
+ GtkListStore *store;
+
+ store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(reglist)));
+
+ for (row = 0; row < DATA_ROWS; row++) {
+ int valid;
+ GtkTreeIter iter;
+ int val;
+ char str[8];
+
+ if (row == 0) {
+ /* Get first row in list store */
+ valid = gtk_tree_model_get_iter_first(
+ GTK_TREE_MODEL(store), &iter);
+ } else {
+ /* Get next row in list store */
+ valid = gtk_tree_model_iter_next(
+ GTK_TREE_MODEL(store), &iter);
+ }
+
+ if (!valid) {
+ printf("Invalid iter...\n");
+ return;
+ }
+
+ /* Read register value using function pointer. */
+ val = regwin_read[row].read_func(regwin_read[row].param);
+
+ /* Convert to specified number of hex digits. */
+ if (regwin_read[row].w == 2)
+ sprintf(str , "%.2X", (u_int8_t) val);
+ else if (regwin_read[row].w == 4)
+ sprintf(str , "%.4X", (u_int16_t) val);
+
+ gtk_list_store_set(store, &iter,
+ COL_NAME, regwin_read[row].name,
+ COL_VAL, str,
+ -1);
+ }