/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.
/
/
/
/
/
/


/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

/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

*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

*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



/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

	*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



*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

	*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



*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




*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


*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
/
/


*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



*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





*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

$
