1MD 
          IDENT  1MD,MPR
          PERIPH
          BASE   MIXED
          SST 
          TITLE  1MD - MASS STORAGE ERROR MESSAGE PROCESSOR.
*COMMENT  1MD - MS ERROR MESSAGE PROCESSOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 1MD      SPACE  4,10 
***       1MD - MASS STORAGE ERROR MESSAGE PROCESSOR. 
*         S. L. BETH         80/03/17.
*         R. M. DANISCH      85/12/31.
*         P. D. HAAS         86/07/01.
          SPACE  4,15 
***       *1MD* IS CALLED BY THE MASS STORAGE DRIVERS AND THE 819 
*         INTERRUPT HANDLER TO ISSUE MASS STORAGE ERROR MESSAGES.  FOR
*         819 ERRORS, *1MD* MUST CONSTRUCT THE BML MESSAGE BEFORE 
*         ISSUING IT.  FOR ALL OTHER DEVICE TYPES, IT IS ASSUMED THE
*         DRIVER HAS ALREADY BUILT THE MESSAGE BEFORE CALLING *1MD*.
*         ONLY BML MESSAGES ARE ISSUED FOR 819 DEVICES.  BUT BML, ERROR 
*         LOG OR SYSTEM DAYFILE MESSAGES MAY BE ISSUED FOR OTHER DEVICE 
*         TYPES.
* 
*         *1MD* MUST BE CM RESIDENT SINCE A LOAD FROM DISK MAY NOT BE 
*         POSSIBLE IN A CONFIGURATION WHERE THE ONLY SYSTEM DEVICE IS 
*         THE DEVICE TAKING ERRORS. 
 1MD      SPACE  4,10 
***       CALL FORMAT - 
* 
*T        18/ 1MD, 1/, 5/ SCP, 24/, 12/ F 
* 
*         SCP = SYSTEM CONTROL POINT NUMBER.
*         F = 0 IF 819 DEVICE.
*             1 IF NOT 819 DEVICE.
 1MD      SPACE  4,10 
***       ERROR LOG MESSAGES. 
* 
*         * 1MD - MESSAGES LOST.* - *1MD* WAS UNABLE TO FLUSH THE ERROR 
*                BUFFER FAST ENOUGH TO KEEP UP WITH THE GENERATION OF 
*                ERROR MESSAGES BY THE DRIVER(S). 
 1MD      SPACE  4,20 
***       BINARY MAINTENANCE LOG ENTRY FORMATS. 
* 
*         GENERAL FORMAT -
* 
*T        12/ ID, 4/ DT, 1/ 0, 7/ SC, 6/ PP, 6/ CH, 6/ 0, 6/ UN, 12/ 0
*T,       12/ EO, 6/ RC, 6/ FG, 6/ CR, 6/ 0, 12/ MF, 12/ 0
*T,       12/ EC, 12/ CY, 12/ TS, 12/ LF, 12/ GS
*T,       60/ DETAILED STATUS 
*T,       60/     . 
*T,       60/     . 
*T,       60/     . 
*T,       6/ UFC, 18/ OSR, 18/ ACR, 18/ ESR 
* 
* 
*         EXTENDED MEMORY FORMAT -
* 
*T        12/ ID, 4/ DT, 1/ 0, 7/ SC, 6/ PP, 6/ CH, 24/ 0 
*T,       12/ EO, 6/ RC, 6/ FG, 6/ CR, 6/ 0, 12/ MF, 12/ 0
*T,       12/ EC, 48/ 0 
*T,       12/ FB, 12/ FS, 12/ WC, 24/ AD
*T,       60/ ERROR DATA
*T,       60/ ERROR DATA
* 
* 
*         819 FORMAT -
* 
*T        12/ ID, 4/ DT, 1/, 7/ SC, 36/ ACCESS PATH 
*T,       12/ EO, 6/ RC, 6/ FG, 6/ CR, 6/ 0, 24/ 0
*T,       12/ PPID, 12/ BYTE COUNT, 36/ ERROR DATA
*T,       60/ ERROR DATA
*T,       60/ ERROR DATA
*T,       60/ ERROR DATA
* 
* 
*         887 / 9853 / 583X / 47444 FORMAT -
* 
*T        12/ ID, 4/ DT, 1/0, 7/ SC, 6/PP, 6/CH, 6/EQ, 6/UN, 6/PN, 6/0
*T,       12/ EO, 6/ RC, 6/ FG, 12/ 0, 12/ MF, 12/ 0
*T,       12/ IF, 12/ F1, 12/ F2, 12/ F3, 12/ FF
*T,       12/ RS, 12/ RB, 12/ ST, 12/ CY, 12/ TS
*T,       16/ EXS, 16/ IDS, 16/ BSR, 12/ LCM
*T,       04/ LCM, 16/ LFN, 16/ CRG, 16/ CRG, 08/ CRG 
*T,       08/ CRG, 16/ CRG, 16/ 000, 16/ 000, 04/ 000 
*T,       12/ 000, 16/ TRG, 16/ TRG, 16/ TRG
*T,       16/ SLS, 16/ SLS, 16/ SLS, 12/ SLS
*T,       04/ SLS, 16/ SLS, 16/ SLS, 16/ SLS, 08/ DVS 
*T,       08/ DVS, 16/ DVS, 16/ DVS, 16/ DVS, 04/ DVS 
*T,       12/ DVS, 16/ DVS, 16/ DVS, 16/ DVS
* 
* 
*         COMMON FIELD DESCRIPTIONS - 
* 
*         ID     MESSAGE ID.  SEE *COMSDFS*.
*         DT     DRIVER TYPE.  SEE *COMSDFS*. 
*         SC     SYMPTOM CODE.  SEE *COMSDFS*.
*         PP     PP NUMBER OF DRIVER. 
*         CH     CHANNEL NUMBER.
*         EQ     EQUIPMENT (CONTROL MODULE/CONTROLLER) NUMBER.
*         UN     UNIT NUMBER. 
*         PN     PORT NUMBER. 
*         EO     EST ORDINAL. 
*         RC     RETRY COUNT. 
*         FG     FLAGS (GENERAL)
*                BIT 41      UNUSED (ZERO). 
*                BIT 40      UNUSED (ZERO). 
*                BIT 39      SET IF NOT FIRST BLOCK OF MESSAGE. 
*                BIT 38      SET IF NOT LAST BLOCK OF MESSAGE.
*                BIT 37      SET/CLEAR IF WRITE/READ OPERATION, 
*                            RESPECTIVELY.
*                BIT 36      SET/CLEAR IF UNRECOVERED/RECOVERED,
*                            RESPECTIVELY.
*         CR     RECOVERY CHANNEL.
*         MF     MAINFRAME ID.
*         EC     ERROR CODE.
*         CY     CYLINDER AT SEEK TIME. 
*         TS     TRACK AND SECTOR AT SEEK TIME. 
*         LF     LAST FUNCTION ISSUED.
*         GS     INITIAL GENERAL STATUS.
  
  
*         EXTENDED MEMORY FIELD DESCRIPTIONS -
* 
*         FB     FLAG BITS
*                BIT 59      UNUSED (ZERO). 
*                BIT 58      UNUSED (ZERO). 
*                BIT 57      UNUSED (ZERO). 
*                BIT 56      UNUSED (ZERO). 
*                BIT 55      UNUSED (ZERO). 
*                BIT 54      UNUSED (ZERO). 
*                BIT 53      UNUSED (ZERO). 
*                BIT 52      UNUSED (ZERO). 
*                BIT 51      UNUSED (ZERO). 
*                BIT 50      UNUSED (ZERO). 
*                BIT 49      SET IF ERROR DATA WORD TWO PRESENT.
*                BIT 48      SET IF ERROR DATA WORD ONE PRESENT.
*         FS     FUNCTION STATUS. 
*         WC     WORD COUNT.
*         AD     EXTENDED MEMORY ADDRESS. 
* 
* 
*         819 FIELD DESCRIPTIONS -
* 
*         ACCESS PATH = HARDWARE PATH TO DEVICE.
*         PPID = INPUT REGISTER ADDRESS OF *1MD* PPU. 
*         BYTE COUNT = ERROR DATA BYTE COUNT. 
*         ERROR DATA = COPY OF DATA FROM *FLPP* DRIVER. 
* 
* 
*         887 / 9853 / 583X /47444 FIELD DESCRIPTIONS - 
* 
*         IF  = INITIAL FAULT CODE. 
*         F1  = *T* REGISTER FAULT CODE (887 ONLY). 
*             = CHANNEL STATUS FAULT CODE (9853/583X/47444 ONLY). 
*         F2  = STATUS FAULT CODE.
*         F3  = RECOVERY FAULT CODE.
*         FF  = FINAL FAULT CODE. 
*         RS  = RESERVED. 
*         RB  = RESIDUAL BYTE COUNT.
*         ST  = SECTORS TRANSFERED SINCE SEEK.
*         EXS = EXECUTION STATUS (887 ONLY).
*             = ENDING STATUS (9853/583X/47444 ONLY). 
*         IDS = IDLE STATUS (887 ONLY). 
*         BSR = BIT SIGNIFICANT RESPONSE (887 ONLY).
*         LCM = LAST COMMAND. 
*         LFN = LAST ISI/IPI ADAPTOR FUNCTION.
*         CRG = CHANNEL REGISTER. 
*         TRG = *T* REGISTER. 
*         SLS = SLAVE STATUS (INCLUDES 9853/583X/47444 DEVICE STATUS).
*         DVS = DEVICE STATUS (887 ONLY). 
  
  
*         895 (DMA ONLY) FIELD DESCRIPTIONS - 
* 
*         UFC    UPPER 4 BITS OF LAST FUNCTION. 
*         OSR    OPERATIONAL STATUS REGISTER. 
*         ACR    ADAPTOR CONTROL REGISTER.
*         ESR    ERROR STATUS REGISTER. 
 1MD      SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPMAC 
 QUAL$S   EQU    1           DEFINE NO QUALIFICATION FOR *COMSDFS*
*CALL     COMSDFS 
*CALL     COMSEVT 
*CALL     COMSMSC 
*CALL     COMSMSP 
*CALL     COMSPIM 
          TITLE  MACRO DEFINITIONS. 
 MACROS   SPACE  4,10 
**        MACRO DEFINITIONS.
  
  
**        TBLM = GENERATE MASS STORAGE TABLES.
* 
*         TBLM   EQ 
*                EQ = MASS STORAGE EQUIPMENT MNEMONIC.
  
  
          PURGMAC  TBLM 
  
 TBLM     MACRO  EQ 
          VFD    12/2R_EQ 
 TEMP     RMT 
 .2       IF     -DEF,P_EQ
          VFD    12/GEMX
 .2       ELSE   1
          VFD    12/P_EQ
 TEMP     RMT 
 TMID     RMT 
          VFD    12/MLID_EQ 
 TMID     RMT 
          ENDM
          TITLE  ASSEMBLY CONSTANTS.
****      ASSEMBLY CONSTANTS. 
  
  
*         819 GENERAL STATUS FIELDS.
  
 G1FD     EQU    0           GROUP 1 STATUS FIELD 
 UNFD     EQU    1           UNIT FIELD 
 CLFD     EQU    2           CYLINDER ADDRESS 
 EQFD     EQU    3           3/ MUX CHANNEL, 9/ EST ORDINAL 
 WCFD     EQU    4           NUMBER OF ERROR PACKET WORDS 
 ADFD     EQU    5           HEAD AND SECTOR
 PCFD     EQU    7           PREVIOUS CYLINDER
 PAFD     EQU    10          PREVIOUS HEAD AND SECTOR 
 EPFD     EQU    11          START OF ERROR PACKET
  
*         ERROR PACKET FIELDS.
  
 G2FD     EQU    0           GROUP 2 STATUS FIELD 
 SBFD     EQU    1           SUBSYSTEM STATUS 
 CNFD     EQU    2           CONTROLLER STATUS
 RTFD     EQU    3           RETRY COUNT
 1MD      SPACE  4,10 
**        DIRECT LOCATION ASSIGNMENTS.
  
  
 BA       EQU    16          BML DATA BUFFER ADDRESS
 PA       EQU    17          ERRLOG MESSAGE PARAMETER ADDRESS 
 ED       EQU    20          ERROR DATA POINTER 
 WC       EQU    21          PP WORD COUNT
 MT       EQU    22          MESSAGE TYPE 
 BC       EQU    23          ERROR DATA BYTE COUNT
 CB       EQU    24          CM WORD BYTE COUNT 
 EP       EQU    25 - 31     *EMB* POINTER WORD 
 EH       EQU    32 - 36     *EMB* HEADER WORD 1
 EO       EQU    37          ERROR MESSAGE OFFSET 
 LN       EQU    40          MESSAGE LENGTH 
 EL       EQU    41          *ERROR LOG MESSAGES ISSUED* FLAG 
 ML       EQU    42          MESSAGES LOST ACCUMULATOR
 MD       EQU    43 - 47     MESSAGE DATA ADDRESS (5 LOCATIONS) 
 CT       EQU    57          CHANNEL TYPE 
 EX       EQU    60 - 64     *EMB* HEADER WORD 2
****
          TITLE  MAIN PROGRAM.
**        MPR - BUFFERED I/O MESSAGE PROCESSOR. 
  
  
          ORG    PPFW 
  
  
 MPR      LDN    EMBP        FETCH *EMB* POINTER WORD 
          CRD    EP 
          LDN    ZERL        INITIALIZE DIRECT CELLS
          CRD    EL 
          ERRNZ  EL+1-ML     CODE DEPENDS ON VALUE
          ERRNZ  ML+1-MD     CODE DEPENDS ON VALUE
 MPR1     LDD    EP+1 
          SHN    14          READ *EMB* HEADER WORD 1 
          LMD    EP+2 
          CRD    EH 
          ADN    1           READ *EMB* HEADER WORD 2 
          CRD    EX 
          LDD    EH+3        *IN* 
          SBD    EX+3        *OUT*
          ZJP    MPR7        IF NO MORE MESSAGES
 MPR2     LDD    EX+3        *OUT*
          SBD    EX+4        *LIMIT*
          MJN    MPR3        IF *OUT* IN PROPER RANGE 
          MONITOR HNGM       *OUT* BEYOND *LIMIT* 
  
 MPR3     LDD    EP+1        READ NEXT MESSAGE HEADER INTO PP 
          SHN    14 
          LMD    EP+2 
          ADD    EX+3 
          ADN    2           ALLOW FOR *EMB* HEADER 
          CRD    CM 
          LDD    CM+3        MESSAGE LENGTH IN CM WORDS 
          ZJN    MPR5        IF BUFFER TERMINATOR - RESET *EMB* *OUT* 
          STD    LN 
          SHN    2
          ADD    LN 
          STD    WC          MESSAGE LENGTH IN PP WORDS 
          SBK    BUFFL+1
          MJN    MPR4        IF MESSAGE WILL FIT IN BUFFER
          MONITOR HNGM       MESSAGE TOO LARGE FOR BUFFER 
  
 MPR4     LDD    EP+1        READ COMPLETE MESSAGE INTO PP
          SHN    14 
          LMD    EP+2 
          ADD    EX+3 
          ADN    2           ALLOW FOR *EMB* HEADER 
          CRM    BUFF,LN
          LDD    CM+4 
          SHN    -13
          STD    T1 
          LDM    MPRA,T1     SET PROCESSOR ADDRESS
          STD    T1 
          RJM    0,T1        PROCESS MESSAGE
          LDD    EX+3        UPDATE *OUT* 
          ADD    LN 
 MPR5     STD    EX+3 
          SBD    EX+4        *LIMIT*
          MJN    MPR5.1      IF *OUT* IN PROPER RANGE 
          ZJN    MPR5        IF *OUT* AT *LIMIT*
          MONITOR HNGM       *OUT* BEYOND *LIMIT* 
  
 MPR5.1   LDD    EP+1 
          SHN    14 
          LMD    EP+2 
          ADN    1           UPDATE *EMB* HEADER WORD 2 
          CWD    EX 
          LDD    EH+3        *IN* 
          SBD    EX+3        *OUT*
 MPR6     NJP    MPR2        IF MORE MESSAGES 
          LJM    MPR1        REREAD HEADER AND RECHECK
  
 MPR7     RJM    GIL         GET INTERLOCK, READ *EMB* HEADER WORD 1
          LDD    EH+1        COUNT MESSAGES LOST
          RAD    ML 
          ZJN    MPR8        IF NO MESSAGES WERE LOST 
          STD    EL 
          LDC    MPRB+ERLN   ISSUE * 1MD - MESSAGES LOST* MESSAGE 
          RJM    DFM
 MPR8     LDD    EL 
          ZJN    MPR9        IF NO ERROR LOG MESSAGES WERE ISSUED 
          LDN    ZERL 
          CRD    CM 
          LDK    ELAE        ISSUE *ERROR LOG ALERT* EVENT
          STD    CM+4 
          MONITOR  EATM 
 MPR9     RJM    CIL         CLEAR INTERLOCK AND *1MD* ACTIVE FLAG
          NJP    MPR6        IF THERE ARE MESSAGES IN THE BUFFER
          MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT 
  
  
 MPRA     BSS    0           TABLE OF PROCESSOR ADDRESSES 
          CON    LOG         NON-819 PROCESSOR
          CON    FMM         819 PROCESSOR
  
 MPRB     DATA   C* 1MD - MESSAGES LOST.* 
          TITLE  MAIN PROCESSING ROUTINES.
 FMM      SPACE  4,10 
**        FMM - FORMAT AND ISSUE 819 BML MESSAGE. 
* 
*         ENTRY  (BUFF - BUFF+(EX+3)-1) = MESSAGE TO BE PROCESSED.
* 
*         USES   BC, CB, CM+1, ED.
* 
*         CALLS  CLM, CPD, DFM, FMT.
  
  
 FMM      SUBR               ENTRY/EXIT 
          LDC    BUFF+5 
          STD    ED          SET START OF ERROR DATA
 FMM1     RJM    CLM         CLEAR MESSAGE BUFFER 
*         LDN    0           CLEAR CM WORD BYTE COUNT 
          STD    CB 
          RJM    FMT         FORMAT BML DATA
          LDM    WCFD,ED     SET ERROR DATA BYTE COUNT
          ADN    EPFD 
          STD    BC 
          STM    BYTM 
 FMM2     RJM    CPD         COPY ERROR DATA
          LDN    6*5         SET *BML* MESSAGE BYTE COUNT 
          STD    CM+1 
          LDC    BMLM+BMLN   ISSUE BML DATA 
          RJM    DFM
*         LDN    0           CLEAR BYTE COUNT IN BML DATA 
          STM    BYTM 
          LDD    BC 
          ZJP    FMMX        IF NO MORE DATA TO COPY
          LDM    RTYM        SET *NOT FIRST BLOCK* FLAG 
          SCN    10 
          LMN    10 
          STM    RTYM 
          UJN    FMM2        COPY ADDITIONAL DATA 
 FMM      SPACE  4,10 
**        BML MESSAGE BUFFER. 
  
  
 BMLM     VFD    12/RM0006   819 MESSAGE ID 
 SYMM     BSS    1           SYMPTOM CODE 
 PTHM     BSS    3           PATH IDENTIFICATION
 ESTM     BSS    1           EST ORDINAL
 RTYM     BSS    1           RETRY COUNT
 MFIM     BSS    1           MAINFRAME ID 
 HUIM     BSS    2           6/ FLAGS, 18/ HARDWARE IDENTIFICATION
 PPIM     BSS    1           PPU IDENTIFICATION 
 BYTM     BSS    1           ERROR DATA BYTE COUNT
 ERDM     BSS    22          ERROR DATA 
 ENDM     BSS    0           END OF BLOCK 
 LOG      SPACE  4,20 
*         LOG - LOG NON-819 MESSAGES. 
* 
*         THIS ROUTINE ISSUES NON-819 ERROR MESSAGES.  MESSAGES 
*         MAY BE SENT TO THE BML, ERROR LOG OR SYSTEM DAYFILE.
* 
*         ENTRY  (LN) = MESSAGE LENGTH IN CM WORDS. 
*                (WC) = MESSAGE LENGTH IN PP WORDS. 
*                (EP+1 - EP+2) = *EMB* ADDRESS. 
*                (EX+3) = OFFSET TO MESSAGE HEADER IN *EMB*.
*                (BUFF - BUFF+(LN)-1) = MESSAGE TO BE PROCESSED.
* 
*         EXIT   (EL) .NE. 0 IF ERROR LOG MESSAGE WAS ISSUED. 
* 
*         USES   CM+1, EL, MT.
* 
*         CALLS  DFM, DV5, GEM. 
  
  
 LOG      SUBR               ENTRY/EXIT 
          LDN    0
          STD    EO 
          LDM    BUFF+4,EO   SET MESSAGE TYPE 
          STD    MT 
          LMN    ELDY 
          ZJN    LOG2        IF ERROR LOG MESSAGE 
          LMN    MLDY&ELDY
          NJN    LOG3        IF NOT BML MESSAGE 
          LDD    EP+1        GET *EMB* ADDRESS
          SHN    14 
          LMD    EP+2 
          ADD    EX+3        ADD OFFSET TO MESSAGE HEADER 
          ADN    3           ALLOW FOR *EMB* AND MESSAGE HEADERS
          STD    MD+4        SET CENTRAL MESSAGE DATA ADDRESS 
          SHN    -14
          STD    MD+3 
          LDD    WC 
          SBM    BUFF+2,EO
          RJM    DV5         RECALCULATE BYTE COUNT 
          STD    T0 
          SHN    2
          ADM    BUFF+2,EO   INCLUDE RESIDUAL BYTE COUNT
          ADD    T0 
          SBN    5           EXCLUDE HEADER WORD
          STD    CM+1 
          LDC    BMCN+MD
          UJN    LOG4        ISSUE BML MESSAGE
  
 LOG2     LDM    CM+2        PRESERVE ERRLOG ALERT FLAG 
          RAD    EL 
 LOG3     LDM    LOGA,MT     SET DAYFILE SELECTION OPTION 
          SHN    14 
          LMC    BUFF+5      ISSUE DAYFILE MESSAGE
 LOG4     RJM    DFM
          RJM    GEM         GENERATE ERRLOG MESSAGE
          UJP    LOGX        RETURN 
  
  
*         TABLE OF DAYFILE SELECTION OPTIONS. 
  
 LOGA     INDEX 
          INDEX  MSDY,JNMN/10000  MASTER DAYFILE
          INDEX  ELDY,ERLN/10000  ERROR LOG DAYFILE 
          INDEX  MLDY,BMLN/10000  MAINTENANCE LOG DAYFILE 
          INDEX  MLDY+1 
          TITLE  SUBROUTINES. 
 CCR      SPACE  4,10 
**        CCR - CALL CONVERSION ROUTINE.
* 
*         ENTRY  (T5) = INDEX TO LAST CONVERSION ROUTINE USED.
* 
*         EXIT   (T5) = INDEX TO CONVERSION ROUTINE USED. 
* 
*         USES   T1.
* 
*         CALLS  CONVERSION ROUTINES LISTED IN *THCR*.
  
  
 CCR1     LDM    THCR,T5     SELECT CONVERSION ROUTINE
          STD    T1 
          RJM    0,T1        CONVERT HEX DATA 
  
 CCR      SUBR               ENTRY/EXIT 
          AOD    T5 
          SBN    THCRL
          MJN    CCR1        IF NOT END OF *THCR* 
          ZJN    CCR0        IF VALID INDEX 
          MONITOR  CHGM      CONDITIONAL HANG 
  
 CCR0     STD    T5          RESET INDEX
          UJN    CCR1        SELECT CONVERSION ROUTINE
  
  
 THCR     BSS    0           TABLE OF HEX CONVERSION ROUTINES 
          CON    C1P
          CON    C2P
          CON    C3P
 THCRL    EQU    *-THCR      LENGTH OF TABLE
 CDA      SPACE  4,10 
**        CDA - CONVERT DISK ADDRESS FOR *ERMD* MESSAGE.
* 
*         ENTRY  (A) = RELATIVE LOCATION OF DISK ADDRESS. 
* 
*         EXIT   (BA) = DATA ADDRESS ADVANCED.
* 
*         USES   PA.
* 
*         CALLS  C2D, C4D.
  
  
 CDA      SUBR               ENTRY/EXIT 
          ADD    EO 
          STD    BA 
          LDC    ERMD+3      SET PARAMETER ADDRESS
          STD    PA 
          RJM    C4D         CONVERT CYLINDER NUMBER
          LDI    BA 
          SHN    -6 
          RJM    C2D         CONVERT TRACK NUMBER 
          STM    ERMD+11
          LDI    BA 
          RJM    C2D         CONVERT SECTOR NUMBER
          STM    ERMD+16
          AOD    BA 
          UJN    CDAX        RETURN 
 CIL      SPACE  4,10 
**        CIL - CLEAR *EMB* INTERLOCK AND RESET FLAGS.
* 
*         ENTRY  (EP+1 - EP+2) = FWA OF *EMB*.
*                (EH - EH+4) = *EMB* INTERLOCK WORD 1.
*                (EX - EX+4) = *EMB* INTERLOCK WORD 2.
* 
*         EXIT   (A) = (EH+4) = 0 IF *EMB* BUFFER IS EMPTY. 
*                *1MD* ACTIVE CLEARED IF *EMB* BUFFER IS EMPTY. 
*                *EMB* INTERLOCK CLEARED IN ALL CASES.
  
  
 CIL      SUBR               ENTRY/EXIT 
          LDD    EH+3        *IN* 
          SBD    EX+3        *OUT*
          ZJN    CIL1        IF *EMB* EMPTY 
          LDN    2           AVOID CLEARING *1MD ACTIVE*
 CIL1     LMN    3           INTERLOCK AND *1MD* ACTIVE 
          LMD    EH+4        CLEAR INTERLOCK, POSSIBLY *1MD ACTIVE* 
          STD    EH+4 
          LDN    0           CLEAR *MESSAGES LOST*
          STD    EH+1 
          LDD    EP+1 
          SHN    14 
          LMD    EP+2 
          CWD    EH 
          LDD    EH+4 
          UJN    CILX        RETURN 
 CLM      SPACE  4,10 
**        CLM - CLEAR MESSAGE BUFFER. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   T1.
  
  
 CLM      SUBR               ENTRY/EXIT 
          LDN    ENDM-BMLM-1
          STD    T1 
 CLM1     LDN    0           CLEAR BUFFER 
          STM    BMLM,T1
          SOD    T1 
          NJN    CLM1        IF NOT END OF BUFFER 
          UJN    CLMX        RETURN 
 CMP      SPACE  4,10 
**        CMP - CONVERT BASIC MESSAGE PARAMETERS. 
* 
*         ENTRY  (EO) = BML MESSAGE OFFSET INTO *BUFF*. 
* 
*         EXIT   (CT) = CHANNEL TYPE. 
* 
*         USES   PA.
* 
*         CALLS  CDA, C2D, C4D. 
  
  
 CMP      SUBR               ENTRY/EXIT 
  
*         INSERT PARAMETERS IN *ERMB* MESSAGE.
  
          LDM    BUFF+3*5,EO  CONVERT ERROR CODE
          RJM    C2D
          STM    ERMB+7      SET IN MESSAGE 
  
*         INSERT PARAMETERS IN *ERMC* MESSAGE.
  
          LDM    BUFF+1*5+2,EO  SET CHANNEL SPECIFICATION 
          STD    CT 
          LPN    37          CONVERT CHANNEL NUMBER 
          RJM    C2D
          STM    ERMC+3 
          LDD    CT          EXTRACT CHANNEL TYPE 
          LPN    40 
          STD    CT 
          ZJN    CMP1        IF NON-CONCURRENT CHANNEL
          LDC    2RNC&2RCC
 CMP1     LMC    2RNC        SET CHANNEL TYPE IN MESSAGE
          STM    ERMC 
          LDM    BUFF+1*5+3,EO  CONVERT UNIT NUMBER 
          RJM    C2D
          STM    ERMC+10
  
*         INSERT PARAMETERS IN *ERMD* MESSAGE.
  
          LDC    BUFF+3*5+1  CONVERT DISK ADDRESS 
          RJM    CDA
  
*         INSERT PARAMETERS IN *ERME* MESSAGE.
  
          LDC    ERME+14     SET PARAMETER ADDRESS
          STD    PA 
          LDD    CT 
          ZJN    CMP2        IF NON-CONCURRENT CHANNEL
          LDM    BUFF+10*5,EO 
          SHN    -6          CONVERT UPPER 4 BITS OF FUNCTION 
          RJM    C2D
          STI    PA          SET IN MESSAGE 
          AOD    PA 
 CMP2     RJM    C4D         CONVERT LAST FUNCTION
          LDC    2L.. 
          STI    PA          TERMINATE MESSAGE
  
*         INSERT PARAMETERS IN *ERMF* MESSAGE.
  
          LDC    ERMG+5      SET PARAMETER ADDRESS
          STD    PA 
          RJM    C4D         CONVERT GENERAL STATUS 
          UJP    CMPX        RETURN 
 CPD      SPACE  4,15 
**        CPD - COPY ERROR DATA.
* 
*         ENTRY  (BC) = ERROR PACKET BYTE COUNT.
*                (CB) = CM WORD BYTE COUNT. 
*                (ED) = ADDRESS OF ERROR PACKET.
* 
*         EXIT   *BML* BUFFER FILLED. 
*                POINTERS UPDATED.
* 
*         USES   BC, CB, ED, T2.
  
  
 CPD3     AOD    T2          ADVANCE *BML* BUFFER COUNT 
          LMN    ENDM-ERDM
          ZJN    CPD5        IF END OF BUFFER 
          LDN    0           ZERO FILL BUFFER 
          STM    ERDM,T2
 CPD4     UJN    CPD3        LOOP ON ZERO FILL
  
 CPD5     STD    BC 
          LDD    CB 
          ZJN    CPDX        IF EVEN CM WORD BYTE COUNT 
 CPD6     AOD    ED          ADVANCE ERROR DATA POINTER 
          AOD    CB 
          LMN    5
          NJN    CPD6        IF NOT END OF CM WORD
          STD    CB 
          LDM    RTYM        CLEAR CONTINUATION FLAG
          SCN    4
          STM    RTYM 
  
 CPD      SUBR               ENTRY/EXIT 
          LDN    0
          STD    T2 
 CPD1     LDI    ED          COPY ERROR DATA
          STM    ERDM,T2
          AOD    ED          ADVANCE ERROR DATA POINTER 
          AOD    CB 
          LMN    5
          NJN    CPD2        IF NOT FULL CM WORD
          STD    CB 
 CPD2     SOD    BC          DECREMENT BYTE COUNT 
          ZJN    CPD4        IF END OF ERROR DATA 
          AOD    T2          ADVANCE *BML* BUFFER POINTER 
          LMN    ENDM-ERDM
          NJN    CPD1        IF NOT END OF *BML* BUFFER 
          LDM    RTYM        SET CONTINUATION FLAG
          SCN    4
          LMN    4
          STM    RTYM 
          UJN    CPDX        RETURN 
 CSD      SPACE  4,10 
**        CSD - CONVERT STATUS DATA.
* 
*         ENTRY  (A) = 6/ PC, 12/ MA
*                      PC = PARAMETER COUNT FOR MESSAGE BLOCK.
*                      MA = MESSAGE ADDRESS FOR 1ST PARAMETER.
* 
*         USES   PA, T6, T7.
* 
*         CALLS  CCR. 
  
  
 CSD1     RJM    CCR         CALL CONVERSION ROUTINE
          LDD    T6 
          SHN    21-0 
          NJN    CSD3        IF NOT MESSAGE BOUNDARY
 CSD2     LDC    200125 
 CSD3     STD    T6          UPDATE SKIP CONTROL
          SHN    1-21 
          LMN    2
          RAD    PA          ADJUST PARAMETER ADDRESS 
          SOD    T7 
          NJN    CSD1        IF NOT END OF PARAMETERS 
  
 CSD      SUBR               ENTRY/EXIT 
          SBN    3
          STD    PA 
          SHN    -14         SET PARAMETER COUNT
          STD    T7 
          ADN    1           ALLOW FOR TWO BYTE PARAMETERS
          RAD    T7 
          UJN    CSD2        SET SKIP CONTROL 
 C1P      SPACE  4,10 
**        C1P - CONVERT FIRST PAIR OF HEX DIGITS. 
* 
*         ENTRY  (BA) = ADDRESS OF HEX DATA.
* 
*         EXIT   (T2) = FIRST DIGIT OF NEXT PAIR. 
*                (BA) = BUFFER ADDRESS ADVANCED.
* 
*         CALLS  CHD. 
  
  
 C1P      SUBR               ENTRY/EXIT 
          LDI    BA 
          STD    T2          SAVE DIGIT FOR NEXT CONVERSION 
          SHN    -4 
          RJM    CHD         CONVERT HEX DATA 
          AOD    BA 
          UJN    C1PX        RETURN 
 C2P      SPACE  4,10 
**        C2P - CONVERT SECOND PAIR OF HEX DIGITS.
* 
*         ENTRY  (T2) = FIRST DIGIT OF PAIR.
*                (BA) = ADDRESS OF HEX DATA.
* 
*         EXIT   (T2) = NEXT PAIR FOR CONVERSION. 
* 
*         CALLS  CHD. 
  
  
 C2P      SUBR               ENTRY/EXIT 
          LDD    T2 
          LPN    17          EXTRACT FIRST DIGIT
          SHN    14 
          LMI    BA          SAVE NEXT PAIR OF HEX DIGITS 
          STD    T2 
          SHN    -10         CONVERT HEX DATA 
          RJM    CHD
          UJN    C2PX        RETURN 
 C3P      SPACE  4,10 
**        C3P - CONVERT THIRD PAIR OF HEX DIGITS. 
* 
*         ENTRY  (T2) = PAIR FOR CONVERSION.
*                (BA) = ADDRESS OF HEX DATA.
* 
*         EXIT   (BA) = BUFFER ADDRESS ADVANCED.
* 
*         CALLS  CHD. 
  
  
 C3P      SUBR               ENTRY/EXIT 
          LDD    T2 
          RJM    CHD         CONVERT HEX DATA 
          AOD    BA 
          UJN    C3PX        RETURN 
 C4D      SPACE  4,10 
**        C4D - CONVERT FOUR OCTAL DIGITS.
* 
*         ENTRY  (BA) = ADDRESS OF OCTAL DATA.
*                (PA) = ADDRESS TO STORE CONVERSION.
* 
*         EXIT   (BA) = DATA ADDRESS ADVANCED.
*                (PA) = PARAMETER ADDRESS ADVANCED. 
* 
*         CALLS  C2D. 
  
  
 C4D      SUBR               ENTRY/EXIT 
          LDI    BA 
          SHN    -6          CONVERT UPPER TWO DIGITS 
          RJM    C2D
          STI    PA          STORE CONVERSION 
          AOD    PA 
          LDI    BA          CONVERT LOWER DIGITS 
          RJM    C2D
          STI    PA          STORE CONVERSION 
          AOD    BA 
          AOD    PA 
          UJN    C4DX        RETURN 
 C6D      SPACE  4,15 
**        C6D - CONVERT SIX OCTAL DIGITS. 
* 
*         ENTRY  (A) .GE. 0 IF DATA BEGINS ON HALF BYTE BOUNDARY. 
*                    .LT. 0 IF DATA BEGINS ON FULL BYTE BOUNDARY. 
*                (BA) = ADDRESS OF OCTAL DATA.
*                (PA) = ADDRESS TO STORE CONVERSION.
* 
*         EXIT   (BA) = DATA ADDRESS ADVANCED.
*                (PA) = PARAMETER ADDRESS ADVANCED. 
* 
*         CALLS  C2D, C4D.
  
  
 C6D1     LDI    BA          CONVERT TWO DIGITS 
          RJM    C2D
          STI    PA          SET CONVERSION IN MESSAGE
          AOD    PA 
          AOD    BA          CONVERT FOUR DIGITS
          RJM    C4D
  
 C6D      SUBR               ENTRY/EXIT 
          PJN    C6D1        IF DATA ON HALF BYTE BOUNDARY
          RJM    C4D         CONVERT FOUR DIGITS
          LDI    BA 
          SHN    -6          CONVERT TWO DIGITS 
          RJM    C2D
          STI    PA          SET CONVERSION IN MESSAGE
          AOD    PA 
          UJN    C6DX        RETURN 
 FNT      SPACE  4,10 
**        FMT - FORMAT *BML* MESSAGE. 
* 
*         ENTRY  (ED) = ADDRESS OF ERROR MESSAGE DATA.
* 
*         USES   T0, T1, CM - CM+4. 
  
  
 FMT      SUBR               ENTRY/EXIT 
  
*         SET SYMPTOM CODE AND DRIVER TYPE. 
  
          LDI    ED          TEST UNRECOVERED DATA ERROR
          ERRNZ  G1FD        CODE IS VALUE DEPENDENT
          SHN    21-12
          PJN    FMT1        IF NOT UNRECOVERED DATA ERROR
          LDN    RS0101-100 
          UJN    FMT4        SET SYMPTOM CODE 
  
 FMT1     SHN    12-2 
          PJN    FMT2        IF NOT REQUEST ERROR 
          LDN    RS0104-100 
          UJN    FMT4        SET SYMPTOM CODE 
  
 FMT2     LDM    EPFD+G2FD,ED  CHECK ERROR RECOVERY 
          SHN    21-6 
          PJN    FMT3        IF NOT RECOVERED DATA ERROR
          LDN    RS0102-100 
          UJN    FMT4        SET SYMPTOM CODE 
  
 FMT3     LDN    RS0103-100 
 FMT4     ADC    DHCD*400+100 
          STM    SYMM 
  
*         SET DATA PATH INFORMATION.
  
          LDM    UNFD,ED     CHECK UNIT NUMBER
          LPN    7
          STM    PTHM+1      SET VALUE IN BML MESSAGE 
          LPN    4
          ADN    2           CHANNEL (CONTROLLER) NUMBER
          STD    T1 
          LDM    EQFD,ED     SET FLPP NUMBER
          SHN    -11
          SHN    1
          STD    T0 
          LDM    EQFD,ED     SET EST ORDINAL
          LPC    777
          STM    ESTM 
          SFA    EST         SET DEVICE MNEMONIC
          ADK    EQDE 
          CRD    CM 
          LDD    CM+3 
          ADC    -2RDV
          STM    EQFD,ED
          LDM    EPFD+G2FD,ED  CHECK WHICH FLPP FOUND ERROR 
          SHN    0-13 
          ADD    T0          ADJUST FLPP NUMBER 
          SHN    6
          STM    MFIM 
          LMD    T1 
          STM    PTHM        SET RECOVERY PATH
  
*         SET RETRY COUNT + RECOVERY FLAGS. 
  
          LDM    UNFD,ED     SET READ/WRITE FLAG
          SHN    -5 
          LPN    2
          STD    T0 
          LDI    ED 
          ERRNZ  G1FD        CODE IS VALUE DEPENDENT
          SHN    -12
          LPN    1           EXTRACT UNRECOVERED STATUS 
          RAD    T0 
          LDM    EPFD+RTFD,ED  SET RETRY COUNT
          LPC    777
          SBD    HN 
          MJN    FMT5        IF .LE. 77 
          LCN    1
 FMT5     ADD    HN          RECOVERY COUNT 
          SHN    6
          LMD    T0          APPEND FLAGS 
          STM    RTYM 
          LDD    IA          SET PP IDENTIFICATION
          STM    PPIM 
          LJM    FMTX        RETURN 
 GEM      SPACE  4,15 
**        GEM - GENERATE ERRLOG MESSAGE FOR MASS STORAGE ERROR. 
* 
*         ENTRY  (EO) = BML MESSAGE OFFSET INTO *BUFF*. 
*                (LN) = BML MESSAGE LENGTH. 
*                (MT) = MESSAGE TYPE. 
* 
*         EXIT   (EL) = 1 IF ERRLOG MESSAGE ISSUED. 
* 
*         USES   T1, T5, T7, EL, LA, CM - CM+4. 
* 
*         CALLS  ACS, C2D, DFM. 
* 
*         MACROS SFA. 
  
  
 GEM3     STD    LA          SAVE MESSAGE TABLE ADDRESS 
 GEM4     LDC    ELMB+3 
          STD    T1          SET ASSEMBLY ADDRESS 
          LDN    0
          STI    T1 
          LDI    LA          APPEND MESSAGE TO PREFIX 
          RJM    ACS
          LDC    ELMB+ERLN   ISSUE ERRLOG MESSAGE 
          RJM    DFM
          AOD    LA          ADVANCE MESSAGE TABLE ADDRESS
          LDI    LA 
          NJN    GEM4        IF NOT END OF TABLE
          LDN    1
          STD    EL          SET ERRLOG ALERT STATUS
  
 GEM      SUBR               ENTRY/EXIT 
          LDD    MT 
          LMN    MLDY 
          NJN    GEMX        IF NOT BML MESSAGE 
          LCN    0           INITIALIZE INDEX 
          STD    T7 
 GEM0     AOD    T7          ADVANCE INDEX
          SBK    TMIDL
          ZJN    GEMX        IF END OF LIST 
          LDM    TMID,T7     GET NEXT MASS STORAGE MESSAGE ID 
          LMM    BUFF+1*5,EO
          NJN    GEM0        IF MESSAGE ID DOES NOT MATCH 
          LDM    BUFF+2*5+1,EO
          LPN    1
          ZJN    GEMX        IF RECOVERED ERROR 
          LDM    BUFF+2*5,EO
          STD    T5          SET EST ORDINAL
          ZJN    GEMX        IF NO EST ORDINAL SPECIFIED
          LDK    ESTP        CHECK MAXIMUM EST ORDINAL
          CRD    CM 
          LDD    T5 
          SBD    CM+1        MAXIMUM MASS STORAGE EST ORDINAL + 1 
          PJN    GEMX        IF NOT VALID MASS STORAGE DEVICE 
          SFA    EST,T5 
          ADK    EQDE        READ EST ENTRY 
          CRD    CM 
          LCN    0           INITIALIZE INDEX 
          STD    T7 
 GEM1     AOD    T7          ADVANCE INDEX
          LDM    TDVT,T7     CHECK NEXT MASS STORAGE DEVICE TYPE
          ZJP    GEMX        IF END OF LIST 
          LMD    CM+3 
          NJN    GEM1        IF NOT MATCHING DEVICE TYPE
          LDD    CM+3 
          STM    ELMB        GENERATE MESSAGE PREFIX
          LDD    T5 
          LPN    7
          SHN    6           SEPARATE PREFIX FROM MESSAGE 
          ADC    2R0, 
          STM    ELMB+2 
          LDD    T5          CONVERT REMAINDER OF EST ORDINAL 
          SHN    -3 
          RJM    C2D
          STM    ELMB+1 
          LDD    LN          CHECK MESSAGE LENGTH 
          SBN    4
          PJN    GEM2        IF NOT BASIC MESSAGE 
          LDC    GEMA 
          LJM    GEM3        ISSUE BASIC ERRLOG MESSAGE 
  
 GEM2     LDM    TEMP,T7     SET PROCESSOR ADDRESS
          STD    T7 
          LJM    0,T7        EXIT TO MESSAGE PROCESSOR
  
  
 GEMA     CON    ERMA 
          CON    0
 GIL      SPACE  4,10 
**        GIL - GET *EMB* INTERLOCK.
* 
*         ENTRY  (EP+1 - EP+2) = FWA OF *EMB*.
* 
*         EXIT   *EMB* INTERLOCK OBTAINED.
*                (EH - EH+4) = *EMB* HEADER WORD 1 REFRESHED. 
* 
*         USES   CM - CM+4, EH - EH+4.
* 
*         MACROS DELAY, MONITOR.
  
  
 GIL2     LDD    EP+1 
          SHN    14          READ *EMB* HEADER WORD 
          LMD    EP+2 
          CRD    EH 
  
 GIL      SUBR               ENTRY/EXIT 
 GIL1     LDK    ZERL 
          CRD    CM 
          LDD    EP+1        FORMAT *UTEM* REQUEST
          STD    CM+3 
          LDD    EP+2 
          STD    CM+4 
          MONITOR  UTEM      GET *EMB* INTERLOCK
          LDD    CM+1 
          ZJN    GIL2        IF INTERLOCK OBTAINED
          DELAY 
          UJN    GIL1        RETRY
          TITLE  MESSAGE GENERATORS.
 PDA      SPACE  4,10 
**        GENERATE ERRLOG MESSAGES FOR *LDAM* TYPE DEVICES. 
  
  
 PDA      BSS    0           ENTRY
 PDB      BSS    0
 PDD      BSS    0
 PDG      BSS    0
 PDI      BSS    0
 PDJ      BSS    0
 PDK      BSS    0
 PDL      BSS    0
 PDM      BSS    0
 PDQ      BSS    0
 PDR      BSS    0
 PDX      BSS    0
 PDY      BSS    0
 PDZ      BSS    0
          RJM    CMP         CONVERT MESSAGE PARAMETERS 
  
*         INSERT PARAMETERS IN *ERMI* THRU *ERMM* MESSAGES. 
  
          LDC    ERMI+2      SET PARAMETER ADDRESS
          STD    PA 
          LDN    5           NUMBER OF MESSAGES 
          STD    T7 
 PDA1     LDN    4           NUMBER OF PARAMETERS / MESSAGE 
          STD    T6 
 PDA2     RJM    C4D         CONVERT FOUR OCTAL DIGITS
          LDN    2
          RAD    PA          ADVANCE PARAMETER ADDRESS
          SOD    T6 
          NJN    PDA2        IF NOT END OF MESSAGE
          AOD    PA 
          SOD    T7 
          NJN    PDA1        IF NOT END OF MESSAGES 
          LDC    PDAT 
          LJM    GEM3        ISSUE ERRLOG MESSAGES
  
  
 PDAT     CON    ERMA 
          CON    ERMB 
          CON    ERMC 
          CON    ERMD 
          CON    ERME 
          CON    ERMF 
          CON    ERMH 
          CON    ERMI 
          CON    ERMJ 
          CON    ERMK 
          CON    ERML 
          CON    ERMM 
          CON    0
          TITLE  MESSAGE GENERATORS.
 PDC      SPACE  4,10 
**        GENERATE ERRLOG MESSAGES FOR CCC COUPLED DEVICES. 
  
  
 PDC      BSS    0           ENTRY
          RJM    CMP         CONVERT MESSAGE PARAMETERS 
  
*         INSERT PARAMETERS IN *ERMZ* THRU *ERM5* MESSAGES. 
  
          LDC    ERMZ-1      SET PARAMETER ADDRESS
          STD    PA 
          LDN    THCRL-1     INITIALIZE CONVERSION ROUTINE INDEX
          STD    T5 
          LDN    24D         NUMBER OF PARAMETERS IN MESSAGE BLOCK
          STD    T7 
 PDC1     LPN    3
          ZJN    PDC2        IF CROSSING MESSAGE BOUNDARY 
          LCN    1
 PDC2     ADN    4           ADVANCE CONVERSION ADDRESS 
          RAD    PA 
          RJM    CCR         CALL CONVERSION ROUTINE
          SOD    T7 
          NJN    PDC1        IF NOT END OF PARAMETERS 
  
*         INSERT PARAMETERS IN *ERMX* MESSAGE.
  
          LDC    ERMX+12     SET PARAMETER ADDRESS
          STD    PA 
          AOD    BA          ADJUST BML DATA ADDRESS
          LDI    BA 
          RJM    CHD         CONVERT CYBER I/F STATUS 
  
*         INSERT PARAMETERS IN *ERMY* MESSAGE.
  
          LDC    ERMY+6      SET PARAMETER ADDRESS
          STD    PA 
          AOD    BA          ADJUST BML DATA ADDRESS
          LDI    BA 
          STD    T2          SAVE STATUS FOR *C3P*
          SHN    -10
          RJM    CHD         CONVERT CCC STATUS 
          LDN    1R -1R0
          SHN    6           INSERT BLANK SEPARATOR 
          RAM    -1,PA
          RJM    C3P         CONVERT REMAINDER OF STATUS
          LDD    CT 
          ZJN    PDC3        IF NOT DMA PATH TO DEVICE
  
*         INSERT PARAMETERS IN *ERM6* MESSAGE.
  
          AOD    BA          ADJUST DATA ADDRESS
          LDC    ERM6+7 
          STD    PA 
          RJM    C6D         CONVERT OPERATIONAL STATUS REGISTER
  
*         INSERT PARAMETERS IN *ERM7* MESSAGE.
  
          LDC    ERM7+7      SET PARAMETER ADDRESS
          STD    PA 
          LCN    0           CONVERT ADAPTOR CONTROL REGISTER 
          RJM    C6D
  
*         INSERT PARAMETERS IN *ERM8* MESSAGE.
  
          LDC    ERM8+7      SET PARAMETER ADDRESS
          STD    PA 
          RJM    C6D         CONVERT ERROR STATUS REGISTER
          LDC    ERM6 
 PDC3     STM    PDCTE       SET / CLEAR END OF MESSAGES
          LDC    PDCT 
          LJM    GEM3        ISSUE ERRLOG MESSAGES
  
  
 PDCT     CON    ERMA 
          CON    ERMB 
          CON    ERMC 
          CON    ERMD 
          CON    ERME 
          CON    ERMF 
          CON    ERMX 
          CON    ERMY 
          CON    ERMH 
          CON    ERMZ 
          CON    ERM1 
          CON    ERM2 
          CON    ERM3 
          CON    ERM4 
          CON    ERM5 
 PDCTE    CON    ERM6 
          CON    ERM7 
          CON    ERM8 
          CON    0
          TITLE  MESSAGE GENERATORS.
 PDE      SPACE  4,10 
**        GENERATE ERRLOG MESSAGES FOR EXTENDED MEMORY DEVICES. 
  
  
 PDE      BSS    0           ENTRY
 PDP      BSS    0
  
*         INSERT PARAMETERS IN *ERMB* MESSAGE.
  
          LDM    BUFF+3*5,EO  CONVERT ERROR CODE
          RJM    C2D
          STM    ERMB+7      SET IN MESSAGE 
  
*         INSERT PARAMETERS IN *ERMG* MESSAGE.
  
          LDC    BUFF+4*5+1  SET BUFFER ADDRESS 
          ADD    EO 
          STD    BA 
          LDC    ERMG+5      SET PARAMETER ADDRESS
          STD    PA 
          RJM    C4D         CONVERT STATUS 
  
*         INSERT PARAMETERS IN *ERMN* MESSAGE.
  
          LDC    ERMN+7      SET PARAMETER ADDRESS
          STD    PA 
          RJM    C4D         CONVERT WORD COUNT 
  
*         INSERT PARAMETERS IN *ERMO* MESSAGE.
  
          LDC    ERMO+5      SET PARAMETER ADDRESS
          STD    PA 
          RJM    C4D         CONVERT EXTENDED MEMORY ADDRESS
          RJM    C4D
          LDC    PDET 
          LJM    GEM3        ISSUE ERRLOG MESSAGES
  
  
 PDET     CON    ERMA 
          CON    ERMB 
          CON    ERMG 
          CON    ERMN 
          CON    ERMO 
          CON    0
          TITLE  MESSAGE GENERATORS.
 PDF      SPACE  4,10 
**        GENERATE ERRLOG MESSAGES FOR 887 DEVICES. 
  
  
 PDF      BSS    0           ENTRY
 PDH      BSS    0
          LDN    0
 PDF1     STM    PDFA 
  
*         INSERT PARAMETERS IN *ERMP* MESSAGE.
  
          LDM    BUFF+3*5+4,EO  CONVERT FAULT CODE
          RJM    C2D
          STM    ERMP+7      SET IN MESSAGE 
  
*         INSERT PARAMETERS IN *ERMQ* MESSAGE.
  
          LDM    BUFF+1*5+2,EO  CONVERT CPP NUMBER
          SHN    -6 
          RJM    C2D
          STM    ERMQ+3 
          LDM    BUFF+1*5+2,EO  CONVERT CCH NUMBER
          LPN    37 
          RJM    C2D
          STM    ERMQ+10
          LDM    BUFF+1*5+4,EO  APPEND PORT DESIGNATOR
          ADC    2RA, 
          STM    ERMQ+11
          LDM    BUFF+1*5+3,EO  CONVERT EQUIPMENT (CONTROLLER) NUMBER 
          SHN    -6 
          RJM    C2D
          SHN    6
          LMN    1R,
          STM    ERMQ+15
          LDM    BUFF+1*5+3,EO  CONVERT UNIT NUMBER 
          LPN    77 
          RJM    C2D
          STM    ERMQ+21
 PDF2     LDC    PDNT        SET LIST ADDRESS 
          STD    LA 
 PDF3     LDM    PDFT-PDNT,LA  COPY MESSAGE LIST
          STI    LA 
          AOD    LA          ADVANCE LIST ADDRESS 
          LMC    PDNT+PDFTE-PDFT
          NJN    PDF3        IF NOT END OF COPY 
          LDD    LN 
          SBN    4
          NJN    PDF4        IF MESSAGE HAS MORE THAN FAULT CODE
*         LDN    0
          STM    PDNT+PDFTC-PDFT  TERMINATE MESSAGE LIST
          LDC    PDNT 
          LJM    GEM3        ISSUE ERRLOG MESSAGES
  
*         INSERT PARAMETERS IN *ERMD* MESSAGE.
  
 PDF4     LDC    BUFF+4*5+3  CONVERT DISK ADDRESS 
          RJM    CDA
  
*         INSERT PARAMETERS IN *ERMS* MESSAGE.
  
          LDC    ERMS+10     SET PARAMETER ADDRESS
          STD    PA 
          LDN    4           ADJUST BML DATA ADDRESS
          RAD    BA 
          LDM    PDFA 
          NJN    PDF5        IF NOT 887 DEVICE
          LDI    BA 
          LPC    377         ISOLATE COMMAND CODE 
          STI    BA 
 PDF5     LDN    THCRL-1     INITIALIZE CONVERSION ROUTINE INDEX
          STD    T5 
          RJM    CCR         CONVERT LAST COMMAND 
          RJM    CCR
  
*         INSERT PARAMETERS IN *ERME* MESSAGE.
  
          LDC    ERME+14     SET PARAMETER ADDRESS
          STD    PA 
          RJM    CCR         CONVERT LAST FUNCTION
          RJM    CCR
          LDC    2L..        TERMINATE MESSAGE
          STI    PA 
  
*         INSERT PARAMETERS IN *ERMR* MESSAGE.
  
          LDC    ERMR+4      SET PARAMETER ADDRESS
          STD    PA 
          LDN    4           ITERATION COUNT
          STD    T7 
 PDF6     AOD    PA          SKIP BLANK SEPARATOR 
          RJM    CCR
          RJM    CCR         CONVERT CHANNEL DATA 
          SOD    T7 
          NJN    PDF6        IF MORE PARAMETERS 
          LDN    1R -1R0
          SHN    6           INSERT BLANK SEPARATOR 
          RAM    ERMR+14
          LDD    LN          CHECK BML MESSAGE LENGTH 
          SBN    10D
          PJN    PDF8        IF MESSAGE INCLUDES STATUS BLOCKS
          LDN    0
 PDF7     STM    PDFTE       SET / CLEAR END OF MESSAGES
  
          LDC    PDFT 
          LJM    GEM3        ISSUE ERRLOG MESSAGES
  
 PDF8     LDN    THCRL-1     INITIALIZE CONVERSION ROUTINE INDEX
          STD    T5 
          LDN    10          ADJUST BML DATA ADDRESS
          RAD    BA 
          LDC    0           887 VS. 9853/583X/47444 PATH SELECTOR
 PDFA     EQU    *-1
          NJP    PDN1        IF 9853/583X/47444 DEVICE
  
*         INSERT PARAMETERS IN *ERMU* AND *ERMV* MESSAGES.
  
          LDC    7S12+ERMU+2  CONVERT STATUS DATA 
          RJM    CSD
  
*         INSERT PARAMETERS IN *ERMI* AND *ERMJ* MESSAGES.
  
          LDC    10S12+ERMI+2  CONVERT STATUS DATA
          RJM    CSD
          LDC    ERMT 
          UJP    PDF7        ISSUE ERRLOG MESSAGES
  
  
 PDFT     CON    ERMA 
          CON    ERMP 
          CON    ERMQ 
 PDFTC    CON    ERMD 
          CON    ERME 
          CON    ERMR 
          CON    ERMS 
 PDFTE    CON    ERMT 
          CON    ERMU 
          CON    ERMV 
          CON    ERMW 
          CON    ERMI 
          CON    ERMJ 
          CON    0
          TITLE  MESSAGE GENERATORS.
 PDN      SPACE  4,10 
**        GENERATE ERRLOG MESSAGES FOR 9853/583X/47444 DEVICES. 
  
  
 PDN      BSS    0           ENTRY
 PEA      BSS    0           DAS SSD 1X 
 PEB      BSS    0           DAS SSD 2X 
 PEC      BSS    0           DAS SABRE 1X 
 PED      BSS    0           DAS SABRE 1XP
 PEE      BSS    0           DAS SABRE 2X 
 PEF      BSS    0           DAS SABRE 2XP
 PEG      BSS    0           DAS ELITE 1X 
 PEH      BSS    0           DAS ELITE 1XP
 PEI      BSS    0           DAS ELITE 2X   (MP)
 PEJ      BSS    0           DAS ELITE 2XP  (MP)
 PEK      BSS    0           DAS ELITE 3XP  (MP)
 PEL      BSS    0           DAS ELITE 4X   (MP)
 PEM      BSS    0           DAS SABRE 3XP  (MP)
 PEN      BSS    0           DAS SABRE 4X   (MP)
 PEO      BSS    0           DAS 3.5IN 1X 
 PEP      BSS    0           DAS 3.5IN 1XP
 PES      BSS    0           DAS 3.5IN 2X   (MP)
 PEU      BSS    0           DAS 3.5IN 2XP  (MP)
 PEV      BSS    0           DAS 3.5IN 3XP  (MP)
 PEW      BSS    0           DAS 3.5IN 4X   (MP)
          LDN    2
          LJM    PDF1        GENERATE ALL BUT STATUS MESSAGES 
  
 PDNT     EQU    BFMS-76     ADDRESS OF MESSAGE LIST
  
 PDN1     LDC    ERM9        PUT STATUS HEADER MESSAGE IN LIST
          STI    LA 
          AOD    LA          ADVANCE LIST ADDRESS 
          LDC    PDNT+100 
          STD    PA          SET MESSAGE ASSEMBLY ADDRESS 
          STD    CM 
          LDI    BA          FWA OF RESPONSE PACKET 
          LPN    17 
          SHN    14 
          LMM    1,BA        FORM STATUS BLOCK LENGTH 
          SHN    -10
          ADN    1           ALLOW FOR PADDING ON LAST SUBSTATUS
          SCN    1
          STD    BC          SET OCTET COUNT
          SBN    12 
          PJN    PDN5        IF LENGTH NOT TOO SHORT
 PDN3     SOD    LA 
 PDN4     LDN    0           TERMINATE LIST 
          STI    LA 
          LDC    PDNT 
          LJM    GEM3        ISSUE ERRLOG MESSAGES
  
 PDN5     SBK    200
          PJN    PDN3        IF LENGTH TOO LONG 
          RJM    CCR
          LDN    10          LENGTH OF BASIC RESPONSE PACKET
 PDN6     STD    T7 
          ADN    1+2         INCLUDE ID WORD
          SCN    1
          STD    T4          ALLOW FOR PADDING
          RJM    CCR
 PDN7     LDN    4           SET LOOP CONTROL 
          STD    T6 
 PDN8     LDC    2R          INSERT LEADING BLANKS IN BUFFER
          STI    PA 
          AOD    PA          CONVERT TWO HEX DIGITS 
          RJM    CCR
          SOD    T7 
          ZJN    PDN9        IF END OF SUBSTATUS
          RJM    CCR
          SOD    T7 
          ZJN    PDN9        IF END OF SUBSTATUS
          SOD    T6 
          NJN    PDN8        IF NOT END OF MESSAGE LINE 
          LDN    1R &1R.
 PDN9     LMN    1R.         SET END OF LINE
          SHN    6
          STI    PA          TERMINATE MESSAGE LINE 
          LDD    CM 
          STI    LA          PUT LINE IN MESSAGE LIST 
          AOD    PA 
          STD    CM          FWA OF NEXT LINE 
          AOD    LA 
          LDD    T7 
          NJN    PDN13       IF NOT END OF SUBSTATUS
*         LDN    0
          SBD    T4          DECREMENT STATUS LENGTH
          RAD    BC 
          MJN    PDN9.1      IF END OF STATUS BLOCK 
          NJN    PDN9.2      IF NOT END OF STATUS BLOCK 
 PDN9.1   LJM    PDN4        TERMINATE LIST 
  
 PDN9.2   LDD    T4 
          LPN    1
          ZJN    PDN10       IF NOT PADDING OCTET 
          RJM    CCR
          SOD    PA          RESET PARAMETER ADDRESS
 PDN10    LDC    2R 
          STI    PA          SET LEADING BLANKS IN BUFFER 
          AOD    PA 
          RJM    CCR         CONVERT SUBSTATUS LENGTH 
          SOD    T0 
          MJN    PDN11       IF INVALID SUBSTATUS LENGTH
          LPC    177
          NJN    PDN12       IF VALID SUBSTATUS 
 PDN11    LDD    BC 
 PDN12    LJM    PDN6        GENERATE NEXT MESSAGE LINE 
  
 PDN13    LDC    2R          BLANK FILL START OF MESSAGE
          STI    PA 
          STM    1,PA        DONT RELIST SUBSTATUS HEADER 
          STM    2,PA 
          LDN    3           ADVANCE BUFFER ADDRESS 
          RAD    PA 
          LJM    PDN7        CONTINUE SUBSTATUS ON NEXT LINE
          TITLE  MISCELLANEOUS. 
 TDVT     SPACE  4,10 
**        TDVT - TABLE OF MASS STORAGE DEVICE TYPES.
  
  
 TDVT     BSS    0           TABLE OF DEVICE TYPES
          TBL    "MSEQ" 
          CON    0           END OF TABLE 
 TELM     SPACE  4,10 
**        TELM - TABLE OF ERRLOG MESSAGES.
  
  
 TELM     BSS    0           TABLE OF MESSAGES
 ERMA     DATA   Z*UNRECOVERED MASS STORAGE ERROR.* 
 ERMB     DATA   Z*ERROR CODE =  NN.* 
 ERMC     DATA   Z*NCH = CC,  UN = UU.* 
 ERMD     DATA   Z*CYL = YYYY, TRK = TT, SEC = SS.* 
 ERME     DATA   Z*LAST CHANNEL FUNCTION = FFFFFF.* 
 ERMF     DATA   H*GENERAL *
 ERMG     DATA   Z*STATUS =  GGGG.* 
 ERMH     DATA   Z*DETAILED STATUS.*
 ERMI     DATA   Z* 01=XXXX 02=XXXX 03=XXXX 04=XXXX.* 
 ERMJ     DATA   Z* 05=XXXX 06=XXXX 07=XXXX 08=XXXX.* 
 ERMK     DATA   Z* 09=XXXX 10=XXXX 11=XXXX 12=XXXX.* 
 ERML     DATA   Z* 13=XXXX 14=XXXX 15=XXXX 16=XXXX.* 
 ERMM     DATA   Z* 17=XXXX 18=XXXX 19=XXXX 20=XXXX.* 
  
 ERMN     DATA   Z*WORD COUNT =  CCCC.* 
 ERMO     DATA   Z*XM ADDR = AAAAAAAA.* 
  
 ERMP     DATA   Z*FAULT CODE =  NN.* 
 ERMQ     DATA   Z*CPP = PP, CCH = CCB, EQ = E, UN = UU.* 
 ERMR     DATA   Z*CCH REG = DDDD  EEEE  OO C  RRRR.* 
 ERMS     DATA   Z*LAST COMMAND =  CCCC.* 
 ERMT     DATA   Z*IHD STATUS.* 
 ERMU     DATA   Z* 01=AAAA 02=BBBB 03=CCCC 04=DDDD.* 
 ERMV     DATA   Z* 05=EEEE 06=FFFF 07=GGGG.* 
 ERMW     DATA   Z*DEVICE STATUS.*
  
 ERMX     DATA   Z*CYBER I/F STATUS =  II.* 
 ERMY     DATA   Z*CCC STATUS = CCC.* 
 ERMZ     DATA   Z* SB00=SS SB01=SS SB02=SS SB03=SS.* 
 ERM1     DATA   Z* SB04=SS SB05=SS SB06=SS SB07=SS.* 
 ERM2     DATA   Z* SB08=SS SB09=SS SB10=SS SB11=SS.* 
 ERM3     DATA   Z* SB12=SS SB13=SS SB14=SS SB15=SS.* 
 ERM4     DATA   Z* SB16=SS SB17=SS SB18=SS SB19=SS.* 
 ERM5     DATA   Z* SB20=SS SB21=SS SB22=SS SB23=SS.* 
  
 ERM6     DATA   Z*OP STAT REG = OOOOOO.* 
 ERM7     DATA   Z*AD CNTL REG = AAAAAA.* 
 ERM8     DATA   Z*ER STAT REG = EEEEEE.* 
  
 ERM9     DATA   Z*9853/583X/47444 STATUS.* 
 TEMP     SPACE  4,10 
**        TEMP - TABLE OF ERRLOG MESSAGE PROCESSORS.
  
  
 TEMP     BSS    0           TABLE OF MESSAGE PROCESSORS
 TEMP     HERE
 TMID     SPACE  4,10 
**        TMID - TABLE OF MASS STORAGE BML MESSAGE ID-S.
  
  
 TMID     BSS    0           TABLE OF MESSAGE ID-S
 TMID     HERE
 TMIDL    EQU    *-TMID      LENGTH OF TABLE
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPACS 
 CA       EQU    PA          DEFINE CONVERSION ADDRESS
          LIST   X
*CALL     COMPCHD 
          LIST   *
*CALL     COMPC2D 
*CALL     COMPDV5 
 1MD      SPACE  4,10 
          OVERFLOW
 BUFF     SPACE  4,10 
 ELMB     BSS    0           ERRLOG MESSAGE ASSEMBLY BUFFER 
 BUFF     EQU    ELMB+5*5    MESSAGE BUFFER 
 BUFFL    EQU    PDNT-BUFF
          ERRNG  PDNT-BUFF-5*200  OVERFLOW
          END 
