software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape2 / SABR.CO
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