*DECK FDLRES
          IDENT  FDL.RES
          ENTRY  FDL=PRS
          ENTRY  FDL=RCI
          ENTRY  FDL=RSC
          ENTRY  FDL=SEA
          ENTRY  FDL=SPL
          SYSCOM B1 
          TITLE  FDL.RES - FAST DYNAMIC LOADER RESIDENT.
          COMMENT FAST DYNAMIC LOADER RESIDENT. 
          COMMENT COPYRIGHT CONTROL DATA CORP. 1976, 1977, 1978, 1979, 1
,980, 1981, 1982. 
          SPACE  4,10 
*****     FDL.RES - FAST DYNAMIC LOADER RESIDENT. 
*         GREGG TOWNSEND.    76/06/12.
* 
*         FDL.RES RELOCATES CAPSULES AND LINKS THEM TO PASSLOC TABLES.
* 
*         WITHIN THIS PROGRAM ANY REFERENCE TO THE TERM *PASSLOC* 
*         TABLES ALSO APPLIES TO *ENTRY* TABLES.
          SPACE  4,10 
***       --- AN OVERVIEW OF THE FDL/FOL RESIDENT ROUTINES ---
* 
*         THERE ARE FOUR FDL/FOL LOADER OBJECT ROUTINES WHICH CALL
*         ONE ANOTHER AND CMM.  THEIR NAMES, USER-CALLABLE ENTRY
*         POINTS, EXTERNALS, AND PURPOSE ARE OUTLINED HERE.  FOR
*         DETAILS, SEE THE SPECIFIC ROUTINES. 
* 
*         FDL.RES - FAST DYNAMIC LOADER RESIDENT. 
*                FDL.REL - CALLED TO RELOCATE AND LINK. 
*                FDL.UNR - CALLED TO DELINK.
*                CALLS NOBODY ELSE. 
*         CALLED WHEN THE USER HAS FOUND AND READ IN A CAPSULE AND
*         JUST NEEDS IT LINKED TO PASSLOC TABLES. 
* 
*         FDL.MMI - MEMORY MANAGER INTERFACE. 
*                FDL.LDC - LOAD CAPSULE.
*                FDL.ULC - UNLOAD CAPSULE.
*                CALLS CMM TO GET STORAGE FOR CAPSULES AND DIRECTORIES. 
*                CALLS FDL.RES TO RELOCATE AND LINK.
*         CALLED WHEN THE USER WANTS FDL TO DO ALL THE WORK OF FINDING
*         AND LOADING CAPSULES. 
* 
*         FDL.OCR - OVERLAY-CAPSULE RESIDENT. 
*                FDL.LOC - LOAD OVERLAY-CAPSULE.
*                FDL.UOC - UNLOAD OVERLAY-CAPSULE.
*                CALLS FOL.RES (BELOW) TO LOCATE AN OVCAP.
*                CALLS FDL.MMI TO LOAD AND LINK IT, AND THEREFORE 
*                            DRAGS IN FDL.RES AND CMM.
*         CALLED TO LOAD OVERLAY-CAPSULES.
* 
*         FOL.RES - FAST OVERLAY LOADER RESIDENT. 
*                FDL.GDE - GET DIRECTORY ENTRY. 
*                FOL.LOV - LOAD OVERLAY.
*                CALLS ONLY SYS=. 
*         CALLED TO LOAD OVERLAYS VIA THE DIRECTORY IN THE MAIN 
*         OVERLAY, OR JUST TO GET INFORMATION FROM THAT DIRECTORY.
* 
* 
*         IN ALL ROUTINES, ENTRY POINTS OF THE FORM XXX.XXX ARE USER- 
*         CALLABLE ENTRY POINTS WHICH PRESERVE A0, X0, B2, B3, X5.
*         THOSE OF THE FORM XXX=XXX ARE INTERNAL ENTRY POINTS TO BE 
*         USED ONLY FOR COMMUNICATION BETWEEN THESE ROUTINES, WITH
*         INTERFACES SUBJECT TO CHANGE. 
          SPACE  4,10 
**        FDL.RES HAS THREE FUNCTIONS:  
* 
*         1.     IT PROVIDES USER-CALLABLE ENTRY POINTS FOR RELOCATING, 
*                LINKING, AND DELINKING CAPSULES LOADED BY THE USER.
* 
*         2.     IT PROVIDES OTHER ENTRY POINTS TO ITS RELOCATION,
*                LINKING, AND ADDRESS-PLUGGING SUBROUTINES FOR USE
*                BY FDL.MMI.
* 
*         3.     IT PROVIDES INITIALIZATION AND EXIT PROCESSING 
*                (INCLUDING SAVING AND RESTORING REGISTERS) FOR USE 
*                BY ALL FDL ROUTINES. 
          SPACE  4,10 
*CALL FDLCOM
          TITLE  REL - RELOCATE AND LINK - MAIN LOOP. 
***       FDL.REL - RELOCATE CAPSULE. 
* 
*         ENTRY  (X2) = 42/0, 18/FWA. 
*                (X4) = PASSLOC LIST ADDRESS. 
* 
*         EXIT   (B1) = 1.
*                (X6) = ERROR CODE: 
*                            0 = NO ERROR.
*                            4 = BAD CAPSULE FORMAT.
*                            5 = BAD PASSLOC FORMAT.
* 
*         SAVES  A0, X0, B2, B3, X5.
  
  
 FDL.REL  SUBR   =           ENTRY
          SB4    FDL.REL     EXIT ADDRESS 
          RJ     PRS         PRESET PROGRAM 
          SA1    X2          LOAD HEADER WORD 
          SA0    X2          (A0) = FWA 
          SX6    ERR.BCF     BAD CAPSULE FORMAT 
          PL     X1,RSC      IF HEADER WORD BAD, RETURN STATUS CODE 
          DF     X1,RSC      IF HEADER WORD BAD, RETURN STATUS CODE 
          RJ     RCI         RELOCATE CODE IMAGE
          MX0    60          INDICATE LOADING OPERATION 
          RJ     SPL         SCAN PASSLOC LIST
          SX6    ERR.AOK     ALL OK 
          EQ     RSC         RETURN STATUS CODE 
          TITLE  UNR - UNLINK CAPSULE - MAIN LOOP.
***       FDL.UNR - UNLINK CAPSULE. 
* 
*         ENTRY  (X2) = 42/0, 18/FWA. 
*                (X4) = PASSLOC LIST ADDRESS. 
* 
*         EXIT   (B1) = 1.
*                (X6) = ERROR CODE: 
*                            0 = NO ERROR.
*                            4 = BAD CAPSULE FORMAT.
*                            5 = BAD PASSLOC FORMAT.
* 
*         SAVES  A0, X0, B2, B3, X5.
  
  
 FDL.UNR  SUBR   =           ENTRY
          SB4    FDL.UNR     EXIT ADDRESS 
          RJ     PRS         PRESET PROGRAM 
          SA1    X2          LOAD HEADER WORD 
          SA0    X2          (A0) = FWA 
          SX6    ERR.BCF     BAD CAPSULE FORMAT 
          PL     X1,RSC      IF HEADER WORD BAD, RETURN STATUS CODE 
          DF     X1,RSC      IF HEADER WORD BAD, RETURN STATUS CODE 
          MX0    0           INDICATE UNLOADING OPERATION 
          RJ     SPL         SCAN PASSLOC LIST
          SX6    ERR.AOK     ALL OK 
          EQ     RSC         RETURN STATUS CODE 
 PRS      TITLE  PRS - PRESET PROGRAM 
**        PRS - PRESET PROGRAM
* 
*         ENTRY  (B4) = ULTIMATE EXIT ADDRESS.
* 
*         USES   A6, A7, X6, X7.
* 
*         CALLS  NONE.
  
  
 FDL=PRS  BSS    0
 PRS      SUBR               ENTRY/EXIT 
          SB1    1           (B1) = 1 
          SX6    B4 
          SA6    EA          SAVE ENTRY INFORMATION 
          SX7    A0-B0
          SX6    B2-B0
          SA7    SVA0        SAVE A0
          SA6    A7+B1       B2 
          SX7    B3-B0
          SA7    A6+B1       B3 
          BX6    X5 
          LX7    X0 
          SA6    A7+B1       X5 
          SA7    A6+B1       X0 
          BX6    X1 
          LX7    X2 
          SA6    A7+B1       X1 
          SA7    A6+B1       X2 
          BX6    X3 
          LX7    X4 
          SA6    A7+B1       X3 
          SA7    A6+B1       X4 
          EQ     EXIT.       EXIT 
 RCI      TITLE  RCI - RELOCATE CODE IMAGE. 
**        RCI - RELOCATE CODE IMAGE.
* 
*         ENTRY  (A0) = FWA OF CAPSULE. 
* 
*         EXIT   ADDRESSES WITHIN CAPSULE RELOCATED RELATIVE TO FWA.
* 
*         USES   ALL BUT A0.
* 
*         CALLS  NONE.
  
  
 FDL=RCI  BSS    0
 RCI      SUBR               ENTRY/EXIT 
  
*         FORM ADDRESS RELOCATION TABLE RCIA. 
  
          SB2    B1+B1       (B2) = 2 
          SB4    RCIA        (B4) = FWA OF RELOCATION ADDRESSES 
          MX5    42 
          SX1    A0          L+ 
          BX6    -X1-X5      L- 
          LX7    X1          L+ 
          SA6    B4+B2       (RCIA+2) = L-
          SA7    A6+B1       (RCIA+3) = L+
          LX6    15          M- 
          BX2    -X1-X5      L- 
          LX7    15          M+ 
          SA6    A7+B1       (RCIA+4) = M-
          SA6    A6+B1       (RCIA+5) = M-
          LX6    15          U- 
          SA7    A6+B1       (RCIA+6) = M+
          BX3    X6          U- 
          SA7    A7+B1       (RCIA+7) = M+
          LX4    X1 
          SA6    A7+B1       (RCIA+10) = U- 
          IX7    X3+X2       U- L-
          SA6    A6+B1       (RCIA+11) = U- 
          LX4    30          U+ 
          IX6    X3+X1       U- L+
          SA7    A6+B1       (RCIA+12) = U- L-
          SA6    A7+B1       (RCIA+13) = U- L+
          BX7    X4          U+ 
          IX6    X4+X2       U+ L-
          SA7    A6+B1       (RCIA+14) = U+ 
          SA7    A7+B1       (RCIA+15) = U+ 
          BX7    X4+X1       U+ L+
          SA6    A7+B1       (RCIA+16) = U+ L-
          SA7    A6+B1       (RCIA+17) = U+ L+
  
*         INITIALIZE FOR RELOCATION LOOP. 
  
          SA5    A0          (A5/X5) = TEXT 
          SA2    A5+B2
          SB6    X5 
          SB7    X2 
          SA1    A0+B7       (A1/X1) = RELOCATION BYTES 
          SB6    B6-B7       (B6) = WORD COUNT OF RELOCATION BYTES
          LE     B6,EXIT. 
          SB7    13          (B7) = BYTE COUNT FOR X1 
          SB2    18          (B2) = 18 = CARRY SHIFT
          SB3    RCIB        (B3) = FWA OF ADDRESS MASKS
          SB5    4           (B5) = 4 = BYTE SHIFT
          SA3    A5-B1
          MX0    -4          (X0) = BYTE MASK 
          BX6    X3          (X6) = PREVIOUS WORD 
          LX1    8
          SX2    B0 
          SX3    B0 
  
*         MAIN RELOCATION LOOP, BASED ON ANCIENT CODE BY GREG MANSFIELD.
  
 RCI1     BX5    -X3*X5      REMOVE ADDRESSES FROM TEXT 
          SA6    A5-B1       STORE PREVIOUS WORD
          SB7    B7-B1       DECREMENT WORD COUNT 
          BX4    -X3*X2      EXTRACT CARRYS 
          AX7    X4,B2
          IX2    X2+X7       ADD CARRYS 
          BX4    -X0*X1      NEXT RELOCATION BYTE 
          LX1    B5          SHIFT CONTROL WORD 
          BX7    -X2*X3      MASK AND COMPLEMENT ADDRESSES
          SA3    B3+X4       NEXT ADDRESS MASK WORD 
          BX6    X7+X5       INSERT RELOCATED ADDRESSES 
          SA4    B4+X4       NEXT RELOCATION WORD 
          SA5    A5+B1       NEXT TEXT WORD 
          NO
          BX7    -X5*X3      EXTRACT COMPLEMENT ADDRESS FIELDS
          IX2    X7+X4       ADD COMPLEMENT ADDRESSES 
          PL     B7,RCI1     IF MORE RELOCATION BYTES, LOOP 
          SB7    B2-B5       RESET BYTE COUNTER 
          SA1    A1+B1       GET NEXT WORD OF RELOCATION BYTES
          SB6    B6-B1       DECREMENT RELOCATION TABLE WORD COUNT
          LX1    B5          POSITION TO FIRST RELOCATION BYTE
          GT     B6,RCI1     IF MORE, LOOP IN STACK 
          SB7    B0 
          PL     B6,RCI1     ONE LAST PASS TO FINISH THE LAST WORD
          SA6    A5-B1       STORE LAST TEXT WORD 
          EQ     EXIT.       EXIT 
  
  
 RCIA     BSSZ   16          ADDRESS RELOCATION TABLE 
  
          BSS    1           AVOID BANK CONFLICTS 
  
 RCIB     BSS    0           TABLE OF MASKS FOR RELOCATION
          LOC    0
  
          VFD    60/0 
          VFD    60/0 
          VFD    42/0,18/-0 
          VFD    42/0,18/-0 
  
          VFD    27/0,18/-0,15/0
          VFD    27/0,18/-0,15/0
          VFD    27/0,18/-0,15/0
          VFD    27/0,18/-0,15/0
  
          VFD    12/0,18/-0,30/0
          VFD    12/0,18/-0,30/0
          VFD    12/0,18/-0,12/0,18/-0
          VFD    12/0,18/-0,12/0,18/-0
  
          VFD    12/0,18/-0,30/0
          VFD    12/0,18/-0,30/0
          VFD    12/0,18/-0,12/0,18/-0
          VFD    12/0,18/-0,12/0,18/-0
  
          LOC    *O 
 RSC      TITLE  RSC - RETURN STATUS CODE.
**        RSC - RETURN STATUS CODE. 
* 
*         ENTRY  (X6) = STATUS CODE TO RETURN.
*                (EA) = RETURN ADDRESS. 
* 
*         EXIT   TO ORIGINAL ENTRY ADDRESS (FROM *EA*). 
*                A0, X0, X5, B2, B3 RESTORED. 
*                (X1) = CAPSULE ENTRY ADDRESS.
* 
*         USES   A1, A2, A5, X1, X2, X3, B4.
* 
*         CALLS  NONE.
  
  
 FDL=RSC  BSS    0
 RSC      SA5    SVA0        ENTRY
          SA1    A5+B1
          SA2    A1+B1
          SA0    X5-0        RESTORE A0 
          SB2    X1-0        B2 
          SB3    X2-0        B3 
          SA5    A2+B1       X5 
          SA1    A5+B1
          BX0    X1          X0 
          SA1    CM+2        GET CAPSULE ENTRY ADDRESS
          SA2    EA          LOAD ENTRY ADDRESS FROM CALLER 
          AX1    30 
          SB4    X2          GET RETURN ADDRESS 
          JP     B4          RETURN 
 SEA      TITLE  SEA - SET EXTERNAL ADDRESS.
**        SEA - SET EXTERNAL ADDRESS. 
* 
*         ENTRY  (A3) = FWA OF REFERENCE CHAIN. 
*                (X0) = -0 IF TO LINK, +0 IF TO DELINK. 
*                (X3) = FIRST WORD OF REFERENCE CHAIN.
*                (X4) = ADDRESS OF ENTRY POINT TO LINK/DELINK.
*                (B3) = CAPSULE FWA.
* 
*         EXIT   EXTERNAL REFERENCES LINKED OR DELINKED.
* 
*         USES   ALL BUT A0, A4, A5, X0, X4, B2, B3, B5.
* 
*         CALLS  NONE.
  
  
 SEA2     SA1    SEAA-1+X1   MAP PARCEL NUMBER INTO SHIFT COUNT 
          LX3    18          POSITION TO ADDRESS OF REFERENCE 
          SB4    X1          SET SHIFT COUNT
          SA2    B3+X3       GET WORD TO BE MODIFIED
          SX6    A2+400000B  ADDRESS + 400000B
          LX2    B4          POSITION WORD FOR MODIFICATION 
          BX1    X7*X2       REMOVE ADDRESS FIELD 
          IX6    X6-X4       ADDRESS + 400000B - ENTRY POINT ADDRESS
          SX2    X2          SIGN EXTEND CURRENT ADDRESS FIELD
          BX6    X6-X0       COMPLEMENT IF LINKING
          IX6    X6+X2       ADD LINK VALUE 
          BX2    -X7*X6      TRUNCATE TO 18 BITS
          SB4    B6-B4       SET COUNT FOR SHIFTING BACK
          SB7    B7-B1       DECREMENT CHAIN ENTRY COUNTER
          BX1    X1+X2       ADD REFENENCE VALUE BACK IN
          LX6    X1,B4       RESTORE TO CORRECT POSITION
          SA6    A2+         SAVE 
 +        PL     B7,SEA1     IF MORE INFO IN THIS WORD OF CHAIN 
          SA3    A3+B1       GET NEXT WORD
          SB7    B1+B1       RESET COUNTER
 SEA1     LX3    2
          BX1    -X5*X3      ISOLATE PARCEL NUMBER
          NZ     X1,SEA2     IF NOT ZERO, CONTINUE
  
 FDL=SEA  BSS    0
 SEA      SUBR               ENTRY/EXIT 
          SB6    60          (B6) = CONSTANT 60 
          SB7    B1          (B7) = (NUMBER OF REF FIELDS IN X3) - 1
          MX5    -2          (X5) = PARCEL NUMBER MASK
          MX7    -18         (X7) = RELOCATION FIELD MASK 
          LX3    20          POSITION TO FIRST GOOD CHAIN ENTRY 
          EQ     SEA1        ENTER LOOP 
  
  
 SEAA     CON    30          SHIFT = 30  (UPPER RELOCATION) 
          CON    45          SHIFT = 45  (MIDDLE RELOCATION)
          CON    60          SHIFT = 60  (LOWER RELOCATION) 
 SPE      TITLE  SPE - SCAN PASSLOCS AND ENTRIES. 
**        SPE - SCAN PASSLOCS AND ENTRIES.
* 
*         ENTRY  (A0) = CAPSULE FWA.
*                (X0) = -0 IF TO LINK, +0 IF TO DELINK. 
*                (X5) = PASSLOC TABLE FWA.
* 
*         EXIT   (A4) = PASSLOC TABLE FWA.
*                (B6) = 1 IF *PASSLOC* TABLE, 0 IF *ENTRY* TABLE. 
*                MATCHING ENTRY POINTS LINKED OR DELINKED.
* 
*         USES   ALL BUT A0, A5, X0.
* 
*         CALLS  NONE.
  
  
 SPE      SUBR               ENTRY/EXIT 
          SA1    A0 
          SA2    A0+B1
          AX1    36 
          SB2    X2          (B2) = RELATIVE FWA OF ENTRY POINT LIST
          SB3    B2+X1       (B3) = RELATIVE LWA+1
          SA4    X5          (A4) = PASSLOC TABLE FWA 
          MX1    -12
          AX4    36 
          BX1    -X1*X4 
          AX4    12 
          SB5    X1+B1       (B5) = PASSLOC LENGTH+1
          SX4    X4-CPASSLOC
          SX6    ERR.BPF     BAD PASSLOC FORMAT 
          SB6    B1          TWO WORDS PER TABLE ENTRY
          ZR     X4,SPE1     IF *PASSLOC* FORMAT
          SB6    B0          ONE WORD PER TABLE ENTRY 
          SX4    X4+CPASSLOC-CENTRY 
          NZ     X4,RSC      IF NOT PASSLOC TABLE, RETURN STATUS CODE 
 SPE1     SB3    B3-B1       DECREMENT ENTRY POINT LWA+1
          LT     B3,B2,EXIT. IF NO MORE ENTRY POINTS, EXIT
          SA3    A0+B3       LOAD ENTRY POINT WORD
          SB4    X3          SAVE ADDRESS 
          AX3    18          POSITION NAME
          MI     X6,SPE3     IF CURRENT PASSLOC NAME IS VALID 
 SPE2     SB5    B5-B1
          SB5    B5-B6       DECREMENT TABLE LENGTH 
          MI     B5,EXIT.    IF NO MORE PASSLOC ENTRIES, EXIT 
          SA1    A4+B5       PICK UP PASSLOC NAME 
          MX5    -18
          SA2    A1+B6       PICK UP ADDRESS
          AX1    18          POSITION NAME
 SPE3     IX6    X1-X3       COMPARE
          SX4    X2          ISOLATE ADDRESS. EXTEND BIT 17.
          MI     X6,SPE1     IF PASSLOC .LT. ENTRY
          NZ     X6,SPE2     IF PASSLOC .GT. ENTRY
          SX7    A0+B4       (X7) = RELOCATED ENTRY POINT ADDRESS 
          BX6    -X0*X7 
          PL     X4,SPE4     IF SATISFIED OR ZERO 
          MX4    0           UNSATISFIED ADDRESS BECOMES ZERO 
          BX2    X5*X2       CLEAR ADDRESS FIELD
 SPE4     IX6    X6-X4
          NZ     X6,SPE1     IF PASSLOC TABLE NOT TO BE CHANGED 
          BX7    X2-X7       SET/CLEAR ADDRESS
          SA7    A2          STORE MODIFIED WORD
          EQ     SPE1 
 SPL      TITLE  SPL - SCAN PASSLOC LIST. 
**        SPL - SCAN PASSLOC LIST.
* 
*         ENTRY  (A0) = CAPSULE FWA.
*                (X0) = -0 IF TO LINK, +0 IF TO DELINK. 
*                (SVX4) = PASSLOC LIST POINTER. 
* 
*         EXIT   PASSLOC TABLES PROCESSED.
* 
*         USES   ALL BUT A0, X0.
* 
*         CALLS  SPE, SPX.
  
  
 FDL=SPL  BSS    0
 SPL      SUBR               ENTRY/EXIT 
          SA1    SVX4 
          ZR     X1,EXIT.    IF NO PASSLOC TABLES 
          SA5    X1          GET FIRST TABLE ADDRESS
 SPL1     ZR     X5,EXIT.    IF END OF LIST 
          RJ     SPE         SCAN PASSLOCS AND ENTRIES
          PL     X0,SPL2     IF DELINKING 
          RJ     SPX         SCAN PASSLOCS AND EXTERNALS
 SPL2     SA5    A5+B1       GET NEXT TABLE 
          EQ     SPL1        LOOP 
 SPX      TITLE  SPX - SCAN PASSLOCS AND EXTERNALS. 
**        SPX - SCAN PASSLOCS AND EXTERNALS.
* 
*         ENTRY  (A0) = CAPSULE FWA.
*                (A4) = PASSLOC TABLE FWA.
*                (X0) = -0. 
*                (B6) = 0 IF *ENTRY* TABLE, 1 IF *PASSLOC* TABLE. 
* 
*         EXIT   MATCHING EXTERNALS SATISFIED.
* 
*         USES   ALL BUT A0, A4, A5, X0.
* 
*         CALLS  SEA. 
  
  
 SPX      SUBR               ENTRY/EXIT 
          SA1    A0 
          SA2    A0+B1
          LX1    -36
          SB3    X1 
          SB3    X2+B3       (B3) = RELATIVE FWA OF EXT REF LIST
          MX3    -12
          LX1    12 
          BX1    -X3*X1 
          SB2    B3+X1       (B2) = RELATIVE LWA+1
          SA4    A4 
          LX4    -36
          BX6    -X3*X4 
          SB5    X6+B1       (B5) = PASSLOC TABLE LENGTH
          SX7    B6          (B6) = 0 IF *ENTRY*, 1 IF *PASSLOC*
          SA7    SPXA        SAVE B6
 SPX1     SA3    SPXA 
          SB6    X3          RESTORE B6 
          SB5    B5-B1       DECREMENT TABLE LENGTH 
          SB5    B5-B6
          MI     B5,EXIT.    IF NO MORE PASSLOC ENTRIES, EXIT 
          SA1    A4+B5       LOAD PASSLOC NAME
          AX1    18          POSITION NAME
          MI     X6,SPX3     IF CURRENT ENTRY NAME IS VALID 
 SPX2     SB2    B2-B1       DECREMENT EXT TABLE LWA+1
          LT     B2,B3,EXIT. IF NO MORE EXTERNALS, EXIT 
          SA2    A0+B2       LOAD EXTERNAL NAME 
          MX7    -17
          BX3    -X7*X2      ISOLATE REFERENCE CHAIN ADDRESS
          AX2    18          POSITION NAME
          SB4    X3          SAVE RELATIVE FWA OF REFERENCE CHAIN 
 SPX3     IX6    X2-X1       COMPARE NAMES
          MI     X6,SPX1     IF EXTERNAL .LT. PASSLOC 
          NZ     X6,SPX2     IF EXTERNAL .GT. PASSLOC 
          SA1    A1+B6
          SX4    X1          (X4) = ADDRESS FROM PASSLOC TABLE
          ZR     X4,SPX1     IF ZERO, DONT BOTHER 
          MI     X4,SPX1     IF UNSATISFIED, DONT BOTHER
          MX7    -18
          BX5    -X7*X4      (X5) = 42/0, 18/ADDRESS
          SA3    A0+B4
          BX6    X3 
          LX6    -40
          SX7    X6 
          BX6    X6+X5       SET ADDRESS IN TOP OF CHAIN
          LX6    40 
          NZ     X7,SPX1     IF ADDRESS WAS ALREADY SET 
          SA6    A3 
          SB3    A0 
          RJ     SEA         SET EXTERNAL ADDRESS 
          SA1    A0 
          SA2    A0+B1
          LX1    -36
          SB3    X1          RESTORE B3 
          SB3    X2+B3
          MX6    0           FLAG X1 AS INVALID 
          EQ     SPX1        LOOP 
  
 SPXA     CON    0           TABLE TYPE, 0 IF *ENTRY*, 1 IF *PASSLOC* 
          SPACE  4
          END 
