***************************************** * * * PRINTER PROGRAM FOR CROWE PRN FILES * * EXPANDS TAB WITH NO COL RESET ON LF * * PRN.COM by Dennis E Baker 8/8/82 * * * ***************************************** 0005 = CPMENT EQU 5 ;CP/M ENTRY POINT 000B = KBSTAT EQU 11 ;KEYBOARD STATUS 000F = OPNFIL EQU 15 ;OPEN FILE FUNCTION# 0005 = PRNCHR EQU 5 ;PRINTER FUNCTION 0014 = RDSEQ EQU 20 ;SEQUENTIAL READ FUNCTION 001A = SETDMA EQU 26 ;SET ADDRESS FOR READ 00FF = T EQU 255 ;TERMINATOR 0100 ORG 100H 0100 210503 START: LXI H,FCB+12 ;INIT FILE CONTROL BLOCK 0103 061C97 MVI B,28! SUB A 0106 7723 CLR1: MOV M,A! INX H ;CLEAR REMAINDER 0108 05C20601 DCR B! JNZ CLR1 010C CD4D02 CALL CLRBUF ;RESET BUFFER TO SPACES 010F 3E09 MVI A,9 0111 326D02 STA IGNOR 0114 3A8300FE3A LDA 83H! CPI ':' ;TEST DRIVE SPEC 0119 118200C231 LXI D,82H! JNZ NAME 011F 3A8200E65F LDA 82H! ANI 5FH ;GET DRIVE SPEC UPPER CASE 0124 FE41F8 CPI 'A'! RM ;A-D OK 0127 FE45F0 CPI 'E'! RP 012A D64032F902 SUI 64! STA FCB ;SET DRIVE 012F 1313 INX D! INX D 0131 060821FA02NAME: MVI B,8! LXI H,FCB+1 0136 1AB7 NMLP: LDAX D! ORA A 0138 CA4201 JZ OPEN 013B 77 MOV M,A 013C 1323 INX D! INX H 013E 05C23601 DCR B! JNZ NMLP 0142 11F902 OPEN: LXI D,FCB 0145 0E0F MVI C,OPNFIL 0147 CD0500 CALL CPMENT ;OPEN THE FILE 014A FEFFC8 CPI T! RZ 014D 3A0803 LDA FCB+15 ;NO. OF BLOCKS 0150 B7C8 ORA A! RZ 0152 326B02 STA SECT ;SAVE 0155 3E40 PLOOP: MVI A,64 ;64*128 = 8K BUFFER 0157 326C02 STA CNTR 015A 3A6B02 LDA SECT 015D FE09F26C01 CPI 9! JP OVER 0162 A717 ANA A! RAL ;X8 0164 1717 RAL! RAL 0166 326C02 STA CNTR 0169 C37701 JMP PRINT 016C D608326B02OVER: SUI 8! STA SECT ;ADJUST 0171 CD7701 CALL PRINT 0174 C35501 JMP PLOOP 0177 212103 PRINT: LXI H,BUFFER ;READ & PRINT BUFFER 017A 226F02 SHLD PNTR 017D 2A6F02EB RDLOOP: LHLD PNTR! XCHG ;GET 128 BLOCK 0181 21800019 LXI H,128! DAD D 0185 226F02 SHLD PNTR 0188 0E1A MVI C,SETDMA ;SET ADDRESS 018A CD0500 CALL CPMENT 018D 11F902 LXI D,FCB ;NOW READ SEQUENTIAL 0190 0E14 MVI C,RDSEQ 0192 CD0500 CALL CPMENT 0195 216C0235 LXI H,CNTR! DCR M ;CNTR-1 0199 C27D01 JNZ RDLOOP 019C 212103 LXI H,BUFFER ;SET FOR PRINTOUT 019F 226F02 SHLD PNTR 01A2 210020 LXI H,8192 ;BUFFER LENGTH 01A5 227102 PRLOOP: SHLD BUFCNT ;SET COUNTER 01A8 7CB5C8 MOV A,H! ORA L! RZ 01AB 2A6F02 LHLD PNTR 01AE 7E23 MOV A,M! INX H 01B0 226F02 SHLD PNTR 01B3 FE0DCAED01 CPI 13! JZ CR ;CAR RET 01B8 FE09CAE001 CPI 9! JZ TAB ;TAB 01BD FE0ACAF401 CPI 10! JZ LF ;LINE FEED 01C2 FE0CCAD901 CPI 12! JZ CHRBAK ;FORM FEED 01C7 FE1ACAFA01 CPI 26! JZ ENDOUT ;END ON 26 01CC 47 MOV B,A ;SAVE 01CD 216E02 LXI H,TABCNT 01D0 5E34 MOV E,M! INR M 01D2 1600 MVI D,0 01D4 217502 LXI H,PBUFER 01D7 1970 DAD D! MOV M,B ;PLACE CHARACTER 01D9 2A71022B CHRBAK: LHLD BUFCNT! DCX H ;CNTR-1 01DD C3A501 JMP PRLOOP 01E0 216E0234 TAB: LXI H,TABCNT! INR M 01E4 7EE607 MOV A,M! ANI 7 ;TEST TAB END 01E7 C2E001 JNZ TAB 01EA C3D901 JMP CHRBAK 01ED 97326E02 CR: SUB A! STA TABCNT ;CARR RETURN 01F1 C3D901 JMP CHRBAK 01F4 CD0002 LF: CALL PRNTBF ;LINE FEED 01F7 C3D901 JMP CHRBAK 01FA CD0002 ENDOUT: CALL PRNTBF 01FD C30000 JMP 0 0200 3A6D02 PRNTBF: LDA IGNOR 0203 B7 ORA A 0204 CA0C02 JZ CONT 0207 3D DCR A 0208 326D02 STA IGNOR 020B C9 RET 020C 21F702 CONT: LXI H,PBUFER+130 ;TERM & PRINT BUFFER 020F 0683 MVI B,131 0211 7E2B PRNT1: MOV A,M! DCX H 0213 FE20C21C02 CPI ' '! JNZ PRNT2 0218 05C21102 DCR B! JNZ PRNT1 021C 232336FF PRNT2: INX H! INX H! MVI M,T 0220 3A7B02 LDA PBUFER+6 0223 FE5ACC5E02 CPI 'Z'! CZ CRLF ;EXTRA LINE BEFORE CROWE HEADING 0228 217502 LXI H,PBUFER 022B 227302 SHLD PRPNTR 022E 2A7302 LINLOP: LHLD PRPNTR ;CHAR LOOP 0231 7E23 MOV A,M! INX H 0233 227302 SHLD PRPNTR 0236 FEFFCA4102 CPI T! JZ ENDLIN 023B CD6502 CALL CHROUT 023E C32E02 JMP LINLOP 0241 CD5E02 ENDLIN: CALL CRLF 0244 0E0B MVI C,KBSTAT ;CHECK KEYBOARD 0246 CD0500 CALL CPMENT 0249 3DCA0000 DCR A! JZ 0 ;EXIT ON ANY KEY 024D 21F802 CLRBUF: LXI H,PBUFER+131 ;CLEAR BUFFER 0250 36FF2B MVI M,T! DCX H 0253 06833E20 MVI B,131! MVI A,' ' 0257 772B CLR2: MOV M,A! DCX H 0259 05C25702 DCR B! JNZ CLR2 025D C9 RET 025E 3E0D CRLF: MVI A,13 ;CARR RET 0260 CD6502 CALL CHROUT 0263 3E0A MVI A,10 0265 5F CHROUT: MOV E,A ;CHARACTER OUT 0266 0E05 MVI C,PRNCHR 0268 C30500 JMP CPMENT 026B 00 SECT: DB 0 ;NUMBER OF SECTORS 026C 00 CNTR: DB 0 ;SECT COUNTER 026D 00 IGNOR: DB 0 ;IGNOR COUNTER 026E 00 TABCNT: DB 0 ;COL COUNTER 026F 0000 PNTR: DW 0 ;BUFF POINTER 0271 0000 BUFCNT: DW 0 ;BUFF CHAR COUNT 0273 0000 PRPNTR: DW 0 ;PRINTER COL POINTER 0275 PBUFER: DS 132 ;PRINTER BUFFER 02F9 0020202020FCB: DB 0,' PRN' ;FILE CONTROL BLOCK 0305 DS 28 0321 00 BUFFER: DB 0 ;START OF 4096 CHAR BUFF 0322 END