; ; PROGRAM "USB" REPEATS COMMAND LINE FROM MDS TO USB ; AND THEN ECHOS UPTO 128 BYTES TO THE MDS CONSOLE ; 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 ; USB: LXI SP,STCKA+4 ; OUR OWN USER STACK AREA MVI A,35H ; PUT DTR AND SD0 USB HIGH OUT 0F7H ; GETFN: MVI C,READ ; CALL ISIS TO READ THE COMMAND LXI D,RBLK ; LINE TO BUFFER CALL ISIS LDA STATUS ORA A JNZ ERR ; LXI H,BUFFER-1 CMD: INX H ; MOVE POINTER MOV C,M ; GET CHARACTER TO SEND CALL CRTOUT ; SEND IT TO USB MOV A,M ; DID WE SEND CR? CPI CR ; CR AT END OF COMMAND LINE? JNZ CMD ; IF NO, LOOP LXI H,BUFFER LISTEN: CALL CRTIN ; GET CHAR FROM USB ANI 07FH ; MASK PARITY MOV M,A ; SAVE IN BUFFER ; WAS IT THE PROMPT ">"? CPI '>' JZ LIST0 ; YES, STOP LISTENING INX H JMP LISTEN LIST0: DCX H ; LOOK AT PREVIOUS ONE MOV A,M CPI '\' INX H INX H JNZ LISTEN ; PREVIOUS WAS NOT "\" JUMP PRINT: LXI H,BUFFER PRINT0: MOV C,M ; SPEW THE BUFFER CALL CO MOV A,M ; WAS IT THE PROMPT ">"? CPI '>' ; JZ PRINT1 INX H JMP PRINT0 PRINT1: DCX H MOV A,M CPI '\' INX H INX H JNZ PRINT0 MVI C,CR ; OTHERWISE DO A CR, LF CALL CO MVI C,LF CALL CO JMP DONE ; DIRMSG: DB 'DIR /F',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 ; CRTOUT: IN 0F7H ANI TRDY JZ CRTOUT MOV A,C OUT 0F6H RET ; CRTIN: IN 0F7H ANI RRDY JZ CRTIN IN 0F6H RET ; DONE: MVI C,CLOSE LXI D,CBLK CALL ISIS DONE0: MVI C,EXIT LXI D,XBLK CALL ISIS ERR: MVI C,ERROR LXI D,EBLK CALL ISIS JMP DONE0 ; DSEG OBLK: DW WAFT DW BUFFER DW 2 DW 0 DW STATUS ; CBLK: CAFT: DS 2 DW STATUS ; RBLK: OAFT: RAFT: DW 1 DW BUFFER DW 128 DW ACTUAL DW STATUS ; ACTUAL: DS 2 ; WBLK: WAFT: DS 2 DW BUFFER WCNT: DS 2 DW STATUS ; XBLK: DW STATUS EBLK: STATUS: DS 2 DW STATUS ; BUFFER: DS 256 DB '\>\>' ; FILENM: DS 128 ; FIRSTNM: DS 2 DIGITS: DS 1 BYTECNT: DS 2 ; RESPONSE: DS 128 ; IOPB: DB 0 ; INTERRUPTS ON DB 14H DB 52 TRACK: DB 0 DB 1 IOPB5: DW TRKBUFF ; DS 128 ; TRKBUFF: DS 6656 ; BUFFTOP: ; STCKA: DS 4 ; END USB