*DECK CSIBOF USETEXT TEXTCS USETEXT TEXTSS PROC CSIBOF; # TITLE - BUILD OVERLAY FILE. # BEGIN # ** CSIBOF - BUILD OVERLAY FILE. * * D.K. ENDO 82/06/15 * A. LIM 82/06/24 * * THIS PROCEDURE INITIALIZES THE OVERLAY FILE BY LOADING THEM AND * THEN WRITING THEM TO FILE *OVLFILE*. * IT MOVES ALL THE CROSS REFERENCE TABLES NEEDED FOR THE OVERLAY * FROM THE MANAGED AREA TO BLANK COMMON BEFORE IT WRITES THE * OVERLAY OUT TO FILE *OVLFILE*. * * PROC CSIBOF * * ENTRY 1. NONE. * * EXIT 1. *OVLFILE* BUILT * # # **** PROC CSIBOF - XREF LIST BEGINS. # XREF BEGIN PROC MOVEI; # MACREL - MOVE INDIRECT BLOCK OF CM WORDS# PROC RECALL; # RETURNS CONTROL WHEN COMPLETE # PROC REWIND; # REWINDS A FILE # END # **** # DEF CMP$NAM # O"03231403152000" #; # CMD PROCESSOR (CSLCMP)# DEF CMR$NAM # O"03231403152200" #; # CMD RECOGNIZER(CSLCMR)# DEF EVT$NAM # O"03231405262400" #; # EVENT OVLY (CSLEVT) # DEF OIO$NAM # O"03231417111700" #; # OPERATOR I/O (CSLOIO # DEF OSS$NAM # O"03231417232300" #; # OPERATOR SUP (CSLOSS) # DEF XRFSIZ$ # 8 #; # XRF SIZE = 4 TABLES X 2 # ITEM ADDLEN; # ADDITONAL LENGTH TO ADD TO OVERLAY # ITEM FWA; # FIRST WORD ADDRESS TO LOAD THE OVERLAY # ITEM I; # LOOP INDUCTION VARIABLE # ITEM LENGTH I; # LENGTH OF OVERLAY TO BE LOADED # ITEM TO U; # FWA OF MOVE TO BLOCK # ITEM ODTORD ; # OVLY DEFINITION TABLE ORDINAL FOR EVLY # # THIS ARRAY CONTAINS THE NAME OF THE OVERLAY TO BE LOADED. # ARRAY OVN [00:00] S(1); BEGIN ITEM OVN$NAM C(00,00,07); ITEM OVN$NUM U(00,00,42); END # * XRF - CROSS REFERENCE INFORMATION TABLE. * * THIS BASED ARRAY DEFINES THE POINTER WORD AND LENGTH PAIR * OF EACH CROSS REFERENCE TABLE NEEDED BY ALL THE CS OVERLAYS. * IT ALWAYS POINTS TO THE LABELLED COMMON BLOCK OF BASED ARRAY * POINTER WORD AND LENGTH OF ALL CS CROSS REFERENCE TABLES, AND * THIS BLOCK IS ALWAYS THE FIRST BLOCK IN ANY OVERLAY. * THIS TABLE MUST MATCH THE *CSXRF* DEFINITIONS IN *TEXTOV*. * ANY CHANGE TO THIS ARRAY OR TO *CSXRF* MUST CAUSE A COMPARABLE * CHANGE TO THE OTHER. SERIOUS CIRCUMSTANCES MAY OCCUR OTHERWISE. # BASED ARRAY XRF[00:00] S(XRFSIZ$); BEGIN ITEM XRF$DEX U(00,00,60); # DEVICE XREF TABLE # ITEM XRF$DEXL U(01,00,60); # LENGTH OF DEX TABLE # ITEM XRF$LIX U(02,00,60); # LINE XREF TABLE # ITEM XRF$LIXL U(03,00,60); # LENGTH OF LIX TABLE # ITEM XRF$LLXR U(04,00,60); # LOGICAL LINK XREF TABLE # ITEM XRF$LLXRL U(05,00,60); # LENGTH OF LLXR TABLE # ITEM XRF$PLXRF U(06,00,60); # PHYICAL LINK XREF TABLE # ITEM XRF$PLXRFL U(07,00,60); # LENGTH OF PLXREF TABLE # END CONTROL EJECT; PROC GET$OVL; # TITLE - GET OVERLAY. # BEGIN # * GET$OVL - GET OVERLAY. * * D.K. ENDO 82/06/15 * * THIS PROCEDURE DOES AN INITIAL LOAD OF AN OVERLAY TO BE PREPARED * FOR WRITING TO THE OVERLAY FILE. * * PROC GET$OVL * * ENTRY 1. OVN$NAM[0] = OVERLAY NAME. * 2. ADDLEN = ADDITIONAL LENGTH TO BE ADDED TO THE OVL * * EXIT 1. ODTORD = OVERLAY DEFINITION TABLE ORDINAL FOR THE * OVERLAY LOADED. * # # * PROC GET$OVL - XREF LIST BEGINS. # XREF BEGIN PROC ABORT; # CAUSES ABORT WHEN CALLED # PROC LOADREQ; # ISSUES LOAD REQUEST # PROC MESSAGE; # SENDS MESSAGE TO THE DAYFILE # PROC RECALL; # RETURNS CONTROL WHEN COMPLETE BIT SET # PROC SSTSDA; # SET DYNAMIC ADDRESS # END # * # ITEM DONE B; # MOVE MANAGED TABLES STATUS # ITEM MEMSTAT I; # MEMORY REQUEST STATUS WORD # ITEM NEED I; # TOTAL FIELD LENGTH NEEDED FOR LOAD # # THIS ARRAY DEFINES THE MESSAGE SENT WHEN AN OVERLAY IS NOT FOUND. # ARRAY ONF$TXT [00:00] S(3); BEGIN ITEM ONF$NAME C(00,00,07); ITEM ONF$MSG C(00,42,18) =[" OVERLAY NOT FOUND"]; ITEM ONF$ZBYT U(02,30,30) = [0]; END # THIS ARRAY DEFINES THE OVERLAY PARAMETER BLOCK USED BY LOADREQ TO MAKE THE LOAD REQUEST # ARRAY OPB [00:00] S(2); BEGIN ITEM OPB$NAME C(00,00,07); ITEM OPB$WRD1 I(00,00,60); ITEM OPB$LLL U(01,00,12); ITEM OPB$LO B(01,17,01); ITEM OPB$OLF B(01,18,01); ITEM OPB$LWA U(01,24,18); ITEM OPB$FWA U(01,42,18); ITEM OPB$WRD2 I(01,00,60); END CONTROL EJECT; # # # GET$OVL CODE BEGINS HERE # # # # * SEARCH THE 5400 TABLE FOR THE OVERLAY NAME. # FOR ODTORD =0 STEP 1 WHILE OVN$NAM[0] NQ ODT$NAME[ODTORD ] AND ODTORD LS EAC$DL[0]/2 DO BEGIN END # * IF FOUND, THEN GET THE OVERLAY. # IF ODTORD LS EAC$DL[0]/2 THEN BEGIN # * COMPUTE THE SPACE NEEDED TO LOAD THE OVERLAY. IF NOT ENOUGH ROOM, * THEN MOVE THE MANAGED TABLES UP TO MAKE ROOM. SET THE OVERLAY * PARAMETER BLOCK. LOAD THE OVERLAY. # LENGTH = ODT$LWA[ODTORD ] - ODT$FWA[ODTORD ]; NEED = FWA + LENGTH + ADDLEN; IF NEED GQ MEMLOC THEN BEGIN SSTSDA(NEED,MEMSTAT,DONE); FOR LENGTH=LENGTH WHILE NOT DONE DO BEGIN RECALL(MEMSTAT); SSTSDA(NEED,MEMSTAT,DONE); END END OPB$WRD1[0] = 0; OPB$WRD2[0] = 0; OPB$LLL[0] = ODT$LVL[ODTORD ]; OPB$LO[0] = LDI$LB[0]; OPB$OLF[0] = TRUE; OPB$LWA[0] = NEED; OPB$FWA[0] = FWA; IF OPB$LO[0] THEN BEGIN OPB$NAME[0] = OVN$NAM[0]; END ELSE BEGIN OPB$NAME[0] = LDI$NAME[0]; END LOADREQ(OPB); ODT$LWA[ODTORD ] = ODT$LWA[ODTORD ] + ADDLEN; END # * IF OVERLAY IS NOT FOUND, SEND MESSAGE TO DAYFILE AND ABORT. # ELSE BEGIN ONF$NAME[0] = OVN$NAM[0]; MESSAGE(ONF$TXT,0); ABORT; END RETURN; # **** RETURN **** # END CONTROL EJECT; PROC WRITOVL; # TITLE - WRITE OVERLAY. # BEGIN # * WRITOVL - WRITE OVERLAY. * * D.K. ENDO 82/06/16 * * THIS PROCEDURE WRITES A GIVEN OVERLAY OUT TO *OVLFILE* AND SAVES * THE RANDOM SECTOR ADDRESS FOR THAT OVERLAY. * * PROC WRITOVL * * ENTRY 1. ODTORD = OVLY DEFINITION TBL ORDINAL FOR OVERLAY. * * EXIT 1. OVERLAY WRITTEN TO FILE *OVLFILE*. * 2. RANDOM SECTOR ADDRESS IN ODT ENTRY. * # # * PROC WRITOVL - XREF LIST BEGINS. # XREF BEGIN PROC RECALL; # RETURNS CONTROL WHEN COMPLETE BIT IS SET# PROC WRITER; # FLUSHES CIO BUFFER AND WRITES EOR # END # * # # # # WRITOVL CODE BEGINS HERE # # # # * POINT THE FET TO THE OVERLAY TO BE WRITTEN. # OF$FIRST[0] = FWA; OF$IN[0] = FWA + (ODT$LWA[ODTORD ] - ODT$FWA[ODTORD ]); OF$OUT[0] = FWA; OF$LIMIT[0] = OF$IN[0] + 1; # * SAVE THE CURRENT RANDOM SECTOR ADDRESS. # ODT$PRU[ODTORD ] = OF$CRI[0]; # * WRITE THE OVERLAY OUT TO THE FILE. # WRITER(OVLFET,0); RECALL(OVLFET); RETURN; # **** RETURN **** # END # WRITOVL # CONTROL EJECT; # # # CSIBOF CODE BEGINS HERE # # # # * POINT THE ODT BASED ARRAY TO THE OVERLAY ENTRIES IN THE 5400 TABLE * OF THE (0,0) OVERLAY. CALCULATE THE LWA+1 OF THE (77,00)OVERLAY. * INITALIZE THE OVLFILE FET. INITIALIZE THE OVERLAY REQUEST COUNT * AND THE OVERLAY REQUEST TABLE. # P = O"64"; P = O"100"; P = P + 8 + EAC$NEP[0]; FOR I=0 STEP 1 WHILE ODT$LVL[I] NQ O"7700" AND I LS EAC$DL[0]/2 DO BEGIN END IF I LS EAC$DL[0]/2 THEN BEGIN FWA = ODT$LWA[I]; END OF$LFN[0] = "OVLFILE"; OF$CODE[0] = 3; OF$R[0] = TRUE; OF$L[0] = OFSIZ$ - 5; OF$CRI[0] = 1; OF$FIRST[0] = FWA; OF$IN[0] = FWA; OF$OUT[0] = FWA; OF$LIMIT[0] = FWA + O"100"; ORC = 0; FOR I=0 STEP 1 UNTIL NODT$ DO BEGIN ORT$WORD[I] = 0; END SSOEOPW = CSWDF"SOEOP"; REWIND(OVLFET); RECALL(OVLFET); # * GET THE EVENT OVERLAY. CALCULATE THE TOTAL LENGTH NEEDED TO LOAD * ITS CROSS REFERENCE TABLES, WHICH ARE: LIX, LLXR, AND * PLXREF. LOAD THE OVERLAY, THEN MOVE ONE TABLE AT A TIME TO THE * END OF THE OVERLAY. INITIALIZE THE POINTER ADDRESS AND LENGTH OF * THE TABLE DEFINED IN LABELLED COMMON BLOCK *CSXRF*. * THEN WRITE IT OUT THE OVERLAY FILE. # OVN$NUM[0] = EVT$NAM; ADDLEN = LIXLS + LLXREFLS + PLXREFLS; GET$OVL; P = FWA; # POINT 5400 TABLE AT END OF 77,0 OVL # P = FWA + 4 + EAH$NEP[0]; # POINT XRF TO LABELLED COMMON # XRF$LIX[0] = LOADBASE + LENGTH; # LIX TABLE # XRF$LIXL[0] = LIXLS; TO = FWA + LENGTH; MOVEI(LIXLS, P, TO); XRF$LLXR[0] = XRF$LIX[0] + XRF$LIXL[0]; # LLXR TABLE # XRF$LLXRL[0] = LLXREFLS; TO = TO + XRF$LIXL[0]; MOVEI(LLXREFLS, P, TO); XRF$PLXRF[0] = XRF$LLXR[0] + XRF$LLXRL[0]; # PLXRF TABLE # XRF$PLXRFL[0] = PLXREFLS; TO = TO + XRF$LLXRL[0]; MOVEI(PLXREFLS, P, TO); WRITOVL; # * GET THE OPERATOR I/O OVERLAY. WRITE IT OUT TO THE OVERLAY FILE. # OVN$NUM[0] = OIO$NAM; ADDLEN = 0; GET$OVL; WRITOVL; # * GET THE COMMAND RECOGNIZER OVERLAY. WRITE IT OUT TO THE OVERLAY * FILE. # OVN$NUM[0] = CMR$NAM; ADDLEN = 0; GET$OVL; WRITOVL; # * GET THE COMMAND PREPROCESSOR OVERLAY. CALCULATE THE TOTAL LENGTH * NEEDED TO LOAD ITS CROSS REFERENCE TABLES, WHICH ARE: DEX, LIX, * LLXR, AND PLXREF. LOAD THE OVERLAY. THEN MOVE ONE TABLE * AT A TIME TO THE END OF THE OVERLAY. INITIALIZE THE POINTER * ADDRESS AND LENGTH OF THE TABLES DEFINED IN LABELLED COMMON * BLOCK *CSXRF*. * WRITE THE OVERLAY OUT TO THE OVERLAY FILE. # OVN$NUM[0] =CMP$NAM; ADDLEN = DEXLS + LIXLS + LLXREFLS + PLXREFLS; GET$OVL; P = FWA + 4 + EAH$NEP[0]; XRF$DEX[0] = LOADBASE + LENGTH; # DEX TABLE # XRF$DEXL[0] = DEXLS; TO = FWA + LENGTH; MOVEI(DEXLS, P, TO); XRF$LIX[0] = XRF$DEX[0] + XRF$DEXL[0]; # LIX TABLE # XRF$LIXL[0] = LIXLS; TO = TO + XRF$DEXL[0]; MOVEI(LIXLS, P, TO); XRF$LLXR[0] = XRF$LIX[0] + XRF$LIXL[0]; # LLXR TABLE # XRF$LLXRL[0] = LLXREFLS; TO = TO + XRF$LIXL[0]; MOVEI(LLXREFLS, P, TO); XRF$PLXRF[0] = XRF$LLXR[0] + XRF$LLXRL[0]; # PLXRF TABLE # XRF$PLXRFL[0] = PLXREFLS; TO = TO + XRF$LLXRL[0]; MOVEI(PLXREFLS, P, TO); WRITOVL; # * GET THE OPERATOR SUPERVISION OVERLAY. WRITE IT OUT TO THE * OVERLAY FILE. # OVN$NUM[0] = OSS$NAM; ADDLEN = 0; GET$OVL; WRITOVL; # * ZERO OUT THE LENGTH OF ALL CROSS REFERENCE TABLES IN * MANAGED AREA. # DEXLS = 0; LIXLS = 0; LLXREFLS = 0; PLXREFLS = 0; RETURN; # **** RETURN **** # END # CSIBOF # TERM