14 /COPYRIGHT (C) 1974, 1975
15 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
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.
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.
32 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
33 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
41 / FIXES FOR V23 J.K. 1975
43 / .CORE ROUTINE- RECONIZE CORE RESTRICTION
47 / CHAMGES FOR OS/8 V3D AND OS/78 BY P.T.
48 / .CHANGED VERSION NUMBER TO 24A
49 / .PUT IN NEW DATE ALGORITHM
55 ESDPG= 7400 /START OF ESD REFERENCE PG IN FIELD 1
56 LHDR= 7200 /WD0 IN CORE OF LDR HDR IN FIELD 1
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
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
92 /** SOME OF THESE MAY CHANGE IN FUTURE VERSIONS OF RTS **
120 TMP0, 0 /TMP0-TMP4 FOR GEN. USE
133 NDX7, OVLTBL-1 /POINTER INTO OVERLAY LENGTH TABLE
135 USR, 200 /USR CALL: COULD BE 200 OR 7700
136 PPACK, PACK /CHANGED TO TTYO BY ERROR ROUTINE
150 SVMAIN, -4 /0 IF /S SPECIFIED
153 \f/MORE PAGE ZERO LOCATIONS
165 BP, LDBUFS /POINTER INTO PASS2 BUFFER ARRAY
166 A1, 1;0 /CURRENT ADDRESS IN FIELDS 1-7
172 BSECTP, 0 /POINTER INTO BINARY SECTION TABLE (PASS 2)
182 \f/LOADER STARTS AT 200
184 ISZ .+2 /NON-CHAIN ENTRY
185 JMP I .+1 /CHAIN ENTRY
188 /COME HERE TO READ/WRITE THE LOADER IMAGE.
190 LDRIO, 0 /AC=4000 FOR WRITE, 0 FOR READ
191 DCA LDRIOC /STORE READ/WRITE
199 TAD I LDRIOA /NUMBER OF BLOCKS LEFT IN SECTION
201 JMP LDRIOR /NULL BUFFER - JUST IN CASE
204 CLA /IF >4 BLOCKS LEFT ONLY DO 4
209 TAD LDRIOC /ADD READ/WRITE
213 DCA LDRIOC /STORE R/W + BLOCK COUNT + FLD BITS
216 JMS I [IOHAN /DF MUST BE 0 HERE!
217 LIMGU /LOADER IMAGE FILE
227 JMS SETBPT /EXTREMELY COMMON SEQUENCE
234 DCA BPT2 /AND PTR TO NEXT WD
236 ORGMSG, TEXT /ILLEGAL ORIGIN/
237 SYMMSG, TEXT /OVER SYMB/
238 IOMSG, TEXT %LOADER I/O ERROR%
239 ENTMSG, TEXT %OS/8 ENTER ERROR%
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.
246 / CALL CDF X /X=FLD OF CALLER*10
247 / CIF Y /Y=FLD OF TTYHAN*10
249 / CDF Z /Z=FLD OF MESS.BUF
250 / BUFADR /MESS BUF. ADDR.
253 TAD (6203 /SETUP MICRO INSTR
254 RDF /CDF & CIF FOR RTN
256 TAD I TTYHAN /SET UP FLD OF
260 TAD I TTYHAN /SET UP MESS BUFF ADDR-1
290 \fRTNOS8, 0 /HERE ON PASS1 FATAL ERROR
293 DCA I (OVLTBL /PRINT SYMBOL MAP W/O OVERLAY LENGTH TABLE
296 TAD I RTNOS8 /ADDR OF TTY
302 DCA PPACK /FAKE OUT SYMBOL PRINTER
304 DCA GTYP /PUT LEVEL AND OVERLAY IN GTYP
305 JMS I (CVLOVL /OUTPUT LEVEL AND OVERLAY
307 DCA TMP5 /PRINT 3 DIGIT FILE-WITHIN-OVERLAY
314 JMS CRLF /OUTPUT CRLF AFTERWARDS
318 LDRNAM, 1;0617;2224;2216;1404 /SYS:FORTRN.LD
319 ZBLOCK 5 /NO DEFAULT SYMBOL MAP DEVICE
334 \f/OS8ER- USED WHEN AN OS/8 ERROR OCCURS WHICH IS FATAL
339 CDF 0 /FLD OF MESS BUF
340 SYSERR /ADR OFMESS BUF
341 JMP I [7605 /RTN TO OS8
343 SYSERR, TEXT /SYSTEM ERROR/
344 TYTBL, 4040 /CHARS FOR SMAP
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
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
371 DCA UNITSV /SAV DEV NUM IF ONE
376 TAD P6203 /SETUP CIF & CDF FOR
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?
386 TAD I IOHAN /GET PTR TO UNIT(DEV NUM)
389 TAD I ULSADR /GET DEV NUM
398 TAD I IOHAN /GET FCN CTRL WD
399 CLL RTL /NUM OF PAGES IS CONVRTED
400 RTL /TO NUM BLKS & PUT
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
409 TAD I IOHAN /TRANSF BUF ADR
412 TAD I IOHAN /GET REL STBLK & BUILD
417 TAD I ULSADR /FILE LEN-(REL STB+NUM BLKS)
418 SNL SZA /E.O.FILE CONDITION?
423 SMA SZA /ANY BLKS TO TRANSF?
426 /CHK IF FILE LEN=0; IF SO DO SEQ STUFF
430 CMA /NO,=-1 IF NUM BLKS TRANSF L.T. REQ
433 IOH, DCA TMP0 /THIS NUM OF BLKS
434 /UPDATE FCN CTRL WD IN OS8 CALL
436 AND (4077 /REMOVE REQ NUM OF PGS
437 DCA FCNWD /& PUT IN THE
438 TAD TMP0 /ALTERED NUM
444 CMA /=-1 IF NUM BLKS TRANSF L.T. REQ
446 /SETUP STARTING BLK NUMBER
450 TAD I ULSADR /GET ABS STBLK
452 TAD I IOHAN /ADD REL STBLK
454 TAD I IOHAN /UPDATE REL STBLK
455 TAD TMP0 /BY NUM BLKS OF TRANSF
457 \f/CALL TO THE HANDLER
458 P6203, CIF CDF 0 /IOHAN & OS8 DEV HAN IN FLD 0
469 JMP HNDERR /ERROR RETURN OF CALL
481 HNDERR, JMS I [RTNOS8
483 \f/INQIRE- DETERMINE IF DESIRED DEV HANDLER IS IN CORE
484 / & IF SO,GET ITS ENTRY PT
490 DCA IOENT /ADR OF ENRTY PT IN RESID. TBL
491 TAD I IOENT /GET ENTRY PT IF ONE
494 SZA CLA /DEV HAN WAS IN CORE?
498 TAD UNITSV /GET DEV NUM BK
522 AND [17 /TO AC B8-B11
527 \fADVOVR, 0 /UPDATE PASS1 PASS2 ARGS
528 ISZ MCNT /MORE MODS IN THIS OVR?
530 JMS NXTOVR /SET ARGS FOR NEXT OVER
531 JMP EOLVL /RTN HERE= END OF LEVEL
532 TAD P2FLG /DOING PASS2 ?
536 TAD BSECTP /IMAGE REL BLK
537 DCA TMP0 /FOR NEXT OVR
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
547 EOLVL, JMS NXTOVR /GET NXT OVR NEW LEVEL
548 JMP SAMOV4 /HERE=END OF ALL LEVELS
552 DCA LNONUM /AND CLEAR THE OVR BITS
554 SMA CLA /DOING PASS2 ?
557 TAD BSECTP /UPDATE BIN SECTION PTR
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
565 DCA I GPTR /TO PROG SECTION
571 TAD [377 /ROUND UP OLD LEVEL
572 AND [7400 /TO A BLOCK BOUNDARY
574 ISZ I BPTR /MIND THE CARRIES!
576 SAMOVR, TAD [3 /ADV PTR TO
580 SAMOV4, ISZ ADVOVR /BUMP RETURN
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
588 TAD I MTBL /MOD IN NXT
590 JMP I NXTOVR /=END OF LEVEL
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
603 TAD (MCTTBL+1 /PTR TO MOD
610 TAD (MODTBL+3 /PTR TO TOP
611 DCA RFPTR1 /OF MOD TBL
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.
632 TAD (BUCKET-1 /PTR TO BUCKET
633 LOP5, DCA TMP1 /PTR TO PREV ENTRY
634 TAD I TMP1 /PTR TO NEXT ENTRY
647 JMP YECCH /SYMBOLS DIFFER
653 SETTYP, TAD I EPTR /GET ESD TYPE
658 JMS I [SETEPT /BUMP EPTR AND SET EPT2
659 TAD I EPTR /GET ESD NUM
667 DCA GTYP /FIELD BITS OF
668 TAD I EPTR /VALUE WORDS
672 \fYECCH, SZL /IS NEW GUY LESS THAN GST ENTRY?
673 JMP HOOKIN /YES HOOK-IN HERE
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.
690 TAD NDX4 /WORD 4 (TYPE)
692 ISZ NDX4 /SET PTR TO NEXT
695 TAD NDX4 /GST IS FULL
696 TAD ENDSYM /END OF GST
699 JMS I [RTNOS8 /SYMBOL TABLE
707 DCA EPT2 /SET PTR TO BOTH WDS OF DBLWD
709 \fGETTYP, 0 /ADV GST PTR
717 TAD I GPTR /END OF GST.
719 ISZ GETTYP /ISZ RETURN.
722 OLINE, 0 /OUTPUT A LINE OF TEXT TO THE SYMBOL MAP
731 JMS I [PCRLF /DOUBLE SPACE AFTERWARDS
735 \f/HERE TO OUTPUT SYMBOL MAP
736 /EACH SYMBOL IN GST IS 7 WORDS LONG
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)
751 / 5=MULTIPLE ENTRY POINT
753 / 7=GENERAL 8-MODE SECTION
754 / 10=FIELD1 8-M0DE SECTION
755 / 11=COMMON PG0 8-MODE SECTION
758 /WD5 B0-B8=PTR TO PARENT SYMBOL (0R 0)
759 / ON PASS1 =TRAP VECTOR DISPLACEMENT
761 / B9-B11=FIELD BITS OF SYMBOL
762 /WD6 ADDR BITS OF SYMBOL
764 /OUTPUT FORMAT OF MAP IS:
766 /SYMBOL VALUE LEVEL OVRNUM TYPE(*)
768 /THE TYPE COLUMN IS EITHER 2 BLANKS OR
770 /ME=MULTIPLE ENTRY POINT
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
784 TAD I (LDRNAM+5 /MAP UNIT
786 JMP NOMAP /YES, NO MAP TO OUTPUT
787 JMS I [IOHAN /FETCH HANDLER
788 TAD I (LDRNAM+5 /ENTER OUTPUT
794 JMP ENTERR /WHOOPS WE HAVE AN ENTER ERROR
798 DCA I (SMAPU /STORE SYMBOL MAP UNIT
799 TAD (SMAPU /SYMMAP ARGS
806 TAD (BUCKET /START AT 1ST
808 TAD (-42 /DO UP UNTIL BUT NOT INCL.
810 AC7775 /INIT PACK ARGS
820 JMS I (OLINE /OUTPUT TITLE AND SUBTITLE
823 TAD GPTR /ANY MORE IN
829 ISZ SWITZ /BEEN HERE BEF?
830 JMP DUNMP /YES ALL DONE
831 CLA CMA /SET FOR JUST
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
845 JMS I (OLINE /PRINT " = HIGHEST LOC USED"
846 JMS I (PROVLY /PRINT OVERLAY TABLE
847 SM600, CLA /** AC NOT 0 ON RETURN**
852 TAD BLKCNT /HAVE WE FILLED
853 TAD [600 /A BLOCK UP COMPLETELY?
857 TAD I (SYLST /AC=LENGTH
859 TAD I (LDRNAM+5 /MAP UNIT
868 JOUSYM, JMS I (OUTSYM
869 TAD I GPTR /NEXT SYM TO DO
871 \fHAFWD, 0 /OUTPUT THE 2 6 BIT ASCII CHARS IN AC
873 TAD TMP3 /LEFT HALF 1ST
882 SIXTO8, 0 /CVRT AC FROM
883 AND [77 /6 TO 8 BIT ASCII
885 TAD [240 /TURN ZEROS TO BLANKS
888 JMS I PPACK /PUT IN BUFF IN PS/8 FORMAT
891 ENTERR, DCA I (DOMAP /CANCEL SYMBOL MAP FROM RTNOS8
892 JMS I [RTNOS8 /AS WE MASY HAVE COME FROM SYMMAP
895 \f/PACK ASCII IN AC INTO OUTPUT BUFF IN
896 /OS/8 3 WORD FORMAT TO 2 12 BIT WORDS
899 ISZ FATAL /3RD WORD ?
906 DCA FATAL /RESET CNTR
913 ISZ BLKCNT /BLOCK FULL ?
926 DCA TMP0 /SAV FOR NXT CALL ON LO
929 TAD I TMP4 /ADD IN OLDY
936 200^1!4000!10 /1 BLK OF FLD 1
937 SBPTR, 7000 /1ST ADDR
941 \fCVRT, 0 /CONVERT AC TO
942 DCA CVRTMP /ASCII NUM
943 TAD TMP5 /-NUM OF DIGITS
945 LOP7, TAD CVRTMP /CVRT LEFT TO
956 JMS I (HAFWD /OUTPUT A PAIR
957 JMP I CVRT /OF SPACES
959 OUTSYM, 0 /DO ONE SYMBOL
960 DCA NDX1 /ADDRESS IN AC ON ENTRY
963 TAD I NDX1 /SYMBOL IS 1ST
969 TAD I NDX1 /FLD OF SYMBOL
971 JMS CVLOVL /CONVERT ADDR, LEVEL, OVERLAY
972 TAD GTYP /NOW DO TYPE
974 TAD (TYTBL-1 /PTR TO TBL OF
975 DCA TMP0 /CHAR PAIRS FOR
977 TAD I TMP0 /TYPE EG EX FOR
980 TAD GTYP /IF ERROR WAS
981 SPA CLA /FOUND DURING PASS2 B0 OF TYPE=1 EG ILLEGAL SUBR CALL. * ON MAP INDICATES
991 DCA TMP5 /DO LEVEL NUM
992 TAD GTYP /ITS B1-B3 OF
996 DCA TMP5 /ITS B4-B7 OF
999 AND (1700 /HI 2 DIGITS
1014 TAD [-4 /NOW DO ADDR OF
1020 \f/PASS 2 OF LOADER - TRANSFORMS BINARIES INTO LOADER IMAGE FILE
1022 PASS2, DCA LNONUM /SET FOR MAIN
1023 JMS I (BLDTV /BUILD TRAP VECTOR
1024 TAD LBCNT /PROCESS LIBR
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
1033 TAD RFPTR1 /LIBR MOD.
1035 ISZ LBCNT /DONE LIBR?
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
1046 TAD I (LIMGU /SAVE UNIT AND BLOCK OF LOADER IMAGE
1047 DCA I NDX0 /FILE IN CD AREA IN CASE WE CHAIN
1049 DCA I NDX0 /TO THE RUN-TIME-SYSTEM
1050 DCA I NDX0 /A PRECAUTION
1061 LDRNAM+1 /CLOSE LOADER IMAGE FILE
1064 JMS I (SYMMAP /PRINT SYMBOL TABLE IF REQUESTED
1067 AND (40 /TEST /G SWITCH
1069 JMP I [7605 /NOT ON - RETURN TO OS8
1078 DCA CHCODE /CHANGE LOOKUP TO CHAIN
1081 NORTS, DCA I (LDRNAM+5 /KILL SECOND STORAGE MAP
1084 RTSNAM, 0622;2423;0000;2326 /FRTS.SV
1086 JMS I (RDRLES /GET MODULE ESD TABLE
1089 LOP12, JMS I .+4 /GET NXTESD
1094 CLA CMA /IGNORE ESD IF
1095 TAD ETYP /ITS AN ENTRY
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
1109 CLA CMA /SET CNT TO -1
1110 DCA BLKCNT /TO KICK OFF 1ST TXT READ
1112 DCA I (TXTBLK-3 /RALF MOD
1114 JMS I (TXTSCN /RELOCATE
1117 \fBLDTV, 0 /BUILD UP
1118 TAD TRPCNT /TRAP VECTOR
1122 JMS I [LOOK /ADDR OF
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
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
1153 JMS I [PUTBIN /SWAP ADDR
1154 CLL CML CLA RAR /CLR B0
1155 TAD I GPTR /OF TYPE WD
1161 DCA TMP0 /HAVE TO MUSH SOME BITS AROUND:
1162 TAD TMP0 /OVERLAY NUMBER MOVES FROM B4-7 TO B0-3
1164 DCA TMP1 /LEVEL NUMBER MOVES FROM B1-3 TO B6-8
1170 TAD I GPTR /ADD FLD BITS TO MESS
1172 TAD TRPCNT /ADV VECT
1175 TAD I GPTR /TAG HI 9
1176 TAD TRPCNT /OF GST SYM
1177 DCA I GPTR /WD5 WITH TV ENTRY NUMBER
1183 JMP LOP11 /FOR THIS SYM
1186 JMS I [SETEPT /SET PTR TO CURRENT SECTION
1193 DCA TMP2 /DO A DOUBLE PRECISION SUBTRACT
1199 JMP BADORG /OUT OF RANGE
1201 TAD TMP2 /COMBINE AND SHIFT RIGHT 8
1208 TAD I EPT2 /ADD TO RELATIVE BLOCK OF SECTION
1215 JMP BADORG /ORIGIN OUT OF RANGE
1217 JMS I (NEWBB /GET BUFFER USING NEWBLK AND NEWLEN
1221 DCA BLKSIZ /FORM POINTER INTO PROPER BUFFER
1223 BADORG, JMS I [RTNOS8
1224 ORGMSG /ORIGIN OUT OF CURRENT FILE LIMITS
1227 \fPROVLY, 0 /ROUTINE TO PRINT OVERLAY INFO IN SYMBOL MAP
1233 PROVLP, TAD I NDX1 /GET ENTRY
1234 SPA /TEBLE ENDS WITH -1
1239 JMS I (CVLOVL /PRINT LEVEL AND OVERLAY
1241 JMS I (PR15 /PRINT 15-BIT LENGTH
1246 TAD RFPTR1 /PTR TO RALF
1248 DCA RLARG+2 /STRT AT BLK 0
1250 JMS I [IOHAN /3 BLKS INTO
1257 \f/STARTING WITH THE LATEST,
1258 /WRITE OUT ALL CORE RESIDENT
1269 JMS I (LDRIO /WRITE IT
1276 NOTREL, JMS I [RTNOS8
1279 RELMSG, TEXT /BAD INPUT FILE/
1281 RTSMSG, TEXT /NO FRTS/
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
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
1301 JMS I [PUTBIN /DON'T FORGET WORD 2
1305 JMS I (GETTXT /CTRL WORD
1309 DCA REFPTR /SOMETIMES
1310 TAD REFPTR /ITS AN ESD.
1311 TAD (ESDPG /WHEN IT IS,
1314 DCA GPTR /CORRESPONDING GST SYM (WORD 4)
1315 JMS I [SETBGX /AND BPTR POINTS TO THE VALUE
1322 DCA GETCTL /USE IT TO BUMP RETURN ADDRESS
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
1332 /EACH ENTRY HAS FOUR WORDS - THEY CONTAIN:
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
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").
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
1351 DCA NDX5 /SAVE CURRENT "MOST RECENT" BUFFER
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
1363 DCA CURBLK /IN THIS BUFF
1364 TAD I CURBLK /HAVE WE SCANNED
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
1377 JMS I (LDRIO /YES WRITE IT
1378 CLL /SET FLAG THAT BUFFER WAS WRITTEN
1382 TAD NEWLEN /STORE NEW BLOCK # AND LENGTH
1383 DCA I CURBLK /IN BUFFER CONTROL WORD
1384 RAR /GET "VIRGIN FLAG"
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
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
1397 DCA I BPPREV /BREAK NEW BUFFER OUT OF THE CHAIN
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.
1411 TAD I OUTFLD /LOAD ADRESS AND FIELD
1417 DCA OUTFLD /DECOMPOSE INTO ADDRESS AND CDF
1422 \f/COME HERE TO STORE 1 WORD
1423 /IN SOME BINARY OUTPUT BUFFER
1427 TAD ORGFLG /N.E. 0 MEANS
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
1433 TAD I OUTINH /SET B0 OF
1436 DCA I OUTINH /SEE SUBR REORG
1437 JMP I PUTBIN /FOR DEFINITION OF C(OUTINH)
1442 ISZ BLKSIZ /BUMP PTR
1446 AND (1777 /CROSSED A
1454 DCA NEWLEN /BUMP BLOCK NUMBER AND REMAINING BLOCKS
1455 JMS NEWBB /SELECT A NEW BUFFER
1457 DCA BLKSIZ /RE-INITIALIZE WORD POINTER
1461 \f/COME HERE TO SCAN AND RELOCATE
1462 /THE TEXT OF AN ENTIRE MODULE
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
1471 DCA TMP0 /GST SYM TYPE
1472 AC7776 /IS RELOCATION
1473 TAD TMP0 /WITH RESPECT
1474 SZA CLA /TO GST EXTERN?
1476 SETTRP, JMS GETTXT /BAD TEXT.
1478 JMS GETTXT /IGNORE RELOCATION AND MAKE AN ERROR TRAP
1482 TAD (JUERR /RTS ERROR
1483 JMS I [PUTBIN /TRAP SUBR
1484 BY2M5, TAD I GPTR /SET ILLEGAL
1487 DCA I GPTR /GST TYPE WD
1488 JMP TXTSCN+1 /DO NEXT
1489 BY2, TAD (-5 /RELOCATE TO
1490 TAD TMP0 /A MULTIPLE
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
1501 SNA /RELOCATE TO MAIN?
1502 JMP RELC /YES, ITS OK
1504 TAD TMP2 /ACROSS LEVELS
1507 TAD LNONUM /=CURRENT MOD
1510 TAD TMP1 /WITHIN LEVL CALL IS LEGAL ONLY
1511 SNA CLA /IF WITHIN OVR ALSO.
1513 \f /** TSTTRP REPLACED BY "SKP CLA" IF /U SPECIFIED
1514 TSTTRP, SMA CLA /NOT OK - IS X LEVL LO TO HI?
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
1523 TAD TRAPV /IN SYMX AS A DOUBLEWORD
1526 JMS I [SETBPT /COMBINE IT WITH TXT PAIR
1527 JMS I (MERGE /I.E. RELOCATE TO TRAP VECT
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
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
1550 REORG, ISZ ORGFLG /SET INHIBIT BIN OUT FLG
1551 JMS I (MERGE /GET NEW ORIGIN
1553 AND (3760 /ORIGIN IS
1555 TAD LNONUM /BINARY SECTION
1557 TAD GPTR /YES - SET INHIBIT/ERROR FLAG
1559 JMS I (NEWORG /NO - SET UP NEW ORIGIN
1563 \fGETTXT, 0 /GET ONE WORD OF TEXT FROM THE BUFFER
1567 JMS I [IOHAN /RALF TEXT
1569 200^4!10 /OR 200^17!20
1575 DCA BLKCNT /WDS-1 IN
1576 RDTCDF, CDF 10 /OR CDF 20
1580 JMP I GETTXT /RETURN
1581 TXTWDS, -2000 /OR -7400
1583 \f/ENTER A SYMBOL INTO GST. PTR TO ESD
1586 JMP I PUTSYM /FOR XPAGE RTN
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
1604 TAD GTYP /RESTR LNK, GET GST TYP-1
1606 TAD (MYSTIC /GET ADDR OF 4 CODES
1609 TAD I TMP1 /GET 4 CODES
1611 CTST, ISZ TMP2 /WHICH CODE ?
1612 JMP SHFT3 /NOT THIS 1
1614 TAD T2J /PICK UP JMP I
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
1632 DCA MTMCNT /SAVE PARAMS FOR ERROR MESSAGE LATER
1634 TAD LNONUM /MULTIPLE SECTION
1637 MULENT, TAD I GPTR /SET TYPE TO
1638 AND (7760 /5 FOR MUL ENT
1640 DCA I GPTR /MUL. SECTION
1643 ISCOM3, TAD (11 /F COMM N FLD1 (RITE9=11)
1644 DCA I GPTR /SET TYP TO F1
1646 ISCOM, JMS I [SETBGX
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
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
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
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
1676 /ESD TYPE 12 IS UNDEFINED
1678 MYSTIC, 5553 /G1 E(11,7,3,1)
1680 2222 /G2 E(11,7,3,1)
1701 JMP I (NOTREL /NOT RALF MODULES - NASTY!
1702 TAD I (2 /CHK FOR DP
1703 SPA CLA /HARDWARE REQUIRED
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
1710 JMS PUTSYM /ENTER IT
1713 MSMSG, TEXT /MULT SECT/
1714 CORMSG, TEXT /OVER CORE/
1715 LIMSG, TEXT /OVER IMAG/
1716 MNMSG, TEXT /NO MAIN/
1718 \f/CONTINUATION OF SUB PUTSYM
1723 SNA /IS IT A REF TO COMMON?
1726 SMA CLA /8 MODE SECN ?
1728 TAD I GPTR /NO CHK FOR
1729 AND [3400 /CROSS LEVEL
1731 DCA TMP0 /COMPARE WITH
1732 TAD LNONUM /CURNT LEVEL
1735 JMP NOMAT /YES DONT CHK FOR TRAP ENTRY
1739 ISZ TRPCNT /YES BUMP TRAP VECTOR COUNTER
1740 AC4000 /SET B0=1, GST SYM WILL GO IN TRAP VECTOR
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
1748 JMP MNSECN /COMMON SECN
1749 JMP PRGSCN /PROGRAM SECN
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
1762 DCA TMP1 /SAVE OLD OVERLAY SIZE
1770 DCA I [OVRSIZ /SET OVLY SIZE = OVLY SIZE + SECTION SIZE
1774 DCA I EPT2 /SET SECTION SIZE = OLD OVERLAY SIZE
1775 TAD GPTR /PUT ADDR 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
1782 \fENTMN2, TAD LNONUM /SEE IF ENTRY
1783 AND [3400 /POINT IS IN
1786 TAD I REFPTR /IS PARENT
1787 JMS I [SETBPT /REFERENCE TO
1789 TAD REFPTR /LOOK FOR
1790 DCA TMP0 /TYPE CODE 3
1794 JMP ENTMN /YES, HANDLE LIKE A MAIN ENTRY POINT
1796 SNA CLA /TO AN 8 SECT?
1797 JMP MNSEC5 /YES HANDLE LIKE MAIN
1801 DCA I EPT2 /SET OVR ENT = OVR ENT + OVR
1804 AND [7 /WATCH HIGH-ORDER BITS
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
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
1824 TAD (2-SYMTBL /GET OFFSET FROM SYMTBL
1828 JMP .-3 /DIVIDE BY REPEATED SUBTRACTION
1829 STA /AC IS NOT NECESSARILY ZERO!
1831 CLL RTL /ROTATE SYMBOL NUMBER INTO AC BITS 0-8
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
1840 \fSTPAS1, DCA I NDX0 /ZERO OUT GST
1841 ISZ STCNT /NDX0 SET UP BY PASS0
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
1849 SNA CLA /LIBRARY SEARCH POSSIBLE?
1850 JMP I (DOCORE /NO - SKIP IT
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
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
1865 NXTENT, TAD NDX1 /ADV TO
1869 JMS I (GETLEN /PREV ONE 1ST
1870 ISZ NUMENT /MORE IN CORE?
1874 JMP LOP4 /YES, NO MATCH ON THIS EXTERN
1875 BY3, JMS RDLBR /GET NEXT
1878 DCA NDX0 /LIBR MATCH
1881 \fLBFLD, CDF 0 /CDF 20 IF GREATER THAN 8K CORE
1890 JMP NXTENT /NO TRY NXT LIBR ENTRY
1891 ISZ TMP0 /ALL MATCH?
1893 JMS I (GETLEN /UPDATE RBLK,
1895 TAD RFPTR1 /ENTER MOD
1897 TAD I (MODTBL /LIBR UNIT
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
1907 JMS I (RDRLES /READ IN ESD
1908 DCA LNONUM /SET FOR MAIN
1909 JMS I (ESDSCN /PROCESS ESD
1915 ISZ MLEFT /MOD TBL FULL?
1916 JMP LOP4 /NO DO SOME MORE
1919 LIBRSW, 0 /NON-ZERO IF LIBRARY SEARCH POSSIBLE
1920 STCNT, SYMTBL-OVLTBL
1926 JMS I [IOHAN /READ SOME
1928 LBARG, 200^5 /OR 200^17!20
1930 LBREC, 0 /REL CAT BLK
1931 TAD LBREC /GET -NUM OF
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
1944 TAD LBARG+1 /1ST ENTRY
1955 \f/END OF PASS 1 - FIT EVERYTHING INTO CORE
1960 TAD (TRPSYM /ENTER TRAP
1961 JMS I [LOOK /VECT. SYM
1963 DCA I GPTR /MAIN SECN
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
1972 LOP3, JMS I [GETTYP /ALL MAIN NON 8 MODE
1975 TAD I GPTR /SECN, 3=COMMON
1978 JMS I (FIT /GO FIT SECN
1981 DCA I NDX7 /TERMINATE OVERLAY LENGTH LIST
1983 DCA I (OVLTBL /STORE ENTRY FOR LEVEL 0
1991 ISZ A1 /(WATCH CARRY!)
1992 DCA A1+1 /DITTO FOR NON-FIELD 0
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
2000 DCA I NDX3 /USER MAIN IS LEVEL 0
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
2006 TAD A1+1 /LENGTH HAS TO BE COMPUTED FROM
2012 DCA I NDX3 /USER MAIN FIRST THING IN LDR IMAGE
2016 \fLOP6, TAD BLKCNT /UPDATE LENGTH
2017 DCA BLKCNT /OF LDR IMAGE
2018 ISZ I (LEVSYM+2 /NEXT LEVEL
2022 JMP DUNLVL /DONE ALL OVR LEVELS
2023 JMS I (FIT /FIT LEVEL
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
2033 TAD I GPTR /AND ADDRESS BITS
2034 DCA I NDX3 /PUT-EM OUT
2035 TAD BLKCNT /STARTING BLOCK OF LEVEL
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
2044 \fDUNLVL, CLA /AC NOT ZERO!
2045 TAD SYMTM3 /NOW RESOLVE
2046 DCA GPTR /ALL OTHER SYMBOLS
2048 JMP I (ALLDN1 /ALL DONE
2049 JMS I [SETBGX /SET BPTR TO GST WD5
2053 JMP LP1 /NO RELATIVE SYMBOL - DON'T RELOCATE
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
2067 AND [7 /THROW AWAY THE OLD RELATIVE SYMBOL #
2069 DCA I BPTR /AND PERFORM THE RELOCATION
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
2082 DCA MBGCNT /RESTORE ERROR PARAMETERS
2086 NOMSCT, TAD (SASYM /GET STRT
2087 JMS I [LOOK /ADDR MAIN
2092 TAD SVMAIN /IF .NE. SET TO
2094 TAD GPTR /FOR PND MAIN
2095 DCA SVMAIN /FOR /S THINGS IN SYMMAP RT.
2098 DCA I (PRMAIN /ENABLING PRINTING OF #MAIN ON ERRORS
2101 TAD I GPTR /MAKE SWAPPER CONTROL WORD
2102 DCA I (QRTSWP /LEVEL 0, OVERLAY 0 IS MAIN
2104 TAD I GPTR /12 BIT ADDR
2106 TAD DPFLG /N.E. MEANS LDR IMAGE NEEDS DP HRDWRE
2107 DCA I (QDPFLG /RETAIN INFO IN LHDR FOR PASS3
2109 TAD I (LDRNAM /IMAGE
2110 JMS I [IOHAN /HANDLER
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)
2118 TAD I (LDRNAM /OPEN LDR
2125 TAD BLKCNT /SEE IF LDR
2128 SZL SNA CLA /TENTATIVE FILE
2130 JMS I [RTNOS8 /OUTPUT FILE
2132 TAD BLKCNT /CLOSE LDR
2133 DCA I (LDCLEN /IMAGE FILE
2143 DCA I NDX0 /STRT BLK
2146 LIMGU /WRITE OUT LOADER IMAGE HEADER BLOCK
2149 0 /IN RELATIVE BLOCK 0 OF LOADER IMAGE FILE
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
2158 /(MAIN, LEVL1,....,LEVL7)
2159 /TABLE STARTS AT LHDR AND
2160 /IS USED BY SUBR NEWORG
2164 TAD (QUSRLV /NOW DO THE
2174 DCA I NDX1 /FIRST COMES 15-BIT ADDRESS
2179 DCA I NDX1 /THEN RELATIVE BLOCK NUMBER
2181 DCA I NDX1 /THEN LENGTH
2182 ISZ NDX0 /SKIP OVER NEXT OVERLAY COUNT
2185 TAD (LHDR /PTR TO TOP
2186 DCA BSECTP /OF TABLE
2188 DCA P2FLG /FOR SUBR ADVOVR
2192 \fDO8S, 0 /DO 8 SECTIONS
2193 TAD CZFLG /ANY 8 MODE
2195 JMS FIT8S /GO FIT IT
2196 TAD F1FLG /ANY 8 MODE
2201 TAD S8FLG /ANY GEN 8 MODE
2203 JMP I DO8S /NO ALL DONE
2204 TAD [7770 /THIS WILL
2205 DCA OVRFLO /INHIBIT FLD1 OVER FLOW ERR
2210 /FIT 8 MODE SECTIONS
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
2221 SZA CLA /8 SECTION ?
2225 TAD (177 /ROUND SECTION LENGTH
2226 AND (7600 /TO A PAGE BOUNDARY
2228 JMS I (FIT /NOW FIT IT
2229 TAD OVRFLO /SEE IF FLD1
2230 TAD A1 /IS OVR FLOWED ****
2232 JMP F8SECT /DO ANOTHER
2233 TOOBIG, JMS I [RTNOS8
2234 CORMSG /PRINT ERROR & GO AWAY
2236 \fFIT, 0 /FIT SECTION
2237 JMS I [SETBGX /SET BPTR TO POINT TO GST WD5
2243 RTL /GET LENGTH OF SEGMENT IN BLOCKS
2252 DCA A1+1 /SET BPTR = A1
2253 RAL /WHILE SETTING A1 = A1 + BPTR
2259 SZA CLA /IF NEW ADDRESS IS > 77777,
2260 JMP TOOBIG /THE THING WILL NEVER FIT
2266 \fLEVLUP, 0 /LEVEL = MAX (LEVEL, OVRSIZ); OVRSIZ=0
2269 DCA I NDX7 /RECORD THE SIZE OF THIS OVERLAY
2270 TAD I [OVRSIZ+1 /FOR THE SYMBOL MAP PRINTOUT
2281 MAXCOM, 0 /BPTR = MAX (EPTR, BPTR)
2285 SZA CLA /CHECK HIGH-ORDER WORDS FIRST
2286 JMP .+4 /THEY DIFFER
2289 TAD I BPT2 /USE LOW ORDER WORDS IF HIGH ORDERS ARE =
2290 SZL CLA /IS EPTR > BPTR?
2291 JMP I MAXCOM /NO - EXIT
2295 DCA I BPT2 /YES - BPTR=EPTR
2299 TAD I NDX1 /LEN OF ENTRY
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
2307 TAD TMP0 /NEW MODULE
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
2325 START, ISZ XSTRT /IF CHAINED TO
2328 AND I (7643 /AND OUT THE /L SWITCH
2332 \f/THIS SUBROUTINE SHOULD RESIDE IN THE
2333 /FIELD 0 I/O BUFFER SINCE IT
2335 /SUBROUTINE TO DETERMINE CORE SIZE
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.
2341 /NOTE--THIS ROUTN MUST BE PLACED IN FLD 0
2355 CORELP, CDF 0 /NEEDED FOR PDP-8L
2356 TAD TRYFLD /GET FLD TO TST
2359 AND COR70 /MASK USEFUL BITS
2361 DCA .+1 /SET UP CDF TO FLD
2363 TAD I CORLOC /SAV CURRENT CONTENTS
2366 TAD .-2 /7000 IS A GOOD PATTERN
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
2374 JMP .+5 /NON EXISTENT FLD EXIT
2375 TAD COR70-6 /RESTORE CONTENS DESTROYED
2377 ISZ TRYFLD /TRY NXT HIGHER FLD
2383 CORLOC, COR70+2 /ADR TO TST IN EACH FLD
2384 1400 /7000+7400+1400=0
2385 TRYFLD, 1 /CURRENT FLD TO TST
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
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
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)
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
2431 TAD (40 /STICK A SPACE AFTER IT
2432 CIF 10 /CHANGE INSTRUCTION FIELD TO 1
2434 \fMONTHS, 5512;0116 /-JAN
2448 /PAGE 0 FLD1 TAGS FOR PASS0
2449 /(PASS 0 LIVES WITH THE USR RESIDENT)
2459 /START OF GLOBAL SYMBOL TABLE
2460 /BUCKET COMES FIRST, INTERNAL
2461 /SYMBOLS AND FIELD 1 CONSTANTS ARE
2462 /HERE ALSO. GST RUNS FROM
2465 BUCKET, AAAAAA;0;0;0;EEEEEE;0 /A,B,C,D,E,F
2470 0;0;0;0;0 /UNUSED BUCKETS MUST BE 0
2471 0 /SPACE (FOR BLANK COMMON)
2473 POUND /POUND SIGN FOR INTERNAL SYMBOLS, ALL ARE OF THE FORM (POUND XXXXX)
2474 \fTRPSYM, TEXT '#YTRAP'
2476 LEVSYM, TEXT '#YLVL0'
2478 SWPSYM, TEXT '#SWAP'
2481 0;0 /STARTING ADDRESS
2483 /TITLE LINE FOR LOADER MAP
2485 TLINE, TEXT 'LOADER V'
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 "
2498 \f/SYSTEM SYMBOL TABLE
2615 SYMTBL, 0 /START OF GST
2616 \f/PASS0- THIS IS THE BEGINNING OF PASS0
2618 PASS0, JMP .+4 /NORMAL ENTRY PT
2619 DCA CDSW /CHAINED TO ENTRY PT - NO DECODE 1ST TIME
2623 DCA LVLCNT /SET LEVEL AND OVERLAY COUNTERS
2626 JMS I (CORE /DETERMINE CORE SIZE
2632 LB0BUF-1 /MOVE LOWER FIELD 0 TO A SAFE PLACE
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
2643 CLL RTR /ROTATE AND MASK TO GET THE DAY
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
2658 NODATE, TAD (-NUMMOD
2661 DCA NMCTS /INITIALIZE MODULE CT TBL PTR
2663 DCA PTRULS /INITIALIZE MODULE TBL PTR
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
2677 JMP .-3 /SUBTRACT 10 IN A LOOP
2678 TAD (5772 /AS GOOD A NUMBER AS ANY
2683 RTL /GET THE TENS DIGIT INTO POSITION
2688 \f/DECODE COMMAND DECODER INPUT
2692 2214 /.RL DEFAULT EXTENSION
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
2704 AND (0017 /MUST BE AN "MS" DEV
2710 SM1, TAD (DEVERR /NO,ERR
2716 DCA I P7604 /INTO EXTENSION IF NONE SPECIFIED
2717 JMS I (CORMOV /MOVE LOADER IMAGE FILE NAME
2723 SM, TAD I (7605 /CHK FOR SYM MAP FILE
2730 RAL /LOOK AT "READ ONLY" BIT IN DCB
2732 JMP SM1 /ERROR - NO GOOD FOR OUTPUT
2735 TAD (1423 /.LS DEFAULT MAP EXTENSION
2737 JMS I (CORMOV /MOVE SYMMAP FILE NAME INTO FIELD 0
2743 \f/COLLECT INPUT FILES
2747 SZL CLA / IS /L SWITCH ON?
2748 JMP LIBRAR /YES - THIS IS A LIBRARY FILE
2751 JMP FINLIN /NO MORE INPUT FILES
2756 DCA I PTRULS /STORE UNIT NUMBER
2764 DCA I PTRULS /STORE LENGTH
2767 DCA I PTRULS /STORE STARTING BLOCK NUMBER
2769 JMP FILELP /CONTINUE
2771 FINLIN, JMS I (CORDSW /CHECK C AND O SWITCHES
2774 SZA CLA /IF THE /G SWITCH IS ON
2775 JMP I (EOPAS0 /ITS THE END
2777 SPA CLA /IF AN ALTMODE TERMINATED THE LINE,
2778 JMP I (EOPAS0 /DITTO
2781 SZA CLA /ARE WE STILL IN THE MAIN SECTION?
2782 JMS I (UPDMOD /NO - UPDATE OVERLAY & MODULE COUNTS
2784 \fLIBRAR, TAD I PTRIO
2786 DCA I (MODTBL /STORE LIBRARY PARAMETERS
2787 TAD I PTRIO /NEGLECTING LENGTH, WHICH WILL
2788 DCA I (MODTBL+2 /BE FILLED IN LATER
2791 JMP FINLIN /ONLY ONE FILE ALLOWED ON THE LINE
2793 JMP SM1+1 /OTHERWISE ITS MIXED INPUT
2795 \f/UPDMOD- UPDATE MODULE COUNT TBL
2799 TAD MODCNT /UPDATE -NUM OF
2800 TAD I (MCTTBL /UNUSED MODULES
2803 JMP MAXRLF /MAX NUMBER EXCEEDED
2804 ISZ OVRCNT /BUMP OVERLAY NUMBER
2806 JMP MAXOVL /MORE THAN 16 OVERLAYS IN A LEVEL
2807 TAD MODCNT /UPDATE +NUM OF
2808 TAD I NMCTS /MODULES IN LAST LEVEL
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
2817 /CORDSW- LOOK FOR SWS C AND O
2822 SNA CLA /CHECK FOR /U SWITCH
2825 TAD SKPCLA /INHIBIT LEVEL CHECKING
2828 CHKCSW, TAD I (OS8SWS
2840 ISZ NMCTS /ADV PTR FOR NXT GUY
2841 DCA I NMCTS /CLR FOR NXT LEVEL MOD CNT
2844 ISZ LVLCNT /BUMP LEVEL COUNTER
2847 JMP MAXRLF+1 /TOO MANY LEVELS
2848 \fMAXRLF, TAD (MXRERR
2855 /ERORR- PRINTS OUT ERROR MESSAGES OF A
2856 / BUFR LOCATED IN FLD1
2857 / ENTER WITN ADR OF BUFR IN AC
2864 LB0BUF-1 /MOVE LOWER FIELD 0 BACK
2865 CDF 0 /SO WE CAN USE THE MESSAGE HANDLER
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/
2879 \f/PASS1, PASS2 INITIALIZATION
2881 EOPAS0, JMS I (UPDMOD /BUMP COUNTS FOR LAST LINE OF INPUT
2883 DCA I NMCTS /PUT IN A DOUBLE ZERO AT THE END
2888 0-1 /MOVE LOWER FIELD 0 BACK INTO PLACE
2891 SZA CLA /USER-SPECIFIED LIBRARY?
2898 JMP NOLIB /FORLIB.RL NOT FOUND
2899 TAD .-3 /GET STARTING BLOCK
2902 DCA I (MODTBL /STORE UNIT AND BLOCK #
2904 DCA I (MODTBL+1 /JUST TO BE CAREFUL
2906 JMS I (IOHAN /READ BLOCK 0 OF THE LIBRARY CATALOG
2913 SNA CLA /IS IT AN HONEST - TO - GOD LIBRARY?
2915 NOLIB, DCA I (MODTBL
2917 DCA I (RALFBF+3 /ZERO COUNT WORD IN BUFFER
2919 DCA I (MODTBL+1 /STORE LENGTH OF CATALOGUE
2927 \f/PASS1 INITIALIZATION CONTINUED
2929 TAD I (MCTTBL /UNUSED
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
2938 SZA CLA /END OF LEVEL?
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
2949 TAD TMP2 /CHK FOR MAX
2950 SZA CLA /NUM OF RALFS 0=MOD TBL IS FULL
2951 TAD I (MODTBL /CHK FOR NO
2953 DCA I (LIBRSW /LIBRARY AND SET SWITCH ACCORDINGLY
2955 DCA I (MLEFT /OF RALF MODS
2956 TAD (SYMTBL-1 /PTR TO TOP
2959 AND (7377 /KILL "BATCH PROTECTED" FLAG
2962 TAD MXFLD /GREATER THAN 12K OF CORE
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)
2971 LS16K, TAD (7700 /USR IS NOT
2975 LIBRY, 0617;2214;1102;2214 /FORLIB.RL
2977 \f/THIS IS THE INITIAL BINARY BUFFER TABLE
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
2994 HLT /DISPATCH ON NUMBER OF FIELDS
3000 NOP /NOT SET UP TO USE MORE THAN 24K
3004 BUFTAB-1 /MOVE THE BINARY BUFFER TABLE
3006 LDBUFS-1 /INTO A SAFE PLACE
3009 TAD LVLCNT /SET -NUM OF
3013 TAD (-5 /NUM OF LIBR
3014 DCA TMP2 /BLKS FOR 8K
3017 SNA CLA /GREATER THAN 8K CORE?
3018 JMP TO8K /NO SET LIBR ARGS
3020 TAD (200^12!20 /12 BLKS FLD2
3028 TO8K, TAD TMP2 /WILL LIBR
3030 SMA SZA CLA /RESIDENT?
3035 TAD (ESDPG-1 /ENTER DEFAULT
3036 DCA NDX0 /VALUES FOR
3037 TAD (-200 /ESD REF PAGE
3039 TAD (SYMTBL+5 /PROBLEMS WITH
3044 DCA I (LHDR /STORE LOADER IMAGE CODE IN HEADER
3046 DCA I (QVERNO /STORE LOADER VERSION NUMBER
3050 \f/CORMOV- A CORE MOVE FOR A CHUNK OF CORE IN
3051 / ANY FLD TO ANY FLD.
3054 / CDF Z1 /Z1=FROM FLD
3055 / ADDR1 /ADDR OF (1ST LOC-1)
3057 / ADDR2 /ADDR OF (1ST LOC-1)
3058 / -N /-OCT NUM OF WDS TO MOV