CPUMLD
          IDENT  CPUMLD 
          SST 
  
          ENTRY  CPUMLD 
  
          SYSCOM B1 
*COMMENT  CPUMLD - *CPUMTR* LOADER. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  CPUMLD - CPUMTR LOADER.
          SPACE  4
***       CPUMLD - CPUMTR LOADER. 
*         J.R. HOGUE/J.C. BOHNHOFF.  75/02/17.
          SPACE  4
***              CPUMLD LOADS AND RELOCATES CPUMTR. 
* 
*             CPUMTR IS ORGANIZED TO PLACE OPTIONAL CODE INTO BLOCKS
*         WHICH CAN BE LOADED OR IGNORED AT DEAD START TIME, DEPENDING
*         UPON WHICH FEATURES ARE TO BE USED BY THE OPERATING SYSTEM. 
*             CPUMLD IS A SIMPLE RELOCATING LOADER WHICH WILL BE
*         LOADED INTO CENTRAL CORE AT DEAD START TIME BY STL. CPUMLD
*         WILL THEN READ THE CPUMTR BINARIES FROM THE DEAD START TAPE 
*         (USING STL FOR THE TAPE READS) AND WILL DECIDE WHICH BLOCKS 
*         ARE TO BE LOADED AND WHICH ARE TO BE BYPASSED.
* 
*             CPUMLD CAN BE USED IN BATCH MODE FOR VALIDATION THAT A
*         CPUMTR BINARY WILL LOAD WITHOUT ERRORS. IN SUCH A CASE, 
*         CPUMLD REWINDS AND READS THE CPUMTR BINARIES FROM FILE
*         *LGO*.  THE LOAD ADDRESS FOR THE MAIN PART OF *CPUMTR*
*         IS SET TO 20000B.  THE LOAD ADDRESS FOR THE PRESET PART 
*         OF *CPUMTR* IS SET TO 10000B.  NORMALLY, THE MAIN PART
*         OF *CPUMTR* WILL BE LOADED IN ITS PROPER PLACE IN *CMR*.
          SPACE  4,10 
***       DAYFILE MESSAGES (BATCH MODE).
*         SYSTEM CONTROL POINT MESSAGES (DEADSTART LOAD). 
* 
*         * BLOCK ORIGIN TABLE OVERFLOW.* - TOO MANY COMMON BLOCKS FOR
*         ASSEMBLED BLOCK ORIGIN TABLE BUFFER SIZE. 
* 
*         * INVALID LOADER INPUT.* - UNIDENTIFIED LOADER TABLE
*         ENCOUNTERED, PREMATURE EOR ENCOUNTERED, OR FILL OR XFILL
*         TABLE HAS CONDITIONAL RELOCATION BASE DESIGNATOR SPECIFIED
*         IN ITS HEADER WORD. 
* 
*         * LOADER TABLE OVERFLOW.* - PRFX, TEXT, ENTR, OR XFER 
*         LOADER TABLE WAS ENCOUNTERED THAT WAS TOO LARGE FOR 
*         ASSEMBLED LOADER TABLE BUFFER SIZE. 
* 
*         * RELOCATION TABLE OVERFLOW.* - ASSEMBLED FILL OR XFILL 
*         TABLE BUFFER SIZE WAS NOT LARGE ENOUGH TO ACCOMODATE ALL
*         ACCUMULATED FILL OR XFILL TABLE RELOCATION ENTRIES. 
          SPACE  4
*         COMMON DECKS. 
  
  
*CALL,COMCMAC 
          QUAL   DSL
*CALL     COMSDSL 
          QUAL   *
          SPACE  4
*         TABLE LENGTHS.
  
 .BOL     EQU    /DSL/CPBL   MAXIMUM NUMBER OF BLOCKS 
 .FBL     EQU    10000B      FILL TABLE LENGTH
 .TBL     EQU    20B         LOADER TABLE LENGTH
 .XFL     EQU    400B        XFILL TABLE LENGTH 
 MACROS   SPACE  4,10 
*         MACROS. 
  
**        BAST - BLOCK ASSOCIATION TABLE MACRO. 
* 
*             BAST IS USED TO DEFINE BLOCKS WHICH ARE TO BE LOADED OR 
*         IGNORED AT DEAD START.  THIS MACRO MAY BE USED TO DEFINE TWO
*         ASSOCIATED BLOCKS OF WHICH ONE IS LOADED DURING DEADSTART OR
*         IT MAY BE USED TO DEFINE A SINGLE BLOCK WHICH MAY BE
*         LOADED OR IGNORED AT DEADSTART. 
* 
*         FORMAT -
* 
* TAG     BAST   BN,ABN 
* 
*         ENTRY  BN - BLOCK NAME.  (DEFAULT BLOCK TO LOAD)
*                ABN - ALTERNATE BLOCK TO LOAD IF PRESENT.
  
  
          MACRO  BAST,TAG,BN,ABN
 TAG      VFD    42/0L_BN,18/1
          IFC    NE,*ABN**,1
          VFD    42/0L_ABN,18/0 
          ENDM
 MACROS   TITLE  RELOCATION MACROS. 
 INMOD    SPACE  4
**        INMOD - THIS MACRO IN CONJUNCTION WITH THE FOLLOWING OPDEF,S
*         MAKES IT POSSIBLE TO SPECIFY A MODIFIER ON ALL 30 BIT 
*         INCREMENT INSTRUCTIONS.  THIS MODIFER MUST BE IN THE FORM 
*         OF A POINTER TO ONE OF THE TABLE POINTERS THAT IS SET 
*         DYNAMICALLY AT INITIALIZATION TIME. THE INSTRUCTION WILL
*         BE MODIFIED DURING INITIALIZATION.
*         THIS IS USEFUL FOR ACCESSING THE POINTERS THAT ARE
*         DYNAMICALLY SET AT INITIALIZATION TIME SUCH AS THE ORGIN
*         ADDRESS.
* 
*         DEFINITIONS.
* 
*         INMOD  PTRA,LWAF
* 
*         PTRA = POINTER DESIRED. 
*         LWAF = IF DEFINED TAKE LWA INSTEAD OF FWA.
* 
*         EXAMPLE-
*         TX6    0,OB 
*         THIS WILL GENERATE A 30 BIT INSTRUCTION OF THE FOLLOWING FORM 
*         SX6    B0+K 
*         WHERE K = THE FIRST WORD ADDRESS FOR CPUMTR RELOCATION. 
  
  
 INMOD    MACRO  PTRA,LWAF
          LOCAL  INM1,INM2
 INM1     SET    *P 
 INM2     SET    *
          IFEQ   INM1,60,2
 INM1     SET    0
 INM2     SET    *-1
 TINST    RMT 
          VFD    12/2000B+INM1
          VFD    18/PTRA
          IFC    EQ,*LWAF** 
          VFD    12/0 
          ELSE   1
          VFD    12/4000B 
          VFD    18/INM2
 TINST    RMT 
          ENDM
 OPDEFS   SPACE  4
**        OPDEF,S USED WITH INMOD.
  
  
 TAAQ,Q   OPDEF  P1,P2,P3,P4
          SA.P1  A.P2+P3
          INMOD  P4 
          ENDM
  
  
 TAA,Q    OPDEF  P1,P2,P4 
          SA.P1  A.P2+0 
          INMOD  P4 
          ENDM
  
  
 TAAQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SA.P1  A.P2+P3
          INMOD  P4,P5
          ENDM
  
  
          CTEXT  REMAINING OPDEF,S USED WITH INMOD. 
 TAA,Q,Q  OPDEF  P1,P2,P4,P5
          SA.P1  A.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TABQ,Q   OPDEF  P1,P2,P3,P4
          SA.P1  B.P2+P3
          INMOD  P4 
          ENDM
  
  
 TAB,Q    OPDEF  P1,P2,P4 
          SA.P1  B.P2+0 
          INMOD  P4 
          ENDM
  
  
 TABQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SA.P1  B.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TAB,Q,Q  OPDEF  P1,P2,P4,P5
          SA.P1  B.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TAXQ,Q   OPDEF  P1,P2,P3,P4
          SA.P1  X.P2+P3
          INMOD  P4 
          ENDM
  
  
 TAX,Q    OPDEF  P1,P2,P4 
          SA.P1  X.P2+0 
          INMOD  P4 
          ENDM
  
  
 TAXQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SA.P1  X.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TAX,Q,Q  OPDEF  P1,P2,P4,P5
          SA.P1  X.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TAQ,Q    OPDEF  P1,P3,P4 
          SA.P1  B0+P3
          INMOD  P4 
          ENDM
  
 TAQ,Q,Q  OPDEF  P1,P3,P4,P5
          SA.P1  B0+P3
          INMOD  P4,P5
          ENDM
  
  
 TBAQ,Q   OPDEF  P1,P2,P3,P4
          SB.P1  A.P2+P3
          INMOD  P4 
          ENDM
  
  
 TBA,Q    OPDEF  P1,P2,P4 
          SB.P1  A.P2+0 
          INMOD  P4 
          ENDM
  
  
 TBAQ,Q,Q OPDEF  P1,P2,P3,P4,Q5 
          SB.P1  A.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TBA,Q,Q  OPDEF  P1,P2,P4,P5
          SB.P1  A.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TBBQ,Q   OPDEF  P1,P2,P3,P4
          SB.P1  B.P2+P3
          INMOD  P4 
          ENDM
  
  
 TBB,Q    OPDEF  P1,P2,P4 
          SB.P1  B.P2+0 
          INMOD  P4 
          ENDM
  
 TBBQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SB.P1  B.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TBB,Q,Q  OPDEF  P1,P2,P4,P5
          SB.P1  B.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TBXQ,Q   OPDEF  P1,P2,P3,P4
          SB.P1  X.P2+P3
          INMOD  P4 
          ENDM
  
  
 TBX,Q    OPDEF  P1,P2,P4 
          SB.P1  X.P2+0 
          INMOD  P4 
          ENDM
  
  
 TBXQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SB.P1  X.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TBX,Q,Q  OPDEF  P1,P2,P4,P5
          SB.P1  X.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TBQ,Q    OPDEF  P1,P3,P4 
          SB.P1  B0+P3
          INMOD  P4 
          ENDM
  
  
 TBQ,Q,Q  OPDEF  P1,P3,P4,P5
          SB.P1  B0+P3
          INMOD  P4,P5
          ENDM
  
  
 TXAQ,Q   OPDEF  P1,P2,P3,P4
          SX.P1  A.P2+P3
          INMOD  P4 
          ENDM
  
  
 TXA,Q    OPDEF  P1,P2,P4 
          SX.P1  A.P2+0 
          INMOD  P4 
          ENDM
  
  
 TXAQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SX.P1  A.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TXA,Q,Q  OPDEF  P1,P2,P4,P5
          SX.P1  A.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TXBQ,Q   OPDEF  P1,P2,P3,P4
          SX.P1  B.P2+P3
          INMOD  P4 
          ENDM
  
  
 TXB,Q    OPDEF  P1,P2,P4 
          SX.P1  B.P2+0 
          INMOD  P4 
          ENDM
  
  
 TXBQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SX.P1  B.P2+P3
          INMOD  P4,P5
          ENDM
  
 TXB,Q,Q  OPDEF  P1,P2,P4,P5
          SX.P1  B.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TXXQ,Q   OPDEF  P1,P2,P3,P4
          SX.P1  X.P2+P3
          INMOD  P4 
          ENDM
  
  
 TXX,Q    OPDEF  P1,P2,P4 
          SX.P1  X.P2+0 
          INMOD  P4 
          ENDM
  
  
 TXXQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SX.P1  X.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TXX,Q,Q  OPDEF  P1,P2,P4,P5
          SX.P1  X.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TXQ,Q    OPDEF  P1,P3,P4 
          SX.P1  B0+P3
          INMOD  P4 
          ENDM
  
  
 TXQ,Q,Q  OPDEF  P1,P3,P4,P5
          SX.P1  B0+P3
          INMOD  P4,P5
          ENDM
  
  
 TJP      MACRO  P1,P3
 .1       MICRO  1,, P1 
          JP     ".1" 
          INMOD  P3 
          ENDM
  
  
 TNZ      MACRO  P1,P3
 .1       MICRO  1,, P1 
          NZ     ".1",0 
          INMOD  P3 
          ENDM
          ENDX
 TVFD     SPACE  4
**        TVFD - DEFINE A RELOCATABLE *VFD*.
* 
*         TVFD   N/V,X
* 
*         ENTRY  *N* = BIT COUNT
*                *V* = VALUE
*                *R* = ADDRESS OF RELOCATION VALUE
*                IF *R* IS NOT PRESENT, THE ORIGIN WILL BE USED 
*                FOR RELOCATION.
  
  
 TVFD     MACRO  V,R
*                            EXTRACT FIELD WIDTH
 .1       MICRO  1,,/V
 .1       MICCNT .1 
*                            CHECK FOR RELOCATION REQUIRED
 .2       MICRO  .1+2,, V 
          IF     DEF,".2",3 
          IF     -REL,".2",2
          VFD    ".1"/".2"
 .1       SKIP
*                            PROCESS RELOCATION 
          VFD    ".1"/".2"-ORG
          INMOD  OB 
 .1       ENDIF 
          IFC    NE,$R$$,1
          INMOD  R
          ENDM
 CPUMLD   TITLE  MAIN PROGRAM.
  
 ORG      BSS    0           FWA OF PROGRAM 
  
 CPUMLD   SPACE  4,10 
**        MAIN PROGRAM. 
* 
*         ENTRY  (X4) = MACHINE FL IF DEADSTART MODE. 
*                     = 0 IF BATCH MODE.
*                (X5) = MACHINE FLX IF DEADSTART MODE.
*                     = UNDEFINED IF BATCH MODE.
*                (B6) = ECS EQUIPMENT.
*         CPUMLD SAVES B3 - B6, X2 - X5 FOR ENTRY TO CPUMTR.
  
 CPUMLD   BSS    0           ENTRY
  
*         INITIALIZE. 
  
          SB1    1           CONSTANT ONE 
          RJ     PRS         PRESET 
          RJ     RRB         READ RELOCATABLE BLOCK 
          SA2    .RL         SET BUFFER LENGTH
          BX7    X2 
          SA7    RRBA 
          SB3    LTPT2
          RJ     RTB         SKIP 77 TABLE
          ZR     X1,ERR1     IF NO 77 TABLE 
  
*         PROCESS LOADER TABLES.
  
 CPUR     BSS    0           RETURN FROM TABLE PROCESSORS 
          SB3    LTPT 
          RJ     RTB         READ ONE TABLE 
          ZR     X1,CPU2     IF EOR 
  
**        ENTRY CONDITIONS FOR TABLE PROCESSORS - 
*         TABLE IN .BO, .FB, .TB, OR .XF BUFFER, AS DEFINED BY
*         *LTPT* TABLE. 
*         (B2) = WORD COUNT OF TABLE. 
*         (B3) = ADDRESS OF ENTRY IN *LTPT* TABLE + 2.
*         (B4) = LWA+1 LOADER TABLE IN BUFFER.
*         (X3) = *ERRA* ERROR MESSAGE ADDRESS.
*         (X5) = FIRST WORD OF TABLE. 
  
          JP     B6          PROCESS TABLE
  
*         RELOCATE ADDRESSES IN *CPUMTR* BINARY.
  
 CPU2     RJ     FIL         PROCESS RELOCATION ENTRIES 
          RJ     VFD         PROCESS VFD RELOCATION ENTRIES 
  
*         SET EXIT ADDRESS AFTER REGISTER MOVE. 
  
          SA1    .BC
          NZ     X1,CPU3     IF NOT BATCH MODE
          SX7    CPU6        REENTER AT *CPU6* AFTER RESTORE
          SA7    .EP
*         JP     CPU3 
  
*         PLACE LIST OF LOADED BLOCK NAMES AT END OF BINARIES.
  
 CPU3     SA5    .LL         BINARY LOAD LENGTH 
          SB3    .BOL-2 
          BX7    X7-X7
          SB7    X5 
          SA1    .CP+2       INITIALIZE SEARCH FOR LOADED BLOCKS
  
 CPU4     SB3    B3-B1
          ZR     B3,CPU5     IF ALL BLOCKS CHECKED
          SA1    A1+B1       CHECK NEXT BLOCK 
          ZR     X1,CPU4     IF BLOCK NOT LOADED
          SA2    A1+.BO-.CP  READ BLOCK NAME
          BX6    X2 
          SB7    B7+B1       ADVANCE LOAD LENGTH
          SA6    B7-1 
          EQ     CPU4 
  
 CPU5     SA7    B7+         TERMINATE LIST 
          SB7    B7+1 
          SA3    .EP         SET ENTRY POINT ADDRESS
          SB2    X3 
          SA3    .ER         RESTORE REGISTERS
          SA2    A3+B1
          SB3    X3 
          SB4    X2 
          SA3    A2+B1
          SB5    X3 
          SA3    A3+B1
          SA2    A3+B1
          BX5    X3 
          SA3    A2+B1
          BX4    X2 
          SA2    A3+1 
          JP     B2          ENTER *CPUMTR* 
  
*         INITIALIZE LOW CORE FOR BATCH MODE CHECKPOINTING. 
  
 CPU6     SB3    *           CLEAR LOW CORE 
          SB2    B1+B1
          BX7    X7-X7
  
+         SA7    B2 
          SB2    B2+B1
          NE     B2,B3,*     LOOP 
  
          TB3    0,PBUF      CLEAR HIGH CORE TO START OF *PRESET* 
          SB2    ENOV 
  
+         SA7    B2 
          SB2    B2+B1
          NE     B2,B3,*     LOOP 
  
          MESSAGE CPUC,1     * END CPUMLD.* 
  
          ENDRUN
  
  
 CPUC     DATA   C* END CPUMLD.*
          SPACE  4
*CALL     COMCSYS 
  
 ENOV     BSS    0           END OF NONOVERLAYABLE AREA 
          SPACE  4,10 
**        LTPT - LOADER TABLE PROCESSOR TABLE.
* 
*         2 WORD ENTRIES -
*T        12/TID,30/,18/PRAD
*T        6/,18/EMOF,18/BUFL,18/FWA 
*                TID         LOADER TABLE BINARY IDENTIFIER 
*                PRAD        LOADER TABLE PROCESSOR ADDRESS 
*                EMOF        TABLE OVERFLOW ERROR MESSAGE OFFSET
*                BUFL        LOADER TABLE BUFFER LENGTH 
*                FWA         FWA LOADER TABLE BUFFER
  
  
 LTPT     BSS    0
          VFD    12/3400B,30/0,18/PID  PIDL LOADER TABLE
          VFD    6/0,18/ERRB-ERRA,18/.BOL,18/.BO+2
          VFD    12/3600B,30/0,18/ENT  ENTR LOADER TABLE
          VFD    6/0,18/ERRD-ERRA,18/.TBL,18/.TB
          VFD    12/4000B,30/0,18/TXT  TEXT LOADER TABLE
          VFD    6/0,18/ERRD-ERRA,18/.TBL,18/.TB
          VFD    12/4200B,30/0,18/ABP  FILL LOADER TABLE
 FBAE     VFD    6/0,18/ERRC-ERRA,18/.FBL,18/.FB
          VFD    12/4100B,30/0,18/ABP  XFILL LOADER TABLE 
 XFAE     VFD    6/0,18/ERRC-ERRA,18/.XFL,18/.XF
          VFD    12/4600B,30/0,18/XFR  XFER LOADER TABLE
          VFD    6/0,18/ERRD-ERRA,18/.TBL,18/.TB
          CON    0           END OF TABLE 
  
  
 LTPT2    BSS    0
          VFD    12/7700B,30/0,18/0    PRFX TABLE 
          VFD    6/0,18/ERRD-ERRA,18/.TBL,18/.TB
          CON    0           END OF TABLE 
          TITLE  GLOBAL STORAGE.
*         GLOBAL STORAGE. 
  
  
 .ER      BSS    7           BUFFER TO SAVE REGISTERS FOR *CPUMTR*
 .RP      CON    0,0         NEXT RELOCATABLE WORD POINTER
 .RL      EQU    .RP+1       CURRENT RELOCATABLE BUFFER LIMIT 
 .TB      BSS    .TBL        LOADER TABLE BUFFER
 .BO      VFD    42/0        BLOCK ORIGINS
          TVFD   18/0,OB
          BSS    .BOL-1 
 .CP      CON    0           CURRENT POSITION IN LOAD BUFFER
          VFD    42/0 
          TVFD   18/0,MBUF
          BSS    .BOL-2 
 .LL      CON    0           TOTAL LOAD LENGTH
 .EP      CON    0           CPUMTR ENTRY POINT ADDRESS 
 .BC      CON    1           BATCH MODE FLAG
 .FB      BSS    .FBL        FILL TABLE 
 .XF      BSS    .XFL        XFILL TABLE
          TITLE  LOADER TABLE PROCESSORS. 
 ABP      SPACE  4,10 
**        ABP - ADVANCE BUFFER POINTER. 
* 
*         EXIT   *LTPT* TABLE ENTRY BUFFER FWA ADVANCED.
*                TO *ERR1* IF HEADER WORD HAS CONDITIONAL RELOCATION
*                BASE DESIGNATOR SPECIFIED. 
* 
*         USES   A - 2, 6.
*                X - 0, 1, 4, 5, 6. 
  
  
 ABP      BSS    0           ENTRY
          SA2    B3-B1       ADVANCE BUFFER FWA 
          MX0    42 
          SX4    B2          DECREMENT BUFFER LENGTH
          SX1    B4 
          BX6    X0*X2
          LX4    18 
          BX6    X6+X1
          LX5    59-20
          IX6    X6-X4
          AX5    51 
          SA6    A2+
          NZ     X5,ERR1     IF CONDITIONAL RELOCATION BASE SPECIFIED 
          EQ     CPUR        RETURN 
 ENT      SPACE  4,10 
**        ENT - PROCESS ENTR TABLE. 
* 
*         EXIT   (.EP)= ADDRESS OF CPUMTR ENTRY.
* 
*         USES   A - 1, 6.
*                X - 0, 1, 2, 6, 7. 
  
  
 ENT      BSS    0           ENTRY
          MX7    -18
          SA1    .TB+B1      READ ENTRY LOCATION
          SX2    X1          RELATIVE ADDRESS 
          LX1    0-18        EXTRACT BLOCK NUMBER 
          MX0    -9 
          BX6    -X0*X1 
          SX0    X6-3 
          SA1    .BO         ASSUME PROGRAM BLOCK RELOCATION
          NG     X0,ENT1     IF PROGRAM BLOCK 
          SA1    .BO+X6      READ COMMON BLOCK ORIGIN ADDRESS 
 ENT1     BX7    -X7*X1      RELOCATE ENTRY 
          IX6    X7+X2
          SA6    .EP
          JP     CPUR        RETURN 
 FIL      SPACE  4,10 
**        FIL - PROCESS FILL TABLE. 
* 
*         ENTRY  (.FB) = ACCUMULATED FILL TABLE DATA. 
*                (FBAE) = LWA+1 DATA IN FILL TABLE. 
* 
*         USES   A - 1, 3, 5, 6, 7. 
*                B - 2, 3, 5, 6, 7. 
*                X - ALL. 
  
  
 FIL      SUBR               ENTRY/EXIT 
          SA1    FBAE        GET LWA+1 DATA IN FILL TABLE 
          MX4    2           CONTROL BIT MASK 
          SB2    X1 
          SB5    B1+B1       SET RELOCATABLE ENTRIES PER WORD COUNT 
          LX4    2+27 
          SA5    .FB         FIRST WORD IN FILL TABLE 
  
*         RELOCATE ADDRESSES. 
  
 FIL1     MX0    -9 
          PL     X5,FIL4     IF CONTROL BYTE
          LX5    12          EXTRACT RELOCATION INDEX 
          BX2    -X0*X5 
          SA3    .CP+X2      BLOCK WHICH CONTAINS RELOCATION WORD 
          LX5    18 
          SB6    X3 
          ZR     B6,FIL2     IF RELOCATING IN A NON-LOADED BLOCK
          BX2    X4*X5       EXTRACT CONTROL BITS 
          LX2    -27
          SA3    X5+B6       WORD TO BE RELOCATED 
          SA2    X2+FILA     SHIFT COUNT FOR RELOCATION POSITION
          BX6    X1 
          MX7    -18
          SB3    X2          SHIFT COUNT FOR RELOCATION POSITION
          LX7    30 
          AX6    X6,B3
          AX7    X7,B3
          BX2    X7+X3       EXTRACT FIELD TO RELOCATE
          IX6    X2+X6       ADD RELOCATION VALUE 
          BX3    X7*X3       CLEAR FIELD IN WORD
          BX6    -X7*X6      EXTRACT RELOCATED FIELD
          BX6    X3+X6       MERGE RELOCATED FIELD
          SA6    A3 
 FIL2     SB5    B5-B1
          NZ     B5,FIL1     IF MORE RELOCATABLE ENTRIES IN WORD
          SB5    B1+B1       RESET RELOCATABLE ENTRIES PER WORD COUNT 
          SB7    A5+B1
          GE     B7,B2,FILX  IF END OF FILL TABLE 
          SA5    B7 
          EQ     FIL1        PROCESS NEXT RELOCATION ENTRY
  
*         REPLACE BLOCK INDEX.
  
 FIL4     LX5    30          SET BLOCK ORIGIN 
          BX2    -X0*X5 
          SA1    .BO+X2 
          SX1    X1 
          LX1    30 
          EQ     FIL2 
  
  
*         SHIFT COUNTS TO POSITION RELOCATION VALUE.
  
 FILA     BSS    0
          CON    30          LOWER
          CON    15          MIDDLE 
          CON    0           UPPER
          CON    48          UNDEFINED (SHIFT END OFF)
 PID      SPACE  4,10 
**        PID - PROCESS PIDL TABLE. 
* 
*         ENTRY  (B2) = TABLE WORD COUNT. 
* 
*         EXIT   (.BO) = BLOCK ORIGINS. 
*                (.LL) = TOTAL LOAD LENGTH. 
* 
*         USES   B - 2, 3.
*                A - 1, 2, 3, 4, 6, 7.
*                X - 0, 1, 2, 3, 4, 6, 7. 
* 
*         CALLS  SBT. 
  
  
 PID      BSS    0           ENTRY
          TX6    0,OB        PRESET PROGRAM BLOCK ORIGIN
          SA1    .BO+2       ASSIGN BLOCK ORIGINS 
          BX0    X6 
          SA6    .BO
          BX7    -X0
          SX1    X1 
          SA6    A6+B1
          IX0    X6+X1       ORIGIN OF NEXT BLOCK 
          SA7    A6+B1
 PID1     SA1    A1+1 
          SB2    B2-B1       DECREMENT BLOCK COUNT
          BX7    X0 
          ZR     B2,PID4     IF END OF BLOCKS 
  
*         CHECK IF BLOCK TO BE LOADED.
  
          RJ     SBT
          SX4    X4 
          MX7    42 
          SX2    X1          LOAD LENGTH OF THIS BLOCK
          BX1    X7*X1       BLOCK NAME 
          ZR     X4,PID3     IF BLOCK NOT TO BE LOADED
          SX6    A4-SPBOL 
          PL     X6,PID2     IF NOT SPECIAL ORIGIN BLOCK
          SX6    A1          SAVE POINTER 
          SX3    A4-PIDA
          SX7    A4-SBDR
          SA6    SPBP+X3
          PL     X7,PID1     IF BLOCK RELOCATION DEFERRED 
          SA3    .BC
          ZR     X3,PID2     IF BATCH MODE
          SA4    SPBO        GET SPECIAL BLOCK ORIGIN ADDRESS 
          BX7    X4 
          IX6    X4+X2       ADVANCE SPECIAL BLOCK ORIGIN ADDRESS 
          SA7    A1-.BO+.CP  SET LOAD BUFFER ADDRESS
          SA6    A4 
          EQ     PID3        SET BLOCK ORIGIN ADDRESS 
  
 PID2     BX4    X0 
          IX0    X0+X2       ADVANCE ORIGIN ADDRESS 
          TX7    X4,-OB 
          TX7    X7,MBUF
          SA7    A1-.BO+.CP  RELOCATED ORIGIN ADDRESS 
          SX6    A4-ECS 
          NZ     X6,PID3     IF NOT *EM* BLOCK
  
*         REDUCE EM LWA.
  
          SA2    MEFL 
          SX0    X0-400B
          SX6    B1+B1
          MX7    -2 
          LX2    -29
          BX2    -X7*X2 
          SB3    X2+4 
          LX6    B3 
          IX0    X0+X6       LWA = LWA - (2*200B) + (2*SECTOR LIMIT)
 PID3     BX6    X4+X1       BLOCK NAME + ORIGIN ADDRESS
          SA6    A1          SET BLOCK ORIGIN ADDRESS 
          EQ     PID1        PROCESS NEXT BLOCK 
  
 PID4     TX0    0,PBUF      LOAD ADDRESS FOR PRESET CODE 
          SB2    SBDR-PIDA
          MX3    42 
          BX7    X0 
 PID5     SA2    SPBP+B2     GET POINTER
          SB2    B2+B1
          SA1    X2 
          SX4    B2-SPBPL 
          SX2    X1 
          BX1    X3*X1       BLOCK NAME 
          BX6    X1+X0
          IX0    X0+X2
          SA7    A1-.BO+.CP  RELOCATED ORIGIN ADDRESS 
          IX7    X7+X2
          SA6    A1          SET BLOCK ORIGIN ADDRESS 
          NG     X4,PID5     IF MORE RELOCATIONS
          SX7    X0          LWA+1 OF LOAD
          SA7    .LL
          EQ     CPUR        RETURN 
  
*         TABLE OF KNOWN CPUMTR BLOCKS. 
  
 PIDA     BSS    0
  
 XP176    BAST   XP176
 XP819    BAST   XP819
 SBDR     EQU    *           START OF BLOCKS WITH DEFERRED RELOCATION 
 PRESET   BAST   PRESET 
 TREL     BAST   TREL        RELOCATION DATA BLOCK
 TJMP     BAST   TJMP 
 TBLK     BAST   TBLK        LOADED BLOCKS NAME TABLE BLOCK 
 SPBOL    EQU    *           SPECIAL ORIGIN BLOCKS LIMIT
 CME      BAST   CME,0CME 
 CMU      BAST   CMU,0CMU 
 CMUMTR   BAST   CMUMTR,0CMUMTR 
 CPP      BAST   CPP
 PCP      BAST   PCP
 DCP      BAST   DCP
 NVE      BAST   NVE
 SUBCP    BAST   SUBCP
 ISDMMF   BAST   ISDMMF 
 MMF      BAST   MMF
 LSPMMF   BAST   LSPMMF 
 BIOMMF   BAST   BIOMMF 
 ISD      BAST   ISD
 VMS      BAST   VMS
 SCP      BAST   SCP
 SCPUEC   BAST   SCPUEC 
 CSE      BAST   CSE
 ECS      BAST   ECS
 ECSBUF   BAST   ECSBUF 
 EEC      BAST   EEC
 EUE      BAST   EUE
 SUE      BAST   SUE
 MMFBUF   BAST   MMFBUF 
 CP830    BAST   CP830
 CP176    BAST   CP176
 IH819    BAST   IH819
 IHPFMD   BAST   IHPFMD 
 BUFIO    BAST   BUFIO
 PROBE    BAST   PROBE
 TRACE    BAST   TRACE
 MCE      BAST   MCE
 UEC      BAST   UEC
  
          CON    1           DEFAULT LOAD ANY *UNKNOWN* BLOCK 
  
 PIDAL    EQU    *-PIDA 
  
 SPBO     CON    0           SPECIAL BLOCKS ORIGIN
  
 SPBP     BSS    SPBOL-PIDA  SPECIAL BLOCK POINTERS 
 SPBPL    EQU    *-SPBP 
 TXT      SPACE  4,10 
**        TXT - PROCESS TEXT TABLE. 
* 
*         ENTRY  (B2) = TABLE WORD COUNT. 
*                (X5) = TEXT TABLE CONTROL WORD.
* 
*         USES   A - 1, 2, 3, 5, 7. 
*                B - 3, 4, 6, 7.
*                X - ALL. 
  
  
 TXT      BSS    0           ENTRY
  
*         INITIALIZE TEXT RELOCATION LOOP.
  
          SB6    X5          RELATIVE ADDRESS IN BLOCK
          SB7    B2-B1       (B7) = WORD COUNT
          LX5    -18
          SB4    X5 
          SA2    X5+.CP      CURRENT POSITION IN LOAD BUFFER
          ZR     X2,CPUR     IF NOT LOADING THIS BLOCK
          SB3    TXTB        (B3) = ADDRESS MASKS 
          SA1    .TB         (X1) = CONTROL WORD
          SB6    B6+X2
          MX0    -4          BYTE MASK
          SA3    B6-B1
          LX1    4           SHIFT TO FIRST BYTE
          BX4    -X0*X1      FIRST CONTROL BYTE 
          SA5    A1+B1       FIRST TEXT WORD
          BX7    X3 
          SA2    B3+X4       FIRST ADDRESS MASK WORD
          LX1    4           SHIFT TO NEXT CONTROL BYTE 
          SA4    A2+TXTA-TXTB FIRST RELOCATION WORD 
          SA7    A3 
  
*         TEXT RELOCATION LOOP. 
*         THE FOLLOWING PROCEDURE RELOCATES ADDRESSES IN ONES-S 
*         COMPLEMENT ARITHMETIC FOR ALL ADDRESS FIELDS IN TEXT WORDS. 
*         (1.)  COMPLEMENT ADDRESSES. 
*         (2.)  ADD TO RELOCATE.
*         (3.)  COMPLEMENT RESULT.
*         (4.)  MERGE RELOCATED ADDRESSES WITH TEXT WORD. 
  
 TXT2     BX7    -X5*X2      EXTRACT COMPLEMENT ADDRESS FIELDS
          BX6    -X2*X5      REMOVE ADDRESSES FROM TEXT 
          IX7    X7+X4       ADD COMPLEMENT ADDRESSES 
          BX5    -X0*X1      NEXT RELOCATION BYTE 
          BX3    -X2*X7      EXTRACT CARRYS 
          BX7    -X7*X2      MASK AND COMPLIMENT ADDRESSES
          AX3    18 
          SA2    X5+B3       NEXT ADDRESS MASK WORD 
          SA5    A5+B1       NEXT TEXT WORD 
          SA4    A2+TXTA-TXTB NEXT RELOCATION WORD
          IX7    X7-X3       ADD CARRYS 
          LX1    4           SHIFT CONTROL WORD 
          BX7    X7+X6       INSERT RELOCATED ADDRESSES 
          SB7    B7-B1       DECREMENT WORD COUNT 
          SA7    A7+B1       STORE PREVIOUS WORD
          NZ     B7,TXT2     LOOP FOR ALL TEXT WORDS
          JP     CPUR        RETURN 
 TXTA     SPACE  4
**        TXTA - TABLE OF COMPLEMENT RELOCATION ADDRESSES.
*         INDEXED BY RELOCATION CONTROL BYTES.
*         GENERATED BY *PIDL* PROCESSOR.
  
  
 TXTA     BSS    0
  
          VFD    60/0 
          VFD    60/0 
          VFD    42/0 
          TVFD   18/0,-OB 
          VFD    42/0 
          TVFD   18/0,OB
  
          VFD    27/0 
          TVFD   18/0,-OB 
          VFD    15/0 
          VFD    27/0 
          TVFD   18/0,-OB 
          VFD    15/0 
          VFD    27/0 
          TVFD   18/0,OB
          VFD    15/0 
          VFD    27/0 
          TVFD   18/0,OB
          VFD    15/0 
  
          VFD    12/0 
          TVFD   18/0,-OB 
          VFD    30/0 
          VFD    12/0 
          TVFD   18/0,-OB 
          VFD    30/0 
          VFD    12/0 
          TVFD   18/0,-OB 
          VFD    12/0 
          TVFD   18/0,-OB 
          VFD    12/0 
          TVFD   18/0,-OB 
          VFD    12/0 
          TVFD   18/0,OB
  
          VFD    12/0 
          TVFD   18/0,OB
          VFD    30/0 
          VFD    12/0 
          TVFD   18/0,OB
          VFD    30/0 
          VFD    12/0 
          TVFD   18/0,OB
          VFD    12/0 
          TVFD   18/0,-OB 
          VFD    12/0 
          TVFD   18/0,OB
          VFD    12/0 
          TVFD   18/0,OB
 TXTB     SPACE  4
**        TXTB - TABLE OF ADDRESS MASKS.
*         INDEXED BY RELOCATION CONTROL BYTES.
  
  
          BSS    1           (AVOID BANK CONFILCTS) 
 TXTB     BSS    0
          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 
 VFD      SPACE  4
**        VFD - PROCESS XFILL (VFD) TABLE.
* 
*         ENTRY  (.XF) = ACCUMULATED XFILL TABLE DATA.
*                (XFAE) = LWA+1 DATA IN XFILL TABLE.
* 
*         USES   A - 1, 2, 5, 6.
*                B - 2, 3, 6, 7.
*                X - 1, 2, 4, 6, 7. 
  
  
 VFD      SUBR               ENTRY/EXIT 
          SA1    XFAE        GET LWA+1 DATA IN XFILL BUFFER 
          SA5    .XF-1
          SB7    X1+
 VFD1     SB2    A5+B1
          GE     B2,B7,VFDX  IF END OF XFILL TABLE
          SA5    B2          GET NEXT RELOCATION ENTRY
          MX4    -9 
          BX1    -X4*X5      BLOCK RELOCATION INDEX 
          SA1    X1+.CP 
          AX5    9
          BX2    -X4*X5 
          SA2    X2+.BO      BLOCK WHICH CONTAINS RELOCATION WORD 
          SX2    X2 
          AX5    9
          MX4    -6 
          SB6    X1 
          ZR     B6,VFD1     IF BLOCK NOT LOADED
          BX1    -X4*X5      SIZE OF FIELD
          AX5    6
          BX4    -X4*X5      POSITION OF FIELD
          AX5    6
          SB2    X1-1 
          MX7    1           FORM FIELD MASK
          AX7    X7,B2
          SB3    X4 
          SB2    X1+B3
          LX7    X7,B2
          SA1    X5+B6       READ WORD TO RELOCATE
          LX2    X2,B3       POSITION RELOCATION
          BX6    -X7+X1      RELOCATE FIELD 
          IX6    X6+X2
          BX1    -X7*X1 
          BX6    X7*X6
          BX6    X6+X1
          SA6    A1          STORE RELOCATED WORD 
          EQ     VFD1        CONTINUE PROCESSING TABLE
 XFR      SPACE  4,10 
**        XFR - PROCESS TRANSFER TABLE. 
*             THE TRANSFER ADDRESS IS IGNORED, THE ADDRESS FROM THE 
*         *ENTR* TABLE IS USED FOR THE ENTRY POINT ADDRESS. 
  
  
 XFR      BSS    0           ENTRY
          JP     CPUR        RETURN 
          TITLE  SUBROUTINES. 
 ERR      SPACE  4,10 
**        ERR - PROCESS LOADER TABLE ERROR. 
* 
*         ENTRY  (X3) = ERROR CODE. 
  
  
 ERR      SUBR               ENTRY/EXIT 
 ERR1     SA2    .BC
          NZ     X2,ERR2     IF NOT BATCH MODE
          MESSAGE X3,,R      ISSUE DIAGNOSTIC MESSAGE 
          SA2    ERR
          BX6    X6-X6
          SA6    A2 
          NZ     X2,ERRX     IF RETURN DESIRED
          ENDRUN
  
 ERR2     R=     A1,NCPL     SET MESSAGE IN SYSTEM CONTROL POINT
          MX0    -12
          LX1    -36
          BX1    -X0*X1      NUMBER OF CONTROL POINTS 
          LX1    7
          SA3    X3 
          SA4    A3+B1
          BX6    X3 
          LX7    X4 
          SA6    X1+MS1W+200B 
          SA3    A4+B1
          SA7    A6+B1
          BX6    X3 
          SA4    A3+B1
          SA6    A7+B1
 ERR3     BX7    X4 
          SA7    A6+B1
          EQ     ERR3        BLANK THE TOOBS
  
  
 ERRA     DATA   C* INVALID LOADER INPUT.*
  
 ERRB     DATA   C* BLOCK ORIGIN TABLE OVERFLOW.* 
  
 ERRC     DATA   C* RELOCATION TABLE OVERFLOW.* 
  
 ERRD     DATA   C* LOADER TABLE OVERFLOW.* 
 ROW      SPACE  4,10 
**        ROW - READ ONE WORD FROM RELOCATABLE BUFFER.
* 
*         ENTRY  (.RP) = ADDRESS OF NEXT BUFFER WORD. 
* 
*         EXIT   (X6) = WORD. 
*                (.RP) = UPDATED. 
*                (X1) = 0 IF EOR. 
* 
*         USES   A - 2, 4, 6, 7.
*                X - 2, 4, 6, 7.
* 
*         CALLS  RRB. 
  
  
 ROW      SUBR               ENTRY/EXIT 
 ROW1     SA4    .RP         READ BUFFER POINTER
          SA2    .RL         READ BUFFER LIMIT
          IX6    X4-X2
          PL     X6,ROW2     IF BUFFER EMPTY
          SA2    X4          READ WORD
          SX1    B1          UPDATE POINTER 
          BX6    X2 
          IX7    X4+X1
          SA7    A4 
          JP     ROWX        RETURN 
  
 ROW2     SX1    X2-RBUF-1   CHECK FOR SHORT BLOCK
          ZR     X1,ROWX     IF EOR ENCOUNTERED 
          RJ     RRB         READ NEXT BLOCK
          EQ     ROW1 
 RRB      SPACE  4,10 
**        RRB - READ RELOCATABLE BLOCK. 
* 
*         EXIT   (.RL) = BUFFER LIMIT.
*                (.RP) = ADDRESS OF CURRENT BUFFER WORD.
* 
*         USES   A - 1, 2, 4, 6, 7. 
*                B - NONE.
*                X - 1, 2, 4, 6, 7. 
* 
*         CALLS  ZIO. 
  
 RRB3     RJ     ZIO         READ NEXT BLOCK
  
 RRB      SUBR               ENTRY/EXIT 
          SA4    .BC
          ZR     X4,RRB3     IF BATCH MODE
          SA1    RRBB 
          SX2    B1 
          IX7    X1+X2       SET CURRENT BUFFER POSITION = LIMIT
          SA7    .RP
          SA4    A1-B1
          ERRNZ  RRBA+1-RRBB CODE DEPENDS ON VALUE
          SA7    A7+B1
          ZR     X4,RRBX     IF EOR 
          PX6    X1 
          SA6    B0 
  
*         REQUEST NEXT RELOCATABLE BLOCK. 
  
 RRB1     SA2    B0+
          NO
          MX1    -12
          NZ     X2,RRB1     IF READ NOT COMPLETE 
          SA2    X6 
          BX1    -X1*X2      WORD COUNT TRANSFERRED TO BUFFER 
          IX7    X7+X1       SET BUFFER LIMIT 
          BX6    X7-X4
          SA7    .RL
          ZR     X6,RRBX     IF BLOCK SIZE DID NOT CHANGE 
          BX6    X6-X6       SET EOR FLAG 
          SA6    A4 
          EQ     RRBX        RETURN 
  
 RRBA     CON    1           EOR INDICATOR
 RRBB     VFD    42/0,18/RBUF 
 RTB      SPACE  4,10 
**        RTB - READ ONE TABLE. 
* 
*         ENTRY  (B3) = LOADER TABLE PROCESSOR TABLE ADDRESS. 
* 
*         EXIT   TABLE IN .BO, .FB, .TB, OR .XF BUFFER, AS DEFINED IN 
*                *LTPT* TABLE ENTRY.
*                (X1) = 0, IF END OF RECORD ENCOUNTERED.
*                (X3) = *ERRA* ERROR MESSAGE ADDRESS. 
*                (X5) = TABLE HEADER WORD.
*                (B2) = TABLE WORD COUNT. 
*                (B3) = ADDRESS OF ENTRY IN *LTPT* TABLE + 2. 
*                (B4) = LWA+1 LOADER TABLE IN BUFFER. 
*                (B6) = PROCESSOR ADDRESS.
*                TO *ERR1* IF UNIDENTIFIED LOADER TABLE OR PREMATURE
*                EOR ENCOUNTERED, OR IF BUFFER OVERFLOWED.
* 
*         USES   B - 2, 3, 4, 5, 6. 
*                A - 1, 2, 6. 
*                X - 0, 1, 2, 3, 5, 6, 7. 
* 
*         CALLS  ROW. 
  
  
 RTB      SUBR               ENTRY/EXIT 
          SX3    ERRA        * INVALID LOADER INPUT.* 
          RJ     ROW         READ TABLE HEADER
          ZR     X1,RTBX     IF EOR ENCOUNTERED 
          BX5    X6 
          MX0    12 
 RTB1     SA2    B3          IDENTIFY LOADER TABLE
          ZR     X2,ERR1     IF LOADER TABLE NOT VALID
          BX6    X5-X2
          SA1    A2+B1
          BX6    X0*X6
          SB6    X2          PROCESSOR ADDRESS
          SB3    A1+B1
          NZ     X6,RTB1     IF NO MATCH
          SB4    X1          FWA BUFFER 
          LX0    -12
          AX1    18 
          BX7    X0*X5       LOADER TABLE WORD COUNT
          SB5    X1          BUFFER LENGTH
          LX7    -36
          SB2    X7          WORD COUNT OF TABLE
          GT     B2,B5,RTB3  IF LOADER TABLE OVERFLOWS BUFFER 
          SB5    B4+B2       LWA+1 LOADER TABLE IN BUFFER 
 RTB2     RJ     ROW         READ TABLE 
          ZR     X1,ERR1     IF PREMATURE EOR 
          SA6    B4 
          SB4    B4+B1
          LT     B4,B5,RTB2  IF NOT END OF TABLE
          EQ     RTBX        RETURN 
  
 RTB3     AX1    18          SET ERROR MESSAGE ADDRESS
          IX3    X3+X1
          EQ     ERR1        PROCESS ERROR
 SBT      SPACE  4,10 
**        SBT - SEARCH KNOWN BLOCK TABLE. 
* 
*         ENTRY  (X1) = BLOCK NAME TO SEARCH FOR. 
* 
*         EXIT   (X4) = TABLE ENTRY OF MATCHED BLOCK NAME.
*                     = LAST WORD OF TABLE IF NO MATCH FOUND. 
*                (X6) .GE. 0 IF END OF TABLE REACHED. 
*                (A4) = ADDRESS OF MATCHED ENTRY OR LAST WORD OF TABLE. 
* 
*         USES   A - 4. 
*                X - 3, 4, 6, 7.
  
  
 SBT      SUBR               ENTRY/EXIT 
          MX3    42 
          SA4    PIDA-1      BLOCK TABLE ADDRESS - 1
          MX6    PIDAL
 SBT1     SA4    A4+B1       NEXT TABLE ENTRY 
          LX6    1
          PL     X6,SBTX     IF END OF TABLE
          BX7    X4-X1
          BX7    X3*X7
          NZ     X7,SBT1     IF NO MATCH ON BLOCK NAME
          EQ     SBTX        RETURN 
 ZIO      SPACE  4,10 
**        ZIO - READ ONE BLOCK FROM DISK FILE.
* 
*         USES   A - 1, 4, 6, 7.
*                X - 1, 4, 6, 7.
  
  
 ZIO      SUBR               ENTRY/EXIT 
          SA4    ZIOA+1      SET FIRST = IN = OUT 
          SX7    X4 
          SA7    A4+B1
          SA7    A7+B1
          READ   ZIOA,R      READ ONE BLOCK 
          SA4    ZIOA+2      SET BUFFER LIMIT 
          SX7    X4 
          SA4    A4-B1       RESET POSITION IN BUFFER 
          SA7    .RL
          SX7    X4+
          SA7    .RP
          JP     ZIOX        RETURN 
  
 ZIOA     BSS    0
*LGO      FILEB  RBUF+1,RBUFL-1,(FET=5) 
          VFD    42/0LLGO,18/1
          VFD    42/,18/RBUF+1
          VFD    42/,18/RBUF+1
          VFD    42/,18/RBUF+1
          VFD    42/,18/RBUF+RBUFL-1
          SPACE  4
*CALL     COMCCIO 
 PRESET   TITLE  PRESET ROUTINES. 
 PRS      SPACE  4
**        PRS - PRESET. 
* 
*         ENTRY  X2, X4 AND X5 CONTAIN INFORMATION FOR *CPUMTR*.
*                THEY ARE SAVED AND RESTORED. 
*                (X4) = 0 IF BATCH MODE.
  
  
 PRS      SUBR               ENTRY/EXIT 
          SX6    B3          SAVE REGISTERS 
          SX7    B4 
          SA6    .ER
          SA7    A6+B1
          SX6    B5 
          SA6    A7+B1
          BX6    X5 
          LX7    X4 
          SA6    A6+B1
          SA7    A6+B1
          BX6    X3 
          LX7    X2 
          SA6    A7+B1
          SA7    A6+B1
          BX7    X4 
          SA7    .BC
          NZ     X7,PRS1     IF NOT BATCH MODE
          SX7    LBUF        SET *CPUMTR* ORIGIN TO 20000B
          SA7    OB 
  
*         GET ENOUGH MEMORY FOR FILE BUFFERS AND CPUMTR.
  
          MEMORY CM,PRSA,R,LBUF+50000B
  
*         REWIND *LGO* FILE.
  
          REWIND ZIOA,R      REWIND CPUMTR BINARY FILE
  
 PRS1     RJ     REL         RELOCATE VARIABLE VALUES 
          RJ     DLB         DETERMINE LOAD BLOCKS
  
*         CLEAR BLOCK POSITION TABLE. 
  
          BX6    X6-X6
          SB6    .CP+1
          SB7    B6+.BOL-2
 PRS2     SB6    B6+B1
          SA6    B6 
          NE     B6,B7,PRS2  IF MORE TO CLEAR 
          EQ     PRSX        RETURN 
  
 PRSA     BSS    1
 DBL      SPACE  4
**        DBL - DISABLE BLOCK LOAD. 
* 
*         ENTRY  (X1) = BLOCK CONTROL WORD. 
*                (A1) = ADDRESS OF BLOCK CONTROL WORD.
* 
*         EXIT   NONE.
* 
*         USES   X - 2, 6.
*                A - 6. 
  
  
 DBL      SUBR               ENTRY/EXIT 
          MX2    -18
          BX6    X2*X1       CLEAR LOAD STATUS
          SA6    A1+
          JP     DBLX        RETURN 
 DLB      SPACE  4
**        DLB - DETERMINE LOAD BLOCKS.
* 
*             THIS ROUTINE EXAMINES CMR TO DETERMINE WHICH OPTIONAL 
*         CPUMTR BLOCKS TO SELECT FOR LOADING.
* 
*         EXIT - VALUES IN TABLE *PIDA* SET TO SELECT/DESELECT LOADING
*                OF OPTIONAL CPUMTR BLOCKS. 
  
  
 DLB      SUBR               ENTRY/EXIT 
          SA1    .BC
          ZR     X1,DLBX     IF BATCH MODE - LOAD DEFAULT BLOCKS
          SA1    MABL        CHECK MAINFRAME TYPE 
          LX1    59-47
          PL     X1,DLB1     IF CM EXTENSION PRESENT
          SA1    CME
          RJ     SWT         SWITCH TO *0CME* BLOCK 
          SA1    .ER+3       GET EXTENDED MEMORY FL 
          NZ     X1,DLB1     IF EXTENDED MEMORY PRESENT 
          SA1    CSE
          RJ     DBL         DISABLE BLOCK FOR CM STORAGE CLEAR VIA ECS 
 DLB1     SA3    EXML        DETERMINE PRESENCE OF EM EQUIPMENT 
          MX1    -9 
          BX3    -X1*X3 
          NZ     X3,DLB3     IF EM EQUIPMENT WITH CPU PATH
          SA1    ECS
          RJ     DBL         DISABLE ECS BLOCK
 DLB2     SA1    EEC
          RJ     DBL         DISABLE EXTERNAL ECS BLOCK 
          EQ     DLB4        DISABLE SIMULTANEOUS UEM/ESM BLOCK 
  
 DLB3     SA1    ESTP        CHECK EXTENDED MEMORY TYPE 
          SX2    ESTE 
          IX2    X2*X3
          AX1    36 
          IX1    X1+X2
          SA1    X1          READ EST 
          MX2    -12
          BX2    -X2*X1 
          LX2    3
          SA1    X2+DILL     READ EM TYPE 
          AX1    18 
          MX2    -3 
          BX1    -X2*X1 
          SX1    X1-4 
          ZR     X1,DLB2     IF TYPE IS UEM 
          SA1    UEML 
          LX1    59-1 
          NG     X1,DLB5     IF SIMULTANEOUS UEM/ESM DEFINED
 DLB4     SA1    SUE
          RJ     DBL         DISABLE SIMULTANEOUS UEM/ESM BLOCK 
 DLB5     SA1    ECRL 
          LX1    12 
          MX0    12 
          BX1    X0*X1
          NZ     X1,DLB6     IF USER EM IS DEFINED
          SA1    UEC
          RJ     DBL         DISABLE LOAD OF USER ECS BLOCK 
          SA1    SCPUEC 
          RJ     DBL         DISABLE LOAD OF SCP USER ECS BLOCK 
          NZ     X3,DLB6     IF EM EQUIPMENT DEFINED
          SA1    EUE
          RJ     DBL         DISABLE ECS OR USER ECS BLOCK
 DLB6     SA4    MMFL        DETERMINE PRESENCE OF MMF
          BX5    X4 
          LX5    59-45
          NG     X5,DLB6.1   IF SHARED BUFFERED DEVICES PRESENT 
          SA1    BIOMMF 
          RJ     DBL         DISABLE LOAD OF *BIOMMF* BLOCK 
 DLB6.1   LX5    59-46-59+45
          NG     X5,DLB7     IF LOW SPEED PORT MMF
          SA1    LSPMMF 
          RJ     DBL         DISABLE LOAD OF *LSPMMF* BLOCK 
          MX1    -9 
          LX1    36 
          BX5    -X1*X4 
          NZ     X5,DLB8     IF MMF PRESENT 
 DLB7     SA1    MMF
          RJ     DBL         DISABLE LOAD OF *MMF* BLOCK
          SA1    ECRL 
          LX1    12 
          MX0    12 
          BX1    X0*X1
          NZ     X1,DLB8     IF USER EM DEFINED 
          SA1    ECSBUF 
          RJ     DBL         DISABLE LOAD OF ECS BUFFER 
          SA1    MMFBUF 
          RJ     DBL         DISABLE LOAD OF MMF BUFFERS
 DLB8     LX4    59-47
          NG     X4,DLB9     IF INDEPENDENT SHARED DEVICES EXIST
          SA1    ISD         DISABLE ISD BLOCK
          RJ     DBL
          NZ     X5,DLB9     IF MMF PRESENT 
          SA1    ISDMMF      DISABLE ISD/MMF COMMON CODE BLOCK
          RJ     DBL
 DLB9     SA1    MABL        GET HARDWARE OPTIONS 
          LX1    59-47
          NG     X1,DLB10    IF CM EXTENSION NOT PRESENT
          SA1    CMU
          RJ     DBL         DISABLE CMU
          EQ     DLB11       CONTINUE 
  
 DLB10    LX1    59-39-59+47
          PL     X1,DLB11    IF CMU PRESENT 
          SA1    CMU
          RJ     SWT         SWITCH TO *0CMU* BLOCK 
 DLB11    SA2    SSTL        CHECK PRESENCE OF SYSTEM CP (SCP)
          LX2    59-39
          PL     X2,DLB12    IF SYSTEM CP (SCP) FACILITY PRESENT
          SA1    SCP
          RJ     DBL         DISABLE SCP BLOCK LOAD 
          SA1    SCPUEC 
          RJ     DBL         DISABLE LOAD OF SCP USER ECS BLOCK 
 DLB12    SA1    ACPL        CHECK DUAL CPU STATUS
          SA2    A1+B1
          BX1    X1+X2
          PL     X1,DLB13    IF DUAL CPU
          SA1    DCP
          RJ     DBL         DISABLE LOAD OF *DCP* BLOCK
 DLB13    SA1    SSTL        CHECK FOR SUB-CONTROL POINTS DISABLED
          LX1    59-35
          PL     X1,DLB14    IF SUBCP NOT DISABLED
          SA1    SUBCP
          RJ     DBL         DISABLE LOAD OF *SUBCP* BLOCK
 DLB14    SA3    MABL 
          LX3    59-47
          NG     X3,DLB15    IF CME NOT PRESENT 
          SA1    CMUMTR 
          RJ     DBL         DISABLE CMU
          EQ     DLB16       CONTINUE 
  
 DLB15    LX3    59-37-59+47 CHECK CPU 1 ON 
          LX2    X3,B1       CHECK CPU 0 ON 
          BX2    X2+X3
          LX3    59-42-59+37 CHECK FOR CYBER 170
          BX1    -X3+X2 
          LX3    59-39-59+42 CHECK FOR CMU
          BX1    -X3*X1 
          NG     X1,DLB16    IF CMU .AND. (170 .OR. SINGLE CPU) 
          SA1    CMUMTR 
          RJ     SWT         SWITCH TO *0CMUMTR* BLOCK
 DLB16    SA1    SSTL        CHECK MASS STORAGE VALIDATION ENABLED
          LX1    59-50
          PL     X1,DLB17    IF VALIDATION ENABLED
          SA1    VMS
          RJ     DBL         DISABLE LOAD OF *VMS* BLOCK
 DLB17    SA3    MABL 
          SA2    EABL+DCEI   SET CONSOLE DESCRIPTOR ADDRESS 
          LX2    36 
          MX6    -10
          SA1    EABL+IOEI   SET IOU DESCRIPTOR ADDRESS 
          LX1    18 
          SA1    X1+B1       READ IOU DESCRIPTOR FROM *SAB* 
          LX1    -12
          SA2    X2          READ CONSOLE DESCRIPTOR FROM *SAB* 
          SX4    2020B       SET MASK FOR *SCD* / *MDD* 
          LX2    -12
          BX6    -X6*X1      CHECK BARREL 1 PPS 
          BX4    X4*X2       SET PRESENCE OF *SCD* / *MDD* IN BARREL 1
          CX6    X6 
          CX4    X4          IGNORE OFF STATUS OF *SCD* / *MDD* 
          CX4    X4          *SCD* AND *MDD* OCCUPY THE SAME PP 
          IX6    X6-X4
          NZ     X6,DLB18    IF ANY PP-S OFF
          BX1    X3 
          LX1    59-47
          NG     X1,DLB18    IF NOT CYBER 800 
          LX1    59-42-59+47
          MX2    -8 
          PL     X1,DLB18    IF 865/875 CPU 
          SA4    EABL+CPEI
          LX4    18 
          SA1    X4          READ CPU-0 MODEL 
          AX1    28 
          BX6    -X2*X1 
          SX2    X6-0#13
          ZR     X2,DLB19    IF CYBER 810 CPU 
          SX2    X6-0#14
          ZR     X2,DLB19    IF CYBER 830 CPU 
 DLB18    SA1    CP830
          RJ     DBL         DISABLE LOAD OF CYBER 810/830 CODE 
 DLB19    MX2    2
          LX3    59-46
          BX3    X2*X3
          BX3    X3-X2
          ZR     X3,DLB20    IF CYBER 176 
          SA1    CP176
          RJ     DBL
          SA1    XP176
          RJ     DBL
 DLB20    SA2    BIOL        CHECK FOR BUFFERED I/O 
          AX2    24 
          SX2    X2 
          NZ     X2,DLB22    IF BUFFERED I/O IN USE 
          SA1    BUFIO
          RJ     DBL
          SA1    IHPFMD 
          RJ     DBL
 DLB21    SA1    XP819
          RJ     DBL
          SA1    IH819
          RJ     DBL
          EQ     DLB23       CONTINUE 
  
 DLB22    NZ     X3,DLB21    IF NOT CYBER 176 (NO 819-S)
          SA1    IHPFMD 
          RJ     DBL
 DLB23    SA1    SSTL        CHECK DATA PROBE 
          LX1    59-30
          PL     X1,DLB24    IF DATA PROBE ENABLED
          SA1    PROBE       DISABLE DATA PROBE SEGMENT 
          RJ     DBL
 DLB24    SA1    SSTL        CHECK FOR TRACE ENABLED
          LX1    59-29
          PL     X1,DLB24.1  IF TRACE ENABLED 
          SA1    TRACE       DISABLE TRACE SEGMENT
          RJ     DBL
 DLB24.1  SA1    SSTL        CHECK FOR *VE=* ENTERED AT DEADSTART 
          LX1    59-23
          PL     X1,DLB25    IF *VE=* ENTERED AT DEADSTART
          SA1    NVE
          RJ     DBL         DISABLE NVE BLOCK
 DLB25    SA1    SSTL        CHECK MEMORY CLEARING
          LX1    59-58
          PL     X1,DLB26    IF MEMORY CLEARING ENABLED 
          SA1    MCE
          RJ     DBL         DISABLE *MCE* BLOCK
 DLB26    SA1    CPPL        CHECK CONCURRENT CHANNELS/PP-S PRESENT 
          MX0    -6 
          LX0    11-0 
          BX1    -X0*X1 
          NZ     X1,DLB27    IF CONCURRENT PP-S ARE PRESENT 
          SA1    CPP
          RJ     DBL         DISABLE CPP BLOCK
 DLB27    SA2    PCPP 
          SX2    X2+
          NZ     X2,DLB28    IF PSEUDO-CONTROL POINTS PRESENT 
          SA1    PCP
          RJ     DBL         DISABLE PCP BLOCK
 DLB28    EQ     DLB         RETURN 
 SWT      SPACE  4,10 
**        SWT - SWITCH CONTROL BYTES FOR ASSOCIATED BLOCK ENTRIES.
* 
*         ENTRY  (A1) = ADDRESS OF FIRST CONTROL WORD.
* 
*         USES   A - 3, 6, 7. 
*                X - 1, 2, 3, 6, 7. 
  
  
 SWT      SUBR               ENTRY/EXIT 
          MX2    42 
          SA3    A1+B1       ASSOCIATED CONTROL WORD
          BX6    X2*X1
          BX7    X2*X3
          BX1    -X2*X1 
          BX3    -X2*X3 
          BX6    X6+X3       NAME + TOGGLED STATUS
          BX7    X7+X1
          SA6    A1 
          SA7    A3 
          EQ     SWTX        RETURN 
 REL      SPACE  4,10 
**        REL - RELOCATE VALUES USED IN THE *T* INSTRUCTIONS. 
  
  
 REL      SUBR               ENTRY/EXIT 
          SA1    .BC
          SB7    TRLAL-1
          ZR     X1,REL1     IF BATCH MODE
          SA2    ESTP        LOCATE CYBER 176 EXCHANGE PACKAGE AREA 
          MX3    -12
          LX2    24 
          SX6    X2+EQDE     FWA EST
          LX2    12 
          BX2    -X3*X2      SIZE OF EST
          R=     X3,ESTE
          IX2    X2*X3
          MX7    -9 
          SA1    BIOL        SET BUFFER FOR CPUMTR ASSEMBLY 
          IX2    X6+X2       LWA + 1 OF EST 
          SX6    X1 
          IX2    X2-X7       ROUND TO NEAREST 1000B 
          AX1    48-6 
          BX7    X7*X2       BLOCK ORIGIN OF EXCHANGE PACKAGE AREA
          SA6    MBUF        SET ORIGIN OF LOAD 
          SA7    SPBO 
          SA6    OB 
          SA2    PBUF        SET ORIGIN FOR *CPUMTR* PRESET BLOCK 
          MX7    12 
          IX6    X2+X1
          SA7    CMCL        SET NO MOVE PENDING AT CP ZERO 
          SA6    A2 
 REL1     SA1    TRLA+B7     SET NEXT RELOCATION WORD 
          SB7    B7-B1
          UX4,B6 X1          SET POSITION IN WORD 
          SA2    X1          GET WORD 
          LX1    -30
          SX3    X1 
          SX1    X1 
          LX4    59-29
          PL     X1,REL2     IF POSITIVE VALUE WANTED 
          BX1    -X1
 REL2     SA1    X1 
          PL     X4,REL3     IF FWA WANTED
          AX1    24          GET LWA
 REL3     PL     X3,REL4     IF COMPLEMENT OF ADDRESS WANTED
          BX1    -X1
 REL4     MX7    -18
          BX1    -X7*X1 
          SB5    B6-60
          AX2    X2,B5       POSITION ADDRESS 
          BX3    -X7*X2      GET ADDRESS
          BX2    X7*X2       MASK OUT ADDRESS 
          SX3    X3 
          IX3    X3+X1       GENERATE NEW ADDRESS 
          BX1    -X7*X3 
          BX3    X7*X3       OVERFLOW IF SUBTRACTION
          LX3    -18
          IX3    X3+X1
          BX2    X2+X3       MERGE ADDRESS
          LX6    X2,B6       REPOSITION INSTRUCTION 
          SA6    A2 
          PL     B7,REL1     IF STILL MORE INSTRUCTIONS TO MODIFY 
          EQ     RELX        RETURN 
  
*         REMOTE CODE CONTAINING THE VARIABLE TABLE/BUFFER REFERENCES 
  
 TRLA     BSS    0
 TINST    HERE
 TRLAL    EQU    *-TRLA 
  
*         VALUES USED FOR RELOCATION AT PRESET TIME.
  
 OB       VFD    42/0,18/ORG
 MBUF     VFD    42/0,18/LBUF 
 PBUF     VFD    42/0,18//DSL/CPML*100B 
 BUFFERS  SPACE  4
*         BUFFERS.
  
  
 RBUF     EQU    PRS         RELOCATABLE TEXT BUFFER
 RBUFL    EQU    1002B       BUFFER LENGTH
  
 .P1      EQU    RBUF+RBUFL 
 .P2      EQU    .P1-ORG+120B  ALLOW FOR BATCH MODE LOAD LENGTH 
          ERRNG  /DSL/CPML*100B-.P2  *CPUMLD* OVERFLOW
  
 LBUF     EQU    /DSL/CPML*100B+/DSL/PRSL*100B  LOAD BUFFER 
  
          CON    1
  
          END    CPUMLD 
