14 /COPYRIGHT (C) 1966, 1975
15 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
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.
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.
32 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
33 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
44 /COPYRIGHT 1968 DIGITAL EQUIPMENT CORPORATION
45 / MAYNARD, MASS. OCTOBER,1968
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.
54 / STARTING ADDRESS IS 200
65 / THESE AREAS ARE USED BY DATA BREAK
66 BUFIOT=1547 /INPUT OUTPUT BUFFER
67 BUFCHK=4563 /RE-READ BUFFER
70 / PAGE ZERO WORKING STORAGE
71 BADTRY, -3 /COUNT OF READ ERRORS
72 CURBLK, 0 /CURRENT BLOCK NUMBER
73 TRASH1, 0 /WORKING STORAGE
74 TRASH2, 0 /WORKING STORAGE
75 TRASH3, 0 /WORKING STORAGE
76 BLKCNT, 0 /NUMBEROF BLOCKS TO READ
78 SORBLK, 0 /STORAGE FOR CURBLK
79 WORDS, 0 /NUMBER OF WORDS PER BLOCK
80 INUNIT, 0 /INPUT UNIT IN LH OCT CHAR
81 OUTUNI, 0 /OUTPUT UNIT IN LH OCT CHAR
82 RESTOR, 0 /NUMBER OF WORDS TO COPY
83 RESAVE, 0 /NEGATIVE OF BLKCNT
84 SMICAR, 0 /CHARACTER STORAGE
85 SMISUM, 0 /RUNNING SUM
88 SEAZOK, 0 /TEMP STORAGE
89 DECTWC, 0 /FLAG TO DETERMINE IF VALIDATION WILL OCCUR
90 DECTCA, 0 /CURRENT ADDRESS STORE
91 FIRST, 0 /STARTING BLOCK NUMBER
92 LAST, 0 /LAST BLOCK NUMBER
93 LENGTH, 0 /NUMBER OF WORDS TO COPY
94 PARITY, 0 /PARITY ERROR FLAG (COUNT)
95 MSKIN, 0 /NEGATIVE OF INUNIT
96 PARDEL, PSTACK /POINTER TO PARITY TABLE
98 / PAGE ZERO SUBROUTINES
104 ISZ DIREC /REVERSE DIRECTION EXIT
105 JMP I DIREC /FORWARD DIRECTION EXIT
108 BACKUP, 0 /SUBROUTINE REWINDS TAPE
111 AND (670 /CLEAR DIRECTION AND MOVEMENT
113 TAD (600 /GO IN REVERSE
116 JMP .-1 /WAIT UNTILL DONE
117 JMS I [ERROR /BUSYWORK FOR ERRORS
118 JMP I BACKUP /EXIT ON ENDZONE ERROR
122 BEGIN, CLA CLL /INITIALIZE
128 MESS1 /INPUT UNIT NUMBER
129 JMS GETNUM /CHECK INPUT UNIT NUMBER
132 CIA /SET UP INPUT UNIT MASK
135 MESS2 /OUTPUT UNIT NUMBER
137 TAD MSKIN /MAKE SURE UNITS ARE DIFFERENT
139 JMP BEGIN /INPUT ERROR
142 JMS I [SPEAK /GET FIRST BLOCK NUMBER
148 CIA /STORE BEGINNING MARKER
150 JMS I [SPEAK /GET LAST BLOCK NUMBER
153 CLA CMA /KLUDGE IF NO INPUT
158 TAD LAST /MAKE SURE VALID
162 TAD INUNIT /INIT INPUT UNIT
164 DCA WORDS /SET UP BLOCK LENGTH
165 TAD OUTUNI /INIT OUTPUT UNIT
167 CIA /MAKE SURE BLOCK LENGTH
168 TAD WORDS /SAME ON INPUT AND OUTPUT
170 JMP BADLEN /BLOCK LENGTH ERROR
171 JMS I [SPEAK /TYPE OUT BLOCK LENGTH
175 JMS I [SPEAK /SEND <RETURN><LINE FEED>
178 CIA /COMPUTE NUMBER OF BLOCKS
179 DCA LENGTH /TO READ AND WRITE
180 DCA BLKCNT /CLEAR BLOCK COUNTER
181 TAD [3014 /LOAD BUFFER SIZE
184 JMP BADLEN /TOO MANY WORDS PER BLOCK
188 JMP .-3 /CONTINUE COUNTING
189 TAD WORDS /GET NUMBER OF
190 TAD [-3014 /WORDS TO READ
192 DCA RESTOR /PRESERVE IN RESTOR
195 TAD BLKCNT /SAVE NEGATIVE OF BLKCNT
202 DCA DECTWC /SET UP VERIFY FLAG
205 LETS, TAD CURBLK /CHECK FOR PARTIAL BLOCK TO COPY
210 JMP LETT /COPY FULL LENGTH
211 DCA LENGTH /ADJUST WORDS TO COPY
216 JMP .-2 /COMPUTE PROPER LENGTH
220 TAD [REVERS /KLUDGE COPY EXIT
222 JMP I [COPY+1 /PERFORM THIS COPY
223 LETT, JMS I [COPY /COPY THIS BLOCKS
225 TAD BLKCNT /ADVANCE CURRENT BLOCK
229 JMP LETU /FORWARD EXCEEDED CHECK
230 LETR, TAD CURBLK /REVERSE CHECK
233 SZA CLA /CHECK FOR MINUS 1
234 JMP LETT /CONTINUE COPY
235 JMP I [DONE /FINISHED JOB
239 SZL CLA /CHECK FOR END OF TAPE
246 / THIS SUBROUTINE GETS INPUT
247 / AND OUTPUT UNIT NUMBERS FROM
248 / THE TELETYPE AND VALIDATES THEM.
254 CLL RTR /MOVE TO LH THREE BITS
260 BADLEN, JMS I [SPEAK /BLOCK LENGTH ERROR
269 / THIS TURN AROUND IS ENTERRED
270 / WHEN THE LAST COPY MOVED INTO
271 / THE FINAL DATA AREA
273 DCA CURBLK /START OF COPY BACK
274 JMS REVALT /CHANGE INUNIT AND OUTUNI
277 JMS I [RESET /REPOSITION TAPE
280 JMS I [RESET /REPOSITION TAPE
282 CMA /COMPUTE NEW COPY LENGTH
286 JMP REVERS /KLUDGE IF NOTHING TO DO
287 DCA SORBLK /MINUS # OF BLOCKS
289 DCA BLKCNT /SAVE THIS NUMBER
293 DCA LENGTH /LENGTH FOR COPY
294 JMS I [COPY /PERFORM IT
297 TAD RESAVE /ADVANCE CURBLK
303 JMP I [LETR /CONTINUE COPY
306 / THIS TURN AROUND IS ENTERRED
307 / WHEN THE LAST SEARCH FOR
308 / CURRENT BLOCK CAUSED AN END
313 JMP I [DONE /FINISHED IF DIRECTION REVERSE
315 DCA CURBLK /RESTORE CURBLK
316 TAD OUTUNI /RESET LOCATION OF
317 DTCA DTXA /OUTPUT DECTAPE AND
318 JMS I [RESET /FIND LAST BLOCK
319 TAD [4000 /BY LOOKING FOR IMAGINARY
320 JMS I [SEARCH /BLOCK NUMBER (KLUDGING SEARCH)
322 JMP .-3 /TRY AGAIN ON ERRORS
323 TAD SEAZIK /MUST BE LAST BLOCK NUMBER
325 JMS REVALT /CHANGE INUNIT AND OUTUNI
329 / THIS TURN AROUND IS ENTERRED WHEN THE
330 / END BLOCK FOR COPY WAS REACHED BY A
331 / PARTIAL BUFFER COPY.
333 REVERS, CLA CMA /ADJUST CURBLK POINTER
337 DCA BLKCNT /MAKE BLKCNT NEGATIVE
339 DCA LENGTH /RESTORE COPY LENGTH
340 JMS REVALT /CHANGE INUNIT AND OUTUNI
346 DCA OUTUNI /REVERSE DIRECTION
349 DCA INUNIT /REVERSE DIRECTION
353 /THIS SUBROUTINE PERFORMS THE OPERATION
354 /OF COPYING N BLOCKS AND VALIDATING
356 /WHEN END OF TAPE IS REACHED THE ROUTINE
357 /BRANCHES TO "REVERS", OR TO REVERT
368 TAD INUNIT /LOAD STAT REG A
371 DCA BADTRY /RESTORE ERROR COUNTER
373 COPO, BUFIOT /INPUT AREA
376 TAD PARITY /CHECK PARITY FLAG
378 JMP I [ERRPAR /FIX MESSAGE FOR PARITY ERRORS
379 COPZ, TAD OUTUNI /(IGNORE END ZONE)
380 DTCA DTXA /OUTPUT UNIT & DIRECTION
381 COPYB, JMS I [DECTAP /WRITE OUTPUT TAPE
382 BUFIOT /OUTPUT BUFFER
384 JMP COPCPR /NORMAL RETURN
385 TAD [REVERS /END ZONE RETURN
386 DCA COPY /FIX UP EXIT
388 DCA SORBLK /STORE CURRENT BLOCK NUMBER
391 JMP I COPY /NO VERIFICATION
392 JMS I [RESET /RETURN TO FRONT END
393 JMS I [DECTAP /READ DATA
394 COPR, BUFCHK /INPUT AREA
396 JMP .+2 /NORMAL RETURN BRANCH
397 TAD I [WC /END ZONE RETURN
402 DCA 17 /FORWARDS POINTER
403 TAD COPR /REREAD BUFFER
404 DCA 16 /SET UP POINTER
409 JMP COPERR /MISMATCH ON READ
410 ISZ TRASH3 /ANY MORE WORDS
412 JMP I COPY /MADE IT! EXIT
413 COPERR, ISZ BADTRY /HOW MANY ATTEMPTS
414 JMP COPERS /TRY AGAIN
416 MESS5 /RE-READ ERRORS
417 JMS I [TUNIT /TYPE UNIT NUMBER AND WAIT
419 DCA BADTRY /RESTORE ERROR COUNTER
422 JMP COPYB /WRITE OUT BLOCK AGAIN
426 / THIS SUBROUTINE MOVES THE DECTAPE
427 / BACK IN PREPARATION FOR ANOTHER
431 CLA CLL /CLEAR AC AND LINK
432 TAD [400 /CHANGE DIRECTION
434 JMS DIREC /FIND DIRECTION
435 TAD [6 /FORWARD MAKE +3
436 TAD [-3 /REVERSE MAKE -3
438 SPA /MAKE SURE VALUE IS PLUS
440 JMS I [SEARCH /FIND THIS BLOCK
444 AND [200 /CLEAR STOP-GO FLAG
445 TAD [400 /AND REVERSE DIRECTION
448 RESEV, JMS BACKUP /REWIND THIS TAPE
452 / THIS BRANCH IS TKEN WHEN
453 / ALL COPYING IS COMPLETED
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...<RETURN> MARKS END OF INPUT, CAUSES A <CR><LF>
466 /IF THE <RETURN> IS THE FIRST CHARACTER THEN
467 /DIRECT RETURN IS TAKEN, ELSE RETURN IS TO ENTRY+2
468 / <^C> CAUSES A BRANCH TO 7600
471 KCC /INITIALIZE TTY INPUT
472 DCA SMISUM /CLEAR TEMP STORAGE
476 TAD [-215 /CHECK FOR <RETURN>
478 JMP SMIXIT /EXIT ON FIRST <RETURN>
479 ISZ SMIGIT /ADVANCE EXIT POINTER
480 SMIGOP, TAD [12 /CHECK FOR ^C
482 JMP I [7600 /BRANCH TO MONITOR
483 TAD [-65 /CHECK FOR DIGITS
487 JMP SMILOP /INVALID CHARACTER
488 DCA SMICAR /TEMP STOR
489 TAD SMISUM /GET CHARACTER STRING
492 CLL RAL /ROTATE TO LH POSITION
493 TAD SMICAR /APPEND CURRENT DIGIT
497 JMS TYPE /ECHO CHARACTER
498 SMILOP, JMS TTYIN /GET NEXT CHARACTER
499 TAD [-215 /CHECK FOR <RETURN>
501 JMP SMIGOP /CONTINUE LOOP
502 SMIXIT, JMS I [SPEAK /SEND A <RETURN><LINE FEED>
504 TAD SMISUM /GET INPUT STRING
508 /THIS SUBROUTINE READS A CHARACTER FROM THE TTY
510 KSF /WAIT UNTIL READY
515 /THIS SUBROUTINE TYPES OUT A
516 /DIGIT STRING FROM THE AC
517 /AS FOUR OCTAL CHARACTERS
519 DCA SMICAR /PRESERVE STRING VALUE
521 DCA SMISUM /INITIALIZE COUNTER
524 RAL /GET NEXT PRINT DIGIT
525 DCA SMICAR /RETURN TO STRING
528 RAL /ENTER CURRENT DIGIT
531 ISZ SMISUM /COUNT DIGITS
532 JMP TYPXL /COUNTINUE LOOP
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
543 / JMS I [SPEAK <BRANCH TO SUBROUTINE>
544 / MESSAGE <POINTER TO MESSAGE BUFFER>
545 /A ZERO WORD MARKS THE
551 JMS I [TYPE /CARRIGE RETURN
552 TAD I SPEAK /GET ADDRESS OF OUTPUT
556 JMS I [TYPE /LINE FEED
557 SPEELH, TAD I SPELIN /GET NEXT WORD
559 JMP I SPEAK /EXIT IF ZERO
560 AND [7700 /GET LH CHARACTER
564 JMS SPEOUT /TRANSLATE AND OUTPUT
566 ISZ SPELIN /ADVANCE POINTER
567 AND [77 /GET RH CHARACTER
568 JMS SPEOUT /TRANSLATE AND OUTPUT
571 TAD [-40 /CHECK FORMAT
573 TAD [-100 /KLUDGE DIGITS FORMAT<200+XX>
574 TAD [340 /ALPHA FORMAT <300+XX>
575 JMS I [TYPE /OUTPUT IT
579 /THIS SUBROUTINE TYPES OUT
580 /THE ASCII CHARACTER IN THE AC.
583 TSF /WAIT UNTIL READY
589 /THIS SUBROUTINE TYPES OUT THE
594 AND [7000 /GET CURRENT UNIT NUMBER
597 TAD [260 /MAKE ASCII CODE
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
619 CIA /FORM TWO'S COMPLEMENT
620 DCA SEAZOK /STORE - BLOCK NUMBER
621 DCA SEAZIK /CLEAR INPUT WORD
624 DTXA /CLEAR OUT A REGISTER
625 TAD [210 /START DEVICE
627 JMS DIREC /DETERMINE DIRECTION
628 TAD [NOP-CIA /FORWARD...FIX TO "NOP"
629 TAD [CIA /REVERSE...FIX TO "CIA"
630 DCA SEATIX /FIX UP COMMAND
631 TAD [SEAZIK /BLOCK NUMBER INPUT
632 DCA I [CA /PUT IN CURRENT ADDRESS
633 CLA CMA /NUMBER OF BLOCKS=1
634 JMS SEARUN /FIND FIRST BLOCK MARK
635 TAD [100 /SET CONTINUOUS MODE FLAG
637 TAD SEAZIK /BLOCK NUMBER HERE
638 TAD SEAZOK /MINUS BLOCK NUMBER THERE
639 SEATIX, NOP /IFSEARCHING IN REVERSE DIRECTION
641 CIA /IF SEARCHING IN FORWARD DIRECTION
643 JMS SEARUN /FIND "N" BLOCK MARKS
645 AND [100 /CLEAR CONTINUOUS MODE FLAG
647 JMP I SEARCH /NORMAL EXIT
649 DCA I [WC /NUMBER OF BLOCKS TO READ
653 DTRB /READ STATUS REGISTER B
655 JMP I SEARUN /DT FLAG...NORMAL EXIT
656 JMS I [ERROR /HANDLE ALL ERRORS
657 ISZ SEARCH /END OF TAPE ERROR
658 ISZ SEARCH /ALL OTHER ERRORS
662 /THIS SUBROUTINE READS OR WRITES
663 /<N> WORDS, IN CONTROL MODE, ON
664 /A BLOCK(S) ASSUMING THAT
665 /THE DECTAPE IS PROPERLY
666 /POSITIONED. IN LINE CODE:
668 / <BUFFER> ADDRESS TO READ INTO (OR WRITE FROM) -1
669 / <3> IF READ, <5> IF WRITE
671 /<<END OF TAPE ERROR>>
672 /AN END OF TAPE ERROR WHILE SEARCHING
673 /CAUSES A BRANCH TO "REVERT".
674 /STATUS REGISTER A SHOULD CONTAIN:
676 /A3 FORWARD=0, REVERSE=1
677 /A4 UNIMPORTANT, SHOULD BE ZERO
680 /BLOCK NUMBER IN PAGE ZERO "CURBLK"
681 /NUMBER OF WORDS TO READ OR
682 /WRITE IS IN PAGE ZERO "LENGTH"
685 TAD I DECTAP /GET INPUT BUFFER
688 DECAGN, TAD CURBLK /SEARCH FOR BLOCK
692 JMP I [REVERT /END ZONE ERROR
694 TAD SEAZOK /CHECK TO SEE IF FOUND BLOCK
697 TAD LENGTH /SET UP WORD COUNT
700 TAD DECTCA /AND INPUT OUTPUT BUFFER
702 TAD I DECTAP /GET READ OR WRITE
703 DECLOP, DTXA /START GOING
710 JMP DECEXT-1 /ENDZONE ERROR
711 JMS I [RESET /RESTORE POINTERS
713 ISZ DECTAP /END OF TAPE EXIT
716 JMP I DECTAP /FINISHED
718 TAD I [WC /HAVE WE FINISHED?
720 JMP DECLOP /NO-:CONTINUE READ-WRITE
721 DTRA /YES--CLEAR STATUS
726 /THIS SUBROUTINE CHECKS THE CONTENTS
727 /OF STATUS REGISTER B.
728 / <BRANCH> 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.
740 DTRB /GET ERROR FLAGS
741 AND [200 /PARITY ERROR FLAG
743 JMP ERNOT /HANDLE OTHER ERRORS
744 DTXA /CLEAR FLAGS, CONTINUE READ MODE
745 DTRA /GET UNIT NUMBER
747 TAD MSKIN /CHECK FOR INPUT UNIT
749 JMP I [COPERR /ERROR ON OUTPUT UNIT
750 TAD I [WC /PUT WORD COUNT IN PUSH
752 DCA I PARDEL /DOWN STACK
753 ISZ PARDEL /ADVANCE POINTER
755 JMP I [DECEXI /RETURN TO READ
756 ERNOT, DTRA /GET STATUS REGISTER A
758 TAD [2 /DO NOT DISTURB ERROR FLAGS
759 DTXA /CLEAR A4 AND A6-8
760 DTRB /GET ERROR FLAGS
762 SMA /SKIP IF END OF TAPE ERROR
766 DCA ERRSOR /STORE IN COUNT
767 TAD [200 /GO FLIP-FLOP
771 ISZ ERRSOR /HAVE WE DONE THREE TIMES
775 ERROTH, ISZ ERROR /CHANGE ERROR BRANCH
777 CLA CLL /MARK TRACK ERROR
780 JMP I ERROR /TIMING ERROR BRANCH
781 JMS I [SPEAK /SELECT ERROR MESSAGE
789 MESS0, TEXT %DECTAPE COPY V10A %
790 MESSA, TEXT %FIRST BLOCK TO COPY (OCTAL) %
791 MESSB, TEXT %FINAL BLOCK TO COPY (OCTAL) %
792 ERRSEL, TEXT %SELECT ERROR ON UNIT #%
793 PMESS, TEXT %PARITY ERROR ON BLOCK %
794 MESSC, TEXT %VERIFY OUTPUT? (0=YES, 1=NO): %
795 MESS1, TEXT %FROM UNIT %
796 MESS2, TEXT %TO UNIT %
797 MESS3, TEXT %PDP-8 WORDS PER BLOCK %
799 MESS5, TEXT %WRITE ERRORS ON UNIT #%
800 MESS3A, TEXT %BLOCK LENGTH ERROR%
807 /THIS ROUTINE TYPES OUT PARITY ERROR MESSAGES
808 /AND RESTORES POINTERS TO THE PUSH DOWN STACK.
810 DCA PARITY /SET UP STACK COUNTER
812 TAD PARDEL /MOVE POINTER BACK
814 JMS I [SPEAK /TYPE OUT MESSAGE
818 TAD I PARDEL /CHECK FOR CORRECT BLOCK NUMBER
819 TAD WORDS /ADVANCE BLOCK WORDS COUNT
822 CIA /REACHED ORIGINAL VALUE?
825 JMP EPTYP /TYPE BLOCK AT ERROR
827 CLL CMA RAL /ADD ONE IF FORWARD
828 CMA /SUBTRACT ONE IF NEGATIVE
829 TAD EPJK /NEXT BLOCK NUMBER
830 JMP EPLOOP /CONTINUE LOOP
832 JMS I [TYPNUM /TYPE BLOCK NUMBER
833 ISZ PARITY /ADVANCE COUNTER
834 JMP ERRPAR+2 /CONTINUE LOOP
835 JMP I EPPEXT /RETURN TO COPY
836 EPPEXT, COPZ /REENTRY TO COPY
837 EPJK, 0 /WORKING STORAGE
839 /THIS SUBROUTINE READS A RANDOM
840 /BLOCK ON DECTAPE TO DETERMINE THE BLOCK LENGTH
842 TAD [610 /FIX A REG. WORD
843 DTCA DTXA /LOAD A STAT. REG.
845 DCA I [WC /SEARCH FOR 1 BLOCK
846 TAD [BUFIOT /FIX CURRENT ADDRESS
847 DCA I [CA /TO READ INTO BUFFER
852 JMP FIXERR /HANDLE ERROR CONDITIONS
853 TAD [30 /CHANGE TO READ MODE
855 DTSF /WAIT TILL READ DONE
859 TAD I [WC /GET BLOCK LENGTH
862 TAD [400 /END OF TAPE...REVERSE DIRECTION
863 TAD [210 /START TAPE MOVING
864 DTXA /AND CLEAR FLAGS
865 JMP FIXTAP+3 /TRY AGAIN
867 /PARITY ERROR WORD COUNT STACK