COMBUDT 
COMMON
  
#     COMBUDT - UNIT DEVICE TABLE.                                    # 
                                               CONTROL NOLIST;
                                               CONTROL IFEQ LISTCON,1;
                                               CONTROL LIST;
                                               CONTROL FI;
  
                             BEGIN  # COMBUDT # 
  
                                                                      # 
***       COMBUDT - UNIT DEVICE TABLE.
* 
*         COMBUDT CONTAINS THE ARRAY WHICH DESCRIBES THE UNIT DEVICE
*         TABLE.  THE *UDT* CONTAINS ONE ENTRY FOR EACH M860 DEVICE 
*         AND CONTAINS THE CURRENT HARDWARE AND SOFTWARE STATUS OF THE
*         DEVICE. 
  
 SPC      MICRO  1,,$SPC$ 
 1SS      MICRO  1,,$1SS$ 
                                                                      # 
  
#UDTW0    #DEF#  0           # UDTW0 #0#;  # *UDT* WORD ZERO #
  
# 
*     BEAD FUNCTIONS FOR *SSBLD*, *SSALTER*, AND *SSEXEC*.
# 
  
      DEF CIFI(CUNUM,CIFN,DTIN,FIELD,VALUE) 
  
#     IF CIFN LQ 1
      THEN
        BEGIN 
        B<CIFN*24+DTIN*6+FIELD,1>UD$CIF01[CUNUM] = VALUE; 
        END 
  
      ELSE
        BEGIN 
        B<CIFN*24-48+DTIN*6+FIELD,1>UD$CIF23[CUNUM] = VALUE;
        END 
#;
  
      DEF CIFO(CUNUM,CIFN,DTON,FIELD,VALUE) 
  
#     IF CIFN LQ 1
      THEN
        BEGIN 
        B<CIFN*24+DTON*6+12+FIELD,1>UD$CIF01[CUNUM] = VALUE;
        END 
  
      ELSE
        BEGIN 
        B<CIFN*24-48+DTON*6+12+FIELD,1>UD$CIF23[CUNUM]= VALUE;
        END 
#;
  
      DEF DTI01(CUNUM,DTIN,DIFN,FIELD,VALUE)
#       B<DTIN*12+DIFN*6+FIELD,1>UD$DTI[CUNUM] = VALUE #; 
  
      DEF DTO01(CUNUM,DTON,DIFN,FIELD,VALUE)
#       B<DTON*12+DIFN*6+FIELD,1>UD$DTO[CUNUM] = VALUE #; 
  
      DEF DIF01(CUNUM,DIFN,DRCN,FIELD,VALUE)
#       B<DIFN*24+DRCN*6+FIELD,1>UD$DIF[CUNUM] = VALUE #; 
  
      DEF DRC00(CUNUM,DRCN,DRDN,FIELD,VALUE)
#       B<DRDN*6+FIELD,1>UD$DRCP0[CUNUM] = VALUE #; 
  
      DEF DRC01(CUNUM,DRCN,DRDN,FIELD,VALUE)
#       B<DRDN*6+FIELD,1>UD$DRCP1[CUNUM] = VALUE #; 
  
      DEF DRC02(CUNUM,DRCN,DRDN,FIELD,VALUE)
#       B<(DRDN-8)*6+FIELD,1>UD$DRCP2[CUNUM] = VALUE #; 
  
      DEF DRC03(CUNUM,DRCN,DRDN,FIELD,VALUE)
#       B<(DRDN-8)*6+FIELD,1>UD$DRCP3[CUNUM] = VALUE #; 
  
      DEF AIF0(CUNUM,ACN,FIELD,VALUE) 
#       B<ACN*6+FIELD,1>UD$AIF0[CUNUM] = VALUE #; 
  
      DEF AIF1(CUNUM,ACN,FIELD,VALUE) 
#       B<ACN*6+FIELD,1>UD$AIF1[CUNUM] = VALUE #; 
  
      DEF SMAC(CUNUM,AC,AIFN,VALUE) 
  
#     IF AIFN EQ 0
        THEN
          BEGIN 
          B<AC*6,6>UD$SMAIF0[CUNUM] = VALUE;
          END 
  
        ELSE
          BEGIN 
          B<AC*6,6>UD$SMAIF1[CUNUM] = VALUE;
          END 
#;
  
      DEF SMDRD(SMNUM,ORD,FIELD,VALUE)
  
#     IF ( ORD EQ 0 ) OR ( ORD EQ 2 ) OR ( ORD EQ 4 ) OR ( ORD EQ 6 ) 
      THEN
        BEGIN 
        B<FIELD,1>D0$FLG[SMNUM] = VALUE;
        END 
  
      ELSE
        BEGIN 
        B<FIELD,1>D1$FLG[SMNUM] = VALUE;
        END 
#;
  
  
      DEF SMCUST(SMNUM,ORD,FIELD,VALUE) 
#       B<FIELD+ORD*10>SM$STS[SMNUM] = VALUE #; 
  
      DEF CUORD(SMNUM,ORD,POS,VALUE)
#       B<POS*10,ORD>SM$CNTLR[SMNUM] = VALUE #; 
  
      DEF MSGCNT(MRBCIF,CONORD) 
#       B<MRBCIF*6,6>UD$MCOUNTS[CONORD] #;  # CHANNEL MSG COUNT # 
  
      DEF PATHBIT(INDEX,TYPE) 
#       B<(INDEX*6)+TYPE,1>PATH$WORD[0] #;  # PATH STATUS BIT # 
  
# 
*         PARAMETER LIST FOR *SSBLD* DIRECTIVES 
# 
  
        DEF BLLM      #11#;      # TYPES OF *SSBLD* DIRECTIVES #
        DEF COMMA     #","#;    # COMMA # 
        DEF PERIOD    #"."#;    # PERIOD #
  
  
# 
*          CONTROLLER AND SM TABLE LENGTH AND NUMBER OF EACH ALLOWED
*          IN THE TABLE.
# 
           DEF BUDT       #"BUDT"#;  # CONFIGURATION FILE BINARY #
           DEF BUDTPW     #"BINUDT"#;  # BUDT PASSWORD #
           DEF MSGLT      #11#;      # MESSAGE TABLE LENGTH # 
           DEF SUDT       #"SUDT"#;  # CONFIGURATION FILE SOURCE #
           DEF UDTCUL     #MAXCTN * UDTCNTL#;  # *CNT* TABLE LENGTH # 
           DEF UDTSML     # MAXSM * SMALT #;  # SM TABLE LENGTH # 
  
  
# 
*          MISCELLANEOUS DEFINITIONS. 
# 
  
           DEF CHANPC     #2#;       # CYBER CHANNELS PER CONTROLLER #
           DEF MAXEST     #O"777"#;  # MAXIMUM EST ORDINAL #
           DEF MAX$DRTO   #1#;       # MAXIMUM DRIVER TIMEOUT # 
           DEF MAX$MSTO   #480#;     # MAXIMUM MESSAGE TIMEOUT #
           DEF MAX$CH     #3#;       # MAXIMUM CHANNELS # 
           DEF MAX$CIF    #3#;       # MAXIMUM CIF DEVICE ADDRESS # 
           DEF MAX$DTI    #1#;       # MAXIMUM DTI DEVICE ADDRESS # 
           DEF MAX$DTO    #1#;       # MAXIMUM DTO DEVICE ADDRESS # 
           DEF MAX$DIF    #1#;       # MAXIMUM DIF DEVICE ADDRESS # 
          DEF MAX$DRC    #3#;        # MAXIMUM DRC DEVICE ADDRESS # 
           DEF MAX$DRD    #7#;       # MAXIMUM DRD DEVICE ADDRESS # 
          DEF MAX$DRDDA  #15#;       # MAXIMUM EXPANDED DRD DEVICE
                                       ADDRESS #
           DEF MAX$AC     #3#;       # MAXIMUM AC DEV ADDR FOR 4 SM-S # 
           DEF MAX$AIF    #1#;       # MAXIMUM AIF DEVICE ADDRESS # 
           DEF MAX$SMCU   #2#;       # MAXIMUM M862-S INTO ONE M861 # 
           DEF MAX$SMDRD  #2#;      # MAXIMUM DRD-S IN ONE M861 # 
           DEF LARCUDTLT  # UDTHDRLT+(MAXCTN*UDTCNTL)+(MAXSM*SMALT)#; 
#                                    LANGLEY RESEARCH CENTER
                                     MAXIMUM UDT LENGTH # 
           DEF LARCUDTLTM # LARCUDTLT+64 #; # LENGTH FOR DISK WRITES #
           DEF LARCUDTLTM1 #LARCUDTLT-1#;   # LARCUDTLT MINUS 1 # 
  
           DEF ONLINE     #X"0000"#; # SET PATH/DEVICE ONLINE # 
           DEF OFFLINE    #X"8000"#; # SET PATH/DEVICE OFFLINE #
           DEF DIAGNOSTIC #X"4000"#; # SET DEVICE IN DIAGNOSTIC MODE #
  
           DEF SAVENONE   #0#;       # SAVE NONE OF MESSAGE # 
           DEF SAVEPART   #1#;       # SAVE PART OF MESSAGE # 
           DEF SAVEMOST   #2#;       # SAVE MOST OF MESSAGE # 
  
           DEF DRST0      #2#;       # DRD STATUS INDEX FROM CU 0 # 
           DEF DRST1      #3#;       # DRD STATUS INDEX FROM CU 1 # 
  
           DEF SMST0      #2#;       # 1ST SM CU STATUS INDEX # 
           DEF SMST1      #4#;       # 2ND SM CU STATUS INDEX # 
  
      DEF ERROR      #0#;            # DRIVER TURNED CHANNEL OFF #
      DEF OPERATOR   #1#;            # SSALTER CHANGED CHANNEL STATUS # 
  
  
# 
*     THE FOLLOWING DEFINITIONS ARE INSERTED
*     TO ALLOW *SSALTER* TO DETERMINE RELATIVE LOCATIONS
*     WITHIN THE UDT. THESE RELATIVE LOCATIONS ARE USED 
*     BY *SSEXEC* TO CHANGE THE STATUSES OF THE ELEMENTS
*     WITHIN THE UDT IN *SSEXEC* MEMORY.
# 
  
          DEF BIAS$EN0    #0#;       # BIAS FOR WORD 0 #
          DEF BIAS$EN1    #1#;       # BIAS FOR WORD 1 #
          DEF BIAS$EN2    #2#;       # BIAS FOR WORD 2 #
          DEF BIAS$EN3    #3#;       # BIAS FOR WORD 3 #
          DEF BIAS$EN4    #4#;       # BIAS FOR WORD 4 #
          DEF BIAS$EN5    #5#;       # BIAS FOR WORD 5 #
          DEF BIAS$EN6    #6#;       # BIAS FOR WORD 6 #
          DEF BIAS$EN7    #7#;       # BIAS FOR WORD 7 #
          DEF BIAS$EN8    #8#;       # BIAS FOR WORD 8 #
          DEF BIAS$EN9    #9#;       # BIAS FOR WORD 9 #
          DEF BIAS$EN10   #10#;      # BIAS FOR WORD 10 # 
          DEF BIAS$EN11   #11#;      # BIAS FOR WORD 11 # 
          DEF BIAS$EN12   #12#;      # BIAS FOR WORD 12 # 
          DEF BIAS$EN13   #13#;      # BIAS FOR WORD 13 # 
          DEF BIAS$EN14   #14#;      # BIAS FOR WORD 14 # 
          DEF BIAS$EN15   #15#;      # BIAS FOR WORD 15 # 
          DEF BIAS$EN16   #16#;      # BIAS FOR WORD 16 # 
          DEF BIAS$EN17   #17#;      # BIAS FOR WORD 17 # 
          DEF BIAS$EN18   #18#;      # BIAS FOR WORD 18 # 
          DEF BIAS$EN19   #19#;      # BIAS FOR WORD 19 # 
          DEF BIAS$EN20   #20#;      # BIAS FOR WORD 20 # 
          DEF BIAS$EN21   #21#;      # BIAS FOR WORD 21 # 
          DEF BIAS$EN22   #22#;      # BIAS FOR WORD 22 # 
          DEF BIAS$EN23   #23#;      # BIAS FOR WORD 23 # 
          DEF BIAS$EN24   #24#;      # BIAS FOR WORD 24 # 
          DEF BIAS$EN25   #25#;      # BIAS FOR WORD 25 # 
  
  
# 
*          6 BIT - 1 BYTE - PATH DEFINITIONS. 
# 
  
           STATUS PATH$DF 
           U$EXISTS,                 # EXISTS BIT # 
           U$ON,                     # TURNED ON/OFF BIT #
           U$CU$ACK,                 # CONTROLLER ACKNOWLEDGEMENT # 
           U$RQ$DIAG,                # REQUEST DIAGNOSTIC MODE #
           U$DIAG$ACK,               # ACKNOWLEDGE DIAGNOSTIC MODE #
           U$DONE;                   # PATH PROCESSED # 
  
      COMMON BUDTCOM; 
  
        BEGIN  # BUDTCOM #
  
# 
*     MISCELLANEOUS ITEMS.
# 
  
        ITEM ACKINDEX   U;           # TEMP UDT ACK BIT FIELD INDEX # 
        ITEM ACKLINE    U;           # TEMP UDT ACK BIT WORD INDEX #
        ITEM DRST       U;           # DRD CU STATUS INDEX #
        ITEM MAX$ACHN   U;           # MAX NUMBER OF ACTIVE CHANS # 
        ITEM NUM$CU     I;           # NUMBER OF M862 *CU-S* #
        ITEM NUM$SM     I;           # NUMBER OF M861 *SM-S* #
        ITEM PPCBENCNT  I;           # PP CALL BLOCK ENTRY COUNT #
        ITEM SMO        U;           # TEMP SM ORDINAL #
        ITEM SMST       U;           # SM CU STATUS INDEX # 
        ITEM UDTCADR    I;           # UDT CONTROLLER TABLE ADDRESS # 
        ITEM UDTSADR    I;           # UDT SM/DRD TABLE ADDRESS # 
  
      ARRAY NM [1:BLLM] S(1);        # CONFIGURATION FILE NMEMONICS # 
  
        BEGIN 
# 
*                             2 AND 3 CHARACTERS DIRECTIVE KEYWORDS 
# 
        ITEM NM$KEY2 C(00,00,02) = ["CH","CU",,,,,,,,"AC","SM"] ; 
        ITEM NM$KEY3 C(00,00,03) = [,,"CIF","DTI","DTO","DIF","DRC",
                                 "DRD","AIF",,];
        END 
  
      ARRAY NMST [0:0] S(2);     # VALID NMEMONIC STATUSES #
        BEGIN 
        ITEM ONSTAT  C(00,00,02) = ["ON"];    # ON STATUS # 
        ITEM OFFSTAT C(01,00,03) = ["OFF"];   # OFF STATUS #
        END 
  
# 
*          THE FOLLOWING BASED ARRAYS ARE USED TO DEFINE THE
*          UNIT DEVICE TABLE. 
# 
  
      BASED 
      ARRAY UDT$WORD [0:0] S(1);     # CONTROLLER TABLE HEADER #
        BEGIN 
        ITEM UDT$LINE   U(00,00,60); # UDT WORD # 
        ITEM UDT$WORDCNT  U(00,00,12); # UDT WORD COUNT # 
        ITEM UDT$HWOFF    U(00,12,02); # GLOBAL HARDWARE STATUS # 
        ITEM UDT$CUS$O    B(00,12,01); # SET IF ALL CONTROLLERS OFF # 
        ITEM UDT$CHNS$O   B(00,13,01); # SET IF ALL CHANNELS OFF #
        ITEM UDT$LINE$CUN U(00,36,12); # M862 COUNT # 
        ITEM UDT$LINE$SMN U(00,48,12); # M861 COUNT # 
        END 
  
      BASED 
      ARRAY PTHSTAT [0:0] S(1);      # UDT PATH STATUS WORD # 
        BEGIN 
        ITEM PATH$WORD  U(00,00,60);
        END 
  
      BASED 
      ARRAY MBFHDR [0:0] S(1);       # MESSAGE BUFFER HEADER #
        BEGIN 
        ITEM MBF$WORD   U(00,00,60);  # MESSAGE BUFFER HEADER WORD #
        ITEM MBF$ACTIVE B(00,00,01);  # MESSAGE BUFFER ACTIVE # 
        ITEM MBF$SENT   B(00,01,01);  # MESSAGE SENT TO PP #
        ITEM MBF$SAVE   U(00,04,02);  # MESSAGE PORTION SAVED # 
        ITEM MBF$TMOUT  U(00,12,24);  # MESSAGE TIMEOUT # 
        ITEM MBF$SBADDR U(00,42,18);  # STORAGE BUFFER ADDR # 
        END 
  
# 
*          CONTROLLER TABLE.
# 
  
  
           BASED
           ARRAY UDT$CN [1:MAXCTN] S(UDTCNTL);
               BEGIN
               ITEM UD$CN$EN0  U(00,00,60);     # CONTROLLER WORD 0 # 
               ITEM UD$FLG     U(00,00,12);     # CONTROLLER FLAGS #
               ITEM UD$EXIST   B(00,00,01);     # CONTROLLER EXISTS # 
               ITEM UD$CUON    B(00,01,01);     # ON/OFF FLAG # 
               ITEM UD$CNUP    B(00,02,01);     # CLEAN-UP FLAG # 
               ITEM UD$NALL    B(00,03,01);     # NOT COMPLETE PATH # 
               ITEM UD$DRDWAIT B(00,04,01);     # WAIT FOR EMPTY DRD #
               ITEM UD$SMAIF   U(00,12,48);     # AIF FIELDS #
               ITEM UD$SMORDS  U(00,12,48);     # SM ORDINALS # 
               ITEM UD$SM0     U(00,12,06);     # SM0 OFFSET #
               ITEM UD$SM1     U(00,18,06);     # SM1 OFFSET #
               ITEM UD$SM2     U(00,24,06);     # SM2 OFFSET #
               ITEM UD$SM3     U(00,30,06);     # SM3 OFFSET #
               ITEM UD$SM4     U(00,36,06);     # SM4 OFFSET #
               ITEM UD$SM5     U(00,42,06);     # SM5 OFFSET #
               ITEM UD$SM6     U(00,48,06);     # SM6 OFFSET #
               ITEM UD$SM7     U(00,54,06);     # SM7 OFFSET #
               ITEM UD$CN$EN1  U(01,00,60);     # CONTROLLER WORD 1 # 
               ITEM UD$AIF0    U(01,00,48);     # 4 PATHS TO 8 SM-S # 
               ITEM UD$AIF003  U(01,00,24);     # AIF0 TO AC-S 0-3 #
               ITEM UD$AIF047  U(01,24,24);     # AIF0 TO AC-S 4-7 #
               ITEM UD$ESTO    U(01,48,12);     # EST ORDINAL # 
               ITEM UD$CN$EN2  U(02,00,60);     # CONTROLLER WORD 2 # 
               ITEM UD$AIF1    U(02,00,48);     # 4 PATHS TO 8 SM-S # 
               ITEM UD$AIF103  U(02,00,24);     # AIF1 TO AC-S 0-3 #
               ITEM UD$AIF147  U(02,24,24);     # AIF1 TO AC-S 4-7 #
               ITEM UD$CN$EN3  U(03,00,60);     # CONTROLLER WORD 3 # 
               ITEM UD$DIF     U(03,00,48);     # DEVICE INTERFACES # 
               ITEM UD$DIF0    U(03,00,24);     # 4 DEVICE PATHS #
               ITEM UD$DIF1    U(03,24,24);     # 4 DEVICE PATHS #
               ITEM UD$CN$EN4  U(04,00,60);     # CONTROLLER WORD 4 # 
               ITEM UD$DTI     U(04,00,24);     # DATA INPUT FIELDS # 
               ITEM UD$DTI0    U(04,00,12);     # 2 DATA INPUT PATHS #
               ITEM UD$DTI1    U(04,12,12);     # 2 DATA INPUT PATHS #
               ITEM UD$DTO     U(04,24,24);     # DATA OUTPUT PATHS # 
               ITEM UD$DTO0    U(04,24,12);     # 2 DATA OUTPUT PATHS # 
               ITEM UD$DTO1    U(04,36,12);     # 2 DATA OUTPUT PATHS # 
               ITEM UD$CUDA    U(04,48,03);     # M862 DEVICE ADDRESS # 
               ITEM UD$CN$EN5  U(05,00,60);     # CONTROLLER WORD 5 # 
               ITEM UD$CIF01   U(05,00,48);     # CIF-S 0 AND 1 # 
               ITEM UD$CIF0    U(05,00,24);     # 4 CIF0-DTX PATHS #
               ITEM UD$CIF1    U(05,24,24);     # 4 CIF1-DTX PATHS #
               ITEM UD$CHANBA  U(05,48,12);     # 1ST AND 2ND CHANNELS #
               ITEM UD$CHANB   U(05,48,06);     # 2ND CHANNEL # 
               ITEM UD$CHANB$O B(05,48,01);     # 2ND CHAN ON/OFF BIT # 
               ITEM UD$CHANB$C U(05,49,05);     # 2ND CHANNEL NUMBER #
               ITEM UD$CHANA   U(05,54,06);     # 1ST CHANNEL # 
               ITEM UD$CHANA$O B(05,54,01);     # 1ST CHAN ON/OFF BIT # 
               ITEM UD$CHANA$C U(05,55,05);     # 1ST CHANNEL NUMBER #
               ITEM UD$CN$EN6  U(06,00,60);     # CONTROLLER WORD 6 # 
               ITEM UD$CIF23   U(06,00,48);     # CIF-S 2 AND 3 # 
               ITEM UD$CIF2    U(06,00,24);     # 4 CIF2-DTX PATHS #
               ITEM UD$CIF3    U(06,24,24);     # 4 CIF3-DTX PATHS #
               ITEM UD$CHANDC  U(06,48,12);     # 3RD AND 4TH CHANNELS #
               ITEM UD$CHAND   U(06,48,06);     # 4TH CHANNEL # 
               ITEM UD$CHAND$O B(06,48,01);     # 4TH CHAN ON/OFF BIT # 
               ITEM UD$CHAND$C U(06,49,05);     # 4TH CHANNEL NUMBER #
               ITEM UD$CHANC   U(06,54,06);     # 3RD CHANNEL # 
               ITEM UD$CHANC$O B(06,54,01);     # 3RD CHAN ON/OFF BIT # 
               ITEM UD$CHANC$C U(06,55,05);     # 3RD CHANNEL NUMBER #
               ITEM UD$CN$EN7  U(07,00,60);     # CONTROLLER WORD 7 # 
               ITEM UD$DRCP0   U(07,00,48);     # 8 DRC0-DRD PATHS #
               ITEM UD$CN$EN8  U(08,00,60);     # CONTROLLER WORD 8 # 
               ITEM UD$DRCP1   U(08,00,48);     # 8 DRC1-DRD PATHS #
               ITEM UD$CN$EN9  U(09,00,60);     # CONTROLLER WORD 9 # 
               ITEM UD$DRCP2   U(09,00,48);     # 8 DRC2-DRD PATHS #
               ITEM UD$CN$EN10 U(10,00,60);     # CONTROLLER WORD 10 #
               ITEM UD$DRCP3   U(10,00,48);     # 8 DRC3-DRD PATHS #
               ITEM UD$CN$EN11 U(11,00,60);     # CONTROLLER WORD 11 #
               ITEM UD$LLRQA   U(11,06,18);     # LLRQ ADDRESS #
               ITEM UD$BMLF    U(11,24,18);     # BML FET ADDRESS # 
               ITEM UD$CAMF    U(11,42,18);     # CHAN A MESSAGE FET #
               ITEM UD$CN$EN12 U(12,00,60);     # CONTROLLER WORD 12 #
               ITEM UD$CHEX    U(12,00,04);     # CHANNEL EXISTS BITS # 
               ITEM UD$CHEX0   B(12,00,01);     # CHANNEL A EXISTS BIT #
               ITEM UD$CHEX1   B(12,01,01);     # CHANNEL B EXISTS BIT #
               ITEM UD$CHEX2   B(12,02,01);     # CHANNEL C EXISTS BIT #
               ITEM UD$CHEX3   B(12,03,01);     # CHANNEL D EXISTS BIT #
               ITEM UD$CBMF    U(12,42,18);     # CHAN B MESSAGE FET #
               ITEM UD$CN$EN13 U(13,00,60);     # CONTROLLER WORD 13 #
               ITEM UD$MASC    U(13,00,06);     # MASTER CHANNEL #
               ITEM UD$MASCPOS U(13,06,04);     # MASTER CHANNEL BITS # 
               ITEM UD$WBACT   U(13,10,04);     # MSG WRITE BUF BITS #
               ITEM UD$DBACT   U(13,14,04);     # DATA BUFFER BITS #
               ITEM UD$MCOUNTS U(13,18,24);     # MESSAGE COUNTS #
               ITEM UD$CCMF    U(13,42,18);     # CHAN C MESSAGE FET #
               ITEM UD$CN$EN14 U(14,00,60);     # CONTROLLER WORD 14 #
               ITEM UD$MASCIF  U(14,00,03);     # MASTER CHANNEL CIF #
               ITEM UD$CDMF    U(14,42,18);     # CHAN D MESSAGE FET #
               ITEM UD$CN$EN15 U(15,00,60);     # CONTROLLER WORD 15 #
               ITEM UD$MBSTAT  U(15,00,60);     # MSG BUFFER STATUS # 
               ITEM UD$MBACT   B(15,00,01);     # MESSAGE BUFFER FLAG # 
               ITEM UD$MSGSENT B(15,01,01);     # MESSAGE SENT FLAG # 
               ITEM UD$SAVE    U(15,03,03);     # MESSAGE PART SAVED #
               ITEM UD$SBADDR  U(15,42,18);     # STORAGE BUFFER ADDR # 
               ITEM UD$MSG     C(16,00,110);    # M860 MESSAGE BUFFER # 
               END
  
  
# 
*          STORAGE MODULE TABLE.
# 
  
  
           BASED
           ARRAY UDT$SMA [1:MAXSMUNIT]  S(SMALT); 
               BEGIN
               ITEM SM$WD0     U(00,00,60);     # SM WORD 0 # 
               ITEM SM$FLG     U(00,00,12);     # SM FLAGS #
               ITEM SM$FLAG    U(00,00,06);     # SM MAIN FLAGS # 
               ITEM SM$EXIST   B(00,00,01);     # EXISTS FLAG # 
               ITEM SM$ON      B(00,01,01);     # ON/OFF FLAG # 
               ITEM SM$ON$ACK  B(00,02,01);     # ACCEPT ON/OFF # 
               ITEM SM$DIAG    B(00,03,01);     # REQUEST DIAGNOSIIC #
               ITEM SM$DAG$ACK B(00,04,01);     # ACCEPT DIAGNOSTIC # 
               ITEM SM$DONE    B(00,05,01);     # SM PROCESSED #
               ITEM SM$TOPDRD  B(00,06,01);     # NEXT DRD TO USE # 
               ITEM SM$HWOFF   B(00,07,01);     # HARDWARE OFF #
               ITEM SM$HWOFF1  B(00,08,01);     # HARDWARE OFF (CU1) #
               ITEM SM$HWOFF2  B(00,09,01);     # HARDWARE OFF (CU2) #
               ITEM SM$ACCBUSY B(00,10,01);     # ACCESSOR BUSY FLAG #
               ITEM SM$SCCU    B(00,11,01);     # SRV CELL CLEANUP #
               ITEM SM$STS     U(00,12,20);     # CU STATUSES/ORDS #
               ITEM SM$CNT0    U(00,12,10);     # 1ST CU STATUS/ORD # 
               ITEM SM$STS0    U(00,12,06);     # ACC STATUS FROM CU0 # 
               ITEM SM$CUO0    U(00,18,04);     # 1ST CU ORDINAL #
               ITEM SM$CNT1    U(00,24,10);     # 2ND CU STATUS/ORD # 
               ITEM SM$STS1    U(00,24,06);     # ACC STATUS FROM CU1 # 
               ITEM SM$CUO1    U(00,30,04);     # 2ND CU ORDINAL #
               ITEM SM$ID      C(00,36,01);     # SM - SMMAP ID # 
               ITEM SM$SUN     U(00,42,04);     # UNIT/PATH NUMBER #
               ITEM SM$WD1     U(01,00,60);     # SM WORD 1 # 
               ITEM SM$DSRFW   U(01,00,12);     # FULL *SCR* OFFSET # 
               ITEM SM$DSRFW0  U(01,00,01);     # *SCR* 0 SUBFAMILY # 
               ITEM SM$DSRFW1  U(01,01,01);     # *SCR* 1 SUBFAMILY # 
               ITEM SM$DSRFW2  U(01,02,01);     # *SCR* 2 SUBFAMILY # 
               ITEM SM$DSRFW3  U(01,03,01);     # *SCR* 3 SUBFAMILY # 
               ITEM SM$DSRFW4  U(01,04,01);     # *SCR* 4 SUBFAMILY # 
               ITEM SM$DSRFW5  U(01,05,01);     # *SCR* 5 SUBFAMILY # 
               ITEM SM$DSRFW6  U(01,06,01);     # *SCR* 6 SUBFAMILY # 
               ITEM SM$DSRFW7  U(01,07,01);     # *SCR* 7 SUBFAMILY # 
               ITEM SM$STNUM   U(01,12,02);     # MAX DRD-S FOR STAGE # 
               ITEM SM$DSNUM   U(01,14,02);     # DRD-S TO DESTAGE #
               ITEM SM$LLRQ1   B(01,36,01);     # LLRQ TYPE ADDRESS # 
               ITEM SM$DSFLAG1 B(01,37,01);     # DESTAGING FLAG #
               ITEM SM$REQRES1 U(01,42,18);     # RESERVE ADDRESS # 
               ITEM SM$WD2     U(02,00,60);     # SM WORD 2 # 
               ITEM SM$LLRQ2   B(02,36,01);     # LLRQ TYPE ADDRESS # 
               ITEM SM$DSFLAG2 B(02,37,01);     # DESTAGE FLAG #
               ITEM SM$REQRES2 U(02,42,18);     # RESERVE ADDRESS # 
               ITEM D0$WD0     U(03,00,60);     # DRD WORD 0 #
               ITEM D0$FLG     U(03,00,12);     # DRD FLAGS # 
               ITEM D0$FLAG    U(03,00,06);     # DRD MAIN FLAGS #
               ITEM D0$EXIST   B(03,00,01);     # EXISTS FLAG # 
               ITEM D0$ON      B(03,01,01);     # ON/OFF FLAG # 
               ITEM D0$ON$ACK  B(03,02,01);     # ACCEPT ON/OFF # 
               ITEM D0$DIAG    B(03,03,01);     # REQUEST DIAGNOSTIC #
               ITEM D0$DAG$ACK B(03,04,01);     # ACCEPT DIAGNOSTIC # 
               ITEM D0$DONE    B(03,05,01);     # DRD PROCESSED # 
               ITEM D0$LOG0    B(03,06,01);     # CU0 LOG LEVEL SET # 
               ITEM D0$LOG1    B(03,07,01);     # CU1 LOG LEVEL SET # 
               ITEM D0$FULL    B(03,08,01);     # DRD FULL #
               ITEM D0$ST      U(03,12,12);     # PATH STATUSES # 
               ITEM D0$STSP    U(03,12,06);     # DRD STATUS FROM CU0 # 
               ITEM D0$STSS    U(03,18,06);     # DRD STATUS FROM CU1 # 
               ITEM D0$SUN     U(03,24,04);     # UNIT/PATH NUMBER #
               ITEM D0$LLADR   U(03,42,18);     # LLRQ ADDRESS #
               ITEM D0$W01     U(04,00,60);     # DRD WORD 1 #
               ITEM D0$WD2     U(05,00,60);     # DRD WORD 2 #
               ITEM D0$HRDE    U(05,00,15);     # HARD READ ERRORS #
               ITEM D0$STDM    U(05,15,15);     # DEMARKED STRIPES #
               ITEM D0$LDER    U(05,45,15);     # LOAD ERRORS # 
               ITEM D0$WD3     U(06,00,60);     # DRD WORD 3 #
               ITEM D0$STRD    U(06,00,30);     # STRIPES READ #
               ITEM D0$STWR    U(06,30,30);     # STRIPES WRITTEN # 
               ITEM D0$WD4     U(07,00,60);     # DRD WORD 4 #
               ITEM D0$SRDE    U(07,00,30);     # SOFT READ ERRORS #
               ITEM D0$SWRE    U(07,30,30);     # SOFT WRITE ERRORS # 
               ITEM D0$WD5     U(08,00,60);     # DRD WORD 5 #
               ITEM D0$MBACT   B(08,00,01);     # MESSAGE BUFFER FLAG # 
               ITEM D0$MSGSENT B(08,01,01);     # MESSAGE SENT FLAG # 
               ITEM D0$SBADDR  U(08,42,18);     # STORAGE BUFFER ADDR # 
               ITEM D0$MSG     C(09,00,110);    # M860 MESSAGE BUFFER # 
               ITEM D1$WD0     U(20,00,60);     # DRD WORD 0 #
               ITEM D1$FLG     U(20,00,12);     # DRD FLAGS # 
               ITEM D1$FLAG    U(20,00,06);     # DRD MAIN FLAGS #
               ITEM D1$EXIST   B(20,00,01);     # EXISTS FLAG # 
               ITEM D1$ON      B(20,01,01);     # ON/OFF FLAG # 
               ITEM D1$ON$ACK  B(20,02,01);     # ACCEPT ON/OFF FLAG #
               ITEM D1$DIAG    B(20,03,01);     # REQUEST DIAGNOSTIC #
               ITEM D1$DAG$ACK B(20,04,01);     # ACCEPT DIAGNOSTIC # 
               ITEM D1$DONE    B(20,05,01);     # DRD PROCESSED # 
               ITEM D1$LOG0    B(20,06,01);     # CU0 LOG LEVEL SET # 
               ITEM D1$LOG1    B(20,07,01);     # CU1 LOG LEVEL SET # 
               ITEM D1$FULL    B(20,08,01);     # DRD FULL #
               ITEM D1$ST      U(20,12,12);     # PATH STATUSES # 
               ITEM D1$STSP    U(20,12,06);     # DRD STATUS FROM CU0 # 
               ITEM D1$STSS    U(20,18,06);     # DRD STATUS FROM CU1 # 
               ITEM D1$SUN     U(20,24,04);     # UNIT/PATH NUMBER #
               ITEM D1$LLADR   U(20,42,18);     # LLRQ ADDRESS #
               ITEM D1$WD1     U(21,00,60);     # DRD WORD 1 #
               ITEM D1$WD2     U(22,00,60);     # DRD WORD 2 #
               ITEM D1$HRDE    U(22,00,15);     # HARD READ ERRORS #
               ITEM D1$STDM    U(22,15,15);     # DEMARKED STRIPES #
               ITEM D1$LDER    U(22,45,15);     # LOAD ERRORS # 
               ITEM D1$WD3     U(23,00,60);     # DRD WORD 3 #
               ITEM D1$STRD    U(23,00,30);     # STRIPES READ #
               ITEM D1$STWR    U(23,30,30);     # STRIPES WRITTEN # 
               ITEM D1$WD4     U(24,00,60);     # DRD WORD 4 #
               ITEM D1$SRDE    U(24,00,30);     # SOFT READ ERRORS #
               ITEM D1$SWRE    U(24,30,30);     # SOFT WRITE ERRORS # 
               ITEM D1$WD5     U(25,00,60);     # DRD WORD 5 #
               ITEM D1$MBACT   B(25,00,01);     # MESSAGE BUFFER FLAG # 
               ITEM D1$MSGSENT B(25,01,01);     # MESSAGE SENT FLAG # 
               ITEM D1$SBADDR  U(25,42,18);     # STORAGE BUFFER ADDR # 
               ITEM D1$MSG     C(26,00,110);    # M860 MESSAGE BUFFER # 
               END
  
  
  
# 
*          MESSAGE BUFFER FORMAT. 
# 
  
  
           BASED
           ARRAY UDT$MSG [0:0] S(MSGLT);
  
               BEGIN
               ITEM MS$MSG0    U(00,00,60);     # MESSAGE WORD 0 #
               ITEM MS$MSQN    U(00,00,16);     # MESSAGE NUMBER #
               ITEM MS$MSQN$DI U(00,00,02);     # DRD INDICATOR # 
               ITEM MS$MSQN$D0 B(00,00,01);     # DRD 0 MSG # 
               ITEM MS$MSQN$D1 B(00,01,01);     # DRD 1 MSG # 
               ITEM MS$MSQN$CN U(00,02,07);     # CU/SM ORDINAL # 
               ITEM MS$ASS$DT  U(00,16,16);     # ASSOCIATED DATA # 
               ITEM MS$MSG     U(00,32,16);     # MESSAGE TYPE #
               ITEM MS$MSG$M   U(00,32,08);     # MAIN #
               ITEM MS$MSG$S   U(00,40,08);     # MESSAGE SUB-TYPE #
               ITEM MS$MSG$R   B(00,40,01);     # MESSAGE RESPONSE #
               ITEM MS$MSG$D   U(00,44,04);     # MESSAGE SUBTYPE DRD # 
               ITEM MS$CU      U(00,48,12);     # CONTROLLER ORDINAL #
               ITEM MS$MSG1    U(01,00,60);     # MESSAGE WORD 1 #
               ITEM MS$UNADD   U(01,00,16);     # UNIT ADDRESS #
               ITEM MS$INTER   U(01,04,04);     # CHANNEL INTERFACES #
               ITEM MS$INTER$D B(01,04,01);     # CHANNEL INTERFACE D # 
               ITEM MS$INTER$C B(01,05,01);     # CHANNEL INTERFACE C # 
               ITEM MS$INTER$B B(01,06,01);     # CHANNEL INTERFACE B # 
               ITEM MS$INTER$A B(01,07,01);     # CHANNEL INTERFACE A # 
               ITEM MS$CONT    U(01,08,04);     # CONTROLLER NUMBER # 
               ITEM MS$DEV$NB  U(01,12,04);     # DEVICE NUMBER # 
               ITEM MS$DEV$SM  U(01,12,03);     # DRD UDT SM OFFSET # 
               ITEM MS$DEV$ODD B(01,15,01);     # SET IF ODD DRD #
               ITEM MS$CART0   U(01,16,32);     # SERIAL BYTES 8-11 # 
               ITEM MS$MSG2    U(02,00,60);     # MESSAGE WORD 2 #
               ITEM MS$CART1   U(02,00,48);     # SERIAL BYTES 12-17 #
               ITEM MS$CART1A  U(02,00,28);     # SERIAL BYTES 12-15 #
               ITEM MS$CART1B  U(02,28,20);     # SERIAL BYTES 15-17 #
               ITEM MS$MSG3    U(03,00,60);     # MESSAGE WORD 3 #
               ITEM MS$CART2   U(03,00,16);     # SERIAL BYTES 18-19 #
               ITEM MS$VOLV0   U(03,16,32);     # VOLUME BYTES 20-23 #
               ITEM MS$MSG4    U(04,00,60);     # MESSAGE WORD 4 #
               ITEM MS$VOLU1   U(04,00,16);     # VOLUME BYTES 24-25 #
               ITEM MS$VOL$N   U(04,16,16);     # VERSION NUMBER #
               ITEM MS$PATH    U(04,32,08);     # PATH NUMBER # 
               ITEM MS$DRDN    U(04,40,08);     # DRD/SM NUMBER # 
               ITEM MS$MSG5    U(05,00,60);     # MESSAGE WORD 5 #
               ITEM MS$YADD    U(05,00,08);     # VERTICAL ADDRESS #
               ITEM MS$ZADD    U(05,08,08);     # HORIZONTAL ADDRESS #
               ITEM MS$STPL    U(05,16,32);     # STRIPE LOW #
               ITEM MS$MSG6    U(06,00,60);     # MESSAGE WORD 6 #
               ITEM MS$STPH    U(06,00,32);     # STRIPE HIGH # 
               ITEM MS$PARM1   U(06,32,16);     # PARAMETER 1 # 
               ITEM MS$MSG7    U(07,00,60);     # MESSAGE WORD 7 #
               ITEM MS$PARM1A  U(07,00,16);     # PARAMETER 1 # 
               ITEM MS$PARM1A3 U(07,00,08);     # PARAM 1, BYTE 3 # 
               ITEM MS$PARM1A4 U(07,08,08);     # PARAM 1, BYTE 4 # 
               ITEM MS$PARM2   U(07,16,32);     # PARAMETER 2 # 
               ITEM MS$PARM21  U(07,16,08);     # PARAM 2, BYTE 1 # 
               ITEM MS$PARM22  U(07,24,08);     # PARAM 2, BYTE 2 # 
               ITEM MS$PARM23  U(07,32,08);     # PARAM 2, BYTE 3 # 
               ITEM MS$PARM24  U(07,40,08);     # PARAM 2, BYTE 4 # 
               ITEM MS$MSG8    U(08,00,60);     # MESSAGE WORD 8 #
               ITEM MS$PARM3   U(08,00,32);     # PARAMETER 3 # 
               ITEM MS$RETCODE U(08,32,16);     # MAIN RETURN CODE #
               ITEM MS$MSG9    U(09,00,60);     # MESSAGE WORD 9 #
               ITEM MS$DDRCODE U(09,00,16);     # DEV DRVR RET CODE # 
               ITEM MS$UNSTAT  U(09,16,32);     # UNIT STATUS # 
               ITEM MS$MSG10   U(10,00,60);     # MESSAGE WORD 10 # 
               ITEM MS$PSTAT   U(10,00,16);     # PATH STATUS # 
               ITEM MS$CHEKSUM U(10,16,16);     # CHECKSUM #
               END
  
  
  
  
  
# 
*         THIS ARRAY DEFINES THE *SPC* MONITOR CALL.
# 
  
             ARRAY SPC [0:0] S(1);
               BEGIN
               ITEM SPC$SPC    C(00,00,03) = ["SPC"]; 
               ITEM SPC$ADDR   U(00,42,18);  # ADDRESS OF *1SS* # 
               END
  
# 
*         THIS ARRAY DEFINES THE *1SS* PP CALL BLOCK ENTRIES. 
# 
  
             ARRAY PPU [1:PPCBTSIZE] S(PPCBENLEN);
               BEGIN
               ITEM PPU$WORD0  U(00,00,60);  # PP CALL BLOCK WORD 0 # 
               ITEM PPU$1SS    C(00,00,03);  # *1SS* NAME # 
               ITEM PPU$W0INFO U(00,18,24);  # WORD 0 INFORMATION # 
               ITEM PPU$RCL    B(00,19,01);  # RECALL BIT # 
               ITEM PPU$CHAN   U(00,24,12);  # CHANNEL INFORMATION #
               ITEM PPU$CHBOFF B(00,24,01);  # CHAN *B* ON/OFF BIT #
               ITEM PPU$CHB    U(00,25,05);  # CHANNEL *B* #
               ITEM PPU$CHAOFF B(00,30,01);  # CHAN *A* ON/OFF BIT #
               ITEM PPU$CHA    U(00,31,05);  # CHANNEL *A* #
               ITEM PPU$FC     U(00,36,06);  # PP FUNCTION CODE # 
               ITEM PPU$PADDR  U(00,42,18);  # PARAMETER WORD ADDR #
               ITEM PPU$WORD1  U(01,00,60);  # PP CALL BLOCK WORD 1 # 
               ITEM PPU$MBADDR U(01,00,18);  # MSG WRITE BUFFER ADDR #
               ITEM PPU$DRCL   U(01,18,18);  # CPU DRIVER RECALL ADDR # 
               ITEM PPU$ESTORD U(01,36,12);  # EST ORDINAL #
               ITEM PPU$CNTORD U(01,48,11);  # UDT CU ORDINAL # 
               ITEM PPU$ACTIVE B(01,59,01);  # PP-ACTIVE FLAG # 
               ITEM PPU$WORD2  U(02,00,60);  # PP CALL BLOCK WORD 2 # 
               ITEM PPU$DBADDR U(02,42,18);  # DATA BUFFER ADDRESS #
               END
  
# 
*     ARRAY TO HOLD UDT CHANNEL INFORMATION.
# 
  
      ARRAY CHNTMP [0:MAX$CIF] S(1); # UDT CHANNEL INFORMATION #
        BEGIN 
        ITEM CHT$WORD   U(00,00,60);  # CHANNEL INFO WORD # 
        ITEM CHT$ON     B(00,54,01);  # CHANNEL ON/OFF FLAG # 
        ITEM CHT$CHAN   U(00,55,05);  # CHANNEL NUMBER #
        END 
  
# 
*     ARRAY TO HOLD CALL BLOCK ENTRY 1ST WORD DURING PP CALL. 
# 
  
      ARRAY PPTMP [0:0] S(1);        # PP CALL ENTRY 1ST WORD # 
        BEGIN 
        ITEM PPT$WORD0  U(00,00,60);  # FIRST WORD #
        END 
  
# 
*     BASED ARRAY TO HOLD MESSAGE WRITE BUFFER ADDRESSES IN UDT.
# 
  
        BASED 
        ARRAY MWBTMP [0:MAX$CIF] S(1);  # WRITE BUFFER ADDRESSES #
          BEGIN 
          ITEM MWB$ADDR   U(00,42,18);  # ADDRESS # 
          END 
  
# 
*     ARRAY TO DEFINE CONTROLLER STATUSES.
# 
  
      ARRAY CUSTAT [0:0] S(4);
        BEGIN 
        ITEM CUOFF      C(00,00,14) = [" OFF.         "]; 
        ITEM CUON       C(02,00,14) = [" INITIALIZED. "]; 
        END 
  
# 
*     ARRAY TO DEFINE CONTROLLER STATUS MESSAGE.
# 
  
      ARRAY CUMSG [0:0] S(5); 
        BEGIN 
        ITEM CU$1       C(00,00,22) = [" CONTROLLER EST ENTRY "]; 
        ITEM CU$ORD     U(02,12,24);  # CU EST ORDINAL #
        ITEM CU$STAT    C(02,36,14);  # CU STATUS # 
        ITEM CU$ZERO    U(04,00,60) = [0];  # ZERO-BYTE TERMINATOR #
        END 
  
        END  # BUDTCOM #
  
           END  # COMBUDT # 
  
                                                                      # 
          COL    30 
          ENDX                                                        # 
                                               CONTROL LIST;
