| 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 |