--- /dev/null
+/TD8E FORMATTER V4
+/
+/
+/
+/
+/
+/
+//
+/
+/
+/
+/
+/COPYRIGHT (C) 1971, 1975
+/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
+/
+/
+/
+/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A
+/SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-
+/SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER
+/COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE
+/TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO
+/AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
+/SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
+/
+/
+/THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
+/NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
+/EQUIPMRNT COROPATION.
+/
+/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
+/SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
+/
+/
+/
+/
+/
+/
+\f
+
+/TD8E DECTAPE FORMATTER COPYRIGHT 1971
+/DIGITAL EQUIPMENT CORP.
+/MAYNARD , MASS
+
+
+
+
+
+ X1=10
+ X2=11
+
+/SYMBOL TABLE AUGMENTATION
+
+ SDSS=6771
+ SDST=6772
+ SDSQ=6773
+ SDLC=6774
+ SDLD=6775
+ SDRC=6776
+ SDRD=6777
+
+
+ *0
+ 0
+ JMP 1 /HLT PROGRAM GOT INTERRUPTED SOMEHOW
+ 2
+ 3
+ 0
+ 0
+
+/WORKING LOCATIONS
+
+ *20
+
+W1, 0000
+W2, 0000
+W3, 0000
+W4, 0000
+W5, 0000
+W6, 0000
+BLOCKS, 0000
+DTA, 0000
+PHASE, 0000
+TOTAL, 0000
+VAR1, 0000
+VAR2, 0000
+/CONSTANTS
+
+C0017, 0017
+C0070, 0070
+C0077, 0077
+C0007, 0007
+C0700, 0700
+C203, 0203
+C201, 0201
+C260, 0260
+C261, 0261
+C270, 0270
+C271, 0271
+C277, 0277
+C1620, 1620
+C7000, 7000
+C7700, 7700
+C7714, 7714
+C7761, 7761
+CRCOD, 0215
+LETK, 0313
+LFCOD, 0212
+M2, -2
+M3, -3
+M6, -6
+M7, -7
+M14, -14
+M144, -144
+SPCOD, 0240
+
+BADD, BUFFER-1
+BFR, BUFFER
+COMPAR, COMPRE
+IT, INIT1
+QU1, Q1
+QU2, Q2
+QU3, Q3
+QU4, Q4
+MESS, MES
+STX, START
+TYOCT, TYCT
+TYPE, MESAGE
+TYPIN, TYPN
+WAIT, STALL
+WC, 0
+MTR, 0
+SLRDRC, SRDRC
+DATRD, 0
+M55, -55
+M25, -25
+M26, -26
+M32, -32
+M10, -10
+M70, -70
+M73, -73
+M51, -51
+M45, -45
+M22, -22
+M143, -143
+M52, -52
+M31, -31
+M306, -306
+CNT, 0
+M4, -4
+M307, -307
+SSDSQT, SDSQT
+SA3LNS, A3LNS
+SCEXPC, CEXPC
+MSK77, 0077
+NUD, NUDTA
+BLK, 0
+REVBLK, 0
+BCXOR, SBCXOR
+CHKSUM, 0
+SBWORD, 0
+
+
+
+/TYPE THE CHARACTER IN THE AC ON THE KEYBOARD PRINTER
+
+RSEND, 0000
+ TLS /LOAD AND PRINT, CLEAR FLAG
+ TSF /WAIT FOR CONFIRMATION
+ JMP .-1 /ENDLESSLY
+ TCF /CLEAR THE FLAG ANYWAY
+ JMP I RSEND
+
+
+/PRINT A "?" ON THE KEYBOARD TYPER
+
+QU, .+1
+ IOF
+ CLA CLL /C(AC)+C(L)=0
+ TAD C277 /"?"
+ JMS RSEND /TYPE THE CHARACTER
+ JMP I .+1 /RESTART
+ INIT
+
+/DECTAPE CONTROL WORDS
+
+DT1400, 1400
+DT0400, 0400
+DT2000, 2000
+DT3000, 3000
+DT1000, 1000
+
+BINCO, BINCON
+SELTIM, ZTIM
+MARKER, ZMKTK
+BLKERR, ZBLK
+DATERR, ZDATA
+CHKERR, ZPAR
+DOMARK, STMK
+DBUFPT, 0 /POINTER TO CURRENT POSITION IN DTA LIST
+
+
+
+*200 /PAGE 1
+/TYPE CANNED MESSAGES.....
+/THANKS TO DIGITAL 8-18-U
+ JMP I .+1
+ PATCH
+
+MESAGE, 0
+ IOF
+ CLA CMA /SET C(AC)=-1
+ TAD MESAGE /ADD LOCATION
+ DCA 10 /AUTO INDEX REGISTER
+ TAD I 10 /FETCH FIRST WORD
+ DCA MSRGHT /SAVE IT
+ TAD MSRGHT
+ RTR
+ RTR /ROTATE 6 BITS TO THE RIGHT
+ RTR
+ JMS TYPECH /TYPE IT
+ TAD MSRGHT /GET DATA AGAIN
+ JMS TYPECH /TYPE RIGHT HALF
+ JMP MESAGE+5 /CONTINUE
+MSRGHT, 0 /TEMPORARY STORAGE
+TYPECH, 0 /TYPE CHARACTER IN C(AC)6-11
+ AND C0077
+ SNA /IS IT END OF MESSAGE?
+ JMP I 10 /YES: EXIT
+ TAD M40 /SUBTRACT 40
+ SMA /<40?
+ JMP .+3 /NO
+ TAD C340 /YES: ADD 300
+ JMP MTP /TO CODES <40
+ TAD M3 /SUBTRACT 3
+ SZA /IS IT ZERO?
+ JMP .+3 /NO
+ TAD C212 /YES: CODE 43 IS
+ JMP MTP /LINE-FEED (212)
+ TAD M2 /SUBTRACT 2
+ SZA /IS IT ZERO?
+ JMP .+3 /NO
+ TAD C215 /YES: CODE 45 IS
+ JMP MTP /CARRIAGE RETURN (215)
+ TAD C245 /ADD 200 TO OTHERS >40
+MTP, TLS /TRANSMIT CHARACTER
+ TSF /WAIT FOR THE FLAG
+ JMP .-1 /NOT SET YET
+ CLA /SET: CLEAR C(AC)
+ JMP I TYPECH /RETURN
+
+/CONSTANTS
+
+M40, -40
+C340, 340
+C212, 212
+C215, 215
+C245, 245
+/ROUTINE WAITS UNTILL A COMPLETE MESSAGE HAS BEEN ENTERED
+/SIGNIFIED BY A CR.
+
+TYPN, 0
+ IOF
+ KCC /CLEAR AC, KEYBOARD FLAG
+ TAD BADD /GET BUFFER ADDRESS
+ DCA W1 /STORE FOR THE CHARACTER STRING
+
+/READ AND RESPOND WITH THE CHARACTER
+
+NTYRTN, ISZ W1 /NORMAL RETURN. INCREMENT BUFFER
+ KSF /WAIT FOR KEYBOARD
+ JMP .-1 /FLAG TO RAISE
+ KRB /GOT FLAG, RESET IT, GET CHARACTER
+ JMS RSEND /SEND CHARACTER BACK
+ AND (177 /TAKE CARE OF PARITY
+ TAD (200
+ DCA I W1 /LOAD CHARACTER INTO BUFFER AREA
+ TAD I W1 /CHECK FOR CTRL C
+ CIA
+ TAD C203
+ SZA CLA
+ JMP CHKSP /NO- CHECK FOR SPACE
+ 6007 /CAF- CLEAR ALL FLAGS
+ NOP /JUST IN CASE
+ CLA
+ JMP 7605
+
+/IF CHARACTER IS A SPACE, IGNORE IT
+
+CHKSP, TAD I W1 /CHARACTER INTO THE AC
+ CIA /SUBTRACT FROM SPACE CODE (240)
+ TAD SPCOD /COMPLETE COMPARISON
+ SNA CLA /WAS IT A SPACE?
+ JMP NTYRTN+1 /YES: DO NOT INCREMENT BUFFER
+
+/IF CHARACTER IS A CR, EXIT FROM ROUTINE
+
+ TAD I W1 /CHARACTER TO AC
+ CIA /SET AC TO SUBTRACT CR (215)
+ TAD CRCOD /COMPLETE COMPARISON
+ SZA CLA /WAS IT CR?
+ JMP NTYRTN /NO: INCREMENT BUFFER + WAIT
+
+/CARRIAGE RETURN FOUND, EXIT FROM ROUTINE
+
+ TAD LFCOD /GIVE KEYBOARD LINE FEED
+ JMS RSEND /EXECUTE LINE FEED
+ CLA CLL /EXIT WITH C(ACC) + AND C(L)=0
+ IOF
+ JMP I TYPN /RETURN TO CALL
+\f
+/COMPARE A STRING OF CHARACTERS IN "BUFFER"
+/TO A CHARACTER STRING AFTER A JMS IN ASCII
+
+COMPRE, 0
+ CLA CMA /C(AC)=7777
+ TAD COMPRE /SUBTRACT 1 FOR INDEX REG 1
+ DCA 10 /AUTO INDEX 1 SET TO CHA STRING
+ TAD BADD /AUTO INDEX 2 SET TO BUFFER-1
+ DCA 11 /LOAD X2
+
+/COMPARE CHARACTERS TILL ONE DOESN'T COMPARE OR TILL
+/A 0 IS FOUND IN X1. IF OK, RETURN TO TWO PLUS THE
+/ZERO, IF BAD ONE PLUS
+
+ TAD I X1 /CHARACTER FROM PROGRAM
+ CIA /TO SUBTRACT FROM
+ TAD I X2 /CHARACTER IN BUFFER
+ SZA CLA /COMPARE?
+ JMP CERR /NO:RESYNC FOR NON COMPARE EXIT
+ TAD I X1 /YES: CHECK FOR GOOD EXIT
+ SZA /IF 0, EXIT GOOD
+ JMP .-6 /NO: TEST NEXT CHAACTER
+ ISZ X1 /+1 TO X1(TOTAL 2 FROM THE 0)
+ JMP I X1 /+1 TO X1, EXIT
+
+/ERROR FOUND. RESYNC AND EXIT NO COMPARE
+
+CERR, TAD I X1 /CHARACTER FROM PROGRAM
+ SZA CLA /IS THIS EXIT KEY? (0000)
+ JMP .-2 /NO: GET NEXT
+ JMP I X1 /YES: EXIT, NOT COMPARE
+\f
+*400
+/VARIOUS ERROR MESSAGES
+/"NOT DECIMAL"
+
+Q1, JMS I TYPE
+ 1617 /NO
+ 2440 /T
+ 0405 /DE
+ 0311 /CI
+ 1501 /MA
+ 1400 /L
+ JMP QUX
+
+/"TO MANY WORDS"
+
+Q2, JMS I TYPE
+ 2417 /TO
+ 1740 /O
+ 1501 /MA
+ 1631 /NY
+ 4027 / W
+ 1722 /OR
+ 0423 /DS
+ 0000 /00
+ JMP QUX
+
+/"TO MANY BLOCKS"
+
+Q3, JMS I TYPE
+ 2417 /TO
+ 1740 /O
+ 1501 /MA
+ 1631 /NY
+ 4002 / B
+ 1417 /LO
+ 0313 /CK
+ 2300 /S0
+ JMP QUX
+
+/"NOT DIVISIBLE BY 3"
+Q4, JMS I TYPE
+ 1617 /NO
+ 2440 /T
+ 0411 /DI
+ 2611 /VI
+ 2311 /SI
+ 0214 /BL
+ 0540 /E
+ 0231 /BY
+ 4063 / 3
+ 0000 /00
+QUX, JMS I TYPE
+ 4345 /CR+LF
+ 0000 /END
+ JMP I .+1
+ INIT
+/THE CODING BELOW CREATES THE BLOCK NUMBER
+/CONVERSION PRIOR TO THE TAPE WRITE.
+
+MES, 0
+ DCA W4 /SAVE WORD
+ CLL
+ TAD W4
+ CMA RTR
+ RTR
+ AND C7000
+ DCA V1
+ TAD W4
+ CMA RTL
+ RAL
+ AND C0700
+ DCA V2
+ TAD W4
+ CMA RTR
+ RAR
+ AND C0070
+ DCA V3
+ TAD W4
+ CMA RTL
+ RTL
+ AND C0007
+ TAD V1
+ TAD V2
+ TAD V3
+ JMP I MES
+
+V1, 0000
+V2, 0000
+ 7777
+ 7700
+ 0000
+V3, 0000
+ 0000
+
+PATCH, CLA
+ TAD .+4
+ DCA 1
+ JMP I .+1
+ START
+ HLT
+/TYPE ONE FOUR CHARACTER OCTAL WORD GIVEN TO THE
+/ROUTINE VIA C(ACC). C(ACC)=0 ON EXIT
+
+TYCT, 0
+ DCA TW1 /STORE WORD GIVEN
+ TAD TW1 /TO C(ACC) AGAIN
+ RTR
+ RTR /6 BITS RIGHT
+ RTR
+ DCA TYCT1+2 /SAVE ROTATED VALUE, 1ST TWO
+ TAD TYCT1+2 /TO C(ACC) AGAIN
+ AND C0007 /ISOLATE SECOND CHARACTER
+ TAD C6060 /CONVERT TO ASCII
+ DCA TYCT1+1 /STORE AS FIRST PARTIAL 2
+ TAD TYCT1+2 /ROTATED VALUE STORED ABOVE
+ RTL
+ RAL /3 BITS LEFT
+ AND C0700 /ISOLATE FIRST CHARACTER
+ TAD TYCT1+1 /CONVERT 1ST TO ASCII
+ DCA TYCT1+1 /1ST AND 2ND CHARACTERS READY
+ TAD TW1 /ORIGIONAL WORD
+ AND C0007 /ISOLATE 4TH CHARACTER
+ TAD C6060 /CONVERT 4 TH TO ASCII
+ DCA TYCT1+2 /STORE 4TH FOR A MOMENT
+ TAD TW1 /ORIGIONAL WORD
+ RTL
+ RAL /POSITION IT 3RD CHARACTER
+ AND C0700 /ISOLATE 3RD CHARACTER
+ TAD TYCT1+2 /CONVERT TO ASCII
+ DCA TYCT1+2 /CONVERSION COMPLETE
+TYCT1, JMS I TYPE /TYPE THE FOUR CHARACTERS
+ 0 /FIRST 2
+ 0 /SECOND 2
+ 0 /KILL KEY
+ JMP I TYCT /EXIT FROM ROUTINE
+
+/SOME CONSTANTS FOR THE ROUTINE
+
+TW1, 0000
+C6060, 6060
+\f
+*600
+
+STALL, 0
+ CLA
+ TAD I 12 /WORD TO BE WRITTEN
+ SDSQ /WAIT FOR QUADLINE FLAG
+ JMP .-1
+ SDLD /LOAD DATA REGISTERS
+ SDST /CHECK FOR TIMING ERROR
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ CLA
+ JMP I STALL /GO GET NEXT WORD
+
+
+
+/WAIT TILL WORD COUNT REGISTER GOES TO ZERO
+
+/BLOCK NUMBER ERROR
+ZBLK, 0
+ CLA
+ TAD DTA
+ SDLC /STOP MOVEMENT OF TAPE
+ JMS I TYPE
+ 2003 /PC
+ 4000 /END
+ CLA CMA
+ TAD ZBLK
+ JMS I TYOCT
+ JMS I TYPE
+ 4040 /DOUBLE SPACE
+ 0214 /BL
+ 1703 /OC
+ 1340 /K
+ 1625 /NU
+ 1502 /MB
+ 0522 /ER
+ 4000 /END
+ JMP ZCOM
+
+ /DATA ERRORS
+ZDATA, 0
+ CLA
+ TAD DTA
+ SDLC /STOP THE TAPE
+ JMS I TYPE
+ 2003
+ 4000
+ CLA CMA
+ TAD ZDATA
+ JMS I TYOCT
+ JMS I TYPE
+ 4040
+ 0401 /DA
+ 2401 /TA
+ 4000 /END
+ JMP ZCOM
+
+/MARK TRACK ERROR
+
+ZMKTK, 0
+ CLA
+ TAD DTA
+ SDLC /STOP THE TAPE
+ JMS I TYPE
+ 2003 /PC
+ 4000 /END
+ CLA CMA
+ TAD ZMKTK
+ JMS I TYOCT
+ JMS I TYPE
+ 4040
+ 1501 /MA
+ 2213 /RK
+ 4024 / T
+ 2201 /RA
+ 0313 /CK
+ 4000 / 0
+ JMP ZCOM
+/PARITY ERROR
+
+ZPAR, 0
+ CLA
+ TAD DTA
+ SDLC /STOP THE TAPE
+ JMS I TYPE
+ 2003 /PC
+ 4000 /END
+ CLA CMA
+ TAD ZPAR
+ JMS I TYOCT
+ JMS I TYPE
+ 4040
+ 0310 /CH
+ 0503 /EC
+ 1323 /KS
+ 2515 /UM
+ 4000 /0
+ JMP ZCOM
+
+
+/TIMING ERROR
+
+ZTIM, 0
+ CLA
+ TAD DTA
+ SDLC /STOP THE TAPE
+ JMS I TYPE
+ 2003
+ 4000
+ CLA CMA
+ TAD ZTIM
+ JMS I TYOCT
+ JMS I TYPE
+ 4040
+ 2411 /TI
+ 1511 /MI
+ 1607 /NG
+ 4000 / 0
+
+/TYPE "ERROR PHASE X"
+
+ZCOM, TAD PHASE /WHAT PHASE OF OPERATION
+ TAD PFORM /WAS THE MACHINE IN
+ DCA TFORM /WHEN ERROR OCCURED
+ JMS I TYPE
+ 0522 /ER
+ 2217 /RO
+ 2240 /R
+ 2010 /PH
+ 0123 /AS
+ 0540 /E
+TFORM, 4060 / X
+ 4543 /CR+LF
+ 0000 /END
+ JMP I .+1
+ RETRY
+PFORM, 4060
+
+
+\f
+/HERE STARTS THIS PROGRAM. IT WILL ASK THE
+/OPERATOR FOR DRIVE NUMBERS, THEN ASK HIM FOR
+/A DIRECTION ON WHAT TO DO WITH THE DRIVES.
+
+/THE SEQUENCE FOR MARKING A TAPE WOULD APPEAR AS:
+
+
+/UNIT? (0 OR 1 OR 0 1)
+/FORMAT? (MARK 1215)
+/2277 WORDS, 0256 BLOCKS.OK? YES OR NO
+/(YES)
+
+
+/THAT DATA IN PARENTHESIS IS TYPED BY THE OPERATOR
+/(HE DOESN'T TYPE THE PARENTHESIS)
+/IF HE HAD ANSWERED NO, "FORMAT?" WOULD BE TYPED OUT.
+/IF THE DRIVE WAS WRONG, HE WOULD TYPE RESTART.
+/IF HE HAD TYPED "MARK" IN RESPONSE TO "FORMAT?" THE
+/TAPE WOULD BE MARKED WITH THE STANDARD PDP-8 CONFIGURATION.
+/IF HE HAD TYPED "MARK 384" THE TAPE WOULD
+/BE MARKED WITH THE STANDARD PDP-10 CONFIGURATION
+/NOTE: THE WORD AND BLOCK NUMBERS ARE TYPED IN OCTAL
+/IF A MISTAKE OCCURS ON THE OPERATORS PART (WITH REFERANCE
+/TO BLOCK + WORD SIZE) HE WILL BE TOLD ABOUT IT
+
+
+
+
+
+*1000
+
+/MAKE A CALL FOR THE DECTAPE NUMBERS TO BE
+/WORKED.
+
+STAR0, JMS I TYPE /TYPE VERSION NUMBER
+ 4543 /CR+LF
+ 4300 /LF+0
+ JMS I TYPE
+ TEXT /TDFMT V4A/
+START, JMS I TYPE /SET UP TYPER
+ 4543 /CR+LF
+ 4300 /LF+END
+
+TYQU, JMS I TYPE /"UNIT?"
+ 2516 /UN
+ 1124 /IT
+ 7740 /?
+ 0000 /END
+
+/WAIT FOR A REPLY
+
+ JMS I TYPIN /GET NUMBERS
+ TAD BADD /INITIALIZE POINTER (BFR)
+ IAC /(BADD=BUFFER-1, SO BUMP THE AC)
+ DCA BFR /TO START OF INPUT BUFFER
+ DCA DCTR /INITIALIZE DTA COUNTER TO 0
+ DCA CRFLAG /CLEAR FLAG SO CR NOT ACCEPTIBLE
+CRCHK, TAD CRCOD /GET CODE FOR CAR. RETN
+ CIA /NEGATE IT
+ TAD I BFR /SEE IF NEXT CHAR. IN
+ SNA /BUFFER IS CAR. RETN.
+ JMP OKCR /YES: SEE IF C.R. LEGAL HERE
+ DCA CRFLAG /NO: SO C.R. IS LEGAL NOW
+VALCHK, TAD C260 /SEE IF # IS LESS THAN
+ CIA /ASCII 0 (260)
+ TAD I BFR /SUBTRACT BUFFER DATA
+ SPA CLA /IS IT LESS THAN ASII 0?
+ JMP TYQU /YES: TELL OUTSIDE WORLD
+ TAD C261 /NO: SEE IF GREATER THAN
+ CMA /ASC II 1 (261)
+ TAD I BFR /SUBTRACT BUFFER DATA
+ SMA CLA /GREATER THAN ASCII 7?
+ JMP TYQU /YES: TELL OUTSIDE WORLD
+ TAD I BFR /NO: ACCEPT BUFFER
+ RTR
+ AND C7000 /ISOLATE DTA
+ JMS REPEAT /GO CHECK FOR REPEATED DTA AND STORE #
+ ISZ BFR /INCREMENT INPUT BUF. PTR.
+ JMP CRCHK /GO LOOK AT NEXT CHAR.
+
+/THIS SECTION CHECKS TO SEE IF THERE HAS BEEN ANY
+/VALID INPUT ONCE A CARRIAGE RETURN IS SEEN
+OKCR, CLA /CLEAR AC
+ TAD CRFLAG /LOAD CR FLAG; 0 MEANS NO GOOD
+ SNA CLA
+ JMP START /0: NO VALID INPUT; RESTART
+ TAD DCTR /NOT 0: SO HAVE VALID INPUT
+ TAD DBUFAD /CALCULATE END OF DTA LIST +1
+ DCA DBUFPT /STORE IT IN BUFFER POINTER, THEN
+ CMA /COMPLEMENT THE AC AND
+ DCA I DBUFPT /TERMINATE DTA LIST WITH 7777
+INIT1, CLA /CLEAR AC IF COME THRU LOC IT
+ TAD DBUFAD /AND RESET LIST POINTER
+ DCA DBUFPT /TO START OF LIST
+ JMS I GETDTA /GO GET A DTA NUMBER
+
+/INFORM THE OPERATOR THAT THE PROGRAM IS SET TO START
+/TYPE "FORMAT" AND WAIT FOR THE REPLY
+
+INIT, JMS I TYPE /MESSAGE OUT
+ 0617 /FO
+ 2215 /RM
+ 0124 /AT
+ 7740 /?
+ 0000 /END
+ JMS I TYPIN /WAIT FOR A REPLY
+ JMS I COMPAR /DID HE TYPE "MARK"?
+ 0315 /M
+ 0301 /A
+ 0322 /R
+ 0313 /K
+ 0000 /END
+ JMP .+3
+ JMP I .+1
+ MARK /TO MARK A TAPE
+/SEE IF HE TYPED "RDR" (READ AND TYPE FIRST 12
+/BLOCK NUMBERS IN REVERSE).
+
+ JMS I COMPAR
+ 0322 /R
+ 0304 /D
+ 0322 /R
+ 0000 /0
+ JMP .+3
+ JMP I .+1
+ RDR /TYPE BLOCKS
+
+/SEE IF HE TYPED "RDF" (READ AND TYPE FIRST 12
+/BLOCK NUMBERS FORWARD).
+
+ JMS I COMPAR
+ 0322 /R
+ 0304 /D
+ 0306 /F
+ 0000 /0
+ JMP .+3
+ JMP I .+1
+ RDFA /TYPE BLOCKS
+
+/SEE IF HE TYPED "SAME" (MEANING MARK A TAPE
+/USING THE SAME CONSTANTS AS BEFORE).
+
+ JMS I COMPAR
+ 0323 /S
+ 0301 /A
+ 0315 /M
+ 0305 /E
+ 0000 /0
+ JMP .+3
+ JMP I .+1
+ SWCHK /TO MARK AS BEFORE
+
+/SEE IF HE TYPED "RESTART"
+
+ JMS I COMPAR
+ 0322 /R
+ 0305 /E
+ 0323 /S
+ 0324 /T
+ 0301 /A
+ 0322 /R
+ 0324 /T
+ 0000 /0
+ JMS QU /MUST BE NONSENSE
+ JMP START /START ALL OVER
+GETDTA, NUDTA /POINTER TO ROUTINE TO SWITCH UNITS
+CRFLAG, 0 /=0, CR NO GOOD; NOT 0, CR IS OK
+\f\f
+ *1200
+/MARK WAS TYPED IN, IF W1-1 IS NOT A "K",ASSUME THAT
+/A NUMBER WAS TYPED IN, AND VERIFY THIS. IF W1-1 IS
+/A "K", ASSUME STANDARD FORMAT.(W1=LAST ENTRY INTO THE BUFFER)
+
+MARK, TAD I BINCO /ADDRESS OF FIRST BINARY
+ DCA W5 /CONSTANT FOR DEC TO BIN
+ DCA TOTAL /WILL BE BINARY EQUIVILANT
+
+/SAVE C(X1) FOR DECREMENT THROUGH BUFFER
+
+DNC, CLA CMA /DECREMENT BUFFER ADDRESS
+ TAD W1 /ADDRESS BY 1
+ DCA W1 /W1=SWEEP ADDRESS
+
+/LOOK FOR END OF PROCESSING BY LOOKING FOR A "K" IN BUFFER
+
+ TAD LETK /LETTER ASCII "K"
+ CIA /SUBTRACT FROM CHARACTER
+ TAD I W1 /IN BUFFER
+ SNA CLA /EQUAL?
+ JMP DIV3 /YES: SEE IF DIVISIBLE BY 3
+
+/VERIFY THIS CHARACTER AS BEING OF DECIMAL ORIGIN
+
+ TAD C260 /ASCII FOR 0
+ CIA /TO SEE IF CHARACTER
+ TAD I W1 /IS LESS THAN 260
+ SPA CLA /IS IT?
+ JMP I QU1 /YES: NOT DECIMAL CHARACTER
+ TAD C271 /ASCII FOR 9
+ CMA /TO SEE IF GREATER THAN
+ TAD I W1 /9
+ SMA CLA /IS IT?
+ JMP I QU1 /NOT A DECIMAL CHARACTER
+/CHARACTER IS DECIMAL. NOW CONVERT IT TO BINARY
+/REMEMBER POSITION OF CHARACTER IN BUFFER MAY BE
+/10,100,1000.
+
+ TAD I W1 /ISOLATE THE NUMBER
+ AND C0017 /FOR PROPER CONVERSION
+ SNA /IF 0, NO BINARY CONVERSION NEEDED
+ JMP IBS /YES: 0: INCREMENT BINARY CONVERSION
+
+/NOT 0, SET UP CONVERSION LOOP
+
+ CLL CIA /NUMBER OF ADDITIONS
+ DCA W4 /TO NEGATIVE FOR ISZ
+ TAD I W5 /BINARY POSITION TO C(ACC)
+ TAD TOTAL /ADD TO PRESENT TOTAL
+ SZL /CHECK ON TO MANY WORDS
+ JMP I QU2 /TO MANY WORDS CALLED FOR
+ DCA TOTAL /KEEP RUNNING SUM
+ ISZ W4 /LAST ADDITION?
+ JMP .-6 /NO: ADD AGAIN
+
+/FINAL ADDITION FOR THIS POSITION COMPLETED
+
+IBS, ISZ W5 /NEXT POSITION
+ JMP DNC /DO NEXT CHARACTER
+
+/LAST CHARACTER COMPLETED. SEE IF DIVISIBLE BY 3
+/IF NOT A NORMAL INPUT
+
+DIV3, TAD TOTAL /GET TOTAL WORDS
+ SNA /IF TOTAL 0, NORMAL INPUT
+ TAD C201 /129 OCT. THIS TEST REDUNDANT
+ TAD C0017 /ADD CONSTANT 15 TO TOTAL
+ DCA TOTAL /FOR FUTURE CONSIDERATIONS
+ DCA VAR1 /# OF WORDS/3 FOR MARK TRACK WRITING
+ TAD TOTAL /RESTORE IN THE ACC
+ CLL /TO DIVIDE BY 3, LINK KEEPS OVERFLOW
+ TAD M3 /SUBTRACT 3
+ ISZ VAR1 /ON EACH DIVISION, KEEP RUNNING SUM
+ SZA /IF AC = 0,NO REMAINDER
+ SNL /WHEN LINC GOES TO 0, DIVISION ENDED
+ SKP /NOW SEE IF IT DIVIDED EVENLY
+ JMP .-6 /SUBTRACT 3 MORE
+ SZA CLA /IF 0,OK. OTHERWISE ERROR
+ JMP I QU4 /NOT DIVISIBLE BY 3
+
+/CORRECT "VAR1" ( THE NUMBER OF WORDS/3) FOR THE +15
+/ADDED JUST ABOVE AND AN INHERANT +2 DUE TO MARK TRACK
+/CONFIGURATION TO BE WRITTEN.
+
+ TAD M7 /SUBTRACT 7 FROM PHONY SETUP
+ TAD VAR1 /GIVING THE NUMBER OF TIMES
+ CIA /TO BE USED LATER IN A ISZ
+ DCA VAR1 /DATA MARK WILL BE WRITTEN
+/COMPUTE A VALUE FOR TOTAL NUMBER OF BLOCKS
+/RECORD SIZE + 15 INTO 636160 OCT.
+
+ TAD C7714 /EXTENDED 64 VALUE. SETS AC#2
+ DCA W1 /SET FOR 640000
+ JMS I FORM10 /PATCH TO CHECK FOR STD.10 FORMAT
+ TAD C1620 /VERNIER ADJUSTMENT FOR FORMULA
+ CLL /ACC#2 CARRY FUNCTION
+ TAD TOTAL /WORD COUNT
+ ISZ BLOCKS /+1 TO BLOCK COUNT
+ SKP
+ JMP I QU3 /TO MANY BLOCKS CALLED FOR
+ SNL /CARRY INTO ACC#2?
+ JMP .-5 /NO: CONTINUE COUNT
+ ISZ W1 /YES: FULLY DIVIDED?
+ JMP .-10 /NO: CONTINUE PROCESS
+ CLA CLL /C(ACC)+ C(L)=0
+F10RTN, TAD BLOCKS /FOR MARK TRACK (COME HERE FR F10PAT IF 10 FRMT)
+ CMA /WRITING
+ DCA VAR2 /SEE MARK WRITE
+
+/VALUES FOR BLOCK AND RECORD SIZE HAVE BEEN
+/COMPUTED. TELL OUTSIDE WORLD AND GET THE OK.
+
+ TAD TOTAL /SUBTRACT 15 FROM TOTAL
+ TAD C7761 /WORDS FOOLING OPERATOR
+ DCA TOTAL /CORRECTED FOR TAPE WRITING
+ TAD TOTAL /FOR OCTAL TYPEOUT
+ JMS I TYOCT /TYPE OCTAL WORDS
+ JMS I TYPE /TYPE MESSAGE
+ 4027 / W
+ 1722 /OR
+ 0423 /DS
+ 5400 /, END
+ TAD BLOCKS /TYPE OUT BLOCK #S
+ IAC /TO FOOL THE OPERATOR
+ JMS I TYOCT /IN OCTAL
+ JMS I TYPE /TYPE MESSAGES
+ 4002 / B
+ 1417 /LO
+ 0313 /CK
+ 2356 /S.
+ 1713 /OK
+ 7733 /?(
+ 3105 /YE
+ 2340 /S
+ 1722 /OR
+ 4016 / N
+ 1735 /O)
+ 4543 /CR+LF
+ 0000 /END
+ JMS I TYPIN /WAIT FOR REPLY
+/SEE IF A YES OR NO ANSWER WAS GIVEN
+
+ JMS I COMPAR
+ 0331 /Y
+ 0305 /E
+ 0323 /S
+ 0000 /END
+ JMP I IT
+
+ JMP I .+1
+ SWCHK
+FORM10, F10PAT
+
+
+\f
+*1400
+/SET THE TAPE INTO MOTION. ALL VARIABLES ARE SET.
+
+/WRITE TIMING AND MARK TRACK
+
+STMK, CLA
+ DCA PHASE
+ TAD DT1400 /FWD, WRITE, GO
+ TAD DTA /GET UNIT NUMBER
+ SDLC /LOAD COMMAND REGISTER
+ TAD VAR2 /TO MAKE A RESTART FOR THE SAME
+ DCA W6 /OPTION POSSIBLE
+
+/WRITE ABOUT 10 FEET OF END ZONE
+ DCA W1
+CEZ, TAD REZ /ADDRESS OF DATA
+ JMS SETUP
+ ISZ W1
+ JMP CEZ /NOT END FOOTAGE
+ TAD M144 /OK WRITE INTERBLOCK SYNC
+ DCA W1
+ JMS INBLSY
+ ISZ W1
+ JMP .-2
+ JMP WDZ
+
+ /WRITE INTERBLOCK SYNC
+INBLSY, 0
+ TAD VAR1 /RESET THE WORDS
+ DCA W5
+ TAD IBZ /ADDRESS OF DATA
+ JMS SETUP /GO OUT AND WRITE 1
+ JMP I INBLSY /GO DO AGAIN
+
+ /WRITE FORWARD BLOCKMARK AND REVERSE GUARD
+WDZ, TAD FBM /ADDRESS OF PATTERN
+ JMS SETUP
+
+ /WRITE LOCKMARK, REVERSE CHECKSUM, REV FINAL, REV PREFINAL
+LRCFP, TAD WLMRF
+ JMS SETUP1
+
+ /WRITE THE DATA TRACK
+DTRK, TAD DZ /ADDRESS OF PATTERN
+ JMS SETUP
+ ISZ W5
+ JMP DTRK /NOW WRITE DATA MARK TRACK AGAIN
+ /WRITE PREFINAL, FINAL, CHECKSUM, AND REVERSE LOCK
+PFCRC, TAD FEZ /ADDRESS OF DATA
+ JMS SETUP1
+
+ /WRITE GUARD REVERSE BLOCK
+GRB, TAD GRZ
+ JMS SETUP
+
+ /THIS COMPLETES 1 BLOCK, GO BACK AND WRITE THE REST
+ JMS INBLSY /WRITE INTERBLOCK SYNC
+ ISZ W6 /TOTAL NUMBER OF BLOCKS
+ JMP WDZ /WRITTEN? NO:
+
+ /ALL DATA BLOCKS WRITTEN NOW WRITE BUFFER ZONE OF INTERBLOCK SYNC
+ TAD M143 /198 EXPAND CODES AT END OF BLOCKS
+ DCA W1
+ JMS INBLSY
+ ISZ W1
+ JMP .-2
+
+ /FINISHED BLOCK WRITTING, WRITE ANOTHER 10(1) OF END ZONES
+ DCA W1
+WEZF, TAD EZM
+ JMS SETUP
+ ISZ W1
+ JMP WEZF
+ SDST
+ SKP CLA
+ JMS I SELTIM /TIMING ERROR
+ TAD C1
+ DCA PHASE
+ JMP I .+1
+ MWTM
+
+SETUP, 0
+ DCA 12 /WORD TO BE WRITTEN ON MARK TRACK
+ TAD M3
+ DCA WC
+ JMS I WAIT
+ ISZ WC
+ JMP .-2
+ JMP I SETUP
+
+SETUP1, 0
+ DCA 12
+ TAD M6
+ DCA WC
+ JMS I WAIT
+ ISZ WC
+ JMP .-2
+ JMP I SETUP1
+/THESE ARE THE DATA CONFIGURATIONS FOR THE MARK TRACK
+
+
+/REVERSE END ZONE
+
+REZ, .
+ 4044 /ON TAPE AS 5555 (OCT)
+ 0440
+ 4404
+
+/INTERBLOCK SYNC
+
+IBZ, .
+ 0404 /ON TAPE AS 2525 (OCT)
+ 0404
+ 0404
+
+/FORWARD BLOCK MARK AND REVERSE GUARD
+
+FBM, .
+ 0404 /ON TAPE AS 2632 (OCT)
+ 4004
+ 4040
+
+/LOCK MARK, REVERSE CHECKSUM, REVERSE FINAL
+/AND REVERSE PREFINAL
+
+WLMRF, .
+ 0040 /ON TAPE AS 10101010 (OCT)
+ 0000
+ 4000
+ 0040
+ 0000
+ 4000
+
+/DATA MARK
+
+DZ, .
+ 4440 /ON TAPE AS 7070 (OCT)
+ 0044
+ 4000
+
+/PREFINAL, FINAL, FWD CHECKSUM, AND REVERSE LOCK
+
+FEZ, .
+ 4440 /ON TAPE AS 73737373 (OCT)
+ 4444
+ 4044
+ 4440
+ 4444
+ 4044
+/FORWARD GUARD AND REVERSE BLOCK NUMBER
+
+GRZ, .
+ 4040 /ON TAPE AS 5145 (OCT)
+ 0440
+ 0404
+
+/FORWARD END ZONE
+
+EZM, .
+ 0400 /ON TAPE AS 2222 (OCT)
+ 4004
+ 0040
+/SUBROUTINE TO SEE IF USER TYPED MARK 384
+/TO SPECIFY STANDARD PDP-10 FORMAT
+F10PAT, 0
+ DCA BLOCKS /CLEAR LOC. BLOCKS IN CASE NOT 10-FORMAT
+ TAD TOTAL /AND GET NUMBER TYPED BY USER
+ TAD M617 /WAS IT 384?
+ SZA CLA
+ JMP I F10PAT /NO-RETURN
+ DCA W1 /YES-CLEAR W1 FOR WAIT LOOP
+ TAD C1101 /AND ADJUST BLOCK TOTAL FOR
+ DCA BLOCKS /1102(OCTAL) BLOCKS.
+ JMP I .+1
+F10BAK, F10RTN
+M617, -617
+C1101, 1101
+C1, 0001
+\f
+ *1600
+/THE MARK TRACK HAS BEEN WRITTEN, AND TAPE IS
+/MOVING FORWARD IN THE FORWARD END ZONE. STOP
+/THE TAPE AND SEE IF THERE ARE ANY TAPES LEFT TO
+/MARK--IF SO GO DO THEM, ELSE TELL OPERATOR TO THROW THE
+/"OFF/WTM" SWITCH TO "OFF"
+/HE WILL THEN CONTINUE AFTER THIS ACTION
+
+
+ /KILL WRITE,STOP TAPE
+
+MWTM, CLA
+ TAD DTA /UNIT
+ SDLC
+ JMS NUDTA
+ JMP I DOMARK
+
+ /MESSAGE TO THE OPERATOR
+OFF, JMS I TYPE
+ 2305 /SE
+ 2440 /T
+ 2327 /SW
+ 1124 /IT
+ 0310 /CH
+ 4024 /T
+ 1740 /O
+ 1706 /OF
+ 0600 /F
+ JMS I TYPIN /WAIT FOR CR
+ JMP I .+1
+ SWOFF /CHECK TO MAKE SURE THAT SWITCH IS OFF
+ /REVERSE TAPE AND READ MARK TRACK
+PSER, TAD DT3000 /REVERSE GO
+ TAD DTA /UNIT
+ SDLC /LOAD COMMAND REGISTER
+ DCA W1 /STALL ROUTINE TO GET UP TO SPEED
+ SDSQ
+ JMP .-1
+ SDRC
+ ISZ W1
+ JMP .-4
+ SDSQ /SKIP ON QUAD LINE IF SET AFTER WAIT ROUTINE
+ SKP
+ JMP .+3 /FLAG WAS SET
+ SDSS /READ IN A LINE OF TAPE
+ JMP .-1
+ SDRC /READ THE COMMAND REGISTER
+ SDST /CHECK FOR A TIMING ERROR
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ AND MSK77 /CHECK TO SEE IF TAPE IS STILL IN END ZONE
+ TAD M55
+ SZA CLA
+ JMP .-11 /NOT A 55 YET
+ JMS I SSDSQT /YES,READ IN SOME MORE
+ TAD M55 /IS IT END ZONE
+ SNA CLA
+ JMP .-3 /STILL IN END ZONE
+ TAD MTR /GET THE MARK TRACK
+ TAD M25 /IS IT EXPAND CODE
+ SZA CLA
+ JMS I SCEXPC /NOT YET,CHECK FOR A 52,AND ADVANCE 3 LINES
+ CLA /YES IT IS EXPAND CODE
+ TAD M306 /SET UP FOR 198 EXPAND CODES
+ DCA CNT
+ JMS I SSDSQT /THE TAPE SHOULD BE IN SYNC NOW
+ TAD M25 /READ THE REST OF EXPAND CODE
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ ISZ CNT /INCREMENT COUNTER
+ JMP .-5
+ TAD VAR2 /NUMBER OF BLOCKS
+ DCA W6
+RSTBLK, JMS I SSDSQT /START OF A STANDARD BLOCK
+ TAD M25 /FIRST EXPAND CODE AT BEGINNING
+ SZA CLA /OF BLOCK
+ JMS I MARKER /MARK TRACK ERROR
+ JMS I SSDSQT /READ MARK BLOCK NUMBER
+ TAD M26
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ JMS I SSDSQT /READ MARK GUARD
+ TAD M32
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ TAD M4
+ DCA CNT
+ JMS I SSDSQT /READ L,CK,F,PF
+ TAD M10
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ ISZ CNT
+ JMP .-5
+ CLA CLL
+ TAD VAR1
+ RAL
+ DCA W5 /NUMBER OF DATA MARKS
+ JMS I SSDSQT /READ DATA MARKS
+ TAD M70
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ ISZ W5 /COUNT FOR NUMBER OF BLOCKS
+ JMP .-5
+ TAD M4
+ DCA CNT
+ JMS I SSDSQT /READ PF,F,CK,L
+ TAD M73
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ ISZ CNT
+ JMP .-5
+ JMS I SSDSQT /READ REVERSE GUARD
+ TAD M51
+ SZA CLA
+ JMS I MARKER
+
+ JMS I SSDSQT /READ BLOCK NUMBER
+ TAD M45
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ JMS I SSDSQT /READ EXPAND CODE
+ TAD M25
+ SZA CLA
+ JMS I MARKER /END OF ONE BLOCK,MARK TRACK ERROR
+
+ ISZ W6 /FINISHED ALL BLOCKS
+ JMP RSTBLK /NO:DO OTHER BLOCKS
+ TAD M307 /SET UP FOR INTERBLOCK SYNC AT END OF TAPE
+ DCA CNT
+ JMS I SSDSQT /CHECK FOR 199 EXPAND CODES
+ TAD M25
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ ISZ CNT
+ JMP .-5
+ JMS I SSDSQT
+ TAD M22
+ SZA CLA
+ JMS I MARKER
+ TAD DTA
+ SDLC
+ JMP I .+1
+WDBLKN, DBLKN /GO OUT TO WRITE DATA AND BLOCK NUMBERS FORWARD
+
+
+\f
+*2000
+DBLKN, TAD C2
+ DCA PHASE
+ TAD VAR2 /NUMBER OF BLOCKS
+
+ DCA W6
+ DCA BLK /INITIAL BLOCK IS 0
+ TAD BLK
+ JMS I MESS /COMPUTE THE COMP OBVERSE OF REV BLK
+ DCA REVBLK
+ SDLD
+ TAD DT1400 /FORWARD,WRITE,GO
+ TAD DTA /UNIT
+ SDLC /LOAD THE COMMAND REGISTER
+ SDRC /CHECK TO MAKE SURE WRITE IS SET
+ RTL
+ RAL
+ SMA CLA
+ JMS WLO /WRITE FAILED TO SET
+ TAD M6
+ DCA CNT
+ SDSQ /ROUTINE TO GET UP TO SPEED
+ JMP .-1
+ SDLD
+ ISZ CNT
+ JMP .-4
+ SDLD
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+LINE, SDSS /WRITE ALL ZEROES TO THE FIRST BLOCK
+ JMP .-1
+ SDLD /LOAD THE DATA BUFFER
+ SDRC
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ AND MSK77
+ DCA MTR
+ TAD MTR
+ TAD M26
+ SZA CLA
+ JMP LINE
+ SDLD
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ JMP WDOBLK /GO AND WRITE REVERSE GUARD
+WDBLK, CLA CLL /BEGINNING OF BLOCK,WRITE DATA AND BLOCK NUMBER
+ JMS W4L /WRITE EIGHT LINES
+ JMS W4L /END OF EXPAND CODE,BEGINNING OF BLK NUMBER
+ TAD BLK /GET FORWARD BLOCK NUMBER
+ JMS W4L /WRITE IT
+ CLA
+ JMS W4L /WRITE FIRST WORD OF REV GUARD
+WDOBLK, CLA
+ JMS W4L /SECOND WORD OF REVERSE GUARD
+ JMS W4L
+ JMS W4L /FIRST WORD OF REVERSE CHECKSUM
+WDATA, TAD TOTAL /NUMBER OF DATA WORDS TO BE WRITTEN
+ CIA
+ DCA W5 /SET UP COUNTER
+ JMS W4L
+ ISZ W5 /INCREMENT COUNTER
+ JMP .-2
+ CLA CLL
+ TAD MSK77 /COME BACK TO WRITE LAST WORD AND CHECKSUM
+ JMS W4L
+ CLA
+ JMS W4L /FINISH CHECKSUM
+ JMS W4L /FIRST WORD OF REVERSE LOCK
+ JMS W4L /LAST WORD OF RL. AND HALF OF GUARD
+ JMS W4L /REST OF GUARD
+ TAD REVBLK /GET REVERSE BLOCK NUMBER
+ JMS W4L
+ CLA CMA
+ JMS W4L /END OF BLOCK NUMBER AND HALF OF EXPAND CODE
+ JMS W4L /END OF EXPAND CODE
+ ISZ BLK
+ CLA
+ TAD BLK
+ JMS I MESS /COMPUTE NEW BLK NUMBER
+ DCA REVBLK
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ ISZ W6 /IS IT DONE WRITING BLK AND DATA
+ JMP WDBLK /NO
+ SDSQ
+ JMP .-1
+ SDRD
+ CLA
+ TAD DT1000 /SEARCH FOR END ZONE
+ TAD DTA /GET UNIT
+ SDLC /LOAD THE COMMAND REG
+ SDSS
+ JMP .-1
+ SDRC
+ AND MSK77
+ TAD M22
+ SZA CLA
+ JMP .-6
+ JMP I .+1
+ DBLOCK
+
+W4L, 0
+ SDSQ
+ JMP .-1 /SKIP ON QUAD LINE FLAG
+ SDLD /LOAD THE DATA BUFFER
+ SDST /CHECK FOR A TIMING ERROR
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ JMP I W4L
+
+C2, 0002
+
+WLO, 0
+ TAD DTA /STOP THE TAPE
+ SDLC /LOAD THE COMMAND REGISTER
+ JMS I TYPE
+ 2003 /PC
+ 4000 /END
+ CLA CMA
+ TAD WLO
+ JMS I TYOCT
+ JMS I TYPE
+ 4040
+ 2722 /WR
+ 1124 /IT
+ 0540 /E
+ 0000 /END
+ JMP I .+1
+ ZCOM
+
+
+
+\f
+*2200
+BLCSD, TAD C4
+ DCA PHASE
+ CLA CLL
+ TAD VAR2
+ DCA W6 /SET UP FOR THE NUMBER OF BLOCKS
+ DCA BLK /SET BLK TO 0
+ TAD DT1000 /FORWARD READ
+ TAD DTA /UNIT
+ SDLC /LOAD THE COMMAND REG
+ TAD BLK
+ JMS I MESS /CALCULATE THE COMPLEMENT OBVERSE
+ DCA REVBLK
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ TAD M6 /WAIT TO GET UP TO SPEED
+ DCA CNT /SET UP COUNTER
+ SDSQ /SKIP ON A QUAD LINE FLAG
+ JMP .-1
+ SDRD /READ THE DATA BUFFER TO CLEAR FLAG
+ ISZ CNT
+ JMP .-4
+ CLA
+BLCSDA, DCA CHKSUM
+ JMS I SLRDRC /READ A SINGLE LINE AT A TIME
+ TAD M26
+ SZA CLA /IS IT BLOCK MARK
+ JMP SRDRC+4 /NO,GO BACK
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ TAD DATRD
+ CIA
+ TAD BLK
+ SZA CLA
+ JMS I BLKERR /BLK NUMBER ERROR
+ JMS I SSDSQT /READ GUARD
+ JMS I SSDSQT /READ REVERSE LOCK
+ JMS I SSDSQT /READ CHECKSUM
+ SDRD /READ THE DATA BUFFER
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ AND MSK77
+ JMS I BCXOR /GO OUT TO CHECKSUM ROUTINE
+RDATA, TAD TOTAL /NUMBER OF WORDS PER BLOCK
+ CIA
+ DCA W5 /SET UP COUNTER
+ SDSQ
+ JMP .-1
+ SDRD /READ THE DATA BUFFER
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ DCA DATRD
+ TAD DATRD /SAVE THE DATA WORD
+ SZA CLA
+ JMS I DATERR /DATA ERROR
+ TAD DATRD
+ JMS I BCXOR
+ SDST /CHECK FOR A TIMING ERROR
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ ISZ W5
+ JMP RDATA+3
+ SDSQ /READ REVERSE CHECKSUM
+ JMP .-1
+ SDRD /READ IT IN
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ AND C7700
+ JMS I BCXOR /CHECK CHECK SUM
+ TAD CHKSUM
+ AND MSK77
+ IAC
+ TAD C7700
+ SZA CLA
+ JMS I CHKERR /CHECKSUM ERROR
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ JMS I SLRDRC /ADVANCE A SINGLE LINE FLAG
+ TAD M31 /LOOK FOR REV BLK NUMBER
+ SZA CLA
+ JMP SRDRC+4
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ TAD DATRD
+ CIA
+ TAD REVBLK /COMPARE BLOCK READ WITH ONE COMPUTED
+ SZA CLA
+ JMS I BLKERR /BLOCK NUMBER ERROR
+ SDSQ
+ JMP .-1
+ SDRD
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ CLA CLL
+ ISZ BLK
+ TAD BLK
+ JMS I MESS
+ DCA REVBLK
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ ISZ W6
+ JMP BLCSDA
+ TAD DT1000
+ TAD DTA
+ SDLC
+ SDSS
+ JMP .-1
+ SDRC
+ AND MSK77
+ TAD M22
+ SZA CLA
+ JMP .-6
+ JMP I .+1
+ RDBLKS
+
+C4, 0004
+
+\f
+*2400
+DBLOCK, TAD C3
+ DCA PHASE
+ CLA CLL
+ DCA DISBLK
+ TAD DT3000 /REVERSE,GO
+ TAD DTA /UNIT
+ SDLC /LOAD THE COMMAND REGISTER
+ CLA CLL
+DISLUP, SDSS
+ JMP .-1
+ CLA CLL
+ SDRD
+ DCA DISDAT /SAVE THE DATA BUFFER
+ SDRC
+ AND MSK77 /MASK OUT THE MARK TRACK
+ TAD M26 /CHECK FOR BLOCK NUMBER
+ SZA
+ JMP DISEND /NOT BLK MARK,CHECK FOR END ZONE
+ TAD DISDAT /DISPLAY THE NUMBER IN THE AC
+ ISZ DISBLK
+ JMP .-1
+ JMP DISLUP /GO SEARCH FOR THE NEXT BLOCK
+DISEND, TAD FOUR /IS IT END ZONE
+ SZA CLA
+ JMP DISLUP /NO,GO GET NEXT LINE
+ TAD DTA /STOP GET READY TO READ
+ SDLC /LOAD THE COMMAND REGISTER
+ JMP I .+1
+ BLCSD
+DISBLK, 0
+DISDAT, 0
+FOUR, 4
+C3, 0003
+C5, 0005
+
+RDBLKS, TAD C5
+ DCA PHASE
+ TAD VAR2
+ DCA W5 /SET UP FOR NUMBER OF BLOCKS
+ IAC
+ TAD VAR2
+ DCA W6 /SET UP TO CHECK BLK REVERSE
+ TAD DT3000 /READ REVERSE GO
+ TAD DTA /UNIT
+ SDLC /LOAD THE COMMAND REGISTER
+ TAD M6
+ DCA CNT
+ SDSS
+ JMP .-1
+ SDRC
+ CLA
+ ISZ CNT
+ JMP .-5
+RDBLK, SDSS
+ JMP .-1
+ SDRD /READ THE DATA BUFFER AND STORE IT AWAY
+ DCA CNT
+ SDRC
+ AND MSK77
+ TAD M26
+ SZA CLA /IS IT BLOCK NUMBER
+ JMP RDBLK
+ TAD CNT
+ TAD W6
+ SZA CLA
+ JMS I BLKERR /BLOCK NUMBER ERROR
+ IAC
+ TAD W6 /INCREMENT A NUMBER FOR COMPARE COUNTER
+ DCA W6
+ ISZ W5 /INCREMENT BLK COUNTER
+ JMP RDBLK
+ SDSS
+ JMP .-1
+ SDRC
+ AND MSK77
+ TAD M22
+ SZA CLA
+ JMP .-6
+ TAD DTA
+ SDLC /LOAD THE COMMAND REGISTER WITH UNIT STOP
+ IAC
+ DCA PHASE
+ JMS NUDTA
+ JMP PSER
+ JMP I .+1
+ INIT /END GO BACK TO DIRECT
+/
+/
+/SUBROUTINE TO CHECK FOR REPEATED DTA NUMBERS
+/DTA # TO COMPARE TO LIST IS IN AC ON ENTRY--THIS
+/ROUTINE STORES THE DTA # IF IT IS NEW AND IGNORES IT
+/IF IT IS NOT-CALL BY JMS REPEAT WITH DTA # IN AC
+REPEAT, 0
+ DCA DNUM /TEM STORAGE FOR NEW DTA #
+ TAD DBUFAD /INITIALIZE POINTER (DBUFPT)
+ DCA DBUFPT /TO START OF DTA LIST
+ TAD DCTR /LOAD NUM. OF DTAS STORED
+ CMA /COMPLEMENT IT
+ DCA COMCTR /STORE IN COMPARE COUNTER
+COMCHK, ISZ COMCTR /DONE WITH ALL COMPARES?
+ JMP DOCOMP /NO: GO DO COMPARE
+ TAD DNUM /YES: STORE NEW DTA#
+ DCA I DBUFPT /AT END OF LIST
+ ISZ DCTR /INCR. # OF DTAS STORED
+ JMP I REPEAT /RETURN
+
+COMCTR, 0 /COUNTER FOR # OF LIST COMPARISONS TO BE DONE
+DCTR, 0 /COUNTER FOR # OF DTAS IN LIST
+DBUFAD, DTABUF /START OF DTA NUM. LIST
+DNUM, 0 /TEM STORAGE FOR DTA #
+/
+/
+/THIS SECTION DOES THE ACTUAL COMPARISON BETWEEN
+/THE DTA# PASSED TO THE ROUTINE AND A NUMBER ON THE LIST
+
+DOCOMP, TAD I DBUFPT /GET NXT DTA NUMBER PASSED
+ CIA /NEGATE IT
+ TAD DNUM /ADD IN DTA NUMBER PASSED
+ SNA CLA /ARE THEY THE SAME
+ JMP I REPEAT /YES: RETURN
+ ISZ DBUFPT /NO: INCREMENT LIST POINTER
+ JMP COMCHK /SEE IF DONE ALL COMPARES
+/
+/
+
+\f
+*2600
+
+RDFA, CLA CLL
+ TAD DT3000 /REVERSE READ GO
+ TAD DTA /GET UNIT
+ SDLC /LOAD THE COMMAND REGISTER
+ SDSS /SKIP ON A SINGLE LINE FLAG
+ JMP .-1
+ SDRC /READ THE COMMAND REGISTER
+ AND MSK77
+ TAD M22 /IS IT END ZONE
+ SZA CLA /YES
+ JMP .-6 /NO GO BACK AND LOOK AGAIN
+ TAD DT1000 /FORWARD READ GO
+ TAD DTA /UNIT
+ SDLC /LOAD THE COMMAND REGISTER
+ TAD M6
+ DCA CNT
+ SDSS
+ JMP .-1
+ SDRC
+ CLA
+ ISZ CNT
+ JMP .-5
+RDFA1, TAD M26
+ DCA W3 /SET UP COUNTER TO READ 22 BLOCKS
+ TAD BADD /SET UP BUFFER ADDRESS
+ DCA X2
+ SDSS /GO SINGLE LINE FLAGS
+ JMP .-1
+ SDRD /READ THE DATA BUFFER
+ DCA CNT
+ SDRC /READ THE COMMAND REGISTER
+ AND MSK77
+ TAD M26 /SEARCH FOR BLOCK NUMBER
+ SZA CLA
+ JMP RDFA1+4 /NOT BLOCK NUMBER YET GO BACK AGAIN
+ TAD CNT /OK BLK NUMBER STORE IT AWAY
+ DCA I X2
+ ISZ W3 /INCREMENT COUNTER
+ JMP RDFA1+4 /NOT 22 BLOCKS YET
+ TAD DTA
+ SDLC /STOP THE DTA
+
+/TYPE OUT BLOCK NUMBERS AND DTA UNIT#
+
+ JMS I TYPE
+ 0424 /DT
+ 0140 /A
+ 0000 /END
+ TAD DTA /GET UNIT NUMBER
+ RTL
+ JMS I TYOCT /AND TYPE IT OUT
+ JMS I TYPE
+ 4345 /CR&LF
+ 0000 /END
+ TAD M26 /WILL TYPE ALL
+ DCA W1 /22 WORDS
+ TAD BADD /ADDRESS OF BLOCK
+ DCA X2 /NUMBERS TO INDEX
+ TAD I X2 /FIRST OR NEXT BLOCK
+ JMS I TYOCT /TYPE IT OUT
+ JMS I TYPE /CR&LF
+ 4345 /CR&LF
+ 0000 /END
+ ISZ W1 /COMPLETE
+ JMP .-6
+ JMP I IT /GO ASK FOR FORMAT
+
+RDR, CLA CLL
+ TAD DT1000 /FORWARD READ GO
+ TAD DTA /UNIT
+ SDLC /LOAD THE COMMAND REGISTER
+ SDSS /SKIP ON A SINGLE LINE FLAG
+ JMP .-1
+ SDRC /READ THE COMMAND REGISTER
+ AND MSK77
+ TAD M22 /CHECK FOR END ZONE
+ SZA CLA
+ JMP .-6 /NOT YET GO BACK
+ TAD DT3000 /REVERSE READ GO
+ TAD DTA /UNIT
+ SDLC /LOAD THE COMMAND REGISTER
+ TAD M6
+ DCA CNT
+ SDSS
+ JMP .-1
+ SDRC
+ CLA
+ ISZ CNT
+ JMP .-5
+ JMP RDFA1 /STORE NUMBERS IN REVERSE
+
+RETRY, JMS I TYPIN
+ JMS I COMPAR
+ 0322 /R
+ 0305 /E
+ 0324 /T
+ 0322 /R
+ 0331 /Y
+ 0000 /END
+ JMP I IT /GUESS HE DOESN'T WANT TO TRY AGAIN
+ CLA
+ TAD DT1000 /FORWARD READ GO
+ TAD DTA /UNIT
+ SDLC /LOAD THE COMMAND REGISTER
+ TAD M6
+ DCA CNT /WAIT 6 LINES
+ SDSS
+ JMP .-1
+ SDRC /READ THE COMMAND REGISTER
+ ISZ CNT
+ JMP .-4
+ SDSS
+ JMP .-1
+ SDRC
+ AND MSK77
+ TAD M22
+ SZA CLA
+ JMP .-6
+ TAD DT3000
+ TAD DTA
+ SDLC
+ CLA IAC
+ DCA PHASE
+ JMP I .+1
+ PSER+11
+
+
+\f
+*3000
+
+
+SDSQT, 0
+ SDSQ /ADVANCE SIX LINES
+ JMP .-1 /SKIP ON QUAD LINE FLAG
+ SDRC /READ COMMAND REGISTER
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ SDSS
+ JMP .-1 /SKIP ON SINGLE LINE FLAG
+ SDRC
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ SDSS
+ JMP .-1
+ SDRC /READ THE COMMAND REGISTER
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ AND MSK77 /SAVE THE MARK TRACK LAST 6 BITS
+ DCA MTR
+ TAD MTR
+ JMP I SDSQT
+
+A3LNS, 0 /ADVANCE THREE LINES
+ SDSS
+ JMP .-1 /SKIP ON SINGLE LINE FLAG
+ SDRC
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ SDSS
+ JMP .-1
+ SDRC
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ SDSS
+ JMP .-1
+ SDRC
+ SDST
+ SKP
+ JMS I SELTIM /TIMING ERROR
+ AND MSK77
+ DCA MTR
+ TAD MTR
+ JMP I A3LNS
+
+CEXPC, 0
+ TAD MTR
+ TAD M52
+ SZA CLA
+ JMS I MARKER /MARK TRACK ERROR
+ JMS A3LNS /READ THREE MORE LINES
+ TAD M25 /IS IT 25 NOW
+ SZA CLA
+ JMS I MARKER /NO ,MARK TRACK ERROR
+ JMP I CEXPC /YES:IT IS EXPAND CODE NUMBER 1
+
+ /SIXBIT COMPLEMENT XOR SUBROUTINE
+ /SUBROUTINE IS ENTERED WITH DATA WORD TO BE XORED IN AC
+ /TWO SIX-BIT COMPLEMENT XORS WILL TAKE PLACE TO LOC CHKSUM
+ /WITH THE RESULT IN CHKSUM
+
+SBCXOR, 0
+ CMA /COMPLEMENT WORD
+ DCA SBWORD /AND SAV
+ TAD SBWORD
+ AND CHKSUM
+ CIA
+ CLL RAL
+ TAD SBWORD
+ TAD CHKSUM
+ DCA CHKSUM
+ TAD SBWORD
+ RTR CLL;RTR;RTR
+ DCA SBWORD
+ TAD SBWORD
+ AND CHKSUM
+ CIA
+ CLL RAL
+ TAD SBWORD
+ TAD CHKSUM
+ AND MSK77
+ DCA CHKSUM
+ JMP I SBCXOR
+
+SRDRC, 0
+ SDSQ
+ SKP
+ JMP .+3
+ SDSS
+ JMP .-1
+ SDRD
+ DCA DATRD
+ SDRC
+ AND MSK77
+ JMP I SRDRC
+
+NUDTA, 0
+ TAD I LSTPT /GET CURRENT VALUE OF DATA LIST PTR
+ DCA TBUFPT /STORE IT AS TEM,BUF,PTR
+ TAD I TBUFPT /GET A DTA # FROM THE LIST
+ AND C0007
+ SZA CLA /IS IT A 7777
+ JMP LSTEND /YES END OF LIST
+ TAD I TBUFPT /NO;GET IT BACK
+ DCA DTA
+ ISZ I LSTPT /INCREMENT LIST POINTER
+ JMP I NUDTA /RETURN
+/COME HERE AT END OF LIST TO RESET POINTERS AND RETURN TO CALL+2
+LSTEND, ISZ NUDTA /INCREMENT RETURN POINTER
+ TAD I STRTPT /GET ADR OF START OF LIST
+ DCA I LSTPT
+ JMP NUDTA+1 /GO GET FIRST DTA# AND RETURN
+STRTPT, DBUFAD /POINTER TO START OF DATA LIST
+TBUFPT, 0 /TEM STORAGE FOR BOT PTR
+LSTPT, DBUFPT /POINTER TO CURRENT VALUE OF DTA LIST PTR
+
+/CONSTANTS FOR FORMULA TRANSLATION SECTION
+BINCON, .+1
+ 0001
+ 0012
+ 0144
+ 1750
+DTABUF, 0
+
+
+
+
+\f
+*3200
+ /CHECK SWITCH TO SEE IF SET TO WTM POSITION
+SWCHK, JMS I TYPE /TYPE OUT MESSAGE
+ 2305 /SE
+ 2440 /T
+ 2327 /SW
+ 1124 /IT
+ 0310 /CH
+ 4024 /T
+ 1740 /O
+ 2724 /WT
+ 1500 /M
+ JMS I TYPIN /WAIT FOR CR
+ CLA
+ DCA CNTERL
+ SDLD /CLEAR SINGLE AND QUAD FLAGS
+ SDSS
+ SKP
+ JMP .+4
+ ISZ CNTERL
+ JMP .-4
+ JMP SWCHER /ERROR,TYPE ERROR MESSAGE AND GO TO SWCHK
+ /SEE IF THE DRIVE IS OK
+RSTSM, SDLC /LOAD CR TO CLEAR TIMEING ERROR
+ SDLD /LOAD DATA BUFFER TO CLEAR S Q FLAGS
+ TAD DT0400 /SET WRITE
+ TAD DTA /GET UNIT
+ DCA SAV /STORE IT AWAY
+ TAD SAV
+ SDSS
+ JMP .-1
+ SDLC
+ TAD SAV
+ SDLC /LOAD THE TRANSPORT
+ SDRC /READ THE COMMAND REGISTER AND CHECK IT
+ RTL
+ RAL
+ SMA /CHECK WRITE TO BE SET
+ JMP ERCHK /WRITE IS NOT SET
+ RAL /CHECK WLO
+ SPA
+ JMP ERCHK /WLO
+ RAL /CHECK SELECT AND TIMING ERROR
+ SPA CLA
+ JMP ERCHK /SELECT OR TIMING ERROR
+ JMS NUDTA /CHECK OTHER DRIVE IF ANY
+ JMP RSTSM-11 /CHECK OTHER DRIVE
+ JMP I .+1
+ STMK
+CNTERL, 0
+SAV, 0
+
+ERCHK, JMS I TYPE /INCORRECT SETUP
+ 2305 /SE
+ 2425 /TU
+ 2077 /P
+ 0000 /END
+ JMP I .+1
+ START
+
+SWCHER, JMS I TYPE
+ 2327 /SW
+ 1124 /IT
+ 0310 /CH
+ 4016 /N
+ 1724 /OT
+ 4023 /S
+ 0524 /ET
+ 4024 /T
+ 1740 /O
+ 2724 /WT
+ 1540 /M
+ 1722 /OR
+ 4023 /S
+ 1116 /IN
+ 0714 /GL
+ 0540 /E
+ 1411 /LI
+ 1605 /NE
+ 4006 /F
+ 1401 /LA
+ 0740 /G
+ 0601 /FA
+ 1114 /IL
+ 0504 /ED
+ 4024 /T
+ 1740 /O
+ 2305 /SE
+ 2440 /T
+ 4543 /CR LF
+ 0000 /END
+ JMP SWCHK
+
+SWOFF, CLA
+ DCA CNTERL
+ SDLD /CLEAR ANY FLAGS THAT ARE SET
+ SDSS
+ SKP
+ JMP OFF /FLAG SHOULDN'T BE SET
+ ISZ CNTERL
+ JMP .-4
+ CLA
+ JMP I .+1
+ PSER
+
+
+*3400
+/INPUT BUFFER FOR TELETYPE THIS MUST BE AT THE END OF PROGRAM
+
+BUFFER, 0
+
+$