CR EQU 0DH LF EQU 0AH CRTS EQU 0F7H CRTD EQU 0F6H ; ; ISIS CALLS ; OPEN EQU 0 CLOSE EQU 1 READ EQU 3 WRITE EQU 4 EXIT EQU 9 ERROR EQU 12 ; TTYI EQU 0F4H TTYO EQU 0F4H TTYS EQU 0F5H TTYC EQU 0F5H ; TRDY EQU 00000001B RRDY EQU 00000010B ; DTR EQU 00000010B ; EXTRN ISIS EXTRN CO EXTRN CI ; CSEG ; BEGIN: LXI SP,STCKA+4 ; ; ; MVI A,0CEH ; TTY USART MODE, 1-STOP NP RX1 8BITS ; OUT 0F5H ; MVI A,27H ; TTY USART CMD ; OUT 0F5H ; MVI A,36H ; TTY TIMER SELECT ; OUT 0F3H ; MVI A,20H ; 2400 BAUD ; OUT 0F0H ; MVI A,0 ; OUT 0F0H ; ; MVI A,0CEH ; CRT MODE ; OUT 0F7H ; MVI A,27H ; CRT CMD ; OUT 0F7H ; MVI A,76H ; OUT 0F3H ; SELECT CRT TIMER ; MVI A,7 ; 9600 BAUD ; OUT 0F1H ; MVI A,0 ; OUT 0F1H ; GETFN: MVI C,READ LXI D,RBLK CALL ISIS LDA STATUS ORA A JNZ ERR LXI H,BUFFER ; SAVE IT TO FILENM BUFFER LXI D,FILENM MVI C,128 MOVEIT: ; ENDS WITH FIRST SPACE SEEN MOV A,M ; FROM BUFFER INX H STAX D ; TO FILENM INX D MOV A,M ; PEEK AT NEXT CPI 20H JZ ZERO ; JUMP IF SPACE FOUND AFTER DCR C JZ ZERO JMP MOVEIT ZERO: MVI A,0 STAX D ; REPLACE SPACE WITH 0 TO STOP CRTOUT ; UREAD: LXI H,SIZECMD ; SEND THE SIZE REQUEST CALL CRTOUT LXI H,FILENM+1 ; LEADING SPACE? CALL CRTOUT LXI H,LINEWD CALL CRTOUT MVI C,CR CALL CRTO LXI H,RESPONSE CALL CRTIN ; JMP DONE0 ; SIZECMD: DB 'SIZE ',0 LINEWD: DB ' LINE',CR,LF,0 ; CRTOUT: MOV A,M ; POINTING TO CHARACTER? ORA A RZ ; RETURN IF NOT MOV C,A ; OK TO SEND CALL CRTO INX H ; POINT TO NEXT JMP CRTOUT ; CRTIN: CALL CRTI MOV M,A CPI CR RZ INX H JMP CRTIN ; CRTI: IN CRTS ANI RRDY JZ CRTI IN CRTD ANI 7FH RET ; CRTO: IN CRTS ANI TRDY JZ CRTO MOV A,C OUT CRTD RET ; ; ; DONE: MVI C,CLOSE LXI D,CBLK CALL ISIS DONE0: MVI C,EXIT LXI D,XBLK CALL ISIS ; AND NEVER COME BACK ; ERR: MVI C,ERROR LXI D,EBLK CALL ISIS JMP DONE0 DSEG CBLK: CAFT: DS 2 DW STATUS ; RBLK: AFT: DW 1 DW BUFFER DW 128 DW ACTUAL DW STATUS ; WBLK: DW 0 DW BUFFER ACTUAL: DS 2 DW STATUS ; XBLK: DW STATUS EBLK: STATUS: DS 2 DW STATUS ; BUFFER: DS 128 ; FILENM: DS 128 ; LINCNT: DS 2 ; RESPONSE: DS 128 ; STCKA: DS 4 ; END BEGIN