ASMB,R,L,C     RTML3
*     NAME:   RTML3 RTE-M SEGMENTED GENERATOR-LOADER (SEGMENT 3)
*     SOURCE: 91740-18048 
*     RELOC:  91740-16048 
*     PGMR:   MIKE SCHOENDORF 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
* 
* 
* 
      HED RTE-M SYSTEM GENERATOR-LOADER 
      NAM RTML3,5 91740-16048 REV 1926 790426 
* 
*   ENTRY POINT NAMES 
      ENT ENTPT,FIXUP 
* 
*   EXTERNAL REFERENCE NAMES
      EXT AB#RT,ABRC1,ABREC,ADDRS,ADTRP 
      EXT ATABL,BLINE,BPAGA,BPLOC 
      EXT CLFL3,COML,COMOR,CONSL
      EXT CONV,CPAGE,DBTAD,DCB3 
      EXT DIAG2,ERREX,ER#OR 
      EXT EXEC0,FFLAG,FT#ME 
      EXT FUT1,FUT2,FUT3,FUT4 
      EXT FUTI,FUTP,FWABP,FWAC
      EXT FWAM,IDCB,IERR#,IN#CK 
      EXT JLU,LBF10,LBUF5,LBUF#,LBUFA 
      EXT LDGEN,LDSG3,LENGT,LER3
      EXT LER5,LIBFL,LINTP,LISTO,LNKDR
      EXT LOCFS,LST,LST1,LST2 
      EXT LST3,LST4,LST5,LSTA 
      EXT LSTI,LSTP,LSTPX,LSTUL,LWABP 
      EXT LWAC,LWAM,MAPS,.MEM6
      EXT MLOCC,MOVEX,NAMR.,NBUF,NBUFT,NSCAN
      EXT NXTCM,OPT.3,OTMES,PACK#,PLK,PLKS,PLK4 
      EXT PRINT,PUNCH,QGETC,RBTA
      EXT RBTO,READ#,RIC,RT.LC,RTMLC,SCAN 
      EXT SCP,SERFG,SERNM,SSTBL,SYMOV 
      EXT TYOFF,TYPRO,UEXFL,WRTBT,?XFER 
      EXT XNAM,XNAMA,ZPRIV,ZRENT
* 
      EXT PNAMA,PNZQZ,PRAMS 
* 
      EXT EXEC,POSNT
      EXT DU#MY 
* 
* 
* 
A     EQU 0 
B     EQU 1 
ERROR EQU ER#OR 
FTIME EQU FT#ME 
INDCK EQU IN#CK 
ABORT EQU AB#RT 
IERR  EQU IERR# 
LBUF  EQU LBUF# 
LOCC  EQU MLOCC 
PACK  EQU PACK# 
READ  EQU READ# 
      SUP 
************************************************************************
* 
*  THIS SEGMENT OF THE RTE-M SEGMENTED LOADER AND GENERATOR 
*  PERFORMS ALL MODULE RELOCATION. CONTROL IS RETURNED TO 
*  LOADER SEGMENT 2 FOR PROCESSING NEXT COMMAND.
* 
********************************************************************
      SKP 
RTML3 NOP 
      NOP 
      LDA LBUF2     REMOVE
      JSB INDCK         INDIRECT
      STA LBUF2            ADDRESSES
      LDA LBUF7                 FOR 
      JSB INDCK                     DEFS
      STA LBUF7 
      LDA NBUF6 
      JSB INDCK 
      STA NBUF6 
      LDA LDSG3     WHERE GO FLAG 
      SZA,RSS 
      JMP LDRIN     GO RELOCATE MODULE
      LDA LDGEN 
      SZA,RSS 
      JMP RTMLC     GO PUT ENTRY IN LST 
      JMP RT.LC 
* 
      HED *** ROUTINES FOR PROCESSING RECORDS ******
     SKP
***** 
* 
** NAM RECORD PROCESSOR *** RIC = 1 
* 
*     THIS ROUTINE IS CALLED TO ASSIGN SPACE FOR A PROGRAM
*   TO BE LOADED. THE NAM RECORD IS MOVED FROM LBUF TO
*   NBUF BEFORE THIS ROUTINE IS CALLED. 
*     SPECIAL CONVENTIONS APPLY TO FORTRAN AND ALGOL
*   PROGRAMS. IN A FORTRAN PROGRAM (IDENTIFIED BY 1 IN
*   SIGN POSITION OF WORD 7 OF NAM RECORD) THE PROGRAM
*   LENGTH IN WORD 7 MAY BE GREATER THAN THE ACTUAL LENGTH. 
*   THEREFORE THE UPPER BOUND IS NOT SET UNTIL LOADING
*     OF DATA BLOCKS. 
***** 
NAMR  NOP 
      LDA NBUF+10    CHECK BASE PAGE LENGTH 
      SSA 
      JMP ILBP      ILLEGAL BASE PAGE LENGTH(<0)
      CLA 
      STA CPLIN     CURRENT PAGE LINK POINTER (NEXT LINK) 
      STA CPSTR     CURRENT PAGE LINK POINTER (FIRST LINK)
      LDA LDGEN     LOADER OR GENERATOR CALLING 
      SZA,RSS 
      JMP NM5       GENERATOR CALLING 
      LDA FTIME     FIRST TIME THRU?
      SZA 
      JMP NM5       NO, DON'T OUTPUT TYOFF RECORD 
      LDA B2        SET ADDRESS OF TIE-OFF RECORD 
      STA ABRC1 
*  OUTPUT 2 WORD TIE-OFF RECORD FOR USER PROGRAMS ONLY. 
*  THE FIRST WORD OF THE TIE-OFF RECORD IS DEPENDENT
*  ON WHERE THE PROGRAM RESIDES (MEMORY RESIDENT OR IN
*  A PARTITION AND IF EITHER SYSTEM COMMON OR SSGA IS 
*  MAPPED INTO THE SYSTEM.
      LDA SCP       SSGA/SYSTEM COMMON/PARTITION
      AND B7
      LDB 0 
      LDA B4
      SZB,RSS 
      CLA,INA       MEM RES/NO SSGA/NO SYS COMMON 
      CPB B1
      CLA           PARTITION/NO SSGA/NO COMMON 
      CPB B2
      LDA B2        MEM RES/SYS COMMON/NO SSGA
      CPB B3
      LDA B2        PARTITION/SYS COMMON/NO SSGA
      STA 1 
      LDA SCP 
      AND B1
      RAR           SET BIT 15 IF PARTITION LOAD
      IOR 1 
      LDB FWAM
      JSB TYOFF     OUTPUT 2 WORD RECORD FOR PROGRAM
      ISZ FTIME     SET FOR NO MORE TYOFFS FOR NOW
NM5   LDB NBUF+11    GET COMMON LENGTH. 
      SZB,RSS 
      JMP NM1       NO COMMON 
      LDA FWAC
      SZA,RSS 
      JMP NM6       ALLOCATE 1ST COMMON 
      CMA,INA 
      ADA LWAC
      INA 
      STA COML
      CMB,INB 
      ADB A         CHECK FOR COMMON LENGTH OVERFLOW
      SSB,RSS 
      JMP NM1       LENGTH GOOD 
      LDB COMOV     COMMON BLOCK ERROR
      JMP ERREX 
      SPC 2 
NM6   STB COML     ALLOCATE 1ST COMMON
      LDA LOCC     MOVE PROGRAM RELOCATION BASE UP. 
      STA FWAC
      ADA COML
      STA LWAC
      INA 
      STA LOCC      RESET LOCATION COUNTER
NM1   LDA BPLOC     SET LOWER BOUND OF BASE PAGE AREA 
      STA HLINK     SAVE UPPER BOUND OF BPA FOR SYS MODS
      STA BPPTR    INITIALIZE BASE PAGE POINTER 
      LDA LOCC      SET LOWER BOUND OF PROGRAM AREA 
      STA PAPTR    INITIALIZE PROGRAM AREA POINTER
      LDA FWAC
      STA COMOR 
      LDA NBUF+9      GET PROGRAM LENGTH
      STA FTNFL    SET FORTRAN LOADING FLAG - BIT 15
      CPA M1        ALGOL PROGRAM?
      JMP NAMR,I    YES. LIMITS SET DURING LOADING. 
* 
* ALLOCATE BASE PAGE STORAGE
* 
      LDA NBUF+10    GET BASE PAGE AGAIN
      SZA,RSS       IF NO BP ALLOCATION,
      JMP NM2       CHECK FOR PROGRAM ALLOCATION
      LDB LNKDR     GET LINK DIRECTION FLAG 
      CPB M1        SYSTEM OR USER LINKS
      JMP NM3       SYSTEM LINKS
      ADA BPLOC     COMPUTE LAST LOCATION & 
      STA B           CHECK FOR OVERFLOW
      ADA M1
      CMA,INA 
      ADA LWABP 
      SSA           NEGATIVE MEANS OVERFLOW 
      JMP LER4      OF BASE PAGE AREA 
      STB BPPTR    SET UPPER LIMIT B. P.
      JSB MLINK     SET LINKS TO 100000 
* 
* ALLOCATE PROGRAM AREA STORAGE 
* 
NM2   LDA NBUF+9    GET PROGRAM LENGTH
      SZA,RSS      IF PROGRAM LENGTH = 0, 
      JMP NAMR,I
      LDA LOCC      GET LOCATION COUNTER
      AND M2000     ON BASE PAGE? 
      SZA 
      JMP NM4       NO
      LDA LOCC      GET LOCATION COUNTER
      ADA NBUF+9    ADD PROGRAM LENGTH
      AND B1777     ONLY INTERESTED IN THAT ON BASE PAGE
      CMA,INA 
      ADA LOCC
      STA BLINK     COUNTER FOR PUTTING 100000 IN LINK TABLE
      LDA C1000 
      LDB LOCC
      ADB BPAGA     GET ADDRESS OF 1ST WORD IN LINK TABLE 
      STA 1,I 
      INB           GET ADDRESS OF NEXT WORD IN LINK TABLE
      ISZ BLINK     DONE? 
      JMP *-3       NO
NM4   LDA LINTP     GET LINKS IN CURRENT PAGE FLAG
      SZA,RSS 
      JMP NCPLN     NO CURRENT PAGE LINKS 
      LDA NBUF+9    GET PROGRAM LENGTH
      AND UDFE      CLEAR FORTRAN BIT 
      STA MIN1
      LDA LOCC      GET PROGRAM RELOCATION BASE 
      AND B1777     CLEAR PAGE BITS 
      ADA MIN1
      ADA M2000 
      SSA           DOES PROGRAM CROSS PAGE BOUNDARY? 
      JMP NCPLN     NO, CURRENT PAGE LINKS ARE NOT NEEDED 
      STA 1 
      CMA,INA       DETERMINE NUMBER OF CURRENT 
      ADA MIN1      PAGE LINKS NEEDED 
      INA           MIN(A:2,B):4, WHERE A = LENGTH
      ARS           OF PROGRAM ON CURRENT PAGE AND
      STA MIN1      B = REST OF PROGRAM 
      CMA,INA 
      ADA 1 
      SSA,RSS 
      LDB MIN1
      ADB B3
      BRS,BRS 
      LDA LOCC      GET PROGRAM RELOCATION BASE 
      STA CPLIN 
      STA CPSTR 
      ADA B         ADD CURENT PAGE LINK LENGTH 
      STA LOCC      SET NEW PROGRAM RELOCATION BASE 
      STA LLINK     LAST LINK 
NCPLN LDB FTNFL     COMPILER-GENERATED? 
      SSB 
      JMP NAMR,I    YES,LIMITS SET DURING DBL PROCESSING
      LDA NBUF+9    GET PROGRAM LENGTH
      ADA LOCC      COMPUTE HIGH ADDRESS &
      STA B           CHECK FOR OVERFLOW
      CMA,INA 
      INA 
      ADA LWAM
      SSA           NEGATIVE RESULT MEANS OVERFLOW
      JMP LER3      MEMORY OVERFLOW ERROR 
      STB PAPTR    SET UPPER BOUND
      JMP NAMR,I
      SPC 1 
NM3   ADA FWABP     COMPUTE LAST
      CMA,INA       LOCATION AND
      INA           CHECK FOR 
      ADA BPLOC     OVERFLOW
      SSA           NEGATIVE MEANS OVERFLOW 
      JMP LER4      OF BASE PAGE AREA 
      ADA M1        SET UPPER LIMIT 
      ADA FWABP 
      STA BPPTR 
      JSB MLINK     SET LINKS TO 100000 
      LDA BPPTR 
      INA           SAVE BASE PAGE RELOCATION BASE FOR
      STA BPLOC     SYSTEM MODULES
      JMP NM2 
* 
* 
ILBP  LDB ILBPL     ILLEGAL BASE PAGE LENGTH (<0) 
      JMP ERREX 
* 
* 
LER4  LDB BPGOV     LINKAGE AREA OVERFLOW 
      JMP ERREX 
* 
* 
      SPC 1 
CPLIN NOP 
CPSTR NOP 
BLINK NOP 
FTNFL NOP           2^15 = 1 IF FORTRAN/ALGOL 
LLINK NOP 
MIN1  NOP 
* 
B1    OCT 1 
B2    OCT 2 
B3    OCT 3 
B1777 OCT 1777
C1000 OCT 100000
M2000 OCT -2000 
UDFE  OCT 77777 
* 
BPGOV DEF *+1 
      OCT 6 
      ASC 3,BPG OV
* 
COMOV DEF *+1 
      OCT 6 
      ASC 3,COM OV
* 
DEBUG DEF *+1 
      ASC 3,DEBUG 
* 
ILBPL DEF *+1 
      OCT 6 
      ASC 3,IL BPL
      SKP 
* 
*  SUBROUTINE TO PUT ENTRY POINT IN LST 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = ADDRESS OF ENTRY POINT + 3 
*    JSB ENTPT
* 
*  RETURN: CONTENTS OF A AND B DESTROYED. 
* 
ENTPT NOP 
      ADB M3        ADJUST ADDRESS OF ENTRY POINT 
      CLA 
      STA PTYPE 
      STA ENTS      SET FOR SUBROUTINE CALL 
      JSB ENTI
      JMP ENT01 
      LDB SYMOV     SYSTEM OVERFLOW 
      JMP ERREX     EXIT
* 
ENT01 LDA LST3,I
      AND UPCM      ZERO OUT EXT ID NO. IF ANY
      STA LST3,I
      JMP ENTPT,I 
* 
M3    DEC -3
* 
*  SUBROUTINE TO PUT 100000 IN LINK TABLE. THIS PREVENTS
*  THIS AREA FROM BEING USED AS LINKS.
* 
MLINK NOP 
      LDA NBUF+10   GET BASE PAGE LENGTH
      CMA,INA 
      STA BLINK     COUNTER FOR PUTTING 100000 IN LINK TABLE
      LDA C1000 
      LDB BPAGA     GET ADDRESS OF 1ST WORD IN LINK TABLE 
      ADB BPLOC 
      STA 1,I 
      ADB LNKDR     GET ADDRESS OF NEXT WORD IN LINK TABLE
      ISZ BLINK     DONE ?
      JMP *-3       NO
      JMP MLINK,I   YES, EXIT 
* 
      SKP 
      SPC 2 
***** 
* 
** ENT ** EXT RECORD PROCESSORS 
* 
*     ENT RECORD PROCESSOR (RIC = 2)
*     EXT RECORD PROCESSOR (RIC = 4)
* 
* PURPOSE OF THIS SECTION IS TO PROCESS ENTRY POINTS
*  AND EXTERNAL SYMBOLS, ADD SYMBOLS TO THE 
*  LOADER SYMBOL TABLE, AND 
*  SET A FLAG IF AN ENTRY POINT FROM A LIBRARY
*  LOAD MATCHES AN UNDEFINED EXTERNAL SYMBOL. 
* CONTROL RETURNED FROM THIS SECTION TO -LDRIN-.
* 
* WORDS USED FOR TEMPORARY STORAGE: 
* 
*  LBUF - RECORD TYPE FLAG: 1 = ENT, 0 = EXT
*  LBUF+1 - NEGATIVE COUNT OF ENT/EXT ENTRIES IN RECORD.
*  LBUF+2 - FIRST WORD ADDRESS OF CURRENT ENTRY.
***** 
ENTI  NOP 
ENTR  CLA,INA,RSS   ENT: FLAG=1 
EXTR  CLA           EXT: FLAG=0 
      STA LBUF      SAVE RECORD TYPE
      LDA LBUF+1    GET AND ISOLATE 
      AND B77       RECORD ITEM COUNT.
      CMA,INA      SET NEGATIVE FOR 
      STA LBUF+1   COUNTER IN PROCESSING
      LDA ENTS      =0 IF CALLED AS A SUBROUTINE
      SZA 
      LDB LBUFA    SET LBUF+2 = ADDRESS OF
      ADB B3        FIRST ENTRY 
      STB LBUF+2    IN RECORD 
ENTX1 JSB SSTBL     SEARCH SYMBOL TABLE 
      JMP ENTX6     END OF LST - MAKE NEW ENTRY 
      LDA LBUF     IF RECORD TYPE 
      SZA,RSS 
      JMP EXT0      IS EXT, GO POST ORDINAL.
* 
*     SYMBOL MATCH IN ENT RECORD
* 
      LDA UDFE      IS ENT DEFINED? 
      CPA LST4,I
      JMP ENT21     NO. SET VALUE FROM RECORD.
      LDB SERFG      YES, LOADING FROM LIBRARY
      SZB 
      JMP ENTX5     IGNORE DUPLICATE FROM LIBRARY.
      LDB DUENT 
      JSB DIAG2    COMPLAIN ABOUT DUPLICATE 
      LDB LBUF+2
      ADB B2
      LDA 1,I 
      AND UPCM
      IOR B40 
      STA 1,I 
      LDB LBUF+2
      LDA B5        PRINT "OFFENDING" ENT SYMBOL
      JSB PRINT 
      LDA LENGT 
      LDB ADDRS 
      JSB MAPS
      JMP ENTX5 
* 
DUENT DEF *+1 
      OCT 6 
      ASC 3,DU ENT
* 
* ADD ENTRY POINT ADDRESS TO LST ENTRY. 
* 
ENT21 JSB CKTYM     CHECK IF MODULE TYPE ALLOWED
      CLA           CLEAR "LIBRARY LOAD" FLAG.
      STA SERFG 
ENT22 LDA B,I       GET WORD 3 OF RECORD ENTRY
      STA LST3,I    AND STORE IN LST WORD 3.
      INB           GET WORD 4 OF RECORD ENTRY
      LDB B,I       (ENTRY VALUE).
      AND B7        ISOLATE RELOCATION INDICATOR
      CPA B3        ABSOLUTE? 
      JMP ENT24     YES 
      CPA B4        MICROCODE REPLACEMENT?
      JMP ENT24     YES 
      CMB           NEGATE TO INDICATE NEW ENTRY
ENT23 STB LST4,I    SAVE IN LST FOR LATER ACTION. 
      LDB PTYPE 
      SZB,RSS       TYPE 7 OR 8 MODULE? 
      JMP ENTX5     NO
      LDA D8
      ADA LST3,I    FLAG TYPE 7 OR 8 MODULES IN LST 
      STA LST3,I
* 
* ENTRY FROM INPUT LOADING
* 
* 
* ADVANCE TO NEXT RECORD ITEM 
* 
ENTX5 LDA ENTS      =0 IF CALLED AS A SUBROUTINE
      SZA,RSS 
      JMP ENTI,I
      LDB LBUF+2    GET OLD RECORD ENTRY ADDRESS
      ADB B3        ADD 3 FOR NEXT EXT ENTRY. 
      ADB LBUF      ADD ONE MORE FOR ENT RECORD.
      STB LBUF+2   SET ADDRESS OF NEXT ENTRY. 
      ISZ LBUF+1   INDEX ENTRY COUNT -
      JMP ENTX1     MORE TO PROCESS.
      JMP LDRIN    FINISHED- GET NEXT RECORD. 
* 
ENT24 CMA,INA 
      STA LST5,I    SAVE -TYPE IN LST5
      LDA LST3,I    ZERO OUT RP AND AB INDICATORS 
      AND UPCM
      STA LST3,I
      JMP ENT23 
* 
* NO MATCH IN LST FOR RECORD ENTRY SYMBOL - ADD 
*  NEW ENTRY - CHECK FIRST FOR MEMORY CONFLICT. 
* 
* 
ENTX6 LDA LST5      SAVE UPPER LIMIT OF LST 
      STA LSTUL 
      LDB FFLAG 
      SZB,RSS       ANY 0 ENTRIES IN LST? 
      JMP ENTX7     NO
      LDA TYPRO     USER PROGRAM? 
      SZA,RSS 
      JMP ENTX7     YES 
      LDA LIBFL     SEARCHING?
      CPA B1
      JMP ENTX7     YES 
      STB LST5
      CCA 
      STA LSTPX 
      JSB LSTP      SET LST ENTRY ADDRESSES 
      NOP 
      JMP ENTX9 
ENTX7 ISZ LSTA,I    ADD 1 TO LST ENTRY COUNT
ENTX9 LDB ENTS      =0 IF CALLED AS SUBROUTINE
      LDA LST5
      CMA 
      ADA FUT4
      SSA 
      JMP ENTX2    OVERFLOW 
      LDB LBUF+2    (B) = RECORD ENTRY ADDR.
      LDA B,I       MOVE WORDS 1 AND 2 OF RECORD
      STA LST1,I     ENTRY TO WORDS 
      INB             1 AND 2 NEW LST ENTRY 
      LDA B,I       (WORD 3 WILL BE SET LATER)
      STA LST2,I
      INB          (B) = ADDR. OF WORD 3, REC. ENTRY
      LDA UDFE
      STA LST4,I    DENOTE UNDEFINED. 
      CLA 
      STA LST5,I    DENOTE NO LINK ASSIGNED 
      LDA LBUF      GET RECORD TYPE FLAG
      SZA 
      JMP ENT22     ENT; GO POST VALUE. 
EXT0  JSB CKTYM     CHECK IF MODULE TYPE ALLOWED
      LDA B,I       GET WORD 3 OF RECORD ENTRY, 
      STA LST3,I    STORE TO POST EXT ORDINAL.
      LDA LST5,I
      SSA           ABSOLUTE OR MICROCODE REPLACEMENT 
      JMP ENTX5     YES 
      LDA LST5,I   HAS A LINK ALREADY BEEN ASSIGNED?
      SZA 
      JMP ENTX5    YES, CONTINUE PROCESSING 
      LDA LST4,I   NO, ALLOCATE ONE 
      CPA UDFE     LINK ROUTINE RECOGNIZES UNDEFINED AS 
      CLA           0 IN .A.(VALUE OF SYMBOL PARAM) 
      JSB LINK     ALLOCATE THE LINK
      STB LST5,I    AND UPDATE SYMBOL TABLE 
      JSB ENTCK     CHECK TO MARK LINK FOR DELETION 
      JMP ENTX5     DON'T DELETE
      LDB LST5,I    GET LINK
      CCE 
      ELB,RBR       SET BIT 15
      STB LST5,I
      JMP ENTX5      THEN CONTINUE
ENTX2 SZB 
      JMP LER5      OVERFLOW, LOADER SUBCONTROL 
      ISZ ENTI
      JMP ENTI,I    ERROR EXIT
* 
* 
B40   OCT 40
B77   OCT 77
D8    DEC 8 
* 
ENTS  NOP           =0 IF SUBROUTINE
      SKP 
***** 
* 
** RELEN ** RELOCATE ENTRY POINT ADDRESS
*  CALLING SEQUENCE:  (B) = UNRELOCATED ENT VALUE 
*                     (A)=CONTENTS OF LST3(RELOCATION BASE) 
*                     JSB RELEN 
*         RETURN: (A) = LINK ADDRESS, IF ANY
*                 (B) = RELOCATED ENT ADDRESS 
* 
* PURPOSE:    RELOCATES  ENT  ADDRESS AS DESIGNATED 
*         BY THE RELOCATION FIELD (R) IN BITS 
*         00-01 OF (LST3).  0 = PROGRAM, 1 = BASE 
*         PAGE, 2 = COMMON, 3 = ABSOLUTE. 
*         ALSO POSTS VALUE IN LINK TABLE. 
*         BITS 07-00 OF (LST3) ARE CLEARED. 
***** 
RELEN NOP          ENTRY/EXIT POINT 
      STB SAVE1 
      LDB LST5,I    MICROCODE REPLACEMENT OR ABSOLUTE?
      SSB 
      JMP RE3 
      LDB SAVE1 
      AND B7        GET R-FIELD 
      ADA RBTO
      ADB A,I       RELOCATE SYMBOL VALUE 
      STB LST4,I    POST ENTRY VALUE IN LST.
      LDA LST5,I
      SZA,RSS 
      JMP RE3 
      ADA BPAGA 
C174  STB A,I       POST VALUE IN LINK TABLE
      LDA FWABP     IF LINK IS LESS THAN FWABP
      CMA,INA       GO OUTPUT IT NOW
      ADA LST5,I
      SSA 
      JMP RE7       YES, GO OUTPUT
RE3   JSB FIXUP     DO FIXUP
      JMP RELEN,I 
FIXUP NOP 
      LDB LINTP 
      STB SAVE1     SAVE LINKING TYPE 
      CLB 
      STB LINTP     SET LINKING TO BASE PAGE
      JSB FUTI      INITIALIZE FIXUP PROCESSOR
RE2   JSB FUTP      SET FIXUP ENTRY ADDRESS 
      JMP RE1       EXIT, NO MORE FIXUPS SATISFIED
      LDA FUT4,I    DOES FIXUP ADDRESS =
      CPA LST1      ANY LST ADDRESS?
      RSS 
      JMP RE2       NO, GET NEXT ONE
      LDB FUT1,I    GET LOAD ADDRESS
      STB ABRC1     STORE FOR OUTPUTTING
      STB LBUF
      CPA M1        .ZRNT FIXUP?
      JMP RE6       YES 
      LDA LST4,I    GET ENTRY VALUE 
      LDB LST5,I
      CPB MD4       MICROCODE REPLACEMENT?
      JMP RE5       YES 
      CPB M3        ABSOLUTE? 
      JMP RE8       YES 
      LDB FUT2,I
      SZB,RSS 
      JMP RE8       DEF 
      SSB 
      JMP RE8       INDIRECT
      LDB FUT3,I    ANY OFFSET? 
      SZB 
      JMP RE8       YES 
      JMP RE9       NO, DON'T OUTPUT FIXUP
RE8   CCA           SET TO EXTERNAL 
      STA NBUF+1
      LDB FUT2,I    GET INSTRUCTION 
      STB NBUF+2
      LDB LST4,I    GET VALUE OF ENTRY POINT
      ADB FUT3,I    ADD OFFSET
      JSB SPLIC     BUILD INSTRUCTION, ALLOC. LINK IF NEC.
RE5   JSB PACK      STORE INSTRUCTION FOR OUTPUTTING
      JSB PUNCH     OUTPUT THE ABSOLUTE RECORD
RE9   CLA           CLEAR THE FIXUP TABLE ENTRY SO THAT 
      STA FUT1,I    IT CAN BE REUSED
      STA FUT2,I
      STA FUT3,I
      STA FUT4,I
      JMP RE2 
RE1   LDA BLANK     PUT BLANK BACK IN BUFFER
      STA LBUF
      LDA SAVE1     RESTORE LINK TYPE 
      STA LINTP 
      JMP FIXUP,I   EXIT
* 
RE6   LDA FUT2,I    GET INSTRUCTION 
      JMP RE5       GO STORE
* 
RE7   LDA BPAGA     STORE OFFSET FOR OUTPUTTING 
      STA PLKS
      LDA LST5,I    SAVE LOAD ADDRESS 
      STA PLK4
      LDB 0         UPPER ADDRESS 
      JSB PLK       GO OUTPUT LINK
      JMP RE3       GO DO FIXUP 
* 
SAVE1 NOP 
* 
M1    DEC -1
MD4   DEC -4
* 
BLANK ASC 1,
      SKP 
      HED DBL RECORD PROCESSING 
* DATA BLOCK RECORD PROCESSOR (RIC = 3) 
      SPC 2 
*     THIS SECTION RELOCATES THE LOAD ADDRESS OF A DATA 
*   BLOCK AND RELOCATES AND STORES THE WORDS IN IT. 
* 
*     A RELOCATION BYTE IS ASSOCIATED WITH EACH 
*  INSTRUCTION OR DATA WORD IN A DBL RECORD.
*  THIS 3-BIT BYTE CONTAINS ONE OF THE
*  FOLLOWING RELOCATION INDICATORS: 
      SPC 1 
*     000 - ABSOLUTE
*     001 - PROGRAM RELOCATABLE 
*     010 - BASE PAGE RELOCATABLE 
*     011 - COMMON RELOCATABLE
*     100 - EXTERNAL SYMBOL REFERENCE (NO OFFSET) 
*     101 - TWO-WORD GROUP. WORD 1 CONTAINS OPCODE, 
*           RELOCATION BYTE FOR OFFSET, AND AN OPTIONAL 
*           EXTERNAL SYMBOL ORDINAL. WORD 2 CONTAINS THE
*           OFFSET (ADDRESS). THE RELOCATION BYTE CAN BE: 
*                    00 - PROGRAM 
*                    01 - BASE PAGE 
*                    10 - COMMON
*                    11 - ABSOLUTE
*     110 - BYTE RELOCATABLE
* 
*     THIS SECTION USES THE RELOCATION BASE 
*   TABLE  (RBT) TO RELOCATE THE LOAD 
*   ADDRESS AND DATA WORDS. THE RELOCATION
*   BASES IN THE RBT ARE SET BY THE NAM 
*   RECORD PROCESSOR. THE TABLE IS STRUCTURED 
*   AS: 
*      RBTA  DEF *+1
*      RBT   OCT 0  (ABSOLUTE)
*      PREL  (PROGRAM ORIGIN - FWA) 
*      BPREL (BASE PAGE ORIGIN (FROM ORB) 
*      COMOR (COMMON AREA ORIGIN) 
*      OCT 0 (ABSOLUTE AGAIN) 
* 
*     IF A FORTRAN GENERATED PROGRAM IS BEING LOADED, 
*  A CHECK FOR MEMORY OVERFLOW IS MADE BEFORE 
*  EACH DBL RECORD IS PROCESSED. IF OVERFLOW OCCURS,
*  AN IMMEDIATE TERMINATION OF LOADING IS MADE
*  BY TRANSFERRING TO THE ERROR ROUTINE.  OTHERWISE,
*  THE NEW FWA OF THE MEMORY AREA IS SET AND
*  LOADING CONTINUES.   THE DBL RECORDS FOR A FTN 
*  OBJECT PROGRAM ARE GENERATED IN ASCENDING
*  ORDER - I.E. THE LOAD ADDRESS OF EACH DBL RECORD 
*  IS LARGER THAN THE PREVIOUS - AND THE LAST DBL 
*  RECORD LOADED IS THE LAST PROGRAM SEGMENT (I.E., 
*  A BSS DOES NOT FOLLOW) SO THE NEW FWA OF AVAIL.
*  MEMORY IS KNOWN AFTER THE LAST DBL RECORD IS 
*  PROCESSED. 
********************************************************************
      SPC 2 
***** 
* 
** DBL RECORD PROCESSOR 
* 
***** 
      SPC 2 
                                