LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 1 1 .TITLE LPLCC.MAC V03.02 2 .IDENT /LP$V01/ 3 4 ; RT-11 LINE PRINTER HANDLER 5 ; 6 ; THIS HANDLER IS BASED LOOSELY ON DEC'S LP HANDLER WHICH WAS 7 ; COPYRIGHT (C) 1978 BY 8 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754 9 ; 10 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A SINGLE 11 ; COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION OF THE ABOVE 12 ; COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE 13 ; PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON 14 ; SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND 15 ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. 16 ; 17 ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND 18 ; SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. 19 ; 20 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE 21 ; ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. 22 ; 23 ; THESE MODIFICATIONS HAVE BEEN MADE: 24 ; 25 ; 1) THE HANDLER RECOGNIZES TWO DEVICES, LP0: (DEFAULT) AND LP1:. 26 ; LP0: (SAME AS LP:) IS THE NORMAL RT-11 DEC TYPE PRINTER. LP1: RECOGNIZES 27 ; LOGICAL CARRIAGE CONTROL RATHER THEN EXPLICIT CARRIAGE RETURN, LINE FEED 28 ; AND FORM FEED CHARACTERS. ALTHOUGH BOTH PRINTERS ARE ACTUALLY THE SAME 29 ; PHYSICAL DEVICE, THE HANDLER TREATS THE OUTPUT TO THE TWO DIFFERENTLY. 30 ; 31 ; LOGICAL CARRIAGE CONTROL CHARACTERS RECOGNIZED BY LP1: ARE 32 ; + OVERPRINT (CR ONLY) 33 ; BLANK SINGLE SPACE (CR, LF) 34 ; 0 DOUBLE SPACE (CR, LF, LF) 35 ; - TRIPLE SPACE (CR, LF, LF, LF) 36 ; 1 TOP OF FORM (FORM FEED) 37 ; ALL ELSE SINGLE SPACE (CR, LF) - CHARACTER IS PRINTED 38 ; 39 ; 2) THE CODING WAS ENTIRELY RESTRUCTERED TO GIVE IT AN IN-LINE TOP-DOWN 40 ; STRUCTURE. ALTHOUGH THIS ADDS A FEW APARENTLY REDUNDANT INSTRUCTIONS, THE 41 ; HANDLER IS NOW MUCH EASIER TO UNDERSTAND. 42 ; 43 ; 3) SOME MESSING WITH INTERRUPT PRIORITIES ON COMPLETION OF DATA 44 ; TRANSFER WAS NECESSARY TO PREVENT SYSTEM CRASHES ON LSI-11 BASED SYSTEMS 45 ; INTERFACED VIA A DLV11 ASYNCHRONOUS INTERFACE. SEE DEC MICRO-NOTE NO.11 46 ; FOR REFERENCE. 47 ; 48 ; 4) ASSEMBLE WITH SYCND AND LINK AS LP.SYS. IT WORKS! IT WORKS! 49 ; 50 ; THIS WORK WAS SUPPORTED IN PART BY NASA CONTRACTS NAS5-24295, NAS5-24296, 51 ; NAS5-25002. 52 ; 53 ; 9-NOV-78 CHARLES B. MORNINGSTAR 54 ; SPACE PHYSICS RESEARCH LABORATORY 55 ; UNIVERSITY OF MICHIGAN 56 ; ANN ARBOR, MICHIGAN 48109 LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 2 1 2 .MCALL .DRBEG,.FORK,.DREND,.DRAST,.DRFIN,.QELDF 3 4 ; SYSTEM GENERATION OPTIONS 5 .IIF NDF MMG$T, MMG$T=0 6 .IIF NDF ERL$G, ERL$G=0 7 .IIF NDF TIM$IT, TIM$IT=0 8 9 000000 .QELDF 10 11 ; LINE PRINTER CONTROL REGISTERS 12 13 ; STANDARD UNIBUS LOCATIONS 14 ;LP$CSR = 177514 ;LINE PRINTER CONTROL REGISTER 15 ;LP$VEC = 200 ;LINE PRINTER VECTOR ADDRESS 16 17 ;DEFAULT CONTROL REGISTER DEFINITIONS 18 .IIF NDF LP$CSR, LP$CSR==177514 19 .IIF NDF LP$VEC, LP$VEC==200 20 21 000000 LPDSIZ = 0 ;DEVICE BLOCK SIZE (0 IF NONFILE-STRUCTURED) 22 .IIF NDF LPSTS,LPSTS = 20003 ;DEVICE STATUS (WRITE ONLY) 23 24 ;CONSTANTS FOR MONITOR COMMUNICATION 25 000001 HDERR = 1 26 000500 V.MAX = 500 27 28 ; ASCII CONSTANTS 29 30 000015 CR = 15 31 000012 LF = 12 32 000014 FF = 14 33 000011 HT = 11 34 35 ;DEFAULT COLUMN SIZE DEFINITION 36 .IIF NDF LP.CSZ, LP.CSZ = 132. 37 000204 COLSIZ == LP.CSZ LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 3 1 ; THE FOLLOWING ARE THE PARAMETERS FOR INTERFACE TO THE MONITOR 'SET' COMMAND 2 3 000000 .ASECT 4 5 000400 .= 400 6 7 000400 000036 .WORD 30. ;MINIMUM WIDTH 8 000402 110454 077100 .RAD50 /WIDTH / 9 000406 040035 .WORD /2+40000 ;NO 'NO' OPTION, NUMBER REQUIRED 10 11 000410 001764 BEQ XNEXT-CROPT+. ;NOCR => SWALLOW CR 12 000412 012620 000000 .RAD50 /CR / 13 000416 100043 .WORD /2+100000 ;ALLOW 'NO' 14 15 000420 000411 BR BK0LCC-FFOPT+. ;NOFORM0 => SKIP INITIAL FF 16 000422 023752 052760 .RAD50 /FORM0 / 17 000426 100050 .WORD /2+100000 ;ALLOW 'NO' 18 19 000430 100444 BMI XERR2-ERROPT+. ;NOHANG BY GOING TO ERROR 20 000432 031066 025700 .RAD50 /HANG / 21 000436 100055 .WORD /2+100000 ;ALLOW 'NO' 22 23 000440 000040 .WORD 40 ;FOR NOLC, CONVERT LC TO UC 24 000442 045570 000000 .RAD50 /LC / 25 000446 100062 .WORD /2+100000 ;ALLOW 'NO' 26 27 000450 000764 BR XNEXT-CROPT+. ;SWALLOW CTRL CHAR IF NOCTRL 28 000452 012762 045400 .RAD50 /CTRL / 29 000456 100067 .WORD /2+100000 ;ALLOW 'NO' 30 31 000460 001401 BEQ SIMTAB-TABOPT+. ;SIMULATE TAB IF NOTAB 32 000462 076452 000000 .RAD50 /TAB / 33 000466 100074 .WORD /2+100000 ;ALLOW 'NO' 34 35 000470 000000 0 ;END OF LIST 36 37 38 000472 010067 000732' O.WIDTH:MOV R0,COLCNT ;NEW WIDTH TO 2 CONSTANTS 39 000476 010067 000714' MOV R0,PRTRST+2 40 000502 020003 CMP R0,R3 ;ERROR IF < 30 41 000504 000207 RTS PC 42 43 000506 012703 O.CR: MOV (PC)+,R3 ;NO 'NO', SO SET TO DO CR 44 000510 001470 BEQ PRTRST-CROPT+. 45 000512 010367 000530' MOV R3,CROPT ;SET CR OPTION 46 000516 000207 RTS PC 47 48 000520 012703 O.FORM0:MOV (PC)+,R3 ;SET TO DO FF ON BLOCK ZER0 49 000522 000240 NOP 50 000524 010367 000140' MOV R3,FFOPT 51 000530 000207 RTS PC 52 53 000532 012703 O.HANG: MOV (PC)+,R3 ;SET TO HANG 54 000534 100445 BMI XRET2-ERROPT+. 55 000536 010367 000102' MOV R3,ERROPT 56 000542 000207 RTS PC 57 LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 3-1 58 000544 005003 O.LC: CLR R3 ;FOR 'LC' LEAVE LOWER CASE STUFF ALONE 59 000546 000240 NOP 60 000550 010367 000416' MOV R3,LCOPT 61 000554 000207 RTS PC 62 63 000556 012703 O.CTRL: MOV (PC)+,R3 ;SET TO PASS ALL NON-PRINTING CHARACTERS 64 000560 000473 BR PRINT-CTROPT+. 65 000562 010367 000540' MOV R3,CTROPT 66 000566 000207 RTS PC 67 68 000570 012703 O.TAB: MOV (PC)+,R3 ;PASS TAB DIRECTLY TO PRINTER 69 000572 001407 BEQ HDWTAB-TABOPT+. 70 000574 010367 000426' MOV R3,TABOPT 71 000600 000207 RTS PC 72 LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 4 1 ;LOAD POINT 2 000602 .DRBEG LP,LP$VEC,LPDSIZ,LPSTS 3 4 ;ENTRY POINT 5 6 000012 016704 177772 MOV LPCQE,R4 ;R4 POINTS TO CURRENT Q ENTRY (Q.BLKN) 7 000016 006364 000006 ASL 6(R4) ;WORD COUNT TO BYTE COUNT 8 000022 001476 BEQ XQUIT2 ;IF NO DATA WE'RE DONE 9 000024 103073 BCC XERR2 ;A READ REQUEST (Q.WCNT > 0) IS ILLEGAL 10 000026 005067 000276 CLR LCCCNT ;NO LCC CHARS AT START 11 000032 005067 000144 CLR TABFLG ;WE AREN'T TABBING INITIALLY 12 000036 005067 000162 CLR LCXFLG ;NOR ARE WE EXPANDING LCC 13 000042 005067 000240 CLR DEFFLG ;NOR ARE WE PRINTING FIRST CHAR OF DEFAULT 14 000046 005067 000322 CLR DOLCFG ;UNLESS TOLD OTHERWISE DON'T START DOING LCC 15 16 000052 052777 000100 000020 BIS #100,@LPS ;CAUSE AN INTERRUPT, STARTING TRANSFER 17 000060 000207 RTS PC 18 19 20 .ENABL LSB 21 22 ; INTERRUPT SERVICE 23 24 .IF EQ MMG$T 25 .IFTF 26 000062 .DRAST LP,4,XQUIT2 27 000072 016704 177712 MOV LPCQE,R4 ;R4 -> CURRENT QUEUE ELEMENT (Q.BLKN) 28 000076 005737 TST @(PC)+ ;ERROR CONDITION? (BIT 15 SET => ERROR) 29 000100 177514 LPS: .WORD LP$CSR ;LINE PRINTER STATUS REGISTER 30 000102 100445 ERROPT: BMI XRET2 ;YES- HANG TILL CORRECTED 31 000104 105777 177770 TSTB @LPS ;IS IT READY? (BIT 7 SET => READY) 32 000110 100042 BPL XRET2 ;NO- RETURN 33 000112 005077 177762 CLR @LPS ;YES- DISABLE INTERRUPTS 34 000116 .FORK LPFBLK ;REQUEST A SYSTEM PROCESS 35 36 37 ; MAIN PRINT LOOP 38 39 40 000124 105777 177750 LPNEXT: TSTB @LPS ;READY FOR ANOTHER CHAR? 41 000130 100165 BPL XRET ;NO- RETURN FROM INTERRUPT 42 000132 005714 TST (R4) ;IS THIS FIRST BLOCK? 43 000134 001021 BNE TABCHK ;NO- SKIP BLOCK 0 STUFF 44 000136 005214 INC (R4) ;YES- MAKE SURE WE DON'T COME HERE AGAIN 45 46 47 ; DEAL WITH BLOCK 0 48 49 000140 000240 FFOPT: NOP ;INITIAL FF UNLESS CHANGED 50 000142 012705 000014 MOV #FF,R5 ;GET A FF TO OUTPUT 51 000146 132764 000007 000003 BITB #7,3(R4) ;LCC INVOKED? - THAT IS, NOT UNIT 0 52 000154 001551 BEQ XPRST ;NO- JUST PRINT THE FF 53 000156 005267 000212 INC DOLCFG ;YES- SET FLAG TO INTERCEPT NEXT CHAR 54 000162 000546 BR XPRST ;NOW WE CAN PRINT FF 55 000164 132764 000007 000003 BK0LCC: BITB #7,3(R4) ;LCC INVOKED? 56 000172 001402 BEQ TABCHK ;NO- DON'T LOOK FOR LCC CHAR 57 000174 005267 000174 INC DOLCFG ;YES- DO LOOK FOR LCC CHAR LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 4-1 58 59 60 ; DEAL WITH TAB EXPANSIONS 61 62 000200 106327 TABCHK: ASLB (PC)+ ;TAB EXPANSION IN PROGRESS? 63 000202 000000 TABFLG: .WORD 0 64 000204 001406 BEQ LCCCHK ;NO- SKIP TAB EXPANSION 65 000206 012705 000040 MOV #40,R5 ;PRINT A SPACE 66 000212 000531 BR XPRINT 67 68 69 ; THIS SECTION HANDLES BRANCHES OUT OF RANGE 70 71 000214 000527 XERR2: BR XERR 72 000216 000532 XRET2: BR XRET 73 000220 000524 XQUIT2: BR XQUIT 74 75 76 ; DEAL WITH LCC EXPANSIONS 77 78 000222 005727 LCCCHK: TST (PC)+ ;LCC EXPANSION IN PROGRESS? 79 000224 000000 LCXFLG: .WORD 0 80 000226 001446 BEQ ORDCHR ;NO- WE MUST BE DOING OUTPUT FROM BUFFER! 81 000230 005367 000074 DEC LCCCNT ;DECREMENT COUNT OF CHARS TO BE OUTPUT 82 000234 003012 BGT MORLCC ;IF NOT END OF LCC STRING CONTINUE 83 000236 005767 000044 TST DEFFLG ;SHOULD WE PRINT ONE CHAR? 84 000242 003004 BGT SETDEF ;YES- SET FLAG TO DO SO 85 000244 002417 BLT LAST ;YES- DO IT NOW 86 000246 005067 177752 CLR LCXFLG ;NO- WE'RE DONE 87 000252 000403 BR MORLCC 88 89 000254 012767 177777 000024 SETDEF: MOV #-1,DEFFLG ;SET FLAG TO PRINT FIRST CHAR ON LINE 90 91 000262 010703 MORLCC: MOV PC,R3 ;GET CURRENT ADDRESS 92 000264 066703 000042 ADD OFFSET,R3 ;POINT R3 AT THE CHARS 93 000270 111305 MOVB (R3),R5 ;GET THE CHAR TO BE PRINTED 94 000272 042705 177600 BIC #177600,R5 ;7-BIT CHARS 95 000276 005267 000030 INC OFFSET ;BUMP POINTER 96 000302 000476 BR XPRST ;PRINT THE CHAR 97 98 000304 005727 LAST: TST (PC)+ ;SHOULD WE PRINT STARTING CHAR NOW? 99 000306 000000 DEFFLG: .WORD 0 100 000310 100364 BPL MORLCC ;NO- PRINT LCC CHAR 101 000312 005067 177770 CLR DEFFLG ;CLEAR THE FLAG THAT GOT US HERE 102 000316 116705 000012 MOVB CHAR1,R5 ;GET THE FIRST CHAR ON THE LINE 103 000322 005067 177676 CLR LCXFLG ;CLEAR FLAG FOR LCC EXPANSION- WE'RE DONE 104 000326 000463 BR XPRINT ;PRINT THE CHAR 105 106 000330 000000 LCCCNT: .WORD 0 ;# OF CHARS TO DO LCC 107 000332 000000 OFFSET: .WORD 0 ;POINTER TO CHARS TO PRINT FOR LCC 108 000334 000000 CHAR1: .WORD 0 ;PLACE TO SAVE FIRST CHAR ON LINE 109 110 ; TABLES FOR LOGICAL CARRIAGE CONTROL 111 000336 015 012 012 LCCTBL: .BYTE CR,LF,LF,LF 000341 012 112 000342 014 FFTBL: .BYTE FF 113 .EVEN LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 4-2 114 115 116 ; DEAL WITH ORDINARY (I.E., FROM BUFFER) CHARACTERS 117 118 000344 005764 000006 ORDCHR: TST 6(R4) ;ANOTHER CHAR TO TRANSFER? 119 000350 001450 BEQ XQUIT ;NO- TRANSFER DONE 120 121 122 ; GET CHARACTER AND CHECK FOR TAB OR PRINTING CHAR 123 124 .IFT 125 000352 117405 000004 MOVB @4(R4),R5 ;GET NEXT CHAR (IF ANY) 126 000356 005264 000004 INC 4(R4) ;BUMP BUFFER POINTER 127 128 .IFF 129 JSR PC,@$GTBYT ;GET A BYTE FROM USER BUFFER 130 MOV (SP)+,R5 ;PUT IN R5 131 132 .IFTF 133 000362 005264 000006 INC 6(R4) ;BUMP CHARACTER COUNT 134 000366 042705 177600 BIC #177600,R5 ;7-BIT CHARS 135 000372 005727 TST (PC)+ ;SHOULD WE LOOK FOR LCC CHAR? 136 000374 000000 DOLCFG: .WORD 0 137 000376 001067 BNE LCCSET ;YES- DO SO 138 000400 122705 000040 CMPB #40,R5 ;PRINTING CHAR? 139 000404 101006 BHI CHRTST ;NO- GO TEST FOR SPECIAL CHAR 140 000406 122705 000140 CMPB #140,R5 ;LOWER CASE? 141 000412 103146 BHIS PRINT ;NO- JUST PRINT IT 142 000414 162705 SUB (PC)+,R5 ;YES- CONVERT IF DESIRED 143 000416 000040 LCOPT: 40 144 000420 000543 BR PRINT ;GO PRINT IT 145 146 147 ; CHARACTER IS A TAB 148 149 000422 122705 000011 CHRTST: CMPB #HT,R5 ;IS CHAR A TAB? 150 000426 001401 TABOPT: BEQ SIMTAB ;YES- SIMULATE TAB 151 000430 000426 BR NOTTAB ;NO- GO LOOK FOR SOMETHING ELSE 152 153 000432 016767 000302 177542 SIMTAB: MOV TABCNT,TABFLG ;SET UP TAB 154 000440 012705 000040 MOV #40,R5 ;PRINT SPACES 155 000444 000531 BR PRINT 156 157 000446 106367 000266 HDWTAB: ASLB TABCNT ;UPDATE TAB COUNT 158 000452 001403 BEQ TABSET ;DONE? 159 000454 005367 000252 DEC COLCNT ;IF NOT, UPDATE COLUMN COUNT 160 000460 000772 BR HDWTAB ;AND DO IT AGAIN 161 000462 012767 000001 000250 TABSET: MOV #1,TABCNT ;RESET TAB COUNTER 162 000470 000517 BR PRINT ;PRINT THE CHARACTER 163 164 165 ; THIS SECTION HANDLES BRANCHES OUT OF RANGE 166 167 000472 000541 XQUIT: BR LPQUIT 168 000474 000531 XERR: BR LPERR 169 000476 000514 XPRINT: BR PRINT 170 000500 000504 XPRST: BR PRTRST LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 4-3 171 000502 000610 XNEXT: BR LPNEXT 172 000504 000530 XRET: BR RETURN 173 174 175 ; CHARACTER IS NON-PRINTING CHARACTER 176 177 000506 132764 000007 000003 NOTTAB: BITB #7,3(R4) ;IS LCC INVOKED? 178 000514 001012 BNE LCC ;YES- GO OFF AND DEAL WITH LCC 179 180 181 ; LCC=OFF: PRINT CR, LF, AND FF, AND OTHER CHARS CONDITIONALLY 182 183 000516 122705 000012 CMPB #LF,R5 ;IS CHAR A LF? 184 000522 001473 BEQ PRTRST ;YES- PRINT IT 185 000524 122705 000015 CMPB #CR,R5 ;IS IT A CR? 186 000530 001470 CROPT: BEQ PRTRST ;YES- PRINT IT 187 000532 122705 000014 CMPB #FF,R5 ;IS IT A FF? 188 000536 001465 BEQ PRTRST ;YES- PRINT IT 189 000540 000760 CTROPT: BR XNEXT ;IF SOMETHING ELSE, IGNORE 190 191 192 ; LCC=ON: SWALLOW NON-PRINTING CHARS AND CHECK FOR LF 193 194 000542 122705 000012 LCC: CMPB #LF,R5 ;IS CHAR A LF? 195 000546 001355 BNE XNEXT ;SWALLOW ALL NON-PRINTING CHARS 196 000550 005267 177620 INC DOLCFG ;SET TO DO LCC ON NEXT PASS 197 000554 000752 BR XNEXT ;AND SWALLOW THE LF 198 199 200 ; LCC CHAR DETECTED, SET UP FOR LCC EXPANSION 201 202 000556 005067 177612 LCCSET: CLR DOLCFG ;CLEAR THE FLAG THAT GOT US HERE 203 000562 005267 177436 INC LCXFLG ;AND SET THE FLAG TO PRINT LCC CHARS 204 000566 012767 000052 177536 MOV #LCCTBL-MORLCC-2,OFFSET ;SET OFFSET TO LCC TABLE 205 000574 012767 000001 177526 MOV #1,LCCCNT ;1 CHAR 206 000602 122705 000053 CMPB #'+,R5 ;IS IT A "+"? 207 000606 001735 BEQ XNEXT ;PRINT CR 208 000610 005267 177514 INC LCCCNT ;2 CHARS 209 000614 122705 000040 CMPB #40,R5 ;IS IT A " "? 210 000620 001730 BEQ XNEXT ;PRINT CR, LF 211 000622 005267 177502 INC LCCCNT ;3 CHARS 212 000626 122705 000060 CMPB #'0,R5 ;IS IT A "0"? 213 000632 001723 BEQ XNEXT ;PRINT CR, LF, LF 214 000634 005267 177470 INC LCCCNT ;4 CHARS 215 000640 122705 000055 CMPB #'-,R5 ;IS IT A "-"? 216 000644 001716 BEQ XNEXT ;PRINT CR, LF, LF, LF 217 000646 122705 000061 CMPB #'1,R5 ;IS IT A "1"? 218 000652 001007 BNE NOTLCC ;NO- PRINT THIS CHAR 219 000654 012767 000001 177446 MOV #1,LCCCNT ;1 CHAR 220 000662 012767 000056 177442 MOV #FFTBL-MORLCC-2,OFFSET ;POINT TO FF 221 000670 000704 BR XNEXT ;PRINT FF 222 000672 012767 000002 177430 NOTLCC: MOV #2,LCCCNT ;CR, LF 223 000700 110567 177430 MOVB R5,CHAR1 ;SAVE THE FIRST CHAR 224 000704 005267 177376 INC DEFFLG ;SET DEFAULT LCC FLAG 225 000710 000674 BR XNEXT ;DO THE LCC 226 227 LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 4-4 228 ; ENTRY TO PRINT ROUTINE- RESETS TO START OF LINE 229 230 000712 012767 000204 000012 PRTRST: MOV #COLSIZ,COLCNT ;RE-INIT COLUMN POINTER 231 000720 012767 000001 000012 MOV #1,TABCNT ;RESET TAB COUNTER 232 000726 000411 BR PR1 ;GO PRINT THE CHAR 233 234 235 ; ENTRY TO PRINT ROUTINE- ADDS ONE CHARACTER TO LINE 236 237 000730 005327 PRINT: DEC (PC)+ ;ANY ROOM LEFT ON LINE? 238 000732 000204 COLCNT: .WORD COLSIZ ;# OF PRINTER COLUMNS LEFT 239 000734 002662 BLT XNEXT ;NO MORE ROOM ON LINE, SWALLOW CHAR 240 000736 106327 ASLB (PC)+ ;UPDATE TAB COUNT 241 000740 000001 TABCNT: .WORD 1 242 000742 001003 BNE PR1 ;IF NOT ZERO, SKIP RESET 243 000744 012767 000001 177766 MOV #1,TABCNT ;RESET TAB COUNT 244 245 246 ; PRINT ROUTINE PROPER- OUTPUTS CHARACTER IN R5 247 248 000752 110537 PR1: MOVB R5,@(PC)+ ;PRINT THE CHAR 249 000754 177516 LPB: .WORD LP$CSR+2 ;LINE PRINTER BUFFER REGISTER 250 000756 000651 BR XNEXT ;GO GET NEXT CHAR 251 252 253 ; COME HERE ON ERRORS 254 255 000760 052754 000001 LPERR: BIS #HDERR,@-(R4) ;SET HARD ERROR BIT 256 000764 000404 BR LPQUIT ;AND STOP 257 258 259 ; RETURN ROUTINE (PRINTER NOT READY) 260 261 000766 052777 000100 177104 RETURN: BIS #100,@LPS ;CAUSE AN INTERRUPT, STARTING TRANSFER 262 000774 000207 RTS PC ;RETURN 263 264 265 ; EXIT ROUTINE- PACK UP AND GO HOME 266 267 000776 106427 000340 LPQUIT: MTPS #340 ;BUMP PROCESSOR PRIO TO 7 268 001002 005077 177072 CLR @LPS ;TURN OFF INTERRUPT 269 001006 106427 000000 MTPS #0 ;PUT PRIO BACK 270 001012 .DRFIN LP 271 272 273 001030 000000 000000 000000 LPFBLK: .WORD 0,0,0,0 ;FORK BLOCK 001036 000000 274 275 001040 .DREND LP 276 277 .ENDC 278 .DSABL LSB 279 280 000001 .END LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE 4-5 SYMBOL TABLE BK0LCC 000164R LCC 000542R LPSTRT 000000RG O.WIDT 000472 TABCNT 000740R CHAR1 000334R LCCCHK 000222R LPSTS = 020003 PRINT 000730R TABFLG 000202R CHRTST 000422R LCCCNT 000330R LPSYS 000006RG PRTRST 000712R TABOPT 000426R COLCNT 000732R LCCSET 000556R LP$CSR= 177514 G PR1 000752R TABSET 000462R COLSIZ= 000204 G LCCTBL 000336R LP$VEC= 000200 G Q.BLKN= 000004 TIM$IT= 000000 CR = 000015 LCOPT 000416R LP.CSZ= 000204 Q.BUFF= 000010 V.MAX = 000500 CROPT 000530R LCXFLG 000224R MMG$T = 000000 Q.COMP= 000014 XERR 000474R CTROPT 000540R LF = 000012 MORLCC 000262R Q.CSW = 000002 XERR2 000214R DEFFLG 000306R LPB 000754R NOTLCC 000672R Q.ELGH= 000016 XNEXT 000502R DOLCFG 000374R LPCQE 000010RG NOTTAB 000506R Q.FUNC= 000006 XPRINT 000476R ERL$G = 000000 LPDSIZ= 000000 OFFSET 000332R Q.JNUM= 000007 XPRST 000500R ERROPT 000102R LPEND = 001044RG ORDCHR 000344R Q.LINK= 000000 XQUIT 000472R FF = 000014 LPERR 000760R O.CR 000506 Q.UNIT= 000007 XQUIT2 000220R FFOPT 000140R LPFBLK 001030R O.CTRL 000556 Q.WCNT= 000012 XRET 000504R FFTBL 000342R LPINT 000064RG O.FORM 000520 RETURN 000766R XRET2 000216R HDERR = 000001 LPLQE 000006RG O.HANG 000532 SETDEF 000254R $FKPTR 001042RG HDWTAB 000446R LPNEXT 000124R O.LC 000544 SIMTAB 000432R $INPTR 001040RG HT = 000011 LPQUIT 000776R O.TAB 000570 TABCHK 000200R ...V2 = 000000 LAST 000304R LPS 000100R . ABS. 000602 000 001044 001 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 1248 WORDS ( 5 PAGES) DYNAMIC MEMORY AVAILABLE FOR 74 PAGES ,DK:LPLCC=DK:LPLCC/C LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE S-1 CROSS REFERENCE TABLE (CREF V01-08 ) $FKPTR 4-34 4-275# $INPTR 4-26 4-26 4-275# $SYSDV 4-2 4-275 ...V2 4-275 4-275# BK0LCC 3-15 4-55# CHAR1 4-102 4-108# 4-223* CHRTST 4-139 4-149# COLCNT 3-38* 4-159* 4-230* 4-238# COLSIZ 2-37# 4-230 4-238 CR 2-30# 4-111 4-185 CROPT 3-11 3-27 3-44 3-45* 4-186# CTROPT 3-64 3-65* 4-189# DEFFLG 4-13* 4-83 4-89* 4-99# 4-101* 4-224* DOLCFG 4-14* 4-53* 4-57* 4-136# 4-196* 4-202* ERL$G 2-6 4-275 ERROPT 3-19 3-54 3-55* 4-30# FF 2-32# 4-50 4-112 4-187 FFOPT 3-15 3-50* 4-49# FFTBL 4-112# 4-220 HDERR 2-25# 4-255 HDWTAB 3-69 4-157# 4-160 HT 2-33# 4-149 LAST 4-85 4-98# LCC 4-178 4-194# LCCCHK 4-64 4-78# LCCCNT 4-10* 4-81* 4-106# 4-205* 4-208* 4-211* 4-214* 4-219* 4-222* LCCSET 4-137 4-202# LCCTBL 4-111# 4-204 LCOPT 3-60* 4-143# LCXFLG 4-12* 4-79# 4-86* 4-103* 4-203* LF 2-31# 4-111 4-111 4-111 4-183 4-194 LP$CSR 2-18 4-29 4-249 LP$VEC 2-19 4-2 LP.CSZ 2-36 2-37 LPB 4-249# LPCQE 4-2# 4-6 4-27 4-270 4-270 LPDSIZ 2-21# 4-2 LPEND 4-2 4-2 4-275# LPERR 4-168 4-255# LPFBLK 4-34 4-273# LPINT 4-2 4-2 4-26# LPLQE 4-2# LPNEXT 4-40# 4-171 LPQUIT 4-167 4-256 4-267# LPS 4-16* 4-29# 4-31 4-33* 4-40 4-261* 4-268* LPSTRT 4-2 4-2# 4-275 LPSTS 2-22 4-2 LPSYS 4-2# MMG$T 2-5 2-9 4-24 4-275 MORLCC 4-82 4-87 4-91# 4-100 4-204 4-220 NOTLCC 4-218 4-222# NOTTAB 4-151 4-177# O.CR 3-13 3-43# O.CTRL 3-29 3-63# O.FORM 3-17 3-48# O.HANG 3-21 3-53# LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE S-2 CROSS REFERENCE TABLE (CREF V01-08 ) O.LC 3-25 3-58# O.TAB 3-33 3-68# O.WIDT 3-9 3-38# OFFSET 4-92 4-95* 4-107# 4-204* 4-220* ORDCHR 4-80 4-118# PR1 4-232 4-242 4-248# PRINT 3-64 4-141 4-144 4-155 4-162 4-169 4-237# PRTRST 3-39* 3-44 4-170 4-184 4-186 4-188 4-230# Q.BLKN 2-9# Q.BUFF 2-9# Q.COMP 2-9# Q.CSW 2-9# Q.ELGH 2-9# Q.FUNC 2-9# Q.JNUM 2-9# Q.LINK 2-9# Q.UNIT 2-9# Q.WCNT 2-9# RETURN 4-172 4-261# SETDEF 4-84 4-89# SIMTAB 3-31 4-150 4-153# TABCHK 4-43 4-56 4-62# TABCNT 4-153 4-157* 4-161* 4-231* 4-241# 4-243* TABFLG 4-11* 4-63# 4-153* TABOPT 3-31 3-69 3-70* 4-150# TABSET 4-158 4-161# TIM$IT 2-7 4-275 V.MAX 2-26# XERR 4-71 4-168# XERR2 3-19 4-9 4-71# XNEXT 3-11 3-27 4-171# 4-189 4-195 4-197 4-207 4-210 4-213 4-216 4-221 4-225 4-239 4-250 XPRINT 4-66 4-104 4-169# XPRST 4-52 4-54 4-96 4-170# XQUIT 4-73 4-119 4-167# XQUIT2 4-8 4-26 4-73# XRET 4-41 4-72 4-172# XRET2 3-54 4-30 4-32 4-72# LPLCC.MAC V03.02 MACRO V03.02B20-NOV-78 15:20:26 PAGE M-1 CROSS REFERENCE TABLE (CREF V01-08 ) .DRAST 2-2# 4-26 .DRBEG 2-2# 4-2 .DREND 2-2# 4-275 .DRFIN 2-2# 4-270 .FORK 2-2# 4-34 .QELDF 2-2# 2-9