1 /25 OS/12 SCOPE HANDLER 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 /COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION 12 / 13 / 14 / 15 / 16 / 17 / 18 / 19 / 20 / 21 / 22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE 23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT 24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY 25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. 26 / 27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER 28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED 29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH 30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. 31 / 32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE 33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY 34 /DIGITAL. 35 / 36 / 37 / 38 / 39 / 40 / 41 / 42 / 43 / 44 / 45 46 / NOVEMBER, 1972 47 48 / MARIO DENOBILI, P?S 49 50 / THIS ROUTINE WAS WRITTEN VERY HASTILY. 51 52 / THE FOLLOWING FEATURES SHOULD BE PUT 53 / IN, BUT I WAS TOO LAZY TO DO SO. 54 / WITH A FEW HOURS WORK, A COMPETENT 55 / PROGRAMMER SHOULD BE ABLE TO COMPACT 56 / MY HASTY CODE AND EASILY ADD AT LEAST 57 / A FEW OF THE FOLLOWING FEATURES: 58 59 /1. TABS SHOULD BE HANDLED CORRECTLY. 60 61 /2. FORM FEEDS SHOULD SIGNAL A NEW 62 / SCOPE PAGE. [BRANCH TO LOCATION 'FULL'] 63 64 /3. VERTICAL TABS SHOULD BE TREATED AS 65 / 7 LINE FEEDS. 66 67 /4. THE HANDLER SHOULD RETURN AN ERROR ON READ. 68 69 /5. IF THE BUFFER OVERLAPS THE BETA REGISTER, 70 / OR WRAPS AROUND 7777. 71 / THIS SHOULD NOT CAUSE A CRAPPY 72 / CHARACTER TO BE DISPLAYED. 73 74 /6. CTRL/Z SHOULD BE CHECKED FOR AND SIGNIFY 75 / END OF BUFFER. [BRANCH TO 'FULL' WITH 76 / LINK 0] 77 78 /7. THE DISPLAY ALGORITHM SHOULD BE IMPROVED 79 / SO THAT THERE IS LESS FLICKER. 80 /MORE FEATURES TO BE ADDED 81 82 /8. THE RESTRICTION THAT THE USER'S BUFFER 83 / START AT AN EVEN ADDRESS IS USELESS 84 / AND SHOULD BE REMOVED. 85 86 /9. THE STATUS OF THE SPECIAL FUNCTIONS 87 / REGISTER SHOULD BE SAVED AND RESTORED 88 / BEFORE EXITING. 89 90 /10. WHEN ANOTHER LOCATION IS FOUND, THE HANDLER 91 / SHOULD BE ABLE TO DETECT PARITY ^C 92 93 /11. SENSE SWITCH 0 SHOULD BE USED TO 94 / SPECIFY SMALL OR LARGE SIZE CHARACTERS. 95 96 /12. OVERFLOW LINES SHOULD BE INDENTED SOME SMALL 97 / AMOUNT TO SHOW THAT THEY ARE A CONTINUATION 98 / OF THE PREVIOUS LINE 99 / OS/8 BUILD HEADER BLOCK 100 101 FIELD 0 102 *0 103 104 000000 7777 -1 105 000001 2622 DEVICE VR12 /DEVICE NAME 000002 6162 106 000003 2426 DEVICE TV /HANDLER NAME 000004 0000 107 000005 1300 1300 /DCB WORD 108 000006 4013 4000+SCOPE-200 /2-PAGE FLAG AND RELATIVE ENTRY PT 109 000007 0000 ZBLOCK 2 000010 0000 110 111 / TWO PAGE SCOPE DEVICE HANDLER 112 / PAGE INDEPENDENT AND REUSABLE 113 114 LINC=6141 115 PDP=2 116 ESF=4 117 CLR=11 118 119 *200 120 121 000200 0026 L26, 26 122 000201 0000 SAVE, 0 /BETA REG SAVE LOC - MAY BE BETA REG 123 000202 1201 LINKNT, TAD SAVE /COUNT OF # OF LINES 124 000203 0333 YCOORD, AND SCDF /DISPLAY ORDIANTE 125 000204 3204 BETA, DCA . /8-MODE ADDRESS OF BETA REGISTER 1 126 000205 1201 CBASE, TAD SAVE /POINTS TO CHARACTER DISPLAY TABLE 127 000206 1364 BUFEND, TAD XCIF /END OF BUFFER 128 000207 3205 BPTR, DCA CBASE /POINTS INTO BUFFER 129 000210 1224 BUFFER, TAD X /BEGINNING OF BUFFER 130 000211 3214 T1, DCA BEGIN /TEMPORARY 131 000212 7410 L7410, SKP 132 133 TVERSION="A&77 134 000213 0001 SCOPE, TVERSION 135 000214 4201 BEGIN, JMS SAVE /ADDRESS MUST BE EVEN 136 000215 0376 AND L70 /GET DATA FIELD OF BUFFER 137 000216 1274 TAD KCDF 138 000217 3333 DCA SCDF 139 000220 6032 KCC 140 000221 6214 RDF /GET DATA FIELD 141 000222 1351 TAD FULL 142 000223 3364 DCA XCIF 143 000224 1613 X, TAD I SCOPE /GET FUNCTION WORD 144 000225 7104 CLL RAL 145 000226 0331 AND L7700 /GET # OF PAGES 146 000227 2213 ISZ SCOPE 147 000230 7450 SNA 148 000231 5361 JMP OVERX 149 000232 1613 TAD I SCOPE /ADD IN BUFFER START 150 000233 3206 DCA BUFEND /TO GET END OF BUFFER 151 000234 1613 TAD I SCOPE /GET BUFFER START 152 000235 3210 DCA BUFFER /[RESTRICTION: IT MUST BE EVEN] 153 000236 6201 CDF 0 154 000237 1604 TAD I BETA 155 000240 3201 DCA SAVE /SAVE CONTENTS OF BETA REGISTER 156 /MAIN LOOP - GET CHARACTERS AND CALL DISPLAY ROUTINE 157 158 000241 7604 NEW, LAS /LINE COUNT FROM SWITCH REGISTER 159 000242 3202 DCA LINKNT 160 000243 3604 DCA I BETA /GO TO LEFT MARGIN 161 000244 1210 TAD BUFFER 162 000245 3207 DCA BPTR /POINT TO BEGIN OF BUFFER 163 000246 1275 TAD YINIT 164 000247 3203 DCA YCOORD /GO TO TOP OF SCREEN 165 000250 4273 ENTRY, JMS DISP /DISPLAY 3D CHAR ( ALSO SETS DF) 166 000251 1207 TAD BPTR 167 000252 7140 CMA CLL 168 000253 1206 TAD BUFEND /COMPARE BUFFER PTR WITH BUFFER END 169 000254 7620 SNL CLA /AT END OF BUFFER? 170 000255 5351 JMP FULL /YES - LINK OFF AT FULL MEANS EXIT 171 000256 7006 ROTT1, RTL /NOTE LINK=1 IF WE FELL INTO HERE! 172 000257 7006 RTL /ROTATE HI ORDER BITS INTO SHIFT REG 173 000260 7510 SPA /TEST FOR SHIFT REGISTER FULL 174 000261 5250 JMP ENTRY /YES - GO DIAPLAY IT 175 000262 3211 DCA T1 /RESAVE SHIFT REGISTER 176 000263 1607 TAD I BPTR /GET NEXT BUFFER WORD 177 000264 4273 JMS DISP /DISPLAY LOW-ORDER 178 000265 1607 TAD I BPTR 179 000266 2207 ISZ BPTR /BUMP PTR 180 / NOP 181 000267 0212 AND L7410 /GET HIGH ORDER - THE 10 IS HARMLESS 182 000270 7104 CLL RAL 183 000271 1211 TAD T1 /ADD HIGH ORDER TO SHIFT REGISTER. 184 000272 5256 JMP ROTT1 /INVOLUTED CODE. 185 /DISPLAY SUBROUTINE - DISPLAYS A CHARACTER 186 187 000273 0000 DISP, 0 188 000274 6201 KCDF, CDF 0 189 000275 0366 YINIT, AND L177 190 000276 7450 SNA 191 000277 5333 JMP SCDF /IGNORE NULLS 192 000300 1337 TAD L7640 193 000301 7120 CLL CML 194 000302 1367 TAD L100 /CHECK WHETHER THE CHARACTER 195 000303 7430 SZL /IS OUTSIDE OF THE RANGE [40,137] 196 000304 5335 JMP UGH /YES - SUBSTITUTE SPACE OR L.F. 197 000305 7104 CLL RAL 198 000306 1205 MAGIC, TAD CBASE /ADD IN BASE ADDR 199 000307 3322 DCA RIGHT /GET DISPLAY BIT PATTERN PTR 200 000310 1722 TAD I RIGHT 201 000311 3320 DCA LEFT /GET LEFT HALF OF DISPLAY BITS 202 000312 2322 ISZ RIGHT 203 000313 1722 TAD I RIGHT 204 000314 3322 DCA RIGHT /GET RIGHT HALF 205 000315 1203 TAD YCOORD /PUT ORDINATE IN AC 206 000316 6141 LINC 207 000317 1760 YINC, 1760 /DSC I 208 000320 0000 LEFT, 0 /DISPLAY LEFT HALF 209 000321 1760 1760 /DSC I 210 000322 0000 RIGHT, 0 /DISPLAY RIGHT HALF 211 000323 0011 CLR 212 000324 0004 ESF /SMALL CHARACTERS! 213 000325 0002 PDP 214 000326 2604 ISZ I BETA /LEAVE A BISSEL SPACE 215 000327 1604 TAD I BETA /GET ABSCISSA 216 000330 1336 TAD LINEND /COMPARE WITH RIGHT MARGIN 217 000331 7700 L7700, SMA CLA /AT RIGHT EDGE OF SCREEN? 218 000332 5341 JMP NEWLIN /YES, GO TO NEXT LINE 219 000333 6001 SCDF, 6001 /NO, SET PROPER DF 220 000334 5673 JMP I DISP /RETURN 221 /DISPLAY ROUTINE CONTINUED 222 223 000335 1200 UGH, TAD L26 /CHECK FOR LINE FEED 224 000336 7012 LINEND, RTR /OR FORM FEED (LINK=0!) 225 000337 7640 L7640, SZA CLA 226 000340 5306 JMP MAGIC /OTHER CONTROL CHARS PRINT BLNK 227 000341 3604 NEWLIN, DCA I BETA /BACK TO LEFT MARGIN 228 000342 1203 TAD YCOORD 229 000343 1317 TAD YINC 230 000344 3203 DCA YCOORD /MOVE DOWN TO NEXT LINE 231 000345 2202 ISZ LINKNT /AT BOTTOM OF SCREEN? 232 000346 5333 JMP SCDF /NO 233 000347 7344 CLL CLA CMA RAL /TAKE QUOT ON DIV BY 2 234 000350 0207 AND BPTR /AND LEAVE IN AC 235 000351 6203 FULL, CIF CDF 0 /YES 236 000352 6031 KSF /GO TO NEXT SCOPE PAGE? 237 000353 5241 JMP NEW /NO, REFRESH 238 000354 3210 DCA BUFFER /GET NEW BUFFER 'START' 239 000355 7430 SZL /END OF BUFFER ? 240 000356 5370 JMP NOW /NO, REFRESH 241 000357 1201 TAD SAVE 242 000360 3604 DCA I BETA /RESTORE BETA REGISTER 243 000361 7325 OVERX, CLA STL RAL IAC /ADD 3 244 000362 1213 TAD SCOPE /TO RET ADDRESS 245 000363 3213 DCA SCOPE 246 000364 0163 XCIF, CHRTBL-BEGIN-1 /RESTORE INST FIELD & DATA FIELD 247 000365 5613 JMP I SCOPE /LEAVE 248 000366 0177 L177, 177 249 000367 0100 L100, 100 250 000370 6036 NOW, KRB 251 / AND L177 252 000371 1377 TAD M3 253 000372 7640 SZA CLA 254 000373 5241 JMP NEW 255 000374 5775 JMP I .+1 256 000375 7605 7605 257 000376 0070 L70, 70 258 000377 7575 M3, -203 /** TEMP 259 /BETTER STUFF, PRINTS ^C 260 /NOW, TAD L7600 261 / KRS 262 / TAD M7603 263 / SZA CLA 264 / JMP NEW 265 / JMP I L7600 266 /L7600, 7600 267 /M7603, -7603 268 *.-1 / VRS 269 PAGE 270 /THE TABLE OF PATTERN WORDS BEGINS HERE 271 272 000400 0000 CHRTBL, 0000; 0000 /SPACE 000401 0000 273 000402 7500 7500; 0000 /! 000403 0000 274 000404 7000 7000; 0070 /" 000405 0070 275 000406 7714 7714; 1477 /# 000407 1477 276 000410 5721 5721; 4671 /$ 000411 4671 277 000412 6661 6661; 4333 /% 000413 4333 278 000414 5166 5166; 0526 /& 000415 0526 279 000416 0000 0000; 0070 /' 000417 0070 280 000420 3600 3600; 0041 /( 000421 0041 281 000422 4100 4100; 0036 /) 000423 0036 282 000424 2050 2050; 0050 /* 000425 0050 283 000426 0404 0404; 0437 /+ 000427 0437 284 000430 0500 0500; 0006 /, 000431 0006 285 000432 0404 0404; 0404 /- 000433 0404 286 000434 0001 0001; 0000 /. 000435 0000 287 000436 0601 0601; 4030 // 000437 4030 288 000440 4536 4536; 3651 /0 000441 3651 289 000442 2101 2101; 0177 /1 000443 0177 290 000444 4523 4523; 2151 /2 000445 2151 291 000446 4122 4122; 2651 /3 000447 2651 292 000450 2414 2414; 0477 /4 000451 0477 293 000452 5172 5172; 0651 /5 000453 0651 294 000454 1506 1506; 4225 /6 000455 4225 295 000456 4443 4443; 6050 /7 000457 6050 296 000460 5126 5126; 2651 /8 000461 2651 297 000462 5122 5122; 3651 /9 000463 3651 298 000464 2200 2200; 0000 /: 000465 0000 299 000466 4601 4601; 0000 /; 000467 0000 300 000470 2410 2410; 0042 /< 000471 0042 301 000472 1212 1212; 1212 /= 000473 1212 302 000474 4200 4200; 1024 /> 000475 1024 303 000476 4020 4020; 2055 /? 000477 2055 304 000500 4136 4136; 3656 /@ 000501 3656 305 000502 4477 4477; 7744 /A 000503 7744 306 000504 5177 5177; 2651 /B 000505 2651 307 000506 4136 4136; 2241 /C 000507 2241 308 000510 4177 4177; 3641 /D 000511 3641 309 000512 4577 4577; 4145 /E 000513 4145 310 000514 4477 4477; 4044 /F 000515 4044 311 000516 4136 4136; 2645 /G 000517 2645 312 000520 1077 1077; 7710 /H 000521 7710 313 000522 7741 7741; 0041 /I 000523 0041 314 000524 4142 4142; 4076 /J 000525 4076 315 000526 1077 1077; 4324 /K 000527 4324 316 000530 0177 0177; 0301 /L 000531 0301 317 000532 3077 3077; 7730 /M 000533 7730 318 000534 3077 3077; 7706 /N 000535 7706 319 000536 4177 4177; 7741 /O 000537 7741 320 000540 4477 4477; 3044 /P 000541 3044 321 000542 4276 4276; 0376 /Q 000543 0376 322 000544 4477 4477; 3146 /R 000545 3146 323 000546 5121 5121; 4651 /S 000547 4651 324 000550 4040 4040; 4077 /T 000551 4077 325 000552 0177 0177; 7701 /U 000553 7701 326 000554 0176 0176; 7402 /V 000555 7402 327 000556 0677 0677; 7701 /W 000557 7701 328 000560 1463 1463; 6314 /X 000561 6314 329 000562 0770 0770; 7007 /Y 000563 7007 330 000564 4543 4543; 6151 /Z 000565 6151 331 000566 4177 4177; 0000 /[ 000567 0000 332 000570 3040 3040; 0106 /\ 000571 0106 333 000572 0000 0000; 7741 /] 000573 7741 334 000574 2000 2000; 2076 /^ 000575 2076 335 000576 1604 1604; 0404 /_ 000577 0404 336 337 $ BEGIN 0214 BETA 0204 BPTR 0207 BUFEND 0206 BUFFER 0210 CBASE 0205 CHRTBL 0400 CLR 0011 DISP 0273 ENTRY 0250 ESF 0004 FULL 0351 KCDF 0274 L100 0367 L177 0366 L26 0200 L70 0376 L7410 0212 L7640 0337 L7700 0331 LEFT 0320 LINC 6141 LINEND 0336 LINKNT 0202 M3 0377 MAGIC 0306 NEW 0241 NEWLIN 0341 NOW 0370 OVERX 0361 PDP 0002 RIGHT 0322 ROTT1 0256 SAVE 0201 SCDF 0333 SCOPE 0213 T1 0211 TVERSI 0001 UGH 0335 X 0224 XCIF 0364 YCOORD 0203 YINC 0317 YINIT 0275