ASMB,R,Q,C * NAME: LIMEM * SOURCE: 92071-18204 * RELOC: 92071-1X204 * 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 LIMEM,6 92071-1X204 REV.2041 800604 ENT LIMEM * EXT .XSA,.XLA,.XLB,.XLD,.XST EXT $LIBX,$HIGH,$STAT,$HIBP EXT $SC#,$LIBR,.ENTR,$CSEG,$SEGS * * A EQU 0 B EQU 1 * * LIMEM NOP TRUE ENTRY POINT JSB $LIBR DISPATCHING COULD CAUSE TROUBLE NOP LDA LIMEM STA LIM.. CLA STA CSEG SET UP OPTIONAL PARAMETER DEFAULTS STA CLNG JMP LIM..+1 * AT$HB NOP ADDRESS OF ID25 ($HIBP) TOPAD NOP TOP LOGICAL ADDRESS IN PARTITION (PLUS 1) SCSIZ NOP WORDS OF SYSTEM COMMON USED * WHCH NOP LSEG NOP LLNG NOP CSEG NOP CLNG NOP LIM.. NOP PSEUDO-ENTRY POINT JSB .ENTR GET PARAMETER ADDRESSES DEF WHCH JSB .XLD GET ADDRESS OF ID25 DEF $HIBP STA AT$HB STORE IT LOCALLY FOR LATER JSB .XLD GET WHAT IS AT $HIBP DEF A,I RAL,CLE,ERA CLEAR THE 'AM' BIT LDB WHCH,I CCE,SSB,RSS JMP GET ALLOCATE AVAILABLE MEMORY JSB .XSA DE-ALLOCATE DEF AT$HB,I EXIT JSB $LIBX DEF LIM.. * * GET RAL,ERA SET ALL MEM BIT JSB .XSA DEF AT$HB,I JSB .XLD GET CURRENT SEG HIGH ADDR DEF $CSEG JSB .XLD DEF A,I STA CSEG,I STA LSEG,I SAVE START OF FREE MEMORY * * CALCULATE TOP PHYSICAL ADDRESS AVAILIABLE * JSB .XLD GET STAT WORD DEF $STAT JSB .XLD 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 .XLA FIND OUT PROGRAM SIZE DEF AT$HB,I A WILL HAVE CONTENTS OF ID25 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. ADA =B2000 ADD BASE PAGE SIZE ADA SCSIZ ADD SIZE OF SYSTEM COMMON STA TOPAD SAVE RESULT FOR LATER 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,SZB,RSS JMP NOSGS NONE STB LIMEM USE ORIG ENTRY AS TEMP WORD JSB .XLB GET HIGH MAIN ADDRESS PLUS 1 DEF $HIGH JSB .XLB DEF B,I ADB =D-4 POINT TO WORD 5 OF LAST SHORT ID * LP LDA B,I HIGH MAIN ADDR OF SEGMENT CMA,CLE,INA COMPLIMENT, AND USE E TO TEST CONDITION ADA LSEG,I COMPARE WITH LAST LARGEST SEG LDA B,I RESTORE A FOR CONDITIONAL STORE SEZ,RSS E ZERO MEANS NEW LARGEST FOUND STA LSEG,I NEW HIGH, SAVE IT ADB =D-8 BUMP TO NEXT SEGMENT ISZ LIMEM JMP LP * NOSGS LDA LSEG,I CMA,INA ADA TOPAD SUBTRACT HIGH SEGMENT FROM END OF MEMORY STA LLNG,I RETURN LENGTH TO CALLER * LDA CSEG,I CMA,INA ADA TOPAD SUBTRACT CURRENT SEGMENT FROM END OF MEMORY STA CLNG,I JMP EXIT DONE * END