/ TD8E Dectape DUMP Program Page 1 1 / TD8E Dectape DUMP Program 2 / This program will send a Dectape image out the console port. 3 / The format of the data sent is 0xff (0377), 0xfd if read error, 4 / followed by 384 word of data for each block. 5 / After the last block a 0xfe (0376) is sent. The 0xfe will be sent when 6 / either the specified number of blocks are read or end of tape found. 7 / with a two byte checksum, low 8 bits first then upper 4. 8 / The words in a block are sent as three bytes for each 2 words. 9 / 1 = low 8 bits first word 10 / 2 = upper 4 bits first and lower 4 bits second 11 / 3 = upper 8 bits second word 12 / 13 / The program (PC) receiving the data should be started before this program 14 / 15 / To run start at 0200. 16 / SR 11 should be drive, only 0 and 1 supported without reassembling 17 / SR 6-8 should be maximum memory field in computer, needs 8k minimum 18 / The receiving program should be running first. 19 / At normal exit hitting cont will restart the program 20 / 21 / Should halt at label finish (140) with number of recoverable errors in AC 22 / The current block being read will be displayed in the AC 23 / while running. 24 / 25 / If a unrecoverable error occurs the program will halt with the error in 26 / the AC. Hit continue to dump more or comment out hlt, search for *****. 27 / The PC program will print out the bad location if an error occurs 28 / 29 / We will retry each read up to 16 times on error 30 / 31 / This transfers the standard 384 word by 1474 blocks used by PDP10 etc. 32 / Other formats can be handled by changing constants below 33 34 0030 INAD=030 / Address of serial input, 30 for console 35 6030 KCF2=6000 INAD 36 6031 KSF2=6001 INAD 37 6032 KCC2=6002 INAD 38 6034 KRS2=6004 INAD 39 6035 KIE2=6005 INAD 40 6036 KRB2=6006 INAD 41 42 0040 OUTAD=040 / Address of serial output, 40 for console 43 6040 TFL2=6000 OUTAD 44 6041 TSF2=6001 OUTAD 45 6042 TCF2=6002 OUTAD 46 6044 TPC2=6004 OUTAD 47 6045 TSK2=6005 OUTAD 48 6046 TLS2=6006 OUTAD 49 50 /2 TD8E INITIALIZER PROGRAM, V7A / TD8E Dectape DUMP Program Page 2 51 / 52 /COPYRIGHT (C) 1975, 1977 53 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. 54 / 55 / 56 / 57 /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A 58 /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- 59 /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER 60 /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE 61 /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO 62 /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE 63 /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. 64 / 65 / 66 /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT 67 /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL 68 /EQUIPMRNT COROPATION. 69 / 70 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS 71 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. 72 / 73 / 74 / 75 / 76 / 77 / 78 79 /DECEMBER 21, 1973 GB/RL/EF/SR 80 81 /ABSTRACT-- 82 / THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL 83 /DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE 84 /CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT 85 /WHICH IS COMPATIBLE WITH OS/8 DEVICE HANDLER CALLING 86 /SEQUENCES. 87 88 /FIXES SINCE FIELD-TEST RELEASE: 89 90 /1. FIXED BUG RE CLA ON RETRY AFTER ERROR 91 /2. ALLOWED FINAL BOOTSTRAP TO BE INTO A WRITE-LOCKED DEVICE 92 93 /OS/8 V3D CHANGES: 94 95 /3. FIXED BUG RE TD8E BUILD (V6B PATCH) 96 97 /THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE 98 /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS 99 /CONTROL: 100 /A) WHAT DRIVES (UNITS 0-7) WILL BE USED / TD8E Dectape DUMP Program Page 3 101 /B) THE ORIGIN OF THE TWO PAGE ROUTINE 102 /C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN 103 /D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN 104 105 /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD 106 /DEC VERSION OF THIS ROUTINE: 107 108 0010 DRIVE=10 /UNITS 0 AND 1 SELECTED 109 0600 ORIGIN=600 /ENTER AT ORIGIN, ORIGIN+4 110 0000 AFIELD=0 /INITIAL FIELD SETTING 111 0000 MFIELD=00 /AFIELD*10=MFIELD 112 0600 WDSBLK=600 /384 WORDS PER BLOCK 113 114 /THE USE OF THE PARAMETERS IS AS FOLLOWS: 115 116 / DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED 117 / DRIVE=10 IMPLIES UNITS 0 &1 118 / DRIVE=20 IMPLIES UNITS 2&3 119 / DRIVE=30 IMPLIES UNITS 4&5 120 / DRIVE=40 IMPLIES UNITS 6&7 121 122 /ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT 123 / MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND 124 /THAT THIS IS A TWO PAGE ROUTINE. 125 126 /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE 127 / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. 128 129 /MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. 130 / THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES 131 / THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. 132 133 /WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE 134 / IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR 135 / 128 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN 136 / 129 DECIMAL ??? (DJG) 137 / BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED 138 / FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS 139 / FORMATTED TO CONTAIN. 140 141 /IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN 142 /FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS 143 /PER BLOCK, THE PARAMETERS WOULD BE: 144 / DRIVE=20 145 / ORIGIN=3000 146 / AFIELD=2 147 / MFIELD=20 148 / WDSBLK=400 149 /THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE 150 /CALLING SEQUENCE FOR OS/8 DEVICE HANDLERS. / TD8E Dectape DUMP Program Page 4 151 /THE CALLING SEQUENCE IS: 152 153 / CDF CURRENT 154 / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN 155 / JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE 156 /AND ORIGIN+4 FOR ODD NUMBERED DRIVE. 157 / ARG1 158 / ARG1B (DJG) 159 / ARG2 160 / ARG3 161 / ERROR RETURN 162 / NORMAL RETURN 163 164 /THE ARGUMENTS ARE: 165 166 /ARG1: FUNCTION WORD BIT0: 0=READ, 1=WRITE 167 / BITS 1-5: UNUSED, WAS # BLOCKS IN OPERATION (DJG) 168 / BITS 6-8: FIELD OF BUFFER AREA 169 / BIT 9: UNUSED 170 / BIT 10: # OF WORDS/BLOCK. 171 / 0= WDSBLK, 1=WDSBLK-1 172 / BIT 11: 1=START FORWARD, 0=REVERSE 173 /ARG1A: # OF BLOCKS IN OPERATIONA (DJG) 174 /ARG2: BUFFER ADDRESS FOR OPERATION 175 /ARG3: STARTING BLOCK FOR OPERATION 176 177 /ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: 178 /A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, 179 / TOO GREAT A BLOCK NUMBER 180 / FATAL ERRORS TAKE ERROR RETURN WITH THE 181 / AC=4000. 182 /B) NON-FATAL- SELECT ERROR. 183 / IF NO PROPER UNIT IS SELECTED, THE ERROR 184 / RETURN IS TAKEN WITH CLEAR AC. 185 /FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. 186 /THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED 187 /BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR. 188 189 /THE TD8E IOT'S ARE: 190 6771 SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG 191 6772 SDST=7002-DRIVE /SKIP ON TIMING ERROR 192 6773 SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG 193 6774 SDLC=7004-DRIVE /LOAD COMMAND REGISTER 194 6775 SDLD=7005-DRIVE /LOAD DATA REGISTER 195 6776 SDRC=7006-DRIVE /READ COMMAND REGISTER 196 6777 SDRD=7007-DRIVE /READ DATA REGISTER 197 198 /THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. 199 /THE OTHERS CONTROL UNITS 2-7. 200 / TD8E Dectape DUMP Program Page 5 201 / THIS HANDLER USES DECTAPE BLOCKS NOT OS/8 BLOCKS ! 202 203 0600 *ORIGIN 204 205 / MODIFIED SO BIT 0 ON ENTRY IS UNIT 1 206 00600 0000 DTA0, 0 207 00601 3362 DCA UNIT /SAVE UNIT POSITION 208 00602 3053 DCA EOT /NO EOT ERROR 209 00603 6214 RDF 210 00604 1043 TAD C6203 /GET DATA FIELD AND SETUP RETURN 211 00605 3356 DCA LEAVE 212 00606 1600 TAD I DTA0 /GET FUNCTION WORD 213 00607 6775 SDLD /PUT FUNCTION INTO DATA REGISTER 214 00610 7112 CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER 215 /BLOCK INTO LINK 216 00611 7630 SZL CLA /KNOCK ONE OFF WDSBLK? 217 00612 7001 IAC /YES 218 00613 1022 TAD MWORDS 219 00614 3023 DCA WCOUNT /STORE MASTER WORD COUNT 220 00615 2200 ISZ DTA0 /TO BLOCK COUNT (DJG) 221 00616 1600 TAD I DTA0 / (DJG) 222 00617 7041 CIA / (DJG) 223 00620 3365 DCA PGCT / (DJG) 224 00621 2200 ISZ DTA0 /TO BUFFER 225 00622 1600 TAD I DTA0 226 00623 3050 DCA XBUFF /SAVE ADDRESS (DJG) 227 / DCA BUFF 228 00624 2200 ISZ DTA0 /TO BLOCK NUMBER 229 00625 1600 TAD I DTA0 230 00626 3052 DCA BLOCK 231 00627 2200 ISZ DTA0 /POINT TO ERROR EXIT 232 00630 6203 CIF CDF MFIELD /TO ROUTINES DATA FIELD 233 / SDRD /GET FUNCTION INTO AC 234 / CLL RAL 235 / AND CM200 /GET # PAGES TO XFER 236 / DCA PGCT 237 00631 6777 SDRD 238 00632 0376 AND C70 /GET FIELD FOR XFER 239 00633 1044 TAD C6201 /FORM CDF N 240 00634 3254 DCA XFIELD /IF=0 AND DF=N AT XFER. 241 00635 1362 TAD UNIT /TEST FOR SELECT ERROR 242 00636 6774 SDLC 243 00637 7200 CLA / Moved here because my drive 1 is slow selecting 244 00640 1020 TAD RETRY 245 00641 3367 DCA TRYCNT /3 ERROR TRIES 246 00642 6776 SDRC 247 00643 0041 AND C100 248 00644 7640 SZA CLA 249 00645 5352 JMP FATAL-1 250 00646 6777 SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. / TD8E Dectape DUMP Program Page 6 251 00647 3763 DCA I CXFUN 252 00650 1023 TAD WCOUNT 253 00651 3766 DCA I CXWCT 254 00652 6777 SDRD /GET MOTION BIT TO LINK 255 00653 7110 CLL RAR 256 00654 7402 XFIELD, HLT /INTO NEXT PAGE 257 00655 5270 JMP GO /AND START THE MOTION. 258 00656 6772 RWCOM, SDST /ANY CHECKSUM ERRORS? 259 00657 7640 SZA CLA /OR CHECKSUM ERRORS? 260 00660 5342 JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS 261 /SET AT RWCOM. GETCHK SETS IT. 262 / TAD PGCT /NO ERROR..FINISHED XFER? 263 / TAD CM200 264 / SNA 265 00661 2365 ISZ PGCT / (DJG) 266 00662 7410 SKP / (DJG) 267 00663 5351 JMP EXIT /ALL DONE. GET OUT 268 / DCA PGCT /NEW PAGE COUNT 269 00664 2052 ISZ BLOCK /NEXT BLOCK TO XFER 270 / TAD WCOUNT /FORM NEXT BUFFER ADDRESS 271 / CIA 272 / TAD BUFF 273 / DCA XBUFF /SAVE ADDRESS (DJG) 274 / DCA BUFF / (DJG) 275 00665 1020 TAD RETRY 276 00666 3367 DCA TRYCNT /SET ERROR RETRY COUNT 277 00667 7120 CLL CML /FORCES MOTION FORWARD 278 00670 7232 GO, CLA CML RTR /LINK BECOMES MOTION BIT 279 00671 1042 TAD C1000 280 00672 1362 TAD UNIT /PUT IN 'GO' AND UNIT # 281 00673 6774 SDLC /LOOK FOR BLOCK NO. 282 00674 7200 CLA 283 00675 3053 DCA EOT /NO EOT ERROR 284 00676 1050 TAD XBUFF 285 00677 3047 DCA OLDBUF 286 00700 6214 RDF 287 00701 1044 TAD C6201 288 00702 3343 DCA OLDFLD 289 00703 4760 JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK 290 00704 4760 JMS I CRDQUD 291 00705 7600 CM200, 7600 /COULD HAVE SAVED A LOC. HERE 292 00706 6771 SRCH, SDSS 293 00707 5306 JMP .-1 /WAIT FOR SINGLE LINE FLAG 294 00710 6776 SDRC 295 00711 7106 CLL RTL /DIRECTION TO LINK. INFO BITS 296 /ARE SHIFTED. 297 00712 0051 AND C374 /ISOLATE MARK TRACK BITS 298 00713 1334 TAD M110 /IS IT END ZONE? 299 00714 7440 SZA /THE LINK STAYS SAME THRU THIS 300 00715 5321 JMP CKBM / TD8E Dectape DUMP Program Page 7 301 00716 7001 IAC 302 00717 3053 DCA EOT /EOT ERROR 303 00720 5336 JMP ENDZ 304 00721 1364 CKBM, TAD M20 /CHECK FOR BLOCK MARK 305 00722 7640 SZA CLA 306 00723 5306 JMP SRCH 307 00724 6777 SDRD /GET THE BLOCK NUMBER 308 00725 7430 SZL /IF WE ARE IN REVERSE, LOOK FOR 3 309 /BLOCKS BEFORE TARGET BLOCK. THIS 310 /ALLOWS TURNAROUND AND UP TO SPEED. 311 00726 1377 TAD C3 /REVERSE 312 00727 7040 CMA 313 00730 1052 TAD BLOCK 314 00731 7040 CMA /IS IT RIGHT BLOCK? 315 00732 7450 SNA 316 00733 5372 JMP FOUND /YES..HOORAY! 317 00734 7670 M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? 318 /ABOVE SNA IS SUPERFLUOUS. 319 00735 5306 JMP SRCH /YES 320 00736 6776 ENDZ, SDRC /WE ARE IN THE END ZONE 321 00737 7106 CLL RTL /DIRECTION TO LINK 322 00740 7630 SZL CLA /ARE WE IN REVERSE? 323 00741 5270 JMP GO /YES..TURN US AROUND 324 /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR 325 00742 7200 TRY3, CLA 326 00743 7000 OLDFLD, NOP 327 00744 1047 TAD OLDBUF 328 00745 3050 DCA XBUFF 329 00746 2367 ISZ TRYCNT 330 00747 5270 JMP GO /TRY 3 TIMES 331 00750 5353 JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN 332 00751 2200 EXIT, ISZ DTA0 333 00752 7120 CLL CML /AC=0 ON NORMAL RETURN 334 00753 1362 FATAL, TAD UNIT 335 00754 6774 SDLC /STOP THE UNIT 336 00755 7230 CLA CML RAR 337 00756 7402 LEAVE, HLT /INSTRUCTION OVERWRITTEN 338 00757 5600 JMP I DTA0 339 340 341 00760 1126 CRDQUD, RDQUAD 342 /WCOUNT, 0 (MOVED PAGE 0 DJG) 343 00761 0000 BUFF, 0 344 /MWORDS, -WDSBLK (MOVED PAGE 0 DJG) 345 00762 0000 UNIT, 0 346 00763 1166 CXFUN, XFUNCT 347 00764 7760 M20, -20 348 00765 0000 PGCT, 0 349 00766 1173 CXWCT, XWCT 350 00767 7775 TRYCNT, -3 / TD8E Dectape DUMP Program Page 8 351 352 353 0772 *ORIGIN+172 354 00772 7630 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? 355 00773 5270 JMP GO /WRONG..TURN AROUND 356 00774 1362 TAD UNIT /PUT UNIT INTO LINK 357 00775 7104 CLL RAL /AC IS NOW 0 358 00776 0070 C70, 70 /********DON'T MOVE THIS!!!!****** 359 00777 0003 C3, 3 360 / TAD BUFF /GET BUFFER ADDRESS (DJG) 361 /XFIELD, HLT /INTO NEXT PAGE 362 1000 *ORIGIN+200 363 01000 6202 CIF MFIELD 364 / DCA XBUFF /SAVE ADDRESS (DJG) 365 01001 7010 RAR /NOW GET UNIT # 366 01002 3333 DCA XUNIT 367 01003 6776 SDRC 368 01004 6774 SDLC 369 01005 6771 REVGRD, SDSS 370 01006 5205 JMP .-1 /LOOK FOR REVERSE GUARD 371 01007 6776 SDRC 372 01010 0261 AND K77 373 01011 1367 TAD CM32 /IS IT REVERSE GUARD? 374 01012 7640 SZA CLA 375 01013 5205 JMP REVGRD /NO.KEEP LOOKING 376 01014 1373 TAD XWCT 377 01015 3372 DCA WORDS /WORD COUNTER 378 01016 1366 TAD XFUNCT /GET FUNCTION READ OR WRITE 379 01017 7700 K7700, SMA CLA 380 01020 5262 JMP READ /NEG. IS WRITE 381 01021 6776 WRITE, SDRC 382 01022 0316 AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR 383 01023 7120 CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS 384 01024 7640 SZA CLA 385 01025 5764 JMP I CFATAL /FATAL ERROR. LINK MUST BE ON 386 01026 4326 JMS RDQUAD /NO ONE EVER USES THIS WORD! 387 01027 7600 C7600, 7600 388 01030 1370 TAD C1400 389 01031 1333 TAD XUNIT /INITIATE WRITE MODE 390 01032 6774 SDLC 391 01033 7240 CLA CMA 392 01034 4317 JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM 393 01035 7240 CLA CMA 394 01036 3371 DCA CHKSUM 395 01037 1450 WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! 396 01040 4317 JMS WRQUAD 397 01041 2050 ISZ XBUFF /BUMP CORE POINTER 398 01042 5247 JMP STFLD1+1 /NOT AT END OF FIELD (DJG) 399 01043 6214 RDF 400 01044 1377 TAD (6211 / TD8E Dectape DUMP Program Page 9 401 01045 3246 DCA STFLD1 402 01046 7000 STFLD1, NOP 403 01047 2372 ISZ WORDS /DONE THIS BLOCK? 404 01050 5237 JMP WRLP /NOT YET..LOOP A WHILE 405 01051 1366 TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? 406 01052 7112 CLL RTR /IF NO, WRITE A 0 WORD 407 01053 7630 SZL CLA 408 01054 4317 JMS WRQUAD /WRITE A WORD OF 0 409 01055 4350 JMS GETCHK /DO THE CHECK SUM 410 01056 4317 JMS WRQUAD /WRITE FORWARD CHECKSUM 411 01057 4317 JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN 412 01060 5765 JMP I CRWCOM 413 01061 0077 K77, 77 /ABOVE MAY SKIP (NOT ANYMORE DJG) 414 01062 4326 READ, JMS RDQUAD 415 01063 4326 JMS RDQUAD 416 01064 4326 JMS RDQUAD /SKIP CONTROL WORDS 417 01065 0261 AND K77 418 01066 1217 TAD K7700 /TACK 7700 ONTO CHECKSUM. 419 01067 3371 DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY 420 01070 4326 RDLP, JMS RDQUAD 421 01071 4333 JMS EQUFUN /COMPUT CHECKSUM AS WE GO 422 01072 3450 DCA I XBUFF /IT GETS CONDENSED LATER 423 01073 2050 ISZ XBUFF /AT END OF FIELD? 424 01074 5301 JMP STFLD2+1 /NOT AT END OF FIELD (DJG) 425 01075 6214 RDF 426 01076 1377 TAD (6211 427 01077 3300 DCA STFLD2 428 01100 7000 STFLD2, NOP 429 01101 2372 ISZ WORDS /DONE THIS OP? 430 01102 5270 JMP RDLP /NO SUCH LUCK 431 01103 1366 TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND 432 01104 7112 CLL RTR /CHECKSUM THE LAST TAPE WORD 433 01105 7620 SNL CLA 434 01106 5311 JMP RDLP2 435 01107 4326 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK 436 01110 4333 JMS EQUFUN /CHECKSUM IT 437 01111 4326 RDLP2, JMS RDQUAD /READ CHECKSUM 438 01112 0217 AND K7700 439 01113 4333 JMS EQUFUN 440 01114 4350 JMS GETCHK /GET SIX BIT CHECKSUM 441 01115 5765 JMP I CRWCOM 442 01116 0300 C300, 300 /PROTECTION (NOT ANYMORE DJG) 443 444 01117 0000 WRQUAD, 0 /WRITE OUT A 12 BIT WORD 445 01120 4333 JMS EQUFUN /ADD THIS TO CHECKSUM 446 01121 6773 SDSQ /SKIP ON QUADLINE FLAG 447 01122 5321 JMP .-1 448 01123 6775 SDLD /LOAD DATA ONTO BUS 449 01124 7200 CLA /SDLD DOESN'T CLEAR AC 450 01125 5717 JMP I WRQUAD / TD8E Dectape DUMP Program Page 10 451 452 01126 0000 RDQUAD, 0 /READ A 12 BIT WORD 453 01127 6773 SDSQ 454 01130 5327 JMP .-1 455 01131 6777 SDRD /READ DATA 456 01132 5726 JMP I RDQUAD 457 458 XUNIT, 459 01133 0000 EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM 460 01134 7040 CMA 461 01135 3374 DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE 462 01136 1374 TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD 463 01137 0371 AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE 464 01140 7041 CIA /IS ASSOCIATIVE, WE CAN DO IT 12 465 01141 7104 CLL RAL /BITS AT A TIME AND CONDENSE LATER. 466 01142 1374 TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: 467 01143 1371 TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) 468 01144 3371 DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) 469 01145 1374 TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) 470 01146 7040 CMA 471 01147 5733 JMP I EQUFUN 472 473 01150 0000 GETCHK, 0 /FORM 6 BIT CHECKSUM 474 01151 7200 CLA 475 01152 1371 TAD CHKSUM 476 01153 7040 CMA 477 01154 7106 CLL RTL 478 01155 7006 RTL 479 01156 7006 RTL 480 01157 4333 JMS EQUFUN 481 01160 7320 CLA CLL CML /FORCES LINK ON AT RWCOM 482 01161 1371 TAD CHKSUM 483 01162 0217 AND K7700 484 01163 5750 JMP I GETCHK 485 486 01164 0753 CFATAL, FATAL 487 01165 0656 CRWCOM, RWCOM 488 01166 0000 XFUNCT, 0 489 01167 7746 CM32, -32 490 01170 1400 C1400, 1400 491 01171 0000 CHKSUM, 0 492 01172 0000 WORDS, 0 493 01173 0000 XWCT, 0 494 01174 0000 EQUTMP, 0 495 01177 6211 496 0020 *20 497 00020 7774 RETRY, 7774 / RETRY UP TO 4 TIME 498 00021 1102 NUMBLK, 1102 / NUMBER OF BLOCKS 578 FOR PDP10 499 00022 7200 MWORDS, -WDSBLK / WORDS PER BLOCK / TD8E Dectape DUMP Program Page 11 500 00023 0000 WCOUNT, 0 501 00024 0012 BLKFLD, 12 / 10 384 word blocks per field 502 / WRAPPING PAST END OF LAST FIELD DOESN'T WORK 503 00025 0000 FIELDS, 0 504 00026 0000 RDSIZE, 0 / NUMBER BLOCKS PER READ 505 00027 0000 CBLOCK, 0 / CURRENT BLOCK TO XFER 506 00030 0000 CLKSUM, 0 507 00031 0000 DRVSEL, 0 508 00032 0377 READST, 377 509 00033 0000 LOC, 0 510 00034 0000 LEN, 0 511 00035 0000 BCNT, 0 / BLOCKS TO SEND TO PC 512 00036 0000 TEMP, 0 513 00037 0017 C17, 17 514 00040 0360 C360, 360 515 00041 0100 C100, 100 516 00042 1000 C1000, 1000 517 00043 6203 C6203, 6203 518 00044 6201 C6201, 6201 519 00045 0000 CHKSM, 0 520 00046 0000 ERRCN2, 0 521 00047 0000 OLDBUF, 0 / USED BY DTA0 ROUTINE 522 00050 0000 XBUFF, 0 / USED BY DTA0 ROUTINE 523 00051 0374 C374, 374 / USED BY DTA0 ROUTINE 524 00052 0000 BLOCK, 0 / USED BY DTA0 ROUTINE 525 00053 0000 EOT, 0 / END OF TAPE ERROR FROM DTA0 ROUTINE 526 527 0140 *140 528 00140 7402 FINISH, HLT / Normal good halt 529 00141 5777@ JMP START 530 531 0200 *200 532 00200 6201 START, CDF 0 533 00201 6007 CAF 534 00202 7704 CLA CLL OSR / Get drive 535 00203 0377 AND (1 536 00204 7012 RTR 537 00205 3031 DCA DRVSEL 538 00206 7704 CLA CLL OSR / Get max field 539 00207 7012 RTR 540 00210 7010 RAR 541 00211 0376 AND (7 542 00212 7450 SNA 543 00213 7402 HLT / Must have at least 1 field for buffer 544 00214 7041 CIA 545 00215 3025 DCA FIELDS 546 00216 3046 DCA ERRCN2 547 00217 1024 RDSZLP, TAD BLKFLD / Multiply by number of fields available 548 00220 2025 ISZ FIELDS 549 00221 5217 JMP RDSZLP / TD8E Dectape DUMP Program Page 12 550 00222 3026 DCA RDSIZE / NUMBER BLOCK PER READ 551 00223 3027 DCA CBLOCK 552 00224 3045 DCA CHKSM 553 554 00225 7200 DUMPLP, CLA 555 00226 1026 TAD RDSIZE 556 00227 1027 TAD CBLOCK 557 00230 7041 CIA 558 00231 1021 TAD NUMBLK / MORE BLOCKS LEFT THAN READSIZE? 559 00232 7500 SMA / NO, READ NUMBER LEFT 560 00233 7200 CLA / YES, ONLY READ RDSIZE 561 00234 1026 TAD RDSIZE 562 00235 7450 SNA / ANY MORE BLOCKS? 563 00236 5267 JMP DONE / NO, DO FINISH STUFF 564 00237 3245 DCA ARGSZ 565 00240 1027 TAD CBLOCK 566 00241 3247 DCA ARGBK 567 00242 1031 TAD DRVSEL 568 00243 4775@ JMS DTA0 569 00244 0010 0010 / READ STARTING IN FIELD 1 570 00245 0000 ARGSZ, 0 571 00246 0000 0 572 00247 0000 ARGBK, 0 573 00250 5322 JMP ERRRET 574 00251 1374 TAD (377 / All blocks good 575 00252 3032 DCA READST 576 / Send data, each block starts with FF 577 00253 7300 CLA CLL / then 2 12 bit words in 3 bytes 578 00254 3033 DCA LOC / ERRRET DUPLICATES SOME OF THIS 579 00255 1245 TAD ARGSZ 580 00256 7041 CIA 581 00257 3035 DCA BCNT / Setup loop counter with number blocks read 582 00260 6211 CDF 10 583 00261 4773@ OUTBL1, JMS OUTBLK / Send a block 584 00262 2027 ISZ CBLOCK 585 00263 2035 ISZ BCNT / Send all read? 586 00264 5261 JMP OUTBL1 / No 587 00265 6201 CDF 0 588 00266 5225 JMP DUMPLP / Go read next batch 589 590 591 00267 6201 DONE, CDF 0 592 00270 7200 CLA / Send FE and -checksum of all words 593 00271 1372 TAD (376 594 00272 4771@ JMS PUN 595 00273 7300 CLA CLL 596 00274 1045 TAD CHKSM / Send checksum in two bytes, low bits first 597 00275 7041 CIA 598 00276 4771@ JMS PUN 599 00277 7300 CLA CLL / TD8E Dectape DUMP Program Page 13 600 00300 1045 TAD CHKSM 601 00301 7041 CIA 602 00302 7012 RTR 603 00303 7012 RTR 604 00304 7012 RTR 605 00305 7012 RTR 606 00306 0037 AND C17 607 00307 4771@ JMS PUN 608 00310 7200 CLA 609 00311 1031 TAD DRVSEL 610 00312 4775@ JMS DTA0 / REWIND TAPE 611 00313 0010 0010 612 00314 0001 1 613 00315 0000 0 614 00316 0000 0 615 00317 7000 NOP 616 00320 1046 TAD ERRCN2 / Leave AC with # of errors 617 00321 5140 JMP FINISH 618 619 /SEND GOOD BLOCKS READ WITH GOOD BLOCK FLAG 620 /THEN BAD WITH BAD BLOCK FLAG. 621 ERRRET, 622 / HLT / ****** If we want to stop on error 623 00322 6211 CDF 10 624 00323 7300 CLA CLL 625 00324 3033 DCA LOC 626 00325 1027 TAD CBLOCK 627 00326 7041 CIA 628 00327 1052 TAD BLOCK /Get - number good blocks read 629 00330 7041 CIA /Last was bad 630 00331 7450 SNA 631 00332 5342 JMP FSTBAD /First block is bad, no good to send 632 00333 3035 DCA BCNT 633 00334 1374 TAD (377 634 00335 3032 DCA READST 635 00336 4773@ OUTBL2, JMS OUTBLK /Send good blocks 636 00337 2027 ISZ CBLOCK 637 00340 2035 ISZ BCNT 638 00341 5336 JMP OUTBL2 639 00342 1053 FSTBAD, TAD EOT /IF EOT WE ARE DONE 640 00343 7440 SZA 641 00344 5267 JMP DONE 642 00345 1370 TAD (375 /NOW SEND BAD BLOCK 643 00346 3032 DCA READST 644 00347 4773@ JMS OUTBLK 645 00350 2027 ISZ CBLOCK 646 00351 2046 ISZ ERRCN2 647 00352 6201 CDF 0 648 00353 5225 JMP DUMPLP /And read from here on 649 / TD8E Dectape DUMP Program Page 14 00370 0375 00371 0467 00372 0376 00373 0400 00374 0377 00375 0600 00376 0007 00377 0001 650 PAGE 651 00400 0000 OUTBLK, 0 /Send a block of data out serial port 652 00401 7200 CLA 653 00402 1023 TAD WCOUNT 654 00403 3034 DCA LEN 655 00404 1032 TAD READST /Send good/bad flag 656 00405 4267 JMS PUN 657 00406 7300 OUT, CLA CLL 658 00407 1433 TAD I LOC 659 00410 1045 TAD CHKSM / Keep checksum of all words sent 660 00411 3045 DCA CHKSM 661 00412 1433 TAD I LOC / Send 2 words as 3 bytes 662 00413 4267 JMS PUN 663 00414 7300 CLA CLL 664 00415 1433 TAD I LOC 665 00416 7012 RTR / Shift top 4 bits to low 4 666 00417 7012 RTR 667 00420 7012 RTR 668 00421 7012 RTR 669 00422 0037 AND C17 670 00423 3036 DCA TEMP 671 00424 2033 ISZ LOC 672 00425 5232 JMP STFLD3+1 /NOT AT END OF FIELD (DJG) 673 00426 6214 RDF /At end, inc to next field 674 00427 1377 TAD (6211 /BUILD CDF 675 00430 3231 DCA STFLD3 676 00431 7000 STFLD3, NOP 677 00432 2034 ISZ LEN /END IF BUFFER? 678 00433 7410 SKP /NO 679 00434 5264 JMP ENDBK /YES 680 00435 1433 TAD I LOC 681 00436 1045 TAD CHKSM 682 00437 3045 DCA CHKSM 683 00440 1433 TAD I LOC 684 00441 7006 RTL 685 00442 7006 RTL 686 00443 0040 AND C360 687 00444 1036 TAD TEMP 688 00445 4267 JMS PUN 689 00446 7300 CLA CLL 690 00447 1433 TAD I LOC 691 00450 7012 RTR / TD8E Dectape DUMP Program Page 15 692 00451 7012 RTR 693 00452 4267 JMS PUN 694 00453 2033 ISZ LOC 695 00454 5261 JMP STFLD4+1 /NOT AT END OF FIELD (DJG) 696 00455 6214 RDF 697 00456 1377 TAD (6211 /BUILD CDF 698 00457 3260 DCA STFLD4 699 00460 7000 STFLD4, NOP 700 00461 2034 ISZ LEN 701 00462 5206 JMP OUT 702 00463 5600 JMP I OUTBLK 703 00464 1036 ENDBK, TAD TEMP /SEND LAST PART OF WORD 704 00465 4267 JMS PUN 705 00466 5600 JMP I OUTBLK 706 707 00467 0000 PUN, 0 / Send byte out serial port 708 / PLS / Punch for testing with emulator 709 00470 6046 TLS2 / Send out console 710 00471 7300 CLA CLL 711 00472 1027 TAD CBLOCK 712 / PSF 713 00473 6041 TSF2 /Wait until character sent 714 00474 5273 JMP .-1 715 00475 7200 CLA 716 00476 5667 JMP I PUN 717 00577 6211 00177 0200 718 $ No detected errors 9 links generated