COMPLDA 
COMMON
          CTEXT  COMPLDA - CONVERT DISK ADDRESS.
          SPACE  4,10 
          IF     -DEF,QUAL$,1 
          QUAL   COMPLDA
          BASE   M
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 LDA      SPACE  4,10 
*****     LDA - CONVERT DISK ADDRESS. 
* 
*         P. D. HAAS.        78/07/25.
 LDA      SPACE  4,10 
***              *LDA* SIMULATES THE *LDAM* MONITOR FUNCTION IN THE 
*         CONVERSION OF LOGICAL DISK ADDRESSES TO THE CORRESPONDING 
*         PHYSICAL ADDRESSES FOR A PARTICULAR EQUIPMENT TYPE.  THIS 
*         CONVERSION IS VALID ONLY FOR SINGLE UNIT DEVICES. 
* 
*         SUBROUTINE *PDA* MUST BE CALLED PRIOR TO THE FIRST *LDA*
*         CALL TO PRESET THE PROPER ADDRESS CONVERSION PROCESSOR. 
 LDA      SPACE  4,10 
          IF     -DEF,UN,1
 UN       EQU    CM          PHYSICAL DISK ADDRESS
 LDA      SPACE  4,10 
**        LDA - CONVERT DISK ADDRESS. 
* 
*         ENTRY  (T6) = LOGICAL TRACK.
*                (T7) = LOGICAL SECTOR. 
*                (UN) = PHYSICAL UNIT.
* 
*         EXIT   (UN) = PHYSICAL UNIT.
*                (UN+1) = PHYSICAL CYLINDER.
*                (UN+2) = PHYSICAL TRACK. 
*                (UN+3) = PHYSICAL SECTOR.
* 
*         CALLS  CDA, CDC, CDD, CDI, CDJ, CDK, CDL, CDM, CDQ, CDR,
*                CDX, CDY, CDZ. 
  
  
 LDA      SUBR               ENTRY/EXIT 
          LCN    0           INITIALIZE TRACK CALCULATION 
          STD    UN+2 
          LDD    T6          (A) = LOGICAL TRACK (LT) 
          LPC    3777 
          LJM    CDI         EXIT TO PREPROCESSOR 
 LDAA     EQU    *-1
*         LJM    CDJ         (DJ EQUIPMENT) 
*         LJM    CDK         (DK EQUIPMENT) 
*         LJM    CDL         (DL EQUIPMENT) 
*         LJM    CDM         (DM EQUIPMENT) 
*         LJM    CDQ         (DQ EQUIPMENT) 
*         LJM    CDR         (DR EQUIPMENT) 
*         LJM    CDX         (DX EQUIPMENT) 
*         LJM    CDY         (DY EQUIPMENT) 
*         LJM    CDZ         (DZ EQUIPMENT) 
*         LJM    CDA         (DA EQUIPMENT) 
*         LJM    CDC         (DC EQUIPMENT) 
*         LJM    CDD         (DD EQUIPMENT) 
  
*         RETURN HERE FROM CONVERSION PROCESSORS. 
  
 LDA1     SHN    21-0 
          STD    UN+1 
          SHN    0-21 
          ZJN    LDA2        IF TRACK 0 WITHIN CYLINDER 
          LDC    0
 LDAB     EQU    *-1         (SECTORS PER LOGICAL TRACK)
 LDA2     ADD    T7          LOGICAL SECTOR (LS)
 LDA3     STD    UN+3        CALCULATE PHYSICAL SECTOR
 LDA4     AOD    UN+2        CALCULATE PHYSICAL TRACK 
          LDD    UN+3 
          ADC    -30
 LDAC     EQU    *-1
*         ADC    -40         (885, 834 AND CDSS EQUIPMENTS) 
*         ADC    -57         (836 EQUIPMENTS) 
*         ADC    -25         (3330 EQUIPMENTS)
*         ADC    -34         (3350/33502 EQUIPMENTS)
*         ADC    -140        (895 EQUIPMENTS) 
          PJN    LDA3        IF ADDRESS NOT COMPLETE
          UJN    LDAX        RETURN 
 CDI      SPACE  4,10 
**        CDI - 7X54/844-21 ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         HC = BIT 0 OF LT         HALF CYLINDER BIT
*         HT = BIT 1 OF LT         HALF TRACK BIT 
* 
*         PC = BITS 2 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (HT+2*LS)/30+HC*11  PHYSICAL TRACK 
*         PS = R((HT+2*LS)/30)     PHYSICAL SECTOR
  
  
 CDI      BSS    0
          STD    T0 
          LPN    1
          ZJN    CDI1        IF NOT HALF CYLINDER 
          LDN    11 
          RAD    UN+2 
 CDI1     LDD    T0 
          SHN    21-1 
 CDI2     STD    UN+1        SET CYLINDER 
          SHN    0-21 
          ADD    T7 
 CDI3     UJN    LDA2        COMPLETE ADDRESS CONVERSION
 CDJ      SPACE  4,10 
**        CDJ - 7X54/844-4X ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         HT = BIT 0 OF LT         HALF TRACK BIT 
* 
*         PC = BITS 1 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (HT+2*LS)/30        PHYSICAL TRACK 
*         PS = R((HT+2*LS)/30)     PHYSICAL SECTOR
  
  
 CDJ      BSS    0
          SHN    21-0 
          UJN    CDI2        COMPLETE ADDRESS CONVERSION
 CDK      SPACE  4,10 
**        CDK - 7154/844-21 ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         XX = BITS 0 - 1 OF LT    TRACK NUMBER WITHIN CYLINDER 
* 
*         PC = BITS 2 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (XX*162+LS)/30      PHYSICAL TRACK 
*         PS = R((XX*162+LS)/30)   PHYSICAL SECTOR
  
  
 CDK      BSS    0
          SHN    21-1 
          STD    UN+1 
          SHN    1-21 
          ZJN    LDA2        IF TRACK 0 WITHIN CYLINDER 
          STD    T0 
          LDN    0
          STD    UN+3 
 CDK1     LDC    162
 CDKA     EQU    *-1
*         LDC    144         (3330-1) 
          RAD    UN+3 
          SOD    T0 
          NJN    CDK1        LOOP TO COMPLETE (XX*162)
          LDC    162         RESET CONSTANT 
          STM    CDKA 
          LDD    UN+3 
 CDK2     UJN    CDI3        COMPLETE ADDRESS CONVERSION
 CDL      SPACE  4,10 
**        CDL - 7154/844-4X ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         X = BIT 0 OF LT          TRACK NUMBER WITHIN CYLINDER 
* 
*         PC = BITS 1 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (X*345+LS)/30       PHYSICAL TRACK 
*         PS = R((X*345+LS)/30)    PHYSICAL SECTOR
  
  
 CDL      EQU    LDA1 
 CDM      SPACE  4,10 
**        CDM - 7155/885 HALF TRACK ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         HT = BIT 0 OF LT         HALF TRACK BIT 
* 
*         PC = BITS 1 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (HT+2*LS)/40        PHYSICAL TRACK 
*         PS = R((HT+2*LS)/40)     PHYSICAL SECTOR
  
  
 CDM      EQU    CDJ
 CDQ      SPACE  4,10 
**        CDQ - 7155/885 FULL TRACK ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         X = BIT 0 OF LT          TRACK NUMBER WITHIN CYLINDER 
*         SL = 1200                SECTOR LIMIT 
* 
*         PC = BITS 1 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (X*SL+LS)/40        PHYSICAL TRACK 
*         PS = R((X*SL+LS)/40)     PHYSICAL SECTOR
  
  
 CDQ      EQU    LDA1 
 CDX      SPACE  4,10 
**        CDX - 3330-1 ADDRESS CONVERSION PROCESSOR.
* 
*         ALGORITHM - 
*         XX = BITS 0 - 1 OF LT        TRACK NUMBER WITHIN CYLINDER 
*         PC = BITS 2 - 12 OF LT       PHYSICAL CYLINDER
*         PT = (XX*144+LS)/25          PHYSICAL TRACK 
*         PS = R((XX*144+LS)/25)       PHYSICAL SECTOR
  
  
 CDX      BSS    0
          STD    T0 
          LDC    144         SECTORS PER LOGICAL TRACK
          STM    CDKA 
          LDD    T0 
          UJN    CDK         PROCESS AS *DK*
 CDY      SPACE  4,10 
**        CDY - 3330-11 ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         X = BIT 0 OF LT              LOGICAL TRACK WITHIN CYLINDER
*         PC = BITS 1 - 12 OF LT       PHYSICAL CYLINDER
*         PT = (X*310+LS)/25           PHYSICAL TRACK 
*         PS = R((X*310+LS)/25)        PHYSICAL SECTOR
  
  
 CDY      EQU    LDA1 
 CDZ      SPACE  4,10 
**        CDZ - 3350 FULL TRACK ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         X = BIT 0 OF LT              LOGICAL TRACK WITHIN CYLINDER
*         SL = 644                     SECTOR LIMIT 
*         PC = BITS 1 - 12 OF LT       PHYSICAL CYLINDER
*         PT = (X*SL+LS)/34            PHYSICAL TRACK 
*         PS = R((X*SL+LS)/34)         PHYSICAL SECTOR
  
  
 CDZ      EQU    LDA1 
 CDA      SPACE  4,10 
**        CDA - 33502 FULL TRACK ADDRESS CONVERSION PROCESSOR.
* 
*         ALGORITHM - 
*         X = 0                        LOGICAL TRACK WITHIN CYLINDER
*         SL = 1510                    SECTOR LIMIT 
*         TL = 2140                    TRACK LIMIT
*         VL = TL/2                    VOLUME TRACK LIMIT 
*         PC = LT-1060*(LT/VL)         PHYSICAL CYLINDER
*         PT = (LS)/34B                PHYSICAL TRACK 
*         PS = R(LS)/34B               PHYSICAL SECTOR
*         PU = (LT/VL)*40B+UNIT        PHYSICAL UNIT
  
  
 CDA      STD    UN+1        SET PHYSICAL CYLINDER
          LDD    UN          LOAD PHYSICAL UNIT 
          LPN    37 
          STD    UN          SET TO VOLUME 0
          LDD    UN+1        LOAD LOGICAL TRACK 
          ADC    -1060       MINUS VOLUME TRACK LIMIT 
          MJN    CDA1        IF VOLUME 0
          STD    UN+1        RESET PHYSICAL CYLINDER
          LDD    UN 
          LMN    40B         SET VOLUME 1 
          STD    UN 
 CDA1     LDN    0
          UJN    CDK2        COMPLETE CONVERSION
 CDC      SPACE  4,10 
**        CDC - 7165/895 FULL TRACK CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         X = BIT 0 OF LT          TRACK NUMBER WITHIN CYLINDER 
*         SL = 1300                SECTOR LIMIT 
* 
*         PC = BITS 1 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (X*SL+LS)/140       PHYSICAL TRACK 
*         PS = R((X*SL+LS)/140)    PHYSICAL SECTOR
  
  
 CDC      EQU    LDA1 
 CDD      SPACE  4,10 
**        CDD - 7255/834 FULL TRACK ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         X = BIT 0 OF LT          TRACK NUMBER WITHIN CYLINDER 
*         SL = 240                 SECTOR LIMIT 
* 
*         PC = BITS 1 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (X*SL+LS)/40        PHYSICAL TRACK 
*         PS = R((X*SL+LS)/40)     PHYSICAL SECTOR
  
  
 CDD      EQU    LDA1 
 CDG      SPACE  4,10 
**        CDG - 7255/836 FULL TRACK ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         X = BIT 0 OF LT          TRACK NUMBER WITHIN CYLINDER 
*         SL = 1064                SECTOR LIMIT 
* 
*         PC = BITS 1 - 12 OF LT   PHYSICAL CYLINDER
*         PT = (X*SL+LS)/57        PHYSICAL TRACK 
*         PS = R((X*SL+LS)/57)     PHYSICAL SECTOR
  
  
 CDG      EQU    LDA1 
 CDR      SPACE  4,10 
**        CDR - CDSS II ADDRESS CONVERSION PROCESSOR. 
* 
*         ALGORITHM - 
*         SL = 3600                     SECTOR LIMIT
*         X  = BIT 0 OF LT              LOGICAL TRACK IN CYLINDER GROUP 
*         SO = (1200)*X                 STARTING SECTOR OFFSET
*         PC = LT+(LT/2)+(LS+SO)/2400   PHYSICAL CYLINDER 
*         SC = R((LS+SO)/2400)          SECTOR WITHIN CYLINDER
*         PT = SC/40                    PHYSICAL TRACK
*         PS = SC-PT*40                 PHYSICAL SECTOR 
  
  
 CDR      BSS    0           ENTRY
          STD    UN+1 
          SHN    21-0 
          RAD    UN+1 
          SHN    0-21 
          LMN    1
          ADC    SHNI 
          STM    CDRA 
          LDC    -1200
 CDRA     SHN    0           SHIFT IF FIRST TRACK OF CYLINDER GROUP 
          ADC    2400        (A) = 0 IF FIRST TRACK, 1200 IF SECOND 
          ADD    T7          CONVERT LS TO RELATIVE SECTOR
          STD    UN+3 
          ADC    -2400
          MJN    CDR1        IF ON STARTING CYLINDER OF TRACK 
          STD    UN+3        RELATIVE SECTOR ON SECOND CYLINDER 
          AOD    UN+1        INCREMENT CYLINDER 
 CDR1     LJM    LDA4        COMPLETE CONVERSION
 LDA      SPACE  4,10 
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 LDA      EQU    /COMPLDA/LDA 
 QUAL$    ENDIF 
 PDA      RMT 
          IF     -DEF,QUAL$,1 
          QUAL   COMPLDA
 PDA      SPACE  4,10 
**        PDA - PRESET DISK ADDRESS CONVERSION ROUTINE. 
* 
*         ENTRY  (A) = ALGORITHM INDEX. 
* 
*         EXIT   *LDA* PRESET FOR SPECIFIED DEVICE TYPE.
* 
*         USES   T1.
  
  
 PDA      SUBR               ENTRY/EXIT 
          STD    T1          SET TABLE INDEX
          SHN    1
          RAD    T1 
          LDM    PDAA-1,T1   SET SECTOR LIMIT 
          STM    LDAB 
          LDM    PDAA-2,T1   SET TRACK / SECTOR CALCULATION 
          STM    LDAC 
          LDM    PDAA-3,T1   SET PREPROCESSOR ADDRESS 
          STM    LDAA 
          UJN    PDAX        RETURN 
  
 PDAA     INDEX              LIST OF DEVICE PARAMETERS
          INDEX  3*AIDI-3,(CDI,-30,0) 
          INDEX  3*AIDJ-3,(CDJ,-30,0) 
          INDEX  3*AIDK-3,(CDK,-30,0) 
          INDEX  3*AIDL-3,(CDL,-30,345) 
          INDEX  3*AIDM-3,(CDM,-40,0) 
          INDEX  3*AIDQ-3,(CDQ,-40,1200)
          INDEX  3*AIDR-3,(CDR,-40,3600)
          INDEX  3*AIDX-3,(CDX,-25,0) 
          INDEX  3*AIDY-3,(CDY,-25,310) 
          INDEX  3*AIDZ-3,(CDZ,-34,644) 
          INDEX  3*AIDA-3,(CDA,-34,0) 
          INDEX  3*AIDC-3,(CDC,-140,1300) 
          INDEX  3*AIDD-3,(CDD,-40,240) 
          INDEX  3*AIDG-3,(CDG,-57,1064)
          INDEX  3*AIDS-3 
 LDA      SPACE  4,10 
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 PDA      EQU    /COMPLDA/PDA 
 QUAL$    ENDIF 
 PDA      RMT 
          ENDX
