14 /COPYRIGHT (C) 1971,1974,1975
15 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
19 /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A
20 /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-
21 /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER
22 /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE
23 /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO
24 /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
25 /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
28 /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
29 /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
30 /EQUIPMRNT COROPATION.
32 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
33 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
45 /SABR.V17 DEC-08-A2D2-17
47 /COPYRIGHT 1971, DIGITAL EQUIPMENT CORPORATION, MAYNARD MASSACHUSETTS 01754
48 / C. MCCOMAS/R. LARY/B. CLOGHER
53 /FIXES TO SABR FOR V18 J.K 1975
55 / .LITERAL POOL OVERFLOW
56 / .INCORRECT LINE NUMBER WITH ERROR MESSAGE
59 /ASSEMBLY, LOAD AND SAVE INSTRUCTIONS
72 / DEFINE LOCATIONS OF MONITOR SUBROUTINES
87 SYMBOL, 0 /PTR TO CURRENT USE WORD IN MST
90 OTP, CORE1-1 /OCC. TAB. PTR (NEXT FREE WORD BELOW)
91 STT, STTP /PTR TO 1ST FREE WORD OF SYM. TAB.
92 /(KEEP STT AFTER OTP FOR INITA)
94 X0, 0 /LINE BUFFER INDEX
97 X3, 0 /HSR BUFFER INDEX
105 / INDIRRECT REFERENCES
107 ICPLFS, CPLFS /CHECK FOR AND PROCESS COLLECTION LFS
109 CTYPE, L61 /CHARACTER TYPEOUT ROUTINE
111 DUMMY, DUM /DUMMY ROUTINE
112 GETCHR, L65 /ROUTINE TO READ NEXT CHAR
113 GETSYM, GTSYM /ROUTINE TO INPUT AND DECODE NEXT SYMBOL
115 LFSCHK, LFSCK /CHECK FOR A LFS
116 OBSYM, OBNSYM /OBTAIN SYMBOL FROM MST
119 OTYPE, L62 /OCTAL TYPEOUT ROUTINE
120 OUTBIN, OUTBN /ROUTINE TO OUTPUT COMP WORD AND REL BITS
121 OUTSKP, OUTSK /ROUTINE TO OUTPUT A SKIP INSTRUCTION
124 PUNCH, L63 /BINARY PUNCH ROUTINE
125 RDIL, DCIL /READ AND DECODE ONE INPUT LINE
128 SKIPL, L72 /SKIPS UNTIL A RETURN OR SEMICOLON
129 SLITAB, SLTAB /SEARCH LITERAL TABLE
130 SPSTAB, SPSTB /SEARCH PAGE SYMBOL TABLE
131 SREST, L66 /ROUTINE TO SEARCH EXTERNAL SYMBOL TABLE
133 TEST, TSCHR /ROUTINE TO TEST CHARACTERS FOR EQUALITY
134 TYPE, L64 /TTY TYPE ROUTINE
138 / IMPORTANT VARIABLES
140 ACTR, 0 /ASSEMBLY COUNTER
141 BSSSW, 0 /BSS 0 IN PROCESS SWITCH
142 CHR, 0 /LOC TO HOLD CURRENT CHARACTER
143 CSUM, 0 /BINARY CHECK SUM
144 EQVOPR, EQUTB /EQUIVALENCE TABLE OUTPUT POINTER
145 EQVIPR, EQUTB /EQ. TB. INPUT PTR.
146 ILC, 0 /CURRENT LOCATION
147 LFSPTR, 0 /POINTER TO LFS TABLE ENTRY
148 LINE, 0 /NO OF LINES SINCE LAST LFS
149 LITSZE, 0 /SIZE OF LIT TAB (ASM PHASE)
150 LTSZE, 0 /SAME FOR COLL. PHASE
151 LSTSKP, 0 /LAST INSTRUCTION SKIP INDICATOR
152 LSTBNK, 0 /LAST INSTRUCTION BANK INDICATOR
153 OBACTR, 0 /OFF BANK INSTRUCTION ADDITION COUNTER
154 OPSCTR, 0 /OFF PAGE SYMBOL COUNTER
155 /***** KEEP ITEMS SO INCLOSED IN THE GIVEN ORDER FOR INITA
157 PAG, 0200 /CURRENT PAGE BITS
158 ESTSIZ, 0 /HOLDS SIZE OF EXTERNAL SYMBOL TABLE
160 APMSW, 0 /AUTOMATIC PAGING MODE SWITCH
161 TEM7, 1 /SPECIAL VARIABLE USED BY ASME5
164 FORFLG, 0 /FORTR PSUEDO-OP FLAG
165 /POS NON-0 MEANS IGNORE DATA
169 PGEESC, 0 /HOLDS SIZE OF PAGE ESCAPE REQUIRED FOR CUR PAGE
171 PHASE, 0 /PHASE SWITCH
172 PSTCPR, 0 /PAGE SYMBOL TABLE CODE POINTER
173 PSTSPR, 0 /PAGE SYMBOL TABLE SYMBOL POINTER
174 PSTSZE, 0 /SIZE OF PST
175 PTCPR, 0 /PAGE TABLE CODE POINTER
176 PTOPR, 0 /PAGE TABLE OP CODE POINTER
177 PTSPR, 0 /PAGE TABLE SYMBOL POINTER
184 PTSIZ=PTSZE /KEYPUNCHING ERROR
185 LITSIZ=LITSZE /KEYPUNCHING ERROR
188 LFLG, 0 /0 IF NULL LINE
189 EFLG, 0 /ERROR FLAG, 6BIT CHAR. IN LEFT HALF
190 VFLG, 0 /0 IF NO VALUE TO OUTPUT
191 AFLG, 0 /DITTO FOR ADDRESS
192 CODE, 0 /RELOCATION CODE
193 ADDRES, 0 /INSTR. ADDRESS
194 VALUE, 0 /INSTR. VALUE
197 LFS, 0 /KEEP THIS LIST ORDERED AS GIVEN
198 OP, 0 /TO AGREE WITH TLFS LIST
213 / FREQUENTLY USED CONSTANTS
240 / CORE LAYOUT POINTERS
242 PTOPTB=K200 /PAGE OP CODE TABLE 1 IN BANK 1
243 BSEEST=K100 /BASE OF EXTERNAL SYMBOL TABLE IN BANK 1
244 MST=K2000 /BASE MAIN SYM. TAB IN BANK1
245 LFSBSE=K600 /BASE OF LOCATION FIELD SYMBOL TABLE IN BANK 1
246 LITBSE=L55I /BASE OF ASSEMBLY PHASE LITERAL TABLE IN BANK 1
247 PSTBSE, PSTB /BASE OF PAGE SYMBOL TABLE IN BANK 0
248 PTBSE, PTB /BASE OF PAGE TABLE IN BANK 0
249 LTBSE=K1000 /BASE OF COLL. PHASE LIT. TABLE IN BANK 1
255 IERROR=JMP I . /ERROR MESSAGES
271 RSTRT, JMS I INI /INITIALIZE PAGE TABLE POINTERS
273 RSTRT1, JMS I INCPTI /INCREMENT PAGE TABLE POINTERS
274 JMS I RDIL /INPUT AND DECODE ONE LINE
275 JMS I CKCSWP /CK FOR MISSING ARG
276 DCA BSSSW /ALSO CLR BSS IS PROGRESS SW
277 JMS I STCE /SET COUNTERS FOR CURRENT LINE
280 DCA I PTOPR /TO PT OP CODE WORD
282 TAD SK /OR IN SKIP BIT
285 TAD I PTCPR /IN CASE LFS BIT IN ALREADY
287 TAD IB /OR IN INDIRECT BIT
291 DCA TEM1 /FOR NEW PT CODE WORD
292 TAD EXP /DO WE HAVE A PAR?
295 TAD UMIC /A MICRO INST?
297 JMP RSTRT4 /NO AN MRI
298 TAD K4 /OR IN OPERATE BIT
299 JMP COMP /EXIT TO COMPUTE PAGE SIZE
303 RSTRT5, TAD K10 /PLACE PAR BIT ON PAGE TABLE
307 TAD AFS /IS AFS A CONSTANT
310 TAD K20 /YES ... CONSTANT BIT
311 RSTRT2, TAD TEM1 /+PT CODE WORD
312 DCA TEM1 /FOR NEW PT CODE WORD
313 TAD S0 /ACTUAL BINARY CONSTANT
314 JMP COMPGO /EXIT TO COMPUTE PAGE SIZE
316 SZA CLA /IS AFS A LITERAL
318 TAD K2 /YES ... LITERAL BIT
319 JMP RSTRT2 /SAVE AS CONSTANT FROM THIS POINT
320 TAD AFS /PLACE AFS ON PST
322 TAD NSGN /CK FOR # REF
325 COMP, TAD TEM1 /GET ALL THE BITS
326 DCA I PTCPR /TO THE CODE WORD
328 / NOW COMPUTE THE CURRENT PAGE SIZE
330 TAD LFS /IS THERE AN LFS
332 JMS I RECTI /YES ... EXIT TO RECOUNT PAGE
333 JMS I CPGESI /COMPUTE ACTUAL PAGE SIZE
334 TAD M200 /SUBTRACT PHYSICAL PAGE SIZE
335 SPA SNA CLA /IS SIZE .GT. PHYSICAL SIZE
336 JMP RSTRT6 /NO ... GET NEXT
337 JMS I PSHINI /YES ... PUSH CURRENT INPUT LINE
338 TAD PUPGE /RESTORE LAST PAGE ESCAPE
340 CLA CMA /DECREMENT PAGE TABLE SIZE
344 / ASSEMBLE THE CURRENT PAGE
346 JMS I L55I /ASSEMBLE CURRENT PAGE
348 JMS I FIXI /FIX ILC IF PASS 2
349 JMS I POPINI /POP LAST INPUT LINE
350 JMS I INI /INITIALIZE PT POINTERS
351 DCA I RECTI /CLR RECOUNT FLAG FOR CPLFS
352 JMP RSTRT1+2 /EXIT TO PROCESS POPPED LINE
354 RSTRT6, TAD PGEESC /SAVE CURRENT PAGE ESCAPE
355 DCA PUPGE /IN CASE NEXT LINE OVERFLOWS PAGE
368 / PAGE PSEUDO OPERATION
371 CLA CMA /DECREMENT PAGE TABLE SIZE
375 DCA PTSZE /FOR NEW PAGE TABLE SIZE
376 JMS I L55I /ASSEMBLE CURRENT PAGE
378 JMP RORGX /INITIALIZE AND INPUT ANOTHER LINE
380 / REORG PSEUDO OPERATOIN
382 PRORG, JMS I GETSYM /GET NEXT INPUT ITEM
388 TAD S0 /NEW RELOCATABLE ORIGIN
389 AND K7600 /MASK OFF PAGE DISPLACEMENT BITS
390 SNA /ARE WE TRYING TO REORIGIN BELOW 200
391 IERROR /YES ... NOT ALLOWED
392 DCA RORG1 /SAVE NEW ORIGIN
393 CLA CMA /DECREMENT PAGE TABLE SIZE
395 SNA /IS THIS THE BEGINNING OF A PAGE
399 TAD RORG1 /NEW ORIGIN
400 DCA PAG /TO PROPER LOCATION
402 TAD RSTRTX /RETURN AT RSTRT INSTEAD OF RDL1
404 JMP I NULLP /RE-INITIALIZE AND GO
411 / ROUTINE TO CAUSE CURRENT PAGE TO BE ASSEMBLED
413 /THIS ROUTINE ACTS AS THE DRIVER FOR THE ASSEMBLY
414 /PROCESS. MOST OF THE ACTUAL ASSEMBLY WORK
415 /IS DONE BY ASMBL,A1,A2,& ASM02.
417 / CALL ASMBL TWICE. THE FIRST TIME
418 / (ACTR=0) PROHIBIT OUTPUT BY CONVERTING
419 / "JMS OUTBIN" TO "JMS DUMMY". BUT
420 / ALSO CONVERT "JMS DUMMY" TO "JMS OUTBN"
421 / SO THAT OUTPUTTING OF OCCURANCES
422 / WILL OCCUR IN FIRST CALL TO ASMBL.
423 / IN GENERAL, IN THE FIRST RUN THRU ASMBL
424 / NOTHING HAPPENS EXCEPT THAT TAGS ARE
425 / DEFINED (BY LFSCK). AS THE TAGS ARE
426 / DEFINED LFSCK ALSO CAUSES THE
427 / OCC.TAB. TO BE SEARCHED FOR PREVIOUSLY
428 / UNRESOLVED FORWARD REFERENCES TO THIS
429 / TAG. IF FOUND, RELOCATABLE POINTERS TO
430 / THE TAG ARE OUTPUT AT ALL REQUIRED
431 / ADDRESSES DURING PHASE1 OF ASMBL.
432 / AFTER THE 1ST ASMBL, OUTBIN & DUMMY ARE
433 / SWITCHED BACK TO NORMAL & ASMBL
434 / IS CALLED AGAIN. DURING 2ND ASMBL
435 / THE TAG DEFN. SECTION OF LFSCK IS
436 / BY-PASSED & ALL CODE EXCEPT OCCURANCES
439 / DURING THE LISTING PASS MOST OF THE
440 / ASSEMBLY IS DONE ON A LINE-BY-LINE
441 / BASIS BY ASM02 SO L55 HAS LITTLE
442 / TO DO. IT JUST CALLS A2 TO
443 / OUTPUT THE LITERAL POOL & THEN
444 / A1 TO INIT. ASSEMBLY OF THE NEXT
448 JMP I L55B /CHANGED FROM V16 TO FIX LISTING BUG
452 JMS I L55A /CHECK COMMON PUNCHED
453 TAD L56 /SET DUMMY ROUTINE TO OUTPUT
455 TAD L56+1 /SET OUTPUT ROUTINE TO DUMMY
457 DCA ACTR /CLEAR ASSEMBLY COUNTER
458 TAD EQVOPR /SAVE FOR 2ND ASSEMBL
460 JMS I ASSMBL /ASSEMBLE PAGE FIRST TIME
461 TAD L56 /RESTORE OUTPUT ROUTINE
463 TAD L56+1 /RESTORE DUMMY ROUTINE
465 ISZ ACTR /SET ASSEMBLY COUNTER
466 TAD TEM55 /RESTORE AS BEFORE 1ST ASSEMBL
468 JMS I ASSMBL /ASSEMBLE AND OUTPUT THIS TIME
480 JMS I A1P /INITIALIZE NEXT PAGE
488 /COLLECTION PHASE ROUTINE
489 /RECOUNT THE CURRENT PAGE BECAUSE OF AN LFS
490 /CALL WITH AC=0, LEAVES AC=0
491 /FUNCTION:WHEN A NEW TAG IS DEFINED ON PAGE
492 / OPSCTR & OBACTR MAY NEED TO BE
493 / REDUCED. CPLFS TAKES CARE OF OPSCTR
494 / BUT OBACTR REQUIRES REVIEWING THE
496 /OPERATION: (1) CALL CLNPST TO CLEAR BITS 1-9
497 / OF ALL PST CODE WORDS-WIPES OUT
498 / SHARE OF OBACTR DUE TO EACH SYM.
499 / (2) RE-INIT PAGE & CLR OBACTR
500 / (3) FETCH ITEM FROM PAGE TABLE
501 / (4) SET ALL INSTR.TYPE FLAGS ACCORDINGLY
503 / (6) INC PAGE TABLE PTRS TO NEXT ITEM
505 / CONTINUE THRU ENTIRE TABLE.
508 TAD PSTSZE /ANYTHING ON PST?
510 JMP I CLENUP /YES, CLEAN PST CODES
512 RECRET, JMS I INISS /DO INITS.
513 DCA OBACTR /ZERO OFF BANK ADDITION COUNTER
514 TAD PTSZE /SIZE OF PT
516 DCA RECT1 /TO INDEX LOCATION
518 / THIS IS THE RECOUNT LOOP
521 TAD I PTOPR /OP CODE FROM PT
524 TAD I PTCPR /CK FOR SKIP INST
527 TAD I PTCPR /CK FOR # REF
530 TAD I PTCPR /PT CODE WORD
531 AND K4 /IS IT AN OPERATE INSTRUCTION
533 TAD I PTCPR /CK FOR PAR EXP
536 TAD I PTCPR /PAGE TABLE CODE WORD
537 AND K400 /MASK OFF INDIRECT BIT
538 DCA IB /PLACE IT IN PROPER LOCATION
539 TAD I PTCPR /PT CODE WORD
540 AND K20 /IS AFS A CONSTANT
544 TAD I PTCPR /PT CODE WORD
545 AND K2 /IS AFS A LITERAL
548 TAD I PTSPR /ADDRESS FIELD SYMBOL
550 TAD I PTSPR /ACTUAL LITERAL
551 DCA S0 /TO LITERAL LOCATION
553 / AREA WHICH CALLS COUNT ROUTINE
555 RECT3, TAD I PTCPR /PT CODE WORD
556 AND K201 /IS THERE A TAG OR AN EQUIVALENCED TAG?
559 CLA CMA /YES ... SET BANK UNKNOWN
561 JMS I STCE /CALL COUNT ROUTINE
566 JMP RECT2 /GO GET NEXT LINE
574 / END PSEUDO OPERATION
576 PEND, TAD FORFLG /IF FLAG ON, TURN OFF &
577 SMA SZA CLA /GO TO RDL1
578 JMP I PAUS1 /GO TURN OFF FORTR P-OP
579 CLA CMA /DECREMENT PT SIZE
581 SNA /ARE WE AT THE BEGINNING OF A PAGE
583 DCA PTSZE /NO ... NEW PAGE TABLE SIZE
584 TAD PAG /CHECK FOR OVERFLOW INTO 7600 PAGE
587 SERROR /OVERFLOW-ERROR S
588 ISZ APMSW /LEAVE AUTO PAGING MODE FOR LAST PAGE
589 JMS L55 /ASSEMBLE CURRENT PAGE
590 PCSM, JMS I OUTBIN /OUTPUT CKSUM
596 JMS I LEAD /OUTPUT TRAILER CODE
597 JMS I PRSYMP /TYPE OUT SYMBOL TABLE
603 ENDEND, JMS I WLNP /LIST THE "END" STATMT
605 JMP I K200 /RESTART AT 200
613 / IGNORES SPACES & TABS TO 1ST CHAR OF ITEM
615 /CALLING SEQ: JMS I GETSYM
616 / NULL RETURN (IF NO ITEM FOUND BEFORE CR ; / *
617 / SYMBOL RET. (WITH SYM PACKED IN S1-S3
618 / AND S0=SYMBOL LENGTH)
619 / CONST. RET. (WITH VALUE IN S0)
620 / LITERAL RET. (WITH VALUE IN S0)
621 /SYNTAX: LITERALS: (000 NUMERIC LIT.
626 / (-"A NEGATIVE ASCII
627 / CONSTANTS: 000,-000,"A,OR -"A
628 / NOTE: AFTER A VALID QUOTE ANY ASCII CHAR MAY APPEAR
629 / AND WILL BE STORED AS THE CONST OR LIT VALUE.
630 / THIS INCLUDES CR ; / * SO THESE DO NOT
631 / TERMINATE A LINE AFTER A QUOTE.
632 /ALL EXITS LEAVE AC=0
633 /NOTE: TO PROVIDE A CHECK OF THE PUNCTUATION
634 /CHAR. FOLLOWING PREVIOUSLY READ SYMBOL, GTSYM
635 /DECREMENTS THE LINE PTR BEFORE STARTING
636 /THE READ. IF THIS IS NOT WANTED
637 /CALL TO GTSYM MUST BE PRECEDED
641 CMA /DECREMENT CHARACTER PTR
644 TAD DSW /SAVE NUMERIC MODE
646 CMA /SIGN=-1 FOR POSITIVE
647 ITM4, DCA SIGN /SIGN=0 TO FORCE NEGATION
648 ITM2, JMS I RC /READ 1ST CHAR
649 JMP ITM5 /DIGIT: GET NUMERIC CONST
650 JMP ITM3 /ALPHA: GET SYMBOL
651 JMS I TEST /SORT LEADING PUNCT.
657 /ASSUMES 1ST CHAR ALREADY READ IN & SAVED IN CHR
658 /LEAVES SYMBOL PACKED IN 6BIT CHAR PAIRS IN S1-S3
659 / S0=NUMBER OF CHAR PAIRS ACTUALLY USED
661 ITM3, ISZ SIGN /CK FOR -SYMBOL
663 DCA S0 /CLR FOR SYM LENGTH COUNT
664 DCA TEM1 /CLR FOR CHAR COUNT
665 DCA TEM3 /SET PTR FOR LEFT BYTE
666 TAD AS0 /AUTO-INDEX STORAGE IN S1-S3
668 RSM2, ISZ TEM1 /COUNT CHAR
669 TAD TEM1 /ARE MORE THAN 6 CHARS IN?
672 JMP RSM1 /YES, IGNORE
673 TAD CHR /NO, GET ASCII
674 AND K77 /MASK TO 6BIT
675 ISZ TEM3 /WHICH BYTE?
677 TAD TEM2 /ADD ON LEFT HALF
678 DCA I X2 /STORE CHAR PAIR IN S1-S3
680 RSM3, RTL CLL /MOVE 6BIT TO LEFT BYTE
683 DCA TEM2 /SAVE WHILE WAITING ON RT BYTE
684 CMA /SET PTR FOR RT BYTE
686 ISZ S0 /COUNT 1 SYMBOL WORD
687 RSM1, JMS I RC /READ NEXT CHAR
690 ISZ TEM3 /PUNCT=END OF SYM: CHECK BYTE PTR
691 JMP .+3 /NOTHING IN TEM2
692 TAD TEM2 /SAVE THE ODD CHAR
694 TAD I IFCTP /SKIP SYM TAB IF IF-COUNT NOT UP
696 JMS I SRS /LOOK IT UP IN SYM TAB. & ENTER IF NEC.
700 /ASSUMES 1ST DIGIT ALREADY READ AND ASCII SAVED IN CHR
701 / SGN=-1 IF NUM. IS TO BE NEGATED
702 / DSW=0 FOR OCTAL CONVERSION, 1 FOR DECIMAL
703 /LEAVES AC=OCTAL VALUE OF DIGIT STRING (NEG IF SGN=-1)
704 / CHR=ASCII FOR TERMINAL PUNCTUATION
706 ITM5, DCA TEM1 /CLEAR FOR ACCUMULATION
707 RDS1, TAD CHR /REDUCE CHR TO OCTAL VALUE
710 TAD DSW /OCTAL OR DECIMAL CONVERSION?
711 SZA CLA /OCTAL, CK FOR 8 OR 9
712 JMP MUL1 /DECIMAL, 8 OR 9 IS OK
713 TAD TEM2 /VALUE = 8 OR 9?
715 SMA SZA CLA /NO, GO ON
717 /MULT. PREV. VAL. BY CONV. FACTOR
723 TAD TEM1 /PLUS ARG=ARG*5
725 TAD TEM2 /ADD NEW DIGIT
726 DCA TEM1 /SAVE ACCUMULATED VALUE
727 JMS I RC /READ NEXT CHAR.
730 TAD TEM1 /PUNCT.; GET TOTAL
731 ITM6, ISZ SIGN /IS NEGATE SW. SET?
733 DCA S0 /STORE CONST VALUE
734 TAD TEM4 /RESTORE NUMERIC MODE
737 ITM7, JMS I GETCHR /READ ALPHA CONST.
739 IERROR /NOTHING THERE
741 JMS I GETCHR /READ NEXT CHAR FOR BENEFIT OF SKIPL
745 ITM8, JMS I CKIFP /MOVE PTR TO LITERAL EXIT
746 ITM9, JMS I RC /READ 1ST CHAR OF LIT.
747 JMP ITM5 /DIGIT: NUMERIC LIT.
748 NOP /ALPHA: MUST BE K OR D
749 JMS I TEST /LOOK FOR K,D,",-
753 ITM10, DCA SIGN /SET FLAG FOR NEG. LIT.
755 ITM11, IAC /FORCE DECIMAL LIT.
756 ITM12, DCA DSW /FORCE OCTAL LIT.
758 ITM13, JMS I CKIFP /CONST. EXIT
759 ITM14, JMS I CKIFP /SYMBOL EXIT
760 ITM15, JMP I GTSYM /NULL EXIT
771 /CHECK FOR TOO FEW ARGS
772 /AERROR IF CALLSW MINUS
778 ISZ I CALLSP /COUNT MISSING ARG
782 /CHECK FOR TOO MANY ARGS
783 /AERROR IF CALLSW POSITIVE
786 TAD I CALLSP /DO WE WANT THIS ARG?
788 AERROR /NO, ARG COUNT OVERFLOW
789 ISZ I CALLSP /YES, COUNT THIS ARG
794 / ROUTINE TO INITIALIZE POINTERS FOR THE COLLECTION OF A PAGE
798 DCA PTSZE /SET PAGE TABLE SIZE
799 DCA PSTSZE /ZERO PAGE SYMBOL TABLE SIZE
800 DCA LTSZE /ZERO LITERAL TABLE SIZE (COLL. PHASE)
801 DCA LITSZE /& ASMBLY PHASE LIT TABL
802 DCA OPSCTR /ZERO OFF PAGE SYMBOL COUNTER
803 DCA PHASE /SET PHASE SWITCH TO COLLECTION
809 TAD EQVBIT /ANY EQUIV. LEFT FROM LAST PAGE?
811 JMP EQSAV /YES, SKIP TABLE REINIT & SAVE BIT
812 DCA EQVIPR /NO, RE-INIT EQ. TAB. PTRS
814 EQSAV, DCA I PTCPR /INITIALIZE PAGE TABLE CODE WORD
815 DCA I PTSPR /INITIALIZE PAGE TABLE SYMBOL WORD
817 DCA I PTOPR /INITIALIZE PT OP CODE WORD
819 TAD LFSBSE /INITIALIZE LFS TABLE POINTER
821 DCA OBACTR /ZERO OFF BANK ADDITION COUNTER
822 TAD RDL1X /RESTORE IN CASE OF REORG OR PAGE PSUEDO
833 /GENERAL PAGE TABLE INITALIZATION
834 /DOES PARTS OF INITALIZ. COMMON TO SEVERAL
838 TAD PTBSE /INITIALIZE PAGE TABLE CODE POINTER
840 TAD PTBSE /INITIALIZE PAGE TABLE SYMBOL POINTER
843 TAD PTOPTB /INITIALIZE PT OP CODE POINTER
845 CLA CMA /SET LAST BANK UNKNOWN
847 CLA IAC /SET LAST INSTRUCTION SKIP INDICATOR ON
849 CLA CMA /SET CURRENT BANK UNKNOWN
855 /SUBR. TO WRITE A LINE
856 /MAY BE USED ONLY DURING PASS 2 (LISTING)
857 /FUNCTION:TYPES (OR PUNCHES) EACH LINE OF SOURCE
858 / WITH PROPER ASSEMBLY ADDR. & CODES
859 / AT BEGINNING OF LINE (OR SPACES IF
860 / THESE ARE OMITTED).
862 /ADDR VALU RC CONTENTS OF LINE BUFFER
863 /ERROR FLAGS TYPED BETWEEN ADDR & VALU
864 /COLUMNS. RC=RELOCATION CODE. THE LINE
865 /BUFFER IS IN FIELD 1 AT "LINBUF."
874 JMS I CTYPE /IF AFLG=0 TYPE 4 SPACES
877 TAD ADDRES /OTHERWISE TYPE 4 DIGITS
879 TAD EFLG /TYPE ERR. FLAG & SPACE
881 TAD VFLG /SAME TREATMENT FOR VALUE
882 SZA CLA /AS FOR ADDRES
891 TAD CODE /2 DIGITS OR 2 SPACES
894 TAD I LINEB /IS THERE ANY LINE TO TYPE?
898 JMS I CTYPE /2 SPACES
901 TAD LINAX /INDEX LINE BUFFER
903 DCA CHARCT /CLR COUNTER
908 JMP WLN3 /END OF LINE
914 ISZ CHARCT /COUNT 1 CHAR
918 WLN2, TAD K240 /SIMULATE TAB
924 JMP WLN2 /CONTINUE TAB
940 /NOT USED BY ANY OTHER PART OF PROGRAM
943 /FUNCTION: SET BANK=1 AFTER A "CALL"
944 /(MUST BE DONE FOR BENEFIT OF RECT ROUTINE)
947 TAD I PTCPR /CK FOR CALL CONST.
951 IAC /YES, BANK TO CURRENT
953 TAD EXP /DO 2 INSTRUCTIONS THAT
954 TAD UMIC /WERE KNOCKED OUT OF SETCT
963 /PPAR1 IS ACTUALLY A PART OF THE BASIC ASSEMBLY
965 /IT ASSEMBLES ALL PARAMETERS
966 /TYPES ARE: RC=00 ABSOLUTE CONSTANT
967 / RC=01 RELOCATABLE ADDRESS
968 / RC=05 CDF TO CURRENT FIELD
969 / RC=06 CALL CONSTANT (#ARGS+EXT.SYM.#)
970 / ALSO LITERALS USED IN ARG STATEMENTS
971 / SUCH LITS. ARE PUT IN LIT. POOL
972 / AND RC=01 ADDRESS OF LIT. PUT WHERE
973 / THE ARG STATEMT OCCURS.
974 /ADDRESS PARAMETERS ARE ACUALLY TAKEN
975 /CAR OF BY SUBR. PPAR3S.
978 PPAR1, DCA PPARY /CLR OUTPUT CODE
979 TAD I PTCPR /CK FOR LITERAL ARG OR PARAM.
983 TAD I PTCPR /PT CODE WORD
984 AND K20 /IS IT PAR CONSTANT
987 TAD I PTSPR /YES ... ACTUAL CONSTANT
988 DCA TEM1 /TO DIRECTLY ADDRESSABLE LOC
989 TAD I PTCPR /IS THIS A SPECIAL CONSTANT USED BY CALL
993 IAC /YES, SET BANK TO CURRENT (NEW IN V15)
997 TAD I PTCPR /IS THIS A CDF INSTRUCTION TO THIS BANK
1004 JMS I OUTBIN /OUTPUT IT
1008 PPAR3, JMS PPAR3S /DO ALL WORK
1012 PARLIT, TAD I PTSPR /PUT LIT ON TAB.
1017 AND K177 /GET PAGE ADDRESS
1018 TAD PAG /+ PAGE BITS
1020 ISZ PPARY /CODE FOR RELOCATABLE ADDR.
1023 / SUBROUTINE TO ASSEMBLE PAR SYMBOL
1026 /ASSEMBLE ADDRESS PARAMETER
1027 /SYMBOL MAY BE ABSOLUTE OR RELOCATABLE
1029 /IF SYMBOL IS YET UNDEFINED, AN ENTRY IS
1030 /MADE FOR IT & THE CURRENT ADDRESS IN THE
1035 DCA PPARX /CLR OUTPUT CODE
1036 TAD ACTR /WHCH TIME ARE WE ASSEMBLING THIS PAGE
1037 /NOTE: ACTR REMAINS 1 DURING PASS 2
1039 JMP I PPAR3S /FIRST TIME JUST RETURN
1041 DCA AFS /TO DIRRECTLY ADDRESSABLE LOCATION
1042 JMS I OBSYM /GET IT FROM MST
1044 TAD USE /MST USE WORD
1045 AND K400 /IS IT DEFINED YET
1047 JMP PPAR4 /NO ... OCCURANCE
1048 TAD USE /MST USE WORD
1049 AND K3000 /IS SYMBOL ABSOLUTE
1051 ISZ PPARX /OUTPUT RELOCATABLE
1053 TAD VAL /INCREMENT IF # REF.
1059 JMP I PPAR3S /RETURN
1060 PPAR4, TAD AFS /SYMBOL
1061 DCA I PPAR5 /TO SUBROUTINE LOCATION
1063 DCA I PPAR5+1 /TO SUBROUTINE LOC
1066 DCA I PPAR5+3 /SET ATEM2 FOR NORMAL OR # REFERENCE
1067 JMS I PPAR5+2 /CREATE AN OCCURANCE
1068 JMP PPAR6 /OUTPUT ZERO WORD FOR LOADER
1077 /TWO CHARACTER TYPEOUT
1078 /FROM PACKED ASCII PAIR
1079 /CALL WITH 6-BIT PAIR IN AC
1080 /L61A ACTS AS SUBR FOR L61
1083 DCA TEM1 /SAVE CHARACTERS
1085 RTR /SHIFT HIGH 6 BITS TO LOW
1088 JMS L61A /MASK AND TYPE FIRST CHARACTER
1090 JMS L61A /MASK AND TYPE SECOND CHARACTER
1094 AND K77 /MASK CHAR TO 6 BITS
1095 SNA /ZERO MEANS SPACE
1097 JMP I L61CP /HAVE DO SOME OF THIS WORK ON ANOTHER PAGE
1098 L61D, JMS I TYPE /TYPE CHAR
1100 L61B, TAD K240 /SPACE
1105 / ROUTINE TO TEST CHARACTERS AND TAKE SELECTIVE EXITS
1110 / BRANCH LIST ADDR - SORT LIST ADDR
1111 / RETURN IF ALL TESTS UNSUCCESSFUL
1112 / ASSUMES AC=0 & CHAR TO LOOK FOR IS IN CHR
1114 /SORT ENDS UNSUCCESSFULLY AT
1115 /NEGATIVE NUMBER FOLLOWING SORT LIST
1116 /IF SORT IS SUCCESSFUL, A BRANCH IS
1117 /TAKEN VIA BR. LIST ITEM CORRESPONDING
1118 /TO MATCHING SORT LIST ITEM.
1122 TAD I TSCHR /GET SORT LIST ADDR -1
1123 DCA X1 /AUTO-INDEX SORT LIST
1124 ISZ TSCHR /MOVE ARG PTR
1126 TSCHR2, TAD I X1 /GET SORT LIST ITEM
1128 JMP TSCHR3 /NEG = END OF SORT LIST
1129 CIA /COMPARE ITEM WITH CHR
1131 SZA CLA /0 = MATCH FOUND
1132 JMP TSCHR2 /NO MATCH, TRY NEXT ITEM
1133 TAD X1 /GET ADDR. OF MATCH
1135 TAD I TSCHR /+BR. LIST ADDR - SORT LIST ADDR
1136 DCA TSCHR /= PTR TO BR. LIST ITEM
1138 TAD I TSCHR /GET BR. LIST ITEM
1139 DCA TSCHR /= BRANCH PTR FOR THE MATCH
1141 TSCHR3, ISZ TSCHR /NO MATCH ON LIST
1144 JMP I TSCHR / RETURN UNSUCCESSFUL
1149 / CALL PSEUDO OPERATION
1151 PCALL, JMS I GETSYM /GET NEXT INPUT ITEM
1156 SZA CLA /IS BREAK CHARACTER A COMMA
1157 JMP CALERR /NO ... ERROR
1158 TAD S0 /SAVE ARG COUNT
1160 ISZ X0 /PROHIBIT FLAGGING THE COMMA
1161 JMS I GETSYM /GET SUBROUTINE NAME
1165 CALERR, IERROR /LITERAL
1167 JMS I SREST /SEARCH EXTERNAL SYMBOL TABLE AND OUTPUT TV DEF
1168 DCA PCALL1 /SAVE EXTERNAL SYMBOL NUMBER
1171 TAD ARGCT /SET ARG COUNT IN DYNAMIC LOCATION
1173 DCA CALLSW /SET CALL - ARG IN PROCESS SWITCH & COUNTER
1174 TAD ARGCT /COUNT OF ARGS
1176 TAD ARGCT /*3 IN CASE USING LITERAL ARGS
1178 JMS I PARG2 /CAN THE CURRENT PAGE HOLD IT
1180 JMS I INI /NO ... INITIALIZE PT PTRS ... HAD TO ASSEMBLE PAG
1183 JMS I ICPLFS /PROCESS COLLECTION LFS
1184 TAD I PTCPR /PT CODE WORD
1185 TAD K30 /ADD CONSTANT BIT & PAR BIT
1186 DCA I PTCPR /TO PT CODE WORD
1187 TAD PARG6 /PLACE JMS LINK INSTRUCTION
1188 DCA I PTSPR /AS CONSTANT
1189 JMS PARG5 /INC PT PTRS & ASSMBL IF PASS 2
1190 TAD K130 /CORRECT BIT PATTERN FOR CALL
1191 DCA I PTCPR /TO PT CODE WORD
1192 IAC /A CALL FORCES BANK TO CURRENT
1193 DCA LSTBNK /(NEW IN V15)
1196 TAD ARGCT /COUNT OF ARGS
1197 CLL RTL /TO HIGH ORDER AC
1200 TAD PCALL1 /OR IN EXTERNAL SYMBOL NUMBER
1201 DCA I PTSPR /PLACE IN PT SYMBOL WORD
1202 JMP ARGPP0 /COMMON EXIT
1204 / ARG PSEUDO OPERATION
1206 PARG, JMS I GETSYM /GET NEXT INPUT ITEM
1207 IERROR /NOTHING THERE
1209 JMP PARGCN /CONSTANT CODE IS 2
1210 JMS I SKIPL /FIXES BUG IN V16
1211 JMS I SLITAB /PUT LIT ON TABLE
1215 PARGSM, TAD SYMBOL /PAR ADDRESS
1218 JMS I CKCLSP /CK FOR TOO MANY ARGS
1220 / ROUTINE TO PUT A CDF IN THE PAGE TABLE
1222 TAD K30 /PT CODE WORD
1224 JMS I ICPLFS /PROCESS ANY LFS
1226 DCA I PTSPR /TO PT SYMBOL WORD
1228 TAD AFS /IS AFS A CONSTANT
1231 IAC /IS AFS A LITERAL
1234 JMS I OBSYM /NO ... SYMBOL ... GET ITS POINTERS TO MST
1236 TAD USE /AFS MST USE WORD
1237 AND K40 /IS IT A COMMON SYMBOL
1240 JMS ARGPP2 /INCREMENT PT PTRS AND PUT OUT A PAR
1242 DCA I PTSPR /PLACE SYMBOL IN PT SYMBOL WORD
1243 ARGPP0, JMS PARG5 /INC PT PTRS &ASSMBL IF PASS 2
1244 JMP I POPEXP /EXIT TO GET NEXT LINE
1248 JMS ARGPP2 /INCREMENT PTRS AND PUT OUT A PAR
1249 TAD K2 /SET LITERAL BIT
1250 JMP .+3 /SAVE AS CONSTANT FROM HERE
1252 ARGPP4, JMS ARGPP2 /INCREMENT PTRS AND PUT OUT A PAR
1253 TAD K20 /SET CONSTANT BIT
1254 TAD I PTCPR /PT CODE WORD
1255 DCA I PTCPR /FOR PROPER WORD
1256 TAD S0 /PLACE CONSTANT IN PROPER LOCATION
1260 / ROUTINE TO INCREMENT POINTERS AND SET UP FOR A PAR IN THE PAGE TABLE
1263 JMS PARG5 /INC PT PTRS & ASSMBL IF PASS 2
1266 JMP I ARGPP2 /RETURN
1272 JMS I ASM02S /ASSMBL NOW IF LISTING PASS
1288 /ROUTINE TO CHANGE CDF 10 TO CDF *
1291 TAD K1000 /SET CDF * BIT IN P.T.
1293 TAD I PTSPR /CHANGE 6211
1302 / COMMN PSEUDO OPERATION
1304 PCOMMN, JMS I GETSYM /GET ADDRESS FIELD SYMBOL
1311 SNA CLA /IS THERE AN LFS
1312 JMP COMMN2 /NO ... JUST INCREMENT COUNTERS
1313 JMS I OBSYM /GET POINTERS TO LFS
1315 TAD USE /MST USE WORD
1316 AND K3 /SAVE SYMBOL LENGTH
1317 TAD K440 /ADD CORRECT BITS
1318 DCA USE /FOR NEW MST USE WORD
1319 TAD S0 /NO OF COMMON LOCATIONS
1320 SNA CLA /ARE THERE ZERO
1321 JMP COMMN1 /YES ... EQUIVALENCE OUTPUT
1322 TAD HICOM /NO ... HIGHEST COMMON LOCATION USED
1323 TAD S0 /+SIZE OF THIS BLOCK
1324 DCA TEM1 /FOR TENTATIVE NEW HIGHEST
1325 TAD TEM1 /ACTUAL ADDRESS
1326 AND K7600 /ARE WE OVERFLOWING ONTO THE LAST PAGE
1329 SERROR /YES ... ERROR
1330 TAD HICOM /LAST COMMON ASSIGNMENT
1332 DCA VAL /GIVES NEW ADDRESS
1333 TAD TEM1 /NEW HIGHEST COMMON LOCATION
1334 DCA HICOM /TO PROPER LOC
1336 JMP I NULLP /GO GET NEXT LINE
1338 / EQUIVALENCE GENERATED COMMON OUTPUT
1340 COMMN1, TAD HICOM /PLACE LAST COMMON ASSIGNMENT
1342 DCA VAL /IN MST AS ADDRESS
1345 / NON LOCATION FIELD SYMBOL COMMON ASSIGNMENT
1347 COMMN2, TAD HICOM /LAST HIGHEST
1348 TAD S0 /+CUR ASSIGNMENT
1349 DCA HICOM /FOR NEW HIGHEST
1350 TAD HICOM /NEW HIGHEST
1351 AND K7600 /ARE WE OVERFLOWING ONTO THE LAST PAGE
1354 SERROR /YES ... ERROR
1355 JMP COMMN0 /NO ... EXIT
1363 JMS I GETCHR /LOOK FOR STRING START
1367 TAD CHR /SAVE OPENING DELINEATOR
1370 DCA TEXCTR /CLR CHAR CTR
1371 TAD X0 /SAVE AUTO-INDEX TO START OF STR
1373 TEX1, JMS I GETCHR /LOOK FOR END OF STRING
1375 TEXERR, IERROR /TOO SOON END OF LINE
1378 JMP TEX2 /THE END OF THE LINE
1379 ISZ TEXCTR /KEEP STRING TALLY
1381 TEX2, JMS I GETCHR /MOVE LINE PTR TO CHAR. AFTER DELINEATOR
1384 JMS I PUSH /SAVE INFO FOR A MINUTE
1388 JMS I IFFS /SEE IF STR WILL FIT ON PAGE
1390 JMS I INI /HAD TO ASSMBL: RE-INIT PT
1391 JMS I POP /POP LINE INFO
1392 JMS I ICPLFS /PROCESS LFS
1396 TAD TEXSUB /RE-INIT STRING INDEX
1398 DCA BYTE /SET FOR LEFT BYTE
1400 AND K77 /EXTRACT 6 BIT
1403 JMP TEX4 /RIGHT BYTE
1408 CMA /SET PTR TO RT BYTE
1414 ISZ BYTE /CK FOR ODD CHAR LEFT OVER
1420 TAD TXSV /COMBINE LEFT & RT BYTES
1422 TAD K30 /PAR CONST BITS
1427 JMS I ASIF /INC PTRS & ASSMBL IF PASS 2
1428 TAD TXSV /RESTOR INDEX
1444 /WRITE LINE IF IN PASS 2
1447 TAD PASS /WHICH PASS?
1455 /READ & DECODE 1 LINE
1456 /IGNORES NULL LINES & COMMENT LINES
1457 / EXP=NON-0 IF NO OPERATION ON LINE (CONST, LIT,
1459 / SK=NON-0 IF SKIP INSTR.
1460 / UMIC=NON-0 IF OP CODE IS 6 OR 7
1461 / IB=NON-0 IF INSTR IS INDIRECT
1462 / NSGN=NON-0 IF AFS IS # SYMBOL
1464 / LFS=PTR TO LFS IN SYM. TAB., IF ANY
1465 /*** AFS=2 IF CONSTANT PARAMETER OR CONST. AFS***
1466 /*** AFS=1 IF LITERAL PARAMETER OR LIT. AFS***
1467 / AFS=SYM. TAB. PTR. TO ADDRESS PARAMETER OR AFS
1470 RDL1, JMS I RLNP /READ IN A LINE
1471 DCA LFS /CLR STORAGE FOR LINE INFO
1478 DCA I RECTI /CLR RECOUNT FLAG FOR CPLFS
1479 ISZ LINE /INC LINE COUNT
1480 ISZ X0 /DO NOT BACK UP X0
1481 JMS I GETSYM /READ 1ST ITEM
1482 JMP RDL11 /NULL LINE OR COMMENT
1483 JMP RDL7 /SYMBOL - POSSIBLE LFS
1484 JMP .+3 /SET AFS=2 FOR CONSTANT
1485 RDL3, JMS I SLITAB /PUT LIT ON TAB
1486 CMA /AFS=1 FOR LITERAL
1488 ISZ EXP /SET PARAMETER EXPRESSION FLAG
1490 JMS I SKIPL /SKIP TO END OF LINE
1492 RDL7, TAD CHR /CK FOR COMMA
1495 JMP RDL9 /NO, SHOULD BE SPACE,TAB,CR,OR ;
1498 IERROR /OP SYMBOL AS TAG
1499 TAD SYMBOL /NO, ENTER PTR TO LFS
1501 ISZ X0 /PROHIBIT FLAGGING COMMA
1502 JMS I GETSYM /GET ITEM AFTER LFS
1503 JMP I PB0 /NULL AFTER LFS IS BSS0
1504 JMP RDL9 /SYMBOL-OP OR PARAMETER
1508 JMP RDL4 /NO-MUST BE ADDRESS PARAMETER
1509 TAD USE /IS SYMBOLE A PSUEDO-OP
1513 TAD USE /IS SYMBOL AN MRI?
1516 JMP RDL14 /NO-OPR OR I/O INSTR.
1517 TAD USE /MRI-PUT OP SKIP BIT
1518 AND K20 /INTO SKIP FLAG
1523 RDL10, ISZ IB / SET INDIRECT FLAG
1524 JMS I GETSYM /READ SYMBOL AFTER MRI
1525 IERROR /NOTHING THERE
1527 IAC /AFS=2 FOR CONST. AFS
1528 IAC /AFS=1 FOR LIT.AFS
1529 JMP RDL5 /SKIP TO END OF LINE
1531 RDL12, TAD SYMBOL /CK FOR I
1533 TAD IBTI /SYM. ADDR-I ADDR
1538 IERROR /AFS NOT USER SYMBOL
1539 RDL4, ISZ EXP /ENTER HERE ON ADDRESS PAR.
1545 JMS I GETCHR /PREVENT FLAGGING #
1547 TAD SYMBOL /SET PTR TO AFS
1550 IERROR /ELIM USER SYM
1551 TAD USE /CK FOR OPR OR I/O INST.
1552 AND K4440 /ELIM. MRI, PSUEDO
1554 IERROR /ILLEGAL SYMBOL
1555 RDL14, TAD USE /COMPARE NEW MICRO-GRP
1556 AND K300 /WITH OLD, IF ANY
1558 JMP RDL16 /GRP0 OK WITH ANYTHING
1559 DCA TEM1 /NEW IS NOT 0
1560 TAD MGRP /CK OLD MGP, IF ANY
1562 JMP RDL15 /0 OK WITH ANY NEW
1566 IERROR /ILLEGAL COMBINATION
1567 RDL15, TAD TEM1 /MICRO-GRP=NEW
1569 RDL16, TAD VAL /OR NEW VALUE INTO OLD OP
1574 TAD USE /GET NEW SKIP BIT
1577 ISZ SK /SET SKIP FLAG
1578 JMS I GETSYM /GET NEXT INSTR OF STRING
1579 JMP RDL17 /NONE THERE - END OF SRTING
1580 JMP RDL13 /SYMBOL (AS EXPECTED)
1583 RDL17, ISZ UMIC /SET MICRO INST FLAG
1584 JMP RDL5 /SKIP TO END OF LINE
1594 /NULL LINE OR COMMENT
1601 RDL18, TAD VAL /GET PSUEDO-OP ADDRESS
1603 JMP I TEM1 /TO PROPER PSUEDO-OP HANDLER
1607 /END OF LINE PROCESSOR FOR COLLECTION PHASE
1608 /LOOKS FOR SEMI-COLON BEFORE A SLASH
1609 /STAR OR SLASH OR 000 (CR) MEANS NORMAL
1610 /END OF LINE. SEMI-COLON MEANS WE MUST
1611 /SAVE CURRENT ADDRESS IN LINE BUFFER FOR
1612 /START OF "NEXT" LINE.
1613 /THIS ROUTINE ALSO HAS THE IMPORTANT
1614 /FUNCTION OF WATCHING THE FORTR PSUEDO-OP
1615 /FLAG. IF FLAG IS ON L72 CAUSES LINE
1616 /TO BE TREATED AS NON-EXISTENT. L72 MUST
1617 /BE CALLED FOR EVER INSTR. LINE OR PSUEDO-OP
1618 /LINE (EXCEPT END, PAUSE, FORTR) BEFORE
1619 /ACTUAL PROCESSING OF THAT LINE BEGINS.
1630 L72X, TAD FORFLG /IF FLG=1 WE ARE SKIPPING
1631 SMA SZA CLA /1ST HALF OF FORTRAN OUTPUT
1635 /KLUDGE TO RESET ILC BECAUSE A1 COMES BEFORE UDPAGE IN PASS 2
1648 /COLLECTION PHASE ROUTINE
1649 /SEARCH PAGE SYMBOL TABLE FOR SYMBOL
1650 /CALLING SEQUENCE: (ASSUMES SYM.ID.IS IN "SYMBOL")
1652 / RETURN IF NOT FOUND (HAD TO ENTER IT)
1654 /THE SEARCH IS AT L31; ENTERING DONE BY L32.
1657 TAD PSTSZE /SIZE OF PST
1660 L32, TAD PSTSZE /IS PST FULL?
1664 TAD PSTSZE /SIZE OF PST*2
1667 DCA PSTSPR /GIVES POINTER TO SYMBOL
1668 ISZ PSTSZE / INCREMENT COUNTER
1669 TAD SYMBOL /PHYSICALLY MOVE SYMBOL
1673 DCA PSTCPR /FOR CODE WORD POINTER
1676 JMP L32A /ASSEMBLY: JUST ZERO CODE WORD
1677 JMS I OBSYM /LISTING
1679 TAD VAL /CK IF SYM IS ON PAGE FORWARD REF.
1680 AND K7600 /EXTRACT PAGE BITS
1684 JMP L32A /NOT ON PAGE
1685 TAD K4000 /ON PAGE: SET DEFINED BIT
1686 ISZ SPSTB /& SET FOR "FOUND" RETURN
1688 JMP I SPSTB /NOT FOUND
1690 L31, CIA /PLACE - COUNT OF TABLE
1691 DCA TEM1 /IN INDEX LOC
1692 TAD PSTBSE /PLACE TABLE BASE
1693 DCA TEM2 /IN ADDRESS LOC
1694 L31B, TAD I TEM2 /-SYMBOL
1696 TAD SYMBOL /+ REQUESTED SYMBOL
1699 ISZ TEM2 /NOT FOUNE ... INCREMENT ADDRESS
1702 JMP L31B /NO ... TRY AGAIN
1703 JMP L32 /YES ... PLACE ON TABLE
1704 L31A, ISZ SPSTB /FOUND ... INDEX FOR EXIT
1705 TAD TEM2 /POINTER TO SYMBOL
1706 DCA PSTSPR /TO PROPER LOC
1707 TAD PSTSPR /SYMBOL POINTER
1709 DCA PSTCPR /GIVES CODE POINTER
1712 PSTMAX, -100 /MUST BE (PSTB-PTB)/2
1717 /OUTPUT 6 CHARACTER ASCII NAME
1719 /FOR EXTERNAL SYMBOL DEFN.
1720 /USED BY LFSCK (FOR RC=03) & 666 (FOR RC=17)
1721 /OUTPUT GOES VIA TYPE PTR, BUT PTR IS
1722 /CHANGED TO L66E SO CHAR CAN BE PUNCHED
1723 /& ADDED TO CK.SUM INSTEAD OF TYPED.
1724 /668 IS USED ONLY IN PAS1-
1730 JMP I L68 /EXIT IF LISTING
1731 TAD L66B /FOOL OUTPUT ROUTINE
1732 DCA TYPE /SO IT THINKS PUNCH IS TTY
1738 TAD SYMBOL /MST SYMBOL ADDRESS - 1
1740 TAD USE /MST USE WORD
1741 AND K3 /SYMBOL LENGTH
1743 DCA TEM4 /-WORDS TO LOC
1745 TAD I X2 /OBTAIN SYMBOL
1755 JMS I CTYPE /PUNCH IT EXPANDED
1758 TAD L66D /RESTORE TYPE ROUTINE
1762 / DUMMY TYPE ROUTINE FOR EST TV DEFINITION
1764 T8=SPSTB /SCRATCH LOC
1768 TAD CSUM /ADD CHAR TO BINARY CHECK SUM
1771 JMS I PUNCH /OUTPUT CHAR ON BINARY TAPE
1778 /INITIALIZATION THAT WONT FIT IN "INITA"
1792 /COLLECTION PHASE ROUTINE.
1793 /SEARCH LITERAL TABLE FOR VALUE IN S0.
1794 /PLACES LITERAL ON TABLE IS NOT THERE.
1795 /OTHERWISE DOES NOTHING.
1799 TAD LTSZE /SIZE OF TABLE
1801 JMP SLITB1 /NO ... SEARCH IT
1802 TAD LTBSE /BASE COLL. PHASE LIT. TABLE)
1803 TAD LTSZE /+DISPLACEMENT
1804 DCA TEM1 /GIVES ADDRESS POINTER
1805 TAD S0 /PHYSICALLY MOVE LITERAL
1808 ISZ LTSZE /INCREMENT COUNT
1811 SLITB1, CIA /PLACE - COUNT
1820 TAD S0 /+REQUESTED LITERAL
1822 JMP I SLTAB /YES, RETURN
1823 ISZ TEM1 /MORE SYMBOLS TO TEST
1829 /COLLECTION PHASE EQUIVALENCE PROCESSOR
1830 /(FORMERLY CALLED BSS0 PROCESSOR)
1831 /ENTERS SYMBOL ID. IN EQ. TAB
1834 TAD LFS /LOCATION FIELD SYMBOL
1835 SNA CLA /IS THERE ANY
1838 TAD BSSSW /ARE WE PROCESSING A BSS 0 SEQUENCE
1840 JMP .+5 /YES ... SKIP INITIALIZING
1841 TAD EQVIPR /NO ... INITIALIZE
1842 DCA CTPTR /SET INPUT POINTER TO COUNT LOCATION
1843 DCA I CTPTR /ZERO COUNT
1844 ISZ EQVIPR /INCREMENT INPUT POINTER
1845 TAD LFS /LOCATION FIELD SYMBOL
1846 DCA I EQVIPR /PLACE LFS ON EQUIVALENCE TABLE
1847 ISZ I CTPTR /INCREMENT COUNT
1849 JMS I ICPLFS /PROCESS IT FOR COLLECTION
1850 CLA CMA /REMOVE LFS FROM LFS TABLE
1853 ISZ BSSSW /SET BSS 0 IN PROGRSS SWITCH
1854 CMA /REMOVE EXTRA LFS BIT
1856 AND K7577X /REMOVE EXTRA BSS0 BIT
1857 TAD K200 /PLACE BSS0 BIT ON PT
1859 TAD PSTCPR /SAVE PST ADDRESS IN CASE NEXT LINE OVERFLOWS
1861 ISZ EQVIPR /INCREMENT POINTER
1862 JMP I NULLP /EXIT FOR NEXT LINE
1868 /ASSEMBLY PHASE EQUIVALENCE PROCESSOR
1869 /EXTRACTS ENTIRE GROUP OF TAGS EQUIVALENCED
1870 /TO SAME ADDRESS FROM TABLE & DEFINES
1871 /THEM BY USING LFSCK FROM LFSBSS ON.
1874 TAD I PTCPR /PT CODE WORD
1875 AND K200 /MASK OUT BSS 0 BIT
1876 SNA CLA /IS IT A BSS 0 SYMBOL
1877 JMP I ANUMCK /NO ... EXIT
1879 DCA BANK /BANK UNKNOWN
1880 TAD AANUM7 /CHEAT RETURN ADDRESS
1881 DCA I LFSCHK /SO IT LOOKS LIKE A JMS FROM SOMEWHERE ELSE
1884 DCA OPICTR /SAVE IN INDEX LOC
1885 JMS GNEQ /GET SYMBOL
1886 JMP I LFSBSI /PROCESS SYMBOL
1887 ANUM7, JMS I SPSTAB /SET DEFINED BIT ON PST IN CASE
1888 NOP /THIS WAS CARRIED OVER
1889 JMS I PSTD /THE LAST PAGE
1890 ISZ OPICTR /ANY MORE ?
1896 / ROUTINE TO GET NEXT ITEM OFF EQUIVALENCE TABLE
1905 /SUBR. TO LIST A LINE IF IN PASS 2
1907 /CALLING SEQUENCE: JMS I WRITEP
1909 / LOCATION OF WORD TO OUTPUT
1910 / CONSTANT=RELOC. CODE
1912 /(CALL TO OUTBN MUST ALWAYS FOLLOW CALL
1914 /ASSUMES CURRENT PC IS IN "ILC"
1915 /SETS FLAGS FOR PROPER LISTING
1916 /& CALLS WLN TO DO THE DRUDGE WORK.
1923 TAD I WRITE /ADDRESS OF VALUE
1925 TAD I VALUE /GET VALUE
1929 TAD I WRITE /GET RELOC. CODE
1934 RTR /CONVERT TO 6BIT
1941 DCA ADDRES /TEM SAVE
1947 WRITE2, TAD ILC /CURRENT ADDRESS
1959 / BLOCK PSEUDO OPERATOR
1961 PBSS, JMS I GETSYM /GET NEXT INPUT ITEM
1962 JMP I PBSS2I /NOTHING THERE (BSS 0)
1967 JMS I IPSHIN /SAVE ALL CURRENT INFO
1968 JMP I PBSS4I /CHECK BLOCK SIZE
1969 PBSS5, JMS IFFSUB /CAN THIS FIT IN CORE
1971 JMS I INI /NO ... INITIALIZE PT POINTERS
1972 JMS I IPOPIN /POP CURRENT INFORMATION
1973 DCA BSSSW /CLEAR BSS0 SWITCH
1974 JMS I ICPLFS /PROCESS CURRENT LFS
1975 TAD S0 /-BLOCK CONSTANT
1977 DCA TEM12 /TO INDEX LOCATION
1978 PBSS1, TAD K30 /PAR CONSTANT PT BIT STRUCTURE
1979 TAD I PTCPR /DONT LOSE LFS AND BSS 0 INFORMATION
1981 JMS I ASMIF /DO THEM INDIVIDUALLY IF PASS 2
1984 JMP I POPEXP /EXIT TO GET NEXT LINE
1986 TEM12, 0 /RESRV STORAGE CTR
1990 / CPAGE PSEUDO OPERATION
1992 PIFF, JMS I GETSYM /GET NEXT INPUT ITEM
1998 JMS I WLNIF /LIST IF PASS 2
1999 TAD S0 /BINARY CONSTANT
2000 JMS IFFSUB /USE GLOBAL IFF SUBROUTINE
2001 JMP I DCIL1 /DIDNT HAVE TO ASSEMBLE PAGE
2002 JMP I RSTRTI /GO INITIALIZE
2005 / CALL IS TAD PAGE INCREMENT
2008 / HAD TO ASSEMBLE PAGE RETURN
2010 /FUNCTION: TO SEE IF GIVEN NO. OF WORDS
2011 /WILL FIT ON CUR. PAGE; IF SO, RETURN
2012 /AT OK RET.; OTHERWISE ASSEMBLE PAGE WE
2013 /HAVE NOW & INIT A NEW PAGE & RET. AT
2015 /IFFSUB IS USED BY CPAGE,BLOCK &
2016 /SEVERAL OTHER P-OPS
2020 DCA TEM1 /SAVE INCREMENT
2021 JMS I ICPGES /COMPUTE PAGE SIZE
2022 TAD TEM1 /ADD INCREMENT
2023 TAD M201 /IS TOTAL .GT. PAGE SIZE (1 EXTRA BECAUSE
2024 SPA SNA CLA /PTSZE INCREMENTED BEFORE PSUEDO-OP
2025 JMP I IFFSUB /NO ... RETURN
2026 CLA CMA /YES ... DECREMENT PAGE TABLE SIZE
2028 SNA /WATCH FOR AN EMPTY PAGE
2029 JMP .+4 /LEAVE THINGS ALONE IF PAGE EMPTY
2031 JMS I L55I /ASSEMBLE THE PAGE
2034 ISZ IFFSUB /INCREMENT FOR EXIT
2035 JMP I IFFSUB /RETURN
2052 ERRE, TAD K6200 /0500
2053 ERRS, ISZ FATAL /SET FATAL ERROR SWITCH
2059 ERRI, TAD K600 /1100
2060 ERRC, TAD K200 /0300
2061 ERRA, TAD K100 /0100
2065 JMP ERREX /LISTING PASS
2066 JMS I CRLF /TYPE CRLF
2071 JMS I CTYPE /TYPE 2 SPACES
2081 TAD M3 /SET 6 CHAR PRINT CTR
2084 SKP /NOT DONE YET WITH SYMBOL
2085 JMP ERR1 /DONE : SEE IF SPACES NEEDED
2090 JMS I CTYPE /TYPE THE LETTERS OR SPACES
2093 ERR11, TAD SPPLUS /TYPE SPACE +
2095 TAD LINE /TYPE LINS FROM LAST LFS
2098 ERREX, TAD FATAL /FATAL ERROR?
2102 JMP I K200 /IF YES GO TO START AFTER HALT
2103 TAD PHASE /WHAT PHASE ARE WE IN
2105 JMP I ERR2 /ASSEMBLY
2106 JMP I NULLP /COLLECTION
2116 ERR1, JMS I CTYPE /FILL OUT THE REST WITH SPACES
2124 /ASSEMBLY PHASE ROUTINE TO CHECK FOR A
2125 /LOC. TAG (LFS) & PROCESS IF FOUND.
2126 /FUNCTION: (ASMBLY PHASE 1 - ACTR=0)
2128 / (2) OUTPUT VALUE AT PAST OCCURANCES OF
2129 / FORWARD REF. TO THIS TAG
2130 / (3) CONDENSE OCC. TAB IF POSSIBLE.
2132 / (ASMBLY PHASE 2 - ACTR=1
2133 / (THIS INCLUDES ALL OF PASS 2 AS
2134 / ACTR STAYS=1 IN PASS 2)
2135 / (1) OUTPUT EXT. SYM. DEFN. ON REL-TAPE
2139 TAD I PTCPR /PT CODE WORD
2141 SNL CLA /IS THERE A LFS
2142 JMP I LFSCK /NO ... RETURN
2144 DCA BANK /BANK UNKNOWN
2145 TAD PASS /MOVE BACK PTR IF IN LISTING PASS
2150 TAD I LFSPTR /ACTUAL LFS
2154 JMS I OBSYM /OBTAIN LFS FROM MST
2156 TAD ACTR /WHICH TIME ARE WE ASSEMBLING THIS PAGE
2157 /ACTR REMAINS 1 DURING PASS2
2159 JMP L67 /SECOND TIME: NO TEST
2160 TAD USE /CK FOR MULTI DEF.
2165 L67, TAD USE /MST USE WORD
2166 AND K200 /(L67 HAS NO EFFECT IN PASS 2)
2167 SNA CLA /IS IT AN ENTRY
2170 / EXTERNAL SYMBOL DEFINITION
2172 JMS I OUTBIN /OUTPUT BINARY DEFINITION
2175 JMS I L68I /PUNCH SYMBOL ON TAPE
2176 LFSCK1, TAD ILC /CUR ILC
2177 DCA VAL /PLACE ON MST AS DEFINITION
2178 TAD USE /SYMBOL TABLE USE WORD
2179 AND K7377 /MASK OUT DEFINED BIT
2180 TAD K400 /ADD IN DEFINED BIT
2181 DCA USE /SYMBOL IS NOW DEFINED IN MST
2183 / NOW LETS SEARCH OCCURANCE TABLE TO SEE IF WE
2184 / CAN CLEAR OFF A FEW
2186 TAD OTP /SIZE OF OCCURANCE TABLE
2190 JMP I LFSCK /RETURN IF EMPTY
2192 DCA TEM1 /PLACE - SIZE IN INDEX LOC
2193 TAD OTP /PLACE TABLE BASE IN TEM2
2194 DCA TEM2 /TEM2=PTR TO SYMBOL
2196 L51, DCA L51FLG /CLR # SWITCH
2198 CMA /CK 1ST WORD FOR # FLAG
2202 ISZ L51FLG /YES, SET SWITCH
2203 ISZ TEM2 /MOVE PTR & CTR
2204 ISZ TEM1 /PAST EXTRA WORD
2205 TAD I TEM2 /- OCCURRING SYMBOL
2207 TAD SYMBOL /+SYMBOL JUST DEFINED
2208 SNA CLA /ARE THEY EQUAL
2211 L51E, ISZ TEM1 /NO ... ARE THERE MORE
2212 ISZ TEM1 /(2 WORDS PER OCCURRANCE)
2215 JMP I LFSCK /NO ... RETURN
2217 / AN OCCURANCE FOUND ... OUTPUT IT
2220 TAD I TEM2 /ACTUAL ADDRESS
2223 JMS I DUMMY /OUTPUT ADDRESS AS ORIGIN
2227 TAD L51FLG /ADD 1 IF # REF
2229 JMS I DUMMY /OUTPUT SYMBOL VALUE AS RELOCATABLE DEF
2234 / NOW MOVE OCCURANCE TABLE UP 2
2247 JMP L51E /NOTHING TO MOVE
2248 DCA TEM3 /CTR FOR MOVE UP
2279 CLA /EXIT WITH CLEAR AC
2286 /UPDATE "PAGE" TO NEXT CORE PAGE
2287 /I.E., PAGE =PAGE+200
2291 TAD PAG /OLD PAGE SETTING
2292 TAD K200 /+SIZE OF ONE PAGE
2293 DCA PAG /FOR NEW PAGE SETTING
2299 / SUBROUTINE TO OUTPUT ASSEMBLY PHASE LITERAL
2300 / TABLE AND REMEMBER OCCURANCES
2303 TAD ACTR /SKIP IT THE 1ST TIME
2306 JMS I SAVLNI /PREVENT ANY LINE TYPEOUT
2307 TAD LITSIZ /SIZE OF TABLE
2309 JMP I OAPLT /RETURN IF NONE
2311 DCA ATEM1 /PLACE - SIZE IN LOC
2313 TAD LITBSE /BASE - 1
2315 TAD APMSW /ARE WE IN AUTO PAGING MODE
2318 TAD PGEESC /YES ... SUBRTACT SIZE OF PAGE ESCAPE
2319 RAR CLL /DIVIDED BY 2
2320 TAD LITSIZ /& SUBTR. LITSIZ
2322 DCA LITPTR /TEM SAVE
2324 TAD PAG /INITIALIZE PAGE ADDRESS
2327 TAD LITSIZ /INIT LIT TBL PTR
2328 CLL RAL /(MULT BY 2)
2334 L52, ISZ ILC /INC PAGE LOC
2335 TAD M3 /DECREMENT LIT TBL PTR
2342 TAD I LITPTR /SYMBOL OR LITERAL
2346 TAD ATEM2 /IS CODE 1 ... LITERAL
2348 JMP L53 /NO ... SYMBOL
2349 JMS I ILC4P /YES ... OUTPUT PAGE ADDRESS AS ORIGIN
2351 JMS I OUTBIN /OUTPUT LITERAL WITH NO RELOCATION
2354 L52A, ISZ ATEM1 /MORE
2356 ISZ ILC /SET FOR ESCAPE
2357 JMP I OAPLT /NO ... RETURN
2358 L53, JMS I OBSYM /OBTAIN SYMBOL FROM MST
2360 TAD USE /MST USE WORD
2361 AND K400 /IS SYMBOL DEFINED
2363 JMP L53A /NO ... OCCURANCE
2364 JMS I ILC4P /YES ... OUTPUT ORIGIN
2369 TAD VAL /ACTUAL VALUE
2370 DCA ATEM3 /TO DIRRECTLY ADDRESSABLE LOC
2372 JMS I OUTBIN /OUTPUT VALUE
2378 JMS L53B /PLACE ON OCCURANCE TALBE
2381 / SUBROUTINE TO CREATE AN OCCURANCE IN OCCURANCE TABLE
2386 IAC /ALLOW FOR # FLAG
2387 TAD STT /+TOP OF MST
2389 SERROR /YES ... OUT OF CORE
2391 TAD OTP /OT SIZE - 2
2392 DCA OTP /GIVES ADDRESS ON OCCUR TABLE
2397 DCA I X1 /TO OCCUR TABLE
2398 TAD ATEM4 /PAGE ADDRESS
2399 DCA I X1 /TO OCCUR TABLE
2407 TAD OTP /PAST EXTRA WORD
2410 JMP I L53B /TRY MORE
2419 PFORT, ISZ FORFLG /SET TO 1 FOR 1ST PASS THRU FORTRAN CODE
2420 NOP /END PSUEDO SETS IT TO -1 TO NULLIFY
2421 JMS I SKIPL /SO BACK TO 0 FOR 2ND PASS
2425 /DO SOME WORK FOR L61A
2427 L61C, DCA TEM2 /SAVE 6-BIT CODE
2431 TAD K100 /ADD CORRECT LEADING BITS
2433 TAD TEM2 /ADD CHAR BITS
2440 / ROUTINE TO PUNCH WORD AND RELOCATION BITS ON TAPE
2448 TAD I OUTBN /ADDRESS OF WORD
2451 TAD I OUTBN /RELOCATION BITS
2458 TAD I OUT1 /ACTUAL WORD
2459 DCA OUT1 /MUST DO THIS SINCE WE DO A JMS OUTBN;CSUM;10
2460 TAD OUT1 /AT LOC. PCSM, AND OTHERWISE CSUM WOULD CHANGE AFTER CALL TO SUM.
2461 RTL /ROTATE HIGH 4 BITS TO LOW
2465 TAD OUT2 /ADD REL BITS
2466 JMS SUM /ADD TO CHECK SUM
2467 JMS I PUNCH /PUNCH IT
2468 TAD OUT1 /REMAINDER OF WORD
2469 AND K377 /MASK TO 8 BITS
2470 JMS SUM /ADD TO CHECK SUM
2471 JMS I PUNCH /PUNCH IT
2472 OUTEX, ISZ OUTBN /INDEX FOR EXIT
2487 / ROUTINE TO SEARCH ASSEMBLY PHASE LITERAL TABLE
2488 / FOR 2 WORD ENTRY IN S0-S1
2489 / PLACES ON TABLE IF NOT THERE
2490 / RETURNS PAGE ADDRESS IN AC
2494 DCA TEM2 /ZERO SEARCH COUNTER
2496 TAD LITSIZ /NO OF ENTRYS
2498 JMP L40 /NON ZERO ... SEARCH
2499 L39, TAD LITSIZ /NO OF ENTRYS - 1
2500 RAL CLL /MULTIPLY BY 2
2501 TAD LITBSE /ADD BASE OF TABLE
2502 DCA TEM1 /GIVES ADDRESS OF NEW ENTRY
2503 ISZ LITSIZ /INCREMENT COUNT
2505 DCA I TEM1 /TO TABLE
2506 ISZ TEM1 /INCREMENT ADDRESS
2508 DCA I TEM1 /TO TABLE
2509 TAD LITSIZ /ENTRY NO
2511 / COMPUTE PAGE ADDRESS FROM DISPLACEMENT IN TABLE
2512 / AND STATUS OF AUTOMATIC PAGING MODE SWITCH AND SIZE OF PAGE
2515 L40A, DCA TEM1 /SAVE LOCATION IN TABLE
2519 TAD APMSW /ARE WE IN AUTOMATIC PAGING MODE?
2521 TAD PGEESC /YES - COUNT ESCAPE WORDS
2522 L40DR, CLL RAR /(OVER 2)
2523 L40D, TAD TEM1 /NO ... COMPUTE PAGE ADDRESS
2524 CIA /BY STRAIGNT COMPLEMENTATION METHOD
2528 /FOR AUTO PAGING MODE
2531 DCA TEM1 /- NO OF ENTRYS TO LOC
2533 TAD LITBSE /BASE OF TABLE - 1
2535 L41, ISZ TEM2 /INCREMENT SEARCH COUNTER
2536 TAD I X1 /- FIRST WORD FROM TABLE
2538 TAD S0 /+FIRST COMP WORD
2541 TAD I X1 /-SECOND TABLE WORD
2546 TAD TEM2 /MATCH ... CTR TO AC
2548 L40B, ISZ X1 /INCREMENT FOR NO SECOND COMPARISON
2550 JMP L41 /NO ... TRY MORE
2551 JMP L39 /YES ... PLACE ON TABLE
2553 TAD I REDUCP /GET PAGE ESC COMPUTED BY A1
2558 / HAS COMMON BEEN PUNCHED YET SUBROUTINE
2560 /IF IT HAS ALREADY BEEN PUNCHED, EXIT
2561 /IF NOT, PUNCH IT & SET FLAG
2562 /THIS ROUTINE IS CALLED ONLY ONCE PER PROGRAM
2563 /BUT IT COULD BE CALLED FROM ANY OF SEVERAL PLACES
2566 TAD CPSW /COMMON PUNCHED SWITCH
2567 SNA CLA /HAS IT BEEN PUNCHED
2568 JMP I HCBPS /YES ... RETURN
2569 DCA CPSW /NO ... CLEAR SWITCH
2570 JMS I OUTBIN /AND PUNCH HIGHEST COMMON ASSIGNED
2579 /INCREMENT PAGE TABLE PTRS
2580 /TO PREPARE FOR NEXT INSTRUCTION (OR PARAMETER)
2583 ISZ PTSZE /INCREMENT PAGE TABLE SIZE
2586 DCA I PTCPR /INITIALIZE PAGE TABLE CODE WORD
2587 DCA I PTSPR /INITIALIZE PAGE TABLE SYMBOL WORD
2589 DCA I PTOPR /INITIALIZE PT OP CODE POINTER
2591 TAD CURSKP /MOVE CURRENT SKIP INSTRUCTION INDICATOR
2592 DCA LSTSKP /TO LAST INSTRUCTION SKIP INDICATOR
2593 TAD BANK /MOVE CURRENT BANK
2594 DCA LSTBNK /TO LAST BANK
2598 //FOLLOWING CODE MOVED HERE TO MAKE ROOM FOR V03 IN ASME3
2599 ASMEXT, JMS I OUTSKP /YES, OUTPUT SKP
2600 TAD ILC /GET PG.LOC.PTR.
2602 TAD K5204 /OUTPUT JMP .+4
2611 / ABSYM PSEUDO OPERATOR
2618 /SKPDF & OPDEF PSUEDO-OPS
2621 SKPDEX, TAD K20 /PUT IN SKIP BIT
2622 OPDEX, TAD K3010 /STANDARD OP BITS
2625 AND K7000 /CK TYPE OF INST
2631 TAD S0 /OPR, BUT WHICH GRP?
2654 /UTILITY FOR PABSYM & OPDEX
2655 /CALL WITH MST CODE WORD EXCEPT BITS 10-11
2656 /IN AC. EXITS WITH SYMBOL VALUE
2657 /AS DEF. BY SOURCE TAPE IN S0 & IN AC.
2661 JMS I GETSYM /GET THE SYMBOL NAME
2665 JMP DEFERR /CONST. OR LIT.
2666 TAD S0 /ADD IN SYM LENGTH
2669 JMS I GETSYM /GET VALUE
2673 DEFERR, IERROR /LIT.
2680 /CALLING SEQUENCE: TAD (OCTAL#)
2686 CLL RAL /PUSH THRU LINK
2705 /DUMMY OUTPUT ROUTINE
2706 /REPLACES OUTBN DURING ASMBLY PHASE 1
2707 /CALLING SEQUENCE: JMS DUMMY
2711 /NOTE: SAME CALLING SEQ. AS OUTBN
2715 ISZ DUM /INDEX FOR PROPER EXIT
2716 ISZ DUM /INDEX FOR PROPER EXIT
2719 / ROUTINE TO SEARCH EXTERNAL SYMBOL TABLE
2720 / FOR CUR SYMBOL - RETURNS EXTERNAL SYMBOL
2721 / NUMBER IN AC - PLACES SYMBOL ON TABLE
2722 / AND OUTPUTS BIN CODE FOR TV IF NOT ON TABLE
2725 TAD ESTSIZ /IS TABLE FULL?
2729 TAD ESTSIZ /SIZE OF EST
2731 JMP L66A1 /NO ... SEARCH IT
2732 L66A3, CLA CMA /YES ... PLACE SYMBOL ON IT
2733 ISZ ESTSIZ /INCREMENT TABLE SIZE
2736 DCA TEM1 /GIVES ADDRESS OF NEW ENTRY
2737 TAD SYMBOL /PHYSICALLY PLACE ON TABLE
2741 TAD USE /MST CODE WORD
2742 AND K403A /SAVE LENGTH AND DEFINITION BIT
2743 TAD K2000 /ADD EXTERNAL BITS
2745 JMP L66A /GO TO PUNCH TV DEF
2747 DCA TEM2 /PLACE -SIZE IN INDEX LOC
2748 DCA TEM3 /ZERO COUNT
2750 TAD BSEEST /BASE OF EST - 1
2752 L66A2, ISZ TEM3 /INCREMENT COUNT LOC
2754 TAD I X1 /-TABLE SYMBOL
2757 TAD SYMBOL /+ CUR SYMBOL
2760 ISZ TEM2 /NOT SAME ... ANY MORE
2761 JMP L66A2 /YES ... KEEP TRYING
2762 JMP L66A3 /NO ... PLACE ON TABLE
2763 TAD TEM3 /PLACE COUNT IN AC
2766 / OUTPUT BINARY EXTERNAL SYMBOL
2769 L66A, JMS I .-1 /CHECK TO SEE IF COMMON HAS BEEN PUNCHED
2770 JMS I OUTBIN /TV DEF FOR 1 SYMBOL
2773 JMS I L62A1 /PUNCH ASCII CHARS
2774 TAD ESTSIZ /EST NO TO AC
2785 /SYMBOL TABLE LISTING ROUTINE
2786 /TYPES TABLE FROM "STTP" UP
2787 /WITH NAME-VALUE-FLAG
2788 /POSSIBLE FLAGS ARE: EXT, COM, UNDF, ABS, OP
2789 /FLAGS TYPED BY "STFT"
2790 /TABLE LISTED ALPHABETICALLY WITH NUMERIC
2791 /CHARACTERS .GT. ALPHABETIC
2795 DCA PFLG /CLR PRSYM-PASS FLAG
2799 TAD PUNCH /LIST ON H.S. PUNCH
2802 PRS1, TAD PST /INIT SPTR AT TOP OF PERM. S.T.
2804 TAD M3 /FILL S1,S2,S3 WITH 7777'S (MAX)
2812 TAD K3 /AND LENGTH=3
2814 DCA FOUND /CLR EXIT FLAG
2815 PRS2, TAD STT /HAS SEARCH HIT END OF TABLE?
2819 JMP PRS7 /YES, USE THE A-SYM WE HAVE
2820 JMS I OBSYM /NO, GET NEXT MST ENTRY
2822 TAD BCODE /EXTRACT LENGTH
2825 TAD BPTR /INDEX NEW ENTRY
2827 TAD BLEN /SET ENTRY CTR
2830 TAD ALEN /SET A-SYM CTR
2833 TAD APTR /INDEX A-SYM
2835 TAD PFLG /IS THIS THE FIRST TIME THRU THE TABLE?
2838 TAD BCODE /YES, CLR ENTRY BIT 0
2839 AND K3777 /(THE HAS-BEEN-PRINTED FLAG)
2841 PRS3, TAD BCODE /HAS THIS SYMBOL BEEN PRINTED ALREADY?
2843 JMP PRS6 /YES, IGNORE IT
2844 PRS4, TAD I X1 /NO, COMRARE A-SYM WORD
2847 TAD I X2 /WITH B-SYM WORD
2850 JMP .+4 /MATCH SO FAR
2852 JMP PRS5 /A-SYM WORD IS BIGGER-- USE B-SYM
2853 JMP PRS6 /VICE-VERSA
2854 ISZ AACTR /IS A-SYM DONE?
2856 JMP PRS6 /YES, STICK WITH A-SYM
2857 ISZ BCTR /IS B-SYM DONE
2858 JMP PRS4 /NO, TRY NEXT WORD
2859 PRS5, ISZ FOUND /YES, B-SYM IS NEW A-SYM
2861 TAD BPTR /INDEX B-SYM
2863 TAD APTR /CLR STORAGE FOR NEW A-SYM
2868 TAD APTR /RESET A-SYM INDEX
2870 TAD BLEN /CTR FOR TRANSFER
2874 TAD I X2 /MOVE B-SYM TO A-SYM
2879 TAD BLEN /NEW LENGTH
2885 PRS6, TAD BPTR /MOVE SPTR TO NEXT MST ENTRY
2889 JMP PRS2 /CONTINUE SEARCH
2890 PRS7, TAD FOUND /HAS ANOTHER SYMBOL BEEN FOUND?
2897 DCA USE /SET HAS-BEEN-PRINTED BIT
2898 ISZ PFLG /SET PASS FLAG
2899 JMS I CRLF /POSITION PRINT
2900 TAD APTR /INDEX SYMBOL
2904 TAD I X1 /PRINT SYMBOL
2908 JMS I CTYPE /PRINT 2 SPACES
2909 TAD AVAL /PRINT VALUE
2911 TAD USE /MOVE TYPE BITS TO LOW AC
2912 RTL /& DEF. BIT TO LINK
2914 JMS I STFTI /TYPE FLAGS IF ANY
2915 JMP PRS1 /LOOK FOR ANOTHER SYMBOL TO PRINT
2925 PST, STTP /TOP OF PERMANENT SYMBOL TABLE
2944 /ROUTINE TO PUSH DOWN CUR.LINE FOR NEXT PAGE.
2945 /SAVES ENTIRE LIST OF VITAL INFO
2946 /(LFS, OP, IB,...,BANK, S0) IN TEMP.LOCS
2947 /(TLFS, TOP, TIB,..., TS0)
2948 /BOTH LISTS MUST BE KEPT IN SPECIFIED
2950 /IF THERE IS AN LFS ON LINE MUST MARK IT
2951 /NO-LONGER-DEFINED-ON-PAGE IN PST.
2955 TAD LFS /IS THERE AN LFS
2960 JMS I SPSTAB /GET ITS POINTERS TO THE PAGE SYMBOL TABLE
2962 TAD I PSTCPR /KILL THE DEFINED BIT
2964 DCA I PSTCPR /SET PAGE SYMBOL TABLE CODE WORD OFF PAGE
2968 JMP I PUSHIN /RETURN
2970 / ROUTINE TO POP UP A PUSHED DOWN INSTRUCTION
2978 TLFS, 0 /KEEP THIS LIST ORDERED AS GIVEN
2991 /TRANSFER ANY LIST OF 10 (12 OCTAL) ITEMS
2992 /FROM ONE LIST TO ANOTHER
2993 /CALL SEQ.: JMS PUSHER
2994 / ADDR-1 OF FROM-LIST
3003 DCA X1 /INDEX FROM LIST
3006 DCA X2 /INDEX TO LIST
3017 PRTN, JMS I GETSYM /GET NEXT INPUT ITEM
3023 JMS I SREST /PLACE SYMBOL ON EXTERNAL SYMBOL TABLE
3024 DCA PRTN0 /SAVE SYMBOL ID
3025 JMS PUSHIN /PUSH LFS INFO IN CASE OF PAGE ASSEMBLY
3027 JMS I PRTN1 /ARE THERE 2 LOCATIONS ON THIS PAGE
3029 JMS I INI /NO ... HAD TO ASSEMBLE PAGE ... INITIALIZE PT
3030 JMS POPIN /POP LFS INFO FROM PAGE PUSH LIST
3031 JMS I ICPLFS /PROCESS ANY LFS
3032 TAD I PTCPR /PT CODE WORD WITH POSSIBLE LFS BIT
3033 TAD K30 /ADD SPECIAL RELOCATION BIT
3034 DCA I PTCPR /PLACE PROPER CODE WORD ON PT
3036 DCA I PTSPR /PLACE JMS .RTN INSTRUCTION IN PT SYMBOL WORD
3037 JMS I PRTN3 /INCREMENT PT POINTERS
3038 TAD K130 /PROPER BIT PATTERN
3039 DCA I PTCPR /TO PT CODE WORD
3040 TAD PRTN0 /PLACE EXTERNAL SYMBOL NUMBER ON PT
3041 DCA I PTSPR /AS SYMBOL WORD
3042 JMS I PRTN3 /INCREMENT PT POINTERS
3043 JMP I POPEXP /EXIT FOR NEXT LINE
3050 / @PAUSE@ PSEUDO OPERATION
3052 PPAUSE, JMS I WLNIFI /LIST IF PASS 2
3053 CLA HLT /WAIT FOR OPERATOR ACTION
3057 PPAUS1, CMA /WE REACH THIS ONLY IF FORFLG. LE. 0(ALSO COME FROM *PEND*)
3058 DCA FORFLG /SHUT OFF FORTR IN CASE GUY
3059 /HAS STARTED HIS TAPE IN
3061 JMP I DCIL1 /RETURN FOR NEXT LINE
3067 /OVERAL ASSEMBLY INITIALIZATION
3076 JMS PUSHER /INIT HICOM, PAGE, ESTSIZ, EQVBIT & APMSW ETC
3083 DCA SYMBOL /PROTECT FROM RUSVL
3086 TAD K10 /SET PUSH CTR=-2
3087 JMS PUSHER /INIT OTP & STP
3092 OTPR, CORE1-1 /KEEP STTR IMMEDIATELY AFTER OTPR
3094 /***** KEEP ITEMS SO INCLOSED IN GIVEN ORDER
3114 / ROUTINE TO SEARCH SYMBOL TABLE FOR SYMBOL IN S0-S3
3115 / PLACES SYMBOL ON TABLE IF NOT THERE
3121 /RETURNS WITH SYMBOL CODE BITS IN "USE"
3122 /SYMBOL VALUE (0 IF NOT DEFINED)
3124 /& PTR TO SYM.TAB. ENTRY IN "SYMBOL"
3125 /THE LATTER ADDRESS IS REFERRED TO HERE IN
3127 /SRSYM CALL RUSVL TO STORE USE & VAL
3128 /OF LAST REFERENCED SYMBOL IN MST
3129 /IN CASE THEY HAVE BEEN CHANGED
3135 TAD MST /START AT SYM. TAB. BASE
3136 SRS1, DCA SYMBOL /SET PTR. TO NEXT ENTRY
3137 TAD STT /COMPARE PTR. WITH SYM. TAB. TOP
3140 SNA CLA /CONTINUE SEARCH
3141 JMP SRS2 /NAME NOT IN TABLE ENTER IT
3143 TAD I SYMBOL /GET ENTRY CODE WORD
3145 AND K3 /EXTRACT SYMBOL LENGTH
3148 CIA /NEGATE FOR COMPARE & CTR.
3150 TAD TEM1 /COMPARE ENTRY & LOOK-UP SYMBOL LENGTHS
3152 SZA CLA /SAME LENGTH; COMPARE LETTERS
3153 JMP SRS5 /NOT SAME; GO TO NEXT ENTRY
3154 TAD AS0 /AUTO-INDEX LOOP-UP SYMBOL
3156 TAD SYMBOL /AUTO-INDEX TABLE ENTRY
3159 TAD I X2 /GET TABLE ENTRY CHAR. PAIR
3162 TAD I X1 /COMPARE LOOK-UP SYMBOL CHAR. PAIR
3165 ISZ TEM1 /CK SYM. LEN. CTR.
3166 JMP SRS3 /NOT DONE, TRY NEXT CHAR. PAIR
3167 SRS4, JMS SUSVL /GET USE & VAL WORDS
3170 SRS5, TAD SYMBOL /PTR TO LAST ENTRY
3171 TAD K2 /+2 FOR USE & VAL WORDS
3172 TAD TEM2 /+ENTRY SYMBOL LENGTH
3173 JMP SRS1 /=PTR TO NEXT ENTRY
3175 /CURRENT SYMBOL NOT ON TABLE ... PLACE IT THERE
3178 SRS2, TAD OTP /WILL NEW ENTRY FIT BELOW
3179 CIA CLL /OCCURANCE TABLE?
3183 SERROR /NO, SYMBOL TABLE OVERFLOW
3184 TAD S0 /ENTRY CODE WORD = SYM. LEN.
3187 DCA I STT /PUT CODE IN 1ST WORD OF NEW ENTRY
3188 TAD STT /AUTO-INDEX ENTRY
3190 TAD AS0 /AUTO-INDEX SYMBOL TO BE STORED
3192 TAD S0 /SET SYM. LEN. CTR.
3196 TAD I X1 /MOVE SYMBOL CHAR. PAIR TO TABLE
3201 DCA I X2 /CLR VALUE WORD
3202 TAD STT /SAVE PTR TO NEW ENTRY
3204 TAD X2 /RESET PTR. TO SYM. TAB. TOP
3211 /OBTAIN GIVEN SYMBOL'S VITAL INFO FROM MST
3212 /CALL SEQ: JMS OBNSYM
3213 / ADDRESS OF SYMBOL ID
3215 /OBNSYM LEAVES SYMBOL ID IN "SYMBOL",
3216 / SYMBOL CODE WORD IN USE,
3217 / SYMBOL VALUE IN VAL.
3218 /OBNSYM CALLS RUSVL BEFORE ACTION
3219 /FOR SAME REASON AS SRSYM DOES.
3223 TAD I OBNSYM /ADDRESS OF SYMBOL
3225 TAD I TEM1 /ACTUAL SYMBOL
3227 ISZ OBNSYM /INDEX FOR EXIT
3228 JMS SUSVL /SET UP USE AND VALUE WORDS
3229 JMP I OBNSYM /RETURN WHEN FOUND
3231 / ROUTINE TO SET UP USE AND VALUE WORDS
3234 CDF 00 /OFF TO BANK 1
3235 TAD I SYMBOL /MST USE WORD FROM BANK 1
3236 DCA USE /TO BANK 0 USE LOCATION
3242 TAD I VALPTR /MST VALUE WORD FROM BANK 1
3243 DCA VAL /TO BANK 0 VALUE LOCATION
3244 CDF 10 /RESTORE DATA FIELD
3256 VALPTR, 0 /PTR TO CURRENT VAL WORD IN MST
3259 / IGNORES LF, FF, RO, LEADER
3260 / ALSO CHECKS CHAR AS TO TYPE
3261 /CALLING SEQ: JMS RCH
3262 / RETURN IF CHAR IS A DIGIT
3263 / RETURN IF CHAR IS ALPHABETIC
3264 / RETURN FOR ALL OTHER (PUNCT,ETC)
3266 / CHR=ASCII VALUE OF INPUT CHARACTER
3270 JMS I GETCHR /GET 1 CHAR
3272 JMP RCH3 /0=END OF LINE
3275 JMP RCH3 /TAKE PUNCT.EXIT (200-257)
3278 JMP RCH4 /TAKE DIGIT EXIT (260-271)
3281 JMP RCH3 /TAKE PUNCT, EXIT (272-300)
3286 RCH3, ISZ RCH /PUNCT, EXIT (337-376)
3287 ISZ RCH /ALPHA EXIT (301-336)
3289 RCH4, CLA /DIGIT EXIT
3296 /FORCE BUFFER FILL ON FIRST READ
3303 MBE=LINAX /=LAST WORD OF DATA BUFFER
3306 /SUBR TO READ 1 LINE INTO LINE BUFFER
3309 DCA LFLG /CLR NON-NULL LINE FLAG
3310 TAD SCOLON /IF LAST LINE ENDED WITH ;
3311 SZA /NO NEED TO READ ANOTHER
3313 TAD LINAX /INIT STORAGE AUTO-INDEX
3315 RLN2, JMS FETCH /GET A CHARACTER
3316 JMS I TEST /IS IT A CR,TAB,SP,FF,LF?
3317 SL7-1 /IF SO GO TO RLN15,3,3,2,2
3319 ISZ LFLG /OTHERWISE A NON-NULL LINE
3320 RLN3, JMS I STOREP /OTHERWISE PUT IT IN THE BUFFER
3321 TAD X2 /IS BUFFER FULL?
3327 DCA X2 /IF SO MOVE BACK PTR
3329 RLN15, DCA CHR /TERMINATE LINE WITH 0
3335 TAD LINAX /INIT LINE INDEX
3344 /SUBROUTINE TO READ 1 CHARACTER VIA INPUT DEVICE
3345 /IGNORES 200'S & 377'S
3350 TAD K200 /FORCE FULL 8BIT ASCII
3361 /SUBR TO GET NEXT CHAR FROM HSR BUFFER
3362 /REFILL BUFFER WHEN X3 REACHES END OF BUFFER
3367 TAD BUFEND /CK FOR END OF BUFFER
3370 R1, TAD I X3 /GET NEXT CHAR
3373 RG, TAD BUF /INDEX THE BUFFER
3381 RG3, TAD BUF /RESET PTR
3390 /GET 1 CHAR FROM LINE BUFFER
3401 / ROUTINE TO PUNCH LEADER TRAILER CODE
3413 / ROUTINE TO TYPE RETURN-LINE FEED
3426 /DECIM & OCTAL PSUEDO-OPS
3429 IAC /SET ARITHMETIC CONVERSION TO DECIMAL
3432 DCA DSW /SET ARITHMETIC CONVERSION TO OCTAL
3433 JMP I NULLP /GO GET NEXT INPUT LINE
3438 /ROUTINE TO STOP NEXT LINE FROM BEING LISTED
3439 /THO IT IS ALREADY IN THE BUFR.
3440 /E.G., STOP LISTING OF PUSHED DOWN LINE
3441 /WHILE ASSEMBLING LIT. POOL
3445 TAD I LINEB2 /SAVE 1ST CHAR OF LINE
3447 JMP .+3 /THERE ISNT ANY
3450 DCA I LINEB2 /CLR TO PREVENT TYPEOUT
3456 /REENABLE LISTING OF LINE WHICH SAVLIN
3462 TAD SAVEIT /RESTORE 1ST CHAR OF LINE
3471 /ROUTINE TO LIST NULL, COMMENT OR PSUEDO-OP LINE
3473 NULL, DCA VALUE /IF ANY GIVEN
3474 TAD VALUE /SET TYPEOUT FLAG IF NON-0
3476 JMS I WLIF /LIST IF PASS 2
3477 JMP I DCIL1 /GO BACK TO RDL1 FOR NEXT LINE
3487 CLA /EXIT WITH CLEAR AC
3491 / ROUTINE TO SET THE CORRECT COUNTERS FOR THE CURRENT
3492 / OP CODE AND ADDRESS FIELD SYMBOL
3494 /THIS IS A MAJOR ROUTINE. IT IS CALLED ONCE
3495 /FOR EVERY NORMAL (MRI,OPR,IOT) INSTR. COLLECTED.
3496 /IT IS ALSO CALLED DURING PAGE
3497 /RECOUNTING, ONCE FOR EVERY ITEM ON THE
3499 /CALLING SEQ: AC=0,JMS,RET WITH AC=0
3500 /FUNCTION: DETERMINE THE TYPE OF LINE BEING
3501 /READ AND SET THE VARIOUS PAGE COUNTERS
3502 /AND FLAGS ACCORDINGLY.
3503 /A FLOW CHART OF TYPES & FLAG SETTINGS IS GIVEN BELOW.
3504 /CONSIDERABLE OVERLAPPING IS USED TO ACHIEVE
3505 /THE MIN. CORE USAGE. THIS IS SOMETIMES AT THE
3506 /EXPENSE OF LOGICAL CLARITY.
3507 /ALL POSSIBLE CONDITIONS EXIT VIA SETC00
3508 /SETC00:(1) IF LAST INSTR. WAS A SKIP & LAST BANK
3509 / IS NOT= CUR.BANK, BANK=-1.
3510 / (2) IF CUR. INSTR. IS A SKIP, PGEESC=4
3511 / OTHERWISE PGEESC=2.
3512 / (3) LASTSKIP CONDITION= CUR. SKIP CONDITION
3513 / (4) LAST BANK= CUR. BANK
3515 /FLOW OF INSTR. TYPES
3516 /SETCT: IF (PARAMETER OR MICRO-INSTR.) SETC00
3517 / IF (LITERAL AFS) SETC02
3518 / IF(CONSTANT AFS) SETC01
3520 / IF (INSTR. IS INDIRECT) SETC07
3521 / IF (AFS IS IN COMMON) SETCO4
3522 / IF (ABSOLUTE AFS) SETC05
3523 / CALL SPSTB (AFS) /SEARCH PST FOR AFS
3525 / IF (AFS NOT BEFORE ON PST) SETC06
3526 / IF (AFS WAS IN PST BUT NOT DEF. ON PAGE)SETC12
3527 / IF (OP CODE=JMS) BANK=1
3528 / GO TO SETC00 /ON PAGE MR1
3529 /SETC01:IF (CONST.AFS ON PG.0)J2
3530 / IF (INSTR. IS INDIRECT) ERROR
3531 / CALL SLTAB(CONST. AFS) /PUT CONST. IN LIT.TAB.
3532 /J1: IF (BANK NOT=1) SETC13
3534 / J2* IF( INSTR.INDIR.) J1 /PG.0 INDIRECT
3535 / GO TO SETC00 /PG.0 DIRECT
3536 /SETC04:IF(BANK NOT 0) CALL INCOBA /INC OBACTR
3538 / S0=RESULT+COMMON ADDR.
3539 /SETC02:CALL SLTAB(S0) /LIT.OR. COMMN. ADDR. TO LIT. TAB.
3541 / IF (AFS NOT PREV. ON PST) SETC11
3542 / IF (AFS WAS ON PST BUT NOT DEF. ON PAGE) SETC11
3545 / IF (ABS.AFS ON PAGE 0) J3
3546 /SETC11:AC=1 /FORCE BANK=1
3547 /SETC09:AC=AC+1 /FORCE BANK=0
3548 /SETC08:AC=AC-2 /FORCE BANK=-1
3549 / CALL INCOBA /INC OBACTR
3550 / AC=BANK /(BANK OFFSET BY -1)
3551 / GO TO SETC13 /(TAKEN CARE OF AT SETC13)
3552 /SETC12:IF (NEW PST CODE BITS 10-11=OLD SAME (IN TEM 3)) J3
3553 /SETC06:INC OPSCTR /OFF PAGE SYMBOL
3554 /J3: IF (BANK=1) SETC00
3557 /J4: IF (THERE HAS NOT BEEN A PST SEARCH) SETC00
3558 / ADD CHANGE IN OBACTR (OBACTR-OLDOBA) TO PST CODE BITS 3-9
3561 /NOTE: CONDITION AT J4 IS TESTED BY SETSUB HEADER
3562 /WORD (OBFLG). THIS IS ALWAYS CLEARED
3563 /WHEN SETCT STARTS AND WILL NOT CHANGE
3564 /UNLESS THERE IS A CALL TO SPSTB BECAUSE
3565 /A CALL TO SETSUB ALWAYS FOLLOWS CALL TO
3571 JMS I ICPLFS /CHECK FOR AND PROCESS ANY LFS
3573 /NEXT 2 LINES MOVED TO
3574 /SETCAL (AS OF V15) TO MAKE ROOM FOR FOLLOWING INSTR. & PTR
3575 / TAD EXP /IS IT PAR OR A MICRO INST?
3582 SNA /IS AFS A CONSTANT
3585 SNA CLA /IS AFS A LITERAL
3587 JMS I OBSYM /NO ... GET POINTERS TO AFS
3589 TAD IB /INDIRECT BIT
3592 JMS USETST /TEST FOR OFF BANK OR ABSOLUTE
3595 JMS I SPSTAB /IS AFS ON PST
3598 JMP I SET06I /NO ... MUST BE OFF PAGE
3599 TAD I PSTCPR /YES ... PST CODE WORD
3600 SMA CLA /IS AFS ON PAGE
3604 / INDIRECT MEMORY REFERANCE INSTRUCTION
3606 SETC07, TAD USE /AFS MST USE WORD
3607 AND K20 /IS AFS DUMMY
3610 JMS USETST /TEST OFF BANK OR ABSOLUTE
3613 JMS I SPSTAB /IS AFS ON PST
3617 TAD I PSTCPR /YES ... PST CODE WORD
3618 SMA CLA /IS AFS ON PAGE
3622 / CONSTANT FOR AN ADDRESS FIELD SYMBOL
3624 SETC01, TAD S0 /ACTUAL BINARY CONSTANT
3625 AND K7600 /IS CONSTANT ON PAGE ZERO
3628 TAD IB /NO ... IS IT INDIRECT
3630 IERROR /YES ... ERROR
3631 JMS I SLITAB /IS CONSTANT ON LITERAL TABLE
3632 /IF NOT SUBROUTINE PUTS IT THERE
3634 SPA CLA /IF OPCODE IS JMS OR JMP THEN BANK IS IRRELEVANT
3637 TAD BANK /BANK SETTING
3638 SNA CLA /IS IT SET TO THE CURRENT BANK
3639 JMP I SET00I /YES ... NO PROBLEMS
3640 JMP I SET00J /EXIT TO; COMMON AREA
3642 SET01A, TAD IB /IS INDIRECT BIT SET
3649 SET00B, JMP I SETCT /OFF PAGE RETURN
3658 /ROUTINE TO TEST MST USE WORD TO DETERMINE WHETHER A SYMBOL IS
3659 /OFF-BANK OR ABSOLUTE
3664 SZA CLA /IS IT OFF BANK?
3665 JMP USESUC /YES- RETURN INDIRECT THROUGH FIRST ARG
3669 SNA CLA /IS IT ABSOLUTE?
3670 JMP USESUC /YES- RETURN INDIRECT THROUGH SECOND ARG
3672 JMP I USETST /NEITHER - RETURN TO CALL+3
3673 USESUC, TAD I USETST
3675 JMP I USETST /TAKE PROPER BRANCH
3678 /SETSUB IS A UTILITY USED BY SETCT ONLY.
3679 /USED ONLY IMMEDIATELY AFTER A PST SEARCH.
3680 /CALLING SEQUENCE: JMS SPSTB
3681 / CMA /SPSTB MAY SKIP
3683 / RETURN IF SPSTB SKIPPED OVER CMA
3684 / RETURN IF SPSTB DID NOT SKIP
3685 /HAS SEVERAL FUNCTIONS:
3686 /(1) SAVE COPY OF OLD VALUE OF OBACTR BEFORE
3687 /CHANGING STARTS- SO IT MAY BE USED AT SETC13.
3688 /(2) IF INSTR IS INDIRECT, THAT'S IT- EXIT
3689 /(3) OTHERWISE SAVE OLD VALUE OF PST CODE BITS 10-11
3690 /FOR LATER USE AT SETC12. WARNING: THIS
3691 /IS SAVED IN TEM3, SO TEM3 IS NOT
3692 /TEMPORARY FOR A FEW MINUTES.
3693 /(4) SET PST CODE BIT 10 IF THIS IS A #REF,
3694 /OR BIT 11 IF IT IS A NORMAL REF.
3695 /ALGORITHM IS A.OR.B=(.NOT.A.AND.B)+A
3699 DCA TEM1 /0=FOUND, -1=NOT
3700 TAD OBACTR /SAVE FOR SETC11,12,6,13
3702 TAD IB /OMIT CHANGING PST BITS IF INDIRECT
3705 TAD I PSTCPR /SAVE OLD CODE
3713 TAD TEM2 /OR INTO CODE
3718 SETSX, ISZ TEM1 /FOUND?
3727 /SUBR TO STORE CHARACTER IN LINE BUFFER
3729 /CHAR MAY BE IN AC OR IN CHR
3741 /ROUTINE TO CHECK NSGN FOR SETCT
3742 /USED ONLY BY SETCT ROUTINE.
3743 /CALLING SEQUENCE: AC=0
3745 / RETURN WITH AC=0 IF
3746 / NSGN=0,AC=1 IF NSGN
3748 /NOTE:NSGN MAY BE NON-0 AND NOT=1. THIS
3749 /IS THE REASON FOR NUMSGN.
3761 SETC05, JMS I NUMSGP
3762 TAD VAL /ABSOLUTE SYMBOL VALUE
3763 AND K7600 /MASK OUT PAGE BITS
3764 SNA CLA /IS ABSOLUTE SYMBOL ON PAGE ZERO
3765 JMP SETC00 /YES ... EXIT
3767 TAD VAL /NO ... ABSOLUTE SYMBOL VALUE
3768 DCA S0 /TO LITERAL TABLE SEARCH LOCATION
3769 JMS I SLITAB /SEARCH LITERAL TABLE FOR VALUE
3770 /IF NOT THERE ROUTINE PLACES IT THERE
3775 SETC10, JMS I NUMSGP
3776 TAD VAL /ACTUAL AFS VALUE
3778 SNA CLA /IS ADDRESS FIELD SYMBOL ON PAGE ZERO
3781 / INDIRECT DUMMY ADDRESS FIELD SYMBOL
3783 SETC08, TAD M2 /SET BANK UNKNOWN
3787 SETC11, IAC /SET BANK TO CURRENT
3789 / OFF BANK INDIRECT - SET BANK TO 0
3792 JMS INCOBA /SET BANK & INCR. OBACTR
3794 JMP SETC13+1 /EXIT TO COMMON AREA
3798 / ADDRESS FIELD SYMBOL NOT ON PAGE SYMBOL TABLE.
3800 SETC12, TAD I PSTCPR /HAS NEW TYPE REF BEEN ADDED?
3805 SETC06, ISZ OPSCTR /INCREMENT OFF PAGE SYMBOL COUNTER
3807 SPA CLA /DON'T WORRY ABOUT BANK FOR JMS'S AND JMP'S
3808 JMP SETC00 /WHICH ARE NOT EXPLICITLY INDIRECT
3811 JMP SETC00 /YES ... EXIT TO COMMON AREA
3813 JMS INCOBA /SET BANK TO CUR. & INC OBACTR
3814 TAD I OBFLGP /WAS THERE A PST SEARCH?
3817 TAD OLDOBA /YES GET CHANGE IN OBACTR
3820 CLL RTL /IN BITS 1-9
3821 TAD I PSTCPR /ADD TO PST CODE
3826 SETC00, JMS CMNSET /SET BANK=1 AFTER JMS
3827 JMS I SETCMN /UPDATE BANK AND LSTSKP
3828 SZA CLA /IS CURRENT INSTRUCTION A SKIP?
3829 TAD K2 /YES ... PAGE ESCAPE = 4
3830 TAD K2 /NO ... PAGE ESCAPE = 2
3836 /ROUTINE TO SET BANK TO CURRENT AFTER A JMS
3840 SZA CLA /WAS OP A JMS?
3849 / DIRECT OFF BANK REFERANCE
3851 SETC04, TAD BANK /BANK INDICATOR
3852 SZA CLA /IS BANK SET TO OFF
3853 JMS INCOBA /NO, SET BANK TO COMMN & INC OBACTR
3855 TAD VAL /YES ... ACTUAL BANK 0 ADDRESS
3856 DCA S0 /TO CONSTANT - LITERAL LOCATION
3858 / LITERAL FOR AN AFS
3860 SETC02, JMS I SLITAB /PLACE LITERAL ON LITERAL TABLE
3863 / COLLECTION ROUTINE TO CHECK FOR AND PROCESS AN LFS
3865 /CALLING SEQUENCE: AC=0
3868 /FUNCTION: USED DURING COLLECTION PHASE
3869 / EXCEPT WHEN RECOUNTING A PAGE.
3870 / IF TAG OCCURS ON CURRENT LINE, CPLFS
3871 / LOCATES (OR ENTERS) IT IN PAGE SYM.TAB.
3872 / AND SETS THE DEFINED-ON-PAGE BIT IN
3873 / THE PST CODE WORD.
3874 / ALSO SETS BANK CONDITION TO UNKNOWN
3875 / SINCE USER CODE CAN JUMP TO TAG
3876 / FROM ANYWHERE. ALSO SAVE
3877 / TAG IN LLFS & RESET LINE COUNT
3878 / IN CASE WE GET A MULT.DEF. ERROR
3879 / IN PASS1 WE MUST ALSO DO THE
3880 / FOLLOWING IF THE SYMBOL IS ALREADY
3881 / IN THE PST WHEN WE GO LOOK FOR
3882 / IT: (1) REDUCE THE OFF-PAGE SYM.
3883 / CTR. BECAUSE OFF-PAGE POINTER (FOR
3884 / EITHER NORMAL OR # REFERENCES) ARE
3885 / NO LONGER NEEDED. (2) REDUCE
3886 / OBACTR BY THE NO. OF EXTRA WORDS
3887 / OF CODE DUE TO THIS SYMBOL.
3888 /SUBRS. CALLED: OBNSYM(LFS),SPSTB,PSTDEF
3891 TAD I RECTI /ARE WE RECOUNTING?
3893 JMP I CPLFS /YES ... RETURN
3896 JMP I CPLFS /NONE THERE
3898 DCA I LFSPTR /PLACE ON LFS TABLE
3899 ISZ LFSPTR /INCREMENT LFS TABLE POINTER
3901 ISZ I PTCPR /SET LFS BIT ON PAGE TABLE
3904 JMS I SPSTAB /IS IT ON THE PAGE SYMBOL TABLE
3905 JMP CPLFS3 /NO ... SKIP DECREMENTING
3907 TAD PASS /SKIP DECREMENTING IF PASS 2
3909 TAD I PSTCPR /CK USE
3920 TAD I PSTCPR /EXTRACT SHARE OF OBACTR DUE
3921 AND C3774 /TO THIS SYMBOL
3922 CLL RTR /MOVE TO LOW ORDER
3923 CIA /SUB. FROM OBACTR
3926 CPLFS3, JMS I PSTDEP
3927 CLA CMA CLL /SET BANK UNKNOWN (THE CLL IS USED ELSEWHERE)
3929 TAD LFS /SAVE IN CASE OF ERROR
3931 DCA LINE /ZERO LINE COUNT FROM LAST LFS
3940 /UTILITY FOR SETC04,SETC08,SETC13
3942 /CALLING SEQUENCE: DESIRED BANK SETTING IN AC
3945 /FUNCTION:(1) SET BANK AS SPECIFIED
3946 / (2) INCREMENT OFF-BANK ADDITION CTR
3947 / BY 1 OR 2: 2 IF PREVIOUS INSTR.
3948 / WAS A SKIP-TYPE, 1 OTHERWISE.
3952 TAD LSTSKP /LAST INSTRUCTION SKIP INDICATOR
3953 SZA CLA /WAS LAST INSTRUCTION A SKIP INSTRUCTION
3954 ISZ OBACTR /+ OLD VALUE OF OFF BANK ADDITION COUNTER
3955 ISZ OBACTR /FOR NEW VALUE OF OFF BANK ADDITION COUNTER
3960 / ROUTINE TO ASSEMBLE THE PAGE HELD IN THE CURRENT SET OF TABLES
3962 /THIS IS THE MAIN PASS1 ASSEMBLY ROUTINE
3963 /(NOT USED BY PASS2)
3964 /ASMBL GOES THRU ENTIRE PAGE TABLE
3965 /FLOW: (1) CALL A1 TO INIT. PAGE ASSEMBLY
3966 / (2) GET ITEM OFF P.T.
3967 / (3) CALL ASM02 TO ASSEMBLE ITEM
3968 / (4) LOOP BACK TO (2) TIL DONE WITH PAGE
3969 / (5) CALL A2 TO ASM. LITERALS
3970 /ASMBL IS CALLED TWICE BY L55 FOR
3975 JMS I ILC4PT /OUTPUT PAGE ORIGIN
3976 JMS I INIS /DO INITS.
3977 TAD PTSZE /PLACE - SIZE OF PAGE TABLE
3979 DCA INDX1 /IN AN INDEX LOCATION
3980 TAD LFSBSE /SET UP LFS TABLE POINTER
3983 DCA PHASE /SET PHASE SWITCH TO ASSEMBLY
3984 JMS I ASM02I /SKIP INCREMENTING POINTERS THE FIRST TIME
3985 JMS I ISSI /INCREMENT PAGE TABLE POINTERS
3994 /ASSEMBLY ROUTINE TO FINISH OFF A PAGE
3995 /(1) PUTS OUT PAGE ESCAPE
3996 /(2) LITERAL POOL (BY CALLING OAPLT)
3997 /(3) GET READY FOR NEXT PAGE
4000 JMS I SAVLNP /STOP NEXT LINE LISTING
4001 TAD APMSW /ARE WE IN AUTOMATIC PAGING MODE
4003 JMP A2NONA /NO ... DONT SEND PAGE ESCAPE
4004 TAD PGEESC /SIZE OF PAGE ESCAPE REQUIRED
4007 JMP ASM01A /2 INSTRUCTION PAGE ESCAPE
4008 /4 INSTRUCTION PAGE ESCAPE
4010 JMS I OUTBIN /JMP NEXT TO LAST LOC ON THIS PAGE
4013 ISZ ILC /FOR BENEFIT OF "WRITE"
4015 JMS A2SUBR /OUTPUT JMP AND LITERAL TABLE
4016 JMS I OUTSKP /OUTPUT 2 SKIP INSTRUCTIONS
4020 ASM01A, JMS A2SUBR /OUTPUT JMP AND LITERAL TABLE
4022 JMS I OUTBIN /PLACE A NOP IN THE LAST LOCATION
4025 ASM01B, JMS I RELNP /RESTORE NEXT LINE FOR LISTING
4026 TAD ACTR /REMAINS 1 DURING PASS 2
4028 JMP I A2 /EXIT IF LISTING OR 2ND ASSEMBLY
4029 TAD PUPGE /SAVE ESCAPE ON PUSH DOWN LIST
4033 ISZ PEPTR /MOVE STACK PTR
4036 A2NONA, JMS I OUAPLT
4040 /SUBROUTINE TO ELIMINATE SOME COMMON CODE
4045 DCA A2TEMP /SET ILC IN CASE NO LITERALS
4050 JMS I OUAPLT /OUTPUT LITERAL TABLE
4052 DCA ILC /SET ILC TO 176 OR 177 IN PAGE
4054 JMP I A2SUBR /RETURN
4071 /INITIALIZE A PAGE ASSEMBLY
4074 TAD PAG /MOVE PAGE TO ILC
4076 DCA LITSIZ /ZERO LITERAL TABLE SIZE
4079 JMP I A1 /EXIT IF PASS 1
4081 TAD I PEPTR /GET NEXT PAGE ESC FROM STACK
4089 PDUMMY, JMS I GETSYM /GET NEXT INPUT ITEM
4095 TAD USE /MST USE WORD
4096 AND K3403 /SAVE SYMBOL LENGTH, TYPE BITS, AND DEF BIT
4097 TAD K20 /ADD CORRECT MST BIT FOR DUMMY
4098 DCA USE /FOR CORRECT CODE WORD
4099 JMP I NULLP /EXIT TO GET NEXT LINE
4104 /COMPUTE CURRENT PAGE SIZE
4106 /EXIT WITH PAGE SIZE IN AC
4109 TAD APMSW /OMIT PGEESC IF NON-AUTO PAGING
4111 TAD PGEESC /+SIZE OF ESCAPE REQUIRED
4112 TAD PTSZE /SIZE OF PAGE TABLE
4113 TAD LTSZE /+SIZE OF LITERAL TABLE
4114 TAD OPSCTR /+OFF PAGE SYMBOL COUNTER
4115 TAD OBACTR /+OFF BANK ADDITION COUNTER
4116 DCA PSTDEF /STORE IN TEM.
4117 TAD PSTDEF /GET IT BACK
4118 TAD PAG /AND CHECK FOR 7600 PAGE OVERFLOW
4122 SERROR /OVERFLOW-ERROR S
4123 TAD PSTDEF /O.K. GET PAGE SIZE, WHICH
4124 JMP I CPGES /IS DESIRED RESULT
4127 /ROUTINE TO SET DEFINED BIT ON PST
4128 /USED BY CPLFS & ANUMCK
4131 TAD I PSTCPR /PROTECT CODES
4133 TAD K4000 /SET DEFINED BIT ON PST
4138 / CONSTANT FOR AN ADDRESS FIELD SYMBOL
4140 ASM05, TAD I PTSPR /ACTUAL BINARY CONSTANT
4141 AND K7600 /IS IT ON PAGE ZERO
4144 TAD I PTSPR /ADD IN PAGE ZERO ADDRESS
4146 TAD I PTCPR /YES ... IS IT INDIRECT
4149 JMP ASM00 /EXIT TO COMMON AREA
4155 / OFF BANK DIRECT (COMMON DIRECT)
4158 TAD VAL /ACTUAL ADDRESS IN BANK ZERO
4159 DCA S1 /TO 2 WORD LITERAL TABLE SEARCH LOCATION
4161 DCA S0 /ABSOLUTE SEARCH
4162 JMS I SERALP /GET A PAGE ADDRESS
4163 TAD K400 /ADD INDIRECT BIT
4165 TAD BANK /BANK INDICATOR
4185 /ASM02 IS THE HEART OF ASSEMBLY
4186 /IT IS CALLED ONCE FOR EACH ITEM ON
4188 /IT CONSISTS OF MANY PARTS, ONE FOR
4189 /EACH BASIC TYPE OF INSTR. TO BE
4190 /ASSEMBLED PLUS VARIOUS COMMON EXITS
4193 DCA LFS /ZERO LFS INDICATOR
4196 JMS I GETBAP /RESTORE BANK & LSTSKP IF PASS2
4197 JMS I LFSCHK /PROCESS LFS IF ANY
4198 JMS I ANCHK /PROCESS BSS 0 IF ANY
4204 AND K40 /IS IT A SKIP INSTRUCTION
4205 DCA CURSKP /YES ... SET SKIP INDICATOR
4207 AND K10 /IS IT A PSEUDO OP (PAR)
4209 JMP I ASM03I /YES ... EXIT
4211 AND K4 /IS IT A MEMORY REFERANCE INSTRUCTION
4214 TAD I PTCPR /PT CODE WORD
4215 AND K20 /IS AFS A CONSTANT
4218 TAD I PTCPR /PT CODE WORD
4219 AND K2 /IS AFS A LITERAL
4222 TAD I PTSPR /AFS ID WORD FOR SYMBOL TABLE
4223 DCA AFS /TO DIRECTLY ADDRESSABLE LOCATION
4224 JMS I OBSYM /GET ITS POINTERS TO MST
4226 TAD I PTCPR /PT CODE WORD
4227 AND K400 /IS OP INDIRECT
4230 JMS I UZTST /TEST FOR OFF BANK OR ABSOLUTE
4241 / END OF LINE NECESSITIES
4250 ASM01, JMS I CMNASM /SET BANK=1 AFTER A JMS
4251 JMS ASMCMN /SET BANK AND LSTSKP
4252 DCA SKPSAV /SAVE CURSKP IN SKPSAV
4253 TAD BANK /SAVE FOR PROTECTION DURING LISTING
4255 ISZ ILC /INCREMENT ILC
4256 ASM02R, JMP I ASM02 /USED AS OFF-PAGE RETURN
4257 SERROR /ILC OVERFLOWED 7777 - PROGRAM TOO BIG
4265 /SUBROUTINE TO UPDATE BANK,LSTSKP,LSTBNK
4268 TAD LSTSKP /IS LAST INSTRUCTION A SKIP INSTRUCTION
4271 TAD LSTBNK /YES ... LAST BANK
4273 TAD BANK /+CURRENT BANK
4274 SNA CLA /ARE THEY THE SAME
4276 CLA CMA /NO ... SET BANK UNKNOWN
4278 TAD CURSKP /PLACE CUR SKIP INDICATOR
4279 DCA LSTSKP /AS LAST SKIP INDICATOR
4280 TAD BANK /PLACE CURRENT BANK
4281 DCA LSTBNK /IN LAST BANK INDICATOR
4287 / INDIRECT DUMMY ARGUMENT
4292 CLA CMA /SET BANK UNKNOWN
4293 JMP ASME3 /EXIT FOR SKIP CHECK
4295 / OFF BANK INDIRECT (INDIRECT COMMON)
4303 ASME3, DCA BANK /SET C(AC) IN BANK
4304 TAD LSTSKP /WAS LAST A SKIP?
4307 //FOLLOWING 6 LINES HAVE BEEN
4308 //MOVED TO 6600 TO MAKE ROOM FOR V03
4311 // JMS I OUTSKP /YES, OUTPUT SKP
4312 // TAD ILC /GET PG.LOC.PTR.
4315 // TAD K5200A /OUTPUT JMP .+4
4317 REEASM, JMS I WRITEP
4321 ISZ ILC /INCREMENT PG.LOC.PTR.
4323 JMS I OUTBIN /OUTPUT JMS TO
4324 TEMP6 /OBISUB,OPISUB, OR DUMSUB
4327 JMS I ASM10B /PPAR3S
4333 ASM02A, TAD USE /AFS MST USE WORD
4334 AND K20 /IS AFS A DUMMY ARGUMENT
4337 JMS I UZETST /TEST FOR OFF-BANK OR ABSOLUTE
4345 SPA CLA /BANK NEED NOT BE CURRENT FOR A JMP OR JMS
4346 JMP ASME6+2 /WHICH IS NOT EXPLICITLY INDIRECT
4383 / SYMBOL TABLE TYPEOUT FLAG TYPEOUT ROUTINE
4385 /CALL SEQ.: TAD USE /GET TYPE BITS
4393 AND K3 /MASK OUT TYPE BITS
4395 JMP STFT3 /ABSOLUTE SYM.
4396 TAD M3 /CK FOR NEW OPDEF
4407 STFT0, JMS I CTYPE /TYPE FLAG
4408 STFT1, CLA /WE MUST HAVE A CLEAR AC
4413 STFT2, TAD K1720 /TYPE "OP"
4423 STFT4, TAD K0317 /"CO"
4437 STFT5, TAD K0530 /"EX"
4443 / LOCAL DIRECT REFERANCE
4445 ASM07, JMS I SPSTAB /IS AFS ON PST
4446 JMP ASM07A /NO ... ROUTINE PLACES IT THERE
4447 TAD I PSTCPR /PST CODE WORD
4448 SMA CLA /IS SYMBOL ON PAGE
4451 TAD VAL /AFS MST VALUE
4452 AND K177 /SAVE PAGE ADDRESS
4453 TAD K200 /ADD PAGE BIT
4455 ASM07A, TAD I PTSPR /ACTUAL SYMBOL
4456 DCA S1 /TO 2 WORD LITERAL TABLE SEARCH LOCATION
4459 TAD K2 /RELOCATABLE SEARCH
4462 TAD VAL /DIRECT NON-PAGE 0 ABSOLUTE
4466 / NON PAGE ZERO CONSTANT ADDRESS
4468 ASM05C, TAD I PTSPR /ACTUAL BINARY CONSTANT
4469 DCA S1 /TO 2 WORD LITERAL TABLE SEARCH LOCATION
4471 DCA S0 /ABSOLUTE SEARCH
4472 JMS I SERALT /GET A PAGE ADDRESS
4473 TAD K400 /ADD INDIRECT BIT
4476 ASME5A /EXIT FOR SKIP CHECK IF OP IS NOT JMP OR JMS
4478 / DIRECT ABSOLUTE OR EXTERNAL
4481 TAD VAL /ABSOLUTE SYMBOL VALUE
4482 AND K7600 /IS SYMBOL ON PAGE ZERO
4486 TAD VAL /ADD IN PAGE ZERO ADDRESS
4490 / LITERAL FOR AN ADDRESS FIELD SYMBOL
4492 ASM06, TAD I PTSPR /ACTUAL LITERAL
4493 DCA S1 /TO 2 WORD LITERAL TABLE SEARCH LOCATION
4495 DCA S0 /ABSOLUTE SEARCH
4496 JMS I SERALT /GET A PAGE ADDRESS
4497 JMP I AS00I4 /EXIT FOR SKIP CHECK
4510 ASM12, TAD VAL /AFS MST USE WORD
4511 AND K7600 /IS IT ON PAGE ZERO
4515 / INDIRECT PAGE ZERO ABSOLUTE SYMBOL
4518 TAD VAL /SAVE PAGE ZERO ADDRESS
4519 ASM12E, TAD K400 /ADD INDIRECT BIT
4523 / INDIRECT NON PAGE ZERO ABSOLUTE SYMBOL
4529 JMP I AS00I3 /EXIT FOR SKIP CHECK
4533 / LOCAL INDIRECT REFERANCE
4535 ASM13, JMS I SPSTAB /IS AFS ON PST
4536 JMP ASM14 /NO ... MUST BE OFF PAGE
4537 TAD I PSTCPR /YES ... PST CODE WORD
4538 SMA CLA /IS AFS ON PAGE
4541 TAD VAL /AFS VALUE FROM MST
4542 AND K177 /SAVE PAGE DISPLACEMENT
4543 TAD K600 /ADD PAGE AND INDIRECT BIT
4545 JMP I AS00II /GO OUTPUT INSTRUCTION
4552 CLA IAC /SET BANK TO CURRENT
4553 JMP I AS00I3 /EXIT FOR SKIP CHECK
4562 /"IF" - CONDITIONAL ASSEMBLY PSUEDO-OP
4565 JMP PIFERR /NOTHING THERE
4569 TAD CHR /CK FOR COMMA
4573 ISZ X0 /PREVENT FLAGGING COMMA
4574 JMS I GETSYM /YES, SET CTR TO SKIP N LINES
4577 SKP /I WANT A NUMBER
4579 TAD USE /IS SYMBOL DEFINED?
4582 DCA S0 /YES, CONTINUE NORMAL ASSMBLY
4584 TAD S0 /GET THE NUM.
4598 /LAP & EAP PSUEDO-OPS
4600 *6372 /MUST BE AT 6372 OR AT PAGE BOUND. +172 FOR K5376 TO WORK AS SKIP
4602 IAC /LEAVE AUTO-PAGING MODE
4603 K5376, 5376 /THIS REPLACES A SKIP.*******DO NOT MOVE********
4605 DCA APMSW /ENTER AUTO-PAGING MODE
4629 / PART OF MAIN PROGRAM
4631 /FOLLOWING CODE CLEANS UP PST CODES BEFORE RECOUNTING
4633 DCA IOINIT /SET COUNTER
4636 DCA PSTCPR /CODE POINTER
4638 AND K4003K /KILL OBAC DUE TO THIS SYM.
4640 ISZ PSTCPR /MOVE PTR
4649 /COMMON EXIT FOR DATA-GENERATING PSUEDO-OPS
4655 CMA /DECREMENT PTSZE
4658 JMS I RECTI /YES RECOUNT THE PAGE
4659 ISZ PTSZE /RESTORE PTSZE
4660 JMS I ISZPTX /RESTORE PT PTRS
4661 JMP I DCIL1 /RETURN FOR NEXT LINE
4666 /ROUTINE T0 INITIALIZE I/O DEVICES
4710 IAC /1 = PUNCH, 0 = TYPE
4757 //PART OF MAIN PROGRAM MOVED FOR V03
4759 /ROUTINE TO RESTORE BANK AND LSTSKP FOR PASS2
4760 /WILL NOT FIT INTO ASM02 WHERE IT BELONGS
4775 DCA TEM10 /CLR TIMER
4781 HSR2, DCA ASR /WASTE SOME TIME
4783 JMP HSR1 /KEEP TRYING
4784 REXIT, TAD X3 /CK FOR EMPTY BUFFER
4787 JMP .+4 /NO, WE HAVE A PARTIAL BUFFER
4789 JMP I .+1 /YES TAPE HAS ENDED WITH NO END STATMT
4791 DCA I X3 /FILL END OF BUFFER WITH 0'S
4796 JMP I RG3P /NOW RET. FOR PROCESSING
4820 / ENTRY PSEUDO OPERATION
4822 PENTRY, JMS I GETSYM /GET NEXT INPUT ITEM
4828 JMS I SREST /PLACE SYMBOL ON EXTERNAL SYMBOL TABLE
4830 TAD USE /AFS MST USE WORD
4831 AND K403 /SAVE SYMBOL LENGTH (& DEF. BIT FOR PASS 2)
4832 TAD K2220 /ADD IN PROPER BITS
4833 DCA USE /FOR NEW MST USE WORD
4834 JMP I NULLP /EXIT FOR NEXT LINE
4840 /INCREMENT PAGE TABLE POINTERS
4843 ISZ PTCPR /INCREMENT PAGE TABLE CODE POINTER BY 2
4845 ISZ PTSPR /INCREMENT PAGE TABLE SYMBOL POINTER BY 2
4847 ISZ PTOPR /INCREMENT PT OP CODE POINTER
4850 /CK CONSTANT FOR BLOCK PSEUDO-OP
4852 PBSS4, TAD APMSW /AUTOMATIC PAGING?
4854 TAD K2 /YES, 176 IS MAXIMUM
4855 TAD M200 /NO, 200 IS MAX
4856 TAD S0 /CHECK CONSTANT
4859 TAD S0 /IS CONSTANT 0?
4861 JMP I PBSS2J /YES, EQUIVALENCE TAG
4862 JMP I PBSS5I /NO, CREATE BLOCK OF THIS SIZE
4867 /PATCH TO DELETE DEFINED BIT IN PST FOR A TAG
4868 /EQUIVALENCED TO A LINE THAT OVERFLOWED THE PAGE
4870 EQVFIX, TAD EQVBIT /WAS THERE SUCH A TAG?
4873 TAD I EQVBIT /YES, GET PST CODE FOR THIS TAG
4874 TAD K4000 /CANCEL DEFINED BIT
4876 TAD K200 /SET EQUIVALENCE BIT FOR NEXT LINE
4877 DCA EQVBIT /WHEN NEXT PAGE GETS GOING
4878 JMP I L55CP /RETURN TO ASSEMBLE THE PAGE WE HAVE
4883 /CK FOR TYPE OF SYMBOL
4884 /CALL SEQ: JMS WHATYP
4885 / RET. IF USER SYMBOL
4898 /EXECUTE ISZ GTSYM (MOVE RETURN POINTER) ONLY IF IFCTR .GE. 0
4899 /OTHERWISE MOVE LINE PTR TO NEXT SLASH, SEMI-COLON OR CAR.RET.
4900 /& ISZ IFCTR & TREAT AS A NULL LINE.
4903 TAD I IFCT /IS CONDITIONAL NON-ASM IN EFFECT?
4905 JMP .+3 /YES: DO NOT ASMBL LINE
4906 ISZ I GETSYM /NO, MOVE RETRN PTR & CONT. AS USUAL
4908 ISZ I IFCT /COUNT IGNORED LINE
4910 TAD CHR /MOVE LINE PTR TO END OF LINE
4912 JMP CKIF3 /FOUND A CR
4918 JMP CKIF3 /SEMI-COLON
4919 JMS I GETCHR /TRY NEXT
4928 /PAGE SYMBOL TABLE (200 WORDS)
4929 /DOUBLE WORD ENTRIES
4930 /REBUILT FOR EACH CORE PAGE OF CODE
4931 /EVERY SYMBOL DEFINED OR REFERENCED ON
4932 /GIVEN PAGE IS ENTERED
4933 /TYPICAL ENTRY*: WD1=SYMBOL ID
4935 /SYMBOL ID=ADDRESS OF SYMBOL ENTRY IN MAIN SYM. TAB
4936 /CODE: BIT0=1 IF SYM. DEF. ON CUR. PAGE
4937 / BIT11=1 IF SYM REFERENCED NORMALLY BY A MR1 ON THE PG.
4938 / BIT10=1 IF SYM. REF'D. WITH A #
4939 / BITS 1-9 USED FOR COUNTING AMOUNT OF OBACTR
4940 / WHICH IS DUE TO THIS SYMBOL
4941 /SYMBOLS ARE ENTERED ON PST IN ORDER OF APPEARENCE
4943 /NO MORE THAN 64 (DEC) SYMBOLS MAY BE REF'D.
4945 /NOTE: THE SIZE OF THIS TABLE SHOULD NOT BE
4946 /INCREASED UNLESS LFS TABLE IS ALSO INCREASED.
4951 /PAGE TABLE (402 WORDS)
4952 /DOUBLE WORD ENTRIES
4953 /ONE ENTRY FOR EACH INSTRUCTION TO BE ASSEMBLED
4954 /ROOM FOR 1 EXTRA ENTRY TO COVER PAGE OVERFLOW
4955 /A NEW TABLE FOR EACH PAGE OF CODE
4956 /TYPICAL ENTRY: WD1=CODE BITS
4958 /CODE: BIT1=1 IF # REF
4959 / BIT2=1 IF CDF TO CUR BANK
4960 / BIT3=1 IF INDIRECT
4961 / BIT4=1 IF BLOCK 0 (FOR EQUIVALENCED TAGS)
4962 / BIT5=1 IF SPECIAL CALL CONST
4963 / BIT6=1 IF SKIP INST.
4964 / BIT7=1 IF AFS IS CONST
4965 / BIT8=1 IF PARAMETER
4966 / BIT9=1 IF OPR OR IOT INST.
4967 / BIT10=1 IF AFS IS LITERAL
4968 / BIT11=1 IF LFS OCCURS
4970 /THE SYMBOL WORD=0 IF CODE BIT9=1
4971 / =THE ACTUAL CONST OR LITERAL IF BITS2,5,7 OR 10=1
4972 / =THE SYMBOL ID (MST ENTRY ADDR.) FOR AN ADDR. PARAMETER
4973 / OR FOR THE AFS OF AN MRI
4977 /TYPE VERSION NUMBER
4978 /(THIS IS ONCE ONLY CODE)
4979 /(OVERWRITTEN BY P.S.T.)
4998 VERSN, 2004 /PDP-8 SABR DEC-08-A2C2-V#
5009 5561 /- VERSION # (1ST DIGIT)
5010 7001 /2ND DIGIT AND PATCH LEVEL
5014 /SABR BANK 1 SECTION
5023 EQUTB, 0 /EQUIVALENCE TABLE
5025 /TABLE IS REINITIALIZED BEFORE EACH PAGE BEGINS
5026 /COLLECTION, IF NO EQUIV. IS LEFT FROM PREVIOUS PAGE
5027 /MULTIPLE WORD ENTRIES
5028 /ONE ENTRY IS MADE FOR
5029 /EACH LOC. TAG WHICH HAS
5031 /1ST WORD OF EACH ENTRY
5032 /CONTAINS NO. OF OTHER WORDS
5034 /OTHER WORDS ARE SYMBOL ID'S
5035 /(MST ADDRESSES) OF SYMBOLS
5036 /EQUIVALENT TO THE PARTICULAR
5042 /BSEEST, 0 /EXTERNAL SYMBOL TABLE
5044 /SINGLE WORD ENTRIES
5045 /CONSISTING OF THE SYMBOL ID (MST ADDRESS)
5046 /EACH EXT. SYM. IS ENTRED IN
5047 /THE TABLE WHEN IT FIRST
5048 /OCCURS IN THE SOURCE AND
5049 /ASSIGNED A LOCAL EXT. NUMBER
5050 /ACCORDING TO ITS PLACE IN THE
5056 /PTOPTB, 0 /PAGE OP CODE TABLE
5058 /SINGLE WORD ENTRIES
5059 /ONE FOR EACH ENTRY IN PAGE TABLE
5060 /ENTRY=ACTUAL OP CODE FOR
5061 /ALL MRI, OPR OR IOT'S
5062 /OR 0 FOR ALL PARAMETERS
5063 /NEW TABLE FOR EACH PAGE OF CODE
5064 /NOTE: THIS TABLE MAY OVERFLOW BY 1 WORD DURING COLLECTION
5065 /OVERFLOW CAUSED BY PUTTING INFO ON TABLE BEFORE CK FOR OVERFLOW
5066 /NO HARM IF ASSEM. PHASE LIT. TAB FOLLOWS
5068 CDF CIF 10 /CODE FOR START AT 200
5074 /LITBSE, 0 /ASSEMBLY PHASE LITERAL TABLE
5076 /DOUBLE WORD ENTRIES
5077 /MUST BE SEPARATE FROM COLL.
5078 /PHASE LIT. TAB. BECAUSE BOTH
5079 /GOING AT ONCE IN PASS 2.
5080 /THIS TABLE CONTAINS NOT
5081 /ONLY LITERALS BUT ALSO
5083 /1ST WORD OF ENTRY = 1 OR 2 OR 6
5085 /2ND WORD CONTAINS ACTUAL VALUE
5086 /2 MEANS OFF PAGE SYMBOL PTR
5087 /& 2ND WORD CONTAINS SYMBOL ID.
5088 /6 MEANS OFF PAGE SYM. PTR
5089 /WHERE SYMBOL REFERENCED BY A #
5091 /TABLE BUILT ANEW FOR EACH
5097 /LFSBSE, 0 /LOC FIELD SYMBOL TABLE
5099 /SINGLE WORD ENTRIES
5100 /EACH=SYMBOL ID (MST ADDRESS)
5102 /LFS'S ARE ENTERED IN ORDER
5103 /OF THEIR APPEARENCE IN SOURCE
5104 /TABLE REBUILT FOR EACH PAGE OF CODE
5105 /NOTE: THIS TABLE MUST BE AT LEAST AS LONG
5106 /AS THE PST TO PREVENT LFS OVERFLOW
5112 PEBSE, 0 /PAGE ESCAPE PUSH DOWN LIST
5114 /SINGLE WORD ENTRIES
5115 /EACH ENTRY IS 0,2, OR 4
5116 /BEING THE VALUE OF THE
5117 /PAGE ESCAPE (0,2,OR 4 WORDS)
5118 /OF EACH PAGE ASSEMBLED
5119 /THESE NOS. ARE SAVED DURING
5120 /PASS 1 & USED DURING
5125 /SORT LIST FOR INITIAL CHAR. OF LITERAL
5130 -1 /SORT LIST MUST BE FOLLOWED BY A NEGATIVE
5141 /SORT LIST FOR BEGINNING OF INPUT ITEM
5145 SL6, 273 /SEMI-COLON
5150 -1 /SORT LIST MUST BE FOLLOWED BY A NEGATIVE
5151 /BRANCH LIST FOR BEGINNING OF INPUT ITEM
5154 ITM7 /ALPHA CONSTANT
5160 /BRANCH LIST FOR INITIAL CHAR. OF LITERL
5161 BL3, ITM7 /GET ASCII VALUE FOR LITERAL
5163 ITM11 /SET MODE TO DECIMAL
5164 ITM12 /SET MODE TO OCTAL
5173 /LTBSE, 0 /COLLECTION PHASE LITERAL TABLE
5175 /SINGLE WORD ENTRIES
5176 /CONTAINING ACTUAL VALUES
5177 /TABLE CONTAINS NOT ONLY
5179 /POINTERS TO CONSTANT
5180 /AND ABSOLUTE ADDRESSES.
5181 /TABLE BUILT ANEW FOR
5186 /ALL DATA CHARACTERS READ DIRECTLY INTO THIS BUFFER
5188 /THE ACTUAL SIZE OF THE BUFFER IS ARBITRARY.
5196 /LINE BUFFER (73 WORDS)
5197 /CONTAINS ASCII CHARACTERS, 1 PER WORD
5198 /NULLS & RUBOUTS DONT MAKE IT
5199 /END OF LINE MARKED BY A 0000
5200 /CR,LF,FF DON'T GO INTO THE BUFFER
5202 /BUFFER IS LAID OUT AS FOLLOWS:
5205 LINBUF, 0 /110(OCTAL) WORDS FOR LINE CHARACTERS
5208 /LINEND, 0 /1 EXTRA WORD TO PREVENT OVERFLOW
5209 /(GETS THE 0 WHEN LINE IS TOO LONG)
5215 211 /SORT LIST MUST BE FOLLOWED BY A NEGATIVE
5233 /ENTRIES ARE COMPOSED OF THE FOLLOWING:
5234 / FIRST A 1 WORD HEADER CODE
5235 / THEN THE SYMBOL ITSELF IN PACKED 6BIT ASCII (1-3 WORDS)
5236 / FINALLY THE 1 WORD BINARY VALUE OF THE SYMBOL
5238 /THE HEADER CODE IS LAID OUT AS FOLLOWS:
5239 /(A) FOR OP CODE SYMBOLS:
5240 / BIT0=1 AFTER THE SYMBOL HAS BEEN PRINTED BY PRSYM
5241 / BITS1&2=3 (THESE ARE THE SYMBOL TYPE BITS)
5242 / BIT3=1 FOR MEMORY REFERENCE INSTRUCTIONS
5243 / BITS4&5=THE MICRO-GROUP FOR OPR INSTRUCTIONS (0 FOR MRI AND IOT INSTS.)
5244 / (NOTE: MICRO-GROUP IS SET TO 0 FOR CLA)
5245 / BIT6=1 IF THE SYMBOL IS A PSUEDO-OP
5246 / BIT7=1 IF THE INST. IS A SKIP TYPE INST.
5249 / BITS10&11=THE NUMBER OF PACKED ASCII SYMBOL WORDS IN THE ENTRY
5251 /(B) FOR OTHER SYMBOL TYPES:
5253 / BITS1&2=0 FOR ABSOLUTE AND COMMON SYMBOLS
5254 / =1 FOR RELOCATABLE SYMBOLS
5255 / =2 FOR EXTERNAL SYMBOLS
5256 / BIT3=1 AFTER THE SYMBOL HAS BEEN DEFINED
5257 / BIT4=1 FOR ENTRY SYMBOLS
5258 / BIT5=1 IF THE SYMBOL IS EVER REFERENCED BY A #
5259 / BIT6=1 IF THE SYMBOL IS IN COMMON
5260 / BIT7=1 IF THE SYMBOL IS A DUMMY SYMBOL
5358 3412 /INC (NON-SKIP ISZ)
5508 3232 /SPC=SPA+CLA (USED BY COMPILER)
5555 /THE OCCURRENCE TABLE EXTENDS DOWNWARD FROM HERE
5556 /TOWARD THE MAIN SYMBOL TABLE
5557 /& SHARING THE SAME SPACE WITH IT.
5558 /THIS TABLE IS VARIABLE, BEING COLLAPSED
5559 /AS MUCH AS POSIBLE DURING USE. THE ONLY
5560 /THING LEFT ON IT AT THE END ARE UNDEFINED
5562 /THE OCC. TAB. CONTAINS AN ENTRY FOR EVERY
5563 /REF. TO AN AS YET UNDF. SYMBOL. EACH
5564 /TIME A SYMBOL IS DEFINED THE TABLE IS SEARCHED
5565 /TO SEE IF FORWARD REFERENCES TO IT EXIST.
5566 /IF SO THEY ARE OUTPUT & THE TABLE
5568 /ENTRIES CONSIST OF 2 OR 3 WORDS
5569 /STRUCTURED AS BELOW:
5570 /HIGH WORD: LOCATION OF REFERENCE
5571 /LOW WORD: SYMBOL I.D.
5572 /OPTIONAL WORD: # FLAG
5573 /THE LOC. WORD CONTAINS THE PROG. ADDR. WHERE
5574 /THE VALUE OF THE SYM. MUST BE ASSEMBLED
5575 /THE # FLAG=1 IF IT EXISTS. IT WILL
5576 /EXIST ONLY FOR THOSE ENTRIES WHERE THE
5577 /SYM. WAS REF'D. BY A #.
5578 /THE TABLE IS ALWAYS SEARCHED IN REVERSE
5579 /FROM LOW CORE UPWARD
5580 /THE O.T. PTR (OTP) ALWAYS PTS. TO THE NEXT FREE
5581 /LOCATION BELOW THE TABLE
5582 /THE TABLE HAS NO IMPORTANCE DURING PASS 2.