13 /COPYRIGHT (C) 1971, 1975
14 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
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.
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.
31 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
32 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
41 /TD8E DECTAPE FORMATTER COPYRIGHT 1971
42 /DIGITAL EQUIPMENT CORP.
52 /SYMBOL TABLE AUGMENTATION
65 JMP 1 /HLT PROGRAM GOT INTERRUPTED SOMEHOW
165 /TYPE THE CHARACTER IN THE AC ON THE KEYBOARD PRINTER
168 TLS /LOAD AND PRINT, CLEAR FLAG
169 TSF /WAIT FOR CONFIRMATION
171 TCF /CLEAR THE FLAG ANYWAY
175 /PRINT A "?" ON THE KEYBOARD TYPER
179 CLA CLL /C(AC)+C(L)=0
181 JMS RSEND /TYPE THE CHARACTER
185 /DECTAPE CONTROL WORDS
200 DBUFPT, 0 /POINTER TO CURRENT POSITION IN DTA LIST
205 /TYPE CANNED MESSAGES.....
206 /THANKS TO DIGITAL 8-18-U
212 CLA CMA /SET C(AC)=-1
213 TAD MESAGE /ADD LOCATION
214 DCA 10 /AUTO INDEX REGISTER
215 TAD I 10 /FETCH FIRST WORD
219 RTR /ROTATE 6 BITS TO THE RIGHT
222 TAD MSRGHT /GET DATA AGAIN
223 JMS TYPECH /TYPE RIGHT HALF
224 JMP MESAGE+5 /CONTINUE
225 MSRGHT, 0 /TEMPORARY STORAGE
226 TYPECH, 0 /TYPE CHARACTER IN C(AC)6-11
228 SNA /IS IT END OF MESSAGE?
233 TAD C340 /YES: ADD 300
234 JMP MTP /TO CODES <40
238 TAD C212 /YES: CODE 43 IS
239 JMP MTP /LINE-FEED (212)
243 TAD C215 /YES: CODE 45 IS
244 JMP MTP /CARRIAGE RETURN (215)
245 TAD C245 /ADD 200 TO OTHERS >40
246 MTP, TLS /TRANSMIT CHARACTER
247 TSF /WAIT FOR THE FLAG
249 CLA /SET: CLEAR C(AC)
259 /ROUTINE WAITS UNTILL A COMPLETE MESSAGE HAS BEEN ENTERED
264 KCC /CLEAR AC, KEYBOARD FLAG
265 TAD BADD /GET BUFFER ADDRESS
266 DCA W1 /STORE FOR THE CHARACTER STRING
268 /READ AND RESPOND WITH THE CHARACTER
270 NTYRTN, ISZ W1 /NORMAL RETURN. INCREMENT BUFFER
271 KSF /WAIT FOR KEYBOARD
272 JMP .-1 /FLAG TO RAISE
273 KRB /GOT FLAG, RESET IT, GET CHARACTER
274 JMS RSEND /SEND CHARACTER BACK
275 AND (177 /TAKE CARE OF PARITY
277 DCA I W1 /LOAD CHARACTER INTO BUFFER AREA
278 TAD I W1 /CHECK FOR CTRL C
282 JMP CHKSP /NO- CHECK FOR SPACE
283 6007 /CAF- CLEAR ALL FLAGS
288 /IF CHARACTER IS A SPACE, IGNORE IT
290 CHKSP, TAD I W1 /CHARACTER INTO THE AC
291 CIA /SUBTRACT FROM SPACE CODE (240)
292 TAD SPCOD /COMPLETE COMPARISON
293 SNA CLA /WAS IT A SPACE?
294 JMP NTYRTN+1 /YES: DO NOT INCREMENT BUFFER
296 /IF CHARACTER IS A CR, EXIT FROM ROUTINE
298 TAD I W1 /CHARACTER TO AC
299 CIA /SET AC TO SUBTRACT CR (215)
300 TAD CRCOD /COMPLETE COMPARISON
302 JMP NTYRTN /NO: INCREMENT BUFFER + WAIT
304 /CARRIAGE RETURN FOUND, EXIT FROM ROUTINE
306 TAD LFCOD /GIVE KEYBOARD LINE FEED
307 JMS RSEND /EXECUTE LINE FEED
308 CLA CLL /EXIT WITH C(ACC) + AND C(L)=0
310 JMP I TYPN /RETURN TO CALL
312 /COMPARE A STRING OF CHARACTERS IN "BUFFER"
313 /TO A CHARACTER STRING AFTER A JMS IN ASCII
317 TAD COMPRE /SUBTRACT 1 FOR INDEX REG 1
318 DCA 10 /AUTO INDEX 1 SET TO CHA STRING
319 TAD BADD /AUTO INDEX 2 SET TO BUFFER-1
322 /COMPARE CHARACTERS TILL ONE DOESN'T COMPARE OR TILL
323 /A 0 IS FOUND IN X1. IF OK, RETURN TO TWO PLUS THE
324 /ZERO, IF BAD ONE PLUS
326 TAD I X1 /CHARACTER FROM PROGRAM
327 CIA /TO SUBTRACT FROM
328 TAD I X2 /CHARACTER IN BUFFER
330 JMP CERR /NO:RESYNC FOR NON COMPARE EXIT
331 TAD I X1 /YES: CHECK FOR GOOD EXIT
333 JMP .-6 /NO: TEST NEXT CHAACTER
334 ISZ X1 /+1 TO X1(TOTAL 2 FROM THE 0)
335 JMP I X1 /+1 TO X1, EXIT
337 /ERROR FOUND. RESYNC AND EXIT NO COMPARE
339 CERR, TAD I X1 /CHARACTER FROM PROGRAM
340 SZA CLA /IS THIS EXIT KEY? (0000)
341 JMP .-2 /NO: GET NEXT
342 JMP I X1 /YES: EXIT, NOT COMPARE
345 /VARIOUS ERROR MESSAGES
383 /"NOT DIVISIBLE BY 3"
400 /THE CODING BELOW CREATES THE BLOCK NUMBER
401 /CONVERSION PRIOR TO THE TAPE WRITE.
444 /TYPE ONE FOUR CHARACTER OCTAL WORD GIVEN TO THE
445 /ROUTINE VIA C(ACC). C(ACC)=0 ON EXIT
448 DCA TW1 /STORE WORD GIVEN
449 TAD TW1 /TO C(ACC) AGAIN
453 DCA TYCT1+2 /SAVE ROTATED VALUE, 1ST TWO
454 TAD TYCT1+2 /TO C(ACC) AGAIN
455 AND C0007 /ISOLATE SECOND CHARACTER
456 TAD C6060 /CONVERT TO ASCII
457 DCA TYCT1+1 /STORE AS FIRST PARTIAL 2
458 TAD TYCT1+2 /ROTATED VALUE STORED ABOVE
461 AND C0700 /ISOLATE FIRST CHARACTER
462 TAD TYCT1+1 /CONVERT 1ST TO ASCII
463 DCA TYCT1+1 /1ST AND 2ND CHARACTERS READY
464 TAD TW1 /ORIGIONAL WORD
465 AND C0007 /ISOLATE 4TH CHARACTER
466 TAD C6060 /CONVERT 4 TH TO ASCII
467 DCA TYCT1+2 /STORE 4TH FOR A MOMENT
468 TAD TW1 /ORIGIONAL WORD
470 RAL /POSITION IT 3RD CHARACTER
471 AND C0700 /ISOLATE 3RD CHARACTER
472 TAD TYCT1+2 /CONVERT TO ASCII
473 DCA TYCT1+2 /CONVERSION COMPLETE
474 TYCT1, JMS I TYPE /TYPE THE FOUR CHARACTERS
478 JMP I TYCT /EXIT FROM ROUTINE
480 /SOME CONSTANTS FOR THE ROUTINE
489 TAD I 12 /WORD TO BE WRITTEN
490 SDSQ /WAIT FOR QUADLINE FLAG
492 SDLD /LOAD DATA REGISTERS
493 SDST /CHECK FOR TIMING ERROR
495 JMS I SELTIM /TIMING ERROR
497 JMP I STALL /GO GET NEXT WORD
501 /WAIT TILL WORD COUNT REGISTER GOES TO ZERO
507 SDLC /STOP MOVEMENT OF TAPE
605 /TYPE "ERROR PHASE X"
607 ZCOM, TAD PHASE /WHAT PHASE OF OPERATION
608 TAD PFORM /WAS THE MACHINE IN
609 DCA TFORM /WHEN ERROR OCCURED
626 /HERE STARTS THIS PROGRAM. IT WILL ASK THE
627 /OPERATOR FOR DRIVE NUMBERS, THEN ASK HIM FOR
628 /A DIRECTION ON WHAT TO DO WITH THE DRIVES.
630 /THE SEQUENCE FOR MARKING A TAPE WOULD APPEAR AS:
633 /UNIT? (0 OR 1 OR 0 1)
635 /2277 WORDS, 0256 BLOCKS.OK? YES OR NO
639 /THAT DATA IN PARENTHESIS IS TYPED BY THE OPERATOR
640 /(HE DOESN'T TYPE THE PARENTHESIS)
641 /IF HE HAD ANSWERED NO, "FORMAT?" WOULD BE TYPED OUT.
642 /IF THE DRIVE WAS WRONG, HE WOULD TYPE RESTART.
643 /IF HE HAD TYPED "MARK" IN RESPONSE TO "FORMAT?" THE
644 /TAPE WOULD BE MARKED WITH THE STANDARD PDP-8 CONFIGURATION.
645 /IF HE HAD TYPED "MARK 384" THE TAPE WOULD
646 /BE MARKED WITH THE STANDARD PDP-10 CONFIGURATION
647 /NOTE: THE WORD AND BLOCK NUMBERS ARE TYPED IN OCTAL
648 /IF A MISTAKE OCCURS ON THE OPERATORS PART (WITH REFERANCE
649 /TO BLOCK + WORD SIZE) HE WILL BE TOLD ABOUT IT
657 /MAKE A CALL FOR THE DECTAPE NUMBERS TO BE
660 STAR0, JMS I TYPE /TYPE VERSION NUMBER
665 START, JMS I TYPE /SET UP TYPER
669 TYQU, JMS I TYPE /"UNIT?"
677 JMS I TYPIN /GET NUMBERS
678 TAD BADD /INITIALIZE POINTER (BFR)
679 IAC /(BADD=BUFFER-1, SO BUMP THE AC)
680 DCA BFR /TO START OF INPUT BUFFER
681 DCA DCTR /INITIALIZE DTA COUNTER TO 0
682 DCA CRFLAG /CLEAR FLAG SO CR NOT ACCEPTIBLE
683 CRCHK, TAD CRCOD /GET CODE FOR CAR. RETN
685 TAD I BFR /SEE IF NEXT CHAR. IN
686 SNA /BUFFER IS CAR. RETN.
687 JMP OKCR /YES: SEE IF C.R. LEGAL HERE
688 DCA CRFLAG /NO: SO C.R. IS LEGAL NOW
689 VALCHK, TAD C260 /SEE IF # IS LESS THAN
691 TAD I BFR /SUBTRACT BUFFER DATA
692 SPA CLA /IS IT LESS THAN ASII 0?
693 JMP TYQU /YES: TELL OUTSIDE WORLD
694 TAD C261 /NO: SEE IF GREATER THAN
696 TAD I BFR /SUBTRACT BUFFER DATA
697 SMA CLA /GREATER THAN ASCII 7?
698 JMP TYQU /YES: TELL OUTSIDE WORLD
699 TAD I BFR /NO: ACCEPT BUFFER
701 AND C7000 /ISOLATE DTA
702 JMS REPEAT /GO CHECK FOR REPEATED DTA AND STORE #
703 ISZ BFR /INCREMENT INPUT BUF. PTR.
704 JMP CRCHK /GO LOOK AT NEXT CHAR.
706 /THIS SECTION CHECKS TO SEE IF THERE HAS BEEN ANY
707 /VALID INPUT ONCE A CARRIAGE RETURN IS SEEN
709 TAD CRFLAG /LOAD CR FLAG; 0 MEANS NO GOOD
711 JMP START /0: NO VALID INPUT; RESTART
712 TAD DCTR /NOT 0: SO HAVE VALID INPUT
713 TAD DBUFAD /CALCULATE END OF DTA LIST +1
714 DCA DBUFPT /STORE IT IN BUFFER POINTER, THEN
715 CMA /COMPLEMENT THE AC AND
716 DCA I DBUFPT /TERMINATE DTA LIST WITH 7777
717 INIT1, CLA /CLEAR AC IF COME THRU LOC IT
718 TAD DBUFAD /AND RESET LIST POINTER
719 DCA DBUFPT /TO START OF LIST
720 JMS I GETDTA /GO GET A DTA NUMBER
722 /INFORM THE OPERATOR THAT THE PROGRAM IS SET TO START
723 /TYPE "FORMAT" AND WAIT FOR THE REPLY
725 INIT, JMS I TYPE /MESSAGE OUT
731 JMS I TYPIN /WAIT FOR A REPLY
732 JMS I COMPAR /DID HE TYPE "MARK"?
741 /SEE IF HE TYPED "RDR" (READ AND TYPE FIRST 12
742 /BLOCK NUMBERS IN REVERSE).
753 /SEE IF HE TYPED "RDF" (READ AND TYPE FIRST 12
754 /BLOCK NUMBERS FORWARD).
765 /SEE IF HE TYPED "SAME" (MEANING MARK A TAPE
766 /USING THE SAME CONSTANTS AS BEFORE).
776 SWCHK /TO MARK AS BEFORE
778 /SEE IF HE TYPED "RESTART"
789 JMS QU /MUST BE NONSENSE
790 JMP START /START ALL OVER
791 GETDTA, NUDTA /POINTER TO ROUTINE TO SWITCH UNITS
792 CRFLAG, 0 /=0, CR NO GOOD; NOT 0, CR IS OK
795 /MARK WAS TYPED IN, IF W1-1 IS NOT A "K",ASSUME THAT
796 /A NUMBER WAS TYPED IN, AND VERIFY THIS. IF W1-1 IS
797 /A "K", ASSUME STANDARD FORMAT.(W1=LAST ENTRY INTO THE BUFFER)
799 MARK, TAD I BINCO /ADDRESS OF FIRST BINARY
800 DCA W5 /CONSTANT FOR DEC TO BIN
801 DCA TOTAL /WILL BE BINARY EQUIVILANT
803 /SAVE C(X1) FOR DECREMENT THROUGH BUFFER
805 DNC, CLA CMA /DECREMENT BUFFER ADDRESS
807 DCA W1 /W1=SWEEP ADDRESS
809 /LOOK FOR END OF PROCESSING BY LOOKING FOR A "K" IN BUFFER
811 TAD LETK /LETTER ASCII "K"
812 CIA /SUBTRACT FROM CHARACTER
815 JMP DIV3 /YES: SEE IF DIVISIBLE BY 3
817 /VERIFY THIS CHARACTER AS BEING OF DECIMAL ORIGIN
819 TAD C260 /ASCII FOR 0
820 CIA /TO SEE IF CHARACTER
821 TAD I W1 /IS LESS THAN 260
823 JMP I QU1 /YES: NOT DECIMAL CHARACTER
824 TAD C271 /ASCII FOR 9
825 CMA /TO SEE IF GREATER THAN
828 JMP I QU1 /NOT A DECIMAL CHARACTER
829 /CHARACTER IS DECIMAL. NOW CONVERT IT TO BINARY
830 /REMEMBER POSITION OF CHARACTER IN BUFFER MAY BE
833 TAD I W1 /ISOLATE THE NUMBER
834 AND C0017 /FOR PROPER CONVERSION
835 SNA /IF 0, NO BINARY CONVERSION NEEDED
836 JMP IBS /YES: 0: INCREMENT BINARY CONVERSION
838 /NOT 0, SET UP CONVERSION LOOP
840 CLL CIA /NUMBER OF ADDITIONS
841 DCA W4 /TO NEGATIVE FOR ISZ
842 TAD I W5 /BINARY POSITION TO C(ACC)
843 TAD TOTAL /ADD TO PRESENT TOTAL
844 SZL /CHECK ON TO MANY WORDS
845 JMP I QU2 /TO MANY WORDS CALLED FOR
846 DCA TOTAL /KEEP RUNNING SUM
847 ISZ W4 /LAST ADDITION?
848 JMP .-6 /NO: ADD AGAIN
850 /FINAL ADDITION FOR THIS POSITION COMPLETED
852 IBS, ISZ W5 /NEXT POSITION
853 JMP DNC /DO NEXT CHARACTER
855 /LAST CHARACTER COMPLETED. SEE IF DIVISIBLE BY 3
856 /IF NOT A NORMAL INPUT
858 DIV3, TAD TOTAL /GET TOTAL WORDS
859 SNA /IF TOTAL 0, NORMAL INPUT
860 TAD C201 /129 OCT. THIS TEST REDUNDANT
861 TAD C0017 /ADD CONSTANT 15 TO TOTAL
862 DCA TOTAL /FOR FUTURE CONSIDERATIONS
863 DCA VAR1 /# OF WORDS/3 FOR MARK TRACK WRITING
864 TAD TOTAL /RESTORE IN THE ACC
865 CLL /TO DIVIDE BY 3, LINK KEEPS OVERFLOW
867 ISZ VAR1 /ON EACH DIVISION, KEEP RUNNING SUM
868 SZA /IF AC = 0,NO REMAINDER
869 SNL /WHEN LINC GOES TO 0, DIVISION ENDED
870 SKP /NOW SEE IF IT DIVIDED EVENLY
871 JMP .-6 /SUBTRACT 3 MORE
872 SZA CLA /IF 0,OK. OTHERWISE ERROR
873 JMP I QU4 /NOT DIVISIBLE BY 3
875 /CORRECT "VAR1" ( THE NUMBER OF WORDS/3) FOR THE +15
876 /ADDED JUST ABOVE AND AN INHERANT +2 DUE TO MARK TRACK
877 /CONFIGURATION TO BE WRITTEN.
879 TAD M7 /SUBTRACT 7 FROM PHONY SETUP
880 TAD VAR1 /GIVING THE NUMBER OF TIMES
881 CIA /TO BE USED LATER IN A ISZ
882 DCA VAR1 /DATA MARK WILL BE WRITTEN
883 /COMPUTE A VALUE FOR TOTAL NUMBER OF BLOCKS
884 /RECORD SIZE + 15 INTO 636160 OCT.
886 TAD C7714 /EXTENDED 64 VALUE. SETS AC#2
887 DCA W1 /SET FOR 640000
888 JMS I FORM10 /PATCH TO CHECK FOR STD.10 FORMAT
889 TAD C1620 /VERNIER ADJUSTMENT FOR FORMULA
890 CLL /ACC#2 CARRY FUNCTION
891 TAD TOTAL /WORD COUNT
892 ISZ BLOCKS /+1 TO BLOCK COUNT
894 JMP I QU3 /TO MANY BLOCKS CALLED FOR
895 SNL /CARRY INTO ACC#2?
896 JMP .-5 /NO: CONTINUE COUNT
897 ISZ W1 /YES: FULLY DIVIDED?
898 JMP .-10 /NO: CONTINUE PROCESS
899 CLA CLL /C(ACC)+ C(L)=0
900 F10RTN, TAD BLOCKS /FOR MARK TRACK (COME HERE FR F10PAT IF 10 FRMT)
902 DCA VAR2 /SEE MARK WRITE
904 /VALUES FOR BLOCK AND RECORD SIZE HAVE BEEN
905 /COMPUTED. TELL OUTSIDE WORLD AND GET THE OK.
907 TAD TOTAL /SUBTRACT 15 FROM TOTAL
908 TAD C7761 /WORDS FOOLING OPERATOR
909 DCA TOTAL /CORRECTED FOR TAPE WRITING
910 TAD TOTAL /FOR OCTAL TYPEOUT
911 JMS I TYOCT /TYPE OCTAL WORDS
912 JMS I TYPE /TYPE MESSAGE
917 TAD BLOCKS /TYPE OUT BLOCK #S
918 IAC /TO FOOL THE OPERATOR
919 JMS I TYOCT /IN OCTAL
920 JMS I TYPE /TYPE MESSAGES
934 JMS I TYPIN /WAIT FOR REPLY
935 /SEE IF A YES OR NO ANSWER WAS GIVEN
951 /SET THE TAPE INTO MOTION. ALL VARIABLES ARE SET.
953 /WRITE TIMING AND MARK TRACK
957 TAD DT1400 /FWD, WRITE, GO
958 TAD DTA /GET UNIT NUMBER
959 SDLC /LOAD COMMAND REGISTER
960 TAD VAR2 /TO MAKE A RESTART FOR THE SAME
961 DCA W6 /OPTION POSSIBLE
963 /WRITE ABOUT 10 FEET OF END ZONE
965 CEZ, TAD REZ /ADDRESS OF DATA
968 JMP CEZ /NOT END FOOTAGE
969 TAD M144 /OK WRITE INTERBLOCK SYNC
976 /WRITE INTERBLOCK SYNC
978 TAD VAR1 /RESET THE WORDS
980 TAD IBZ /ADDRESS OF DATA
981 JMS SETUP /GO OUT AND WRITE 1
982 JMP I INBLSY /GO DO AGAIN
984 /WRITE FORWARD BLOCKMARK AND REVERSE GUARD
985 WDZ, TAD FBM /ADDRESS OF PATTERN
988 /WRITE LOCKMARK, REVERSE CHECKSUM, REV FINAL, REV PREFINAL
992 /WRITE THE DATA TRACK
993 DTRK, TAD DZ /ADDRESS OF PATTERN
996 JMP DTRK /NOW WRITE DATA MARK TRACK AGAIN
997 /WRITE PREFINAL, FINAL, CHECKSUM, AND REVERSE LOCK
998 PFCRC, TAD FEZ /ADDRESS OF DATA
1001 /WRITE GUARD REVERSE BLOCK
1005 /THIS COMPLETES 1 BLOCK, GO BACK AND WRITE THE REST
1006 JMS INBLSY /WRITE INTERBLOCK SYNC
1007 ISZ W6 /TOTAL NUMBER OF BLOCKS
1008 JMP WDZ /WRITTEN? NO:
1010 /ALL DATA BLOCKS WRITTEN NOW WRITE BUFFER ZONE OF INTERBLOCK SYNC
1011 TAD M143 /198 EXPAND CODES AT END OF BLOCKS
1017 /FINISHED BLOCK WRITTING, WRITE ANOTHER 10(1) OF END ZONES
1025 JMS I SELTIM /TIMING ERROR
1032 DCA 12 /WORD TO BE WRITTEN ON MARK TRACK
1048 /THESE ARE THE DATA CONFIGURATIONS FOR THE MARK TRACK
1054 4044 /ON TAPE AS 5555 (OCT)
1061 0404 /ON TAPE AS 2525 (OCT)
1065 /FORWARD BLOCK MARK AND REVERSE GUARD
1068 0404 /ON TAPE AS 2632 (OCT)
1072 /LOCK MARK, REVERSE CHECKSUM, REVERSE FINAL
1073 /AND REVERSE PREFINAL
1076 0040 /ON TAPE AS 10101010 (OCT)
1086 4440 /ON TAPE AS 7070 (OCT)
1090 /PREFINAL, FINAL, FWD CHECKSUM, AND REVERSE LOCK
1093 4440 /ON TAPE AS 73737373 (OCT)
1099 /FORWARD GUARD AND REVERSE BLOCK NUMBER
1102 4040 /ON TAPE AS 5145 (OCT)
1109 0400 /ON TAPE AS 2222 (OCT)
1112 /SUBROUTINE TO SEE IF USER TYPED MARK 384
1113 /TO SPECIFY STANDARD PDP-10 FORMAT
1115 DCA BLOCKS /CLEAR LOC. BLOCKS IN CASE NOT 10-FORMAT
1116 TAD TOTAL /AND GET NUMBER TYPED BY USER
1117 TAD M617 /WAS IT 384?
1119 JMP I F10PAT /NO-RETURN
1120 DCA W1 /YES-CLEAR W1 FOR WAIT LOOP
1121 TAD C1101 /AND ADJUST BLOCK TOTAL FOR
1122 DCA BLOCKS /1102(OCTAL) BLOCKS.
1130 /THE MARK TRACK HAS BEEN WRITTEN, AND TAPE IS
1131 /MOVING FORWARD IN THE FORWARD END ZONE. STOP
1132 /THE TAPE AND SEE IF THERE ARE ANY TAPES LEFT TO
1133 /MARK--IF SO GO DO THEM, ELSE TELL OPERATOR TO THROW THE
1134 /"OFF/WTM" SWITCH TO "OFF"
1135 /HE WILL THEN CONTINUE AFTER THIS ACTION
1138 /KILL WRITE,STOP TAPE
1146 /MESSAGE TO THE OPERATOR
1157 JMS I TYPIN /WAIT FOR CR
1159 SWOFF /CHECK TO MAKE SURE THAT SWITCH IS OFF
1160 /REVERSE TAPE AND READ MARK TRACK
1161 PSER, TAD DT3000 /REVERSE GO
1163 SDLC /LOAD COMMAND REGISTER
1164 DCA W1 /STALL ROUTINE TO GET UP TO SPEED
1170 SDSQ /SKIP ON QUAD LINE IF SET AFTER WAIT ROUTINE
1172 JMP .+3 /FLAG WAS SET
1173 SDSS /READ IN A LINE OF TAPE
1175 SDRC /READ THE COMMAND REGISTER
1176 SDST /CHECK FOR A TIMING ERROR
1178 JMS I SELTIM /TIMING ERROR
1179 AND MSK77 /CHECK TO SEE IF TAPE IS STILL IN END ZONE
1182 JMP .-11 /NOT A 55 YET
1183 JMS I SSDSQT /YES,READ IN SOME MORE
1184 TAD M55 /IS IT END ZONE
1186 JMP .-3 /STILL IN END ZONE
1187 TAD MTR /GET THE MARK TRACK
1188 TAD M25 /IS IT EXPAND CODE
1190 JMS I SCEXPC /NOT YET,CHECK FOR A 52,AND ADVANCE 3 LINES
1191 CLA /YES IT IS EXPAND CODE
1192 TAD M306 /SET UP FOR 198 EXPAND CODES
1194 JMS I SSDSQT /THE TAPE SHOULD BE IN SYNC NOW
1195 TAD M25 /READ THE REST OF EXPAND CODE
1197 JMS I MARKER /MARK TRACK ERROR
1198 ISZ CNT /INCREMENT COUNTER
1200 TAD VAR2 /NUMBER OF BLOCKS
1202 RSTBLK, JMS I SSDSQT /START OF A STANDARD BLOCK
1203 TAD M25 /FIRST EXPAND CODE AT BEGINNING
1205 JMS I MARKER /MARK TRACK ERROR
1206 JMS I SSDSQT /READ MARK BLOCK NUMBER
1209 JMS I MARKER /MARK TRACK ERROR
1210 JMS I SSDSQT /READ MARK GUARD
1213 JMS I MARKER /MARK TRACK ERROR
1216 JMS I SSDSQT /READ L,CK,F,PF
1219 JMS I MARKER /MARK TRACK ERROR
1225 DCA W5 /NUMBER OF DATA MARKS
1226 JMS I SSDSQT /READ DATA MARKS
1229 JMS I MARKER /MARK TRACK ERROR
1230 ISZ W5 /COUNT FOR NUMBER OF BLOCKS
1234 JMS I SSDSQT /READ PF,F,CK,L
1237 JMS I MARKER /MARK TRACK ERROR
1240 JMS I SSDSQT /READ REVERSE GUARD
1245 JMS I SSDSQT /READ BLOCK NUMBER
1248 JMS I MARKER /MARK TRACK ERROR
1249 JMS I SSDSQT /READ EXPAND CODE
1252 JMS I MARKER /END OF ONE BLOCK,MARK TRACK ERROR
1254 ISZ W6 /FINISHED ALL BLOCKS
1255 JMP RSTBLK /NO:DO OTHER BLOCKS
1256 TAD M307 /SET UP FOR INTERBLOCK SYNC AT END OF TAPE
1258 JMS I SSDSQT /CHECK FOR 199 EXPAND CODES
1261 JMS I MARKER /MARK TRACK ERROR
1271 WDBLKN, DBLKN /GO OUT TO WRITE DATA AND BLOCK NUMBERS FORWARD
1278 TAD VAR2 /NUMBER OF BLOCKS
1281 DCA BLK /INITIAL BLOCK IS 0
1283 JMS I MESS /COMPUTE THE COMP OBVERSE OF REV BLK
1286 TAD DT1400 /FORWARD,WRITE,GO
1288 SDLC /LOAD THE COMMAND REGISTER
1289 SDRC /CHECK TO MAKE SURE WRITE IS SET
1293 JMS WLO /WRITE FAILED TO SET
1296 SDSQ /ROUTINE TO GET UP TO SPEED
1304 JMS I SELTIM /TIMING ERROR
1305 LINE, SDSS /WRITE ALL ZEROES TO THE FIRST BLOCK
1307 SDLD /LOAD THE DATA BUFFER
1311 JMS I SELTIM /TIMING ERROR
1321 JMS I SELTIM /TIMING ERROR
1322 JMP WDOBLK /GO AND WRITE REVERSE GUARD
1323 WDBLK, CLA CLL /BEGINNING OF BLOCK,WRITE DATA AND BLOCK NUMBER
1324 JMS W4L /WRITE EIGHT LINES
1325 JMS W4L /END OF EXPAND CODE,BEGINNING OF BLK NUMBER
1326 TAD BLK /GET FORWARD BLOCK NUMBER
1329 JMS W4L /WRITE FIRST WORD OF REV GUARD
1331 JMS W4L /SECOND WORD OF REVERSE GUARD
1333 JMS W4L /FIRST WORD OF REVERSE CHECKSUM
1334 WDATA, TAD TOTAL /NUMBER OF DATA WORDS TO BE WRITTEN
1336 DCA W5 /SET UP COUNTER
1338 ISZ W5 /INCREMENT COUNTER
1341 TAD MSK77 /COME BACK TO WRITE LAST WORD AND CHECKSUM
1344 JMS W4L /FINISH CHECKSUM
1345 JMS W4L /FIRST WORD OF REVERSE LOCK
1346 JMS W4L /LAST WORD OF RL. AND HALF OF GUARD
1347 JMS W4L /REST OF GUARD
1348 TAD REVBLK /GET REVERSE BLOCK NUMBER
1351 JMS W4L /END OF BLOCK NUMBER AND HALF OF EXPAND CODE
1352 JMS W4L /END OF EXPAND CODE
1356 JMS I MESS /COMPUTE NEW BLK NUMBER
1360 JMS I SELTIM /TIMING ERROR
1361 ISZ W6 /IS IT DONE WRITING BLK AND DATA
1367 TAD DT1000 /SEARCH FOR END ZONE
1369 SDLC /LOAD THE COMMAND REG
1382 JMP .-1 /SKIP ON QUAD LINE FLAG
1383 SDLD /LOAD THE DATA BUFFER
1384 SDST /CHECK FOR A TIMING ERROR
1386 JMS I SELTIM /TIMING ERROR
1392 TAD DTA /STOP THE TAPE
1393 SDLC /LOAD THE COMMAND REGISTER
1417 DCA W6 /SET UP FOR THE NUMBER OF BLOCKS
1418 DCA BLK /SET BLK TO 0
1419 TAD DT1000 /FORWARD READ
1421 SDLC /LOAD THE COMMAND REG
1423 JMS I MESS /CALCULATE THE COMPLEMENT OBVERSE
1427 JMS I SELTIM /TIMING ERROR
1428 TAD M6 /WAIT TO GET UP TO SPEED
1429 DCA CNT /SET UP COUNTER
1430 SDSQ /SKIP ON A QUAD LINE FLAG
1432 SDRD /READ THE DATA BUFFER TO CLEAR FLAG
1437 JMS I SLRDRC /READ A SINGLE LINE AT A TIME
1439 SZA CLA /IS IT BLOCK MARK
1440 JMP SRDRC+4 /NO,GO BACK
1443 JMS I SELTIM /TIMING ERROR
1448 JMS I BLKERR /BLK NUMBER ERROR
1449 JMS I SSDSQT /READ GUARD
1450 JMS I SSDSQT /READ REVERSE LOCK
1451 JMS I SSDSQT /READ CHECKSUM
1452 SDRD /READ THE DATA BUFFER
1455 JMS I SELTIM /TIMING ERROR
1457 JMS I BCXOR /GO OUT TO CHECKSUM ROUTINE
1458 RDATA, TAD TOTAL /NUMBER OF WORDS PER BLOCK
1460 DCA W5 /SET UP COUNTER
1463 SDRD /READ THE DATA BUFFER
1466 JMS I SELTIM /TIMING ERROR
1468 TAD DATRD /SAVE THE DATA WORD
1470 JMS I DATERR /DATA ERROR
1473 SDST /CHECK FOR A TIMING ERROR
1475 JMS I SELTIM /TIMING ERROR
1478 SDSQ /READ REVERSE CHECKSUM
1483 JMS I SELTIM /TIMING ERROR
1485 JMS I BCXOR /CHECK CHECK SUM
1491 JMS I CHKERR /CHECKSUM ERROR
1494 JMS I SELTIM /TIMING ERROR
1495 JMS I SLRDRC /ADVANCE A SINGLE LINE FLAG
1496 TAD M31 /LOOK FOR REV BLK NUMBER
1501 JMS I SELTIM /TIMING ERROR
1504 TAD REVBLK /COMPARE BLOCK READ WITH ONE COMPUTED
1506 JMS I BLKERR /BLOCK NUMBER ERROR
1512 JMS I SELTIM /TIMING ERROR
1520 JMS I SELTIM /TIMING ERROR
1544 TAD DT3000 /REVERSE,GO
1546 SDLC /LOAD THE COMMAND REGISTER
1552 DCA DISDAT /SAVE THE DATA BUFFER
1554 AND MSK77 /MASK OUT THE MARK TRACK
1555 TAD M26 /CHECK FOR BLOCK NUMBER
1557 JMP DISEND /NOT BLK MARK,CHECK FOR END ZONE
1558 TAD DISDAT /DISPLAY THE NUMBER IN THE AC
1561 JMP DISLUP /GO SEARCH FOR THE NEXT BLOCK
1562 DISEND, TAD FOUR /IS IT END ZONE
1564 JMP DISLUP /NO,GO GET NEXT LINE
1565 TAD DTA /STOP GET READY TO READ
1566 SDLC /LOAD THE COMMAND REGISTER
1578 DCA W5 /SET UP FOR NUMBER OF BLOCKS
1581 DCA W6 /SET UP TO CHECK BLK REVERSE
1582 TAD DT3000 /READ REVERSE GO
1584 SDLC /LOAD THE COMMAND REGISTER
1595 SDRD /READ THE DATA BUFFER AND STORE IT AWAY
1600 SZA CLA /IS IT BLOCK NUMBER
1605 JMS I BLKERR /BLOCK NUMBER ERROR
1607 TAD W6 /INCREMENT A NUMBER FOR COMPARE COUNTER
1609 ISZ W5 /INCREMENT BLK COUNTER
1619 SDLC /LOAD THE COMMAND REGISTER WITH UNIT STOP
1625 INIT /END GO BACK TO DIRECT
1628 /SUBROUTINE TO CHECK FOR REPEATED DTA NUMBERS
1629 /DTA # TO COMPARE TO LIST IS IN AC ON ENTRY--THIS
1630 /ROUTINE STORES THE DTA # IF IT IS NEW AND IGNORES IT
1631 /IF IT IS NOT-CALL BY JMS REPEAT WITH DTA # IN AC
1633 DCA DNUM /TEM STORAGE FOR NEW DTA #
1634 TAD DBUFAD /INITIALIZE POINTER (DBUFPT)
1635 DCA DBUFPT /TO START OF DTA LIST
1636 TAD DCTR /LOAD NUM. OF DTAS STORED
1638 DCA COMCTR /STORE IN COMPARE COUNTER
1639 COMCHK, ISZ COMCTR /DONE WITH ALL COMPARES?
1640 JMP DOCOMP /NO: GO DO COMPARE
1641 TAD DNUM /YES: STORE NEW DTA#
1642 DCA I DBUFPT /AT END OF LIST
1643 ISZ DCTR /INCR. # OF DTAS STORED
1644 JMP I REPEAT /RETURN
1646 COMCTR, 0 /COUNTER FOR # OF LIST COMPARISONS TO BE DONE
1647 DCTR, 0 /COUNTER FOR # OF DTAS IN LIST
1648 DBUFAD, DTABUF /START OF DTA NUM. LIST
1649 DNUM, 0 /TEM STORAGE FOR DTA #
1652 /THIS SECTION DOES THE ACTUAL COMPARISON BETWEEN
1653 /THE DTA# PASSED TO THE ROUTINE AND A NUMBER ON THE LIST
1655 DOCOMP, TAD I DBUFPT /GET NXT DTA NUMBER PASSED
1657 TAD DNUM /ADD IN DTA NUMBER PASSED
1658 SNA CLA /ARE THEY THE SAME
1659 JMP I REPEAT /YES: RETURN
1660 ISZ DBUFPT /NO: INCREMENT LIST POINTER
1661 JMP COMCHK /SEE IF DONE ALL COMPARES
1669 TAD DT3000 /REVERSE READ GO
1671 SDLC /LOAD THE COMMAND REGISTER
1672 SDSS /SKIP ON A SINGLE LINE FLAG
1674 SDRC /READ THE COMMAND REGISTER
1676 TAD M22 /IS IT END ZONE
1678 JMP .-6 /NO GO BACK AND LOOK AGAIN
1679 TAD DT1000 /FORWARD READ GO
1681 SDLC /LOAD THE COMMAND REGISTER
1691 DCA W3 /SET UP COUNTER TO READ 22 BLOCKS
1692 TAD BADD /SET UP BUFFER ADDRESS
1694 SDSS /GO SINGLE LINE FLAGS
1696 SDRD /READ THE DATA BUFFER
1698 SDRC /READ THE COMMAND REGISTER
1700 TAD M26 /SEARCH FOR BLOCK NUMBER
1702 JMP RDFA1+4 /NOT BLOCK NUMBER YET GO BACK AGAIN
1703 TAD CNT /OK BLK NUMBER STORE IT AWAY
1705 ISZ W3 /INCREMENT COUNTER
1706 JMP RDFA1+4 /NOT 22 BLOCKS YET
1710 /TYPE OUT BLOCK NUMBERS AND DTA UNIT#
1716 TAD DTA /GET UNIT NUMBER
1718 JMS I TYOCT /AND TYPE IT OUT
1722 TAD M26 /WILL TYPE ALL
1724 TAD BADD /ADDRESS OF BLOCK
1725 DCA X2 /NUMBERS TO INDEX
1726 TAD I X2 /FIRST OR NEXT BLOCK
1727 JMS I TYOCT /TYPE IT OUT
1733 JMP I IT /GO ASK FOR FORMAT
1736 TAD DT1000 /FORWARD READ GO
1738 SDLC /LOAD THE COMMAND REGISTER
1739 SDSS /SKIP ON A SINGLE LINE FLAG
1741 SDRC /READ THE COMMAND REGISTER
1743 TAD M22 /CHECK FOR END ZONE
1745 JMP .-6 /NOT YET GO BACK
1746 TAD DT3000 /REVERSE READ GO
1748 SDLC /LOAD THE COMMAND REGISTER
1757 JMP RDFA1 /STORE NUMBERS IN REVERSE
1767 JMP I IT /GUESS HE DOESN'T WANT TO TRY AGAIN
1769 TAD DT1000 /FORWARD READ GO
1771 SDLC /LOAD THE COMMAND REGISTER
1773 DCA CNT /WAIT 6 LINES
1776 SDRC /READ THE COMMAND REGISTER
1800 SDSQ /ADVANCE SIX LINES
1801 JMP .-1 /SKIP ON QUAD LINE FLAG
1802 SDRC /READ COMMAND REGISTER
1805 JMS I SELTIM /TIMING ERROR
1807 JMP .-1 /SKIP ON SINGLE LINE FLAG
1811 JMS I SELTIM /TIMING ERROR
1814 SDRC /READ THE COMMAND REGISTER
1817 JMS I SELTIM /TIMING ERROR
1818 AND MSK77 /SAVE THE MARK TRACK LAST 6 BITS
1823 A3LNS, 0 /ADVANCE THREE LINES
1825 JMP .-1 /SKIP ON SINGLE LINE FLAG
1829 JMS I SELTIM /TIMING ERROR
1835 JMS I SELTIM /TIMING ERROR
1841 JMS I SELTIM /TIMING ERROR
1851 JMS I MARKER /MARK TRACK ERROR
1852 JMS A3LNS /READ THREE MORE LINES
1853 TAD M25 /IS IT 25 NOW
1855 JMS I MARKER /NO ,MARK TRACK ERROR
1856 JMP I CEXPC /YES:IT IS EXPAND CODE NUMBER 1
1858 /SIXBIT COMPLEMENT XOR SUBROUTINE
1859 /SUBROUTINE IS ENTERED WITH DATA WORD TO BE XORED IN AC
1860 /TWO SIX-BIT COMPLEMENT XORS WILL TAKE PLACE TO LOC CHKSUM
1861 /WITH THE RESULT IN CHKSUM
1864 CMA /COMPLEMENT WORD
1899 TAD I LSTPT /GET CURRENT VALUE OF DATA LIST PTR
1900 DCA TBUFPT /STORE IT AS TEM,BUF,PTR
1901 TAD I TBUFPT /GET A DTA # FROM THE LIST
1903 SZA CLA /IS IT A 7777
1904 JMP LSTEND /YES END OF LIST
1905 TAD I TBUFPT /NO;GET IT BACK
1907 ISZ I LSTPT /INCREMENT LIST POINTER
1909 /COME HERE AT END OF LIST TO RESET POINTERS AND RETURN TO CALL+2
1910 LSTEND, ISZ NUDTA /INCREMENT RETURN POINTER
1911 TAD I STRTPT /GET ADR OF START OF LIST
1913 JMP NUDTA+1 /GO GET FIRST DTA# AND RETURN
1914 STRTPT, DBUFAD /POINTER TO START OF DATA LIST
1915 TBUFPT, 0 /TEM STORAGE FOR BOT PTR
1916 LSTPT, DBUFPT /POINTER TO CURRENT VALUE OF DTA LIST PTR
1918 /CONSTANTS FOR FORMULA TRANSLATION SECTION
1931 /CHECK SWITCH TO SEE IF SET TO WTM POSITION
1932 SWCHK, JMS I TYPE /TYPE OUT MESSAGE
1942 JMS I TYPIN /WAIT FOR CR
1945 SDLD /CLEAR SINGLE AND QUAD FLAGS
1951 JMP SWCHER /ERROR,TYPE ERROR MESSAGE AND GO TO SWCHK
1952 /SEE IF THE DRIVE IS OK
1953 RSTSM, SDLC /LOAD CR TO CLEAR TIMEING ERROR
1954 SDLD /LOAD DATA BUFFER TO CLEAR S Q FLAGS
1955 TAD DT0400 /SET WRITE
1957 DCA SAV /STORE IT AWAY
1963 SDLC /LOAD THE TRANSPORT
1964 SDRC /READ THE COMMAND REGISTER AND CHECK IT
1967 SMA /CHECK WRITE TO BE SET
1968 JMP ERCHK /WRITE IS NOT SET
1972 RAL /CHECK SELECT AND TIMING ERROR
1974 JMP ERCHK /SELECT OR TIMING ERROR
1975 JMS NUDTA /CHECK OTHER DRIVE IF ANY
1976 JMP RSTSM-11 /CHECK OTHER DRIVE
1982 ERCHK, JMS I TYPE /INCORRECT SETUP
2025 SDLD /CLEAR ANY FLAGS THAT ARE SET
2028 JMP OFF /FLAG SHOULDN'T BE SET
2037 /INPUT BUFFER FOR TELETYPE THIS MUST BE AT THE END OF PROGRAM