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