1 /4 TD8E HANDLER FOR BUILD..TD8E-A 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 /COPYRIGHT (C) 1974,1975,1977 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 *0 46 000000 7776 -2 47 000001 2404 DEVICE TD8A;DEVICE DTA0;4210;4010;ZBLOCK 2 000002 7001 000003 0424 000004 0160 000005 4210 000006 4010 000007 0000 000010 0000 48 000011 2404 DEVICE TD8A;DEVICE DTA1;4210;4014;ZBLOCK 2 000012 7001 000013 0424 000014 0161 000015 4210 000016 4014 000017 0000 000020 0000 49 50 SDSS=6771 /SKIP ON SINGLE LINE FLAG 51 SDST=6772 /SKIP ON TIME ERROR 52 SDSQ=6773 /SKIP ON QUAD LINE FLAG 53 SDLC=6774 /LOAD TAPE COMMAND REGISTER 54 SDLD=6775 /LOAD DATA REGISTER 55 SDRC=6776 /READ COMMAND REGISTER 56 SDRD=6777 /READ DATA REGISTER 57 58 TDVERSION="D&77 59 60 /V3 CHANGES: 61 62 /1. VERSION # IS NOW 1 63 /2. PARITY ^C IS NOW LEGAL 64 /3. ^C CHECK NO LONGER WILL ADVANCE READER 65 66 /MAINTENANCE RELEASE CHANGES: 67 68 /4. FIXED ^C BUG 69 /5. MADE CODE IMPROVEMENTS 70 /6. FIXED RETRY BUG 71 72 73 *200 74 75 000200 7600 NXINIT, 7600 /CLEAR AC HERE!!! 76 000201 4763 JMS I CINIT2 /PART OF INITIALIZATION..DO THE PART 77 000202 3250 BASE2, DCA JINIT /ON SECOND PAGE AND THEN TO JINIT 78 000203 5250 JMP JINIT 79 80 000204 0000 BUFF, 0 81 000205 0000 PGCT, 0 82 000206 0000 FUNCT, 0 83 000207 1000 C1000, 1000 84 85 000210 0004 DTA0, TDVERSION /ENTRY FOR UNIT 0 86 000211 7300 CLA CLL 87 000212 5220 JMP DTA1X 88 000213 0000 UNIT, 0 /FILLER WORD 89 000214 0004 DTA1, TDVERSION /ENTRY FOR UNIT 1 90 000215 7320 CLA CLL CML 91 000216 1214 TAD DTA1 92 000217 3210 DCA DTA0 /PICK UP ARGS AT DTA0 93 000220 7010 DTA1X, RAR 94 000221 3213 DCA UNIT /UNIT # FROM LINK 95 000222 6214 RDF 96 000223 1247 TAD C6203 97 000224 3347 DCA LEAVE /SET UP EXIT FROM HANDLER 98 000225 1610 TAD I DTA0 99 000226 3206 DCA FUNCT /SAVE FUNCTION WORD 100 000227 1206 TAD FUNCT 101 000230 7104 CLL RAL 102 000231 0200 C200, AND CM200 /GET A PAGE COUNT 103 000232 3205 DCA PGCT 104 000233 1206 TAD FUNCT 105 000234 0374 C374, AND C70 /ISOLATE FIELD OF TRANSFER 106 000235 1247 TAD C6203 107 000236 3377 DCA XFIELD 108 000237 2210 ISZ DTA0 /POINT TO BUFFER 109 000240 1610 TAD I DTA0 110 000241 3204 DCA BUFF 111 000242 2210 ISZ DTA0 /POINT TO RECORD 112 000243 1610 TAD I DTA0 113 000244 7104 CLL RAL /CONVERT TO DECTAPE BLOCKS 114 000245 3214 DCA TBLOCK 115 000246 2210 ISZ DTA0 /POINT TO ERROR RET. 116 000247 6203 C6203, CIF CDF 0 117 118 000250 5351 JINIT, JMP INIT /FIRST TIME THRU IT GETS EXECUTED 119 /THE RETURN FROM INIT ZEROES IT 120 000251 7346 CLA CLL CMA RTL 121 000252 3352 DCA ERCNT /3 ERROR TRIES 122 000253 1213 TAD UNIT 123 000254 3765 DCA I CXUNIT 124 000255 4764 JMS I CSELCT /CHECK FOR SELEC ERROR 125 000256 5255 JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR 126 000257 1206 TAD FUNCT 127 000260 7110 CLL RAR 128 000261 5277 JMP GO /OK.. START THE SEARCH 129 000262 6772 TRWCOM, SDST /TIME OR CHECK SUM ERROR? 130 000263 7640 SZA CLA 131 000264 5336 JMP TRY3 /YES TRY UP TO 3 TIMES 132 000265 1205 TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? 133 000266 1200 TAD CM200 134 000267 7450 SNA 135 000270 5342 JMP EXIT /YES.. DONE THIS TRANSFER 136 000271 3205 DCA PGCT /NEW PAGE COUNT 137 000272 2214 ISZ TBLOCK 138 000273 1204 TAD BUFF 139 000274 1231 TAD C200 /GET NEW BUFFER ADDRESS 140 000275 3204 DCA BUFF 141 000276 7120 CLL CML /FORCE FORWARD MOTION 142 000277 7232 GO, CLA CML RTR /PUT IN DIRECTION BIT 143 000300 1207 TAD C1000 144 000301 1213 TAD UNIT 145 000302 6774 SDLC /INITIATE THE MOTION 146 000303 4762 JMS I CRDQAD /WAIT FOR 8 LINES TO PASS 147 000304 4762 JMS I CRDQAD 148 000305 7760 M20, 7760 /DON'T CARE IF IT DOES SKIP!!! 149 000306 6771 TSRCH, SDSS /WAIT FOR BLOCK MARK OR END ZONE 150 000307 5306 JMP .-1 151 000310 6776 SDRC 152 000311 7106 CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 153 000312 0234 AND C374 /ISOLATE M.T BITS 154 000313 1331 TAD M110 /IS IT END ZONE? 155 000314 7450 SNA 156 000315 5333 JMP ENDZ /YES..DO SOMETHING REASONABLE 157 000316 1305 TAD M20 /HOW ABOUT BLOCK MARK? 158 000317 7640 SZA CLA 159 000320 5306 JMP TSRCH /NEITHER..KEEP LOOKING 160 000321 6777 SDRD /WHAT IS THIS BLOCK'S #? 161 000322 7430 SZL /IF IN REVERSE, LOOK FOR 3 BEFORE 162 000323 1375 TAD TC3 /THE ACTUAL TARGET BLOCK 163 000324 7040 CMA 164 000325 1214 TAD TBLOCK 165 000326 7040 CMA 166 000327 7450 SNA /IS THIS THE BLOCK? 167 000330 5367 JMP TFOUND /YES..HAVE CORRECT ONE 168 000331 7670 M110, SZL SNA CLA /ARE WE HEADED PROPERLY? 169 000332 5306 JMP TSRCH /YES.. KEEP LOOKING 170 000333 6776 ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE 171 000334 7106 CLL RTL 172 000335 5277 JMP GO /EXECUTE TURN AROUND AND SEARCH 173 000336 7300 TRY3, CLA CLL /V3C 174 000337 2352 ISZ ERCNT /TRIED 3 TIMES? 175 000340 5277 JMP GO 176 000341 5344 JMP FATAL 177 000342 2210 EXIT, ISZ DTA0 /NORMAL RETURN 178 000343 7120 CLL CML 179 000344 1213 FATAL, TAD UNIT /STOP TAPE FIRST 180 000345 6774 SDLC 181 000346 7230 CLA CML RAR /EITHER 0 OR 4000 IN AC 182 000347 7402 LEAVE, HLT /GETS CIF CDF N 183 000350 5610 JMP I DTA0 184 185 000351 4351 INIT, JMS . /FIND OUT WHERE WE GOT LOADED 186 000352 1362 BASE, TAD CRDQAD 187 000353 7510 SPA /NEGATIVE ENDS LIST 188 000354 5200 JMP NXINIT 189 000355 1351 TAD INIT 190 000356 3362 DCA CRDQAD 191 000357 2356 ISZ .-1 192 000360 2352 ISZ BASE 193 000361 5352 JMP BASE 194 195 000362 0132 CRDQAD, R4LINE-BASE 196 000363 0167 CINIT2, INIT2-BASE 197 000364 0205 CSELCT, SELECT-BASE 198 000365 0173 CXUNIT, XUNIT-BASE 199 200 *367 201 000367 7630 TFOUND, SZL CLA /ARE WE IN RIGHT DIRECTION 202 000370 5277 JMP GO /NOT YET 203 000371 1206 TAD FUNCT 204 000372 7104 CLL RAL /R/W TO LINK 205 000373 7200 CLA 206 000374 0070 C70, 70 207 000375 0003 TC3, 3 208 000376 1204 TAD BUFF 209 000377 7402 XFIELD, HLT /CONTROL 'TRICKLES THROUGH 210 211 TBLOCK=DTA1 212 ERCNT=INIT+1 213 CM200=NXINIT 214 DTA2=DTA0 215 DTA3=DTA1 216 DTA4=DTA0 217 DTA5=DTA1 218 DTA6=DTA0 219 DTA7=DTA1 220 *400 221 000400 6202 CIF 0 /WE ARE IN FIELD 0 222 000401 3354 DCA XBUFF 223 000402 7010 RAR 224 000403 3341 DCA XFUNCT /READ/WRITE TO FUNCTION 225 000404 6771 RGRD, SDSS 226 000405 5204 JMP .-1 /LOOK FOR REVERSE GUARD PATTERN 227 000406 6776 SDRC 228 000407 0241 AND K77 229 000410 1355 TAD CM32 230 000411 7640 SZA CLA /IF NOT REV. GUARD, KEEP LOOKING 231 000412 5204 JMP RGRD 232 000413 1226 TAD C7600 233 000414 3343 DCA WORDS /128 WORDS/BLOCK 234 000415 1341 TAD XFUNCT 235 000416 7700 K7700, SMA CLA /IS IT READ OR WRITE? 236 000417 5251 JMP TREAD 237 000420 6776 SDRC /CHECK FOR WRITE LOCKOUT 238 000421 0263 AND TC300 239 000422 7100 CLL /SETUP TO RETRY IF WRITE LOCK 240 000423 7640 SZA CLA 241 000424 5752 JMP I CTRY3 /IF LOCKED OUT, ERROR 242 000425 4304 JMS R4LINE /SKIP A WORD 243 000426 7600 C7600, 7600 /CLA 244 000427 1356 TAD C1400 245 000430 1345 TAD XUNIT 246 000431 6774 SDLC /TURN ON WRITE HEAD 247 000432 7240 CLA CMA 248 000433 4275 JMS W4LINE /7777 IN REV. CHECKSUM 249 000434 7240 CLA CMA 250 000435 3342 DCA CSUM /AND ALSO TAPE CHECKSUM 251 000436 1754 WRTLP, TAD I XBUFF 252 000437 4275 JMS W4LINE 253 000440 2354 ISZ XBUFF /INCREMENT BUFF. ADD. 254 000441 0077 K77, 77 255 000442 2343 ISZ WORDS /DONE A BLOCK? 256 000443 5236 JMP WRTLP 257 000444 4275 JMS W4LINE /A 129 TH WORD OF 0 258 000445 4326 JMS GCHK /GET 6 BIT CHECKSUM 259 000446 4275 JMS W4LINE /WRITE IT TO TAPE 260 000447 4275 JMS W4LINE /LET CHECK SUM FINISH 261 000450 5753 JMP I CRWCOM /SEE IF WE ARE FINISHED 262 263 000451 4304 TREAD, JMS R4LINE 264 000452 4304 JMS R4LINE /SKIP CONTROL WORDS 265 000453 4304 JMS R4LINE 266 000454 0241 AND K77 /CHECKSUM 267 000455 1216 TAD K7700 268 000456 3342 DCA CSUM 269 000457 4304 RDLP, JMS R4LINE 270 000460 4311 JMS EFUN /ADD WORD TO CHECKSUM 271 000461 3754 DCA I XBUFF 272 000462 2354 ISZ XBUFF 273 000463 0300 TC300, 300 274 000464 2343 ISZ WORDS /DONE BLOCK? 275 000465 5257 JMP RDLP 276 000466 4304 JMS R4LINE 277 000467 4311 JMS EFUN /CHECK SUM 129 TH WORD 278 000470 4304 JMS R4LINE 279 000471 0216 AND K7700 /READ CHECKSUM 280 000472 4311 JMS EFUN 281 000473 4326 JMS GCHK /COMPARE TAPE AND OUR CHECKSUM 282 000474 5753 JMP I CRWCOM 283 284 000475 0000 W4LINE, 0 /ADD TO CHECKSUM AND WRITE A 12 BIT 285 000476 4311 JMS EFUN /WORD 286 000477 6773 SDSQ 287 000500 5277 JMP .-1 /SKIP ON QUAD LINE FLAG 288 000501 6775 SDLD 289 000502 7200 CLA /AC IS NOT CLEARED AFTER SDLD 290 000503 5675 JMP I W4LINE 291 292 000504 0000 R4LINE, 0 /WAIT FOR QUAD FLAG AND READ 293 000505 6773 SDSQ 294 000506 5305 JMP .-1 295 000507 6777 SDRD 296 000510 5704 JMP I R4LINE 297 298 000511 0000 EFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM 299 000512 7040 CMA 300 000513 3344 DCA ETMP /ACTUALLY CHECKSUMS ON DECTAPE ARE 301 000514 1344 TAD ETMP /EQUIVALENCE OF ALL WORDS IN A RCORD 302 000515 0342 AND CSUM /6 BITS AT A TIME. SINCE EQUIVALENCE 303 000516 7041 CIA /IS ASSOCIATIVE WE DO IT 12 AT A TIME 304 000517 7104 CLL RAL /AND CONDENSE LATER. 305 000520 1344 TAD ETMP /IDENTITIES USED ARE: 306 000521 1342 TAD CSUM /A+B=(A.XOR.B)+2*(A.AND.B) 307 000522 3342 DCA CSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) 308 000523 1344 TAD ETMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) 309 000524 7040 CMA 310 000525 5711 JMP I EFUN 311 312 000526 0000 GCHK, 0 /FORM 6 BIT CHECKSUM 313 000527 7200 CLA 314 000530 1342 TAD CSUM 315 000531 7146 CLL CMA RTL 316 000532 7006 RTL 317 000533 7006 RTL 318 000534 4311 JMS EFUN 319 000535 7320 CLA CLL CML 320 000536 1342 TAD CSUM 321 000537 0216 AND K7700 322 000540 5726 JMP I GCHK 323 324 000541 0000 INIT2, 0 /TIS INITIALIZES LOCS IN PAGE 2 325 000542 1352 INIT3, TAD CTRY3 326 000543 7450 SNA 327 000544 5741 JMP I INIT2 /0 ENDS LIST 328 000545 1341 TAD INIT2 329 000546 3352 DCA CTRY3 /UPDATE THE LIST 330 000547 2346 ISZ .-1 331 000550 2342 ISZ INIT3 332 000551 5342 JMP INIT3 333 334 000552 0134 CTRY3, TRY3-BASE2 335 000553 0060 CRWCOM, TRWCOM-BASE2 336 000554 0000 XBUFF, 0 /0 MUST TERMINATE IT!! 337 000555 7746 CM32, -32 338 000556 1400 C1400, 1400 339 340 000557 0000 SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT 341 000560 1345 TAD XUNIT /AND ^C TYPED 342 000561 6774 SDLC 343 000562 6776 SDRC /GET STATUS AND SEE IF SELECT ERROR ON 344 000563 0376 AND C100 345 000564 7650 SNA CLA 346 000565 2357 ISZ SELECT /NOPE .TAKE NORMAL OUT 347 000566 6031 KSF /SEE IF FLAG IS UP 348 000567 5757 JMP I SELECT /NO..EXIT 349 000570 1226 TAD C7600 350 000571 6034 KRS 351 000572 1377 TAD (-7603 /IS IT A ^C? 352 000573 7640 SZA CLA 353 000574 5757 JMP I SELECT /NO..EXIT 354 000575 5626 JMP I C7600 355 356 000576 0100 C100, 100 357 358 XFUNCT=INIT2 359 CSUM=XFUNCT+1 360 WORDS=CSUM+1 361 ETMP=WORDS+1 362 XUNIT=ETMP+1 363 000577 0175 $$$$$$$ BASE 0352 BASE2 0202 BUFF 0204 C100 0576 C1000 0207 C1400 0556 C200 0231 C374 0234 C6203 0247 C70 0374 C7600 0426 CINIT2 0363 CM200 0200 CM32 0555 CRDQAD 0362 CRWCOM 0553 CSELCT 0364 CSUM 0542 CTRY3 0552 CXUNIT 0365 DTA0 0210 DTA1 0214 DTA1X 0220 DTA2 0210 unreferenced DTA3 0214 unreferenced DTA4 0210 unreferenced DTA5 0214 unreferenced DTA6 0210 unreferenced DTA7 0214 unreferenced EFUN 0511 ENDZ 0333 ERCNT 0352 ETMP 0544 EXIT 0342 FATAL 0344 FUNCT 0206 GCHK 0526 GO 0277 INIT 0351 INIT2 0541 INIT3 0542 JINIT 0250 K77 0441 K7700 0416 LEAVE 0347 M110 0331 M20 0305 NXINIT 0200 PGCT 0205 R4LINE 0504 RDLP 0457 RGRD 0404 SDLC 6774 SDLD 6775 SDRC 6776 SDRD 6777 SDSQ 6773 SDSS 6771 SDST 6772 SELECT 0557 TBLOCK 0214 TC3 0375 TC300 0463 TDVERS 0004 TFOUND 0367 TREAD 0451 TRWCOM 0262 TRY3 0336 TSRCH 0306 UNIT 0213 W4LINE 0475 WORDS 0543 WRTLP 0436 XBUFF 0554 XFIELD 0377 XFUNCT 0541 XUNIT 0545