cdc:nos2.source:opl871:cpumld
Table of Contents
CPUMLD
Table Of Contents
- [00009] CPUMLD - CPUMTR LOADER.
- [00011] CPUMTR LOADER.
- [00069] BAST - BLOCK ASSOCIATION TABLE MACRO.
- [00092] INMOD - THIS MACRO IN CONJUNCTION WITH THE FOLLOWING OPDEF,S
- [00401] TVFD - DEFINE A RELOCATABLE *VFD*.
- [00552] LTPT - LOADER TABLE PROCESSOR TABLE.
- [00584] GLOBAL STORAGE.
- [00604] LOADER TABLE PROCESSORS.
- [00606] ABP - ADVANCE BUFFER POINTER.
- [00631] ENT - PROCESS ENTR TABLE.
- [00655] FIL - PROCESS FILL TABLE.
- [00725] PID - PROCESS PIDL TABLE.
- [00875] TXT - PROCESS TEXT TABLE.
- [00935] TXTA - TABLE OF COMPLEMENT RELOCATION ADDRESSES.
- [00992] TXTB - TABLE OF ADDRESS MASKS.
- [01022] VFD - PROCESS XFILL (VFD) TABLE.
- [01070] XFR - PROCESS TRANSFER TABLE.
- [01077] SUBROUTINES.
- [01079] ERR - PROCESS LOADER TABLE ERROR.
- [01122] ROW - READ ONE WORD FROM RELOCATABLE BUFFER.
- [01153] RRB - READ RELOCATABLE BLOCK.
- [01199] RTB - READ ONE TABLE.
- [01256] SBT - SEARCH KNOWN BLOCK TABLE.
- [01281] ZIO - READ ONE BLOCK FROM DISK FILE.
- [01312] PRS - PRESET.
- [01363] DBL - DISABLE BLOCK LOAD.
- [01380] DLB - DETERMINE LOAD BLOCKS.
- [01621] SWT - SWITCH CONTROL BYTES FOR ASSOCIATED BLOCK ENTRIES.
- [01642] REL - RELOCATE VALUES USED IN THE *T* INSTRUCTIONS.
Source Code
- CPUMLD.txt
- 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
cdc/nos2.source/opl871/cpumld.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator