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