#TITLE "TURBODOS OPERATING SYSTEM XON/XOFF PRINTER DRIVER" #SUBTTL "COPYRIGHT 1984 BY SOFTWARE 2000, INC." ; ; COPYRIGHT 1984 BY SOFTWARE 2000, INC. ; ; VERSION: 01/03/84 ; MODULE "LSTXON" ;MODULE NAME ; #INCLUDE "DREQUATE" ;DRIVER SYMBOLIC EQUIVALENCES ; LOC Data# ;LOCATE IN DATA SEGMENT ; XONBR:: BYTE 7 ;BAUD RATE CODE (1200 BAUD) XONFF:: BYTE AFF ;FORM FEED CHARACTER INITC: RES 16 ;INITIALIZATION COMPLETE FLAGS ; LOC Code# ;LOCATE IN CODE SEGMENT ; LSTDR_::MOV BX,&INITC ;GET INIT COMPLETE FLAGS MOV AL,CH ;CHANNEL NUMBER TO AX-REG MOV AH,=0 ;DOUBLE LENGTH ADD BX,AX ;INDEX INTO FLAGS TABLE MOV AL,[BX] ;GET INITIALIZATION COMPLETE FLAG TEST AL,AL ;INITIALIZATION COMPLETE FLAG SET? JNZ __LDRV ;IF SO, CONTINUE DEC BYTE [BX] ;SET INIT COMPLETE FLAG PUSH DX ;SAVE FUNCTION NUMBER PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER MOV CL,XONBR ;GET BAUD RATE CODE MOV DL,=3 ;SET FUNCTION NUMBER=3 CALL SERIAL# ;SET CHANNEL BUAD RATE POP CX ;RESTORE CHANNEL NUMBER/CHARACTER POP DX ;RESTORE FUNCTION NUMBER __LDRV: MOV AL,DL ;GET FUNCTION NUMBER CMP AL,=2 ;FUNCTION NUMBER=2? JZ LSTOUT ;IF SO, CONTINUE CMP AL,=7 ;FUNCTION NUMBER=7? JZ LSTWSR ;IF SO, CONTINUE RET ;ELSE, DONE ; LSTWSR: MOV CL,XONFF ;GET FORM FEED CHARACTER MOV DL,=2 ;SET FUNCTION NUMBER=2 ; LSTOUT: CALL __SST ;GET SERIAL STATUS TEST AL,AL ;CHARACTER AVAILABLE? JZ __OUT ;IF NOT, CONTINUE CALL __SIN ;ELSE, GET SERIAL INPUT AND AL,=0x7F ;STRIP SIGN BIT CMP AL,=ADC3 ;CHARACTER=DC3 (XOFF)? JNZ LSTOUT ;IF NOT, WAIT __WAIT: CALL __SIN ;GET SERIAL INPUT AND AL,=0x7F ;STRIP SIGN BIT CMP AL,=ADC1 ;CHARACTER=DC1 (XON)? JNZ __WAIT ;IF NOT, WAIT __OUT: JMP SERIAL# ;OUTPUT CHARACTER __SST: PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER PUSH DX ;SAVE FUNCTION NUMBER MOV DL,=0 ;SET FUNCTION NUMBER=0 CALL SERIAL# ;GET SERIAL STATUS JMPS __SSIC ;CONTINUE __SIN: PUSH CX ;SAVE CHANNEL NUMBER/CHARACTER PUSH DX ;SAVE FUNCTION NUMBER MOV DL,=1 ;SET FUNCTION NUMBER=1 CALL SERIAL# ;GET SERIAL INPUT __SSIC: POP DX ;RESTORE FUNCTION NUMBER POP CX ;RESTORE CHANNEL NUMBER/CHARACTER RET ;DONE ; END