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