| 1 | /TD8E DECTAPE COPY, V4 |
| 2 | / |
| 3 | / |
| 4 | / |
| 5 | / |
| 6 | / |
| 7 | / |
| 8 | // |
| 9 | / |
| 10 | / |
| 11 | / |
| 12 | / |
| 13 | /COPYRIGHT (C) 1972, 1975 |
| 14 | /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. |
| 15 | / |
| 16 | / |
| 17 | / |
| 18 | /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A |
| 19 | /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- |
| 20 | /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER |
| 21 | /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE |
| 22 | /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO |
| 23 | /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE |
| 24 | /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. |
| 25 | / |
| 26 | / |
| 27 | /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
| 28 | /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL |
| 29 | /EQUIPMRNT COROPATION. |
| 30 | / |
| 31 | /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS |
| 32 | /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. |
| 33 | / |
| 34 | / |
| 35 | / |
| 36 | / |
| 37 | / |
| 38 | / |
| 39 | \f |
| 40 | |
| 41 | |
| 42 | /DEFINITIONS FOR PAL8 AND PAL10 |
| 43 | |
| 44 | BSW=7002 |
| 45 | MQL=7421 |
| 46 | MQA=7501 |
| 47 | CAM=7621 |
| 48 | SWP=7521 |
| 49 | ACL=7701 |
| 50 | CAF=6007 |
| 51 | CDI=6203 |
| 52 | KCF=6030 |
| 53 | SDSS=6771 |
| 54 | SDST=6772 |
| 55 | SDSQ=6773 |
| 56 | SDLC=6774 |
| 57 | SDLD=6775 |
| 58 | SDRC=6776 |
| 59 | SDRD=6777 |
| 60 | FIXTAB |
| 61 | |
| 62 | |
| 63 | HALT=HLT |
| 64 | |
| 65 | |
| 66 | /UNIT NUMBER DEFINITIONS FOR TD8E IOT'S |
| 67 | |
| 68 | UNIT01=0770 |
| 69 | UNIT23=0760 |
| 70 | UNIT45=0750 |
| 71 | UNIT67=0740 |
| 72 | |
| 73 | \f |
| 74 | |
| 75 | LIMIT=7600 |
| 76 | |
| 77 | *11 |
| 78 | |
| 79 | X11, 0 |
| 80 | X12, 0 |
| 81 | |
| 82 | /PAGE 0 CONSTANTS AND VARIABLES |
| 83 | |
| 84 | *20 |
| 85 | INPUT, 0 /INPUT UNIT CONSTANT |
| 86 | OUTPUT, 0 /OUTPUT UNIT CONSTANTS |
| 87 | 0 |
| 88 | 0 |
| 89 | 0 |
| 90 | 0 |
| 91 | 0 |
| 92 | 0 |
| 93 | OCOUNT, 0 /NUMBER OF OUTPUT UNITS SPECIFIED |
| 94 | OPOINT, 0 |
| 95 | LIST, OUTPUT-1 |
| 96 | OUTNUM, 0 |
| 97 | IBLOCK, 0 /STARTING INPUT BLOCK |
| 98 | OBLOCK, 0 /STARTING OUTPUT BLOCK |
| 99 | NUMBER, 0 /NUMBER OF BLOCKS TO TRANSFER |
| 100 | FIELDS, 0 /-(HIGHEST FIELD AVAILABLE) |
| 101 | COUNT, 0 /TEMPORARY COUNTERS |
| 102 | COUNT1, 0 / " |
| 103 | COUNT2, 0 / " |
| 104 | COUNT3, 0 / " |
| 105 | COUNT4, 0 / " |
| 106 | UNIT, 0 /UNIT CONSTANT--THIS TRANSFER |
| 107 | VERF, 0 /VERIFY SWITCH (1=YES,0=NO) |
| 108 | WDCNT, 0 /-(NUMBER OF WORDS PER BLOCK) |
| 109 | RW, 0 /READ/WRITE BIT--THIS TRANSFER |
| 110 | FLD0, 0 /# OF BLOCKS IN FIELD 0 BUFFER |
| 111 | FLDN, 0 /# OF BLOCKS IN FIELD N BUFFER |
| 112 | BUF0, 0 /START OF FIELD 0 BUFFER |
| 113 | BUFN, 0 /START OF FIELD N BUFFER |
| 114 | XNUMB, 0 /# OF BLOCKS LEFT TO TRANSFER |
| 115 | BLOCKN, 0 /STARTING BLOCK NUMBER--THIS TRANSFER |
| 116 | NUMB1, 0 |
| 117 | NUMB2, 0 |
| 118 | VB, 0 |
| 119 | END0, 0 /BEGINNING OF FIELD 0 VERIFY BUFFER |
| 120 | ENTRY, 0 /ENTRY TO TD8E HANDLER |
| 121 | INB, 0 |
| 122 | OUTB, 0 |
| 123 | OHOLD, 0 |
| 124 | \f |
| 125 | MESSG1, TEXT @TD8E COPY V4A@ |
| 126 | MESSG3, TEXT @ 12-BIT WORDS PER BLOCK@ |
| 127 | \f |
| 128 | *200 |
| 129 | |
| 130 | START, TLS |
| 131 | JMS CRLF |
| 132 | JMS I [MESSGE |
| 133 | MESSG1 /@TD8E COPY@ |
| 134 | JMS CRLF |
| 135 | DCA COUNT |
| 136 | JMP I [END /ONCE ONLY CODE FOR MULTIPLE FIELD TEST |
| 137 | START1, JMS QUEST |
| 138 | MESSG4 /@FROM UNIT:@ |
| 139 | SWP |
| 140 | JMS UNITNO /MAKE UNIT NUMBER CONSTANT |
| 141 | DCA INPUT |
| 142 | TAD LIST |
| 143 | DCA OPOINT |
| 144 | SKP |
| 145 | AGAIN, JMS ERR4 /*ILLEGAL RESPONSE* |
| 146 | DCA OCOUNT |
| 147 | DCA COUNT |
| 148 | JMS I [MESSGE |
| 149 | MESSG5 /@TO UNITS:@ |
| 150 | MORE2, JMS I [ANSWER |
| 151 | JMP AGAIN |
| 152 | ACL |
| 153 | JMS UNITNO /MAKE UNIT NUMBER CONSTANT |
| 154 | MQL /STORE IN MQ |
| 155 | MQA /RESTORE TO AC |
| 156 | CIA |
| 157 | TAD INPUT |
| 158 | SNA CLA /IS OUTPUT UNIT = INPUT UNIT ? |
| 159 | JMP MORE2+1 /YES--ERROR |
| 160 | ISZ OPOINT |
| 161 | ISZ OCOUNT /COUNT ONE MORE OUTPUT UNIT |
| 162 | TAD OCOUNT |
| 163 | TAD [-10 |
| 164 | SPA CLA /WERE MORE THAN 7 UNITS SPECIFIED? |
| 165 | JMP .+3 |
| 166 | JMS CRLF /YES--CARRIAGE RETURN |
| 167 | JMP OALL /IGNORE EXTRA ONE |
| 168 | SWP /NO-- |
| 169 | DCA I OPOINT /STORE UNIT CONSTANT IN LIST |
| 170 | TAD COUNT |
| 171 | CIA |
| 172 | TAD OCOUNT |
| 173 | SPA SNA CLA /ALL UNITS IN? |
| 174 | JMP MORE2 /YES |
| 175 | \f |
| 176 | OALL, DCA COUNT |
| 177 | JMS I [MESSGE |
| 178 | MESSG6 /@FIRST INPUT BLOCK:@ |
| 179 | JMS I [ANSWER |
| 180 | JMP WHOLE /COPY WHOLE TAPE |
| 181 | TAD COUNT |
| 182 | SNA CLA /WERE TOO MANY SPECIFIED? |
| 183 | JMP .+5 |
| 184 | JMS I [MESSGE /YES |
| 185 | ERROR4 /@ILLEGAL RESPONSE@ |
| 186 | JMS CRLF |
| 187 | JMP OALL /REPEAT THE QUESTION |
| 188 | ACL /NO |
| 189 | DCA IBLOCK /STORE |
| 190 | JMS QUEST |
| 191 | MESSG7 /@FIRST OUTPUT BLOCK:@ |
| 192 | ACL |
| 193 | DCA OBLOCK |
| 194 | JMS QUEST |
| 195 | MESSG8 /@NUMBER OF BLOCKS TO COPY:@ |
| 196 | ACL |
| 197 | SNA /WERE 0 BLOCKS SPECIFIED? |
| 198 | JMP QUEST1 /YES--REPEAT QUESTION |
| 199 | DCA NUMBER |
| 200 | JMP .+4 |
| 201 | WHOLE, DCA IBLOCK |
| 202 | DCA OBLOCK |
| 203 | DCA NUMBER /0 MEANS WHOLE TAPE |
| 204 | JMS QUEST |
| 205 | MESSG9 /@VERIFY OUTPUT (YES=1,NO=0):@ |
| 206 | ACL |
| 207 | AND [7 |
| 208 | DCA VERF |
| 209 | JMP I (SETUP |
| 210 | \f |
| 211 | /OUTPUT CARRIAGE RETURN/LINE FEED |
| 212 | |
| 213 | CRLF, 0 |
| 214 | TAD (215 |
| 215 | JMS I [TYPE |
| 216 | TAD [212 |
| 217 | JMS I [TYPE |
| 218 | JMP I CRLF /--RETURN-- |
| 219 | |
| 220 | ERR4, 0 |
| 221 | JMS I [MESSGE |
| 222 | ERROR4 /@ILLEGAL RESPONSE@ |
| 223 | JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED |
| 224 | TAD [-4 |
| 225 | TAD ERR4 |
| 226 | DCA ERR4 |
| 227 | DCA COUNT |
| 228 | JMP I ERR4 /--RETURN-- |
| 229 | |
| 230 | \f |
| 231 | QUEST, 0 |
| 232 | TAD I QUEST |
| 233 | DCA MNUM |
| 234 | ISZ QUEST |
| 235 | JMS I [MESSGE |
| 236 | MNUM, 0 |
| 237 | JMS I [ANSWER |
| 238 | QUEST1, JMS ERR4 |
| 239 | TAD COUNT |
| 240 | SZA CLA |
| 241 | JMP QUEST1 |
| 242 | JMP I QUEST /--RETURN-- |
| 243 | |
| 244 | |
| 245 | /CONVERT UNIT NUMBER TO A WORD OF THE FORM |
| 246 | /000 XXX XXX 000 OR |
| 247 | /100 XXX XXX 000 |
| 248 | /WHERE XY0 IS THE THIRD DIGIT OF THE IOT |
| 249 | /AND 0 OR 1 REFLECTS THE TD8E UNIT NUMBER |
| 250 | /ENTER WITH THE UNIT NUMBER IN THE AC |
| 251 | /EXIT WITH SPECIAL CODE IN AC |
| 252 | |
| 253 | UNITNO, 0 |
| 254 | AND [7 /MASK OUT ALL EXTRANEOUS BITS |
| 255 | CLL RAR /SAVE 0/1 BIT IN LINK |
| 256 | MQL /STORE ROTATED WORD, CLEAR AC |
| 257 | RAR |
| 258 | SWP /PRESERVE 0/1 BIT IN MQ |
| 259 | TAD TABX /GET DEVICE NUMBER CORRECTLY |
| 260 | DCA CRLF |
| 261 | TAD I CRLF |
| 262 | MQA /OR IN 0/1 BIT |
| 263 | JMP I UNITNO /--RETURN-- |
| 264 | |
| 265 | TABX, UNITS |
| 266 | |
| 267 | /SKIP 4 LINES AND FETCH MARK TRACK |
| 268 | |
| 269 | SKIPQ, 0 |
| 270 | IOTR5, SDSQ |
| 271 | JMP .-1 |
| 272 | IOTR6, SDRC |
| 273 | JMP I SKIPQ /--RETURN-- |
| 274 | \f |
| 275 | *400 |
| 276 | |
| 277 | /USER RESPONSE HANDLER |
| 278 | /USES MQ FOR TEMPORARY STORAGE |
| 279 | /EXIT WITH RESPONSE IN MQ |
| 280 | /EXIT TO CALL+1 IF JUST CARRIAGE RETURN |
| 281 | /OR ILLEGAL CHARACTER, CARRIAGE RETURN |
| 282 | /OR ;,CARRIAGE RETURN |
| 283 | /EXIT TO CALL+2 IF GOOD DATA, CARRIAGE RETURN |
| 284 | /INCREMENT COUNT AND EXIT TO CALL+2 IF GOOD DATA; |
| 285 | /ILLEGAL CHARACTERS CAUSE WHOLE ANSWER TO BE IGNORED |
| 286 | /AND EXIT TO CALL+1 |
| 287 | |
| 288 | ANSWER, 0 |
| 289 | CAM /CLEAR AC AND MQ |
| 290 | TAD CLEAR |
| 291 | DCA SWITCH |
| 292 | MORE, JMS LISTEN /FETCH A CHARACTER |
| 293 | TAD (-215 |
| 294 | SZA /IS IT A CARRIAGE RETURN? |
| 295 | JMP .+5 /NO |
| 296 | TAD [212 /YES--OUTPUT LINE FEED |
| 297 | JMS TYPE |
| 298 | SWITCH, NOP /SET UP EXIT ADDRESS |
| 299 | JMP I ANSWER /--RETURN-- |
| 300 | TAD (215-260 |
| 301 | SPA /IS CHARACTER LESS THAN 260? |
| 302 | JMP BAD /YES--ILLEGAL CHARACTER |
| 303 | TAD [260-270 /NO |
| 304 | SMA /IS IT MORE THAN 269? |
| 305 | JMP SEMI /YES--CHECK FOR SEMICOLON |
| 306 | TAD (270 /RESTORE CHARACTER |
| 307 | AND [7 /MASK OUT EXTRANEOUS BITS |
| 308 | CLL |
| 309 | SWP |
| 310 | AND (777 /MASK OUT FIRST DIGIT IF THERE ARE 4 |
| 311 | RAL /ROTATE 3 LEFT |
| 312 | RTL |
| 313 | MQA /FETCH NEW CHARACTER |
| 314 | MQL /STORE RESULT IN MQ |
| 315 | TAD SKIP /SET UP TO SKIP ON RETURN |
| 316 | DCA SWITCH |
| 317 | JMP MORE /FETCH ANOTHER |
| 318 | |
| 319 | \f |
| 320 | CLEAR, NOP |
| 321 | SKIP, ISZ ANSWER |
| 322 | |
| 323 | BAD, CLA /ILLEGAL CHARACTER |
| 324 | JMS I [CRLF |
| 325 | JMP I ANSWER /--RETURN-- |
| 326 | |
| 327 | |
| 328 | /TEST FOR SEMICOLON |
| 329 | |
| 330 | SEMI, TAD (270-273 |
| 331 | SZA CLA /IS CHARACTER A SEMICOLON? |
| 332 | JMP BAD /NO--ILLEGAL CHARACTER |
| 333 | ISZ COUNT /YES--INCREMENT COUNTER |
| 334 | JMP SWITCH /EXIT FROM ANSWER ROUTINE |
| 335 | |
| 336 | |
| 337 | /TELETYPE INPUT AND ECHO HANDLER |
| 338 | |
| 339 | LISTEN, 0 |
| 340 | KSF |
| 341 | JMP .-1 |
| 342 | JMS I [PARITY |
| 343 | TLS /ECHO CHARACTER |
| 344 | JMS CHECK /CHECK FOR CTRL/C AND CTRL/S |
| 345 | JMP I LISTEN /--RETURN-- |
| 346 | |
| 347 | /CHECK FOR CTRL/C AND CTRL/S |
| 348 | /ENTER WITH INPUT CHARACTER IN AC |
| 349 | /EXIT TO HANDLER OR WITH CHARACTER IN AC |
| 350 | |
| 351 | CHECK, 0 |
| 352 | TAD (-203 |
| 353 | SNA /IS IT CTRL/C? |
| 354 | JMP I CTRLC /YES--HANDLE IT |
| 355 | TAD (203-223 |
| 356 | SNA /IS IT CTRL/S? |
| 357 | JMP I [REPEAT /YES--HANDLE IT |
| 358 | TAD (223 /RESTORE CHARACTER |
| 359 | JMP I CHECK /--RETURN-- |
| 360 | |
| 361 | CTRLC, LIMIT |
| 362 | \f |
| 363 | /MESSAGE OUTPUT HANDLER |
| 364 | |
| 365 | /EXPECTS MESSAGE ADDRESS TO BE IN LOCATION AFTER CALL |
| 366 | /EXITS TO CALL+2 |
| 367 | |
| 368 | MESSGE, 0 |
| 369 | TAD I MESSGE |
| 370 | DCA FINDER /SET UP POINTER |
| 371 | ISZ MESSGE |
| 372 | DCA LOC /SET L/R SWITCH TO L (EVEN) |
| 373 | LNEXT, TAD I FINDER /GET WORD |
| 374 | BSW |
| 375 | RHALF, AND [77 |
| 376 | SNA /IS CHARACTER 0 (TERMINATOR)? |
| 377 | JMP I MESSGE /YES--RETURN-- |
| 378 | DCA CHAR |
| 379 | TAD CHAR |
| 380 | AND (40 |
| 381 | SNA CLA /IS IT A LETTER? |
| 382 | TAD [100 /YES--301-337 |
| 383 | TAD [200 /NO--240-277 |
| 384 | TAD CHAR /RESTORE CHARACTER |
| 385 | JMS TYPE /OUTPUT IT |
| 386 | ISZ LOC |
| 387 | TAD LOC |
| 388 | RAR |
| 389 | SZL CLA /WHICH HALF WAS THAT? |
| 390 | JMP .+3 |
| 391 | ISZ FINDER /RIGHT |
| 392 | JMP LNEXT |
| 393 | TAD I FINDER /LEFT |
| 394 | JMP RHALF |
| 395 | FINDER, 0 |
| 396 | LOC, 0 |
| 397 | CHAR, 0 |
| 398 | |
| 399 | |
| 400 | /TELETYPE OUTPUT ROUTINE |
| 401 | |
| 402 | |
| 403 | TYPE, 0 |
| 404 | TSF |
| 405 | JMP .-1 |
| 406 | TLS |
| 407 | CLA |
| 408 | JMP I TYPE /--RETURN-- |
| 409 | |
| 410 | \f |
| 411 | /INSERT IOT'S ACCORDING TO TABLES |
| 412 | /UNIT CONTAINS APPROPRIATE UNIT CODE |
| 413 | /COUNT CONTAINS -(NUMBER OF IOT'S TO TRANSFER) |
| 414 | /COUNT1 CONTAINS ADDRESS OF ADDRESS TABLE |
| 415 | /UNIT CONTAINS UNIT CODE OF CURRENT UNIT |
| 416 | |
| 417 | INSERT, 0 |
| 418 | TAD I COUNT1 |
| 419 | DCA COUNT3 |
| 420 | TAD UNIT |
| 421 | MQL |
| 422 | TAD I COUNT3 /MAKE NEW IOT |
| 423 | AND (7007 |
| 424 | MQA |
| 425 | CIA |
| 426 | TAD I COUNT3 /COMPARE WITH IOT FROM PROGRAM |
| 427 | SNA CLA /ARE THE IOT'S THE SAME AS THE LAST UNIT? |
| 428 | JMP I INSERT /YES--RETURN-- |
| 429 | INS1, TAD I COUNT1 |
| 430 | DCA COUNT3 |
| 431 | TAD I COUNT3 /GET IOT FROM PROGRAM |
| 432 | AND (7007 /RETAIN ONLY SIGNIFICANT BITS |
| 433 | MQA /OR IN UNIT NUMBER |
| 434 | DCA I COUNT3 /PUT IT IN PROGRAM |
| 435 | ISZ COUNT1 /BUMP COUNTERS |
| 436 | ISZ COUNT /DONE YET? |
| 437 | JMP INS1 /NO |
| 438 | JMP I INSERT /YES--RETURN-- |
| 439 | |
| 440 | |
| 441 | PAGE |
| 442 | \f |
| 443 | /COUNT THE NUMBER OF WORDS PER BLOCK |
| 444 | /PLACE IT IN MWORDS |
| 445 | /BE SURE ALL TAPES MATCH INPUT FORMAT |
| 446 | |
| 447 | SETUP, TAD LIST |
| 448 | DCA OPOINT /SET POINTER TO I/O LIST |
| 449 | DCA COUNT2 /CLEAR COUNTER |
| 450 | TAD OCOUNT |
| 451 | CMA |
| 452 | DCA OUTNUM /SET # OF UNITS |
| 453 | SET4, TAD (TABLE1-END1-1 /SET UP COUNTERS FOR IOT FIX |
| 454 | DCA COUNT |
| 455 | TAD (TABLE1 |
| 456 | DCA COUNT1 |
| 457 | TAD I OPOINT |
| 458 | DCA UNIT |
| 459 | JMS I [INSERT /PUT THE PROPER IOT'S IN THE FOLLOWING ROUTINE |
| 460 | DCA WDCNT /CLEAR WORD COUNT |
| 461 | TAD UNIT |
| 462 | AND [4000 |
| 463 | TAD (2000 |
| 464 | IOTX7, SDLC |
| 465 | CLA |
| 466 | IOTX8, SDRC |
| 467 | RTL |
| 468 | SZL /DOES UNIT EXIST? |
| 469 | JMP .+3 /YES |
| 470 | SELERR, JMS I [ERR3 /@SELECT ERROR UNIT N@ |
| 471 | JMP SETUP |
| 472 | AND (400 |
| 473 | SZA CLA /TURNED ON? |
| 474 | JMP SELERR /NO |
| 475 | TAD UNIT /GET 0 OR 1 UNIT BIT (0 OR 4000) |
| 476 | AND [4000 |
| 477 | TAD [1000 /GET GO BIT |
| 478 | IOTX1, SDLC /START READING FORWARD |
| 479 | JMS SKIP4 /SKIP 8 LINES TO AVOID GARBAGE |
| 480 | JMS SKIP4 |
| 481 | IOTX3, SDSS /LOOK FOR FORWARD BLOCK NUMBER (26) |
| 482 | JMP .-1 |
| 483 | IOTX4, SDRC |
| 484 | AND [77 |
| 485 | TAD (-26 |
| 486 | SZA CLA /FOUND YET? |
| 487 | JMP IOTX3 /NO--KEEP LOOKING |
| 488 | \f |
| 489 | SET2, JMS SKIP4 /YES--START COUNTING LINES BY FOURS |
| 490 | ISZ WDCNT |
| 491 | NOP |
| 492 | AND [77 |
| 493 | TAD (-51 |
| 494 | SZA CLA /FOUND GUARD YET? |
| 495 | JMP SET2 /NO |
| 496 | TAD UNIT /YES |
| 497 | AND [4000 |
| 498 | IOTX2, SDLC /STOP UNIT |
| 499 | CLA |
| 500 | TAD COUNT2 |
| 501 | SZA /IS THIS THE INPUT UNIT? |
| 502 | JMP SET5 /NO |
| 503 | TAD (-11 /YES--SAVE THE COUNT |
| 504 | TAD WDCNT |
| 505 | CIA |
| 506 | DCA COUNT2 |
| 507 | JMP SET3 /FIRST OUTPUT UNIT |
| 508 | SET5, TAD (-11 /NOT INPUT UNIT |
| 509 | TAD WDCNT |
| 510 | SZA CLA /SAME NUMBER OF WORDS AS INPUT UNIT? |
| 511 | JMP ERR5 /NO*ILLEGAL FORMAT* |
| 512 | SET3, ISZ OPOINT /NEXT UNIT |
| 513 | ISZ OUTNUM /DONE YET? |
| 514 | JMP SET4 /NO |
| 515 | TAD COUNT2 /YES--PRINT MESSAGE |
| 516 | DCA I [MWORDS /SET UP NUMBER OF WORDS PER BLOCK |
| 517 | TAD I [MWORDS |
| 518 | CIA |
| 519 | JMS I [PRINT /PRINT 4 DIGIT NUMBER OF BLOCKS |
| 520 | JMS I [MESSGE /YES--PRINT REST OF MESSAGE |
| 521 | MESSG3 |
| 522 | JMS I [CRLF |
| 523 | \f |
| 524 | /IF WHOLE TAPE IS TO BE COPIED, IT IS NECESSARY TO |
| 525 | /COMPUTE THE NUMBER OF BLOCKS ON THE TAPE (NB) |
| 526 | /USING THE NUMBER OF WORDS PER BLOCK (WB) |
| 527 | /AND THE FORMULA: |
| 528 | /OCTAL: NB=[63 6160/(WB+17)]+2 |
| 529 | /DECIMAL: NB=[212,080/(WB+15)]+2 |
| 530 | |
| 531 | TAD NUMBER |
| 532 | SZA CLA /COPY WHOLE TAPE? |
| 533 | JMP VERFQ /NO-- |
| 534 | DCA COUNT /YES--COMPUTE NUMBER OF BLOCKS ON TAPE |
| 535 | TAD I [MWORDS |
| 536 | CIA |
| 537 | TAD (17 |
| 538 | DCA COUNT1 /GET NUMBER OF WORDS PER BLOCK+17 |
| 539 | TAD (-64 |
| 540 | DCA COUNT2 |
| 541 | TAD (-6160 |
| 542 | SUB, CLL |
| 543 | TAD COUNT1 |
| 544 | ISZ COUNT /COUNT A BLOCK--TOO MANY? |
| 545 | SKP /NO |
| 546 | JMP ERR5 /YES--ERROR |
| 547 | SZL |
| 548 | ISZ COUNT2 |
| 549 | JMP SUB |
| 550 | CLA CLL |
| 551 | TAD COUNT /COUNT IS [63 6160/WB+17]+1 |
| 552 | IAC /ADD 1 MORE |
| 553 | DCA NUMBER /STORE AS # OF BLOCKS TO TRANSFER |
| 554 | JMP I .+1 |
| 555 | VERFQ |
| 556 | |
| 557 | ERR5, CLA |
| 558 | JMS I [MESSGE |
| 559 | ERROR5 /*ILLEGAL FORMAT UNIT* |
| 560 | JMS I [DECODE /PRINT UNIT NUMBER |
| 561 | JMS I [CTRLR /WAIT FOR CTRL/R |
| 562 | JMS I [CRLF /CARRIAGE RETURN/LINE FEED |
| 563 | JMP SETUP /TRY AGAIN |
| 564 | |
| 565 | |
| 566 | |
| 567 | |
| 568 | /READ FOUR LINES AND FETCH MARK TRACK |
| 569 | |
| 570 | SKIP4, 0 |
| 571 | IOTX5, SDSQ |
| 572 | JMP .-1 |
| 573 | IOTX6, SDRC |
| 574 | JMP I SKIP4 /--RETURN-- |
| 575 | |
| 576 | |
| 577 | |
| 578 | \f |
| 579 | PAGE |
| 580 | |
| 581 | /IS TAPE TO BE VERIFIED? |
| 582 | /SET UP DEPENDING ON RESPONSE |
| 583 | VERFQ, TAD VERF |
| 584 | SZA CLA /VERIFY? |
| 585 | JMP YES /YES-- |
| 586 | TAD (NOP /NO-- |
| 587 | DCA I VERF1A |
| 588 | TAD (OUTN |
| 589 | DCA I VERF2A |
| 590 | JMP CONT |
| 591 | YES, TAD (RAR |
| 592 | DCA I VERF1A |
| 593 | TAD (VERIFY |
| 594 | DCA I VERF2A |
| 595 | CONT, JMP I .+1 |
| 596 | DOIT |
| 597 | |
| 598 | VERF1A, VERF1 |
| 599 | VERF2A, VERF2 |
| 600 | |
| 601 | /WAIT FOR CTRL/R |
| 602 | |
| 603 | CTRLR, 0 |
| 604 | JMS I [LISTEN /FETCH CHARACTER |
| 605 | TAD [-222 |
| 606 | SZA CLA /IT IT CTRL/R? |
| 607 | JMP .-3 /NO--WAIT FOR ONE |
| 608 | JMS I [CRLF /CARRIAGE RETURN/LINE FEED |
| 609 | JMP I CTRLR /--RETURN-- |
| 610 | |
| 611 | |
| 612 | REPEAT, DCA COUNT |
| 613 | JMS I [CRLF |
| 614 | JMS I [QUEST /@REPEAT (YES=1;NO=0):@ |
| 615 | MESS11 |
| 616 | ACL |
| 617 | AND [7 |
| 618 | SZA CLA |
| 619 | JMP I [CLEAN /YES |
| 620 | JMP I [START+4 /NO--RESTART |
| 621 | \f |
| 622 | MESSG6, TEXT @FIRST INPUT BLOCK:@ |
| 623 | MESSG7, TEXT @FIRST OUTPUT BLOCK:@ |
| 624 | MESSG8, TEXT @NUMBER OF BLOCKS TO COPY:@ |
| 625 | MESSG9, TEXT @VERIFY OUTPUT (YES=1,NO=0):@ |
| 626 | MESS10, TEXT @DONE@ |
| 627 | MESS11, TEXT @REPEAT (YES=1,NO=0):@ |
| 628 | ERROR1, TEXT @VERIFY ERROR BLOCK @ |
| 629 | ERROR2, TEXT @TAPE ERROR BLOCK @ |
| 630 | ERROR3, TEXT @SELECT ERROR UNIT @ |
| 631 | \f |
| 632 | PAGE |
| 633 | |
| 634 | /SETUP FOR ACTUAL READ/WRITE/VERIFY OPERATION |
| 635 | DOIT, TAD [LIMIT-END /SET UP NUMBER OF BLOCKS |
| 636 | JMS DIV1 /IN FIELD 0 BUFFER |
| 637 | DCA FLD0 |
| 638 | TAD M200 |
| 639 | JMS DIV1 /AND IN FIELD N BUFFERS |
| 640 | DCA FLDN |
| 641 | TAD IBLOCK /SET UP RUNNING COUNTERS AND POINTERS |
| 642 | DCA INB /FOR NEXT INPUT BLOCK |
| 643 | TAD OBLOCK |
| 644 | DCA OUTB /FOR NEXT OUTPUT BLOCK |
| 645 | TAD NUMBER |
| 646 | DCA NUMB1 /FOR NUMBER OF BLOCKS LEFT TO TRANSFER |
| 647 | JMP .+4 |
| 648 | ALLDUN, TAD XNUMB |
| 649 | SNA CLA /DONE WITH ALL BLOCKS YET? |
| 650 | JMP REWIND /YES |
| 651 | /READ--- |
| 652 | READX, TAD LIST /NO--SET UP POINTER TO OUTPUT UNITS |
| 653 | DCA OPOINT |
| 654 | TAD OCOUNT |
| 655 | CMA |
| 656 | DCA OUTNUM |
| 657 | TAD INB |
| 658 | DCA BLOCKN |
| 659 | TAD NUMB1 /SET POINTERS FOR TRANSFER |
| 660 | DCA XNUMB |
| 661 | TAD NUMB1 |
| 662 | DCA NUMB2 /SAVE COUNTER FOR WRITE |
| 663 | TAD INPUT /SELECT INPUT UNIT |
| 664 | DCA UNIT |
| 665 | DCA RW /SET R/W BIT TO READ |
| 666 | \f |
| 667 | TAD [END /SET START OF BUFFERS IN CASE |
| 668 | DCA BUF0 /THEY WERE CHANGED BY VERIFY |
| 669 | DCA BUFN |
| 670 | JMS I [READY /FILL THE BUFFERS |
| 671 | TAD XNUMB /SAVE THE POINTERS |
| 672 | DCA NUMB1 |
| 673 | TAD BLOCKN |
| 674 | DCA INB |
| 675 | |
| 676 | OUTN, ISZ OPOINT |
| 677 | ISZ OUTNUM /DONE WITH ALL UNITS YET? |
| 678 | JMP .+4 /NO--CONTINUE WRITING |
| 679 | TAD OHOLD /YES |
| 680 | DCA OUTB |
| 681 | JMP ALLDUN /READ ANOTHER BUFFER LOAD |
| 682 | WRITEX, TAD OUTB |
| 683 | DCA OHOLD |
| 684 | TAD OHOLD /WRITE |
| 685 | DCA BLOCKN /RESET POINTERS |
| 686 | TAD OUTB |
| 687 | DCA VB /SAVE COUNTER FOR VERIFY |
| 688 | TAD NUMB2 |
| 689 | DCA XNUMB |
| 690 | TAD I OPOINT /SELECT OUTPUT UNIT |
| 691 | DCA UNIT |
| 692 | CLA CLL CML RAR /AC=4000 |
| 693 | DCA RW /SET R/W BIT TO WRITE |
| 694 | JMS I [READY |
| 695 | TAD BLOCKN |
| 696 | DCA OHOLD |
| 697 | JMP I .+1 |
| 698 | VERF2, VERIFY |
| 699 | |
| 700 | |
| 701 | \f |
| 702 | /SEE HOW MANY BLOCKS WILL FIT INTO BUFFER |
| 703 | /ENTER WITH BUFFER SIZE IN AC |
| 704 | /EXIT WITH # OF BLOCKS IN AC |
| 705 | |
| 706 | DIV1, 0 |
| 707 | DCA COUNT1 |
| 708 | DCA COUNT |
| 709 | TAD COUNT1 /TOTAL WORDS |
| 710 | DIV2, CLL |
| 711 | TAD I [MWORDS /-NUMBER OF WORDS PER BLOCK |
| 712 | SNL /RUN OUT OF ROOM? |
| 713 | JMP .+3 /YES-- |
| 714 | ISZ COUNT /NO--COUNT A BLOCK |
| 715 | JMP DIV2 |
| 716 | CLA CLL /IGNORE LESS THAN A BLOCK LEFT |
| 717 | TAD COUNT |
| 718 | VERF1, RAR /DIVIDE BY 2 IF VERIFY (NOP IF NO VERIFY) |
| 719 | JMP I DIV1 /--RETURN-- |
| 720 | |
| 721 | /END OF OPERATION |
| 722 | /REWIND TAPES TO INITIAL END ZONE |
| 723 | |
| 724 | REWIND, TAD OCOUNT |
| 725 | CMA |
| 726 | DCA COUNT2 /SET NUMBER OF TAPES STILL SPINNING |
| 727 | RLIST, CLA CMA |
| 728 | TAD LIST |
| 729 | DCA OPOINT /SET POINTER TO UNIT LIST |
| 730 | TAD OCOUNT |
| 731 | IAC |
| 732 | CMA |
| 733 | DCA OUTNUM /SET NUMBER OF UNITS IN LIST |
| 734 | RUNIT, JMS I [PARITY |
| 735 | JMS I [CHECK /CHECK TTY FOR CTRL/S OR CTRL/C |
| 736 | ISZ OUTNUM /DONE WITH WHOLE LIST YET? |
| 737 | SKP CLA /NO |
| 738 | JMP RLIST /YES--START THROUGH LIST AGAIN |
| 739 | ISZ OPOINT |
| 740 | TAD I OPOINT /GET UNIT CODE |
| 741 | RTL |
| 742 | SZL CLA /STILL SPINNING? |
| 743 | JMP RUNIT /NO--TRY NEXT TAPE |
| 744 | TAD I OPOINT /YES |
| 745 | DCA UNIT |
| 746 | \f |
| 747 | |
| 748 | TAD [-6 |
| 749 | DCA COUNT |
| 750 | TAD [RTAB |
| 751 | DCA COUNT1 |
| 752 | JMS I [INSERT /PUT PROPER IOT'S IN THIS ROUTINE |
| 753 | TAD I OPOINT |
| 754 | AND [4000 /UNIT/READ |
| 755 | TAD [3000 /REVERSE/GO |
| 756 | IOTR1, SDLC |
| 757 | JMS I [SKIPQ |
| 758 | JMS I [SKIPQ /WAIT FOR DRIVE TO GET UP TO SPEED |
| 759 | IOTR2, SDSS |
| 760 | JMP .-1 |
| 761 | IOTR3, SDRC /GET MARK TRACK BITS |
| 762 | AND [77 |
| 763 | TAD [-22 |
| 764 | SZA CLA /END ZONE? |
| 765 | JMP RUNIT /NO--NEXT UNIT |
| 766 | CLA CLL CML RTR /AC=2000 |
| 767 | MQA /UNIT CODE STILL IN MQ FROM INSERT |
| 768 | DCA I OPOINT /SET STOPPED BIT |
| 769 | TAD I OPOINT |
| 770 | AND [6000 |
| 771 | IOTR4, SDLC /STOP UNIT |
| 772 | M200, 7600 /CLA |
| 773 | ISZ COUNT2 /ALL TAPES STOPPED? |
| 774 | JMP RUNIT /NO--NEXT UNIT |
| 775 | JMS I [MESSGE /YES |
| 776 | MESS10 /@DONE@ |
| 777 | JMP I [REPEAT |
| 778 | |
| 779 | \f |
| 780 | |
| 781 | PAGE |
| 782 | |
| 783 | /VERIFICATION ROUTINES |
| 784 | |
| 785 | VERIFY, TAD VB /SET POINTERS AND COUNTERS FOR TRANSFER |
| 786 | DCA BLOCKN |
| 787 | TAD NUMB2 |
| 788 | DCA XNUMB |
| 789 | DCA RW |
| 790 | TAD END0 /SET BEGINNINGS OF VERIFY BUFFERS |
| 791 | DCA BUF0 |
| 792 | TAD (3700 |
| 793 | DCA BUFN |
| 794 | TAD CDF0 |
| 795 | DCA COMP2 |
| 796 | JMS I [READY /READ VERIFY BUFFERS FULL |
| 797 | TAD COUNT1 /GET # OF BLOCKS IN LAST BUFFER FILLED |
| 798 | DCA COUNT3 |
| 799 | CMA /SET AUTOINDEX POINTERS TO BUFFERS |
| 800 | TAD [END |
| 801 | DCA X11 |
| 802 | CMA CLL |
| 803 | TAD END0 |
| 804 | DCA X12 |
| 805 | TAD COUNT |
| 806 | CMA |
| 807 | TAD FIELDS |
| 808 | DCA COUNT /SET NUMBER OF FIELDS WHICH WERE FILLED |
| 809 | JMS COMP4 /GET NUMBER OF BLOCKS |
| 810 | TAD FLD0 |
| 811 | CIA |
| 812 | DCA COUNT4 /SET COUNTER |
| 813 | JMS COMP /COMPARE THE BUFFERS |
| 814 | \f |
| 815 | COMP3, TAD COUNT |
| 816 | SNA CLA |
| 817 | JMP I [OUTN |
| 818 | JMS COMP4 /GET NUMBER OF BLOCKS |
| 819 | TAD FLDN |
| 820 | CIA |
| 821 | DCA COUNT4 |
| 822 | TAD COMP2 /EACH FIELD------ |
| 823 | TAD (10 |
| 824 | DCA COMP2 /SET CDF INSTRUCTION PROPERLY |
| 825 | CMA CLL /SET AUTOINDEX POINTERS TO BUFFERS |
| 826 | DCA X11 |
| 827 | TAD (3677 |
| 828 | DCA X12 |
| 829 | JMS COMP |
| 830 | JMP COMP3 /DO THE NEXT FIELD |
| 831 | |
| 832 | |
| 833 | /ENTER WITH AC CLEAR |
| 834 | /EXIT TO CALL+1 WITH AC CLEAR IF |
| 835 | /NORMAL BUFFER FILL |
| 836 | /EXIT TO CALL+2 WITH # OF BLOCKS IN AC IF |
| 837 | /LAST BUFFER |
| 838 | |
| 839 | COMP4, 0 |
| 840 | ISZ COUNT /LAST FIELD FILLED? |
| 841 | JMP I COMP4 /NO--RETURN-- |
| 842 | TAD XNUMB /YES--OUT OF BLOCKS? |
| 843 | SZA CLA |
| 844 | JMP I COMP4 /NO--RETURN-- |
| 845 | TAD COUNT3 /YES--GET ACTUAL # OF BLOCKS |
| 846 | ISZ COMP4 /INCREMENT RETURN ADDRESS |
| 847 | JMP I COMP4 /--RETURN-- |
| 848 | |
| 849 | \f |
| 850 | /COMPARE PORTION OF VERIFY ROUTINE |
| 851 | |
| 852 | COMP, 0 |
| 853 | TAD I [MWORDS /SET NUMBER OF WORDS PER BLOCK COUNTER |
| 854 | DCA COUNT2 |
| 855 | COMP2, HALT /SHOULD CONTAIN CDF N |
| 856 | TAD I X11 /GET CORRESPONDING WORDS FROM EACH BUFFER |
| 857 | CIA |
| 858 | TAD I X12 |
| 859 | CDF0, CDF 0 |
| 860 | SZA CLA /DO WORDS MATCH? |
| 861 | JMP ERR1 /NO--VERIFY ERROR |
| 862 | TRY, ISZ COUNT2 /DONE WITH BLOCK? |
| 863 | JMP COMP2 /NO--CONTINUE |
| 864 | ISZ COUNT4 /DONE WITH ALL BLOCKS? |
| 865 | JMP COMP+1 /NO |
| 866 | JMP I COMP /YES--RETURN-- |
| 867 | |
| 868 | ERR1, JMS I [MESSGE |
| 869 | ERROR1 /*VERIFY ERROR BLOCK * |
| 870 | TAD COUNT4 /GET CURRENT BLOCK NUMBER |
| 871 | CIA |
| 872 | TAD I (BLOCKS /FROM BLOCK THIS OPERATION STARTED WITH |
| 873 | JMS PRINT /PRINT 4 DIGIT BLOCK NUMBER |
| 874 | JMS I [MESSGE |
| 875 | ERROR6 /*UNIT * |
| 876 | JMS I [DECODE /PRINT UNIT NUMBER |
| 877 | WAIT, JMS I [LISTEN /WAIT FOR RESPONSE |
| 878 | DCA PRINT |
| 879 | JMS I [CRLF |
| 880 | TAD PRINT |
| 881 | TAD [-224 |
| 882 | SNA /WAS IT CTRL/T? |
| 883 | JMP I [WRITEX /YES--TRY AGAIN |
| 884 | TAD [2 |
| 885 | SZA CLA /WAS IT CTRL/R? |
| 886 | JMP WAIT /NO--WAIT FOR A GOOD RESPONSE |
| 887 | JMP TRY /YES--IGNORE AND CONTINUE |
| 888 | |
| 889 | \f |
| 890 | |
| 891 | |
| 892 | /PRINT A 4 DIGIT OCTAL NUMBER |
| 893 | /ENTER WITH NUMBER IN AC |
| 894 | |
| 895 | PRINT, 0 |
| 896 | DCA I [MESSGE /TEMPORARY STORAGE |
| 897 | TAD [-4 |
| 898 | DCA I [ANSWER /SET DIGIT COUNTER |
| 899 | TAD I [MESSGE |
| 900 | RAL |
| 901 | DCA I [CRLF |
| 902 | FOUR, TAD I [CRLF |
| 903 | RAL |
| 904 | RTL |
| 905 | DCA I [CRLF |
| 906 | TAD I [CRLF |
| 907 | AND [7 |
| 908 | TAD [260 |
| 909 | JMS I [TYPE /PRINT ONE DIGIT |
| 910 | ISZ I [ANSWER /DONE YET? |
| 911 | JMP FOUR /NO |
| 912 | JMP I PRINT /YES--RETURN-- |
| 913 | |
| 914 | |
| 915 | /CLEAN UP UNIT TABLES AFTER REWIND |
| 916 | |
| 917 | CLEAN, TAD LIST |
| 918 | DCA OPOINT |
| 919 | TAD OCOUNT |
| 920 | CMA |
| 921 | DCA OUTNUM /SET POINTER AND COUNTER |
| 922 | CLEAN1, TAD I OPOINT /GET UNIT CODE |
| 923 | AND (4770 /MASK OUT EXTRANEOUS BITS |
| 924 | DCA I OPOINT /REPLACE IT |
| 925 | ISZ OPOINT |
| 926 | ISZ OUTNUM /DONE YET? |
| 927 | JMP CLEAN1 /NO |
| 928 | JMP I [DOIT /YES--NEXT OPERATION |
| 929 | |
| 930 | |
| 931 | |
| 932 | \f |
| 933 | PAGE |
| 934 | |
| 935 | /FILL ALL N FIELDS ONCE |
| 936 | /ENTER WITH AC CLEAR |
| 937 | /# OF BLOCKS FOR FIELD 0 IN FLD0 |
| 938 | /# OF BLOCKS FOR OTHERS IN FLDN |
| 939 | /ADDRESSES OF BUFFERS IN BUF0, BUFN |
| 940 | /R/W BIT (0 OR 4000) IN RW |
| 941 | |
| 942 | |
| 943 | |
| 944 | READY, 0 |
| 945 | TAD [IOTLOC-TABEND-1 |
| 946 | DCA COUNT |
| 947 | TAD [IOTLOC |
| 948 | DCA COUNT1 |
| 949 | JMS I [INSERT /PUT PROPER IOT'S IN HANDLER |
| 950 | TAD UNIT |
| 951 | SPA CLA /EVEN OR ODD UNIT NUMBER? |
| 952 | CLL IAC RTL /ODD |
| 953 | TAD [ORIGIN /EVEN |
| 954 | DCA ENTRY /SET UP ENTRY TO HANDLER |
| 955 | TAD RW |
| 956 | MQL /STORE UNIT BIT FOR LATER |
| 957 | CMA |
| 958 | TAD FIELDS /SET COUNTER FOR # OF FIELDS |
| 959 | DCA COUNT |
| 960 | CLL |
| 961 | TAD FLD0 /ADJUST NUMBER OF BLOCKS TO |
| 962 | JMS SUB1 /TRANSFER DEPENDING ON NUMBER |
| 963 | TAD FLD0 /LEFT TO BE TRANSFERRED |
| 964 | JMS SUB2 /RESET FUNCTION WORD |
| 965 | TAD BUF0 /SET UP BUFFER POINTERS |
| 966 | JMS SUB3 |
| 967 | JMS TRANS /TRANSFER DATA--FIELD 0 |
| 968 | ZOOM, ISZ COUNT /BEGINNING OF LOOP FOR EACH FIELD ABOVE 0 |
| 969 | SKP /DONE YET? |
| 970 | JMP I READY /YES--RETURN-- |
| 971 | \f |
| 972 | TAD FIELDS |
| 973 | CIA CLL |
| 974 | TAD COUNT |
| 975 | IAC |
| 976 | RAL |
| 977 | RTL /GET FIELD SETTING READY |
| 978 | MQL /STORE IN MQ |
| 979 | TAD FUNCTN /GET PREVIOUS FUNCTION WORD |
| 980 | AND [4000 /GET R/W BIT |
| 981 | MQA /OR IN FIELD SETTING |
| 982 | MQL /STORE |
| 983 | CLL |
| 984 | TAD FLDN /ADJUST NUMBER OF BLOCKS TO TRANSFER |
| 985 | JMS SUB1 |
| 986 | TAD FLDN |
| 987 | JMS SUB2 /AND RESET FUNCTION WORD |
| 988 | TAD BUFN |
| 989 | JMS SUB3 /SET UP BUFFER POINTERS |
| 990 | JMS TRANS /TRANSFER DATA--FIELDS 1-N |
| 991 | JMP ZOOM /FILL ANOTHER FIELD |
| 992 | |
| 993 | SUB1, 0 |
| 994 | CIA |
| 995 | TAD XNUMB |
| 996 | CLL CML /SET LINK=1 |
| 997 | SMA /ARE THERE LESS BLOCKS LEFT THAN A FIELD FULL? |
| 998 | DCA XNUMB /NO--REDUCE COUNT OF BLOCKS LEFT |
| 999 | JMP I SUB1 /YES-TRANSFER BLOCKS LEFT--RETURN-- |
| 1000 | |
| 1001 | SUB2, 0 |
| 1002 | DCA COUNT1 /LINK=1 IF BLOCKS LEFT, 0 IF NONE |
| 1003 | SNL /DONE WITH ALL BLOCKS YET? |
| 1004 | DCA XNUMB /YES--BUMP SWITCH |
| 1005 | TAD COUNT1 /NO |
| 1006 | BSW |
| 1007 | MQA /PUT # OF BLOCKS INTO FUNCTION WORD |
| 1008 | DCA FUNCTN /START REVERSE |
| 1009 | JMP I SUB2 /--RETURN-- |
| 1010 | |
| 1011 | \f |
| 1012 | SUB3, 0 |
| 1013 | DCA BUFADD |
| 1014 | TAD BLOCKN /SET STARTING BLOCK NUMBER |
| 1015 | DCA BLOCKS |
| 1016 | TAD COUNT1 |
| 1017 | TAD BLOCKN |
| 1018 | DCA BLOCKN /RESET STARTING BLOCK FOR NEXT TIME |
| 1019 | JMP I SUB3 /--RETURN-- |
| 1020 | |
| 1021 | |
| 1022 | /CALL TO THE HANDLER |
| 1023 | |
| 1024 | TRANS, 0 |
| 1025 | JMS I [PARITY /CHECK TELETYPE |
| 1026 | JMS I [CHECK /WAS ^C OR ^S TYPED? |
| 1027 | JMS I ENTRY |
| 1028 | FUNCTN, 0 /FUNCTION WORD |
| 1029 | BUFADD, 0 /BUFFER ADDRESS |
| 1030 | BLOCKS, 0 /STARTING BLOCK NUMBER |
| 1031 | JMP ERR /ERROR RETURN |
| 1032 | JMS I [PARITY /CHECK TELETYPE |
| 1033 | JMS I [CHECK /WAS ^C OR ^S TYPED? |
| 1034 | CLA |
| 1035 | TAD XNUMB |
| 1036 | SZA CLA /DONE YET? |
| 1037 | JMP I TRANS /NO--RETURN-- |
| 1038 | ISZ COUNT |
| 1039 | JMP I READY /--RETURN-- |
| 1040 | JMP I READY /--RETURN-- |
| 1041 | |
| 1042 | /TRANSFER ERROR HANDLER |
| 1043 | |
| 1044 | ERR, SNA CLA /FATAL ERROR? |
| 1045 | JMP SELECT /NO |
| 1046 | JMS I [MESSGE /YES |
| 1047 | ERROR2 /*TAPE ERROR BLOCK * |
| 1048 | TAD I (BLOCK |
| 1049 | JMS I [PRINT /PRINT BLOCK NUMBER |
| 1050 | JMS I [MESSGE |
| 1051 | ERROR6 /*UNIT * |
| 1052 | JMS DECODE /PRINT UNIT NUMBER |
| 1053 | JMS I [CRLF |
| 1054 | JMP I [REWIND |
| 1055 | SELECT, JMS ERR3 |
| 1056 | ISZ FUNCTN /TURN AROUND AND TRY AGAIN |
| 1057 | JMP FUNCTN-1 |
| 1058 | |
| 1059 | \f |
| 1060 | ERR3, 0 |
| 1061 | JMS I [MESSGE |
| 1062 | ERROR3 /*SELECT ERROR UNIT * |
| 1063 | JMS DECODE /PRINT UNIT NUMBER |
| 1064 | JMS CTRLR /WAIT FOR CTRL/R |
| 1065 | JMP I ERR3 /--RETURN-- |
| 1066 | |
| 1067 | |
| 1068 | /DECODE UNIT NUMBER FOR PRINTING |
| 1069 | /PRINT UNIT NUMBER BEFORE RETURNING |
| 1070 | |
| 1071 | DECODE, 0 |
| 1072 | CLL |
| 1073 | TAD UNIT |
| 1074 | RAL |
| 1075 | MQL /SAVE ROTATED CODE IN MQ |
| 1076 | RAL |
| 1077 | SWP /SAVE EVEN/ODD BIT IN MQ |
| 1078 | RAR /WORK ON IOT CODE |
| 1079 | RTR |
| 1080 | IAC |
| 1081 | CMA |
| 1082 | AND [7 |
| 1083 | MQA /INCLUDE EVEN/ODD BIT |
| 1084 | TAD [260 /MAKE ASCII DIGIT |
| 1085 | JMS I [TYPE |
| 1086 | JMP I DECODE /--RETURN-- |
| 1087 | |
| 1088 | |
| 1089 | PAGE |
| 1090 | |
| 1091 | \f |
| 1092 | /TD8E DECTAPE HANDLER |
| 1093 | |
| 1094 | /SLIGHTLY MODIFIED VERSION OF DEC-E8-UZTA-D |
| 1095 | /COPYRIGHT 1971 DIGITAL EQUIPMENT CORPORATION |
| 1096 | / MAYNARD, MASSACHUSETTS 01754 |
| 1097 | |
| 1098 | /THE CALLING SEQUENCE IS: |
| 1099 | / JMS ENTRY |
| 1100 | / FUNCTION WORD |
| 1101 | / BUFFER ADDRESS |
| 1102 | / STARTING BLOCK |
| 1103 | / ERROR RETURN |
| 1104 | / NORMAL RETURN (AC CLEAR) |
| 1105 | |
| 1106 | /FUNCTION WORD: |
| 1107 | / BIT 0: 0=READ, 1=WRITE |
| 1108 | / BITS 1-5: # OF BLOCKS TO BE TRANSFERRED |
| 1109 | / BITS 6-8: FIELD OF BUFFER AREA |
| 1110 | / BITS 9-10: UNUSED |
| 1111 | / BIT 11: 1=START FORWARD, 0=START REVERSE |
| 1112 | |
| 1113 | /ERRORS: |
| 1114 | /THE HANDLER DETECTS TWO TYPES OF ERRORS: |
| 1115 | /FATAL ERRORS: |
| 1116 | / PARITY ERROR |
| 1117 | / TIMING ERROR |
| 1118 | / TOO GREAT A BLOCK NUMBER |
| 1119 | /FATAL ERRORS TAKE ERROR RETURN WITH AC=4000 |
| 1120 | /NON-FATAL ERROR: |
| 1121 | / SELECT ERROR (IMPROPER UNIT NUMBER OR NO UNIT NUMBER) |
| 1122 | /NON-FATAL ERROR TAKES ERROR RETURN WITH AC=0 |
| 1123 | \fPAGE |
| 1124 | |
| 1125 | MFIELD=0 |
| 1126 | ORIGIN=. |
| 1127 | |
| 1128 | DTA0, 0 /ENTRY POINT FROM UNIT 0 |
| 1129 | CLA CLL /0 TO LINK |
| 1130 | JMP DTA1X |
| 1131 | C1000, 1000 |
| 1132 | DTA1, 0 /UNIT 2 ENTRY |
| 1133 | CLA CLL CML /1 TO LINK |
| 1134 | TAD DTA1 |
| 1135 | DCA DTA0 /PICK UP ARGS AT DTA0 |
| 1136 | DTA1X, RAR |
| 1137 | DCA YUNIT /LINK TO UNIT POSITION |
| 1138 | RDF |
| 1139 | TAD C6203 /GET DATA FIELD AND SETUP RETURN |
| 1140 | DCA LEAVE |
| 1141 | TAD YUNIT /GET FUNCTION WORD |
| 1142 | IOT4, SDLC /PUT FUNCTION INTO DATA REGISTER |
| 1143 | TAD I DTA0 |
| 1144 | IOT1, SDLD |
| 1145 | CLA |
| 1146 | TAD MWORDS |
| 1147 | DCA WCOUNT /STORE MASTER WORD COUNT |
| 1148 | ISZ DTA0 /TO BUFFER |
| 1149 | TAD I DTA0 |
| 1150 | DCA BUFF |
| 1151 | ISZ DTA0 /TO BLOCK NUMBER |
| 1152 | TAD I DTA0 |
| 1153 | DCA BLOCK |
| 1154 | ISZ DTA0 /POINT TO ERROR EXIT |
| 1155 | CIF CDF MFIELD /TO ROUTINES DATA FIELD |
| 1156 | IOT2, SDRD /GET FUNCTION INTO AC |
| 1157 | CLL RAL |
| 1158 | AND CM200 /GET # PAGES TO XFER |
| 1159 | DCA PGCT |
| 1160 | IOT3, SDRD |
| 1161 | C374, AND C70 /GET FIELD FOR XFER |
| 1162 | TAD C6201 /FORM CDF N |
| 1163 | DCA XFIELD /IF=0 AND DF=N AT XFER. |
| 1164 | CLA CLL CMA RTL |
| 1165 | DCA TRYCNT /3 ERROR TRIES |
| 1166 | IOT5, SDRC |
| 1167 | AND C100 |
| 1168 | SZA CLA |
| 1169 | JMP FATAL-1 |
| 1170 | \f |
| 1171 | IOT6, SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. |
| 1172 | DCA I CXFUN |
| 1173 | TAD WCOUNT |
| 1174 | DCA I CXWCT |
| 1175 | IOT7, SDRD /GET MOTION BIT TO LINK |
| 1176 | CLL RAR |
| 1177 | JMP GO /AND START THE MOTION. |
| 1178 | RWCOM, SDST /ANY CHECKSUM ERRORS? |
| 1179 | SZA CLA /OR CHECKSUM ERRORS? |
| 1180 | JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS |
| 1181 | /SET AT RWCOM. GETCHK SETS IT. |
| 1182 | TAD PGCT /NO ERROR..FINISHED XFER? |
| 1183 | TAD CM200 |
| 1184 | SNA |
| 1185 | JMP EXIT /ALL DONE. GET OUT |
| 1186 | DCA PGCT /NEW PAGE COUNT |
| 1187 | ISZ BLOCK /NEXT BLOCK TO XFER |
| 1188 | TAD WCOUNT /FORM NEXT BUFFER ADDRESS |
| 1189 | CIA |
| 1190 | TAD BUFF |
| 1191 | DCA BUFF |
| 1192 | CLL CML /FORCES MOTION FORWARD |
| 1193 | GO, CLA CML RTR /LINK BECOMES MOTION BIT |
| 1194 | TAD C1000 |
| 1195 | TAD YUNIT /PUT IN 'GO' AND UNIT # |
| 1196 | IOT8, SDLC /LOOK FOR BLOCK NO. |
| 1197 | JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK |
| 1198 | JMS I CRDQUD |
| 1199 | CM200, 7600 /COULD HAVE SAVED A LOC. HERE |
| 1200 | SRCH, SDSS |
| 1201 | JMP .-1 /WAIT FOR SINGLE LINE FLAG |
| 1202 | IOT9, SDRC |
| 1203 | CLL RTL /DIRECTION TO LINK. INFO BITS |
| 1204 | /ARE SHIFTED. |
| 1205 | AND C374 /ISOLATE MARK TRACK BITS |
| 1206 | TAD M110 /IS IT END ZONE? |
| 1207 | SNA /THE LINK STAYS SAME THRU THIS |
| 1208 | JMP ENDZ |
| 1209 | TAD M20 /CHECK FOR BLOCK MARK |
| 1210 | SZA CLA |
| 1211 | JMP SRCH |
| 1212 | IOT10, SDRD /GET THE BLOCK NUMBER |
| 1213 | SZL /IF WE ARE IN REVERSE, LOOK FOR 3 |
| 1214 | /BLOCKS BEFORE TARGET BLOCK. THIS |
| 1215 | /ALLOWS TURNAROUND AND UP TO SPEED. |
| 1216 | TAD C3 /REVERSE |
| 1217 | CMA |
| 1218 | TAD BLOCK |
| 1219 | CMA /IS IT RIGHT BLOCK? |
| 1220 | SNA |
| 1221 | JMP FOUND /YES..HOORAY! |
| 1222 | M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? |
| 1223 | /ABOVE SNA IS SUPERFLUOUS. |
| 1224 | JMP SRCH /YES |
| 1225 | ENDZ, SDRC /WE ARE IN THE END ZONE |
| 1226 | CLL RTL /DIRECTION TO LINK |
| 1227 | CLA /ARE WE IN REVERSE? |
| 1228 | JMP GO /YES..TURN US AROUND |
| 1229 | /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR |
| 1230 | TRY3, CLL CLA |
| 1231 | ISZ TRYCNT |
| 1232 | JMP GO /TRY 3 TIMES |
| 1233 | CLL CLA |
| 1234 | JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN |
| 1235 | EXIT, ISZ DTA0 |
| 1236 | CLL CML /AC=0 ON NORMAL RETURN |
| 1237 | FATAL, TAD YUNIT |
| 1238 | SDLC /STOP THE UNIT |
| 1239 | CLA CML RAR |
| 1240 | LEAVE, HLT |
| 1241 | JMP I DTA0 /--RETURN-- |
| 1242 | |
| 1243 | \f |
| 1244 | C6201, 6201 |
| 1245 | C6203, 6203 |
| 1246 | CRDQUD, RDQUAD |
| 1247 | WCOUNT, 0 |
| 1248 | BUFF, 0 |
| 1249 | MWORDS, 0 |
| 1250 | YUNIT, 0 |
| 1251 | CXFUN, XFUNCT |
| 1252 | M20, -20 |
| 1253 | PGCT, 0 |
| 1254 | CXWCT, XWCT |
| 1255 | C100, 100 |
| 1256 | TRYCNT, -3 |
| 1257 | BLOCK=DTA1 |
| 1258 | |
| 1259 | |
| 1260 | *ORIGIN+170 |
| 1261 | FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? |
| 1262 | JMP GO /WRONG..TURN AROUND |
| 1263 | TAD YUNIT /PUT UNIT INTO LINK |
| 1264 | CLL RAL /AC IS NOW 0 |
| 1265 | C70, 70 /********DON'T MOVE THIS!!!!****** |
| 1266 | C3, 3 |
| 1267 | TAD BUFF /GET BUFFER ADDRESS |
| 1268 | XFIELD, HLT /INTO NEXT PAGE |
| 1269 | |
| 1270 | *ORIGIN+200 |
| 1271 | XUNIT=EQUFUN |
| 1272 | |
| 1273 | DCA XBUFF |
| 1274 | IOT16, SDRC |
| 1275 | IOT17, SDLC |
| 1276 | RAR /NOW GET UNIT # |
| 1277 | DCA XUNIT |
| 1278 | REVGRD, SDSS |
| 1279 | JMP REVGRD /LOOK FOR REVERSE GUARD |
| 1280 | IOT11, SDRC |
| 1281 | AND K77 |
| 1282 | TAD CM32 /IS IT REVERSE GUARD? |
| 1283 | SZA CLA |
| 1284 | JMP REVGRD /NO.KEEP LOOKING |
| 1285 | TAD XWCT |
| 1286 | DCA WORDS /WORD COUNTER |
| 1287 | TAD XFUNCT /GET FUNCTION READ OR WRITE |
| 1288 | K7700, SMA CLA |
| 1289 | JMP READ /NEG. IS WRITE |
| 1290 | WRITE, SDRC |
| 1291 | AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR |
| 1292 | CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS |
| 1293 | SZA CLA |
| 1294 | JMP I CFATAL /FATAL ERROR. LINK MUST BE ON |
| 1295 | JMS RDQUAD /NO ONE EVER USES THIS WORD! |
| 1296 | C7600, 7600 |
| 1297 | TAD C1400 |
| 1298 | TAD XUNIT /INITIATE WRITE MODE |
| 1299 | IOT12, SDLC |
| 1300 | CLA CMA |
| 1301 | JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM |
| 1302 | CLA CMA |
| 1303 | DCA CHKSUM |
| 1304 | WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! |
| 1305 | JMS WRQUAD |
| 1306 | ISZ XBUFF /BUMP CORE POINTER |
| 1307 | K77, 77 /ABOVE MAY SKIP |
| 1308 | ISZ WORDS /DONE THIS BLOCK? |
| 1309 | JMP WRLP /NOT YET..LOOP A WHILE |
| 1310 | TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? |
| 1311 | CLL RTR /IF NO, WRITE A 0 WORD |
| 1312 | SZL CLA |
| 1313 | \f |
| 1314 | JMS WRQUAD /WRITE A WORD OF 0 |
| 1315 | JMS GETCHK /DO THE CHECK SUM |
| 1316 | JMS WRQUAD /WRITE FORWARD CHECKSUM |
| 1317 | JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN |
| 1318 | JMP I CRWCOM |
| 1319 | |
| 1320 | |
| 1321 | READ, JMS RDQUAD |
| 1322 | JMS RDQUAD |
| 1323 | JMS RDQUAD /SKIP CONTROL WORDS |
| 1324 | AND K77 |
| 1325 | TAD K7700 /TACK 7700 ONTO CHECKSUM. |
| 1326 | DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY |
| 1327 | RDLP, JMS RDQUAD |
| 1328 | JMS EQUFUN /COMPUT CHECKSUM AS WE GO |
| 1329 | DCA I XBUFF /IT GETS CONDENSED LATER |
| 1330 | ISZ XBUFF |
| 1331 | C300, 300 /PROTECTION |
| 1332 | ISZ WORDS /DONE THIS OP? |
| 1333 | JMP RDLP /NO SUCH LUCK |
| 1334 | TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND |
| 1335 | CLL RTR /CHECKSUM THE LAST TAPE WORD |
| 1336 | SNL CLA |
| 1337 | JMP RDLP2 |
| 1338 | JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK |
| 1339 | JMS EQUFUN /CHECKSUM IT |
| 1340 | RDLP2, JMS RDQUAD /READ CHECKSUM |
| 1341 | AND K7700 |
| 1342 | JMS EQUFUN |
| 1343 | JMS GETCHK /GET SIX BIT CHECKSUM |
| 1344 | JMP I CRWCOM |
| 1345 | |
| 1346 | WRQUAD, 0 /WRITE OUT A 12 BIT WORD |
| 1347 | JMS EQUFUN /ADD THIS TO CHECKSUM |
| 1348 | IOT13, SDSQ /SKIP ON QUADLINE FLAG |
| 1349 | JMP .-1 |
| 1350 | IOT14, SDLD /LOAD DATA ONTO BUS |
| 1351 | CLA /SDLD DOESN'T CLEAR AC |
| 1352 | JMP I WRQUAD |
| 1353 | |
| 1354 | RDQUAD, 0 /READ A 12 BIT WORD |
| 1355 | SDSQ |
| 1356 | JMP .-1 |
| 1357 | IOT15, SDRD /READ DATA |
| 1358 | JMP I RDQUAD |
| 1359 | |
| 1360 | \f |
| 1361 | EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM |
| 1362 | CMA |
| 1363 | DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE |
| 1364 | TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD |
| 1365 | AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE |
| 1366 | CIA /IS ASSOCIATIVE, WE CAN DO IT 12 |
| 1367 | CLL RAL /BITS AT A TIME AND CONDENSE LATER. |
| 1368 | TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: |
| 1369 | TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) |
| 1370 | DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) |
| 1371 | TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) |
| 1372 | CMA |
| 1373 | JMP I EQUFUN |
| 1374 | |
| 1375 | GETCHK, 0 /FORM 6 BIT CHECKSUM |
| 1376 | CLA |
| 1377 | TAD CHKSUM |
| 1378 | CMA |
| 1379 | CLL RTL |
| 1380 | RTL |
| 1381 | RTL |
| 1382 | JMS EQUFUN |
| 1383 | CLA CLL CML /FORCES LINK ON AT RWCOM |
| 1384 | TAD CHKSUM |
| 1385 | AND K7700 |
| 1386 | JMP I GETCHK |
| 1387 | |
| 1388 | CFATAL, FATAL |
| 1389 | CRWCOM, RWCOM |
| 1390 | XFUNCT, 0 |
| 1391 | CM32, -32 |
| 1392 | C1400, 1400 |
| 1393 | CHKSUM, 0 |
| 1394 | WORDS, 0 |
| 1395 | XBUFF, 0 |
| 1396 | XWCT, 0 |
| 1397 | EQUTMP, 0 |
| 1398 | |
| 1399 | \fPAGE |
| 1400 | / |
| 1401 | / |
| 1402 | PARITY, 0 |
| 1403 | KRB |
| 1404 | AND [177 |
| 1405 | TAD [200 |
| 1406 | JMP I PARITY |
| 1407 | |
| 1408 | /IOT TABLES FOR TD8E SUBROUTINE |
| 1409 | |
| 1410 | IOTLOC, IOT1 |
| 1411 | IOT2 |
| 1412 | IOT3 |
| 1413 | IOT4 |
| 1414 | IOT5 |
| 1415 | IOT6 |
| 1416 | IOT7 |
| 1417 | RWCOM |
| 1418 | IOT8 |
| 1419 | SRCH |
| 1420 | IOT9 |
| 1421 | IOT10 |
| 1422 | ENDZ |
| 1423 | FATAL+1 |
| 1424 | REVGRD |
| 1425 | IOT11 |
| 1426 | WRITE |
| 1427 | IOT12 |
| 1428 | IOT13 |
| 1429 | IOT14 |
| 1430 | RDQUAD+1 |
| 1431 | IOT15 |
| 1432 | IOT16 |
| 1433 | TABEND, IOT17 |
| 1434 | |
| 1435 | UNITS=. |
| 1436 | UNIT01 |
| 1437 | UNIT23 |
| 1438 | UNIT45 |
| 1439 | UNIT67 |
| 1440 | |
| 1441 | RTAB, IOTR1 |
| 1442 | IOTR2 |
| 1443 | IOTR3 |
| 1444 | IOTR4 |
| 1445 | IOTR5 |
| 1446 | IOTR6 |
| 1447 | |
| 1448 | |
| 1449 | /IOT TABLES FOR WORDS PER BLOCK ROUTINE |
| 1450 | |
| 1451 | TABLE1, IOTX1 |
| 1452 | IOTX2 |
| 1453 | IOTX3 |
| 1454 | IOTX4 |
| 1455 | IOTX5 |
| 1456 | IOTX6 |
| 1457 | IOTX7 |
| 1458 | END1, IOTX8 |
| 1459 | |
| 1460 | \fMESSG4, TEXT @FROM UNIT:@ |
| 1461 | MESSG5, TEXT @TO UNITS:@ |
| 1462 | ERROR5, TEXT @ILLEGAL FORMAT UNIT @ |
| 1463 | ERROR6, TEXT @ UNIT @ |
| 1464 | ERROR4, TEXT @ILLEGAL RESPONSE@ |
| 1465 | |
| 1466 | \f |
| 1467 | PAGE |
| 1468 | /ONCE ONLY CODE |
| 1469 | |
| 1470 | END, JMS I (QUEST |
| 1471 | MESSG2 /@HIGHEST FIELD AVAILABLE:@ |
| 1472 | ACL |
| 1473 | AND [7 |
| 1474 | CIA |
| 1475 | DCA FIELDS |
| 1476 | TAD (CDF |
| 1477 | DCA CDF00 |
| 1478 | TAD FIELDS |
| 1479 | SNA /MORE THAN 1 FIELD?? |
| 1480 | JMP LIM /NO--NO PROBLEM |
| 1481 | DCA COUNT1 /YES--ARE THEY ALL PRESENT? |
| 1482 | NEXT, TAD CDF00 |
| 1483 | TAD (10 |
| 1484 | DCA CDF00 /SET FOR DATA FIELD CHANGE |
| 1485 | TAD (HLT |
| 1486 | CDF00, CDF |
| 1487 | DCA I (10 /TRY LOCATION 10 |
| 1488 | TAD I (10 |
| 1489 | CDF 0 |
| 1490 | CIA |
| 1491 | TAD (HLT |
| 1492 | SNA CLA /IS FIELD THERE? |
| 1493 | JMP NEXT1 /YES--TRY NEXT ONE |
| 1494 | JMS I [MESSGE /NO |
| 1495 | ERROR4 /ILLEGAL RESPONSE |
| 1496 | JMS I [CRLF /CARRIAGE RETURN/LINE FEED |
| 1497 | DCA COUNT /CLEAR COUNT |
| 1498 | JMP END /TRY AGAIN |
| 1499 | NEXT1, ISZ COUNT1 /DONE YET? |
| 1500 | JMP NEXT /NO |
| 1501 | |
| 1502 | LIM, TAD (LIMIT-END /SET BEGINNING OF VERIFY BUFFER |
| 1503 | CLL RAR |
| 1504 | TAD [END |
| 1505 | DCA END0 |
| 1506 | TAD (NOP |
| 1507 | DCA I (START1-1 |
| 1508 | JMP I (START1 |
| 1509 | MESSG2, TEXT @HIGHEST FIELD AVAILABLE:@ |
| 1510 | |
| 1511 | FIELD 0 |
| 1512 | *200 |
| 1513 | |
| 1514 | $ |
| 1515 | \f\f |