|
DataMuseum.dkPresents historical artifacts from the history of: Zilog MCZ Floppy Disks |
This is an automatic "excavation" of a thematic subset of
Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 4575 (0x11df) Types: TextFile Names: »PRINTER.S«
└─⟦efdad4bc9⟧ Bits:30006812 8" ZilogMCZ floppy NThun_0014 (OPERATIVSYSTEM DRIVE.0) └─ ⟦this⟧ »PRINTER.S«
*H RIO LINE PRINTER DRIVER (CENTRONICS) ; ; CENTRONICS LINE PRINTER DRIVER ; THIS ROUTINE DRIVES THE CENTRONICS ; LINE PRINTER. IT IS CALLED ; WITH A PARAMETER VECTOR POINTED ; TO BY IY. ; ; ; THIS DRIVER SUPPORTS TABS ; AND TRUNCATES LINES LONGER THAN ; THE MAXIMUN LENGTH DETERMINED ; BY (LINLEN) ; GLOBAL CNTLP EXTERNAL PRTCNT SYSTEM EXTERNAL LINVAR JR CNTLP DEFM 'DATE:790201.1' ; ; CNTLP: LD A,(IY+1) ;INTERPRET REQUEST CP ASSIGN+2 JP C,LPINIT ;INITIALIZE OR ASSIGN CP OPEN ;OPEN - JUST RETURN JP Z,OPCOMP CP CLOSE ;CLOSE - JUST RETURN JP Z,OPCOMP CP WASCII ;WRITE ASCII - PRINT JR Z,CNT1 CP WBIN ;WRITE BINARY - PRINT JR Z,CNT1 LD (IY+10),BADOP ;ANYTHING ELSE - BAD REQUEST RET CNT1: LD IX,CURSOR ;INITIALIZE IX CALL WAITB LD L,(IY+2); GET DATA ADDRESS LD H,(IY+3); LD B,(IY+5); MAXIMUM LINE LENGTH LD C,(IY+4); LD A,B OR C JP Z,OPCOMP OUTLP: LD A,ASCICR ;TERMINATOR CHARACTER CP (HL); JR NC,ENDL; LD (PCHAR),A ;PRINTABLE CHARACTER OUTPUT INC (IX) CALL OUTI; JR NZ,OUTLP XOR A LD (PCHAR),A ;SET PRINT CHAR FLAG BACK TO 0 JP OPCOMP ;DONE ENDL: JR NZ,ENDL1 ;NOT A CR CALL OUTI ;OUTPUT CR EX AF,AF' ;SAVE FLAGS LD A,(PCHAR) ;HAS A PRINTABLE CHAR BEEN OUTPUT AND A JR NZ,NOLF ;YES - DONT OUTPUT LF CALL WAITB ;WAIT FOR BUSY FLAG PUSH BC LD BC,PRTCNT+1 ;GET PORT VALUE LD A,ASCILF OUT (C),A POP BC CALL STROBE ;STROBE LF NOLF: XOR A LD (IX),A ;RESET CURSOR POSITION LD (PCHAR),A ;RESET PR CHAR FLAG EX AF,AF' ;RESTORE FLAG JR Z,OPCOMP ;BC=0 RETURN LD A,(IY+1) ;WAS REQUEST ASCII OR BIN CP WASCII JP Z,OPCOMP ;ASCII - RETURN JP NOCR ;BINARY - CONTINUE ENDL1: ; ***** TAB FEATURE ******** LD A,TAB ;CHECK FOR TAB CP (HL) JR NZ,T3 ;NO - OUTPUT CHAR DEC BC ;DECREMENT ONCE FOR TAB ;DO THE TABBING EXX ;SAVE WORK REGISTERS LD DE,(CURSOR) LD HL,DRUMLBD ;GET DRUM LOWER BOUND ADD HL,DE ;-> CURRENT POSITION IN DRUM LD D,H LD E,L T1: CALL WAITB LD A,20H PUSH BC LD BC,PRTCNT+1 ;GET PORT ADDRESS OUT (C),A ;OUTPUT A SPACE POP BC CALL STROBE INC (IX) ;MOVE THE CURSOR LD A,(LINLEN) ;IS LINE TOO LONG SUB (IX) JR C,T15 INC HL LD A,(HL) ;DRUM CHARACTER CP 0 ;IS DRUM CHARACTER A ZERO? JR Z,T1 ;YES =>LOOP T15: ;NO => TAB CHARACTER ;EXIT T1 LOOP EXX LD A,B OR C JR Z,OPCOMP ;RET IF END OF COUNT INC HL EX AF,AF' JP OUTLP T3: ;****** END OF TAB FEATURE CALL OUTI ;OUTPUT CHAR JP Z,OPCOMP ;RETURN IF BC=0; NOCR: CALL WAITB ;BINARY - CONTINUE LD A,ASCICR; JP OUTLP ;CONTINUE ; OPCOMP: LD (IY+10),80H XOR A RET OUTI: LD A,(HL) BIT 4,(IY+1) ;ASCII OR BINARY WRITE? JR NZ,OUTA ;ASCII - DONT CHECK FOR EOF CP EOF RET Z OUTA: LD D,A ;SAVE A LD A,(LINLEN) ;MAX LINE LENGTH SUB (IX) LD A,D JR NC,OUTB ;LENGTH OK CP ASCICR ;TOO LONG - OUTPUT CR JR NZ,OUTC OUTB: PUSH BC LD BC,PRTCNT+1 OUT (C),A POP BC CALL STROBE ;STROBE PRINTER OUTC: INC HL DEC BC LD A,B OR C RET ; LPINIT:; INITIALIZE PIO FOR LP CONTROL LD BC,PRTCNT+3 LD A,0FH; SET CHANNEL B TO DATA OUTPUT OUT (C),A; LD A,07; SET TO NO INTERRUPT OUT (C),A; DEC C OUT (C),A; LD A,0CFH; SET CHANNEL A TO CONTROL OUT (C),A; LD A,3CH; SET DIRECTION OUT (C),A; DEC C DEC C LD A,1 OUT (C),A; SET 1,A ;INPUT PRIME - NOT COMPAT WITH TALLY OUT (C),A LD IX,CURSOR ;INITIALIZE XOR A LD (IX),A ;TABS LD (PCHAR),A ;NO PRINTABLE CHARACTERS PUSH IY ;SAVE RQ VECTOR PTR LD IY,DRMVEC ;PREPARE TO READ STATUS CALL SYSTEM ;FROM CONIN LD A,(IY+10) ;RETURN SAME COMPLETION POP IY ; LD (IY+10),A ; RET ;OPERATION COMPLETE WAITB:; WAIT FOR BUSY FLAG PUSH BC LD BC,PRTCNT IN A,(C); TEST BUSY FLAG POP BC BIT BUSY,A; JR NZ,WAITB; RET; STROBE: PUSH AF; LD A,2 ;DROP STROBE LINE PUSH BC LD BC,PRTCNT OUT (C),A; LD A,3 OUT (C),A; POP BC POP AF; RET; DRMVEC: DEFB 1 ;CONIN DEFB 40H;READ STATUS REQUEST DEFW DRUM DEFW 139 DEFW 0 DEFW 0 DEFB 0 DEFW 0 ASCICR EQU 0DH ASCILF EQU 0AH BUSY EQU 4 STRB EQU 0 BADOP EQU 0C1H WASCII EQU 10H WBIN EQU 0EH OPEN EQU 04H CLOSE EQU 06H EOF EQU 0FFH ASSIGN EQU 02H TAB EQU 09H CURSOR DEFW 0 LINWID DEFW LINVAR ;LINE LENGTH FROM EQUATES LINLEN EQU $-2 ;FILE TRANSFORMED TO BYTE PCHAR DEFB 0 DRUMLBD EQU $+5 DRUM DEFS 139 END ; ; ;