         TITLE 'IFDOLT42  MORECORE MODULE'                              00200002
IFDOLT42 CSECT          ENTRY POINT                                     00400002
*********************************************************************** 00600002
*                            PROLOGUE                                 * 00800002
*                                                                     * 01000002
*                                                                     * 01200002
*   STATUS:                                                           * 01400002
*           CHANGE LEVEL 002                      OCT 4, 1971         * 01600002
*           THIS IS A RE-WRITE OF THE MORECORE MODULE AND IS          * 01800002
*           APPLICABLE TO RELEASES AFTER                              * 02000002
*                 1. RELEASE 21 OF OS                                 * 02200002
*                    AND TO ALL RELEASES OF VS1 AFTER REL 1          *  02400002
*                    AND VS2 REL 1..                                 *  02500002
*                                                                     * 02600002
*                                                                     * 02800002
*                                                                     * 03000002
*   FUNCTION:                                                         * 03200002
*           THE FUNCTION OF THIS MODULE IS TO ALLOCATE MAIN STORAGE   * 03400002
*           SPACE TO THE OLT  VIA THE MORECORE MACRO INSTRUCTION.     * 03600002
*           THIS MODULE WILL LOCATE THE MORECORE AREA AND THE TOTAL   * 03800002
*           NUMBER OF BYTES AVAILABLE TO THE OLT FOR MORECORE         * 04000002
*           REQUESTS FROM THE COMMON AREA.                            * 04200002
*                                                                     * 04400002
*           THE REQUESTOR CAN REQUEST CORE IN THREE FORMATS,          * 04600002
*           THEY ARE AS FOLLOWS.                                      * 04800002
*                                                                     * 05000002
*             A. BY SPECIFYING ONLY ONE PARAMETER , THAT IS,          * 05200002
*                THE MAXIMUM NUMBER OF BYTES THE OLT  MUST            * 05400002
*                HAVE TO CONTINUE.                                    * 05600002
*                                                                     * 05800002
*                                                                     * 06000002
*             B. BY SPECIFYING A MAXIMUM  AND A MINIMUM               * 06200002
*                NUMBER OF BYTES THE OLT MUST  HAVE  TO               * 06400002
*                CONTINUE                                             * 06600002
*                                                                     * 06800002
*                                                                     * 07000002
*             C. BY SPECIFYING THE MAXIMUM, THE MINIMUM AND           * 07200002
*                SETTING AN INDICATOR SPECIFYING  THAT IF THE         * 07400002
*                MAXIMUM CANNOT BE ALLOCATED, TO ALLOCATE THE LARGEST * 07600002
*                VALUE BETWEEN MAXIMUM AND MINIMUM. THIS              * 07800002
*                IS FOR LEVEL THREE CALLS ONLY                        * 08000002
*                                                                     * 08200002
*           TO QUALIFY FOR A MORECORE ALLOCATION THE OLT MOST         * 08400002
*           HAVE SPECIFAED 1T LEAST 24  (TWENTY FOUR) BYTES           * 08600002
*           OF MORE-CORE SPACE IN THE INITIALIZE PORTION OF           * 08800002
*           THE OLT. ALSO, NO LESS THAN A DOUBLE WORD OF              * 09000002
*           MAIN STORAGE SPACE WILL BE ALLOCATED.                     * 09200002
*                                                                     * 09400002
*                                                                     * 09600002
*           THIS MODULE WILL, ON THE FIRST CALL BULID THE             * 09800002
*           NECESSARY CONTROL BLOCKS TO INDICATE THE BEGINNING        * 10000002
*           AND END OF THE MORECORE AREA. EACH SUBSEQUENT CALL        * 10200002
*           WILL MERGE ALL CONSECTIVE FREE AREAS BEFORE               * 10400002
*           ATTEMPTING TO ALLOCATE MAIN STORAGE SPACE.                * 10600002
*                                                                     * 10800002
*                                                                     * 11000002
*   ENTRY POINT:                                                      * 11200002
*           IFDOLT42 IS THE MAIN AND OLNY ENTRY POINT TO              * 11400002
*           THIS MODULE.                                              * 11600002
*                                                                     * 11800002
*                                                                     * 12000002
*   INPUT:                                                            * 12200002
*           REGISTER TWO WILL POINT TO THE OLTEP COMMON AREA          * 12400002
*           REGISTER ONE WILL POINT TO THE OLTS PARAMETER LIST        * 12600002
*           REGISTER THIRTEEN WILL POINT TO THE OLTS SAVE AREA        * 12800002
*           REGISTER FOURTEEN WILL POINT TO THE RETURN ADDRESS        * 13000002
*                                                                     * 13200002
*   OUTPUT:                                                           * 13400002
*           IF UNSUCCESSFUL REGISTER FIFTEEN WILL BE AS FOLLOWS:      * 13600002
*                                                                     * 13800002
*              R15 = 04  FOR FUNCTION NOT AVAILABLE, THAT IS          * 14000002
*                     A. THE MACRO LEVEL IS INCORRECT                 * 14200002
*                     B. THE OLT REQUESTED A NEGITIVE AMOUNT          * 14400002
*                        OF CORE, OR A ZERO AMOUNT OF CORE.           * 14600002
*              R15 = 08 WHEN CORE COULD NOT BE ALLOTTED TO THE        * 14800002
*                    OLT.                                             * 15000002
*                                                                     * 15200002
*           IF SUCCESSFUL R15 WILL ALWAYS CONTAIN 00.                 * 15400002
*              ALSO R1 = ADDRESS OF MORECORE AREA USEABLE BY          * 15600002
*                        THE OLT                                      * 15800002
*                                                                     * 16000002
*                   R0 = THE NUMBER OF BYTES AVAILABLE TO THE         * 16200002
*                        OLT FOR MORECORE USEAGE.                     * 16400002
*                                                                     * 16600002
*                                                                     * 16800002
*   EXTERNAL ROUTINES:                                                * 17000002
*           THERE ARE NO EXTERNAL ROUTINES.                           * 17200002
*                                                                     * 17400002
*                                                                     * 17600002
*   EXITS NORMAL:                                                     * 17800002
*           NORMAL EXITS ARE MADE AT THE LABEL EXIT00                 * 18000002
*                                                                     * 18200002
*                                                                     * 18400002
*   EXITS ERROR:                                                      * 18600002
*           ERROR EXITS ARE MADE AT THE LABELS EXIT04                 * 18800002
*           AND EXIT08.                                               * 19000002
*                                                                     * 19200002
*                                                                     * 19400002
*   TABLES AND WORK AREAS:                                            * 19600002
*           A. OLTEPS COMMON AREA                                     * 19800002
*           B. OLTS MORECORE AREA WHICH IS ZERO UPON ENTRY            * 20000002
*                                                                     * 20200002
*********************************************************************** 20400002
         EJECT                                                          20600002
*********************************************************************** 20800002
*                           GENERAL PURPOSE                             21000002
*                           REGISTER EQUATES                            21200002
*********************************************************************** 21400002
WORKREG1 EQU   15                 USED FOR ARITWMETICS.                 21600002
PARMREG  EQU   1                  POINTS TO OLTS PARMETER LIST.         21800002
COMMON   EQU   2                  POINTS TO OLTEP COMMON AREA.          22000002
MAX      EQU   3                  CONTAINS MAXIMUM CORE OLT REQS        22200002
MIN      EQU   4                  CONTAINS MINIMUM CORE OLT REQS        22400002
HEAD     EQU   5                  POINTS TO BEGIN OF MORECORE           22600002
*                                 SPACE.                                22800002
TOTAL    EQU   6                  CONTAIN TOTAL NUMBER OF BYTES         23000002
*                                 AVAIL. TO OLT-OLTEP MORECORE          23200002
*                                 WORKINGS.                             23400002
NEWHEAD  EQU   7                  POINTS TO NEXT SLOT OF AVAIL.         23600002
*                                 CORE WHEN A SPLIT OF A LARGE          23800002
*                                 BLOCK OF CORE IS IN PROCESS.          24000002
SIZE     EQU     8                CONTAINS NUMBER OF BYTES AVAIL        24200002
*                                 FOR A BLOCK OF MORECORE SPACE.        24400002
NEXT     EQU   9                  POINTS TO NEXT AREA OF MORE-          24600002
*                                 CORE SPACE.                           24800002
NEWSIZE  EQU   10                 CONTAINS SIZE OF SPLIT BLOCK          25000002
*                                 DURING SPLIT PROCESSING               25200002
NEWNEXT  EQU   12                 POINTS TO SPLIT BLOCK DURIN           25400002
*                                 SPLIT PROCESSING                      25600002
BASEREG  EQU   11                 BASE REGISTER FOR IFDOLT42            25800002
SAVE     EQU   13                 SAVE AREA POINTER                     26000002
EXIT     EQU   14                 RETURN POINT IN OLT                   26200002
MINPASS  EQU   14                 CONTAINS MIN ON SECOND PASS           26400002
RETURNRG EQU   15               RETURN CODE REGISTER                    26600002
         EJECT                                                          26800002
*********************************************************************** 27000002
*                                                                     * 27200002
*  DISPLACEMENTS, LENGTH CODES, RETURN CODES, MASKS, AND LOAD         * 27400002
*  ADDRESS CONSTANTS                                                  * 27600002
*                                                                     * 27800002
*********************************************************************** 28000002
ZERO     EQU   0                  REGISTER ZERO AND CONSTANT ZERO       28200002
D0       EQU   0                  DISPLACEMENT OF ZERO                  28400002
D1       EQU   1                  DISPLACEMENT OF ONE                   28600002
TWO      EQU   2                  DISPLACEMENT OF TWO                   28800002
THREE    EQU   3                  DISPLACEMENT OF THREE                 29000002
L4       EQU   4                  LENGTH OF FOUR                        29200002
D4       EQU   4                  DISPLACEMENT OF FOUR                  29400002
D7       EQU   7                  DISPLACEMENT OF SEVEN                 29600002
D8       EQU   8                  DISPLACEMENT OF EIGHT                 29800002
EIGHT    EQU   8                  DISPLACEMENT OF EIGHT                 30000002
D12      EQU   12                 DISPLACEMENT OF 12                    30200002
TWELVE   EQU   12                 DISPLACEMENT VALUE                    30400002
COND12   EQU   12                 BRANCH MASK                           30600002
D20      EQU   20                 DISPLACEMENT OF 20                    30800002
D28      EQU   28                 DISPLACEMENT OF 28                    31000002
HEX00    EQU   X'00'              MASK FIELD OF 00                      31200002
HEX03    EQU   X'03'              MASK FIELD OF 03                      31400002
HEX04    EQU   X'04'              MASK FIELD OF 04                      31600002
HEX08    EQU   X'08'              MASK FIELD OF 08                      31800002
HEX10    EQU   X'10'              MASK FIELD OF 10                      32000002
HEX18    EQU   X'18'              MASK FIELD OF 18                      32200002
HEX80    EQU   X'80'              MASK FIELD OF 80                      32400002
HEXEF    EQU   X'EF'              MASK FIELD OF EF                      32600002
*********************************************************************** 33200002
*                STANDARD  LINKAGE  CONVENTIONS  FOLLOW               * 33400002
*********************************************************************** 33600002
         SAVE  (14,12),,IFDOLT42&SYSDATE SAVE MODID, DATE & REGS        33800002
*                                 SAVE REGISTERS IN OLT SAVE            34000002
*                                 AREA                                  34200002
         BALR  BASEREG,ZERO       ESTABLISH ADDRESSABILITY              34400002
         USING *,BASEREG          OBTAIN ADDR OF BASE                   34600002
         USING AAAAA,COMMON                                             34800002
         SPACE 2                                                        35000002
         MVC   SAVE1(72),D0(SAVE) SAVE HIS REGISERS IN MY AREA          35200002
         LM    MAX,MIN,D4(PARMREG)                                      35400002
*                                 OBTAIN PARMETES PASSED FOR            35600002
*                                 SIZE OF CORE REQUIRED                 35800002
         CLI   D1(PARMREG),HEX03  IS MACRO LEVEL OK                     36000002
         BH    EXIT04             NO, RETURN CODE 04 ***ERROR***        36200002
         LTR   MAX,MAX            IS AMOUNT NEEDED FOR MAX ZERO         36400002
*                                 OR MINUS                              36600002
         BC    COND12,EXIT04      YES, RETURN CODE 04 **ERROR***        36800002
         SPACE 2                                                        37000002
*                                 MACRO LEVEL IS OK AS IS AMOUNT        37200002
*                                 OF CORE REQUESTED.                    37400002
         SPACE 2                                                        37600002
*                                 OBTAIN MORCORE PARAMETRS              37800002
         LM    HEAD,TOTAL,PLKMOR+D8                                     38000002
*                                 ADDRESS OF MORECORE AREA              38200002
*                                 AND THE NUMBER OF BYTES               38400002
*                                 AVAILABLE.                            38600002
         LTR   HEAD,HEAD          IS THIS THE FIRST PASS THRU           38800002
         BNZ   MERGE01            IF THIS IS NOT THE FIRST PASS         39000002
*                                 SKIP THE FOLLOWING SET UP SECTION     39200002
         LM    HEAD,TOTAL,PARTITEM GET OLT AREA POINTER                 39400002
*                                 AND AND OLT PARTITION SIZE            39600002
         A     HEAD,PARTITEM+D8 ADD IN ROOT +PLINK SIZE                 39800002
*                                 TO GET MORECORE AREA ADDRESS          40000002
         S     TOTAL,PARTITEM+D8 GET NO. OF MORECORE BYTES AVAIL BY     40200002
*                                 TAKING OLT SIZE FROM GETMAIN AND      40400002
*                                 SUBTRACTING OUT THE ROOT + PLINK SIZE 40600002
         LA    WORKREG1,HEX18     SET MINIMUM CORE SIZE OLTEP CAN       41400002
*                                 OPERATE IN                            41600002
         CR    TOTAL,WORKREG1     IS THERE ENOUGH ROOM FOR              41800002
*                                 MORECORE REQUESTS                     42000002
         BL    EXIT08A            NO, RETURN CODE 08                    42200002
         ST    TOTAL,PLKMOR+D12   SAVE BYTE COUNT OF MORE CORE AREA     42220002
*                                                               YM04752 42240002
         ST    HEAD,PLKMOR+D8     SAVE MORECORE BEGIN ADDRESS           42260002
*                                 FIRST PASS.                   YM04752 42280002
         EJECT                                                          42300002
         SPACE 2                                                        42400002
*                                 PROCEED TO SET UP PRIMARY             42600002
*                                 CONTROL BLOCKS USED DURING            42800002
*                                 MORECORE REQUESTS                     43000002
         SPACE 2                                                        43200002
         LA    WORKREG1,HEX08     OBTAIN MORECORE ENDING ADDRESS        43400002
         SR    TOTAL,WORKREG1                                           43600002
*                                 OBTAIN END ADDR FOR CONTROL           43800002
         LA    WORKREG1,D0(HEAD,TOTAL) BLOCK AT MORECORE END            44000002
         MVI   D0(WORKREG1),HEXEF SET END ID AT MORE CORE AREA END      44200002
*                                 ENDING ADDRESS.                       44400002
         ST    WORKREG1,D4(HEAD)  STORE POINTER TO NEXT M.C.AREA        44600002
         LA    WORKREG1,HEX08     GET CONSTANT TO  OBTAIN               44800002
         SR    TOTAL,WORKREG1     REAL AVAILABLE CORE FOR MORE CORE     45000002
         ST    TOTAL,D0(HEAD)     STORE NUMBER OF BYTES AVAIL.          45200002
         OI    PLKMOR+D8,HEX80    SET FLAG TO BYPASS BUILD OF HEAD      45400002
*                                 ROUTINE.                              45600002
         XR    TOTAL,TOTAL        ZERO OUT REG FOR MAX AVAIL PASS       45800002
         ST    TOTAL,PLKMOR+D12   SAVE MAX AMOUNT AVAIL IN              46000002
*                                 OLTEP COMMON AREA                     46200002
         EJECT                                                          46400002
*                                 THIS SECTION OF CODE WILL MERGE       46600002
*                                 ALL FREE CONTIGOUS BLOCK OF           46800002
*                                 MORECORE SPACE                        47000002
         SPACE 2                                                        47200002
MERGE00  CLI   D0(HEAD),HEXEF     IS THE END OF MORECORE AREA           47400002
         BE    MAXAVL00           GO TO ROUTINT TO GET MAX AVAIL        47600002
         SPACE 1                                                        47800002
MERGE01  EQU   *                  GET SIZE AND POINTER TO NEXT          48000002
         LM    SIZE,NEXT,D0(HEAD) AVAILABLE MC AREA                     48200002
         LTR   SIZE,SIZE          IS SPACE ALLOCATED                    48400002
         BNM   MERGE03            NO, GO CHECK FOR AVAIL.               48600002
MERGE02  LR    HEAD,NEXT          YES, SET POINTER NEXT                 48800002
         B     MERGE00            GO CHECK FOR M.C. END                 49000002
MERGE03  CLI   D0(NEXT),HEX00     IS NEXT BLOCK ELIGIBLE FOR            49200002
         BNE   MERGE02            MERGING., NO, GET NEXT                49400002
         MVC   D4(L4,HEAD),D4(NEXT)                                     49600002
*                                 UPDATE POINT TO MERGE TWO             49800002
*                                 BLOCKS                                50000002
         L     NEWSIZE,D0(NEXT)   OBTAIN NEW SIZE BY ADDING             50200002
         LA    NEWSIZE,D8(SIZE,NEWSIZE)                                 50400002
*                                 BOTH BLOCK SIZES AND EIGHT            50600002
*                                 BYTES FOR CONTROL BLOCK WHICH         50800002
*                                 WAS PURGED.                           51000002
         ST    NEWSIZE,D0(HEAD)   SAVE NEW SIZE OF TWO MERGED           51200002
*                                 BLOCKS.                               51400002
*                                 GO CONTINUE SCANNING FOR MORE         51600002
*                                 FREE CONTIGOUS BLOCKS                 51800002
         CL    NEWSIZE,PLKMOR+D12   IS NEWSIZE GREATER THAN OLD         52000002
*                                 GREATER SAVE AREA SIZE                52200002
         BNH   MERGE04            NO,DO NOT RESTORE MAX AVAIL AREA      52400002
         ST    NEWSIZE,PLKMOR+D12  YES, SAVE LAGREST AVAIL IN OLTEP     52600002
         SPACE  2                                                       52800002
MERGE04  EQU   *                  CONTINUE PROCESSING MERGE ROUTINE     53000002
         L     WORKREG1,D4(HEAD)  GET POINTER TO NEXT AVAIL             53200002
         CLI   D0(WORKREG1),HEXEF BLOCK. IS THIS THE END                53400002
         BNE   MERGE01            GO GET PTR TO NEXT AREA               53600002
*                                 END- OF MERGE ROUTINE                 53800002
         EJECT                                                          54000002
*                                 THIS SECTION OF CODE WILL CALCULATE   54200002
*                                 THE SIZE OF THE LARGEST AVAILABLE     54400002
*                                 BLOCK OF MORECORE AND STORE IT INTO   54600002
*                                 OLTEPS COMMON AREA.                   54800002
MAXAVL00 EQU   *                  BEGIN PROCESSING LARGEST AVAILABLE    55000002
         L     HEAD,PLKMOR+D8     GET POINTER TO MORECORE AREA FROM     55200002
         XC    PLKMOR+D12(4),PLKMOR+D12                                 55400002
*                                 COMMON AREA                           55600002
MAXAVL01 CLI D0(HEAD),HEXEF       IS THIS THE LAST BLOCK MORECORE       55800002
*                                 SPACE                                 56000002
         BE    BOUNDRY            YES, GO PROCESS REQUEST               56200002
         LM    SIZE,NEXT,D0(HEAD) OBTAIN SIZE AND NUMBER OF BYTES       56400002
*                                 FOR THIS BLOCK OF MORECORE SPACE      56600002
         LTR   SIZE,SIZE          IS THIS BLOCK AVAILABLE FOR MORE      56800002
*                                 CORE REQUESTS                         57000002
         BM    MAXAVL02                                                 57200002
         CL    SIZE,PLKMOR+D12    YES IS THIS BLOCK SIZE GREATER THAN   57400002
*                                 PREVIOUS AVAL BLK SIZE                57600002
         BNH   MAXAVL02           NO, USE OLD VALUE FOR THE MAXIMUM     57800002
*                                 AVAILABLE BLOCK SIZE                  58000002
         ST    SIZE,PLKMOR+D12    YES, SAVE THIS BLOCK SIZE AS          58200002
*                                 LARGEST AVAILABLE BLOCK SIZE          58400002
MAXAVL02 LR    HEAD,NEXT          GET POINTER TO NEXT AVAIL BLOCK       58600002
*                                 FOR THIS PASS                         58800002
         B     MAXAVL01           GO PROCESS NEXT BLOCK OF CORE         59000002
         EJECT                                                          59200002
BOUNDRY  EQU   *                  SAVE REAL SIZE REQUETED               59400002
         ST    MAX,MAXSAVE        SAVE BYTE COUNT REQUESTED             59600002
*                                 THIS SECTION OF CODE WILL ROUND       59800002
*                                 THE OLTS REQUEST TO THE               60000002
         LA    MAX,D7(MAX)        NEAREST DOUBLE WORD                   60200002
         SRL   MAX,THREE          ROUND OFF THE                         60400002
         SLL   MAX,THREE          SIZE THE OLT REQUEST FOR              60600002
         LTR   MAX,MAX            CORE TO THE NEAREST UPWARD            60800002
         BNZ   ASSIGN00           BOUNDRY ON A DOUBLE WORD.             61000002
         LA    MAX,EIGHT          INSURE NON-ZERO                       61200002
ASSIGN00 EQU   *                  IF THIS POINT IS REACHED AN           61400002
*                                 ATTEMPT TO ASSIGN THE OLT CORE        61600002
*                                 WILL BE MADE. OBTAIN FROM COMMO       61800002
*                                 AREA POINTR TO M.C. AREA AND          62000002
*                                 NUMBER OF BYTES AVAIL.                62200002
         L     HEAD,PLKMOR+D8     GET MORECORE POINTER                  62400002
ASSIGN01 LM    SIZE,NEXT,D0(HEAD) GET SIZE, FLAG, AND PTR TO            62600002
         CLI   D0(HEAD),HEXEF     NEXT AVAIL. IS THIS END               62800002
         BE    EXIT08             YES, RETURN CODE = 08 **ERROR**       63000002
         LTR   SIZE,SIZE          IS THIS BLOCK AVAIL                   63200002
         BP    ASSIGN03           YES, GO CHECK SIZE REQ.0              63400002
ASSIGN02 LR    HEAD,NEXT          NO, GET NEXT POINTER TO HEAD          63600002
         B     ASSIGN01           CONTINUE SCANNING                     63800002
ASSIGN03 CR    MAX,SIZE           IS THIS SLOT LARGE ENOUGH             64000002
         BH    ASSIGN02           NO, GET NEXT POINTER                  64200002
         EJECT                                                          64400002
*                                 DETERMINE IF A SPLIT OF               64600002
*                                 BLOCKS IS POSSIBLE SINCE              64800002
*                                 MAX IS NOT GREATER THAN               65000002
*                                 AVAIL SIZE                            65200002
SPLIT00  LA    WORKREG1,HEX10(MAX) IS THERE ROOM FOR TWO WORD           65400002
         CR    SIZE,WORKREG1      CONTROL BLOCKS AND EIGHT              65600002
         BL    RETURN00           BYTES OF MORECORE SPACE.              65800002
*                                 YES, SET UP NEW CTL WORDS             66000002
SPLIT01  LA    NEWHEAD,D8(HEAD,MAX) GET PTR TO NEW CTL WORD             66200002
         ST    NEXT,D4(NEWHEAD)    SAVE PTR TO NEXT IN NEW              66400002
*                                  CTL WORD                             66600002
         ST    NEWHEAD,D4(HEAD)    SAVE PTR TO NEW CTL WD IN            66800002
*                                  OLD CTL WORD                         67000002
         ST    MAX,D0(HEAD)        SAVE MAX IN SIZE SLOT OF             67200002
*                                  OLD CTL WORD                         67400002
         SR    NEXT,NEWHEAD        CAL. USABLE SIZE OF NEW              67600002
*                                  BLOCK AFTER SPLIT                    67800002
         LA    WORKREG1,HEX08      SET SUBTRAHAND                       68000002
         SR    NEXT,WORKREG1       NEXT EQUALS SIZE OF NEW              68200002
         ST    NEXT,D0(NEWHEAD)    BLOCK. SAVE SIZE IN NEW              68400002
RETURN00 OI    D0(HEAD),HEX80      CTR WORD. SET ACTIVE ID              68600002
         XR    RETURNRG,RETURNRG   SET SUCCESSFUL RETURN                68800002
         LA    PARMREG,D8(HEAD)   SET RETURN ADDR FOR OLTS USE          69000002
         L     ZERO,MAXSAVE       RETURN NUMBER OF BYTES REQUESTED      69200002
         B     EXIT00             GO RESTORE  G. P. REGISTERS           69400002
*                                 AND EXIT.                             69600002
         EJECT                                                          69800002
EXIT04   LA    RETURNRG,HEX04     SET ERROR RETURN CODE                 70000002
         B     EXIT00             GO RESTORE G. P. REGISTERS            70200002
*                                 AND EXIT.                             70400002
EXIT08   EQU   *                                                        70600002
*                                 THIS SECTION HANDLES MORECORE         70800002
*                                 BETWEEN AND MORECORE MIN-PASS-        71000002
*                                 ES THRU THIS MODULE.                  71200002
         LTR   MIN,MIN            WAS THE MIN PARAMETER SUPPLIED        71400002
         BNZ   MINPAS00           YES, GO PROCESS IT                    71600002
         SPACE 2                                                        71800002
EXIT08A  EQU   *                  ENTER HERE ON NO CORE SITUATIONS      71880002
         LA    RETURNRG,HEX08     SET RETURN CODE                       71960002
         B     EXIT00             GO EXIT MODULE                        72040002
         SPACE 2                                                        72120002
MINPAS00 EQU   *                  HANDLE MIN PASS SUBROUTINE            72200002
         L     MINPASS,PLKMOR+D12 GET SIZE OF LARGEST AVAIL BLOCK       72400002
         LR    MAX,MIN            SET MAX TO MIN FOR NEXT               72600002
         XR    MIN,MIN            PASS AND SET MIN TO ZERO              72800002
         CLI   D1(PARMREG),HEX03  WAS THE BETWEEN  PARM GIVEN           73000002
         BNE   BOUNDRY            NO GO HANDLE THIS WITH MIN            73200002
         CR    MINPASS,MAX        IS OUR MAX AVAIL LESS                 73400002
*                                 THAN OLTS MIN RETURN                  73600002
         BL    EXIT08             A CODE 08          *** ERROR ***      73800002
*                                 IF EQUAL OR GREATER USE OUR           74000002
*                                 MAX AVAIL FROM SAVE REGISTER          74200002
         LR    MAX,MINPASS        USE OLTEPS LARGER SIZE FOR            74400002
*                                 SEAREC ARGUMENT ON MIN PASS           74600002
         B     BOUNDRY            GO ATTEMPT TO ALLOCATE                74800002
EXIT00   EQU   *                  BEGIN EXTI OF MORECORE MODULE         75000002
         L     EXIT,D12(SAVE)     GET RETURN POINT REGISTERS            75200002
         LM    TWO,TWELVE,D28(SAVE) RESTORE OLT REGISTER 2              75400002
         BR    EXIT               THRU 12 AND EXIT                      75600002
SAVE1    DC    18F'0'             TEMP A SAVE AREA                      75800002
MAXSAVE  DC    F'0'               SAVE AREA FOR ACTUAL BYTE COUNT       76000002
DC       DC    C'IFDOLT42 PATCH AREA ' DUMP PATCH ID                    76200002
AAAAA     IFDCOM                                                        76800002
         END                                                            77000002
