COMPCMA 
COMMON
          CTEXT  COMPCMA - CENTRAL MEMORY AVAILABLE ON RECOVERY.
          SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMPCMA
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       CMA - CENTRAL MEMORY AVAILABLE ON RECOVERY. 
*         A. J. BEEKMAN.  74/06/18. 
*         P. D. HAAS.        80/03/17.
          SPACE  4
***              CMA BUILDS A FOUR WORD TABLE OUTLINING THE 
*         LARGEST AREA OF CENTRAL MEMORY THAT NEED NOT REMAIN 
*         INTACT DURING A RECOVERY DEADSTART.  THE TABLE IS 
*         BUILT AT THE ADDRESS PASSED BY THE CALLING PROGRAM. 
*         THE TABLE FORMAT IS-
* 
*T        12/ U FA RA 
*T,       12/ L FA RA 
*T,       12/ U FA FL 
*T,       12/ L FA FL 
* 
*         U      UPPER BYTE OF ADDRESS. 
*         L      LOWER BYTE OF ADDRESS. 
*         FA     FREE AREA BLOCK FOLLOWING SUBSYSTEM BLOCK. 
*         RA     REFERENCE ADDRESS/ 100.
*         FL     FIELD LENGTH/ 100. 
* 
*         ENTRY  (A) = 6/ MSZL, 12/ TFAB. 
*                MSZL = MEMORY SIZE LIMIT FLAG. 
*                       0 = CHECK ENTIRE MACHINE FL FOR FREE AREA.
*                       1 = CHECK UP TO 262K. 
*                       2 = CHECK UP TO 131K. 
*                TFAB = ADDRESS TO BUILD TABLE FOR FREE AREA BLOCK. 
* 
*         EXIT   (A) = 0. 
*                (T5) = LWA + 1 OF TABLE. 
* 
*         USES   CM - CM+4, T1 - T7.
* 
*         CALLS  CLF. 
* 
*         XREF   COMSSSD, COMSPIM.
  
  
 CMA      SUBR               ENTRY/EXIT 
          STM    CLBA        SET TABLE FWA
          SHN    -14
          STM    CLBB        SAVE MEMORY SIZE LIMIT FLAG
          ADC    SHNI+77-15 
          STM    CLBC 
          STM    CLBD 
          LDN    NCPL        FETCH NUMBER OF CONTROL POINTS 
          CRD    T6 
          ADN    MCTP-NCPL   GET MCT POINTER
          CRD    CM 
          AOD    T7          SET SYSTEM CP NUMBER 
          LDN    1
          STD    T6          INITIALIZE MCT ORDINAL 
 CMAA     LDD    CM+1 
*         UJN    CMA1        (PRESET COMPLETE)
          STM    CMAB 
          LDD    CM          SET MCT BASE ADDRESS 
          RAM    CMAB-1 
          IF     -DEF,SCA 
          ERRNZ  MCTP-PCPP   CODE DEPENDS ON VALUE
          LDD    CM+4 
          STM    SCAA 
          LDD    CM+3        SET FWA OF PCP-S 
          RAM    SCAA-1 
          ENDIF 
          LDC    *           INSERT SKIP AROUND PRESET CODE 
          ORG    *-1
          LOC    CMAA 
          UJN    CMA1        ENTER MAIN LOOP
          LOC    *O 
          STM    CMAA 
  
*         MAIN LOOP.
  
 CMA1     LDD    T6          CONVERT ORDINAL TO INDEX 
          SHN    1
          ADC    0           READ MCT ENTRY 
 CMAB     EQU    *-1
          CRD    CM 
          RJM    CLB         CHECK FREE MEMORY
          LDD    CM+1 
          STD    T6          FORWARD LINK = NEXT MCT ORDINAL
          LMD    T7 
          NJN    CMA1        IF NOT SYSTEM CP 
*         LDN    0
          UJP    CMAX        RETURN 
 CLB      SPACE  4,10 
**        CLB - CHECK LARGEST FREE MEMORY BLOCK.
* 
*         ENTRY  (T6) = MCT ORDINAL = CP/PCP NUMBER.
*                (CM - CM+4) = MCT ENTRY. 
* 
*         USES   CM+3, CM+4, T0 - T5. 
* 
*         CALLS  SAT, SCA.
  
  
 CLB1     SOD    CM+4 
          PJN    CLB2        IF NO UNDERFLOW
          AOD    CM+4 
          SOD    CM+3        DECREMENT HOLE SIZE
  
*         CHECK IF CURRENT AREA IS LARGEST. 
  
 CLB2     LDP    2,T5        CHECK REDUCED HOLE SIZE
          SBD    CM+3 
          SHN    14          COMPARE WITH PREVIOUSLY FOUND
          ADP    3,T5 
          SBD    CM+4 
          PJN    CLBX        IF THIS NOT LARGEST FREE AREA
  
*         VERIFY RA + HOLE SIZE WITHIN REQUESTED BOUNDS.
  
 CLB3     LDC    0           CHECK FOR MEMORY SIZE LIMIT
*         LDC    1           (262K MEMORY LIMIT)
*         LDC    2           (131K MEMORY LIMIT)
 CLBB     EQU    *-1
          ZJN    CLB4        IF NO MEMORY SIZE LIMIT
          LDD    T3 
 CLBC     SHN    -13         131K MEMORY LIMIT
*         SHN    -14         (262K MEMORY LIMIT)
          ADD    T2 
          NJN    CLBX        IF RA BEYOND LIMIT 
          LDD    T3 
          ADD    CM+4 
 CLBD     SHN    -13         131K MEMORY LIMIT
*         SHN    -14         (262K MEMORY LIMIT)
          ADD    CM+3 
          NJN    CLB1        IF RA + HOLE NOT WITHIN LIMIT
 CLB4     LDD    T2 
          SHN    14 
          ADD    T3          SET RA IN PARAMETER BUFFER 
          RJM    SAT
          LDD    CM+3 
          SHN    14 
          ADD    CM+4        SET HOLE SIZE
          RJM    SAT
  
 CLB      SUBR               ENTRY/EXIT 
          LDC    0
 CLBA     EQU    *-1
          STD    T5          RESET TABLE FWA
          LDP    2,T5 
          SBD    CM+3 
          SHN    14          CHECK CURRENT BLOCK WITH PREVIOUS
          ADP    3,T5 
          SBD    CM+4 
          PJN    CLBX        IF HOLE SIZE .LE. PREVIOUS 
          LDD    T6 
          RJM    SCA         SET CP/PCP ADDRESS 
          ADN    FLSW 
          CRD    T0          GET FL CONTROL WORD
          LDD    T4 
          RAD    T3          RA OF HOLE = RA + FL OF CP/PCP 
          SHN    -14
          RAD    T2 
          UJP    CLB3        CHECK HOLE WITHIN BOUNDS 
          SPACE  4,10 
**        SAT - STORE ADDRESS IN TABLE. 
* 
*         ENTRY  (A) = 18 BIT ADDRESS TO STORE. 
*                (T5) = TABLE ADDRESS.
* 
*         EXIT   (T5) ADVANCED BY 2.
  
  
 SAT      SUBR               ENTRY/EXIT 
          STP    1,T5 
          SHN    -14         SET ADDRESS IN TABLE 
          STI    T5 
          LDN    2           ADVANCE TABLE ADDRESS
          RAD    T5 
          UJN    SATX        RETURN 
          IF     -DEF,SCA 
 SCA      SPACE  4,10 
**        SCA - SET CP/PCP AREA ADDRESS.
* 
*         ENTRY  (A) = CP/PCP NUMBER. 
*                (T7) = SYSTEM CP NUMBER. 
* 
*         EXIT   (A) = CPA/PCPA ADDRESS.
  
  
 SCA1     ADD    T7          SET REAL CP AREA ADDRESS 
          SHN    7
  
 SCA      SUBR               ENTRY/EXIT 
          SBD    T7 
          MJN    SCA1        IF REAL CP 
          ZJN    SCA1        IF SYSTEM CP 
          SBN    1           SET PCP AREA ORDINAL 
          SHN    7
          ADC    0           ADD BASE PCPA ADDRESS
 SCAA     EQU    *-1
          UJN    SCAX        RETURN 
          ENDIF 
          SPACE  4
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CMA      EQU    /COMPCMA/CMA 
 SAT      EQU    /COMPCMA/SAT 
 QUAL$    ENDIF 
          ENDX
