Debugger Options C F Symbol Add unsigned char TCR Address 0x10021 Fill_Mem 0x00 Symbol Add unsigned char TIVR Address 0x10023 Fill_Mem 0x0f Symbol Add unsigned char CPRH Address 0x10027 Fill_Mem 0x00 Symbol Add unsigned char CPRM Address 0x10029 Fill_Mem 0x00 Symbol Add unsigned char CPRL Address 0x1002B Fill_Mem 0x00 Symbol Add unsigned char TSR Address 0x10035 Fill_Mem 0x00 Symbol Add unsigned char TSRW Address 0x10037 Fill_Mem 0x00 Symbol Add unsigned long OFFSET Address 0x10038 Fill_Mem 0x00000000 Symbol Add unsigned char MSTAT Address 0x1003c Fill_Mem 0x00 Symbol Add unsigned long COUNTER Address 0x10040 Fill_Mem 0x00 Debugger Macro Add TimerControl() { unsigned char ZDT,TE; unsigned long ccyc; ZDT=(TCR&0xe0); TE=TCR&0x01; ccyc=CPRH; ccyc=ccyc<<8; ccyc+=CPRM; ccyc=ccyc<<8; ccyc+=CPRL; ccyc/=13; if(((ZDT==128)||(ZDT==192))&&(MSTAT&0x04!=0)) if(MSTAT&0x03>0) $Program Interrupt Remove 2$; if((ZDT==160)&&((MSTAT&0x01)==0)) { MSTAT|=0x01; ccyc-=@cycles-OFFSET; if((MSTAT&0x04)==4) { $Program Interrupt Add Once ccyc,2,TIVR$; if((MSTAT&0x08)==0) { ccyc=(long)word((void *)(4*TIVR)); ccyc=ccyc<<16; ccyc+=(long)word((void *)(4*TIVR+2)); $Breakpoint Inst ccyc ;TimerZero()$; $Window Active User_Window 50$; MSTAT|=0x08; } } } if((ZDT==64)&&((MSTAT&0x02)==0)) { MSTAT|=0x02; ccyc-=@cycles-OFFSET; if((MSTAT&0x04)==4) $Program Interrupt Add Once ccyc,2$; } if((TE==0)&&((MSTAT&0x04)==4)&&(MSTAT&0x03!=0)) { TSR=0; if(MSTAT&0x03) $Program Interrupt Remove 2$; MSTAT&=0xfb; } if((TE==1)&&((MSTAT&0x04)==0)) { MSTAT|=0x04; OFFSET=@cycles; if((MSTAT&0x01)==1) { $Program Interrupt Add Once ccyc,2,TIVR$; if((MSTAT&0x08)==0) { ccyc=(long)word((void *)(4*TIVR)); ccyc=ccyc<<16; ccyc=ccyc+(long)word((void *)(4*TIVR+2)); $Breakpoint Inst ccyc ;TimerZero()$; $Window Active User_Window 50$; MSTAT|=0x08; } } if((MSTAT&0x02)==2) { $Program Interrupt Add Once ccyc,2$; } } return 1; } . Debugger Macro Add TimerZero() { unsigned long cyc; if((MSTAT&0x04)==4) TSR=0x01; if((MSTAT&0x10)==0) { cyc=CPRH; cyc=cyc<<8; cyc+=CPRM; cyc=cyc<<8; cyc+=CPRL; cyc/=13; } else cyc=0x013b13b; OFFSET=@cycles; if((MSTAT&0x05)==5) $Program Interrupt Add Once cyc,2,TIVR$; if((MSTAT&0x06)==6) $Program Interrupt Add Once cyc,2$; return 1; } . Breakpoint Write 0x10021 ;TimerControl() Debugger Macro Add TimerStatus() { if(TSRW==1) { TSR=0; TCR&=0xfe; TimerControl(); } return 1; } . Breakpoint Write 0x10037 ;TimerStatus() Debugger Macro Add StatusCheck() { unsigned long cyc; cyc=CPRH; cyc=cyc<<8; cyc+=CPRM; cyc=cyc<<8; cyc+=CPRL; cyc/=13; if (((@cycles-OFFSET)>=cyc)&&((MSTAT&0x04)==4)) { TSR=0x01; OFFSET=@cycles; } return 1; } . Breakpoint Read 0x10035 ;StatusCheck() Debugger Macro Add Inc() { unsigned long cyc; if((MSTAT&0x01)==1) { COUNTER=(@cycles-OFFSET)*13; StatusCheck(); } } .