--- ./src/disp/disp.c~ Sun Sep 8 22:35:11 2002 +++ ./src/disp/disp.c Tue Jul 29 21:24:40 2003 @@ -280,6 +280,12 @@ mvwprintw(win_reg, 2, 14+(i*4), "%d", val >>(7-i) & 0x1); } +void disp_print_ck( qword val ) +{ + + mvwprintw(win_reg, 2, 48, "%10lld", val); +} + void disp_reg_labels( void ) { int i,j,w; @@ -301,7 +307,7 @@ mvwprintw(win_reg, 2, 2+w*3-3, "r25::22 ="); /* Print SREG */ - mvwprintw(win_reg, 2, 2, "SREG=00 I=0 T=0 H=0 S=0 V=0 N=0 Z=0 C=0"); + mvwprintw(win_reg, 2, 2, "SREG=00 I=0 T=0 H=0 S=0 V=0 N=0 Z=0 C=0 CK="); w = (COLS-4)/REG_COLS; /* Print the rNN registers */ @@ -744,6 +750,7 @@ { int val; unsigned int bval; + qword qval; char name[50]; switch (*pkt++) @@ -833,6 +840,11 @@ case 'f': /* set flash value: not implemented yet */ break; + + case 'C': /* set cycle counter */ + if (sscanf(pkt, "%lld", &qval) == 1) + disp_print_ck( qval ); + break; } disp_move_cursor(sram->curr); --- ./src/display.c~ Sun Sep 8 22:35:11 2002 +++ ./src/display.c Tue Jul 29 21:01:30 2003 @@ -395,3 +395,16 @@ global_buf[MAX_BUF] = '\0'; display_send_msg( global_buf ); } + +/** \brief Update cycle counter in the display. + \param ck Value of cycle counter. + + The display will update the cycle counter.*/ + + +void display_ck( qword ck ) +{ + snprintf( global_buf, MAX_BUF, "C%lld", ck ); + global_buf[MAX_BUF] = '\0'; + display_send_msg( global_buf ); +} --- ./src/display.h~ Thu Sep 5 08:41:08 2002 +++ ./src/display.h Tue Jul 29 21:01:58 2003 @@ -39,6 +39,7 @@ extern void display_flash ( int addr, int len, word *vals ); extern void display_sram ( int addr, int len, byte *vals ); extern void display_eeprom ( int addr, int len, byte *vals ); +extern void display_ck ( qword ck ); /* FIXME: this isn't going to be public for much longer */ extern void display_send_msg( char *msg ); --- ./src/avrcore.c~ Thu Sep 5 08:41:08 2002 +++ ./src/avrcore.c Tue Jul 29 21:45:43 2003 @@ -352,6 +352,9 @@ core->clk_cb = NULL; core->async_cb = NULL; + core->RAMPZ = 0; + core->EIND = 0; + switch (stack_type) { case STACK_HARDWARE: core->stack = (Stack *)hwstack_new( stack_sz ); @@ -676,7 +679,15 @@ qword avr_core_CK_get ( AvrCore *core ) { return core->CK; } /** \brief FIXME: write me. */ -void avr_core_CK_incr( AvrCore *core ) { core->CK++; } +void avr_core_CK_incr( AvrCore *core ) +{ + static int updated; + + core->CK++; + /* We only update the cycle counter display each 64 clock cycles. */ + if (updated++ % 64 == 0) + display_ck( core->CK ); +} /** \brief FIXME: write me. */ int avr_core_inst_CKS_get( AvrCore *core ) { return core->inst_CKS; }