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