1 /4 TD8E HANDLER FOR BUILD..TD8E-C 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 TD8C;DEVICE DTA4;4210;4012;ZBLOCK 2 000002 7003 000003 0424 000004 0164 000005 4210 000006 4012 000007 0000 000010 0000 48 000011 2404 DEVICE TD8C;DEVICE DTA5;4210;4016;ZBLOCK 2 000012 7003 000013 0424 000014 0165 000015 4210 000016 4016 000017 0000 000020 0000 49 50 SDSS=6751 /SKIP ON SINGLE LINE FLAG 51 SDST=6752 /SKIP ON TIME ERROR 52 SDSQ=6753 /SKIP ON QUAD LINE FLAG 53 SDLC=6754 /LOAD TAPE COMMAND REGISTER 54 SDLD=6755 /LOAD DATA REGISTER 55 SDRC=6756 /READ COMMAND REGISTER 56 SDRD=6757 /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 /MAINTENANCE RELEASE CHANGES: 67 68 /5. FIXED ^C BUG 69 /6. MADE CODING IMPROVEMENTS 70 /7. FIXED RETRY BUG 71 72 73 74 *200 75 76 000200 7600 NXINIT, 7600 /CLEAR AC HERE!!! 77 000201 4605 JMS I CINIT2 /PART OF INITIALIZATION..DO THE PART 78 000202 3227 BASE2, DCA JINIT /ON SECOND PAGE AND THEN TO JINIT 79 000203 5227 JMP JINIT 80 000204 0130 CRDQAD, R4LINE-BASE 81 000205 0165 CINIT2, INIT2-BASE 82 000206 0203 CSELCT, SELECT-BASE 83 000207 0171 CXUNIT, XUNIT-BASE 84 85 000210 4000 BUFF, 4000 /V3 86 000211 0000 PGCT, 0 87 88 000212 0004 DTA0, TDVERSION /ENTRY FOR UNIT 0 89 000213 7300 CLA CLL 90 000214 5222 JMP DTA1X 91 000215 0000 UNIT, 0 /FILLER WORD 92 000216 0004 DTA1, TDVERSION /ENTRY FOR UNIT 1 93 000217 7320 CLA CLL CML 94 000220 1216 TAD DTA1 95 000221 3212 DCA DTA0 /PICK UP ARGS AT DTA0 96 000222 7010 DTA1X, RAR 97 000223 3215 DCA UNIT /UNIT # FROM LINK 98 000224 6214 RDF 99 000225 1252 TAD C6203 100 000226 3351 DCA LEAVE /SET UP EXIT FROM HANDLER 101 000227 5353 JINIT, JMP INIT 102 000230 1612 TAD I DTA0 103 000231 3364 DCA FUNCT /SAVE FUNCTION WORD 104 000232 1364 TAD FUNCT 105 000233 7104 CLL RAL 106 000234 0200 C200, AND CM200 /GET A PAGE COUNT 107 000235 3211 DCA PGCT 108 000236 1364 TAD FUNCT 109 000237 0374 C374, AND C70 /ISOLATE FIELD OF TRANSFER 110 000240 1252 TAD C6203 111 000241 3377 DCA XFIELD 112 000242 2212 ISZ DTA0 /POINT TO BUFFER 113 000243 1612 TAD I DTA0 114 000244 3210 DCA BUFF 115 000245 2212 ISZ DTA0 /POINT TO RECORD 116 000246 1612 TAD I DTA0 117 000247 7104 CLL RAL /CONVERT TO DECTAPE BLOCKS 118 000250 3216 DCA TBLOCK 119 000251 2212 ISZ DTA0 /POINT TO ERROR RET. 120 000252 6203 C6203, CIF CDF 0 121 122 000253 7346 CLA CLL CMA RTL 123 000254 3354 DCA ERCNT /3 ERROR TRIES 124 000255 1215 TAD UNIT 125 000256 3607 DCA I CXUNIT 126 000257 4606 JMS I CSELCT /CHECK FOR SELEC ERROR 127 000260 5257 JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR 128 000261 1364 TAD FUNCT 129 000262 7110 CLL RAR 130 000263 5301 JMP GO /OK.. START THE SEARCH 131 000264 6752 TRWCOM, SDST /TIME OR CHECK SUM ERROR? 132 000265 7640 SZA CLA 133 000266 5340 JMP TRY3 /YES TRY UP TO 3 TIMES 134 000267 1211 TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? 135 000270 1200 TAD CM200 136 000271 7450 SNA 137 000272 5344 JMP EXIT /YES.. DONE THIS TRANSFER 138 000273 3211 DCA PGCT /NEW PAGE COUNT 139 000274 2216 ISZ TBLOCK 140 000275 1210 TAD BUFF 141 000276 1234 TAD C200 /GET NEW BUFFER ADDRESS 142 000277 3210 DCA BUFF 143 000300 7120 CLL CML /FORCE FORWARD MOTION 144 000301 7232 GO, CLA CML RTR /PUT IN DIRECTION BIT 145 000302 1365 TAD C1000 146 000303 1215 TAD UNIT 147 000304 6754 SDLC /INITIATE THE MOTION 148 000305 4604 JMS I CRDQAD /WAIT FOR 8 LINES TO PASS 149 000306 4604 JMS I CRDQAD 150 000307 7760 M20, 7760 /DON'T CARE IF IT DOES SKIP!!! 151 000310 6751 TSRCH, SDSS /WAIT FOR BLOCK MARK OR END ZONE 152 000311 5310 JMP .-1 153 000312 6756 SDRC 154 000313 7106 CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 155 000314 0237 AND C374 /ISOLATE M.T BITS 156 000315 1333 TAD M110 /IS IT END ZONE? 157 000316 7450 SNA 158 000317 5335 JMP ENDZ /YES..DO SOMETHING REASONABLE 159 000320 1307 TAD M20 /HOW ABOUT BLOCK MARK? 160 000321 7640 SZA CLA 161 000322 5310 JMP TSRCH /NEITHER..KEEP LOOKING 162 000323 6757 SDRD /WHAT IS THIS BLOCK'S #? 163 000324 7430 SZL /IF IN REVERSE, LOOK FOR 3 BEFORE 164 000325 1375 TAD TC3 /THE ACTUAL TARGET BLOCK 165 000326 7040 CMA 166 000327 1216 TAD TBLOCK 167 000330 7040 CMA 168 000331 7450 SNA /IS THIS THE BLOCK? 169 000332 5367 JMP TFOUND /YES..HAVE CORRECT ONE 170 000333 7670 M110, SZL SNA CLA /ARE WE HEADED PROPERLY? 171 000334 5310 JMP TSRCH /YES.. KEEP LOOKING 172 000335 6756 ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE 173 000336 7106 CLL RTL 174 000337 5301 JMP GO /EXECUTE TURN AROUND AND SEARCH 175 000340 7300 TRY3, CLA CLL /V3C 176 000341 2354 ISZ ERCNT /TRIED 3 TIMES? 177 000342 5301 JMP GO 178 000343 5346 JMP FATAL 179 000344 2212 EXIT, ISZ DTA0 /NORMAL RETURN 180 000345 7120 CLL CML 181 000346 1215 FATAL, TAD UNIT /STOP TAPE FIRST 182 000347 6754 SDLC 183 000350 7230 CLA CML RAR /EITHER 0 OR 4000 IN AC 184 000351 7402 LEAVE, HLT /GETS CIF CDF N 185 000352 5612 JMP I DTA0 186 187 000353 4353 INIT, JMS . /FIND OUT WHERE WE GOT LOADED 188 000354 1204 BASE, TAD CRDQAD 189 000355 7510 SPA /NEGATIVE ENDS LIST 190 000356 5200 JMP NXINIT 191 000357 1353 TAD INIT 192 000360 3204 DCA CRDQAD 193 000361 2360 ISZ .-1 194 000362 2354 ISZ BASE 195 000363 5354 JMP BASE 196 197 000364 0000 FUNCT, 0 198 000365 1000 C1000, 1000 199 200 *367 201 000367 7630 TFOUND, SZL CLA /ARE WE IN RIGHT DIRECTION 202 000370 5301 JMP GO /NOT YET 203 000371 1364 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 1210 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 6751 RGRD, SDSS 226 000405 5204 JMP .-1 /LOOK FOR REVERSE GUARD PATTERN 227 000406 6756 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 6756 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 6754 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 6753 SDSQ 287 000500 5277 JMP .-1 /SKIP ON QUAD LINE FLAG 288 000501 6755 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 6753 SDSQ 294 000506 5305 JMP .-1 295 000507 6757 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 0136 CTRY3, TRY3-BASE2 335 000553 0062 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 6754 SDLC 343 000562 6756 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 ^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 0354 BASE2 0202 BUFF 0210 C100 0576 C1000 0365 C1400 0556 C200 0234 C374 0237 C6203 0252 C70 0374 C7600 0426 CINIT2 0205 CM200 0200 CM32 0555 CRDQAD 0204 CRWCOM 0553 CSELCT 0206 CSUM 0542 CTRY3 0552 CXUNIT 0207 DTA0 0212 DTA1 0216 DTA1X 0222 DTA2 0212 unreferenced DTA3 0216 unreferenced DTA4 0212 unreferenced DTA5 0216 unreferenced DTA6 0212 unreferenced DTA7 0216 unreferenced EFUN 0511 ENDZ 0335 ERCNT 0354 ETMP 0544 EXIT 0344 FATAL 0346 FUNCT 0364 GCHK 0526 GO 0301 INIT 0353 INIT2 0541 INIT3 0542 JINIT 0227 K77 0441 K7700 0416 LEAVE 0351 M110 0333 M20 0307 NXINIT 0200 PGCT 0211 R4LINE 0504 RDLP 0457 RGRD 0404 SDLC 6754 SDLD 6755 SDRC 6756 SDRD 6757 SDSQ 6753 SDSS 6751 SDST 6752 SELECT 0557 TBLOCK 0216 TC3 0375 TC300 0463 TDVERS 0004 TFOUND 0367 TREAD 0451 TRWCOM 0264 TRY3 0340 TSRCH 0310 UNIT 0215 W4LINE 0475 WORDS 0543 WRTLP 0436 XBUFF 0554 XFIELD 0377 XFUNCT 0541 XUNIT 0545