ASMB,Q,C NAM RETBF,7 92060-16102 REV. 1913 780630 * * ****************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS RESERVED * NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, REPRODUCED, OR * TRANSLATED TO ANOTHER PROGRAM LANGUAGE WIOTH OUT THE PRIOR * WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. ******************************************************************* * * * SOURCE: 92067-18085 * RELOC: 92067-16085 * * *****************************************************************: EXT .ENTR,ENDM,AVLM,UNMEM,UNM2 ENT RETBF SKP * * TITLE: RETBF * RETURN BUFFER * * ABSTRACT: * * RETBF RETURNS A USER'S BUFFER TO THE BUFFER POOL, AND * COALESCES UNUSED BUFFERS AROUND THE UNUSED MEMORY * BUFFER WHEN THE BUFFER BEING RELEASED IS ADJACENT TO * THE UNUSED MEMORY BUFFER. * * CALLING SEQUENCE: * * JSB RETBF * DEF *+2 * DEF (USER'S PRIMARY POINTER) * * UNMEM, UNM2, AVLM, AND ENDM MUST BE INITIALIZED * * * ON EXIT: * * A-REG CONTAINS ERROR INDICATOR * 0 IMPLIES NO ERROR * -1 IMPLIES BAD POINTER * * PPTR BSS 1 ADDRESS TO USER'S PRIMARY POINTER RETBF NOP JSB .ENTR DEF PPTR * LDA PPTR,I SET UP POINTER TO BUFFER ADA MOVRZ STA T1 INA STA T2 INA * LDB T2,I IS THE PRIMARY POINTER GOOD? CPA B,I RSS JMP ERROR * CLA YES STA T2,I CLEAR BUFFER'S PRIMARY POINTER STA PPTR,I CLEAR USER'S PRIMARY POINTER * * * * COALESCE UNUSED BUFFERS * * NOTE: IT IS GAURANTEED THAT THERE EXISTS 1 UNUSED BUFFER, * I.E., THE UNUSED MEMORY BUFFER POINTED TO BY UNMEM. * * * LDB T1 IS IT NECESSARY TO COALESCE BUFFERS? ADB T1,I ADB OVRSZ CLA CPB UNMEM RSS JMP RETX NO, GO EXIT * LDA AVLM YES,START AT TOP OF MEMORY STA UNMEM INA STA UNM2 * CLA INITIALIZE POINTER TO START OF STA T1 UNUSED MEMORY TO ZERO STA SIZE INITIALIZE SIZE TO 0 * RET10 LDA UNMEM ARE THERE ANY MORE BUFFERS? STA B INB CMB,INB IS UNMEM .LT. ENDM ADB ENDM SSB JMP RET30 * LDA UNM2,I DOES THIS BUFFER HAVE A SZA A PRIMARY POINTER JMP RET20 YES,GO FIND ANOTHER GROUP OF BLOCKS * LDA T1 IF THIS IS THE FIRST UNUSED SZA BUFFER IN THIS BLOCK JMP RET15 THEN SAVE IT'S ADDRESS * LDA UNMEM STA T1 * RET15 LDA UNMEM,I INCREASE SIZE OF UNUSED MEMORY ADA SIZE ADA OVRSZ STA SIZE JMP RET25 * RET20 CLA INITIALIZE ADDRESS OF UNUSED STA T1 MEMORY TO ZERO STA SIZE INITIALIZE SIZE OF UNUNSED BLOCK TO ZERO * RET25 LDA UNMEM ADA UNMEM,I ADA OVRSZ STA UNMEM INA STA UNM2 JMP RET10 * * RET30 LDA T1 INITIALIZE UNUSED MEMORY OVERHEAD SZA,RSS IN CASE OF DEBUG ERROR JMP ERROR RETURN NEGETIVE ONE * STA UNMEM NOTE: IT IS GAURANTEED THAT T1 HAS INA A VALUE OTHER THAN ZERO BECAUSE STA UNM2 GETBF ALWAYS PROVIDES FOR AT LEAST LDA SIZE ONE UNUSED BUFFER AT THE END OF MEMORY ADA MOVRZ STA UNMEM,I * CLA INITIALIZE BUFFER'S PRIMARY STA UNM2,I POINTER TO ZERO RETX JMP RETBF,I RETURN ERROR INDICATOR IN A-REG * * * * ERROR PROCESSOR * * ERROR CCA RETURN -1 IN A-REG JMP RETX SKP * * * * DATA * * * OVRSZ DEC 2 SIZE OF BUFFER OVERHEAD MOVRZ DEC -2 MINUS SIZE OF BUFFER OVERHEAD * * T1 BSS 1 TEMPORARY MEMORY POINTER T2 BSS 1 TEMPORARY POINTER TO OVERHEAD WORD 2 * SIZE BSS 1 SIZE OF UNUSED MEMORY WHENEVER BUFFERS * AROUND THE UNUSED-MEMORY BUFFER * ARE COALESCED * A EQU 0 REFERS TO A-REGISTER B EQU 1 REFERS TO B-REGISTER END