Commit | Line | Data |
---|---|---|
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 |