/SABR ASSEMBLER V18
/
/
/
/
/
/
/
//
/
/
/
/
/COPYRIGHT (C) 1971,1974,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.
/
/
/
/
/
/
/	VERSION SABR.17
/	OCTOBER 26, 1971
/	C. MCCOMAS
/	R. LARY
/	B. CLOGHER
/SABR.V17  DEC-08-A2D2-17
/	OCTOBER 26,1971
/COPYRIGHT	 1971, DIGITAL EQUIPMENT CORPORATION, MAYNARD MASSACHUSETTS 01754
/		C. MCCOMAS/R. LARY/B. CLOGHER


//
/
/FIXES TO SABR FOR V18		J.K 1975
/
/ .LITERAL POOL OVERFLOW
/ .INCORRECT LINE NUMBER WITH ERROR MESSAGE
/
/
/ASSEMBLY, LOAD AND SAVE INSTRUCTIONS
/
/	.PAL SABR.PA
/	.PAL SPATCH.PA
/
/	.LO SABR$SPATCH$
/
/	.SA SYS SABR
/
/
FIELD 1
/
/
/	DEFINE LOCATIONS OF MONITOR SUBROUTINES
/
DISPL=10
CDFSK=35+DISPL
CDZSK=41+DISPL
DUMS=57+DISPL
LINK=23+DISPL
OBIS=45+DISPL
OPIS=52+DISPL
RTN=30+DISPL


*1
USE,	0
VAL,	0
SYMBOL,	0	/PTR TO CURRENT USE WORD IN MST
M7,	-7
AS0,	S0
OTP,	CORE1-1		/OCC. TAB. PTR (NEXT FREE WORD BELOW)
STT,	STTP		/PTR TO 1ST FREE WORD OF SYM. TAB.
			/(KEEP STT AFTER OTP FOR INITA)

X0,	0		/LINE BUFFER INDEX
X1,	0		/TEMP AUTOS
X2,	0
X3,	0		/HSR BUFFER INDEX

K2,	2
K4,	4
K3,	3
K130,	130
K30,	30

/	INDIRRECT REFERENCES
/
ICPLFS, CPLFS		/CHECK FOR AND PROCESS COLLECTION LFS
CPGESI,	CPGES
CTYPE,	L61		/CHARACTER TYPEOUT ROUTINE
CRLF,	L73
DUMMY,	DUM		/DUMMY ROUTINE
GETCHR, L65		/ROUTINE TO READ NEXT CHAR
GETSYM, GTSYM		/ROUTINE TO  INPUT AND DECODE NEXT SYMBOL
INI,	INILPT
LFSCHK, LFSCK		/CHECK FOR A LFS
OBSYM,	OBNSYM		/OBTAIN SYMBOL FROM MST
DCIL1,	RDL1
NULLP,	NULL
OTYPE,	 L62		/OCTAL TYPEOUT ROUTINE
OUTBIN, OUTBN		/ROUTINE TO OUTPUT COMP WORD AND REL BITS
OUTSKP,	OUTSK		/ROUTINE TO OUTPUT A SKIP INSTRUCTION
POPEXP,	POPEX
PRSYMP,	PRSYM
PUNCH,	L63		/BINARY PUNCH ROUTINE
RDIL,	DCIL		/READ AND DECODE ONE INPUT LINE
RECTI,	RECT
L55I,	L55
SKIPL,	L72		/SKIPS UNTIL A RETURN OR SEMICOLON
SLITAB, SLTAB		/SEARCH LITERAL TABLE
SPSTAB, SPSTB		/SEARCH PAGE SYMBOL TABLE
SREST,	L66		/ROUTINE TO SEARCH EXTERNAL SYMBOL TABLE
STCE,	SETCT
TEST,	TSCHR		/ROUTINE TO TEST CHARACTERS FOR EQUALITY
TYPE,	L64		/TTY TYPE ROUTINE
WLNP,	WLN
WRITEP,	WRITE
/
/	IMPORTANT VARIABLES
/
ACTR,	0		/ASSEMBLY COUNTER
BSSSW,	0		/BSS 0 IN PROCESS SWITCH
CHR,	0		/LOC TO HOLD CURRENT CHARACTER
CSUM,	0		/BINARY CHECK SUM
EQVOPR,	EQUTB		/EQUIVALENCE TABLE OUTPUT POINTER
EQVIPR,	EQUTB			/EQ. TB. INPUT PTR.
ILC,	0		/CURRENT LOCATION
LFSPTR, 0		/POINTER TO LFS TABLE ENTRY
LINE,	0		/NO OF LINES SINCE LAST LFS
LITSZE, 0		/SIZE OF LIT TAB (ASM PHASE)
LTSZE,	0		/SAME FOR COLL. PHASE
LSTSKP, 0		/LAST INSTRUCTION SKIP INDICATOR
LSTBNK, 0		/LAST INSTRUCTION BANK INDICATOR
OBACTR, 0		/OFF BANK INSTRUCTION ADDITION COUNTER
OPSCTR, 0		/OFF PAGE SYMBOL COUNTER
/***** KEEP ITEMS SO INCLOSED IN THE GIVEN ORDER FOR INITA
HICOM,	0177
PAG,	0200		/CURRENT PAGE BITS
ESTSIZ, 0		/HOLDS SIZE OF EXTERNAL SYMBOL TABLE
EQVBIT,	0
APMSW,	0		/AUTOMATIC PAGING MODE SWITCH
TEM7,	1		/SPECIAL VARIABLE USED BY ASME5
CPSW,	1
DSW,	0
FORFLG,	0		/FORTR PSUEDO-OP FLAG
			/POS NON-0 MEANS IGNORE DATA
SCOLON,	0
/*****
PASS,	0
PGEESC, 0		/HOLDS SIZE OF PAGE ESCAPE REQUIRED FOR CUR PAGE
PUPGE,	0
PHASE,	0		/PHASE SWITCH
PSTCPR, 0		/PAGE SYMBOL TABLE CODE POINTER
PSTSPR, 0		/PAGE SYMBOL TABLE SYMBOL POINTER
PSTSZE, 0		/SIZE OF PST
PTCPR,	0		/PAGE TABLE CODE POINTER
PTOPR,	0		/PAGE TABLE OP CODE POINTER
PTSPR,	0		/PAGE TABLE SYMBOL POINTER
PTSZE,	0		/SIZE OF PT
TEM1,	0
TEM2,	0
TEM3,	0
TEM4,	0
TEM5,	0
PTSIZ=PTSZE		/KEYPUNCHING ERROR
LITSIZ=LITSZE		/KEYPUNCHING ERROR
/
/LISTING VARIABLES
LFLG,	0		/0 IF NULL LINE
EFLG,	0		/ERROR FLAG, 6BIT CHAR. IN LEFT HALF
VFLG,	0		/0 IF NO VALUE TO OUTPUT
AFLG,	0		/DITTO FOR ADDRESS
CODE,	0		/RELOCATION CODE
ADDRES,	0		/INSTR. ADDRESS
VALUE,	0		/INSTR. VALUE

/LINE INFO
LFS,	0	/KEEP THIS LIST ORDERED AS GIVEN
OP,	0	/TO AGREE WITH TLFS LIST
IB,	0
AFS,	0
UMIC,	0
NSGN,	0
EXP,	0
SK,	0
CURSKP=SK
BANK,	0
S0,	0
S1,	0
S2,	0
S3,	0


/	FREQUENTLY USED CONSTANTS
/
K5,	5
K7,	0007
K10,	0010
K20,	0020
K40,	0040
K77,	0077
K100,	100
K177,	0177
K200,	0200
K240,	240
K400=L55I
K600=GETSYM
K3000=LFSCHK
K1000=INI
K4000=PRSYMP
K7600,	7600
M200=K7600
M254,	-254
LINAX,	LINBUF-1
M2,	-2
M3,	-3
K2000=RDIL
M3000=STCE
M7600=K200
/
/	CORE LAYOUT POINTERS
/
PTOPTB=K200		/PAGE OP CODE TABLE 1 IN BANK 1
BSEEST=K100		/BASE OF EXTERNAL SYMBOL TABLE IN BANK 1
MST=K2000		/BASE MAIN SYM. TAB IN BANK1
LFSBSE=K600		/BASE OF LOCATION FIELD SYMBOL TABLE IN BANK 1
LITBSE=L55I		/BASE OF ASSEMBLY PHASE LITERAL TABLE IN BANK 1
PSTBSE,	PSTB		/BASE OF PAGE SYMBOL TABLE IN BANK 0
PTBSE,	PTB		/BASE OF PAGE TABLE IN BANK 0
LTBSE=K1000		/BASE OF COLL. PHASE LIT. TABLE IN BANK 1
PTB=7176
PSTB=6776



IERROR=JMP I .		/ERROR MESSAGES
	ERRI
CERROR=JMP I .
	ERRC
SERROR=JMP I .
	ERRS

*0200
/
/	MAIN CONTROL LOGIC
/
START,	CLA
	JMS I	INITIO
	DCA	PASS
	DCA I	ICALSW
	JMS I	INITAP
RSTRT,	JMS I	INI	/INITIALIZE PAGE TABLE POINTERS
	SKP
RSTRT1, JMS I	INCPTI	/INCREMENT PAGE TABLE POINTERS
	JMS I	RDIL	/INPUT AND DECODE ONE LINE
	JMS I	CKCSWP		/CK FOR MISSING ARG
	DCA	BSSSW		/ALSO CLR BSS IS PROGRESS SW
	JMS I	STCE	/SET COUNTERS FOR CURRENT LINE
	TAD	OP	/OP CODE
	CDF 00
	DCA I	PTOPR	/TO PT OP CODE WORD
	CDF 10
	TAD	SK		/OR IN SKIP BIT
	SZA CLA
	TAD	K40	/SKIP INST
	TAD I	PTCPR	/IN CASE LFS BIT IN ALREADY
	DCA	TEM1
	TAD	IB	/OR IN INDIRECT BIT
	SZA CLA
	TAD	K400	/YES
	TAD	TEM1
	DCA	TEM1	/FOR NEW PT CODE WORD
	TAD	EXP	/DO WE HAVE A PAR?
	SZA CLA
	JMP	RSTRT5	/YES
	TAD	UMIC	/A MICRO INST?
	SNA CLA
	JMP	RSTRT4	/NO AN MRI
	TAD	K4	/OR IN OPERATE BIT
	JMP	COMP	/EXIT TO COMPUTE PAGE SIZE
/
/	PAR FOR AN OP CODE
/
RSTRT5,	TAD	K10	/PLACE PAR BIT ON PAGE TABLE
	TAD	TEM1
	DCA	TEM1
RSTRT4,	TAD	M2
	TAD	AFS	/IS AFS A CONSTANT
	SZA
	JMP	.+6	/NO
	TAD	K20	/YES ... CONSTANT BIT
RSTRT2, TAD TEM1	/+PT CODE WORD
	DCA	TEM1	/FOR NEW PT CODE WORD
	TAD	S0	/ACTUAL BINARY CONSTANT
	JMP	COMPGO	/EXIT TO COMPUTE PAGE SIZE
	IAC
	SZA CLA 	/IS AFS A LITERAL
	JMP	.+3	/NO
	TAD	K2	/YES ... LITERAL BIT
	JMP	RSTRT2	/SAVE AS CONSTANT FROM THIS POINT
	TAD	AFS	/PLACE AFS ON PST
COMPGO,	DCA I	PTSPR
	TAD	NSGN	/CK FOR # REF
	SZA CLA
	TAD	K2000	/YES
COMP,	TAD	TEM1	/GET ALL THE BITS
	DCA I	PTCPR	/TO THE CODE WORD
/
/	NOW COMPUTE THE CURRENT PAGE SIZE
/
	TAD	LFS	/IS THERE AN LFS
	SZA CLA
	JMS I	RECTI	/YES ... EXIT TO RECOUNT PAGE
	JMS I	CPGESI	/COMPUTE ACTUAL PAGE SIZE
	TAD	M200	/SUBTRACT PHYSICAL PAGE SIZE
	SPA SNA CLA 	/IS SIZE .GT. PHYSICAL SIZE
	JMP	RSTRT6	/NO ... GET NEXT
	JMS I	PSHINI	/YES ... PUSH CURRENT INPUT LINE
	TAD	PUPGE	/RESTORE LAST PAGE ESCAPE
	DCA	PGEESC	
	CLA CMA		/DECREMENT PAGE TABLE SIZE
	TAD	PTSZE
	DCA	PTSZE
/
/	ASSEMBLE THE CURRENT PAGE
/
	JMS I	L55I	/ASSEMBLE CURRENT PAGE
	JMS I	UDPG
	JMS I	FIXI		/FIX ILC IF PASS 2
	JMS I	POPINI	/POP LAST INPUT LINE
	JMS I	INI	/INITIALIZE PT POINTERS
	DCA I	RECTI		/CLR RECOUNT FLAG FOR CPLFS
	JMP	RSTRT1+2     /EXIT TO PROCESS POPPED LINE
/
RSTRT6,	TAD	PGEESC	/SAVE CURRENT PAGE ESCAPE
	DCA	PUPGE	/IN CASE NEXT LINE OVERFLOWS PAGE
	TAD	PASS
	SZA CLA
	JMS I	LASMP
	JMP	RSTRT1
LASMP,	ASM02
INITAP,	INITA
ICALSW, CALLSW
INCPTI, INCPT
POPINI, POPIN
PSHINI, PUSHIN
FIXI,	FIXILC
CKCSWP,	CKCSW
/	PAGE PSEUDO OPERATION
/
PPAGE,	JMS I	SKIPL
	CLA CMA 	/DECREMENT PAGE TABLE SIZE
	TAD	PTSZE
	SNA		/WATCH FOR ZERO
	JMP	.+3
	DCA	PTSZE	/FOR NEW PAGE TABLE SIZE
	JMS I	L55I	/ASSEMBLE CURRENT PAGE
	JMS I	UDPG
	JMP	RORGX	/INITIALIZE AND INPUT ANOTHER LINE
/
/	REORG PSEUDO OPERATOIN
/
PRORG,	JMS I	GETSYM	/GET NEXT INPUT ITEM
	NOP		/NOTHING THERE
	SKP		/SYMBOL
	SKP CLA 	/CONSTANT
	IERROR		/LITERAL
	JMS I	SKIPL
	TAD	S0	/NEW RELOCATABLE ORIGIN
	AND	K7600	/MASK OFF PAGE DISPLACEMENT BITS
	SNA		/ARE WE TRYING TO REORIGIN BELOW 200
	IERROR		/YES ... NOT ALLOWED
	DCA	RORG1	/SAVE NEW ORIGIN
	CLA CMA 	/DECREMENT PAGE TABLE SIZE
	TAD	PTSZE
	SNA	 	/IS THIS THE BEGINNING OF A PAGE
	JMP	.+3	/YES
	DCA	PTSZE
	JMS I	L55I
	TAD	RORG1	/NEW ORIGIN
	DCA	PAG	/TO PROPER LOCATION
RORGX,	JMS I	FIXI
	TAD	RSTRTX		/RETURN AT RSTRT INSTEAD OF RDL1
	DCA	DCIL1
	JMP I	NULLP	/RE-INITIALIZE AND GO
RORG1,	0
RSTRTX,	RSTRT
UDPG,	UDPAGE
INITIO,	IOINIT
*0400
/
/	ROUTINE TO CAUSE CURRENT PAGE TO BE ASSEMBLED

/THIS ROUTINE ACTS AS THE DRIVER FOR THE ASSEMBLY
/PROCESS.  MOST OF THE ACTUAL ASSEMBLY WORK
/IS DONE BY ASMBL,A1,A2,& ASM02.
/FUNCTION:(PASS1)
/	CALL ASMBL TWICE.  THE FIRST TIME
/	(ACTR=0) PROHIBIT OUTPUT BY CONVERTING
/	"JMS OUTBIN" TO "JMS DUMMY". BUT
/	ALSO CONVERT "JMS DUMMY" TO "JMS OUTBN"
/	SO THAT OUTPUTTING OF OCCURANCES
/	WILL OCCUR IN FIRST CALL TO ASMBL.
/	IN GENERAL, IN THE FIRST RUN THRU ASMBL
/	NOTHING HAPPENS EXCEPT THAT TAGS ARE
/	DEFINED (BY LFSCK).  AS THE TAGS ARE
/	DEFINED LFSCK ALSO CAUSES THE
/	OCC.TAB. TO BE SEARCHED FOR PREVIOUSLY
/	UNRESOLVED FORWARD REFERENCES TO THIS
/	TAG.  IF FOUND, RELOCATABLE POINTERS TO
/	THE TAG ARE OUTPUT AT ALL REQUIRED
/	ADDRESSES DURING PHASE1 OF ASMBL.
/	AFTER THE 1ST ASMBL, OUTBIN & DUMMY ARE
/	SWITCHED BACK TO NORMAL & ASMBL
/	IS CALLED AGAIN.  DURING 2ND ASMBL
/	THE TAG DEFN. SECTION OF LFSCK IS
/	BY-PASSED & ALL CODE EXCEPT OCCURANCES
/	IS OUTPUT.
/	(PASS2)
/	DURING THE LISTING PASS MOST OF THE
/	ASSEMBLY IS DONE ON A LINE-BY-LINE
/	BASIS BY ASM02 SO L55 HAS LITTLE
/	TO DO.  IT JUST CALLS A2 TO 
/	OUTPUT THE LITERAL POOL & THEN 
/	A1 TO INIT. ASSEMBLY OF THE NEXT
/	PAGE.
/
L55,	0
	JMP I	L55B		/CHANGED FROM V16 TO FIX LISTING BUG
L55C,	TAD	PASS
	SZA CLA
	JMP	L55L
	JMS I	L55A		/CHECK COMMON PUNCHED
	TAD	L56	/SET DUMMY ROUTINE TO OUTPUT
	DCA	DUMMY
	TAD	L56+1	/SET OUTPUT ROUTINE TO DUMMY
	DCA	OUTBIN
	DCA	ACTR	/CLEAR ASSEMBLY COUNTER
	TAD	EQVOPR		/SAVE FOR 2ND ASSEMBL
	DCA	TEM55
	JMS I	ASSMBL	/ASSEMBLE PAGE FIRST TIME
	TAD	L56	/RESTORE OUTPUT ROUTINE
	DCA	OUTBIN
	TAD	L56+1	/RESTORE DUMMY ROUTINE
	DCA	DUMMY
	ISZ	ACTR	/SET ASSEMBLY COUNTER
	TAD	TEM55		/RESTORE AS BEFORE 1ST ASSEMBL
	DCA	EQVOPR
	JMS I	ASSMBL	/ASSEMBLE AND OUTPUT THIS TIME
	JMP I	L55	/RETURN
L56,	OUTBN
	DUM
ASSMBL, ASMBL
L55A,	HCBPS
L55B,	EQVFIX
TEM55,	0



L55L,	JMS I	A2P
	JMS I	A1P		/INITIALIZE NEXT PAGE
	JMP I	L55
A2P,	A2
A1P,	A1



/
/COLLECTION PHASE ROUTINE
/RECOUNT THE CURRENT PAGE BECAUSE OF AN LFS
/CALL WITH AC=0, LEAVES AC=0
/FUNCTION:WHEN A NEW TAG IS DEFINED ON PAGE
/	OPSCTR & OBACTR MAY NEED TO BE
/	REDUCED.  CPLFS TAKES CARE OF OPSCTR
/	BUT OBACTR REQUIRES REVIEWING THE
/	ENTIRE PAGE.
/OPERATION:	(1) CALL CLNPST TO CLEAR BITS 1-9
/		OF ALL PST CODE WORDS-WIPES OUT
/		SHARE OF OBACTR DUE TO EACH SYM.
/		(2) RE-INIT PAGE & CLR OBACTR
/		(3) FETCH ITEM FROM PAGE TABLE
/		(4) SET ALL INSTR.TYPE FLAGS ACCORDINGLY
/		(5) CALL SETC
/		(6) INC PAGE TABLE PTRS TO NEXT ITEM
/		& LOOP BACK TO (3)
/		CONTINUE THRU ENTIRE TABLE.
/
RECT,	0
	TAD	PSTSZE		/ANYTHING ON PST?
	SZA
	JMP I	CLENUP		/YES, CLEAN PST CODES

RECRET,	JMS I	INISS		/DO INITS.
	DCA	OBACTR	/ZERO OFF BANK ADDITION COUNTER
	TAD	PTSZE	/SIZE OF PT
	CIA
	DCA	RECT1	/TO INDEX LOCATION
/
/	THIS IS THE RECOUNT LOOP
/
RECT2,	CDF 00
	TAD I	PTOPR	/OP CODE FROM PT
	CDF 10
	DCA	OP
	TAD I	PTCPR	/CK FOR SKIP INST
	AND	K40
	DCA	SK
	TAD I	PTCPR	/CK FOR # REF
	AND	K2000
	DCA	NSGN
	TAD I	PTCPR	/PT CODE WORD
	AND	K4	/IS IT AN OPERATE INSTRUCTION
	DCA	UMIC
	TAD I	PTCPR	/CK FOR PAR EXP
	AND	K10
	DCA	EXP
	TAD I	PTCPR	/PAGE TABLE CODE WORD
	AND	K400	/MASK OFF INDIRECT BIT
	DCA	IB	/PLACE IT IN PROPER LOCATION
	TAD I	PTCPR	/PT CODE WORD
	AND	K20	/IS AFS A CONSTANT
	CLL RTR
	SZA
	JMP	.+3	/YES
	TAD I	PTCPR	/PT CODE WORD
	AND	K2	/IS AFS A LITERAL
	CLL RAR
	SNA
	TAD I	PTSPR	/ADDRESS FIELD SYMBOL
	DCA	AFS
	TAD I	PTSPR	/ACTUAL LITERAL
	DCA	S0	/TO LITERAL LOCATION
/
/	AREA WHICH CALLS COUNT ROUTINE
/
RECT3,	TAD I	PTCPR	/PT CODE WORD
	AND	K201		/IS THERE A TAG OR AN EQUIVALENCED TAG?
	SNA CLA
	JMP	.+3	/NO
	CLA CMA 	/YES ... SET BANK UNKNOWN
	DCA	BANK
	JMS I	STCE	/CALL COUNT ROUTINE
	ISZ	RECT1	/OVER YET
	SKP		/NO
	JMP I	RECT	/EXIT
	JMS I	ISZPT1
	JMP	RECT2	/GO GET NEXT LINE
RECT1=L55
INISS,	INISUB
CLENUP,	CLNPST
K201,	201
ISZPT1,	ISZPT
PAUS1,	PPAUS1
/
/	END PSEUDO OPERATION
/
PEND,	TAD	FORFLG		/IF FLAG ON, TURN OFF &
	SMA SZA CLA	/GO TO RDL1
	JMP I	PAUS1	/GO TURN OFF FORTR P-OP
	CLA CMA 	/DECREMENT PT SIZE
	TAD	PTSZE
	SNA		/ARE WE AT THE BEGINNING OF A PAGE
	JMP	PCSM	/YES
	DCA	PTSZE	/NO ... NEW PAGE TABLE SIZE
	TAD	PAG	/CHECK FOR OVERFLOW INTO 7600 PAGE
	TAD	K200
	SNA	CLA
	SERROR		/OVERFLOW-ERROR S
	ISZ	APMSW	/LEAVE AUTO PAGING MODE FOR LAST PAGE
	JMS	L55	/ASSEMBLE CURRENT PAGE
PCSM,	JMS I	OUTBIN	/OUTPUT CKSUM
	CSUM
	10
	TAD	PASS
	SZA CLA
	JMP	ENDEND
	JMS I	LEAD	/OUTPUT TRAILER CODE
	JMS I	PRSYMP	/TYPE OUT SYMBOL TABLE
	ISZ	PASS
	JMS I	INITAI
	JMS I	A1P
	HLT
	JMP I	REE
ENDEND,	JMS I	WLNP		/LIST THE "END" STATMT
	HLT CLA
	JMP I	K200		/RESTART AT 200
REE,	RSTRT
INITAI,	INITA
LEAD,	LEADER


*600
/READ INPUT ITEM
/	IGNORES SPACES & TABS TO 1ST CHAR OF ITEM
/ASSUMES AC=0
/CALLING SEQ: JMS I GETSYM
/		NULL RETURN (IF NO ITEM FOUND BEFORE CR ; / *
/		SYMBOL RET. (WITH SYM PACKED IN S1-S3
/			AND S0=SYMBOL LENGTH)
/		CONST. RET. (WITH VALUE IN S0)
/		LITERAL RET. (WITH VALUE IN S0)
/SYNTAX: LITERALS: (000		NUMERIC LIT.
/		(-000		NEG.
/		(K000		OCTAL
/		(D000		DECIMAL
/		("A		ASCII LIT.
/		(-"A		NEGATIVE ASCII
/	CONSTANTS: 000,-000,"A,OR -"A
/	NOTE: AFTER A VALID QUOTE ANY ASCII CHAR MAY APPEAR
/		AND WILL BE STORED AS THE CONST OR LIT VALUE.
/		THIS INCLUDES CR ; / * SO THESE DO NOT
/		TERMINATE A LINE AFTER A QUOTE.
/ALL EXITS LEAVE AC=0
/NOTE: TO PROVIDE A CHECK OF THE PUNCTUATION
/CHAR.  FOLLOWING PREVIOUSLY READ SYMBOL, GTSYM
/DECREMENTS THE LINE PTR BEFORE STARTING
/THE READ.  IF THIS IS NOT WANTED
/CALL TO GTSYM MUST BE PRECEDED
/BY "ISZ X0"

GTSYM,	0
	CMA			/DECREMENT CHARACTER PTR
	TAD X0
	DCA X0
	TAD DSW		/SAVE NUMERIC MODE
	DCA TEM4
	CMA			/SIGN=-1 FOR POSITIVE
ITM4,	DCA	SIGN		/SIGN=0 TO FORCE NEGATION
ITM2,	JMS I RC		/READ 1ST CHAR
	JMP ITM5	/DIGIT: GET NUMERIC CONST
	JMP ITM3	/ALPHA: GET SYMBOL
	JMS I TEST		/SORT LEADING PUNCT.
		SL2-1
		BL2-SL2
	CERROR			/ILLEGAL CHAR
/
/READ IN A SYMBOL
/ASSUMES 1ST CHAR ALREADY READ IN & SAVED IN CHR
/LEAVES SYMBOL PACKED IN 6BIT CHAR PAIRS IN S1-S3
/	S0=NUMBER OF CHAR PAIRS ACTUALLY USED

ITM3,	ISZ SIGN		/CK FOR -SYMBOL
	CERROR			/YES
	DCA S0		/CLR FOR SYM LENGTH COUNT
	DCA TEM1		/CLR FOR CHAR COUNT
	DCA TEM3		/SET PTR FOR LEFT BYTE
	TAD AS0		/AUTO-INDEX STORAGE IN S1-S3
	DCA X2
RSM2,	ISZ TEM1		/COUNT CHAR
	TAD TEM1		/ARE MORE THAN 6 CHARS IN?
	TAD M7
	SMA CLA
	JMP RSM1	/YES, IGNORE
	TAD CHR		/NO, GET ASCII
	AND K77		/MASK TO 6BIT
	ISZ TEM3		/WHICH BYTE?
	JMP RSM3	/LEFT
	TAD TEM2		/ADD ON LEFT HALF
	DCA I X2	/STORE CHAR PAIR IN S1-S3
	JMP RSM1
RSM3,	RTL CLL		/MOVE 6BIT TO LEFT BYTE
	RTL
	RTL
	DCA TEM2		/SAVE WHILE WAITING ON RT BYTE
	CMA		/SET PTR FOR RT BYTE
	DCA TEM3
	ISZ S0		/COUNT 1 SYMBOL WORD
RSM1,	JMS I RC		/READ NEXT CHAR
	JMP RSM2	/DIGIT
	JMP RSM2	/ALPHA
	ISZ TEM3		/PUNCT=END OF SYM: CHECK BYTE PTR
	JMP .+3		/NOTHING IN TEM2
	TAD TEM2		/SAVE THE ODD CHAR
	DCA I X2
	TAD I	IFCTP		/SKIP SYM TAB IF IF-COUNT NOT UP
	SMA CLA
	JMS I  SRS		/LOOK IT UP IN SYM TAB. & ENTER IF NEC.
	JMP ITM14	/EXIT

/READ DIGIT STRING
/ASSUMES 1ST DIGIT ALREADY READ AND ASCII SAVED IN CHR
/	SGN=-1 IF NUM. IS TO BE NEGATED
/	DSW=0 FOR OCTAL CONVERSION, 1 FOR DECIMAL
/LEAVES AC=OCTAL VALUE OF DIGIT STRING (NEG IF SGN=-1)
/	CHR=ASCII FOR TERMINAL PUNCTUATION

ITM5,	DCA TEM1		/CLEAR FOR ACCUMULATION
RDS1,	TAD CHR		/REDUCE CHR TO OCTAL VALUE
	TAD M260A
	DCA TEM2
	TAD DSW		/OCTAL OR DECIMAL CONVERSION?
	SZA CLA		/OCTAL, CK FOR 8 OR 9
	JMP MUL1	/DECIMAL, 8 OR 9 IS OK
	TAD TEM2		/VALUE = 8 OR 9?
	TAD M7
	SMA SZA CLA	/NO, GO ON
	CERROR			/YES
		/MULT. PREV. VAL. BY CONV. FACTOR
	TAD TEM1
	CLL RTL		/ARG *4
	JMP MUL1+3
MUL1,	TAD TEM1
	CLL RTL		/ARG * 4
	TAD TEM1		/PLUS ARG=ARG*5
	RAL		/*2
	TAD TEM2		/ADD NEW DIGIT
	DCA TEM1		/SAVE ACCUMULATED VALUE
	JMS I RC		/READ NEXT CHAR.
	JMP RDS1	/DIGIT
	CERROR			/ALPHA
	TAD TEM1		/PUNCT.; GET TOTAL
ITM6,	ISZ SIGN		/IS NEGATE SW. SET?
	CIA		/YES
	DCA S0		/STORE CONST VALUE
	TAD TEM4		/RESTORE NUMERIC MODE
	DCA DSW
	JMP ITM13	/EXIT
ITM7,	JMS I	GETCHR		/READ ALPHA CONST.
	SNA
	IERROR		/NOTHING THERE
	DCA TEM1
	JMS I GETCHR		/READ NEXT CHAR FOR BENEFIT OF SKIPL
	CLA
	TAD TEM1
	JMP ITM6
ITM8,	JMS I CKIFP		/MOVE PTR TO LITERAL EXIT
ITM9,	JMS I RC		/READ 1ST CHAR OF LIT.
	JMP ITM5	/DIGIT: NUMERIC LIT.
	NOP		/ALPHA: MUST BE K OR D
	JMS I TEST		/LOOK FOR K,D,",-
		SL3-1
		BL3-SL3
	CERROR			/ILLEGAL CHAR
ITM10,	DCA	SIGN		/SET FLAG FOR NEG. LIT.
	JMP ITM9
ITM11,	IAC		/FORCE DECIMAL LIT.
ITM12,	DCA DSW		/FORCE OCTAL LIT.
	JMP ITM9
ITM13,	JMS I CKIFP		/CONST. EXIT
ITM14,	JMS I CKIFP		/SYMBOL EXIT
ITM15,	JMP I GTSYM	/NULL EXIT
M260A,	-260
SRS,	SRSYM
RC,	RCH
SIGN,	0
IFCTP,	IFCTR
CKIFP,	CKIF
AERROR=JMP I .
	ERRA
CALLSP,	CALLSW
/
/CHECK FOR TOO FEW ARGS
/AERROR IF CALLSW MINUS
/
CKCSW,	0
	TAD I	CALLSP		/CK
	SMA CLA
	JMP I	CKCSW		/OK
	ISZ I	CALLSP		/COUNT MISSING ARG
	NOP
	AERROR			/FLAG
/
/CHECK FOR TOO MANY ARGS
/AERROR IF CALLSW POSITIVE
/
CKCLS,	0
	TAD I	CALLSP		/DO WE WANT THIS ARG?
	SMA CLA
	AERROR			/NO, ARG COUNT OVERFLOW
	ISZ I	CALLSP		/YES, COUNT THIS ARG
	NOP
	JMP I	CKCLS
*1000
/
/	ROUTINE TO INITIALIZE POINTERS FOR THE COLLECTION OF A PAGE
/
INILPT,	0
	CLA IAC
	DCA	PTSZE	/SET PAGE TABLE SIZE
	DCA	PSTSZE	/ZERO PAGE SYMBOL TABLE SIZE
	DCA	LTSZE	/ZERO LITERAL TABLE SIZE (COLL. PHASE)
	DCA	LITSZE		/& ASMBLY PHASE LIT TABL
	DCA	OPSCTR	/ZERO OFF PAGE SYMBOL COUNTER
	DCA	PHASE	/SET PHASE SWITCH TO COLLECTION
	JMS	INISUB
	CLA CMA
	DCA I	BNKSV
	CLA IAC
	DCA I	LSTSKK
	TAD	EQVBIT		/ANY EQUIV. LEFT FROM LAST PAGE?
	SZA
	JMP	EQSAV		/YES, SKIP TABLE REINIT & SAVE BIT
	DCA	EQVIPR		/NO, RE-INIT EQ. TAB. PTRS
	DCA	EQVOPR
EQSAV,	DCA I	PTCPR	/INITIALIZE PAGE TABLE CODE WORD
	DCA I	PTSPR	/INITIALIZE PAGE TABLE SYMBOL WORD
	CDF 00
	DCA I	PTOPR	/INITIALIZE PT OP CODE WORD
	CDF 10
	TAD	LFSBSE	/INITIALIZE LFS TABLE POINTER
	DCA	LFSPTR
	DCA	OBACTR	/ZERO OFF BANK ADDITION COUNTER
	TAD	RDL1X		/RESTORE IN CASE OF REORG OR PAGE PSUEDO
	DCA	DCIL1
	JMP I	INILPT	/RETURN

RDL1X,	RDL1
BNKSV,	BNKSAV
LSTSKK,	SKPSAV
M211,	-211


/
/GENERAL PAGE TABLE INITALIZATION
/DOES PARTS OF INITALIZ.  COMMON TO SEVERAL
/ROUTINES
/
INISUB,	0
	TAD	PTBSE	/INITIALIZE PAGE TABLE CODE POINTER
	DCA	PTCPR
	TAD	PTBSE	/INITIALIZE PAGE TABLE SYMBOL POINTER
	IAC
	DCA	PTSPR
	TAD	PTOPTB	/INITIALIZE PT OP CODE POINTER
	DCA	PTOPR
	CLA CMA 	/SET LAST BANK UNKNOWN
	DCA	LSTBNK
	CLA IAC 	/SET LAST INSTRUCTION SKIP INDICATOR ON
	DCA	LSTSKP
	CLA CMA 	/SET CURRENT BANK UNKNOWN
	DCA	BANK
	JMP I	INISUB


/
/SUBR. TO WRITE A LINE
/MAY BE USED ONLY DURING PASS 2 (LISTING)
/FUNCTION:TYPES (OR PUNCHES) EACH LINE OF SOURCE
/	WITH PROPER ASSEMBLY ADDR. & CODES
/	AT BEGINNING OF LINE (OR SPACES IF
/	THESE ARE OMITTED).
/LINE FORMAT:
/ADDR  VALU RC   CONTENTS OF LINE BUFFER
/ERROR FLAGS TYPED BETWEEN ADDR & VALU
/COLUMNS.  RC=RELOCATION CODE.  THE LINE
/BUFFER IS IN FIELD 1 AT "LINBUF."
/
WLN,	0
	TAD	LFLG		/NULL LINE?
	SNA CLA
	JMP	WLN3		/YES
	TAD	AFLG
	SZA CLA
	JMP	.+4
	JMS I	CTYPE		/IF AFLG=0 TYPE 4 SPACES
	JMS I	CTYPE
	JMP	.+3
	TAD	ADDRES		/OTHERWISE TYPE 4 DIGITS
	JMS I	OTYPE
	TAD	EFLG		/TYPE ERR. FLAG & SPACE
	JMS I	CTYPE
	TAD	VFLG		/SAME TREATMENT FOR VALUE
	SZA CLA			/AS FOR ADDRES
	JMP	.+4
	JMS I	CTYPE
	JMS I	CTYPE
	JMP	.+3
	TAD	VALUE
	JMS I	OTYPE
	TAD	K240		/SPACE
	JMS I	TYPE
	TAD	CODE		/2 DIGITS OR 2 SPACES
	JMS I	CTYPE
	CDF 00
	TAD I	LINEB		/IS THERE ANY LINE TO TYPE?
	CDF 10
	SNA CLA
	JMP	WLN3		/NO, EXIT
	JMS I	CTYPE		/2 SPACES
	TAD	K240		/3RD SPACE 
	JMS I	TYPE
	TAD	LINAX		/INDEX LINE BUFFER
	DCA	X1
	DCA	CHARCT		/CLR COUNTER
WLN1,	CDF 00
	TAD I	X1		/GET CHAR
	CDF 10
	SNA
	JMP	WLN3		/END OF LINE
	DCA	CHR
	TAD	CHR		/CK FOR TAB
	TAD	M211
	SNA CLA
	JMP	WLN2		/YES
	ISZ	CHARCT		/COUNT 1 CHAR
	TAD	CHR		/OUTPUT IT
	JMS I	TYPE
	JMP	WLN1
WLN2,	TAD	K240		/SIMULATE TAB
	ISZ	CHARCT
	JMS I	TYPE
	TAD	CHARCT
	AND	K7
	SZA CLA
	JMP	WLN2		/CONTINUE TAB
	JMP	WLN1
WLN3,	JMS I	CRLF
	DCA	VFLG
	DCA	EFLG
	DCA	AFLG
	DCA	CODE
	CDF 00
	DCA I	LINEB
	CDF 10
	JMP I	WLN

LINEB,	LINBUF
CHARCT=TEM5
/
/PATCH FOR SETCT
/NOT USED BY ANY OTHER PART OF PROGRAM
/(ADDED AT V15)
/
/FUNCTION: SET BANK=1 AFTER A "CALL"
/(MUST BE DONE FOR BENEFIT OF RECT ROUTINE)
/
SETCAL,	0
	TAD I	PTCPR		/CK FOR CALL CONST.
	AND	K100
	SNA CLA
	JMP	.+3		/NO
	IAC			/YES, BANK TO CURRENT
	DCA	BANK
	TAD	EXP		/DO 2 INSTRUCTIONS THAT
	TAD	UMIC		/WERE KNOCKED OUT OF SETCT
	JMP I	SETCAL


*1200
/
/	ASSEMBLY PHASE PAR

/
/PPAR1 IS ACTUALLY A PART OF THE BASIC ASSEMBLY
/ROUTINE ASM02.
/IT ASSEMBLES ALL PARAMETERS
/TYPES ARE:	RC=00	ABSOLUTE CONSTANT
/		RC=01	RELOCATABLE ADDRESS
/		RC=05	CDF TO CURRENT FIELD
/		RC=06	CALL CONSTANT (#ARGS+EXT.SYM.#)
/		ALSO LITERALS USED IN ARG STATEMENTS
/		SUCH LITS. ARE PUT IN LIT. POOL
/		AND RC=01 ADDRESS OF LIT. PUT WHERE
/		THE ARG STATEMT OCCURS.
/ADDRESS PARAMETERS ARE ACUALLY TAKEN
/CAR OF BY SUBR. PPAR3S.
/
/
PPAR1,	DCA	PPARY		/CLR OUTPUT CODE
	TAD I	PTCPR		/CK FOR LITERAL ARG OR PARAM.
	AND	K2
	SZA CLA
	JMP	PARLIT		/YES
	TAD I	PTCPR	/PT CODE WORD
	AND	K20	/IS IT PAR CONSTANT
	SNA CLA
	JMP	PPAR3	/NO
	TAD I	PTSPR	/YES ... ACTUAL CONSTANT
	DCA	TEM1	/TO DIRECTLY ADDRESSABLE LOC
	TAD I	PTCPR	/IS THIS A SPECIAL CONSTANT USED BY CALL
	AND	K100
	SNA CLA
	JMP	.+5
	IAC			/YES, SET BANK TO CURRENT (NEW IN V15)
	DCA	BANK
	IAC			/& FORCE CODE=06
	JMP .+5
	TAD I	PTCPR	/IS THIS A CDF INSTRUCTION TO THIS BANK
	AND	K1000	
	SNA CLA
	JMP	.+3	    
	TAD	K5
	DCA	PPARY
	JMS I	WRITEP
	JMS I	OUTBIN	/OUTPUT IT
	TEM1		/NO RELOCATION
PPARY,	0
	SKP
PPAR3,	JMS	PPAR3S	/DO ALL WORK
	JMP I	PPAR5-1
SERALI,	SRALT

PARLIT,	TAD I	PTSPR		/PUT LIT ON TAB.
	DCA	S1
	IAC
	DCA	S0
	JMS I	SERALI
	AND	K177		/GET PAGE ADDRESS
	TAD	PAG		/+ PAGE BITS
	DCA	TEM1
	ISZ	PPARY		/CODE FOR RELOCATABLE ADDR.
	JMP	PPARY-3
/
/	SUBROUTINE TO ASSEMBLE PAR SYMBOL

/
/ASSEMBLE ADDRESS PARAMETER
/SYMBOL MAY BE ABSOLUTE OR RELOCATABLE
/NORMAL OR # REF.
/IF SYMBOL IS YET UNDEFINED, AN ENTRY IS
/MADE FOR IT & THE CURRENT ADDRESS IN THE
/OCCURANCE TABLE.
/
/
PPAR3S, 0
	DCA	PPARX		/CLR OUTPUT CODE
	TAD	ACTR	/WHCH TIME ARE WE ASSEMBLING THIS PAGE
			/NOTE: ACTR REMAINS 1 DURING PASS 2
	SNA CLA
	JMP I	PPAR3S	/FIRST TIME JUST RETURN
	TAD I	PTSPR	/SYMBOL
	DCA	AFS	/TO DIRRECTLY ADDRESSABLE LOCATION
	JMS I	OBSYM	/GET IT FROM MST
	AFS
	TAD	USE	/MST USE WORD
	AND	K400	/IS IT DEFINED YET
	SNA CLA
	JMP	PPAR4	/NO ... OCCURANCE
	TAD 	USE	/MST USE WORD
	AND	K3000	/IS SYMBOL ABSOLUTE
	SZA CLA
	ISZ	PPARX		/OUTPUT RELOCATABLE
	JMS I	NSCHKI
	TAD	VAL		/INCREMENT IF # REF.
PPAR6,	DCA	TEM1
	JMS I	WRITEP
	JMS I	OUTBIN	    
	TEM1
PPARX,	0
	JMP I	PPAR3S	/RETURN
PPAR4,	TAD	AFS	/SYMBOL
	DCA I	PPAR5	/TO SUBROUTINE LOCATION
	TAD	ILC	/CUR LOC
	DCA I	PPAR5+1      /TO SUBROUTINE LOC
	JMS I	NSCHKI
	CLL RTL
	DCA I	PPAR5+3		/SET ATEM2 FOR NORMAL OR # REFERENCE
	JMS I	PPAR5+2      /CREATE AN OCCURANCE
	JMP	PPAR6      /OUTPUT ZERO WORD FOR LOADER
	ASM01
PPAR5,	ATEM3
	ATEM4
	L53B
	ATEM2
NSCHKI,	NSCHK

/
/TWO CHARACTER TYPEOUT
/FROM PACKED ASCII PAIR
/CALL WITH 6-BIT PAIR IN AC
/L61A ACTS AS SUBR FOR L61
/
L61,	0
	DCA	TEM1	/SAVE CHARACTERS
	TAD	TEM1
	RTR		/SHIFT HIGH 6 BITS TO LOW
	RTR
	RTR
	JMS	L61A	/MASK AND TYPE FIRST CHARACTER
	TAD	TEM1
	JMS	L61A	/MASK AND TYPE SECOND CHARACTER
	JMP I	L61	/RETURN

L61A,	0
	AND	K77	/MASK CHAR TO 6 BITS
	SNA		/ZERO MEANS SPACE
	JMP	L61B
	JMP I	L61CP		/HAVE DO SOME OF THIS WORK ON ANOTHER PAGE
L61D,	JMS I	TYPE	/TYPE CHAR
	JMP I	L61A	/RETURN
L61B,	TAD	K240	/SPACE
	JMP	L61D
L61CP,	L61C

/
/	ROUTINE TO TEST CHARACTERS AND TAKE SELECTIVE EXITS
/
/	CALL IS
/	JMS I	TEST
/	SORT LIST ADDR -1
/	BRANCH LIST ADDR - SORT LIST ADDR
/	 RETURN IF ALL TESTS UNSUCCESSFUL
/	ASSUMES AC=0 & CHAR TO LOOK FOR IS IN CHR

/SORT ENDS UNSUCCESSFULLY AT
/NEGATIVE NUMBER FOLLOWING SORT LIST
/IF SORT IS SUCCESSFUL, A BRANCH IS
/TAKEN VIA BR. LIST ITEM CORRESPONDING
/TO MATCHING SORT LIST ITEM.
/
TSCHR,	0
	CLA
	TAD I	TSCHR	/GET SORT LIST ADDR -1
	DCA	X1	/AUTO-INDEX SORT LIST
	ISZ	TSCHR	/MOVE ARG PTR
	CDF 00
TSCHR2,	TAD I	X1		/GET SORT LIST ITEM
	SPA
	JMP	TSCHR3	/NEG = END OF SORT LIST
	CIA		/COMPARE ITEM WITH CHR
	TAD	CHR
	SZA CLA		/0 = MATCH FOUND
	JMP	TSCHR2	/NO MATCH, TRY NEXT ITEM
	TAD	X1	/GET ADDR. OF MATCH
	CDF 10
	TAD I	TSCHR	/+BR. LIST ADDR - SORT LIST ADDR
	DCA	TSCHR	/= PTR TO BR. LIST ITEM
	CDF 00
	TAD I	TSCHR	/GET BR. LIST ITEM
	DCA	TSCHR	/= BRANCH PTR FOR THE MATCH
	SKP
TSCHR3,	ISZ	TSCHR	/NO MATCH ON LIST
	CLA CLL
	CDF 10
	JMP I	TSCHR	/ RETURN UNSUCCESSFUL


*1400
/
/	CALL PSEUDO OPERATION
/
PCALL,	JMS I	GETSYM	/GET NEXT INPUT ITEM
	NOP		/NOTHING THERE
	SKP		/SYMBOL
	TAD	CHR	/CONSTANT
	TAD	M254	/LITERAL
	SZA CLA 	/IS BREAK CHARACTER A COMMA
	JMP	CALERR	/NO ... ERROR
	TAD	S0	/SAVE ARG COUNT
	DCA	ARGCT
	ISZ	X0		/PROHIBIT FLAGGING THE COMMA
	JMS I	GETSYM	/GET SUBROUTINE NAME
	SKP		/NONE THERE
	JMP	.+3	/SYMBOL
	NOP		/CONSTANT
CALERR,	IERROR		/LITERAL
	JMS I	SKIPL
	JMS I	SREST	/SEARCH EXTERNAL SYMBOL TABLE AND OUTPUT TV DEF
	DCA	PCALL1	/SAVE EXTERNAL SYMBOL NUMBER
	TAD	LFS
	DCA I	CALLFS
	TAD	ARGCT	/SET ARG COUNT IN DYNAMIC LOCATION
	CIA
	DCA	CALLSW	/SET CALL - ARG IN PROCESS SWITCH & COUNTER
	TAD	ARGCT	/COUNT OF ARGS
	RAL CLL 	/*2
	TAD	ARGCT		/*3 IN CASE USING LITERAL ARGS
	TAD	K2	/+2
	JMS I	PARG2	/CAN THE CURRENT PAGE HOLD IT
	SKP		/YES
	JMS I	INI	/NO ... INITIALIZE PT PTRS ... HAD TO ASSEMBLE PAG
	TAD I	CALLFS
	DCA	LFS
	JMS I	ICPLFS	/PROCESS COLLECTION LFS
	TAD I	PTCPR	/PT CODE WORD
	TAD	K30	/ADD CONSTANT BIT & PAR BIT
	DCA I	PTCPR	/TO PT CODE WORD
	TAD	PARG6	/PLACE JMS LINK INSTRUCTION
	DCA I	PTSPR	/AS CONSTANT
	JMS	PARG5	/INC PT PTRS & ASSMBL IF PASS 2
	TAD	K130	/CORRECT BIT PATTERN FOR CALL
	DCA I	PTCPR	/TO PT CODE WORD
	IAC			/A CALL FORCES BANK TO CURRENT
	DCA	LSTBNK		/(NEW IN V15)
	IAC
	DCA	BANK
	TAD	ARGCT	/COUNT OF ARGS
	CLL RTL		/TO HIGH ORDER AC
	RTL
	RTL
	TAD	PCALL1	/OR IN EXTERNAL SYMBOL NUMBER
	DCA I	PTSPR	/PLACE IN PT SYMBOL WORD
	JMP	ARGPP0		/COMMON EXIT
/
/	ARG PSEUDO OPERATION
/
PARG,	JMS I	GETSYM	/GET NEXT INPUT ITEM
	IERROR		/NOTHING THERE
	JMP	PARGSM	/SYMBOL
	JMP	PARGCN	/CONSTANT CODE IS 2
	JMS I	SKIPL	/FIXES BUG IN V16
	JMS I	SLITAB		/PUT LIT ON TABLE
	CMA			/LIT CODE IS 1
PARGCN,	TAD	K2
	SKP
PARGSM,	TAD	SYMBOL		/PAR ADDRESS
	DCA	AFS
	JMS I	SKIPL
	JMS I	CKCLSP		/CK FOR TOO MANY ARGS
/
/	ROUTINE TO PUT A CDF IN THE PAGE TABLE
/
	TAD	K30	/PT CODE WORD
	DCA I	PTCPR	/TO PT
	JMS I	ICPLFS	/PROCESS ANY LFS
	TAD	K6201	/CDF
	DCA I	PTSPR	/TO PT SYMBOL WORD
	TAD	M2
	TAD	AFS	/IS AFS A CONSTANT
	SNA
	JMP	ARGPP4	/YES
	IAC		/IS AFS A LITERAL
	SNA CLA
	JMP	ARGPP5	/YES
	JMS I	OBSYM	/NO ... SYMBOL ... GET ITS POINTERS TO MST
	AFS
	TAD	USE	/AFS MST USE WORD
	AND	K40	/IS IT A COMMON SYMBOL
	SNA CLA
	JMS	CDFCHG	/NO
	JMS	ARGPP2	/INCREMENT PT PTRS AND PUT OUT A PAR
	TAD	AFS
	DCA I	PTSPR	/PLACE SYMBOL IN PT SYMBOL WORD
ARGPP0,	JMS	PARG5	/INC PT PTRS &ASSMBL IF PASS 2
	JMP I	POPEXP	/EXIT TO GET NEXT LINE

/
ARGPP5,	JMS	CDFCHG
	JMS	ARGPP2	/INCREMENT PTRS AND PUT OUT A PAR
	TAD	K2	/SET LITERAL BIT
	JMP	.+3     /SAVE AS CONSTANT FROM HERE
/
ARGPP4,	JMS	ARGPP2	/INCREMENT PTRS AND PUT OUT A PAR
	TAD	K20	/SET CONSTANT BIT
	TAD I	PTCPR	/PT CODE WORD
	DCA I	PTCPR	/FOR PROPER WORD
	TAD	S0	/PLACE CONSTANT IN PROPER LOCATION
	DCA I	PTSPR
	JMP	ARGPP0
/
/	ROUTINE TO INCREMENT POINTERS AND SET UP FOR A PAR IN THE PAGE TABLE
/
ARGPP2, 0
	JMS	PARG5	/INC PT PTRS & ASSMBL IF PASS 2
	TAD	K10
	DCA I	PTCPR
	JMP I	ARGPP2	/RETURN
K6201,	CDF 10

ASMIF1,	0
	TAD	PASS
	SZA CLA
	JMS I	ASM02S		/ASSMBL NOW IF LISTING PASS
	JMS I	INC
	JMP I	ASMIF1

ASM02S,	ASM02
INC,	INCPT

ARGCT,	0
CALLFS=PRSYMP			/TEMP
CALLSW, 0
PARG2,	IFFSUB
CKCLSP,	CKCLS
PARG5=ASMIF1
PARG6,	JMS	LINK
M10,	-10

/ROUTINE TO CHANGE CDF 10 TO CDF *
CDFCHG,	0
	TAD I	PTCPR
	TAD	K1000		/SET CDF * BIT IN P.T.
	DCA I	PTCPR
	TAD I	PTSPR	/CHANGE 6211
	TAD	M10	/TO 6201
	DCA I	PTSPR
	JMP I	CDFCHG
PCALL1=CDFCHG		/TEMP


*1600
/
/	COMMN PSEUDO OPERATION
/
PCOMMN, JMS I	GETSYM	/GET ADDRESS FIELD SYMBOL
	NOP		/NOTHING THERE
	SKP		/SYMBOL THERE
	SKP CLA 	/CONSTANT
	IERROR		/LITERAL
	JMS I	SKIPL
	TAD	LFS
	SNA CLA 	/IS THERE AN LFS
	JMP	COMMN2	/NO ... JUST INCREMENT COUNTERS
	JMS I	OBSYM	/GET POINTERS TO LFS
	LFS
	TAD	USE	/MST USE WORD
	AND	K3	/SAVE SYMBOL LENGTH
	TAD	K440	/ADD CORRECT BITS
	DCA	USE	/FOR NEW MST USE WORD
	TAD	S0	/NO OF COMMON LOCATIONS
	SNA CLA 	/ARE THERE ZERO
	JMP	COMMN1	/YES ... EQUIVALENCE OUTPUT
	TAD	HICOM	/NO ... HIGHEST COMMON LOCATION USED
	TAD	S0	/+SIZE OF THIS BLOCK
	DCA	TEM1	/FOR TENTATIVE NEW HIGHEST
	TAD	TEM1	/ACTUAL ADDRESS
	AND	K7600	/ARE WE OVERFLOWING ONTO THE LAST PAGE
	TAD	M7600
	SZL CLA
	SERROR		/YES ... ERROR
	TAD	HICOM	/LAST COMMON ASSIGNMENT
	IAC		/+1
	DCA	VAL	/GIVES NEW ADDRESS
	TAD	TEM1	/NEW HIGHEST COMMON LOCATION
	DCA	HICOM	/TO PROPER LOC
COMMN0,	TAD	VAL
	JMP I	NULLP	/GO GET NEXT LINE
/
/	EQUIVALENCE GENERATED COMMON OUTPUT
/
COMMN1, TAD	HICOM	/PLACE LAST COMMON ASSIGNMENT
	IAC		/+1
	DCA	VAL	/IN MST AS ADDRESS
	JMP	COMMN0	/EXIT
/
/	NON LOCATION FIELD SYMBOL COMMON ASSIGNMENT
/
COMMN2, TAD	HICOM	/LAST HIGHEST
	TAD	S0	/+CUR ASSIGNMENT
	DCA	HICOM	/FOR NEW HIGHEST
	TAD	HICOM	/NEW HIGHEST
	AND	K7600	/ARE WE OVERFLOWING ONTO THE LAST PAGE
	TAD	M7600
	SZL CLA
	SERROR		/YES ... ERROR
	JMP	COMMN0	/NO ... EXIT
K440,	0440

/TEXT PSUEDO-OP

PTEXT,	TAD	FORFLG
	SMA SZA CLA
	JMP I	DCIL1
	JMS I	GETCHR		/LOOK FOR STRING START
	JMS I	TEST
		SL1-1
		BL1-SL1
	TAD	CHR		/SAVE OPENING DELINEATOR
	CIA
	DCA	DELIN
	DCA	TEXCTR		/CLR CHAR CTR
	TAD	X0		/SAVE AUTO-INDEX TO START OF STR
	DCA	TEXSUB
TEX1,	JMS I	GETCHR		/LOOK FOR END OF STRING
	SNA
TEXERR,	IERROR			/TOO SOON END OF LINE
	TAD	DELIN
	SNA CLA
	JMP	TEX2		/THE END OF THE LINE
	ISZ	TEXCTR		/KEEP STRING TALLY
	JMP	TEX1
TEX2,	JMS I	GETCHR		/MOVE LINE PTR TO CHAR. AFTER DELINEATOR
	CLA
	JMS I	SKIPL
	JMS I	PUSH		/SAVE INFO FOR A MINUTE
	TAD	TEXCTR
	IAC
	CLL RAR			/DIV BY 2
	JMS I	IFFS		/SEE IF STR WILL FIT ON PAGE
	SKP CLA
	JMS I	INI		/HAD TO ASSMBL: RE-INIT PT
	JMS I	POP		/POP LINE INFO
	JMS I	ICPLFS		/PROCESS LFS
	TAD	TEXCTR
	CIA
	DCA	TEXCTR
	TAD	TEXSUB		/RE-INIT STRING INDEX
	DCA	X0
	DCA	BYTE		/SET FOR LEFT BYTE
TEX5,	JMS I	GETCHR
	AND	K77		/EXTRACT 6 BIT
	ISZ	BYTE
	SKP
	JMP	TEX4		/RIGHT BYTE
	CLL RTL
	RTL			/MOVE LEFT
	RTL
	DCA	TXSV
	CMA			/SET PTR TO RT BYTE
	DCA	BYTE
	SKP
TEX4,	JMS	TEXSUB
	ISZ	TEXCTR
	JMP	TEX5		/NOT DONE
	ISZ	BYTE		/CK FOR ODD CHAR LEFT OVER
	SKP			/NO
	JMS	TEXSUB		/YES
	JMP I	POPEXP

TEXSUB,	0
	TAD	TXSV		/COMBINE LEFT & RT BYTES
	DCA I	PTSPR
	TAD	K30		/PAR CONST BITS
	TAD I	PTCPR
	DCA I	PTCPR
	TAD	X0		/SAVE INDEX
	DCA	TXSV
	JMS I	ASIF		/INC PTRS & ASSMBL IF PASS 2
	TAD	TXSV		/RESTOR INDEX
	DCA	X0
	JMP I	TEXSUB

PUSH,	PUSHIN
POP,	POPIN
ASIF,	ASMIF1
IFFS,	IFFSUB
DELIN,	0
TEXCTR,	0
TXSV=S3
BYTE=DELIN



/
/WRITE LINE IF IN PASS 2
/
WLNIF1,	0
	TAD	PASS		/WHICH PASS?
	SZA CLA
	JMS I	WLNP		/LISTING
	JMP I	WLNIF1

/
*2000

/READ & DECODE 1 LINE
/IGNORES NULL LINES & COMMENT LINES
/	EXP=NON-0 IF NO OPERATION ON LINE (CONST, LIT,
/	OR ADDRESS ONLY)
/	SK=NON-0 IF SKIP INSTR.
/	UMIC=NON-0 IF OP CODE IS 6 OR 7
/	IB=NON-0 IF INSTR IS INDIRECT
/	NSGN=NON-0 IF AFS IS # SYMBOL
/	OP=OP CODE
/	LFS=PTR TO LFS IN SYM. TAB., IF ANY
/***	AFS=2 IF CONSTANT PARAMETER OR CONST. AFS***
/***	AFS=1 IF LITERAL PARAMETER OR LIT. AFS***
/	AFS=SYM. TAB. PTR. TO ADDRESS PARAMETER OR AFS
/
DCIL,	0
RDL1,	JMS I	RLNP		/READ IN A LINE
	DCA LFS		/CLR STORAGE FOR LINE INFO
	DCA EXP
	DCA OP
	DCA SK
	DCA IB
	DCA	NSGN
	DCA UMIC
	DCA I	RECTI		/CLR RECOUNT FLAG FOR CPLFS
	ISZ	LINE		/INC LINE COUNT
	ISZ	X0		/DO NOT BACK UP X0
	JMS I GETSYM		/READ 1ST ITEM
	JMP	RDL11		/NULL LINE OR COMMENT
	JMP RDL7		/SYMBOL - POSSIBLE LFS
	JMP	.+3		/SET AFS=2 FOR CONSTANT
RDL3,	JMS I	SLITAB		/PUT LIT ON TAB
	CMA			/AFS=1 FOR LITERAL
RDL2,	TAD	K2
	ISZ EXP		/SET PARAMETER EXPRESSION FLAG
RDL5,	DCA AFS
	JMS I SKIPL		/SKIP TO END OF LINE
	JMP I DCIL		/RETURN
RDL7,	TAD	CHR		/CK FOR COMMA
	TAD	M254
	SZA CLA
	JMP	RDL9		/NO, SHOULD BE SPACE,TAB,CR,OR ;
	JMS I	WHATPP
	SKP
	IERROR			/OP SYMBOL AS TAG
	TAD SYMBOL		/NO, ENTER PTR TO LFS
	DCA LFS
	ISZ	X0		/PROHIBIT FLAGGING COMMA
	JMS I GETSYM		/GET ITEM AFTER LFS
	JMP I PB0		/NULL AFTER LFS IS BSS0
	JMP RDL9		/SYMBOL-OP OR PARAMETER
	JMP	RDL2		/CONSTANT
	JMP RDL3		/LITERAL
RDL9,	JMS I	WHATPP
	JMP RDL4		/NO-MUST BE ADDRESS PARAMETER
	TAD USE		/IS SYMBOLE A PSUEDO-OP
	AND	K40
	SZA CLA		/NO
	JMP RDL18		/YES
	TAD	USE		/IS SYMBOL AN MRI?
	AND	K400
	SNA CLA
	JMP RDL14		/NO-OPR OR I/O INSTR.
	TAD USE		/MRI-PUT OP SKIP BIT
	AND	K20		/INTO SKIP FLAG
	DCA SK
	TAD	VAL
	DCA	OP
	SKP
RDL10,	ISZ IB		/ SET INDIRECT FLAG
	JMS I GETSYM		/READ SYMBOL AFTER MRI
	IERROR			/NOTHING THERE
	JMP RDL12		/SYMBOL
	IAC		/AFS=2 FOR CONST. AFS
	IAC		/AFS=1 FOR LIT.AFS
	JMP RDL5		/SKIP TO END OF LINE

RDL12,	TAD SYMBOL		/CK FOR I
	CIA
	TAD IBTI		/SYM. ADDR-I ADDR
	SNA CLA		/NOT I
	JMP RDL10		/IT IS I
	JMS I	WHATPP
	JMP	.+3
	IERROR			/AFS NOT USER SYMBOL
RDL4,	ISZ	EXP	/ENTER HERE ON ADDRESS PAR.
	TAD	CHR	/CK FOR #
	TAD	M243
	SZA CLA
	JMP	.+4
	ISZ	NSGN	/YES
	JMS I	GETCHR		/PREVENT FLAGGING #
	CLA
	TAD SYMBOL		/SET PTR TO AFS
	JMP RDL5
RDL13,	JMS I	WHATPP
	IERROR			/ELIM USER SYM
	TAD USE		/CK FOR OPR OR I/O INST.
	AND	K4440	/ELIM. MRI, PSUEDO
	SZA CLA		/OK
	IERROR			/ILLEGAL SYMBOL 
RDL14,	TAD USE		/COMPARE NEW MICRO-GRP
	AND K300		/WITH OLD, IF ANY
	SNA
	JMP RDL16		/GRP0 OK WITH ANYTHING
	DCA TEM1		/NEW IS NOT 0
	TAD MGRP		/CK OLD MGP, IF ANY
	SNA		/THERE IS ONE
	JMP RDL15		/0 OK WITH ANY NEW
	CIA		/COMPARE OLD
	TAD TEM1		/WITH NEW
	SZA CLA		/SAME-OK
	IERROR			/ILLEGAL COMBINATION
RDL15,	TAD TEM1		/MICRO-GRP=NEW
	DCA MGRP
RDL16,	TAD VAL		/OR NEW VALUE INTO OLD OP
	CMA		/NOT A
	AND OP		/AND B
	TAD VAL		/+A
	DCA OP		/=A OR B
	TAD USE		/GET NEW SKIP BIT
	AND	K20
	SZA CLA		/NON-SKIP
	ISZ SK		/SET SKIP FLAG
	JMS I GETSYM		/GET NEXT INSTR OF STRING
	JMP	RDL17		/NONE THERE - END OF SRTING
	JMP RDL13		/SYMBOL (AS EXPECTED)
	NOP		/CONST, ILLEGAL
	IERROR		/LIT ILLEGAL
RDL17,	ISZ UMIC	/SET MICRO INST FLAG
	JMP RDL5		/SKIP TO END OF LINE
IBTI,	II
MGRP=UMIC
RLNP,	RLN
PB0,	PBSS2
K4440,	440
K300,	300
WHATPP,	WHATYP
M243,	-243

/NULL LINE OR COMMENT

RDL11,	JMS I	SKIPL
	JMP I	NULLP

/PSUEDO-OP

RDL18,	TAD VAL		/GET PSUEDO-OP ADDRESS
	DCA TEM1		/STORE PTR
	JMP I TEM1		/TO PROPER PSUEDO-OP HANDLER

*2200
/
/END OF LINE PROCESSOR FOR COLLECTION PHASE
/LOOKS FOR SEMI-COLON BEFORE A SLASH
/STAR OR SLASH OR 000 (CR) MEANS NORMAL
/END OF LINE.  SEMI-COLON MEANS WE MUST
/SAVE CURRENT ADDRESS IN LINE BUFFER FOR
/START OF "NEXT" LINE.
/THIS ROUTINE ALSO HAS THE IMPORTANT
/FUNCTION OF WATCHING THE FORTR PSUEDO-OP
/FLAG.  IF FLAG IS ON L72 CAUSES LINE
/TO BE TREATED AS NON-EXISTENT.  L72 MUST
/BE CALLED FOR EVER INSTR. LINE OR PSUEDO-OP
/LINE (EXCEPT END, PAUSE, FORTR) BEFORE
/ACTUAL PROCESSING OF THAT LINE BEGINS.
/
L72,	0
	SKP
	JMS I	GETCHR
	JMS I	TEST
		SL6-1
		BL7-SL6
	IERROR
L72S,	TAD	X0
	DCA	SCOLON
L72X,	TAD	FORFLG		/IF FLG=1 WE ARE SKIPPING
	SMA SZA CLA		/1ST HALF OF FORTRAN OUTPUT
	JMP I	DCIL1
	JMP I	L72

/KLUDGE TO RESET ILC BECAUSE A1 COMES BEFORE UDPAGE IN PASS 2

FIXILC,	0
	TAD	PASS
	SNA CLA
	JMP I	FIXILC
	TAD	PAG
	DCA	ILC
	JMP I	FIXILC



/
/COLLECTION PHASE ROUTINE
/SEARCH PAGE SYMBOL TABLE FOR SYMBOL
/CALLING SEQUENCE:	(ASSUMES SYM.ID.IS IN "SYMBOL")
/		JMS	SPSTB
/		RETURN IF NOT FOUND (HAD TO ENTER IT)
/		RETURN IF FOUND
/THE SEARCH IS AT L31; ENTERING DONE BY L32.
/
SPSTB,	0
	TAD	PSTSZE	/SIZE OF PST
	SZA		/IS IT EMPTY
	JMP	L31	/NO
L32,	TAD	PSTSZE		/IS PST FULL?
	TAD	PSTMAX
	SMA CLA
	SERROR			/YES
	TAD	PSTSZE	/SIZE OF PST*2
	RAL CLL
	TAD	PSTBSE	/+BASE
	DCA	PSTSPR	/GIVES POINTER TO SYMBOL
	ISZ	PSTSZE	/ INCREMENT COUNTER
	TAD	SYMBOL	/PHYSICALLY MOVE SYMBOL
	DCA I	PSTSPR
	TAD	PSTSPR
	IAC		/ADD 1
	DCA	PSTCPR	/FOR CODE WORD POINTER
	TAD	PASS
	SNA CLA
	JMP	L32A		/ASSEMBLY: JUST ZERO CODE WORD
	JMS I	OBSYM		/LISTING
	SYMBOL
	TAD	VAL		/CK IF SYM IS ON PAGE FORWARD REF.
	AND	K7600		/EXTRACT PAGE BITS
	CIA
	TAD	PAG
	SZA CLA
	JMP	L32A		/NOT ON PAGE
	TAD	K4000		/ON PAGE: SET DEFINED BIT
	ISZ	SPSTB		/& SET FOR "FOUND" RETURN
L32A,	DCA I	PSTCPR
	JMP I	SPSTB	/NOT FOUND
/
L31,	CIA		/PLACE - COUNT OF TABLE
	DCA	TEM1	/IN INDEX LOC
	TAD	PSTBSE	/PLACE TABLE BASE
	DCA	TEM2	/IN ADDRESS LOC
L31B,	TAD I	TEM2	/-SYMBOL
	CIA
	TAD	SYMBOL	/+ REQUESTED SYMBOL
	SNA CLA
	JMP	L31A	/FOUND
	ISZ	TEM2	/NOT FOUNE ... INCREMENT ADDRESS
	ISZ	TEM2
	ISZ	TEM1	/OVER
	JMP	L31B	/NO ... TRY AGAIN
	JMP	L32	/YES ... PLACE ON TABLE
L31A,	ISZ	SPSTB	/FOUND ... INDEX FOR EXIT
	TAD	TEM2	/POINTER TO SYMBOL
	DCA	PSTSPR	/TO PROPER LOC
	TAD	PSTSPR	/SYMBOL POINTER
	IAC		/+1
	DCA	PSTCPR	/GIVES CODE POINTER
	JMP I	SPSTB	/EXIT
/
PSTMAX,	-100		/MUST BE (PSTB-PTB)/2



/
/OUTPUT 6 CHARACTER ASCII NAME
/TO BINARY TAPE
/FOR EXTERNAL SYMBOL DEFN.
/USED BY LFSCK (FOR RC=03) & 666 (FOR RC=17)
/OUTPUT GOES VIA TYPE PTR, BUT PTR IS 
/CHANGED TO L66E SO CHAR CAN BE PUNCHED
/& ADDED TO CK.SUM INSTEAD OF TYPED.
/668 IS USED ONLY IN PAS1-
/ASSEMBLY PHASE1
/
L68,	0
	TAD	PASS
	SZA CLA
	JMP I	L68		/EXIT IF LISTING
	TAD	L66B	/FOOL OUTPUT ROUTINE
	DCA	TYPE	/SO IT THINKS PUNCH IS TTY
	DCA	S1
	DCA	S2
	DCA	S3
	TAD	AS0
	DCA	X1
	TAD	SYMBOL	/MST SYMBOL ADDRESS - 1
	DCA	X2	/TO AUTO X2
	TAD	USE	/MST USE WORD
	AND	K3	/SYMBOL LENGTH
	CIA
	DCA	TEM4	/-WORDS TO LOC
	CDF 00
	TAD I	X2	/OBTAIN SYMBOL
	CDF 10
	DCA I	X1
	ISZ	TEM4
	JMP	.-5
	TAD	AS0
	DCA	X2
	TAD	M3
	DCA	TEM4
	TAD I	X2
	JMS I	CTYPE	/PUNCH IT EXPANDED
	ISZ	TEM4	/MORE
	JMP	.-3	/YES
	TAD	L66D	/RESTORE TYPE ROUTINE
	DCA	TYPE
	JMP I	L68
/
/	DUMMY TYPE ROUTINE FOR EST TV DEFINITION
/
T8=SPSTB		/SCRATCH LOC
L66E,	0
	DCA	T8	/SAVE CHAR
	TAD	T8
	TAD	CSUM	/ADD CHAR TO BINARY CHECK SUM
	DCA	CSUM
	TAD	T8
	JMS I	PUNCH	/OUTPUT CHAR ON BINARY TAPE
	JMP I	L66E	/RETURN
L66B,	L66E
L66D,	L64


/
/INITIALIZATION THAT WONT FIT IN "INITA"
/
INITMR,	0
	DCA I	VALPTP
	DCA I	LLFSP
	DCA	LINE
	JMP I	INITMR
VALPTP,	VALPTR
LLFSP,	LLFS

*2400


/
/COLLECTION PHASE ROUTINE.
/SEARCH LITERAL TABLE FOR VALUE IN S0.
/PLACES LITERAL ON TABLE IS NOT THERE.
/OTHERWISE DOES NOTHING.
/
SLTAB,	0
	CLA
	TAD	LTSZE	/SIZE OF TABLE
	SZA		/IS TABLE EMPTY
	JMP	SLITB1	/NO ... SEARCH IT
	TAD	LTBSE	/BASE COLL. PHASE LIT. TABLE)
	TAD	LTSZE	/+DISPLACEMENT
	DCA	TEM1	/GIVES ADDRESS POINTER
	TAD	S0	/PHYSICALLY MOVE LITERAL
	CDF 00
	DCA I	TEM1
	ISZ	LTSZE	/INCREMENT COUNT
	CDF 10
	JMP I	SLTAB	/RETURN
SLITB1, CIA		/PLACE - COUNT
	DCA	TEM1
	CMA
	TAD	LTBSE	/LTBSE-1
	DCA	X1	/TO AUTO X1
SLITB2, CDF 00
	TAD I	X1	/-TABLE
	CDF 10
	CIA
	TAD	S0	/+REQUESTED LITERAL
	SNA CLA 	/SAME
	JMP I	SLTAB	/YES, RETURN
	ISZ	TEM1	/MORE SYMBOLS TO TEST
	JMP	SLITB2	/YES
	JMP	SLTAB+5      /NO


/
/COLLECTION PHASE EQUIVALENCE PROCESSOR
/(FORMERLY CALLED BSS0 PROCESSOR)
/ENTERS SYMBOL ID. IN EQ. TAB
/
PBSS2,	JMS I	SKIPL
	TAD	LFS	/LOCATION FIELD SYMBOL
	SNA CLA		/IS THERE ANY
	JMP I	NULLP		/NO
	CDF 00
	TAD	BSSSW	/ARE WE PROCESSING A BSS 0 SEQUENCE
	SZA CLA
	JMP	.+5	/YES ... SKIP INITIALIZING
	TAD	EQVIPR	/NO ... INITIALIZE 
	DCA	CTPTR	/SET INPUT POINTER TO COUNT LOCATION
	DCA I	CTPTR	/ZERO COUNT
	ISZ	EQVIPR		/INCREMENT INPUT POINTER
	TAD	LFS	/LOCATION FIELD SYMBOL
	DCA I	EQVIPR	/PLACE LFS ON EQUIVALENCE TABLE
	ISZ I	CTPTR	/INCREMENT COUNT
	CDF 10
	JMS I	ICPLFS	/PROCESS IT FOR COLLECTION
	CLA CMA		/REMOVE LFS FROM LFS TABLE
	TAD	LFSPTR
	DCA	LFSPTR
	ISZ	BSSSW	/SET BSS 0 IN PROGRSS SWITCH
	CMA			/REMOVE EXTRA LFS BIT
	TAD I	PTCPR
	AND	K7577X		/REMOVE EXTRA BSS0 BIT
	TAD	K200	/PLACE BSS0 BIT ON PT
	DCA I	PTCPR
	TAD	PSTCPR		/SAVE PST ADDRESS IN CASE NEXT LINE OVERFLOWS
	DCA	EQVBIT
	ISZ	EQVIPR		/INCREMENT POINTER
	JMP I	NULLP	/EXIT FOR NEXT LINE
CTPTR,	EQUTB
LFSBSI,	LFSBSS
K7577X,	7577

/
/ASSEMBLY PHASE EQUIVALENCE PROCESSOR
/EXTRACTS ENTIRE GROUP OF TAGS EQUIVALENCED
/TO SAME ADDRESS FROM TABLE & DEFINES
/THEM BY USING LFSCK FROM LFSBSS ON.
/
ANUMCK,	0
	TAD I	PTCPR	/PT CODE WORD
	AND	K200	/MASK OUT BSS 0 BIT
	SNA CLA		/IS IT A BSS 0 SYMBOL
	JMP I	ANUMCK	/NO ... EXIT
	CMA
	DCA	BANK		/BANK UNKNOWN
	TAD	AANUM7	/CHEAT RETURN ADDRESS
	DCA I	LFSCHK	/SO IT LOOKS LIKE A JMS FROM SOMEWHERE ELSE
	JMS	GNEQ	/GET COUNT
	CIA		/NEGATE
	DCA	OPICTR	/SAVE IN INDEX LOC
	JMS	GNEQ	/GET SYMBOL
	JMP I	LFSBSI	/PROCESS SYMBOL
ANUM7,	JMS I	SPSTAB		/SET DEFINED BIT ON PST IN CASE
	NOP			/THIS WAS CARRIED OVER
	JMS I	PSTD		/THE LAST PAGE
	ISZ	OPICTR	/ANY MORE ?
	JMP	ANUM7-2	/YES
	JMP I	ANUMCK	/EXIT
PSTD,	PSTDEF
AANUM7,	ANUM7
/
/	ROUTINE TO GET NEXT ITEM OFF EQUIVALENCE TABLE
/
GNEQ,	0
	CDF 00
	TAD I	EQVOPR
	ISZ	EQVOPR
	CDF 10
	JMP I	GNEQ
/
/SUBR. TO LIST A LINE IF IN PASS 2
/
/CALLING SEQUENCE:	JMS I	WRITEP
/		JMS I	OUTBIN
/		LOCATION OF WORD TO OUTPUT
/		CONSTANT=RELOC. CODE
/		RETURN
/(CALL TO OUTBN MUST ALWAYS FOLLOW CALL
/TO WRITE.)
/ASSUMES CURRENT PC IS IN "ILC"
/SETS FLAGS FOR PROPER LISTING
/& CALLS WLN TO DO THE DRUDGE WORK.
/
WRITE,	0
	TAD	PASS
	SNA CLA
	JMP I	WRITE		/PASS 1
	ISZ	WRITE
	TAD I	WRITE		/ADDRESS OF VALUE
	DCA	VALUE
	TAD I	VALUE		/GET VALUE
	DCA	VALUE
	ISZ	VFLG
	ISZ	WRITE
	TAD I	WRITE		/GET RELOC. CODE
	DCA	CODE
	TAD	CODE
	SNA
	JMP	WRITE2
	RTR			/CONVERT TO 6BIT
	RAR
	AND	K7
	TAD	K60
	CLL RTL
	RTL
	RTL
	DCA	ADDRES		/TEM SAVE
	TAD	CODE
	AND	K7
	TAD	K60
	TAD	ADDRES
	DCA	CODE
WRITE2,	TAD	ILC		/CURRENT ADDRESS
	DCA	ADDRES
	ISZ	AFLG
	ISZ	LFLG
	JMS I	WLNP		/LIST
	ISZ	WRITE
	JMP I	WRITE
K60,	60
OPICTR=WRITE
CDZSKP,	JMS	CDZSK
*2600
/
/	BLOCK PSEUDO OPERATOR
/
PBSS,	JMS I	GETSYM	/GET NEXT INPUT ITEM
	JMP I	PBSS2I	/NOTHING THERE (BSS 0)
	SKP		/SYMBOL
	SKP CLA		/CONSTANT
	IERROR		/LITERAL
	JMS I	SKIPL
	JMS I	IPSHIN	/SAVE ALL CURRENT INFO
	JMP I	PBSS4I		/CHECK BLOCK SIZE
PBSS5,	JMS 	IFFSUB	/CAN THIS FIT IN CORE
	SKP CLA		/YES
	JMS I	INI	/NO ... INITIALIZE PT POINTERS
	JMS I	IPOPIN	/POP CURRENT INFORMATION
	DCA	BSSSW	/CLEAR BSS0 SWITCH
	JMS I	ICPLFS	/PROCESS CURRENT LFS
	TAD	S0	/-BLOCK CONSTANT
	CIA
	DCA	TEM12	/TO INDEX LOCATION
PBSS1,	TAD	K30	/PAR CONSTANT PT BIT STRUCTURE
	TAD I	PTCPR	/DONT LOSE LFS AND BSS 0 INFORMATION
	DCA I	PTCPR
	JMS I	ASMIF		/DO THEM INDIVIDUALLY IF PASS 2
	ISZ	TEM12	/MORE
	JMP	PBSS1	/YES
	JMP I	POPEXP	/EXIT TO GET NEXT LINE
PBSS2I,	PBSS2
TEM12,	0			/RESRV STORAGE CTR
PBSS4I,	PBSS4

/
/	CPAGE PSEUDO OPERATION
/
PIFF,	JMS I	GETSYM	/GET NEXT INPUT ITEM
	NOP		/NONE THERE
	SKP		/SYMBOL
	SKP CLA 	/CONSTANT
	IERROR		/LITERAL
	JMS I	SKIPL
	JMS I	WLNIF		/LIST IF PASS 2
	TAD	S0	/BINARY CONSTANT
	JMS	IFFSUB	/USE GLOBAL IFF SUBROUTINE
	JMP I	DCIL1	/DIDNT HAVE TO ASSEMBLE PAGE
	JMP I	RSTRTI	/GO INITIALIZE
/
/	IFF SUBROUTINE
/	CALL IS 	TAD PAGE INCREMENT
/			JMS IFFSUB
/			OK RETURN
/			HAD TO ASSEMBLE PAGE RETURN

/FUNCTION:  TO SEE IF GIVEN NO. OF WORDS
/WILL FIT ON CUR. PAGE; IF SO, RETURN
/AT OK RET.; OTHERWISE ASSEMBLE PAGE WE
/HAVE NOW & INIT A NEW PAGE & RET. AT
/SECOND RET. LOC.
/IFFSUB IS USED BY CPAGE,BLOCK &
/SEVERAL OTHER P-OPS
/
/
IFFSUB, 0
	DCA	TEM1	/SAVE INCREMENT
	JMS I	ICPGES	/COMPUTE PAGE SIZE
	TAD	TEM1	/ADD INCREMENT
	TAD	M201	/IS TOTAL .GT. PAGE SIZE (1 EXTRA BECAUSE
	SPA SNA CLA		/PTSZE INCREMENTED BEFORE PSUEDO-OP
	JMP I	IFFSUB	/NO ... RETURN
	CLA CMA 	/YES ... DECREMENT PAGE TABLE SIZE
	TAD	PTSIZ
	SNA		/WATCH FOR AN EMPTY PAGE
	JMP	.+4	/LEAVE THINGS ALONE IF PAGE EMPTY
	DCA	PTSIZ
	JMS I	L55I	/ASSEMBLE THE PAGE
	JMS I	UPDATE
	JMS I	FIXIL
	ISZ	IFFSUB	/INCREMENT FOR EXIT
	JMP I	IFFSUB	/RETURN
IPSHIN, PUSHIN
IPOPIN, POPIN
WLNIF,	WLNIF1
ASMIF,	ASMIF1
RSTRTI,	RSTRT
UPDATE,	UDPAGE
ICPGES=CPGESI
M201,	-201
FIXIL,	FIXILC


/	ERROR ROUTINE
/
K6200,	6200
FATAL,	0

ERRE,	TAD	K6200		/0500
ERRS,	ISZ	FATAL		/SET FATAL ERROR SWITCH
	TAD	K600		/2300
	JMP	.+3
ERRM,	TAD	LFS
	DCA I	LLFSI
	TAD	K400		/1500
ERRI,	TAD	K600		/1100
ERRC,	TAD	K200		/0300
ERRA,	TAD	K100		/0100
	DCA	EFLG
	TAD	PASS
	SZA CLA
	JMP	ERREX		/LISTING PASS
	JMS I	CRLF	/TYPE CRLF
	TAD	EFLG	/TYPE E#
	JMS I	CTYPE	
	TAD	AT
	JMS I	CTYPE
	JMS I	CTYPE	/TYPE 2 SPACES
	TAD I	LLFSI
	DCA	INDEX
	CDF 00
	TAD I	INDEX
	ISZ	INDEX
	AND	K3

	CMA
	DCA	COUNT
	TAD	M3		/SET 6 CHAR PRINT CTR
	DCA	MSCTR
	ISZ	COUNT
	SKP			/NOT DONE YET WITH SYMBOL
	JMP	ERR1		/DONE : SEE IF SPACES NEEDED
	CDF 00
	TAD I	INDEX
	CDF 10
	ISZ	INDEX
	JMS I	CTYPE		/TYPE THE LETTERS OR SPACES
	ISZ	MSCTR
	JMP	.-11
ERR11,	TAD	SPPLUS	/TYPE SPACE +
	JMS I	TYPE
	TAD	LINE	/TYPE LINS FROM LAST LFS
	JMS I	OTYPE
	JMS I	CRLF
ERREX,	TAD	FATAL		/FATAL ERROR?
	SNA CLA
	JMP	.+3		/NO
	HLT
	JMP I	K200		/IF YES GO TO START AFTER HALT
	TAD	PHASE	/WHAT PHASE ARE WE IN
	SZA CLA
	JMP I	ERR2	/ASSEMBLY
	JMP I	NULLP	/COLLECTION
ERR2,	ASM02R

LLFSI,	LLFS
INDEX=S1
COUNT=S2
MSCTR=S3
AT,	0124
SPPLUS,	253

ERR1,	JMS I	CTYPE		/FILL OUT THE REST WITH SPACES
	ISZ	MSCTR
	JMP	.-2
	JMP	ERR11

*3000

/
/ASSEMBLY PHASE ROUTINE TO CHECK FOR A
/LOC. TAG (LFS) & PROCESS IF FOUND.
/FUNCTION: (ASMBLY PHASE 1 - ACTR=0)
/	   (1) DEFINE TAG
/	   (2) OUTPUT VALUE AT PAST OCCURANCES OF
/	  FORWARD REF. TO THIS TAG
/	   (3) CONDENSE OCC. TAB IF POSSIBLE.
/
/	   (ASMBLY PHASE 2 - ACTR=1
/	   (THIS INCLUDES ALL OF PASS 2 AS
/	    ACTR STAYS=1 IN PASS 2)
/	   (1) OUTPUT EXT. SYM. DEFN. ON REL-TAPE
/

LFSCK,	0
	TAD I	PTCPR	/PT CODE WORD
	RAR
	SNL CLA 	/IS THERE A LFS
	JMP I	LFSCK	/NO ... RETURN
	CMA
	DCA	BANK		/BANK UNKNOWN
	TAD	PASS		/MOVE BACK PTR IF IN LISTING PASS
	CIA
	TAD	LFSPTR
	DCA	LFSPTR
	CDF 00
	TAD I	LFSPTR	/ACTUAL LFS
	CDF 10
	ISZ	LFSPTR
LFSBSS,	DCA	LFS
	JMS I	OBSYM	/OBTAIN LFS FROM MST
	LFS
	TAD	ACTR	/WHICH TIME ARE WE ASSEMBLING THIS PAGE
			/ACTR REMAINS 1 DURING PASS2
	SZA CLA
	JMP	L67		/SECOND TIME: NO TEST
	TAD	USE		/CK FOR MULTI DEF.
	AND	K400
	SZA CLA
	MERROR			/YES
	JMP	LFSCK1
L67,	TAD	USE	/MST USE WORD
	AND	K200		/(L67 HAS NO EFFECT IN PASS 2)
	SNA CLA		/IS IT AN ENTRY
	JMP	LFSCK1	/NO
/
/	EXTERNAL SYMBOL DEFINITION
/
	JMS I	OUTBIN	/OUTPUT BINARY DEFINITION
	ILC
	3
	JMS I	L68I	/PUNCH SYMBOL ON TAPE
LFSCK1, TAD	ILC	/CUR ILC
	DCA	VAL	/PLACE ON MST AS DEFINITION
	TAD	USE	/SYMBOL TABLE USE WORD
	AND	K7377	/MASK OUT DEFINED BIT
	TAD	K400	/ADD IN DEFINED BIT
	DCA	USE	/SYMBOL IS NOW DEFINED IN MST
/
/	NOW LETS SEARCH OCCURANCE TABLE TO SEE IF WE
/	CAN CLEAR OFF A FEW
/
	TAD	OTP	/SIZE OF OCCURANCE TABLE
	CMA
	TAD TOPCOR
	SNA
	JMP I	LFSCK	/RETURN IF EMPTY
	CIA
	DCA	TEM1	/PLACE - SIZE IN INDEX LOC
	TAD	OTP	/PLACE TABLE BASE IN TEM2
	DCA	TEM2		/TEM2=PTR TO SYMBOL
	CDF 00
L51,	DCA	L51FLG		/CLR # SWITCH
	ISZ	TEM2
	CMA			/CK 1ST WORD FOR # FLAG
	TAD I	TEM2
	SZA CLA
	JMP	.+4		/NO
	ISZ	L51FLG		/YES, SET SWITCH
	ISZ	TEM2		/MOVE PTR & CTR
	ISZ	TEM1		/PAST EXTRA WORD
	TAD I	TEM2		/- OCCURRING SYMBOL
	CIA
	TAD	SYMBOL	/+SYMBOL JUST DEFINED
	SNA CLA 	/ARE THEY EQUAL
	JMP	.+7
	ISZ	TEM2
L51E,	ISZ	TEM1	/NO ... ARE THERE MORE
	ISZ	TEM1		/(2 WORDS PER OCCURRANCE)
	JMP	L51	/YES
	CDF 10
	JMP I	LFSCK	/NO ... RETURN
/
/	AN OCCURANCE FOUND ... OUTPUT IT
/
	ISZ	TEM2
	TAD I	TEM2	/ACTUAL ADDRESS
	CDF 10
	DCA	TEM4
	JMS I	DUMMY	/OUTPUT ADDRESS AS ORIGIN
	TEM4
	4
	TAD	VAL
	TAD	L51FLG		/ADD 1 IF # REF
	DCA	TEM4
	JMS I	DUMMY	/OUTPUT SYMBOL VALUE AS RELOCATABLE DEF
	TEM4
	1
	CDF 00
/
/	NOW MOVE OCCURANCE TABLE UP 2
/
L51G,	TAD	OTP
	DCA	TEM4		/SAVE
	TAD	TEM2
	DCA	OTP		/RESET
	TAD	L51FLG
	TAD	K2
	CIA
	TAD	TEM2
	CIA
	TAD	TEM4
	SNA
	JMP	L51E		/NOTHING TO MOVE
	DCA	TEM3		/CTR FOR MOVE UP
	TAD	TEM3
	CIA
	TAD	TEM4
	DCA	TEM4		/TO PTR
L51J,	TAD I	TEM4
	DCA I	OTP
	CMA
	TAD	TEM4
	DCA	TEM4
	CMA
	TAD	OTP
	DCA	OTP
	ISZ	TEM3
	JMP	L51J
	JMP	L51E


L68I,	L68
K7377,	7377
TOPCOR,	CORE1
MERROR=JMP I .
		ERRM

/
/	PUNCH ROUTINE
/
L63,	0
	PLS		/SELECT IT
	PSF		/WAIT FOR PUNCH
	JMP	.-1
	CLA		/EXIT WITH CLEAR AC
	JMP I	L63




/
/UPDATE "PAGE" TO NEXT CORE PAGE
/I.E., PAGE =PAGE+200
/
UDPAGE,	0
	CLA
	TAD	PAG		/OLD PAGE SETTING
	TAD	K200		/+SIZE OF ONE PAGE
	DCA	PAG		/FOR NEW PAGE SETTING
	JMP I	UDPAGE		/EXIT

L51FLG=UDPAGE
*3200
/
/	SUBROUTINE TO OUTPUT ASSEMBLY PHASE LITERAL
/	TABLE AND REMEMBER OCCURANCES
/
OAPLT,	0
	TAD	ACTR		/SKIP IT THE 1ST TIME
	SNA CLA
	JMP I	OAPLT
	JMS I	SAVLNI		/PREVENT ANY LINE TYPEOUT
	TAD	LITSIZ	/SIZE OF TABLE
	SNA
	JMP I	OAPLT	/RETURN IF NONE
	CIA
	DCA	ATEM1	/PLACE - SIZE IN LOC
	CLA CMA
	TAD	LITBSE	/BASE - 1
	DCA	X2	/TO AUTO 12
	TAD	APMSW	/ARE WE IN AUTO PAGING MODE
	SZA CLA
	JMP	.+3	/NO ... OK
	TAD	PGEESC	/YES ... SUBRTACT SIZE OF PAGE ESCAPE
	RAR CLL 	/DIVIDED BY 2
	TAD	LITSIZ		/& SUBTR. LITSIZ
	CIA
	DCA	LITPTR		/TEM SAVE
	TAD	LITPTR
	TAD	PAG	/INITIALIZE PAGE ADDRESS
	TAD	K200
	DCA	ILC
	TAD	LITSIZ		/INIT LIT TBL PTR
	CLL RAL			/(MULT BY 2)
	TAD	LITBSE
	DCA	LITPTR
	IAC
	SKP
/
L52,	ISZ	ILC		/INC PAGE LOC
	TAD	M3	/DECREMENT LIT TBL PTR
	TAD	LITPTR
	DCA	LITPTR
	CDF 00
	TAD I	LITPTR	/CODE
	DCA	ATEM2
	ISZ	LITPTR
	TAD I	LITPTR	/SYMBOL OR LITERAL
	DCA	ATEM3
	CDF 10
	CLA CMA
	TAD	ATEM2	/IS CODE 1 ... LITERAL
	SZA CLA
	JMP	L53	/NO ... SYMBOL
	JMS I	ILC4P	/YES ... OUTPUT PAGE ADDRESS AS ORIGIN
	JMS I	WRITEP
	JMS I	OUTBIN	/OUTPUT LITERAL WITH NO RELOCATION
	ATEM3
	0
L52A,	ISZ	ATEM1	/MORE
	JMP	L52	/YES
	ISZ	ILC		/SET FOR ESCAPE
	JMP I	OAPLT	/NO ... RETURN
L53,	JMS I	OBSYM	/OBTAIN SYMBOL FROM MST
	ATEM3
	TAD	USE	/MST USE WORD
	AND	K400	/IS SYMBOL DEFINED
	SNA CLA
	JMP	L53A	/NO ... OCCURANCE
	JMS I	ILC4P	/YES ... OUTPUT ORIGIN
	TAD	ATEM2
	AND	K4
	SZA CLA
	IAC			/ITS A #
	TAD	VAL	/ACTUAL VALUE
	DCA	ATEM3	/TO DIRRECTLY ADDRESSABLE LOC
	JMS I	WRITEP
	JMS I	OUTBIN	/OUTPUT VALUE
	ATEM3
	1		/RELOCATABLE
	JMP	L52A	/TRY MORE
L53A,	TAD	ILC
	DCA	ATEM4
	JMS	L53B	/PLACE ON OCCURANCE TALBE
	JMP	L52A	/TRY MORE
/
/	SUBROUTINE TO CREATE AN OCCURANCE IN OCCURANCE TABLE
/
L53B,	0
	TAD	OTP
	CIA CLL
	IAC			/ALLOW FOR # FLAG
	TAD	STT	/+TOP OF MST
	SZL CLA 	/OVERFLOW?
	SERROR		/YES ... OUT OF CORE
	TAD	M2
	TAD	OTP	/OT SIZE - 2
	DCA	OTP	/GIVES ADDRESS ON OCCUR TABLE
	TAD	OTP
	DCA	X1
	CDF 00
	TAD	ATEM3	/SYMBOL
	DCA I	X1	/TO OCCUR TABLE
	TAD	ATEM4	/PAGE ADDRESS
	DCA I	X1	/TO OCCUR TABLE
	TAD	ATEM2		/CK FOR #
	AND	K4
	SNA CLA
	JMP	.+6		/NO
	IAC			/SET FLAG WORD
	DCA I	OTP
	CMA			/MOVE DOWN PTR
	TAD	OTP		/PAST EXTRA WORD
	DCA	OTP
	CDF 10
	JMP I	L53B	/TRY MORE
/
ATEM1,	0
ATEM2,	0
ATEM3,	0
ATEM4,	0
SAVLNI,	SAVLIN
LITPTR,	0

PFORT,	ISZ	FORFLG		/SET TO 1 FOR 1ST PASS THRU FORTRAN CODE
	NOP			/END PSUEDO SETS IT TO -1 TO NULLIFY
	JMS I	SKIPL		/SO BACK TO 0 FOR 2ND PASS
	JMP I	NULLP

/
/DO SOME WORK FOR L61A
/
L61C,	DCA	TEM2		/SAVE 6-BIT CODE
	TAD	TEM2
	AND	K40
	SNA CLA
	TAD	K100		/ADD CORRECT LEADING BITS
	TAD	K200
	TAD	TEM2		/ADD CHAR BITS
	JMP I	L61DP
L61DP,	L61D
ILC4P,	ILC4

*3400
/
/	ROUTINE TO PUNCH WORD AND RELOCATION BITS ON TAPE
/	CALL IS
/	JMS	OUTBN
/	ADDRESS OF WORD
/	BITS
/
OUTBN,	0
	CLA CLL
	TAD I	OUTBN	/ADDRESS OF WORD
	DCA	OUT1
	ISZ	OUTBN
	TAD I	OUTBN	/RELOCATION BITS
	RTL		/SHIFT LEFT 4
	RTL
	DCA	OUT2	/SAVE
	TAD	PASS
	SZA CLA
	JMP	OUTEX
	TAD I	OUT1	/ACTUAL WORD
	DCA	OUT1	/MUST DO THIS SINCE WE DO A JMS OUTBN;CSUM;10
	TAD	OUT1	/AT LOC. PCSM, AND OTHERWISE CSUM WOULD CHANGE AFTER CALL TO SUM.
	RTL		/ROTATE HIGH 4 BITS TO LOW
	RTL
	RAL
	AND	K17	/MASK
	TAD	OUT2	/ADD REL BITS
	JMS	SUM	/ADD TO CHECK SUM
	JMS I	PUNCH	/PUNCH IT
	TAD	OUT1	/REMAINDER OF WORD
	AND	K377	/MASK TO 8 BITS
	JMS	SUM	/ADD TO CHECK SUM
	JMS I	PUNCH	/PUNCH IT
OUTEX,	ISZ	OUTBN	/INDEX FOR EXIT
	JMP I	OUTBN	/RETURN
SUM,	0
	DCA	TSUM
	TAD	CSUM
	TAD	TSUM
	DCA	CSUM
	TAD	TSUM
	JMP I	SUM
TSUM=NSGN
OUT1=IB
OUT2=TEM5
K377,	377
K17,	17
/
/	ROUTINE TO SEARCH ASSEMBLY PHASE LITERAL TABLE
/	FOR 2 WORD ENTRY IN S0-S1
/	PLACES ON TABLE IF NOT THERE
/	RETURNS PAGE ADDRESS IN AC
/
SRALT,	0
	CLA
	DCA	TEM2	/ZERO SEARCH COUNTER
	CDF 00
	TAD	LITSIZ	/NO OF ENTRYS
	SZA
	JMP	L40	/NON ZERO ... SEARCH
L39,	TAD	LITSIZ	/NO OF ENTRYS - 1
	RAL CLL 	/MULTIPLY BY 2
	TAD	LITBSE	/ADD BASE OF TABLE
	DCA	TEM1	/GIVES ADDRESS OF NEW ENTRY
	ISZ	LITSIZ	/INCREMENT COUNT
	TAD	S0	/FIRST WORD
	DCA I	TEM1	/TO TABLE
	ISZ	TEM1	/INCREMENT ADDRESS
	TAD	S1	/SECOND WORD
	DCA I	TEM1	/TO TABLE
	TAD	LITSIZ	/ENTRY NO

/	COMPUTE PAGE ADDRESS FROM DISPLACEMENT IN TABLE
/	AND STATUS OF AUTOMATIC PAGING MODE SWITCH AND SIZE OF PAGE
/	ESCAPE REQUIRED
/
L40A,	DCA	TEM1	/SAVE LOCATION IN TABLE
	TAD	PASS
	SZA CLA
	JMP	L40C		/LISTING
	TAD	APMSW	/ARE WE IN AUTOMATIC PAGING MODE?
	SNA CLA
	TAD	PGEESC	/YES - COUNT ESCAPE WORDS
L40DR,	CLL RAR		/(OVER 2)
L40D,	TAD	TEM1	/NO ... COMPUTE PAGE ADDRESS
	CIA		/BY STRAIGNT COMPLEMENTATION METHOD
	AND	K377	/MASK
	CDF 10
	JMP I	SRALT	/EXIT
			/FOR AUTO PAGING MODE

L40,	CIA
	DCA	TEM1	/- NO OF ENTRYS TO LOC
	CLA CMA
	TAD	LITBSE	/BASE OF TABLE - 1
	DCA	X1	/TO AUTO 10
L41,	ISZ	TEM2	/INCREMENT SEARCH COUNTER
	TAD I	X1	/- FIRST WORD FROM TABLE
	CIA
	TAD	S0	/+FIRST COMP WORD
	SZA CLA
	JMP	L40B	/NO MATCH
	TAD I	X1	/-SECOND TABLE WORD
	CIA
	TAD	S1
	SZA CLA
	JMP	.+4	/NO MATCH
	TAD	TEM2	/MATCH ... CTR TO AC
	JMP	L40A	/RETURN
L40B,	ISZ	X1	/INCREMENT FOR NO SECOND COMPARISON
	ISZ	TEM1	/OVER
	JMP	L41	/NO ... TRY MORE
	JMP	L39	/YES ... PLACE ON TABLE
L40C,	CDF 10
	TAD I	REDUCP		/GET PAGE ESC COMPUTED BY A1
	JMP	L40DR
REDUCP,	REDUCE

/
/	HAS COMMON BEEN PUNCHED YET SUBROUTINE

/IF IT HAS ALREADY BEEN PUNCHED, EXIT
/IF NOT, PUNCH IT & SET FLAG
/THIS ROUTINE IS CALLED ONLY ONCE PER PROGRAM
/BUT IT COULD BE CALLED FROM ANY OF SEVERAL PLACES
/
HCBPS,	0
	TAD	CPSW	/COMMON PUNCHED SWITCH
	SNA CLA		/HAS IT BEEN PUNCHED
	JMP I	HCBPS	/YES ... RETURN
	DCA	CPSW	/NO ... CLEAR SWITCH
	JMS I	OUTBIN	/AND PUNCH HIGHEST COMMON ASSIGNED
	HICOM
	12
	JMP I	HCBPS	/EXIT

DUMSUB,	JMS	DUMS


/
/INCREMENT PAGE TABLE PTRS
/TO PREPARE FOR NEXT INSTRUCTION (OR PARAMETER)
/
INCPT,	0
	ISZ	PTSZE	/INCREMENT PAGE TABLE SIZE
	JMS I	ISZPT2
	DCA	EQVBIT		/CLR
	DCA I	PTCPR	/INITIALIZE PAGE TABLE CODE WORD
	DCA I	PTSPR	/INITIALIZE PAGE TABLE SYMBOL WORD
	CDF 00
	DCA I	PTOPR	/INITIALIZE PT OP CODE POINTER
	CDF 10
	TAD	CURSKP	/MOVE CURRENT SKIP INSTRUCTION INDICATOR
	DCA	LSTSKP	/TO LAST INSTRUCTION SKIP INDICATOR
	TAD	BANK	/MOVE CURRENT BANK
	DCA	LSTBNK	/TO LAST BANK
	JMP I	INCPT	/RETURN
ISZPT2,	ISZPT
//
//FOLLOWING CODE MOVED HERE TO MAKE ROOM FOR V03 IN ASME3
ASMEXT,	JMS I	OUTSKP		/YES, OUTPUT SKP
	TAD	ILC		/GET PG.LOC.PTR.
	AND	K177
	TAD	K5204		/OUTPUT JMP .+4
	DCA	TEM1
	JMP I	.+1
	REEASM
K5204, 5204


*3600

/	ABSYM PSEUDO OPERATOR
/
PABSYM,	TAD	K400
	JMS	DEFSUB
	CLA
	JMP	DEF1

/SKPDF & OPDEF PSUEDO-OPS


SKPDEX,	TAD	K20	/PUT IN SKIP BIT
OPDEX,	TAD	K3010	/STANDARD OP BITS
	JMS	DEFSUB
	CLL
	AND	K7000	/CK TYPE OF INST
	TAD	K2000
	SNA CLA
	JMP	DEF1	/IOT
	SNL
	JMP	DEF3	/MRI
	TAD	S0	/OPR, BUT WHICH GRP?
	AND	K401
	CLL RAR
	SNA CLA
	JMP	DEF2	/GRP1
	SZL
	TAD	K100	/GRP3
	TAD	K200	/GRP2
DEF1,	TAD	TEM5
	DCA	USE
	TAD	S0
	DCA	VAL
	TAD	VAL
	JMP I	NULLP
DEF2,	TAD	K100
	JMP	DEF1
DEF3,	TAD	K400
	JMP	DEF1
K401,	401
K3010,	3010


/
/UTILITY FOR PABSYM & OPDEX
/CALL WITH MST CODE WORD EXCEPT BITS 10-11
/IN AC. EXITS WITH SYMBOL VALUE
/AS DEF. BY SOURCE TAPE IN S0 & IN AC.
/
DEFSUB,	0
	DCA	TEM5
	JMS I	GETSYM	/GET THE SYMBOL NAME
	JMP	DEFERR	/NULL
	JMP	.+3	/SYMBOL
K7000,	NOP
	JMP	DEFERR	/CONST. OR LIT.
	TAD	S0	/ADD IN SYM LENGTH
	TAD	TEM5
	DCA	TEM5
	JMS I	GETSYM	/GET VALUE
	NOP		/NULL
	SKP		/SYMBOL
K7410,	SKP		/CONST
DEFERR,	IERROR		/LIT.
	JMS I	SKIPL
	TAD	S0	/VALUE
	JMP I	DEFSUB

/
/OCTAL TYPEOUT
/CALLING SEQUENCE:	TAD	(OCTAL#)
/			JMS	L62
/			RET.	AC=0
/

L62,	0
	CLL RAL		/PUSH THRU LINK
	DCA	TEM1
	TAD	M4	/SET CTR
	DCA	TEM2
L62A,	TAD	TEM1
	RTL
	RAL
	DCA	TEM1
	TAD	TEM1
	AND	K7
	TAD	K260
	JMS I	TYPE
	ISZ	TEM2
	JMP	L62A
	JMP I	L62
M4,	-4
K260,	0260

/
/DUMMY OUTPUT ROUTINE
/REPLACES OUTBN DURING ASMBLY PHASE 1
/CALLING SEQUENCE:	JMS	DUMMY
/			ADDR. OF ARG
/			RELOC. CONST.
/			RETURN
/NOTE: SAME CALLING SEQ. AS OUTBN
/
DUM,	0
	CLA CLL
	ISZ	DUM	/INDEX FOR PROPER EXIT
	ISZ	DUM	/INDEX FOR PROPER EXIT
	JMP I	DUM
/
/	ROUTINE TO SEARCH EXTERNAL SYMBOL TABLE
/	FOR CUR SYMBOL - RETURNS EXTERNAL SYMBOL
/	NUMBER IN AC - PLACES SYMBOL ON TABLE
/	AND OUTPUTS BIN CODE FOR TV IF NOT ON TABLE
/
L66,	0
	TAD	ESTSIZ		/IS TABLE FULL?
	TAD	M100
M100,	SMA CLA
	SERROR			/YES
	TAD	ESTSIZ	/SIZE OF EST
	SZA		/IS TABLE EMPTY
	JMP	L66A1	/NO ... SEARCH IT
L66A3,	CLA CMA 	/YES ... PLACE SYMBOL ON IT
	ISZ	ESTSIZ	/INCREMENT TABLE SIZE
	TAD	BSEEST	/BASE
	TAD	ESTSIZ	/+SIZE
	DCA	TEM1	/GIVES ADDRESS OF NEW ENTRY
	TAD	SYMBOL	/PHYSICALLY PLACE ON TABLE
	CDF 00
	DCA I	TEM1
	CDF 10
	TAD	USE	/MST CODE WORD
	AND	K403A	/SAVE LENGTH AND DEFINITION BIT
	TAD	K2000	/ADD EXTERNAL BITS
	DCA	USE
	JMP	L66A	/GO TO PUNCH TV DEF
L66A1,	CIA
	DCA	TEM2	/PLACE -SIZE IN INDEX LOC
	DCA	TEM3	/ZERO COUNT
	CLA CMA
	TAD	BSEEST	/BASE OF EST - 1
	DCA	X1	/TO AUTO X1
L66A2,	ISZ	TEM3	/INCREMENT COUNT LOC
	CDF 00
	TAD I	X1	/-TABLE SYMBOL
	CDF 10
	CIA
	TAD	SYMBOL	/+ CUR SYMBOL
	SNA CLA 	/COMPARE
	JMP	.+4	/SAVE
	ISZ	TEM2	/NOT SAME ... ANY MORE
	JMP	L66A2	/YES ... KEEP TRYING
	JMP	L66A3	/NO ... PLACE ON TABLE
	TAD	TEM3	/PLACE COUNT IN AC
	JMP I	L66	/RETURN
/
/	OUTPUT BINARY EXTERNAL SYMBOL
/
	HCBPS
L66A,	JMS I	.-1	/CHECK TO SEE IF COMMON HAS BEEN PUNCHED
	JMS I	OUTBIN	/TV DEF FOR 1 SYMBOL
	K1
	17
	JMS I	L62A1	/PUNCH ASCII CHARS
	TAD	ESTSIZ	/EST NO TO AC
	JMP I	L66	/RETURN
L62A1,	L68
K403A,	403
K1,	1

*4000



/
/SYMBOL TABLE LISTING ROUTINE
/TYPES TABLE FROM "STTP" UP
/WITH NAME-VALUE-FLAG
/POSSIBLE FLAGS ARE:  EXT, COM, UNDF, ABS, OP
/FLAGS TYPED BY "STFT"
/TABLE LISTED ALPHABETICALLY WITH NUMERIC
/CHARACTERS .GT. ALPHABETIC
/

PRSYM,	0
	DCA	PFLG		/CLR PRSYM-PASS FLAG
	TAD I	LSTDEP
	SNA CLA
	JMP	.+3
	TAD	PUNCH		/LIST ON H.S. PUNCH
	DCA	TYPE
	JMS I	CRLF
PRS1,	TAD	PST		/INIT SPTR AT TOP OF PERM. S.T.
	DCA	SPTR
	TAD	M3		/FILL S1,S2,S3 WITH 7777'S (MAX)
	DCA	ALEN
	TAD	APTR
	DCA	X1
	CMA
	DCA I	X1
	ISZ	ALEN
	JMP	.-3
	TAD	K3		/AND LENGTH=3
	DCA	ALEN
	DCA	FOUND		/CLR EXIT FLAG
PRS2,	TAD	STT		/HAS SEARCH HIT END OF TABLE?
	CIA
	TAD	SPTR
	SNA CLA
	JMP	PRS7		/YES, USE THE A-SYM WE HAVE
	JMS I	OBSYM		/NO, GET NEXT MST ENTRY
		SPTR
	TAD	BCODE		/EXTRACT LENGTH
	AND	K3
	DCA	BLEN
	TAD	BPTR		/INDEX NEW ENTRY
	DCA	X2
	TAD	BLEN		/SET ENTRY CTR
	CIA
	DCA	BCTR
	TAD	ALEN		/SET A-SYM CTR
	CIA
	DCA	AACTR
	TAD	APTR		/INDEX A-SYM
	DCA	X1
	TAD	PFLG		/IS THIS THE FIRST TIME THRU THE TABLE?
	SZA CLA
	JMP	PRS3		/NO
	TAD	BCODE		/YES, CLR ENTRY BIT 0
	AND	K3777		/(THE HAS-BEEN-PRINTED FLAG)
	DCA	BCODE
PRS3,	TAD	BCODE		/HAS THIS SYMBOL BEEN PRINTED ALREADY?
	SPA CLA
	JMP	PRS6		/YES, IGNORE IT
PRS4,	TAD I	X1		/NO, COMRARE A-SYM WORD
	CIA CLL
	CDF 00
	TAD I	X2		/WITH B-SYM WORD
	CDF 10
	SNA
	JMP	.+4		/MATCH SO FAR
	SNL CLA
	JMP	PRS5		/A-SYM WORD IS BIGGER-- USE B-SYM
	JMP	PRS6		/VICE-VERSA
	ISZ	AACTR		/IS A-SYM DONE?
	SKP			/NO
	JMP	PRS6		/YES, STICK WITH A-SYM
	ISZ	BCTR		/IS B-SYM DONE
	JMP	PRS4		/NO, TRY NEXT WORD
PRS5,	ISZ	FOUND		/YES, B-SYM IS NEW A-SYM
				/SET CONTINUE FLAG
	TAD	BPTR		/INDEX B-SYM
	DCA	X2
	TAD	APTR		/CLR STORAGE FOR NEW A-SYM
	DCA	X1
	DCA I	X1
	DCA I	X1
	DCA I	X1
	TAD	APTR		/RESET A-SYM INDEX
	DCA	X1
	TAD	BLEN		/CTR FOR TRANSFER
	CIA
	DCA	ALEN
	CDF 00
	TAD I	X2		/MOVE B-SYM TO A-SYM
	CDF 10
	DCA I	X1
	ISZ	ALEN
	JMP	.-5
	TAD	BLEN		/NEW LENGTH
	DCA	ALEN
	TAD	BVAL		/NEW VALUE
	DCA	AVAL
	TAD	BPTR		/NEW PTR
	DCA	ASAV
PRS6,	TAD	BPTR		/MOVE SPTR TO NEXT MST ENTRY
	TAD	BLEN
	TAD	K2
	DCA	SPTR
	JMP	PRS2		/CONTINUE SEARCH
PRS7,	TAD	FOUND		/HAS ANOTHER SYMBOL BEEN FOUND?
	SNA CLA
	JMP	PRS8		/NO, EXIT
	JMS I	OBSYM		/YES
	ASAV
	TAD	USE
	TAD	K4000
	DCA	USE		/SET HAS-BEEN-PRINTED BIT
	ISZ	PFLG		/SET PASS FLAG
	JMS I	CRLF		/POSITION PRINT
	TAD	APTR		/INDEX SYMBOL
	DCA	X1
	TAD	M3		/SET CTR
	DCA	ALEN
	TAD I	X1		/PRINT SYMBOL
	JMS I	CTYPE
	ISZ	ALEN
	JMP	.-3
	JMS I	CTYPE		/PRINT 2 SPACES
	TAD	AVAL		/PRINT VALUE
	JMS I	OTYPE
	TAD	USE		/MOVE TYPE BITS TO LOW AC
	RTL			/& DEF. BIT TO LINK
	RTL
	JMS I	STFTI		/TYPE FLAGS IF ANY
	JMP	PRS1		/LOOK FOR ANOTHER SYMBOL TO PRINT

PRS8,	JMS I	CRLF
	JMS I	CRLF
	JMP I	PRSYM


STFTI,	STFT
ASAV=UMIC
PFLG=TEM3
PST,	STTP			/TOP OF PERMANENT SYMBOL TABLE
ALEN=S0
APTR=AS0
BPTR=SYMBOL
BVAL=VAL
BCODE=USE
FOUND=TEM4
SPTR=TEM5
BLEN=LFS
BCTR=OP
AACTR=IB
AVAL=AFS
K3777,	3777
LSTDEP,	LSTDEV


*4200

/
/ROUTINE TO PUSH DOWN CUR.LINE FOR NEXT PAGE.
/SAVES ENTIRE LIST OF VITAL INFO
/(LFS, OP, IB,...,BANK, S0) IN TEMP.LOCS
/(TLFS, TOP, TIB,..., TS0)
/BOTH LISTS MUST BE KEPT IN SPECIFIED
/ORDER.
/IF THERE IS AN LFS ON LINE MUST MARK IT
/NO-LONGER-DEFINED-ON-PAGE IN PST.
/

PUSHIN, 0
	TAD	LFS	/IS THERE AN LFS
	SNA CLA
	JMP	PSHIN2	/NO
	JMS I	OBSYM
	LFS
	JMS I	SPSTAB	/GET ITS POINTERS TO THE PAGE SYMBOL TABLE
	NOP
	TAD I	PSTCPR	/KILL THE DEFINED BIT
	AND	K3777A
	DCA I	PSTCPR	/SET PAGE SYMBOL TABLE CODE WORD OFF PAGE
PSHIN2,	JMS	PUSHER
		LFS-1
		TLFS-1
	JMP I	PUSHIN	/RETURN
/
/	ROUTINE TO POP UP A PUSHED DOWN INSTRUCTION
/
POPIN,	0
	CLA
	JMS	PUSHER
		TLFS-1
		LFS-1
	JMP I	POPIN	/RETURN
TLFS,	0	/KEEP THIS LIST ORDERED AS GIVEN
TOP,	0
TIB,	0
TAFS,	0
TUMIC,	0
TNSGN,	0
TEXP,	0
TSKZ,	0
TBANK,	0
TS0,	0


/
/TRANSFER ANY LIST OF 10 (12 OCTAL) ITEMS
/FROM ONE LIST TO ANOTHER
/CALL SEQ.:	JMS	PUSHER
/		ADDR-1 OF FROM-LIST
/		ADDR-1 OF TO-LIST
/		RET.
/

PUSHER,	0
	TAD	M12A
	DCA	TEM1		/CTR
	TAD I	PUSHER
	DCA	X1		/INDEX FROM LIST
	ISZ	PUSHER
	TAD I	PUSHER
	DCA	X2		/INDEX TO LIST
	TAD I	X1
	DCA I	X2
	ISZ	TEM1
	JMP	.-3
	ISZ	PUSHER
	JMP I	PUSHER
M12A,	-12
K3777A,	3777
/RETRN PSUEDO-OP
/
PRTN,	JMS I	GETSYM	/GET NEXT INPUT ITEM
	SKP		/NOTHING
	JMP	.+3	/SYMBOL
	NOP		/CONSTANT
	IERROR		/LITERAL
	JMS I	SKIPL
	JMS I	SREST	/PLACE SYMBOL ON EXTERNAL SYMBOL TABLE
	DCA	PRTN0	/SAVE SYMBOL ID
	JMS	PUSHIN	/PUSH LFS INFO IN CASE OF PAGE ASSEMBLY
	TAD	K2	/SET AC TO 2
	JMS I	PRTN1	/ARE THERE 2 LOCATIONS ON THIS PAGE
	SKP CLA 	/YES
	JMS I	INI	/NO ... HAD TO ASSEMBLE PAGE ... INITIALIZE PT
	JMS	POPIN	/POP LFS INFO FROM PAGE PUSH LIST
	JMS I	ICPLFS	/PROCESS ANY LFS
	TAD I	PTCPR	/PT CODE WORD WITH POSSIBLE LFS BIT
	TAD	K30	/ADD SPECIAL RELOCATION BIT
	DCA I	PTCPR	/PLACE PROPER CODE WORD ON PT
	TAD	DOTRTN
	DCA I	PTSPR	/PLACE JMS .RTN INSTRUCTION IN PT SYMBOL WORD
	JMS I	PRTN3	/INCREMENT PT POINTERS
	TAD	K130	/PROPER BIT PATTERN
	DCA I	PTCPR	/TO PT CODE WORD
	TAD	PRTN0	/PLACE EXTERNAL SYMBOL NUMBER ON PT
	DCA I	PTSPR	/AS SYMBOL WORD
	JMS I	PRTN3	/INCREMENT PT POINTERS
	JMP I	POPEXP	/EXIT FOR NEXT LINE
DOTRTN, JMS	RTN
PRTN0,	0
PRTN1,	IFFSUB
PRTN3,	ASMIF1

/
/	@PAUSE@ PSEUDO OPERATION
/
PPAUSE,	JMS I	WLNIFI		/LIST IF PASS 2
	CLA HLT 	/WAIT FOR OPERATOR ACTION
	RFC		/SELECT READER
	JMS I	INITRP
	JMS I	SKIPL
PPAUS1,	CMA		/WE REACH THIS ONLY IF FORFLG. LE. 0(ALSO COME FROM *PEND*)
	DCA	FORFLG	/SHUT OFF FORTR IN CASE GUY
			/HAS STARTED HIS TAPE IN
			/THE MIDDLE
	JMP I	DCIL1	/RETURN FOR NEXT LINE

WLNIFI,	WLNIF1


/
/OVERAL ASSEMBLY INITIALIZATION
/
INITA,	0
	CDF 10
	DCA I	FATALP
	JMS I	CRLF
	JMS I	CRLF
	TAD	PEB
	DCA I	PEPTRP
	JMS	PUSHER	/INIT HICOM, PAGE, ESTSIZ, EQVBIT & APMSW ETC
		K777-1
		HICOM-1
	JMS I	INITRP
	TAD	PASS
	SZA CLA
	JMP I	INITA
	DCA	SYMBOL		/PROTECT FROM RUSVL
	JMS I	INITMP
	DCA	CSUM
	TAD	K10		/SET PUSH CTR=-2
	JMS	PUSHER	/INIT OTP & STP
		OTPR-1
		OTP-1
	JMS I	LEADI
	JMP I	INITA
OTPR,	CORE1-1		/KEEP STTR IMMEDIATELY AFTER OTPR
STTR,	STTP
/***** KEEP ITEMS SO INCLOSED IN GIVEN ORDER
K777,	177
	200
	0
	0
	0
	1
	1
	0
	0
	0
/******************
INITRP,	INITR
FATALP,	FATAL
PEPTRP,	PEPTR
LEADI,	LEADER
PEB,	PEBSE
INITMP,	INITMR
*4400
/
/	ROUTINE TO SEARCH SYMBOL TABLE FOR SYMBOL IN S0-S3
/	PLACES SYMBOL ON TABLE IF NOT THERE
/	CALL IS
/	JMS SRSYM
/	NOT FOUND EXIT
/	FOUND EXIT

/RETURNS WITH SYMBOL CODE BITS IN "USE"
/SYMBOL VALUE (0 IF NOT DEFINED)
/IN "VAL"
/& PTR TO SYM.TAB. ENTRY IN "SYMBOL"
/THE LATTER ADDRESS IS REFERRED TO HERE IN
/AS THE SYMBOL "ID"
/SRSYM CALL RUSVL TO STORE USE & VAL
/OF LAST REFERENCED SYMBOL IN MST
/IN CASE THEY HAVE BEEN CHANGED
/IN THE MEANWHILE.

/
SRSYM,	0
	JMS	RUSVL
	TAD	MST		/START AT SYM. TAB. BASE
SRS1,	DCA	SYMBOL		/SET PTR. TO NEXT ENTRY
	TAD	STT		/COMPARE PTR. WITH SYM. TAB. TOP
	CIA
	TAD	SYMBOL
	SNA CLA			/CONTINUE SEARCH
	JMP	SRS2		/NAME NOT IN TABLE ENTER IT
	CDF 00
	TAD I 	SYMBOL		/GET ENTRY CODE WORD
	CDF 10
	AND	K3		/EXTRACT SYMBOL LENGTH
	DCA	TEM2
	TAD	TEM2
	CIA			/NEGATE FOR COMPARE & CTR.
	DCA	TEM1
	TAD	TEM1		/COMPARE ENTRY & LOOK-UP SYMBOL LENGTHS
	TAD	S0
	SZA CLA			/SAME LENGTH; COMPARE LETTERS
	JMP	SRS5		/NOT SAME; GO TO NEXT ENTRY
	TAD	AS0		/AUTO-INDEX LOOP-UP SYMBOL
	DCA	X1
	TAD	SYMBOL		/AUTO-INDEX TABLE ENTRY
	DCA	X2
SRS3,	CDF 00
	TAD I 	X2		/GET TABLE ENTRY CHAR. PAIR
	CIA
	CDF 10
	TAD I 	X1		/COMPARE LOOK-UP SYMBOL CHAR. PAIR
	SZA CLA			/SAME
	JMP	SRS5		/NO MATCH
	ISZ	TEM1		/CK SYM. LEN. CTR.
	JMP	SRS3		/NOT DONE, TRY NEXT CHAR. PAIR
SRS4,	JMS	SUSVL		/GET USE & VAL WORDS
	JMP I 	SRSYM

SRS5,	TAD	SYMBOL		/PTR TO LAST ENTRY
	TAD	K2		/+2 FOR USE & VAL WORDS
	TAD	TEM2		/+ENTRY SYMBOL LENGTH
	JMP	SRS1		/=PTR TO NEXT ENTRY
/
/CURRENT SYMBOL NOT ON TABLE ... PLACE IT THERE
/

SRS2,	TAD	OTP		/WILL NEW ENTRY FIT BELOW
	CIA CLL			/OCCURANCE TABLE?
	TAD	SYMBOL
	TAD	S0
	SZL CLA			/0 LINK=YES
	SERROR		/NO, SYMBOL TABLE OVERFLOW
	TAD	S0		/ENTRY CODE WORD = SYM. LEN.
	TAD	K1000		/+REL BIT
	CDF 00
	DCA I 	STT		/PUT CODE IN 1ST WORD OF NEW ENTRY
	TAD	STT		/AUTO-INDEX ENTRY
	DCA	X2
	TAD	AS0		/AUTO-INDEX SYMBOL TO BE STORED
	DCA	X1
	TAD	S0		/SET SYM. LEN. CTR.
	CIA
	DCA	TEM1
ERS1,	CDF 10
	TAD I 	X1		/MOVE SYMBOL CHAR. PAIR TO TABLE
	CDF 00
	DCA I 	X2
	ISZ	TEM1		/CK. CTR.
	JMP	ERS1		/NOT DONE
	DCA I 	X2		/CLR VALUE WORD
	TAD	STT		/SAVE PTR TO NEW ENTRY
	DCA	SYMBOL
	TAD	X2		/RESET PTR. TO SYM. TAB. TOP
	IAC
	DCA	STT
	CDF 10
	JMP	SRS4

/
/OBTAIN GIVEN SYMBOL'S VITAL INFO FROM MST
/CALL SEQ:	JMS	OBNSYM
/		ADDRESS OF SYMBOL ID
/		RET.
/OBNSYM LEAVES SYMBOL ID IN "SYMBOL",
/	SYMBOL CODE WORD IN USE,
/	SYMBOL VALUE IN VAL.
/OBNSYM CALLS RUSVL BEFORE ACTION
/FOR SAME REASON AS SRSYM DOES.
/
OBNSYM, 0
	JMS	RUSVL
	TAD I	OBNSYM	/ADDRESS OF SYMBOL
	DCA	TEM1
	TAD I	TEM1	/ACTUAL SYMBOL
	DCA	SYMBOL
	ISZ	OBNSYM	/INDEX FOR EXIT
	JMS	SUSVL	/SET UP USE AND VALUE WORDS
	JMP I	OBNSYM	/RETURN WHEN FOUND
/
/	ROUTINE TO SET UP USE AND VALUE WORDS
/
SUSVL,	0
	CDF 00		/OFF TO BANK 1
	TAD I	SYMBOL	/MST USE WORD FROM BANK 1
	DCA	USE	/TO BANK 0 USE LOCATION
	TAD	USE
	AND	K3
	IAC
	TAD	SYMBOL
	DCA	VALPTR
	TAD I	VALPTR	/MST VALUE WORD FROM BANK 1
	DCA	VAL	/TO BANK 0 VALUE LOCATION
	CDF 10		/RESTORE DATA FIELD
	JMP I	SUSVL	/RETURN

RUSVL,	0
	CDF 00
	TAD	USE
	DCA I	SYMBOL
	TAD	VAL
	DCA I	VALPTR
	CDF 10
	JMP I	RUSVL

VALPTR,	0	/PTR TO CURRENT VAL WORD IN MST
/
/READ A CHARACTER
/	IGNORES LF, FF, RO, LEADER
/	ALSO CHECKS CHAR AS TO TYPE
/CALLING SEQ:	JMS RCH
/	RETURN IF CHAR IS A DIGIT
/	RETURN IF CHAR IS ALPHABETIC
/	RETURN FOR ALL OTHER (PUNCT,ETC)
/LEAVES	AC==0
/	CHR=ASCII VALUE OF INPUT CHARACTER
/CALLS SRT

RCH,	0
	JMS I GETCHR	/GET 1 CHAR
	SNA
	JMP	RCH3		/0=END OF LINE
	TAD M260
	SPA
	JMP RCH3		/TAKE PUNCT.EXIT (200-257)
	TAD M12
	SPA
	JMP RCH4		/TAKE DIGIT EXIT (260-271)
	TAD M7
	SPA
	JMP RCH3		/TAKE PUNCT, EXIT (272-300)
	TAD M37A

	SMA

RCH3,	ISZ RCH		/PUNCT, EXIT (337-376)
	ISZ RCH		/ALPHA EXIT (301-336)

RCH4,	CLA		/DIGIT EXIT
	JMP I RCH
M260,	-260
M12,	-12
M37A,	-36


/FORCE BUFFER FILL ON FIRST READ

INITR,	0
	TAD	MBE
	DCA	X3
	JMP I	INITR

MBE=LINAX		/=LAST WORD OF DATA BUFFER
*4600

/SUBR TO READ 1 LINE INTO LINE BUFFER

RLN,	0
	DCA	LFLG		/CLR NON-NULL LINE FLAG
	TAD	SCOLON		/IF LAST LINE ENDED WITH ;
	SZA			/NO NEED TO READ ANOTHER
	JMP	RLN4
	TAD	LINAX		/INIT STORAGE AUTO-INDEX
	DCA	X2
RLN2,	JMS	FETCH		/GET A CHARACTER
	JMS I	TEST		/IS IT A CR,TAB,SP,FF,LF?
		SL7-1		/IF SO GO TO RLN15,3,3,2,2
		BL6-SL7
	ISZ	LFLG		/OTHERWISE A NON-NULL LINE
RLN3,	JMS I	STOREP		/OTHERWISE PUT IT IN THE BUFFER
	TAD	X2		/IS BUFFER FULL?
	TAD	LINEND
	SZA CLA
	JMP	RLN2		/NO
	CMA
	TAD	X2
	DCA	X2		/IF SO MOVE BACK PTR
	JMP	RLN2
RLN15,	DCA	CHR		/TERMINATE LINE WITH 0
	JMS I	STOREP
	DCA	AFLG
	DCA	EFLG
	DCA	VFLG
	DCA	CODE
	TAD	LINAX		/INIT LINE INDEX
RLN4,	DCA	X0
	DCA	SCOLON		/CLR
	JMP I	RLN


STOREP,	STORE
LINEND,	-LINBUF-107

/SUBROUTINE TO READ 1 CHARACTER VIA INPUT DEVICE
/IGNORES 200'S & 377'S

FETCH,	0
	JMS	R
	AND K177
	TAD	K200		/FORCE FULL 8BIT ASCII
	DCA CHR
	TAD CHR
	TAD	M200
	SZA 
	TAD M177
	SNA CLA
	JMP FETCH+1
	JMP I FETCH
M177,	-177

/SUBR TO GET NEXT CHAR FROM HSR BUFFER
/REFILL BUFFER WHEN X3 REACHES END OF BUFFER

R,	0
	CDF 00
	TAD	X3
	TAD	BUFEND	/CK FOR END OF BUFFER
	SNA CLA
	JMP	RG		/REFILL
R1,	TAD I	X3		/GET NEXT CHAR
	CDF 10
	JMP I	R
RG,	TAD	BUF		/INDEX THE BUFFER
	DCA	X3
RG1,	JMS I	INDEV
	DCA I	X3
	TAD	X3		/CK FOR FULL
	TAD	BUFEND
	SZA CLA
	JMP	RG1		/NOT FULL
RG3,	TAD	BUF		/RESET PTR
	DCA	X3
	JMP	R1

INDEV,	HSR
BUF,	DATA-1

BUFEND,	1-LINBUF

/GET 1 CHAR FROM LINE BUFFER

L65,	0
	CDF 00
	TAD I	X0
	CDF 10
	DCA	CHR
	TAD	CHR
	JMP I	L65

/
/	ROUTINE TO PUNCH LEADER TRAILER CODE
/
LEADER,	0
	TAD	K7600
	DCA	TEM1
	TAD	K200
	JMS I	PUNCH
	ISZ	TEM1
	JMP	.-3
	JMP I	LEADER

/
/	ROUTINE TO TYPE RETURN-LINE FEED
/
	0215
	0212
L73,	0
	CLA
	TAD	L73-2
	JMS I	TYPE
	TAD	L73-1
	JMS I	TYPE
	JMP I	L73


/DECIM & OCTAL PSUEDO-OPS

PDEC,	JMS I	SKIPL
	IAC		/SET ARITHMETIC CONVERSION TO DECIMAL
	SKP
POCT,	JMS I	SKIPL
	DCA	DSW	/SET ARITHMETIC CONVERSION TO OCTAL
	JMP I	NULLP	/GO GET NEXT INPUT LINE



/
/ROUTINE TO STOP NEXT LINE FROM BEING LISTED
/THO IT IS ALREADY IN THE BUFR.
/E.G., STOP LISTING OF PUSHED DOWN LINE
/WHILE ASSEMBLING LIT. POOL
/
SAVLIN,	0
	CDF 00
	TAD I	LINEB2		/SAVE 1ST CHAR OF LINE
	SNA			/IF ANY
	JMP	.+3		/THERE ISNT ANY

	DCA	SAVEIT
	DCA I	LINEB2		/CLR  TO PREVENT TYPEOUT
	CDF 10
	JMP I	SAVLIN


/
/REENABLE LISTING OF LINE WHICH SAVLIN
/PREVENTED
/

RELINE,	0
	CDF 00
	TAD	SAVEIT		/RESTORE 1ST CHAR OF LINE
	DCA I	LINEB2
	CDF 10
	JMP I	RELINE

SAVEIT,	0
LINEB2,	LINBUF


/ROUTINE TO LIST NULL, COMMENT OR PSUEDO-OP LINE

NULL,	DCA	VALUE		/IF ANY GIVEN
	TAD	VALUE		/SET TYPEOUT FLAG IF NON-0
	DCA	VFLG
	JMS I	WLIF		/LIST IF PASS 2
	JMP I	DCIL1		/GO BACK TO RDL1 FOR NEXT LINE
WLIF,	WLNIF1

/
/	TYPE ROUTINE
/
L64,	0
	TLS		/SELECT IT
	TSF		/WAIT FOR TTY
	JMP	.-1
	CLA		/EXIT WITH CLEAR AC
	JMP I	L64
*5000
/
/	ROUTINE TO SET THE CORRECT COUNTERS FOR THE CURRENT
/	OP CODE AND ADDRESS FIELD SYMBOL
/
/THIS IS A MAJOR ROUTINE.  IT IS CALLED ONCE
/FOR EVERY NORMAL (MRI,OPR,IOT) INSTR.  COLLECTED.
/IT IS ALSO CALLED DURING PAGE
/RECOUNTING, ONCE FOR EVERY ITEM ON THE 
/PAGE TABLE.
/CALLING SEQ:	AC=0,JMS,RET WITH AC=0
/FUNCTION: DETERMINE THE TYPE OF LINE BEING
/READ AND SET THE VARIOUS PAGE COUNTERS
/AND FLAGS ACCORDINGLY.
/A FLOW CHART OF TYPES & FLAG SETTINGS IS GIVEN BELOW.
/CONSIDERABLE OVERLAPPING IS USED TO ACHIEVE
/THE MIN. CORE USAGE. THIS IS SOMETIMES AT THE 
/EXPENSE OF LOGICAL CLARITY.
/ALL POSSIBLE CONDITIONS EXIT VIA SETC00
/SETC00:(1) IF LAST INSTR. WAS A SKIP & LAST BANK
/	IS NOT= CUR.BANK, BANK=-1.
/	(2) IF CUR. INSTR. IS A SKIP, PGEESC=4
/	OTHERWISE PGEESC=2.
/	(3) LASTSKIP CONDITION= CUR. SKIP CONDITION
/	(4) LAST BANK= CUR. BANK
/
/FLOW OF INSTR. TYPES
/SETCT:	IF (PARAMETER OR MICRO-INSTR.) SETC00
/	IF (LITERAL AFS) SETC02
/	IF(CONSTANT AFS) SETC01
/	CALL OBNSYM(AFS)
/	IF (INSTR. IS INDIRECT) SETC07
/	IF (AFS IS IN COMMON) SETCO4
/	IF (ABSOLUTE AFS) SETC05
/	CALL SPSTB (AFS)		/SEARCH PST FOR AFS
/	CALL SETSUB
/	IF (AFS NOT BEFORE ON PST) SETC06
/	IF (AFS WAS IN PST BUT NOT DEF. ON PAGE)SETC12
/	IF (OP CODE=JMS) BANK=1
/	GO TO SETC00			/ON PAGE MR1
/SETC01:IF (CONST.AFS ON PG.0)J2
/	IF (INSTR. IS INDIRECT) ERROR
/	CALL SLTAB(CONST. AFS)		/PUT CONST. IN LIT.TAB.
/J1:	IF (BANK NOT=1) SETC13
/	GO TO SETC00
/	J2* IF( INSTR.INDIR.) J1	/PG.0 INDIRECT
/	GO TO SETC00			/PG.0 DIRECT
/SETC04:IF(BANK NOT 0) CALL INCOBA	/INC OBACTR
/	CALL NUMSGN
/	S0=RESULT+COMMON ADDR.
/SETC02:CALL SLTAB(S0)			/LIT.OR. COMMN. ADDR. TO LIT. TAB.
/	GO TO SETC00
/	IF (AFS NOT PREV. ON PST) SETC11
/	IF (AFS WAS ON PST BUT NOT DEF. ON PAGE) SETC11
/	GO TO J3
/SETC10:CALL NUMSGN
/	IF (ABS.AFS ON PAGE 0) J3
/SETC11:AC=1				/FORCE BANK=1
/SETC09:AC=AC+1				/FORCE BANK=0
/SETC08:AC=AC-2				/FORCE BANK=-1
/	CALL INCOBA			/INC OBACTR
/	AC=BANK				/(BANK OFFSET BY -1)
/	GO TO SETC13			/(TAKEN CARE OF AT SETC13)
/SETC12:IF (NEW PST CODE BITS 10-11=OLD SAME (IN TEM 3)) J3
/SETC06:INC OPSCTR			/OFF PAGE SYMBOL
/J3:	IF (BANK=1) SETC00
/	INC AC
/	CALL INCOBA
/J4:	IF (THERE HAS NOT BEEN A PST SEARCH) SETC00
/	ADD CHANGE IN OBACTR (OBACTR-OLDOBA) TO PST CODE BITS 3-9
/	GO TO SETC00
/
/NOTE: CONDITION AT J4 IS TESTED BY SETSUB HEADER
/WORD (OBFLG).  THIS IS ALWAYS CLEARED
/WHEN SETCT STARTS AND WILL NOT CHANGE
/UNLESS THERE IS A CALL TO SPSTB BECAUSE
/A CALL TO SETSUB ALWAYS FOLLOWS CALL TO
/SPSTB IN SETCT.


/
SETCT,	0
	JMS I	ICPLFS	/CHECK FOR AND PROCESS ANY LFS
	DCA	OBFLG		/CLR
/NEXT 2 LINES MOVED TO
/SETCAL (AS OF V15) TO MAKE ROOM FOR FOLLOWING INSTR. & PTR
/	TAD	EXP	/IS IT PAR OR A MICRO INST?
/	TAD	UMIC
	JMS I	SETCAP
	SZA CLA
	JMP I	SET00I	/YES
	CLA CLL CMA RAL
	TAD	AFS
	SNA		/IS AFS A CONSTANT
	JMP	SETC01	/YES
	IAC
	SNA CLA		/IS AFS A LITERAL
	JMP I	SET02I	/YES
	JMS I	OBSYM	/NO ... GET POINTERS TO AFS
	AFS
	TAD	IB	/INDIRECT BIT
	SZA CLA 	/IS IT SET
	JMP	SETC07	/YES
	JMS	USETST	/TEST FOR OFF BANK OR ABSOLUTE
	SETC04		/OFF BANK
	SETC05		/ABSOLUTE
	JMS I	SPSTAB	/IS AFS ON PST
	CMA		/NOT FOUND
	JMS	SETSUB
	JMP I	SET06I	/NO ... MUST BE OFF PAGE
	TAD I	PSTCPR	/YES ... PST CODE WORD
	SMA CLA 	/IS AFS ON PAGE
	JMP I	SET12I	/NO
	JMP I	SET00I
/
/	INDIRECT MEMORY REFERANCE INSTRUCTION

SETC07, TAD	USE	/AFS MST USE WORD
	AND	K20	/IS AFS DUMMY
	SZA CLA
	JMP I	SET08I	/YES
	JMS	USETST	/TEST OFF BANK OR ABSOLUTE
	SETC09		/OFF BANK
	SETC10		/ABSOLUTE
	JMS I	SPSTAB	/IS AFS ON PST
	CMA		/NOT FOUND
	JMS	SETSUB
	JMP I	SET11I	/NO
	TAD I	PSTCPR	/YES ... PST CODE WORD
	SMA CLA 	/IS AFS ON PAGE
	JMP I	SET11I	/NO
	JMP I	SET6P1	/YES
/
/	CONSTANT FOR AN ADDRESS FIELD SYMBOL
/
SETC01, TAD	S0	/ACTUAL BINARY CONSTANT
	AND	K7600	/IS CONSTANT ON PAGE ZERO
	SNA CLA
	JMP	SET01A	/YES
	TAD	IB	/NO ... IS IT INDIRECT
	SZA CLA
	IERROR		/YES ... ERROR
	JMS I	SLITAB	/IS CONSTANT ON LITERAL TABLE
			/IF NOT SUBROUTINE PUTS IT THERE
	TAD	OP
	SPA CLA		/IF OPCODE IS JMS OR JMP THEN BANK IS IRRELEVANT
	JMP I	SET00I
SET01B,	CLA CMA
	TAD	BANK	/BANK SETTING
	SNA CLA		/IS IT SET TO THE CURRENT BANK
	JMP I	SET00I	/YES ... NO PROBLEMS
	JMP I	SET00J	/EXIT TO; COMMON AREA
/
SET01A, TAD	IB	/IS INDIRECT BIT SET
	SZA CLA
	JMP	SET01B	/YES
	JMP I	SET00I	/NO
SET00I, SETC00
SET02I, SETC02
SET00J,	SETC13
SET00B,	JMP I	SETCT	/OFF PAGE RETURN
SET06I, SETC06
SET08I,	SETC08
SET11I, SETC11
SET12I, SETC12
SET6P1,	SETC6A
SETCAP,	SETCAL


/ROUTINE TO TEST MST USE WORD TO DETERMINE WHETHER A SYMBOL IS
/OFF-BANK OR ABSOLUTE

USETST,	0
	TAD	USE
	AND	K40
	SZA CLA		/IS IT OFF BANK?
	JMP	USESUC	/YES- RETURN INDIRECT THROUGH FIRST ARG
	TAD	USE
	AND	K3000
	ISZ	USETST
	SNA CLA		/IS IT ABSOLUTE?
	JMP	USESUC	/YES- RETURN INDIRECT THROUGH SECOND ARG
	ISZ	USETST
	JMP I	USETST	/NEITHER - RETURN TO CALL+3
USESUC,	TAD I	USETST
	DCA	USETST
	JMP I	USETST	/TAKE PROPER BRANCH

/
/SETSUB IS A UTILITY USED BY SETCT ONLY.
/USED ONLY IMMEDIATELY AFTER A PST SEARCH.
/CALLING SEQUENCE:	JMS	SPSTB
/		CMA		/SPSTB MAY SKIP
/		JMS	SETSUB
/		RETURN IF SPSTB SKIPPED OVER CMA
/		RETURN IF SPSTB DID NOT SKIP
/HAS SEVERAL FUNCTIONS:
/(1) SAVE COPY OF OLD VALUE OF OBACTR BEFORE
/CHANGING STARTS- SO IT MAY BE USED AT SETC13.
/(2) IF INSTR IS INDIRECT, THAT'S IT- EXIT
/(3) OTHERWISE SAVE OLD VALUE OF PST CODE BITS 10-11
/FOR LATER USE AT SETC12.  WARNING: THIS
/IS SAVED IN TEM3, SO TEM3 IS NOT
/TEMPORARY FOR A FEW MINUTES.
/(4) SET PST CODE BIT 10 IF THIS IS A #REF,
/OR BIT 11 IF IT IS A NORMAL REF.
/ALGORITHM IS A.OR.B=(.NOT.A.AND.B)+A
/

SETSUB,	0
	DCA	TEM1	/0=FOUND, -1=NOT
	TAD	OBACTR		/SAVE FOR SETC11,12,6,13
	DCA I	OLDOBP
	TAD	IB		/OMIT CHANGING PST BITS IF INDIRECT
	SZA CLA
	JMP	SETSX
	TAD I	PSTCPR	/SAVE OLD CODE
	AND	K3
	DCA	TEM3
	TAD	NSGN
	SZA CLA
	IAC		/#
	IAC
	DCA	TEM2
	TAD	TEM2	/OR INTO CODE
	CMA
	AND I	PSTCPR
	TAD	TEM2
	DCA I	PSTCPR
SETSX,	ISZ	TEM1	/FOUND?
	ISZ	SETSUB	/YES
	JMP I	SETSUB

OLDOBP,	OLDOBA
OBFLG=SETSUB



/SUBR TO STORE CHARACTER IN LINE BUFFER
/ASSUMES X1 SET
/CHAR MAY BE IN AC OR IN CHR

STORE,	0
	SNA
	TAD	CHR
	CDF 00
	DCA I	X2
	CDF 10
	JMP I	STORE


/
/ROUTINE TO CHECK NSGN FOR SETCT
/USED ONLY BY SETCT ROUTINE.
/CALLING SEQUENCE:	AC=0
/		JMS	NUMSGN
/		RETURN WITH AC=0 IF
/		NSGN=0,AC=1 IF NSGN
/		NOT=0.
/NOTE:NSGN MAY BE NON-0 AND NOT=1.  THIS
/IS THE REASON FOR NUMSGN.
/

NUMSGN,	0
	TAD	NSGN
	SZA CLA
	IAC
	JMP I	NUMSGN
*5200
/
/	AFS ABSOLUTE
/
SETC05,	JMS I	NUMSGP
	TAD	VAL	/ABSOLUTE SYMBOL VALUE
	AND	K7600	/MASK OUT PAGE BITS
	SNA CLA 	/IS ABSOLUTE SYMBOL ON PAGE ZERO
	JMP	SETC00	/YES ... EXIT
	JMS I	NUMSGP
	TAD	VAL	/NO ... ABSOLUTE SYMBOL VALUE
	DCA	S0	/TO LITERAL TABLE SEARCH LOCATION
	JMS I	SLITAB	/SEARCH LITERAL TABLE FOR VALUE
			/IF NOT THERE ROUTINE PLACES IT THERE
	JMP	SETC06+1	/EXIT
/
/	INDIRECT ABSOLUTE
/
SETC10,	JMS I	NUMSGP
	TAD	VAL		/ACTUAL AFS VALUE
	AND	K7600
	SNA CLA		/IS ADDRESS FIELD SYMBOL ON PAGE ZERO
	JMP	SETC6A		/YES
/
/	INDIRECT DUMMY ADDRESS FIELD SYMBOL
/
SETC08,	TAD	M2	 	/SET BANK UNKNOWN
/
/	OFF PAGE INDIRECT
/
SETC11,	IAC			/SET BANK TO CURRENT
/
/	OFF BANK INDIRECT - SET BANK TO 0
/
SETC09,
	JMS	INCOBA		/SET BANK & INCR. OBACTR
	TAD	BANK
	JMP	SETC13+1	/EXIT TO COMMON AREA
/


/	ADDRESS FIELD SYMBOL NOT ON PAGE SYMBOL TABLE.
/
SETC12,	TAD I	PSTCPR		/HAS NEW TYPE REF BEEN ADDED?
	AND	K3
	CIA
	TAD	TEM3
	SZA CLA		/YES
SETC06,	ISZ	OPSCTR		/INCREMENT OFF PAGE SYMBOL COUNTER
	TAD	OP
	SPA CLA		/DON'T WORRY ABOUT BANK FOR JMS'S AND JMP'S
	JMP	SETC00	/WHICH ARE NOT EXPLICITLY INDIRECT
SETC6A,	TAD	BANK
	SMA SZA CLA
	JMP	SETC00	/YES ... EXIT TO COMMON AREA
SETC13,	 IAC
	JMS	INCOBA		/SET BANK TO CUR. & INC OBACTR
	TAD I	OBFLGP		/WAS THERE A PST SEARCH?
	SNA CLA
	JMP	SETC00		/NO
	TAD	OLDOBA		/YES GET CHANGE IN OBACTR
	CIA
	TAD	OBACTR
	CLL RTL			/IN BITS 1-9
	TAD I	PSTCPR		/ADD TO PST CODE
	DCA I	PSTCPR
/
/	COMMON AREA
/
SETC00,	JMS	CMNSET	/SET BANK=1 AFTER JMS
	JMS I	SETCMN	/UPDATE BANK AND LSTSKP
	SZA CLA		/IS CURRENT INSTRUCTION A SKIP?
	TAD	K2	/YES ... PAGE ESCAPE = 4
	TAD	K2	/NO ... PAGE ESCAPE = 2
	DCA	PGEESC
	JMP I	.+1	/RETURN
	SET00B
SETCMN,	ASMCMN

/ROUTINE TO SET BANK TO CURRENT AFTER A JMS
CMNSET,	0
	TAD	OP
	TAD	K4000
	SZA CLA		/WAS OP A JMS?
	JMP I	CMNSET	/NO
	IAC
	DCA	BANK
	JMP I	CMNSET

OLDOBA,	0
OBFLGP,	OBFLG
/
/	DIRECT OFF BANK REFERANCE
/
SETC04, TAD	BANK	/BANK INDICATOR
	SZA CLA 	/IS BANK SET TO OFF
	JMS	INCOBA		/NO, SET BANK TO COMMN & INC OBACTR
	JMS I	NUMSGP
	TAD	VAL	/YES ... ACTUAL BANK 0 ADDRESS
	DCA	S0	/TO CONSTANT - LITERAL LOCATION
/
/	LITERAL FOR AN AFS
/
SETC02, JMS I	SLITAB	/PLACE LITERAL ON LITERAL TABLE
	JMP I	SET1AP
/
/	COLLECTION ROUTINE TO CHECK FOR AND PROCESS AN LFS
/
/CALLING SEQUENCE:	AC=0
/		JMS	CPLFS
/		RETURN WITH AC=0
/FUNCTION:	USED DURING COLLECTION PHASE
/	EXCEPT WHEN RECOUNTING A PAGE.
/	IF TAG OCCURS ON CURRENT LINE, CPLFS
/	LOCATES (OR ENTERS) IT IN PAGE SYM.TAB.
/	AND SETS THE DEFINED-ON-PAGE BIT IN
/	THE PST CODE WORD.
/	ALSO SETS BANK CONDITION TO UNKNOWN
/	SINCE USER CODE CAN JUMP TO TAG
/	FROM ANYWHERE.  ALSO SAVE
/	TAG IN LLFS & RESET LINE COUNT
/	IN CASE WE GET A MULT.DEF. ERROR
/	IN PASS1 WE MUST ALSO DO THE
/	FOLLOWING IF THE SYMBOL IS ALREADY
/	IN THE PST WHEN WE GO LOOK FOR
/	IT: (1) REDUCE THE OFF-PAGE SYM.
/	CTR.  BECAUSE OFF-PAGE POINTER (FOR
/	EITHER NORMAL OR # REFERENCES) ARE
/	NO LONGER NEEDED.  (2) REDUCE
/	OBACTR BY THE NO. OF EXTRA WORDS
/	OF CODE DUE TO THIS SYMBOL.
/SUBRS. CALLED: OBNSYM(LFS),SPSTB,PSTDEF
/
CPLFS,	0
	TAD I	RECTI	/ARE WE RECOUNTING?
	SZA CLA
	JMP I	CPLFS	/YES ... RETURN
	TAD	LFS
	SNA
	JMP I	CPLFS		/NONE THERE
	CDF 00
	DCA I	LFSPTR	/PLACE ON LFS TABLE
	ISZ	LFSPTR	/INCREMENT LFS TABLE POINTER
	CDF 10
	ISZ I	PTCPR	/SET LFS BIT ON PAGE TABLE
	JMS I	OBSYM
	LFS
	JMS I	SPSTAB	/IS IT ON THE PAGE SYMBOL TABLE
	JMP	CPLFS3	/NO ... SKIP DECREMENTING
	DCA	TEM1	/CLR
	TAD	PASS		/SKIP DECREMENTING IF PASS 2
	SNA CLA
	TAD I	PSTCPR	/CK USE
	AND	K3
	CLL RAR
	SZL
	ISZ	TEM1	/NORMAL
	SZA CLA
	ISZ	TEM1	/#
	TAD	TEM1	/SUBTRACT
	CIA
	TAD	OPSCTR
	DCA	OPSCTR
	TAD I	PSTCPR		/EXTRACT SHARE OF OBACTR DUE
	AND	C3774		/TO THIS SYMBOL
	CLL RTR			/MOVE TO LOW ORDER
	CIA			/SUB. FROM OBACTR
	TAD	OBACTR
	DCA	OBACTR
CPLFS3,	JMS I	PSTDEP
	CLA CMA CLL 	/SET BANK UNKNOWN (THE CLL IS USED ELSEWHERE)
	DCA	BANK
	TAD	LFS		/SAVE IN CASE OF ERROR
	DCA	LLFS
	DCA	LINE	/ZERO LINE COUNT FROM LAST LFS
	JMP I	CPLFS
C3774,	3774
NUMSGP,	NUMSGN
PSTDEP,	PSTDEF
LLFS,	0


/
/UTILITY FOR SETC04,SETC08,SETC13
/NOT USED ELSEWHERE
/CALLING SEQUENCE:	DESIRED BANK SETTING IN AC
/		JMS	INCOBA
/		RETURN WITH AC=0
/FUNCTION:(1) SET BANK AS SPECIFIED
/	(2) INCREMENT OFF-BANK ADDITION CTR
/	BY 1 OR 2: 2 IF PREVIOUS INSTR.
/	WAS A SKIP-TYPE, 1 OTHERWISE.
/
INCOBA,	0
	DCA	BANK
	TAD	LSTSKP	/LAST INSTRUCTION SKIP INDICATOR
	SZA CLA 	/WAS LAST INSTRUCTION A SKIP INSTRUCTION
	ISZ	OBACTR	/+ OLD VALUE OF OFF BANK ADDITION COUNTER
	ISZ	OBACTR	/FOR NEW VALUE OF OFF BANK ADDITION COUNTER
	JMP I	INCOBA
SET1AP,	SET01A
*5400
/
/	ROUTINE TO ASSEMBLE THE PAGE HELD IN THE CURRENT SET OF TABLES

/THIS IS THE MAIN PASS1 ASSEMBLY ROUTINE
/(NOT USED BY PASS2)
/ASMBL GOES THRU ENTIRE PAGE TABLE
/FLOW:	(1) CALL A1 TO INIT. PAGE ASSEMBLY
/	(2) GET ITEM OFF P.T.
/	(3) CALL ASM02 TO ASSEMBLE ITEM
/	(4) LOOP BACK TO (2) TIL DONE WITH PAGE
/	(5) CALL A2 TO ASM. LITERALS
/ASMBL IS CALLED TWICE BY L55 FOR
/EACH PAGE OF CODE.
/
ASMBL,	0
	JMS	A1
	JMS I	ILC4PT			/OUTPUT PAGE ORIGIN
	JMS I	INIS		/DO INITS.
	TAD	PTSZE	/PLACE - SIZE OF PAGE TABLE
	CIA
	DCA	INDX1	/IN AN INDEX LOCATION
	TAD	LFSBSE	/SET UP LFS TABLE POINTER
	DCA	LFSPTR
	CLA CMA
	DCA	PHASE	/SET PHASE SWITCH TO ASSEMBLY
	JMS I	ASM02I	/SKIP INCREMENTING POINTERS THE FIRST TIME
	JMS I	ISSI	/INCREMENT PAGE TABLE POINTERS
	ISZ	INDX1	/OVER YET
	JMP	.-3
	JMS	A2
	JMP I	ASMBL
ISSI,	ISZPT


/
/ASSEMBLY ROUTINE TO FINISH OFF A PAGE
/(1) PUTS OUT PAGE ESCAPE
/(2) LITERAL POOL (BY CALLING OAPLT)
/(3) GET READY FOR NEXT PAGE
/
A2,	0
	JMS I	SAVLNP		/STOP NEXT LINE LISTING
	TAD	APMSW	/ARE WE IN AUTOMATIC PAGING MODE
	SZA CLA
	JMP	A2NONA	/NO ... DONT SEND PAGE ESCAPE
	TAD	PGEESC	/SIZE OF PAGE ESCAPE REQUIRED
	RTR		/2 BIT TO LINK
	SZL CLA
	JMP	ASM01A	/2 INSTRUCTION PAGE ESCAPE
			/4 INSTRUCTION PAGE ESCAPE
	JMS I	WRITEP
	JMS I	OUTBIN	/JMP NEXT TO LAST LOC ON THIS PAGE
	K5376
	0
	ISZ	ILC		/FOR BENEFIT OF "WRITE"
	CLA CMA
	JMS	A2SUBR	/OUTPUT JMP AND LITERAL TABLE
	JMS I	OUTSKP	/OUTPUT 2 SKIP INSTRUCTIONS
	JMS I	OUTSKP
	JMP	ASM01B	/RETURN
/
ASM01A,	JMS	A2SUBR	/OUTPUT JMP AND LITERAL TABLE
	JMS I	WRITEP
	JMS I	OUTBIN	/PLACE A NOP IN THE LAST LOCATION
	K7000
	0
ASM01B,	JMS I	RELNP		/RESTORE NEXT LINE FOR LISTING
	TAD	ACTR		/REMAINS 1 DURING PASS 2
	SZA CLA
	JMP I	A2	/EXIT IF LISTING OR 2ND ASSEMBLY
	TAD	PUPGE		/SAVE  ESCAPE ON PUSH DOWN LIST
	CDF 00
	DCA I	PEPTR
	CDF 10
	ISZ	PEPTR		/MOVE STACK PTR
	JMP I	A2	/RETURN

A2NONA,	JMS I	OUAPLT
	DCA	PUPGE		/CLR
	JMP	ASM01B

/SUBROUTINE TO ELIMINATE SOME COMMON CODE
/
A2SUBR,	0
	TAD	K177
	TAD	PAG
	DCA	A2TEMP	/SET ILC IN CASE NO LITERALS
	JMS I	WRITEP
	JMS I	OUTBIN
	K5377
	0
	JMS I	OUAPLT	/OUTPUT LITERAL TABLE
	TAD	A2TEMP
	DCA	ILC	/SET ILC TO 176 OR 177 IN PAGE
	JMS I	ILC4PT
	JMP I	A2SUBR	/RETURN
A2TEMP,	0


ILC4PT,	ILC4
ASM02I, ASM02
INDX1,	0
INIS,	INISUB
OUAPLT,	OAPLT
SAVLNP,	SAVLIN
RELNP,	RELINE
PEPTR,	PEBSE
REDUCE,	0
CDFSKP,	JMS	CDFSK


/
/INITIALIZE A PAGE ASSEMBLY
/
A1,	0
	TAD	PAG	/MOVE PAGE TO ILC
	DCA	ILC
	DCA	LITSIZ	/ZERO LITERAL TABLE SIZE
	TAD	PASS
	SNA CLA
	JMP I	A1		/EXIT IF PASS 1
	CDF 00
	TAD I	PEPTR		/GET NEXT PAGE ESC FROM STACK
	CDF 10
	ISZ	PEPTR		/MOVE PTR
	DCA	REDUCE
	JMP I	A1
/
/	DUMMY PSEUDO OP
/
PDUMMY,	JMS I	GETSYM	/GET NEXT INPUT ITEM
	SKP		/NOTHING THERE
	JMP	.+3	/SYMTOL
	NOP		/CONSTANT
	IERROR		/LITERAL
	JMS I	SKIPL
	TAD	USE	/MST USE WORD
	AND	K3403	/SAVE SYMBOL LENGTH, TYPE BITS, AND DEF BIT
	TAD	K20	/ADD CORRECT MST BIT FOR DUMMY
	DCA	USE	/FOR CORRECT CODE WORD
	JMP I	NULLP	/EXIT TO GET NEXT LINE
K3403,	3403


/
/COMPUTE CURRENT PAGE SIZE
/ENTER WITH AC=0
/EXIT WITH PAGE SIZE IN AC
/
CPGES,	0
	TAD	APMSW		/OMIT PGEESC IF NON-AUTO PAGING
	SNA CLA
	TAD	PGEESC	/+SIZE OF ESCAPE REQUIRED
	TAD	PTSZE	/SIZE OF PAGE TABLE
	TAD	LTSZE	/+SIZE OF LITERAL TABLE
	TAD	OPSCTR	/+OFF PAGE SYMBOL COUNTER
	TAD	OBACTR	/+OFF BANK ADDITION COUNTER
	DCA	PSTDEF	/STORE IN TEM.
	TAD	PSTDEF	/GET IT BACK
	TAD	PAG	/AND CHECK FOR 7600 PAGE OVERFLOW
	AND	K7600
	TAD	K200
	SNA	CLA
	SERROR		/OVERFLOW-ERROR S
	TAD	PSTDEF	/O.K. GET PAGE SIZE, WHICH
	JMP I	CPGES	/IS DESIRED RESULT


/ROUTINE TO SET DEFINED BIT ON PST
/USED BY CPLFS & ANUMCK

PSTDEF,	0
	TAD I	PSTCPR	/PROTECT CODES
	SMA
	TAD	K4000	/SET DEFINED BIT ON PST
	DCA I	PSTCPR
	JMP I	PSTDEF
*5600
/
/	CONSTANT FOR AN ADDRESS FIELD SYMBOL
/
ASM05,	TAD I	PTSPR	/ACTUAL BINARY CONSTANT
	AND	K7600	/IS IT ON PAGE ZERO
	SZA CLA
	JMP I	ASM5CI	/NO
	TAD I	PTSPR	/ADD IN PAGE ZERO ADDRESS
	DCA	TEMP6	    
	TAD I	PTCPR	/YES ... IS IT INDIRECT
	AND	K400
	SNA CLA
	JMP	ASM00	/EXIT TO COMMON AREA
	TAD	TEMP6
	JMP I	ASM5AI
ASM5AI, ASM12E
ASM5CI, ASM05C
/
/	OFF BANK DIRECT (COMMON DIRECT)
/
ASM08,	JMS I	NSCHKP
	TAD	VAL	/ACTUAL ADDRESS IN BANK ZERO
	DCA	S1	/TO 2 WORD LITERAL TABLE SEARCH LOCATION
	CLA IAC
	DCA	S0	/ABSOLUTE SEARCH
	JMS I	SERALP	/GET A PAGE ADDRESS
	TAD	K400	/ADD INDIRECT BIT
	DCA	TEMP6
	TAD	BANK		/BANK INDICATOR
	SNA CLA			/IS IT SET
	JMP	ASM00
	DCA I	ASMX5I
	TAD	KCDF1A
	DCA I	ASMX4I
	TAD	CDZSKI
	DCA I	ASMX6I
	DCA	TEM7
	JMP I	ASME7I
ASMX5I,	ASMX5
ASMX4I,	ASMX4
KCDF1A,	KCDF10
ASMX6I,	ASMX6
ASME7I,	ASME7
CDZSKI,	CDZSKP
SERALP,	SRALT
NSCHKP,	NSCHK

/
/ASM02 IS THE HEART OF ASSEMBLY
/IT IS CALLED ONCE FOR EACH ITEM ON
/THE PAGE TABLE.
/IT CONSISTS OF MANY PARTS, ONE FOR
/EACH BASIC TYPE OF INSTR. TO BE
/ASSEMBLED PLUS VARIOUS COMMON EXITS
/
ASM02,	0
	DCA	LFS	/ZERO LFS INDICATOR
	TAD	PASS
	SZA CLA
	JMS I	GETBAP		/RESTORE BANK & LSTSKP IF PASS2
	JMS I	LFSCHK		/PROCESS LFS IF ANY
	JMS I	ANCHK		/PROCESS BSS 0 IF ANY
KCDF00,	CDF 00
	TAD I	PTOPR
KCDF10,	CDF 10
	DCA	OP
	TAD I	PTCPR
	AND	K40	/IS IT A SKIP INSTRUCTION
	DCA	CURSKP	/YES ... SET SKIP INDICATOR
	TAD I	PTCPR
	AND	K10	/IS IT A PSEUDO OP (PAR)
	SZA CLA
	JMP I	ASM03I	/YES ... EXIT
	TAD I	PTCPR
	AND	K4	/IS IT A MEMORY REFERANCE INSTRUCTION
	SZA CLA
	JMP	ASME1	/NO
	TAD I	PTCPR	/PT CODE WORD
	AND	K20	/IS AFS A CONSTANT
	SZA CLA
	JMP	ASM05	/YES
	TAD I	PTCPR	/PT CODE WORD
	AND	K2	/IS AFS A LITERAL
	SZA CLA
	JMP I	ASM06I	/YES
	TAD I	PTSPR	/AFS ID WORD FOR SYMBOL TABLE
	DCA	AFS	/TO DIRECTLY ADDRESSABLE LOCATION
	JMS I	OBSYM	/GET ITS POINTERS TO MST
	AFS
	TAD I	PTCPR	/PT CODE WORD
	AND	K400	/IS OP INDIRECT
	SZA CLA
	JMP I	ASM2AI	/YES
	JMS I	UZTST	/TEST FOR OFF BANK OR ABSOLUTE
	ASM08		/OFF BANK
	ASM09		/ABSOLUTE
	JMP I	ASM07I	/NO
ASM2AI, ASM02A
ASM03I, PPAR1
ASM06I, ASM06
ASM07I, ASM07
ANCHK,	ANUMCK
UZTST,	USETST
/
/	END OF LINE NECESSITIES
/
ASM00,	TAD	TEMP6
ASME1,	TAD	OP
ASME2,	DCA	TEM1
	JMS I	WRITEP
	JMS I	OUTBIN
	TEM1
ASME1X,	0
ASM01,	JMS I	CMNASM	/SET BANK=1 AFTER A JMS
	JMS	ASMCMN	/SET BANK AND LSTSKP
	DCA	SKPSAV	/SAVE CURSKP IN SKPSAV
	TAD	BANK		/SAVE FOR PROTECTION DURING LISTING
	DCA	BNKSAV
	ISZ	ILC	/INCREMENT ILC
ASM02R,	JMP I	ASM02	/USED AS OFF-PAGE RETURN
	SERROR		/ILC OVERFLOWED 7777 - PROGRAM TOO BIG
CMNASM,	CMNSET
GETBAP,	GETBAS
BNKSAV,	0
SKPSAV,	0
OPISUB,	JMS	OPIS
OBISUB,	JMS	OBIS

/SUBROUTINE TO UPDATE BANK,LSTSKP,LSTBNK
/
ASMCMN,	0
	TAD	LSTSKP	/IS LAST INSTRUCTION A SKIP INSTRUCTION
	SNA CLA
	JMP	.+10	/NO
	TAD	LSTBNK	/YES ... LAST BANK
	CIA
	TAD	BANK	/+CURRENT BANK
	SNA CLA		/ARE THEY THE SAME
	JMP	.+3	/YES
	CLA CMA		/NO ... SET BANK UNKNOWN
	DCA	BANK	
	TAD	CURSKP	/PLACE CUR SKIP INDICATOR
	DCA	LSTSKP	/AS LAST SKIP INDICATOR
	TAD	BANK	/PLACE CURRENT BANK
	DCA	LSTBNK	/IN LAST BANK INDICATOR
	TAD	LSTSKP
	JMP I	ASMCMN
*6000
/
/
/	INDIRECT DUMMY ARGUMENT
/
	DUMSUB
ASM10,	TAD I .-1
	DCA	TEMP6
	CLA CMA		/SET BANK UNKNOWN
	JMP	ASME3	/EXIT FOR SKIP CHECK
/
/	OFF BANK INDIRECT (INDIRECT COMMON)
/
	OBISUB
ASM11,	TAD I .-1
	DCA TEMP6
/

TEMP6=EXP
ASME3,	DCA	BANK		/SET C(AC) IN BANK
	TAD	LSTSKP		/WAS LAST A SKIP?
	SNA CLA
	JMP	ASME4		/NO
//FOLLOWING 6 LINES HAVE BEEN
//MOVED TO 6600 TO MAKE ROOM FOR V03
	JMP I	.+1
	ASMEXT
//	JMS I	OUTSKP		/YES, OUTPUT SKP
//	TAD	ILC		/GET PG.LOC.PTR.
//	TAD	K4		/+4
//	AND	K177
//	TAD	K5200A		/OUTPUT JMP .+4
//	DCA	TEM1
REEASM,	JMS I	WRITEP
	JMS I	OUTBIN
	TEM1
	0
	ISZ	ILC		/INCREMENT PG.LOC.PTR.
ASME4,	JMS I	WRITEP
	JMS I	OUTBIN		/OUTPUT JMS TO
	TEMP6		/OBISUB,OPISUB, OR DUMSUB
	0
	ISZ	ILC
	JMS I	ASM10B		/PPAR3S
	ISZ	ILC
	TAD	OP
	TAD	K407
	JMP I	ASME2P
ASME2P,	ASME2
ASM02A, TAD	USE	/AFS MST USE WORD
	AND	K20	/IS AFS A DUMMY ARGUMENT
	SZA CLA
	JMP	ASM10	/YES
	JMS I	UZETST	/TEST FOR OFF-BANK OR ABSOLUTE
	ASM11		/OFF-BANK
	ASM12		/ABSOLUTE
	JMP I	ASM13I	/NO
ASM10B, PPAR3S
ASM13I, ASM13
K407,	0407
ASME5A,	TAD	OP
	SPA CLA		/BANK NEED NOT BE CURRENT FOR A JMP OR JMS
	JMP	ASME6+2	/WHICH IS NOT EXPLICITLY INDIRECT
ASME5,	TAD	BANK
	SMA SZA CLA
	JMP	ASME6+2
ASME7,	TAD	LSTSKP
	SZA CLA
	JMP	.+7
	JMS I	WRITEP
	JMS I	OUTBIN
ASMX4,	KCDF00
ASMX5,	5
	ISZ	ILC
	JMP	ASME6
	JMS I	WRITEP
	JMS I	OUTBIN
ASMX6,	CDFSKP
	0
	ISZ	ILC
	JMS I	OUTSKP
ASME6,	TAD	TEM7
	DCA	BANK
	TAD	K5
	DCA	ASMX5
	TAD	KCDFA
	DCA	ASMX4
	TAD	CDFSKI
	DCA	ASMX6
	IAC
	DCA	TEM7
	JMP I	.+1
	ASM00
CDFSKI,	CDFSKP
ASME1I,	ASME1
KCDFA,	KCDF00
UZETST,	USETST

/
/	SYMBOL TABLE TYPEOUT FLAG TYPEOUT ROUTINE

/CALL SEQ.:	TAD	USE		/GET TYPE BITS
/		RTL
/		RTL
/		JMS	STFT
/		RETURN
/USED ONLY BY PRSYM
/
STFT,	0
	AND	K3	/MASK OUT TYPE BITS
	SNA
	JMP	STFT3		/ABSOLUTE SYM.
	TAD	M3		/CK FOR NEW OPDEF
	SNA
	JMP	STFT2		/YES
	IAC
	SNA
	JMP	STFT5		/EXTERNAL
	SZL CLA
	JMP	STFT1		/DEFINED
	TAD	K2516		/"UN"
	JMS I	CTYPE
	TAD	K0406		/"DF"
STFT0,	JMS I	CTYPE	/TYPE FLAG
STFT1,	CLA		/WE MUST HAVE A CLEAR AC
	JMP I	STFT	/RETURN
K2560,	2560
K1720,	1720

STFT2,	TAD	K1720		/TYPE "OP"
	JMP	STFT0
STFT3,	TAD	USE
	AND	K40
	SZA CLA
	JMP	STFT4		/COMMON
	TAD	K0102		/"AB"
	JMS I	CTYPE
	TAD	K2300		/"S "
	JMP	STFT0
STFT4,	TAD	K0317		/"CO"
	JMS I	CTYPE
	TAD	K1500		/"M "
	JMP	STFT0

K0102,	102
K0317,	317
K2300,	2300
K1500,	1500
K2516,	2516
K0406,	406
K0530,	530
K2400=SLITAB

STFT5,	TAD	K0530		/"EX"
	JMS I	CTYPE
	TAD	K2400
	JMP	STFT0
*6200
/
/	LOCAL DIRECT REFERANCE
/
ASM07,	JMS I	SPSTAB	/IS AFS ON PST
	JMP	ASM07A	/NO ... ROUTINE PLACES IT THERE
	TAD I	PSTCPR	/PST CODE WORD
	SMA CLA 	/IS SYMBOL ON PAGE
	JMP	ASM07A	/NO
	JMS	NSCHK
	TAD	VAL	/AFS MST VALUE
	AND	K177	/SAVE PAGE ADDRESS
	TAD	K200	/ADD PAGE BIT
	JMP I	AS00I4	/
ASM07A, TAD I	PTSPR	/ACTUAL SYMBOL
	DCA	S1	/TO 2 WORD LITERAL TABLE SEARCH LOCATION
	JMS	NSCHK
	CLL RTL
	TAD	K2	/RELOCATABLE SEARCH
	JMP	ASM05C+3
ASM09B,	JMS	NSCHK
	TAD	VAL		/DIRECT NON-PAGE 0 ABSOLUTE
	SKP
/
/
/	NON PAGE ZERO CONSTANT ADDRESS
/
ASM05C,	TAD I	PTSPR	/ACTUAL BINARY CONSTANT
	DCA	S1	/TO 2 WORD LITERAL TABLE SEARCH LOCATION
	CLA IAC
	DCA	S0	/ABSOLUTE SEARCH
	JMS I	SERALT	/GET A PAGE ADDRESS
	TAD	K400	/ADD INDIRECT BIT
	DCA	TEMP6
	JMP I	.+1
	ASME5A		/EXIT FOR SKIP CHECK IF OP IS NOT JMP OR JMS
/
/	DIRECT ABSOLUTE OR EXTERNAL
/
ASM09,	JMS	NSCHK
	TAD	VAL	/ABSOLUTE SYMBOL VALUE
	AND	K7600	/IS SYMBOL ON PAGE ZERO
	SZA CLA
	JMP	ASM09B	/NO
	JMS	NSCHK
	TAD	VAL	/ADD IN PAGE ZERO ADDRESS
	JMP I	AS00I4	/
AS00II,	ASME5
/
/	LITERAL FOR AN ADDRESS FIELD SYMBOL
/
ASM06,	TAD I	PTSPR	/ACTUAL LITERAL
	DCA	S1	/TO 2 WORD LITERAL TABLE SEARCH LOCATION
	CLA IAC
	DCA	S0	/ABSOLUTE SEARCH
	JMS I	SERALT	/GET A PAGE ADDRESS
	JMP I	AS00I4	/EXIT FOR SKIP CHECK
AS00I4, ASM05+5
OUTSK,	0
	JMS I	WRITEP
	JMS I	OUTBIN
	K7410
	0
	ISZ ILC
	JMP I	OUTSK
SERALT,	SRALT
/
/	INDIRECT ABSOLUTE
/
ASM12,	TAD	VAL	/AFS MST USE WORD
	AND	K7600	/IS IT ON PAGE ZERO
	SZA CLA
	JMP	ASM12F	/NO
/
/	INDIRECT PAGE ZERO ABSOLUTE SYMBOL
/
	JMS	NSCHK
	 TAD	VAL	/SAVE PAGE ZERO ADDRESS
ASM12E,	TAD	K400	/ADD INDIRECT BIT
	DCA	TEMP6
	JMP I	AS00II	   
/
/	INDIRECT NON PAGE ZERO ABSOLUTE SYMBOL
/
	OPISUB
ASM12F, TAD I	.-1	   
	DCA	TEMP6
	TAD	BANK
	JMP I	AS00I3	/EXIT FOR SKIP CHECK
AS00I3, ASME3
K5377,	5377
/
/	LOCAL INDIRECT REFERANCE
/
ASM13,	JMS I	SPSTAB	/IS AFS ON PST
	JMP	ASM14	/NO ... MUST BE OFF PAGE
	TAD I	PSTCPR	/YES ... PST CODE WORD
	SMA CLA 	/IS AFS ON PAGE
	JMP	ASM14	/NO
	JMS	NSCHK
	 TAD	VAL	/AFS VALUE FROM MST
	AND	K177	/SAVE PAGE DISPLACEMENT
	TAD	K600	/ADD PAGE AND INDIRECT BIT
	DCA	TEMP6	/SAVE
	JMP I	AS00II	/GO OUTPUT INSTRUCTION
/
/	OFF PAGE INDIRECT
/
	OPISUB
ASM14,	TAD I	.-1	   
	DCA	TEMP6
	CLA IAC 	/SET BANK TO CURRENT
	JMP I	AS00I3	/EXIT FOR SKIP CHECK
NSCHK,	0
	TAD I	PTCPR
	AND	K2000
	SZA CLA
	IAC			/ITS A #
	JMP I	NSCHK


/"IF" - CONDITIONAL ASSEMBLY PSUEDO-OP

PIF,	JMS I	GETSYM
	JMP	PIFERR		/NOTHING THERE
	JMP	.+3		/SYM
	NOP			/CON
	JMP	PIFERR		/LIT
	TAD	CHR		/CK FOR COMMA
	TAD	M254
	SZA CLA
	IERROR			/NOT A COMMA
	ISZ	X0		/PREVENT FLAGGING COMMA
	JMS I	GETSYM		/YES, SET CTR TO SKIP N LINES
	NOP
	SKP	
	SKP			/I WANT A NUMBER
PIFERR,	IERROR	
	TAD	USE		/IS SYMBOL DEFINED?
	AND	K400
	SZA CLA
	DCA	S0		/YES, CONTINUE NORMAL ASSMBLY
	JMS I	SKIPL
	TAD	S0		/GET THE NUM.
	CIA
	DCA	IFCTR
	JMP I	NULLP

IFCTR,	0

ILC4,	0
	JMS I	OUTBIN
	ILC
	4
	JMP I	ILC4


/LAP & EAP PSUEDO-OPS

*6372	/MUST BE AT 6372 OR AT PAGE BOUND. +172 FOR K5376 TO WORK AS  SKIP
PLAP,	JMS I	SKIPL
	IAC			/LEAVE AUTO-PAGING MODE
K5376,	5376	/THIS REPLACES A SKIP.*******DO NOT MOVE********
PEAP,	JMS I	SKIPL
	DCA	APMSW		/ENTER AUTO-PAGING MODE
	JMP I	NULLP

	*6400
LISTON,	1411
	2324
	1116
	0700
	1716
	0000
HISP,	1011
	0710
	0023
	2005
	0504
	0020
	2516
	0310
	7700
RDER,	0022
	0501
	0405
	2277
	0000
	/	PART OF MAIN PROGRAM
	/	RECOUNT ROUTINE
	/FOLLOWING CODE CLEANS UP PST CODES BEFORE RECOUNTING
CLNPST,	CIA
	DCA IOINIT		/SET COUNTER
	TAD PSTBSE
	IAC
	DCA PSTCPR		/CODE POINTER
	TAD I PSTCPR		/LOOP
	AND K4003K		/KILL OBAC DUE TO THIS SYM.
	DCA I PSTCPR
	ISZ PSTCPR		/MOVE PTR
	ISZ PSTCPR
	ISZ IOINIT
	JMP .-6			/NOT DONE
	JMP I	.+1
	RECRET
	K4003K,	4003
/
/
/COMMON EXIT FOR DATA-GENERATING PSUEDO-OPS
/
POPEX,	DCA	BSSSW
	TAD	LFS		/CK FOR TAG
	SNA CLA
	JMP I	DCIL1		/NO TAG
	CMA			/DECREMENT PTSZE
	TAD	PTSZE
	DCA	PTSZE
	JMS I	RECTI		/YES RECOUNT THE PAGE
	ISZ	PTSZE		/RESTORE PTSZE
	JMS I	ISZPTX		/RESTORE PT PTRS
	JMP I	DCIL1		/RETURN FOR NEXT LINE
ISZPTX,	ISZPT



/ROUTINE T0 INITIALIZE I/O DEVICES

C2=JMS I CTYPE

IOINIT, 0
	CDF 10
	TAD	JL64
	DCA	TYPE
VN,	JMP I	VERSI
IOI,	JMS I   CRLF
	TAD	JHISP
	DCA	X1
	TAD	M5
	JMS	QUERY
	JMP	RGO
	TAD	JRDER
	DCA	X1
	TAD	M5
	JMS	QUERY
	JMP	RGO
RGO,    JMS     KSR
        TAD     JHSR
        TAD     JASR
        DCA I   INDEVP
        JMS I   CRLF
	TAD	JHISP
	DCA	X1
	TAD	M11
	JMS	QUERY
	NOP
	JMS	KSR
        JMP     .+4
        TAD     TYPE
        DCA     PUNCH
        JMP   IOX
        TAD     JL63
        DCA     PUNCH
        JMS I   CRLF
	TAD	JLIST
	DCA	X1
	TAD	M17
	JMS	QUERY
	NOP
	JMS	KSR
	IAC			/1 = PUNCH, 0 = TYPE
IOX,        DCA     LSTDEV
        JMP I   IOINIT



QUERY,	0
	DCA	JCOUNT
	TAD I	X1
	C2
	KSF
	SKP
	JMP I	QUERY
	ISZ	JCOUNT
	JMP	.-6
	ISZ	QUERY
	JMP I	QUERY
KSR,    0
        KSF
        JMP     .-1
        KRB
	DCA	TEM1
	TAD	TEM1
	JMS I	TYPE
	TAD	TEM1
	TAD	M331
	SZA CLA			/0="YES"
	ISZ	KSR		/NOT "YES"
        JMP I   KSR
LSTDEV=QUERY
M331,   -331
JHSR,   HSR-ASR
JASR,   ASR
INDEVP, INDEV
JL63,   L63
JL64,	L64
JCOUNT=TEM3
JHISP,	HISP-1
JLIST,	LISTON-1
JRDER,	RDER-1
VERSI,	VERNUM
M5,	-5
M11,	-11
M17,	-17

*6600
//
//PART OF MAIN PROGRAM MOVED FOR V03
//
/ROUTINE TO RESTORE BANK AND LSTSKP FOR PASS2
/WILL NOT FIT INTO ASM02 WHERE IT BELONGS

GETBAS,	0
	TAD I	BNKSAP
	DCA	BANK
	TAD I	SKPSAP
	DCA	LSTSKP
	JMP I	GETBAS

BNKSAP,	BNKSAV
SKPSAP,	SKPSAV

/INPUT ROUTINES

HSR,    0
        DCA     TEM10           /CLR TIMER
        RFC
HSR1,   RSF
        JMP     HSR2
	RRB
        JMP I   HSR
HSR2,	DCA	ASR		/WASTE SOME TIME
	ISZ     TEM10           /CK TIMER
        JMP     HSR1            /KEEP TRYING
REXIT,  TAD     X3              /CK FOR EMPTY BUFFER
        TAD     BUFBEG
        SZA CLA
        JMP	.+4            /NO, WE HAVE A PARTIAL BUFFER
        CDF 10
        JMP I   .+1             /YES TAPE HAS ENDED WITH NO END STATMT
        ERRE
	DCA I	X3		/FILL END OF BUFFER WITH 0'S
	TAD	X3
	TAD	BUFEN
	SZA CLA
	JMP	.-4
	JMP I	RG3P		/NOW RET. FOR PROCESSING

ASR,    0
        TAD     M50
        DCA     TEM11
        DCA     TEM10
ASR1,   KSF
        JMP     ASR2
        KRB
        JMP I   ASR
ASR2,   ISZ     TEM10
        JMP     ASR1
        ISZ     TEM11
        JMP     ASR1-1
        JMP     REXIT


M50,    -50
TEM10,  0
TEM11,  0
BUFBEG, 1-DATA
RG3P,   RG3
BUFEN,	1-LINBUF
/
/	ENTRY PSEUDO OPERATION
/
PENTRY, JMS I	GETSYM	/GET NEXT INPUT ITEM
	SKP		/NOTHING THERE
	JMP	.+3	/SYMBOL
	NOP		/CONSTANT
	IERROR		/LITERAL
	JMS I	SKIPL
	JMS I	SREST	/PLACE SYMBOL ON EXTERNAL SYMBOL TABLE
	CLA
	TAD	USE	/AFS MST USE WORD
	AND	K403	/SAVE SYMBOL LENGTH (& DEF. BIT FOR PASS 2)
	TAD	K2220	/ADD IN PROPER BITS
	DCA	USE	/FOR NEW MST USE WORD
	JMP I	NULLP	/EXIT FOR NEXT LINE
K2220,	2220
K403,	403
/
/
/
/INCREMENT PAGE TABLE POINTERS
/
ISZPT,	0
	ISZ	PTCPR	/INCREMENT PAGE TABLE CODE POINTER BY 2
	ISZ	PTCPR
	ISZ	PTSPR	/INCREMENT PAGE TABLE SYMBOL POINTER BY 2
	ISZ	PTSPR
	ISZ	PTOPR	/INCREMENT PT OP CODE POINTER
	JMP I	ISZPT
/
/CK CONSTANT FOR BLOCK PSEUDO-OP
/
PBSS4,	TAD	APMSW		/AUTOMATIC PAGING?
	SNA CLA
	TAD	K2		/YES, 176 IS MAXIMUM
	TAD	M200		/NO, 200 IS MAX
	TAD	S0		/CHECK CONSTANT
	SMA SZA CLA
	IERROR			/TOO BIG
	TAD	S0		/IS CONSTANT 0?
	SNA
	JMP I	PBSS2J		/YES, EQUIVALENCE TAG
	JMP I	PBSS5I		/NO, CREATE BLOCK OF THIS SIZE
PBSS2J,	PBSS2
PBSS5I,	PBSS5

/
/PATCH TO DELETE DEFINED BIT IN PST FOR A TAG
/EQUIVALENCED TO A LINE THAT OVERFLOWED THE PAGE
/
EQVFIX,	TAD	EQVBIT		/WAS THERE SUCH A TAG?
	SNA CLA
	JMP I	L55CP		/NO
	TAD I	EQVBIT		/YES, GET PST CODE FOR THIS TAG
	TAD	K4000		/CANCEL DEFINED BIT
	DCA I	EQVBIT
	TAD	K200		/SET EQUIVALENCE BIT FOR NEXT LINE
	DCA	EQVBIT		/WHEN NEXT PAGE GETS GOING
	JMP I	L55CP		/RETURN TO ASSEMBLE THE PAGE WE HAVE
L55CP,	L55C


/
/CK FOR TYPE OF SYMBOL
/CALL SEQ:	JMS WHATYP
/		RET. IF USER SYMBOL
/		RET. IF OP SYMBOL
/
WHATYP,	0
	TAD	USE
	AND	K3000
	TAD	M3000
	SNA CLA
	ISZ	WHATYP
	JMP I	WHATYP


/
/EXECUTE ISZ GTSYM (MOVE RETURN POINTER) ONLY IF IFCTR .GE. 0
/OTHERWISE MOVE LINE PTR TO NEXT SLASH, SEMI-COLON OR CAR.RET.
/& ISZ IFCTR & TREAT AS A NULL LINE.
/
CKIF,	0
	TAD I	IFCT		/IS CONDITIONAL NON-ASM IN EFFECT?
	SPA CLA
	JMP	.+3		/YES: DO NOT ASMBL LINE
	ISZ I	GETSYM		/NO, MOVE RETRN PTR & CONT. AS USUAL
	JMP I	CKIF
	ISZ I	IFCT		/COUNT IGNORED LINE
	NOP
	TAD	CHR		/MOVE LINE PTR TO END OF LINE
CKIF2,	SNA
	JMP	CKIF3		/FOUND A CR
	TAD	M257
	SNA
	JMP	CKIF3		/SLASH
	TAD	M14
	SNA CLA
	JMP	CKIF3		/SEMI-COLON
	JMS I	GETCHR		/TRY NEXT
	JMP	CKIF2
CKIF3,	JMP I	.+1
		ITM15
M257,	-257
M14,	-14
IFCT,	IFCTR
*6776

/PAGE SYMBOL TABLE (200 WORDS)
/DOUBLE WORD ENTRIES
/REBUILT FOR EACH CORE PAGE OF CODE
/EVERY SYMBOL DEFINED OR REFERENCED ON
/GIVEN PAGE IS ENTERED
/TYPICAL ENTRY*:	WD1=SYMBOL ID
/			WD2=CODE BITS
/SYMBOL ID=ADDRESS OF SYMBOL ENTRY IN MAIN SYM. TAB
/CODE: BIT0=1 IF SYM. DEF. ON CUR. PAGE
/	BIT11=1 IF SYM REFERENCED NORMALLY BY A MR1 ON THE PG.
/	BIT10=1 IF SYM. REF'D. WITH A #
/	BITS 1-9 USED FOR COUNTING AMOUNT OF OBACTR
/	WHICH IS DUE TO THIS SYMBOL
/SYMBOLS ARE ENTERED ON PST IN ORDER OF APPEARENCE
/IN SOURCE
/NO MORE THAN 64 (DEC) SYMBOLS MAY BE REF'D.
/ON ANY PAGE.
/NOTE: THE SIZE OF THIS TABLE SHOULD NOT BE
/INCREASED UNLESS LFS TABLE IS ALSO INCREASED.


*7176

/PAGE TABLE (402 WORDS)
/DOUBLE WORD ENTRIES
/ONE ENTRY FOR EACH INSTRUCTION TO BE ASSEMBLED
/ROOM FOR 1 EXTRA ENTRY TO COVER PAGE OVERFLOW
/A NEW TABLE FOR EACH PAGE OF CODE
/TYPICAL ENTRY:	WD1=CODE BITS
/		WD2=SYMBOL WORD
/CODE:	BIT1=1 IF # REF
/	BIT2=1 IF CDF TO CUR BANK
/	BIT3=1 IF INDIRECT
/	BIT4=1 IF BLOCK 0 (FOR EQUIVALENCED TAGS)
/	BIT5=1 IF SPECIAL CALL CONST
/	BIT6=1 IF SKIP INST.
/	BIT7=1 IF AFS IS CONST
/	BIT8=1 IF PARAMETER
/	BIT9=1 IF OPR OR IOT INST.
/	BIT10=1 IF AFS IS LITERAL
/	BIT11=1 IF LFS OCCURS
/	BIT0 UNUSED
/THE SYMBOL WORD=0 IF CODE BIT9=1
/	=THE ACTUAL CONST OR LITERAL IF BITS2,5,7 OR 10=1
/	=THE SYMBOL ID (MST ENTRY ADDR.) FOR AN ADDR. PARAMETER
/	OR FOR THE AFS OF AN MRI


/
/TYPE VERSION NUMBER
/(THIS IS ONCE ONLY CODE)
/(OVERWRITTEN BY P.S.T.)
/
*7000
/
VERNUM,	JMS I	CRLF
	TAD	JVERS
	DCA	X1
	TAD	M26
	JMS I	MTYPE
	NOP
	TAD	K7000X
	DCA I	VNOP
	JMP I	.+1
	IOI
JVERS,	VERSN-1
MTYPE,	QUERY
M26,	-15
VNOP,	VN
K7000X,	NOP
VERSN,	2004			/PDP-8 SABR DEC-08-A2C2-V#
	2055
	7040
	2301
	0222
	4004
	0503
	5560
	7055
	0162
	0462
	5561		/- VERSION # (1ST DIGIT)
	7001		/2ND DIGIT AND PATCH LEVEL



/SABR BANK 1 SECTION

/TABLES

FIELD 0



*0
EQUTB,	0		/EQUIVALENCE TABLE
			/100 WORDS
			/TABLE IS REINITIALIZED BEFORE EACH PAGE BEGINS
			/COLLECTION, IF NO EQUIV. IS LEFT FROM PREVIOUS PAGE
			/MULTIPLE WORD ENTRIES
			/ONE ENTRY IS MADE FOR
			/EACH LOC. TAG WHICH HAS
			/EQUIVALENTS
			/1ST WORD OF EACH ENTRY
			/CONTAINS NO. OF OTHER WORDS
			/IN THE ENTRY
			/OTHER WORDS ARE SYMBOL ID'S
			/(MST ADDRESSES) OF SYMBOLS
			/EQUIVALENT TO THE PARTICULAR
			/LOCATION TAG


*100

/BSEEST, 0		/EXTERNAL SYMBOL TABLE
			/100 WORDS
			/SINGLE WORD ENTRIES
			/CONSISTING OF THE SYMBOL ID (MST ADDRESS)
			/EACH EXT. SYM. IS 	ENTRED IN
			/THE TABLE WHEN IT FIRST
			/OCCURS IN THE SOURCE AND
			/ASSIGNED A LOCAL EXT. NUMBER
			/ACCORDING TO ITS PLACE IN THE
			/TABLE.


*200

/PTOPTB, 0		/PAGE OP CODE TABLE
			/200 WORDS
			/SINGLE WORD ENTRIES
			/ONE FOR EACH ENTRY IN PAGE TABLE
			/ENTRY=ACTUAL OP CODE FOR
			/ALL MRI, OPR OR IOT'S
			/OR 0 FOR ALL PARAMETERS
			/NEW TABLE FOR EACH PAGE OF CODE
			/NOTE: THIS TABLE MAY OVERFLOW BY 1 WORD DURING COLLECTION
			/OVERFLOW CAUSED BY PUTTING INFO ON TABLE BEFORE CK FOR OVERFLOW
			/NO HARM IF ASSEM. PHASE LIT. TAB FOLLOWS

	CDF CIF 10	/CODE FOR START AT 200
	JMP I	.+1
	START

*400

/LITBSE, 0		/ASSEMBLY PHASE LITERAL TABLE
			/200 WORDS
			/DOUBLE WORD ENTRIES
			/MUST BE SEPARATE FROM COLL.
			/PHASE LIT. TAB. BECAUSE BOTH
			/GOING AT ONCE IN PASS 2.
			/THIS TABLE CONTAINS NOT
			/ONLY LITERALS BUT ALSO
			/OFF PAGE POINTERS
			/1ST WORD OF ENTRY = 1 OR 2 OR 6
			/1 MEANS  LITERAL &
			/2ND WORD CONTAINS ACTUAL VALUE
			/2 MEANS OFF PAGE SYMBOL PTR
			/& 2ND WORD CONTAINS SYMBOL ID.
			/6 MEANS OFF PAGE SYM. PTR
			/WHERE SYMBOL REFERENCED BY A #
			/2ND WORD AS FOR 2
			/TABLE BUILT ANEW FOR EACH
			/PAGE OF CODE.


*600

/LFSBSE, 0		/LOC FIELD SYMBOL TABLE
			/100 WORDS
			/SINGLE WORD ENTRIES
			/EACH=SYMBOL ID (MST ADDRESS)
			/OF THE GIVEN LFS
			/LFS'S ARE ENTERED IN ORDER
			/OF THEIR APPEARENCE IN SOURCE
			/TABLE REBUILT FOR EACH PAGE OF CODE
			/NOTE: THIS TABLE MUST BE AT LEAST AS LONG
			/AS THE PST TO PREVENT LFS OVERFLOW



*700

PEBSE,	0		/PAGE ESCAPE PUSH DOWN LIST
			/40 WORDS
			/SINGLE WORD ENTRIES
			/EACH ENTRY IS 0,2, OR 4
			/BEING THE VALUE OF THE
			/PAGE ESCAPE (0,2,OR 4 WORDS)
			/OF EACH PAGE ASSEMBLED
			/THESE NOS. ARE SAVED DURING
			/PASS 1 & USED DURING
			/PASS 2
*740
/SORT LISTS

/SORT LIST FOR INITIAL CHAR. OF LITERAL
SL3,	242		/QUOTE
	255		/MINUS
	304		/D
	313		/K
	-1		/SORT LIST MUST BE FOLLOWED BY A NEGATIVE



/BRANCH LISTS
BL6,	RLN15
	RLN2
	RLN2
	RLN3
	RLN3

/SORT LIST FOR BEGINNING OF INPUT ITEM
SL2,	255		/MINUS
	250		/LEFT PARIN
	242		/QUOTE
SL6,	273		/SEMI-COLON
	257		/SLASH
SL1,	240		/SPACE
	211		/TAB
	000		/CR
	-1		/SORT LIST MUST BE FOLLOWED BY A NEGATIVE
/BRANCH LIST FOR BEGINNING OF INPUT ITEM
BL2,	ITM4		/NEGATIVE
	ITM8		/LITERAL
	ITM7		/ALPHA CONSTANT
	ITM15		/NULL ITEM
	ITM15		/NULL ITEM
	ITM2		/IGNORE SPACE
	ITM2		/IGNORE TAB
	ITM15		/NULL ITEM
/BRANCH LIST FOR INITIAL CHAR. OF LITERL
BL3,	ITM7		/GET ASCII VALUE FOR LITERAL
	ITM10		/SET NEG. SW.
	ITM11		/SET MODE TO DECIMAL
	ITM12		/SET MODE TO OCTAL






*1000

/LTBSE,	0		/COLLECTION PHASE LITERAL TABLE
			/100 WORDS
			/SINGLE WORD ENTRIES
			/CONTAINING ACTUAL VALUES
			/TABLE CONTAINS NOT ONLY
			/LITERALS BUT ALSO
			/POINTERS TO CONSTANT
			/AND ABSOLUTE ADDRESSES.
			/TABLE BUILT ANEW FOR
			/EACH PAGE OF CODE.

/INPUT DATA BUFFER
/546 (OCTAL) WORDS
/ALL DATA CHARACTERS READ DIRECTLY INTO THIS BUFFER
/1 CHAR. PER WORD
/THE ACTUAL SIZE OF THE BUFFER IS ARBITRARY.

*1100

DATA,	0



/LINE BUFFER (73 WORDS)
/CONTAINS ASCII CHARACTERS, 1 PER WORD
/NULLS & RUBOUTS DONT MAKE IT
/END OF LINE MARKED BY A 0000
/CR,LF,FF DON'T GO INTO THE BUFFER

/BUFFER IS LAID OUT AS FOLLOWS:

*1646
LINBUF,	0	/110(OCTAL) WORDS FOR LINE CHARACTERS

*1756
/LINEND,	0	/1 EXTRA WORD TO PREVENT OVERFLOW
			/(GETS THE 0 WHEN LINE IS TOO LONG)
*1757
SL7,	215
	214
	212
	240
	211		/SORT LIST MUST BE FOLLOWED BY A NEGATIVE
	-1
BL1,	PTEXT	/SPACE
	PTEXT	/TAB
	TEXERR	/000
BL7,	L72S
	L72X
	L72+2
	L72+2
	L72X



/MAIN SYMBOL TABLE

*2000


/ENTRIES ARE COMPOSED OF THE FOLLOWING:
/	FIRST A 1 WORD HEADER CODE
/	THEN THE SYMBOL ITSELF IN PACKED 6BIT ASCII (1-3 WORDS)
/	FINALLY THE 1 WORD BINARY VALUE OF THE SYMBOL

/THE HEADER CODE IS LAID OUT AS FOLLOWS:
/(A) FOR OP CODE SYMBOLS:
/	BIT0=1 AFTER THE SYMBOL HAS BEEN PRINTED BY PRSYM
/	BITS1&2=3  (THESE ARE THE SYMBOL TYPE BITS)
/	BIT3=1 FOR MEMORY REFERENCE INSTRUCTIONS
/	BITS4&5=THE MICRO-GROUP FOR OPR INSTRUCTIONS (0 FOR MRI AND IOT INSTS.)
/		(NOTE: MICRO-GROUP IS SET TO 0 FOR CLA)
/	BIT6=1 IF THE SYMBOL IS A PSUEDO-OP
/	BIT7=1 IF THE INST. IS A SKIP TYPE INST.
/	BIT8=1
/	BIT9=0
/	BITS10&11=THE NUMBER OF PACKED ASCII SYMBOL WORDS IN THE ENTRY

/(B) FOR OTHER SYMBOL TYPES:
/	BIT0 AS ABOVE
/	BITS1&2=0 FOR ABSOLUTE AND COMMON SYMBOLS
/		=1 FOR RELOCATABLE SYMBOLS
/		=2 FOR EXTERNAL SYMBOLS
/	BIT3=1 AFTER THE SYMBOL HAS BEEN DEFINED
/	BIT4=1 FOR ENTRY SYMBOLS
/	BIT5=1 IF THE SYMBOL IS EVER REFERENCED BY A #
/	BIT6=1 IF THE SYMBOL IS IN COMMON
/	BIT7=1 IF THE SYMBOL IS A DUMMY SYMBOL
/	BITS8-11 AS ABOVE
/MST=.
	3053      /ABSYM
	0102
	2331
	1500
	PABSYM
	3052      /ARG
	0122
	0700
	PARG
	3412      /AND
	0116
	0400
	AND 0
	3053      /BLOCK
	0214
	1703
	1300
	PBSS
	3052      /CALL
	0301
	1414
	PCALL
	3053      /COMMN
	0317
	1515
	1600
	PCOMMN
	3112      /CIA
	0311
	0100
	CIA
	3012      /CLA
	0314
	0100
	CLA
	3112      /CLL
	0314
	1400
	CLL
	3112      /CMA
	0315
	0100
	CMA
	3112      /CML
	0315
	1400
	CML
	3053      /DECIM
	0405
	0311
	1500
	PDEC
	3053      /DUMMY
	0425
	1515
	3100
	PDUMMY
	3412      /DCA
	0403
	0100
	DCA 0
	3052      /EAP
	0501
	2000
	PEAP
	3052      /END
	0516
	0400
	PEND
	3053      /ENTRY
	0516
	2422
	3100
	PENTRY
	3053	/FORTR
	0617
	2224
	2200
	PFORT
	3212      /HLT
	1014
	2400
	HLT
	3051	/IF
	1106
	PIF
	3053      /CPAGE
	0320
	0107
	0500
	PIFF
	3432      /ISZ
	1123
	3200
	ISZ 0
	3412	/INC (NON-SKIP ISZ)
	1116
	0300
	ISZ 0
	3112      /IAC
	1101
	0300
	IAC
	3012      /IOF
	1117
	0600
	IOF
	3012      /ION
	1117
	1600
	ION
	3412      /JMP
	1215
	2000
	JMP 0
	3412      /JMS
	1215
	2300
	JMS 0
	3012      /KRB
	1322
	0200
	KRB
	3032      /KSF
	1323
	0600
	KSF
	3052      /LAP
	1401
	2000
	PLAP
	3112      /NOP
	1617
	2000
	NOP
	3053      /OCTAL
	1703
	2401
	1400
	POCT
	3053	/OPDEF
	1720
	0405
	0600
	OPDEX
	3212      /OSR
	1723
	2200
	OSR
	3052      /PAGE
	2001
	0705
	PPAGE
	3053      /PAUSE
	2001
	2523
	0500
	PPAUSE
	3012      /PLS
	2014
	2300
	PLS
	3032      /PSF
	2023
	0600
	PSF
	3053      /REORG
	2205
	1722
	0700
	PRORG
	3053      /RETRN
	2205
	2422
	1600
	PRTN
	3112      /RAL
	2201
	1400
	RAL
	3112      /RAR
	2201
	2200
	RAR
	3012      /RFC
	2206
	0300
	RFC
	3012      /RRB
	2222
	0200
	RRB
	3032      /RSF
	2223
	0600
	RSF
	3112      /RTL
	2224
	1400
	RTL
	3112      /RTR
	2224
	2200
	RTR
	3232      /SKP
	2313
	2000
	SKP
	3053	/SKPDF
	2313
	2004
	0600
	SKPDEX
	3232      /SMA
	2315
	0100
	SMA
	3232      /SNA
	2316
	0100
	SNA
	3232      /SNL
	2316
	1400
	SNL
	3232      /SPA
	2320
	0100
	SPA
	3112      /STA
	2324
	0100
	STA
	3112      /STL
	2324
	1400
	STL
	3232      /SZA
	2332
	0100
	SZA
	3232      /SZL
	2332
	1400
	SZL
	3232      /SPC=SPA+CLA (USED BY COMPILER)
	2320
	0300
	SPA CLA
	3412      /TAD
	2401
	0400
	TAD 0
	3052	/TEXT
	2405
	3024
	PTEXT
	3012      /TLS
	2414
	2300
	TLS
	3032      /TSF
	2423
	0600
	TSF


ACH=20
ACM=21
ACL=22

	0452      /ACH
	0103
	1000
	ACH
	0452      /ACM
	0103
	1500
	ACM
	0452      /ACL
	0103
	1400
	ACL

II,	0451	/I
	1100
	0400

STTP=.
CORE1=7600
*CORE1-1

/THE OCCURRENCE TABLE EXTENDS DOWNWARD FROM HERE
/TOWARD THE MAIN SYMBOL TABLE
/& SHARING THE SAME SPACE WITH IT.
/THIS TABLE IS VARIABLE, BEING COLLAPSED
/AS MUCH AS POSIBLE DURING USE. THE ONLY
/THING LEFT ON IT AT THE END ARE UNDEFINED
/SYMBOLS.
/THE OCC. TAB. CONTAINS AN ENTRY FOR EVERY
/REF. TO AN AS YET UNDF. SYMBOL. EACH
/TIME A SYMBOL IS DEFINED THE 	TABLE IS SEARCHED
/TO SEE IF FORWARD REFERENCES TO IT EXIST.
/IF SO THEY ARE OUTPUT & THE TABLE
/CONDENSED.
/ENTRIES CONSIST OF 2 OR 3 WORDS
/STRUCTURED AS BELOW:
/HIGH WORD:	LOCATION OF REFERENCE
/LOW WORD:	SYMBOL I.D.
/OPTIONAL WORD:	# FLAG
/THE LOC. WORD CONTAINS THE PROG. ADDR. WHERE
/THE VALUE OF THE SYM. MUST BE ASSEMBLED
/THE # FLAG=1 IF IT EXISTS. IT WILL
/EXIST ONLY FOR THOSE ENTRIES WHERE THE
/SYM. WAS REF'D. BY A #.
/THE TABLE IS ALWAYS SEARCHED IN REVERSE
/FROM LOW CORE UPWARD
/THE O.T. PTR (OTP) ALWAYS PTS. TO THE NEXT FREE
/LOCATION BELOW THE TABLE
/THE TABLE HAS NO IMPORTANCE DURING PASS 2.


			/MEMORY IS NOT USED


$
