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