*COMDECK PIBUF1 
_$J+? 
_$R-,G-,I-? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*              * *   P I B U F 1   * *                                * 
*                                                                     * 
*              PHASE 1 BUFFER INITIALIZATION                          * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW    THIS ROUTINE INITIALIZES THE BUFFER MAINTENANCE BIT MAP* 
*              WHICH IS USED BY THE FIRMWARE TO ALLOCATE AND RELEASE  * 
*              BUFFERS.                                               * 
*              ENOUGH BUFFER SPACE IS CLEARED AND RELEASE TO PERMIT   * 
*              INITIALIZATION TO COMPLETE.                            * 
*                                                                     * 
** INPUT       B3SBUF                 START OF BUFFER AREA            * 
*              B3NBUF                 NUMBER OF BUFFERS TO RELEASE    * 
*                                                                     * 
** OUTPUT      BUFFER MAINTENANCE BIT MAP SET UP                      * 
*              BUFFER AREA CLEARED AND RELEASED                       * 
*              CLBFSPACE              ADDRESS TO CONTINUE RELEASING   * 
*                                                                     * 
** EXTERNAL SUBROUTINES USED                                          * 
*              PBREL1BF               RELEASE A BUFFER                * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PIBUF1; 
  
VAR 
      R3I    : INTEGER;                     _LOOP VARIABLE             ?
      R3NUSD : B0OVERLAY;                   _POSSIBLE BUFFERS NOT USED ?
      R3NMSK : B0OVERLAY;                   _MASK TO CLEAR NEGATIVE    ?
      R3SBUF : B0OVERLAY;                   _START OF BUFFER RELEASE   ?
      R3EBUF : B0OVERLAY;                   _END OF BUFFER RELEASE     ?
      R3RBUF : B0BUFPTR;                    _BUFFER TO BE RELEASED     ?
  
VALUE 
      R3NMSK = $03FF; 
  
BEGIN 
_ 
* * * *  INITIALIZE BUFFER MAINTENANCE BIT MAP
? 
R3NUSD.BAINT := B3SBUF.BAINT / 64;          _LOW CORE PROGRAMS + TABLES?
R3NUSD.BASET := R3NUSD.BASET & R3NMSK.BASET;_MASK OUT POSSIBLE NEGATIVE?
FOR R3I := R3NUSD.BAINT TO 1022 DO          _MARK REST OF MEMORY USED  ?
  BEBITMAP [R3I] := CHR($FF);               _EXCEPT LAST POSSIBLE BUF  ?
_ 
* * * *  CALCULATE START AND END OF PHASE 1 BUFFER RELEASE
? 
R3SBUF.BAINT := B3SBUF.BAINT;               _START OF BUFFER AREA      ?
R3EBUF.BAINT := B3NBUF * DBUFLENGTH +       _CALCULATE END OF PHASE 1  ?
                R3SBUF.BAINT;               _BUFFER RELEASE            ?
_ 
* * * *  RELEASE ENOUGH BUFFERS TO COMPLETE INITIALIZATION
? 
REPEAT
  R3RBUF := R3SBUF.BABUFPTR;                _BUFFER ADDRESS TO RELEASE ?
  PBREL1BF (R3RBUF, BEDBSIZE);              _RELEASE THE BUFFER        ?
  R3SBUF.BAINT := R3SBUF.BAINT + DBUFLENGTH;_CALCULATE NEW BUFFER ADDR ?
UNTIL R3SBUF.BAINT = R3EBUF.BAINT;
_ 
* * * *  SAVE BUFFER ADDRESS FOR PHASE 2 BUFFER INITIALIZATION
? 
CLBFSPACE := R3EBUF.BAINT;                  _SAVE IN GLOBAL VARIABLE   ?
  
END; _PROCEDURE PIBUF1? 
