Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | / OS/8 F4 LOADER, V24A |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | // | |
10 | / | |
11 | / | |
12 | / | |
13 | / | |
14 | /COPYRIGHT (C) 1974, 1975 | |
15 | /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. | |
16 | / | |
17 | / | |
18 | / | |
19 | /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A | |
20 | /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- | |
21 | /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER | |
22 | /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE | |
23 | /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO | |
24 | /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE | |
25 | /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. | |
26 | / | |
27 | / | |
28 | /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT | |
29 | /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL | |
30 | /EQUIPMRNT COROPATION. | |
31 | / | |
32 | /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS | |
33 | /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. | |
34 | / | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | / | |
40 | \f/ | |
41 | / FIXES FOR V23 J.K. 1975 | |
42 | / | |
43 | / .CORE ROUTINE- RECONIZE CORE RESTRICTION | |
44 | / | |
45 | / | |
46 | / | |
47 | / CHAMGES FOR OS/8 V3D AND OS/78 BY P.T. | |
48 | / .CHANGED VERSION NUMBER TO 24A | |
49 | / .PUT IN NEW DATE ALGORITHM | |
50 | / | |
51 | / | |
52 | VERNUM=24 | |
53 | PATCH="A | |
54 | ||
55 | ESDPG= 7400 /START OF ESD REFERENCE PG IN FIELD 1 | |
56 | LHDR= 7200 /WD0 IN CORE OF LDR HDR IN FIELD 1 | |
57 | OS8SWS= 7643 | |
58 | OSJSWD= 7746 | |
59 | OS8DCB= 7760 | |
60 | OSDATE= 7666 | |
61 | AC7776= CLL STA RAL | |
62 | AC7775= CLL STA RTL | |
63 | AC4000= CLA STL RAR | |
64 | AC2000= CLA STL RTR | |
65 | AC0002= CLA STL RTL | |
66 | ||
67 | / PASS0 DEFINITIONS | |
68 | / ----- ----------- | |
69 | ||
70 | MCTTBL= 6000 /MODULE COUNT TABLE BASE | |
71 | OVTLEN= 2^20^7+2+1 /2 WORDS/OVERLAY, 2 FOR MAIN & 1 FGL | |
72 | OVLTBL= MCTTBL-OVTLEN /(FGL = FOR GOOD LUCK) | |
73 | MODTBL= 21^7+MCTTBL+3 /START OF MODULE TABLE | |
74 | NUMMOD= 7200-MODTBL%3 /NUMBER OF ENTRIES IN MODULE TABLE | |
75 | PTRIO= NDX6 /FLD1;INIT SET TO 7617-1 | |
76 | RALFBF= 7000 /FLD1;BLK TO READ"ESD"FOR FILE CHK | |
77 | \f/LOADER IMAGE HEADER BLOCK DUMMY SECTION | |
78 | ||
79 | NOPUNCH | |
80 | *LHDR | |
81 | 2 /LOADER IMAGE FILE ID | |
82 | QRTSWP, ZBLOCK 2 /SWAPPER ARGS TO LOAD AND START USER MAIN | |
83 | QHGHAD, ZBLOCK 2 /HIGHEST ADDRESS USED BY THIS PROGRAM | |
84 | QVERNO, 0 /LOADER VERSION NUMBER | |
85 | QDPFLG, 0 /"D.P. HARDWARE REQUIRED" FLAG | |
86 | QUSRLV, ZBLOCK 40 /USER OVERLAY LEVEL DSRN INFO | |
87 | LDBUFS, ZBLOCK 50 /PASS2 BUFFER POINTERS | |
88 | ENPUNCH | |
89 | ||
90 | ||
91 | /RTS ENTRY POINTS | |
92 | /** SOME OF THESE MAY CHANGE IN FUTURE VERSIONS OF RTS ** | |
93 | /** (I HOPE NOT) | |
94 | ||
95 | JARGER= 204 | |
96 | JBAK= 210 | |
97 | JDATE= 203 | |
98 | JDEF= 213 | |
99 | JDISMS= 412 | |
100 | JENDF= 211 | |
101 | JEOFSW= 16 | |
102 | JEXIT= 223 | |
103 | JHANG= 524 | |
104 | JIDLE= 227 | |
105 | JINT= 403 | |
106 | JRDAO= 217 | |
107 | JREADO= 221 | |
108 | JRENDO= 206 | |
109 | JRETRN= 235 | |
110 | JREW= 212 | |
111 | JRSVO= 207 | |
112 | JRUO= 215 | |
113 | JSWAP= 222 | |
114 | JT812= 225 | |
115 | JUERR= 204 | |
116 | JWDAO= 216 | |
117 | JWRITO= 220 | |
118 | JWUO= 214 | |
119 | \f *0 | |
120 | TMP0, 0 /TMP0-TMP4 FOR GEN. USE | |
121 | TMP1, 0 | |
122 | TMP2, 0 | |
123 | TMP3, 0 | |
124 | ||
125 | *10 /INDEX REGISTERS | |
126 | NDX0, 0 | |
127 | NDX1, 0 | |
128 | NDX2, 0 | |
129 | NDX3, 0 | |
130 | NDX4, 0 | |
131 | NDX5, 0 | |
132 | NDX6, 0 | |
133 | NDX7, OVLTBL-1 /POINTER INTO OVERLAY LENGTH TABLE | |
134 | ||
135 | USR, 200 /USR CALL: COULD BE 200 OR 7700 | |
136 | PPACK, PACK /CHANGED TO TTYO BY ERROR ROUTINE | |
137 | IOFLG, 0 | |
138 | SYMTM3, SYMTBL-3 | |
139 | ORGFLG, 0 | |
140 | RFPTR1, 0 | |
141 | GPTR, 0 | |
142 | LBPTR, 0 | |
143 | TRPCNT, 0 | |
144 | P2FLG, 0 | |
145 | CZFLG, 0 | |
146 | F1FLG, 0 | |
147 | S8FLG, 0 | |
148 | OVRFLO, -1 | |
149 | SWITZ, -1 | |
150 | SVMAIN, -4 /0 IF /S SPECIFIED | |
151 | DPFLG, 0 | |
152 | ||
153 | \f/MORE PAGE ZERO LOCATIONS | |
154 | GTYP, 0 | |
155 | EPTR, 0 | |
156 | EPT2, 0 | |
157 | ETYP, 0 | |
158 | BPTR, 0 | |
159 | BPT2, 0 | |
160 | REFPTR, 0 | |
161 | RLEN, 0 | |
162 | FTMP0, 0;0 | |
163 | RBLK, 0 | |
164 | FATAL, 0 | |
165 | BP, LDBUFS /POINTER INTO PASS2 BUFFER ARRAY | |
166 | A1, 1;0 /CURRENT ADDRESS IN FIELDS 1-7 | |
167 | LNONUM, 0 | |
168 | LBCNT, 0 | |
169 | BLKCNT, 0 | |
170 | TRAPV, 0;0 | |
171 | BLKSIZ, 0 | |
172 | BSECTP, 0 /POINTER INTO BINARY SECTION TABLE (PASS 2) | |
173 | OUTINH, 0 | |
174 | BLKBEG, 0 | |
175 | NEWBLK, 0 | |
176 | NEWLEN, 0 | |
177 | MCNT, 0 | |
178 | MBGCNT, 0 | |
179 | TMP4, 0 | |
180 | TMP5, 0 | |
181 | PAGE | |
182 | \f/LOADER STARTS AT 200 | |
183 | ||
184 | ISZ .+2 /NON-CHAIN ENTRY | |
185 | JMP I .+1 /CHAIN ENTRY | |
186 | START | |
187 | ||
188 | /COME HERE TO READ/WRITE THE LOADER IMAGE. | |
189 | ||
190 | LDRIO, 0 /AC=4000 FOR WRITE, 0 FOR READ | |
191 | DCA LDRIOC /STORE READ/WRITE | |
192 | JMS I (NEWBUF | |
193 | TAD BP | |
194 | DCA LDRIOA | |
195 | ISZ LDRIOA | |
196 | TAD I LDRIOA | |
197 | DCA LDRIOB /BLOCK # | |
198 | ISZ LDRIOA | |
199 | TAD I LDRIOA /NUMBER OF BLOCKS LEFT IN SECTION | |
200 | SPA SNA | |
201 | JMP LDRIOR /NULL BUFFER - JUST IN CASE | |
202 | TAD [-4 | |
203 | SMA | |
204 | CLA /IF >4 BLOCKS LEFT ONLY DO 4 | |
205 | TAD [4 | |
206 | CLL RTR | |
207 | RTR | |
208 | RTR | |
209 | TAD LDRIOC /ADD READ/WRITE | |
210 | CDF 0 | |
211 | TAD I (OUTFLD | |
212 | TAD (-CDF | |
213 | DCA LDRIOC /STORE R/W + BLOCK COUNT + FLD BITS | |
214 | TAD BLKBEG | |
215 | DCA LDRIOA | |
216 | JMS I [IOHAN /DF MUST BE 0 HERE! | |
217 | LIMGU /LOADER IMAGE FILE | |
218 | LDRIOC, 0 | |
219 | LDRIOA, 0 | |
220 | LDRIOB, 0 | |
221 | CDF 10 | |
222 | LDRIOR, CLA | |
223 | JMP I LDRIO | |
224 | \fSETBGX, 0 | |
225 | CLA IAC | |
226 | TAD GPTR | |
227 | JMS SETBPT /EXTREMELY COMMON SEQUENCE | |
228 | JMP I SETBGX | |
229 | ||
230 | SETBPT, 0 | |
231 | DCA BPTR /STORE BPTR | |
232 | CLA IAC | |
233 | TAD BPTR | |
234 | DCA BPT2 /AND PTR TO NEXT WD | |
235 | JMP I SETBPT | |
236 | ORGMSG, TEXT /ILLEGAL ORIGIN/ | |
237 | SYMMSG, TEXT /OVER SYMB/ | |
238 | IOMSG, TEXT %LOADER I/O ERROR% | |
239 | ENTMSG, TEXT %OS/8 ENTER ERROR% | |
240 | PAGE | |
241 | \f/TTYHAN- TTY HANDLER FOR OUTPUT OF ANY MESSAGE IN ANY FIELD. | |
242 | / MESSAGE MUST BE FIELD CONTAINED & TERMINATE WITH 0 | |
243 | / HANDLER CAN BE CALLED ACROSS FLDS WITH AC CLR. | |
244 | / RTN WITH"IF & DF" SET TO CALLING FLD. | |
245 | / | |
246 | / CALL CDF X /X=FLD OF CALLER*10 | |
247 | / CIF Y /Y=FLD OF TTYHAN*10 | |
248 | / JMS TTYHAN | |
249 | / CDF Z /Z=FLD OF MESS.BUF | |
250 | / BUFADR /MESS BUF. ADDR. | |
251 | / | |
252 | TTYHAN, 0 | |
253 | TAD (6203 /SETUP MICRO INSTR | |
254 | RDF /CDF & CIF FOR RTN | |
255 | DCA CRLFF+1 | |
256 | TAD I TTYHAN /SET UP FLD OF | |
257 | DCA TTYCDF /MESS BUF | |
258 | ISZ TTYHAN | |
259 | CMA | |
260 | TAD I TTYHAN /SET UP MESS BUFF ADDR-1 | |
261 | DCA MESADR | |
262 | ISZ TTYHAN | |
263 | DCA MESADR+1 | |
264 | TTYCDF, 0 | |
265 | JMS CRLF | |
266 | TTYLP, ISZ MESADR+1 | |
267 | JMP .+3 | |
268 | TAD I MESADR | |
269 | JMP HAF | |
270 | ISZ MESADR | |
271 | CLA CMA | |
272 | DCA MESADR+1 | |
273 | TAD I MESADR | |
274 | RTR | |
275 | RTR | |
276 | RTR | |
277 | HAF, AND [77 | |
278 | SNA | |
279 | JMP CRLFF | |
280 | TAD [240 | |
281 | AND [77 | |
282 | TAD [240 | |
283 | JMS TTYO | |
284 | JMP TTYLP | |
285 | CRLFF, JMS CRLF | |
286 | 0 | |
287 | JMP I TTYHAN | |
288 | MESADR, 0 | |
289 | 0 | |
290 | \fRTNOS8, 0 /HERE ON PASS1 FATAL ERROR | |
291 | STA | |
292 | CDF 10 | |
293 | DCA I (OVLTBL /PRINT SYMBOL MAP W/O OVERLAY LENGTH TABLE | |
294 | DOMAP, JMS I (SYMMAP | |
295 | CDF | |
296 | TAD I RTNOS8 /ADDR OF TTY | |
297 | DCA .+3 /MSG | |
298 | JMS I [TTYHAN | |
299 | CDF | |
300 | 0 | |
301 | TAD (TTYO | |
302 | DCA PPACK /FAKE OUT SYMBOL PRINTER | |
303 | TAD LNONUM | |
304 | DCA GTYP /PUT LEVEL AND OVERLAY IN GTYP | |
305 | JMS I (CVLOVL /OUTPUT LEVEL AND OVERLAY | |
306 | AC7775 | |
307 | DCA TMP5 /PRINT 3 DIGIT FILE-WITHIN-OVERLAY | |
308 | TAD MCNT | |
309 | TAD MBGCNT | |
310 | IAC | |
311 | CLL RTL | |
312 | RAL | |
313 | JMS I (CVRT | |
314 | JMS CRLF /OUTPUT CRLF AFTERWARDS | |
315 | JMP I .+1 /RTN TO | |
316 | 7605 /OS8 | |
317 | ||
318 | LDRNAM, 1;0617;2224;2216;1404 /SYS:FORTRN.LD | |
319 | ZBLOCK 5 /NO DEFAULT SYMBOL MAP DEVICE | |
320 | ||
321 | TTYO, 0 | |
322 | TLS | |
323 | TSF | |
324 | JMP .-1 | |
325 | CLA | |
326 | JMP I TTYO | |
327 | / | |
328 | CRLF, 0 | |
329 | TAD (215 | |
330 | JMS TTYO | |
331 | TAD (212 | |
332 | JMS TTYO | |
333 | JMP I CRLF | |
334 | \f/OS8ER- USED WHEN AN OS/8 ERROR OCCURS WHICH IS FATAL | |
335 | ||
336 | OS8ER, 0 | |
337 | CDF 0 | |
338 | JMS I [TTYHAN | |
339 | CDF 0 /FLD OF MESS BUF | |
340 | SYSERR /ADR OFMESS BUF | |
341 | JMP I [7605 /RTN TO OS8 | |
342 | ||
343 | SYSERR, TEXT /SYSTEM ERROR/ | |
344 | TYTBL, 4040 /CHARS FOR SMAP | |
345 | 0530 /EX (EXTERN) | |
346 | 4040 /GOOD TYPES ARE | |
347 | 4040 /SPACES | |
348 | 1505 /ME (MUL ENTRY) | |
349 | 1523 /MS (MUL SECTN) | |
350 | 4040 /GEN 8MOD SECT | |
351 | 4040 /8MOD COM SECT | |
352 | 4040 /8MOD F1 SECT | |
353 | PAGE | |
354 | \f/IOHAN- I/O HANDLER 1)FETCHES A OS8 DEVICE HANDLER; | |
355 | / 2)CHKS FOR E.O.FILE;3)ISSUES CALL TO THE HANDLER. | |
356 | / RTN TO CALLER WITH "IOFLG" SET IF | |
357 | / NUM OF BLKS TRANSF LESS THAN REQ AMT. | |
358 | / CAN BE CALLED FROM ANY FLD | |
359 | / IF AC=0,DO ALL OF THE ABOVE. | |
360 | / IF AC=DEV NUM,DO ONLY "FETCH"PART | |
361 | / | |
362 | / CALL CDF X | |
363 | / CIF Y | |
364 | / JMS IOHAN | |
365 | / ADDR /PTR TO UNIT,LEN,STBLK OF FILE IN FLD 1 | |
366 | / ARG(1)/OS8 ARG: FCN CTRL WD | |
367 | / ARG(2)/ " : TRNASF BUF ADR | |
368 | / ARG(3)/ " : REL STBLK OF TRANSF | |
369 | / | |
370 | IOHAN, 0 | |
371 | DCA UNITSV /SAV DEV NUM IF ONE | |
372 | DCA IOFLG /CLR FLG | |
373 | RDF | |
374 | TAD P6201 | |
375 | DCA GETCDF+1 | |
376 | TAD P6203 /SETUP CIF & CDF FOR | |
377 | RDF /RTN JMP | |
378 | DCA RTNIO | |
379 | /FETCH A DEV HANDLER OR LOOKUP ENTRY PT | |
380 | /IF DESIRED HANDLER IS IN CORE | |
381 | TAD UNITSV /GET DEV NUM IF ONE | |
382 | SNA CLA /JUST A FETCH? | |
383 | JMP .+3 /NO | |
384 | JMS INQIRE /YES | |
385 | JMP RTNIO | |
386 | TAD I IOHAN /GET PTR TO UNIT(DEV NUM) | |
387 | DCA ULSADR | |
388 | CDF 10 | |
389 | TAD I ULSADR /GET DEV NUM | |
390 | AND [17 | |
391 | SNA | |
392 | JMS I [OS8ER | |
393 | DCA UNITSV | |
394 | JMS INQIRE | |
395 | /CHK FOR E.O.FILE | |
396 | ISZ IOHAN | |
397 | JMS GETCDF | |
398 | TAD I IOHAN /GET FCN CTRL WD | |
399 | CLL RTL /NUM OF PAGES IS CONVRTED | |
400 | RTL /TO NUM BLKS & PUT | |
401 | RTL /IN BITS 8-11 | |
402 | AND [17 | |
403 | DCA TMP0 /NUM BLKS TO TRANSF | |
404 | \f/SETUP FCN CTRL WD; TRANSF BUF ADR; & ABS STBLK OF TRANSF | |
405 | /FOR OS8 CALL TO HANDLER | |
406 | TAD I IOHAN /FCN CTRL WD | |
407 | DCA FCNWD | |
408 | ISZ IOHAN | |
409 | TAD I IOHAN /TRANSF BUF ADR | |
410 | DCA FCNWD+1 | |
411 | ISZ IOHAN | |
412 | TAD I IOHAN /GET REL STBLK & BUILD | |
413 | TAD TMP0 /ABS STBLK | |
414 | CIA CLL | |
415 | ISZ ULSADR | |
416 | CDF 10 | |
417 | TAD I ULSADR /FILE LEN-(REL STB+NUM BLKS) | |
418 | SNL SZA /E.O.FILE CONDITION? | |
419 | JMP .+3 /YES | |
420 | CLA /NO | |
421 | JMP SETSBN | |
422 | TAD TMP0 | |
423 | SMA SZA /ANY BLKS TO TRANSF? | |
424 | JMP IOH /YES | |
425 | CLA /NO | |
426 | /CHK IF FILE LEN=0; IF SO DO SEQ STUFF | |
427 | TAD I ULSADR | |
428 | SNA CLA /SEQ DEV? | |
429 | JMP IOH+1 /YES | |
430 | CMA /NO,=-1 IF NUM BLKS TRANSF L.T. REQ | |
431 | DCA IOFLG | |
432 | JMP RTNIO | |
433 | IOH, DCA TMP0 /THIS NUM OF BLKS | |
434 | /UPDATE FCN CTRL WD IN OS8 CALL | |
435 | TAD FCNWD | |
436 | AND (4077 /REMOVE REQ NUM OF PGS | |
437 | DCA FCNWD /& PUT IN THE | |
438 | TAD TMP0 /ALTERED NUM | |
439 | CLL RTR | |
440 | RTR | |
441 | RTR | |
442 | TAD FCNWD | |
443 | DCA FCNWD | |
444 | CMA /=-1 IF NUM BLKS TRANSF L.T. REQ | |
445 | DCA IOFLG | |
446 | /SETUP STARTING BLK NUMBER | |
447 | / | |
448 | SETSBN, ISZ ULSADR | |
449 | CDF 10 | |
450 | TAD I ULSADR /GET ABS STBLK | |
451 | JMS GETCDF /GET DF | |
452 | TAD I IOHAN /ADD REL STBLK | |
453 | DCA FCNWD+2 | |
454 | TAD I IOHAN /UPDATE REL STBLK | |
455 | TAD TMP0 /BY NUM BLKS OF TRANSF | |
456 | DCA I IOHAN | |
457 | \f/CALL TO THE HANDLER | |
458 | P6203, CIF CDF 0 /IOHAN & OS8 DEV HAN IN FLD 0 | |
459 | KSF /CHK FOR CTRLC | |
460 | JMP .+5 | |
461 | KRS | |
462 | TAD (-203 | |
463 | SNA CLA | |
464 | JMP I [7605 | |
465 | JMS I IOENT | |
466 | FCNWD, 0 | |
467 | 0 | |
468 | 0 | |
469 | JMP HNDERR /ERROR RETURN OF CALL | |
470 | ISZ IOHAN | |
471 | RTNIO, 0 /CIF INSTR | |
472 | JMP I IOHAN | |
473 | IOENT, 0 | |
474 | ULSADR, 0 | |
475 | UNITSV, 0 | |
476 | / | |
477 | GETCDF, 0 | |
478 | 0 | |
479 | JMP I GETCDF | |
480 | ||
481 | HNDERR, JMS I [RTNOS8 | |
482 | IOMSG | |
483 | \f/INQIRE- DETERMINE IF DESIRED DEV HANDLER IS IN CORE | |
484 | / & IF SO,GET ITS ENTRY PT | |
485 | DVTBL=7647 | |
486 | INQIRE, 0 | |
487 | CDF 10 | |
488 | TAD UNITSV | |
489 | TAD (DVTBL-1 | |
490 | DCA IOENT /ADR OF ENRTY PT IN RESID. TBL | |
491 | TAD I IOENT /GET ENTRY PT IF ONE | |
492 | DCA IOENT | |
493 | TAD IOENT | |
494 | SZA CLA /DEV HAN WAS IN CORE? | |
495 | JMP I INQIRE /YES | |
496 | TAD (7201 /NO | |
497 | DCA P6201+4 | |
498 | TAD UNITSV /GET DEV NUM BK | |
499 | P6201, CDF 0 | |
500 | CIF 10 | |
501 | JMS I USR | |
502 | 1 | |
503 | 0 | |
504 | JMS I [OS8ER | |
505 | TAD .-2 | |
506 | DCA IOENT | |
507 | JMP I INQIRE | |
508 | PAGE | |
509 | \fNXTESD, 0 | |
510 | ISZ EPTR /ADV PTR TO | |
511 | ISZ EPTR /WD 0 OF | |
512 | TAD EPTR /NEXT ENTRY | |
513 | AND [377 /IF AT BLK | |
514 | SNA CLA /BOUNDARY | |
515 | TAD [4 /BUMP IT FOUR | |
516 | TAD EPTR | |
517 | JMS I [SETEPT | |
518 | TAD [3 /CHECK FOR | |
519 | TAD EPTR /END OF | |
520 | DCA TMP0 /ESD | |
521 | TAD I TMP0 /TYPE WD | |
522 | AND [17 /TO AC B8-B11 | |
523 | SZA /LAST ESD? | |
524 | ISZ NXTESD /NO | |
525 | DCA ETYP /SAVE TYPE | |
526 | JMP I NXTESD | |
527 | \fADVOVR, 0 /UPDATE PASS1 PASS2 ARGS | |
528 | ISZ MCNT /MORE MODS IN THIS OVR? | |
529 | JMP SAMOVR /YES | |
530 | JMS NXTOVR /SET ARGS FOR NEXT OVER | |
531 | JMP EOLVL /RTN HERE= END OF LEVEL | |
532 | TAD P2FLG /DOING PASS2 ? | |
533 | SMA CLA | |
534 | JMP BY10 /NO | |
535 | TAD (2 /GET NEW LDR | |
536 | TAD BSECTP /IMAGE REL BLK | |
537 | DCA TMP0 /FOR NEXT OVR | |
538 | TAD TMP0 | |
539 | DCA NDX0 | |
540 | TAD I NDX0 /LENGTH OF OVERLAY | |
541 | TAD I TMP0 /PLUS OLD RELATIVE BLOCK | |
542 | DCA I TMP0 /EQUALS NEW RELATIVE BLOCK | |
543 | BY10, TAD LNONUM /ADD 1 TO BITS | |
544 | TAD (20 /4-7 OF LEVEL | |
545 | DCA LNONUM /AND OVR LAY NUM | |
546 | JMP SAMOVR | |
547 | EOLVL, JMS NXTOVR /GET NXT OVR NEW LEVEL | |
548 | JMP SAMOV4 /HERE=END OF ALL LEVELS | |
549 | TAD LNONUM /ADD 1 TO | |
550 | AND [3400 /THE LEVEL | |
551 | TAD (400 /BITS (1-3) | |
552 | DCA LNONUM /AND CLEAR THE OVR BITS | |
553 | TAD P2FLG | |
554 | SMA CLA /DOING PASS2 ? | |
555 | JMP BY7 /NO | |
556 | TAD [4 | |
557 | TAD BSECTP /UPDATE BIN SECTION PTR | |
558 | DCA BSECTP | |
559 | JMP SAMOVR | |
560 | \fBY7, ISZ I (LEVSYM+2 /SET THE INTERNAL LEVEL SYMBOL TO LEVLN+1 | |
561 | TAD (LEVSYM /ENTER NEW | |
562 | JMS I [LOOK /LEVEL SYMBOL INTO GST | |
563 | TAD [4 | |
564 | TAD LNONUM /SET TYPE | |
565 | DCA I GPTR /TO PROG SECTION | |
566 | IAC /SET PTR TO | |
567 | TAD GPTR /NEW LEVEL | |
568 | DCA I [LVPTR | |
569 | LEVRND, TAD I BPT2 | |
570 | CLL | |
571 | TAD [377 /ROUND UP OLD LEVEL | |
572 | AND [7400 /TO A BLOCK BOUNDARY | |
573 | SZL | |
574 | ISZ I BPTR /MIND THE CARRIES! | |
575 | DCA I BPT2 | |
576 | SAMOVR, TAD [3 /ADV PTR TO | |
577 | TAD RFPTR1 /NXT RALF | |
578 | DCA RFPTR1 /MODULE | |
579 | JMP I ADVOVR | |
580 | SAMOV4, ISZ ADVOVR /BUMP RETURN | |
581 | TAD P2FLG | |
582 | SPA CLA | |
583 | JMP SAMOVR /SKIP ROUNDUP IF PASS 2 | |
584 | JMS I (LEVLUP /MERGE OVERLAY SIZE INTO LEVEL SIZE | |
585 | JMP LEVRND /AND RND UP LAST LEVEL | |
586 | \fNXTOVR, 0 /HERE AT END OF OVERLAY | |
587 | ISZ MTBL /GET NUM OF | |
588 | TAD I MTBL /MOD IN NXT | |
589 | SNA /OVR | |
590 | JMP I NXTOVR /=END OF LEVEL | |
591 | DCA MBGCNT | |
592 | TAD MBGCNT | |
593 | CIA | |
594 | DCA MCNT | |
595 | TAD P2FLG | |
596 | SMA CLA | |
597 | JMS I (LEVLUP /SET CUR. LEVL =MAX (CUR LEVL, CURNT OVR) | |
598 | ISZ NXTOVR /RTN P+1 IF | |
599 | JMP I NXTOVR /NOT END OF LEVEL | |
600 | ||
601 | ||
602 | SETCNT, 0 | |
603 | TAD (MCTTBL+1 /PTR TO MOD | |
604 | DCA MTBL /COUNT TBL | |
605 | TAD I MTBL /-NUM IN | |
606 | DCA MBGCNT | |
607 | TAD MBGCNT | |
608 | CIA /MAIN | |
609 | DCA MCNT | |
610 | TAD (MODTBL+3 /PTR TO TOP | |
611 | DCA RFPTR1 /OF MOD TBL | |
612 | DCA I (OVRSIZ | |
613 | DCA I (OVRSIZ+1 | |
614 | JMP I SETCNT | |
615 | MTBL, 0 | |
616 | PAGE | |
617 | \f/LOOKUP OR ENTER A SYMBOL INTO | |
618 | /GLOBAL SYMBOL TABLE (GST). PTR | |
619 | /TO SYMBOL IN FIELD 1 IS IN | |
620 | /AC. USUALLY ITS AN ESD. | |
621 | /RTN P+1=NO MATCH | |
622 | /RTN P+2=MATCH | |
623 | ||
624 | LOOK, 0 | |
625 | DCA TMP0 /PTR TO SYM | |
626 | CDF 10 | |
627 | TAD I TMP0 /SELECT | |
628 | RTR /BUCKET | |
629 | RTR /A-Z, SPACE | |
630 | RTR /OR POUND | |
631 | AND [77 | |
632 | TAD (BUCKET-1 /PTR TO BUCKET | |
633 | LOP5, DCA TMP1 /PTR TO PREV ENTRY | |
634 | TAD I TMP1 /PTR TO NEXT ENTRY | |
635 | SNA /0=BUCKET BOTTOM | |
636 | JMP HOOKIN /NO MATCH | |
637 | IAC /APPEND SYMBOL | |
638 | DCA GPTR /LOOK FOR | |
639 | AC7775 /3 WORD MATCH | |
640 | DCA TMP2 | |
641 | TAD TMP0 | |
642 | DCA EPTR | |
643 | YUCCH, TAD I EPTR | |
644 | CIA CLL | |
645 | TAD I GPTR | |
646 | SZA CLA | |
647 | JMP YECCH /SYMBOLS DIFFER | |
648 | ISZ EPTR | |
649 | ISZ GPTR | |
650 | ISZ TMP2 /ALL MATCH? | |
651 | JMP YUCCH /NO | |
652 | ISZ LOOK /BUMP RTN | |
653 | SETTYP, TAD I EPTR /GET ESD TYPE | |
654 | AND [17 | |
655 | DCA ETYP | |
656 | CLA IAC | |
657 | TAD EPTR | |
658 | JMS I [SETEPT /BUMP EPTR AND SET EPT2 | |
659 | TAD I EPTR /GET ESD NUM | |
660 | RTR /IN B1-B7 | |
661 | RTR /AND SET | |
662 | AND (177 /REFERENCE | |
663 | TAD (ESDPG /POINTER | |
664 | DCA REFPTR | |
665 | TAD I GPTR /SET GST | |
666 | AND [17 /TYPE | |
667 | DCA GTYP /FIELD BITS OF | |
668 | TAD I EPTR /VALUE WORDS | |
669 | AND [7 /CLR | |
670 | DCA I EPTR /HI 9 | |
671 | JMP I LOOK | |
672 | \fYECCH, SZL /IS NEW GUY LESS THAN GST ENTRY? | |
673 | JMP HOOKIN /YES HOOK-IN HERE | |
674 | TAD I TMP1 | |
675 | JMP LOP5 /TRY NEXT | |
676 | HOOKIN, TAD I TMP1 /GET FWD LINK | |
677 | DCA I NDX4 /TO NEXT INTO | |
678 | TAD NDX4 /NEW. PUT FWD | |
679 | DCA I TMP1 /LINK TO NEW INTO PREV. | |
680 | TAD TMP0 /3 SYM | |
681 | DCA EPTR /INTO GST | |
682 | AC7775 | |
683 | DCA TMP2 | |
684 | TAD I EPTR | |
685 | DCA I NDX4 | |
686 | ISZ EPTR | |
687 | ISZ TMP2 | |
688 | JMP .-4 | |
689 | ISZ NDX4 /SET PTR TO | |
690 | TAD NDX4 /WORD 4 (TYPE) | |
691 | DCA GPTR /OF GST | |
692 | ISZ NDX4 /SET PTR TO NEXT | |
693 | ISZ NDX4 /FREE ENTRY | |
694 | TAD [7 /SEE IF | |
695 | TAD NDX4 /GST IS FULL | |
696 | TAD ENDSYM /END OF GST | |
697 | SPA SNA CLA | |
698 | JMP SETTYP /ITS OK | |
699 | JMS I [RTNOS8 /SYMBOL TABLE | |
700 | SYMMSG /OVER FLOW | |
701 | ENDSYM, 1-OVLTBL | |
702 | ||
703 | SETEPT, 0 | |
704 | DCA EPTR | |
705 | CLA IAC | |
706 | TAD EPTR | |
707 | DCA EPT2 /SET PTR TO BOTH WDS OF DBLWD | |
708 | JMP I SETEPT | |
709 | \fGETTYP, 0 /ADV GST PTR | |
710 | TAD [7 /TO WD 4 OF | |
711 | TAD GPTR /ENTRY | |
712 | DCA GPTR /CHECK FOR | |
713 | TAD GPTR | |
714 | TAD ENDSYM | |
715 | SMA CLA | |
716 | JMP I GETTYP | |
717 | TAD I GPTR /END OF GST. | |
718 | SZA CLA /IF NOT END, | |
719 | ISZ GETTYP /ISZ RETURN. | |
720 | JMP I GETTYP | |
721 | ||
722 | OLINE, 0 /OUTPUT A LINE OF TEXT TO THE SYMBOL MAP | |
723 | DCA TMP5 | |
724 | OLINLP, TAD I TMP5 | |
725 | JMS I (HAFWD | |
726 | TAD I TMP5 | |
727 | ISZ TMP5 | |
728 | AND [77 | |
729 | SZA CLA | |
730 | JMP OLINLP | |
731 | JMS I [PCRLF /DOUBLE SPACE AFTERWARDS | |
732 | JMS I [PCRLF | |
733 | JMP I OLINE | |
734 | PAGE | |
735 | \f/HERE TO OUTPUT SYMBOL MAP | |
736 | /EACH SYMBOL IN GST IS 7 WORDS LONG | |
737 | /THE FORMAT IS: | |
738 | /WD0 PTR TO NEXT ALPHABETICAL SYMBOL | |
739 | /WD1 SYMBOL NAME IN PACKED SIX BIT | |
740 | /WD2 ASCII. 00 IS INTERPRETED AS SPACE | |
741 | /WD3 SIX CHARS MAX PER SYMBOL | |
742 | /WD4 B0=1=TRAP VECT SYMBOL ON PASS1 OR | |
743 | / B0=1=PASS2 ERROR, B1-B3=LEVEL NUM | |
744 | / (0-7) B4-B7=OVERLAY NUM (0-17) | |
745 | / B8-B11=TYPE. TYPE FORMAT IS: | |
746 | / 0=END OF ESD TBL (NA TO LDR) | |
747 | / 1=ENTRY POINT | |
748 | / 2=EXTERN | |
749 | / 3=COMMON SECTION | |
750 | / 4=PROGRAM SECTION | |
751 | / 5=MULTIPLE ENTRY POINT | |
752 | / 6=MULTIPLE SECTION | |
753 | / 7=GENERAL 8-MODE SECTION | |
754 | / 10=FIELD1 8-M0DE SECTION | |
755 | / 11=COMMON PG0 8-MODE SECTION | |
756 | / 12-17=UNDEFINED | |
757 | / | |
758 | /WD5 B0-B8=PTR TO PARENT SYMBOL (0R 0) | |
759 | / ON PASS1 =TRAP VECTOR DISPLACEMENT | |
760 | / ON PASS2 | |
761 | / B9-B11=FIELD BITS OF SYMBOL | |
762 | /WD6 ADDR BITS OF SYMBOL | |
763 | ||
764 | /OUTPUT FORMAT OF MAP IS: | |
765 | / | |
766 | /SYMBOL VALUE LEVEL OVRNUM TYPE(*) | |
767 | / | |
768 | /THE TYPE COLUMN IS EITHER 2 BLANKS OR | |
769 | /EX=EXTERN | |
770 | /ME=MULTIPLE ENTRY POINT | |
771 | /MS=MULTIPLE SECTION | |
772 | /ASTERISK MEANS SOME TYPE OF ILLEGAL | |
773 | /REFERENCE TO A SYMBOL AND USUALLY | |
774 | /MEANS A LOADER ORIGINATED TRAP HAS | |
775 | /BEEN GENERATED SOMEWHERE IN THE BINARY | |
776 | /E.G. SUBR GROG AT LEVEL 2 CALLS SUBR | |
777 | /COLUMBO AT LEVEL 1. A USER 7 TRAP | |
778 | /WOULD BE GENERATED IN SUBR GROG, AND | |
779 | /THE SYMBOL COLUMBO WOULD HAVE AN | |
780 | /ASTERISK ASIDE OF IT IN THE TYPE | |
781 | /COLUMN | |
782 | \fSYMMAP, 0 | |
783 | CDF | |
784 | TAD I (LDRNAM+5 /MAP UNIT | |
785 | SNA /IS IT 0 ? | |
786 | JMP NOMAP /YES, NO MAP TO OUTPUT | |
787 | JMS I [IOHAN /FETCH HANDLER | |
788 | TAD I (LDRNAM+5 /ENTER OUTPUT | |
789 | CIF 10 | |
790 | JMS I USR | |
791 | 3 | |
792 | MPBLK, LDRNAM+6 | |
793 | 0 | |
794 | JMP ENTERR /WHOOPS WE HAVE AN ENTER ERROR | |
795 | TAD I (LDRNAM+5 | |
796 | AND [17 | |
797 | CDF 10 | |
798 | DCA I (SMAPU /STORE SYMBOL MAP UNIT | |
799 | TAD (SMAPU /SYMMAP ARGS | |
800 | DCA NDX0 /FOR I/O | |
801 | TAD MPBLK+1 /LENGTH | |
802 | CIA | |
803 | DCA I NDX0 | |
804 | TAD MPBLK | |
805 | DCA I NDX0 | |
806 | TAD (BUCKET /START AT 1ST | |
807 | DCA RLEN /BUCKET (A) | |
808 | TAD (-42 /DO UP UNTIL BUT NOT INCL. | |
809 | DCA RBLK /POUND SIGN | |
810 | AC7775 /INIT PACK ARGS | |
811 | DCA FATAL | |
812 | TAD (RALFBF | |
813 | DCA TMP4 | |
814 | TAD SM600 | |
815 | DCA BLKCNT | |
816 | JMS I [PCRLF | |
817 | TAD (TLINE | |
818 | JMS I (OLINE | |
819 | TAD (STLINE | |
820 | JMS I (OLINE /OUTPUT TITLE AND SUBTITLE | |
821 | TAD I RLEN /1ST SYM | |
822 | LOP10, DCA GPTR | |
823 | TAD GPTR /ANY MORE IN | |
824 | SZA /THIS BUCKET ? | |
825 | JMP JOUSYM /YES | |
826 | ISZ RLEN /NXT BUCKET | |
827 | ISZ RBLK /DONE ALL | |
828 | JMP LOP10-1 /NO | |
829 | ISZ SWITZ /BEEN HERE BEF? | |
830 | JMP DUNMP /YES ALL DONE | |
831 | CLA CMA /SET FOR JUST | |
832 | DCA RBLK /POUND SYMS | |
833 | TAD SVMAIN | |
834 | SNA /DO ONLY #MAIN? | |
835 | JMP LOP10-1 /NO - DO ALL # SYMBOLS | |
836 | PRMAIN, CLA /** REPLACED WITH JMS I (OUTSYM ** | |
837 | \fDUNMP, TAD [-4 /OUT PUT | |
838 | DCA TMP5 /THE HIGHEST LOCATION | |
839 | TAD A1 /USED BY THE PROGRAM | |
840 | TAD (4060 /FLD BITS | |
841 | JMS HAFWD | |
842 | TAD A1+1 | |
843 | JMS I (CVRT | |
844 | TAD (HLINE | |
845 | JMS I (OLINE /PRINT " = HIGHEST LOC USED" | |
846 | JMS I (PROVLY /PRINT OVERLAY TABLE | |
847 | SM600, CLA /** AC NOT 0 ON RETURN** | |
848 | TAD (214 | |
849 | JMS I PPACK | |
850 | TAD (232 /CTRL Z | |
851 | OUFILP, JMS I PPACK | |
852 | TAD BLKCNT /HAVE WE FILLED | |
853 | TAD [600 /A BLOCK UP COMPLETELY? | |
854 | SZA CLA | |
855 | JMP OUFILP /NO | |
856 | CDF /CLOSE SYMMAP | |
857 | TAD I (SYLST /AC=LENGTH | |
858 | DCA SMPCLN | |
859 | TAD I (LDRNAM+5 /MAP UNIT | |
860 | CIF 10 | |
861 | JMS I USR | |
862 | 4 | |
863 | LDRNAM+6 | |
864 | SMPCLN, 0 | |
865 | JMS I [OS8ER | |
866 | NOMAP, CDF 10 | |
867 | JMP I SYMMAP | |
868 | JOUSYM, JMS I (OUTSYM | |
869 | TAD I GPTR /NEXT SYM TO DO | |
870 | JMP LOP10 | |
871 | \fHAFWD, 0 /OUTPUT THE 2 6 BIT ASCII CHARS IN AC | |
872 | DCA TMP3 | |
873 | TAD TMP3 /LEFT HALF 1ST | |
874 | RTR | |
875 | RTR | |
876 | RTR | |
877 | JMS SIXTO8 | |
878 | TAD TMP3 | |
879 | JMS SIXTO8 | |
880 | JMP I HAFWD | |
881 | ||
882 | SIXTO8, 0 /CVRT AC FROM | |
883 | AND [77 /6 TO 8 BIT ASCII | |
884 | SZA | |
885 | TAD [240 /TURN ZEROS TO BLANKS | |
886 | AND [77 | |
887 | TAD [240 | |
888 | JMS I PPACK /PUT IN BUFF IN PS/8 FORMAT | |
889 | JMP I SIXTO8 | |
890 | ||
891 | ENTERR, DCA I (DOMAP /CANCEL SYMBOL MAP FROM RTNOS8 | |
892 | JMS I [RTNOS8 /AS WE MASY HAVE COME FROM SYMMAP | |
893 | ENTMSG | |
894 | PAGE | |
895 | \f/PACK ASCII IN AC INTO OUTPUT BUFF IN | |
896 | /OS/8 3 WORD FORMAT TO 2 12 BIT WORDS | |
897 | ||
898 | PACK, 0 | |
899 | ISZ FATAL /3RD WORD ? | |
900 | JMP ONEOR2 /NO | |
901 | DCA TMP0 /SAVE CHAR | |
902 | AC7776 /BU BUFF PTR | |
903 | TAD TMP4 | |
904 | DCA TMP4 | |
905 | AC7775 | |
906 | DCA FATAL /RESET CNTR | |
907 | JMS ROL /POSITION HI | |
908 | DCA I TMP4 | |
909 | ISZ TMP4 | |
910 | JMS ROL /POSITION LO | |
911 | ONEOR2, DCA I TMP4 | |
912 | ISZ TMP4 | |
913 | ISZ BLKCNT /BLOCK FULL ? | |
914 | JMP I PACK /NO | |
915 | JMS WRBUF | |
916 | TAD SBPTR | |
917 | DCA TMP4 /RESET ARGS | |
918 | TAD (-600 | |
919 | DCA BLKCNT | |
920 | JMP I PACK | |
921 | ||
922 | ROL, 0 | |
923 | TAD TMP0 /3RD CHAR | |
924 | RTL /POSITION | |
925 | RTL /BITS | |
926 | DCA TMP0 /SAV FOR NXT CALL ON LO | |
927 | TAD TMP0 | |
928 | AND [7400 | |
929 | TAD I TMP4 /ADD IN OLDY | |
930 | JMP I ROL | |
931 | ||
932 | WRBUF, 0 /WRITE OUT | |
933 | CDF /SYM MAP | |
934 | JMS I [IOHAN /BUFFER | |
935 | SMAPU /ADDR OF SYM U | |
936 | 200^1!4000!10 /1 BLK OF FLD 1 | |
937 | SBPTR, 7000 /1ST ADDR | |
938 | SYLST, 0 /REL BLK | |
939 | CDF 10 | |
940 | JMP I WRBUF | |
941 | \fCVRT, 0 /CONVERT AC TO | |
942 | DCA CVRTMP /ASCII NUM | |
943 | TAD TMP5 /-NUM OF DIGITS | |
944 | DCA TMP1 /TO CONVERT | |
945 | LOP7, TAD CVRTMP /CVRT LEFT TO | |
946 | RTL /RIGHT | |
947 | RAL /3 BITS PER | |
948 | DCA CVRTMP /DIGIT | |
949 | TAD CVRTMP | |
950 | RAL | |
951 | AND [7 | |
952 | TAD (260 | |
953 | JMS I PPACK | |
954 | ISZ TMP1 /ENOUGH ? | |
955 | JMP LOP7 /NO | |
956 | JMS I (HAFWD /OUTPUT A PAIR | |
957 | JMP I CVRT /OF SPACES | |
958 | ||
959 | OUTSYM, 0 /DO ONE SYMBOL | |
960 | DCA NDX1 /ADDRESS IN AC ON ENTRY | |
961 | AC7775 | |
962 | DCA TMP2 | |
963 | TAD I NDX1 /SYMBOL IS 1ST | |
964 | JMS I (HAFWD | |
965 | ISZ TMP2 | |
966 | JMP .-3 | |
967 | TAD I NDX1 /SAVE | |
968 | DCA GTYP /TYPE | |
969 | TAD I NDX1 /FLD OF SYMBOL | |
970 | JMS PR15 | |
971 | JMS CVLOVL /CONVERT ADDR, LEVEL, OVERLAY | |
972 | TAD GTYP /NOW DO TYPE | |
973 | AND (17 /ITS B8-B11 | |
974 | TAD (TYTBL-1 /PTR TO TBL OF | |
975 | DCA TMP0 /CHAR PAIRS FOR | |
976 | CDF 0 | |
977 | TAD I TMP0 /TYPE EG EX FOR | |
978 | CDF 10 | |
979 | JMS I (HAFWD /EXTERN | |
980 | TAD GTYP /IF ERROR WAS | |
981 | SPA CLA /FOUND DURING PASS2 B0 OF TYPE=1 EG ILLEGAL SUBR CALL. * ON MAP INDICATES | |
982 | TAD (12 /PASS2 ERROR | |
983 | TAD [240 | |
984 | JMS I PPACK | |
985 | JMS PCRLF | |
986 | JMP I OUTSYM | |
987 | ||
988 | CVRTMP, 0 | |
989 | \fCVLOVL, 0 | |
990 | CLA CMA | |
991 | DCA TMP5 /DO LEVEL NUM | |
992 | TAD GTYP /ITS B1-B3 OF | |
993 | RAL /OF TYPE WORD | |
994 | JMS CVRT | |
995 | AC7776 /DO OVER NUM | |
996 | DCA TMP5 /ITS B4-B7 OF | |
997 | TAD GTYP /TYPE WORD | |
998 | RTL /POSITION INTO | |
999 | AND (1700 /HI 2 DIGITS | |
1000 | JMS CVRT | |
1001 | JMP I CVLOVL | |
1002 | ||
1003 | PCRLF, 0 | |
1004 | TAD (215 /EOL | |
1005 | JMS I PPACK | |
1006 | TAD (212 | |
1007 | JMS I PPACK | |
1008 | JMP I PCRLF | |
1009 | ||
1010 | PR15, 0 | |
1011 | AND [7 | |
1012 | TAD (4060 | |
1013 | JMS I (HAFWD | |
1014 | TAD [-4 /NOW DO ADDR OF | |
1015 | DCA TMP5 /SYMBOL | |
1016 | TAD I NDX1 | |
1017 | JMS CVRT | |
1018 | JMP I PR15 | |
1019 | PAGE | |
1020 | \f/PASS 2 OF LOADER - TRANSFORMS BINARIES INTO LOADER IMAGE FILE | |
1021 | ||
1022 | PASS2, DCA LNONUM /SET FOR MAIN | |
1023 | JMS I (BLDTV /BUILD TRAP VECTOR | |
1024 | TAD LBCNT /PROCESS LIBR | |
1025 | CIA /MODULES 1ST | |
1026 | SNA /ANY TO DO? | |
1027 | JMP BY12 /NO | |
1028 | DCA LBCNT /=-NUM TO DO | |
1029 | TAD LBPTR /PTR TO 1ST | |
1030 | DCA RFPTR1 /LIBR MOD | |
1031 | JMS SETREF /INIT RELOC ARGS AND PROCESS TXT | |
1032 | TAD [3 /ADV TO NXT | |
1033 | TAD RFPTR1 /LIBR MOD. | |
1034 | DCA RFPTR1 | |
1035 | ISZ LBCNT /DONE LIBR? | |
1036 | JMP .-5 /NO | |
1037 | BY12, JMS I (SETCNT /SET ARGS TO PROCESS USER MODS. | |
1038 | JMS SETREF /DO 1 MOD | |
1039 | JMS I (ADVOVR /ADVANCE ARGS | |
1040 | JMP .-2 /RTN HERE IF MORE TO DO | |
1041 | JMS I (WRALL /WRITE OUT ALL THE RESIDENT BIN BLOCKS | |
1042 | \f/END OF PASS 2 - RETURN TO OS8 OR CHAIN TO RSYS | |
1043 | ||
1044 | TAD (7616 | |
1045 | DCA NDX0 | |
1046 | TAD I (LIMGU /SAVE UNIT AND BLOCK OF LOADER IMAGE | |
1047 | DCA I NDX0 /FILE IN CD AREA IN CASE WE CHAIN | |
1048 | TAD I (LIMGU+2 | |
1049 | DCA I NDX0 /TO THE RUN-TIME-SYSTEM | |
1050 | DCA I NDX0 /A PRECAUTION | |
1051 | CDF 0 | |
1052 | CIF 10 | |
1053 | JMS I USR | |
1054 | 10 /LOCK USR IN | |
1055 | TAD (200 | |
1056 | DCA USR | |
1057 | TAD I (LDRNAM | |
1058 | CIF 10 | |
1059 | JMS I USR | |
1060 | 4 | |
1061 | LDRNAM+1 /CLOSE LOADER IMAGE FILE | |
1062 | LDCLEN, 0 | |
1063 | JMS I [OS8ER /OOPS! | |
1064 | JMS I (SYMMAP /PRINT SYMBOL TABLE IF REQUESTED | |
1065 | TAD I (OS8SWS | |
1066 | CDF 0 | |
1067 | AND (40 /TEST /G SWITCH | |
1068 | SNA CLA | |
1069 | JMP I [7605 /NOT ON - RETURN TO OS8 | |
1070 | CLA IAC | |
1071 | CHAIN, CIF 10 | |
1072 | JMS I USR | |
1073 | CHCODE, 2 | |
1074 | RTSNAM /LOOKUP RTS | |
1075 | 0 | |
1076 | JMP NORTS | |
1077 | TAD (6 | |
1078 | DCA CHCODE /CHANGE LOOKUP TO CHAIN | |
1079 | JMP CHAIN | |
1080 | ||
1081 | NORTS, DCA I (LDRNAM+5 /KILL SECOND STORAGE MAP | |
1082 | JMS I [RTNOS8 | |
1083 | RTSMSG | |
1084 | RTSNAM, 0622;2423;0000;2326 /FRTS.SV | |
1085 | \fSETREF, 0 | |
1086 | JMS I (RDRLES /GET MODULE ESD TABLE | |
1087 | AC7776 | |
1088 | DCA EPTR | |
1089 | LOP12, JMS I .+4 /GET NXTESD | |
1090 | JMP BY11 /ALL DONE | |
1091 | TAD EPTR /LOOK UP | |
1092 | JMS I [LOOK /SYMBOL | |
1093 | NXTESD | |
1094 | CLA CMA /IGNORE ESD IF | |
1095 | TAD ETYP /ITS AN ENTRY | |
1096 | SNA CLA /POINT | |
1097 | JMP LOP12 /IGNORE | |
1098 | TAD GPTR /PUT ADDR OF | |
1099 | DCA I REFPTR /GST SYM IN | |
1100 | JMP LOP12 /ESD REF. PAGE | |
1101 | BY11, CDF 0 /COMPUTE 1ST | |
1102 | TAD EPTR /TEXT BLK | |
1103 | AND [7400 | |
1104 | CLL RTL | |
1105 | RTL | |
1106 | RAL | |
1107 | IAC | |
1108 | DCA I (TXTBLK | |
1109 | CLA CMA /SET CNT TO -1 | |
1110 | DCA BLKCNT /TO KICK OFF 1ST TXT READ | |
1111 | TAD RFPTR1 /PTR TO | |
1112 | DCA I (TXTBLK-3 /RALF MOD | |
1113 | CDF 10 | |
1114 | JMS I (TXTSCN /RELOCATE | |
1115 | JMP I SETREF /TEXT | |
1116 | PAGE | |
1117 | \fBLDTV, 0 /BUILD UP | |
1118 | TAD TRPCNT /TRAP VECTOR | |
1119 | SNA CLA /ANY TO DO? | |
1120 | JMP I BLDTV /NO | |
1121 | TAD .+2 /GET BASE | |
1122 | JMS I [LOOK /ADDR OF | |
1123 | TRPSYM /TRAP VECT | |
1124 | ISZ GPTR | |
1125 | TAD I GPTR | |
1126 | DCA TMP0 | |
1127 | ISZ GPTR | |
1128 | TAD I GPTR | |
1129 | DCA TMP1 | |
1130 | TAD TMP0 /FOR SUBR | |
1131 | DCA TRAPV /TRPVEC | |
1132 | TAD TMP1 | |
1133 | DCA TRAPV+1 | |
1134 | JMS NEWORG /PROCESS NEW ORIGIN | |
1135 | DCA TRPCNT /WILL BE USED TO MARK GST SYMS | |
1136 | TAD .+2 /THAT HAVE A VECTOR ENTRY | |
1137 | JMS I [LOOK /GET SWAPPER | |
1138 | SWPSYM /ADDR | |
1139 | ISZ GPTR | |
1140 | ISZ GPTR | |
1141 | TAD I GPTR | |
1142 | DCA RFPTR1 | |
1143 | \f TAD SYMTM3 /SCAN GST | |
1144 | LOP11, DCA GPTR /FOR ALL | |
1145 | JMS I [GETTYP /TRAP SYMS | |
1146 | JMP I BLDTV /ALL DONE | |
1147 | TAD I GPTR /IF TYPE WD | |
1148 | SMA CLA /B0=1, THEN SYMBOL NEEDS A VECTOR ENTRY | |
1149 | JMP LOP11+1 /TRY NEXT 1ST WD OF ENTRY IS | |
1150 | TAD (3000 /TRAP3 | |
1151 | JMS I [PUTBIN | |
1152 | TAD RFPTR1 /NXT IS | |
1153 | JMS I [PUTBIN /SWAP ADDR | |
1154 | CLL CML CLA RAR /CLR B0 | |
1155 | TAD I GPTR /OF TYPE WD | |
1156 | DCA I GPTR | |
1157 | TAD I GPTR | |
1158 | ISZ GPTR | |
1159 | RTL | |
1160 | RTL | |
1161 | DCA TMP0 /HAVE TO MUSH SOME BITS AROUND: | |
1162 | TAD TMP0 /OVERLAY NUMBER MOVES FROM B4-7 TO B0-3 | |
1163 | AND [7400 | |
1164 | DCA TMP1 /LEVEL NUMBER MOVES FROM B1-3 TO B6-8 | |
1165 | TAD TMP0 | |
1166 | RTL | |
1167 | RTL | |
1168 | AND (70 | |
1169 | TAD TMP1 | |
1170 | TAD I GPTR /ADD FLD BITS TO MESS | |
1171 | JMS I [PUTBIN | |
1172 | TAD TRPCNT /ADV VECT | |
1173 | TAD (10 /ENTRY NUM | |
1174 | DCA TRPCNT /COUNTER | |
1175 | TAD I GPTR /TAG HI 9 | |
1176 | TAD TRPCNT /OF GST SYM | |
1177 | DCA I GPTR /WD5 WITH TV ENTRY NUMBER | |
1178 | ISZ GPTR | |
1179 | TAD I GPTR /ENTER | |
1180 | JMS I [PUTBIN /ADDR | |
1181 | AC7776 | |
1182 | TAD GPTR | |
1183 | JMP LOP11 /FOR THIS SYM | |
1184 | \fNEWORG, 0 | |
1185 | TAD BSECTP | |
1186 | JMS I [SETEPT /SET PTR TO CURRENT SECTION | |
1187 | TAD I EPT2 | |
1188 | CIA CLL | |
1189 | TAD TMP1 | |
1190 | DCA TMP3 | |
1191 | TAD TMP3 | |
1192 | AND (6000 | |
1193 | DCA TMP2 /DO A DOUBLE PRECISION SUBTRACT | |
1194 | CML RAL | |
1195 | TAD I EPTR | |
1196 | CIA CLL | |
1197 | TAD TMP0 | |
1198 | SPA | |
1199 | JMP BADORG /OUT OF RANGE | |
1200 | CLL RAR | |
1201 | TAD TMP2 /COMBINE AND SHIFT RIGHT 8 | |
1202 | RAL | |
1203 | RTL | |
1204 | RTL /(I.E. LEFT 5) | |
1205 | DCA TMP2 | |
1206 | TAD TMP2 | |
1207 | ISZ EPT2 | |
1208 | TAD I EPT2 /ADD TO RELATIVE BLOCK OF SECTION | |
1209 | DCA NEWBLK | |
1210 | ISZ EPT2 | |
1211 | TAD TMP2 | |
1212 | CIA | |
1213 | TAD I EPT2 | |
1214 | SPA | |
1215 | JMP BADORG /ORIGIN OUT OF RANGE | |
1216 | DCA NEWLEN | |
1217 | JMS I (NEWBB /GET BUFFER USING NEWBLK AND NEWLEN | |
1218 | TAD TMP3 | |
1219 | AND (1777 | |
1220 | TAD BLKBEG | |
1221 | DCA BLKSIZ /FORM POINTER INTO PROPER BUFFER | |
1222 | JMP I NEWORG | |
1223 | BADORG, JMS I [RTNOS8 | |
1224 | ORGMSG /ORIGIN OUT OF CURRENT FILE LIMITS | |
1225 | JMP I NEWORG | |
1226 | PAGE | |
1227 | \fPROVLY, 0 /ROUTINE TO PRINT OVERLAY INFO IN SYMBOL MAP | |
1228 | JMS I [PCRLF | |
1229 | TAD (OTLINE | |
1230 | JMS I (OLINE | |
1231 | TAD (OVLTBL-1 | |
1232 | DCA NDX1 | |
1233 | PROVLP, TAD I NDX1 /GET ENTRY | |
1234 | SPA /TEBLE ENDS WITH -1 | |
1235 | JMP I PROVLY | |
1236 | DCA GTYP | |
1237 | TAD [240 | |
1238 | JMS I PPACK | |
1239 | JMS I (CVLOVL /PRINT LEVEL AND OVERLAY | |
1240 | TAD GTYP | |
1241 | JMS I (PR15 /PRINT 15-BIT LENGTH | |
1242 | JMS I [PCRLF | |
1243 | JMP PROVLP | |
1244 | ||
1245 | RDRLES, 0 /READ A | |
1246 | TAD RFPTR1 /PTR TO RALF | |
1247 | DCA RLARG-1 /MOD | |
1248 | DCA RLARG+2 /STRT AT BLK 0 | |
1249 | CDF /AND READ | |
1250 | JMS I [IOHAN /3 BLKS INTO | |
1251 | 0 /10000-11400 | |
1252 | RLARG, 200^3!10 | |
1253 | 0 | |
1254 | 0 | |
1255 | CDF 10 | |
1256 | JMP I RDRLES | |
1257 | \f/STARTING WITH THE LATEST, | |
1258 | /WRITE OUT ALL CORE RESIDENT | |
1259 | /BINARY BUFFERS | |
1260 | ||
1261 | WRALL, 0 | |
1262 | TAD BP | |
1263 | IAC /PTR TO | |
1264 | DCA TMP0 /CURNT BLK | |
1265 | TAD I TMP0 | |
1266 | SNA CLA /ALL DONE ? | |
1267 | JMP I WRALL /YES | |
1268 | AC4000 | |
1269 | JMS I (LDRIO /WRITE IT | |
1270 | TAD I BP | |
1271 | SNA | |
1272 | JMP I WRALL | |
1273 | DCA BP | |
1274 | JMP WRALL+1 | |
1275 | ||
1276 | NOTREL, JMS I [RTNOS8 | |
1277 | RELMSG | |
1278 | ||
1279 | RELMSG, TEXT /BAD INPUT FILE/ | |
1280 | ||
1281 | RTSMSG, TEXT /NO FRTS/ | |
1282 | \fMERGE, 0 | |
1283 | JMS I (GETTXT /COMBINE TXT | |
1284 | DCA FTMP0 /PAIR WITH | |
1285 | JMS I (GETTXT /PAIR WHOSE | |
1286 | DCA FTMP0+1 /ADDR IS IN BPTR | |
1287 | CLL | |
1288 | TAD I BPT2 | |
1289 | TAD FTMP0+1 | |
1290 | DCA TMP1 | |
1291 | RAL | |
1292 | TAD I BPTR | |
1293 | TAD FTMP0 | |
1294 | AND [7 | |
1295 | DCA TMP0 | |
1296 | TAD FTMP0 /GET THE OPCODE OR WHATEVER | |
1297 | AND [7770 /IS IN THE HIGH 9 BITS | |
1298 | TAD TMP0 /AND COMBINE THEM WITH THE RELOCATED ADDRESS | |
1299 | JMS I [PUTBIN /AND OUTPUT THE MESS | |
1300 | TAD TMP1 | |
1301 | JMS I [PUTBIN /DON'T FORGET WORD 2 | |
1302 | JMP I MERGE | |
1303 | ||
1304 | GETCTL, 0 /GET TEXT | |
1305 | JMS I (GETTXT /CTRL WORD | |
1306 | DCA TMP0 /B4-B11 | |
1307 | TAD TMP0 /IS TYPE | |
1308 | AND [377 /INDICATOR | |
1309 | DCA REFPTR /SOMETIMES | |
1310 | TAD REFPTR /ITS AN ESD. | |
1311 | TAD (ESDPG /WHEN IT IS, | |
1312 | DCA GPTR /GPTR PNTS | |
1313 | TAD I GPTR /TO THE | |
1314 | DCA GPTR /CORRESPONDING GST SYM (WORD 4) | |
1315 | JMS I [SETBGX /AND BPTR POINTS TO THE VALUE | |
1316 | TAD TMP0 /TEXT TYPE | |
1317 | RTL /IS IN | |
1318 | RTL /B0-B3 | |
1319 | RAL /PUT IN | |
1320 | AND [17 /AC8-AC11 | |
1321 | TAD GETCTL | |
1322 | DCA GETCTL /USE IT TO BUMP RETURN ADDRESS | |
1323 | JMP I GETCTL | |
1324 | PAGE | |
1325 | \f/COME HERE ON ORIGIN OR WHEN CROSSING | |
1326 | /AN AREA BOUNDARY TO SELECT A BINARY | |
1327 | /CORE BUFFER FOR A NEW LOADER IMAGE | |
1328 | /AREA. THE BINARY BUFFER TABLE | |
1329 | /ASSOCIATES CORE BUFFERS TO LOADER | |
1330 | /IMAGE AREAS. | |
1331 | ||
1332 | /EACH ENTRY HAS FOUR WORDS - THEY CONTAIN: | |
1333 | ||
1334 | /WORD 1 POINTER TO BUFFER OF NEXT EARLIEST REFERENCE | |
1335 | /WORD 2 RELATIVE BLOCK NUMBER (0 IF UNUSED) | |
1336 | /WORD 3 NUMBER OF BLOCKS LEFT UNTIL END OF SECTION | |
1337 | /WORD 4 BUFFER ADDRESS AND FIELD | |
1338 | ||
1339 | /EACH ENTRY MAPS FROM 1 TO 4 BLOCKS (400 TO 2000 OCTAL WORDS) FROM THE | |
1340 | /ADDRESSES GENERATED BY THE LOADER ONTO THE LOADER IMAGE FILE. | |
1341 | /THE RELATIVE BLOCK NUMBERS ARE ALWAYS OF THE FORM S+4N, WHERE | |
1342 | /S IS THE RELATIVE BLOCK NUMBER OF THE NEAREST BINARY SECTION | |
1343 | / (A BINARY SECTION IS AN OVERLAY OR "MAIN"). | |
1344 | ||
1345 | /THE BUFFERS ARE ORGANIZED AS A CHAIN IN ORDER OF REFERENCE, | |
1346 | /WITH WORD 1 BEING THE LINK TO THE NEXT EARLIEST BUFFER. IN CASE | |
1347 | /A BUFFER NEEDS TO BE WRITTEN THE CHAIN IS TRAVERSED AND THE LAST BUFFER | |
1348 | /WRITTEN OUT, SINCE IT WAS THE LEAST RECENTLY ACCESSED. | |
1349 | \fNEWBB, 0 /ENTER WITH NEW | |
1350 | TAD BP | |
1351 | DCA NDX5 /SAVE CURRENT "MOST RECENT" BUFFER | |
1352 | TAD I NDX5 | |
1353 | CIA | |
1354 | TAD NEWBLK /CHECK WHETHER THE BUFFER WE WANT | |
1355 | SNA CLA /IS THE CURRENT BUFFER | |
1356 | JMP QUIKIE /YES - SAVE GRIEF | |
1357 | NEWBB4, TAD BP /MAKE THE CURNT | |
1358 | DCA BPPREV /BUFFER THE PREVIOUS BUFF | |
1359 | TAD I BP /MAK THE BUF OF | |
1360 | DCA BP /NEXT EARLIEST REFERENCE THE NEW CURNT BUFF | |
1361 | TAD BP /GET THE PTR TO | |
1362 | IAC /LDR IMAGE BLK | |
1363 | DCA CURBLK /IN THIS BUFF | |
1364 | TAD I CURBLK /HAVE WE SCANNED | |
1365 | CIA /IS NEWBLK | |
1366 | TAD NEWBLK /IN CORE | |
1367 | SNA CLA /? | |
1368 | JMP GOTBLK /YES | |
1369 | TAD I BP /ARE WE AT THE | |
1370 | SZA CLA /BUFFER OF EARLIEST REF? | |
1371 | JMP NEWBB4 /NO DO NEXT | |
1372 | STL /INITIALIZE LINK AS FLAG | |
1373 | TAD I CURBLK /IS THERE A | |
1374 | SNA CLA /BLK TO WRITE? | |
1375 | JMP VIRGIN /NO - NONE TO READ, EITHER | |
1376 | AC4000 | |
1377 | JMS I (LDRIO /YES WRITE IT | |
1378 | CLL /SET FLAG THAT BUFFER WAS WRITTEN | |
1379 | VIRGIN, TAD NEWBLK | |
1380 | DCA I CURBLK | |
1381 | ISZ CURBLK | |
1382 | TAD NEWLEN /STORE NEW BLOCK # AND LENGTH | |
1383 | DCA I CURBLK /IN BUFFER CONTROL WORD | |
1384 | RAR /GET "VIRGIN FLAG" | |
1385 | DCA NEWBUF | |
1386 | TAD MAXBLK | |
1387 | CMA CLL | |
1388 | TAD NEWBLK /CHECK IF THE BLOCK WE'RE MAPPING | |
1389 | SNL CLA /IS LARGER THAN ANY OTHER SO FAR - | |
1390 | JMP .+3 /IF SO WE DON'T HAVE TO READ IT | |
1391 | TAD NEWBLK | |
1392 | DCA MAXBLK /UPDATE MAXBLK | |
1393 | TAD NEWBUF /LINK = MAX FLAG, SIGN = VIRGIN FLAG | |
1394 | SNL SMA CLA /IF NEITHER IS ON, | |
1395 | JMS I (LDRIO /READ THE BLOCKS INTO THE BUFFER | |
1396 | GOTBLK, TAD I BP | |
1397 | DCA I BPPREV /BREAK NEW BUFFER OUT OF THE CHAIN | |
1398 | STA | |
1399 | TAD NDX5 /NDX5 CONTAINS PTR TO OLD "MOST RECENT" + 1 | |
1400 | DCA I BP /MAKE NEW BUFFER THE BUFFER OF LATEST REFERENCE | |
1401 | QUIKIE, JMS NEWBUF /SET UP FOR PUTBIN | |
1402 | JMP I NEWBB /AND RETURN | |
1403 | \f/COME HERE TO CUMPUTE A 15 BIT | |
1404 | /BUFFER ADDRESS FROM AN ENTRY | |
1405 | /IN THE BINARY BUFFER TABLE. | |
1406 | ||
1407 | NEWBUF, 0 | |
1408 | TAD [3 | |
1409 | TAD BP | |
1410 | DCA OUTFLD | |
1411 | TAD I OUTFLD /LOAD ADRESS AND FIELD | |
1412 | AND (7600 | |
1413 | DCA BLKBEG | |
1414 | TAD I OUTFLD | |
1415 | AND (70 | |
1416 | TAD (CDF | |
1417 | DCA OUTFLD /DECOMPOSE INTO ADDRESS AND CDF | |
1418 | JMP I NEWBUF | |
1419 | ||
1420 | BPPREV, 0 | |
1421 | MAXBLK, 0 | |
1422 | \f/COME HERE TO STORE 1 WORD | |
1423 | /IN SOME BINARY OUTPUT BUFFER | |
1424 | ||
1425 | PUTBIN, 0 | |
1426 | DCA TMP2 /SAVE DATA | |
1427 | TAD ORGFLG /N.E. 0 MEANS | |
1428 | SZA CLA /INHIBIT | |
1429 | JMP I PUTBIN /BINARY OUTPUT BECAUSE OF NEW ORIGIN | |
1430 | TAD OUTINH /N.E. 0 MEANS | |
1431 | SNA CLA /INHIBIT BIN OUT BECAUSE OF BAD ORIGIN | |
1432 | JMP OUTFLD /ITS OK | |
1433 | TAD I OUTINH /SET B0 OF | |
1434 | RAL /OFFENDING GST | |
1435 | CLL CML RAR /SYMBOL | |
1436 | DCA I OUTINH /SEE SUBR REORG | |
1437 | JMP I PUTBIN /FOR DEFINITION OF C(OUTINH) | |
1438 | OUTFLD, 0 /CDF X | |
1439 | TAD TMP2 /STORE IT | |
1440 | DCA I BLKSIZ /AWAY | |
1441 | CDF 10 /RESTORE FLD | |
1442 | ISZ BLKSIZ /BUMP PTR | |
1443 | TAD BLKBEG | |
1444 | CIA | |
1445 | TAD BLKSIZ /HAVE WE | |
1446 | AND (1777 /CROSSED A | |
1447 | SZA CLA /BLK BOUND? | |
1448 | JMP I PUTBIN /NO | |
1449 | TAD NEWBLK | |
1450 | TAD [4 | |
1451 | DCA NEWBLK | |
1452 | TAD NEWLEN | |
1453 | TAD [-4 | |
1454 | DCA NEWLEN /BUMP BLOCK NUMBER AND REMAINING BLOCKS | |
1455 | JMS NEWBB /SELECT A NEW BUFFER | |
1456 | TAD BLKBEG | |
1457 | DCA BLKSIZ /RE-INITIALIZE WORD POINTER | |
1458 | JMP I PUTBIN | |
1459 | CURBLK, 0 | |
1460 | PAGE | |
1461 | \f/COME HERE TO SCAN AND RELOCATE | |
1462 | /THE TEXT OF AN ENTIRE MODULE | |
1463 | ||
1464 | TXTSCN, 0 /SET CTRL WD | |
1465 | JMS I (GETCTL /ARGS. RTN TO .+1,2,3, OR 4 | |
1466 | JMP RELC2 /SPECIAL TYPE | |
1467 | JMP RELC6 /DIRECT COPY | |
1468 | JMP REORG /NEW ORIGIN | |
1469 | TAD I GPTR /RELOCATE FPP | |
1470 | AND [17 /PAIR | |
1471 | DCA TMP0 /GST SYM TYPE | |
1472 | AC7776 /IS RELOCATION | |
1473 | TAD TMP0 /WITH RESPECT | |
1474 | SZA CLA /TO GST EXTERN? | |
1475 | JMP BY2 /NO | |
1476 | SETTRP, JMS GETTXT /BAD TEXT. | |
1477 | CLA | |
1478 | JMS GETTXT /IGNORE RELOCATION AND MAKE AN ERROR TRAP | |
1479 | CLA | |
1480 | TAD (3000 /=TRAP3 | |
1481 | JMS I [PUTBIN | |
1482 | TAD (JUERR /RTS ERROR | |
1483 | JMS I [PUTBIN /TRAP SUBR | |
1484 | BY2M5, TAD I GPTR /SET ILLEGAL | |
1485 | RAL /REFERENCE | |
1486 | CLL CML RAR /BIT IN | |
1487 | DCA I GPTR /GST TYPE WD | |
1488 | JMP TXTSCN+1 /DO NEXT | |
1489 | BY2, TAD (-5 /RELOCATE TO | |
1490 | TAD TMP0 /A MULTIPLE | |
1491 | SNA CLA /ENTRY? | |
1492 | JMP SETTRP /YES | |
1493 | TAD I GPTR /CHECK FOR LEGALITY OF REFERENCE | |
1494 | AND (0360 /WITH RESPECT TO LEVEL AND OVERLAY NUMBER | |
1495 | DCA TMP1 / = GST OVER NUM | |
1496 | TAD LNONUM /=CURNT MOD | |
1497 | AND [3400 /LEVEL NUM | |
1498 | DCA TMP2 | |
1499 | TAD I GPTR | |
1500 | AND [3400 | |
1501 | SNA /RELOCATE TO MAIN? | |
1502 | JMP RELC /YES, ITS OK | |
1503 | CIA /IS RELOCATION | |
1504 | TAD TMP2 /ACROSS LEVELS | |
1505 | SZA /? | |
1506 | JMP TSTTRP /YES | |
1507 | TAD LNONUM /=CURRENT MOD | |
1508 | AND (0360 /OVER NUM | |
1509 | CIA | |
1510 | TAD TMP1 /WITHIN LEVL CALL IS LEGAL ONLY | |
1511 | SNA CLA /IF WITHIN OVR ALSO. | |
1512 | JMP RELC /ITS OK | |
1513 | \f /** TSTTRP REPLACED BY "SKP CLA" IF /U SPECIFIED | |
1514 | TSTTRP, SMA CLA /NOT OK - IS X LEVL LO TO HI? | |
1515 | JMP SETTRP /NO | |
1516 | TAD I BPTR /TRAP VECT | |
1517 | TAD [7770 /SUBTRACT 1 FROM ENTRY NUM | |
1518 | AND [7770 /IN HIGH 9 BITS OF GST WD 5 | |
1519 | CLL RAR /DIV BY 2 TO GET ENTRY NUM * 4 | |
1520 | TAD TRAPV+1 /LINK IS 0 | |
1521 | DCA I (SYMX+1 /STORE VECTOR ENTRY ADDRESS | |
1522 | RAL | |
1523 | TAD TRAPV /IN SYMX AS A DOUBLEWORD | |
1524 | DCA I (SYMX | |
1525 | TAD (SYMX | |
1526 | JMS I [SETBPT /COMBINE IT WITH TXT PAIR | |
1527 | JMS I (MERGE /I.E. RELOCATE TO TRAP VECT | |
1528 | TAD FTMP0 | |
1529 | AND [7 | |
1530 | SNA | |
1531 | TAD FTMP0+1 | |
1532 | SNA CLA /WERE LOW ORDER 15 BITS OF TXT=0? | |
1533 | JMP TXTSCN+1 /YES, ITS OK | |
1534 | JMP BY2M5 /SET ILL REF BIT. NOTE TRAP IS NOT GENERATED | |
1535 | ||
1536 | RELC, JMS I (MERGE /MAKE FPP PAIR AND STORE IN BIN BUFFER | |
1537 | JMP TXTSCN+1 /DO NEXT | |
1538 | RELC2, TAD REFPTR /CHK IND. | |
1539 | SNA CLA /FOR SPECIAL TYPE | |
1540 | JMP I TXTSCN /0=END OF TEXT | |
1541 | JMP TXTSCN+1 /1=IGNORE 1 WORD OF TEXT | |
1542 | RELC6, TAD REFPTR /IND HOLDS | |
1543 | CIA /NUM OF WDS | |
1544 | DCA REFPTR /TO COPY | |
1545 | JMS GETTXT | |
1546 | JMS I [PUTBIN | |
1547 | ISZ REFPTR | |
1548 | JMP .-3 | |
1549 | JMP TXTSCN+1 | |
1550 | REORG, ISZ ORGFLG /SET INHIBIT BIN OUT FLG | |
1551 | JMS I (MERGE /GET NEW ORIGIN | |
1552 | TAD I GPTR /SEE IF | |
1553 | AND (3760 /ORIGIN IS | |
1554 | CIA /TO A DIFFERENT | |
1555 | TAD LNONUM /BINARY SECTION | |
1556 | SZA CLA /? | |
1557 | TAD GPTR /YES - SET INHIBIT/ERROR FLAG | |
1558 | SNA | |
1559 | JMS I (NEWORG /NO - SET UP NEW ORIGIN | |
1560 | DCA OUTINH | |
1561 | DCA ORGFLG | |
1562 | JMP TXTSCN+1 | |
1563 | \fGETTXT, 0 /GET ONE WORD OF TEXT FROM THE BUFFER | |
1564 | ISZ BLKCNT | |
1565 | JMP RDTCDF | |
1566 | CDF /TO READ IN | |
1567 | JMS I [IOHAN /RALF TEXT | |
1568 | 0 /PTR TO UNIT | |
1569 | 200^4!10 /OR 200^17!20 | |
1570 | 0 | |
1571 | TXTBLK, 2 | |
1572 | TAD .-2 /SET TXT | |
1573 | DCA RBLK /BUF PTR | |
1574 | TAD TXTWDS /-NUM OF | |
1575 | DCA BLKCNT /WDS-1 IN | |
1576 | RDTCDF, CDF 10 /OR CDF 20 | |
1577 | TAD I RBLK | |
1578 | CDF 10 | |
1579 | ISZ RBLK | |
1580 | JMP I GETTXT /RETURN | |
1581 | TXTWDS, -2000 /OR -7400 | |
1582 | PAGE | |
1583 | \f/ENTER A SYMBOL INTO GST. PTR TO ESD | |
1584 | /SYMBOL IS IN AC | |
1585 | ||
1586 | JMP I PUTSYM /FOR XPAGE RTN | |
1587 | PUTSYM, 0 | |
1588 | JMS I [LOOK /LOOKUP SYMBOL | |
1589 | JMP I (NOMAT /NEW SYMBOL DISPOSITION | |
1590 | /TYPE OF MATCH 2 EXTERNS, 2 COMMONS, ETC. | |
1591 | /ETYP HOLDS SYM TYPE FOR ESD GTYP HOLDS GST TYPE | |
1592 | ||
1593 | TAD (5 | |
1594 | DCA TMP0 /FOR ME,MS | |
1595 | TAD ETYP | |
1596 | TAD (-7 | |
1597 | SPA | |
1598 | TAD (2 | |
1599 | TAD [4 | |
1600 | RAR CLL | |
1601 | CMA | |
1602 | DCA TMP2 | |
1603 | CML CMA /GET -1 | |
1604 | TAD GTYP /RESTR LNK, GET GST TYP-1 | |
1605 | RAL | |
1606 | TAD (MYSTIC /GET ADDR OF 4 CODES | |
1607 | DCA TMP1 | |
1608 | CDF 0 | |
1609 | TAD I TMP1 /GET 4 CODES | |
1610 | CDF 10 | |
1611 | CTST, ISZ TMP2 /WHICH CODE ? | |
1612 | JMP SHFT3 /NOT THIS 1 | |
1613 | AND [7 | |
1614 | TAD T2J /PICK UP JMP I | |
1615 | DCA .+1 | |
1616 | 0 | |
1617 | T2J, JMP I .+1 | |
1618 | ISCOM3 /FORT COMM N FLD1 SECTION | |
1619 | PUTSYM-1 /ESD IS EXT JUST EXIT | |
1620 | REP /GST IS EXT GO REPLACE | |
1621 | MULENT /MULTIPLE ENTS | |
1622 | ISCOM /2 F COMMS OR 2 COMMZS OR 2 FLD1S | |
1623 | BADDY /MULTIPLE SECTS | |
1624 | BADDY /UNDEF TYPES | |
1625 | BADDY | |
1626 | BADDY | |
1627 | SHFT3, RAR | |
1628 | RTR | |
1629 | JMP CTST | |
1630 | \fBADDY, TAD MCNT | |
1631 | TAD MBGCNT | |
1632 | DCA MTMCNT /SAVE PARAMS FOR ERROR MESSAGE LATER | |
1633 | CLA IAC | |
1634 | TAD LNONUM /MULTIPLE SECTION | |
1635 | DCA FATAL | |
1636 | ISZ TMP0 /IS FATAL | |
1637 | MULENT, TAD I GPTR /SET TYPE TO | |
1638 | AND (7760 /5 FOR MUL ENT | |
1639 | TAD TMP0 /OR 6 FOR | |
1640 | DCA I GPTR /MUL. SECTION | |
1641 | JMP I PUTSYM | |
1642 | ||
1643 | ISCOM3, TAD (11 /F COMM N FLD1 (RITE9=11) | |
1644 | DCA I GPTR /SET TYP TO F1 | |
1645 | ISZ F1FLG | |
1646 | ISCOM, JMS I [SETBGX | |
1647 | TAD BPTR /UPDATE | |
1648 | DCA I REFPTR /ESD REFERENCE PTR | |
1649 | JMS I (MAXCOM /PUT LARGER OF 2 COMMONS INTO | |
1650 | JMP I PUTSYM /GST WORDS 5 AND 6 | |
1651 | MTMCNT, 0 | |
1652 | \f/THE FOLOWING TABLE IS USED TO | |
1653 | /DISPOSITION SYMBOL MATCHES BETWEEN | |
1654 | /A RALF ESD AND A GST SYMBOL | |
1655 | /EACH DIGIT IN THE TABLE IS AN INDEX | |
1656 | /INTO A TABLE THAT IS USED TO CALL | |
1657 | /ROUTINES TO HANDLE THE VARIOUS TYPES | |
1658 | /OF MATCHES: | |
1659 | / 0=FORT COMMON AND FLD1 SECTION | |
1660 | / 1=ANY MATCH WITH ESD EXTERN | |
1661 | / 2=ANY MATCH WITH GST EXTERN | |
1662 | / 3=MULTIPLE ENTRY POINTS | |
1663 | / 4=2 FORT COMMONS OR 2 FIELD1 | |
1664 | / SECTIONS OR 2 COMMZ SECTS | |
1665 | / 5=MULTIPLE SECTIONS | |
1666 | / 6-7=UNDEFINED AND HALT | |
1667 | / | |
1668 | /THE FIRST 2 WORDS COVER ALL POSSIBLE | |
1669 | /MATCHES WITH GST TYPE 1, THE SECOND | |
1670 | /TWO WORDS ARE FOR GST TYPE 2 ETC | |
1671 | /THE 4 DIGITS IN THE FIRST WORD OF | |
1672 | /ANY PAIR CORRESPOND TO ESD TYPES | |
1673 | /11,7,3,1 RESPECTIVELY | |
1674 | /ESD CORRESPONDENCE FOR THE 2ND WORD | |
1675 | /IS 12,10,4,2 | |
1676 | /ESD TYPE 12 IS UNDEFINED | |
1677 | ||
1678 | MYSTIC, 5553 /G1 E(11,7,3,1) | |
1679 | 7551 /E(12,10,4,2) | |
1680 | 2222 /G2 E(11,7,3,1) | |
1681 | 7221 /E(12,10,4,2) | |
1682 | 0545 /G3 | |
1683 | 7551 | |
1684 | 5555 /G4 | |
1685 | 7551 | |
1686 | 5553 /G5 | |
1687 | 7551 | |
1688 | 5555 /G6 | |
1689 | 7551 | |
1690 | 5555 /G7 | |
1691 | 7551 | |
1692 | 5555 /G10 | |
1693 | 7451 | |
1694 | 4505 /G11 | |
1695 | 7551 | |
1696 | \f | |
1697 | ESDSCN, 0 | |
1698 | CLL STA RTL /-3 | |
1699 | TAD I (0 | |
1700 | SZA CLA | |
1701 | JMP I (NOTREL /NOT RALF MODULES - NASTY! | |
1702 | TAD I (2 /CHK FOR DP | |
1703 | SPA CLA /HARDWARE REQUIRED | |
1704 | ISZ DPFLG /ISZ=YES | |
1705 | AC7776 /ENTER ESD OF MODULE | |
1706 | DCA EPTR /INTO GST. ESD STARTS AT 10000 | |
1707 | JMS I (NXTESD /GET NXT 1 | |
1708 | JMP I ESDSCN /NO MORE | |
1709 | TAD EPTR | |
1710 | JMS PUTSYM /ENTER IT | |
1711 | JMP .-4 /DO ANOTHER | |
1712 | ||
1713 | MSMSG, TEXT /MULT SECT/ | |
1714 | CORMSG, TEXT /OVER CORE/ | |
1715 | LIMSG, TEXT /OVER IMAG/ | |
1716 | MNMSG, TEXT /NO MAIN/ | |
1717 | PAGE | |
1718 | \f/CONTINUATION OF SUB PUTSYM | |
1719 | ||
1720 | REP, DCA GTYP | |
1721 | AC7775 /REPLACE GST | |
1722 | TAD ETYP /EXTERN | |
1723 | SNA /IS IT A REF TO COMMON? | |
1724 | JMP MNSECN /YES | |
1725 | TAD M4 /IS IT A REF | |
1726 | SMA CLA /8 MODE SECN ? | |
1727 | JMP NOMAT | |
1728 | TAD I GPTR /NO CHK FOR | |
1729 | AND [3400 /CROSS LEVEL | |
1730 | CIA /REFERENCE | |
1731 | DCA TMP0 /COMPARE WITH | |
1732 | TAD LNONUM /CURNT LEVEL | |
1733 | AND [3400 | |
1734 | SNA /DOING MAIN ? | |
1735 | JMP NOMAT /YES DONT CHK FOR TRAP ENTRY | |
1736 | TAD TMP0 | |
1737 | SNA CLA /X LEVEL? | |
1738 | JMP NOMAT | |
1739 | ISZ TRPCNT /YES BUMP TRAP VECTOR COUNTER | |
1740 | AC4000 /SET B0=1, GST SYM WILL GO IN TRAP VECTOR | |
1741 | NOMAT, DCA GTYP | |
1742 | TAD ETYP /ENTER GST | |
1743 | TAD (.+3-1 /WORDS 4,5,6. | |
1744 | DCA TMP0 /DISPATCH ESD | |
1745 | JMP I TMP0 /TYPE 1,2,3,4 | |
1746 | JMP ENTMN2 /ENTRY POINT | |
1747 | JMP ENTMN /EXTERN | |
1748 | JMP MNSECN /COMMON SECN | |
1749 | JMP PRGSCN /PROGRAM SECN | |
1750 | M4, -4 | |
1751 | M7, -7 | |
1752 | JMP MNS8 /GEN 8 MODE SCT | |
1753 | JMP MNCZ /COMM 8 MODE | |
1754 | JMP MNF1 /FLD1 8 MODE | |
1755 | \fPRGSCN, TAD LNONUM | |
1756 | AND [3400 /IS IT A MAIN | |
1757 | SNA CLA /? | |
1758 | JMP MNSECN /YES | |
1759 | TAD I [OVRSIZ | |
1760 | DCA TMP0 | |
1761 | TAD I [OVRSIZ+1 | |
1762 | DCA TMP1 /SAVE OLD OVERLAY SIZE | |
1763 | CLL | |
1764 | TAD I EPT2 | |
1765 | TAD TMP1 | |
1766 | DCA I [OVRSIZ+1 | |
1767 | RAL | |
1768 | TAD I EPTR | |
1769 | TAD TMP0 | |
1770 | DCA I [OVRSIZ /SET OVLY SIZE = OVLY SIZE + SECTION SIZE | |
1771 | TAD TMP0 | |
1772 | DCA I EPTR | |
1773 | TAD TMP1 | |
1774 | DCA I EPT2 /SET SECTION SIZE = OLD OVERLAY SIZE | |
1775 | TAD GPTR /PUT ADDR OF | |
1776 | IAC /GST WD5 OF | |
1777 | DCA I REFPTR /SECTION SYM INTO ESD REFERENCE PAGE | |
1778 | ENTM2, TAD [LVPTR /SET REFERENCE | |
1779 | DCA REFPTR /TO PARENT SYM =WD5 OF #YLVLN | |
1780 | ENTMN, TAD LNONUM /=CURNT OVRLAY AND CURNT LEVEL NUM | |
1781 | JMP MNSEC5 | |
1782 | \fENTMN2, TAD LNONUM /SEE IF ENTRY | |
1783 | AND [3400 /POINT IS IN | |
1784 | SNA CLA /MAIN? | |
1785 | JMP ENTMN /YES | |
1786 | TAD I REFPTR /IS PARENT | |
1787 | JMS I [SETBPT /REFERENCE TO | |
1788 | CLA CMA /COMMON? | |
1789 | TAD REFPTR /LOOK FOR | |
1790 | DCA TMP0 /TYPE CODE 3 | |
1791 | AC7775 | |
1792 | TAD I TMP0 | |
1793 | SNA | |
1794 | JMP ENTMN /YES, HANDLE LIKE A MAIN ENTRY POINT | |
1795 | TAD M4 /IS IT A REF | |
1796 | SNA CLA /TO AN 8 SECT? | |
1797 | JMP MNSEC5 /YES HANDLE LIKE MAIN | |
1798 | CLL | |
1799 | TAD I BPT2 | |
1800 | TAD I EPT2 | |
1801 | DCA I EPT2 /SET OVR ENT = OVR ENT + OVR | |
1802 | RAL | |
1803 | TAD I BPTR | |
1804 | AND [7 /WATCH HIGH-ORDER BITS | |
1805 | TAD I EPTR | |
1806 | DCA I EPTR | |
1807 | JMP ENTM2 /SIZE OF SECTION | |
1808 | MNF1, ISZ F1FLG /SET FOR NE TO | |
1809 | JMP MNSECN /0 SO DO8S WILL | |
1810 | MNCZ, ISZ CZFLG /KNOW THESE | |
1811 | JMP MNSECN /TYPES OF SECTS | |
1812 | \fMNS8, ISZ S8FLG /EXIST AND WILL FIT THEM INTO CORE | |
1813 | MNSECN, TAD GPTR /PUT ADDR OF | |
1814 | IAC /GST WD5 OF | |
1815 | DCA I REFPTR /SECTION SYM INTO ESD REFERENCE PAGE | |
1816 | TAD (SYMX+1 /THIS VALUE | |
1817 | DCA REFPTR /YIELDS 0 IN HI 9 WD 5 OF GST SYM | |
1818 | MNSEC5, TAD ETYP /SYM TYPE TO AC8-11. AC MAY HAVE | |
1819 | TAD GTYP /LEVEL AND OVR BITS (AC1-7) ALREADY SET | |
1820 | DCA I GPTR /GST WD4 HOLDS SYMBOL TYPE | |
1821 | JMS I [SETBGX /SET BPTR TO GST WORD | |
1822 | DCA TMP0 /PREPARE FOR DIVISION BY 7 | |
1823 | TAD I REFPTR | |
1824 | TAD (2-SYMTBL /GET OFFSET FROM SYMTBL | |
1825 | TAD M7 | |
1826 | ISZ TMP0 | |
1827 | SMA | |
1828 | JMP .-3 /DIVIDE BY REPEATED SUBTRACTION | |
1829 | STA /AC IS NOT NECESSARILY ZERO! | |
1830 | TAD TMP0 | |
1831 | CLL RTL /ROTATE SYMBOL NUMBER INTO AC BITS 0-8 | |
1832 | RAL | |
1833 | TAD I EPTR /AND INSERT IT INTO THE ADDRESS | |
1834 | DCA I BPTR /DOUBLEWORD TO FORM THE GST | |
1835 | TAD I EPT2 /ADDRESS DOUBLEWORD | |
1836 | DCA I BPT2 | |
1837 | JMP I .+1 | |
1838 | PUTSYM-1 | |
1839 | PAGE | |
1840 | \fSTPAS1, DCA I NDX0 /ZERO OUT GST | |
1841 | ISZ STCNT /NDX0 SET UP BY PASS0 | |
1842 | JMP STPAS1 | |
1843 | JMS I (SETCNT /SET MOD CNTS | |
1844 | JMS I (RDRLES /READ A RALF ESD | |
1845 | JMS I (ESDSCN /PROCESS IT | |
1846 | JMS I (ADVOVR /UPDATE COUNTS | |
1847 | JMP .-3 /DO NEXT | |
1848 | TAD LIBRSW | |
1849 | SNA CLA /LIBRARY SEARCH POSSIBLE? | |
1850 | JMP I (DOCORE /NO - SKIP IT | |
1851 | TAD SYMTM3 /TOP OF | |
1852 | DCA GPTR /GST | |
1853 | TAD RFPTR1 /1ST FREE | |
1854 | DCA LBPTR /ENTRY IN MODULE TBL THIS IS WHERE LIBR MODULES WILL GO | |
1855 | JMS I (GETEXT /GET AN | |
1856 | JMP .+3 /EXTERN | |
1857 | LOP4, JMS I (GETEXT | |
1858 | TAD RESFLG /=1 IF | |
1859 | DCA IOFLG /LIBR CAT IS ENTIRELY CORE RES | |
1860 | DCA LBREC /SET I/O FOR | |
1861 | DCA LSTBLK /BLK 0 OF LIBRARY | |
1862 | DCA RBLK /SET REL BLK | |
1863 | DCA RLEN /AND LENGTH | |
1864 | JMP BY3 /TO 0 | |
1865 | NXTENT, TAD NDX1 /ADV TO | |
1866 | AND [-4 /NXT ENTRY | |
1867 | TAD (2 /BUT GET | |
1868 | DCA NDX1 /LENGTH OF | |
1869 | JMS I (GETLEN /PREV ONE 1ST | |
1870 | ISZ NUMENT /MORE IN CORE? | |
1871 | JMP BY3+1 /YES | |
1872 | TAD IOFLG /END OF | |
1873 | SZA CLA /CATALOGUE? | |
1874 | JMP LOP4 /YES, NO MATCH ON THIS EXTERN | |
1875 | BY3, JMS RDLBR /GET NEXT | |
1876 | TAD [-4 /CAT. BLKS | |
1877 | TAD GPTR /LOOK FOR | |
1878 | DCA NDX0 /LIBR MATCH | |
1879 | AC7775 | |
1880 | DCA TMP0 | |
1881 | \fLBFLD, CDF 0 /CDF 20 IF GREATER THAN 8K CORE | |
1882 | TAD I NDX1 | |
1883 | CDF 10 | |
1884 | CMA /IS IT THE END | |
1885 | SNA /OF CAT ? | |
1886 | JMP LOP4 /YES | |
1887 | IAC | |
1888 | TAD I NDX0 | |
1889 | SZA CLA /MATCH 1? | |
1890 | JMP NXTENT /NO TRY NXT LIBR ENTRY | |
1891 | ISZ TMP0 /ALL MATCH? | |
1892 | JMP LBFLD /NO | |
1893 | JMS I (GETLEN /UPDATE RBLK, | |
1894 | CLA CMA /RLEN | |
1895 | TAD RFPTR1 /ENTER MOD | |
1896 | DCA NDX0 /INTO TBL | |
1897 | TAD I (MODTBL /LIBR UNIT | |
1898 | DCA I NDX0 | |
1899 | TAD RLEN /LENGTH OF | |
1900 | DCA I NDX0 /MODULE | |
1901 | TAD I (MODTBL+2 /STARTING BLOCK OF LIBRARY, + | |
1902 | TAD RBLK / RELATIVE BLOCK OF MODULE = | |
1903 | DCA I NDX0 / ABSOLUTE BLK OF MOD | |
1904 | ISZ LBCNT /=NUM OF LIBR MOD IN MAIN | |
1905 | TAD GPTR /SAVE GST | |
1906 | DCA LSTBLK /PTR | |
1907 | JMS I (RDRLES /READ IN ESD | |
1908 | DCA LNONUM /SET FOR MAIN | |
1909 | JMS I (ESDSCN /PROCESS ESD | |
1910 | TAD [3 /ADV MODULE | |
1911 | TAD RFPTR1 /TBL PTR | |
1912 | DCA RFPTR1 | |
1913 | TAD LSTBLK | |
1914 | DCA GPTR | |
1915 | ISZ MLEFT /MOD TBL FULL? | |
1916 | JMP LOP4 /NO DO SOME MORE | |
1917 | JMP I (DOCORE | |
1918 | ||
1919 | LIBRSW, 0 /NON-ZERO IF LIBRARY SEARCH POSSIBLE | |
1920 | STCNT, SYMTBL-OVLTBL | |
1921 | \fRDLBR, 0 | |
1922 | TAD IOFLG /IS THIS | |
1923 | SZA CLA /THE END | |
1924 | JMP ENDLB /OF CAT.? | |
1925 | CDF /NO | |
1926 | JMS I [IOHAN /READ SOME | |
1927 | MODTBL /MORE | |
1928 | LBARG, 200^5 /OR 200^17!20 | |
1929 | LB0BUF /OR 0 | |
1930 | LBREC, 0 /REL CAT BLK | |
1931 | TAD LBREC /GET -NUM OF | |
1932 | CIA /BLKS READ, | |
1933 | TAD LSTBLK /AND COMPUTE | |
1934 | DCA TMP0 /THE NUM OF | |
1935 | TAD (-100 /ENTRIES IN | |
1936 | ISZ TMP0 /CORE. THERE | |
1937 | JMP .-2 /ARE 100 PER | |
1938 | DCA OLDCNT /BLOCK | |
1939 | TAD LBREC /UPDATE | |
1940 | DCA LSTBLK /LSTBLK | |
1941 | ENDLB, TAD OLDCNT | |
1942 | DCA NUMENT | |
1943 | CLA CMA /SET PTR TO | |
1944 | TAD LBARG+1 /1ST ENTRY | |
1945 | DCA NDX1 | |
1946 | CDF 10 | |
1947 | JMP I RDLBR | |
1948 | LSTBLK, 0 | |
1949 | MLEFT, 0 | |
1950 | RESFLG, 1 | |
1951 | NUMENT, 0 | |
1952 | OLDCNT, 0 | |
1953 | PAGE | |
1954 | ||
1955 | \f/END OF PASS 1 - FIT EVERYTHING INTO CORE | |
1956 | ||
1957 | DOCORE, TAD TRPCNT | |
1958 | SNA CLA | |
1959 | JMP LOP3-3 /NO OVRS | |
1960 | TAD (TRPSYM /ENTER TRAP | |
1961 | JMS I [LOOK /VECT. SYM | |
1962 | TAD [4 /ITS A | |
1963 | DCA I GPTR /MAIN SECN | |
1964 | ISZ GPTR /GST WD6 | |
1965 | ISZ GPTR /HOLDS LENGTH | |
1966 | TAD TRPCNT /GET SIZE OF | |
1967 | RTL CLL /TRAP VECTOR | |
1968 | DCA I GPTR /= NUMBER OF ENTRIES * 4 | |
1969 | JMS I (DO8S /GO DO ALL 8 MODE SECTIONS | |
1970 | TAD SYMTM3 /ALLOCATE | |
1971 | DCA GPTR /CORE FOR | |
1972 | LOP3, JMS I [GETTYP /ALL MAIN NON 8 MODE | |
1973 | JMP DUNMN /SECTIONS | |
1974 | AC7775 /4=PROG | |
1975 | TAD I GPTR /SECN, 3=COMMON | |
1976 | RAR CLL | |
1977 | SNA CLA | |
1978 | JMS I (FIT /GO FIT SECN | |
1979 | JMP LOP3 | |
1980 | \fDUNMN, STA | |
1981 | DCA I NDX7 /TERMINATE OVERLAY LENGTH LIST | |
1982 | TAD A1 | |
1983 | DCA I (OVLTBL /STORE ENTRY FOR LEVEL 0 | |
1984 | TAD A1+1 | |
1985 | DCA I (OVLTBL+1 | |
1986 | TAD A1+1 | |
1987 | CLL | |
1988 | TAD [377 | |
1989 | AND [7400 | |
1990 | SZL | |
1991 | ISZ A1 /(WATCH CARRY!) | |
1992 | DCA A1+1 /DITTO FOR NON-FIELD 0 | |
1993 | CLA IAC /WILL HOLD | |
1994 | DCA BLKCNT /SIZE OF LOADER IMAGE | |
1995 | TAD (1460 /RESET INT. | |
1996 | DCA I (LEVSYM+2 /#YLVLN SYM | |
1997 | TAD (QUSRLV-1 /WHERE OVRLAY | |
1998 | DCA NDX3 /DSRN INFO GOES IN LHDR | |
1999 | CLA IAC | |
2000 | DCA I NDX3 /USER MAIN IS LEVEL 0 | |
2001 | TAD (10 | |
2002 | DCA I NDX3 /SET UP LOADING INFORMATION FOR USER MAIN | |
2003 | STA /IN THE USRLV TABLE JUST LIKE | |
2004 | TAD A1 /ANY OTHER OVERLAY LEVEL | |
2005 | CLL RAR | |
2006 | TAD A1+1 /LENGTH HAS TO BE COMPUTED FROM | |
2007 | RAL /CORE LENGTH | |
2008 | RTL | |
2009 | RTL | |
2010 | DCA TMP0 | |
2011 | CLA IAC | |
2012 | DCA I NDX3 /USER MAIN FIRST THING IN LDR IMAGE | |
2013 | TAD TMP0 | |
2014 | DCA I NDX3 | |
2015 | TAD TMP0 | |
2016 | \fLOP6, TAD BLKCNT /UPDATE LENGTH | |
2017 | DCA BLKCNT /OF LDR IMAGE | |
2018 | ISZ I (LEVSYM+2 /NEXT LEVEL | |
2019 | TAD (LEVSYM /LOOKUP | |
2020 | ISZ NLVL | |
2021 | JMS I [LOOK /#YLVLN | |
2022 | JMP DUNLVL /DONE ALL OVR LEVELS | |
2023 | JMS I (FIT /FIT LEVEL | |
2024 | ISZ GPTR /IN CORE | |
2025 | TAD I NDX3 /NUMBER OF OVERLAYS ON THIS LEVEL - ALSO | |
2026 | CIA /SERVES AS AN INDICATOR TO THE RUN-TIME | |
2027 | DCA TMP0 /SYSTEM THAT THIS LEVEL IS INITIALLY | |
2028 | TAD I GPTR /UNINHABITED. | |
2029 | AND [7 /GET FIELD BITS | |
2030 | CLL RTL | |
2031 | RAL | |
2032 | ISZ GPTR | |
2033 | TAD I GPTR /AND ADDRESS BITS | |
2034 | DCA I NDX3 /PUT-EM OUT | |
2035 | TAD BLKCNT /STARTING BLOCK OF LEVEL | |
2036 | DCA I NDX3 | |
2037 | TAD BLKSIZ | |
2038 | DCA I NDX3 /LENGTH OF A SINGLE OVERLAY IN THE LEVEL | |
2039 | TAD BLKSIZ /(NUM OF OVRS)* | |
2040 | ISZ TMP0 /NUM OF BLKS | |
2041 | JMP .-2 /AC=LENGTH OF LEVEL | |
2042 | JMP LOP6 /DO NEXT LEVEL | |
2043 | NLVL, 0 | |
2044 | \fDUNLVL, CLA /AC NOT ZERO! | |
2045 | TAD SYMTM3 /NOW RESOLVE | |
2046 | DCA GPTR /ALL OTHER SYMBOLS | |
2047 | LP1, JMS I [GETTYP | |
2048 | JMP I (ALLDN1 /ALL DONE | |
2049 | JMS I [SETBGX /SET BPTR TO GST WD5 | |
2050 | TAD I BPTR | |
2051 | AND [7770 | |
2052 | SNA | |
2053 | JMP LP1 /NO RELATIVE SYMBOL - DON'T RELOCATE | |
2054 | DCA EPTR | |
2055 | TAD EPTR /FIGURE OUT THE SYMBOL TABLE ADDRESS | |
2056 | CLL RTR /OF THE RELATIVE SYMBOL BY | |
2057 | STL CMA RAR /TAKING 7 * THE RELATIVE SYMBOL NUMBER | |
2058 | TAD EPTR /IN BITS 0-8 AND ADDING IN THE BASE | |
2059 | TAD (SYMTBL-1 /ADDRESS OF THE SYMBOL TABLE | |
2060 | JMS I [SETEPT | |
2061 | TAD I EPT2 | |
2062 | CLL | |
2063 | TAD I BPT2 | |
2064 | DCA I BPT2 | |
2065 | RAL | |
2066 | TAD I BPTR | |
2067 | AND [7 /THROW AWAY THE OLD RELATIVE SYMBOL # | |
2068 | TAD I EPTR | |
2069 | DCA I BPTR /AND PERFORM THE RELOCATION | |
2070 | JMP LP1 /DO AGAIN | |
2071 | PAGE | |
2072 | \fALLDN1, TAD A1 | |
2073 | DCA I (QHGHAD /SAVE HIGHEST PROGRAM ADDRESS | |
2074 | TAD A1+1 /SO THAT RTS WILL KNOW HOW MUCH ROOM | |
2075 | DCA I (QHGHAD+1 /IT HAS FOR BUFFERS & THINGS | |
2076 | TAD FATAL /ANY MULTIPLE | |
2077 | SNA /SECTIONS? | |
2078 | JMP NOMSCT /NO | |
2079 | DCA LNONUM | |
2080 | CDF 0 | |
2081 | TAD I (MTMCNT | |
2082 | DCA MBGCNT /RESTORE ERROR PARAMETERS | |
2083 | CDF 10 | |
2084 | JMS I [RTNOS8 | |
2085 | MSMSG | |
2086 | NOMSCT, TAD (SASYM /GET STRT | |
2087 | JMS I [LOOK /ADDR MAIN | |
2088 | SKP /NO MAIN | |
2089 | JMP .+3 | |
2090 | JMS I [RTNOS8 | |
2091 | MNMSG | |
2092 | TAD SVMAIN /IF .NE. SET TO | |
2093 | SZA /POINT TO GST | |
2094 | TAD GPTR /FOR PND MAIN | |
2095 | DCA SVMAIN /FOR /S THINGS IN SYMMAP RT. | |
2096 | CDF 0 | |
2097 | TAD I (JOUSYM | |
2098 | DCA I (PRMAIN /ENABLING PRINTING OF #MAIN ON ERRORS | |
2099 | CDF 10 | |
2100 | ISZ GPTR | |
2101 | TAD I GPTR /MAKE SWAPPER CONTROL WORD | |
2102 | DCA I (QRTSWP /LEVEL 0, OVERLAY 0 IS MAIN | |
2103 | ISZ GPTR | |
2104 | TAD I GPTR /12 BIT ADDR | |
2105 | DCA I (QRTSWP+1 | |
2106 | TAD DPFLG /N.E. MEANS LDR IMAGE NEEDS DP HRDWRE | |
2107 | DCA I (QDPFLG /RETAIN INFO IN LHDR FOR PASS3 | |
2108 | \f CDF 0 /FETCH LDR | |
2109 | TAD I (LDRNAM /IMAGE | |
2110 | JMS I [IOHAN /HANDLER | |
2111 | TAD BLKCNT | |
2112 | CLL RTL /SINCE WE KNOW THE LENGTH OF THE | |
2113 | SZL SPA /LDR IMAGE FILE, TELL IT TO THE USR | |
2114 | CLA /(UNLESS ITS >255) | |
2115 | RTL | |
2116 | SZL | |
2117 | CLA | |
2118 | TAD I (LDRNAM /OPEN LDR | |
2119 | CIF 10 /IMAGE | |
2120 | JMS I USR | |
2121 | 3 | |
2122 | LDRBLK, LDRNAM+1 | |
2123 | LDRLEN, 0 | |
2124 | JMP I (ENTERR | |
2125 | TAD BLKCNT /SEE IF LDR | |
2126 | STL /IMAGE WILL | |
2127 | TAD LDRLEN /FIT ON | |
2128 | SZL SNA CLA /TENTATIVE FILE | |
2129 | JMP .+3 /IT FITS | |
2130 | JMS I [RTNOS8 /OUTPUT FILE | |
2131 | LIMSG /TOO SMALL | |
2132 | TAD BLKCNT /CLOSE LDR | |
2133 | DCA I (LDCLEN /IMAGE FILE | |
2134 | TAD (LIMGU-1 /PASS2 | |
2135 | DCA NDX0 | |
2136 | TAD I (LDRNAM | |
2137 | CDF 10 | |
2138 | AND [17 | |
2139 | DCA I NDX0 /UNIT | |
2140 | TAD BLKCNT | |
2141 | DCA I NDX0 /LENGTH | |
2142 | TAD LDRBLK | |
2143 | DCA I NDX0 /STRT BLK | |
2144 | CDF 0 | |
2145 | JMS I [IOHAN | |
2146 | LIMGU /WRITE OUT LOADER IMAGE HEADER BLOCK | |
2147 | 4210 | |
2148 | LHDR | |
2149 | 0 /IN RELATIVE BLOCK 0 OF LOADER IMAGE FILE | |
2150 | CDF 10 | |
2151 | \f/SET UP TABLE THAT RELATES | |
2152 | /BINARY SECTINS TO LDR | |
2153 | /IMAGE RELATIVE BLOCK NUMS. | |
2154 | /1 DBL WD AND 2 SINGLE-WD ARGUMENTS PER | |
2155 | /SECTION (15 BIT ADDR, RELATIVE | |
2156 | /BLOCK, AND LENGTH). THERE ARE | |
2157 | /8 SECTIONS | |
2158 | /(MAIN, LEVL1,....,LEVL7) | |
2159 | /TABLE STARTS AT LHDR AND | |
2160 | /IS USED BY SUBR NEWORG | |
2161 | ||
2162 | TAD (LHDR-1 | |
2163 | DCA NDX1 | |
2164 | TAD (QUSRLV /NOW DO THE | |
2165 | DCA NDX0 /8 LEVELS | |
2166 | TAD [-10 | |
2167 | DCA TMP0 | |
2168 | SETSLP, TAD I NDX0 | |
2169 | DCA BSECTP | |
2170 | TAD BSECTP | |
2171 | CLL RTR | |
2172 | RAR | |
2173 | AND [7 | |
2174 | DCA I NDX1 /FIRST COMES 15-BIT ADDRESS | |
2175 | TAD BSECTP | |
2176 | AND [7400 | |
2177 | DCA I NDX1 | |
2178 | TAD I NDX0 | |
2179 | DCA I NDX1 /THEN RELATIVE BLOCK NUMBER | |
2180 | TAD I NDX0 | |
2181 | DCA I NDX1 /THEN LENGTH | |
2182 | ISZ NDX0 /SKIP OVER NEXT OVERLAY COUNT | |
2183 | ISZ TMP0 | |
2184 | JMP SETSLP | |
2185 | TAD (LHDR /PTR TO TOP | |
2186 | DCA BSECTP /OF TABLE | |
2187 | CLA CMA /SET FLG | |
2188 | DCA P2FLG /FOR SUBR ADVOVR | |
2189 | JMP I .+1 | |
2190 | PASS2 | |
2191 | PAGE | |
2192 | \fDO8S, 0 /DO 8 SECTIONS | |
2193 | TAD CZFLG /ANY 8 MODE | |
2194 | SZA CLA /COMMONS ? | |
2195 | JMS FIT8S /GO FIT IT | |
2196 | TAD F1FLG /ANY 8 MODE | |
2197 | SNA CLA /FIELD 1 ? | |
2198 | JMP .+3 /NO | |
2199 | STA | |
2200 | JMS FIT8S | |
2201 | TAD S8FLG /ANY GEN 8 MODE | |
2202 | SNA CLA /SECTIONS ? | |
2203 | JMP I DO8S /NO ALL DONE | |
2204 | TAD [7770 /THIS WILL | |
2205 | DCA OVRFLO /INHIBIT FLD1 OVER FLOW ERR | |
2206 | CLA IAC | |
2207 | JMS FIT8S | |
2208 | JMP I DO8S | |
2209 | ||
2210 | /FIT 8 MODE SECTIONS | |
2211 | ||
2212 | FIT8S, 0 | |
2213 | TAD [7770 | |
2214 | DCA STYPE /-8M0DE SECT TYPE (7-11) | |
2215 | TAD SYMTM3 /SEARCH GST FOR | |
2216 | DCA GPTR /8 MODE SECTNS | |
2217 | F8SECT, JMS I [GETTYP | |
2218 | JMP I FIT8S /ALL DONE | |
2219 | TAD STYPE | |
2220 | TAD I GPTR | |
2221 | SZA CLA /8 SECTION ? | |
2222 | JMP F8SECT /NO | |
2223 | JMS I [SETBGX | |
2224 | TAD I BPT2 | |
2225 | TAD (177 /ROUND SECTION LENGTH | |
2226 | AND (7600 /TO A PAGE BOUNDARY | |
2227 | DCA I BPT2 | |
2228 | JMS I (FIT /NOW FIT IT | |
2229 | TAD OVRFLO /SEE IF FLD1 | |
2230 | TAD A1 /IS OVR FLOWED **** | |
2231 | SPA SNA CLA /? | |
2232 | JMP F8SECT /DO ANOTHER | |
2233 | TOOBIG, JMS I [RTNOS8 | |
2234 | CORMSG /PRINT ERROR & GO AWAY | |
2235 | STYPE, 0 | |
2236 | \fFIT, 0 /FIT SECTION | |
2237 | JMS I [SETBGX /SET BPTR TO POINT TO GST WD5 | |
2238 | TAD I BPT2 | |
2239 | AND [7400 | |
2240 | CLL RAL | |
2241 | TAD I BPTR | |
2242 | RTL | |
2243 | RTL /GET LENGTH OF SEGMENT IN BLOCKS | |
2244 | DCA BLKSIZ | |
2245 | TAD I BPT2 | |
2246 | CLL | |
2247 | TAD A1+1 | |
2248 | DCA TMP5 | |
2249 | TAD A1+1 | |
2250 | DCA I BPT2 | |
2251 | TAD TMP5 | |
2252 | DCA A1+1 /SET BPTR = A1 | |
2253 | RAL /WHILE SETTING A1 = A1 + BPTR | |
2254 | TAD I BPTR | |
2255 | TAD A1 | |
2256 | DCA TMP5 | |
2257 | TAD TMP5 | |
2258 | AND [7770 | |
2259 | SZA CLA /IF NEW ADDRESS IS > 77777, | |
2260 | JMP TOOBIG /THE THING WILL NEVER FIT | |
2261 | TAD A1 | |
2262 | DCA I BPTR | |
2263 | TAD TMP5 | |
2264 | DCA A1 | |
2265 | JMP I FIT /RETURN | |
2266 | \fLEVLUP, 0 /LEVEL = MAX (LEVEL, OVRSIZ); OVRSIZ=0 | |
2267 | TAD I [OVRSIZ | |
2268 | TAD LNONUM | |
2269 | DCA I NDX7 /RECORD THE SIZE OF THIS OVERLAY | |
2270 | TAD I [OVRSIZ+1 /FOR THE SYMBOL MAP PRINTOUT | |
2271 | DCA I NDX7 | |
2272 | TAD [OVRSIZ | |
2273 | JMS I [SETEPT | |
2274 | TAD I [LVPTR | |
2275 | JMS I [SETBPT | |
2276 | JMS MAXCOM | |
2277 | DCA I EPT2 | |
2278 | DCA I EPTR | |
2279 | JMP I LEVLUP | |
2280 | ||
2281 | MAXCOM, 0 /BPTR = MAX (EPTR, BPTR) | |
2282 | TAD I EPTR | |
2283 | CIA CLL | |
2284 | TAD I BPTR | |
2285 | SZA CLA /CHECK HIGH-ORDER WORDS FIRST | |
2286 | JMP .+4 /THEY DIFFER | |
2287 | TAD I EPT2 | |
2288 | CIA CLL | |
2289 | TAD I BPT2 /USE LOW ORDER WORDS IF HIGH ORDERS ARE = | |
2290 | SZL CLA /IS EPTR > BPTR? | |
2291 | JMP I MAXCOM /NO - EXIT | |
2292 | TAD I EPTR | |
2293 | DCA I BPTR | |
2294 | TAD I EPT2 | |
2295 | DCA I BPT2 /YES - BPTR=EPTR | |
2296 | JMP I MAXCOM | |
2297 | \fGETLEN, 0 | |
2298 | CDF 0 /OR CDF 20 | |
2299 | TAD I NDX1 /LEN OF ENTRY | |
2300 | CDF 10 | |
2301 | SNA /=0 MEANS LENGTH HAS ALREADY | |
2302 | JMP I GETLEN /BEEN COMPUTED. NE 0 MEANS | |
2303 | DCA TMP0 /ENTRY POINT IS THE 1ST IN A NEW MODULE | |
2304 | TAD RLEN /UPDATE REL | |
2305 | TAD RBLK /BLOCK AND | |
2306 | DCA RBLK /LENGTH OF | |
2307 | TAD TMP0 /NEW MODULE | |
2308 | DCA RLEN | |
2309 | JMP I GETLEN | |
2310 | ||
2311 | GETEXT, 0 /LOOK FOR GST | |
2312 | JMS I [GETTYP /EXTERN | |
2313 | JMP I (DOCORE /END OF GST | |
2314 | TAD I GPTR /TYPE WD TO AC | |
2315 | AND [17 /B8-B11 | |
2316 | RTR CLL /2=EXTERN | |
2317 | SZA CLA /GOT ONE? | |
2318 | JMP .-6 /NO, RETRY | |
2319 | JMP I GETEXT | |
2320 | PAGE | |
2321 | ||
2322 | LB0BUF= . | |
2323 | \f/START OF PROGRAM | |
2324 | ||
2325 | START, ISZ XSTRT /IF CHAINED TO | |
2326 | CIF CDF 10 | |
2327 | CLL STA RAL | |
2328 | AND I (7643 /AND OUT THE /L SWITCH | |
2329 | DCA I (7643 | |
2330 | JMP I .+1 | |
2331 | XSTRT, PASS0 | |
2332 | \f/THIS SUBROUTINE SHOULD RESIDE IN THE | |
2333 | /FIELD 0 I/O BUFFER SINCE IT | |
2334 | /EXECUTES ONLY ONCE | |
2335 | /SUBROUTINE TO DETERMINE CORE SIZE | |
2336 | / | |
2337 | /THIS WORKS ON ANY PDP-8 FAMILY COMPUTER. | |
2338 | /THE VALUE,FROM 1 TO 10(OCTAL) OF THE 1ST NON-EXISTENT | |
2339 | /MEMORY FLD IS RETURNED IN THE AC. | |
2340 | / | |
2341 | /NOTE--THIS ROUTN MUST BE PLACED IN FLD 0 | |
2342 | / | |
2343 | CORE, 0 | |
2344 | TAD (6203 | |
2345 | RDF | |
2346 | DCA CORTN | |
2347 | CDF 0 | |
2348 | TAD I (7777 | |
2349 | AND COR70 | |
2350 | SNA | |
2351 | JMP CORELP | |
2352 | CLL RTR | |
2353 | RAR | |
2354 | JMP CORTN | |
2355 | CORELP, CDF 0 /NEEDED FOR PDP-8L | |
2356 | TAD TRYFLD /GET FLD TO TST | |
2357 | CLL RTL | |
2358 | RAL | |
2359 | AND COR70 /MASK USEFUL BITS | |
2360 | TAD CORELP | |
2361 | DCA .+1 /SET UP CDF TO FLD | |
2362 | 0 | |
2363 | TAD I CORLOC /SAV CURRENT CONTENTS | |
2364 | NOP /HACK FOR PDP-8 | |
2365 | DCA .-3 | |
2366 | TAD .-2 /7000 IS A GOOD PATTERN | |
2367 | DCA I CORLOC | |
2368 | COR70, 70 /HACK FOR PDP-8.,NO-OP | |
2369 | TAD I CORLOC /TRY TO READ BK 7000 | |
2370 | 7400 /HACK FOR PDP-8,.NO-OP | |
2371 | TAD .-1 /GUARD AGAINST WRAP AROUND | |
2372 | TAD CORLOC+1 /TAD 1400 | |
2373 | SZA CLA | |
2374 | JMP .+5 /NON EXISTENT FLD EXIT | |
2375 | TAD COR70-6 /RESTORE CONTENS DESTROYED | |
2376 | DCA I CORLOC | |
2377 | ISZ TRYFLD /TRY NXT HIGHER FLD | |
2378 | JMP CORELP | |
2379 | TAD TRYFLD | |
2380 | TAD (-1 | |
2381 | CORTN, 0 | |
2382 | JMP I CORE | |
2383 | CORLOC, COR70+2 /ADR TO TST IN EACH FLD | |
2384 | 1400 /7000+7400+1400=0 | |
2385 | TRYFLD, 1 /CURRENT FLD TO TST | |
2386 | PAGE | |
2387 | \f *6600 | |
2388 | DATCHG, 0 /FIND THE MONTH/YEAR | |
2389 | CLL RTR /THIS CODE FINDS THE MONTH | |
2390 | RAR /BY CALCULATING THE ADDRESS | |
2391 | AND (777 /OF THE CORRECT MONTH | |
2392 | CLL RTR /IN THE TABLE OF MONTHS | |
2393 | RTR | |
2394 | AND (36 | |
2395 | TAD (MONTHS-3 /HAVE THE ADDRESS OF MONTH-1 | |
2396 | DCA NDX2 /SAVE IT IN FIELD 0, PAGE 0 | |
2397 | CDF 0 /CHANGE DATA FIELD TO 0 | |
2398 | TAD I NDX2 /GET FIRST 2 CHARS. OF MONTH | |
2399 | CDF 10 /CHANGE DATA FIELD TO 1 | |
2400 | DCA I (LDATE+2 /INSERT INTO THE TEXT LINE | |
2401 | CDF 0 /CHANGE DATA FIELD TO 0 | |
2402 | TAD I NDX2 /GET LAST 2 CHARS. OF MONTH | |
2403 | CDF 10 /CHANGE DATA FIELD TO 1 | |
2404 | DCA I (LDATE+3 /INSERT INTO THE TEXT LINE | |
2405 | TAD I (OSDATE /GET THE DATE--FIND THE YEAR | |
2406 | AND (7 /GET THE YEAR OFFSET BITS | |
2407 | DCA I (YRTEMP /STORE THEM AWAY | |
2408 | CDF 0 /CHANGE DATA FIELD TO 0 | |
2409 | TAD I (7777 /GET THE DATE EXTENSION BITS | |
2410 | CDF 10 /CHANGE DATA FIELD TO 1 | |
2411 | AND (600 /MASK TO GET BITS 3 AND 4 | |
2412 | CLL RTR /ROTATE TO GET THEM INTO | |
2413 | RTR /BIT POSITIONS 7 AND 8 | |
2414 | TAD (106 /GET THE NEW BASE YEAR | |
2415 | TAD I (YRTEMP /ADD THE YEAR OFFSET BITS | |
2416 | CIF 10 /CHANGE THE DATA FIELD TO 1 | |
2417 | JMP I DATCHG /HAVE THE YEAR | |
2418 | \fGETDAT, 0 | |
2419 | TAD I (YRTEMP /GET THE YEAR | |
2420 | AND (7700 /MASK AND ROTATE | |
2421 | CLL RTR /TO GET THE FIRST | |
2422 | RTR /DIGIT (IN SIXBIT) | |
2423 | RTR | |
2424 | TAD (5500 /STICK A HYPHEN IN FRONT | |
2425 | DCA I (LDATE+4 /PUT IN THE TEXT LINE | |
2426 | TAD I (YRTEMP /GET THE YEAR AGAIN | |
2427 | AND (77 /MASK AND ROTATE TO | |
2428 | CLL RTL /GET THE SECOND DIGIT | |
2429 | RTL /(IN SIXBIT) | |
2430 | RTL | |
2431 | TAD (40 /STICK A SPACE AFTER IT | |
2432 | CIF 10 /CHANGE INSTRUCTION FIELD TO 1 | |
2433 | JMP I GETDAT | |
2434 | \fMONTHS, 5512;0116 /-JAN | |
2435 | 5506;0502 /-FEB | |
2436 | 5515;0122 /-MAR | |
2437 | 5501;2022 /-APR | |
2438 | 5515;0131 /-MAY | |
2439 | 5512;2516 /-JUN | |
2440 | 5512;2514 /-JUL | |
2441 | 5501;2507 /-AUG | |
2442 | 5523;0520 /-SEP | |
2443 | 5517;0324 /-OCT | |
2444 | 5516;1726 /-NOV | |
2445 | 5504;0503 /-DEC | |
2446 | PAGE | |
2447 | \f FIELD 1 | |
2448 | /PAGE 0 FLD1 TAGS FOR PASS0 | |
2449 | /(PASS 0 LIVES WITH THE USR RESIDENT) | |
2450 | ||
2451 | NMCTS= 20 | |
2452 | MODCNT= 21 | |
2453 | LVLCNT= 22 | |
2454 | OVRCNT= 23 | |
2455 | PTRULS= 24 | |
2456 | MXFLD= 25 | |
2457 | \f *2000 | |
2458 | ||
2459 | /START OF GLOBAL SYMBOL TABLE | |
2460 | /BUCKET COMES FIRST, INTERNAL | |
2461 | /SYMBOLS AND FIELD 1 CONSTANTS ARE | |
2462 | /HERE ALSO. GST RUNS FROM | |
2463 | /SYMTBL TO OVLTBL-1 | |
2464 | ||
2465 | BUCKET, AAAAAA;0;0;0;EEEEEE;0 /A,B,C,D,E,F | |
2466 | 0;0;0;0;0;0 /G-L | |
2467 | 0;0;0;0;0;0 /M-R | |
2468 | 0;0;0;0;0;0 /S-X | |
2469 | 0;0 /Y,Z | |
2470 | 0;0;0;0;0 /UNUSED BUCKETS MUST BE 0 | |
2471 | 0 /SPACE (FOR BLANK COMMON) | |
2472 | 0;0 | |
2473 | POUND /POUND SIGN FOR INTERNAL SYMBOLS, ALL ARE OF THE FORM (POUND XXXXX) | |
2474 | \fTRPSYM, TEXT '#YTRAP' | |
2475 | 0 /TRAP VECTOR | |
2476 | LEVSYM, TEXT '#YLVL0' | |
2477 | 0 /OVERLAY LEVEL | |
2478 | SWPSYM, TEXT '#SWAP' | |
2479 | 0;0 | |
2480 | SASYM, TEXT '#MAIN' | |
2481 | 0;0 /STARTING ADDRESS | |
2482 | ||
2483 | /TITLE LINE FOR LOADER MAP | |
2484 | ||
2485 | TLINE, TEXT 'LOADER V' | |
2486 | *.-1 | |
2487 | LXX, VERNUM&70^7+VERNUM+6060 /VERNUM IN SIXBIT | |
2488 | PATCH&77^100+40 /PATCH LEVEL | |
2489 | LDATE, TEXT ' NO-DA -TE ' | |
2490 | STLINE, TEXT 'SYMBOL VALUE LVL OVLY' | |
2491 | HLINE, TEXT '= 1ST FREE LOCATION' | |
2492 | OTLINE, TEXT 'LVL OVLY LENGTH' | |
2493 | SMAPU, ZBLOCK 3 /SYMMAP UNIT, LENGTH, ST BLK # | |
2494 | LIMGU, ZBLOCK 3 /LDR IMG " | |
2495 | OVRSIZ, 0;0 | |
2496 | LVPTR, OVRSIZ | |
2497 | SYMX, 1;SYMTBL-2 | |
2498 | \f/SYSTEM SYMBOL TABLE | |
2499 | ||
2500 | AAAAAA, 0 | |
2501 | TEXT /ARGERR/ | |
2502 | *.-1 | |
2503 | 1;0 | |
2504 | JARGER | |
2505 | ||
2506 | EEEEEE, 0 | |
2507 | TEXT /EXIT/ | |
2508 | 1;0 | |
2509 | JEXIT | |
2510 | ||
2511 | POUND, .+7 | |
2512 | TEXT /#ARGER/ | |
2513 | *.-1 | |
2514 | 1;0 | |
2515 | JARGER | |
2516 | .+7 | |
2517 | TEXT /#BAK/ | |
2518 | 1;0 | |
2519 | JBAK | |
2520 | .+7 | |
2521 | TEXT /#DATE/ | |
2522 | 1;0 | |
2523 | JDATE | |
2524 | .+7 | |
2525 | TEXT /#DEF/ | |
2526 | 1;0 | |
2527 | JDEF | |
2528 | .+7 | |
2529 | TEXT /#DISMS/ | |
2530 | *.-1 | |
2531 | 1;0 | |
2532 | JDISMS | |
2533 | .+7 | |
2534 | TEXT /#ENDF/ | |
2535 | 1;0 | |
2536 | JENDF | |
2537 | .+7 | |
2538 | TEXT /#EOFSW/ | |
2539 | *.-1 | |
2540 | 1;0 | |
2541 | JEOFSW | |
2542 | .+7 | |
2543 | TEXT /#EXIT/ | |
2544 | 1;0 | |
2545 | JEXIT | |
2546 | .+7 | |
2547 | TEXT /#HANG/ | |
2548 | 1;0 | |
2549 | JHANG | |
2550 | .+7 | |
2551 | TEXT /#IDLE/ | |
2552 | 1;0 | |
2553 | JIDLE | |
2554 | .+7 | |
2555 | TEXT /#INT/ | |
2556 | 1;0 | |
2557 | JINT | |
2558 | .+7 | |
2559 | TEXT /#RDAO/ | |
2560 | 1;0 | |
2561 | JRDAO | |
2562 | .+7 | |
2563 | TEXT /#READO/ | |
2564 | *.-1 | |
2565 | 1;0 | |
2566 | JREADO | |
2567 | .+7 | |
2568 | TEXT /#RENDO/ | |
2569 | *.-1 | |
2570 | 1;0 | |
2571 | JRENDO | |
2572 | .+7 | |
2573 | TEXT /#RETRN/ | |
2574 | *.-1 | |
2575 | 1;0 | |
2576 | JRETRN | |
2577 | .+7 | |
2578 | TEXT /#REW/ | |
2579 | 1;0 | |
2580 | JREW | |
2581 | .+7 | |
2582 | TEXT /#RSVO/ | |
2583 | 1;0 | |
2584 | JRSVO | |
2585 | .+7 | |
2586 | TEXT /#RUO/ | |
2587 | 1;0 | |
2588 | JRUO | |
2589 | .+7 | |
2590 | TEXT /#SWAP/ | |
2591 | 1;0 | |
2592 | JSWAP | |
2593 | .+7 | |
2594 | TEXT /#T812/ | |
2595 | 1;0 | |
2596 | JT812 | |
2597 | .+7 | |
2598 | TEXT /#UE/ | |
2599 | 0 | |
2600 | 1;0 | |
2601 | JUERR | |
2602 | .+7 | |
2603 | TEXT /#WDAO/ | |
2604 | 1;0 | |
2605 | JWDAO | |
2606 | .+7 | |
2607 | TEXT /#WRITO/ | |
2608 | *.-1 | |
2609 | 1;0 | |
2610 | JWRITO | |
2611 | 0 /LAST ONE | |
2612 | TEXT /#WUO/ | |
2613 | 1;0 | |
2614 | JWUO | |
2615 | SYMTBL, 0 /START OF GST | |
2616 | \f/PASS0- THIS IS THE BEGINNING OF PASS0 | |
2617 | ||
2618 | PASS0, JMP .+4 /NORMAL ENTRY PT | |
2619 | DCA CDSW /CHAINED TO ENTRY PT - NO DECODE 1ST TIME | |
2620 | TAD (7616 | |
2621 | DCA PTRIO | |
2622 | TAD (-10 | |
2623 | DCA LVLCNT /SET LEVEL AND OVERLAY COUNTERS | |
2624 | DCA OVRCNT | |
2625 | CIF 0 | |
2626 | JMS I (CORE /DETERMINE CORE SIZE | |
2627 | DCA MXFLD | |
2628 | JMS I (CORMOV | |
2629 | CDF 0 | |
2630 | 0-1 | |
2631 | CDF 0 | |
2632 | LB0BUF-1 /MOVE LOWER FIELD 0 TO A SAFE PLACE | |
2633 | -2000 | |
2634 | CDF 0 | |
2635 | TAD I (OSJSWD /GET JOB STATUS WORD | |
2636 | AND (376 /CLEAR DESIRED FLAGS | |
2637 | TAD (3403 /SET NO RESTART, USR AND CD AREAS CLEAR | |
2638 | DCA I (OSJSWD /AS WELL AS BATCH FLAG | |
2639 | CDF 10 | |
2640 | TAD I (OSDATE | |
2641 | SNA | |
2642 | JMP NODATE | |
2643 | CLL RTR /ROTATE AND MASK TO GET THE DAY | |
2644 | RAR | |
2645 | AND (37 | |
2646 | JMS MAKSXB /CONVERT TO SIXBIT | |
2647 | DCA I (LDATE+1 /PUT THE DAY INTO THE TEXT LINE | |
2648 | TAD I (OSDATE /GET THE DATE---FIND MONTH | |
2649 | CIF 0 /CHANGE DATA FIELD TO 0 | |
2650 | JMS I (DATCHG /FIND THE MONTH/YEAR | |
2651 | JMS MAKSXB /CONVERT THE YEAR TO SIXBIT | |
2652 | DCA YRTEMP /STORE IT AWAY | |
2653 | CIF 0 /CHANGE INSTRUC. FIELD TO 0 | |
2654 | JMS I (GETDAT /PRINT THE YEAR | |
2655 | DCA I (LDATE+5 /PUT REST OF YEAR IN TEXT LINE | |
2656 | \f/SET UP OTHER POINTERS TO MODULE TABLES | |
2657 | ||
2658 | NODATE, TAD (-NUMMOD | |
2659 | DCA I (MCTTBL | |
2660 | TAD (MCTTBL+1 | |
2661 | DCA NMCTS /INITIALIZE MODULE CT TBL PTR | |
2662 | TAD (MODTBL+2 | |
2663 | DCA PTRULS /INITIALIZE MODULE TBL PTR | |
2664 | DCA MODCNT | |
2665 | DCA I (MODTBL /CLEAR LIBRARY UNIT | |
2666 | DCA I NMCTS /CLEAR FOR 1ST LEVEL MODULE COUNTS | |
2667 | CDSW, JMP I (RALFLP /ZEROED IF CHAINED TO | |
2668 | JMP I (DECO | |
2669 | ||
2670 | MAKSXB, 0 | |
2671 | DCA TMP0 | |
2672 | DCA TMP1 | |
2673 | TAD TMP0 | |
2674 | TAD (-12 | |
2675 | ISZ TMP1 | |
2676 | SMA | |
2677 | JMP .-3 /SUBTRACT 10 IN A LOOP | |
2678 | TAD (5772 /AS GOOD A NUMBER AS ANY | |
2679 | DCA TMP0 | |
2680 | TAD TMP1 | |
2681 | CLL RTL | |
2682 | RTL | |
2683 | RTL /GET THE TENS DIGIT INTO POSITION | |
2684 | TAD TMP0 | |
2685 | JMP I MAKSXB | |
2686 | YRTEMP, 0 | |
2687 | PAGE | |
2688 | \f/DECODE COMMAND DECODER INPUT | |
2689 | ||
2690 | RALFLP, JMS I (200 | |
2691 | 5 /COMMAND DECODE | |
2692 | 2214 /.RL DEFAULT EXTENSION | |
2693 | TAD (7616 | |
2694 | DCA PTRIO | |
2695 | TAD I (OS8SWS+1 | |
2696 | AND (40 | |
2697 | CDF 0 | |
2698 | SZA CLA /IS /S SWITCH ON? | |
2699 | DCA I (SVMAIN+LB0BUF /CLEAR (RELOCATED) SVMAIN | |
2700 | DECO, CDF 10 /FOR FULL SYMBOL MAP LISTING | |
2701 | TAD I (7600 /CHK FOR LOADER IMAGE FILE | |
2702 | SNA /OUTPUT FILE? | |
2703 | JMP SM /NO | |
2704 | AND (0017 /MUST BE AN "MS" DEV | |
2705 | TAD (OS8DCB-1 | |
2706 | DCA TMP0 | |
2707 | TAD I TMP0 | |
2708 | SPA CLA /IS IT? | |
2709 | JMP .+4 /YES | |
2710 | SM1, TAD (DEVERR /NO,ERR | |
2711 | JMS I (ERORR | |
2712 | JMP RALFLP | |
2713 | TAD I P7604 | |
2714 | SNA | |
2715 | TAD (1404 /.LD | |
2716 | DCA I P7604 /INTO EXTENSION IF NONE SPECIFIED | |
2717 | JMS I (CORMOV /MOVE LOADER IMAGE FILE NAME | |
2718 | CDF 10 | |
2719 | 7600-1 | |
2720 | CDF 0 /INTO FIELD 0 | |
2721 | LDRNAM+LB0BUF-1 | |
2722 | -5 | |
2723 | SM, TAD I (7605 /CHK FOR SYM MAP FILE | |
2724 | SNA | |
2725 | JMP SM2 /NONE | |
2726 | AND (17 | |
2727 | TAD (OS8DCB-1 | |
2728 | DCA TMP0 | |
2729 | TAD I TMP0 | |
2730 | RAL /LOOK AT "READ ONLY" BIT IN DCB | |
2731 | SPA CLA | |
2732 | JMP SM1 /ERROR - NO GOOD FOR OUTPUT | |
2733 | TAD I (7611 | |
2734 | SNA | |
2735 | TAD (1423 /.LS DEFAULT MAP EXTENSION | |
2736 | DCA I (7611 | |
2737 | JMS I (CORMOV /MOVE SYMMAP FILE NAME INTO FIELD 0 | |
2738 | CDF 10 | |
2739 | P7604, 7605-1 | |
2740 | CDF 0 | |
2741 | LDRNAM+LB0BUF+4 | |
2742 | -5 | |
2743 | \f/COLLECT INPUT FILES | |
2744 | ||
2745 | SM2, TAD I (OS8SWS | |
2746 | CLL RAR | |
2747 | SZL CLA / IS /L SWITCH ON? | |
2748 | JMP LIBRAR /YES - THIS IS A LIBRARY FILE | |
2749 | FILELP, TAD I PTRIO | |
2750 | SNA | |
2751 | JMP FINLIN /NO MORE INPUT FILES | |
2752 | DCA TMP0 | |
2753 | TAD TMP0 | |
2754 | AND (17 | |
2755 | ISZ PTRULS | |
2756 | DCA I PTRULS /STORE UNIT NUMBER | |
2757 | TAD TMP0 | |
2758 | AND (7760 | |
2759 | CLL RTR | |
2760 | RTR | |
2761 | TAD (7400 | |
2762 | CIA | |
2763 | ISZ PTRULS | |
2764 | DCA I PTRULS /STORE LENGTH | |
2765 | TAD I PTRIO | |
2766 | ISZ PTRULS | |
2767 | DCA I PTRULS /STORE STARTING BLOCK NUMBER | |
2768 | ISZ MODCNT | |
2769 | JMP FILELP /CONTINUE | |
2770 | ||
2771 | FINLIN, JMS I (CORDSW /CHECK C AND O SWITCHES | |
2772 | TAD I (OS8SWS | |
2773 | AND (40 | |
2774 | SZA CLA /IF THE /G SWITCH IS ON | |
2775 | JMP I (EOPAS0 /ITS THE END | |
2776 | TAD I (OS8SWS-1 | |
2777 | SPA CLA /IF AN ALTMODE TERMINATED THE LINE, | |
2778 | JMP I (EOPAS0 /DITTO | |
2779 | TAD (-MCTTBL-1 | |
2780 | TAD NMCTS | |
2781 | SZA CLA /ARE WE STILL IN THE MAIN SECTION? | |
2782 | JMS I (UPDMOD /NO - UPDATE OVERLAY & MODULE COUNTS | |
2783 | JMP RALFLP | |
2784 | \fLIBRAR, TAD I PTRIO | |
2785 | AND (17 | |
2786 | DCA I (MODTBL /STORE LIBRARY PARAMETERS | |
2787 | TAD I PTRIO /NEGLECTING LENGTH, WHICH WILL | |
2788 | DCA I (MODTBL+2 /BE FILLED IN LATER | |
2789 | TAD I PTRIO | |
2790 | SNA CLA | |
2791 | JMP FINLIN /ONLY ONE FILE ALLOWED ON THE LINE | |
2792 | TAD (MIERR | |
2793 | JMP SM1+1 /OTHERWISE ITS MIXED INPUT | |
2794 | PAGE | |
2795 | \f/UPDMOD- UPDATE MODULE COUNT TBL | |
2796 | ||
2797 | UPDMOD,0 | |
2798 | CLL | |
2799 | TAD MODCNT /UPDATE -NUM OF | |
2800 | TAD I (MCTTBL /UNUSED MODULES | |
2801 | DCA I (MCTTBL | |
2802 | SZL | |
2803 | JMP MAXRLF /MAX NUMBER EXCEEDED | |
2804 | ISZ OVRCNT /BUMP OVERLAY NUMBER | |
2805 | SKPCLA, SKP CLA | |
2806 | JMP MAXOVL /MORE THAN 16 OVERLAYS IN A LEVEL | |
2807 | TAD MODCNT /UPDATE +NUM OF | |
2808 | TAD I NMCTS /MODULES IN LAST LEVEL | |
2809 | SNA /**** | |
2810 | JMP I UPDMOD | |
2811 | DCA I NMCTS | |
2812 | ISZ NMCTS /ADV PTR TO NXT LOC | |
2813 | DCA I NMCTS /ZERO THE NXT LOC IN PREPARATION | |
2814 | DCA MODCNT /CLR CNT FOR NXT LEVEL | |
2815 | JMP I UPDMOD | |
2816 | ||
2817 | /CORDSW- LOOK FOR SWS C AND O | |
2818 | ||
2819 | CORDSW, 0 | |
2820 | TAD I (OS8SWS+1 | |
2821 | AND (10 | |
2822 | SNA CLA /CHECK FOR /U SWITCH | |
2823 | JMP CHKCSW | |
2824 | CDF 0 | |
2825 | TAD SKPCLA /INHIBIT LEVEL CHECKING | |
2826 | DCA I (TSTTRP | |
2827 | CDF 10 | |
2828 | CHKCSW, TAD I (OS8SWS | |
2829 | RTL | |
2830 | SPA CLA | |
2831 | JMP I (RALFLP | |
2832 | TAD I (OS8SWS+1 | |
2833 | RTL | |
2834 | SMA CLA | |
2835 | JMP I CORDSW | |
2836 | ||
2837 | /O-SWITCH | |
2838 | ||
2839 | JMS UPDMOD | |
2840 | ISZ NMCTS /ADV PTR FOR NXT GUY | |
2841 | DCA I NMCTS /CLR FOR NXT LEVEL MOD CNT | |
2842 | TAD (-21 | |
2843 | DCA OVRCNT | |
2844 | ISZ LVLCNT /BUMP LEVEL COUNTER | |
2845 | JMP I (RALFLP | |
2846 | TAD (MXLERR | |
2847 | JMP MAXRLF+1 /TOO MANY LEVELS | |
2848 | \fMAXRLF, TAD (MXRERR | |
2849 | JMS ERORR | |
2850 | CDF CIF 0 | |
2851 | JMP I (7605 | |
2852 | MAXOVL, TAD (MXOERR | |
2853 | JMP MAXRLF+1 | |
2854 | ||
2855 | /ERORR- PRINTS OUT ERROR MESSAGES OF A | |
2856 | / BUFR LOCATED IN FLD1 | |
2857 | / ENTER WITN ADR OF BUFR IN AC | |
2858 | / | |
2859 | ERORR, 0 | |
2860 | DCA BFADR | |
2861 | CDF 10 /CALL TTYHAN | |
2862 | JMS I (CORMOV | |
2863 | CDF 0 | |
2864 | LB0BUF-1 /MOVE LOWER FIELD 0 BACK | |
2865 | CDF 0 /SO WE CAN USE THE MESSAGE HANDLER | |
2866 | 0-1 | |
2867 | -2000 | |
2868 | CIF 0 | |
2869 | JMS I (TTYHAN | |
2870 | CDF 10 | |
2871 | BFADR, 0 | |
2872 | JMP I ERORR | |
2873 | \fMIERR, TEXT /MIXED INPUT/ | |
2874 | DEVERR, TEXT /BAD OUTPUT DEVICE/ | |
2875 | MXRERR, TEXT /TOO MANY RALF FILES/ | |
2876 | MXLERR, TEXT /TOO MANY LEVELS/ | |
2877 | MXOERR, TEXT /TOO MANY OVERLAYS/ | |
2878 | PAGE | |
2879 | \f/PASS1, PASS2 INITIALIZATION | |
2880 | ||
2881 | EOPAS0, JMS I (UPDMOD /BUMP COUNTS FOR LAST LINE OF INPUT | |
2882 | ISZ NMCTS | |
2883 | DCA I NMCTS /PUT IN A DOUBLE ZERO AT THE END | |
2884 | JMS I (CORMOV | |
2885 | CDF 0 | |
2886 | LB0BUF-1 | |
2887 | CDF 0 | |
2888 | 0-1 /MOVE LOWER FIELD 0 BACK INTO PLACE | |
2889 | -2000 | |
2890 | TAD I (MODTBL | |
2891 | SZA CLA /USER-SPECIFIED LIBRARY? | |
2892 | JMP RDLIBH /YES | |
2893 | CLA IAC | |
2894 | JMS I (200 | |
2895 | 2 /LOOKUP | |
2896 | LIBRY | |
2897 | 0 | |
2898 | JMP NOLIB /FORLIB.RL NOT FOUND | |
2899 | TAD .-3 /GET STARTING BLOCK | |
2900 | DCA I (MODTBL+2 | |
2901 | CLA IAC | |
2902 | DCA I (MODTBL /STORE UNIT AND BLOCK # | |
2903 | RDLIBH, STL RTR | |
2904 | DCA I (MODTBL+1 /JUST TO BE CAREFUL | |
2905 | CIF 0 | |
2906 | JMS I (IOHAN /READ BLOCK 0 OF THE LIBRARY CATALOG | |
2907 | MODTBL | |
2908 | 0210 | |
2909 | PLB, RALFBF | |
2910 | 0 | |
2911 | STA | |
2912 | TAD I PLB | |
2913 | SNA CLA /IS IT AN HONEST - TO - GOD LIBRARY? | |
2914 | JMP .+4 /YES | |
2915 | NOLIB, DCA I (MODTBL | |
2916 | DCA I (MODTBL+2 | |
2917 | DCA I (RALFBF+3 /ZERO COUNT WORD IN BUFFER | |
2918 | TAD I (RALFBF+3 | |
2919 | DCA I (MODTBL+1 /STORE LENGTH OF CATALOGUE | |
2920 | TAD (LHDR-1 | |
2921 | DCA NDX0 | |
2922 | TAD (-400 | |
2923 | DCA TMP0 | |
2924 | DCA I NDX0 /0 OUT | |
2925 | ISZ TMP0 /LDR HDR | |
2926 | JMP .-2 /GET PAGE 0 | |
2927 | \f/PASS1 INITIALIZATION CONTINUED | |
2928 | ||
2929 | TAD I (MCTTBL /UNUSED | |
2930 | DCA TMP2 /MODULES | |
2931 | TAD (MCTTBL+2 /GET NUMBER OF OVERLAYS | |
2932 | DCA NDX0 / IN EACH LEVEL | |
2933 | TAD (QUSRLV+4 /WHERE THE | |
2934 | DCA TMP0 /CNTS GO IN | |
2935 | JMP BY0 /LDR HDR BLK | |
2936 | LOP0, ISZ I TMP0 /INCREMENT NUMBER OF OVERLAYS IN THIS LEVEL | |
2937 | TAD I NDX0 | |
2938 | SZA CLA /END OF LEVEL? | |
2939 | JMP LOP0 /NO | |
2940 | TAD (4 /THIS LEVEL | |
2941 | TAD TMP0 | |
2942 | DCA TMP0 | |
2943 | BY0, DCA I TMP0 /RESET CNT | |
2944 | TAD I NDX0 /0,0 ENDS | |
2945 | SZA CLA /MOD CNT TBL | |
2946 | JMP LOP0 /DO MORE PTR TO | |
2947 | TAD I (MODTBL+1 /GET LENGTH OF LIBRARY CATALOG | |
2948 | DCA TMP4 /BLOCKS | |
2949 | TAD TMP2 /CHK FOR MAX | |
2950 | SZA CLA /NUM OF RALFS 0=MOD TBL IS FULL | |
2951 | TAD I (MODTBL /CHK FOR NO | |
2952 | CDF | |
2953 | DCA I (LIBRSW /LIBRARY AND SET SWITCH ACCORDINGLY | |
2954 | TAD TMP2 /-NUM LEFT | |
2955 | DCA I (MLEFT /OF RALF MODS | |
2956 | TAD (SYMTBL-1 /PTR TO TOP | |
2957 | DCA I (NDX4 /OF GST | |
2958 | TAD I (OSJSWD | |
2959 | AND (7377 /KILL "BATCH PROTECTED" FLAG | |
2960 | DCA I (OSJSWD | |
2961 | \f AC7776 /IS THERE | |
2962 | TAD MXFLD /GREATER THAN 12K OF CORE | |
2963 | SPA SNA CLA /? | |
2964 | JMP LS16K /NO | |
2965 | TAD (200^12!30 /SET TXT I/O | |
2966 | DCA I (TXTBLK-2 /BUFFS UP IN FLD 3 | |
2967 | TAD (-5000 /-WDCNT (12 | |
2968 | DCA I (TXTWDS /BLKS) | |
2969 | TAD (6231 /CDF 30 | |
2970 | DCA I (RDTCDF | |
2971 | LS16K, TAD (7700 /USR IS NOT | |
2972 | DCA I (USR /IN CORE | |
2973 | CDF 10 | |
2974 | JMP I (INIBFS | |
2975 | LIBRY, 0617;2214;1102;2214 /FORLIB.RL | |
2976 | PAGE | |
2977 | \f/THIS IS THE INITIAL BINARY BUFFER TABLE | |
2978 | ||
2979 | R= LDBUFS-BUFTAB | |
2980 | ||
2981 | BUFTAB, .+4+R; 0; 0; 3200 /03200-05177 | |
2982 | B8KPT, .+4+R; 0; 0; 5200 /05200-07177 | |
2983 | .+4+R; 0; 0; 0020 /20000-21777 | |
2984 | B12KPT, .+4+R; 0; 0; 2020 /22000-23777 | |
2985 | B16KPT, .+4+R; 0; 0; 4020 /24000-25777 | |
2986 | .+4+R; 0; 0; 0040 /40000-41777 | |
2987 | B20KPT, .+4+R; 0; 0; 2040 /42000-43777 | |
2988 | .+4+R; 0; 0; 4040 /44000-45777 | |
2989 | .+4+R; 0; 0; 0050 /5000-51777 | |
2990 | 0; 0; 0; 2050 /52000-53777 | |
2991 | \fINIBFS, TAD MXFLD | |
2992 | TAD (JMP STBPTR-1 | |
2993 | DCA .+1 | |
2994 | HLT /DISPATCH ON NUMBER OF FIELDS | |
2995 | STBPTR, DCA B8KPT | |
2996 | DCA B12KPT | |
2997 | DCA B16KPT | |
2998 | DCA B20KPT | |
2999 | NOP | |
3000 | NOP /NOT SET UP TO USE MORE THAN 24K | |
3001 | NOP | |
3002 | JMS I (CORMOV | |
3003 | CDF 10 | |
3004 | BUFTAB-1 /MOVE THE BINARY BUFFER TABLE | |
3005 | CDF 10 | |
3006 | LDBUFS-1 /INTO A SAFE PLACE | |
3007 | -50 | |
3008 | CDF 0 | |
3009 | TAD LVLCNT /SET -NUM OF | |
3010 | TAD (11 /LEVELS | |
3011 | CIA | |
3012 | DCA I (NLVL | |
3013 | TAD (-5 /NUM OF LIBR | |
3014 | DCA TMP2 /BLKS FOR 8K | |
3015 | CLA CMA | |
3016 | TAD MXFLD | |
3017 | SNA CLA /GREATER THAN 8K CORE? | |
3018 | JMP TO8K /NO SET LIBR ARGS | |
3019 | DCA I (LBARG+1 | |
3020 | TAD (200^12!20 /12 BLKS FLD2 | |
3021 | DCA I (LBARG | |
3022 | TAD (6221 /CDF 20 | |
3023 | DCA I (LBFLD | |
3024 | TAD (6221 | |
3025 | DCA I (GETLEN+1 | |
3026 | TAD (-12 | |
3027 | DCA TMP2 | |
3028 | TO8K, TAD TMP2 /WILL LIBR | |
3029 | TAD TMP4 /BE CORE | |
3030 | SMA SZA CLA /RESIDENT? | |
3031 | DCA I (RESFLG /NO | |
3032 | TAD (SYMTBL-1 | |
3033 | DCA I (NDX0 | |
3034 | \f CDF 10 | |
3035 | TAD (ESDPG-1 /ENTER DEFAULT | |
3036 | DCA NDX0 /VALUES FOR | |
3037 | TAD (-200 /ESD REF PAGE | |
3038 | DCA TMP0 /IT SAVES | |
3039 | TAD (SYMTBL+5 /PROBLEMS WITH | |
3040 | DCA I NDX0 /EXTERNS | |
3041 | ISZ TMP0 | |
3042 | JMP .-3 | |
3043 | CLA STL RTL | |
3044 | DCA I (LHDR /STORE LOADER IMAGE CODE IN HEADER | |
3045 | TAD (VERNUM | |
3046 | DCA I (QVERNO /STORE LOADER VERSION NUMBER | |
3047 | CIF 0 | |
3048 | JMP I (STPAS1 | |
3049 | PAGE | |
3050 | \f/CORMOV- A CORE MOVE FOR A CHUNK OF CORE IN | |
3051 | / ANY FLD TO ANY FLD. | |
3052 | / | |
3053 | / CALL JMS CORMOV | |
3054 | / CDF Z1 /Z1=FROM FLD | |
3055 | / ADDR1 /ADDR OF (1ST LOC-1) | |
3056 | / CDF Z2 /Z2=TO FLD | |
3057 | / ADDR2 /ADDR OF (1ST LOC-1) | |
3058 | / -N /-OCT NUM OF WDS TO MOV | |
3059 | / | |
3060 | CORMOV, 0 | |
3061 | CLA CMA | |
3062 | TAD CORMOV | |
3063 | DCA NDX0 | |
3064 | TAD I NDX0 | |
3065 | DCA TOCDF-2 | |
3066 | TAD I NDX0 | |
3067 | DCA NDX1 | |
3068 | TAD I NDX0 | |
3069 | DCA TOCDF | |
3070 | TAD I NDX0 | |
3071 | DCA NDX2 | |
3072 | TAD I NDX0 | |
3073 | DCA TMP0 | |
3074 | 0 | |
3075 | TAD I NDX1 | |
3076 | TOCDF, 0 | |
3077 | DCA I NDX2 | |
3078 | ISZ TMP0 | |
3079 | JMP TOCDF-2 | |
3080 | CDF 10 | |
3081 | JMP I NDX0 /RTN | |
3082 | ||
3083 | $$$$$ | |
3084 | \f |