;Alto->8086 small-c compiler rev 2.0 C_CODE SEGMENT $INCLUDE(8086LIB.D) $INCLUDE(timerextras.DEC) ASSUME CS:C_CODE, DS:C_DATA ; struct Long { ; int low, high; ; }; ; int ctxListTime[84]; ; int ctxStartTime; ; int wdtFlagA, wdtFlagB, wdtFlagC; ; InitCtxStats() _InitCtxStats: PUSH BP MOV BP,SP ; { ; Zero(ctxListTime, 84); MOV BX,054X LEA CX,_ctxListTime CALL _Zero ; }; MOV SP,BP POP BP RET; ; CtxListStart() _CtxListStart: PUSH BP MOV BP,SP ; { ; ctxStartTime = ReadTmr(); CALL _ReadTmr MOV _ctxStartTime,BX ; }; MOV SP,BP POP BP RET; ; CtxListEnd() _CtxListEnd: PUSH BP MOV BP,SP ; { ; Histogram(ReadTmr() - ctxStartTime, ctxListTime); CALL _ReadTmr MOV CX,_ctxStartTime SUB BX,CX PUSH BX LEA BX,_ctxListTime POP CX CALL _Histogram ; }; MOV SP,BP POP BP RET; ; PokeWDTA() _PokeWDTA: PUSH BP MOV BP,SP ; { ; wdtFlagA = 1234; MOV _wdtFlagA,04D2X ; }; MOV SP,BP POP BP RET; ; PokeWDTB() _PokeWDTB: PUSH BP MOV BP,SP ; { ; if (wdtFlagA == 1234) { MOV BX,_wdtFlagA CMP BX,04D2X JNZ X1 ; wdtFlagA = 0; MOV _wdtFlagA,0 ; wdtFlagB = 5678; MOV _wdtFlagB,0162EX ; }; X1: ; }; MOV SP,BP POP BP RET; ; PokeWDTC() _PokeWDTC: PUSH BP MOV BP,SP ; { ; if (wdtFlagB == 5678) { MOV BX,_wdtFlagB CMP BX,0162EX JNZ X2 ; wdtFlagB = 0; MOV _wdtFlagB,0 ; wdtFlagC = 91011; MOV _wdtFlagC,06383X ; }; X2: ; }; MOV SP,BP POP BP RET; ; PokeWDTD() _PokeWDTD: PUSH BP MOV BP,SP ; { ; if (wdtFlagC == 91011) { MOV BX,_wdtFlagC CMP BX,06383X JNZ X3 ; wdtFlagC = 0; MOV _wdtFlagC,0 ; CheckWDT(); CALL _CheckWDT ; }; X3: ; }; MOV SP,BP POP BP RET; ; Histogram(diff, histo) _Histogram: ; int diff; ; int *histo; PUSH BP MOV BP,SP PUSH CX PUSH BX ; { ; if (diff < 0) { ; BX _ _diff MOV BX,[BP-2] CMP BX,0 JGE X4 ; DoubleIncrement(&histo[82], 1); ; BX _ _histo POP BX PUSH BX ADD BX,0A4X PUSH BX MOV BX,1 POP CX CALL _DoubleIncrement ; return; MOV SP,BP POP BP RET; ; }; X4: ; if (diff >= 40) DoubleIncrement(&histo[80], 1); ; BX _ _diff MOV BX,[BP-2] CMP BX,028X JL X5 ; BX _ _histo POP BX PUSH BX ADD BX,0A0X PUSH BX MOV BX,1 POP CX CALL _DoubleIncrement ; else DoubleIncrement(&histo[diff << 1], 1); JR X6 X5: ; BX _ _diff MOV BX,[BP-2] SAL BX ; CX _ _histo POP CX PUSH CX SAL BX ADD BX,CX PUSH BX MOV BX,1 POP CX CALL _DoubleIncrement X6: ; }; MOV SP,BP POP BP RET; ; Externals Declared Here PUBLIC _ctxListTime PUBLIC _ctxStartTime PUBLIC _wdtFlagA PUBLIC _wdtFlagB PUBLIC _wdtFlagC PUBLIC _InitCtxStats PUBLIC _CtxListStart PUBLIC _CtxListEnd PUBLIC _Histogram PUBLIC _PokeWDTA PUBLIC _PokeWDTB PUBLIC _PokeWDTC PUBLIC _PokeWDTD C_CODE ENDS ; Number of Bytes of Code = 0E5X, (229)