software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape2 / SABR.CO
diff --git a/sw/os8/v3d/sources/system/dectapes/dectape2/SABR.CO b/sw/os8/v3d/sources/system/dectapes/dectape2/SABR.CO
new file mode 100644 (file)
index 0000000..4649a85
--- /dev/null
@@ -0,0 +1,422 @@
+/SABR ASSEMBLER, V17
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT  (C)  1974 BY DIGITAL EQUIPMENT CORPORATION
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
+/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
+/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
+/FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.
+/
+/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
+/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
+/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
+/
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
+/DIGITAL.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f/NOTE: WHENEVER ABOVE VERSION NUMBER IS CHANGED
+/BE SURE TO ALSO CHANGE VERSION NUMBER FOR TYPEOUT.
+/THIS IS AT VERSN+13 (ABOUT P. 83)
+/
+/THERE ARE TWO BASIC PHASES OF OPERATION WITHIN
+/SABR:(A) COLLECTION AND (B) ASSEMBLY. IN PASS 1
+/SABR COLLECTS A FULL PAGE OF DATA AND THEN
+/ASSEMBLES THE FULL PAGE. IN PASS2 COLLECTION
+/AND ASSEMBLY ARE CARRIED OUT ON A LINE-
+/BY-LINE BASIS RATHER THAN PAGE-BY-
+/PAGE. FOLLOWING IS A DESCRIPTIVE FLOW CHART OF
+/THE PRINCIPAL METHODS OF OPERATION USED IN
+/THE PROGRAM DURING PASS1.
+/(1) BEGINNING AT START THERE ARE TWO ROUTINES NECESSARY
+/TO INTIALIZE THE ENTIRE PROGRAM. IOINIT CARRIES
+/OUT THE DIALOG WITH THE USER TO DETERMINE WHICH
+/I/O DEVICES WILL BE USED. INITA INTIALIZES ALL
+/THE FLAGS AND TABLES WHICH ARE USED CONTINOUSLY
+/THROUGHOUT THE PROGRAM.
+/(2) THE DRIVER FOR THE FULL PAGE-BY-PAGE ASSEMBLER
+/IS CONTAINED IN THE LOOP THAT RUNS FROM RSTRT
+/TO RSTRT6-1. THIS LOOP OPERATES AS FOLLOWS.
+/FIRST IT CALLS INILPT WHICH INITIALIZES ALL
+/THOSE FLAGS AND TABLES WHICH MUST BE
+/REFRESHED OR REBUILT FOR EACH PAGE OF CODE.
+/THEN IT CALLS THE MAIN LINE-BY-LINE
+/COLLECTION LOOP (WHICH IS DESCRIBED IN ITEM 3).
+/WHEN A FULL PAGE OF CODE HAS BEEN COLLECTED
+/THE DRIVER THEN CALLS L55 TO ASSEMBLE THE
+/PAGE (SEE ITEM 8).
+/(3) THE COLLECTION LOOP RUNS FROM RSTRT1 THROUGH
+/THE CODE AT RSTRT6. THIS LOOP FIRST CALLS
+/INCPT WHICH PREPARES FLAGS AND INCREMENTS
+/TABLE POINTERS FOR EACH LINE OF CODE. IT
+/THEN CALLS THE LINE DECODER DCIL (SEE
+/ITEM 4) FOLLOWED BY SETCT, THE ROUTINE WHICH
+/INCREMENTS THE PAGE COUNTERS AS REQUIRED
+/FOR THE GIVEN LINE (SEE ITEM 6). THEN
+/THE COLLECTIONS LOOP PROCEEDS TO INTERPRET
+/THE DATA LEFT BY DCIL AND STORE IT, PROPERLY
+/CODED, ON THE PAGE TABLE. IF THERE WAS
+/A TAG ("LFS" FOR "LOCATION FIELD SYMBOL") IT
+/IS NECESSARY TO CALL RECT FOR A PAGE RECOUNT.
+/(SEE ITEM 7). THEN THE SIZE OF THE PAGE SO
+/FAR COLLECTED IS TALLYED UP BY CPGES. IF
+/IT IS STILL .LE. 200. EVERYTHING IS FINE AND WE
+/RUN THROUGH THE LOOP AGAIN. IF NOT WE
+/FIRST SAVE (USING PUSHIN)
+/ALL THE KEY INFORMATION ABOUT THE LINE WHICH
+/CAUSED THE OVERFLOW AND THEN EXIT FROM THE
+/COLLECTION LOOP TO ASSEMBLE THE PAGE.
+/(4) CERTAIN NOTES ABOUT DCIL MAY BE HELPFUL. THIS
+/ROUTINE CONTROLS INPUT OF THE SOURCE. INDEV
+/(SET BY IOINIT) POINTS TO THE PROPER INPUT
+/ROUTINE, HSR OR ASR. THESE ROUTINES
+/READ ONE CHARACTER AT A
+/TIME FROM THE INPUT DEVICE. THE ROUTINE CALLED
+/R DRAWS CHARACTERS ONE AT A TIME FROM THE
+/INPUT BUFFER (DATA). WHEN THIS BUFFER IS
+/EMPTY R REFILLS IT USING @INDEV. FETCH
+/USES R TO EXTRACT ONE CHARACTER AT A TIME FROM
+/THE INPUT BUFFER AND DOES SOME PRELIMINARY
+/SCREENING. RLN USES FETCH TO READ A
+/FULL LINE OF CODE INTO THE LINE BUFFER.
+\f/L65 READS ONE CHARACTER AT A TIME FROM
+/THE LINE BUFFER. GTSYM READS THE LINE
+/ITEM-BY-ITEM. IF THE ITEM IS A SYMBOL, GTSYM
+/CALLS SRSYM TO LOOK UP THE ITEM IN THE
+/MAIN SYMBOL TABLE OR ENTER IT IF IT IS NOT
+/ALREADY THERE(SEE ITEM 5).
+/**IMPORTANT**
+/WHEN A SYMBOL HAS BEEN PLACED ON THE SYMBOL
+/TABLE THE ADDRESS OF THE FIRST WORD OF THE
+/ENTRY IS RETURNED AT "SYMBOL." THIS ADDRESS
+/IS UNIQUE FOR EACH SYMBOL AND IN THE
+/RANGE 2000-7575. THIS NUMBER IS USED
+/THROUGHOUT THE PROGRAM AS THE IDENTIFIER FOR
+/THIS SYMBOL. ** DCIL CONSIDERS EACH ITEM
+/OF THE LINE AND ACTS APPROPRIATELY. FOR
+/STANDARD INSTRUCTIONS A STRING OF KEY DATA ABOUT
+/THE LINE IS LEFT. IF THE LINE IS A PSUEDO-OP
+/DCIL WILL IMMEDIATELY CALL THE APPROPRIATE PSUEDO-OP
+/HANDLER TO TAKE ALL NECESSARY ACTION. MOST
+/OF THE PSUEDO-OP HANDLERS RETURN TO THE
+/BEGINNING OF DCIL WHERE THE NEXT LINE CAN BE
+/PROCESSED AS IF NOTHING UNUSUAL HAPPENED. THE
+/EXCEPTIONS TO THIS ARE THOSE PSUEDO-OPS WHICH
+/CAUSE A PREMATURE PAGE ASSEMBLY.
+/THE ROUTINE SKIPL IS ACTUALLY A SMALL PART OF
+/DCIL. IT HAS TWO PURPOSES. ONE, IT WATCHES
+/FOR LINES WHICH SHOULD BE IGNORED BECAUSE THE
+/FORTR PSUEDO-OP IS IN EFFECT. SECONDLY IT
+/MUST WATCH FOR SEMI-COLONS SO THAT
+/IF ONE IS ENCOUNTERED(OUTSIDE A COMMENT)
+/THE REMAINDER OF THE LINE CAN BE SAVED FOR
+/PROCESSING AS THE "NEXT" LINE.
+/(5)ONLY TWO MAIN ROUTINES SRSYM AND
+/OBSYM, TOGETHER WITH THEIR SUBSIDIARYS RUSVL AND SUSVL
+/MAY DIRECTLY CONTACT THE MAIN SYMBOL TABLE.
+/THESE ROUTINES COMMUNICATE WITH THE REST OF
+/THE PROGRAM THROUGH FOUR IMPORTANT
+/CELLS IN PAGE 0:
+/USE CONTAINS THE CODE WORD FOR THE SYMBOL ENTRY.
+/VAL CONTAINS THE VALUE OF THE SYMBOL.
+/SYMBOL CONTAINS THE ADDRESS OF THE FIRST WORD OF THE
+/ENTRY(NAMELY THE CODE WORD).
+/VALPTR CONTAINS THE ADDRESS OF THE VALUE WORD
+/OF THE ENTRY.
+/SRSYM, AFTER LOCATING A GIVEN SYMBOL IN THE TABLE
+/(OR ENTERING IT IF NECESSARY)
+/CALLS SUSVL TO FILL THE FOUR CELLS WITH THE
+/PROPER INFORMATION ABOUT THE SYMBOL.
+
+\f/OBSYM USES A SYMBOL IDENTIFIER TO GET
+/THE FOUR ESSENTIAL BITS OF INFORMATION, AGAIN
+/CALLING SUSVL TO DO THE WORK. HOWEVER
+/BEFORE EITHER SRSYM OR OBSYM DO ANYTHING
+/THEY BOTH MAKE USE OF RUSVL. RUSVL IS A
+/VERY IMPORTANT ROUTINE. HERE IS HOW IT WORKS.
+/LET US SUPPOSE THAT THE PROGRAM HAS OBTAINED
+/USE, VAL, SYMBOL AND VALPTR FOR A GIVEN
+/SYMBOL(USING SRSYM OR OBSYM). FURTHER, LET
+/US SUPPOSE THAT THE PROGRAM WISHES TO
+/MODIFY BOTH OR EITHER OF THE CODE AND VALUE
+/WORDS FOR THIS SYMBOL IN THE SYMBOL TABLE.
+/THE PROGRAM DOES NOT DIRECTLY ACCESS THESE
+/WORDS IN THE SYMBOL TABLE. INSTEAD THE
+/PROGRAM MERELY MAKES THE DESIRED MODIFICATIONS
+/TO USE AND VAL. NOW SYMBOL AND VALPTR
+/ARE THE POINTERS FOR STORING THIS NEW INFORMATION
+/BACK IN THE TABLE. IT IS VERY IMPORTANT THAT
+/NO PART OF THE PROGRAM EXCEPT SRSYM AND OBSYM
+/EVER MODIFY SYMBOL OR VALPTR, AND BEFORE
+/EITHER OF THESE MODIFY THEM THEY ALWAYS CALL
+/RUSVL. RUSVL TAKES USE AND VAL
+/INCLUDING ANY MODIFICATIONS THAT HAVE BEEN
+/MADE TO THEM AND STORE THESE WORDS BACK
+/IN THE TABLE USING THE STILL UNCHANGED POINTERS
+/SYMBOL AND VALPTR. IN THIS WAY MODIFICATIONS
+/TO THE SYMBOL TABLE ARE MADE IN TWO STAGES.
+/THE FIRST STAGE CONSISTS OF A SIMPLE REFERENCE
+/TO ONE OF TWO PAGE 0 LOCATIONS, AND THE
+/SECOND STAGE IS TAKEN CARE OF AUTOMATICALLY
+/DURING FURTHER OPERATION OF THE PROGRAM.
+/(6)SETCT AND CPGES DEAL WITH FIVE SEPARATE PAGE
+/COUNTERS. THE SUM OF THESE IS THE NUMBER
+/OF WORDS OF CORE NECESSARY TO ASSEMBLE THE CURRENT
+/COLLECTED DATA. PTSZE (PAGE TABLE SIZE) IS THE
+/NUMBER OF ITEMS - CONSTANTS,ADDRESS PARAMETERS
+/AND INSTRUCTIONS - WHICH HAVE BEEN SO FAR
+/COLLECTED. LTSZE IS THE NUMBER OF DISTINCT LITERALS
+/WHEN ARE REQUIRED ON THE CURRENT PAGE. PGEESC
+/WILL BE EITHER 2 OR 4. IT IS
+/2 IF THE LAST COLLECTED INSTRUCTION WAS NOT A
+/SKIP INSTRUCTION, 4 OTHERWISE. THESE ARE THE
+/NUMBER OF WORDS REQUIRED FOR THE PAGE
+/ESCAPE. THIS ITEM IS IGNORED WHEN THE AUTO-
+/MATIC PAGING SWITCH IS NON-ZERO. OPSCTR
+/IS THE NUMBER OF POINTERS TO OFF-PAGE SYMBOLS
+/WHICH ARE REQUIRED ON THE CURRENT PAGE.
+
+\f/THIS ITEM IS DETERMINED BY USE OF THE
+/PAGE SYMBOL TABLE. TWO TYPES OF SYMBOLS
+/ARE STORED ON THIS TABLE: TAGS(LFS'S) ON THE
+/CURRENT PAGE AND SYMBOLS WHICH ARE REFERENCED
+/BY MEMORY REFERENCE INSTRUCTIONS(AFS'S) ON THE
+/CURRENT PAGE. IN THIS TABLE SABR KEEPS TRACK OF
+/WHETHER THE SYMBOL IS ON-PAGE(I.E. IF IT OCCURS AS
+/A TAG ON THE PAGE) AND WHETHER IT HAS BEEN
+/REFERENCED EITHER SIMPLY OR WITH A NUMBER SIGN
+/(MEANING <SYM>+1). IF THE SYMBOL IS OFF-PAGE
+/AND HAS BEEN REFERENCED ON THE PAGE, ONE POINTER
+/IS REQUIRED ON THE ASSEMBLED PAGE FOR
+/EACH TYPE OF REFERENCE USED (SIMPLE OR #).
+/IN ADDITION CERTAIN INFORMATION REGARDING OBACTR
+/IS KEPT IN THE P.S.T. OBACTR KEEPS COUNT OF
+/THE NUMBER OF EXTRA INSTRUCTIONS WHICH MUST
+/BE GENERATED ON THE CURRENT PAGE. THESE
+/INCLUDE CDF'S TO CURRENT BANK (CODE05 6201'S),
+/CDF 00'S FOR REFERENCE TO COMMON,                     /(*)
+/JMS CDFSK/SKP PAIRS FOR CDF CUR'S FOLLOWING
+/SKIP INSTRUCTIONS, AND JMS CDZSK/SKP PAIRS FOR
+/CDF 00'S FOLLOWING SKIP INSTRUCTIONS. SUCH
+/CDF'S ARE NEEDED FOR OFF-PAGE REFERENCES WHENEVER
+/THE BANK REFERENCED IS NOT THE SAME AS PREVIOUSLY
+/(0 INSTEAD OF CURRENT=1 OR VICE-VERSA) OR WHEN
+/THE BANK IS UNKNOWN (=-1) AS AFTER A TAG,
+/AT THE START OF A PAGE, OR FOR ALL JMS'S.
+/OBACTR ALSO KEEPS COUNT OF EXTRA INSTRUCTIONS
+/NEEDED TO GENERATE OFF-PAGE INDIRECT REFERENCES.
+/FOR THESE EITHER 2 OR 4 EXTRA INSTRUCTIONS
+/ARE NEEDED DEPENDING ON WHETHER OR NOT THE
+/PREVIOUS INSTRUCTION WAS A SKIP INSTRUCTION.
+/IN THE PST AN UP-TO-DATE RECORD IS KEPT OF THE
+/NUMBER OF INCREMENTS TO OBACTR SPECIFICALLY
+/DUE TO EACH OFF-PAGE SYMBOL. IN VIEW
+/OF THE RECOUNT PROCEDURE DESCRIBED IN ITEM 7
+/IT WOULD SEEM THAT THIS INFORMATION IS REDUNDANT
+/AND UNNECESSARY. HOWEVER, DURING THE DEBUGGING
+/STAGE OF THE PROGRAM WITH PASS 2 INCLUDED
+/I ENCOUNTERED SEVERAL SITUATIONS, WHICH I FIND
+/VERY DIFFICULT TO DESCRIBE, WHERE MORE IMMEDIATE
+/INFORMATION ABOUT OBACTR WAS NEEDED. I
+/AM NOT EVEN COMPLETELY SURE I UNDERSTAND WHY.
+/OBACTR MUST BE WATCHED CLOSELY. AT 6652 IN THE
+/PROGRAM THERE IS SOME CODE TO ASSIST IN
+/DEBUGGING THE PROGRAM IF PROBLEMS ARISE WITH
+/THE PAGE COUNT.
+/WHENEVER A NEW TAG IS ENCOUNTERED ON A
+/PAGE, SETCT USES CPLFS TO REDUCE
+/BOTH OPSCTR AND OBACTR APPROPRIATELY
+/SINCE WHAT PREVIOUSLY WERE OFF-PAGE REFERENCES
+/MAY NOW HAVE BECOME ON-PAGE REFERENCES.
+\f/(7) WHENEVER A TAG IS ENCOUNTERED ON A GIVEN
+/PAGE RECT IS CALLED TO GO THROUGH THE
+/ENTIRE CURRENT PAGE TABLE AND RECOUNT
+/THE PAGE. IT DOES THIS BY CALLING SETCT
+/AGAIN, ONCE FOR EACH ITEM ON THE PAGE TABLE.
+/THE ONLY THING REALLY ACCOMPLISHED HERE
+/IS THAT OBACTR IS RESET. OPSCTR IS
+/UNCHANGED AS WELL AS THE OTHER PAGE COUNTERS.
+/THE NEED TO RECOUNT OBACTR IS SHOWN
+/BY THE FOLLOWING EXAMPLE:
+/      A, TAD   B
+/         TAD   C
+/      B, 0
+/         <PAGE FILLS UP>
+/      C, 0
+/NOW BECAUSE BANK IS UNKNOWN AFTER "A,"
+/AND B IS UNDEFINED AS YET, "TAD B"
+/REQUIRES A CDF CUR. HENCE INCREMENT OBACTR.
+/"TAD C" IS OFF PAGE TOO, BUT REQUIRES NO
+/CDF SINCE IT IS IN THE SAME BANK.
+/HOWEVER WHEN B IS DEFINED ON PAGE, THE
+/CDF IT CAUSED IS NO LONGER NECESSARY,
+/BUT NOW THE "TAD C" REQUIRES A CDF.
+/(8) THE ROUTINE L55 CAUSES EACH PAGE TO BE ASSEMBLED.
+/DURING PASS 1 THERE ARE TWO SUB-PHASES TO THE ASSEMBLY.
+/FOR THE MOST PART BOTH PHASES RUN THROUGH THE
+/ENTIRE PAGE OF COLLECTED CODE USING THE
+/SAME ASSEMBLY ROUTINES. THE DIFFERENCE IS
+/THAT DURING PHASE 1 (ACTR=0)
+/ACTUAL OUTPUT IS SUPPRESSED. THE KEY
+/PURPOSE OF PHASE 1 IS TO DEFINE ALL THE
+/TAGS THAT OCCUR ON THE PAGE. CLEARLY THE
+/TAGS COULD NOT BE DEFINED DURING COLLECTION
+/BECAUSE AT THAT POINT WE WERE NOT SURE
+/WHAT SYMBOLS EVEN WERE ON PAGE, AND THUS
+/NOT SURE HOW MANY EXTRA INSTRUCTIONS
+/WOULD BE NECESSARY. THUS SUB-PHASE 1 OF THE
+/ASSEMBLY IS REQUIRED SO THAT IN THE
+/SECOND PHASE OF THE ASSEMBLY ON-PAGE
+/FORWARD REFERENCES CAN BE RESOLVED. HENCE
+/L55 CALLS THE ASSEMBLY ROUTINE ASMBL
+/TWICE FOR EACH PAGE OF CODE.
+/(9)AFTER INITIALIZING THE VARIOUS PAGE TABLE POINTERS
+/ASMBL GOES INTO A LOOP WHEREIN THE
+/LINE-BY-LINE ASSEMBLY ROUTINE ASM02 IS
+/CALLED ONCE FOR EACH ITEM ON THE PAGE TABLE.
+/ASM02 IS A HUGE ROUTINE OCCUPYING ABOUT
+/THREE FULL PAGES OF CODE. ASM02 FIRST
+\f/EXAMINES THE CODED DATA PERTAINING TO THE GIVEN
+/ITEM ON THE PAGE TABLE TO DETERMINE WHAT
+/TYPE OF INSTRUCTION IS TO BE ASSEMBLED AND
+/WHAT THE CURRENT BANK AND SKIP SETTINGS
+/ARE.  THEN DEPENDING ON THIS ANALYSIS THE ROUTINE
+/TRANFERS TO THE PROPER SUBSECTION OF ITSELF
+/FOR HANDLING THIS TYPE OF INSTRUCTION. THERE
+/ARE A DOZEN OR MORE CASES WHICH MUST
+/BE DEALT WITH. THEN THE ROUTINE MOVES
+/TO ONE OF ITS VARIOUS EXIT STRINGS
+/TO COMPLETE THE ACTION AND SET THE BANK AND
+/SKIP CONDITIONS FOR THE NEXT LINE. AFTER ALL
+/ITEMS ON THE PAGE TABLE HAVE BEEN ASSEMBLED
+/IN THIS WAY ASMBL THEN CALLS THE ROUTINE
+/A2. A2 PRODUCES (IN PHASE 2) THE PAGE ESCAPE AND
+/THEN OUTPUTS THE ENTIRE LITERAL TABLE WITH
+/ALL THE OFF-PAGE POINTERS INTERMINGLED.
+/(10) SPECIAL CONSIDERATION SHOULD BE GIVEN TO OFF-
+/PAGE FORWARD REFERENCES SINCE THEY WILL REMAIN
+/UNRESOLVED WHEN THE CURRENT PAGE HAS BEEN
+/ASSEMBLED. DURING ASSEMBLY WHEN 
+/A REFERENCE TO AN OFF-PAGE, OR AN AS YET
+/UNDEFINED SYMBOL IS ENCOUNTERED THE SYMBOL'S
+/IDENTIFIER IS STORED ON THE LITERAL/OFF-PAGE POINTER
+/TABLE. THEN WHEN A2 IS OUTPUTTING THE
+/LITERAL TABLE ANY STILL UNDEFINED SYMBOLS ARE
+/DEALT WITH AS FOLLOWS. THE SYMBOL'S INDENTIFIER
+/TOGETHER WITH THE LOCATION RESERVED IN THE CURRENT
+/PAGE FOR ITS VALUE ARE STORED ON THE OCCURRENCE
+/TABLE. THE LOCATION WHERE THE POINTER MUST BE
+/STORED IN THE CURRENT PAGE IS MERELY LEFT
+/BLANK AT THIS TIME. THEN LATER ON WHEN THIS SYMBOL IS
+/ENCOUNTERED AS A TAG THE ROUTINE LFSCK
+/WHICH PROCESSES TAGS DURING ASSEMBLY WILL
+/REMOVE THE ITEM FROM THE OCCURRENCE TABLE AND
+/OUTPUT IT PRECEEDING THE POINTER BY AN ORIGIN
+/TO THE CORRECT LOCATION.
+/(11) DURING PASS2 (THE LISTING PASS) MOST OF
+/THE SAME CODE IS USED TO PRODUCE THE
+/ASSEMBLY LISTING. HOWEVER THE TIMING IS
+/DIFFERENT. NOW THE COLLECTION-ASSEMBLY
+/ALTERATION IS CARRIED OUT ON A LINE-BY-LINE
+/BASIS RATHER THAN ON A PAGE-BY-PAGE BASIS.
+/(HOWEVER ALL THE PAGE TABLES AND COUNTERS MUST
+/STILL BE MAINTAINED JUST AS IN PASS1.) THE
+/PASS2 OPERATION DIFFERS FROM PASS1 IN THE
+\f/FOLLOWING RESPECTS. EACH TIME A LINE HAS
+/BEEN COLLECTED AND ITS DATA ENTERED INTO THE
+/PAGE TABLE IN THE NORMAL FIRST PASS WAY,
+/A CALL IS ISSUED TO THE LINE-BY-LINE
+/ASSEMBLY ROUTINE ASM02. SINCE ALL SYMBOLS
+/ARE NOW DEFINED THERE WILL BE NO UNRESOLVED
+/FORWARD REFERENCES ON OR OFF-PAGE. ASM02 ACTS
+/DURING PASS2 EXACTLY AS IT DOES DURING PASS1
+/WITH ONE BIG EXCEPTION: THE BINARY OUTPUT ROUTINE
+/OUTBN IN SUPPRESSED AND IN ITS PLACE IS
+/SUBSTITUTED THE LISTING ROUTINE WRITE.
+/WHEN THE PAGE COUNTERS INDICATE THAT THE PAGE
+/IS FULL THE DRIVER ROUTINE WILL CALL L55 AS
+/USUAL. HOWEVER IN PASS2 THE TWO CALLS
+/TO ASMBL ARE BY-PASSED AND INSTEAD A SINGLE
+/CALL TO A2 IS ISSUED SO AS TO GET THE
+/LISTING TO THE PAGE ESCAPE, THE LITERALS AND
+/THE OFF-PAGE POINTERS.
+/(12) THE REASON FOR HAVING SEPARATE LITERAL TABLES FOR THE
+/COLLECTION AND THE ASSEMBLY PHASES OF
+/THE PROGRAM IS THAT DURING PASS2 BOTH
+/PHASES OF THE PROGRAM ARE OPERATING SIMUTANEOUSLY
+/AND BOTH ARE BUILDING LITERAL TABLES IN A
+/DIFFERENT WAY.
+/(13) THE PAGE ESCAPE TABLE, PEBSE, IS NECESSARY
+/IS THAT DURING PASS2 LOCATIONS
+/CANNOT BE ASSIGNED FOR LITERALS AND OFF-PAGE
+/POINTERS UNLESS THE FINAL PAGE ESCAPE
+/FOR THE PAGE IS KNOWN. HENCE THESE NUMBERS
+/ARE SAVED DURING PASS1.
+/(14) THE PAGE OP TABLE IS ACTUALLY A PART OF
+/THE PAGE TABLE.
+/(15) EXTERNAL SYMBOLS ARISE IN TWO WAYS:
+/FROM ENTRY STATEMENTS AND FROM CALL STATEMENTS.
+/THEY ARE ENTERED IN THE E.S.T. IN ORDER OF
+/APPEARANCE IN THE PROGRAM AND NUMBERED
+/ACCORDINGLY. THESE ARE THE NUMBERS WHICH THE
+/LOADER REFERS TO AS "LOCAL EXTERNAL NUMBERS."
+/(16) EQUIVALENCING OF TAGS
+/IS TREATED AS A PSEUDO-OP AND IS
+/HANDLED BY THE ROUTINE PBSS2. (INCIDENTALLY
+/SOME OF THE ODD NAMES IN THE SOURCE WERE
+/PASSED ON TO ME FROM THE ORIGINAL ICS
+/PROGRAM. I DID NOT CHANGE THEM MERELY BECAUSE
+/THEY MADE NO SENSE.) THE OPERATION IS THIS:
+/ALL EXTRA TAGS TO BE DEFINED AT A GIVEN LOCATION ARE
+/ENTERED AS A GROUP IN THE EQUIVALENCE TABLE,
+/AND A CODE BIT IS SET ON THE PAGE TABLE TO
+/INDICATE THAT SUCH A GROUP IS TO BE DEFINED
+/WHEN THE LOCATION HAS BEEN DETERMINED DURING
+/ASSEMBLY. ANUMCK DOES THE WORK OF DEFINITION.
+\f/(*)
+/V03   CHANGE NOTICE:
+/      AS OF V03 THE SABR SYSTEM HAS
+/      BEEN CHANGED SUCH THAT COMMON
+/      WILL RESIDE IN FIELD 1 INSTEAD
+/      OF FIELD 0.
+/      THE ONLY CHANGES REQUIRED TO SABR
+/      ITSELF ARE AS FOLLOWS
+/      (1) HICOM=177 INSTEAD OF 777;
+/      (2) PARG & ASMBL MUST NOW OUTPUT 6211'S
+/      INSTEAD OF 6201'S FOR CDF'S TO COMMON.
+/      NOTE:
+/      THE COMMENTS HAVE NOT BEEN CHANGED TO
+/      REFLECT THIS CHANGE.
+/      ALSO, BANK = 0 IS STILL THE CONDITION
+/      FOR REFERENCES TO COMMON. (BANK=1
+/      STILL MEANS BANK KNOWN TO BE CURRENT
+/      AND BANK = -1 STILL MEANS BANK UNKNOWN.)
+\f