A large commit.
[pdp8.git] / sw / os8 / v3d / sources / fortran / dectapes / dectape2 / load.pa
CommitLineData
81e70d48
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/
52VERNUM=24
53PATCH="A
54
55ESDPG= 7400 /START OF ESD REFERENCE PG IN FIELD 1
56LHDR= 7200 /WD0 IN CORE OF LDR HDR IN FIELD 1
57OS8SWS= 7643
58OSJSWD= 7746
59OS8DCB= 7760
60OSDATE= 7666
61AC7776= CLL STA RAL
62AC7775= CLL STA RTL
63AC4000= CLA STL RAR
64AC2000= CLA STL RTR
65AC0002= CLA STL RTL
66
67/ PASS0 DEFINITIONS
68/ ----- -----------
69
70MCTTBL= 6000 /MODULE COUNT TABLE BASE
71OVTLEN= 2^20^7+2+1 /2 WORDS/OVERLAY, 2 FOR MAIN & 1 FGL
72OVLTBL= MCTTBL-OVTLEN /(FGL = FOR GOOD LUCK)
73MODTBL= 21^7+MCTTBL+3 /START OF MODULE TABLE
74NUMMOD= 7200-MODTBL%3 /NUMBER OF ENTRIES IN MODULE TABLE
75PTRIO= NDX6 /FLD1;INIT SET TO 7617-1
76RALFBF= 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
82QRTSWP, ZBLOCK 2 /SWAPPER ARGS TO LOAD AND START USER MAIN
83QHGHAD, ZBLOCK 2 /HIGHEST ADDRESS USED BY THIS PROGRAM
84QVERNO, 0 /LOADER VERSION NUMBER
85QDPFLG, 0 /"D.P. HARDWARE REQUIRED" FLAG
86QUSRLV, ZBLOCK 40 /USER OVERLAY LEVEL DSRN INFO
87LDBUFS, 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
95JARGER= 204
96JBAK= 210
97JDATE= 203
98JDEF= 213
99JDISMS= 412
100JENDF= 211
101JEOFSW= 16
102JEXIT= 223
103JHANG= 524
104JIDLE= 227
105JINT= 403
106JRDAO= 217
107JREADO= 221
108JRENDO= 206
109JRETRN= 235
110JREW= 212
111JRSVO= 207
112JRUO= 215
113JSWAP= 222
114JT812= 225
115JUERR= 204
116JWDAO= 216
117JWRITO= 220
118JWUO= 214
119\f *0
120TMP0, 0 /TMP0-TMP4 FOR GEN. USE
121TMP1, 0
122TMP2, 0
123TMP3, 0
124
125 *10 /INDEX REGISTERS
126NDX0, 0
127NDX1, 0
128NDX2, 0
129NDX3, 0
130NDX4, 0
131NDX5, 0
132NDX6, 0
133NDX7, OVLTBL-1 /POINTER INTO OVERLAY LENGTH TABLE
134
135USR, 200 /USR CALL: COULD BE 200 OR 7700
136PPACK, PACK /CHANGED TO TTYO BY ERROR ROUTINE
137IOFLG, 0
138SYMTM3, SYMTBL-3
139ORGFLG, 0
140RFPTR1, 0
141GPTR, 0
142LBPTR, 0
143TRPCNT, 0
144P2FLG, 0
145CZFLG, 0
146F1FLG, 0
147S8FLG, 0
148OVRFLO, -1
149SWITZ, -1
150SVMAIN, -4 /0 IF /S SPECIFIED
151DPFLG, 0
152
153\f/MORE PAGE ZERO LOCATIONS
154GTYP, 0
155EPTR, 0
156EPT2, 0
157ETYP, 0
158BPTR, 0
159BPT2, 0
160REFPTR, 0
161RLEN, 0
162FTMP0, 0;0
163RBLK, 0
164FATAL, 0
165BP, LDBUFS /POINTER INTO PASS2 BUFFER ARRAY
166A1, 1;0 /CURRENT ADDRESS IN FIELDS 1-7
167LNONUM, 0
168LBCNT, 0
169BLKCNT, 0
170TRAPV, 0;0
171BLKSIZ, 0
172BSECTP, 0 /POINTER INTO BINARY SECTION TABLE (PASS 2)
173OUTINH, 0
174BLKBEG, 0
175NEWBLK, 0
176NEWLEN, 0
177MCNT, 0
178MBGCNT, 0
179TMP4, 0
180TMP5, 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
190LDRIO, 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
218LDRIOC, 0
219LDRIOA, 0
220LDRIOB, 0
221 CDF 10
222LDRIOR, 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
230SETBPT, 0
231 DCA BPTR /STORE BPTR
232 CLA IAC
233 TAD BPTR
234 DCA BPT2 /AND PTR TO NEXT WD
235 JMP I SETBPT
236ORGMSG, TEXT /ILLEGAL ORIGIN/
237SYMMSG, TEXT /OVER SYMB/
238IOMSG, TEXT %LOADER I/O ERROR%
239ENTMSG, 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/
252TTYHAN, 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
264TTYCDF, 0
265 JMS CRLF
266TTYLP, 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
277HAF, AND [77
278 SNA
279 JMP CRLFF
280 TAD [240
281 AND [77
282 TAD [240
283 JMS TTYO
284 JMP TTYLP
285CRLFF, JMS CRLF
286 0
287 JMP I TTYHAN
288MESADR, 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
294DOMAP, 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
318LDRNAM, 1;0617;2224;2216;1404 /SYS:FORTRN.LD
319 ZBLOCK 5 /NO DEFAULT SYMBOL MAP DEVICE
320
321TTYO, 0
322 TLS
323 TSF
324 JMP .-1
325 CLA
326 JMP I TTYO
327/
328CRLF, 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
336OS8ER, 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
343SYSERR, TEXT /SYSTEM ERROR/
344TYTBL, 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/
370IOHAN, 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
433IOH, 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/
448SETSBN, 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
458P6203, 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
466FCNWD, 0
467 0
468 0
469 JMP HNDERR /ERROR RETURN OF CALL
470 ISZ IOHAN
471RTNIO, 0 /CIF INSTR
472 JMP I IOHAN
473IOENT, 0
474ULSADR, 0
475UNITSV, 0
476/
477GETCDF, 0
478 0
479 JMP I GETCDF
480
481HNDERR, 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
486INQIRE, 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
499P6201, 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
543BY10, TAD LNONUM /ADD 1 TO BITS
544 TAD (20 /4-7 OF LEVEL
545 DCA LNONUM /AND OVR LAY NUM
546 JMP SAMOVR
547EOLVL, 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
569LEVRND, 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
576SAMOVR, TAD [3 /ADV PTR TO
577 TAD RFPTR1 /NXT RALF
578 DCA RFPTR1 /MODULE
579 JMP I ADVOVR
580SAMOV4, 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
602SETCNT, 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
615MTBL, 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
624LOOK, 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
633LOP5, 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
643YUCCH, 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
653SETTYP, 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
676HOOKIN, 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
701ENDSYM, 1-OVLTBL
702
703SETEPT, 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
722OLINE, 0 /OUTPUT A LINE OF TEXT TO THE SYMBOL MAP
723 DCA TMP5
724OLINLP, 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
792MPBLK, 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
822LOP10, 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
836PRMAIN, 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
847SM600, CLA /** AC NOT 0 ON RETURN**
848 TAD (214
849 JMS I PPACK
850 TAD (232 /CTRL Z
851OUFILP, 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
864SMPCLN, 0
865 JMS I [OS8ER
866NOMAP, CDF 10
867 JMP I SYMMAP
868JOUSYM, 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
882SIXTO8, 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
891ENTERR, 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
898PACK, 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
911ONEOR2, 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
922ROL, 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
932WRBUF, 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
937SBPTR, 7000 /1ST ADDR
938SYLST, 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
945LOP7, 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
959OUTSYM, 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
988CVRTMP, 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
1003PCRLF, 0
1004 TAD (215 /EOL
1005 JMS I PPACK
1006 TAD (212
1007 JMS I PPACK
1008 JMP I PCRLF
1009
1010PR15, 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
1022PASS2, 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
1037BY12, 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
1062LDCLEN, 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
1071CHAIN, CIF 10
1072 JMS I USR
1073CHCODE, 2
1074 RTSNAM /LOOKUP RTS
1075 0
1076 JMP NORTS
1077 TAD (6
1078 DCA CHCODE /CHANGE LOOKUP TO CHAIN
1079 JMP CHAIN
1080
1081NORTS, DCA I (LDRNAM+5 /KILL SECOND STORAGE MAP
1082 JMS I [RTNOS8
1083 RTSMSG
1084RTSNAM, 0622;2423;0000;2326 /FRTS.SV
1085\fSETREF, 0
1086 JMS I (RDRLES /GET MODULE ESD TABLE
1087 AC7776
1088 DCA EPTR
1089LOP12, 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
1101BY11, 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
1144LOP11, 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
1223BADORG, 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
1233PROVLP, 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
1245RDRLES, 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
1252RLARG, 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
1261WRALL, 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
1276NOTREL, JMS I [RTNOS8
1277 RELMSG
1278
1279RELMSG, TEXT /BAD INPUT FILE/
1280
1281RTSMSG, 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
1304GETCTL, 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
1357NEWBB4, 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
1379VIRGIN, 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
1396GOTBLK, 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
1401QUIKIE, 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
1407NEWBUF, 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
1420BPPREV, 0
1421MAXBLK, 0
1422\f/COME HERE TO STORE 1 WORD
1423/IN SOME BINARY OUTPUT BUFFER
1424
1425PUTBIN, 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)
1438OUTFLD, 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
1459CURBLK, 0
1460 PAGE
1461\f/COME HERE TO SCAN AND RELOCATE
1462/THE TEXT OF AN ENTIRE MODULE
1463
1464TXTSCN, 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
1476SETTRP, 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
1484BY2M5, 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
1489BY2, 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
1514TSTTRP, 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
1536RELC, JMS I (MERGE /MAKE FPP PAIR AND STORE IN BIN BUFFER
1537 JMP TXTSCN+1 /DO NEXT
1538RELC2, 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
1542RELC6, 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
1550REORG, 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
1571TXTBLK, 2
1572 TAD .-2 /SET TXT
1573 DCA RBLK /BUF PTR
1574 TAD TXTWDS /-NUM OF
1575 DCA BLKCNT /WDS-1 IN
1576RDTCDF, CDF 10 /OR CDF 20
1577 TAD I RBLK
1578 CDF 10
1579 ISZ RBLK
1580 JMP I GETTXT /RETURN
1581TXTWDS, -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
1587PUTSYM, 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
1611CTST, 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
1617T2J, 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
1627SHFT3, 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
1637MULENT, 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
1643ISCOM3, TAD (11 /F COMM N FLD1 (RITE9=11)
1644 DCA I GPTR /SET TYP TO F1
1645 ISZ F1FLG
1646ISCOM, 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
1651MTMCNT, 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
1678MYSTIC, 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
1697ESDSCN, 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
1713MSMSG, TEXT /MULT SECT/
1714CORMSG, TEXT /OVER CORE/
1715LIMSG, TEXT /OVER IMAG/
1716MNMSG, TEXT /NO MAIN/
1717 PAGE
1718\f/CONTINUATION OF SUB PUTSYM
1719
1720REP, 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
1741NOMAT, 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
1750M4, -4
1751M7, -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
1778ENTM2, TAD [LVPTR /SET REFERENCE
1779 DCA REFPTR /TO PARENT SYM =WD5 OF #YLVLN
1780ENTMN, 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
1808MNF1, ISZ F1FLG /SET FOR NE TO
1809 JMP MNSECN /0 SO DO8S WILL
1810MNCZ, ISZ CZFLG /KNOW THESE
1811 JMP MNSECN /TYPES OF SECTS
1812\fMNS8, ISZ S8FLG /EXIST AND WILL FIT THEM INTO CORE
1813MNSECN, 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
1818MNSEC5, 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
1857LOP4, 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
1865NXTENT, 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
1875BY3, 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
1919LIBRSW, 0 /NON-ZERO IF LIBRARY SEARCH POSSIBLE
1920STCNT, 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
1928LBARG, 200^5 /OR 200^17!20
1929 LB0BUF /OR 0
1930LBREC, 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
1941ENDLB, 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
1948LSTBLK, 0
1949MLEFT, 0
1950RESFLG, 1
1951NUMENT, 0
1952OLDCNT, 0
1953 PAGE
1954
1955\f/END OF PASS 1 - FIT EVERYTHING INTO CORE
1956
1957DOCORE, 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
1972LOP3, 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
2043NLVL, 0
2044\fDUNLVL, CLA /AC NOT ZERO!
2045 TAD SYMTM3 /NOW RESOLVE
2046 DCA GPTR /ALL OTHER SYMBOLS
2047LP1, 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
2086NOMSCT, 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
2122LDRBLK, LDRNAM+1
2123LDRLEN, 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
2168SETSLP, 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
2212FIT8S, 0
2213 TAD [7770
2214 DCA STYPE /-8M0DE SECT TYPE (7-11)
2215 TAD SYMTM3 /SEARCH GST FOR
2216 DCA GPTR /8 MODE SECTNS
2217F8SECT, 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
2233TOOBIG, JMS I [RTNOS8
2234 CORMSG /PRINT ERROR & GO AWAY
2235STYPE, 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
2281MAXCOM, 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
2311GETEXT, 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
2322LB0BUF= .
2323\f/START OF PROGRAM
2324
2325START, 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
2331XSTRT, 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/
2343CORE, 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
2355CORELP, 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
2368COR70, 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
2381CORTN, 0
2382 JMP I CORE
2383CORLOC, COR70+2 /ADR TO TST IN EACH FLD
2384 1400 /7000+7400+1400=0
2385TRYFLD, 1 /CURRENT FLD TO TST
2386 PAGE
2387\f *6600
2388DATCHG, 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
2451NMCTS= 20
2452MODCNT= 21
2453LVLCNT= 22
2454OVRCNT= 23
2455PTRULS= 24
2456MXFLD= 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
2465BUCKET, 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
2476LEVSYM, TEXT '#YLVL0'
2477 0 /OVERLAY LEVEL
2478SWPSYM, TEXT '#SWAP'
2479 0;0
2480SASYM, TEXT '#MAIN'
2481 0;0 /STARTING ADDRESS
2482
2483/TITLE LINE FOR LOADER MAP
2484
2485TLINE, TEXT 'LOADER V'
2486 *.-1
2487LXX, VERNUM&70^7+VERNUM+6060 /VERNUM IN SIXBIT
2488 PATCH&77^100+40 /PATCH LEVEL
2489LDATE, TEXT ' NO-DA -TE '
2490STLINE, TEXT 'SYMBOL VALUE LVL OVLY'
2491HLINE, TEXT '= 1ST FREE LOCATION'
2492OTLINE, TEXT 'LVL OVLY LENGTH'
2493SMAPU, ZBLOCK 3 /SYMMAP UNIT, LENGTH, ST BLK #
2494LIMGU, ZBLOCK 3 /LDR IMG "
2495OVRSIZ, 0;0
2496LVPTR, OVRSIZ
2497SYMX, 1;SYMTBL-2
2498\f/SYSTEM SYMBOL TABLE
2499
2500AAAAAA, 0
2501 TEXT /ARGERR/
2502 *.-1
2503 1;0
2504 JARGER
2505
2506EEEEEE, 0
2507 TEXT /EXIT/
2508 1;0
2509 JEXIT
2510
2511POUND, .+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
2615SYMTBL, 0 /START OF GST
2616\f/PASS0- THIS IS THE BEGINNING OF PASS0
2617
2618PASS0, 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
2658NODATE, 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
2667CDSW, JMP I (RALFLP /ZEROED IF CHAINED TO
2668 JMP I (DECO
2669
2670MAKSXB, 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
2686YRTEMP, 0
2687 PAGE
2688\f/DECODE COMMAND DECODER INPUT
2689
2690RALFLP, 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
2700DECO, 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
2710SM1, 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
2723SM, 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
2739P7604, 7605-1
2740 CDF 0
2741 LDRNAM+LB0BUF+4
2742 -5
2743\f/COLLECT INPUT FILES
2744
2745SM2, TAD I (OS8SWS
2746 CLL RAR
2747 SZL CLA / IS /L SWITCH ON?
2748 JMP LIBRAR /YES - THIS IS A LIBRARY FILE
2749FILELP, 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
2771FINLIN, 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
2797UPDMOD,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
2805SKPCLA, 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
2819CORDSW, 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
2828CHKCSW, 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
2852MAXOVL, 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/
2859ERORR, 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
2871BFADR, 0
2872 JMP I ERORR
2873\fMIERR, TEXT /MIXED INPUT/
2874DEVERR, TEXT /BAD OUTPUT DEVICE/
2875MXRERR, TEXT /TOO MANY RALF FILES/
2876MXLERR, TEXT /TOO MANY LEVELS/
2877MXOERR, TEXT /TOO MANY OVERLAYS/
2878 PAGE
2879\f/PASS1, PASS2 INITIALIZATION
2880
2881EOPAS0, 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 #
2903RDLIBH, 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
2909PLB, RALFBF
2910 0
2911 STA
2912 TAD I PLB
2913 SNA CLA /IS IT AN HONEST - TO - GOD LIBRARY?
2914 JMP .+4 /YES
2915NOLIB, 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
2936LOP0, 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
2943BY0, 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
2971LS16K, TAD (7700 /USR IS NOT
2972 DCA I (USR /IN CORE
2973 CDF 10
2974 JMP I (INIBFS
2975LIBRY, 0617;2214;1102;2214 /FORLIB.RL
2976 PAGE
2977\f/THIS IS THE INITIAL BINARY BUFFER TABLE
2978
2979R= LDBUFS-BUFTAB
2980
2981BUFTAB, .+4+R; 0; 0; 3200 /03200-05177
2982B8KPT, .+4+R; 0; 0; 5200 /05200-07177
2983 .+4+R; 0; 0; 0020 /20000-21777
2984B12KPT, .+4+R; 0; 0; 2020 /22000-23777
2985B16KPT, .+4+R; 0; 0; 4020 /24000-25777
2986 .+4+R; 0; 0; 0040 /40000-41777
2987B20KPT, .+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
2995STBPTR, 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
3028TO8K, 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/
3060CORMOV, 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
3076TOCDF, 0
3077 DCA I NDX2
3078 ISZ TMP0
3079 JMP TOCDF-2
3080 CDF 10
3081 JMP I NDX0 /RTN
3082
3083 $$$$$
3084\f