1 /OS8 FORTRAN II RELOCATING LOADER V4
14 /COPYRIGHT (C) 1973, 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.
40 \f/LOADER.07 DECEMBER 5, 1973
43 /CHANGES MADE FOR V4 J.K. 1975
45 / .VERSION NUMBER PRINTED ON MAP
46 / .BIT ZERO OF 17645 IS USED INSTEAD OF THE WHOLE
47 / WORD TO INDICATE THAT THE LOADER WAS CHAINED
49 / .CORE ROUTINE STANDARIZED
50 / .CHECK FOR BATCH CORRECTED
55 VERSION=6400 /PRINTS ON MAP
69 OLDT9= 7 /LOCATION OF HANDLER ENTRY OF DEVICE
70 /WITH DIRECTORY IN CORE
94 DFSAVE, 0 /RESTORE CALLING FIELD
95 JMP I CDZSKP /AND EXIT
97 SAVEDF, 0 /COMMON SAVE-FIELD PROCESSOR FOR FORTRAN I/O
98 DCA CDZSKP /CALLING ADDRESS
101 DCA DFSAVE /CALLING FIELD
105 \f/RUN-TIME SYSTEM PAGE 0 - PROPAGATED TROUGH ALL FIELDS
110 / COMMON SUBROUTINE CALL LINKAGE ROUTINE
113 K6201, CDF BNK /SET DATA FIELD TO THIS BANK
114 K6202, CIF 00 /SET INSTRUCTION FIELD TO ZERO
115 JMP I MLINKP /EXIT TO MASTER LINKAGE ROUTINE
118 / COMMON SUBROUTINE RETURN LINKAGE ROUTINE
121 CDF BNK /SET DATA FIELD TO THIS BANK
122 CIF 00 /SET INSTRUCTION FIELD TO ZERO
123 JMP I MRTNP /EXIT TO MASTER RETURN ROUTINE
126 / CHANGE DATA FIELD TO CURRENT AND SKIP
129 ISZ CDFSKP /INDEX ADDRESS FOR SKIPPING
130 CDF BNK /CHANGE DATA FIELD TO CURRENT BANK
133 / CHANGE DATA FIELD TO ZERO AND SKIP
136 ISZ CDZSKP /INDEX RETURN ADDRESS FOR SKIPPING
137 CDF 10 /CHANGE DATA FIELD TO ZERO
140 / OFF BANK INDIRECT SUBROUTINE
143 CDF BNK /SET DATA FIELD TO THIS BANK
144 CIF 00 /SET INSTRUCTION FIELD TO ZERO
145 JMP I MOBIP /EXIT TO MASTER OFF BANK INDIRECT SUBROUTINE
148 / OFF PAGE INDIRECT SUBROUTINE
151 CDF BNK /SET DATA FIELD TO THIS BANK
152 CIF 00 /SET INSTRUCTION FIELD TO BANK 0
153 JMP I MOPIP /EXIT TO MASTER OFF PAGE INDIRECT SUBROUTINE
156 / ROUTINE TO HANDLE DUMMY ARGUMENTS
159 CDF BNK /SET DATA FIELD TO THIS BANK
160 CIF 00 /SET INSTRUCTION FIELD TO BANK 0
161 JMP I MDUMP /EXIT TO MASTER DUMMY ARGUMENT ROUTINE
164 / PAGE 0 CELLS FOR FORTRAN EXECUTION TIME I/O
165 / CELLS SET UP BY LINKING LOADER - CANNOT GO PAST 77
167 INHNDL, 0 /PAGE FOR INPUT HANDLER IF /I SWITCH WAS ON
168 OUHNDL, 0 /PAGE FOR OUTPUT HANDLER IF /O SWITCH WAS ON
169 ELENGT, 0 /"DESIRED LENGTH" FOR FORTRAN OUTPUT FILES - USUALLY 0
172 /OTHER PAGE 0 LOCATIONS
176 FICHCT, 0 /MUST BE INIT. TO -1 AT LOOKUP
177 FINTMP, 0 /MUST BE INIT. TO 10 AT LOOKUP
178 OHNDLR, 0 /SET BY FENTER - CLEARED BY FCLOSE
179 IHNDLR, 0 /SET BY FLUKUP - NEVER CLEARED
183 LSTART, JMP I (LDRZZ1
211 TAD TEMP+1 /GET BLOCK NUMBER WHICH SABR PLACED HERE
216 DCA I (MPARAM /REMOVE /L SWITCH FROM SABR INPUT
222 FORTRL /THE FILE "FORTRL.TM" IF IT EXISTS
224 NOP /IT DIDN'T EXIST - BIG DEAL
231 12 /GET DEVICE NUMBER WITHOUT HANDLER
235 JMP LWOWIE /WHAT - NO TELETYPE???
237 CLA IAC /DEVICE "SYS"
241 0 /USELESS LENGTH WORD
247 DCA I (TTYNO /STORE AWAY TTY DEVICE NUMBER
249 CORO, TAD CORSIZ /GET FLD OF TEST
253 TAD COREX /MASK USEFUL BITS
256 TAD I CORLOC /SAVE CURRENT CONTENTS
262 TAD I CORLOC /TRY TO READ BACK
267 JMP COREX /NON-EXISTENT FLD EXIT
269 DCA I CORLOC /RESTORE LOC
276 DCA I (WROVLY /POSTPONE SPREADING FIELD ZERO RESIDENT
277 TAD (TTYOUT / THRU FIELDS UNTIL /I,/O AND /H ARE TESTED
291 \f/FULL LINKAGE ROUTINES FOR RUN-TIME SYSTEM
294 K77A, 0077 /MUST BE FIRST LOC ON PAGE
296 / MASTER OFF PAGE INDIRECT ROUTINE
298 MOPI, DCA AC /SAVE AC
299 TAD I OPIP /PICK UP ADDRESS OF PARAMETER
301 TAD I DUMSUB /ACTUAL PARAMETER
303 TAD I 7 /PICK UP FINAL DATA
304 DCA I K7 /TO LOCATION 7 IN FROM BANK
306 ATVX, TAD K6202 /MAKE A CIF FROM INSTRUCTION
307 DCA ATV /SAVE IN THIS SEQUENCE
310 / MASTER OFF BANK INDIRECT ROUTINE
312 MOBI, DCA AC /SAVE AC
313 TAD I OBIP /ADDRESS OF PARAMETER
315 TAD I DUMSUB /ACTUAL COMMON ADDRESS
318 TAD K6201 /MAKE A CDF FROM INSTRUCTION
319 DCA .+3 /PLACE IN THIS SEQUANCE
320 CDF 10 /CHANGE DATA FIELD TO COMMON
322 NOP /BECOMES CDF AND CIF FROM INSTRUCTION
323 DCA I K7 /TO LOCATION 7 IN FROM BANK
327 \f/ MASTER INDIRECT DUMMY ARGUMENT SUBROUTINE
329 MDUM, DCA AC /SAVE AC
330 TAD I DUMP /PICK UP ADDRESS OF PAR
332 TAD I DUMSUB /PICK UP POINTER TO 2 WORD VECTOR
333 DCA DUMTEM /TO A TEMPORARY
334 TAD I DUMTEM /FIELD DATA IS IN AS A CDF
335 DCA ABCRT /TO THIS SEQUANCE
337 TAD K6202 /MAKE A CIF INSTRUCTION
338 DCA ATV /TO THIS SEQUANCE FOR EXIT
339 ISZ DUMTEM /POINT TO LOCATION IN FIELD
340 TAD I DUMTEM /ACTUAL LOCATION IN UNKNOWN FIELD
341 DCA I K7 /TO FROM FIELD LOCATION 7
342 ABCRT, NOP /BECOMES CDF UNKNOWN
343 ISZ DUMSUB /BUMP RETURN ADDRESS
344 ATV, NOP /BECOMES CIF FROM
353 / MASTER LINKAGE ROUTINE
355 MLINK, DCA AC /SAVE AC
357 TAD K6201 /MAKE A CDF
359 TAD I LINKP /ADDRESS OF CODE WORD
361 TAD DUMTEM /CDF FROM INSTRUCTION
362 DCA I DUMSUB /TO FIRST WORD OF 2 WORD VECTOR
363 ISZ DUMSUB /POINT TO DISPLACEMENT
364 TAD LINK /ADDRESS OF CODE WORD
365 IAC /INCR. TO FIRST ARG
366 DCA I DUMSUB /TO SECOND WORD OF 2 WORD VECTOR
369 / MASTER RETURN ROUTINE
371 MRTN, DCA AC /SAVE AC
372 TAD I RTNP /ADDRESS OF CODE WORD
374 TAD I DUMSUB /FIELD TO RETURN TO AS A CDF INSTRUCTION
392 TAD I LINK /CODE WORD
393 K200A, AND K77A /MASK OUT NUMBER OF ARGUMENTS
394 TAD K200A /+DISPLACEMENT
395 DCA ABCRT /GIVES ADDRESS OF BCRT ENTRY
397 TAD K100A /+DISPLACEMENT
398 DCA ATV /GIVES ADDRESS OF TV DISPLACEMENT
399 CDF CIF 0 /(TABLES IN FIELD 0!)
400 TAD I ABCRT /TO CDF INSTRUCTION
401 DCA RTSCDF /TO FIRST WORD OF 2 WORD VECTOR
402 TAD I ATV /TO BANK DISPLACEMENT
406 DCA DUMSUB /TO SECOND WORD OF 2 WORD VECTOR
413 1 /USER ERROR 1 - PROGRAM NOT LOADED
414 \fFASIGN, 0 /CALLED FROM SABR - DOES ASSIGN AND
415 DCA CDFSKP /EITHER LOOKUP,ENTER OR CLOSE
424 ASDEV, 0;0 /SET UP BY SABR
426 JMP ASERR /ASSIGN FAILURE
427 ZRONAM, DCA FLUNAM /ZERO FILENAME FOR LOOKUP
428 TAD ASDEV+1 /PUT DEVICE NUMBER IN AC
429 JMP I CDFSKP /JUMP TO APPROPRIATE ROUTINE
431 *567 /MUST CROSS PAGE BOUNDARY JUST SO
435 FLUNAM, 0 /REPLACED BY BLOCK NUMBER
436 FLUCNT, 0 /REPLACED BY LENGTH (UNUSED)
437 ASERR, ISZ CDZSKP /SKIP RETURN IF ERROR
439 DCA IHNDLR /SET UP INPUT HANDLER ENTRY AND FLAG
441 FINRXX, DCA FINREC /***** THIS SHOULD BE AT LOC 600! *****
446 JMP FRESET /RESET I/O AND RETURN FROM FASIGN
447 IFNZRO FINRXX-600 <FINERR,_ERROR>
448 \f /GET A CHARACTER ROUTINE.
449 /RETURNS TO .+1 IF ERROR, .+2 IF NORMAL
450 /CHAR IN AC ON OUTPUT
451 /DOES NOT HANDLE END-OF-FILE VERY WELL
455 JMS SAVEDF /SAVE RETURN FIELD AND ADDRESS
456 FNXTCH, ISZ FICHCT /BUMP CHAR COUNT
458 JMS I IHNDLR /IT OVERFLOWED - READ IN A NEW BUFFER
463 SKP /END - OF - FILE ERROR - IGNORE
464 JMP DFSAVE /ERROR RETURN
470 DCA FICHCT /INITIALIZE FOR NEW RECORD
471 FIGET, TAD FINTMP /GET HIGH-ORDER-BIT BUFFER
473 JMP FITHRD /YES - OUTPUT COMBINED HIGH-ORDER BITS
476 TAD I FINPTR /GET A LOC FROM THE BUFFER
479 TAD FINTMP /PUT THE HIGH ORDER BITS ONTO THE HOB BUFFER
484 JMP DFEXIT /RETURN WITH SKIP
485 FITHRD, DCA I FINPTR /FUDGE THIRD CHAR INTO BUFFER
487 JMP FINXX /RESET FINTMP TO 10
489 /RETURNS TO .+1 IF ERR, .+2 IF NORMAL
490 /CALLED WITH CHAR IN AC
493 DCA FOUTMP /SAVE CHAR
495 JMS SAVEDF /SAVE CALLING FIELD AND LOC
497 ISZ FOCHCT /BUMP CHAR COUNT
498 FOJMP, JMP FOUJMP /TAKE A BRANCH OF THE THREE-WAY JUMP
503 JMP DFSAVE /OUTPUT ERROR
506 ISZ FOCCNT /BUMP FILE LENGTH
507 ISZ FOOCNT /ALSO ENTER COUNT
508 JMP FOLOOP /NOW GO PUT THE CHAR INTO THE NEW BUFFER
509 JMP DFSAVE /ENTER COUNT OVERFLOWED - ERROR RETURN
511 FOUJMP, JMP . /THREE-WAY SWITCH
520 TAD I FOPOLD /PUT HIGH ORDER BITS OF CHAR3
521 DCA I FOPOLD /INTO HIGH ORDER BITS OF CHAR 1
526 TAD I FOUPTR /PUT LOW ORDER BITS OF CHAR 3
527 DCA I FOUPTR /INTO HIGH ORDER BITS OF CHAR 2
531 JMP DFEXIT /RETURN NORMALLY
533 DCA FOPOLD /SAVE POINTER TO CHAR 1
536 DCA I FOUPTR /STORE CHAR 1 OR 2
537 DFEXIT, ISZ CDZSKP /INCREMENT RETURN ADDR
538 JMP DFSAVE /AND GO THERE
551 FENTER, TAD ELENGT /ELENGT=0 UNLESS SOME KLUDGE SETS IT UP
552 CIF 10 /FENTER JUMPED TO BY FASIGN
555 FOONAM, 0 /FILE NAME IN LOCS 0-3
557 ISZ CDZSKP /FOR ENTER, ERROR RETURN IS SKIP RETURN
559 DCA FOUREC /INITIALIZE OUTPUT RECORD #
560 JMS FOSETP /SET UP CHARACTER POINTERS
561 DCA FOONAM /SET FOONAM FOR NEXT ENTER
563 JMP STOHND /GO TO COMMON CODE WITH "FCLOSE"
566 FCLOSE, CIF 10 /JUMPED TO BY FASIGN
567 JMS I FI200 /CALL I/O MONITOR
569 FOCNAM, 0 /FILE NAME IN 0-3
570 FOCCNT, 0 /CLOSING LENGTH
571 ISZ CDZSKP /ERROR - BUMP RETURN
573 DCA FOCCNT /INITIALIZE CLOSING COUNT FOR NEXT FILE
576 13 /RESET ALL DEVICE HANDLER ENTRIES
577 0 /BUT RETAIN ANY OPEN OUTPUT FILES
578 JMP DFRSTR /RETURN FROM FASIGN AFTER KICKING MONITOR OUT
583 PROPGT, 0 /CALLED FROM FIELD 1 LOADER WHEN 1ST
584 CDF 10 /CHECKING FOR I/O SWITCHES.
585 DCA I LTOPCOR /-# OF CORE FIELDS IN AC
590 CMA /GET # OF HI CORE FIELD
612 MTEMP+21 /WRITE OUT RUN-TIME ROUTINES
621 CDF CIF 10 /PROPGT IS CALLED FROM FIELD 1 ONLY
675 \fLDRZZ1, CDF 10 /COME HERE IF NOT CHAINED TO
689 FORTRL, FILENAME FORTRL.TM
691 \f *1200 /LINKING LOADER SUBROUTINES FOR /I AND /O OPTIONS
694 JMP INRTRN /ALREADY HAVE A /I
695 JMS TWOPAG /HAS USER SPECIFIED 2-PG. HNDLRS?
702 DCA I (ST1600 /MARK THE INPUT BUFFER IN PAGE 1600
716 JMS TWOPAG /HAS USER SPECIFIED 2 PG. HNDLRS?
723 DCA I (ST1600 /MARK OUTPUT BUFFER IN 1600
736 K1000, 1000 /SET TO 1001 FOR 2 PAGE HANDLERS
737 K2200, 2200 /SET TO 2401 FOR 2 PAGE HANDLERS.
738 K2377, 2377 /SET TO 2577 FOR 2 PAGE HANDLERS.
739 K1577, 1577 /SET TO 1777 FOR 2 PAGE HANDLERS.
740 \f/SUBROUTINE TO CHECK FOR /H SWITCH MEANING USER
741 /WANTS RUN TIME DEVICE INDEPENDENT I/O TO
742 /BE ABLE TO USE 2 PAGE DEVICE HANDLERS
747 AND (20 /IS /H SWITCH SET?
749 JMP I TWOPAG /NO-RETURN (DATA FLD=1)
750 TAD (1001 /YES-RESET HANDLR FETCH TO ACCEPT
751 DCA K1000 /TWO PAGE HANDLERS
752 TAD (2401 /RESET FETCH FOR SECOND HANDLER
755 DCA K2377 /RESET HLA CONSTANT FOR 2 PG HANDLRS
757 DCA K1577 /RESET 2ND HLA CONSTANT FOR 2 PG
759 DCA I (K1600 /RESET BUFR. ADDRESS-SEE *LDRXIT*
762 DCA I (FINBUF /RESET IN AND OUT BUFFER ADDRESSES
763 TAD (1400 /TO MAKE ROOM FOR 2 PG HANDLR
766 JMP I TWOPAG /RETN. DATA FLD=1
794 /FIELD 1 PAGE 0 EQUIVALENCES - FIT INTO USR CRACKS
807 COML=33 /HI COMMON LOC, 0 IF NONE
813 LRSTRT, DCA I (MIFILE
814 LDRZZZ, JMS I (IONULL
820 JMP IOCHEK /GO TEST FOR /I, /O ALD /0-7
835 GETCD, TAD I (MPARAM+3
844 DCA I (LSTFLD /FALL INTO NEXT PAGE
845 \fLKATMP, JMS I (WRPGBF
861 IOCHEK, JMS I (IOTEST
879 AND (4410 /"M","P" AND "U" OPTIONS
887 CML RAL /FORM 0 IF /U, 1 IF /P AND 2 IF /M
909 JMP I (HNDERR /BAD HANDLER
933 CLA CLL CML RTL /CHANGE CDF TO CDF CIF
947 BLDLP, CLA CLL CML RTL
950 JMP BFLD1 /TREAT FIELD 1 (COMMON AREA) DIFFERENTLY
988 SNA /IS THERE ANY COMMON?
992 SNL CLA /IS THERE ANY CODE IN FIELD 1?
994 TAD (110 /SAVE FIELD 1 IN TWO SEGMENTS - PAGE 0 AND
995 DCA I X1 /THE CODE FOLLOWING THE END OF THE COMMON AREA
996 ISZ X4 /(THIS IS TO ENABLE "CHAIN" TO WORK PROPERLY)
1025 \fMAPIO, TAD I ML7600
1027 TAD TTYNO /TELETYPE IS DEFAULT LISTING DEVICE
1029 TAD I ML7604 /PICK UP EXTENSION WORD.
1031 TAD (1520 /NO-SUPPLY '.MP' EXTENSION.
1032 DCA I ML7604 /YES-LEAVE ALONE
1036 TAD (100 /4 SHIFTED LEFT INTO THE "DESIRED LENGTH" POSITION
1077 OJMP, HLT /THREE-WAY JUMP FOR CHAR OUTPUT
1111 \f/CLOSE OUTPUT FILE
1136 TTYNO, 0 /SET TO TTY DEVICE NUMBER BY INITIALIZATION
1140 ML7604, 7604 /POINTER TO FILE EXT. WORD
1148 JMS I (SETRCN /SET UP HLA AND RCON
1165 TAD XX7600 /PARITY TTY HACK
1171 JMP I (MGET /17667=07605
1190 \fIJMP, HLT /THREE-WAY JUMP FOR CHAR INPUT
1235 DIRDEV, TAD I HLAPTR
1244 LOADOK, JMS I (WRPGBF
1258 \f/ 4600-5177 USED FOR LOADER MAP OUTPUT BUFFER
1259 / 5200-5577 USED FOR LIBRARY DIRECTORY BUFFER
1263 /** CAN ONLY USE FIRST HALF OF THIS PAGE - 2ND HALF IS PART OF MST
1264 /** NO LITERALS IN THIS PAGE!
1271 LBSRCH, 0 /LIBRARY SEARCH ROUTINE
1272 DCA LBREC /SAVE START BLK OF LIBRARY
1274 JMS I DEVHND /READ LIBRARY DIRECTORY
1285 DCA X1 /INITIALIZE FOR SEARCH
1286 LBRYLP, JMS I LSETS1 /GET NEXT DIRECTORY ENTRY
1289 JMP I LBSRCH /END OF DIRECTORY
1292 JMS I LSEARCH /IS IT IN SYMTAB?
1300 SZA CLA /IS SYMBOL ALREADY DEFINED?
1302 LBLDLP, TAD I LBFPTR /GET MODULE TO LOAD
1304 JMP LBRYLP-2 /NO MORE MODULES TO LOAD
1312 JMS I LLOAD /LOAD LIBRARY MODULE
1314 JMP LBLDLP /GET NEXT MODULE
1330 IFZERO .-5700&4000 <LBRERR, _ERROR>
1331 \f/MAIN LOADING CODE
1332 /MODIFIED VERSION OF
1333 /PAPER-TAPE LINKING LOADER
1339 ORGT= 100 /LOCAL SYMBOL TABLE NOW IN FIELD 0
1340 MST= 6177 /MAIN SYMBOL TABLE
1344 /START OF PROGRAM - INITIALIZATION
1347 TAD K7600 /SET COUNTER FOR 200
1349 TAD BCRTA /POINTER TO BANK TABLE
1352 DCA I X3 /CLEAR BANK TABLE & TV TABLE
1361 DCA I X3 /BANK0 HIGHEST LOADED ADDR. =777
1362 ISZ NSUB /NSUB INCREMENTS TO ZERO
1364 DCA COML /INIT. OLD COMMON AT 0000
1366 \f/REENTRY FOR NEXT ROUTINE TO BE LOADED
1368 MORE, DCA LMTC /CLR LOCAL SYMBOL COUNT
1369 DCA CSUM /CLR CHECKSUM
1370 TAD MORE1A /SET FOR RETURN TO MORE1 IF LEADER
1373 TAD RC10A /RESET EOF TO WATCH FOR TRAILER
1375 TAD CODE /CK FOR HIGH COMMON
1378 JMP I ER5P /NOT THERE
1381 CLL CML /IF NO COMMON EXISTS, OR
1382 TAD WORD /IF NEW COMMON .LE. OLD IT'S
1383 SNL SZA CLA /OK, ELSE ERROR
1387 TAD WORD /IF NO PREVIOUS COMMON AND IF
1388 AND K7600 /THIS PROGRAM HAS COMMON ABOVE 177
1389 SNA /THEN SET COMMON LIMIT TO LIMIT OF THIS PROG
1392 TAD K377 /HIGH COMMON MUST BE AT A MULTIPLE OF 400
1394 TAD I HLA1P /IF WE HAVE LOADED
1395 SZA CLA /ANY CODE INTO FIELD 1
1396 JMP I ER3P /IT'S AN ERROR
1397 TAD COML /SET BANK1 HIGHEST LOADED ADDRESS
1399 JMS I (SETRCN /SET UP HLA AND RCON AGAIN JUST IN CASE
1400 GETSW, TAD BANK /BANK NUMBER
1401 TAD TOPCOR /OK FOR NON-EX. MEM.
1408 TAD BASE /LOCATE CORRECT FUNCTION
1409 TAD CODE /IN TRANSFER TABLE
1411 CODE, 0 /TRANSFER TO APPROPRIATE ADDRESS
1412 \f/READ 12-BIT COMPUTER WORD & 4-BIT RELOCATION CODE
1413 /FROM 2 INPUT CHARACTERS
1416 JMS I HSRPA /FIRST FRAME
1418 TAD WORD /EXTRACT RELOC. CODE
1423 TAD CODE /CK FOR LEADER
1427 TAD WORD /ADD TO CHECKSUM
1441 AND K7400 /ISOLATE HI 4 BITS
1442 DCA WORD /FROM 1ST CHAR
1465 \f/RELOCATION CODE TRANSFER TABLE
1467 TRTAB, RC0 /LOAD AS IS
1468 RC1 /ADD RELOCATION CONSTANT
1472 RC5 /CDF TO CURRENT BANK
1473 RC6 /REPLACE LOCAL # WITH GLOBAL #
1475 RC10A, RC10 /LEADER-TRAILER
1477 ER3P, ER3 /HIGH COMMON
1482 RC17 /EXTERNAL SYMBOL SPECIFICATION
1486 RC4, TAD WORD /NEW ORIGIN
1488 TAD RCON /+ RELOCATION CONSTANT
1489 DCA CUR /= NEW LOADING ADDRESS
1491 JMP I OVERFP /FIELD OVERFLOW
1494 /CHANGE CDF TO CURRENT BANK
1496 RC5, TAD BANK /MOVE BANK TO BITS 6-8
1499 TAD WORD /PICK UP CDF
1502 /REPLACE LOCAL EXTERNAL SYMBOL NUMBER WITH GLOBAL EXT. SYM. NO.
1505 AND K77 /EXTRACT LOCAL NUMBER
1507 TAD B1 /CK IF LOCAL # .LE. LOCAL SYM. COUNT
1512 TAD B1 /ADD LOCAL # TO BASE OF TABLE
1515 TAD WORD /LOAD ARG COUNT
1518 TAD I B1 /+ GLOBAL #
1520 JMP RC1+2 /AT CURRENT LOADING ADDRESS
1521 \f/ADD RELOCATION CONSTANT TO WORD
1527 /LOAD WORD DIRECTLY AS IT IS
1529 RC0, TAD HLA /CK FOR CURRENT ADDRESS TO LOAD
1530 CIA CLL /.GE. HIGHEST ALREADY LOADED
1534 TAD CUR /YES, RESET HIGHEST
1537 TAD CUR /CK FOR ATTEMPT TO LOAD TOP PAGE
1540 JMP I OVERFP /YES, ROUTINE IS TOO BIG
1566 PAGEX2, TAD (MTEMP+11
1603 HLAZ, 0 /HLA GROUP MUST REMAIN IN GIVEN ORDER
1616 HLASZA, SZA CLA /SET TO CLA BY /R AND RESTART
1621 \f/SYMBOL DEFINITION
1624 TAD TVM1 /ADJUSTED BASE OF TRANSFER VECTOR TABLE
1625 TAD SYMNUM /+ NUM. OF SYMBOL IN MST
1627 TAD RCON /LOADING ADDRESS OF THE SYMBOL
1630 DCA I C1 /TO THE TRANS. VEC. TABLE
1631 TAD C1 /GET POINTER INTO TRANSFER VECTOR TABLE
1632 TAD M100A /FORM CORRESPONDING POINTER INTO BANK TABLE
1633 DCA C1 /=PTR. TO BANK TABLE STORAGE
1634 TAD BANK /GET BANK IN BITS 6-8
1637 DCA I C1 /STORE IN BANK TABLE
1639 RC3A, TAD NSUB /CHECK FOR TOO MANY SYMBOLS
1647 RC17, TAD WORD /COUNTER OF SYMBOLS TO COME
1651 ISZ I LMTCP2 /INC. LOCAL SYM. CTR.
1652 TAD ORGTA2 /GET PTR TO STORAGE IN ORIG. TABLE
1655 CMA /SYM. # -1 TO ORIG. TABLE
1673 ER5, IAC /ILLEGAL INPUT FORMAT
1674 ER4, IAC /CHECKSUM ERROR
1675 ER3, IAC /HIGHEST COMMON NOT FIRST
1676 ER2, IAC /PROGRAM TOO LARGE
1677 ER1, IAC /SYMBOL TABLE OVERFLOW
1689 ERBACK, JMP I (CDCALL
1691 JMP I H7600 /RETURN TO MONITOR
1693 /TYPE A CARRIAGE RETURN & LINE FEED
1702 /UNPACK & TYPE 2 6-BIT CHARACTERS
1706 CMA /SET FLAG FOR 1ST CHARACTER
1708 TAD C1 /MOVE LEFT HALF DOWN
1713 TTWO1, TAD C1 /GET RIGHT HALF
1715 TAD M40 /200 OR 300 GROUP?
1717 TAD K100 /300 + 6BIT
1718 TAD K2240 /200 + 6BIT
1720 ISZ C2 /2ND CHARACTER DONE?
1724 /TYPE OCTAL CONTENTS OF AC
1730 TOCT1, TAD C1 /MOVE NEXT DIGIT INTO BITS 9-11
1737 TAD C260 /CONVERT TO ASCII
1740 JMP TOCT1 /MORE TO GO
1767 \f/STORE OR LOOK UP SYMBOL IN SYMBOL TABLE
1771 /READ A SYMBOL FROM INPUT ASCII - 6 FRAMES
1775 TAD S1A /POINTER TO 3 WORD BUFFER
1778 AND K0077 /EXTRACT 6-BIT
1782 DCA D3 /SAVE LEFT HALF
1784 AND K0077 /GET RIGHT HALF
1791 /SEARCH SYMBOL TABLE FOR CURRENT SYMBOL (IN S1-S3)
1794 DCA I SYMNMP /CLR SYMBOL COUNTER
1795 TAD MSTA /SET SYMBOL TABLE PTR
1797 TAD NSUB /SET CTR FOR NUMBER OF SYMBOLS
1798 CMA /+1 (IN CASE NSUB=0)
1801 SRCH1, ISZ I SYMNMP /KEEP COUNT
1802 TAD D4 /TEST TABLE ENTRY
1803 DCA X4 /SYM. TAB. PTR
1807 DCA X3 /PTR TO S1/S3
1808 COMP1, TAD I X4 /COMPARE WORDS
1812 JMP NOMACH /NOT ALIKE
1814 JMP COMP1 /TRY NEXT WORD OF TRIPLET
1817 NOMACH, CLA CLL CMA RTL
1824 /ENTER A SYMBOL IN THE SYMBOL TABLE
1827 TAD NSUB /(NUMBER OF SYMBOLS)*3
1830 CIA /SUBTRACT FROM BASE OF TABLE
1839 ISZ NSUB /COMPUTE SYM. TAB. NUMBER
1853 OVERF2, TAD I D1 /CK FOR CDF IN BCRT
1856 DCA I D1 /NO, CLEAR IT
1857 DCA I D2 /CLEAR TV WORD
1861 JMP OVERF2 /MORE TO GO
1865 GETSYM, 0 /GET SYMBOL AND SEARCH TABLE
1870 \f/READ 1 FRAME & ADD TO CHECKSUM
1881 SETRCN, 0 /SUBR TO SET HIGHEST-LOADED ADDRESS (HLA)
1882 TAD I HLAPTR /AND RELOCATION CONSTANT (RCON)
1889 MAIN, 1501;1116;4040 /"MAIN"
1912 \f/TRAILER CODE EXIT
1915 JMS I HSRP /GET LOW ORDER PART
1918 TAD CSUM /COMPARE WITH ACCUMULATED SUM
1920 JMP I ER4P /NOT EQUAL
1928 RC10Z, TAD I X2 /GET TV ENTRY
1930 JMP .+5 /NOT DEFINED; IGNORE IT
1931 TAD I T1 /GET BCRT WORD
1932 AND K70 /EXTRACT BANK
1933 TAD K6201A /COMBINE CDF
1937 JMP RC10Z /NOT DONE YET
1939 TAD HLA /STORE HIGHEST LOADED ADDRESS
1940 DCA I HLAPTR /IN PROPER LOC. (HLA0-7)
1942 \f/LOADER MAP PRINT ROUTINE CONTINUED
1944 MAPX, SNL CLA /IF LINK=1 ONLY PRINT PAGE COUNTS,
1945 TAD NSUB /OTHERWISE PRINT SYMBOLS
1947 DCA T1 /CTR OF ROUTINES
1948 TAD MSTA4 /SYMB. TAB. PTR.
1952 TAD BCRTA4 /BCRT PTR
1978 TAD I T4 /PRINT BANK NUMBER
1985 TAD TM2 /PRINT SYMBOL VALUE
1987 TAD TM2 /IF ADDRESS=0,IT IS UNDEFINED
1990 TAD K4025 /TYPE SPACE,U
1999 JMP PRINT /JUMP IF MORE SYMBOLS, ELSE FALL INTO NEXT PG
2000 \fPAGES, TAD FCTR /SET CTR FOR CORRECT # OF BANKS
2002 TAD (HLAZ-1 /INIT. PTR. TO HLA LIST
2004 TAD I X1 /GET HLA OF NEXT BANK
2005 CMA RTL /DIVIDE BY 200 AND COMPLEMENT
2008 AND K37 /=NUMBER OF PAGES LEFT + 1
2010 TAD (-1 /REDUCE IF NON-ZERO
2014 JMP PAGES+4 /NOT DONE WITH ALL BANKS
2020 FCTR, 0 /# OF HIGHEST MEM. FIELD
2041 \f/WROVLY IS USED TO STORE THE FIELD COUNT FOR THE PROPGT
2042 /ROUTINE- PROPGT IS CALLED THE FIRST TIME THAT IOTEST IS
2043 /CALLED-SEE LOC.325 IN FIELD ZERO(APPROX.)
2093 \f/LOADER CLEANUP CODE - PREPARES TO RETURN TO OS/8
2098 L7700, SMA CLA /DID WE LOAD OVER THE LOADER?
2100 DCA WROVLY /WROVLY=0 OR 5
2105 MTEMP+21 /READ BACK THE RUN-TIME ROUTINES
2106 JMP I (SIOERR /BADDIE
2115 JMP .-5 /ALSO MOVE 16-32 INTO LOC 100
2118 13 /RESET EVERYTHING
2120 AND (40 /GET "/G" SWITCH
2122 JMP CALMON /GO SWITCH NOT ON
2124 11 /KICK MONITOR OUT
2127 DCA I (FIVE+1 /GO TO PROGRAM START ADR INSTEAD OF 7600
2128 ISZ I (ONE /OPTOMIZE READ A LITTLE ON DECTAPE
2132 DCA I L7700 /INDICATE I/O MONITOR IS IN CORE
2134 JMP I WROVLY /GET OUT
2136 ST1600, 177 /THIS IS SET TO "FINBUF" OR "FOUBUF" BY /I AND /O
2140 \f/ROUTINE TO TEST FOR /I AND /O SWITCHES
2157 ISZ DOPROP /SHOULD WE PROPAGATE RESIDENT(AND WRITE OUT
2158 JMP .+4 /THE RUN-TIME ROUTINES?)--NO
2159 TAD WROVLY /YES-FIELD COUNT IS IN WROVLY
2161 JMS I (PROPGT /DO IT
2163 K1600, 1600 /RESET TO 2000 IF TWO PG.DEV.HNDLRS AT RUN TIME
2164 DOPROP, 7777 /ONCE-ONLY FLAG FOR PROPAGATING FIELD ZERO
2165 /RESIDENT AND WRITING OUT RUNTIME ROUTINES
2166 /NOT RESET AFTER /R!!!!
2167 /SET TO -2 IF CALLED BY ".R LOADER"
2168 /BECAUSE OF USELESS INIT CALL TO IOTEST