ASMB,R,L,C * NAME: LIMEM * SOURCE: 92064-18069 * RELOC: 92064-16065 * PGMR: G.L.M. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. 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 92064-16065 REV.1650 760927 * EXT .ENTR,$LIBR,$LIBX * ENT LIMEM * * .1 OCT 1 .3 OCT 3 .8 DEC 8 .9 DEC 9 .13 DEC 13 .14 DEC 14 .15 DEC 15 * CURLO NOP TMP1 NOP W24 NOP W27 NOP TP24 NOP DLIM DEF LIMEM * * * WHEN 0 WORDS AVAIL-- * RETURN= * IFW=0 * IWAS=0 * A,B AND SEG PARMS ARE UNDEFINED * * * SKP * * THIS ROUTINE LOCATES AVAILABLE MEMORY AND CHANGES * THE HIGH MAIN ADDRESS OF THE CALLING PROGRAMS * ID-SEGMENT TO ASSIGN AVAILABLE MEMORY TO THE PROG. * THIS ROUTINE ALSO RESETS THE THE ABOVE MODIFIED * ADDRESS IF REQUESTED TO DO SO. * * * CALLING SEQUENCE: * * JSB LIMEM * DEF RTN * DEF WHICH <0=RELEASE \ >=0 =FETCH * * DEF FWAM FIRST WORD AVAIL * DEF NUM NUMBER OF WORDS AVAIL * * DEF FWAMS FIRST WORD AVAIL PAST CURRENT SEG * DEF NUMS NUMBER OF WORDS AVAIL PAST CURR. SEG. * * RTN XXX * * NOTE! ONLY "WHICH" IS REQUIRED * * SPC 5 LIMEM NOP * LDB DLIM STB IWH STA IFW STB IWDS STB IFWAS STB IWS LDA LIMEM STA DIMEN JMP DIMEN+1 * * IWH DEF LIMEM IFW DEF LIMEM IWDS DEF LIMEM * *OPTIONAL PARAMETERS * IFWAS DEF LIMEM IWS DEF LIMEM * DIMEN NOP JSB .ENTR FETCH PARMS DEF IWH * LDA XEQT INITIALIZE ADA .14 STA TMP1 CURRENT ADA .9 STA W24 ID ADA .3 STA W27 * LDB TP24 SEE IF MEMORY ASSIGNED CLA SZB JSB SETIT YES IT WAS, GO RESET( STA TP24 --STB W24,I) * * * LDA IWH,I FETCH TYPE WORD SSA CHECK RELEASE OR FETCH JMP EXIT IT'S RELEASE--ALL DONE * * * FETCH AVAILABLE MEMORY * * DETERMINE PROGRAM TYPE * LDA TMP1,I FETCH WORD CONTAINING TYPE AND .15 ISOLATE TYPE CPA .1 CHECK FOR FOREGROUND TYPE(1) JMP SRCH YES IT IS--GO FIND FREE MEMORY * * COULD THERE EVER BE A CONFLICT WHERE APLDR * MIGHT TAKE THE FREE AREA BEFORE THE IDSEG * COULD BE FUDGED? -- IF SO THIS WHOLE ROUTINE * SHOULD BE PRIV. * * * WE ARE IN A PARTITION-- ALLOCATE THE REST OF IT. * TOP LDB AVMEM HIGH LDA W24,I FETCH START ADDRESS(MAIN) * * GO SET INTO IDSEG * JSB SETIT (STA TP24 ---STB W24,I) * RSS SKIP 0 WORD ENTRY * BAD CLB BAD IS USED WHEN 0 WORDS ARE AVAIL (A=0) STA IFW,I SET AS FWAM FOR CALLER * CMA,INA CALCULATE ADA B NUMBER OF WORDS AVAILABLE STA IWDS,I SET FOR CALLER * * LDA W27,I FETCH CURRENT SEGMENT HIGH SZA ANY SEGS LOADED?S INA,RSS BUMP PAST LAST WORD IN SEG LDA IFW,I NO SEGMENTS HAVE BEEN LOADED STA IFWAS,I CURRENT SEG HIGH OR PROG. CMA,INA CALCULATE # WORDS ADB A AVAILABLE STB IWS,I RETURN VALUE TO USER * * EXIT JMP DIMEN,I * * * IF PROG IS NON-SEGMENTED(WD 27 OF IDSEG =0) * * ON RETURN--A=FWA * B=#WDS * IF SEGMENTED-- * A=FWA PAST SEG * B=#WDS AVAIL PAST SEG * * * * SKP * * SRCH LDA INDB FIRST TIME,INDIRECT THRU (B) STA CURLO LDB KEYWD STB SETIT SAVE IDSEG POINTER * SR2 LDB SETIT,I FETCH ADDRESS OF ID SEG SZB,RSS IF END OF KEYWD TABLE JMP END * ADB .13 ADVANCE TO TYPE WD. LDA B,I FETCH TYPE SZA,RSS THIS IDSEG ASSIGNED JMP NO NOPE--TRY NEXT ONE INB ADVANCE TO TYPE WORD LDA B,I FETCH IT AND .15 ISOLATE TYPE CPA .1 ONLY CHECK TYPE 1 PROGS JMP FG IT'S TYPE 1--CONTINUE * NO ISZ SETIT DIDN'T LIKE LAST ONE--GET NEXT ONE JMP SR2 CONTINUE SEARCH * * FG ADB .8 ADVANCE TO LOW MAIN WORD LDA B,I FETCH LOW MAIN CMA,INA NEGATE STA TMP1 SAVE FOR SECOND TEST ADA W24,I IS THIS LOW MAIN > CALLERS HIGH MAIN? SZA,RSS IF EQUAL JMP BAD THEN EXIT 0 WORDS AVAILABLE SSA,RSS LOW > CALLER HIGH? JMP NO NO--TRY NEXT ONE * * FIRST TIME THRU-- * B=ADDR OF LOW MAIN &CURLO POINTS AT (B),I * SO RESULT WILL BE ZERO AND ADDRESS WILL BE SAVED. * * LDA TMP1 FETCH CURRENT -LOW MAIN ADA CURLO,I SEE IF THIS LOWEST FOUND * VERIFY THAT SGN WILL WORK IN ALL CASES!!!!???? * SSA,RSS STB CURLO YES IT'S THE LOWEST YET-SAVE IT * JMP NO NOT LOWEST--TRY NEXT ONE * * END LDB CURLO SEE IF ANY BODY IS ABOVE CALLER CPB INDB CHECK AGAINST RESET VALUE JMP TOP NO ONE ABOVE--ALLOCATE REST OF MEMORY LDB B,I GOT ADDRESS -- FETCH VALUE JMP HIGH GOT IT--GO SET THIS AS NEW HIGH MAIN * * * SETIT NOP JSB $LIBR NOP STA TP24 STB W24,I JSB $LIBX DEF SETIT * INDB OCT 100001 FIRST TIME ADD INDIRECT THRU (B) KEYWD EQU 1657B XEQT EQU 1717B AVMEM EQU 1751B A EQU 0 B EQU 1 * END *