ASMB,R,Q,C
*     NAME:   LIMSG 
*     SOURCE: 92071-18026 
*     RELOC:  92071-1X026 
*     PGMR:   HLC,DJN 
* 
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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 LIMSG,6  92071-1X026  REV.2041  800613
      ENT LIMSG 
* 
* LIMSG IS A SPECIAL ROUTINE PROVIDED FOR BASIC ON RTE-L. 
* IT AUTOMATICALLY LOCKS THE MEMORY BEHIND BASIC TO BASIC,
* AND RETURNS THE TOP ADDRESS AVAILIABLE, AS WELL AS THE
* TOP ADDRESSES OF THE HIGHEST AND SECOND HIGHEST SEGMENT.
* 
* 
      EXT .XLD,.XST 
      EXT $HIGH,$STAT,$HIBP 
      EXT $SC#,$LIBR,.ENTP,$SEGS,$LIBX
* 
* 
A     EQU 0 
B     EQU 1 
* 
* 
NUMSG NOP           FOR SAVING THE NUMBER OF SEGMENTS 
SCSIZ NOP           NUMBER OF WORDS OF SYSTEM COMMON USED 
* 
* THIS IS THE BLOCK OF THE PASSED PARAMATER ADDRESES
* 
LSEG  NOP           LARGEST SEGMENT TOP ADDRESS 
SLSEG NOP           SECOND LARGEST SEGMENT TOP ADDRESS
LWAM  NOP           LAST WORD OF AVAILIABLE MEMORY
* 
LIMSG NOP           TRUE ENTRY POINT
      JSB $LIBR     DISPATCHING COULD CAUSE TROUBLE 
      NOP 
      JSB .ENTP     PICK UP PARAMATER ADDRESSES 
      DEF LSEG
      JSB .XLD      GET ADDRESS OF ID25 
      DEF $HIBP 
      STA HIBP1     STORE IT LOCALLY FOR LATER
      STA HIBP2     AND FOR EVEN LATER
      JSB .XLD      GET WHAT IS AT $HIBP
      DEF A,I 
      IOR =B100000  SET ALL MEM BIT 
      JSB .XST      SET ALL MEM BIT IN ID 
HIBP1 NOP           THIS NOP IS CHANGED ABOVE 
* 
* CALCULATE TOP PHYSICAL ADDRESS AVAILIABLE 
* 
      JSB .XLD      GET STAT WORD 
      DEF $STAT 
      JSB .XLD      GET WHAT $STAT POINTS TO
      DEF A,I 
      AND =B4000    MASK ALL BUT SC BIT 
      SZA,RSS       SC BIT SET? 
      JMP SUM       NO, DOES NOT USE SYSTEM COMMON
* 
      JSB .XLD      GET SIZE OF SYSTEM COMMON 
      DEF $SC#
SUM   STA SCSIZ     SAVE IT LOCALLY FOR ADD 
      JSB .XLD      FIND OUT PROGRAM SIZE 
HIBP2 NOP           WILL CONTAIN ADDRESS OF $HIGH 
      AND =B76000   MASK OUT PARTITION NUMBER 
* 
* NOTE THAT THE POSITION OF THE SIZE FIELD RESULTS IN 
* THE SIZE IN WORDS WHEN THE LOWER 10 BITS ARE MASKED.
* 
* ADDING BASE PAGE SIZE MINUS ONE ACCOUNTS FOR THE
* TRANSLATION INTO WORD NUMBER, TO TOP ADDRESS. 
* 
      ADA =B1777    ADD BASE PAGE SIZE -1 
      ADA SCSIZ     ADD SIZE OF SYSTEM COMMON 
      STA LWAM,I    RETURN TOP AVAILIABLE ADDRESS TO CALLER 
      JSB .XLD      GET NUMBER OF SEGS
      DEF $SEGS 
      JSB .XLD
      DEF A,I       ID24 NOW IN A 
      CLB 
      RRL 8         PUT THE NUMBER OF SEGMENTS IN B 
      CMB,INB       TAKE TWO'S COMPLIMENT 
      STB NUMSG     SAVE THE NUMBER OF SEGMENTS 
      JSB .XLD      GET HIGH MAIN ADDRESS PLUS 1
      DEF $HIGH 
      JSB .XLD
      DEF A,I 
      STA LSEG,I    SET UP RETURNS TO A KNOWN INITIAL VALUE 
      STA SLSEG,I   FOR ALGORITHM BELOW 
      STA B         PUT HIGH ADDRESS IN B TO FIND SHORT IDS 
      LDA NUMSG     SKIP ALGORITHM IF NO SEGMENTS 
      SZA,RSS       ZERO IF NO SEGMENTS 
      JMP NOSGS 
      ADB =D-4      POINT B TO WORD 5 OF LAST SHORT ID
* 
LP    LDA B,I       GET HIGH MAIN ADDR OF SEGMENT 
      CMA,CLE,INA   COMPLIMENT, AND USE E TO TEST CONDITION 
      ADA LSEG,I    COMPARE WITH LAST LARGEST SEG 
      SEZ,RSS       E ZERO MEANS NEW LARGEST FOUND
      JMP NEWLG     NEW LARGEST WAS FOUND 
* 
      LDA B,I       GET HIGH SEGMENT ADDRESS AGAIN
      CMA,CLE,INA   COMPLIMENT IT, CLEAR E FOR TEST 
      ADA SLSEG,I   COMPARE WITH SECOND LARGEST SEGMENT 
      LDA B,I       RESTORE A FOR CONDITIONAL STORE 
      SEZ,RSS       E ZERO MEANS NEW SECOND LARGEST FOUND 
      STA SLSEG,I   THIS SEGMENT IS NEW SECOND LARGEST
      JMP BUMP      GO CHECK THE NEXT SEGMENT 
* 
NEWLG LDA LSEG,I    MAKE THE OLD LARGEST THE NEW SECOND LARGEST 
      STA SLSEG,I 
      LDA B,I       GET HIGH MAIN ADDRESS OF SEGMENT
      STA LSEG,I    SAVE FOR ALGORITHM AND POSSIBLE RETURN
BUMP  ADB =D-8      BUMP TO NEXT SEGMENT
      ISZ NUMSG 
      JMP LP
* 
NOSGS JSB $LIBX     RETURN TO CALLER
      DEF LIMSG 
      END 
                                                                                                                    