PROMPT EQU 03EH ; THE DOS PROMPT ">" CR EQU 0DH LF EQU 0AH ; ; 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 ; DIR: LXI SP,STK+4 ; LXI H,DIRMSG-1 ; ; 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 ; LXI H,DIRMSG-1 DIR0: INX H MOV A,M CPI 0 JZ LISTEN MOV C,M CALL CRTOUT ; CALL CI ; ANI 07FH ; CPI CR ; JZ ABORT JMP DIR0 ; LISTEN: CALL CRTIN ANI 07FH STA BUFFER MOV C,A CALL CO LDA BUFFER CPI PROMPT JNZ LISTEN MVI C,CR CALL CO MVI C,LF CALL CO JMP DONE ; DIRMSG: DB 'DIR',CR,0 ERRMSG: DB CR,'USER ABORTED',CR,LF,0 ; ABORT: LXI H,ERRMSG-1 ABORT0: INX H MOV A,M CPI 0 JZ DONE MOV C,M CALL CO JMP ABORT0 ; DONE: MVI C,EXIT LXI D,XBLK CALL ISIS ; DSEG XBLK: DW STATUS EBLK: STATUS: DS 2 DW STATUS ; BUFFER: DS 128 ; STK: DS 4 ; CSEG ; CRTOUT: IN 0F7H ANI TRDY JZ CRTOUT MOV A,C OUT 0F6H RET ; CRTIN: IN 0F7H ANI RRDY JZ CRTIN IN 0F6H RET ; END DIR