Listing of file='PRINT.MAC;01' on disk='vmedia/taylor_3-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SMART PRINTER DRIVER ; V4.0 12/80 ; ; COPYRIGHT 1980 BY TREVOR TAYLOR ; TITLE PRINT ; ; REQD ROUTINES: ; EXTRN CPYRGT EXTRN JMPVEC,CO,OSTR EXTRN FILVEC,FCS,GTBYT EXTRN RDFN EXTRN SETFIL EXTRN PRTCHR,PRTLIN EXTRN GENHDR EXTRN FFEED,HEADER ; ; EXTERNAL VARIABLES: ; EXTRN CHRCNT,LINCNT,PAGCNT,HDRMSG ; ; SYSTEM EQUATES ; KBDFL EQU 81DFH ;HOLDS NUMBER OF JUMP VECTOR BAUD EQU 81E2H ;CURRENT BAUD RATE READY EQU 81FFH ;KEYBOARD STATUS KBCHA EQU 81FEH ;KEYBOARD CHAR ; ; SPECIAL CONTROL CHARACTERS ; TAB EQU 9 LF EQU 10 FF EQU 12 CR EQU 13 ESC EQU 27 FDRV EQU 29 ;.............................................................. ; ; USER DEFINED PARAMETERS ; PUBLIC RATE,LINLEN,PAGLEN,FFFLAG,SKPLEN,SNGLE PUBLIC HDRFLG,DELTIM,FCSSP,CPRFLG RATE: DB 88H ;BAUD RATE (88H=1200) LINLEN: DB 80 ;LINE LENGTH PAGLEN: DB 60 ;PAGE LENGTH (NO. OF LINES ; ACTUALLY PRINTED ON A PAGE) FFFLAG: DB 0FFH ;FORM FEED FLAG: ; 0 = PRINTER CANNOT DO FF'S ; NOT ZERO = PRINTER CAN FORM FEED SKPLEN: DB 0 ;NUMBER OF LINES TO SKIP FOR ; PAGE PERFORATIONS: ; 0 = PRINTER DOES IT ; N = NUMBER OF LINE-FEEDS ; ;*** NOTE: IF SKPLEN <> 0, THEN ; PAGLEN + SKPLEN = ACTUAL PHYSICAL PAGE LENGTH ; SNGLE: DB 0 ;SINGLE PAGE FLAG (I.E. PAPER IS NOT ; CONTINUOUS): ; 0 = CONTINUOUS FORMS ; NOT ZERO = SINGLE SHEETS HDRFLG: DB 0FFH ;HEADER FLAG: ; 0 = NO HEADER ; NOT ZERO = PRINT PAGE HEADINGS DFAULT: DB 'SRC' ;DEFAULT FILE TYPE DELTIM: DB 1 ;DELAY TIME FOR MECHANICAL PRINTER ; MOTIONS: ; CR = 4*DELTIM ; LF = DELTIM (OR 2*DELTIM IN FF'S) ; FF = 20*DELTIM ; ;*** NOTE: DO NOT SET THIS TO ZERO - ZERO CAUSES ENORMOUS ; DELAYS. THE MAXIMUM VALUE EVER USED SHOULD BE 12. ; FCSSP: DS 2 ;FCS STACK POINTER ; ;............................................................. ; ; START OF PROGRAM ; NOTE THAT THE FIRST "INSTRUCTION" IS REALLY A FLAG ; PRINT: CPRFLG: XRA A ;COPYRIGHT FLAG: ; 0 = NO CHECK ; NOT ZERO = CHECK IT DI LXI H,0 ;SAVE FCS STACK POINTER DAD SP SHLD FCSSP LXI SP,STACK ;SETUP RUNOFF STACK CALL JMPVEC ;SETUP REQUIRED JUMP VECTORS CALL FILVEC MVI A,12 ;SET KEYBOARD INPUT TO DUMP STA KBDFL LDA RATE ;FIX BAUD RATE OUT 5 STA BAUD EI XRA A STA CHRCNT ;START AT COLUMN ZERO, STA LINCNT ; LINE ZERO AND STA PAGCNT ; PAGE ZERO LXI H,IDMSG ;PRINT STARTUP MSG CALL OSTR LXI H,IBUF CALL CPYRGT ;PRINT/CHECK COPYRIGHT NOTICE FILE: LXI B,DFAULT LXI D,FPB LXI H,IBUF CALL RDFN ;READ FILE NAME JC FILE LXI H,FPB LXI D,IBUF LXI B,1024 ;BUFFER SIZE XRA A CALL SETFIL ;OPEN FILE JC FILE LDA HDRFLG ;SKIP GENERATING HEADER IF IT ORA A ; IS NOT REQUIRED JZ LOOP LDA FPB+FDRV ;GET DRIVE NUMBER AND LXI B,IBUF LXI D,FPB ; FPB (FOR FILE NAME) LXI H,HDRMSG ; AND POINT TO HEADER MSG CALL GENHDR ;MAKE MESSAGE CALL HEADER ;PRINT HEADER TO START WITH LOOP: LXI H,FPB ;POINT AT FILE PARAMETER BLOCK CALL GTBYT ;GET NEXT BYTE JC EOFTST ;<C>=ERROR OR END OF FILE CALL PRTCHR ;PRINT CHAR ABTEST: LDA READY ;SEE IF BREAK CPI 50H ; JZ ABTEST ;HANG UNTIL ANOTHER IS STRUCK CPI 80H JNZ LOOP XRA A STA READY LDA KBCHA ;READ NEXT CHARACTER CPI LF ;SEE IF LF JZ EXIT ;EXIT IF LF CPI ESC JZ EXIT ; OR IF ESCAPE JMP LOOP EOFTST: JZ EXIT ERROR: LXI H,ERRMSG ;PRINT ERROR MESSAGE CALL OSTR EXIT: XRA A STA SNGLE CALL FFEED ;FINISH WITH A FORM FEED MVI A,13 ;RESTORE INPUT TO FCS STA KBDFL MVI B,0 ;SETUP NO ERROR LHLD FCSSP ;RESTORE FCS STACK SPHL RET ;AND EXIT TO FCS ;.............................................................. ; ; MESSAGES IDMSG: DB 29,27,11,15,6,1,CR,LF,' PRINT ' DB 6,7,'V4.0 ',239 ERRMSG: DB 17,'*** HARDWARE ERROR ***',13,10,239 ; DATA AREAS DB 0FFH IBUF: DS 80H ;MULTI-PURPOSE BUFFER DB 0FFH DS 380H DS 300 ;STACK AREA STACK: FPB: DS 38 ;INPUT FPB END PRINT