Compucolor.org – Virtual Media

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