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