*DECK MRELS IDENT MRELS ENTRY MRELS EXT ABORT EXT BFSCAN EXT XTRACE EXT OMSG EXT RDUMP EXT XDROP LIST F *IF DEF,IMS *# *1DC MRELS 000100 * 1. PROC NAME AUTHOR DATE 000110 * MRELS P. C. TAM 77/09/27 * 000130 * 2. FUNCTIONAL DESCRIPTION. 000140 * THIS ROUTINE IS RESPONSIBLE FOR RELEASING ONE BUFFER 000150 * OF THE SPECIFIED FWA TO THE FREE CHAIN. 000160 * 000170 * 3. METHOD USED. 000180 * CALLING ROUTINES PASS THE FWA OF BUFFER TO BE RELEASED. 000190 * INCREMENT TOTAL NUMBER OF WORDS OF FREE CHAIN. 000200 * SCAN THROUGH FREE CHAIN FOR PROPER POSITION TO CHAIN THE 000210 * BUFFER BEING RELEASED. 000220 * WHEN PROPER POSITION FOUND. CHECK WHETHER FORM CONTIGUOUS 000230 * BUFFER WITH PRECEEDING OR FOLLOWING FREE BUFFERS OR NOT. 000240 * DO THE LINKING. 000250 * 000260 * 4. ENTRY PARAMETERS. 000270 * BUFWA FWA OF BUFFER TO RELEASE 000280 * 000290 * 5. EXIT PARAMETERS. NONE 000300 * 000310 * 6. COMDECKS CALLED. 000320 * CYBERDEFS FREETAB INPARU MACDEF * STATTAB2 * 000360 * 7. ROUTINES CALLED. 000370 * OMSG DAYFILE MESSAGE * RDUMP DUMP NIP ADDRESS SPACE * XDROP SET PIP DROP FLAG * XTRACE RECORD CALL 000390 * 000400 * 8. DAYFILE MESSAGES. * *MRELS BUFFER MANAGEMENT ERROR* * 000420 *# *ENDIF *CALL MACDEF *CALL CYBERDEFS *CALL INPARU *CALL FREETAB *CALL STATTAB2 MRELS SUBR = ENTRY/EXIT IFEQ DEBUG,1,6 SX6 A1 SA6 TEMP SX1 XMRELS RJ XTRACE SA1 TEMP SA1 X1 SA2 X1 (X2)=(BUFWA) MX0 -FRBBS$ (X1)=FRBBS[BUFWA] RIGHT JUSTIFIED LOAD A5,X2,FRBBS# (X5)=FRBBS[BUFWA] WORD LX0 FRBBS?-FRBBS$+1 BX1 -X0*X5 LX1 -FRBBS?+FRBBS$-1 D2 IFEQ DEBUG,1 NZ X1,MRLD1 SA1 MSGDR RJ ABORT *---ABORT---* MRLD1 BSS 0 D2 ENDIF IFEQ STAT,1,4 MX0 -1 INCREMENT ST$REL SA5 ST$REL IX6 X5-X0 SA6 ST$REL * INCREASE FREE CHAIN SIZE SA5 FRETAB+FRESFB# IX6 X5+X1 SA6 A5 *** * * STEP 2 SCAN THRU FREE CHAIN FOR PROPER POSITION TO LINK RELEASED * BUFFER * WHEN EXIT FROM THIS STEP: * (B4) = PREBUF VALUE (PRECEDING BUFFER BASE ADDRESS) * (B5) = FOBUF VALUE (NEXT BUFFER BASE ADDRESS) * (B2) = BUFWA VALUE (BUFFER BEING RELEASED BASE ADDRESS) * (B3) = FRENOFB VALUE(NO. OF FREE BUFFER) SA5 FRETAB+FREFBFP# READ FREFBFP WORD FROM CM SB5 X5 (B5)=FREFBFB VALUE (FOBUF) SB4 FRETAB (B4)=LOC(FRETAB) (PREBUF) SA5 FRETAB+FRENOFB# READ FRENOFB WORD FROM CM SB3 X5 (B3)=FRENOFB VALUE SB2 X2 (B2)=BUFWA (BUFWA) SB1 1 INITIALIZE LOOP COUNTER MRLS1 GT B5,B2,FOUND IF FOBUF GR BUFWA, GO TO FOUND SB4 B5 PREBUF SET TO FOBUF LOAD A5,B5,FRBFBFP# (X5)=FRBFBFP[FOBUF] WORD SB5 X5 GET ONLY FRBFBFP FIELD SB1 B1+1 INCR. LOOP COUNTER LE B1,B3,MRLS1 *** * * STEP 3 FOUND PROPER POSITION FOR RELEASE BUFFER * CHECK WHETHER FORM CONTIGUOUS BLOCK WITH PRECEEDING OR * FOLLOWING BUFFERS * WHEN EXIT FROM THIS STEP: * (B7) = PREBUF+FRBBS[PREBUF] (LWA+1 OF PRECEDING BUFFER) TEMP1 * (B6) = BUFWA+FRBBS[BUFWA] (LWA+1 OF RELEASE BUFFER ) TEMP2 * B4, B5, B2, B3 ARE PERSERVED FROM PREVIOUS STEP FOUND BSS 0 DZ IFEQ STAT,1 SX6 B1 (X6)=NO OF BUFFERS EXAMINED SA5 ST$RNB UPDATE NO OF FREE BUFFERS TRANSVERSES IX6 X6+X5 SA6 A5 DZ ENDIF LOAD A5,B4,FRBBS# (X5)=FRBBS[PREBUF] WORD MX0 -FRBBS$ MASK FOR FRBBS$ FIELD LX0 FRBBS?-FRBBS$+1 SHIFT TO APPR POS. IN WORD BX6 -X0*X5 GET FRBBS FIELD ONLY LX6 -FRBBS?+FRBBS$-1 FRBBS FD RIGHT JUSTIFY SB7 B4+X6 (B7)=PREBUF+FRBBS[PREBUF] LWA+1 OF PRE BLK SB6 B2+X1 (B6)=BUFWA+FRBBS[BUFWA] LWA+1 OF RELEASE BF D1 IFEQ DEBUG,1 LT B2,B4,MRLS5 BUFWA GQ PREBUF AND LT B2,B7,MRLS15 BUFWA LS TEMP1, BRANCH TO MRLS15 MRLS5 LE B6,B5,MRLS10 TEMP2 GR FOBUF AND SB1 FRETAB+FRE1# FOBUF NQ LOC(FRE1) NE B5,B1,MRLS15 BRANCH TO MRLS15 MRLS10 SA5 CTLSFWA BUFWA LS CTLSFWA, SB1 X5 BRANCH TO MRLS15 GE B2,B1,MRLS20 MRLS15 BSS 0 SA1 MSGDR READ MSG CM ADDRESS RJ ABORT *---ABORT---* D1 ENDIF *** * * LINK BUFFER TO THE FREE CHAIN MRLS20 LX1 FRBBS?-FRBBS$+1 SHIFT TO APP POS IN WORD NE B2,B7,MRLSY BRANCH IF BUFWA NE TEMP1 NE B5,B6,MRLSZ BRANCH IF FOBUF NE TEMP2 ** * * CASE 1 RELEASE BUF FORM CONTIGUOUS BLK WITH BOTH PRE AND FO BLKS * * FOLLOWING INSTRUCTIONS PRESERVES: * (X7) = FRBBS[PREBIF]+FRBBS[BUFWA]+FRBBS[FOBUF] * (X3) = FRBWD[FOBUF] MX0 -FRBBS$ MASK FOR FRBBS FIELD LOAD A5,B4,FRBBS# (X5)=FRBBS[PREBUF] WORD LX0 FRBBS?-FRBBS$+1 SHIFT TO APPR POS IN WORD BX7 X0*X5 REST OF WORD MINUS FRBBS FD BX5 -X0*X5 GET FRBBS FIELD FROM WORD FRBBS[PREBUF] LOAD A3,B5,FRBBS# (X3)=FRBBS[FOBUF] WORD BX6 -X0*X3 GET FRBBS FIELD FROM WORD FRBBS[FOBUF] IX5 X5+X1 ADD FRBBS[PREBUF] AND FRBBS[BUFWA] IX5 X5+X6 ADD RESULT AND FRBBS[FOBUF] BX7 X7+X5 INTEGRATE THE RESULTING FRBWD[PREBUF] SB7 X3 TEMP1=FRBFBFP[FOBUF] MX0 -FRBFBFP$ MASK FOR FRBFBFP FD BX7 X0*X7 FRBFBFP[PREBUF] WORD MINUS FP FD SX0 B7 (X0)=FBFBFP[FOBUF] LOAD A5,B7,FRBFBBP# (X5)=FRBFBBP[FRBFBFP[FOBUF]] WORD BX7 X7+X0 (X7)=FRBFBFP[FOBUF]+ORIGINAL FRBWPLPREBUF] MX4 -FRBFBBP$ MASK FOR FRBFBBP STORE A7,B4,FRBWD# (X7)=FRBWD[PREBUF] LX4 FRBFBBP?-FRBFBBP$+1 SHIFT TO APPR POS IN WORD SX3 B4 (X3)=PREBUF VALUE BX6 X4*X5 (X6)=FRBWD[FRBFBFP[FOBUF]] MINUS FRBFBBP FD LX3 FRBFBBP?-FRBFBBP$+1 SHIFT FRBFBBP FD TO RIGHT POS BX6 X6+X3 FRBFBBP[FRBFBFP[FOBUF]]=PREBUF SA6 A5 STORE FRBFBBP[FRBFBFP[FOBUF]] TO CM SX7 B3-1 (X7)=FRENOFB-1 SA7 FRETAB+FRENOFB# STORE FRENOFB TO CM EQ MEXIT ** * * CASE 2 RELEASE BLK FOR, CONTIGUOUS BLK WITH PECEEDING BLK ONLY MRLSZ MX0 -FRBBS$ MASK FOR FRBBS FIELD LOAD A5,B4,FRBBS# (X5)=FRBBS[PREBUF] WORD LX0 FRBBS?-FRBBS$+1 SHIFT TO APPR POS IN WORD BX4 -X0*X5 (X4)=FRBBS[PREBUF] ONLY BX5 X0*X5 (X5)=FRBBS[PREBUF] WORD MINUS FRBBS[PREBUF] IX7 X4+X1 (X7)=FRBBS[PREBUF]+FRBBS[BUFWA] BX7 X7+X5 (X7)=FRBWD[PREBUF] RESULT SA7 A5 FRBBS[PREBUF]=FRBBS[PREBUF]+FRBBS[BUFWA] EQ MEXIT ** * * CASE 3 RELEASE BLK FORM CONTIGUOUS BLK WITH FOLLOWING BLK ONLY MRLSY NE B5,B6,MRLSX BRANCH IF FOBUF NE TEMP2 MX0 -FRBBS$ MASK FOR FRBBS FIELD LX0 FRBBS?-FRBBS$+1 SHIFT TO APPR POS IN WORD LOAD A3,B5,FRBBS# (X3)=FRBBS[FOBUF] WORD BX6 -X0*X3 (X6)=FRBBS[FOBUF] ONLY BX5 X0*X3 (X5)=FRBWD[BUFWA] MINUS FRBBS[BUFWA] IX6 X6+X1 (X6)=FRBBS[BUFWA]+FRBBS[FOBUF] NOT JUST. BX6 X6+X5 (X6)=RESULT TO BE STORE IN FRBWD[BUFWA] SA6 X2 STORE NEW FRBWD[BUFWA] TO CM SB7 X3 (B7)=FRBFBFP[FOBUF] TEMP1 LOAD A1,B4,FRBFBFP# (X1)=FRBFBFP[PREBUF] WORD MX7 -FRBFBFP$ MASK FOR FRBFBFP FD BX7 X7*X1 FRBFBFP[PREBUF] WORD MINUS FP FD BX7 X7+X2 (X7)=NEW FRBWD[PREBUF], FP SET BUFWA MX4 -FRBFBBP$ MASK FOR FRBFBBP FIELD SA7 A1 STORE NEW FRBWD[PREBUF] LX4 FRBFBBP?-FRBFBBP$+1 SHIFT TO APPR POS IN WORD LOAD A5,B7,FRBFBBP# (X5)=FRBFBBP[FRBFBFP[FOBUF]] WORD BX5 X4*X5 FRBWD[FRBFBFP[FOBUF]] MINUS FRBFBBP FIELD LX2 FRBFBBP?-FRBFBBP$+1 SHIFT TO APPR POS IN WORD BX6 X5+X2 NEW FRBWD[FRBFBFP[FOBUF]] SA6 A5 STORE TO CM EQ MEXIT ** * * CASE 4 RELEASE BUFFER DOES NOT FORM CONTIGUOUS BLOCK WITH ANY BLK MRLSX SX3 B4 (X3)=PREBUF VALUE LX3 FRBFBBP?-FRBFBBP$+1 SHIFT TO APPR POS IN WORD BX1 X1+X3 FRBFBBP[BUFWA]=PREBUF SB3 B3+1 FRENOFB=FRENOFB+1 SX5 B5 (X5)=FOBUF BX6 X1+X5 FRBFBFP[BUFWA]=FOBUF STORE A6,B2,FRBWD# (X6)=NEW FRBWD[BUFWA] MX0 -FRBFBFP$ MASK FOR FRBFBFP FD LOAD A4,B4,FRBFBFP# (X4)=FRBFBFP[PREBUF] WORD BX4 X0*X4 FRBFBFP[PREBUF] WORD MINUS FP FD SX6 B3 (X6)=UPDATED FRENOFB BX7 X4+X2 FRBFBFP[PREBUF]=BUFWA SA7 A4 STORE TO CM SA6 FRETAB+FRENOFB# STORE TO CM MX0 -FRBFBBP$ MASK FOR FRBFBBP LOAD A5,B5,FRBFBBP# (X5)=FRBFBBP[FOBUF] WORD LX0 FRBFBBP?-FRBFBBP$+1 SHIFT TO APPR POS IN WORD BX5 X0*X5 REST OF WORD MINUS FRBFBBP[FOBUF] FD LX2 FRBFBBP?-FRBFBBP$+1 SHIFT TO APPR POS IN WORD BX7 X5+X2 FRBFBBP[FOBUF]=BUFWA SA7 A5 STORE RESULT TO CM MEXIT BSS 0 IFEQ BFSC,1,1 RJ BFSCAN EQ MRELSX EXIT IFEQ DEBUG,1,2 MSGDR VFD 60/MSGBLK BSSZ 1 XMRELS DATA L*MRELS* TEMP BSS 1 MSGBLK DATA L*MRELS BUFFER MANAGEMENT ERROR* END