ASMB,R,Q,C * NAME: LIMSG * SOURCE: 92070-18322 * RELOC: 92070-1X322 * 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 92070-1X322 REV.2040 800721 ENT LIMSG * * LIMSG IS A SPECIAL ROUTINE PROVIDED FOR BASIC ON RTE-L. * IT AUTOMATICALLY LOCKS THE MEMORY BEHIND THE CALLING PROGRAM, * AND RETURNS THE TOP ADDRESS AVAILABLE, AS WELL AS THE * TOP ADDRESSES OF THE HIGHEST AND SECOND HIGHEST SEGMENT. * THIS ROUTINE, PROVIDED FOR UNMAPPED RTE-L, ASSUMES THE * PROGRAM WAS LOADED TO RUN IN BACKGROUND. * IT DOES NOT ASSUME THE PROGRAM IS SEGMENTED. * * EXT $HIGH,$LOW,$CSEG,$SISZ EXT $LIBR,.ENTP,$LOBP,$LIBX,$ROM * * A EQU 0 B EQU 1 * * NUMSG NOP FOR SAVING THE NUMBER OF SEGMENTS * * THIS IS THE BLOCK OF THE PASSED PARAMETER ADDRESES * LSEG NOP LARGEST SEGMENT TOP ADDRESS SLSEG NOP SECOND LARGEST SEGMENT TOP ADDRESS LWAM NOP LAST WORD OF AVAILABLE MEMORY * LIMSG NOP TRUE ENTRY POINT JSB $LIBR TURN OFF MEMORY PROTECT NOP JSB .ENTP PICK UP PARAMETER ADDRESSES DEF LSEG LDA $CSEG,I GET ID WORD WITH ALL MEM BIT IOR =B100000 SET ALL MEM BIT STA $CSEG,I SET ALL MEM BIT IN ID * LDA $ROM RETURN LAST WORD AVAILABLE MEMORY ADA =D-1 ACCOUNT FOR STARTING BOUNDARY OF ROM STA LWAM,I LDA $HIGH,I GET HIGH MAIN TO INITIALIZE RETURNS STA LSEG,I SET UP RETURNS TO A KNOWN INITIAL VALUE STA SLSEG,I FOR ALGORITHM BELOW AND NO SEG RETURN * LDA $LOBP,I GET NUMBER OF SEGS CLB RRL 6 PUT THE NUMBER OF SEGMENTS IN B CMB,INB,SZB,RSS TAKE TWO'S COMPLIMENT JMP NOSGS THERE ARE NO SEGMENTS * STB NUMSG SAVE THE NUMBER OF SEGMENTS LDB $LOW,I GET LOW MAIN TO FIND SHORT IDS ADB =D4 POINT TO WORD 5 OF FIRST 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 $SISZ BUMP TO NEXT SEGMENT ISZ NUMSG JMP LP * NOSGS JSB $LIBX RETURN TO CALLER DEF LIMSG END