;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)