Listing of file='TINYC.MAC;01' on disk='vmedia/tiny_c_v3.0-sector.ccvf'
; TITLE TINY-C VERSION 80-01-03, NOVEMBER 1980 ; ; REQUIRED ROUTINES: ; EXTRN ASGN EXTRN CHRDY,INCH,OUTCH EXTRN CMPHD EXTRN CNTCH EXTRN FCLOSE,FOPEN,FREAD,FWRITE EXTRN HLNEG EXTRN KBINT EXTRN LOADER EXTRN LIT,LITX EXTRN MCESET EXTRN MOVE EXTRN NEWFUN,NEWVAR EXTRN PN,PX EXTRN PUSHK EXTRN PZERO EXTRN QUIT EXTRN REM EXTRN SCANN EXTRN SKIP,SKIPST EXTRN SYMNAME EXTRN TOPTOI EXTRN VALLOC ; ; REQUIRED VARIABLES: ; EXTRN BFUN,EFUN,BPR,EPR,BVAR,EVAR EXTRN BSTACK,ESTACK,MSTACK EXTRN KBRPTR ; ERROR CODES STATER EQU 1 CURSER EQU 2 SYMER EQU 3 RPARER EQU 5 RANGER EQU 6 CLASER EQU 7 SYNXER EQU 9 LVALER EQU 14 PUSHER EQU 16 TMFUER EQU 17 TMVRER EQU 18 TMVLER EQU 19 LNKER EQU 20 ARGSER EQU 21 LBRCER EQU 22 MCER EQU 24 SYMERA EQU 26 KILL EQU 99 VLEN EQU 3 ;ALLOCATION LENGTH OF SYMBOLS CR EQU 13 ;CARRIAGE RETURN LF EQU 10 ;LINE-FEED ERS EQU 11 ;ERASE-LINE (VT) FF EQU 12 ;ERASE-PAGE (FORM-FEED) ASCRET EQU CR ;END-OF-LINE CHARACTER HOTVEC EQU 81BFH ;ESC ^ (USER) KBVEC EQU 81C5H KBDFL EQU 81DFH ; * ENTRY POINTS TINYC: JMP COLD JMP WARM JMP HOT ; TAILORING VECTOR PUBLIC ECHO ECHO: DB 1 ; 0==SUPPRESSES ECHOING JMP INCH ; * I/O VECTORS * JMP OUTCH JMP CHRDY JMP FOPEN JMP FREAD JMP FWRITE JMP FCLOSE JMP MCESET ENTRY PRBEGIN PRBEGIN:NOP NOP RET ENTRY STBEGIN STBEGIN:NOP NOP RET ENTRY PRDONE PRDONE: NOP NOP RET ; MC TOOLS PUBLIC MCARGS,ESCAPE XMCESET:JMP MCESET XTOPTOI:JMP TOPTOI XPUSHK: JMP PUSHK MCARGS: DB 0 ESCAPE: DB 27 ; ESCAPE CHARACTER ; STANDARD CELLS PUBLIC ERR,ERRAT,LEAVE,BRAKE,TOP,NXTVAR PUBLIC CURFUN,CURGLBL,FNAME,LNAME,STCURS,CURSOR PUBLIC PRUSED,PROGEND,APPLVL ERR: DW 0 ERRAT: DW 0 LEAVE: DB 0 BRAKE: DB 0 TOP: DW 0 NXTVAR: DW 0 CURFUN: DW 0 CURGLBL:DW 0 FNAME: DW 0 LNAME: DW 0 STCURS: DW 0 CURSOR: DW 0 PRUSED: DW 0 PROGEND:DW 0 APPLVL: DB 0 ; LITERALS PUBLIC XIF,XELS,XINT,XCHAR,XWHI,XRET,XBRK,XENDL BALPHS EQU $ ; BEGIN ALPHABETICS XIF: DB 'IF',0 XELS: DB 'ELSE',0 XINT: DB 'INT',0 XCHAR: DB 'CHAR',0 XWHI: DB 'WHILE',0 XRET: DB 'RETURN',0 XBRK: DB 'BREAK',0 XENDL: DB 'ENDLIBRARY',0 DB 0FFH ; END OF ALPHABETICS PUBLIC LB,RB,LPAR,RPAR,COMMA,NEWLINE,CMNT PUBLIC XSTAR,SEMI,XPCNT,XSLASH,XPLUS,XMINUS LB: DB '[',0 RB: DB ']',0 LPAR: DB '(',0 RPAR: DB ')',0 COMMA: DB ',',0 NEWLINE:DB CR,0 CMNT: DB '/' XSTAR: DB '*',0 SEMI: DB ';',0 XPCNT: DB '%',0 XSLASH: DB '/',0 XPLUS: DB '+',0 XMINUS: DB '-',0 PUBLIC XLT,XGT,NOTEQ,EQEQ,XEQ,XGE,XLE,XNL XLT: DB '<',0 XGT: DB '>',0 NOTEQ: DB '!=',0 EQEQ: DB '=' XEQ: DB '=',0 XGE: DB '>=',0 XLE: DB '<=',0 XNL: DB ASCRET,0 ; ESET SETS ERR UNLESS ONE IS ALREADY SET ENTRY ESET ESET: LDA ERR XTHL ORA A JZ ES2 INX H XTHL RET ES2: MOV A,M INX H XTHL STA ERR LHLD CURSOR SHLD ERRAT RET ; @@@@ TINY - C INTERPRETER @@@@ ; ST INTERPRETS A POSSIBLY COMPOUND STATEMENT ENTRY ST ST: CALL QUIT LDA ERR ORA A RNZ CALL REM CALL STBEGIN ST2: LHLD CURSOR SHLD STCURS CALL DECL JNZ REM LXI D,LB CALL LIT JZ TIF CALL REM CMPND: LDA ERR MOV B,A LDA LEAVE ORA B MOV B,A LDA BRAKE ORA B RNZ LXI D,RB CALL LIT JNZ REM CALL ST JMP CMPND TIF: LXI D,XIF CALL LITX ;RSS04 JZ TWHI LXI D,LPAR CALL LIT CALL ASGN RZ LXI D,RPAR CALL LIT CALL TOPTOI MOV A,D ORA E JZ IF2 CALL ST LXI D,XELS CALL LIT CNZ SKIPST RET IF2: CALL SKIPST LXI D,XELS CALL LIT CNZ ST RET TWHI: LXI D,XWHI CALL LITX ;RSS04 JZ TSEM LXI D,LPAR CALL LIT CALL ASGN RZ LXI D,RPAR CALL LIT CALL TOPTOI MOV A,D ORA E JZ WH2 LHLD STCURS PUSH H LHLD CURSOR PUSH H CALL ST POP H SHLD OBJT POP H SHLD AGIN LDA BRAKE ORA A JZ WH3 LHLD OBJT SHLD CURSOR CALL SKIPST XRA A STA BRAKE RET WH3: LHLD AGIN SHLD CURSOR RET WH2: CALL SKIPST RET TSEM: LXI D,SEMI CALL LITX ;RSS04 JNZ REM TRET: LXI D,XRET CALL LITX ;RSS04 JZ TBRK LXI D,SEMI CALL LIT JNZ TR2 LXI D,XNL CALL LITX ;RSS04 JNZ TR2 CALL ASGN JMP TR4 TR2: CALL PZERO TR4: MVI A,1 STA LEAVE RET TBRK: LXI D,XBRK CALL LITX ;RSS04 JZ TASG MVI A,1 STA BRAKE RET TASG: CALL ASGN JZ STER CALL TOPTOI LXI D,SEMI CALL LIT JMP REM STER: CALL ESET DB STATER RET OBJT: DW 0 AGIN: DW 0 ; DECL TEST FOR AND INTERPRETS DECLARATIONS ENTRY DECL DECL: LXI D,XCHAR CALL LIT JZ TINT CH2: MVI A,'C' LXI H,0 CALL VALLOC LXI D,COMMA CALL LIT JNZ CH2 CH3: LXI D,SEMI CALL LIT MVI A,07FH ORA A RET TINT: LXI D,XINT CALL LITX ;RSS04 RZ IN2: MVI A,'I' LXI H,0 CALL VALLOC LXI D,COMMA CALL LIT JNZ IN2 JMP CH3 ; SCANS PROGRAM AND ALLOCATE ALL EXT. IN NEXT FCTN LAYER. ENTRY LINK LINK: CALL NEWFUN LI2: LDA ERR ORA A RNZ LHLD CURSOR INX H INX H XCHG LHLD PROGEND DAD D XCHG RC CALL REM LXI D,LB CALL LIT JZ LIDCL MVI B,'[' MVI C,']' CALL SKIP JMP LI2 LIDCL: CALL DECL JNZ LI2 LXI D,XENDL CALL LIT JZ LISYM CALL NEWFUN JMP LI2 LISYM: CALL SYMNAME JZ LIERR MVI A,'E' MVI B,2 MVI E,1 MVI D,0 LHLD CURSOR CALL NEWVAR LHLD CURSOR MVI A,'[' LI3: CMP M JZ LI4 INX H XCHG LHLD PROGEND DAD D XCHG JNC LI3 CALL ESET DB LBRCER RET LI4: SHLD CURSOR CALL SKIPST JMP LI2 LIERR: CALL ESET DB LNKER RET ; @@@@ IT ALL STARTS HERE @@@@ PUBLIC FCSSP FCSSP: DW 0 ; ORIGINAL SP ;RSS01 COLD: LDA FCSSP+1 ; OLD STACK SET? ;RSS01 ORA A ;RSS01 JNZ CL1 ;RSS01 LXI H,0 ;RSS01 DAD SP ;RSS01 SHLD FCSSP ;RSS01 CL1: LHLD MSTACK SPHL CL2: LXI B,-10 LHLD BPR XCHG LXI H,INST CALL MOVE LHLD BPR LXI D,9 DAD D CALL HLNEG SHLD PROGEND CL3: MVI A,0C3H ;RSS01 STA HOTVEC ;RSS01 LXI H,HOTSTRT ;RSS01 SHLD HOTVEC+1 ;RSS01 STA KBVEC ;RSS01 LXI H,KBINT ;RSS01 SHLD KBVEC+1 ;RSS01 MVI A,31 ;RSS01 STA KBDFL ;RSS01 LXI H,0 ;RSS01 SHLD KBRPTR ;RSS01 CALL LOGO WARM: CALL LOADER HOT: CALL LOGO LHLD PROGEND CALL HLNEG SHLD PRUSED LHLD BPR SHLD CURSOR LHLD BFUN LXI D,6 DAD D SHLD CURGLBL LXI D,-12 DAD D SHLD CURFUN LHLD BVAR SHLD NXTVAR LHLD BSTACK LXI D,-5 DAD D SHLD TOP XRA A MOV H,A MOV L,A STA ERR SHLD ERRAT STA LEAVE STA BRAKE CALL LINK CALL NEWFUN LHLD BPR SHLD CURSOR CALL PRBEGIN CALL ST ; THIS EXECUTES THE SYSTEM PROGRAM CALL PRDONE LDA ERR ;RSS01 ORA A ;RSS01 JNZ DONERR ;RSS01 CALL PX ;RSS01 DB LF,ERS,'DONE',CR,LF,0 ;RSS01 JMP WARM ;RSS01 ;RSS01 DONERR: CALL PX ;RSS01 DB LF,ERS,'ERROR ',0 ;RSS01 LHLD ERR ;RSS01 XCHG ;RSS01 CALL PN ;RSS01 CALL PX ;RSS01 DB ' ON LINE ',0 ;RSS01 LHLD BPR ;RSS01 XCHG ;RSS01 LHLD ERRAT ;RSS01 MVI A,ASCRET ;RSS01 PUSH H ;RSS01 PUSH D ;RSS01 CALL CNTCH ;RSS01 PUSH B ;RSS01 MOV E,C ;RSS01 MOV D,B ;RSS01 INX D ;RSS01 CALL PN ;RSS01 CALL PX ;RSS01 DB LF,ERS,0 ;RSS01 POP B ;RSS01 POP D ;RSS01 POP H ;RSS01 MVI A,ASCRET ;RSS01 CALL SCANN ;RSS01 MOV B,A ;RSS01 DONE1: INX D ;RSS01 CALL CMPHD ;RSS01 JNZ DONE2 ;RSS01 CALL PX ;RSS01 DB 21,31,'`',15,18,0 ;RSS01 DONE2: LDAX D ;RSS01 ORA A ;RSS01 JNZ DONE3 ;RSS01 MVI A,'"' ;RSS01 DONE3: CALL OUTCH ;RSS01 CMP B ;RSS01 JNZ DONE1 ;RSS01 JMP WARM INST: DB '[MAIN();]',0 ; PRINT THE COPYRIGHT MESSAGE ON THE TERMINAL. LOGO: CALL PX ;RSS01 CPMSG: DB LF,11,'TINY-C V3.0',CR,LF,0 RET ;RSS01 HOTSTRT:LHLD MSTACK ; HOT START ADDITION SPHL JMP CL3 END TINYC