;Alto->8086 small-c compiler rev 2.0 C_CODE SEGMENT $INCLUDE(8086LIB.D) $INCLUDE(runtime.DEC) ASSUME CS:C_CODE, DS:C_DATA ; #include ; extern SetTmr(); ; extern int TmrExp(); ; extern int FetchW(); ; extern CallDebugger(); ; int EqStr(s1, s2) _EqStr: ; char *s1, *s2; PUSH BP MOV BP,SP PUSH CX PUSH BX ; { ; while (*s1 != 0) if (LC(*s1++) != LC(*s2++)) return(false); X1: ; DI _ _s1 MOV DI,[BP-2] MOV AL,[DI] OR AL,AL JZ X2 INC WORD PTR [BP-2] ; BX _ _s1 MOV BX,[BP-2] MOV AL,[BX-1] CBW MOV BX,AX CALL _LC PUSH BX INC WORD PTR [BP-4] ; BX _ _s2 MOV BX,[BP-4] MOV AL,[BX-1] CBW MOV BX,AX CALL _LC POP CX CMP CX,BX JZ X3 XOR BX,BX MOV SP,BP POP BP RET; X3: JR X1 X2: ; if (*s2 != 0) return (false); ; DI _ _s2 POP DI PUSH DI MOV AL,[DI] OR AL,AL JZ X4 XOR BX,BX MOV SP,BP POP BP RET; X4: ; return(true); MOV BX,0FFFFX MOV SP,BP POP BP RET; ; }; ; int IsDigit(c) _IsDigit: ; char c; PUSH BP MOV BP,SP PUSH BX ; { ; if (c >= '0' && c <= '9') return(true); ; AL _ _c POP AX PUSH AX CMP AL,030X JL X6 ; AL _ _c POP AX PUSH AX CMP AL,039X JG X6 MOV AL,1 JR X7 X6: XOR AL,AL X7: OR AL,AL JZ X5 MOV BX,0FFFFX MOV SP,BP POP BP RET; ; else return(false); X5: XOR BX,BX MOV SP,BP POP BP RET; ; }; ; int LC(c) _LC: ; char c; PUSH BP MOV BP,SP PUSH BX ; { ; if (c >= 'A' && c <= 'Z') c = c - 'A' + 'a'; ; AL _ _c POP AX PUSH AX CMP AL,041X JL X9 ; AL _ _c POP AX PUSH AX CMP AL,05AX JG X9 MOV AL,1 JR X10 X9: XOR AL,AL X10: OR AL,AL JZ X8 ; AL _ _c POP AX ADD AL,0BFX ADD AL,061X ; _c _ AL PUSH AX X8: ; return (c); ; BX _ _c POP BX PUSH BX XOR BH,BH MOV SP,BP POP BP RET; ; }; ; int UC(c) _UC: ; char c; PUSH BP MOV BP,SP PUSH BX ; { ; if (c >= 'a' && c <= 'z') c = c - 'a' + 'A'; ; AL _ _c POP AX PUSH AX CMP AL,061X JL X12 ; AL _ _c POP AX PUSH AX CMP AL,07AX JG X12 MOV AL,1 JR X13 X12: XOR AL,AL X13: OR AL,AL JZ X11 ; AL _ _c POP AX ADD AL,09FX ADD AL,041X ; _c _ AL PUSH AX X11: ; return (c); ; BX _ _c POP BX PUSH BX XOR BH,BH MOV SP,BP POP BP RET; ; }; ; CallSwat(code) _CallSwat: ; int code; PUSH BP MOV BP,SP PUSH BX ; { ; CallDebugger(code); ; BX _ _code POP BX PUSH BX CALL _CallDebugger ; }; MOV SP,BP POP BP RET; ; Timer(t) _Timer: ; int t[]; PUSH BP MOV BP,SP PUSH BX ; { ; t[1] = FetchW(clkhi); ; BX _ _t POP BX PUSH BX PUSH BX MOV BX,0DA20X CALL _FetchW MOV CX,BX POP BX MOV [BX+2],CX ; t[0] = FetchW(clklo); MOV BX,0DA1EX CALL _FetchW MOV CX,BX ; BX _ _t POP BX PUSH BX MOV [BX],CX ; if (t[1] != FetchW(clkhi)) Timer(t); ; BX _ _t POP BX PUSH BX MOV CX,[BX+2] PUSH CX MOV BX,0DA20X CALL _FetchW POP CX CMP CX,BX JZ X14 ; BX _ _t POP BX PUSH BX CALL _Timer X14: ; }; MOV SP,BP POP BP RET; ; Dismiss(ms) _Dismiss: ; int ms; PUSH BP MOV BP,SP PUSH BX ; { ; int tmr; PUSH DX ; SetTmr(ms, &tmr); ;&_tmr LEA BX,[BP-4] ; CX _ _ms MOV CX,[BP-2] CALL _SetTmr ; while (!TmrExp(&tmr)) Block(); X15: ;&_tmr LEA BX,[BP-4] CALL _TmrExp OR BX,BX JNZ X16 CALL _Block JR X15 X16: ; }; MOV SP,BP POP BP RET; ; Externals Declared Here PUBLIC _EqStr PUBLIC _LC PUBLIC _IsDigit PUBLIC _UC PUBLIC _CallSwat PUBLIC _Timer PUBLIC _Dismiss C_CODE ENDS ; Number of Bytes of Code = 0130X, (304)