X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape2%2FSABR.CO;fp=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape2%2FSABR.CO;h=4649a85a8b5f7ff5d0c2afc72d36dbe9f3147825;hb=7af5ad59491ddf2066641aef1e0025a337c0f247;hp=0000000000000000000000000000000000000000;hpb=919757fd611e482003ce51f366f6783cab73dea3;p=pdp8.git 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 index 0000000..4649a85 --- /dev/null +++ b/sw/os8/v3d/sources/system/dectapes/dectape2/SABR.CO @@ -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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /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. + /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. + + /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. + + /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 +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. + /(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 +/ +/ 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 + /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 + /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. + /(*) +/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.) +