GETMST
          IDENT  GETMST 
          ENTRY  GETMST 
          SST 
          SPACE  4
***       GETMST - GET FIELDS FOR A DEVICE FROM THE *MST*.
* 
*         GETMST(EO,STAT,TYPE,FAM,DN,NUM,TPRU,SECT,MSKP,MSKS).
*                (*SYMPL* CALL) 
* 
*         ENTRY  (EO) = *EST* ORDINAL.
* 
*         EXIT   (STAT) = -2, INVALID ORDINAL.
*                         -1, NO MORE DISK ENTRIES. 
*                         1, EQUIPMENT (EO) IS NOT A DISK.
*                         0, EQUIPMENT (EO) IS A DISK.
* 
*                       IF (STAT) = 0, THE FOLLOWING PARAMETERS 
*                       ARE MEANINGFUL. 
*                (TYPE) = DEVICE TYPE, FROM *EST* ENTRY (12/DT,48/0). 
*                (FAM)  = FAMILY, FROM *MST* ENTRY (42/FAM,18/0). 
*                (DN)    = DEVICE NUMBER, FROM *MST* ENTRY. 
*                (NUM)  = NUMBER OF PHYSICAL DEVICES. 
*                (TPRU) = TOTAL *PRU* ON THIS DEVICE. 
*                (SECT) = NUMBER OF SECTORS PER TRACK.
*                (MSKP) = PRIMARY DEVICE MASK.
*                (MSKS) = SECONDARY DEVICE MASK.
* 
*         USES   X - ALL. 
*                A - 1,2,3,4,5,6. 
*                B - 1. 
          SPACE  2
 GETMST   BSS    1
          SB1    1
          SX6    A1 
          MX0    60-24
          SA6    PARM        SAVE PARAMETER LIST ADDRESS. 
  
*         IF FIRST CALL, FETCH *EST* POINTER FROM LOW CORE. 
  
          SA2    ESTFWA 
          NZ     X2,GM1      IF NOT FIRST CALL
          SX3    ESTP 
          SX4    ESTWORD
          SX5    B1 
          RJ     RLC         READ POINTER TO *EST*
          SA2    ESTWORD
          LX2    24-0 
          BX6    -X0*X2      EXTRACT FWA OF *EST* 
          SA6    ESTFWA 
          LX2    36-12
          MX4    60-12
          BX7    -X4*X2      EXTRACT ORDINAL OF LAST RMS
          SX7    X7-1 
          SX3    ESTE        GET *EST* ENTRY SIZE 
          IX7    X3*X7
          IX7    X6+X7
          SX7    X7+B1       DETERMINE LWA OF *EST* 
          SA7    LWARMS 
          BX2    X6 
  
*         VERIFY DESIRED ORDINAL IS VALID AND READ ITS *EST* ENTRY. 
  
 GM1      BSS    0
          SA1    PARM 
          SA1    X1 
          SA1    X1          FETCH *EST* ORDINAL
          SX6    -2 
          SB2    X1 
          LT     B2,B1,GM2
          SX3    ESTE 
          IX4    X1*X3
          SB2    X4 
          SA5    LWARMS 
          SX3    X2+B2       ADDRESS OF DESIRED *EST* ENTRY 
          IX5    X3-X5
          SX6    -B1
          PL     X5,GM2      IF ORDINAL TOO BIG 
          SX4    ESTENT 
          SX5    B1 
          RJ     RLC         READ *EST* ENTRY FOR SUPPLIED ORDINAL
          SA1    ESTENT 
          SX6    B1 
          PL     X1,GM2      IF NOT A DISK
          SX6    B0 
  
*         X6 .NE. 0 IF ORDINAL IS NOT OK. 
*         X1 = CONTENT OF *EST* ENTRY.
*         X0 = MASK FROM  MX0 48. 
  
 GM2      BSS    0
          SA5    PARM 
          SA2    X5+B1       FETCH ADD(STAT)
          SA6    X2          (STAT) = REQUEST STATUS
  
          NZ     X6,GETMST   RETURN IF NOT A DISK 
  
          MX0    48 
          BX3    -X0*X1 
          LX1    60-12
          BX6    -X0*X1      EXTRACT DEVICE TYPE
          LX6    60-12
          SA2    A2+B1
          SA6    X2          (TYPE) = DEVICE TYPE 
  
          SX4    MST
          LX3    3           CONVERT TO *MST* ADDRESS 
          SX5    ISGL 
          SX3    X3+TDGL
          RJ     RLC         READ *MST* ENTRY 
          SPACE  2
*         EXTRACT NEEDED DATA FROM THE *MST* ENTRY TO 
*         PROVIDE THE REPLY PARAMETERS. 
  
          SA5    MST+PFGL-TDGL
          SA2    A2+B1
          MX7    42 
          BX6    X7*X5
          SA6    X2          (FAM) = FAMILY 
  
          BX6    -X7*X5      DN*2**12 
          AX6    12 
          SA2    A2+B1
          SA6    X2          (DN) = DEVICE NUMBER 
  
          MX7    60-3 
          BX6    -X7*X5      EXTRACT NUMBER OF DEVICES -1 
          SX6    X6+B1
          SA2    A2+B1
          SA6    X2          (NUM) = NUMBER OF DEVICES
  
*         CALCULATE TOTAL SECTORS.
  
*                = NUMBER OF TRACKS ON EACH DEVICE. 
*                * SECTORS PER TRACK (SECTOR LIMIT) 
  
          SA3    MST+TDGL-TDGL
          LX3    12 
          BX4    -X0*X3      NUMBER OF TRACKS OF EACH PHYSICAL DEVICE 
          SA3    MST+MDGL-TDGL
          BX3    -X0*X3 
          IX6    X4*X3
          SA2    A2+B1
          BX7    X3 
          SA6    X2          (TPRU) = TOTAL SECTORS 
  
          SA2    A2+B1
          SA7    X2          (SECT) = NUMBER OF SECTORS PER TRACK 
          SPACE  2
          SA5    MST+PUGL-TDGL  FETCH DEVICE MASKS
          MX7    60-8 
          BX6    -X7*X5 
          SA2    A2+B1
          SA6    X2          (MSKP) = PRIMARY DEVICE MASK 
          LX5    60-8 
          BX6    -X7*X5 
          SA2    A2+B1
          SA6    X2          (MSKS) = SECONDARY DEVICE MASK 
          EQ     GETMST 
          SPACE  4
**        RLC - READ LOW CORE.
* 
*         ENTRY  (X3) = ADDRESS TO BE READ FROM LOW CORE. 
*                (X4) = ADDRESS OF BUFFER TO HOLD RESULTS OF READ.
*                (X5) = WORD COUNT. 
          SPACE  2
 RLC      BSS    1
          MX6    1
          SA6    X4 
          LX5    36 
          LX3    18 
          BX6    X3+X4
          BX6    X6+X5
          SA6    RSBA 
          SYSTEM RSB,R,RSBA 
          EQ     RLC
          SPACE  4
 PARM     BSS    1
 ESTES    BSS    1
 ESTFWA   DATA   0
 ESTWORD  BSS    1
 LWARMS   BSS    1
 ESTENT   BSS    1
 MST      BSS    ISGL 
 RSBA     BSS    1
  
          END 
