1 /DECTAPE COPY, V10 2 3 / 4 / 5 / 6 / 7 / 8 / 9 // 10 / 11 / 12 / 13 / 14 /COPYRIGHT (C) 1966, 1975 15 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. 16 / 17 / 18 / 19 /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A 20 /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- 21 /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER 22 /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE 23 /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO 24 /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE 25 /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. 26 / 27 / 28 /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT 29 /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL 30 /EQUIPMRNT COROPATION. 31 / 32 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS 33 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. 34 / 35 / 36 / 37 / 38 / 39 / 40 /DECTAPE COPY 41 /VERSION .B07 42 / 43 / 44 /COPYRIGHT 1968 DIGITAL EQUIPMENT CORPORATION 45 / MAYNARD, MASS. OCTOBER,1968 46 47 48 49 / THIS PROGRAM COPIES A DECTAPE FROM ONE 50 / SPECIFIED UNIT TO ANOTHER. ALL DECTAPE 51 / ROUTINES ARE INTERNALLY GENERATED SO THAT 52 / IT MAY BE RUN WITHOUT THE MONITOR SYSTEM. 53 / 54 / STARTING ADDRESS IS 200 55 / 56 DTRA=6761 57 DTCA=6762 58 DTXA=6764 59 DTSF=6771 60 DTRB=6772 61 DTLB=6774 62 63 WC=7754 64 CA=7755 65 / THESE AREAS ARE USED BY DATA BREAK 66 BUFIOT=1547 /INPUT OUTPUT BUFFER 67 BUFCHK=4563 /RE-READ BUFFER 68 / 69 *20 70 / PAGE ZERO WORKING STORAGE 71 000020 7775 BADTRY, -3 /COUNT OF READ ERRORS 72 000021 0000 CURBLK, 0 /CURRENT BLOCK NUMBER 73 000022 0000 TRASH1, 0 /WORKING STORAGE 74 000023 0000 TRASH2, 0 /WORKING STORAGE 75 000024 0000 TRASH3, 0 /WORKING STORAGE 76 000025 0000 BLKCNT, 0 /NUMBEROF BLOCKS TO READ 77 /OR MINUS THAT NUMBER 78 000026 0000 SORBLK, 0 /STORAGE FOR CURBLK 79 000027 0000 WORDS, 0 /NUMBER OF WORDS PER BLOCK 80 000030 0000 INUNIT, 0 /INPUT UNIT IN LH OCT CHAR 81 000031 0000 OUTUNI, 0 /OUTPUT UNIT IN LH OCT CHAR 82 000032 0000 RESTOR, 0 /NUMBER OF WORDS TO COPY 83 000033 0000 RESAVE, 0 /NEGATIVE OF BLKCNT 84 000034 0000 SMICAR, 0 /CHARACTER STORAGE 85 000035 0000 SMISUM, 0 /RUNNING SUM 86 000036 0000 SPELIN, 0 /POINTER 87 000037 0000 SEAZIK, 0 /INPUT AREA 88 000040 0000 SEAZOK, 0 /TEMP STORAGE 89 000041 0000 DECTWC, 0 /FLAG TO DETERMINE IF VALIDATION WILL OCCUR 90 000042 0000 DECTCA, 0 /CURRENT ADDRESS STORE 91 000043 0000 FIRST, 0 /STARTING BLOCK NUMBER 92 000044 0000 LAST, 0 /LAST BLOCK NUMBER 93 000045 0000 LENGTH, 0 /NUMBER OF WORDS TO COPY 94 000046 0000 PARITY, 0 /PARITY ERROR FLAG (COUNT) 95 000047 0000 MSKIN, 0 /NEGATIVE OF INUNIT 96 000050 1466 PARDEL, PSTACK /POINTER TO PARITY TABLE 97 / 98 / PAGE ZERO SUBROUTINES 99 000051 0000 DIREC, 0 100 000052 7200 CLA 101 000053 6761 DTRA /FIND DIRECTION 102 000054 0177 AND [400 103 000055 7640 SZA CLA /BRANCH BACK 104 000056 2051 ISZ DIREC /REVERSE DIRECTION EXIT 105 000057 5451 JMP I DIREC /FORWARD DIRECTION EXIT 106 / 107 / 108 000060 0000 BACKUP, 0 /SUBROUTINE REWINDS TAPE 109 000061 7200 CLA 110 000062 6761 DTRA 111 AND (670 /CLEAR DIRECTION AND MOVEMENT page zero ^ page zero ^ 000063 0176 112 000064 6764 DTXA 113 TAD (600 /GO IN REVERSE page zero ^ page zero ^ 000065 1175 114 000066 6764 DTXA 115 000067 6771 DTSF 116 000070 5067 JMP .-1 /WAIT UNTILL DONE 117 000071 4574 JMS I [ERROR /BUSYWORK FOR ERRORS 118 000072 5460 JMP I BACKUP /EXIT ON ENDZONE ERROR 119 000073 5061 JMP BACKUP+1 120 121 *200 122 000200 7300 BEGIN, CLA CLL /INITIALIZE 123 000201 6774 DTLB 124 000202 6046 TLS /TELETYPE OUTPUT 125 000203 4573 JMS I [SPEAK 126 000204 1200 MESS0 127 000205 4573 JMS I [SPEAK 128 000206 1320 MESS1 /INPUT UNIT NUMBER 129 000207 4366 JMS GETNUM /CHECK INPUT UNIT NUMBER 130 000210 3030 DCA INUNIT 131 000211 1030 TAD INUNIT 132 000212 7041 CIA /SET UP INPUT UNIT MASK 133 000213 3047 DCA MSKIN 134 000214 4573 JMS I [SPEAK 135 000215 1326 MESS2 /OUTPUT UNIT NUMBER 136 000216 4366 JMS GETNUM 137 000217 1047 TAD MSKIN /MAKE SURE UNITS ARE DIFFERENT 138 000220 7450 SNA 139 000221 5200 JMP BEGIN /INPUT ERROR 140 000222 1030 TAD INUNIT 141 000223 3031 DCA OUTUNI 142 000224 4573 JMS I [SPEAK /GET FIRST BLOCK NUMBER 143 000225 1212 MESSA 144 000226 4572 JMS I [SMIGIT 145 000227 7000 NOP 146 000230 3021 DCA CURBLK 147 000231 1021 TAD CURBLK 148 000232 7041 CIA /STORE BEGINNING MARKER 149 000233 3043 DCA FIRST 150 000234 4573 JMS I [SPEAK /GET LAST BLOCK NUMBER 151 000235 1231 MESSB 152 000236 4572 JMS I [SMIGIT 153 000237 7240 CLA CMA /KLUDGE IF NO INPUT 154 000240 3044 DCA LAST 155 000241 1043 TAD FIRST 156 000242 7100 CLL 157 000243 7440 SZA 158 000244 1044 TAD LAST /MAKE SURE VALID 159 000245 7660 SZA SNL CLA 160 000246 5200 JMP BEGIN 161 000247 6774 DTLB 162 000250 1030 TAD INUNIT /INIT INPUT UNIT 163 000251 4571 JMS I [FIXTAP 164 000252 3027 DCA WORDS /SET UP BLOCK LENGTH 165 000253 1031 TAD OUTUNI /INIT OUTPUT UNIT 166 000254 4571 JMS I [FIXTAP 167 000255 7041 CIA /MAKE SURE BLOCK LENGTH 168 000256 1027 TAD WORDS /SAME ON INPUT AND OUTPUT 169 000257 7640 SZA CLA 170 000260 5375 JMP BADLEN /BLOCK LENGTH ERROR 171 000261 4573 JMS I [SPEAK /TYPE OUT BLOCK LENGTH 172 000262 1333 MESS3 173 000263 1027 TAD WORDS 174 000264 4570 JMS I [TYPNUM 175 000265 4573 JMS I [SPEAK /SEND 176 000266 1211 MESS0+11 177 000267 1027 TAD WORDS 178 000270 7041 CIA /COMPUTE NUMBER OF BLOCKS 179 000271 3045 DCA LENGTH /TO READ AND WRITE 180 000272 3025 DCA BLKCNT /CLEAR BLOCK COUNTER 181 000273 1167 TAD [3014 /LOAD BUFFER SIZE 182 000274 1045 TAD LENGTH 183 000275 7510 SPA 184 000276 5375 JMP BADLEN /TOO MANY WORDS PER BLOCK 185 000277 2025 ISZ BLKCNT /TALLY 186 000300 1045 TAD LENGTH 187 000301 7500 SMA 188 000302 5277 JMP .-3 /CONTINUE COUNTING 189 000303 1027 TAD WORDS /GET NUMBER OF 190 000304 1166 TAD [-3014 /WORDS TO READ 191 000305 7041 CIA /AND TO WRITE 192 000306 3032 DCA RESTOR /PRESERVE IN RESTOR 193 000307 1032 TAD RESTOR 194 000310 3045 DCA LENGTH 195 000311 1025 TAD BLKCNT /SAVE NEGATIVE OF BLKCNT 196 000312 7041 CIA 197 000313 3033 DCA RESAVE 198 000314 4573 JMS I [SPEAK 199 000315 1300 MESSC 200 000316 4572 JMS I [SMIGIT 201 000317 7000 NOP 202 000320 3041 DCA DECTWC /SET UP VERIFY FLAG 203 / 204 / MAIN LOOP FOR COPY 205 000321 1021 LETS, TAD CURBLK /CHECK FOR PARTIAL BLOCK TO COPY 206 000322 1025 TAD BLKCNT 207 000323 7141 CLL CMA IAC 208 000324 1044 TAD LAST 209 000325 7430 SZL 210 000326 5343 JMP LETT /COPY FULL LENGTH 211 000327 3045 DCA LENGTH /ADJUST WORDS TO COPY 212 000330 1032 TAD RESTOR 213 000331 7041 CIA 214 000332 1027 TAD WORDS 215 000333 2045 ISZ LENGTH 216 000334 5332 JMP .-2 /COMPUTE PROPER LENGTH 217 000335 7041 CIA 218 000336 1027 TAD WORDS 219 000337 3045 DCA LENGTH 220 000340 1165 TAD [REVERS /KLUDGE COPY EXIT 221 000341 3564 DCA I [COPY 222 000342 5563 JMP I [COPY+1 /PERFORM THIS COPY 223 000343 4564 LETT, JMS I [COPY /COPY THIS BLOCKS 224 000344 1025 TAD BLKCNT 225 000345 1025 TAD BLKCNT /ADVANCE CURRENT BLOCK 226 000346 1021 TAD CURBLK 227 000347 3021 DCA CURBLK 228 000350 4051 JMS DIREC 229 000351 5360 JMP LETU /FORWARD EXCEEDED CHECK 230 000352 1021 LETR, TAD CURBLK /REVERSE CHECK 231 000353 1043 TAD FIRST 232 000354 7040 CMA 233 000355 7640 SZA CLA /CHECK FOR MINUS 1 234 000356 5343 JMP LETT /CONTINUE COPY 235 000357 5562 JMP I [DONE /FINISHED JOB 236 000360 1021 LETU, TAD CURBLK 237 000361 7141 CLL CMA IAC 238 000362 1044 TAD LAST 239 000363 7630 SZL CLA /CHECK FOR END OF TAPE 240 000364 5321 JMP LETS 241 000365 5577 JMP I [REVERV 242 243 244 245 246 / THIS SUBROUTINE GETS INPUT 247 / AND OUTPUT UNIT NUMBERS FROM 248 / THE TELETYPE AND VALIDATES THEM. 249 / 250 000366 0000 GETNUM, 0 251 000367 4572 JMS I [SMIGIT 252 000370 7000 NOP 253 000371 0161 AND [7 254 000372 7112 CLL RTR /MOVE TO LH THREE BITS 255 000373 7012 RTR 256 000374 5766 JMP I GETNUM 257 / 258 / 259 260 000375 4573 BADLEN, JMS I [SPEAK /BLOCK LENGTH ERROR 261 000376 1366 MESS3A 262 000377 5200 JMP BEGIN 263 / 264 / 265 / 266 PAGE 267 268 / 269 / THIS TURN AROUND IS ENTERRED 270 / WHEN THE LAST COPY MOVED INTO 271 / THE FINAL DATA AREA 272 000400 1044 REVERV, TAD LAST 273 000401 3021 DCA CURBLK /START OF COPY BACK 274 000402 4271 JMS REVALT /CHANGE INUNIT AND OUTUNI 275 000403 1030 TAD INUNIT 276 000404 6766 DTCA DTXA 277 000405 4575 JMS I [RESET /REPOSITION TAPE 278 000406 1031 TAD OUTUNI 279 000407 6766 DTCA DTXA 280 000410 4575 JMS I [RESET /REPOSITION TAPE 281 000411 1021 REBACK, TAD CURBLK 282 000412 7040 CMA /COMPUTE NEW COPY LENGTH 283 000413 1026 TAD SORBLK 284 000414 1025 TAD BLKCNT 285 000415 7450 SNA 286 000416 5260 JMP REVERS /KLUDGE IF NOTHING TO DO 287 000417 3026 DCA SORBLK /MINUS # OF BLOCKS 288 000420 1026 TAD SORBLK 289 000421 3025 DCA BLKCNT /SAVE THIS NUMBER 290 000422 1027 TAD WORDS 291 000423 2026 ISZ SORBLK 292 000424 5222 JMP .-2 293 000425 3045 DCA LENGTH /LENGTH FOR COPY 294 000426 4564 JMS I [COPY /PERFORM IT 295 000427 1021 TAD CURBLK 296 000430 1025 TAD BLKCNT 297 000431 1033 TAD RESAVE /ADVANCE CURBLK 298 000432 3021 DCA CURBLK 299 000433 1033 TAD RESAVE 300 000434 3025 DCA BLKCNT 301 000435 1032 TAD RESTOR 302 000436 3045 DCA LENGTH 303 000437 5560 JMP I [LETR /CONTINUE COPY 304 / 305 / 306 / THIS TURN AROUND IS ENTERRED 307 / WHEN THE LAST SEARCH FOR 308 / CURRENT BLOCK CAUSED AN END 309 / OF TAPE ERROR 310 / 311 000440 4051 REVERT, JMS DIREC 312 000441 7410 SKP 313 000442 5562 JMP I [DONE /FINISHED IF DIRECTION REVERSE 314 000443 1026 TAD SORBLK 315 000444 3021 DCA CURBLK /RESTORE CURBLK 316 000445 1031 TAD OUTUNI /RESET LOCATION OF 317 000446 6766 DTCA DTXA /OUTPUT DECTAPE AND 318 000447 4575 JMS I [RESET /FIND LAST BLOCK 319 000450 1157 TAD [4000 /BY LOOKING FOR IMAGINARY 320 000451 4556 JMS I [SEARCH /BLOCK NUMBER (KLUDGING SEARCH) 321 000452 7000 NOP 322 000453 5250 JMP .-3 /TRY AGAIN ON ERRORS 323 000454 1037 TAD SEAZIK /MUST BE LAST BLOCK NUMBER 324 000455 3021 DCA CURBLK 325 000456 4271 JMS REVALT /CHANGE INUNIT AND OUTUNI 326 000457 5211 JMP REBACK 327 / 328 / 329 / THIS TURN AROUND IS ENTERRED WHEN THE 330 / END BLOCK FOR COPY WAS REACHED BY A 331 / PARTIAL BUFFER COPY. 332 / 333 000460 7240 REVERS, CLA CMA /ADJUST CURBLK POINTER 334 000461 1026 TAD SORBLK 335 000462 3021 DCA CURBLK 336 000463 1033 TAD RESAVE 337 000464 3025 DCA BLKCNT /MAKE BLKCNT NEGATIVE 338 000465 1032 TAD RESTOR 339 000466 3045 DCA LENGTH /RESTORE COPY LENGTH 340 000467 4271 JMS REVALT /CHANGE INUNIT AND OUTUNI 341 000470 5560 JMP I [LETR 342 / 343 000471 0000 REVALT, 0 344 000472 1031 TAD OUTUNI 345 000473 1177 TAD [400 346 000474 3031 DCA OUTUNI /REVERSE DIRECTION 347 000475 1030 TAD INUNIT 348 000476 1177 TAD [400 349 000477 3030 DCA INUNIT /REVERSE DIRECTION 350 000500 5671 JMP I REVALT 351 / 352 353 /THIS SUBROUTINE PERFORMS THE OPERATION 354 /OF COPYING N BLOCKS AND VALIDATING 355 /THE OUTPUT. 356 /WHEN END OF TAPE IS REACHED THE ROUTINE 357 /BRANCHES TO "REVERS", OR TO REVERT 358 /AS APPROPRIATE. 359 / 360 000501 0000 COPY, 0 361 000502 6031 KSF /CHECK FOR <^C> 362 000503 5310 JMP .+5 363 000504 6036 KRB 364 000505 1155 TAD [-203 365 000506 7450 SNA 366 000507 5554 JMP I [7600 367 000510 7200 CLA 368 000511 1030 TAD INUNIT /LOAD STAT REG A 369 000512 6766 DTCA DTXA 370 000513 1153 TAD [-3 371 000514 3020 DCA BADTRY /RESTORE ERROR COUNTER 372 000515 4552 JMS I [DECTAP 373 000516 1547 COPO, BUFIOT /INPUT AREA 374 000517 0030 30 /READ CODE 375 000520 7000 NOP /NORMAL RETURN 376 000521 1046 TAD PARITY /CHECK PARITY FLAG 377 000522 7440 SZA 378 000523 5551 JMP I [ERRPAR /FIX MESSAGE FOR PARITY ERRORS 379 000524 1031 COPZ, TAD OUTUNI /(IGNORE END ZONE) 380 000525 6766 DTCA DTXA /OUTPUT UNIT & DIRECTION 381 000526 4552 COPYB, JMS I [DECTAP /WRITE OUTPUT TAPE 382 000527 1547 BUFIOT /OUTPUT BUFFER 383 000530 0050 50 /WRITE CODE 384 000531 5334 JMP COPCPR /NORMAL RETURN 385 000532 1165 TAD [REVERS /END ZONE RETURN 386 000533 3301 DCA COPY /FIX UP EXIT 387 000534 1021 COPCPR, TAD CURBLK 388 000535 3026 DCA SORBLK /STORE CURRENT BLOCK NUMBER 389 000536 1041 TAD DECTWC 390 000537 7640 SZA CLA 391 000540 5701 JMP I COPY /NO VERIFICATION 392 000541 4575 JMS I [RESET /RETURN TO FRONT END 393 000542 4552 JMS I [DECTAP /READ DATA 394 000543 4563 COPR, BUFCHK /INPUT AREA 395 000544 0030 30 /READ CODE 396 000545 5347 JMP .+2 /NORMAL RETURN BRANCH 397 000546 1550 TAD I [WC /END ZONE RETURN 398 000547 1045 TAD LENGTH 399 000550 7041 CIA 400 000551 3024 DCA TRASH3 /COUNTER 401 000552 1316 TAD COPO 402 000553 3017 DCA 17 /FORWARDS POINTER 403 000554 1343 TAD COPR /REREAD BUFFER 404 000555 3016 DCA 16 /SET UP POINTER 405 000556 1416 COPCML, TAD I 16 406 000557 7041 CIA 407 000560 1417 TAD I 17 408 000561 7440 SZA 409 000562 5366 JMP COPERR /MISMATCH ON READ 410 000563 2024 ISZ TRASH3 /ANY MORE WORDS 411 000564 5356 JMP COPCML /LOOP 412 000565 5701 JMP I COPY /MADE IT! EXIT 413 000566 2020 COPERR, ISZ BADTRY /HOW MANY ATTEMPTS 414 000567 5375 JMP COPERS /TRY AGAIN 415 000570 4573 JMS I [SPEAK 416 000571 1352 MESS5 /RE-READ ERRORS 417 000572 4547 JMS I [TUNIT /TYPE UNIT NUMBER AND WAIT 418 000573 1153 TAD [-3 419 000574 3020 DCA BADTRY /RESTORE ERROR COUNTER 420 000575 7200 COPERS, CLA 421 000576 4575 JMS I [RESET 422 000577 5326 JMP COPYB /WRITE OUT BLOCK AGAIN 423 / 424 PAGE 425 426 / THIS SUBROUTINE MOVES THE DECTAPE 427 / BACK IN PREPARATION FOR ANOTHER 428 / READ OR WRITE. 429 / 430 000600 0000 RESET, 0 431 000601 7300 CLA CLL /CLEAR AC AND LINK 432 000602 1177 TAD [400 /CHANGE DIRECTION 433 000603 6764 DTXA 434 000604 4051 JMS DIREC /FIND DIRECTION 435 000605 1146 TAD [6 /FORWARD MAKE +3 436 000606 1153 TAD [-3 /REVERSE MAKE -3 437 000607 1021 TAD CURBLK 438 000610 7510 SPA /MAKE SURE VALUE IS PLUS 439 000611 5222 JMP RESEV 440 000612 4556 JMS I [SEARCH /FIND THIS BLOCK 441 000613 7610 SKP CLA /FOUND IT 442 000614 5204 JMP RESET+4 443 000615 6761 REEXT, DTRA 444 000616 0145 AND [200 /CLEAR STOP-GO FLAG 445 000617 1177 TAD [400 /AND REVERSE DIRECTION 446 000620 6764 DTXA 447 000621 5600 JMP I RESET 448 000622 4060 RESEV, JMS BACKUP /REWIND THIS TAPE 449 000623 5215 JMP REEXT 450 / 451 / 452 / THIS BRANCH IS TKEN WHEN 453 / ALL COPYING IS COMPLETED 454 000624 4573 DONE, JMS I [SPEAK 455 000625 1347 MESS4 456 000626 4572 JMS I [SMIGIT 457 000627 5545 JMP I [BEGIN 458 459 000630 5545 JMP I [BEGIN 460 461 /THIS SUBROUTINE READS NUMBERS, 462 /NOT EXCEEDING 4098, FROM A TELETYPE 463 /AND RETURNS THE OCTAL VALUE OF INPUT. 464 /THE FOLLOWING SPECIAL CHARACTERS 465 /ARE USD... MARKS END OF INPUT, CAUSES A 466 /IF THE IS THE FIRST CHARACTER THEN 467 /DIRECT RETURN IS TAKEN, ELSE RETURN IS TO ENTRY+2 468 / <^C> CAUSES A BRANCH TO 7600 469 / 470 000631 0000 SMIGIT, 0 471 000632 6032 KCC /INITIALIZE TTY INPUT 472 000633 3035 DCA SMISUM /CLEAR TEMP STORAGE 473 000634 4275 JMS TTYIN /GET CHAR 474 000635 0144 AND [177 475 000636 1145 TAD [200 476 000637 1143 TAD [-215 /CHECK FOR 477 000640 7450 SNA 478 000641 5271 JMP SMIXIT /EXIT ON FIRST 479 000642 2231 ISZ SMIGIT /ADVANCE EXIT POINTER 480 000643 1142 SMIGOP, TAD [12 /CHECK FOR ^C 481 000644 7450 SNA 482 000645 5554 JMP I [7600 /BRANCH TO MONITOR 483 000646 1141 TAD [-65 /CHECK FOR DIGITS 484 000647 7100 CLL 485 000650 1140 TAD [10 486 000651 7420 SNL 487 000652 5265 JMP SMILOP /INVALID CHARACTER 488 000653 3034 DCA SMICAR /TEMP STOR 489 000654 1035 TAD SMISUM /GET CHARACTER STRING 490 000655 7104 CLL RAL 491 000656 7104 CLL RAL 492 000657 7104 CLL RAL /ROTATE TO LH POSITION 493 000660 1034 TAD SMICAR /APPEND CURRENT DIGIT 494 000661 3035 DCA SMISUM 495 000662 1034 TAD SMICAR 496 000663 1137 TAD [260 /MAKE ASCII 497 000664 4357 JMS TYPE /ECHO CHARACTER 498 000665 4275 SMILOP, JMS TTYIN /GET NEXT CHARACTER 499 000666 1143 TAD [-215 /CHECK FOR 500 000667 7440 SZA 501 000670 5243 JMP SMIGOP /CONTINUE LOOP 502 000671 4573 SMIXIT, JMS I [SPEAK /SEND A 503 000672 1211 MESS0+11 504 000673 1035 TAD SMISUM /GET INPUT STRING 505 000674 5631 JMP I SMIGIT /EXIT 506 507 508 /THIS SUBROUTINE READS A CHARACTER FROM THE TTY 509 000675 0000 TTYIN, 0 510 000676 6031 KSF /WAIT UNTIL READY 511 000677 5276 JMP .-1 512 000700 6036 KRB /READ TTY BUFFER 513 000701 5675 JMP I TTYIN 514 515 /THIS SUBROUTINE TYPES OUT A 516 /DIGIT STRING FROM THE AC 517 /AS FOUR OCTAL CHARACTERS 518 000702 0000 TYPNUM, 0 519 000703 3034 DCA SMICAR /PRESERVE STRING VALUE 520 000704 1136 TAD [-4 521 000705 3035 DCA SMISUM /INITIALIZE COUNTER 522 000706 1034 TYPXL, TAD SMICAR 523 000707 7006 RTL 524 000710 7004 RAL /GET NEXT PRINT DIGIT 525 000711 3034 DCA SMICAR /RETURN TO STRING 526 000712 1135 TAD [3 527 000713 0034 AND SMICAR 528 000714 7004 RAL /ENTER CURRENT DIGIT 529 000715 1137 TAD [260 /MAKE ASCII 530 000716 4357 JMS TYPE /TYPE DIGIT 531 000717 2035 ISZ SMISUM /COUNT DIGITS 532 000720 5306 JMP TYPXL /COUNTINUE LOOP 533 000721 5702 JMP I TYPNUM /EXIT 534 535 536 /THIS SUBROUTINE TYPES OUT A 537 /MESSAGE IN "TEXT" FORMAT TWO 538 /ASCII CHARACTERS PER WORD. 539 /SPECIAL CHARACTERS ARE NOT 540 /PERMITTED. A CARRIGE RETURN 541 /AND LINE FEED PRECEED THE 542 /MESSAGE. 543 / JMS I [SPEAK 544 / MESSAGE 545 /A ZERO WORD MARKS THE 546 /END OF THE MESSAGE. 547 / 548 000722 0000 SPEAK, 0 549 000723 7300 CLA CLL 550 000724 1134 TAD [215 551 000725 4533 JMS I [TYPE /CARRIGE RETURN 552 000726 1722 TAD I SPEAK /GET ADDRESS OF OUTPUT 553 000727 3036 DCA SPELIN 554 000730 2322 ISZ SPEAK 555 000731 1132 TAD [212 556 000732 4533 JMS I [TYPE /LINE FEED 557 000733 1436 SPEELH, TAD I SPELIN /GET NEXT WORD 558 000734 7450 SNA /CHECK FOR ZERO 559 000735 5722 JMP I SPEAK /EXIT IF ZERO 560 000736 0131 AND [7700 /GET LH CHARACTER 561 000737 7112 CLL RTR /MOVE TO 562 000740 7012 RTR /RIGHT HAND 563 000741 7012 RTR /SIX BITS 564 000742 4350 JMS SPEOUT /TRANSLATE AND OUTPUT 565 000743 1436 TAD I SPELIN 566 000744 2036 ISZ SPELIN /ADVANCE POINTER 567 000745 0130 AND [77 /GET RH CHARACTER 568 000746 4350 JMS SPEOUT /TRANSLATE AND OUTPUT 569 000747 5333 JMP SPEELH 570 000750 0000 SPEOUT, 0 571 000751 1127 TAD [-40 /CHECK FORMAT 572 000752 7500 SMA 573 000753 1131 TAD [-100 /KLUDGE DIGITS FORMAT<200+XX> 574 000754 1126 TAD [340 /ALPHA FORMAT <300+XX> 575 000755 4533 JMS I [TYPE /OUTPUT IT 576 000756 5750 JMP I SPEOUT /RETURN 577 578 / 579 /THIS SUBROUTINE TYPES OUT 580 /THE ASCII CHARACTER IN THE AC. 581 / 582 000757 0000 TYPE, 0 583 000760 6041 TSF /WAIT UNTIL READY 584 000761 5360 JMP .-1 585 000762 6046 TLS /TYPE CHARACTER 586 000763 7200 CLA 587 000764 5757 JMP I TYPE 588 / 589 /THIS SUBROUTINE TYPES OUT THE 590 /CURRENT UNIT NUMBER 591 000765 0000 TUNIT, 0 592 000766 7200 CLA 593 000767 6761 DTRA 594 000770 0125 AND [7000 /GET CURRENT UNIT NUMBER 595 000771 7106 CLL RTL /MOVE OVER 596 000772 7006 RTL 597 000773 1137 TAD [260 /MAKE ASCII CODE 598 000774 4533 JMS I [TYPE /TYPE IT 599 000775 4572 JMS I [SMIGIT /WAIT 600 000776 5765 JMP I TUNIT /EXIT 601 000777 5765 JMP I TUNIT 602 / 603 / 604 PAGE 605 606 /THIS SUBROUTINE SEARCHES DECTAPE 607 /IN A FORWARD OR REVERSE DIRECTION. 608 /STATUS REGISTER A SHOULD CONTAIN 609 /UNIT SELECT NUMBER (0-2), FORWARD 610 /OR REVERSE, AND A5=1. 611 /THE BLOCK NUMBER FOR WHICH THE PROGRAM IS 612 /SEARCHING MUST BE IN THE AC. 613 /ON ERROR RETURN THE COMAND 614 /FOLLOWING THE "JMS" IS SKIPPED, 615 /AN END OF TAPE ERROR WILL CAUSE 616 /THREE MOVES INTO ENDZONE AND TWO COMMANDS FOLLOWING 617 /THE "JMS" ARE SKIPPED 618 001000 0000 SEARCH, 0 619 001001 7041 CIA /FORM TWO'S COMPLEMENT 620 001002 3040 DCA SEAZOK /STORE - BLOCK NUMBER 621 001003 3037 DCA SEAZIK /CLEAR INPUT WORD 622 001004 6761 DTRA 623 001005 0124 AND [274 624 001006 6764 DTXA /CLEAR OUT A REGISTER 625 001007 1123 TAD [210 /START DEVICE 626 001010 6764 DTXA 627 001011 4051 JMS DIREC /DETERMINE DIRECTION 628 001012 1122 TAD [NOP-CIA /FORWARD...FIX TO "NOP" 629 001013 1121 TAD [CIA /REVERSE...FIX TO "CIA" 630 001014 3225 DCA SEATIX /FIX UP COMMAND 631 001015 1120 TAD [SEAZIK /BLOCK NUMBER INPUT 632 001016 3517 DCA I [CA /PUT IN CURRENT ADDRESS 633 001017 7240 CLA CMA /NUMBER OF BLOCKS=1 634 001020 4234 JMS SEARUN /FIND FIRST BLOCK MARK 635 001021 1116 TAD [100 /SET CONTINUOUS MODE FLAG 636 001022 6764 DTXA 637 001023 1037 TAD SEAZIK /BLOCK NUMBER HERE 638 001024 1040 TAD SEAZOK /MINUS BLOCK NUMBER THERE 639 001025 7000 SEATIX, NOP /IFSEARCHING IN REVERSE DIRECTION 640 *.-1 641 001025 7041 CIA /IF SEARCHING IN FORWARD DIRECTION 642 001026 7510 SPA /SKIP IF DONE 643 001027 4234 JMS SEARUN /FIND "N" BLOCK MARKS 644 001030 6761 DTRA 645 001031 0116 AND [100 /CLEAR CONTINUOUS MODE FLAG 646 001032 6764 DTXA 647 001033 5600 JMP I SEARCH /NORMAL EXIT 648 001034 0000 SEARUN, 0 649 001035 3550 DCA I [WC /NUMBER OF BLOCKS TO READ 650 001036 6764 DTXA 651 001037 6771 DTSF /CHECK FOR DONE 652 001040 5237 JMP .-1 653 001041 6772 DTRB /READ STATUS REGISTER B 654 001042 7700 SMA CLA 655 001043 5634 JMP I SEARUN /DT FLAG...NORMAL EXIT 656 001044 4574 JMS I [ERROR /HANDLE ALL ERRORS 657 001045 2200 ISZ SEARCH /END OF TAPE ERROR 658 001046 2200 ISZ SEARCH /ALL OTHER ERRORS 659 001047 5230 JMP SEARUN-4 /EXIT 660 661 662 /THIS SUBROUTINE READS OR WRITES 663 / WORDS, IN CONTROL MODE, ON 664 /A BLOCK(S) ASSUMING THAT 665 /THE DECTAPE IS PROPERLY 666 /POSITIONED. IN LINE CODE: 667 / JMS I [DECTAP 668 / ADDRESS TO READ INTO (OR WRITE FROM) -1 669 / <3> IF READ, <5> IF WRITE 670 /<> 671 /<> 672 /AN END OF TAPE ERROR WHILE SEARCHING 673 /CAUSES A BRANCH TO "REVERT". 674 /STATUS REGISTER A SHOULD CONTAIN: 675 /AO-2 UNIT NUMBER 676 /A3 FORWARD=0, REVERSE=1 677 /A4 UNIMPORTANT, SHOULD BE ZERO 678 /A5 1 679 /A6-8,89 UNIMPORTANT 680 /BLOCK NUMBER IN PAGE ZERO "CURBLK" 681 /NUMBER OF WORDS TO READ OR 682 /WRITE IS IN PAGE ZERO "LENGTH" 683 / 684 001050 0000 DECTAP, 0 685 001051 1650 TAD I DECTAP /GET INPUT BUFFER 686 001052 3042 DCA DECTCA /STORE 687 001053 2250 ISZ DECTAP 688 001054 1021 DECAGN, TAD CURBLK /SEARCH FOR BLOCK 689 001055 4556 JMS I [SEARCH 690 001056 5261 JMP DECRUN /FOUND IT 691 001057 5254 JMP DECAGN 692 001060 5515 JMP I [REVERT /END ZONE ERROR 693 001061 1037 DECRUN, TAD SEAZIK 694 001062 1040 TAD SEAZOK /CHECK TO SEE IF FOUND BLOCK 695 001063 7440 SZA 696 001064 5303 JMP DECEXT-3 697 001065 1045 TAD LENGTH /SET UP WORD COUNT 698 001066 7041 CIA 699 001067 3550 DCA I [WC 700 001070 1042 TAD DECTCA /AND INPUT OUTPUT BUFFER 701 001071 3517 DCA I [CA 702 001072 1650 TAD I DECTAP /GET READ OR WRITE 703 001073 6764 DECLOP, DTXA /START GOING 704 001074 6771 DTSF 705 001075 5274 JMP .-1 706 001076 6772 DTRB /GET FLAGS 707 001077 7500 SMA 708 001100 5311 JMP DECEXI 709 001101 4574 JMS I [ERROR 710 001102 5305 JMP DECEXT-1 /ENDZONE ERROR 711 001103 4575 JMS I [RESET /RESTORE POINTERS 712 001104 5254 JMP DECAGN 713 001105 2250 ISZ DECTAP /END OF TAPE EXIT 714 001106 2250 DECEXT, ISZ DECTAP 715 001107 7200 CLA 716 001110 5650 JMP I DECTAP /FINISHED 717 001111 7200 DECEXI, CLA 718 001112 1550 TAD I [WC /HAVE WE FINISHED? 719 001113 7640 SZA CLA 720 001114 5273 JMP DECLOP /NO-:CONTINUE READ-WRITE 721 001115 6761 DTRA /YES--CLEAR STATUS 722 001116 0124 AND [274 723 001117 6764 DTXA 724 001120 5306 JMP DECEXT 725 726 /THIS SUBROUTINE CHECKS THE CONTENTS 727 /OF STATUS REGISTER B. 728 / JMS I [ERROR 729 / <+1 END OF TAPE ERROR> 730 / <+2 ALL OTHER ERRORS> 731 /IN ADDITION: 1--A SELECT ERROR WILL 732 /CAUSE A TYPEOUT AND HALT. 2--A PARITY 733 /ERROR ON OUTPUT TAPE CAUSES A 734 /BRANCH TO "COPERS"; ON INPUT TAPE 735 /"PARITY ERROR" IS TYPED OUT. 3--GO FLIP-FLOP 736 /AND STATUS REGISTER A6-8 WILL BE CLEARED. 737 / 738 001121 0000 ERROR, 0 739 001122 7300 CLA CLL 740 001123 6772 DTRB /GET ERROR FLAGS 741 001124 0145 AND [200 /PARITY ERROR FLAG 742 001125 7650 SNA CLA 743 001126 5343 JMP ERNOT /HANDLE OTHER ERRORS 744 001127 6764 DTXA /CLEAR FLAGS, CONTINUE READ MODE 745 001130 6761 DTRA /GET UNIT NUMBER 746 001131 0125 AND [7000 747 001132 1047 TAD MSKIN /CHECK FOR INPUT UNIT 748 001133 7440 SZA 749 001134 5514 JMP I [COPERR /ERROR ON OUTPUT UNIT 750 001135 1550 TAD I [WC /PUT WORD COUNT IN PUSH 751 001136 7041 CIA 752 001137 3450 DCA I PARDEL /DOWN STACK 753 001140 2050 ISZ PARDEL /ADVANCE POINTER 754 001141 2046 ISZ PARITY /SET FLAG 755 001142 5513 JMP I [DECEXI /RETURN TO READ 756 001143 6761 ERNOT, DTRA /GET STATUS REGISTER A 757 001144 0124 AND [274 758 001145 1112 TAD [2 /DO NOT DISTURB ERROR FLAGS 759 001146 6764 DTXA /CLEAR A4 AND A6-8 760 001147 6772 DTRB /GET ERROR FLAGS 761 001150 7006 RTL 762 001151 7500 SMA /SKIP IF END OF TAPE ERROR 763 001152 5366 JMP ERROTH 764 001153 7200 CLA 765 001154 1153 TAD [-3 /LOAD -3 766 001155 3365 DCA ERRSOR /STORE IN COUNT 767 001156 1145 TAD [200 /GO FLIP-FLOP 768 001157 6764 DTXA /SET 769 001160 6771 DTSF 770 001161 5360 JMP .-1 771 001162 2365 ISZ ERRSOR /HAVE WE DONE THREE TIMES 772 001163 5356 JMP .-5 773 001164 5721 JMP I ERROR /EXIT 774 001165 0000 ERRSOR, 0 775 001166 2321 ERROTH, ISZ ERROR /CHANGE ERROR BRANCH 776 001167 7430 SZL 777 001170 7300 CLA CLL /MARK TRACK ERROR 778 001171 7006 RTL 779 001172 7620 SNL CLA 780 001173 5721 JMP I ERROR /TIMING ERROR BRANCH 781 001174 4573 JMS I [SPEAK /SELECT ERROR MESSAGE 782 001175 1250 ERRSEL 783 001176 4547 ERRUNT, JMS I [TUNIT 784 001177 5721 JMP I ERROR 785 / 786 PAGE 787 788 / VARIOUS MESSAGES 789 001200 0405 MESS0, TEXT %DECTAPE COPY V10A % 001201 0324 001202 0120 001203 0540 001204 0317 001205 2031 001206 4026 001207 6160 001210 0140 001211 0000 790 001212 0611 MESSA, TEXT %FIRST BLOCK TO COPY (OCTAL) % 001213 2223 001214 2440 001215 0214 001216 1703 001217 1340 001220 2417 001221 4003 001222 1720 001223 3140 001224 5017 001225 0324 001226 0114 001227 5140 001230 0000 791 001231 0611 MESSB, TEXT %FINAL BLOCK TO COPY (OCTAL) % 001232 1601 001233 1440 001234 0214 001235 1703 001236 1340 001237 2417 001240 4003 001241 1720 001242 3140 001243 5017 001244 0324 001245 0114 001246 5140 001247 0000 792 001250 2305 ERRSEL, TEXT %SELECT ERROR ON UNIT #% 001251 1405 001252 0324 001253 4005 001254 2222 001255 1722 001256 4017 001257 1640 001260 2516 001261 1124 001262 4043 001263 0000 793 001264 2001 PMESS, TEXT %PARITY ERROR ON BLOCK % 001265 2211 001266 2431 001267 4005 001270 2222 001271 1722 001272 4017 001273 1640 001274 0214 001275 1703 001276 1340 001277 0000 794 001300 2605 MESSC, TEXT %VERIFY OUTPUT? (0=YES, 1=NO): % 001301 2211 001302 0631 001303 4017 001304 2524 001305 2025 001306 2477 001307 4050 001310 6075 001311 3105 001312 2354 001313 4061 001314 7516 001315 1751 001316 7240 001317 0000 795 001320 0622 MESS1, TEXT %FROM UNIT % 001321 1715 001322 4025 001323 1611 001324 2440 001325 0000 796 001326 2417 MESS2, TEXT %TO UNIT % 001327 4025 001330 1611 001331 2440 001332 0000 797 001333 2004 MESS3, TEXT %PDP-8 WORDS PER BLOCK % 001334 2055 001335 7040 001336 2717 001337 2204 001340 2340 001341 2005 001342 2240 001343 0214 001344 1703 001345 1340 001346 0000 798 001347 0417 MESS4, TEXT %DONE% 001350 1605 001351 0000 799 001352 2722 MESS5, TEXT %WRITE ERRORS ON UNIT #% 001353 1124 001354 0540 001355 0522 001356 2217 001357 2223 001360 4017 001361 1640 001362 2516 001363 1124 001364 4043 001365 0000 800 001366 0214 MESS3A, TEXT %BLOCK LENGTH ERROR% 001367 1703 001370 1340 001371 1405 001372 1607 001373 2410 001374 4005 001375 2222 001376 1722 001377 0000 801 / 802 / 803 PAGE 804 / 805 / 806 807 /THIS ROUTINE TYPES OUT PARITY ERROR MESSAGES 808 /AND RESTORES POINTERS TO THE PUSH DOWN STACK. 809 001400 7041 ERRPAR, CIA 810 001401 3046 DCA PARITY /SET UP STACK COUNTER 811 001402 7240 CLA CMA 812 001403 1050 TAD PARDEL /MOVE POINTER BACK 813 001404 3050 DCA PARDEL 814 001405 4573 JMS I [SPEAK /TYPE OUT MESSAGE 815 001406 1264 PMESS 816 001407 1021 TAD CURBLK 817 001410 3234 EPLOOP, DCA EPJK 818 001411 1450 TAD I PARDEL /CHECK FOR CORRECT BLOCK NUMBER 819 001412 1027 TAD WORDS /ADVANCE BLOCK WORDS COUNT 820 001413 3450 DCA I PARDEL 821 001414 1450 TAD I PARDEL 822 001415 7041 CIA /REACHED ORIGINAL VALUE? 823 001416 1045 TAD LENGTH 824 001417 7650 SNA CLA 825 001420 5226 JMP EPTYP /TYPE BLOCK AT ERROR 826 001421 4051 JMS DIREC 827 001422 7144 CLL CMA RAL /ADD ONE IF FORWARD 828 001423 7040 CMA /SUBTRACT ONE IF NEGATIVE 829 001424 1234 TAD EPJK /NEXT BLOCK NUMBER 830 001425 5210 JMP EPLOOP /CONTINUE LOOP 831 001426 1234 EPTYP, TAD EPJK 832 001427 4570 JMS I [TYPNUM /TYPE BLOCK NUMBER 833 001430 2046 ISZ PARITY /ADVANCE COUNTER 834 001431 5202 JMP ERRPAR+2 /CONTINUE LOOP 835 001432 5633 JMP I EPPEXT /RETURN TO COPY 836 001433 0524 EPPEXT, COPZ /REENTRY TO COPY 837 001434 0000 EPJK, 0 /WORKING STORAGE 838 839 /THIS SUBROUTINE READS A RANDOM 840 /BLOCK ON DECTAPE TO DETERMINE THE BLOCK LENGTH 841 001435 0000 FIXTAP, 0 842 001436 1111 TAD [610 /FIX A REG. WORD 843 001437 6766 DTCA DTXA /LOAD A STAT. REG. 844 001440 7240 CLA CMA 845 001441 3550 DCA I [WC /SEARCH FOR 1 BLOCK 846 001442 1110 TAD [BUFIOT /FIX CURRENT ADDRESS 847 001443 3517 DCA I [CA /TO READ INTO BUFFER 848 001444 6771 DTSF /WAIT AROUND 849 001445 5244 JMP .-1 850 001446 6772 DTRB 851 001447 7710 SPA CLA 852 001450 5261 JMP FIXERR /HANDLE ERROR CONDITIONS 853 001451 1107 TAD [30 /CHANGE TO READ MODE 854 001452 6764 DTXA 855 001453 6771 DTSF /WAIT TILL READ DONE 856 001454 5253 JMP .-1 857 001455 1145 TAD [200 /STOP TAPE 858 001456 6764 DTXA 859 001457 1550 TAD I [WC /GET BLOCK LENGTH 860 001460 5635 JMP I FIXTAP /EXIT 861 001461 4574 FIXERR, JMS I [ERROR 862 001462 1177 TAD [400 /END OF TAPE...REVERSE DIRECTION 863 001463 1123 TAD [210 /START TAPE MOVING 864 001464 6764 DTXA /AND CLEAR FLAGS 865 001465 5240 JMP FIXTAP+3 /TRY AGAIN 866 867 /PARITY ERROR WORD COUNT STACK 868 001466 0000 PSTACK, 0 869 870 871 / 872 873 /END OF PROGRAM 874 000107 0030 $ 000110 1547 000111 0610 000112 0002 000113 1111 000114 0566 000115 0440 000116 0100 000117 7755 000120 0037 000121 7041 000122 7737 000123 0210 000124 0274 000125 7000 000126 0340 000127 7740 000130 0077 000131 7700 000132 0212 000133 0757 000134 0215 000135 0003 000136 7774 000137 0260 000140 0010 000141 7713 000142 0012 000143 7563 000144 0177 000145 0200 000146 0006 000147 0765 000150 7754 000151 1400 000152 1050 000153 7775 000154 7600 000155 7575 000156 1000 000157 4000 000160 0352 000161 0007 000162 0624 000163 0502 000164 0501 000165 0460 000166 4764 000167 3014 000170 0702 000171 1435 000172 0631 000173 0722 000174 1121 000175 0600 000176 0670 000177 0400 BACKUP 0060 BADLEN 0375 BADTRY 0020 BEGIN 0200 BLKCNT 0025 BUFCHK 4563 BUFIOT 1547 CA 7755 COPCML 0556 COPCPR 0534 COPERR 0566 COPERS 0575 COPO 0516 COPR 0543 COPY 0501 COPYB 0526 COPZ 0524 CURBLK 0021 DECAGN 1054 DECEXI 1111 DECEXT 1106 DECLOP 1073 DECRUN 1061 DECTAP 1050 DECTCA 0042 DECTWC 0041 DIREC 0051 DONE 0624 DTCA 6762 DTLB 6774 DTRA 6761 DTRB 6772 DTSF 6771 DTXA 6764 EPJK 1434 EPLOOP 1410 EPPEXT 1433 EPTYP 1426 ERNOT 1143 ERROR 1121 ERROTH 1166 ERRPAR 1400 ERRSEL 1250 ERRSOR 1165 ERRUNT 1176 unreferenced FIRST 0043 FIXERR 1461 FIXTAP 1435 GETNUM 0366 INUNIT 0030 LAST 0044 LENGTH 0045 LETR 0352 LETS 0321 LETT 0343 LETU 0360 MESS0 1200 MESS1 1320 MESS2 1326 MESS3 1333 MESS3A 1366 MESS4 1347 MESS5 1352 MESSA 1212 MESSB 1231 MESSC 1300 MSKIN 0047 OUTUNI 0031 PARDEL 0050 PARITY 0046 PMESS 1264 PSTACK 1466 REBACK 0411 REEXT 0615 RESAVE 0033 RESET 0600 RESEV 0622 RESTOR 0032 REVALT 0471 REVERS 0460 REVERT 0440 REVERV 0400 SEARCH 1000 SEARUN 1034 SEATIX 1025 SEAZIK 0037 SEAZOK 0040 SMICAR 0034 SMIGIT 0631 SMIGOP 0643 SMILOP 0665 SMISUM 0035 SMIXIT 0671 SORBLK 0026 SPEAK 0722 SPEELH 0733 SPELIN 0036 SPEOUT 0750 TRASH1 0022 unreferenced TRASH2 0023 unreferenced TRASH3 0024 TTYIN 0675 TUNIT 0765 TYPE 0757 TYPNUM 0702 TYPXL 0706 WC 7754 WORDS 0027