Listing of file='NEWPAG.MAC;07' on disk='vmedia/printer_pkg_src-sideB-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; NEWPAG - START A FRESH PAGE ON THE PRINTER ; HEADER - PRINT HEADER MESSAGE ONLY ; ; VALUES ON ENTRY ARE IRRELEVANT AND NOTHING IS RETURNED ; ; THE VARIABLES PAGCNT AND HDRMSG ARE AVAILABLE TO ; EXTERNAL ROUTINES. ; ; DESTROYS ALL REGISTERS. ; ; REQD ROUTINES: ; EXTRN OSTR,CO,SAVE EXTRN DECOUT EXTRN PRTCHR EXTRN SEND ; ; PARAMETERS IN MAIN PROGRAM: ; EXTRN LINLEN,PAGLEN,FFFLAG,SKPLEN,SNGLE,HDRFLG ; ; EQUATES ; TAB EQU 9 LF EQU 10 FF EQU 12 CR EQU 13 SPACE EQU 32 DEL EQU 127 ENTRY NEWPAG,HEADER PUBLIC PAGCNT,HDRMSG NEWPAG: CALL FFEED ;DO A FORM FEED HEADER: LDA HDRFLG ;SEE IF HEADER REQUIRED ORA A RZ ;RETURN IF NOT LXI H,HDRMSG ;PRINT HEADER MESSAGE CALL PRTLIN LXI H,PAGCNT ;INCREMENT PAGE COUNT INR M MOV A,M LXI H,PAGENO CALL DECOUT LXI H,PAGMSG ; AND PRINT PAGE NUMBER CALL PRTLIN RET PAGCNT: DB 0 ;CURRENT PAGE COUNT ; ; HEADER MESSAGE (132 BYTES) - CAN BE ALTERED EXTERNALLY ; HDRMSG: DB TAB,'COMPUCOLOR II PRINT ROUTINE ',TAB,TAB,0 DS 100 ;ALLOW FOR 132 CHR LINES PAGMSG: DB 'PAGE ' PAGENO: DB '000',CR,LF,LF,0 ;.............................................................. ; ; FFEED - PERFORM A FORM-FEED ON PRINTER ; ; VALUES ON ENTRY ARE IRRELEVANT AND NOTHING IS RETURNED ; ; DESTROYS ALL REGISTERS ; ; REQD ROUTINES: ; EXTRN WAIT ; ; PARAMETERS: ; EXTRN LINCNT,DELTIM KBCHA EQU 81FEH READY EQU 81FFH ENTRY FFEED FFEED: LDA FFFLAG ;CHECK IF FORM FEEDS ARE OK ORA A JNZ OKFF LDA SKPLEN ;NOT OK, GET BOTTOM MARGIN MOV B,A LDA PAGLEN ADD B ;CALCULATE TOTAL PAGE LENGTH MOV B,A LXI H,LINCNT FFD10: MOV A,B ;SEE IF END OF PAGE CMP M JZ TOF JM TOF MVI A,LF ;FORM FEED BY LINE FEEDS CALL SEND LDA DELTIM ;WAIT A WHILE ADD A ;MULTIPLY DELAY TIME BY 2 CALL WAIT INR M ;ONE MORE LINE JMP FFD10 ;REPEAT OKFF: LDA SKPLEN ;DON'T FORM FEED IF PRINTER ORA A ; DOES IT AT END OF PAGE JNZ SPIT LDA LINCNT LXI H,PAGLEN CMP M JP TOF SPIT: MVI A,FF ;OK TO SEND FORM FEEDS CALL SEND LDA DELTIM ;WAIT A WHILE FOR PAPER TO MOVE ADD A ; (MULTIPLY DELAY TIME BY 10) MOV B,A ADD A ADD A ADD B CALL WAIT TOF: LXI H,LINCNT MVI M,0 ;NOW AT TOP OF PAGE LDA SNGLE ;SEE IF SINGLE PAGES ORA A RZ ;NO, CONTINUE PRINTING LXI H,NPMSG ;YES, WAIT FOR USER TO CALL OSTR ; LOAD PAPER, XRA A STA READY STA KBCHA WAITLP: LDA KBCHA CPI CR ; AND HIT RETURN JNZ WAITLP CALL CO RET NPMSG: DB 'LOAD PAPER, HIT <RETURN>',239 ;.............................................................. ; ; PRTLIN - PRINT A LINE OF DATA FROM MEMORY ; ; VALUES ON ENTRY: ; HL => LINE BUFFER IN MEMORY (LAST CHR MUST BE 0) ; ; DESTROYS: ; A, HL ; ENTRY PRTLIN PRTLIN: MOV A,M ORA A RZ CALL PRTCHR INX H JMP PRTLIN END