home *** CD-ROM | disk | FTP | other *** search
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;
- ; DIABLO DRIVER
- ;
- ; This driver was donated by RICH LERSETH of
- ; LEPAC SERVICES
- ; 8245 MEDITERRANEAN WAY
- ; Sacramento,Ca
- ; 95826
- ; 916-381-1717 August 1980
- ;
- ; This DIABLO driver is a 1200 baud buffered package
- ; that allows the host to spool with minimum quequing.
- ; It uses half the diablo buffer (79 bytes) and an
- ; internal buffer (79 bytes) to guarentee no over run.
- ; The driver accepts data from the host and puts it into
- ; its internal buffer. It then checks to see if the diablo
- ; is ready to accept data from the driver's buffer. If not
- ; then it immediately returns to the host. Otherwise, it
- ; sends one byte to the diablo then returns to the host.
- ; When the driver senses that its internal buffer is full
- ; it will take time out and wait until the diablo is ready
- ; to accept the remainder of the internal buffer (wait for
- ; an ACK to come back) It will then dump the remainder of
- ; the buffer and send a ETX).
- ; At any time the driver encounters a CR or LF it will
- ; also dump the buffer and send a ETX.
- ;
- ; DIABLO PRINTER PARAMETERS
- ; (set up for SD SYSTEMS 100)
- ORG 0DF00H
- ;
- SIPORT EQU 7DH
- SOPORT EQU 7DH
- DIPORT EQU 7CH
- DOPORT EQU 7CH
- SIMASK EQU 01H
- SOMASK EQU 02H
- BUFFSZ EQU 79
- ;
- ;
- ; DIABLO LIST STATUS
- ;
- LISTST: CALL WAITST
- JR Z,LB1 ;READY
- CALL INSTAT
- JR Z,LB2 ;NOT READY
- CALL INPUT
- CP 6
- JR NZ,LB2 ;NOT READY
- XOR A
- LD (WFLAG),A
- ;
- ; READY
- ;
- LB1: LD A,-1
- RET
- ;
- ; NOT READY
- ;
- LB2: XOR A
- RET
- ;
- ; LIST DEVICE
- ;
- LIST:
- ;
- ; INPUT A BYTE INTO THE BUFFER, CHECK IF ESC OR ETX
- ; SEQUENCE IS SENT
- ;
- CALL LISTST ;CLEAR WAIT STATE IF TIME OUT.
- LD A,C
- LD HL,(NBYTES)
- INC HL
- LD (NBYTES),HL
- EX DE,HL
- LD HL,BLOCK-1
- ADD HL,DE
- LD (HL),A
- LD A,(EFLAG2) ;END OF 3 BYTE ESC SEQ?
- OR A
- JR NZ,IB1
- LD A,(EFLAG1) ;SECOND BYTE OF ESC SEQ?
- OR A
- JR NZ,IB3
- LD A,27 ;START OF ESC SEQ?
- CP (HL)
- JR Z,IB4
- LD A,3 ;START OF ETX SEQ?
- CP (HL)
- JR NZ,IB6
- DEC DE
- EX DE,HL
- LD (NBYTES),HL
- JR OUTBLK
- ;
- IB3: LD A,9 ;CK FOR THE FOUR 3-B ESC
- CP (HL)
- JR Z,IB5
- LD A,11
- CP (HL)
- JR Z,IB5
- LD A,30
- CP (HL)
- JR Z,IB5
- LD A,31
- CP (HL)
- JR Z,IB5
- JR IB1
- ;
- IB4: LD A,-1
- LD (EFLAG1),A
- RET
- ;
- IB5: LD A,-1
- LD (EFLAG2),A
- RET
- ;
- IB1: XOR A
- LD (EFLAG1),A
- LD (EFLAG2),A
- ;
- IB6: LD A,0AH ;CK LN FD
- CP (HL)
- JR NZ,IB6A
- LD (LFCK),A
- JR OUTBLK
- ;
- IB6A: LD A,0DH
- CP (HL)
- JR NZ,IB6B
- LD A,(LFCK) ;CK RETURN IF NOT LINE FEED BEFORE
- OR A
- JR Z,IB6C
- XOR A
- LD (LFCK),A
- JR OUTBLK
- ;
- IB6B: XOR A
- LD (LFCK),A
- IB6C: LD A,BUFFSZ-3
- CP E
- JR C,OUTBLK
- LD A,(WFLAG)
- OR A
- RET NZ
- CALL OUSTAT
- RET Z
- LD HL,(JBYTES)
- INC HL
- LD (JBYTES),HL
- EX DE,HL
- LD HL,BLOCK-1
- ADD HL,DE
- LD C,(HL)
- CALL OUTPUT
- RET
- ;
- ; OUTPUT THE BLOCK
- ;
- OUTBLK: LD A,(WFLAG)
- OR A
- JR Z,OB1
- CALL WAIT
- OB1: LD HL,(JBYTES)
- EX DE,HL
- LD HL,(NBYTES) ;SETUP TO DUMP THE BLOCK
- XOR A
- SBC HL,DE
- LD A,L
- OR H
- JR Z,DONE
- PUSH HL
- LD HL,BLOCK
- ADD HL,DE
- POP DE
- ;
- LOOP1: CALL OUSTAT
- JR Z,LOOP1
- LD C,(HL)
- CALL OUTPUT
- INC HL
- DEC DE
- LD A,D
- OR E
- JR NZ,LOOP1
- ;
- DONE: LD HL,0
- LD (NBYTES),HL
- LD (JBYTES),HL
- DEC HL
- LD (WTIME),HL
- LD A,-1
- LD (WFLAG),A
- ;
- ; SEND OUT THE END OF TEXT CODE
- ;
- LOOPC: CALL INPUT
- CALL OUSTAT
- JR Z,LOOPC
- LD C,3
- CALL OUTPUT
- RET
- ;
- ; WAIT STATUS CHECK
- ;
- WAITST: LD A,(WFLAG)
- OR A
- RET Z
- PUSH HL
- LD HL,(WTIME)
- LD A,L
- OR H
- JR Z,WS1
- DEC HL
- LD (WTIME),HL
- XOR A
- INC A
- RET
- WS1: LD (WFLAG),A
- RET
- ;
- ; WAIT UNTIL ACKNOWLEDGE COMES BACK
- ;
- WAIT: LD HL,0
- LOOP2: DEC HL
- LD A,L
- OR H
- JR Z,W1
- CALL INSTAT
- JR Z,LOOP2
- CALL INPUT
- CP 6
- JR NZ,LOOP2
- W1: XOR A
- LD (WFLAG),A
- RET
- ;
- ; CHECK FOR STATUS OF OUTPUT
- ;
- ;
- OUSTAT: IN A,(SOPORT)
- NOP ;RES FOR COMPLEMENT
- AND SOMASK
- RET
- ;
- ; OUTPUT A CHARACTER
- ;
- OUTPUT: LD A,C
- OUT (DOPORT),A
- RET
- ;
- ; CHECK FOR STATUS OF INPUT
- ;
- INSTAT: IN A,(SIPORT)
- NOP ;RES FOR COMPLEMENT
- AND SIMASK
- RET
- ;
- ; INPUT A CHAR FROM THE PRINTER
- ;
- INPUT: IN A,(DIPORT)
- AND 127
- RET
- ;
- ; DIABLO PRINTER PARAMETERS
- ;
- NBYTES: DEFW 0000
- LFCK: DEFB 00
- EFLAG1: DEFB 00
- EFLAG2: DEFB 00
- WFLAG: DEFB 00
- WTIME: DEFW 0000
- JBYTES: DEFW 0000
- ;
- ; PARAMETER AREA EXTERNAL TO CPM BIOS AREA
- ;
- ; BUFFER AREA FOR DIABLO PRINTER
- ;
- BLOCK: DS 80
- END