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