****************************************************************
* DRIVER FOR QUME SPRINT 5 PRINTER
*   
*  HAS BUILT IN HANDSHAKING WHICH ALLOWS THE PRINTER TO
*  OPERATE AT 1200 BUAD
*   
*  WRITTEN BY TODD B. MARSHALL
*  ONE KINGWOOD PLACE, SUITE 122C
*  KINGWOOD, TX 77339
*   
*  OCTOBER 10, 1979
****************************************************************
*   
BLKSIZE EQU 1  DRIVER BLOCKSIZE
IMTROPTN EQU 1  IMMEDIATE TRANSFER OPTION
*   
 ORG 0CA00H  DRIVER ORIGIN
*   
DTRB DW CODE  READ BLOCK
DTRNB DW CODE+3  READ NEXT BLOCK
DTRLB DW CODE+6  READ LAST BLOCK
DTWBR DW CODE+9  WRITE BLOCK, GET NEXT
DTWB DW CODE+12  WRITE BLOCK
DTREW DW CODE+15  REWIND OPERATION
DTEOF DW CODE+18  END FILE
DTCLO DW CODE+21  CLOSE FILE
DTSEK DW CODE+24  SEEK
DTCTL DW CODE+27  CONTROL OPERATION
DTBLK DW BLKSIZE  BLOCKSIZE
DTITO DB IMTROPTN  IMMEDIATE TRANSFER OPTION
DTINI DW CODE+30  INITIALIZE (OPEN)
****************************************************************
 COPY NPTDEFS
*   
CODE EQU $
 JMP RB  READ BLOCK
 JMP RNB  READ NEXT BLOCK
 JMP RLB  READ LAST BLOCK
 JMP WBR  WRITE BLOCK, GET NEXT
 JMP WBLK  WRITE BLOCK
 JMP REW  REWIND OPERATION
 JMP EOF  END OF FILE
 JMP CLO  CLOSE FILE
 JMP SEK  SEEK
 JMP CTL  CONTROL OPERATION
 JMP INI  INITIALIZATION
*   
WBR EQU $
WBLK MOV B,M
 MOV A,B
 ANI 7FH  STRIP PARITY
 CPI ESC  CHECK FOR ESCAPE
 CZ BCTR  BUMP COUNTER IF IT IS
 CALL CONOUT  SEND CHAR TO SCREEN
 CALL SDROT  SEND IT TO THE TERMINAL
 LDA COUNT  DECREMENT THE CHARACTER
 DCR A  COUNTER AND SAVE IT BACK
 STA COUNT
 JNZ CALL2  IF LESS THAN 100  CHARS SENT
 MVI B,ETX  ELSE, SEND ETX AND WAIT FOR
 CALL SDROT  ACK TO COME BACK FROM TERM
WAIT CALL SSTAT  SEE IF ANYTHING BACK ON SERIAL
 JZ CHKKBD  NO, CHECK KBD FOR MODE
 ANI 7FH  STRIP PARITY
 CPI ACK  YES, IS IT AN ACK?
 JNZ CHKKBD  NO, GO CHECK THE KBD FOR MODE
RST MVI A,100  IT'S AN ACK, RESET COUNTER
 STA COUNT  AND
 JMP CALL2  RETURN
CHKKBD CALL CONTST  SEE IF THERE'S A CHAR AT KBD
 JZ WAIT  NO, GO BACK TO WAIT SEQUENCE
 CALL CONIN  GET THE CHARACTER IN A
 ANI 7FH  STRIP PARITY
 CPI MODE  YES, IS IT A MODE?
 JZ CALL1  YES, RESET AND RETURN
 JMP WAIT  NO, GO BACK TO WAIT SEQUENCE
*   
CLO RET  CLOSE THE FILE
*   
EOF RET  END OF FILE
*   
REW LXI H,0  CLEAR H,L
 RET .  AND RETURN FROM REWIND
*   
RLB JMP CALL1  CAN'T READ LAST BLOCK
*   
RNB RET .  READ  BLOCK OF DATA
*   
INI MVI A,100  CLEAR THE CHARACTER COUNT TO 100
 STA COUNT
 RET .
*   
BCTR LXI H,COUNT  IF ESCAPE IS SENT INCREMENT
 INR M  COUNT BY 3 TO BE SURE ETX
 INR M  DOESN'T INTERRUPT SEQUENCE
 INR M
 RET
*   
CALL2 XTHL
 INX H
 INX H
 INX H
 XTHL
CALL1 RET
*   
SDROT EQU 0C04AH  SERIAL OUTPUT ROUTINE
SSTAT EQU 0C042H  SERIAL INPUT TEST
COUNT DB 100  CHARACTER COUNTER
ETX EQU 03H  ETX CHARACTER
ACK EQU 06H  ACK CHARACTER
MODE EQU 0   MODE
ESC EQU 1BH  ESCAPE
*   

