Add README.md
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape2 / SABR.CO
CommitLineData
7af5ad59
PH
1/SABR ASSEMBLER, V17
2/
3/
4/
5/
6/
7/
8/
9/
10/
11/COPYRIGHT (C) 1974 BY DIGITAL EQUIPMENT CORPORATION
12/
13/
14/
15/
16/
17/
18/
19/
20/
21/
22/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25/FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.
26/
27/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
31/
32/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34/DIGITAL.
35/
36/
37/
38/
39/
40/
41/
42/
43/
44/
45/
46\f/NOTE: WHENEVER ABOVE VERSION NUMBER IS CHANGED
47/BE SURE TO ALSO CHANGE VERSION NUMBER FOR TYPEOUT.
48/THIS IS AT VERSN+13 (ABOUT P. 83)
49/
50/THERE ARE TWO BASIC PHASES OF OPERATION WITHIN
51/SABR:(A) COLLECTION AND (B) ASSEMBLY. IN PASS 1
52/SABR COLLECTS A FULL PAGE OF DATA AND THEN
53/ASSEMBLES THE FULL PAGE. IN PASS2 COLLECTION
54/AND ASSEMBLY ARE CARRIED OUT ON A LINE-
55/BY-LINE BASIS RATHER THAN PAGE-BY-
56/PAGE. FOLLOWING IS A DESCRIPTIVE FLOW CHART OF
57/THE PRINCIPAL METHODS OF OPERATION USED IN
58/THE PROGRAM DURING PASS1.
59/(1) BEGINNING AT START THERE ARE TWO ROUTINES NECESSARY
60/TO INTIALIZE THE ENTIRE PROGRAM. IOINIT CARRIES
61/OUT THE DIALOG WITH THE USER TO DETERMINE WHICH
62/I/O DEVICES WILL BE USED. INITA INTIALIZES ALL
63/THE FLAGS AND TABLES WHICH ARE USED CONTINOUSLY
64/THROUGHOUT THE PROGRAM.
65/(2) THE DRIVER FOR THE FULL PAGE-BY-PAGE ASSEMBLER
66/IS CONTAINED IN THE LOOP THAT RUNS FROM RSTRT
67/TO RSTRT6-1. THIS LOOP OPERATES AS FOLLOWS.
68/FIRST IT CALLS INILPT WHICH INITIALIZES ALL
69/THOSE FLAGS AND TABLES WHICH MUST BE
70/REFRESHED OR REBUILT FOR EACH PAGE OF CODE.
71/THEN IT CALLS THE MAIN LINE-BY-LINE
72/COLLECTION LOOP (WHICH IS DESCRIBED IN ITEM 3).
73/WHEN A FULL PAGE OF CODE HAS BEEN COLLECTED
74/THE DRIVER THEN CALLS L55 TO ASSEMBLE THE
75/PAGE (SEE ITEM 8).
76/(3) THE COLLECTION LOOP RUNS FROM RSTRT1 THROUGH
77/THE CODE AT RSTRT6. THIS LOOP FIRST CALLS
78/INCPT WHICH PREPARES FLAGS AND INCREMENTS
79/TABLE POINTERS FOR EACH LINE OF CODE. IT
80/THEN CALLS THE LINE DECODER DCIL (SEE
81/ITEM 4) FOLLOWED BY SETCT, THE ROUTINE WHICH
82/INCREMENTS THE PAGE COUNTERS AS REQUIRED
83/FOR THE GIVEN LINE (SEE ITEM 6). THEN
84/THE COLLECTIONS LOOP PROCEEDS TO INTERPRET
85/THE DATA LEFT BY DCIL AND STORE IT, PROPERLY
86/CODED, ON THE PAGE TABLE. IF THERE WAS
87/A TAG ("LFS" FOR "LOCATION FIELD SYMBOL") IT
88/IS NECESSARY TO CALL RECT FOR A PAGE RECOUNT.
89/(SEE ITEM 7). THEN THE SIZE OF THE PAGE SO
90/FAR COLLECTED IS TALLYED UP BY CPGES. IF
91/IT IS STILL .LE. 200. EVERYTHING IS FINE AND WE
92/RUN THROUGH THE LOOP AGAIN. IF NOT WE
93/FIRST SAVE (USING PUSHIN)
94/ALL THE KEY INFORMATION ABOUT THE LINE WHICH
95/CAUSED THE OVERFLOW AND THEN EXIT FROM THE
96/COLLECTION LOOP TO ASSEMBLE THE PAGE.
97/(4) CERTAIN NOTES ABOUT DCIL MAY BE HELPFUL. THIS
98/ROUTINE CONTROLS INPUT OF THE SOURCE. INDEV
99/(SET BY IOINIT) POINTS TO THE PROPER INPUT
100/ROUTINE, HSR OR ASR. THESE ROUTINES
101/READ ONE CHARACTER AT A
102/TIME FROM THE INPUT DEVICE. THE ROUTINE CALLED
103/R DRAWS CHARACTERS ONE AT A TIME FROM THE
104/INPUT BUFFER (DATA). WHEN THIS BUFFER IS
105/EMPTY R REFILLS IT USING @INDEV. FETCH
106/USES R TO EXTRACT ONE CHARACTER AT A TIME FROM
107/THE INPUT BUFFER AND DOES SOME PRELIMINARY
108/SCREENING. RLN USES FETCH TO READ A
109/FULL LINE OF CODE INTO THE LINE BUFFER.
110\f/L65 READS ONE CHARACTER AT A TIME FROM
111/THE LINE BUFFER. GTSYM READS THE LINE
112/ITEM-BY-ITEM. IF THE ITEM IS A SYMBOL, GTSYM
113/CALLS SRSYM TO LOOK UP THE ITEM IN THE
114/MAIN SYMBOL TABLE OR ENTER IT IF IT IS NOT
115/ALREADY THERE(SEE ITEM 5).
116/**IMPORTANT**
117/WHEN A SYMBOL HAS BEEN PLACED ON THE SYMBOL
118/TABLE THE ADDRESS OF THE FIRST WORD OF THE
119/ENTRY IS RETURNED AT "SYMBOL." THIS ADDRESS
120/IS UNIQUE FOR EACH SYMBOL AND IN THE
121/RANGE 2000-7575. THIS NUMBER IS USED
122/THROUGHOUT THE PROGRAM AS THE IDENTIFIER FOR
123/THIS SYMBOL. ** DCIL CONSIDERS EACH ITEM
124/OF THE LINE AND ACTS APPROPRIATELY. FOR
125/STANDARD INSTRUCTIONS A STRING OF KEY DATA ABOUT
126/THE LINE IS LEFT. IF THE LINE IS A PSUEDO-OP
127/DCIL WILL IMMEDIATELY CALL THE APPROPRIATE PSUEDO-OP
128/HANDLER TO TAKE ALL NECESSARY ACTION. MOST
129/OF THE PSUEDO-OP HANDLERS RETURN TO THE
130/BEGINNING OF DCIL WHERE THE NEXT LINE CAN BE
131/PROCESSED AS IF NOTHING UNUSUAL HAPPENED. THE
132/EXCEPTIONS TO THIS ARE THOSE PSUEDO-OPS WHICH
133/CAUSE A PREMATURE PAGE ASSEMBLY.
134/THE ROUTINE SKIPL IS ACTUALLY A SMALL PART OF
135/DCIL. IT HAS TWO PURPOSES. ONE, IT WATCHES
136/FOR LINES WHICH SHOULD BE IGNORED BECAUSE THE
137/FORTR PSUEDO-OP IS IN EFFECT. SECONDLY IT
138/MUST WATCH FOR SEMI-COLONS SO THAT
139/IF ONE IS ENCOUNTERED(OUTSIDE A COMMENT)
140/THE REMAINDER OF THE LINE CAN BE SAVED FOR
141/PROCESSING AS THE "NEXT" LINE.
142/(5)ONLY TWO MAIN ROUTINES SRSYM AND
143/OBSYM, TOGETHER WITH THEIR SUBSIDIARYS RUSVL AND SUSVL
144/MAY DIRECTLY CONTACT THE MAIN SYMBOL TABLE.
145/THESE ROUTINES COMMUNICATE WITH THE REST OF
146/THE PROGRAM THROUGH FOUR IMPORTANT
147/CELLS IN PAGE 0:
148/USE CONTAINS THE CODE WORD FOR THE SYMBOL ENTRY.
149/VAL CONTAINS THE VALUE OF THE SYMBOL.
150/SYMBOL CONTAINS THE ADDRESS OF THE FIRST WORD OF THE
151/ENTRY(NAMELY THE CODE WORD).
152/VALPTR CONTAINS THE ADDRESS OF THE VALUE WORD
153/OF THE ENTRY.
154/SRSYM, AFTER LOCATING A GIVEN SYMBOL IN THE TABLE
155/(OR ENTERING IT IF NECESSARY)
156/CALLS SUSVL TO FILL THE FOUR CELLS WITH THE
157/PROPER INFORMATION ABOUT THE SYMBOL.
158
159\f/OBSYM USES A SYMBOL IDENTIFIER TO GET
160/THE FOUR ESSENTIAL BITS OF INFORMATION, AGAIN
161/CALLING SUSVL TO DO THE WORK. HOWEVER
162/BEFORE EITHER SRSYM OR OBSYM DO ANYTHING
163/THEY BOTH MAKE USE OF RUSVL. RUSVL IS A
164/VERY IMPORTANT ROUTINE. HERE IS HOW IT WORKS.
165/LET US SUPPOSE THAT THE PROGRAM HAS OBTAINED
166/USE, VAL, SYMBOL AND VALPTR FOR A GIVEN
167/SYMBOL(USING SRSYM OR OBSYM). FURTHER, LET
168/US SUPPOSE THAT THE PROGRAM WISHES TO
169/MODIFY BOTH OR EITHER OF THE CODE AND VALUE
170/WORDS FOR THIS SYMBOL IN THE SYMBOL TABLE.
171/THE PROGRAM DOES NOT DIRECTLY ACCESS THESE
172/WORDS IN THE SYMBOL TABLE. INSTEAD THE
173/PROGRAM MERELY MAKES THE DESIRED MODIFICATIONS
174/TO USE AND VAL. NOW SYMBOL AND VALPTR
175/ARE THE POINTERS FOR STORING THIS NEW INFORMATION
176/BACK IN THE TABLE. IT IS VERY IMPORTANT THAT
177/NO PART OF THE PROGRAM EXCEPT SRSYM AND OBSYM
178/EVER MODIFY SYMBOL OR VALPTR, AND BEFORE
179/EITHER OF THESE MODIFY THEM THEY ALWAYS CALL
180/RUSVL. RUSVL TAKES USE AND VAL
181/INCLUDING ANY MODIFICATIONS THAT HAVE BEEN
182/MADE TO THEM AND STORE THESE WORDS BACK
183/IN THE TABLE USING THE STILL UNCHANGED POINTERS
184/SYMBOL AND VALPTR. IN THIS WAY MODIFICATIONS
185/TO THE SYMBOL TABLE ARE MADE IN TWO STAGES.
186/THE FIRST STAGE CONSISTS OF A SIMPLE REFERENCE
187/TO ONE OF TWO PAGE 0 LOCATIONS, AND THE
188/SECOND STAGE IS TAKEN CARE OF AUTOMATICALLY
189/DURING FURTHER OPERATION OF THE PROGRAM.
190/(6)SETCT AND CPGES DEAL WITH FIVE SEPARATE PAGE
191/COUNTERS. THE SUM OF THESE IS THE NUMBER
192/OF WORDS OF CORE NECESSARY TO ASSEMBLE THE CURRENT
193/COLLECTED DATA. PTSZE (PAGE TABLE SIZE) IS THE
194/NUMBER OF ITEMS - CONSTANTS,ADDRESS PARAMETERS
195/AND INSTRUCTIONS - WHICH HAVE BEEN SO FAR
196/COLLECTED. LTSZE IS THE NUMBER OF DISTINCT LITERALS
197/WHEN ARE REQUIRED ON THE CURRENT PAGE. PGEESC
198/WILL BE EITHER 2 OR 4. IT IS
199/2 IF THE LAST COLLECTED INSTRUCTION WAS NOT A
200/SKIP INSTRUCTION, 4 OTHERWISE. THESE ARE THE
201/NUMBER OF WORDS REQUIRED FOR THE PAGE
202/ESCAPE. THIS ITEM IS IGNORED WHEN THE AUTO-
203/MATIC PAGING SWITCH IS NON-ZERO. OPSCTR
204/IS THE NUMBER OF POINTERS TO OFF-PAGE SYMBOLS
205/WHICH ARE REQUIRED ON THE CURRENT PAGE.
206
207\f/THIS ITEM IS DETERMINED BY USE OF THE
208/PAGE SYMBOL TABLE. TWO TYPES OF SYMBOLS
209/ARE STORED ON THIS TABLE: TAGS(LFS'S) ON THE
210/CURRENT PAGE AND SYMBOLS WHICH ARE REFERENCED
211/BY MEMORY REFERENCE INSTRUCTIONS(AFS'S) ON THE
212/CURRENT PAGE. IN THIS TABLE SABR KEEPS TRACK OF
213/WHETHER THE SYMBOL IS ON-PAGE(I.E. IF IT OCCURS AS
214/A TAG ON THE PAGE) AND WHETHER IT HAS BEEN
215/REFERENCED EITHER SIMPLY OR WITH A NUMBER SIGN
216/(MEANING <SYM>+1). IF THE SYMBOL IS OFF-PAGE
217/AND HAS BEEN REFERENCED ON THE PAGE, ONE POINTER
218/IS REQUIRED ON THE ASSEMBLED PAGE FOR
219/EACH TYPE OF REFERENCE USED (SIMPLE OR #).
220/IN ADDITION CERTAIN INFORMATION REGARDING OBACTR
221/IS KEPT IN THE P.S.T. OBACTR KEEPS COUNT OF
222/THE NUMBER OF EXTRA INSTRUCTIONS WHICH MUST
223/BE GENERATED ON THE CURRENT PAGE. THESE
224/INCLUDE CDF'S TO CURRENT BANK (CODE05 6201'S),
225/CDF 00'S FOR REFERENCE TO COMMON, /(*)
226/JMS CDFSK/SKP PAIRS FOR CDF CUR'S FOLLOWING
227/SKIP INSTRUCTIONS, AND JMS CDZSK/SKP PAIRS FOR
228/CDF 00'S FOLLOWING SKIP INSTRUCTIONS. SUCH
229/CDF'S ARE NEEDED FOR OFF-PAGE REFERENCES WHENEVER
230/THE BANK REFERENCED IS NOT THE SAME AS PREVIOUSLY
231/(0 INSTEAD OF CURRENT=1 OR VICE-VERSA) OR WHEN
232/THE BANK IS UNKNOWN (=-1) AS AFTER A TAG,
233/AT THE START OF A PAGE, OR FOR ALL JMS'S.
234/OBACTR ALSO KEEPS COUNT OF EXTRA INSTRUCTIONS
235/NEEDED TO GENERATE OFF-PAGE INDIRECT REFERENCES.
236/FOR THESE EITHER 2 OR 4 EXTRA INSTRUCTIONS
237/ARE NEEDED DEPENDING ON WHETHER OR NOT THE
238/PREVIOUS INSTRUCTION WAS A SKIP INSTRUCTION.
239/IN THE PST AN UP-TO-DATE RECORD IS KEPT OF THE
240/NUMBER OF INCREMENTS TO OBACTR SPECIFICALLY
241/DUE TO EACH OFF-PAGE SYMBOL. IN VIEW
242/OF THE RECOUNT PROCEDURE DESCRIBED IN ITEM 7
243/IT WOULD SEEM THAT THIS INFORMATION IS REDUNDANT
244/AND UNNECESSARY. HOWEVER, DURING THE DEBUGGING
245/STAGE OF THE PROGRAM WITH PASS 2 INCLUDED
246/I ENCOUNTERED SEVERAL SITUATIONS, WHICH I FIND
247/VERY DIFFICULT TO DESCRIBE, WHERE MORE IMMEDIATE
248/INFORMATION ABOUT OBACTR WAS NEEDED. I
249/AM NOT EVEN COMPLETELY SURE I UNDERSTAND WHY.
250/OBACTR MUST BE WATCHED CLOSELY. AT 6652 IN THE
251/PROGRAM THERE IS SOME CODE TO ASSIST IN
252/DEBUGGING THE PROGRAM IF PROBLEMS ARISE WITH
253/THE PAGE COUNT.
254/WHENEVER A NEW TAG IS ENCOUNTERED ON A
255/PAGE, SETCT USES CPLFS TO REDUCE
256/BOTH OPSCTR AND OBACTR APPROPRIATELY
257/SINCE WHAT PREVIOUSLY WERE OFF-PAGE REFERENCES
258/MAY NOW HAVE BECOME ON-PAGE REFERENCES.
259\f/(7) WHENEVER A TAG IS ENCOUNTERED ON A GIVEN
260/PAGE RECT IS CALLED TO GO THROUGH THE
261/ENTIRE CURRENT PAGE TABLE AND RECOUNT
262/THE PAGE. IT DOES THIS BY CALLING SETCT
263/AGAIN, ONCE FOR EACH ITEM ON THE PAGE TABLE.
264/THE ONLY THING REALLY ACCOMPLISHED HERE
265/IS THAT OBACTR IS RESET. OPSCTR IS
266/UNCHANGED AS WELL AS THE OTHER PAGE COUNTERS.
267/THE NEED TO RECOUNT OBACTR IS SHOWN
268/BY THE FOLLOWING EXAMPLE:
269/ A, TAD B
270/ TAD C
271/ B, 0
272/ <PAGE FILLS UP>
273/ C, 0
274/NOW BECAUSE BANK IS UNKNOWN AFTER "A,"
275/AND B IS UNDEFINED AS YET, "TAD B"
276/REQUIRES A CDF CUR. HENCE INCREMENT OBACTR.
277/"TAD C" IS OFF PAGE TOO, BUT REQUIRES NO
278/CDF SINCE IT IS IN THE SAME BANK.
279/HOWEVER WHEN B IS DEFINED ON PAGE, THE
280/CDF IT CAUSED IS NO LONGER NECESSARY,
281/BUT NOW THE "TAD C" REQUIRES A CDF.
282/(8) THE ROUTINE L55 CAUSES EACH PAGE TO BE ASSEMBLED.
283/DURING PASS 1 THERE ARE TWO SUB-PHASES TO THE ASSEMBLY.
284/FOR THE MOST PART BOTH PHASES RUN THROUGH THE
285/ENTIRE PAGE OF COLLECTED CODE USING THE
286/SAME ASSEMBLY ROUTINES. THE DIFFERENCE IS
287/THAT DURING PHASE 1 (ACTR=0)
288/ACTUAL OUTPUT IS SUPPRESSED. THE KEY
289/PURPOSE OF PHASE 1 IS TO DEFINE ALL THE
290/TAGS THAT OCCUR ON THE PAGE. CLEARLY THE
291/TAGS COULD NOT BE DEFINED DURING COLLECTION
292/BECAUSE AT THAT POINT WE WERE NOT SURE
293/WHAT SYMBOLS EVEN WERE ON PAGE, AND THUS
294/NOT SURE HOW MANY EXTRA INSTRUCTIONS
295/WOULD BE NECESSARY. THUS SUB-PHASE 1 OF THE
296/ASSEMBLY IS REQUIRED SO THAT IN THE
297/SECOND PHASE OF THE ASSEMBLY ON-PAGE
298/FORWARD REFERENCES CAN BE RESOLVED. HENCE
299/L55 CALLS THE ASSEMBLY ROUTINE ASMBL
300/TWICE FOR EACH PAGE OF CODE.
301/(9)AFTER INITIALIZING THE VARIOUS PAGE TABLE POINTERS
302/ASMBL GOES INTO A LOOP WHEREIN THE
303/LINE-BY-LINE ASSEMBLY ROUTINE ASM02 IS
304/CALLED ONCE FOR EACH ITEM ON THE PAGE TABLE.
305/ASM02 IS A HUGE ROUTINE OCCUPYING ABOUT
306/THREE FULL PAGES OF CODE. ASM02 FIRST
307\f/EXAMINES THE CODED DATA PERTAINING TO THE GIVEN
308/ITEM ON THE PAGE TABLE TO DETERMINE WHAT
309/TYPE OF INSTRUCTION IS TO BE ASSEMBLED AND
310/WHAT THE CURRENT BANK AND SKIP SETTINGS
311/ARE. THEN DEPENDING ON THIS ANALYSIS THE ROUTINE
312/TRANFERS TO THE PROPER SUBSECTION OF ITSELF
313/FOR HANDLING THIS TYPE OF INSTRUCTION. THERE
314/ARE A DOZEN OR MORE CASES WHICH MUST
315/BE DEALT WITH. THEN THE ROUTINE MOVES
316/TO ONE OF ITS VARIOUS EXIT STRINGS
317/TO COMPLETE THE ACTION AND SET THE BANK AND
318/SKIP CONDITIONS FOR THE NEXT LINE. AFTER ALL
319/ITEMS ON THE PAGE TABLE HAVE BEEN ASSEMBLED
320/IN THIS WAY ASMBL THEN CALLS THE ROUTINE
321/A2. A2 PRODUCES (IN PHASE 2) THE PAGE ESCAPE AND
322/THEN OUTPUTS THE ENTIRE LITERAL TABLE WITH
323/ALL THE OFF-PAGE POINTERS INTERMINGLED.
324/(10) SPECIAL CONSIDERATION SHOULD BE GIVEN TO OFF-
325/PAGE FORWARD REFERENCES SINCE THEY WILL REMAIN
326/UNRESOLVED WHEN THE CURRENT PAGE HAS BEEN
327/ASSEMBLED. DURING ASSEMBLY WHEN
328/A REFERENCE TO AN OFF-PAGE, OR AN AS YET
329/UNDEFINED SYMBOL IS ENCOUNTERED THE SYMBOL'S
330/IDENTIFIER IS STORED ON THE LITERAL/OFF-PAGE POINTER
331/TABLE. THEN WHEN A2 IS OUTPUTTING THE
332/LITERAL TABLE ANY STILL UNDEFINED SYMBOLS ARE
333/DEALT WITH AS FOLLOWS. THE SYMBOL'S INDENTIFIER
334/TOGETHER WITH THE LOCATION RESERVED IN THE CURRENT
335/PAGE FOR ITS VALUE ARE STORED ON THE OCCURRENCE
336/TABLE. THE LOCATION WHERE THE POINTER MUST BE
337/STORED IN THE CURRENT PAGE IS MERELY LEFT
338/BLANK AT THIS TIME. THEN LATER ON WHEN THIS SYMBOL IS
339/ENCOUNTERED AS A TAG THE ROUTINE LFSCK
340/WHICH PROCESSES TAGS DURING ASSEMBLY WILL
341/REMOVE THE ITEM FROM THE OCCURRENCE TABLE AND
342/OUTPUT IT PRECEEDING THE POINTER BY AN ORIGIN
343/TO THE CORRECT LOCATION.
344/(11) DURING PASS2 (THE LISTING PASS) MOST OF
345/THE SAME CODE IS USED TO PRODUCE THE
346/ASSEMBLY LISTING. HOWEVER THE TIMING IS
347/DIFFERENT. NOW THE COLLECTION-ASSEMBLY
348/ALTERATION IS CARRIED OUT ON A LINE-BY-LINE
349/BASIS RATHER THAN ON A PAGE-BY-PAGE BASIS.
350/(HOWEVER ALL THE PAGE TABLES AND COUNTERS MUST
351/STILL BE MAINTAINED JUST AS IN PASS1.) THE
352/PASS2 OPERATION DIFFERS FROM PASS1 IN THE
353\f/FOLLOWING RESPECTS. EACH TIME A LINE HAS
354/BEEN COLLECTED AND ITS DATA ENTERED INTO THE
355/PAGE TABLE IN THE NORMAL FIRST PASS WAY,
356/A CALL IS ISSUED TO THE LINE-BY-LINE
357/ASSEMBLY ROUTINE ASM02. SINCE ALL SYMBOLS
358/ARE NOW DEFINED THERE WILL BE NO UNRESOLVED
359/FORWARD REFERENCES ON OR OFF-PAGE. ASM02 ACTS
360/DURING PASS2 EXACTLY AS IT DOES DURING PASS1
361/WITH ONE BIG EXCEPTION: THE BINARY OUTPUT ROUTINE
362/OUTBN IN SUPPRESSED AND IN ITS PLACE IS
363/SUBSTITUTED THE LISTING ROUTINE WRITE.
364/WHEN THE PAGE COUNTERS INDICATE THAT THE PAGE
365/IS FULL THE DRIVER ROUTINE WILL CALL L55 AS
366/USUAL. HOWEVER IN PASS2 THE TWO CALLS
367/TO ASMBL ARE BY-PASSED AND INSTEAD A SINGLE
368/CALL TO A2 IS ISSUED SO AS TO GET THE
369/LISTING TO THE PAGE ESCAPE, THE LITERALS AND
370/THE OFF-PAGE POINTERS.
371/(12) THE REASON FOR HAVING SEPARATE LITERAL TABLES FOR THE
372/COLLECTION AND THE ASSEMBLY PHASES OF
373/THE PROGRAM IS THAT DURING PASS2 BOTH
374/PHASES OF THE PROGRAM ARE OPERATING SIMUTANEOUSLY
375/AND BOTH ARE BUILDING LITERAL TABLES IN A
376/DIFFERENT WAY.
377/(13) THE PAGE ESCAPE TABLE, PEBSE, IS NECESSARY
378/IS THAT DURING PASS2 LOCATIONS
379/CANNOT BE ASSIGNED FOR LITERALS AND OFF-PAGE
380/POINTERS UNLESS THE FINAL PAGE ESCAPE
381/FOR THE PAGE IS KNOWN. HENCE THESE NUMBERS
382/ARE SAVED DURING PASS1.
383/(14) THE PAGE OP TABLE IS ACTUALLY A PART OF
384/THE PAGE TABLE.
385/(15) EXTERNAL SYMBOLS ARISE IN TWO WAYS:
386/FROM ENTRY STATEMENTS AND FROM CALL STATEMENTS.
387/THEY ARE ENTERED IN THE E.S.T. IN ORDER OF
388/APPEARANCE IN THE PROGRAM AND NUMBERED
389/ACCORDINGLY. THESE ARE THE NUMBERS WHICH THE
390/LOADER REFERS TO AS "LOCAL EXTERNAL NUMBERS."
391/(16) EQUIVALENCING OF TAGS
392/IS TREATED AS A PSEUDO-OP AND IS
393/HANDLED BY THE ROUTINE PBSS2. (INCIDENTALLY
394/SOME OF THE ODD NAMES IN THE SOURCE WERE
395/PASSED ON TO ME FROM THE ORIGINAL ICS
396/PROGRAM. I DID NOT CHANGE THEM MERELY BECAUSE
397/THEY MADE NO SENSE.) THE OPERATION IS THIS:
398/ALL EXTRA TAGS TO BE DEFINED AT A GIVEN LOCATION ARE
399/ENTERED AS A GROUP IN THE EQUIVALENCE TABLE,
400/AND A CODE BIT IS SET ON THE PAGE TABLE TO
401/INDICATE THAT SUCH A GROUP IS TO BE DEFINED
402/WHEN THE LOCATION HAS BEEN DETERMINED DURING
403/ASSEMBLY. ANUMCK DOES THE WORK OF DEFINITION.
404\f/(*)
405/V03 CHANGE NOTICE:
406/ AS OF V03 THE SABR SYSTEM HAS
407/ BEEN CHANGED SUCH THAT COMMON
408/ WILL RESIDE IN FIELD 1 INSTEAD
409/ OF FIELD 0.
410/ THE ONLY CHANGES REQUIRED TO SABR
411/ ITSELF ARE AS FOLLOWS
412/ (1) HICOM=177 INSTEAD OF 777;
413/ (2) PARG & ASMBL MUST NOW OUTPUT 6211'S
414/ INSTEAD OF 6201'S FOR CDF'S TO COMMON.
415/ NOTE:
416/ THE COMMENTS HAVE NOT BEEN CHANGED TO
417/ REFLECT THIS CHANGE.
418/ ALSO, BANK = 0 IS STILL THE CONDITION
419/ FOR REFERENCES TO COMMON. (BANK=1
420/ STILL MEANS BANK KNOWN TO BE CURRENT
421/ AND BANK = -1 STILL MEANS BANK UNKNOWN.)
422\f