COMPCEA 
COMMON
          CTEXT  COMPCEA - CONVERT EXTENDED MEMORY ADDRESS. 
          IF     -DEF,QUAL$,1 
          QUAL   COMPCEA
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       CEA - CONVERT EXTENDED MEMORY ADDRESS.
*         D. A. HIVELEY.     75/01/28.
          SPACE  4
***              CEA CONVERTS A LOGICAL TRACK AND SECTOR ADDRESS
*         INTO AN XM ADDRESS.  DUE TO THE FORMAT OF XM, TWO ADDRESSES 
*         ARE RETURNED. THESE ARE THE ADDRESS OF THE LINKAGE BYTES
*         AND THE ADDRESS OF THE DATA SECTOR. 
*         LINK WORD ADDR = (TRACK*101B*SLDE) + SECTOR.
*         DATA ADDR = (TRACK*101B*SLDE) + (SECTOR*100B) + SLDE. 
* 
*         IF *CEI$* IS DEFINED, ROUTINE *CEI* WILL BE ASSEMBLED TO USE
*         THE XM TRACK SHIFT ASSOCIATED WITH THE CPU ACCESSIBLE XM
*         DEVICE.  OTHERWISE, THE XM LINK DEVICE WILL BE USED.
* 
*         IF *CEA$* IS DEFINED, REMOTE CODE FOR SUBROUTINE *CEI*
*         WILL BE DEFINED TO INITIALIZE THE TRACK SIZE AND SECTOR 
*         LIMIT.  A *CEI* LABELED *HERE* INSTRUCTION MUST BE
*         SPECIFIED TO CAUSE ASSEMBLY OF THE *CEI* SUBROUTINE AT
*         THE APPROPRIATE PLACE WITHIN THE CALLING PP PROGRAM 
*         (PRESET RECOMMENDED).  THE CALLING PROGRAM MUST RETURN
*         JUMP TO *CEI* BEFORE MAKING ANY *CEA* CALLS.
* 
*         IF *CEA$* IS NOT DEFINED, THE SUBROUTINE *CEI* WILL BE
*         ASSEMBLED IN-LINE, AND THE FIRST EXECUTION OF *CEA* WILL
*         INITIALIZE THE TRACK SIZE AND SECTOR LIMIT CODE.
*         EXECUTION OF *CEI* DESTROYS CM - CM+4.
* 
*         ENTRY  (T6) = XM TRACK. 
*                (T7) = XM SECTOR.
* 
*         EXIT   (CM+3 - CM+4) = XM ADDRESS OF DATA SECTOR. 
*                (T0 - T1) = XM ADDRESS OF LINKAGE WORD FOR SECTOR. 
  
  
 CEA1     LDD    T6          EXTRACT TRACK
          LPC    3777 
 CEAA     SHN    4           TRACK*X (X=20B, 40B, 100B OR 200B) 
          STD    T1 
          SHN    -14
          STD    T0 
          SHN    14 
          LMD    T1 
          SHN    -6 
          RAD    T0 
          LDD    T1 
          LPN    77 
          SHN    6
          ADD    T7          PLUS SECTOR
          RAD    T1 
          SHN    -14
          RAD    T0 
          LDD    T7          ADD (SECTOR*77B) + SECTOR LIMIT
          SHN    6
          SBD    T7 
          ADC    **          ADD SECTOR LIMIT 
 CEAB     EQU    *-1
          ADD    T1 
          STD    CM+4 
          SHN    -14
          ADD    T0 
          STD    CM+3 
  
 CEA      SUBR               ENTRY/EXIT 
 CEA$     IF     -DEF,CEA$
 CEAC     RJM    CEI         INITIALIZE XM ADDRESS FORMULA
*         UJN    CEA1        (INITIALIZATION COMPLETE)
 CEA$     ENDIF 
          UJP    CEA1        INITIALIZATION COMPLETE
 CEA$     IF     DEF,CEA$ 
 CEI      RMT 
 CEA$     ENDIF 
 CEI      SPACE  4,10 
**        CEI - CEA INITIALIZE. 
* 
*         ENTRY  (T6) = XM TRACK. 
*                (T7) = XM SECTOR.
* 
*         EXIT   FORMULA IN *CEA* INITIALIZED TO USE SHIFT COUNT
*                ASSOCIATED WITH DEVICE SPECIFIED BY *CEI$*.
* 
*         USES   CM - CM+4. 
* 
*         MACROS ISTORE.
  
  
 CEI      SUBR               ENTRY/EXIT 
 CEI$     IF     DEF,CEI$ 
          LDK    EXML        USE *XMSC* OF CPU-ACCESSIBLE EM DEVICE 
          CRD    CM 
          LDD    CM+4 
 CEI$     ELSE
          LDK    MMFL        USE *EMSC* OF LINK DEVICE
          CRD    CM 
          LDD    CM+1 
 CEI$     ENDIF 
          LPC    777
          SFA    EST
          ADK    EQAE 
          CRD    CM 
          LDD    CM+2 
          SHN    -6          SET XM SHIFT COUNT 
          LPN    3
          RAM    CEAA 
          STM    CEIA 
          LDN    1
 CEIA     SHN    ** 
          STM    CEAB        SECTORS PER TRACK
 CEA$     IF     -DEF,CEA$
          ISTORE CEAC,(UJN CEA1)
 CEA$     ENDIF 
          UJN    CEIX        FORMULA INITIALIZED
 CEA$     IF     DEF,CEA$ 
 CEI      RMT 
 CEA$     ENDIF 
          SPACE  4
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CEA      EQU    /COMPCEA/CEA 
 QUAL$    ENDIF 
          ENDX
