ASMB,R,Q,C
*     NAME:   LIMEM 
*     SOURCE: 92070-18204 
*     RELOC:  92070-1X204 
*     PGMR:   HLC 
* 
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
* 
      NAM LIMEM,7  92070-1X204  REV.1941  790205
      ENT LIMEM 
* 
      EXT .ENTR,$CSEG,$LIBR 
      EXT $LIBX,$LOW,$FWBG
      EXT $LOBP,$SISZ,$ROM
* 
* 
A     EQU 0 
B     EQU 1 
* 
* 
LIMEM NOP           TRUE ENTRY POINT
      LDA LIMEM 
      STA LIM.. 
      CLA 
      STA CSEG      SET UP OPTIONAL PARAMETER DEFAULTS
      STA CLNG
      JMP LIM..+1 
* 
* 
WHCH  NOP 
LSEG  NOP 
LLNG  NOP 
CSEG  NOP 
CLNG  NOP 
LIM.. NOP           PSEUDO-ENTRY POINT
      JSB .ENTR     GET PARAMETER ADDRESSES 
      DEF WHCH
      LDA $CSEG,I 
      RAL,CLE,ERA   CLEAR THE 'AM' BIT
      LDB WHCH,I
      JSB $LIBR     TURN OFF MEMORY PROTECT 
      NOP 
      CCE,SSB,RSS 
      JMP GET       ALLOCATE AVAILABLE MEMORY 
      STA $CSEG,I   DE-ALLOCATE 
EXIT  JSB $LIBX 
      DEF LIM.. 
* 
* 
GET   STA CSEG,I
      STA LSEG,I    SAVE START OF FREE MEMORY 
      LDB $LOW,I
      CPB $FWBG 
      JMP BG        BACKGROUND PROGRAM
      CLA 
      STA LLNG,I    REAL TIME GETS NO FREE MEMORY 
      STA CLNG,I
      JMP EXIT
* 
* 
BG    RAL,ERA       SET 'AM' BIT
      STA $CSEG,I 
      LDA $LOBP,I 
      CLB 
      RRL 6         PUT THE NUMBER OF SEGMENTS IN B 
      CMB,INB,SZB,RSS 
      JMP NOSGS     NONE
      STB LIMEM 
      LDB $LOW,I
      ADB =D4 
* 
LP    LDA B,I       HIGH MAIN OF SEGMENT
      CMA,CLE,INA 
      ADA LSEG,I    FIND LARGEST SEGMENT
      LDA B,I 
      SEZ,RSS 
      STA LSEG,I    NEW HIGH, SAVE IT 
      ADB $SISZ     BUMP TO NEXT SEGMENT
      ISZ LIMEM 
      JMP LP
NOSGS LDA LSEG,I
      CMA,INA 
      ADA $ROM      SUBTRACT HIGH SEGMENT FROM END OF MEMORY
      STA LLNG,I
* 
      LDA CSEG,I
      CMA,INA 
      ADA $ROM      SUBTRACT CURRENT SEGMENT FROM END OF MEMORY 
      STA CLNG,I
      JMP EXIT      DONE
* 
      END 
                                                                                                                                                                