*DECK EXTINIT PROC TSBINIT; BEGIN # TSBINIT # *IF DEF,IMS # ** * * 1. PROC NAME AUTHOR DATE * TSBINIT M. D. PICKARD 77/01/03 * * 2. FUNCTIONAL DESCRIPTION * TSBINIT WILL PERFORM THE INITIALIZATION OF THE DYNAMIC * MEMORY FOR THIS CONTROL POINT SO THAT THE TSB MANAGER * CAN MANAGE THIS AREA. * * 3. METHOD USED * THE EXISTANCE OF A 54 TABLE IS ESTABLISHED. ENOUGH FIELD * LENGTH FOR ANY OVERLAY AND THE TSB AREA IS REQUESTED. THE * INITIAL TSB AREA IS SET UP TO CONTAIN THE INITIAL TSB * INFORMATION TABLE (TSBIT) AND A FREE TSB. * * 4. ENTRY PARAMETERS * HHA FROM LOADER 54 TABLE, HIGHEST HIGH ADDRESS * * 5. EXIT PARAMETERS * NONE. * * 6. COMDECKS CALLED * TSBDEFS TSB MANAGER SYMPL DEFS * TSBBASE TSB MANAGER BASED ARRAY DEFINITIONS * TSBDATA TSB MANAGER DATA AREA DEFINITIONS * * 7. ROUTINES CALLED * ABORT ABORT THE CONTROL POINT, GOES TO EXIT * MEMORY REQUESTS MEMORY FROM OPERATING SYSTEM * MESSAGE ISSUE DAYFILE MESSAGES * * 8. DAYFILE MESSAGES * "54 TABLE NOT PRESENT" INFORMATIVE MESSAGE * # *ENDIF CONTROL NOLIST; # STOP LISTING OF TSBM COMMON DECKS # *CALL CYBERDEFS *CALL TSBDEFS *CALL TSBBASE *CALL TSBDATA CONTROL LIST; XREF BEGIN PROC ABORT; PROC MESSAGE; PROC MEMORY; PROC ZERO ; END DEF LDADDR # O"100" #; # LOAD ADDRESS # DEF LOCAL # 3 #; # SEND MESSAGE TO LOCAL DAYFILE # DEF ITSBSIZ # ( 2 * TSBITL ) #; # INITIAL TSB AREA SIZE # ITEM I U, # INDUCTION VARIABLE # TEMP U, # TEMPORARY UNSIGNED INTEGER # TYPE C(WC) = "CM "; # TYPE OF MEMORY REQUEST # BASED BEGIN ARRAY LDR54 P(5); # LOADER 54 TABLE FORMAT # ITEM LDRTYPE U (0,0,12), # LOADER TABLE TYPE FIELD # LDRHHA U (4,ZL,AL); # LOADER HIGHEST HIGH ADDRESS # END ARRAY ERR54 P(3); # 54 TABLE ERROR MESSAGE # ITEM ERR54MSG C (0,0,20) = [ "54 TABLE NOT PRESENT" ], ERR54Z U (2,0,WL) = [ 0 ]; ARRAY STATIS P(1); # STATUS WORD PASSED TO MEMORY # ITEM REQFL U (0,0,HWL), # REQUEST FIELD LENGTH # REQZERO U (0,HWL,HWL); # LOWER HALF OF STATUS WORD # P = LDADDR; # FORMAT 54 TABLE # IF LDRTYPE[0] NQ O"5400" THEN # NOT 54 TABLE, TSBM INITIALIZATION NOT # BEGIN # SET FOR ANYTHING BUT 54 TABLE # MESSAGE(ERR54,LOCAL);# ISSUE LOCAL DAYFILE MESSAGE # ABORT; # ***** ABORT THE PROGRAM ***** # END REQZERO[0] = 0; # CLEAR PART OF STATUS WORD # REQFL[0] = LDRHHA[0] + ITSBSIZ + 9; # GET ENOUGH FOR ALL OVERLAYS# # AND THE INITIAL TSB AREA # # AND A LITTLE EXTRA FOR MOVE# # MACRO # MEMORY(TYPE,STATIS); # REQUEST THAT MUCH MEMORY # CTSBLWA = REQFL[0] - 9; # SET CURRENT TSB AREA LWA # PTSBLWA = CTSBLWA; # SET PRIMARY TSB LAST WORD ADDRESS # TSBFWA = LDRHHA[0]; # SET TSB AREA FIRST WORD ADDRESS # P = TSBFWA; # FORMAT TSB AREA FOR WORD ACCESS # # BUILD TSBIT IN FIRST TSB # P = TSBFWA; # BUILD BUSY TSB FOR TSBIT AT TSBFWA # BBUSY[0] =TRUE; # BUSY TSB # BNOTMOV[0] = FALSE; # SET MOVEABLE BLOCK # BHDRRSV[0] = 0; # CLEAR RESERVED AREA # BIDENT[0] = 1; # 1 IS ALWAYS TSBIT TSBN # BPTSBL[0] = 0; # NOTHING PREVIOUS TO THIS TSB # BTSBL[0] = TSBITL + TSBHDRL; # SIZE OF TSB # P = TSBFWA + TSBHDRL; # FORMAT TSBIT A USER AREA FWA # TSBITRSV[0] = 0; # CLEAR TSBIT HEADER RESERVED # LOWFREE[0] = 2; # SET INITIAL LOWEST FREE TSBIT ENTRY # LENGTH[0] = TSBITL; # SET INITIAL LENGTH OF TSBIT # NUMFREE[0] = TSBITL - 2; # NUMBER OF AVAILABLE ENTRIES # FOR I = LOWFREE[0] STEP 1 UNTIL ( LENGTH[0] - 1 ) DO BEGIN # SET UP INITIAL TSBIT ENTRIES # TRSVD[I] = 0; # CLEAR RESERVED AREA # TBUSY[I] = FALSE; # FREE TSBIT ENTRY # TTSBFWA[I] = 0; # CLEAR TSB ADDRESS # FWDPTR[I] = I + 1; # SET FORWARD POINTER # END FWDPTR[LENGTH[0] - 1] = 0; # SET END OF FREE CHAIN # TBUSY[1] = TRUE; # SET TSBIT IDENT AS BUSY # TRSVD[1] = 0; # CLEAR THE RESERVED AREA # TTSBFWA[1] = TSBFWA; # SET ADDRESS OF TSBIT TSB # FWDPTR[1] = 0; # CLEAR THE FORWARD POINTER # # BUILD FREE TSB WITH THE REST AND BUILD ZERO LENGTH TSB AT CTSBLWA # P = TSBFWA + BTSBL[0]; # PUT FREE FORMAT ON NEXT TSB # FBUSY[0] = FALSE; # FREE TSB # FNOTMOV[0] = FALSE; # ALL FREE TSB"S ARE MOVEABLE # FHDRRSV[0] = 0; # CLEAR RESERVED AREA # FIDENT[0] = 0; # CLEAR IDENT FIELD # FPTSBL[0] = BTSBL[0]; # PREVIOUS TSB SIZE # FTSBL[0] = CTSBLWA - LOC(FTSBHDR); # SIZE OF THIS TSB # TEMP = ( LOC(FTSBHDR) + TSBHDRL ) - TSBFWA; # TSB WORD INDEX # ZERO( LOC(TSBAREA[TEMP]) ,FTSBL[0]-TSBHDRL ); #CLEAR AREA # BIGFREE = FTSBL[0]; # SET INITIAL BIGGEST FREE TSB # FFFWA = LOC(FTSBHDR); # SET INITIAL FIRST FREE FIRST WORD ADDR. # P = CTSBLWA; # BUILD FREE TSB OF ZERO LENGTH AT CTSBLWA# BBUSY[0] = FALSE; # FREE TSB # BNOTMOV[0] = FALSE; # MOVEABLE # BHDRRSV[0] = 0; # CLEAR RESERVED AREA # BIDENT[0] = 0; # CLEAR IDENT FIELD # BPTSBL[0] = FTSBL[0]; # SET SIZE OF PREVIOUS TSB # BTSBL[0] = 0; # SET ZERO LENGTH # RETURN; END TERM # TSBINIT #