Listing of file='MC.MAC;01' on disk='vmedia/tiny_c_v3.0-sector.ccvf'
; MACHINE CALL ROUTINE TO INTERFACE TO 8080 CODED ROUTINES MCER EQU 24 KILL EQU 99 EXTRN APPLVL,ECHO,ERR,ESCAPE,MCARGS EXTRN ESET,PUSHK,PONE,POPTWO,PZERO,TOPTOI ENTRY MC MC: STA MCARGS CALL TOPTOI LXI H,-1000 DAD D JC USERMC MOV A,E CPI 1 JZ MC1 CPI 2 JZ MC2 CPI 3 JZ MC3 CPI 4 JZ MC4 CPI 5 JZ MC5 CPI 6 JZ MC6 CPI 7 JZ MC7 CPI 8 JZ MC8 CPI 9 JZ MC9 CPI 10 JZ MC10 CPI 11 JZ MC11 CPI 12 JZ MC12 CPI 13 JZ MC13 CPI 14 JZ MC14 ENTRY MCESET MCESET: CALL ESET DB MCER RET ; PUT A CHARACTER TO SCREEN EXTRN OUTCH MC1: CALL TOPTOI CALL PUSHK MOV A,E JMP OUTCH ; GET A CHARACTER FROM KEYBOARD EXTRN INCH MC2: CALL INCH MOV B,A LDA APPLVL ORA A JZ USEIT LDA ESCAPE CMP B JNZ USEIT CALL ESET DB KILL USEIT: LDA ECHO ORA A MOV A,B CNZ OUTCH MOV E,A XRA A MOV D,A JMP PUSHK ; FILE OPEN(R/W,NAME,FSIZE,UNIT) EXTRN FOPEN MC3: CALL TOPTOI PUSH D CALL TOPTOI PUSH D CALL TOPTOI PUSH D CALL TOPTOI MOV A,E ORA D POP H POP D POP B CALL FOPEN MC3A: LXI D,0 MOV E,A JMP PUSHK ; READ BLOCK(WHERE2,UNIT) EXTRN FREAD MC4: CALL TOPTOI PUSH D CALL TOPTOI XCHG POP B CALL FREAD MC4A: JZ MC4P ;RSS02 LXI D,-1 MOV E,A MC4P: JMP PUSHK ; WRITE BLOCK(1ST BYTE,LAST BYTE,UNIT) EXTRN FWRITE MC5: CALL TOPTOI PUSH D CALL TOPTOI PUSH D CALL TOPTOI XCHG POP D POP B CALL FWRITE JMP MC3A ;RSS04 ; CLOSE FILE(UNIT) EXTRN FCLOSE,PZERO MC6: CALL TOPTOI MOV C,E MOV B,D CALL FCLOSE JMP PZERO ; MOVE A BLOCK UP OR DOWN(FIRST,LAST,K) EXTRN MOVEBL MC7: CALL TOPTOI PUSH D CALL TOPTOI PUSH D CALL TOPTOI POP H POP B CALL MOVEBL JMP PZERO ; COUNT # INSTANCES OF CHARACTER IN BLOCK(FIRST,LAST,CH) EXTRN CNTCH MC8: CALL TOPTOI PUSH D CALL TOPTOI PUSH D CALL TOPTOI POP H POP B MOV A,C CALL CNTCH MOV E,C MOV D,B JMP PUSHK ; SCAN FOR NTH OCCURANCE OF CH(FIRST,LAST,CH,CNT ADDRESS) EXTRN SCANN MC9: CALL TOPTOI PUSH D CALL TOPTOI PUSH D CALL TOPTOI PUSH D CALL TOPTOI POP H POP B MOV A,C XTHL MOV C,M INX H MOV B,M DCX H XTHL PUSH D CALL SCANN POP H MOV A,E SUB L MOV E,A MOV A,D SBB H MOV D,A POP H MOV M,C INX H MOV M,B JMP PUSHK ; TRAP TO MONITOR 4.0 FOR DEBUGGING. MC10: DB 0FFH RET ; ENTERS AN APPLICATION PROGRAM. EXTRN CURFUN,CURGLBL,CURSOR,ERRAT EXTRN PROGEND,PRUSED EXTRN FUNDONE,HLNEG,LINK,NEWFUN,PRBEGIN,PRDONE,ST MC11: LHLD CURSOR PUSH H LHLD PROGEND PUSH H LHLD PRUSED PUSH H LHLD CURGLBL PUSH H CALL TOPTOI XCHG PUSH H SHLD CURSOR CALL TOPTOI XCHG SHLD PRUSED CALL HLNEG SHLD PROGEND CALL LINK LHLD CURFUN SHLD CURGLBL CALL TOPTOI XCHG SHLD CURSOR CALL NEWFUN CALL TOPTOI PUSH D LXI H,APPLVL INR M PUSH H LDA ERR ORA A JNZ DONE CALL PRBEGIN CALL ST CALL PRDONE DONE: POP H DCR M CALL FUNDONE CALL FUNDONE LHLD CURSOR LDA ERR ORA A JZ MCEN2 LHLD ERRAT MCEN2: XCHG POP H POP B MOV A,E SUB C MOV E,A MOV A,D SBB B MOV D,A LDA ERR MOV M,A XRA A INX H MOV M,A INX H MOV M,E INX H MOV M,D POP H SHLD CURGLBL POP H SHLD PRUSED POP H SHLD PROGEND POP H SHLD CURSOR XRA A STA ERR JMP PZERO ; TEST IF KEYBOARD CHAR READY EXTRN CHRDY MC12: CALL CHRDY MVI D,0 MOV E,A JMP PUSHK ; PRINT RAM, FROM AND TO ADDRESSES MC13: CALL TOPTOI PUSH D CALL TOPTOI XCHG POP D LOOP13: MOV A,E SUB L MOV A,D SBB H JC PZERO MOV A,M ORA A JNZ EC13 MVI A,'"' EC13: CALL OUTCH INX H JMP LOOP13 ; PRINT A SIGNED INTEGER EXTRN PN MC14: CALL TOPTOI PUSH D CALL PN POP D JMP PUSHK ; USER MC CALLS USERMC: MOV A,L ; A:=MC#-1000 CPI 1 JZ MC101 CPI 2 JZ MC102 CPI 3 JZ MC103 CPI 4 JZ MC104 CPI 5 JZ MC105 CPI 6 JZ MC106 JMP MCESET ; OUTPUT(PORT#,VALUE) MC101: CALL POPTWO ; GET PORT# AND VALUE LXI H,MC101A+1 MOV M,E ; STORE PORT# IN INSTRUCTION MOV A,C ; OUTPUT C TO PORT MC101A: OUT 0 JMP PZERO ; INPUT(PORT#) MC102: CALL TOPTOI ; GET PORT# LXI H,MC102A+1 MOV M,E ; STORE PORT# IN INSTRUCTION MC102A: IN 0 ; INPUT FROM PORT MVI D,0 ; DE:=VALUE MOV E,A JMP PUSHK ; GETBYTE(UNIT) EXTRN GBYTE MC103: CALL TOPTOI ; BC:=UNIT# MOV B,D MOV C,E CALL GBYTE ; READ BYTE JMP MC4A ; BREAD(FIRST BYTE,LAST BYTE,BLOCK#,UNIT) EXTRN BREAD,POPOFF MC104: CALL POPOFF ; POP ARGUMENTS INTO BLOCKN CALL BREAD ; READ BLOCKS JMP MC4A ; BWRITE(FIRST BYTE,LAST BYTE,BLOCK#,UNIT) EXTRN BWRITE MC105: CALL POPOFF ; POP ARGUMENTS INTO BLOCKN CALL BWRITE ; WRITE BLOCKS JMP MC4A ; FPBADR(UNIT) EXTRN FADDR MC106: CALL TOPTOI ; * GET FPB ADDRESS * MOV B,D MOV C,E CALL FADDR ; GET ADDRESS XCHG JMP PUSHK END