Multiple Pages    

* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 1

0001 * NAME: LDR-APM DOC. 70180005000 REV. E 0002 * 0003 * DESCRIPTION: RELOCATING LOADER FOR SERIES 16 SOFTWARE 0004 * 0005 * 0006 * REVISION HISTORY 0007 * REV DATE ECO NO. 0008 * E 0009 * D 05-21-70 8292 0010 * C 02-05-70 7925 0011 * B 05-19-69 7040 0012 * A 06-17-68 FIRST RELEASE 0013 * 0014 * 0015 * DOCUMENTATION REFERENCES 0016 * TITLE DOC. NO. 0017 * H316/DDP-516 PROGRAMMERS REFERENCE MANUAL 42400343401 0018 * H316/DDP-516 OPERATORS GUIDE 42400343402 0019 * 0020 * 0021 * COPYRIGHT 1972, BY HONEYWELL INFORMATION SYSTEMS INC.. 0022 ******************************************************** 0023 EJCT
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 2

0024 * 0025 * PURPOSE 0026 * 0027 * LDR-APM LOADS FROM THE ASR, HIGH SPEED PAPER TAPE READER, 0028 * MAGNETIC TAPE, CARDS, AND DISC SERIES 16 ABSOLUTE AND RELOCATABLE 0029 * MAIN PROGRAMS AND SUBPROGRAMS PRODUCED BY THE ASSEMBLER AND 0030 * FORTRAN IV COMPILER. 0031 * 0032 * 0033 * STORAGE 0034 * 0035 * WHEN USING LDR-APM TO LOAD PAPER TAPE AND/OR DISC, 0036 * ONLY FOUR (4) CONSECUTIVE SECTORS ARE REQUIRED, WHEN USING 0037 * LDR-APM TO LOAD FROM MAGNETIC TAPE OR CARDS, FIVE (5) CONSECUTIVE 0038 * SECTORS ARE REQUIRED. 0039 * 0040 * 0041 * METHOD 0042 * 0043 * THE BINARY OUTPUT OF THE DAP-116 ASSEMBLER AND THE 0044 * FORTRAN IV COMPILER INCLUDES A 14-BIT ADDRESS FOR EACH 0045 * MEMORY REFERENCE. EACH INSTRUCTION IS CHECKED TO SEE IF ITS 0046 * REFERENCE IS IN THE SAME SECTOR AS THE INSTRUCTION. IF SO, 0047 * THE 14-BIT ADDRESS IS TRUNCATED TO 9 BITS AND THE SECTOR 0048 * BIT OF THE INSTRUCTION WORD IS SET TO 1. OTHERWISE AN 0049 * INDIRECT WORD IS MADE IN THE CROSS-SECTOR INDIRECT WORD 0050 * TABLE CONSISTING OF THE INSTRUCTION'S 14-BIT ADDRESS, TAG, 0051 * AND FLAG. THE INSTRUCTION IS LOADED WITH ITS INDIRECT FLAG 0052 * SET TO 1, ITS TAG AND ITS SECTOR BIT RESET TO O, AND ITS ADDRESS 0053 * SET TO THE LOCATION OF THE INDIRECT WORD. 0054 * 0055 * THE BINARY OUTPUT OF THE DAP-16 ASSEMBLER INCLUDES A 14- 0056 * BIT, 15-BIT OR 16-BIT ADDRESS FOR EACH MEMORY REFERENCE SO THAT 0057 * PROGRAMS MAY BE WRITTEN FOR COMPUTERS WITH THE EXTENDED 0058 * MEMORY OPTION. NINE-BIT ADDRESS INSTRUCTIONS ARE DESECTORED 0059 * BY THE LOADER EITHER FOR EXECUTION IN THE EXTENDED-MEMORY-MODE 0060 * (TAGS ARE NOT MOVED TO INDIRECT WORDS) OR FOR EXECUTION NOT IN 0061 * THE EXTENDED-MEMORY-MODE (TAGS ARE MOVED TO INDIRECT WORDS), 0062 * AS SELECTED BY THE PROGRAMMER AT ASSEMBLY TIME VIA THE PSEUDO- 0063 * OPERATIONS 'ENTER EXTEND-MODE DESECTORING' (EXD) AND 'LEAVE 0064 * EXTEND-MODE DESECTORING' (LXD). IT IS THE PROGRAMMER'S 0065 * RESPONSIBILITY TO DIRECT THAT CODE BE LOADED IN THE MODE IN 0066 * WHICH IS EXECUTED. THE DDP-516, H316 INSTRUCTION 'LOAD 0067 * INDEX' (LDX) IS AN EXCEPTION AND IS ALWAYS DESECTORED IN THE 0068 * EXTENDED-MEMORY-MODE (THE TAG IS NOT MOVED TO THE INDIRECT WORD). 0069 * 0070 * INDIRECT REFERENCE ACROSS SECTOR BUUNDARIES IS DONE 0071 * AUTOMATICALLY AND ONLY WHEN NEEDED. THIS LLOWS PROGRAMS WRITTEN 0072 * IN DAP-116 OR DAP-16 TO IGNORE THE SECTOR CONSTRAINTS ON 0073 * ADDRESSING. IN ADDITION, WITH THE EXTENDED MEMORY OPTION,
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 3

0074 * DAP-16 PROGRAMS WHICH EXECUTE IN THE EXTENDED-MEMORY-MODE MAY 0075 * IGNORE THE 16-K BANK CONSTRAINTS. 0076 * 0077 * REFER TO THE DOCUMENTATION OF I$CB FOR BINARY 0078 * CARD FORMAT. 0079 * 0080 * 0081 * 0082 * ******************************************************************* 0083 * * LOADING THE LOADER * 0084 * ******************************************************************* 0085 * 0086 * 1. THE LOADER IS PROVIDED IN THE FORM OF ; (A) A PAL-AP 0087 * FORMAT TAPE FOR 4K, WHICH ALLOWS LOADING ABOVE ITSELF, AND 0088 * (B) AN OBJECT TAPE WHICH WAY RE LOADED AS DESIRED. 0089 * 0090 * 2. LOCATIONS 1-17 SHOULD BE LOADED AS FOLLOWS: 0091 * 0092 * LOCATION INSTRUCTION ASR DIGITRONICS 0093 * 0094 * 1 STA '57 010057 010057 0095 * 2 OCP '000X 030004 030001 0096 * 3 INA '100X 131004 131001 0097 * 4 JMP *-1 002003 002003 0098 * 5 SNZ 101040 101040 0099 * 6 JMP *-3 002003 002003 0100 * 7 STA O 010000 010000 0101 * 10 INA '100X 131004 131001 0102 * 11 JMP *-1 002010 002010 0103 * 12 LGL 8 041470 041470 0104 * 13 INA '000X 130004 130001 0105 * 14 JMP *-1 002013 002013 0106 * 15 STA *0 110000 110000 0107 * 16 IRS 0 024000 024000 0108 * 17 SZE 100040 100040 0109 * 0110 * THIS WILL PERMIT THE LOADING OF SELF LOADING TAPE 0111 * 0112 * 3. POSITION THE LEADER PORTION OF THE 4K SELF-LOADING TAPE 0113 * IN THE READER, MASTER CLEAR, SET THE PROGRAM COUNTER TO 0114 * '00001, AND PRESS 'START'. THE 4K LOADER WILL BE LOADED INTO 0115 * CORE. 0116 * 0117 * 4. IT WILL BE USEFUL TO MAKE A SELFLOADING VERSION THAT 0118 * LOADS ITSELF INTO HIGHER LOCATIONS. TO DO THIS, 0119 * 0120 * (A) MOUNT THE OBJECT TAPE IN THE READER. 0121 * 0122 * (B) MASTER CLEAR, SET THE A REGISTER TO 'YY000, 0123 * WHERE:
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 4

0124 * 1. YY IS THE FIRST OF FIVE CONSECUTIVE 0125 * SECTORS IN WHICH THE NEW LOADER 0126 * IS TO BE PLACED. FIVE SECTORS ARE 0127 * REQUIRED IF LOADING IS TO TAKE PLACE 0128 * FROM MAGNETIC TAPE AND/OR 0129 * CARDS. 0130 * 0131 * 2. YY IS THE FIRST OF FOUR CONSECUTIVE 0132 * SECTORS IN WHICH THE NEW LOADER IS TO 0133 * BE PLACED. FOUR SECTORS ARE REQUIRED 0134 * IF LOADING IS TO TAKE PLACE FROM 0135 * PAPER TAPE AND/OR DISC ONLY 0136 * 0137 * (C) SET P TO 7000 AND PRESS START. THE COMPUTER 0138 * WILL HALT 0139 * SET THE A REGISTER TO THE PROPER INPUT 0140 * DEVICE CODE, BIT 15 FOR ASR OR BIT 16 0141 * FOR HIGH SPFED READER. 0142 * 0143 * (D) PRESS START. ON A DDP-416, THERE WILL BE 0144 * A SECOND HALT, FOR SETTING THE BASE SECTOR. 0145 * PRESS START AGAIN AND THE OBJECT TAPE OF THE LOADER 0146 * WILL LOAD INTO MEMORY, 'MR' WILL BE TYPED 0147 * AND THE COMPUTER WILL HALT. 0148 * (E) 0149 * (1) IF LDR-APM IS TO BE USED FOR LOADING FROM 0150 * MAGNETIC TAPE/CARDS AS WELL AS PAPER TAPE: 0151 * MOUNT THE OBJECT TAPE OF I$MA-U/I$CB IN THE 0152 * PAPER TAPE READER. SET THE A REGISTER TO 0153 * 'YY000, WHERE YY IS THE FIFTH SECTOR IN 0154 * WHICH THE LOADER WILL RESIDE. SET THE P 0155 * REGISTER TO '7003 PRESS START. THE COMPUTER 0156 * WILL HALT. SET THE INPUT DEVICE CODE IN THE 0157 * A REGISTER. PRESS START, THE TAPE WILL BE LOADED. 0158 * 'MR' WILL BE TYPED AND THE COMPUTER WILL HALT, 0159 * IF I$MA-U WAS NOT LOADED, LOADING OF M$UNIT-U IS 0160 * NOT NECESSARY. 0161 * IF I$MA-U WAS LOADED MOUNT THE OBJECT TAPE OF 0162 * M$UNIT-U IN THE READER, PRESS START. IF ONLY ONE 0163 * OF THE ABOVE INPUT DEVICES IS TO BE USED THE 0164 * LOADING OF LDR-DUMY WILL BE REQUIRED. SEE STEP 0165 * 2 BELOW. WHEN 'LC' HAS BEEN TYPED, MASTER CLEAR, 0166 * SET P TO '7002, PRESS START. A MEMORY MAP OF THE 0167 * NEW LOADER WILL BE TYPED. 0168 * 0169 * (2) IF LDR-APM IS TO BE USED FOR LOADING FROM 0170 * PAPER TAPE AND/OR DISC ONLY: 0171 * MOUNT THE OBJECT TAPE OF LDR-DUMY IN THE PAPER 0172 * TAPE READER. SET P TO '7003. SET THE A REGISTER 0173 * TO ZZZZZ WHERE ZZZZZ IS EQUAL TO THE HIGHEST BASE
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 5

0174 * SECTOR USED, PRESS START. THE COMPUTER WILL HALT. 0175 * SET THE A REGISTER TO THE PROPER INPUT DEVICE 0176 * CODE. PRESS START, 'LC' WILL BE TYPED AND THE 0177 * COMPUTER WILL HALT. 0178 * 0179 * (F) AT THIS POINT THE DEFAULT INPUT DEVICE 0180 * MAY BE SET. INSERT THE DESIRED OCTAL 0181 * DEVICE CODE IN LOCATION XX000 0182 * WHERE XX IS THE SECOND SECTOR IN WHICH 0183 * THE LOADER WILL RESIDE. THE OCTAL 0184 * DEVICE CODE OCCUPIES BITS 14-16. 0185 * WHERE: 0186 * 1 = HIGH SPEED PAPER TAPE READER 0187 * 2 = ASR PAPER TAPE READER 0188 * 3 = MAGNETIC TAPE INPUT 0189 * 4 = DISC INPUT 0190 * 5 = CARD INPUT 0191 * 0192 * IF MAGNETIC TAPE IS SELECTED. BITS 11-13 0193 * SHOULD BE SET WITH THE PHYSICAL TAPE NUMBER 0194 * FROM WHICH LOADING WILL TAKE PLACE. AT 0195 * LOAD TIME THE TAPE MUST BE POSITIONED 0196 * AT THE BEGINNING OF THE FILE. 0197 * 0198 * (G) LOAD PAL-AP IN 'ZZ000, WHERE ZZ IS ANY CONVENIENT 0199 * SECTOR, CHANGE THE CONTENTS OF 'ZZ575 FROM 'ZZ600 0200 * TO 'XX600 WHERE XX IS THE LAST OF THE FOUR/FIVE 0201 * SECTORS IN WHICH THE LOADER WAS PLACED. (THIS 0202 * WILL BE IN THE STARTING LOCATION OF A '177 WORD 0203 * BOOTSTRAP PROGRAM) 0204 * 0205 * (H) EXECUTE PAL-AP, DUMPING BETWEEN 'YY000 AND 0206 * 'XX577. THE OUTPUT TAPE IS YOUR NEW SELF 0207 * LOADING LOADER. 0208 * 0209 * 0210 * 0211 * ******************************************************************* 0212 * * LOADER OPERATING PROCEDURE * 0213 * ******************************************************************* 0214 * 0215 * 1. ONCE THE LOADER IS IN MFMORY, SET THE PROGRAM COUNTER TO 0216 * 'XXO00 OR XX006, WHERE 'XX IS THE FOURTH SECTOR OCCUPIED 0217 * BY THE LOADER, SET THE A-REGISTER TO THE STARTING LOCA- 0218 * TION AT WHICH LOADING IS TO BEGIN. IF THE A-REGISTER IS 0219 * CLEAR A STARTING LOCATION OF '01000 WILL BE ASSUMED. 0220 * TO FORCE A STARTING LOCATION OF ZERO, TURN ON THE SIGN 0221 * BIT OF THE A-REGISTER. IF 'XX000 IS CHOSEN THEN 'NORMAL' 0222 * MODE LOADING IS TAKEN (IMPLIED LXD). IF 'XX006 IS CHOSEN, 0223 * THE EXTENDED MODE (IMPLIED EXD) LOADING IS TAKEN.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 6

0224 * 0225 * 2. ON THE DDP-516, H316 0226 * SET THE B-REGISTER WITH THE LOCATION AT WHICH 0227 * THE CROSS-SECTOR INDIRECT WORD TABLE IS TO BEGIN. IF THE 0228 * B-REGISTER IS CLEAR, A STARTING LOCATION OF -00100 WILL 0229 * BE ASSUMED. THIS WILL BE '40100 IF NORMAL LOADING 0230 * (LXD) INTO UPPER 16K. 0231 * 0232 * 0233 * NOTE.. ON COMPUTERS WITHOUT THE MEMORY LOCKOUT OPTION, 0234 * THE CROSS-SECTOR INDIRECT WORD TABLE MUST BE LOCATED IN 0235 * SECTOR ZERO OR IN THE SAME SECTOR AS THE INSTRUCTION, ON 0236 * COMPUTERS WITH THE MEMORY LOCKOUT OPTION THE TABLE 0237 * MAY BE IN ANY SECTOR. THE CROSS SECTOR INDIRECT WORD 0238 * TABLE LOCATION MAY BE CHANGED DURING THE LOAD BY 0239 * OCCURRENCES OF THE DAP-16 PSEUDO-OPERATION 'SET BASE 0240 * SECTOR' (SETB). IF THE PROGRAM LOAD DOES NOT INCLUDE 0241 * A 'SET BASE SECTOR' PSEUDO-OPERATIONS PRIOR TO THE FIRST 0242 * INSTRUCTIONS WHICH REQUIRES DESECTORING, THE PROGRAMMER MUST 0243 * DIRECT THE LOADER TO SELECT THE PROPER SECTOR INITIALLY. IF 0244 * THIS IS A 'NORMAL' LOAD, START AT 'XX000 AND THE BASE 0245 * SECTOR WILL INITIALLY BE IN THE SAME 16K AS THE PROGRAM. 0246 * IF THE PROGRAM BEING LOADED IS TO RESIDE ABOVE THE 0247 * LOADER, CHANGE LOCATION 'S5000 FROM 'XX700 TO 'VV700 0248 * WHERE SS IS THE NEXT TO THE LAST SECTOR OCCUPIED BY THE 0249 * LOADER, XX IS THE LAST SECTOR OCCUPIED BY THE LOADER 0250 * AND 'VV IS THE LAST SECTOR IN CORE. FOR EXAMPLE, THE 0251 * LOADER RESIDES IN LOCATIONS '4000-7577 AND A PROGRAM IS 0252 * TO BE LOADED AT LOCATIONS 12000-14000 IN AN 8K CORE. 0253 * THE CONTENTS OF LOCATION '6000 OF THE LOADER MUST BE 0254 * CHANGED FROM '7700 TO '17700. 0255 * 0256 * 3. PRESS 'START', THE COMPUTER WILL HALT. SET BITS 14-16 OF THE 0257 * A-REGISTER WITH THE OCTAL DEVICE CODE. WHERE: 0258 * 0259 * 1=HSR(HIGH SPEED PAPER TAPE READER) 0260 * 2=ASR(ASR PAPER TAPE READER) 0261 * 3=MAGNETIC TAPE 0262 * 4=DISC INPUT 0263 * 5=CARD INPUT 0264 * 0265 * IF MAGNETIC TAPE (3 IN BITS 14-16) IS SELECTED, BITS 11-13 0266 * OF THE A-REGISTER SHOULD BE SET WITH THE PHYSICAL TAPE 0267 * NUMBER FROM WHICH THE PROGRAM WILL BE LOADED. THE TAPE MUST 0268 * BE POSITIONED AT THE BEGINNING OF THE FILE. 0269 * 0270 * DISC INPUT(4 IN BITS 14-16) IS ONLY MEANINGFUL WHEN 0271 * USED IN CONJUNCTION WITH "DOP", PROGRAM NO, 180021000. 0272 * IF DISC INPUT IS SELECTED BY THE USER, LDR-APM 0273 * GIVES CONTROL TO DOP AND DOP ASKS THE USER FOR
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 7

0274 * THE PROGRAM NAME TO BE LOADED(THE PROGRAM NAME 0275 * MUST BE PRESENT IN THE DOP DIRECTORY). THE 0276 * LOADER THEN LOADS THE REQUESTED PROGRAM. 0277 * 0278 * ON THE DDP-416, THE COMPUTER WILL HALT AGAIN. 0279 * SET THE A-REGISTER WITH THE LOCATIUN AT WHICH 0280 * THE CROSS-SECTOR INDIRECT WORD TABLE IS TO BEGIN. IF THE 0281 * A-REGISTER IS CLEAR, A STARTING LOCATION OF '100 WILL BE 0282 * ASSUMED. 0283 * 0284 * 0285 * 4. PRESS 'START'. LOADING WILL PROCEED UNTIL A MESSAGE IS 0286 * TYPED. 0287 * 0288 * 0289 * 0290 * ******************************************************************** 0291 * * LOADER MESSAGES * 0292 * ******************************************************************** 0293 * 0294 * A MESSAGE IS TYPED WHENEVER THE LOADER HALTS FOR ANY REASON. 0295 * AT THIS TAIME THE INPUT DEVICE WILL BE DISPLAYED IN THE A REGISTER, 0296 * UPON SUCH A HALT THE OPERATOR HAS THE FOLLOWING OPTIONS.. 0297 * 0298 * 1. TO BEGIN A FRESH LOAD SET THE PROGRAM COUNTER TO 'XX000 0299 * OR 'XX006, SET THE A AND B REGISTERS AS DESCRIBED ABOVE IN 0300 * LOADER OPERATING PROCEDURE AND PRESS 'START'. THE LOADER 0301 * STATUS IS COMPLETELY RESET BEFORE PROCEEDING. ALL SYMBOL 0302 * AND BASE SECTOR ENTRIES ARE CLEARED. THE PROGRAM AND 0303 * COMMON COUNTERS ARE RESET. 'XX000 INITIALIZE THE LOADER FOR 0304 * 'NORMAL' DESECTORIZING WHILE 'XX006' INITIALIZES IT FOR 0305 * EXTENDED DESECTORIZING. 0306 * 0307 * 2. IF THE TAPE RUNS OUT OF THE TAPE READER 0308 * (BECAUSE OF A MISSING 'END-OF-TAPE' BLOCK), STOP THE 0309 * COMPUTER BY MOMENTARILY PLACING THE CPU IN SINGLE- 0310 * INSTRUCTION MODE, SET THE PROGRAM COUNTER TO 'XX001, 0311 * AND PRESS 'START'. 0312 * 0313 * 3. IF A MEMORY MAP IS DESIRED, SET THE PROGRAM COUNTER TO 0314 * 'XX002 AND PRESS 'START'. 0315 * 0316 * 4. TO CONTINUE LOADING, BUT WITH A NEW ORIGIN, SET THE PROGRAM 0317 * COUNTER TO 'XX003, SET THE A REGISTER TO THE LOCATION WITH 0318 * WHICH LOADING IS TO CONTINUE AND PRESS 'START'. IF THE 0319 * A-REGISTER IS CLEAR, THE ORIGIN WILL REMAIN UNCHANGED. 0320 * 0321 * 5. TO FORCE LOAD THE NEXT SUBPROGRAM (EVEN IF IT HAS NOT 0322 * BEEN CALLED) SET THE PROGRAM COUNTER TO 'XX004, AND 0323 * PRESS 'START'.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 8

0324 * 0325 * 6. TO FORCE EXECUTION TO BEGIN, SET THE PROGRAM COUNTER 0326 * TO 'XX005 AND PRESS 'START'. THE PROGRAM WILL BE ENTERED 0327 * IN EXTENDED MODE (EXA) IF LOADED WITH EXTENDED DESECTORIZING 0328 * AND IN NORMAL MODE (DXA) IF LOADED WITH NORMAL DESECTORIZING 0329 * 0330 * THE MESSAGES ARE.. 0331 * 0332 * LC.. LOADING COMPLETE, A REGISTER NON-ZERO, PRESS START 0333 * TO BEGIN EXECUTION OF PROGRAM LOADED. 0334 * A REGISTER ZERO, PRESS START TO OBTAIN A MEMORY MAP. 0335 * 0336 * MR.. MORE SURPROGRAMS REQUIRED. RESET A REGISTER 0337 * WITH INPUT DEVICE AND PRESS 'START' TO CONTINUE LOADING. 0338 * 0339 * CK.. CHECKSUM ERROR IN LAST BLOCK READ. REPOSITION THE TAPE 0340 * AND PRESS 'START' TO IGNORE THE FAULTY READ AND CONTINUE 0341 * LOADING. 0342 * 0343 * BL.. BLOCK TOO LARGE OR IN IMPROPER FORMAT. REPOSITION THE 0344 * TAPE AND PRESS 'START' TO IGNORE THE FAULTY READ AND 0345 * CONTINUE LOADING. 0346 * 0347 * MO.. MEMORY OVERFLOW. A SUBPRUGRAM BEING LOADED IS ATTEMPTING 0348 * TO OVERWRITE THE LOADER, OR A FORWARD-REFERENCE STRING 0349 * HAS BEEN OVERWRITTEN. PRESS 'START' TO OBTAIN A 0350 * MEMORY MAP. NO RECOVERY IS POSSIBLE FROM THIS ERROR. 0351 * 0352 * IN GENERAL, THE LOADER CANNOT DETECT EITHER ASSEMBLED 0353 * CODE OVERLAYING THE INDIRECT WORD TABLES OR TABLE OVERLAYING 0354 * CODE. IF THE PROGRAMMER DESIRES TO LOAD CODE INTO A BASE 0355 * SECTOR, HE MUST CHECK THE '*BASE' LINE OF THE MEMORY MAP TO 0356 * SEE IF TABLE AND PROGRAM OVERLAP. THE LUADER WILL DETECT 0357 * OVERFLOW OF THE INDIRECT TABLE PAST THE END OF THE BASE 0358 * SECTOR.. IT TAKES AN 'MO' HALT IF SO. 0359 * 0360 * 0361 * 0362 * ******************************************************************** 0363 * * MEMORY MAP * 0364 * ******************************************************************** 0365 * 0366 * 0367 * 0368 * THE MEMORY MAP IS ORGANIZED AS FOLLOWS 0369 * 0370 * *LOW 01000 LOW LOCATION OF THE PROGRAM 0371 * *START 01005 THE START LOCATION OF THE MAIN PROGRAM. 0372 * *HIGH 04372 THE FIRST LOCATION NOT LOADED. 0373 * *NAMES 16014 BOTTOM OF THE LOADER
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 9

0374 * *COMN 07700 THE FIRST LOCATION AVAILABLE FOR COMMON 0375 * *BASE 00364 FIRST LOCATION NOT USED IN BASE SECTOR 0376 * SUB1 04012 ENTRY LOCATION OF SUBPROGRAM. 0377 * .. ... 0378 * SUBX 03266** SUBPROGRAM CALLED BUT NOT LOADED. 0379 * .. ... 0380 * 0381 * NOTES ABOUT MAP.. 0382 * 0383 * 1. UNUSED MEMORY IN THE ABOVE EXAMPLE IS 00364...00777 0384 * AND 04372...16013 AND NO COMMON HAS BEEN USED 0385 * 0386 * 2. AT ANY TIME MEMORY MAP IS BEING PRINTED, IT 0387 * MAY BE TERMINATED BY HALTING THE COMPUTER, 0388 * SET THE PROGRAM COUNTER TO 'XX001 AND PRESS START. 0389 * 0390 * 3. SUBPROGRAMS CALLED BUT NOT LOADED WILL BE FLAGGED WITH 0391 * ASTERISKS IN THE MAP. THE LOCATION SHOWN IS THAT OF ITS MOST 0392 * RECENT CALL, AND PREVIOUS CALLS ARE STRUNG THERETO. 0393 * 0394 * 4. THE BASE SECTOR ENTRY WILL BE MADE ONLY IF CROSS-SECTOR 0395 * REFERENCES WERE MADE, OR IF THE SETB PSEUDE-OPERATION 0396 * WAS USED. IN THE LATTER CASE, THERE MAY BE SEVERAL "*BASE" 0397 * ENTRIES. 0398 * 0399 * 5. THE ADDRESS OF COMN IS CONTAINED IN LOCATION AA000 WHERE 0400 * AA IS THE NEXT TO LAST SECTOR OF THE LOADER. 0401 * 0402 * 0403 * ******************************************************************** 0404 * * BINARY INPUT FORMAT * 0405 * ******************************************************************** 0406 * 0407 * EACH INPUT BLOCK IS COMPOSED OF A START CHARACTER (201), 0408 * FOLLOWED BY A VARIABLE LENGTH SEQUENCE OF 16-BIT WORDS 0409 * PUNCHED IN THE INVISIBLE FORMAT, THE LAST OF WHICH IS A 16-BIT 0410 * ERA CHECKSUM, FOLLOWED BY AN X/OFF (223) AND A RUBOUT (377). 0411 * 0412 * AN INPUT OF AN END CHARACTER (203) FOLLOWED BY AN X-OFF 0413 * (223) IS CONSIDERED AN END-OF-TAPE MARK. A SURBPROGRAM MAY NOT BE 0414 * SPLIT BETWEEN TAPES. 0415 * 0416 * THERE ARE EIGHT TYPES OF BLOCKS IDENTIFIED BY-BITS 1...4 OF 0417 * THE FIRST WORD OF THE BLOCK. IN ADDITION BLOCK TYPE 0 IS FURTHER 0418 * SUBDIVIDED BY BITS 5...10 OF THE FIRST WORD. 0419 * 0420 * BLOCK TYPE 0-0.. SUBPROGRAM NAME BLOCK. 0421 * 0422 * 0000000000000000 (000000) 0423 * 00NNNNNN00000000
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 10

0424 * AAAAAAAABBBBBBBB 0425 * CCCCCCCCDDDDDDDD 0426 * EEEE........QQQQ 0427 * ZZZZZZZZZZZZZZZZ 0428 * 0429 * N = NUMBER OF 16-BIT WORDS IN THE BLOCK, INCLUDING CONTROL 0430 * WORDS AND CHECKSUM. 0431 * A = FIRST CHARACTER OF THE FIRST ENTRY POINT NAME OF THIS 0432 * SUBPROGRAM IN ASCII. 0433 * B = SECOND CHARACTER OF THE FIRST ENTRY POINT NAME OF THIS 0434 * SUBPROGRAM. 0435 * ... 0436 * Q = SIXTH CHARACTER OF THE LAST ENTRY POINT NAME OF THIS 0437 * SUBPROGRAM. 0438 * Z = 16-BIT ERA CHECKSUM OF ALL THE 16-BIT WORDS IN THIS BLOCK 0439 * EXCEPT THE CHECKSUM ITSELF. 0440 * 0441 * THE PROGRAM BREAK WILL BE SET SO THAT THE NEXT 0442 * SUBPROGRAM LOADS STARTING IN AN EVEN LOCATION. IF ANY OF THE 0443 * SUBPROGRAM NAMES OF THE BLOCK HAVE REEN CALLED BY PREVIOUSLY 0444 * LOADED PROGRAMS, THE FOLLOWING SUBPROGRAM WILL BE LOADED, OTHERWISE 0445 * IT WILL BE SKIPPED. 0446 * ENTRY POINT NAMES ARE SIX CHARACTERS, LEFT-JUSTIFIED, AND 0447 * FILLED WITH BLANKS (240). 0448 * 0449 * BLOCK TYPES 0-1, 0-2, AND 0-3.. SPECIAL ACTION BLOCKS. 0450 * 0451 * 00000000NN000000 0452 * ---------------- 0453 * ZZZZZZZZZZZZZZZZ 0454 * 0455 * N = 1.. TURN OFF NON-LOAD FLAG (FORCE LOADING OF NEXT 0456 * SUBPROGRAM). 0457 * = 2.. TURN ON CHAIN FLAG (USE WITH FORTRAN). 0458 * = 3.. END-OF-JOB (CAUSE BY $0 OR $3 IN FORTRAN). 0459 * --- = IGNORED, BUT INCLUDED IN CHECKSUM. 0460 * Z = CHECKSUM, 0461 * 0462 * BLOCK TYPE 0-4.. DATA BLOCK. 0463 * 0464 * 0000000100000000 (000400) 0465 * 00NNNNNN00000000 0466 * OLLLLLLLLLLLLLLL 0467 * AAAAAAAAAAAAAAAA 0468 * AAAAAAAABBBBBBBB 0469 * BBBBBBBBBBBBBBBB 0470 * CCCC........QQQQ 0471 * ZZZZZZZZZZZZZZZZ 0472 * 0473 * N = NUMBER OF WORDS IN THIS BLOCK.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 11

0474 * L = 15-BIT LOCATION INTO WHICH THE FIRST DATA WORD OF 0475 * THIS BLOCK IS TO BE LOADED. SUCCESSIVE WORDS ARE 0476 * PLACED IN L+1, L+2, ETC. 0477 * THIS LOCATION IS TAKEN AS ABSOLUTE OR RELOCATABLE 0478 * ACCORDING TO THE CURRENT LOAD MODE (SEE BLOCK TYPES 0479 * O-24 AND 0-30). 0480 * A = FIRST DATA WORD IN 24-BIT FORMAT. 0481 * B = SECOND DATA WORD. 0482 * ... 0483 * Z = CHECKSUM. 0484 * 0485 * EACH 24-81T DATA WORD IS IN ONE OF THE FOLLOWING FORMATS.. 0486 * 0487 * GGGGGGGGGGGGGGGG-----000 DATA OR GENERIC. 0488 * FTIIII-MKKKKKKKKKKKKK010 FORWARD 9-BIT. 0489 * FT-RRVVVVVVVVVVVVVVVV100 KNOWN DAC. 0490 * FT-----MKKKKKKKKKKKKK110 FORWARD DAC. 0491 * FTIIIIVVVVVVVVVVVVVVVRR1 KNOWN 9-BIT. 0492 * 0493 * F = INDIRECT FLAG. 0494 * T = TAG. 0495 * I = INSTRUCTION. 0496 * V = 15- OR 16-BIT ADDRESS. 0497 * R = RELOCATION BITS. 00 = ABSOLUTE, 0498 * 01 = POSITIVELY RELOCATABLE. 0499 * 11 = NEGATIVELY RELOCATABLE. 0500 * G = 16-BIT UNMODIFIED DATA, GENERIC, OR SHIFT. 0501 * K = SYMBOL NUMBER. 0502 * M = 0.. THIS IS THE LAST SYMBOL NUMBER ASSOCIATED 0503 * WITH THE ADDRESS. 0504 * = 1.. THE FOLLOWING SYMBOL NUMBER IS ALSO 0505 * ASSOCIATED WITH THIS ADDRESS. THE FOLLOWING 0506 * SYMBOL NUMBER MAY APPEAR IN THE NEXT DATA BLOCK 0507 * IF THE CURRENT WORD IS THE LAST WORD OF THE 0508 * CURRENT DATA BLOCK. THE FOLLOWING DATA WORD 0509 * WILL BE IN THE FORMAT.. 0510 * 0511 * -------MKKKKKKKKKKKKK--- 0512 * 0513 * KNOWN DAC.. ADDRESS KNOWN. DO NOT DESECTOR. 0514 * KNOWN 9-BIT.. ADDRESS KNOWN. DESECTOR. 0515 * FORWARD DAC.. SYMBOLIC ADDRESS, NOT TO BE DESECTORED 0516 * WHEN ADDRESS BECOMES KNOWN. UNIQUE SYMBOL 0517 * NUMBERS WILL BE ASSIGNED TO INSTANCES OF 0518 * THIS TYPE SO THAT THE REFERENCES TO THIS 0519 * SYMBOL NEED NOT BE STRUNG BY THE LOADER. 0520 * FORWARD 9-BIT.. SYMBOLIC ADDRESS, TO RE DESECTORED WHEN 0521 * ADDRESS BECOMES KNOWN. 0522 * 0523 * NOTE ON DAC.. IN DAP-16, THE DAC PSEUDO-OPERATION
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 12

0524 * GENERATES A 16 BIT CONSTANT. THE LOADER TRUNCATES 0525 * THIS CONSTANT TO 14 BITS IF IN THE LXD MODE, 15 0526 * BITS IF IN THE EXD MODE, OR DOES NOT TRUNCATE IT IF 0527 * ABSOLUTE OR NEGATIVELY RELOCATED, THE LOADER MERGES THE 0528 * FLAG AND TAG BITS WITH THE ADDRESS CONSTANT, IGNORING THE 0529 * TAG IF IN EXTENDED DESECTORIZING. 0530 * 0531 * BLOCK TYPE 0-10.. SYMBOL NUMBER DEFINITION BLOCK. 0532 * 0533 * 0000001000000000 (001000) 0534 * 00NNNNNN00000000 0535 * CRRKKKKKKKKKKKKK 0536 * VVVVVVVVVVVVVVVV 0537 * CRRKKKKKKKKKKKKK 0538 * VVVVVVVVVVVVVVVV 0539 * ................ 0540 * ZZZZZZZZZZZZZZZZ 0541 * 0542 * N = NUMBER OF WORDS IN THIS BLOCK. 0543 * C = 1.. THERE MAY HAVE BEEN MORE THAN ONE 0544 * REFERENCE TO THIS SYMBOL. 0545 * 0.. THIS SYMBOL HAS OCCURRED IN ONLY ONE REFERENCE. 0546 * R = RELOCATION BITS, 00 = ABSOLUTE. 0547 * 01 = POSITIVELY RELOCATABLE. 0548 * 11 = NEGATIVELY RELOCATABLE. 0549 * K = 13-BIT SYMBOL NUMBER. 0550 * V = 16-BIT VALUE OF THIS SYMBOL (MAY BE NEGATIVE). 0551 * Z = CHECKSUM. 0552 * 0553 * BLOCK TYPE 0-14.. END BLOCK. 0554 * 0555 * 0000001100000000 (001400) 0556 * 00NNNNNN00000000 (002000) 0557 * 0LLLLLLLLLLLLLLL 0558 * ZZZZZZZZZZZZZZZZ 0559 * 0560 * N = NUMBER OF WORDS IN THIS BLUCK (ALWAYS 4). 0561 * L = 0 IF THIS IS THE END OF A SUBPROGRAM, 0562 * = 15-BIT STARTING LOCATION IF THIS IS THE END OF 0563 * A MAIN PROGRAM. 0564 * THIS LOCATION IS TAKEN AS ABSOLUTE OR RELOCATABLE 0565 * ACCORDING TO THE CURRENT LOAD MODE (SEE BLOCK TYPES 0566 * 0-24 AND 0-30). 0567 * Z = CHECKSUM. 0568 * 0569 * THIS IS THE END OF THIS SUBPROGRAM. 0570 * 0571 * BLOCK TYPE 0-20.. ILLEGAL. USED INTERNALLY BY DAP-16. 0572 * 0573 * BLOCK TYPE 0-24.. RELOCATABLE MODE BLOCK.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 13

0574 * 0575 * 0000010100000000 (002400) 0576 * 00NNNNNN00000000 (001400) 0577 * ZZZZZZZZZZZZZZZZ (003000) 0578 * 0579 * N = NUMBER OF WORDS IN THIS BLOCK (ALWAYS 3). 0580 * Z = CHECKSUM 0581 * 0582 * SET THE LOAD MODE TO RELOCATABLE. ABSOLUTE IS THE ASSUMED 0583 * MODE, AND THE LOADER WILL RETURN TO THE ABSOLUTE MODE AT THE END 0584 * OF THE CURRENT SUBPROGRAM. 0585 * 0586 * BLOCK TYPE 0-30.. ABSOLUTE MODE BLOCK. 0587 * 0588 * 0000011000000000 (003000) 0589 * 00NNNNNN00000000 (001400) 0590 * ZZZZZZZZZZZZZZZZ (002400) 0591 * 0592 * N = NUMBER OF WORDS IN THIS BLOCK (ALWAYS 3). 0593 * Z = CHECKSUM. 0594 * 0595 * SET THE LOAD MODE TO ABSOLUTE. ABSOLUTE IS THE ASSUMED MODE. 0596 * 0597 * BLOCK TYPES 0-34 AND 0-40.. ILLEGAL. USED INTERNALLY BY DAP-16. 0598 * 0599 * BLOCK TYPE 0-44.. SUBPROGRAM CALL BLOCK. 0600 * 0601 * 0000100100000000 (004400) 0602 * 00NNNNNN00000000 (003400) 0603 * AAAAAAAABBBBBBBB 0604 * CCCCCCCCDDDDDDDD 0605 * EEEEEEEEFFFFFFFF 0606 * 000000000000000P 0607 * ZZZZZZZZZZZZZZZZ 0608 * 0609 * N = NUMBER OF WORDS IN THIS BLOCK (ALWAYS 7). 0610 * A = FIRST CHARACTER OF ENTRY POINT NAME IN ASCII. 0611 * B = SECOND CHARACTER OF ENTRY POINT NAME. 0612 * ... 0613 * F = SIXTH CHARACTER OF ENTRY POINT NAME. 0614 * P = 0.. PREVIOUS DATA WORD IS A NINE-BIT MEMORY REFERENCE. 0615 * 1.. PREVIOUS DATA WORD IS A DAC. 0616 * Z = CHECKSUM. 0617 * 0618 * THE LAST DATA WORD LOADED FROM THE PRECEDING DATA BLOCK IS 0619 * A REFERENCE TO THIS ENTRY POINT NAME (AND IT WAS LOADED WITH AN 0620 * ADDRESS OF ABSOLUTE ZERO). ENTRY POINT NAMES ARE SIX CHARAC- 0621 * TERS, LEFT-JUSTIFIED, AND FILLED WITH BLANKS (240). ONLY ONE NAME 0622 * WILL BE FOUND IN A SUBPROGRAM CALL BLOCK. 0623 *
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 14

0624 * BLOCK TYPE 0-50.. SUBPROGRAM ENTRY POINT DEFINITION BLOCK, 0625 * 0626 * 0000101000000000 (005000) 0627 * 00NNNNNN00000000 0628 * AAAAAAAABBBBBBBB 0629 * CCCCCCCCDDDDDDDD 0630 * EEEE........QQQQ 0631 * ZZZZZZZZZZZZZZZZ 0632 * 0633 * N = NUMBER OF WORDS IN THIS BLOCK. 0634 * A = FIRST CHARACTER OF THE FIRST NAME FOR THIS ENTRY POINT 0635 * IN ASCII. 0636 * B = SECOND CHARACTER OF THE FIRST NAME FOR THIS ENTRY POINT. 0637 * ... 0638 * Q = SIXTH CHARACTER OF THE LAST NAME FOR THIS ENTRY POINT. 0639 * Z = CHECKSUM 0640 * 0641 * THE CURRENT VALUE OF THE LOADER LOCATION COUNTER HAS 0642 * THE INDICATED ENTRY POINT NAMES ASSOCIATED WITH IT. IT MAY HAVE 0643 * MORE THAN ONE NAME. 0644 * 0645 * BLOCK TYPE 0-54.. ENTER EXTENDED-MEMORY-MODE DESECTORING. 0646 * 0647 * 0000101100000000 (005400) 0648 * 00NNNNNN00000000 (001400) 0649 * ZZZZZZZZZZZZZZZZ (004000) 0650 * 0651 * N = NUMBER OF WORDS IN THIS BLOCK (ALWAYS 3). 0652 * Z = CHECKSUM. 0653 * 0654 * IN THE EXTEND-MODE OF DESECTORING, INDIRECT WORDS CONSIST 0655 * OF THE OBJECT WORD'S FLAG AND 15-BIT ADDRESS. THE OBJECT WORD 0656 * IS ENTERED WITH FLAG SET AND TAG UNCHANGED. 0657 * 0658 * BLOCK TYPE 0-60.. LEAVE EXTENDED-MEMORY-MODE DESECTORING. 0659 * 0660 * 0000110000000000 (006000) 0661 * 00NNNNNN00000000 (001400) 0662 * ZZZZZZZZZZZZZZZZ (007400) 0663 * 0664 * N = NUMBER OF WORDS IN THIS BLOCK (ALWAYS 3). 0665 * Z = CHECKSUM. 0666 * 0667 * OUT OF THE EXTEND-MODE OF DESECTORING, INDIRECT WORDS 0668 * CONSIST OF THE OBJECT WORD'S FLAG, TAG, AND 14-BIT ADDRESS. 0669 * THE OBJECT WORD IS ENTERED WITH FLAG SET AND TAG RESET. THE 0670 * DDP-516 INSTRUCTION 'LOAD INDEX' (LDX) IS AN EXCEPTION.. THE 0671 * TAG OF THE INDIRECT WORD WILL BE ZERO AND THE TAG OF THE OBJECT 0672 * WORD WILL REMAIN SET. 0673 *
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 15

0674 * THE LOADER IS INITIALLY NOT IN EXTENDED DESECTORIZING IF THE LOADER 0675 * IS STARTED AT 'XX000. IT IS INITIALLY IN EXTENDED DESECTORIZING 0676 * IF THE LOADER IS STARTED AT 'XX006. THE EXTEND- 0677 * MODE IS NOT ALTERED AT THE END OF THE CURRENT SUBPROGRAM. 0678 * 0679 * BLOCK TYPE 0-64.. SET BASE SECTOR. 0680 * 0681 * 0000110100000000 (006400) 0682 * 00NNNNNN00000000 (002000) 0683 * RLLLLLLLLLLLLLLL 0684 * ZZZZZZZZZZZZZZZZ 0685 * 0686 * N = NUMBER OF WORDS IN THIS BLOCK (ALWAYS 4). 0687 * L = 15-BIT LOCATION AT WHICH THE CROSS-SECTOR INDIRECT 0688 * WORD TABLE IS TO BEGIN. 0689 * R = 0.. LOCATION IS ABSOLUTE. 0690 * = 1.. LOCATION IS RELOCATABLE. 0691 * Z = CHECKSUM 0692 * 0693 * THE OCCURENCE OF THE FIRST 'SETB' PSEUDO-OPERATION FOR 0694 * EACH BASE SECTOR DETERMINES THE LOCATION WITH WHICH THE INDIRECT 0695 * WORD TABLE WILL BEGIN IN THAT SECTOR. THE TABLE THEN GROWS 0696 * UPWARD IN SUCCESSIVELY HIGHER LOCATIONS. 'SETB' PSEUDO-OPERATIONS 0697 * REFERENCING A SECTOR WHICH HAS BEEN PREVIOUSLY USED AS A BASE 0698 * SECTOR DO NOT RE-ORIGIN THE TABLE FOR THAT SECTOR--THE TABLE 0699 * FILLING IS RESUMED WHERE IT LEFT OFF. THE B-REGISTER SETTING 0700 * AT THE START OF THE LOAD IS TREATED EXACTLY LIKE A 'SETB' 0701 * PSEUDO-OPERATION WHICH PRECEEDS THE FIRST WORD TO BE LOADED. 0702 * 0703 * THE DEFAULT VALUE OF THE BASE SECTOR IS '00100, AT THE 0704 * INITIALIZATION OF THE LOADER. THE LOADER WILL RETAIN KNOWLEDGE 0705 * OF THE LAST LOCATION USED IN EACH BASE SECTOR. THE BASE SECTOR 0706 * IS NOT ALTERED AT THE END OF THE CURRENT SUBPROGRAM. 0707 * 0708 * BLOCK TYPES 0-70 AND 0-74.. NOT ASSIGNED. 0709 * 0710 * BLOCK TYPE 1 (ABSOLUTE PROGRAM WORDS) 0711 * BLOCK TYPE 2 (RELATIVE PROGRAMS WORDS) 0712 * 0713 * CCCCNNNNNNAAAAAA 0714 * AAAAAAAA11111111 0715 * 1111111111111111 0716 * 2222222222222222 0717 * 2222222233333333 0718 * 3333333333333333 0719 * 444.......KKKKKK 0720 * ZZZZZZZZZZZZZZZZ 0721 * 0722 * C=1=STARTING ADDRESS IS ABSOLUTE 0723 * 2=STARTING ADDRESS IS RELATIVE
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 16

0724 * N=NO. OF 16-BIT WORDS IN THIS BLOCK (INCLUDING CHECKSUM) 0725 * A=ADDRESS WHERE THE FIRST DATA WORD IN THIS BLOCK IS TO 0726 * BE STORED. ALL OTHER DATA WORDS ARE STORED 0727 * SEQUENTIALLY. 0728 * 1=FIRST DATA WORD 0729 * 2...K=OTHER DATA WORDS 0730 * Z=16-BIT CHECKSUM 0731 * 0732 * EACH DATA WORD IS 24 BITS LONG AND HAS ONE OF THE 0733 * FOLLOWING FORMATS..... 0734 * 0735 * GGGGGGGGGGGGGGGG00000000 0736 * OR 0737 * FTIIIIAAAAAAAAAAAAAA0D01 0738 * OR 0739 * FTIIIIBBBBBBBBBBBBBB0D10 0740 * OR 0741 * FTIIIICCCCCCCCCCCCCC0D11 0742 * OR 0743 * 111111VVVVVVVVVVVVVV0100 0744 * OR 0745 * OOOOEEEEEEEEEEEEEEEE1000 0746 * 0747 * G=UNMODIFIED DATA OR GENERIC INSTRUCTION 0748 * F=INDIRECT FLAG 0749 * T=INDEX TAG 0750 * I=INSTRUCTION CODE 0751 * A=INSTRUCTION'S ABSOLUTE ADDRESS 0752 * B=INSTRUCTION'S RELATIVE ADDRESS 0753 * C=INSTRUCTION'S COMPLEMENTED RELATIVE ADDRESS 0754 * D=0=9-BIT ADDRESS. 0755 * D=1=14-BIT ADDRESS (DAC). 0756 * E=16 BIT VALUE TO WHICH THE RELOCATION IS TO BE ADDED 0757 * V=RELATIVE ADDRESS OF THE LAST OF A STRING OF INSTRUCTIONS 0758 * WHICH ARE TO HAVE THE CURRENT LOCATION FILLED IN AS 0759 * THEIR ADDRESSES. THE STRING MAY CONTAIN DACS (WHICH 0760 * ARE TO ACCEPT A FULL 14-BIT ADDRESS), WHICH ARE 0761 * DISTINGUISHED FROM NINE-BITS BY HAVING AN OPERATION- 0762 * CODE OF ZERO. THE DACS IN THE STRING MUST BE STRUNG 0763 * IN THE SAME MANNER AS NINE-BITS. NO INSTRUCTION 0764 * IN A STRING MAY HAVE BEEN DESECTORED INTO A BASE SECTOR 0765 * OTHER THAN THE BASE SECTOR IN EFFECT AT THE TIME THE 0766 * STRING VALUE IS DEFINED. NO ERROR INDICATION CAN BE 0767 * GIVEN IF THIS RESTRICTION IS VIOLATED AND THE RESULTS 0768 * ARE UNPREDICTABLE. SINCE THE DDP-116 FORTRAN IV 0769 * COMPILER DOES NOT EMIT 'SETB' BLOCKS, THIS NEED NOT 0770 * NORMALLY BE OF CONCERN. 0771 * 0772 * THE LOADER WILL REDUCE ADDRESS TYPES A,B, OR C TO THE 0773 * PROPER 9 BIT FORM (EXCEPT FOR DAC) MAKING ANY NECESSARY
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 17

0774 * INDIRECT REFERENCE ASSIGNMENTS AUTOMATICALLY. 0775 * 0776 * 0777 * BLOCK TYPE 3 (ABSOLUTE END JUMP) 0778 * BLOCK TYPE 4 (RELATIVE END JUMP) 0779 * 0780 * CCCC000000AAAAAA 0781 * AAAAAAAA-------- 0782 * ---------------- 0783 * ZZZZZZZZZZZZZZZZ 0784 * 0785 * C=3=TRANSFER ADDRESS 1S ABSOLUTE 0786 * 4=TRANSFER ADDRESS IS RELATIVE 0787 * A=TRANSFER ADDRESS (PROGRAM'S ENTRY LOCATION) 0788 * Z=CHECKSUM 0789 * 0790 * 0791 * BLOCK TYPE 5 (SUBROUTINE CALL) 0792 * BLOCK TYPE 7 (REFERENCE TO ITEM IN COMMON) 0793 * 0794 * CCCCFTIIIIAAAAAA 0795 * AAAAAAAA11111111 0796 * 2222222233333333 0797 * 4444444455555555 0798 * 66666666-------- 0799 * ---------------- 0800 * ZZZZZZZZZZZZZZZZ 0801 * 0802 * C=5=SUBROUTINE CALL 0803 * 7=REFERENCE TO ITEM IN COMMON 0804 * F=INDIRECT ADDRESS FLAG 0805 * T=INDEX TAG 0806 * I=INSTRUCTION (IF C=5, INST.=JST*) 0807 * IF C=7 AND INST=0000, THIS REFERENCE IS A DAC AND 0808 * IS NOT TO RE DESECTORED. 0809 * A=INSTRUCTION'S ADRESS (IF C=5, ADDR.=0) 0810 * (IF C7, ADDR. IS RELATIVE TO COMMON BASE) 0811 * 1=SURROUTINE OR COMMON NAME'S FIRST CHAR. 0812 * 2=SECOND CHAR (OR SPACE) 0813 * 3...6=OTHER CHAR. (OR SPACES) 0814 * Z=CHECKSUM 0815 * 0816 * BLOCK TYPE 6 (SUBROUTINE OR COMMON BLOCK DEFINITION) 0817 * 0818 * 0110000000AAAAAA 0819 * AAAAAAAA11111111 0820 * 2222222233333333 0821 * 4444444455555555 0822 * 66666666SS------ 0823 * ----------------
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 18

0824 * ZZZZZZZZZZZZZZZZ 0825 * 0826 * A=ENTRY POINT RELATIVE TO BEGINNING OF SUBRUUTINE 0827 * (IF S=0 OR 2), OR SIZE OF COMMON BLOCK (IF S=1 OR 3). 0828 * 1=FIRST LETTER OF SUBR. OR COMMON BLOCK NAME 0829 * 2...6=OTHER NAME CHARACTERS (OR SPACES) 0830 * S=O=SUBROUTINE DEFINITION 0831 * 1=COMMON RLOCK DEFINITION. 0832 * 2=SUBROUTINE DEFINITION. 0833 * 3=DATA STORAGE INTO COMMON FOLLOWS THIS BLOCK 0834 * Z=CHECKSUM 0835 * 0836 * A 'BLOCK DATA' BLOCK (S=3) MUST HAVE A=0 AND 0837 * ITS NAME MUST HAVE BEEN PREVIOUSLY DEFINED (BY A BLOCK 0838 * WHICH HAS S=1). 0839 * 0840 * 0841 * 0842 * ********************************************************************** 0843 * * RESTRICTIONS * 0844 * ********************************************************************** 0845 * 0846 * 1. THE LOADER ASSIGNS ALL COMMON BLOCKS STARTING AT 'XX700 0847 * DOWNWARD. IF A 'BLOCK DATA' SUBPROGRAM IS PRESENT THAT WILL 0848 * STORE DATA INTO COMMON, IT IS POSSIBLE THAT THIS DATA WILL 0849 * ATTEMPT TO OVERWRITE THE LOADER AND AN 'MO' MESSAGE 0850 * WILL BE TYPED. TO PREVENT THIS, THE QUANTITY IN SYMBOLIC 0851 * LOCATION 'FIL7' ('2000 REL) SHOULD BE RAISED OR LOWERED TO 0852 * AVOID THE LOADER. 0853 * 0854 * 2. THE DAP-116 OPTION 'SECT' IS NOT SUPPORTED, SUCH SUB- 0855 * PROGRAMS WILL BE DESECTORED NORMALLY. 0856 * 0857 * 3. ON COMPUTERS WITHOUT THE MEMORY LOCKOUT OPTINN, THE CROSS- 0858 * SECTOR INDIRECT WORD TABLE MUST BE LOCATED IN SECTOR ZERO. 0859 * OR WITHIN THE CURRENT SECTOR BEING LOADED. 0860 * ON COMPUTERS WITH THE MEMORY LOCKOUT OPTION, THE TABLE MAY 0861 * BE IN ANY SECTOR, AND ITS LOCATION MAY BE CHANGED DURING 0862 * THE LOAD BY OCCURRENCES OF THE DAP-16 PSEUDO-OPERATION 'SET 0863 * BASE SECTOR' (SETB). IF THE PROGRAM LOAD DOES NOT INCLUDE 0864 * A 'SET BASE SECTOR' PSEUDO=OPERATION PRIOR TO THE FIRST 0865 * INSTRUCTION WHICH WILL REQUIRE DESECTORING, THE PROGRAMMER 0866 * MUST DIRECT THE LOADER TO SELECT THE PROPER SECTOR 0867 * INITIALLY, FORTRAN COMPILED PROGRAMS MAY NOT USE 0868 * LOCATION ZERO OF A BASE SECTOR FOR AN INDIRECT WORD IN 0869 * A STRING. THIS ERROR CANNOT BE DETECTED, AND WILL RESULT 0870 * IN PREMATURE TRUNCATION OF THE STRING. 0871 * 0872 * 4. IN GENERAL, THE LOADER CANNOT DETECT EITHER ASSEMBLED CODE 0873 * OVERLAYING THE INDIRECT WORD TABLES OR TABLE OVERLAYING
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 19

0874 * CODE. IF THE PROGRAMMFR DESIRES TO LOAD CODE INTO A BASE 0875 * SECTOR, HE MUST CHECK THE '*BASE' LINE OF THE MEMORY MAP TO 0876 * SEE IF TABLE AND PROGRAM OVERLAP. 0877 * 0878 * 5. THE LOADER IS NORMALLY LOADED TO OCCUPY THE LAST 0879 * FOUR SECTURS OF MEMORY (FIVE SECTORS IF MAGNETIC TAPE AND/OR 0880 * CARD COMPATIBILITY REQUIRED.) HOWEVER, IT CAN BE LOADED 0881 * WITH LOWER ORIGIN TO GIVE UPPER LOADING CAPABILITY. 0882 * SINCE NO PROGRAM MAY BE LOADED ABOVE COMMON, THE COMMON 0883 * ORIGIN (SYMBOLIC LOCATION "FIL7") (XX000+2000) SHOULD 0884 * BE RAISED WHEN THIS 1S DONE. 0885 * 0886 * 6. A SUBPROGRAM MAY NOT BE SPLIT BETWEEN TAPES, 0887 * 0888 * 7. IN A STRING OF INSTRUCTIONS GENERATED BY THE DDP-116 FORTRAN 0889 * IV COMPILER, NO INSTRUCTION IN THE STRING MAY HAVE BEEN 0890 * DESECTORED INTO A BASE SECTOR OTHER THAN THE BASE SECTOR 0891 * IN EFFECT WHEN THE STRING VALUE IS ENCOUNTERED. NO ERROR 0892 * INDICATION WILL BE GIVEN IF THIS RESTRICTION IS VIOLATED, AND 0893 * THE RESULT IS UNPREDICTABLE. 0894 * 0895 * 8. COMMON MAY NOT BE USED BEFORE IT IS DEFINED. 0896 * 0897 * 9. SUBPROGRAM CALLS ARE NOT NECESSARILY DESECTORED. IF THE 0898 * SUBPROGRAM ENTRY POINT IS IN THE SAME SECTOR AS THE CALL, 0899 * THE CALL WILL BE LINKED DIRECTLY TO IT, AND NO INDIRECT 0900 * WORD WILL BE CREATED IN THE BASE SECTOR. 0901 * 0902 * 10. FORTRAN COMPILED PROGRAMS MAY NOT STRING INTO CODE IN 0903 * A BASE SECTOR. THIS ERROR CANNOT BE DETECTED, AND IF IT 0904 * OCCURS, THE RESULT IS UNPREDICTABLE. 0905 * 0906 * 0907 * 0908 * 0909 * 0910 * 0911 * 0912 * 0913 * 0914 * 0915 * 0916 ********************************************************************** 0917 EXD ENTER EXTENDED ADDRESSING 0918 * 0919 SUBR INHALT,HHHT LOCATION OF INPUT DEVICE HALT 0920 * 0921 REL RELOCATE ONLY IN UNITS OF SECTORS. 0922 000000 ORG EQU * MAXIMUM ORIGIN FOR THIS LOADER IS '74000. 0923 00000 BSS '50 SYMBOL TABLE AREA
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 20

0924 * 0925 * 0926 * 0927 000042 BOT EQU *-6 GERM OF SYMBOL TABLE. 0928 * 0929 * 0930 * 0931 SETB STBO DESECTOR IN CURRENT SECTOR. . 0932 * 0933 * 0934 * 0935 * ********************************************************************** 0936 * * INPUT/OUTPUT ROUTINES * 0937 * ********************************************************************** 0938 * 0939 * 0940 * 0941 * JST R1K READ ONE BLOCK PLACE IT IN "BUFF" ... "BUFF+59". 0942 * CHECKS CHECKSUM AND BLOCK LENGTH. LOCATION 'R1KN' 0943 * WILL CONTAIN WORD COUNT MINUS SIXTY. 0944 * CONTROL JUMPS TO LOCATION 'EOT' IF END-OF-TAPE BLOCK 0945 * ENCOUNTERED (203,223). 0946 * 0947 00050 0 003700 DAC BUFF R1K-1 POINTER TO INPUT BUFFER. 0948 * 0949 00051 0 000000 R1K DAC ** R1K+O HERE TO READ BLOCK. 0950 00052 0 02 00050 LDA R1K-1 +1 SET UP POINTER TO FIRST LOCATION 0951 00053 0 04 03673 STA T +2 IN THE INPUT BUFFER. 0952 00054 0 02 00714 LDA ='177704 +3 SET THE BUFFER COUNT TO -60. 0953 00055 0 04 00660 STA R1KN +4 0954 00056 140040 CRA +5 INITIALIZE THE CHECKSUM. 0955 00057 0 04 03674 STA T+1 +6 C(T+1) = CHECKSUM. 0956 * SKIP BLANK TAPE LOOP. 0957 00060 -0 10 00662 MRIK JST* SW TEST DEVICE SWITCH 0958 00061 0 05 00713 ERA ='000203 +8 IS IT 'ETX'.Q 0959 00062 101040 SNZ +9 SKIP IF NOT. 0960 00063 0 01 03031 JMP EOT +10 YES. GO SERVICE END-OF-TAPE CUNDITION. 0961 00064 0 05 00712 ERA ='000002 +11 NO, IS IT 'SOH' (201).Q 0962 00065 100040 SZE +12 SKIP IF SO. 0963 00066 0 01 00060 JMP R1K+7 +13 NO. CONTINUE HUNT FOR GOOD TAPE. 0964 * OK. READ WORDS OF BLOCK. 0965 00067 140040 CRA R1K+14 HERE TO READ NEXT WORD. 0966 00070 0 10 00104 JST R1K+27 +15 READ AND TRANSLATE ONE CHARACTER. 0967 00071 0 10 00104 JST R1K+27 +16 READ AND TRANSLATE ANOTHER CHARACTER. 0968 00072 0 10 00104 JST R1K+27 +17 READ AND TRANSLATE STILL ANOTHER. 0969 00073 -0 04 03673 STA* T +18 PLACE TOTAL WORD IN BUFFER. 0970 00074 0 05 03674 ERA T+1 +19 INCLUDE IT IN CHECKSUM. 0971 00075 0 04 03674 STA T+1 +20 UPDATE CHECKSUM. 0972 00076 0 12 03673 IRS T +21 INCREMENT BUFFER POINTER. 0973 00077 0 12 00660 IRS R1KN +22 INCREMENT BUFFER COUNT.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 21

0974 00100 0 01 00067 JMP R1K+14 +23 GO READ NEXT WORD. 0975 00101 0 02 00711 LDA ='141314 (BL)+24 OOPS, BLOCK LENGTH OVERFLOW. 0976 00102 0 10 00272 JST TYER +25 GRIPE TO USER. BAD BLOCK. 0977 00103 0 01 00052 JMP R1K+1 +26 ON RESTART, TRY AGAIN FROM THE TOP. 0978 * 0979 00104 0 000000 DAC ** R1K+27 HERE TO READ AND TRANSLATE ONE CHARACTER. 0980 00105 0415 72 ALS 6 +28 POSITION PREVIOUS CHARACTERS. 0981 00106 0 04 03675 STA T+2 +29 SAVE THEM AWAY WHILE WE GET NEXT ONE. 0982 00107 0 10 00157 JST R1K+70 +30 READ RAW CODE FROM TAPE. 0983 00110 0 07 00710 SUB ='000223 +31 IS IT AN 'X-OFF' CHARACTER.Q 0984 00111 101040 SNZ +32 SKIP IF NOT. 0985 00112 0 01 00151 JMP R1K+64 +33 YES. END OF BLOCK. GO CHECK CHECKSUM. 0986 00113 0 06 00710 ADD ='000223 +34 NO. RESTORE CODE. 0987 00114 0406 71 ARR 7 +35 SHIFT CODE BIT 2 TO A-REGISTER SIGN BIT. 0988 00115 100400 SPL +36 IF BIT 2 IS NOT ZERO, 0989 00116 0 01 00125 JMP R1K+44 +37 GO TRANSLATE IT. 0990 00117 0406 77 ARR 1 +38 OTHERWISE. MOVE CODE BIT 1 T0 SIGN. 0991 00120 100400 SPL +39 IF IT IS A ONE, 0992 00121 0 05 00707 ERA ='120000 +40 FLIP IT AND BIT 3. 0993 00122 0405 70 ARS 8 +41 REPOSITION CHARACTER CORRECTLY. 0994 00123 0 06 03675 ADD T+2 R1K+42 COMBINE WITH PREVIOUS CHARACTERS. 0995 00124 -0 01 00104 JMP* R1K+27 +43 RETURN TO CALLER OF 'R1K+27'. 0996 * 0997 00125 0415 76 ALS 2 R1K+44 HERE FOR FUDGING FUNNY CODES. 0998 00126 0 06 00706 ADD ='000034 +45 MOVE HIGH BIT OVER TO BIT 11. 0999 00127 0 03 00705 ANA ='177740 +46 MASK OUT BITS 12...16. 1000 00130 0 04 03676 STA T+3 +47 SAVE HIGH ORDER INFO. 1001 00131 0404 65 LGR 11 +48 NOW WORK ON LOW ORDER FIVE. 1002 00132 0 07 00704 SUB ='000037 +49 IF CODE IS 177, 1003 00133 101040 SNZ +50 1004 00134 0 02 00703 LDA ='000020 +51 THEN MAKE IT 023. 1005 00135 0 06 00702 ADD ='000001 +52 OR IF CODF IS 176, 1006 00136 101040 SNZ +53 1007 00137 0 02 00701 LDA ='000017 +54 THEN MAKE IT 021. 1008 00140 0 06 00702 ADD ='000001 +55 OR IF CODE IS 175, 1009 00141 101040 SNZ +56 1010 00142 0 02 00700 LDA ='000011 +57 THEN MAKE IT 012. 1011 00143 0 06 00702 ADD ='000001 +58 OR IF CODE IS 174, 1012 00144 101040 SNZ +59 1013 00145 0 02 00677 LDA ='000005 +60 THEN MAXE IT 005. 1014 00146 0 06 03676 ADD T+3 +61 RESTORE HIGH-ORDER AGAIN. 1015 00147 0 03 00676 ANA ='000077 +62 MASK DOWN TO SIX BITS. 1016 00150 0 01 00123 JMP R1K+42 +63 GO COMBINE WITH OTHER CHARACTERS 1017 * 1018 00151 0 02 03674 LDA T+1 R1K+64 HERE WHEN BLOCK DONE. 1019 00152 101040 SNZ +65 CHECK CHECKSUM. 1020 00153 -0 01 00051 JMP* R1K +66 OK, RETURN TO CALLER OF 'RIK'. 1021 00154 0 02 00675 LDA ='141713 (CK)+67 UHOH, CHECKSUM ERROR. 1022 00155 0 10 00272 JST TYER +68 GRIPE TO USER AND HALT. 1023 00156 0 01 00052 JMP R1K+1 +69 ON RESTART, TRY AGAIN FROM THE TOP.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 22

1024 * 1025 00157 0 000000 DAC ** R1K+70 READ RAW CODE FROM TAPE 1026 00160 0 02 03660 LDA PTIN TEST FOR ASR(=2) OR HSR(=1) 1027 00161 0 03 00702 ANA =1 +72 TEST FOR BIT 16 (HI-SPEED) 1028 00162 101040 SNZ +73 SKIP IF HIGH SPEED 1029 00163 0 01 00171 JMP R1K+80 +74 GO TO ASR 1030 00164 14 0001 OCP 0001 +75 TURN ON HI-SPEED READER 1031 00165 54 1001 INA '1001 +76 CLEAR A-REG AND READ CHARACTER 1032 00166 0 01 00165 JMP *-1 +77 WAIT FOR IT 1033 00167 14 0101 OCP '0101 +78 TURN OFF HI-SPEED 1034 00170 -0 01 00157 JMP* R1K+70 +79 RETURN TO CALLER 1035 00171 0 02 00674 LDA ='017777 R1K+80 LOWSPEED-PREPARE TO WAIT 1036 00172 0 04 03676 STA T+3 +81 FOR X16 DELAY CYCLE 1037 00173 34 0004 SKS '0004 +82 NEXT CHARACTER READY. Q 1038 00174 0 01 00200 JMP *+4 +83 NO. GO CHECK TIME 1039 00175 54 1004 INA '1004 +84 YES, CLEAR A-REG AND READ CHARACTER 1040 00176 0 01 00200 JMP *+2 +85 NOT READY, GO CHECK TIME. 1041 00177 -0 01 00157 JMP* R1K+70 +86 RETURN TO CALLER 1042 00200 0 12 03676 IRS T+3 +87 NOT READY. COUNT THIS. 1043 00201 0 01 00173 JMP R1K+82 +88 STILL TIME. GO CHECK AGAIN 1044 00202 0 10 00237 JST O104 +89 CHECK BUSY 1045 00203 14 0104 OCP '104 +90 SELECT OUTPUT MODE 1046 00204 0 02 00673 LDA ='221 +91 OUTPUT AN (X-ON) CHARACTER 1047 00205 74 0004 OTA '4 R1K+92 TO TURN ON ASR READER 1048 00206 0 01 00205 JMP *-1 +93 DELAY 1049 00207 0 10 00237 JST O104 +94 CHECK BUSY 1050 00210 14 0004 OCP '4 +95 SELECT INPUT MODE 1051 00211 0 10 00237 JST O104 +96 CHECK BUSY 1052 00212 0 01 00171 JMP R1K+80 R1K+97 GO BACK FOR NEXT CHARACTER 1053 * 1054 00213 0 000000 MAG DAC ** ENTRY FOR MAG READ 1055 00214 0 10 00243 JST KLR CLEAR RUFFER 1056 00215 0 10 00000 CALL I$MC READ A BINARY RECORD 1057 00216 0 003700 DAC BUFF BUFFER 1058 00217 000074 DEC 60 WORD COUNT 1059 00220 0 000000 UNIT DAC ** UNIT NUMBER 1060 00221 000000 HLT PARITY 1061 00222 000000 HLT ENT OF TAPE 1062 00223 0 01 03031 JMP EOT END OF FILE 1063 00224 0 01 00256 JMP KCKM CALCULATE CHECKSUM 1064 * 1065 00225 0 000000 CARD DAC ** ETNRY FOR READ A CARD 1066 00226 0 10 00243 JST KLR CLEAR RUFFER 1067 00227 0 10 00000 CALL I$CB READ A BINARY CARD 1068 00230 0 003700 DAC BUFF BUFFER 1069 00231 0 01 03031 JMP EOT END OF FILE 1070 00232 0 01 00256 JMP KCKM CALCULATE CHECKSUM 1071 * 1072 00233 0 000000 DISI DAC ** READ FROM DISC 1073 00234 -0 10 00772 JST* DOPO GET THE BLOCK
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 23

1074 00235 0 003700 DAC BUFF INPUT BUFFER 1075 00236 -0 01 00051 JMP* R1K EXIT, DO NOT CALCULATE CHECKSUM 1076 * 1077 00237 0 000000 O104 DAC ** ASR BUSY TEST 1078 00240 34 0104 SKS '104 BUSY 1079 00241 0 01 00240 JMP *-1 YES 1080 00242 -0 01 00237 JMP* O104 NO, EXIT 1081 00243 0 000000 KLR DAC ** CLEAR INPUT BUFFER ROUTINE 1082 00244 0 02 00050 LDA R1K-1 BUFFER POINTER 1083 00245 0 04 00237 STA O104 SAVE FOR REF. 1084 00246 0 02 00714 LDA =-60 SIXTY WORD BUFFER 1085 00247 0 04 00225 STA CARD SAVE 1086 00250 140040 CRA * 1087 00251 -0 04 00237 KLR2 STA* O104 START THE CLEARING PROCESS 1088 00252 0 12 00237 IRS O104 BUMP POINTER 1089 00253 0 12 00225 IRS CARD BUMP COUNTER 1090 00254 0 01 00251 JMP KLR2 CONTINUE CLEARING 1091 00255 -0 01 00243 JMP* KLR EXIT, WITH GREAT SPEED 1092 * 1093 00256 0 02 00050 KCKM LDA R1K-1 * * * CHECKSUM CALCULATOR ROUTINE * * * 1094 00257 0 04 00237 STA O104 BUFFER POINTER 1095 00260 0 02 00714 LDA =-60 SIXTY WORD BUFFER 1096 00261 0 04 00225 STA CARD SAVE BUFFER SIZE 1097 00262 140040 CRA * 1098 00263 -0 05 00237 KCKK ERA* O104 CALCULATE CHECKSUM 1099 00264 0 12 00237 IRS O104 BUMP POINTER 1100 00265 0 12 00225 IRS CARD AND WORD COUNT 1101 00266 0 01 00263 JMP KCKK CONTINUE CALCULATING 1102 00267 100040 SZE * 1103 00270 0 01 00154 JMP R1K+67 CHECKSUM ERROR, GO COMPLAIN 1104 00271 -0 01 00051 JMP* R1K EXIT, CHECKSUM OK . . . 1105 * 1106 * 1107 * 1108 * 1109 * JST TYER TYPE TWO CHARACTERS IN A-REGISTER AND HALT. 1110 * IF 'START' PRESSED, RETURN TO JST+1. 1111 * 1112 00272 0 000000 TYER DAC ** HERE FOR ERROR GRIPE AND HALT. 1113 00273 0 04 03673 STA T SAVE TWO-CHARACTER ARGUMENT. 1114 00274 0 10 00307 JST TTYN TURN THE TELETYPE ON. 1115 00275 0 10 01653 JST CRLF TYPE CARRIAGE-RETURN, LINE-FEED. 1116 00276 0 02 03673 LDA T PICK UP TWO-CHARACTER ARGUMENT. 1117 00277 0 10 01646 JST TYP2 TYPE THE TWO CHARACTERS. 1118 00300 0 10 01653 JST CRLF CARRIAGE-RETURN, LINE-FEED. 1119 00301 0400 40 LRL 32 CLEAR THE A- AND B-REGISTERS 1120 00302 0 10 00237 JST O104 CHECK BUSY 1121 00303 14 0004 OCP '0004 THEN SET TO INPUT MODE 1122 00304 0 02 01000 LDA DFLT CURRENT INPUT DEVICE 1123 00305 000000 HLT HALT FOR USER ACTION.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 24

1124 00306 -0 01 00272 JMP* TYER UPON RESTART, RETURN. 1125 * 1126 * 1127 * 1128 * JST TTYN TURN TELETYPE ON IN OUTPUT MODE. 1129 * 1130 00307 0 000000 TTYN DAC ** HERE TO TURN ON ASR-33 OR -35. 1131 00310 0 10 00237 JST O104 CHECK BUSY 1132 00311 0 02 00674 LDA ='17777 PREPARE TO WAIT FOR 1133 00312 0 04 03676 STA T+3 THE DELAY CYCLE 1134 00313 34 0104 SKS '104 ASR MUST BE CONTINUOUSLY NOT BUSY FOR 1135 00314 0 01 00310 JMP TTYN+1 THAT INTERVAL 1136 00315 0 12 03676 IRS T+3 NOT BUSY, CHECK THE TIME 1137 00316 0 01 00313 JMP *-3 STILL LONGER TO WAIT 1138 00317 14 0104 OCP '0104 OK. IT'S REALLY FREE. SET OUTPUT MODE. 1139 00320 -0 01 00307 JMP* TTYN RETURN TO CALLER. 1140 * 1141 * 1142 * ********************************************************************** 1143 * * MAIN CONTROL * 1144 * ********************************************************************** 1145 * 1146 * 1147 * 1148 * BLOK RETURN HERE TO READ NEW BLOCK AND DISPATCH ON BLOCK 1149 * 1150 * TYPE. 1151 00321 0 02 00711 BLER LDA ='141314 (BL) HERE ON BLOCK TYPE ERROR. 1152 00322 0 10 00272 JST TYER GRIPE AND HALT. CONTINUE IF PRESS 'START'. 1153 00323 000013 BLOK EXA ALLOW ACCESS TO ALL OF CORE 1154 00324 0 10 00051 JST R1K HERE TO INPUT NEXT BLOK. READ A BLOCK 1155 00325 0 02 03700 LDA BUFF FIRST WORD IS CONTROL WORD. 1156 00326 0 03 00672 ANA ='170377 WIPE OUT BITS 5...8. 1157 00327 100040 SZE REST WILL BE ZERO IF NEW STYLE. 1158 00330 0 01 01150 JMP OLD OLD STYLE BLOCK. GO TO IT. 1159 00331 0 02 03701 LDA BUFF+1 WORD COUNT TO A-REGISTER 'N'B8. 1160 00332 0404 70 LGR 8 'N'B16 = N. 1161 00333 0 05 00671 ERA ='177777 -N-1. 1162 00334 0 06 00670 ADD ='000003 -N+2. 1163 00335 0 04 00656 STA BUFN SET 'WORDS LEFT PLUS ONE' COUNTER. 1164 00336 140040 CRA 1165 00337 0 04 01662 STA R24S SET THE PEG-LEG SWITCH EVEN. 1166 00340 0 02 00365 LDA BUFD =(DAC BUFF+1) SET BUFFER POINTER TO ONE BEFORE 1167 00341 0 04 00657 STA BUFP FIRST USABLE WORD. 1168 00342 0 02 03700 LDA BUFF RECOVER CONTROL WORD AGAIN. 1169 00343 0404 70 LGR 16-8 BLOCK TYPE TO C(A) 13-16. 1170 00344 0 10 03221 JST SWCH DISPATCH ON BLOCK TYPE TO SERVICE ROUTINE. 1171 00345 0 000366 DAC NS00 00.. SUBPROGRAM NAME BLOCK. 1172 00346 0 000404 DAC NS04 04.. DATA BLOCK. 1173 00347 0 000574 DAC NS10 10.. SYMBOL NUMBER DEFINITION.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 25

1174 00350 0 001001 DAC NS14 14.. END BLOCK. 1175 00351 0 000321 DAC BLER 20.. ILLEGAL. USED INTERNALLY BY DAP-16. 1176 00352 0 001015 DAC NS24 24.. SET RELOCATABLE MODE. 1177 00353 0 001017 DAC NS30 30.. SET ABSOLUTE MODE. 1178 00354 0 000321 DAC BLER 34.. ILLEGAL. USED INTERNALLY BY DAP-16. 1179 00355 0 000321 DAC BLER 40.. ILLEGAL. USED INTERNALLY BY DAP-16. 1180 00356 0 001022 DAC NS44 44.. SUBPROGRAM CALL BLOCK. 1181 00357 0 001117 DAC NS50 50.. SUBPROGRAM ENTRY DEFINITION. 1182 00360 0 001132 DAC NS54 54.. ENTER EXTEND-MODE DESECTORING. 1183 00361 0 001135 DAC NS60 60.. LEAVE EXTEND-MODE DESECTORING. 1184 00362 0 001141 DAC NS64 64.. SET BASE SECTOR. 1185 00363 0 000321 DAC BLER 70 AND 74.. NOT ASSIGNED. 1186 00364 0 000321 DAC BLER 1187 * 1188 00365 0 003701 BUFD DAC BUFF+1 POINTER TO FIRST INFO WORD, LESS ONE. 1189 * 1190 * 1191 * 1192 * ******************************************************************* 1193 * * NEW STYLE BLOCK ROUTINES * 1194 * ******************************************************************* 1195 * 1196 * 1197 * 1198 * NS00 NEW STYLE 0.. SUBPROGRAM NAME BLOCK. 1199 * 1200 00366 0 02 00667 NS00 LDA ='100005 SET KEY TO INDICATE SUBPROGRAM 1201 00367 0 04 03665 STA KEY NAME RATHER THAN COMMON NAME. 1202 00370 0 10 01561 SNNF JST R48B READ SUBPROGRAM NAME. 1203 00371 0 10 02357 JST SSS SET UP SYMBOL TABLE SEARCH. 1204 00372 0 02 00676 SNNL LDA ='000077 LOOK AT ALL ENTRIES OF TYPE 5. 1205 00373 0 10 02363 JST SSN LOOK AT NEXT ENTRY. 1206 00374 0 01 00370 JMP SNNF NOT FOUND. IGNORE. 1207 00375 0 10 02413 JST MACH DOES THIS ENTRY MATCH.Q 1208 00376 0 01 00372 JMP SNNL NO. CONTINUE HUNT. 1209 00377 101040 SNZ FOUND, IS IT CALLED OR LOADED.Q 1210 00400 0 01 00370 JMP SNNF LOADED. IGNORE IT. 1211 00401 140040 FORS CRA CALLED. WE MUST LOAD IT NOW. 1212 00402 0 04 03671 STA SKIF TURN OFF SKIP FLAG. 1213 00403 0 01 00323 JMP BLOK READ ON 1214 * 1215 * 1216 * 1217 * NS04 NEW STYLE BLOCK 4.. DATA BLOCK. 1218 * 1219 00404 0 10 03024 NS04 JST SKIP IGNORE IF SKIPPING THIS SUBPROGRAM. 1220 00405 0 10 01555 JST LEFT COUNT ORIGIN WORD. 1221 00406 0 12 00657 IRS BUFP MOVE TO IT. 1222 00407 -0 02 00657 LDA* BUFP PICK UP BLOCK ORIGIN. 1223 00410 0 04 03677 STA VALU STORE IT FOR POSSIBLE RELOCATION.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 26

1224 00411 0 02 03667 LDA MODE GET ABSOLUTE OR RELOCATABLE SWITCH. 1225 00412 0 10 03201 JST RELO RELOCATE ADDRESS IF NECESSARY. 1226 00413 0 10 02667 JST MRG2 MERGE BIT 2 OF PBRK IF NORMAL MODE 1227 00414 0 04 03777 STA WORD SET LOCATION COUNTER. 1228 00415 0 10 02613 JST FITS CHECK FOR MEMORY OVERFLOW. 1229 00416 0 02 00434 LDA NSDR =(JMP R24B+1) FIRST TIME, PASS THROUGH. 1230 00417 101000 NSDS NOP OTHER TIMES, RETURN VIA 'R24B. 1231 00420 0 04 00417 STA *-1 1232 * 1233 * HERE TO PROCESS NEXT DATA WORD. 1234 * 1235 00421 0 10 01520 NSDL JST R24B READ NEXT 24-BIT DATA WORD. 1236 00422 0 02 03775 LDA DATA+1 WORD TYPE TO C(A-REG)6-8. 1237 00423 0416 71 ALR 8-1 C(W)24 TO C(A)1, C(W)22,23 TO C(A) 15,16. 1238 00424 100400 SPL CHECK FOR KNOWN NINE-BIT. 1239 00425 0 01 00561 JMP NSD4 YES. GO TO IT. 1240 00426 0 03 00670 ANA ='000003 NO. ISOLATE TYPE CODE. 1241 00427 0 10 03221 JST SWCH SWITCH JUMP, DEPENDS ON A-REG. CONTENTS. 1242 00430 0 000435 DAC NSD0 O.. DATA OR GENERIC. 1243 00431 0 000442 DAC NSD1 1.. 9-BIT SYMBOLIC ADDRESS. 1244 00432 0 000514 DAC NSD2 2.. DAC, ADDRESS KNOWN. 1245 00433 0 000531 DAC NSD3 3.. DAC, SYMBOLIC ADDRESS. 1246 * 1247 00434 0 01 01521 NSDR JMP R24B+1 AFTER FIRST TIME, TAKE EXISTING RETURN. 1248 * 1249 * 1250 * 1251 * NSD0 HERE FOR DATA OR GENERIC. 1252 * 1253 00435 0 02 03774 NSD0 LDA DATA GET WORD. 1254 00436 -0 04 03777 STA* WORD PLACE IT. 1255 00437 0 12 03777 NSDT IRS WORD BUMP THE LOCATION COUNTER. 1256 00440 0 10 02613 JST FITS CHECK FOR MEMORY OVERFLOW. 1257 00441 0 01 00421 JMP NSDL GO TO NEXT DATA WORD. 1258 * 1259 * 1260 * 1261 * HERE FOR FORWARD-REFERENCE NINE-BIT. 1262 * 1263 00442 0 02 03774 NSD1 LDA DATA PLACE FLAG, TAG, AND 1264 00443 0 03 00666 ANA ='176000 OP-CODE INTO STORAGE. 1265 00444 -0 04 03777 STA* WORD 1266 00445 0 10 00645 JST EXT EXTRACT SYMBOL NUMBER. 1267 00446 0 03 00674 ANA ='017777 RETAIN ONLY 13 BITS. 1268 00447 0 04 00661 STA K 1269 00450 0 10 02403 JST CUT FORM KEY FOR CURRENT BASE AND 1270 00451 0 05 00702 ERA ='000001 MEMORY MODE. 1271 00452 0 04 03665 STA KEY 1272 00453 0 02 03774 LDA DATA GET THE 'MORE' BIT. 1273 00454 0 03 00665 ANA ='000400 IF ON, THIS SYMBOL HAS NOT
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 27

1274 00455 100040 SZE BEEN USED BEFORE. 1275 00456 0 01 00474 JMP NSDN ON. OMIT TABLE SEARCH, 1276 00457 0 10 02357 JST SSS OFF. SET UP SYMBOL SEARCH. 1277 00460 0 02 00671 NSDP LDA ='177777 KEY MUST MATCH EXACTLY. 1278 00461 0 10 02363 JST SSN MOVE TO NEXT ENTRY. 1279 00462 0 01 00474 JMP NSDN END OF TABLE. NOT FOUND. 1280 00463 0 05 00661 ERA K IS IT SAME SYMBOL.Q 1281 00464 100040 SZE SKIP IF SO. 1282 00465 0 01 00460 JMP NSDP NO. CONTINUE SEARCH. 1283 00466 0 10 02662 JST GET2 YES. GET LAST LOC USED. 1284 00467 0 04 03677 STA VALU MUST STRING TO IT. 1285 00470 0 02 03777 LDA WORD UPDATE USAGE POINTER IN 1286 00471 -0 04 03673 STA* T SYMBOL TABLE TO CURRENT LOC. 1287 00472 0 10 02210 JST DESS DESECTOR FOR STRING. 1288 00473 0 01 00437 JMP NSDT GO TO NEXT DATA WORD. 1289 * 1290 00474 0 10 02306 NSDN JST GEN3 NOT IN TABLE, PUT IT IN. 1291 00475 0 02 03665 LDA KEY PLACE THE KEY IN FIRST. 1292 00476 0 10 03020 JST PUT 1293 00477 0 02 00661 LDA K THEN THE SYMBOL NUMBER. 1294 00500 0 10 03020 JST PUT 1295 00501 0 02 03777 LDA WORD FINALLY THE CURRENT LOCATION. 1296 00502 -0 04 03673 STA* T 1297 00503 0 02 03774 LDA DATA GET THE 'MORE' BIT AGAIN. 1298 00504 0 03 00665 ANA ='000400 ISOLATE IT. 1299 00505 101040 SNZ ARE THERE MORE SYMBOLS.Q 1300 00506 0 01 00437 JMP NSDT NO. GO TO NEXT DATA WORD. 1301 00507 0 10 01520 JST R24B YES, READ NEXT WORD. 1302 00510 0 10 00645 JST EXT EXTRACT THE SYMBOL NUMBER. 1303 00511 0 03 00674 ANA ='017777 RETAIN ONLY 13 BITS. 1304 00512 0 04 00661 STA K 1305 00513 0 01 00474 JMP NSDN GO PUT IT INTO TABLE TOO. 1306 * 1307 * 1308 * 1309 * HERE FOR DAC, ADDRESS KNOWN. 1310 * 1311 00514 0 10 00645 NSD2 JST EXT EXTRACT ADDRESS. 1312 00515 0 04 03677 STA VALU SAVE IT FOR RELOCATION. 1313 00516 0 02 03774 LDA DATA GET RELOCATION BITS. 1314 00517 0414 75 LGL 3 LEFT ADJUST. 1315 00520 0 10 03201 JST RELO RELOCATE ADDRESS. 1316 * 1317 * SAVE 'VALU' WHERE 'MMOD' IS ONE. MERGE 'VALU' WITH 'DATA' WHERE 1318 * 'MMOD' IS ZERO. THIS ALWAYS MERGES THE FLAG BIT FROM 'DATA', AND 1319 * THE TAG BIT(IF NOT IN EXTENDED MODE) WITH 'VALU'. 1320 * 1321 00521 0 05 03774 ERA DATA ********************* 1322 00522 0 03 03774 ANA DATA VALU 0 0 0 0 1 1 1 1 1323 00523 -0 04 03777 STA* WORD DATA 0 0 1 1 0 0 1 1
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 28

1324 00524 0 05 03666 ERA MMOD MMOD 0 1 0 1 0 1 0 1 1325 00525 -0 03 03777 ANA* WORD WORD 0 0 1 0 1 1 1 1 RESULT 1326 00526 0 05 03677 ERA VALU ********************* 1327 00527 -0 04 03777 STA* WORD LOAD WORD 1328 00530 0 01 00437 JMP NSDT GO TO NEXT DATA WORD. 1329 * 1330 * 1331 * 1332 * HERE FOR FORWARD-REFERENCE DAC. 1333 * 1334 00531 0 02 03774 NSD3 LDA DATA PLACE THE FLAG AND TAG BITS. 1335 00532 0 03 00664 ANA ='140000 1336 00533 -0 04 03777 STA* WORD 1337 00534 0 10 00645 NSDM JST EXT EXTRACT THE SYMBOL NUMBER. 1338 00535 0 03 00674 ANA ='017777 RETAIN ONLY 13 BITS. 1339 00536 0 04 00661 STA K 1340 00537 0 10 02306 JST GEN3 GET SPACE IN SYMBOL TABLE. 1341 00540 0 02 00702 LDA ='000001 KEY FOR UNDEFINED DAC. 1342 00541 0 10 03020 JST PUT PLACE KEY IN SYMBOL TABLE. 1343 00542 0 02 00661 LDA K GET SYMBOL NUMBER. 1344 00543 0 10 03020 JST PUT PLACE IT IN TABLE. 1345 00544 0 02 03777 LDA WORD GET POINTER TO CURRENT LOCATION. 1346 00545 -0 04 03673 STA* T PLACE IT IN TABLE. 1347 00546 0 02 03774 LDA DATA GET THE 'MORE' BIT. 1348 00547 0 03 00665 ANA ='400 ISOLATE IT 1349 00550 101040 SNZ ARE THERE MORE SYMBOLS.Q 1350 00551 0 01 00437 JMP NSDT NO. GO GET NEXT DATA WORD. 1351 00552 0 10 01520 JST R24B YES. READ NEXT SYMBOL. 1352 00553 -0 02 03777 LDA* WORD GET PREVIOUS FLAG/TAG 1353 00554 0 05 03774 ERA DATA OLD OR NEW FLAG/TAG, NOT BOTH 1354 00555 -0 03 03777 ANA* WORD OLD FLAG/TAG WHERE NOT NEW 1355 00556 0 05 03774 ERA DATA BOTH OLD AND NEW 1356 00557 0 03 00664 ANA ='140000 WIPE OUT LOW ORDER BITS 1357 00560 0 01 00533 JMP NSDM-1 1358 * 1359 * 1360 * 1361 * HERE FOR NINE-BIT KNOWN ADDRESS. 1362 * 1363 00561 0 02 03774 NSD4 LDA DATA PLACE THE FLAG, TAG AND 1364 00562 0 03 00666 ANA ='176000 OP-CODE INTO STORAGE. 1365 00563 -0 04 03777 STA* WORD 1366 00564 0 10 00645 JST EXT EXTRACT 15-BIT VALUE. 1367 00565 0 03 00663 ANA ='077777 1368 00566 0 04 03677 STA VALU SAVE IT FOR RELOCATION. 1369 00567 0 02 03775 LDA DATA+1 GET RELOCATION BITS. 1370 00570 0414 73 LGL 5 PLACE THEM PROPERLY. 1371 00571 0 10 03201 JST RELO RELOCATE ADDRESS. 1372 00572 0 10 02065 JST DESE DESECTOR WORD. 1373 00573 0 01 00437 JMP NSDT DONE. GO GET NEXT DATA WORD.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 29

1374 * 1375 * 1376 * 1377 * NS1O NEW STYLE BLOCK 10.. SYMBUL NUMBER DEFINITION. 1378 * 1379 00574 0 10 03024 NS10 JST SKIP IGNORE DEFINITIONS IF SKIPPING. 1380 00575 0 10 01555 N10L JST LEFT SEE IF TWO WORDS LEFT 1381 00576 0 10 01555 JST LEFT IN INPUT BUFFER. 1382 00577 0 12 00657 IRS BUFP YES. MOVE TO FIRST. 1383 00600 -0 02 00657 LDA* BUFP PICK UP SYMBUL NUMBER, FLAGS. 1384 00601 0 04 03774 STA DATA SAVE FLAGS. 1385 00602 0 03 00674 ANA ='017777 ISOLATE SYMBOL NUMBER. 1386 00603 0 04 00661 STA K SAVE IT. 1387 00604 0 12 00657 IRS BUFP MOVE TO VALUE. 1388 00605 -0 02 00657 LDA* BUFP GET IT. 1389 00606 0 04 03677 STA VALU SAVE IT FOR POSSIBLE RELOCATION. 1390 00607 0 02 03774 LDA DATA GET RELOCATION BITS. 1391 00610 0414 77 LGL 1 POSITION THEM. 1392 00611 0 10 03201 JST RELO RELOCATE ADDRESS. 1393 00612 0 10 02002 JST SAVE SAVE LOADER FUR POSSIBLE UNSTRING. 1394 00613 0 10 02357 JST SSS SET UP SEARCH OF SYMBOL TABLE. 1395 00614 0 02 00702 LDA ='000001 SET KEY TO INDICATE SYMBOL NUMBER. 1396 00615 0 04 03665 STA KEY 1397 00616 0 02 00676 N10M LDA ='000077 LOOK AT ALL ENTRIES OF THIS TYPE. 1398 00617 0 10 02363 JST SSN MOVE TO NEXT ENTRY. 1399 00620 0 01 00643 JMP N10X ALL ENTRIES PROCESSED. GO EXIT. 1400 00621 0 05 00661 ERA K IS THIS ENTRY A MATCH.Q 1401 00622 100040 SZE SKIP IF MATCHES SYMBOL NUMBER. 1402 00623 0 01 00616 JMP N10M NO. CONTINUE HUNT. 1403 00624 0 02 03774 LDA DATA YES. NOW, IS SYMBOL 1404 00625 101400 SMI STRINGABLE OR ONE-SHOT. 1405 00626 0 01 00635 JMP N10S ONE-SHOT. GO SERVICE IT. 1406 00627 0 10 01623 JST SETS STRINGABLE. SET BASE, MMOD. 1407 00630 140040 CRA WIPE OUT THIS ENTRY 1408 00631 -0 04 03672 STA* SSSP FROM THE SYMBOL TABLE. 1409 00632 0 10 02662 JST GET2 GET LAST LOCATION USED. 1410 00633 0 10 02233 JST UNST RUN THE STRING. 1411 00634 0 01 00616 JMP N10M GO BACK FOR MORE USAGES. 1412 * 1413 00635 -0 02 03672 N10S LDA* SSSP ONE-SHOT SYMBOL NUMBER. 1414 00636 0 06 00702 ADD ='1 CHANGE ENTRY KEY 1415 00637 -0 04 03672 STA* SSSP ADDRESS-ARITHMETIC TYPE. 1416 00640 0 12 03672 IRS SSSP REPLACE SYMBOL NUMBER 1417 00641 0 02 03677 LDA VALU BY VALUE. 1418 00642 -0 04 03672 STA* SSSP * 1419 00643 0 10 02055 N10X JST REST RESTORE THE LOADER 1420 00644 0 01 00575 JMP N10L GO GET NEXT SYMBOL NUMBER. 1421 * 1422 * 1423 00645 0 000000 EXT DAC ** HERE TO EXTRACT SYMBOL VALUE
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 30

1424 00646 0 02 03775 LDA DATA+1 C(W)17-21 = V12-16 TO C(A)1-5. 1425 00647 0404 65 LGR 11 NOW TO C(A)12-16. 1426 00650 0 04 03673 STA T SAVE 1427 00651 0 02 03774 LDA DATA 1428 00652 0 02 03774 LDA DATA C(W)6-16 = V1-11 TO C(A)6-16. 1429 00653 0414 73 LGL 5 NOW TO C(A)1-11. 1430 00654 0 05 03673 ERA T COMBINE WITH OTHER HALF 1431 00655 -0 01 00645 JMP* EXT EXIT, ANSWER IN A-REGISTER. 1432 * 1433 * 1434 00656 BUFN BSS 1 BUFFER COUNTER , FOR 'BLOK'. 1435 00657 BUFP BSS 1 BUFFER POINTER, FOR 'BLOK'. 1436 00660 R1KN BSS 1 BLOCK WORD COUNT FOR 'R1K' 1437 00661 K BSS 1 STORAGE FOR SYMBOL NUMBER 1438 00662 0 000000 SW DAC ** 1439 * 1440 * 1441 00663 077777 FIN END OF SECTOR. FLUSH THE LITERALS. 00664 140000 00665 000400 00666 176000 00667 100005 00670 000003 00671 177777 00672 170377 00673 000221 00674 017777 00675 141713 00676 000077 00677 000005 00700 000011 00701 000017 00702 000001 00703 000020 00704 000037 00705 177740 00706 000034 00707 120000 00710 000223 00711 141314 00712 000002 00713 000203 00714 177704 1442 000715 STBO EQU * DESECTORING AREA NO. 1 1443 * 1444 * 1445 * 1446 EJCT
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 31

1447 ORG ORG+'1000 START NEW SECTOR. 1448 SETB STB1 DESECTOR IN CURRENT SECTOR. 1449 * 1450 01000 000001 DFLT OCT 1 DEFAULT INPUT SWITCH 1451 * 1452 * NS14 NEW STYLE BLOCK 14.. END BLOCK. 1453 * 1454 01001 0 02 03702 NS14 LDA BUFF+2 END BLOCK. GET JUMP ADDRESS. 1455 01002 0 04 03677 STA VALU SAVE FOR RELOCATION. 1456 01003 0 02 03352 N14J LDA SYM STORE THE CURRENT SYMBOL TABLE LENGTH 1457 01004 0 04 03662 STA BACK AND COMMON COUNTER IN THE BACK-UP CELLS 1458 01005 0 02 03357 LDA COMN BECAUSE END CLEAN-UP WILL RESTORE THEM 1459 01006 0 04 03663 STA BACK+1 FROM THERE. 1460 01007 0 02 03667 N14K LDA MODE JOIN HERE IF OLD-STYLE SKIPPED. 1461 01010 0 10 03155 JST SENT GO SET ENTRY LOCATION. 1462 01011 0 10 03060 JST CLEN PERFORM INTER-PROGRAM CLEAN-UP. 1463 01012 0 02 01012 LDA * SET SKIP FLAG TO SKIP 1464 01013 0 04 03671 STA SKIF NEXT SUBPROGRAM. 1465 01014 0 01 00323 JMP BLOK GO READ ON. 1466 * 1467 * 1468 * 1469 * NS24 NEW STYLE BLOCK 24.. SET RELOCATABLE MODE. 1470 * 1471 01015 0 02 01710 NS24 LDA ='040000 GET RELOCATABLE FLAG. 1472 01016 0 01 01020 JMP NS30+1 SET RELOCATABLE FLAG. . . 1473 * 1474 * 1475 * 1476 * NS30 NEW STYLE BLOCK 30.. SET ABSOLUTE MODE. 1477 * 1478 01017 140040 NS30 CRA GET ABSOLUTE FLAG. 1479 01020 0 04 03667 STA MODE SET MODE OF LOADER. 1480 01021 0 01 00323 JMP BLOK EXIT TO READ NEXT BLOCK. 1481 * 1482 * 1483 * 1484 * NS44 NEW STYLE 44.. SUBPROGRAM CALL. 1485 * 1486 01022 0 10 03024 NS44 JST SKIP SKIP CALL BLOCKS IF NOT LOADING. 1487 01023 0 02 03777 LDA WORD BACK UP THE LOCATION COUNTER 1488 01024 0 07 01712 SUB ='000001 TO THE LAST WORD LOADED. 1489 01025 0 04 03777 STA WORD IT IS THE CALL LOCATION. 1490 01026 0 10 01561 JST R48B READ THE SUBPROGRAM NAME. 1491 01027 0 12 00657 IRS BUFP MOVE TO DAC/NINE-BIT FLAG. 1492 01030 140040 CRA INITIALIZE OFFSET 1493 01031 0 04 03677 STA VALU TO ZERO. 1494 01032 -0 07 00657 SUB* BUFP FORM DAC FLAG, '000000 MEANS 1495 01033 0 04 01661 N44J STA DACF NINE-BIT, '177777 MEANS NEW STYLE DAC 1496 01034 0 10 02403 JST CUT CUT A KEY FOR THIS CALL.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 32

1497 01035 0406 71 ARR 7 MOVE NINE-BIT 1498 01036 0 06 01661 ADD DACF WIPE IT OUT IF WE ARE 1499 01037 0416 71 ALR 7 PROCESSING A DAC. 1500 01040 0 05 01707 ERA ='100405 UNLOADED SURBPROGRAM NAME 1501 01041 0 04 03665 N44K STA KEY SAVE THE KEY. 1502 01042 0 10 02357 JST SSS SET UP FOR SYMBOL TABLE SEARCH. 1503 01043 0 02 01706 N44L LDA ='100077 ACCEPT ANY SUBPROGRAM ENTRY. 1504 01044 0 10 02363 JST SSN MOVE TO NEXT ENTRY. 1505 01045 0 01 01075 JMP N44E NOT FOUND. GO MAKE ENTRY. 1506 01046 0 10 02413 JST MACH COMPARE NAME WITH TABLE. 1507 01047 0 01 01043 JMP N44L NO MATCH. CONTINUE HUNT. 1508 01050 100040 SZE MATCH IS IT CALLED OR LOADED.Q 1509 01051 0 01 01103 JMP N44S CALLED. GO STRING TO IT. 1510 01052 0 02 03672 LDA SSSP LOADED. 1511 01053 0 06 01705 ADD ='000004 1512 01054 0 10 02656 JST GET GET ENTRY LOCATION. 1513 01055 0 06 03677 ADD VALU BUMP BY OFFSET. 1514 01056 0 04 03677 STA VALU THAT IS TRUE ADDRESS. 1515 01057 0 02 03664 LDA FLAG ARE WE PROCESSING A 'BLOCK DATA'.Q 1516 01060 101400 SMI SKIP IF NOT. 1517 01061 0 01 01500 JMP OS6R YES, RETURN TO SET COUNTER. 1518 01062 0 02 01661 LDA DACF NO. RECOVER DAC FLAG. 1519 01063 101040 SNZ IS IT A NINE-BIT OR A DAC.Q 1520 01064 0 01 01071 JMP N44N NINE-BIT. GO DESECTOR IT. 1521 01065 0 03 03677 ANA VALU DAC. WIPE VALUE TO SIZE. 1522 01066 -0 06 03777 ADD* WORD 1523 01067 -0 04 03777 STA* WORD PLACE FINAL WORD. 1524 01070 100000 SKP SKIP AROUND NINE-BIT PROCESSING. 1525 01071 0 10 02065 N44N JST DESE NINE-BIT. DESECTOR IT. 1526 01072 0 12 03777 N44X IRS WORD RESTORE THE LOCATION COUNTER. 1527 01073 0 10 02613 JST FITS CHECK IF LOAD FITS. 1528 01074 0 01 00323 JMP BLOK GO READ NEXT BLOCK. 1529 * 1530 01075 0 10 02330 N44E JST GEN6 MUST MAKE ENTRY. 1531 01076 0 02 03665 LDA KEY GET SPACE IN TABLE. 1532 01077 0 10 02435 JST SPUT PLACE KEY AND NAME. 1533 01100 0 02 03777 LDA WORD PLACE VALUE. 1534 01101 -0 04 03673 STA* T 1535 01102 0 01 01072 JMP N44X DONE. GO BUMP COUNTER AND EXIT. 1536 * 1537 01103 -0 02 03672 N44S LDA* SSSP CALLED. IN ORDER TO STRING KEY MUST 1538 01104 0 05 03665 ERA KEY MATCH EXACTLY. 1539 01105 100040 SZE SKIP IF SO. 1540 01106 0 01 01043 JMP N44L NO. CONTINUE HUNT. 1541 01107 0 02 03672 LDA SSSP YES. GET LAST LOCATION 1542 01110 0 06 01705 ADD ='000004 IT WAS USED. 1543 01111 0 10 02656 JST GET 1544 01112 0 04 03677 STA VALU FORM POINTER TO IT. 1545 01113 0 02 03777 LDA WORD UPDATE TABLE ENTRY TO POINT 1546 01114 -0 04 03673 STA* T HERE AS LAST LOC USED.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 33

1547 01115 0 10 02210 JST DESS DESECTOR FOR STRING. 1548 01116 0 01 01072 JMP N44X BUMP COUNTER AND EXIT. 1549 * 1550 * 1551 * 1552 * NS50 NEW STYLE BLOCK 50.. SUBPROGRAM DEFINITION. 1553 * 1554 01117 0 10 03024 NS50 JST SKIP IGNORE DEFINITION IF NOT LOADING. 1555 01120 0 02 03777 LDA WORD SUBPROGRAM WILL BE DEFINED 1556 01121 0 03 03666 ANA MMOD DEFINE AS 14 OR 15 BIT ADDRESS 1557 01122 0 04 03677 STA VALU AS CURRENT LOCATION. 1558 01123 0 10 02002 JST SAVE SAVE LOADER FOR POSSIBLE UNSTRING. 1559 01124 0 02 01704 LDA ='100005 GET KEY FOR LOADED SUBPROGRAM. 1560 01125 0 04 03665 STA KEY SET IT UP. 1561 01126 0 10 01561 N50L JST R48B READ FIRST NAME. 1562 01127 0 10 02446 JST DEFS GO DEFINE IT. 1563 01130 0 10 02055 JST REST RESTORE LOADER IN CASE DONE. 1564 01131 0 01 01126 JMP N50L LOOP FOR ALL NAMES. 1565 * 1566 * 1567 * 1568 * NEW STYLE BLOCK 54.. ENTER EXTEND-MODE DESECTORING. 1569 * 1570 01132 0 10 03024 NS54 JST SKIP IGNORE IF NOT LOADING 1571 01133 0 02 01703 LDA ='077777 GET EXTENDED MODE FLAG 1572 01134 0 01 01137 JMP NS60+2 READ ON . . . 1573 * 1574 * 1575 * 1576 * NEW STYLE BLOCK 60.. LEAVE EXTEND-MODE DESECTORING. 1577 * 1578 01135 0 10 03024 NS60 JST SKIP IGNORE IF NOT LOADING 1579 01136 0 02 01711 LDA ='037777 GET LXD FLAG (NORMAL) 1580 01137 0 04 03666 STA MMOD SET IT UP. 1581 01140 0 01 00323 JMP BLOK EXIT TO READ NEXT BLOCK. 1582 * 1583 * 1584 * 1585 * NEW STYLE BLOCK 64.. SET BASE SECTOR. 1586 * 1587 01141 0 10 03024 NS64 JST SKIP IGNORE IF NOT LOADING 1588 01142 0 02 03702 LDA BUFF+2 GET DESIRED BASE 1589 01143 100400 SPL SKIP IF ABSOLUTE. 1590 01144 0 06 03670 ADD PBRK RELOCATE. BUMP IT. 1591 01145 0 10 02667 JST MRG2 PBRK 1592 01146 0 10 02015 JST SETB GO SET LOADER BASE SECTOR. 1593 01147 0 01 00323 JMP BLOK EXIT TO NEXT BLOCK. 1594 * 1595 * 1596 *
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 34

1597 * 1598 * 1599 * 1600 * ********************************************************************** 1601 * * OLD STYLE BLOCK ROUTINES * 1602 * ********************************************************************** 1603 * 1604 * 1605 * 1606 * HERE TO PROCESS OLD STYLE BLOCKS. 1607 * 1608 01150 0 02 03700 OLD LDA BUFF OLD STYLE BLOCK. 1609 01151 100400 SPL BLOCKS HIGHER THAN SEVEN 1610 01152 0 01 00321 JMP BLER ARE ILLEGAL. 1611 01153 0414 66 LGL 10 GET ADDRESS FIELD, BITS 3-8. 1612 01154 0404 76 LGR 2 ISOLATE THEM. 1613 01155 0 04 03673 STA T SAVE TEMPORARILY. 1614 01156 0 02 03701 LDA BUFF+1 GET ADDRESS FIELD, BITS 9-16. 1615 01157 0404 70 LGR 8 POSITION THEM. 1616 01160 0 05 03673 ERA T FORM COMPLETE ADDRESS. 1617 01161 0 04 03677 STA VALU SAVE IT AWAY. 1618 01162 0 02 03700 LDA BUFF BLOCK TYPE AGAIN. 1619 01163 0404 64 LGR 12 POSITION RIGHT. 1620 01164 0 10 03221 JST SWCH JUMP TO PROCESSOR FOR BLOCK. 1621 01165 0 001175 DAC OS0 O.. SPECIAL ACTION. 1622 01166 0 001204 DAC OS1 1.. ABSOLUTE DATA WORDS. 1623 01167 0 001207 DAC OS2 2.. RELOCATABLE DATA WORDS. 1624 01170 0 001406 DAC OS3 3.. ABSOLUTE END JUMP. 1625 01171 0 001410 DAC OS4 4.. RELOCATABLE END JUMP. 1626 01172 0 001420 DAC OS5 5.. SUBPROGRAM CALL. 1627 01173 0 001436 DAC OS6 6.. SUBPROGRAM OR COMMON DEFINITION. 1628 01174 0 001503 DAC OS7 7.. COMMON REFERENCE. 1629 * 1630 * 1631 * 1632 * OLD STYLE BLOCK O. SPECIAL ACTION. 1633 * 1634 01175 0 02 03700 OS0 LDA BUFF BLOCK TYPE AGAIN. 1635 01176 0404 72 LGR 6 POSITION SUB-TYPE RIGHT. 1636 01177 0 10 03221 JST SWCH JUMP TO PROCESSOR. 1637 01200 0 000321 DAC BLER 0-0.. ILLEGAL. 1638 01201 0 000401 DAC FORS 0-1.. FORCE LOAD NEXT SUBPROGRAM. 1639 01202 0 003031 DAC EOT 0-2.. CHAIN. TREAT LIKE EOT. 1640 01203 0 003031 DAC EOT 0-3.. END OF JOB. TREAT LIKE EOT. 1641 * 1642 * 1643 * 1644 * OLD STYLE BLOCK 1.. ABSOLUTE DATA BLOCK. 1645 * 1646 01204 0 10 03024 OS1 JST SKIP IGNORE DATA BLOCKS IF SKIPPING.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 35

1647 01205 0 02 03677 LDA VALU GET THE BLOCK ORIGIN. 1648 01206 0 01 01212 JMP OSDJ GO SET IT UP AND PROCESS BLOCK. 1649 * 1650 * 1651 * 1652 * OLD STYLE BLOCK 2.. RELOCATABLE DATA BLOCK. 1653 * 1654 01207 0 10 03024 OS2 JST SKIP IGNORE DATA BLOCKS IF SKIPPING. 1655 01210 0 02 03677 LDA VALU GET THE BLOCK ORIGIN. 1656 01211 0 06 03670 ADD PBRK RELOCATE IT. 1657 01212 0 04 03777 OSDJ STA WORD SET LOCATION COUNTER. 1658 01213 0 02 03700 LDA BUFF BLOCK CONTROL WORD. 1659 01214 0 03 01702 ANA ='007700 ISOLATE WORD COUNT. 1660 01215 0404 72 LGR 6 RIGHT ADJUST. 1661 01216 0 05 01701 ERA ='177777 -N-1. 1662 01217 0 06 01700 ADD ='000003 -N+2. 1663 01220 0 04 00656 STA BUFN INITIALIZE BUFFER COUNTER. 1664 01221 0 02 00365 LDA BUFD =(DAC BUFF+1) OK. SET UP BUFFER POINTER. 1665 01222 0 04 00657 STA BUFP 1666 01223 0 10 02613 JST FITS CHECK VALIDITY OF ORIGIN. 1667 01224 0 02 01677 LDA ='100000 SET THE 'R24B' SWITCH ODD, 1668 01225 0 04 01662 STA R24S SINCE OLD STYLE BLOCKS OTHER PARITY. 1669 01226 0 10 01520 OSDL JST R24B ALL SET READ A DATA WORD. 1670 01227 0 02 03775 LDA DATA+1 EXTRACT ADDRESS PORTION. 1671 01230 0404 64 LGR 12 GET BITS 13-16 OF ADDRESS. 1672 01231 0 04 03677 STA VALU SAVE TEMPORARILY. 1673 01232 0 02 03774 LDA DATA GET BITS 3-12 OF ADDRESS. 1674 01233 0414 72 LGL 6 ISOLATE THEM. 1675 01234 0404 76 LGR 2 POSITION THEM. 1676 01235 0 05 03677 ERA VALU FORM WHOLE ADDRESS. 1677 01236 0 04 03677 STA VALU SAVE IT AWAY. 1678 01237 0 02 03775 LDA DATA+1 GET WORD TYPE CODE. 1679 01240 0404 70 LGR 8 POSITION RIGHT. 1680 01241 0 03 01676 ANA ='17 MASK TO SIZE 1681 01242 0 10 03221 JST SWCH JUMP TO PROCESSOR FOR TYPE. 1682 01243 0 001254 DAC OSD0 O.. ABSOLUTE DATA OR GENERIC. 1683 01244 0 001261 DAC OSD1 1.. ABSOLUTE NINE-BIT. 1684 01245 0 001266 DAC OSD2 2.. RELOCATABLE NINE-BIT. 1685 01246 0 001272 DAC OSD3 3.. NEG RELOC NINE-BIT. 1686 01247 0 001277 DAC OSD4 4.. STRING DEFINITION. 1687 01250 0 001361 DAC OSD5 5.. ABSOLUTE DAC. 1688 01251 0 001366 DAC OSD6 6.. RELOCATABLE DAC. 1689 01252 0 001371 DAC OSD7 7.. NEG RELOC DAC. 1690 01253 0 001376 DAC OSD8 8.. RELOCATABLE CONSTANT 1691 * 1692 * 1693 * 1694 * HERE FOR ABSOLUTE DATA OR GENERIC. 1695 * 1696 01254 0 02 03774 OSD0 LDA DATA GET 16-BIT WORD.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 36

1697 01255 -0 04 03777 STA* WORD PLACE IT. 1698 01256 0 12 03777 OSDT IRS WORD BUMP THE LOCATION COUNTER. 1699 01257 0 10 02613 JST FITS CHECK IF WE STILL FIT. 1700 01260 0 01 01226 JMP OSDL YES. MOVE TO NEXT DATA WORD. 1701 * 1702 * 1703 * 1704 * HERE FOR ABSOLUTE ADDRESS NINE-BIT. 1705 * 1706 01261 0 02 03774 OSD1 LDA DATA ABSOLUTE NINE-BIT. 1707 01262 0 03 01675 ANA ='176000 PLACE FLAG, TAG, 1708 01263 -0 04 03777 STA* WORD AND OPERATION IN STORAGE. 1709 01264 0 10 02065 JST DESE DESECTOR IT. 1710 01265 0 01 01256 JMP OSDT GO TO NEXT DATA WORD. 1711 * 1712 * 1713 * 1714 * HERE FOR RELOCATABLE ADDRESS NINE-BIT. 1715 * 1716 01266 0 02 03670 OSD2 LDA PBRK GET THE PROGRAM BREAK. 1717 01267 0 06 03677 ADD VALU RELOCATE THE ADDRESS. 1718 01270 0 04 03677 STA VALU 1719 01271 0 01 01261 JMP OSD1 NOW HANDLE LIKE ABSOLUTE. 1720 * 1721 * 1722 * 1723 * HERE FOR NEGATIVE RELOCATABLE NINE-BIT. 1724 * 1725 01272 0 02 03670 OSD3 LDA PBRK GET THE PROGRAM BREAK. 1726 01273 0 06 03677 ADD VALU RELOCATE THE ADDRESS. 1727 01274 0 05 01701 ERA ='177777 ONE'S COMPLICATE IT. 1728 01275 0 06 01712 ADD ='000001 TWO'S COMPLICATE IT. 1729 01276 0 01 01270 JMP OSD2+2 SAVE VALUE AND HANDLE LIKE ABSOLUTE 1730 * 1731 * 1732 * 1733 * HERE FOR FORTRAN STRING DEFINITION. 1734 * 1735 01277 0 10 02002 OSD4 JST SAVE SAVE THE LOADER LOCATION. 1736 01300 0 02 03677 LDA VALU VALUE IN DATA WORD IS END 1737 01301 0 06 03670 ADD PBRK OF STRING TO RUN. 1738 01302 0 04 02677 STA NEXT RELOCATE IT AND SAVE IT. 1739 01303 0 02 03777 LDA WORD CURRENT LOCATION IS THE 1740 01304 0 04 03677 STA VALU VALUE OF THE STRING. 1741 01305 0 02 02677 LDA NEXT GET NEXT LOCATION IN STRING. 1742 01306 0 04 03777 OUSL STA WORD GO TO IT. 1743 01307 -0 02 03777 LDA* WORD PICK UP WORD THERE. 1744 01310 0 03 01674 ANA ='001000 CHECK ITS SECTOR BIT. 1745 01311 101040 SNZ 1746 01312 0 01 01340 JMP OUSZ ZERO. GO SERVICE.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 37

1747 01313 -0 02 03777 LDA* WORD SAME SECTOR. FORM COMPLETE 1748 01314 0 05 03777 ERA WORD ADDRESS BY JOINING INSTRUCTION 1749 01315 0 03 01673 ANA ='000777 ADDRESS AND LOCATION COUNTER. 1750 01316 0 05 03777 ERA WORD 1751 01317 0 04 02677 OUSD STA NEXT SAVE NEXT LOCATION IN STRING 1752 01320 -0 02 03777 LDA* WORD SEE IF CURRENT LOCATION IS MEANT 1753 01321 0 03 01672 ANA ='036000 TO BE A DAC. 1754 01322 100040 SZE DAC WILL HAVE ZERO OPERATION CODE. 1755 01323 0 01 01332 JMP OUSN NO. NINE-BIT. GO DESECTOR IT. 1756 01324 0 02 03677 LDA VALU YES. DROP IN 14-BIT ADDRESS 1757 01325 -0 05 03777 ERA* WORD BEHIND FLAG AND TAG. 1758 01326 0 03 01711 ANA ='037777 1759 01327 -0 05 03777 ERA* WORD 1760 01330 -0 04 03777 STA* WORD PLACE FINAL WORD. 1761 01331 100000 SKP GO RESUME STRING RUN. 1762 01332 0 10 02065 OUSN JST DESE NINE-BIT. DESECTOR THE CURRENT LOCATION. 1763 01333 0 02 02677 LDA NEXT RESTORE POINTER TO NEXT LOCATION. 1764 01334 100040 SZE CHECK FOR END OF STRING. 1765 01335 0 01 01306 JMP OUSL NO. CARRY ON DOWN STRING. 1766 01336 0 10 02055 JST REST YES. RESTORE TRUE LOCATION. 1767 01337 0 01 01226 JMP OSDL GO TO NEXT DATA WORD. 1768 * 1769 01340 -0 02 03777 OUSZ LDA* WORD SECTOR BIT ZERO. 1770 01341 0 03 01671 ANA ='100777 IF ABSOLUTE ZERO AND NOT FLAGGED. 1771 01342 101040 SNZ END OF STRING. 1772 01343 0 01 01317 JMP OUSD YES. GO WIND IT UP. 1773 01344 0 05 02674 ERA BASE NO. MUST BE BASE SECTOR. 1774 01345 0 03 01673 ANA ='000777 REFERENCE. 1775 01346 0 05 02674 ERA BASE FORM ADDRESS IN BASE SECTOR. 1776 01347 0 10 02656 JST GET PICK UP POINTER THERE. 1777 01350 -0 05 03777 ERA* WORD RECOVER FLAG (AND POSSIBLY TAG, 1778 01351 0 03 03666 ANA MMOD DEPENDING UPON MEMORY MODE) BACK 1779 01352 -0 05 03673 ERA* T TO OBJECT INSTRUCTION. 1780 01353 -0 04 03777 STA* WORD INSTRUCTION WITH CORRECT FLAG AND TAG. 1781 01354 -0 02 03673 LDA* T GET POINTER WORD AGAIN. 1782 01355 0 05 03777 ERA WORD TACK ON HIGH-ORDER BIT FROM 1783 01356 0 03 01711 ANA ='037777 THE LOCATION COUNTER, WHICH WAS 1784 01357 0 05 03777 ERA WORD LOST ON LOADING. 1785 01360 0 01 01317 JMP OUSD IT IS NEXT LOCATION IN STRING. 1786 * 1787 * 1788 * 1789 * HERE FOR ABSOLUTE DAC. 1790 * 1791 01361 0 02 03677 OSD5 LDA VALU ABSOLUTE DAC. 1792 01362 0 05 03774 OD5J ERA DATA DROP 14-BIT ADDRESS IN 1793 01363 0 03 01711 ANA ='037777 BEHIND FLAG AND TAG. 1794 01364 0 05 03774 ERA DATA 1795 01365 0 01 01255 JMP OSD0+1 GO PLACE WORD 1796 *
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 38

1797 * 1798 * 1799 * HERE FOR RELOCATABLE DAC. 1800 * 1801 01366 0 02 03677 OSD6 LDA VALU RELOCATE ADDRESS. 1802 01367 0 06 03670 ADD PBRK 1803 01370 0 01 01362 JMP OD5J NOW HANDLE LIKE ABSOLUTE. 1804 * 1805 * 1806 * 1807 * HERE FOR NEGATIVE RELOCATABLE DAC. 1808 * 1809 01371 0 02 03670 OSD7 LDA PBRK RELOCATE ADDRESS. 1810 01372 0 06 03677 ADD VALU 1811 01373 0 05 01701 ERA ='177777 ONE'S COMPLICATE IT. 1812 01374 0 06 01712 ADD ='000001 TWO'S COMPLICATE IT. 1813 01375 0 01 01362 JMP OD5J GO DROP IN COMPLICATED ADDRESS. 1814 * 1815 * HERE FOR RELOCATABLE 16 BIT CONSTANT 1816 * 1817 01376 0 02 03775 OSD8 LDA DATA+1 ISOLATE LO ORDER 4 BITS OF VALUE 1818 01377 0404 64 LGR 12 1819 01400 0 04 03677 STA VALU SAVE THEM 1820 01401 0 02 03774 LDA DATA ISOLATE HIGH ORDER 12 BITS OF VALUE 1821 01402 0414 74 LGL 4 1822 01403 0 05 03677 ERA VALU INSERT THE LOW ORDER BITS 1823 01404 0 06 03670 ADD PBRK RELOCATE THE CONSTANT 1824 01405 0 01 01255 JMP OSD0+1 GO PLACE THE WORD 1825 * 1826 * 1827 * 1828 * OLD STYLE BLOCK 3.. ABSOLUTE END JUMP BLOCK. 1829 * 1830 01406 140040 OS3 CRA GET ABSOLUTE FLAG. 1831 01407 0 01 01411 JMP OS4J GO JOIN COMMON PROCESSING. 1832 * 1833 * 1834 * 1835 * OLD STYLE BLOCK 4.. RELOCATABLE END JUMP BLOCK. 1836 * 1837 01410 0 02 01710 OS4 LDA ='040000 GET RELOCATABLE FLAG. 1838 01411 0 04 03667 OS4J STA MODE SAVE MODE FLAG. 1839 01412 0 02 03671 LDA SKIF CHECK WHETHER LAST SUBPROGRAM. 1840 01413 101040 SNZ WAS LOADED OR SKIPPED. 1841 01414 0 01 01003 JMP N14J LOADED. GO SAVE NEW SYMTAB AND COMMON. 1842 01415 0 02 03670 LDA PBRK SKIPPED. BACK UP THE LOCATION COUNTER. 1843 01416 0 04 03777 STA WORD 1844 01417 0 01 01007 JMP N14K GO SET ENTRY LOCATION. 1845 * 1846 *
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 39

1847 * 1848 * OLD STYLE BLOCK 5.. SUBPROGRAM CALL BLOCK. 1849 * 1850 01420 0 10 03024 OS5 JST SKIP IGNORE CALL BLOCKS IF SKIPPING. 1851 01421 0 02 03700 LDA BUFF GET THE INSTRUCTION WORD. 1852 01422 0414 74 LGL 4 ADJUST CORRECTLY. 1853 01423 0 03 01670 ANA ='76000 RETAIN OP-CODE 1854 01424 -0 04 03777 STA* WORD PLACE IN STORAGE. 1855 01425 0 10 01577 JST R6C READ SUBPROGRAM NAME. 1856 01426 140040 CRA SET FLAGS FOR 'NS44'. 1857 01427 0 04 03677 STA VALU ZERO OUT THE OFFSET. 1858 01430 -0 02 03777 LDA* WORD * 1859 01431 0 03 01672 ANA ='36000 * 1860 01432 100040 SZE * 1861 01433 0 02 01701 LDA =-1 1862 01434 0 05 01701 ERA =-1 * 1863 01435 0 01 01033 JMP N44J GO JOIN NEW STYLE PROCESSING. 1864 * 1865 * 1866 * 1867 * OLD STYLE BLOCK 6.. SUBPROGRAM OR COMMON DEFINITION. 1868 * 1869 01436 0 10 01577 OS6 JST R6C READ SIX-CHARACTER NAME. 1870 01437 -0 02 00657 LDA* BUFP GET FLAGS. 1871 01440 0416 67 ALR 9 MOVE SUBPROGRAM BIT TO SIGN. 1872 01441 100400 SPL SUBPROGRAM OR COMMON.Q 1873 01442 0 01 01454 JMP ISCO COMMON. GO TO IT. 1874 01443 0 02 03677 LDA VALU SUBPROGRAM. 1875 01444 0 06 03670 ADD PBRK RELOCATE ENTRY POINT. 1876 01445 0 04 03677 STA VALU SET VALUE FOR DEFINITION. 1877 01446 0 02 01704 LDA ='100005 GET KEY FOR DEFINED 1878 01447 0 04 03665 STA KEY SUBPROGRAM. 1879 01450 0 10 02002 JST SAVE SAVE LOADER FOR POSSIBLE UNSTRING. 1880 01451 0 10 02446 JST DEFS GO DEFINE NAME. 1881 01452 0 10 02055 JST REST RESTORE AFTER UNSTRING. 1882 01453 0 01 00323 JMP BLOK EXIT TO NEXT BLOCK. 1883 * 1884 01454 0406 77 ISCO ARR 1 MOVE 'BLOCK DATA' FLAG TO SIGN BIT. 1885 01455 100400 SPL SKIP IF NOT 'BLOCK DATA'. 1886 01456 0 01 01467 JMP OS6C 'BLOCK DATA'. GO HANDLE IT. 1887 01457 0 02 01667 LDA ='100006 NOT 'BLOCK DATA'. GET KEY FOR 1888 01460 0 04 03665 STA KEY COMMON NAME. 1889 01461 0 02 03357 LDA COMN GET COMMON COUNTER. 1890 01462 0 07 03677 SUB VALU BUMP BY SIZE OF BLOCK. 1891 01463 0 10 02667 JST MRG2 * 1892 01464 0 04 03677 STA VALU SET AS VALUE OF THIS BLOCK. 1893 01465 0 10 02446 JST DEFS DEFINE NAME. 1894 01466 0 01 00323 JMP BLOK EXIT TO NEXT BLOCK. 1895 * 1896 01467 0 02 03664 OS6C LDA FLAG HERE FOR 'BLOCK DATA'.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 40

1897 01470 101400 SMI IF WE HAVE ALREADY SAVED 1898 01471 0 01 01474 JMP *+3 THE PROGRAM BREAK, 1899 01472 0 02 03670 LDA PBRK DO NOT SAVE IT AGAIN. 1900 01473 0 04 03664 STA FLAG NOT YET. SAVE IT, SET FLAG. 1901 01474 140040 CRA SET THE SKIP FLAG TO LOAD THIS SUBPROGRAM. 1902 01475 0 04 03671 STA SKIF ZERO MEANS LOAD. 1903 01476 0 04 03677 STA VALU SET OFFSET TO ZERO 1904 01477 0 01 01516 JMP OS7J EXIT TO LOOK UP COMMON NAME. 1905 * 1906 01500 0 02 03677 OS6R LDA VALU BACK HERE WHEN NAME FOUND. 1907 01501 0 04 03670 STA PBRK SET COUNTER FOR COMING DATA. 1908 01502 0 01 00323 JMP BLOK GO GET DATA. 1909 * 1910 * 1911 * 1912 * OLD STYLE BLOCK 7.. COMMON REFERENCE. 1913 * 1914 01503 0 10 03024 OS7 JST SKIP IGNORE COMMON BLOCKS IF SKIPPING. 1915 01504 0 02 03700 LDA BUFF GET THE INSTRUCTION WORD. 1916 01505 0414 74 LGL 4 LEFT JUSTIFY IT. 1917 01506 0 03 01675 ANA ='176000 ISOLATE FLAG, TAG, OP-CODE. 1918 01507 -0 04 03777 STA* WORD PLACE IN STORAGE. 1919 01510 0 03 01672 ANA ='036000 ISOLATE INSTRUCTION ITSELF. 1920 01511 100040 SZE ZERO SIGNIFIES DAC. 1921 01512 0 02 01711 LDA ='037777 SET DACF TO '000000 IF NINE-BIT, 1922 01513 0 05 01711 ERA ='037777 '037777 IF OLD STYLE DAC. 1923 01514 0 04 01661 STA DACF 1924 01515 0 10 01577 JST R6C READ COMMON NAME. 1925 01516 0 02 01667 OS7J LDA ='100006 GET KEY FOR COMMON REFERENCE. 1926 01517 0 01 01041 JMP N44K 1927 * 1928 * 1929 * 1930 * ******************************************************************** 1931 * * READ FROM BLOCK ROUTINES * 1932 * ******************************************************************** 1933 * 1934 * 1935 * 1936 * JST R24B READ 24 BITS. THE NEXT 24 BITS OF THIS DATA BLOCK 1937 * ARE TRANSFERRED TO LOCATIONS 'DATA' AND 'DATA+1'. 1938 * IF THERE ARE NOT 24 BITS LEFT, THE RETURN WILL BE 1939 * SAVED WHILE SUCCEEDING BLOCKS ARE READ. WHEN A DATA 1940 * BLOCK IS READ IN, ITS FIRST 24 BITS WILL BE SUPPLIED 1941 * AND THE OLD RETURN TAKEN. 1942 * 1943 01520 0 000000 R24B DAC ** HERE TO READ 24 BITS 1944 01521 0 02 01662 LDA R24S PICK UP THE EVEN-ODD SWITCH. 1945 01522 0 05 01677 ERA ='100000 FLIP IT. 1946 01523 100400 SPL IS THIS EVEN OR ODD CALL.Q
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 41

1947 01524 0 01 01543 JMP R24E EVEN. GO TO IT. 1948 01525 0 04 01662 STA R24S ODD. UPDATE SWITCH. 1949 01526 0 10 01555 JST LEFT MAKE SURE WORD IS LEFT. 1950 01527 -0 02 00657 LDA* BUFP YES. GET WORD. 1951 01530 0414 70 LGL 8 WANT LAST HALF THIS ONE. 1952 01531 0 04 03774 STA DATA SAVE PARTIAL WORD. 1953 01532 0 12 00657 IRS BUFP MOVE TO NEXT WORD. 1954 01533 -0 02 00657 LDA* BUFP PICK IT UP. 1955 01534 0404 70 LGR 8 NEXT EIGHT BITS RIGHT. 1956 01535 0 05 03774 ERA DATA COMBINE WITH FIRST EIGHT. 1957 01536 0 04 03774 STA DATA SAVE COMPLETE WORD. 1958 01537 -0 02 00657 LDA* BUFP GET LAST EIGHT BITS. 1959 01540 0414 70 LGL 8 POSITION THEM. 1960 01541 0 04 03775 R24X STA DATA+1 SAVE SECOND WORD. 1961 01542 -0 01 01520 JMP* R24B EXIT. 1962 * 1963 01543 0 10 01555 R24E JST LEFT EVEN CALL. 1964 01544 0 10 01555 JST LEFT MAKE SURE TWO WORDS LEFT. 1965 01545 0 04 01662 STA R24S OK, UPDATE THE SWITCH SETTING. 1966 01546 0 12 00657 IRS BUFP MOVE TO FIRST WORD. 1967 01547 -0 02 00657 LDA* BUFP GET IT. 1968 01550 0 04 03774 STA DATA PLACE IT. 1969 01551 0 12 00657 IRS BUFP MOVE TO NEXT WORD. 1970 01552 -0 02 00657 LDA* BUFP GET IT. 1971 01553 0 03 01666 ANA ='177400 WANT ONLY EIGHT BITS. 1972 01554 0 01 01541 JMP R24X GO PLACE THEM AND EXIT. 1973 * 1974 01555 0 000000 LEFT DAC ** HERE TO SEE IF A WORD IS LEFT. 1975 01556 0 12 00656 IRS BUFN BUMP THE BUFFER COUNT. 1976 01557 -0 01 01555 JMP* LEFT OK. WORD LEFT. 1977 01560 0 01 00323 JMP BLOK NOT OK, MUST GO REFILL BUFFER. 1978 * 1979 * 1980 * 1981 * JST R48B READ 48 BITS. THE NEXT 48 BITS OF THIS BLOCK WILL 1982 * BE TRANSFERRED TO LOCATIONS 'DATA'...'DATA+2'. IF 1983 * THERE ARE NOT 48 BITS LEFT, NO RETURN WILL BE MADE. 1984 * INSTEAD, CONTROL WILL PROCEED TO 'BLOK' TO READ THE 1985 * NEXT BLOCK. 1986 * 1987 01561 0 000000 R48B DAC ** HERE TO READ 48 BITS. 1988 01562 0 10 01555 JST LEFT MAKE SURE THERE ARE THREE WORDS 1989 01563 0 10 01555 JST LEFT LEFT IN THE BUFFER. 1990 01564 0 10 01555 JST LEFT 1991 01565 0 12 00657 IRS BUFP OK. MOVE TO FIRST WORD. 1992 01566 -0 02 00657 LDA* BUFP GET IT. 1993 01567 0 04 03774 STA DATA PLACE IT. 1994 01570 0 12 00657 IRS BUFP NEXT WORD. 1995 01571 -0 02 00657 LDA* BUFP GET IT. 1996 01572 0 04 03775 STA DATA+1 PLACE IT.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 42

1997 01573 0 12 00657 IRS BUFP LIKEWISE FOR LAST WORD. 1998 01574 -0 02 00657 LDA* BUFP 1999 01575 0 04 03776 STA DATA+2 2000 01576 -0 01 01561 JMP* R48B RETURN TO CALLER., 2001 * 2002 * 2003 * 2004 * JST R6C READ SUBPROGRAM OR COMMON NAME. C(BUFF+1)9 THROUGH 2005 * C(BUFF+4)8 ARE READ INTO 'DATA'...'DATA+2'. 'BUFP' 2006 * IS LEFT POINTING TO 'BUFF+4'. 2007 * 2008 01577 0 000000 R6C DAC ** HERE TO READ SIX CHARACTERS. 2009 01600 0 02 00365 LDA BUFD =(DAC BUFF+1) SET UP BUFFER POINTER. 2010 01601 0 04 00657 STA BUFP 2011 01602 0 02 01622 LDA R6CD SET UP POINTER TO 'DATA'. 2012 01603 0 04 03673 STA T 2013 01604 0 10 01610 JST R6C2 READ LAST TWO CHARACTERS. 2014 01605 0 10 01610 JST R6C2 READ TWO MORE CHARACTERS. 2015 01606 0 10 01610 JST R6C2 READ TWO CHARACTERS. 2016 01607 -0 01 01577 JMP* R6C EXIT TO CALLER. 2017 * 2018 * 2019 * 2020 01610 0 000000 R6C2 DAC ** READ TWO CHARACTERS, FOR 'R6C'. 2021 01611 -0 02 00657 LDA* BUFP GET CURRENT BUFFER WORD. 2022 01612 0414 70 LGL 8 GET ITS SECOND CHARACTER. 2023 01613 -0 04 03673 STA* T IT IS FIRST CHARACTER OF OUTPUT. 2024 01614 0 12 00657 IRS BUFP MOVE TO NEXT BUFFER WORD. 2025 01615 -0 02 00657 LDA* BUFP GET ITS FIRST CHARACTER. 2026 01616 0404 70 LGR 8 POSITION RIGHT. 2027 01617 -0 05 03673 ERA* T COMBINE WITH FIRST CHARACTER. 2028 01620 0 10 03020 JST PUT PLACE OUTPUT WORD. 2029 01621 -0 01 01610 JMP* R6C2 EX1T TO *R6C* AGAIN. 2030 * 2031 01622 0 003774 R6CD DAC DATA POINTER TO 'DATA'. 2032 * 2033 * 2034 * 2035 * ******************************************************************* 2036 * * SECTOR ROUTINES * 2037 * ******************************************************************* 2038 * 2039 * 2040 * 2041 01623 0 000000 SETS DAC ** HERE TO SET BASE, MMOD BY KEY. 2042 01624 -0 02 03672 LDA* SSSP GET OLD BASE, MMOD FLAG. 2043 01625 0414 70 LGL 8 POSITION MMOD FLAG. 2044 01626 0 03 01710 ANA ='040000 ISOLATE IT. 2045 01627 0 05 01703 ERA ='077777 FLIP IT TO PROPER FORM. 2046 01630 0 04 03666 STA MMOD SET MEMORY MODE.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 43

2047 01631 -0 02 03672 LDA* SSSP RESTORE KEY AGAIN. 2048 01632 0 03 01665 ANA ='000200 ISOLATE DAC/NINE-BIT INDICATOR. 2049 01633 0 05 01665 ERA ='000200 FLIP IT TO PROPER FORM. 2050 01634 0 04 01661 STA DACF SET DACF NON-ZERO IF A DAC. 2051 01635 -0 02 03672 LDA* SSSP GET BASE AGAIN. 2052 01636 0 03 01664 ANA ='77000 * 2053 01637 0 10 02015 JST SETB SET BASE SECTOR. 2054 01640 -0 01 01623 JMP* SETS EXIT TO CALLER. 2055 * 2056 * 2057 * 2058 * JST TYP1 TYPE CHARACTER IN C(AREGISTER) 9-16, 2059 * THEN INTERCHANGE CHARACTERS IN A-REGISTER 2060 * 2061 01641 0 000000 TYP1 DAC ** TYPE C(A-REG. 9-16 ON ASR-33 OR 35 2062 01642 74 0004 OTA '4 OUTPUT RIGHT HALF A REG. 2063 01643 0 01 01642 JMP *-1 * 2064 01644 0406 70 ARR 8 INTERCHANGE CHARACTERS 2065 01645 -0 01 01641 JMP* TYP1 EXIT 2066 * 2067 * 2068 * JST TYP2 TYPE THE TWO CHARACTERS IN THE A REG. 2069 * 2070 * 2071 01646 0 000000 TYP2 DAC ** HERE TO TYPE TWO CHARS IN A REG. 2072 01647 0406 70 ARR 8 INTERCHANGE CHARACTERS. 2073 01650 0 10 01641 JST TYP1 TYPE THE FIRST ONE, POSITION SECOND 2074 01651 0 10 01641 JST TYP1 TYPE THE SECOND ONE 2075 01652 -0 01 01646 JMP* TYP2 EXIT 2076 * 2077 * 2078 * 2079 * JST CRLF TYPE A CARRIAGE-RETURN LINE-FEED 2080 * 2081 01653 0 000000 CRLF DAC ** TYPE NEW LINE ON ASR-33/35 2082 01654 0 02 01663 LDA ='106612 C/R - L/F 2083 01655 0 10 01646 JST TYP2 TYPE THEM 2084 01656 140040 CRA NULL CHARACTER 2085 01657 0 10 01641 JST TYP1 TYPE NULL FOR RETURN DELAY 2086 01660 -0 01 01653 JMP* CRLF EXIT 2087 * 2088 * 2089 * 2090 * 2091 01661 DACF BSS 1 DAC FLAG, FOR 'NS44', 'SETS' AND 'USTR'. 2092 01662 R24S BSS 1 EVEN/ODD SWITCH, FOR 'R24B' 2093 * 2094 * 2095 * 2096 01663 106612 FIN END OF SECTOR, FLUSH THE LITERALS.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 44

01664 077000 01665 000200 01666 177400 01667 100006 01670 076000 01671 100777 01672 036000 01673 000777 01674 001000 01675 176000 01676 000017 01677 100000 01700 000003 01701 177777 01702 007700 01703 077777 01704 100005 01705 000004 01706 100077 01707 100405 01710 040000 01711 037777 01712 000001 2097 001713 STB1 EQU * DESECTORING AREA NO. 2 2098 * 2099 * 2100 * 2101 EJCT
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 45

2102 ORG ORG+'2000 START NEW SECTOR. 2103 02000 0 003700 FIL7 DAC COMM 2104 02001 0 000045 DAC1 DAC BOT+3 POINTER TO SYMBOL TALBE 2105 SETB STB2 DESECTOR IN CURRENT SECTOR. 2106 * 2107 * 2108 02002 0 000000 SAVE DAC ** HERE TO PREPARE FOR UNSTRINGING. 2109 02003 0 02 03777 LDA WORD SAVE THE LOCATION COUNTER. 2110 02004 0 04 02012 STA SAVL * 2111 02005 0 02 03666 LDA MMOD SAVE THE MEMORY MODE. 2112 02006 0 04 02013 STA SAVL+1 * 2113 02007 0 02 02674 LDA BASE SAVE THE CURRENT BASE SECTOR. 2114 02010 0 04 02014 STA SAVL+2 * 2115 02011 -0 01 02002 JMP* SAVE EXIT TO CALLER. 2116 02012 SAVL BSS 3 SPACE TO SAVE LOADER, FOR 'SAVE' 2117 * 2118 02015 0 000000 SETB DAC ** HERE TO CHANGE BASE SECTOR. 2119 02016 0 04 02674 STA BASE NEW BASE ORIGIN. 2120 02017 0 03 02722 ANA ='077000 ISOLATE BASE SECTOR NUMBER. 2121 02020 0 06 02723 ADD ='000004 FORM BASE INFORMATION KEY. 2122 02021 0 04 02675 STA BASE+1 SAVE IT TEMPORARILY. 2123 02022 0 02 03352 LDA SYM SET UP FOR A SEARCH OF THE 2124 02023 0 04 03673 STA T SYMBOL TABLE. 2125 02024 0 02 03673 SETL LDA T MOVE TO FIRST OR NEXT ENTRY. 2126 02025 0 10 02342 JST NEXE IF TABLE IS EXHAUSTED, GO 2127 02026 0 01 02042 JMP SETN CREATE NEW ENTRY FOR THE SECTOR. 2128 02027 0 10 02656 JST GET GET ENTRY KEY. 2129 02030 0 05 02675 ERA BASE+1 IS IT THE KEY WE WANT.Q 2130 02031 100040 SZE 2131 02032 0 01 02024 JMP SETL NO. CONTINUE SEARCH. 2132 02033 0 12 03673 IRS T YES. MOVE TO FIRST WORD POINTER. 2133 02034 -0 02 03673 LDA* T GET START OF INDIRECT TABLE. 2134 02035 0 04 02674 STA BASE SET IT UP IN CURRENT BASE. 2135 02036 0 12 03673 IRS T MOVE TO COUNT. 2136 02037 0 02 03673 SETJ LDA T 2137 02040 0 04 02675 STA BASE+1 REMEMBER LOCATION OF THE COUNT. 2138 02041 -0 01 02015 JMP* SETB EXIT TO CALLER. 2139 * 2140 02042 0 02 02674 SETN LDA BASE PICKUP BASE SECTOR 2141 02043 101040 SNZ * 2142 02044 -0 01 02015 JMP* SETB IT'S ALREADY SET - EXIT 2143 02045 0 10 02306 JST GEN3 FIRST TIME THIS SECTOR USED 2144 02046 0 02 02675 LDA BASE+1 CREATE AN ENTRY FOR IT IN TABLE. 2145 02047 0 10 03020 JST PUT PLACE THE KEY. 2146 02050 0 02 02674 LDA BASE PLACE THE ORIGIN OF THE TABLE. 2147 02051 0 10 03020 JST PUT 2148 02052 0 02 02721 LDA ='177777 INTTIALIZE (-COUNT-1) TO SAY 2149 02053 -0 04 03673 STA* T NO ENTRIES MADE. 2150 02054 0 01 02037 JMP SETJ GO COPY TABLE ENTRY, AND EXIT. 2151 *
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 46

2152 * 2153 * 2154 02055 0 000000 REST DAC ** HERE TO RESTORE AFTER UNSTRINGING. 2155 02056 0 02 02012 LDA SAVL RESTORE THE LOCATION COUNTER. 2156 02057 0 04 03777 STA WORD 2157 02060 0 02 02013 LDA SAVL+1 RESTORE THE MEMORY MODE. 2158 02061 0 04 03666 STA MMOD 2159 02062 0 02 02014 LDA SAVL+2 RESTORE THE BASE SECTOR. 2160 02063 0 10 02015 JST SETB 2161 02064 -0 01 02055 JMP* REST EXIT TO CALLER. 2162 * 2163 * 2164 * 2165 02065 0 000000 DESE DAC ** HERE TO DESECTOR 'WORD' TO 'VALU'. 2166 02066 0 02 03677 LDA VALU PICK UP DESIRED ADDRESS. 2167 02067 0 04 03674 STA T+1 ASSUME IT WILL BE DIRECT ADDRESS. 2168 02070 0 05 03777 ERA WORD COMPARE WITH LOC OF INSTRUCTION. 2169 02071 0 03 02722 ANA ='077000 ISOLATE THE SECTOR NUMBERS. 2170 02072 0 03 03666 ANA MMOD 2171 02073 101040 SNZ IS ADDRESS IN SAME SECTOR.Q 2172 02074 0 01 02151 JMP DESC YES. GO HANDLE IT. 2173 02075 0 02 03677 LDA VALU NO. MAYBE ADDRESS IS IN THE 2174 02076 0 03 02722 ANA ='077000 2175 02077 100040 SZE 2176 02100 0 05 02674 ERA BASE CURRENT BASE SECTOR. 2177 02101 0 03 02722 ANA ='077000 ISOLATE SECTOR NUMBERS. 2178 02102 0 03 03666 ANA MMOD CURRENT MODE 2179 02103 101040 SNZ IS ADDRESS IN BASE SECTOR.Q 2180 02104 0 01 02146 JMP DESB YES. GO SERVICE IT. 2181 02105 0 02 02674 LDA BASE PICK UP BASE SECTOR 2182 02106 100040 SZE * 2183 02107 0 01 02113 JMP *+4 * 2184 02110 0 02 02720 LDA ='100 SET TO DEFAULT 2185 02111 0 10 02667 JST MRG2 * 2186 02112 0 10 02015 JST SETB SET THE BASE 2187 02113 -0 02 03777 LDA* WORD NO. MUST CREATE INDIRECT WORD. 2188 02114 0 05 02717 ERA ='032000 CHECK FOR OBJECT INSTRUCTION 2189 02115 0 03 02716 ANA ='036000 'LOAD-INDEX', WHICH MUST BE 2190 02116 101040 SNZ INDIRECTED DIFFERENTLY. 2191 02117 0 01 02136 JMP DESL YES. GO SERVICE 'LDX'. 2192 02120 0 02 03677 LDA VALU NO. GET TARGET ADDRESS. 2193 02121 -0 05 03777 ERA* WORD COMBINE WITH FLAG (AND ALSO 2194 02122 0 03 03666 ANA MMOD TAG IF 16K MEMORY MODE) OF OP. 2195 02123 -0 05 03777 ERA* WORD CREATE INDIRECT WORD. 2196 02124 0 04 03673 STA T SAVE IT TEMPORARILY. 2197 02125 0 02 03666 LDA MMOD TURN ON THE INDIRECT BIT OF 2198 02126 -0 03 03777 DESF ANA* WORD THE OBJECT WORD (AND ALSO 2199 02127 0 05 02242 ERA SIGN TURN OFF ITS TAG IN 16K MODE 2200 02130 -0 04 03777 STA* WORD REPLACE CORRECTED WORD. 2201 02131 0 02 02674 LDA BASE PREPARE FOR SEARCH OF
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 47

2202 02132 0 04 03674 STA T+1 BASE SECTOR INDIRECT TABLE. 2203 02133 -0 02 02675 LDA* BASE+1 SET POINTER AND COUNTER. 2204 02134 0 04 03675 STA T+2 2205 02135 0 01 02166 JMP DEST GO ENTER SEARCH SAFE LOOP. 2206 * 2207 02136 0 02 03677 DESL LDA VALU HERE TO HANDLE 'LDX' CASE. 2208 02137 0 03 03666 ANA MMOD TAG DOES NOT MOVE, EVEN IN 2209 02140 -0 05 03777 ERA* WORD 16K MODE, BUT ADDRESS MUST 2210 02141 0 03 02715 ANA ='077777 BE TRUNCATED TO 14 BITS IF SO, 2211 02142 -0 05 03777 ERA* WORD CREATE INDIRECT WORD. 2212 02143 0 04 03673 STA T SAVE IT AWAY. 2213 02144 0 02 02715 LDA ='077777 SET MASK TO RETAIN TAG IN OP. 2214 02145 0 01 02126 JMP DESF GO JOIN STANDARD PROCESSING. 2215 * 2216 02146 0 02 03674 DESB LDA T+1 DESECTOR TO BASE SECTOR. 2217 02147 0 03 02714 ANA ='000777 WIPE ADDRESS TO NINE BITS. 2218 02150 0 01 02154 JMP DESJ SECTOR BIT OFF. 2219 * 2220 02151 0 02 03674 DESC LDA T+1 DESECTOR TO CURRENT SECTOR. 2221 02152 0 03 02714 ANA ='000777 WIPE ADDRESS TO NINE BITS, 2222 02153 0 05 02713 ERA ='001000 SECTOR BIT ON. 2223 02154 -0 05 03777 DESJ ERA* WORD DROP INTO OBJECT WORD. 2224 02155 0 03 02712 ANA ='001777 2225 02156 -0 05 03777 ERA* WORD 2226 02157 -0 04 03777 STA* WORD REPLACE UPDATED WORD. 2227 02160 -0 01 02065 JMP* DESE EXIT TO CALLER. 2228 * 2229 02161 -0 02 03674 DESU LDA* T+1 CONTINUE SEARCH OF INDIRECT TABLE. 2230 02162 0 05 03673 ERA T GET NEXT ENTRY. 2231 02163 101040 SNZ IS IT SAME AS THE ONE WE WANT.Q 2232 02164 0 01 02202 JMP DESG YES. GO USE IT OVER. 2233 02165 0 12 03674 IRS T+1 NO. BUMP COUNTERS. 2234 02166 0 12 03675 DEST IRS T+2 2235 02167 0 01 02161 JMP DESU CONTINUE SEARCH. 2236 02170 0 02 03674 LDA T+1 TABLE EXHAUSTED, GET NEXT 2237 02171 0 05 02674 ERA BASE AVAILABLE LOCATION. 2238 02172 0 03 02722 ANA ='077000 CHECK THAT IT IS STILL IN 2239 02173 100040 SZE THE BASE SECTOR. 2240 02174 0 10 02652 JST MO NO. BASE SECTOR OVERFLOW. 2241 02175 0 02 03673 LDA T YES. PLACE THE INDIRECT 2242 02176 -0 04 03674 STA* T+1 WORD IN IT. 2243 02177 -0 02 02675 LDA* BASE+1 INCREMENT THE BASE SECTOR 2244 02200 0 06 02721 ADD ='177777 USAGE COUNT 2245 02201 -0 04 02675 STA* BASE+1 2246 02202 0 02 03777 DESG LDA WORD SEE IF THE CURRENT SECTOR 2247 02203 0 05 02674 ERA BASE IS THE BASE SECTOR. 2248 02204 0 03 02722 ANA ='077000 2249 02205 100040 SZE 2250 02206 0 01 02146 JMP DESB NO. DESECTOR WITHOUT SECTOR BIT. 2251 02207 0 01 02151 JMP DESC YES. DESECTOR WITH SECTOR BIT.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 48

2252 * 2253 * 2254 * 2255 02210 0 000000 DESS DAC ** HFRE TO DESECTOR FOR STRING. 2256 02211 0 02 02210 LDA *-1 SET UP FOR A RETURN. 2257 02212 0 04 02065 STA DESE THROUGH 'DESE'. 2258 02213 0 02 03677 LDA VALU SET ASSUMED DIRECT ADDRESS. 2259 02214 0 04 03674 STA T+1 IS TARGET ADDRESS IN SAME 2260 02215 0 05 03777 ERA WORD SECTOR AS INSTRUCTION.Q 2261 02216 0 03 02722 ANA ='077000 ISOLATE SECTUR NUMBERS. 2262 02217 101040 SNZ 2263 02220 0 01 02151 JMP DESC SAME SECTOR. GO SERVICE IT. 2264 02221 0 10 02306 JST GEN3 NO. MUST CREATE POINTER WORD. 2265 02222 0 02 02711 LDA ='000003 GET SPACE IN SYMBOL TABLE. 2266 02223 0 10 03020 JST PUT INSERT POINTER WORD KEY. 2267 02224 0 02 03777 LDA WORD INSERT POINTER BACK TO CURRENT 2268 02225 0 10 03020 JST PUT LOCATION. 2269 02226 0 02 03677 LDA VALU FINALLY GET DATA POINTER. 2270 02227 0 03 02715 ANA ='077777 MAKE SURE IT IS ONLY 15-BITS. 2271 02230 -0 04 03673 STA* T PLACE IT. 2272 02231 0 02 02714 LDA ='000777 FLAG STRING POINTER BY ADDRESS 2273 02232 0 01 02154 JMP DESJ OF ABSOLUTE 00777. 2274 * 2275 * 2276 * 2277 02233 0 000000 UNST DAC ** HERE TO UNSTRING TO 'VALU'. 2278 02234 0 10 02250 UNSL JST WALK GENERATE NEXT LOCATION IN STRING. 2279 02235 0 04 02677 STA NEXT SAVE IT. 2280 02236 0 02 01661 LDA DACF ARE WE WORKING DACS OR NINE-BITS.Q 2281 02237 101040 SNZ SKIP IF DAC. 2282 02240 0 01 02243 JMP UNSN NINE-BIT. GO DESECTOR IT. 2283 02241 0 10 03167 JST PROP * 2284 * THE NEXT WORD IS USED AS BOTH AN INST. AND CONST, 2285 02242 100000 SIGN SKP SKIP NINE BIT PROCESSING 2286 02243 0 10 02065 UNSN JST DESE DESECTOR CURRENT WORD. 2287 02244 0 02 02677 LDA NEXT GET NEXT LOCATION. 2288 02245 100040 SZE CHECK FOR END OF STRING. 2289 02246 0 01 02234 JMP UNSL NO. GO CONTINUE SEARCH. 2290 02247 -0 01 02233 JMP* UNST YES. EXIT TO CALLER. 2291 * 2292 * 2293 * 2294 02250 0 000000 WALK DAC ** HERE TO MOVE DOWN STRING ONE POSITION. 2295 02251 0 04 03777 STA WORD SAVE NEXT LOCATION IN STRING. 2296 02252 -0 02 03777 LDA* WORD GET THE WORD. 2297 02253 0 03 02713 ANA ='001000 CHECK THE SECTOR BIT. 2298 02254 101040 SNZ DOES IT POINT TO THE SAME SECTOR.Q 2299 02255 0 01 02263 JMP UNSZ NO. JUMP. 2300 02256 -0 02 03777 LDA* WORD YES. FORM COMPLETE ADDRESS 2301 02257 0 05 03777 ERA WORD BY WIPING IN LOCATION ADDRESS.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 49

2302 02260 0 03 02714 ANA ='000777 2303 02261 0 05 03777 ERA WORD 2304 02262 -0 01 02250 JMP* WALK RESULT IS NEXT LOCATION. EXIT. 2305 * 2306 02263 -0 02 03777 UNSZ LDA* WORD SECTOR BIT ZERO. 2307 02264 0 03 02714 ANA ='000777 IF ADDRESS IS COMPLETELY ZERO, 2308 02265 101040 SNZ THIS IS END OF STRING. 2309 02266 -0 01 02250 JMP* WALK END. GIVE FINAL EXIT. 2310 02267 0 02 03352 LDA SYM NOT END. MUST WORK THROUGH. 2311 02270 0 04 03674 STA T+1 POTNTER IN SYMBOL TABLE. 2312 02271 0 02 03674 UNSK LDA T+1 SET UP SEARCH OF TABLE. 2313 02272 0 10 02342 JST NEXE MOVE TO NEXT ENTRY. 2314 02273 0 10 02652 JST MO NOT FOUND. STRING WAS OVERWRITTEN. 2315 02274 0 04 03674 STA T+1 SAVE POINTER. 2316 02275 0 07 02721 SUB ='177777 MOVE TO BACK POINTER 2317 02276 0 10 02656 JST GET GET IT. 2318 02277 0 05 03777 ERA WORD DOES IT POINT TO US.Q 2319 02300 100040 SZE SKIP IF SO. 2320 02301 0 01 02271 JMP UNSK NO. RESUME SEARCH. 2321 02302 -0 04 03674 STA* T+1 YES. WIPE OUT ENTRY. 2322 02303 0 12 03673 IRS T MOVE TO DATA POINTER. 2323 02304 -0 02 03673 LDA* T GET IT. 2324 02305 -0 01 02250 JMP* WALK IT WILL BE NEXT STRING LOCATION. 2325 * 2326 * 2327 * 2328 * ******************************************************************* 2329 * * SYMBOL TABLE ROUTINES * 2330 * ******************************************************************* 2331 * 2332 * 2333 * 2334 02306 0 000000 GEN3 DAC ** HERE TO OBTAIN 3-WORD ENTRY. 2335 02307 0 02 03352 LDA SYM SET UP POINTER FOR SEARCH 2336 02310 0 04 03673 STA T OF SYMBOL TABLE. 2337 02311 0 02 03673 GENL LDA T MOVE TO THE FIRST OR 2338 02312 0 10 02342 JST NEXE NEXT ENTRY. 2339 02313 0 01 02320 JMP GENE TABLE EXHAUSTED. GO EXTEND IT. 2340 02314 0 10 02656 JST GET SAVE POINTER, GET KEY FOR THIS ENTRY. 2341 02315 100040 SZE CHECK FOR AVAILABLE SLOT. 2342 02316 0 01 02311 JMP GENL NO. CONTINUE HUNT. 2343 02317 -0 01 02306 JMP* GEN3 YES. EXIT TO CALLER, ANSWER IN 'T'. 2344 * 2345 02320 0 02 03352 GENE LDA SYM NEED TO EXTEND TABLE. 2346 02321 0 04 03673 STA T SAVE POINTER TO NEW SLOT. 2347 02322 0 07 02711 SUB ='000003 EXTEND TABLE BY THREE WORDS. 2348 02323 0 04 03352 STA SYM SAVE NEW TABLE INDEX. 2349 02324 0 10 02613 JST FITS SEE IF BIGGER TABLE FITS IN CORE. 2350 02325 140040 CRA YES. WIPE OUT EXTENDED 2351 02326 -0 04 03352 STA* SYM AREA KEY WORD.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 50

2352 02327 -0 01 02306 JMP* GEN3 RETURN TO CALLER. 2353 * 2354 * 2355 * 2356 02330 0 000000 GEN6 DAC ** HERE TO OBTAIN 6-WORD ENTRY. 2357 02331 0 02 03352 LDA SYM GET THE TABLE INDEX. 2358 02332 0 07 02711 SUB ='000003 EXTEND IT BY 3 WORDS. 2359 02333 0 04 03673 STA T SAVE POINTER FOR CALLER. 2360 02334 0 07 02711 SUB ='000003 EXTEND THE TABLE A TOTAL OF 6 WORDS. 2361 02335 0 04 03352 STA SYM SAVE NEW TABLE INDEX. 2362 02336 0 10 02613 JST FITS SEE IF TABLE FITS IN CORE. 2363 02337 140040 CRA CLEAR OUT KEY WORD OF 2364 02340 -0 04 03352 STA* SYM NEW AREA. 2365 02341 -0 01 02330 JMP* GEN6 RETURN TO CALLER. 2366 * 2367 * 2368 * 2369 02342 0 000000 NEXE DAC ** HERE TO ADVANCE POINTER TO NEXT ENTRY. 2370 02343 0 10 02656 JST GET PICK UP KEY WORD, STORE POINTER. 2371 02344 0 03 02242 ANA SIGN CHECK 3/6 INDICATOR, SIGN BIT 2372 02345 100400 SPL PLUS MEANS 3 WORDS, MINUS MEANS 6. 2373 02346 0 02 02711 LDA ='000003 SIX. MOVE AN EXTRA THREE. 2374 02347 0 06 03673 ADD T BUMP THE POINTER. 2375 02350 0 07 02355 SUB NEX3 COMPARE WITH END OF TABLE. 2376 02351 100400 SPL SKIP IF EXHAUSTED. 2377 02352 0 12 02342 IRS NEXE OK. INCREMENT RETURN. 2378 02353 0 06 02356 ADD NEX0 RESTORE POINTER TO NEXT ENTRY. 2379 02354 -0 01 02342 JMP* NEXE RETURN TO CALLER. 2380 * 2381 02355 0 000045 NEX3 DAC BOT+3 BES OF SYMBOL TABLE MINUS THREE. 2382 02356 0 000050 NEX0 DAC BOT+6 BES OF SYMBOL TABLE. 2383 * 2384 * 2385 * 2386 02357 0 000000 SSS DAC ** HERE TO SET UP SYMBOL TABLE SEARCH. 2387 02360 0 02 03352 LDA SYM GET SYMBOL TABLE POINTER. 2388 02361 0 04 03672 STA SSSP SAVE IT FOR SEARCH. 2389 02362 -0 01 02357 JMP* SSS RETURN TO CALLER. 2390 * 2391 * 2392 * 2393 02363 0 000000 SSN DAC ** HERE TO LOOK AT NEXT ENTRY. 2394 02364 0 04 03674 STA T+1 SAVE KEY MASK. 2395 02365 0 02 03672 SSNL LDA SSSP GET THE SEARCH POINTER. 2396 02366 0 10 02342 JST NEXE ADVANCE TO NEXT ENTRY. 2397 02367 -0 01 02363 JMP* SSN END OF TABLE. JST+1 RETURN. 2398 02370 0 04 03672 STA SSSP SAVE ADVANCED POINTER. 2399 02371 0 10 02656 JST GET GET KEY. 2400 02372 0 05 03665 ERA KEY COMPARE WITH DESIRED KEY. 2401 02373 0 03 03674 ANA T+1 ONLY IN BITS DESIRED.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 51

2402 02374 100040 SZE IS IT A MATCH.Q 2403 02375 0 01 02365 JMP SSNL NO. GO TO NEXT ENTRY. 2404 02376 0 02 03672 LDA SSSP YES. GET POTNTER. 2405 02377 0 07 02721 SUB ='177777 MOVE TO FIRST DATA WORD 2406 02400 0 10 02656 JST GET GET IT IN A-REGISTER. 2407 02401 0 12 02363 IRS SSN JST+2 RETURN. 2408 02402 -0 01 02363 JMP* SSN EXIT TO CALLER. 2409 * 2410 * 2411 * 2412 02403 0 000000 CUT DAC ** HERE TO FORM CURRENT KEY. 2413 02404 0 02 03666 LDA MMOD GET THE MEMORY MODE FLAG. 2414 02405 0 05 02721 ERA ='177777 FLIP, SO '100000 = 32K, '140000 = 16K. 2415 02406 0404 70 LGR 8 POSITION TO BIT 10, SET BIT 9. 2416 02407 0 05 02674 ERA BASE INSERT CURRENT BASE SECTOR. 2417 02410 0 03 02710 ANA ='100777 LEAVE TYPE-CODE OPEN. 2418 02411 0 05 02674 ERA BASE 2419 02412 -0 01 02403 JMP* CUT EXIT, RESULT IN A-REGISTER. 2420 * 2421 * 2422 * 2423 02413 0 000000 MACH DAC ** HERE TO COMPARE SIX-CHAR NAMES. 2424 02414 0 05 03774 ERA DATA CHECK FIRST WORD. 2425 02415 100040 SZE 2426 02416 -0 01 02413 JMP* MACH NOT THE SAME. EXIT. 2427 02417 0 10 02662 JST GET2 GET NEXT WORD. 2428 02420 0 05 03775 ERA DATA+1 2429 02421 100040 SZE 2430 02422 -0 01 02413 JMP* MACH NOT THE SAME. EXIT, 2431 02423 0 02 03672 LDA SSSP 2432 02424 0 06 02711 ADD ='000003 2433 02425 0 10 02656 JST GET GET THE THIRD WORD. 2434 02426 0 05 03776 ERA DATA+2 2435 02427 100040 SZE 2436 02430 -0 01 02413 JMP* MACH NOT THE SAME. EXIT. 2437 02431 0 12 02413 IRS MACH OK. MATCHES. INCREMENT RETURN. 2438 02432 -0 02 03672 LDA* SSSP RETURN WITH LOAD/NOLOAD 2439 02433 0 03 02707 ANA ='000400 BIT IN A-REGISTER. 2440 02434 -0 01 02413 JMP* MACH 2441 * 2442 * 2443 * 2444 02435 0 000000 SPUT DAC ** PUT AWAY A-REG FOLLOWED BY 6-CHAR NAME. 2445 02436 0 10 03020 JST PUT PUT AWAY THE KEY. 2446 02437 0 02 03774 LDA DATA GET THE FIRST WORD. 2447 02440 0 10 03020 JST PUT PLACE IT AWAY. 2448 02441 0 02 03775 LDA DATA+1 GET THE SECOND WORD. 2449 02442 0 10 03020 JST PUT PLACE IT AWAY. 2450 02443 0 02 03776 LDA DATA+2 GET THIRD WORD 2451 02444 0 10 03020 JST PUT PLACE IT.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 52

2452 02445 -0 01 02435 JMP* SPUT EXIT, 'T' SET FOR NEXT LOC. 2453 * 2454 * 2455 * 2456 02446 0 000000 DEFS DAC ** HERE TO DEFINE SUBPROG OR COMMON. 2457 02447 140040 CRA SET FLAG TO LEAVE ONE ENTRY 2458 02450 0 04 02676 STA DEFF IN SYMBOL TABLE. 2459 02451 0 10 02357 JST SSS SET UP SEARCH OF SYMBOL TABLE. 2460 02452 0 02 02706 DEFL LDA ='000077 GET ALL ENTRIES OF SAME TYPE. 2461 02453 0 10 02363 JST SSN MOVE TO NEXT ENTRY. 2462 02454 0 01 02512 JMP DEFE END OF TABLE. GO ENTER NAME. 2463 02455 0 10 02413 JST MACH COMPARE THIS ENTRY. 2464 02456 0 01 02452 JMP DEFL NOT THE SAME. RESUME SEARCH. 2465 02457 101040 SNZ SAME. CALLED OR LOADED.Q 2466 02460 -0 01 02446 JMP* DEFS ALREADY LOADED. IGNORE. 2467 02461 0 10 01623 JST SETS CALLED. SET BASE, MMOD, AND DACF. 2468 02462 140040 CRA MAKE SURE THE LOAD FLAG IS ON. 2469 02463 0 04 03671 STA SKIF 2470 02464 0 02 02676 LDA DEFF IS THIS THE FIRST ENTRY SEEN 2471 02465 100040 SZE FOR THIS NAME.Q 2472 02466 0 01 02504 JMP DEFW NO. GO WIPE OUT ENTRY. 2473 02467 -0 02 03672 LDA* SSSP YES. SET FLAG NOW SEEN. 2474 02470 0 04 02676 STA DEFF CHANGE CALL ENTRY 2475 02471 0 03 02705 ANA ='100077 TO LOADED ENTRY. 2476 02472 -0 04 03672 DEFJ STA* SSSP 2477 02473 0 02 03672 LDA SSSP 2478 02474 0 06 02723 ADD ='000004 2479 02475 0 10 02656 JST GET GET LAST REFER LOC IN A, REPLACE WITH 2480 02476 0 04 03674 STA T+1 DEFINED VALUE (FUR FUTURE CALLS). 2481 02477 0 02 03677 LDA VALU 2482 02500 -0 04 03673 STA* T 2483 02501 0 02 03674 LDA T+1 2484 02502 0 10 02233 JST UNST RUN THE REFERENCE STRING. 2485 02503 0 01 02452 JMP DEFL CHECK FOR MORE REFERENCES. 2486 * 2487 02504 0 02 03672 DEFW LDA SSSP SEEN AN ENTRY BEFORE 2488 02505 0 06 02711 ADD ='000003 BOTH HALVES MUST BE SET 2489 02506 0 04 03673 STA T TO ZERO TO AVOID FOULING 2490 02507 140040 CRA LATER TABLE SEARCHES. 2491 02510 -0 04 03673 STA* T 2492 02511 0 01 02472 JMP DEFJ GO JOIN REGULAR PROCESSING. 2493 * 2494 02512 0 02 02676 DEFE LDA DEFF NO MORE ENTRIES FOUND. 2495 02513 100040 SZE HAVE WE SEEN ANY.Q 2496 02514 -0 01 02446 JMP* DEFS YES. ALL DONE, EXIT. 2497 02515 0 10 02330 JST GEN6 NO. WE MUST MAKE ENTRY. 2498 02516 0 02 03665 LDA KEY GET THE KEY. 2499 02517 0 03 02705 ANA ='100077 MAKE SURE IT SAYS LOADED. 2500 02520 0 10 02435 JST SPUT FILL IN KEY AND NAME. 2501 02521 0 02 03677 LDA VALU FILL IN VALUE.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 53

2502 02522 -0 04 03673 STA* T 2503 02523 0 02 03665 LDA KEY GET THE KEY FOR THIS NAME. 2504 02524 0 05 02704 ERA ='100006 CHECK FOR COMMON NAME. 2505 02525 100040 SZE SKIP IF SO. 2506 02526 -0 01 02446 JMP* DEFS NO. EXIT TO CALLER. 2507 02527 0 02 03677 LDA VALU YES. GET THIS ASSIGNMENT. 2508 02530 0 04 03357 STA COMN UPDATE THE COMMON COUNTER. 2509 02531 0 10 02613 JST FITS MAKE SURE CORE LOAD STILL FITS. 2510 02532 -0 01 02446 JMP* DEFS EXIT TO CALLER. 2511 * 2512 * 2513 * 2514 * ******************************************************************* 2515 * * MISCELLANEOUS ROUTINES * 2516 * ******************************************************************* 2517 * 2518 * 2519 * 2520 * STRT HERE TO COMPLETELY INITIALIZE LOADER. 2521 02533 0 04 00042 STRT STA BOT CLEAR OUT ADVANCE ENTRY 2522 02534 0 04 03671 STA SKIF SET TO LOAD NEXT SUBPROGRAM 2523 02535 0 04 03667 STA MODE SET MODE OF LOADING (ABS) 2524 02536 0 04 03345 STA HIGH SET HIGHEST LOC. LOADED 2525 02537 0 04 02674 STA BASE SET TO EQUAL ZERO 2526 02540 0 04 02652 STA MO 2527 02541 0 04 01662 STA R24S RESET THE EVEN-0DD SWITCH 2528 02542 0 02 02715 LDA ='77777 2529 02543 0 04 03333 STA LOW 2530 02544 0 02 02721 LDA =-1 SET LOC. COUNTER TO UNUSUAL VALUE 2531 02545 0 04 03777 STA WORD 2532 02546 0 02 02001 LDA DAC1 =(DAC BOT) INITIALIZE THE SYMBOL TABLE POINTER 2533 02547 0 04 03352 STA SYM TO POINT TO GERM OF SYMBOL TABLE. 2534 02550 0 04 03662 STA BACK SAVE ALSO FOR BACKUP (OLD SKIPPED). 2535 02551 0 02 03673 LDA T RECALL THE USER'S A-REGISTER. 2536 02552 101040 SNZ CLEAR REGISTER MEANS USE DEFAULT. 2537 02553 0 02 02713 LDA ='001000 DEFAULT PROGRAM BREAK. 2538 02554 0 07 02721 SUB ='177777 THE PROGRAM BREAK 2539 02555 0 03 02703 ANA ='077776 MUST BE EVEN. 2540 02556 0 04 03670 STA PBRK SET PROGRAM BREAK. 2541 02557 0 02 02000 LDA FIL7 SET THE COMMON ORIGIN. 2542 02560 0 04 03357 STA COMN 2543 02561 0 04 03663 STA BACK+1 SAVE IT ALSO FOR BACKUP. 2544 02562 0 02 02702 LDA ='101000 (NOP) RESET THE ENTRY SETTER AND THE MAP 2545 02563 0 04 03156 STA SENT+1 PRINTER. 2546 02564 0 04 03233 STA MAP 2547 02565 0 04 03664 STA FLAG ALSO THE 'BLOCK DATA' FLAG 2548 02566 0 04 00417 STA NSDS AND THE NEW DATA SWITCH. 2549 02567 14 0004 OCP 4 ENABLE ASR IN INPUT MODE 2550 02570 0 01 03443 JMP APM SELECT I/O OPTIONS AND RETURN TO (STRN) 2551 02571 140040 STRN CRA PREPARE FOR POSSIBLE HALT, IF DDP-416
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 54

2552 02572 000201 IAB GET BASE SECTOR LOCATION. 2553 02573 140600 SCB CHECK FOR DDP-416 CPU. 2554 02574 101001 SSC C-BIT NEVER OFF IN DDP-416. 2555 02575 000000 HLT HA - ITS A 416 SET THE BASE 2556 02576 101040 SNZ * 2557 02577 0 01 02602 JMP *+3 2558 02600 0 10 02667 JST MRG2 2559 02601 0 10 02015 JST SETB 2560 02602 0 01 00323 JMP BLOK 2561 * 2562 * 2563 * 2564 * 2565 * RSTR HERE TO SET PROGRAM BREAK. 2566 * 2567 02603 14 0004 RSTR OCP '0004 SET THE ASR TO INPUT MODE 2568 02604 101040 SNZ CHECK FOR DEFAULT REQUEST. 2569 02605 0 02 03670 LDA PBRK YES. GET PRESENT VALUE. 2570 02606 0 07 02721 SUB ='177777 THE PROGRAM BREAK MUST BE EVEN 2571 02607 0 03 02703 ANA ='077776 WIPE IT DOWN TO SIZE. 2572 02610 0 04 03777 STA WORD SET THE LOCATION COUNTER. 2573 02611 0 10 03060 JST CLEN PERFORM INTER-PROGRAM CLEAN-UP. 2574 02612 0 01 03443 JMP APM 2575 * 2576 * 2577 * 2578 02613 0 000000 FITS DAC ** HERE TO TEST FOR CORE OVERFLOW. 2579 02614 0 02 03664 LDA FLAG GET THE 'BLOCK-DATA' FLAG. 2580 02615 101400 SMI IF ON, WE ARE LOADING COMMON. 2581 02616 0 01 02635 JMP FITK SO DO NOT UPDATE 'HIGH'. 2582 02617 0 02 03777 LDA WORD CURRENT LOCATION COUNTER 2583 02620 100400 SPL SKIP IF WORD IS A CREDIBLE VALUE 2584 02621 -0 01 02613 JMP* FITS LEAVE HASTILY TO AVOID COMPLICATIONS 2585 02622 0 07 03333 SUB LOW SUBTRACT LOWES LOCATION LOADED INTO 2586 02623 101400 SMI IS NEW LOCATION LOWER THAN CURRENT LOW 2587 02624 0 01 02627 JMP *+3 NO 2588 02625 0 02 03777 LDA WORD YES, SET NEW LOW LOCATION 2589 02626 0 04 03333 STA LOW DO IT . . . 2590 02627 0 02 03777 LDA WORD NOT BLOCK DATA, CHECK THE 2591 02630 0 07 03345 SUB HIGH LOCATION COUNTER AGAINST THE 2592 02631 100400 SPL HIGHEST LOCATION LOADED SO FAR. 2593 02632 0 01 02635 JMP FITK NOT EXCEEDED. 2594 02633 0 02 03777 LDA WORD EXCEEDED. 2595 02634 0 04 03345 STA HIGH UPDATE HIGH COUNTER. 2596 02635 0 02 03345 FITK LDA HIGH CHECK FOR OVERLAP OF 2597 02636 0 07 03357 SUB COMN PROGRAM AND COMMON. 2598 02637 101400 SMI SKIP IF OK. 2599 02640 0 10 02652 JST MO OVERLAP. GO GRIPE. 2600 02641 0 02 03777 LDA WORD COMMON OK. CHECK FOR OVERLAP 2601 02642 0 07 03352 SUB SYM OF PROGRAM AND LOADER.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 55

2602 02643 100400 SPL COMPARE WITH BOTTOM OF LOADER. 2603 02644 -0 01 02613 JMP* FITS BELOW LOADER. OK. 2604 02645 0 02 03777 LDA WORD ABOVE BOTTOM. SEE IF ABOVE 2605 02646 0 07 03537 SUB TOP THE LOADER. 2606 02647 100400 SPL 2607 02650 0 10 02652 JST MO NO. WANTS TO DESTROY LOADER. 2608 02651 -0 01 02613 JMP* FITS YES. OK. RETURN. 2609 * 2610 * 2611 * 2612 * MO HERE TO TAKE 'MO' HALT. 2613 * 2614 02652 0 000000 MO DAC ** MEMORY OVERFLOW. 2615 02653 0 02 02701 LDA ='146717 (MO) GRIPE TO USER. 2616 02654 0 10 00272 JST TYER HALT. 2617 02655 0 01 03233 JMP MAP UPON RESTART, GIVE USER A MAP. 2618 * 2619 * 2620 * 2621 02656 0 000000 GET DAC ** HERE FOR 'LDA 0,A'/ 2622 02657 0 04 03673 STA T SAVE POINTER. 2623 02660 -0 02 03673 LDA* T LOAD THROUGH IT. 2624 02661 -0 01 02656 JMP* GET EXIT TO CALLER. 2625 * 2626 * 2627 * 2628 02662 0 000000 GET2 DAC ** HERE TO GET C(C(SSSP)+2). 2629 02663 0 02 03672 LDA SSSP GET SYMBOL TABLE POINTER. 2630 02664 0 06 02700 ADD ='000002 MOVE UP TWO LOCATIONS. 2631 02665 0 10 02656 JST GET GET CONTENTS. 2632 02666 -0 01 02662 JMP* GET2 RETURN TO CALLER. 2633 * 2634 02667 0 000000 MRG2 DAC ** ENTRY POINT 2635 02670 0 05 03670 ERA PBRK PREPARE TO MERGE PBRK UNDER MASK 2636 02671 0 03 03666 ANA MMOD 0 BITS WILL MATCH PBRK, 1 BITS REMAIN 2637 02672 0 05 03670 ERA PBRK REMOVE PBRK BITS FROM MASKED AREA 2638 02673 -0 01 02667 JMP* MRG2 RETURN TO CALLER 2639 * 2640 02674 BASE BSS 2 CURRENT BASE SECTOR, POINTER TO COUNTER 2641 02676 DEFF BSS 1 DEFINED FLAG, FOR 'DEFS'. 2642 02677 NEXT BSS 1 NEXT ITEM LOC WHILE STRINGING 2643 * 2644 * 2645 * 2646 * (MISCELLANEOUS ROUTINES CONTINUED AFTER LOADER ENTRY BLOCK) 2647 * 2648 * 2649 * 2650 02700 000002 FIN END OF SECTOR. FLUSH THE LITERALS. 02701 146717
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 56

02702 101000 02703 077776 02704 100006 02705 100077 02706 000077 02707 000400 02710 100777 02711 000003 02712 001777 02713 001000 02714 000777 02715 077777 02716 036000 02717 032000 02720 000100 02721 177777 02722 077000 02723 000004 2651 002724 STB2 EQU * DESECTORING AREA NO. 3 2652 * 2653 * 2654 EJCT
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 57

2655 * ******************************************************************** 2656 * * LOADER ENTRY BLOCK * 2657 * ******************************************************************** 2658 * 2659 * 2660 * 2661 ORG ORG+'3000 START NEW SECTOR. 2662 SETB XSA4 DESECTOR AFTER STARTS. 2663 * 2664 * 2665 * 2666 03000 0 01 03011 GO JMP JWB 'XX000.. START LOADING (NORMAL MODE) 2667 03001 0 01 03031 JMP EOT 'XX001.. RECOVER FROM MISSING 'EOT'. 2668 03002 0 01 03232 JMP MAP-1 'XX002.. PRINT MEMORY MAP. 2669 03003 0 01 02603 JMP RSTR 'X003.. SET PROGRAM BREAK. 2670 03004 0 01 03441 JMP FRCE 'XX004.. FORCE LOAD NEXT PROGRAM 2671 03005 0 01 03430 JMP JWB3 'XX005..BEGIN EXECUTION 2672 03006 0 04 03673 JWB1 STA T 'XX006.. START LOADING (EXTENDED MODE) 2673 03007 0 02 03534 LDA ='77777 INTTIALIZE TO DESECTOR IN EXTENDED MODE 2674 03010 0 01 03013 JMP JWB2 2675 03011 0 04 03673 JWB STA T 2676 03012 0 02 03533 LDA ='37777 INTTIALIZE TO DESECTUOR IN NORMAL MODE 2677 03013 0 04 03666 JWB2 STA MMOD 2678 03014 000013 EXA ENABLE EXTENDED ADDRESSING 2679 03015 140040 CRA 2680 03016 0 04 00000 STA 0 2681 03017 0 01 02533 JMP STRT 2682 * 2683 * 2684 * 2685 * 2686 * 2687 * 2688 * ******************************************************************** 2689 * * MISCELLANEOUS ROUTINES (CONTINUED) * 2690 * ******************************************************************** 2691 * 2692 * 2693 * 2694 03020 0 000000 PUT DAC ** HERE TO STORE THROUGH 'T' AND BUMP. 2695 03021 -0 04 03673 STA* T PLACE A-REGISTER THROUGH POINTER. 2696 03022 0 12 03673 IRS T INCREMENT POINTER. 2697 03023 -0 01 03020 JMP* PUT EXIT TO CALLER. 2698 * 2699 * 2700 * 2701 03024 0 000000 SKIP DAC ** HERE TO TEST SKIP FLAG. 2702 03025 0 02 03671 LDA SKIF GET THE SKIP FLAG. 2703 03026 100040 SZE ARE WE SKIPPING OR LOADING.Q 2704 03027 0 01 00323 JMP BLOK SKIPPING. GO READ NEXT BLOCK.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 58

2705 03030 -0 01 03024 JMP* SKIP LOADING. RETURN TO CALLER. 2706 * 2707 * 2708 * 2709 03031 14 0101 EOT OCP '0101 MAKE SURE THE READER IS OFF. 2710 03032 0 10 03060 JST CLEN PERFORM INTERPROGRAM CLEAN-UP. 2711 03033 0 02 03033 LDA * SET THE SKIP FLAG TO 2712 03034 0 04 03671 STA SKIF SKIP THE NEXT SUBPROGRAM. 2713 03035 0 02 02652 LDA MO CHECK IF THERE HAS ALREADY 2714 03036 100040 SZE BEEN A MEMORY OVERFLOW. 2715 03037 0 01 02653 JMP MO+1 YES. TAKE 'MO' HALT AGAIN. 2716 03040 0 02 03535 LDA ='100405 NO. SET UP KEY TO LOOK FOR 2717 03041 0 04 03665 STA KEY MISSING SUBPROGRAMS. 2718 03042 0 10 02357 JST SSS SET UP A SEARCH OF THE SYMBOL TABLE. 2719 03043 0 02 03536 LDA ='100477 MASK FOR KEYS DURING SEARCH. 2720 03044 0 10 02363 JST SSN ARE ANY MISSING.Q 2721 03045 0 01 03051 JMP LCER NO. TAKE 'LC' HALT. 2722 03046 0 02 03532 LDA ='146722 (MR) YES. TAKE 'MR' HALT. 2723 03047 0 10 00272 JST TYER GRIPE TO USER AND HALT. 2724 03050 0 01 03445 JMP APM+2 TEST INPUT DEVICE 2725 * 2726 03051 140040 LCER CRA HERE WHEN THE LOAD IS COMPLETE. 2727 03052 0 04 03671 STA SKIF FORCE LOAD THE NEXT SUBPROGRAM 2728 03053 0 02 03531 LDA ='146303 (LC) IF THF USER CONTINUES LOADING. 2729 03054 0 10 00272 JST TYER CONGRATULATE USER AND HALT. 2730 03055 101040 SNZ IF A NON-ZERO, EXEC. PROGRAM 2731 03056 0 01 03233 JMP MAP IF NOW ZERO MAP 2732 03057 0 01 03430 JMP JWB3 UPON RESTART,EXECUTE PROGRAM 2733 * 2734 * 2735 03060 0 000000 CLEN DAC ** HERE TO PERFORM END CLEAN-UP. 2736 03061 0 02 03664 LDA FLAG CHECK FOR 'BLOCK DATA'. 2737 03062 101400 SMI 2738 03063 0 04 03777 STA WORD RESTORE LOCATION IF 'BLOCK DATA*. 2739 03064 0 02 03777 LDA WORD CHECK FOR EVEN LOCATION. 2740 03065 0 07 03530 SUB ='177777 2741 03066 0 03 03527 ANA ='077776 2742 03067 0 04 03777 STA WORD UPDATE THE LOCATION COUNTER. 2743 03070 0 04 03670 STA PBRK UPDATE THE PROGRAM BREAK. 2744 03071 0 10 02613 JST FITS MAKE SURE IT STILL FITS. 2745 03072 0 02 03227 LDA NOP RESET THE NEW STYLE BLOCK FOUR 2746 03073 0 04 00417 STA NSDS INITIALIZATION SWITCH. 2747 03074 0 04 03664 STA FLAG RESET 'BLOCK DATA' FLAG. 2748 03075 0 10 02002 JST SAVE SAVE LOADER WHILE STRINGING. 2749 03076 0 10 02357 JST SSS SET UP FOR SEARCH OF TABLE. 2750 03077 0 02 03526 LDA ='000002 SET UP KEY FOR ADDRESS-ARITHMETIC. 2751 03100 0 04 03665 STA KEY 2752 03101 0 02 03525 CLEL LDA ='000077 LOOK AT ALL ENTRIES OF THIS TYPE. 2753 03102 0 10 02363 JST SSN MOVE TO NEXT ENTRY. 2754 03103 0 01 03144 JMP CLEX NO MORE ENTRIES. GO RESTORE LOADER.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 59

2755 03104 0 04 03677 STA VALU INTTIALIZE VALUE ACCUMULATOR. 2756 03105 0 02 03672 LDA SSSP SAVE SYMBOL SEARCH 2757 03106 0 04 03774 STA DATA POINTER. 2758 03107 0 10 02662 JST GET2 GET LOCATION WHICH USES 2759 03110 0 04 03777 STA WORD THIS VALUE. 2760 03111 0 02 03525 CLEM LDA ='000077 SEARCH FOR 2761 03112 0 10 02363 JST SSN OTHER REFERENCES 2762 03113 0 01 03127 JMP CLEY TO SAME LOCATION. 2763 03114 0 10 02662 JST GET2 GET LOCATION ENTRY. 2764 03115 0 05 03777 ERA WORD COMPARE TO LOCATION. 2765 03116 100040 SZE IS IT THE SAME.Q 2766 03117 0 01 03111 JMP CLEM NO. CONTINUE SEARCH. 2767 03120 -0 04 03672 STA* SSSP YES, WIPE IT OUT 2768 03121 0 02 03672 LDA SSSP 2769 03122 0 07 03530 SUB ='177777 2770 03123 0 10 02656 JST GET GET VALUE. 2771 03124 0 06 03677 ADD VALU ADD IT IN THE ADDRESS 2772 03125 0 04 03677 STA VALU ACCUMULATOR. 2773 03126 0 01 03111 JMP CLEM GO LOOK FOR MORE REFERENCES. 2774 * 2775 03127 0 02 03774 CLEY LDA DATA ALL ENTRIES FOR THIS ADDRESS 2776 03130 0 04 03672 STA SSSP COMPLETE. RESTORE SEARCH 2777 03131 -0 02 03672 LDA* SSSP POINTER. 2778 03132 0 03 03524 ANA ='000200 IS WORD A DAC OR A NINE-BIT.Q 2779 03133 101040 SNZ CHECK BIT FROM KEY. 2780 03134 0 01 03142 JMP CLED DAC. GO SERVICE. 2781 03135 0 10 01623 JST SETS NINE-BIT. SET BASE, MMOD. 2782 03136 0 10 02065 JST DESE DESECTOR TO VALUE. 2783 03137 140040 CLEJ CRA WIPE OUT THE FINAL 2784 03140 -0 04 03672 STA* SSSP ADDRESS ARITHMETIC ENTRY. 2785 03141 0 01 03101 JMP CLEL NOW MOVE TO NEXT LOCATION. 2786 * 2787 03142 0 10 03167 CLED JST PROP * 2788 03143 0 01 03137 JMP CLEJ GO WIPE ENTRY AND PROCEED. 2789 * 2790 03144 0 10 02055 CLEX JST REST ALL DONE WITH CLEAN-UP. RESTORE LOADER. 2791 03145 0 02 03662 LDA BACK BACK UP THE SYMBOL TABLE POINTER AND 2792 03146 0 04 03352 STA SYM THE COMMON COUNTER IN CASE LAST SUBPROG 2793 03147 0 02 03663 LDA BACK+1 WAS AN OLD-STYLE SKIPPED. 2794 03150 0 04 03357 STA COMN 2795 03151 140040 CRA 2796 03152 -0 04 03352 STA* SYM CLEAN OUT THE ADVANCED ENTRY. 2797 03153 0 04 03667 STA MODE SET ABSOLUTE MODE. 2798 03154 -0 01 03060 JMP* CLEN RETURN TO CALLER. 2799 * 2800 * 2801 * 2802 * JST SENT SET ENTRY LOCATION FOR MAIN PROGRAM. DISABLES ITSELF 2803 * AFTER FIRST CALL. 2804 *
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 60

2805 03155 0 000000 SENT DAC ** HERE TO SET MAIN PROG ENTRY. 2806 03156 101000 NOP OVERWRITE THIS LOC TO DISABLE. 2807 03157 0 10 03201 JST RELO RELOCATE LOCATION IF NECESSARY. 2808 03160 101040 SNZ * 2809 03161 0 02 03333 LDA LOW * 2810 03162 0 10 02667 JST MRG2 ASSURE BIT 2 SET OK IF NORMAL MODE 2811 03163 0 04 03340 STA NTRY SAVE IT AWAY. 2812 03164 0 02 03166 LDA *+2 DISABLE THIS ROUTINE. 2813 03165 0 04 03156 STA SENT+1 FUTURE CALLS IGNORED. 2814 03166 -0 01 03155 JMP* SENT RETURN TO CALLER. 2815 * 2816 * 2817 * PROP - - BITS OF VALUE PLUS BITS FROM (INDIRECT WORD) WHERE 2818 * MMOD IS ZERO, PUT INTO (INDIRECT WORD) 2819 * 2820 03167 0 000000 PROP DAC ** SUBROUTINE 2821 03170 -0 02 03777 LDA* WORD * 2822 03171 0 05 03677 ERA VALU * WORD // //1 111 2823 03172 -0 03 03777 ANA* WORD * MMOD 00 110 011 2824 03173 -0 04 03777 STA* WORD * VALUE 01 010 101 2825 03174 0 05 03666 ERA MMOD * 2826 03175 -0 03 03777 ANA* WORD * RESULT 2827 03176 0 05 03677 ERA VALU * IN *WORD 01 011 101 2828 03177 -0 04 03777 STA* WORD * 2829 03200 -0 01 03167 JMP* PROP EXIT WITH GREAT SPEED 2830 * 2831 * 2832 * 2833 * 2834 * JST RELO RELOCATE ADDRESS IN 'VALU' BY THE RELOCATION CONSTANT 2835 * 'PBRK' ACCORDING TO THE RELOCATION BITS C(A-REG)1,2, 2836 * RESULT IN 'VALU' AND A-REGISTER. 2837 * 00.. ABSOLUTE. 2838 * 01.. POSITIVELY RELOCATABLE. 2839 * 10.. NEGATIVELY RELOCATABLE. 2840 * 11.. NEGATIVELY RELOCATABLE. 2841 * 2842 03201 0 000000 RELO DAC ** HERE TO RELOCATE 'VALU' 2843 03202 0 03 03523 ANA ='140000 ISOLATE BITS 2844 03203 101040 SNZ TEST FOR NO RELOCATION 2845 03204 0 01 03211 JMP RABS ABSOLUTE 2846 03205 100400 SPL RELOCATABLE. PLUS OR MINUS 2847 03206 0 01 03214 JMP RELN NEGATIVE RELOCATION 2848 03207 0 02 03670 LDA PBRK GET RELOCATION CONSTANT 2849 03210 0 03 03666 ANA MMOD MAKE 14 OR 15 BIT 2850 03211 0 06 03677 RABS ADD VALU ADD 16 BIT VALU 2851 03212 0 04 03677 STA VALU 2852 03213 -0 01 03201 JMP* RELO EXIT 2853 03214 0 02 03670 RELN LDA PBRK GET RELOCATION CONSTANT 2854 03215 0 03 03666 ANA MMOD MAKE 14 OR 15 BIT
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 61

2855 03216 0 05 03530 ERA ='177777 ONE'S COMPLEMENT 2856 03217 0 07 03530 SUB ='177777 TWO'S COMPLEMENT 2857 03220 0 01 03211 JMP RABS GO GET VALU 2858 * 2859 * 2860 * 2861 * JST SWCH SWITCH JUMP. RETURNS INDIRECTLY THROUGH 'JST+1+N', 2862 * WHERE 'N' IS IN THE A-REGISTER UPON THE CALL. 2863 * CALL MUST BE FOLLOWED BY A SUFFICIENT NUMBER OF DACS. 2864 * 2865 03221 -0 000000 SWCH DAC* ** INDIRECT RETURN. 2866 03222 0 06 03221 ADD SWCH ADD A-REGISTER TO RETURN LOCATION. 2867 03223 0 04 03221 STA SWCH SET NEW RETURN. 2868 03224 -0 01 03221 JMP* SWCH RETURN THROUGH 'JST+1+N' 2869 * 2870 * 2871 * 2872 * ******************************************************************** 2873 * * SUBPROGRAM STORAGE MAP * 2874 * ******************************************************************** 2875 * 2876 * 2877 * 2878 03225 0 01 03226 MAPF JMP *+1 HERE TO TURN OFF MAP. 2879 03226 0 02 03227 LDA *+1 RESET MAP ENTRY TO 2880 03227 101000 NOP NOP PRINT MAP AGAIN NEXT TIME 2881 03230 0 04 03233 STA MAP 2882 03231 0 01 03031 JMP EOT GO PERFORM END CLEAN-UP. 2883 * 2884 * 2885 * 2886 03232 000013 EXA ENTER EXTENDED ADDRESSING 2887 03233 101000 MAP NOP HERE TO PRINT MEMORY MAP. 2888 03234 0 02 03225 LDA MAPF SET JUMP TO TERMINATE 2889 03235 0 04 03233 STA MAP MAP IF USER DESIRES. 2890 03236 0 10 00307 JST TTYN TURN ON THE TELETYPE. 2891 03237 0 10 01653 JST CRLF SPACE UP A LINE. 2892 03240 0 10 02357 JST SSS SET FOR ENTRY WITH CLEAR 'D' BIT. 2893 03241 0 02 03327 LDA LOWP TYPE LOW ADDRESS 2894 03242 0 10 03365 JST LINE * 2895 03243 0 02 03334 LDA MAP1 TYPE THE PROGRAM ENTRY 2896 03244 0 10 03365 JST LINE LOCATION. 2897 03245 0 02 03341 LDA MAP2 TYPE THE HIGHEST LOCATION 8 2898 03246 0 10 03365 JST LINE LOADED. 2899 03247 0 02 03346 LDA MAP3 TYPE THE SIZE OF THE 2900 03250 0 10 03365 JST LINE SYMBOL TABLE. 2901 03251 0 02 03353 LDA MAP4 TYPE THE COMMON BREAK. 2902 03252 0 10 03365 JST LINE 2903 03253 0 04 03774 MAPP STA DATA CLEAR CURRENT LOCATION COUNTER. 2904 03254 0 10 02357 JST SSS SET UP A SYMBOL TABLE SEARCH.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 62

2905 03255 0 02 03522 LDA ='100000 SET NEXT PASS OFFSET TO BE 2906 03256 0 04 03775 MAPK STA DATA+1 AS LARGE AS POSSIBLE. 2907 03257 140040 MAPL CRA LOOK AT ENTRIES OF ALL KEYS. 2908 03260 0 10 02363 JST SSN MOVE TO NEXT ENTRY. 2909 03261 0 01 03322 JMP MAPE END OF TABLE. GO CLOSE THIS PASS. 2910 03262 -0 02 03672 LDA* SSSP GET KEY FOR THIS ENTRY. 2911 03263 100400 SPL CHECK FOR NAME ENTRY (MINUS). 2912 03264 0 01 03304 JMP MAPS YES. SEE IF NOW IS TIME TO PRINT IT. 2913 03265 0 03 03525 ANA ='000077 NO. MAYBE IT IS A BASE SECTOR 2914 03266 0 05 03521 ERA ='000004 ENTRY (KEY=4). 2915 03267 0 06 03774 ADD DATA PRINT THEM ONLY ON FIRST PASS. 2916 03270 100040 SZE SKIP IF BASE ENTRY ON FIRST PASS. 2917 03271 0 01 03257 JMP MAPL NO. RESUME SEARCH. 2918 03272 -0 02 03673 LDA* T YES. GET BASE TABLE ORIGIN. 2919 03273 0 12 03673 IRS T MOVE TO USAGE. 2920 03274 -0 07 03673 SUB* T CALCULATE LAST LOCATION 2921 03275 0 06 03530 ADD ='177777 USED PLUS ONE. 2922 03276 0 04 03364 STA MA55 SAVE IT FOR PRINTING. 2923 03277 0 02 03360 LDA MAP5 GET POINTER FOR PRINTER. 2924 03300 100000 SKP SKIP AROUND NAME JOINT. 2925 03301 0 02 03673 MAPC LDA T GET POYNTER TO PRINT NAME. 2926 03302 0 10 03365 JST LINE TYPE SYMBOL TABLE LINE. 2927 03303 0 01 03257 JMP MAPL RESUME SEARCH LOOP. 2928 * 2929 03304 0 02 03672 MAPS LDA SSSP HERE FOR NAME ENTRY. 2930 03305 0 06 03521 ADD ='000004 FIND THE VALUE OF THIS NAME. 2931 03306 0 04 03674 STA T+1 2932 03307 -0 02 03674 LDA* T+1 VALUE TO A-REGISTER. 2933 03310 0 07 03774 SUB DATA CHECK IF IT MATCHES VALUES BEING 2934 03311 101040 SNZ PRINTED ON THIS PASS. 2935 03312 0 01 03301 JMP MAPC YES. GO PRINT THIS NAME. 2936 03313 100400 SPL NO. IF IT IS LESS THAN THE CURRENT 2937 03314 0 01 03257 JMP MAPL VALUE, IGNORE IT. 2938 03315 0 07 03775 SUB DATA+1 NO, MORE. COMPARE IT WITH THE 2939 03316 101400 SMI OFFSET FOR THE NEXT PASS. 2940 03317 0 01 03257 JMP MAPL TOO HIGH. IGNORE IT. 2941 03320 0 06 03775 ADD DATA+1 LOWER THAN PRESENT OFFSET. 2942 03321 0 01 03256 JMP MAPK GO DROP OFFSET. 2943 * 2944 03322 0 02 03775 MAPE LDA DATA+1 END OF PASS. CHECK OFFSET. 2945 03323 100400 SPL IF STILL SET TO '100000, THERE IS 2946 03324 0 01 03225 JMP MAPF NO NEXT PASS. EXIT FROM MAP. 2947 03325 0 06 03774 ADD DATA NO. BUMP VALUE AND GO FOR MORE. 2948 03326 0 01 03253 JMP MAPP START NEXT PASS. 2949 * 2950 03327 0 003330 LOWP DAC *+1 2951 03330 125314 BCI 3,*LOW 03331 147727 03332 120240 2952 03333 0 000000 LOW DAC **
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 63

2953 03334 0 003335 MAP1 DAC *+1 PROGRAM ENTRY ADDRESS. 2954 03335 125323 BCI 3,*START 03336 152301 03337 151324 2955 03340 0 000000 NTRY DAC ** 2956 * 2957 03341 0 003342 MAP2 DAC *+1 HIGHEST LOCATION LOADED. 2958 03342 125310 BCI 3,*HIGH 03343 144707 03344 144240 2959 03345 0 000000 HIGH DAC ** 2960 * 2961 03346 0 003347 MAP3 DAC *+1 BOTTOM OF LOADER. 2962 03347 125316 BCI 3,*NAMES 03350 140715 03351 142723 2963 03352 0 000000 SYM DAC ** 2964 * 2965 03353 0 003354 MAP4 DAC *+1 COMMON BREAK. 2966 03354 125303 BCI 3,*COMN 03355 147715 03356 147240 2967 03357 0 000000 COMN DAC ** 2968 * 2969 03360 0 003361 MAP5 DAC *+1 BASE SECTOR USAGE. 2970 03361 125302 BCI 3,*BASE 03362 140723 03363 142640 2971 03364 0 000000 MA55 DAC ** 2972 * 2973 * 2974 * 2975 03365 0 000000 LINE DAC ** HERE TO TYPE LINE AND CR/LF. 2976 03366 0 04 03673 STA T SAVE INPUT POINTER. 2977 03367 0 10 03413 JST LIN2 PRINT TWO CHARACTERS. 2978 03370 0 10 03413 JST LIN2 PRINT NEXT TWO CHARACTERS. 2979 03371 0 10 03413 JST LIN2 PRINT LAST TWO CHARACTERS. 2980 03372 0 02 03520 LDA ='000240 PRINT A BLANK. 2981 03373 0 10 01641 JST TYP1 2982 03374 -0 02 03673 LDA* T NOW GET NUMBER. 2983 03375 0416 74 ALR 4 POSITION IT FOR PRINTING. 2984 03376 0 10 03420 JST LIN8 PRINT OCTAL DIGIT. 2985 03377 0 10 03420 JST LIN8 2986 03400 0 10 03420 JST LIN8 2987 03401 0 10 03420 JST LIN8 2988 03402 0 10 03420 JST LIN8 PRINT LAST OCTAL DIGIT. 2989 03403 -0 02 03672 LDA* SSSP GET KEY WORD FOR THIS ENTRY. 2990 03404 0 03 03517 ANA ='000400 ISOLATE 'DEFINED' BIT. 2991 03405 101040 SNZ SKIP IF UNDEFINED. 2992 03406 0 01 03411 JMP LINX DEFINED. GO TO CR/LF.
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 64

2993 03407 0 02 03516 LDA ='125252 (**) UNDEFINED. 2994 03410 0 10 01646 JST TYP2 TYPE TWO ASTERISKS. 2995 03411 0 10 01653 LINX JST CRLF CARRIAGE-RETURN/LINE-FEED. 2996 03412 -0 01 03365 JMP* LINE EXIT TO CALLER OF 'LINE'. 2997 * 2998 03413 0 000000 LIN2 DAC ** HERE TO ADD TWO CHARS TO LINE. 2999 03414 -0 02 03673 LDA* T GET TWO CHARACTERS. 3000 03415 0 10 01646 JST TYP2 TYPE THEM. 3001 03416 0 12 03673 IRS T BUMP POINTER. 3002 03417 -0 01 03413 JMP* LIN2 RETURN TO CALLER. 3003 * 3004 03420 0 000000 LIN8 DAC ** HERE TO TYPE OCTAL DIGIT. 3005 03421 0 04 03673 STA T SAVE WORD. 3006 03422 0 03 03515 ANA ='000007 ISOLATE DIGIT. 3007 03423 0 06 03514 ADD ='000260 CONVERT TO ASCII. 3008 03424 0 10 01641 JST TYP1 PRINT IT. 3009 03425 0 02 03673 LDA T RESTORE WORD. 3010 03426 0416 75 ALR 3 SHTFT NEXT DIGIT TO POSITION. 3011 03427 -0 01 03420 JMP* LIN8 RETURN. 3012 03430 0 04 03673 JWB3 STA T SAVE THE A REGISTER FOR EXECUTION 3013 03431 0 02 03666 LDA MMOD GET THE INTENDED MODE (SAME AS LOAD) 3014 03432 0404 63 LGR 13 SHIFT OFF ALL BUT FIRST THREE BITS 3015 03433 0 06 03513 ADD ='10 GENERATE THE EXA OR DXA 3016 03434 0 04 03437 STA DEXA SAVE APPROPRIATE MODE OF EXECUTION 3017 03435 0 02 03673 LDA T RESTORE THE A REGISTER 3018 03436 000013 EXA ALLOW ENTRY TO ANYPLACE IN CORE 3019 03437 0 00 00000 DEXA PZE EITHER A DXA (11) OR EXA(13) 3020 03440 -0 01 03340 JMP* NTRY 3021 03441 140040 FRCE CRA FORCE LOAD 3022 03442 0 04 03671 STA SKIF TURN OFF SKIP FLAG 3023 03443 0 02 01000 APM LDA DFLT RESTORE DEFAULT INPUT DEVICE 3024 03444 000000 HHHT HLT HALT FOR INPUT DEVICE 3025 03445 0 04 03661 STA IO SAVE FOR POSSIBLE MTU NO. 3026 03446 101040 SNZ TEST FOR DEFAULT (A=0) 3027 03447 0 02 01000 LDA DFLT PICKUP DEFAULT DEVICE 3028 03450 0 04 01000 STA DFLT CHANGE DEFAULT INPUT TO CURRENT INPUT 3029 03451 0 04 03660 STA PTIN SAVE IN ASR/HSR SWITCH 3030 03452 0 03 03515 ANA ='7 EXTRACT DEVICE CODE 3031 03453 0 07 03512 SUB =3 TEST FOR MAG TAPE 3032 03454 100400 SPL * 3033 03455 0 01 03467 JMP PAP ASR OR HSR 3034 03456 100040 SZE 3035 03457 0 01 03475 JMP DISC DISC INPUT 3036 03460 0 02 03661 LDA IO MAG TAPE 3037 03461 0404 75 LGR 3 RIGHT ADJUST UNIT NO. 3038 03462 0 03 03515 ANA ='7 RETAIN SELECTED UNIT NO. ONLY 3039 03463 100040 SZE IF ZERO RETAIN LAST SELECTED UNIT 3040 03464 0 04 00220 STA UNIT INSERT UNIT NO. IN CALLLING SEQUENCE 3041 03465 0 02 03473 LDA MSW PICK UP MAG BRANCH 3042 03466 0 01 03470 JMP *+2
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 65

3043 03467 0 02 03472 PAP LDA PSW PICK UP PAPER BRANCH 3044 03470 0 04 00662 STA SW SET DEVICE SWITCH 3045 03471 0 01 02571 JMP STRN GO SET BASE 3046 03472 0 000157 PSW DAC R1K+70 BRANCH FOR PAPER 3047 03473 0 000213 MSW DAC MAG BRANCH FOR MAG 3048 03474 0 000225 CCRD DAC CARD BRANCH FOR CARD 3049 * 3050 000770 DOPI EQU '770 DISC INITIALIZATION 3051 000772 DOPO EQU '772 OBJECT INPUT FROM DISC VIA DOP 3052 * 3053 03475 0 07 03526 DISC SUB =2 IS IT CARDS 3054 03476 101040 SNZ NO 3055 03477 0 01 03507 JMP CADD CARD INPUT 3056 03500 0 02 03511 LDA ='100002 BITS 1 AND 15 ON FOR DOP 3057 03501 101000 NOP FOR USED IN SPECIAL SYSTEMS (OCP '40) 3058 03502 000013 EXA * 3059 03503 -0 10 00770 JST* DOPI GET PROGRAM NAME 3060 03504 0 02 03506 LDA DSW DISC ENTRY 3061 03505 0 01 03470 JMP PAP+1 3062 03506 0 000233 DSW DAC DISI ENTRY FOR DISC INPUT 3063 03507 0 02 03474 CADD LDA CCRD 3064 03510 0 01 03470 JMP PAP+1 GO SET DEVICE SWITCH 3065 * 3066 * 3067 03511 100002 FIN FLUSH THE LITERALS 03512 000003 03513 000010 03514 000260 03515 000007 03516 125252 03517 000400 03520 000240 03521 000004 03522 100000 03523 140000 03524 000200 03525 000077 03526 000002 03527 077776 03530 177777 03531 146303 03532 146722 03533 037777 03534 077777 03535 100405 03536 100477 3068 * 3069 * ******************************************************************** 3070 * * STORAGE *
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 66

3071 * ******************************************************************** 3072 * 3073 003660 PTIN EQU ORG+'3660 ASR/HSR SWITCH 3074 003661 IO EQU ORG+'3661 STORAGE FOR INPUT DEVICE 3075 003662 BACK EQU ORG+'3662 SPACE FOR BACKUP SYMBOL COUNT,COMMON BRK. 3076 003664 FLAG EQU BACK+2 'BLOCK DATA'FLAG. STORE 'PBRK' 3077 003665 KEY EQU FLAG+1 STORAGE FOR SYMBOL TABLE KEY WORD 3078 003666 MMOD EQU KEY+1 MEM MODE, 16K(LXD)='037777,32K(EXD)='077777 3079 003667 MODE EQU MMOD+1 ABS ('000000) OR REL ('040000). 3080 003670 PBRK EQU MODE+1 PROGRAM BREAK 3081 003671 SKIF EQU PBRK+1 SKIP FLAG ZERO MEANS LOAD 3082 003672 SSSP EQU SKIF+1 3083 003673 T EQU SSSP+1 FOUR CELLS FOR TEMPORARIES 3084 003677 VALU EQU T+4 ADDRESS OF INSTRUCTION 3085 003700 BUFF EQU ORG+'3700 BLOCK INPUT BUFFER FOR 'R1K'. 3086 003774 DATA EQU BUFF+60 CURRENT INPUT DATA, BLOCK ROUTINES 3087 003777 WORD EQU DATA+3 LOCATION COUNTER. END OF SECTOR 3088 003700 COMM EQU ORG+'3700 3089 * 3090 * 3091 03537 0 003777 TOP DAC WORD 3092 * 3093 003540 XSA4 EQU * DESECTORING AREA NO. 4 3094 * 3095 ORG ORG+'3577 FORCE MEMORY MAP TO GIVE 3096 03577 BSS 1 HIGH ABOVE DESECTORING AREA 3097 * 3098 * 3099 END GO THAT'S ALL FOLKS. APM 003443 BACK 003662 BASE 002674 BLER 000321 BLOK 000323 BOT 000042 BUFD 000365 BUFF 003700 BUFN 000656 BUFP 000657 CADD 003507 CARD 000225 CCRD 003474 CLED 003142 CLEJ 003137 CLEL 003101 CLEM 003111 CLEN 003060 CLEX 003144 CLEY 003127 COMM 003700 COMN 003357 CRLF 001653 CUT 002403 DAC1 002001 DACF 001661 DATA 003774 DEFE 002512 DEFF 002676 DEFJ 002472 DEFL 002452 DEFS 002446 DEFW 002504 DESB 002146 DESC 002151 DESE 002065 DESF 002126 DESG 002202 DESJ 002154 DESL 002136 DESS 002210 DEST 002166 DESU 002161 DEXA 003437 DFLT 001000 DISC 003475 DISI 000233 DOPI 000770A DOPO 000772A DSW 003506 EOT 003031 EXT 000645 FIL7 002000 FITK 002635 FITS 002613 FLAG 003664 FORS 000401 FRCE 003441 GEN3 002306 GEN6 002330 GENE 002320 GENL 002311 GET 002656 GET2 002662 GO 003000 HHHT 003444 HIGH 003345 IO 003661 ISCO 001454 JWB 003011 JWB1 003006 JWB2 003013 JWB3 003430 K 000661 KCKK 000263 KCKM 000256 KEY 003665 KLR 000243 KLR2 000251 LCER 003051
* NAME: LDR-APM DOC. 70180005000 REV. E PAGE 67

LEFT 001555 LIN2 003413 LIN8 003420 LINE 003365 LINX 003411 LOW 003333 LOWP 003327 MA55 003364 MACH 002413 MAG 000213 MAP 003233 MAP1 003334 MAP2 003341 MAP3 003346 MAP4 003353 MAP5 003360 MAPC 003301 MAPE 003322 MAPF 003225 MAPK 003256 MAPL 003257 MAPP 003253 MAPS 003304 MMOD 003666 MO 002652 MODE 003667 MRG2 002667 MRIK 000060 MSW 003473 N10L 000575 N10M 000616 N10S 000635 N10X 000643 N14J 001003 N14K 001007 N44E 001075 N44J 001033 N44K 001041 N44L 001043 N44N 001071 N44S 001103 N44X 001072 N50L 001126 NEX0 002356 NEX3 002355 NEXE 002342 NEXT 002677 NOP 003227 NS00 000366 NS04 000404 NS10 000574 NS14 001001 NS24 001015 NS30 001017 NS44 001022 NS50 001117 NS54 001132 NS60 001135 NS64 001141 NSD0 000435 NSD1 000442 NSD2 000514 NSD3 000531 NSD4 000561 NSDL 000421 NSDM 000534 NSDN 000474 NSDP 000460 NSDR 000434 NSDS 000417 NSDT 000437 NTRY 003340 O104 000237 OD5J 001362 OLD 001150 ORG 000000 OS0 001175 OS1 001204 OS2 001207 OS3 001406 OS4 001410 OS4J 001411 OS5 001420 OS6 001436 OS6C 001467 OS6R 001500 OS7 001503 OS7J 001516 OSD0 001254 OSD1 001261 OSD2 001266 OSD3 001272 OSD4 001277 OSD5 001361 OSD6 001366 OSD7 001371 OSD8 001376 OSDJ 001212 OSDL 001226 OSDT 001256 OUSD 001317 OUSL 001306 OUSN 001332 OUSZ 001340 PAP 003467 PBRK 003670 PROP 003167 PSW 003472 PTIN 003660 PUT 003020 R1K 000051 R1KN 000660 R24B 001520 R24E 001543 R24S 001662 R24X 001541 R48B 001561 R6C 001577 R6C2 001610 R6CD 001622 RABS 003211 RELN 003214 RELO 003201 REST 002055 RSTR 002603 SAVE 002002 SAVL 002012 SENT 003155 SETB 002015 SETJ 002037 SETL 002024 SETN 002042 SETS 001623 SIGN 002242 SKIF 003671 SKIP 003024 SNNF 000370 SNNL 000372 SPUT 002435 SSN 002363 SSNL 002365 SSS 002357 SSSP 003672 STB1 001713 STB2 002724 STBO 000715 STRN 002571 STRT 002533 SW 000662 SWCH 003221 SYM 003352 T 003673 TOP 003537 TTYN 000307 TYER 000272 TYP1 001641 TYP2 001646 UNIT 000220 UNSK 002271 UNSL 002234 UNSN 002243 UNST 002233 UNSZ 002263 VALU 003677 WALK 002250 WORD 003777 XSA4 003540 0000 WARNING OR ERROR FLAGS DAP-16 MOD 2 REV. C 01-26-71
    Multiple Pages