6DI 
          IDENT  6DI,MSFW    7155-7154-7054/885-844  MAIN DRIVER. 
 HN       MICRO  1,,+*LDAM* DEVICE+ 
          PERIPH J
          BASE   MIXED
          SST 
*COMMENT  6DI - "HN" MAIN DRIVER. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  6DI - "HN" DRIVER. 
          SPACE  4
***       6DI - 7155-7154-7054/885-844 DRIVER.
*         R. J. THIELEN.     75/11/20.
*         W. E. GOEBEL.      78/01/24.
          SPACE  4
***              6DI PROVIDES THE CAPABILITY TO ACCESS THE 885 AND
*         844-44 OR 844-41 DRIVES THROUGH THE 7155 CONTROLLER.
*         6DI ALSO PROVIDES THE CAPABILITY TO ACCESS 844-21, 844-44,
*         844-41 DISK DRIVES THROUGH EITHER A 7054 OR 7154 CONTROLLER.
*         FULL TRACKING OPERATIONS ARE ALLOWED ONLY THROUGH THE 7155
*         AND 7154 CONTROLLERS. 
* 
*                ACCESS TO FSC 3330 AND 3350 DRIVES IN FULL TRACK MODE
*         IS PROVIDED THROUGH THE FSC CHANNEL ADAPTOR.
* 
*                834 AND 836 DRIVES ARE ACCESSED THROUGH A 7255 
*         CHANNEL ADAPTOR WHICH HAS A 7155 COMPATIBLE INTERFACE.  THEY
*         MAY ONLY BE ACCESSED IN FULL TRACK MODE.
* 
*                CDSS SUBSYSTEMS ARE ACCESSED THROUGH A 7155 COMPATIBLE 
*         CONTROLLER WHICH IS INCLUDED IN THE SUBSYSTEM.  THEY MAY ONLY 
*         BE ACCESSED IN FULL TRACK MODE. 
          SPACE  4
***       ORGANIZATION OF 7155/885. 
* 
*         UP TO THREE 885 UNITS CAN BE COMBINED TO FORM A 
*         LOGICAL DEVICE. 
* 
*         EQUIPMENT TYPE = *DM*.
* 
*         SECTORS/TRACK = 640.
* 
*         TRACKS/UNIT = 1682. 
* 
*         WORDS/UNIT = 68,894,720.
* 
*         UNITS/DEVICE = 1-3. 
* 
*         WORDS/DEVICE = 68,894,720 - 206,684,160.
* 
*         MAXIMUM DATA RATE = 61.44 K WORDS/SECOND. 
* 
* 
*         EQUIPMENT TYPE = *DQ*.
* 
*         SECTORS/TRACK = 640.
* 
*         TRACKS/UNIT = 1682. 
* 
*         WORDS/UNIT = 68,894,720.
* 
*         UNITS/DEVICE = 1-3. 
* 
*         WORDS/DEVICE = 68,894,720 - 206,684,160.
* 
*         MAXIMUM DATA RATE = 122.88 K WORDS/SECOND.
          SPACE  4
***       ORGANIZATION OF 7X5X/844-XX.
* 
*         UP TO EIGHT 844-XX UNITS CAN BE COMBINED TO FORM A
*         LOGICAL DEVICE. 
* 
*         EQUIPMENT TYPE = *DI*.
* 
*         SECTORS/TRACK = 107.
* 
*         TRACKS/UNIT = 1632. 
* 
*         WORDS/UNIT = 11,175,936.
* 
*         UNITS/DEVICE = 1-8. 
* 
*         WORDS/DEVICE = 11,175,936 - 89,407,488. 
* 
*         MAXIMUM DATA RATE = 46.08 K WORDS/SECOND. 
* 
* 
*         EQUIPMENT TYPE = *DJ*.
* 
*         SECTORS/TRACK = 227.
* 
*         TRACKS/UNIT = 1640. 
* 
*         WORDS/UNIT = 23,825,920.
* 
*         UNITS/DEVICE = 1-8. 
* 
*         WORDS/DEVICE = 23,825,920 - 190,607,360.
* 
*         MAXIMUM DATA RATE = 46.08 K WORDS/SECOND. 
* 
* 
*         EQUIPMENT TYPE = *DK*.
* 
*         SECTORS/TRACK = 112.
* 
*         TRACKS/UNIT = 1632. 
* 
*         WORDS/UNIT = 11,698,176.
* 
*         UNITS/DEVICE = 1-8. 
* 
*         WORDS/DEVICE = 11,698,176 - 93,585,408. 
* 
*         MAXIMUM DATA RATE = 92.16 K WORDS/SECOND. 
* 
* 
*         EQUIPMENT TYPE = *DL*.
* 
*         SECTORS/TRACK = 227.
* 
*         TRACKS/UNIT = 1640. 
* 
*         WORDS/UNIT = 23,825,920.
* 
*         UNITS/DEVICE = 1-8. 
* 
*         WORDS/DEVICE = 24,825,920 - 190,607,360.
* 
*         MAXIMUM DATA RATE = 92.16 K WORDS/SECOND. 
          SPACE  4,10 
***       ORGANIZATION OF FSC DEVICES.
* 
* 
*         MODEL = 3330-1. 
* 
*         EQUIPMENT TYPE = *DX*.
* 
*         SECTORS/TRACK = 98. 
* 
*         TRACKS/UNIT = 1632. 
* 
*         WORDS/UNIT = 10,235,904.
* 
*         UNITS/DEVICE = 1-8. 
* 
*         WORDS/DEVICE = 10,235,904 - 81,887,232. 
* 
*         MAXIMUM DATA RATE = 80.64 K WORDS/SECOND. 
* 
* 
*         MODEL = 3330-11.
* 
*         EQUIPMENT TYPE = *DY*.
* 
*         SECTORS/TRACK = 198.
* 
*         TRACKS/UNIT = 1624. 
* 
*         WORDS/UNIT = 20,579,328.
* 
*         UNITS/DEVICE = 1-8. 
* 
*         WORDS/DEVICE = 20,579,328 - 164,634,624.
* 
*         MAXIMUM DATA RATE = 80.64 K WORDS/SECOND. 
* 
* 
*         MODEL = 3350. 
* 
*         EQUIPMENT TYPE = *DZ*.
* 
*         SECTORS/TRACK = 420.
* 
*         TRACKS/MODULE = 1116. 
* 
*         WORDS/MODULE = 30,051,840.
* 
*         MODULE/DEVICE = 1-4.
* 
*         WORDS/DEVICE = 30,051,840 - 120,207,360.
* 
*         MAXIMUM DATA RATE = 107.52 K WORDS PER SECOND.
* 
* 
*         MODEL = 33502.
* 
*         EQUIPMENT TYPE = *DA*.
* 
*         SECTORS/TRACK = 840.
* 
*         TRACKS/MODULE = 1116. 
* 
*         WORDS/MODULE = 30,051,840.
* 
*         MODULE/DEVICE = 1-2.
* 
*         WORDS/DEVICE = 60,103,680 - 120,207,360.
* 
*         MAXIMUM DATA RATE = 107.52 K WORDS PER SECOND.
          SPACE  4,10 
***       ORGANIZATION OF 834 DEVICES.
* 
*         UP TO EIGHT 834 PHYSICAL UNITS MAY BE COMBINED TO FORM A
*         LOGICAL DEVICE. 
* 
*         EQUIPMENT TYPE = *DD*.
* 
*         SECTORS/TRACK = 160.
* 
*         TRACKS/UNITS = 1628.
* 
*         WORDS/UNIT = 16,670,720.
* 
*         UNITS/DEVICE = 1-8. 
* 
*         WORDS/DEVICE = 16,670,720 - 133,365,760.
* 
*         MAXIMUM DATA RATE = 122.88 K WORDS/SECOND.
          SPACE  4,10 
***       ORGANIZATION OF 836 DEVICES.
* 
*         UP TO THREE 836 PHYSICAL UNITS MAY BE COMBINED TO FORM A
*         LOGICAL DEVICE. 
* 
*         EQUIPMENT TYPE = *DG*.
* 
*         SECTORS/TRACK = 564.
* 
*         TRACKS/UNIT = 1398. 
* 
*         WORDS/UNIT = 50,462,208.
* 
*         UNITS/DEVICE = 1-3. 
* 
*         WORDS/DEVICE = 50,462,208 - 151,386,624.
* 
*         MAXIMUM DATA RATE = 122.88 K WORDS/SECOND.
          SPACE  4
***       ORGANIZATION OF CDSS II DEVICES.
* 
*         ONE CDSS II UNIT FORMS A SINGLE LOGICAL DEVICE. 
* 
*         EQUIPMENT TYPE = *DR*.
* 
*         SECTORS/TRACK = 640.
* 
*         TRACKS/UNIT = 123,640.
* 
*         WORDS/UNIT = 253,229,056. 
* 
*         UNITS/DEVICE = 1. 
* 
*         WORDS/DEVICE = 253,229,056. 
          SPACE  4
**        ENTRY CONDITIONS. 
* 
* 
*         (T4) = CHANNEL IF PREVIOUSLY RESERVED.
*         (T5) = EST ORDINAL. 
*         (T6) = TRACK. 
*         (T7) = SECTOR.
          SPACE  4
 RICHI$   EQU    1           SELECT DEFERRED INSTRUCTION REDEFINITION 
 RICHL$   EQU    1
 RIREL$   EQU    1
*CALL     COMPMAC 
*CALL     COMPCHI 
*CALL     COMPCHL 
*CALL     COMPREL 
*CALL     COMSCPS 
*CALL     COMSDFS 
*CALL     COMSEVT 
          LIST   X
*CALL     COMSMSP 
          LIST   *
*CALL     COMSPIM 
*CALL     COMSZOL 
*CALL     COMS1DS 
          SPACE  4,20 
**        DRIVER FUNCTION CODES.
  
  
 FCCN     EQU    0           CONNECT FUNCTION CODE
 FCS1     EQU    1           SEEK 1 TO 1 INTERLACE
 FCS2     EQU    2           SEEK 2 TO 1 INTERLACE
 FCRD     EQU    4           READ FUNCTION CODE 
 FCWR     EQU    5           WRITE FUNCTION CODE
 FCOC     EQU    10          OPERATION COMPLETE FUNCTION CODE 
 FCGR     EQU    11          DISABLE RESERVES - GRENADE 
 FCGS     EQU    12          GENERAL STATUS FUNCTION CODE 
 FCCO     EQU    14          CONTINUE FUNCTION CODE 
 FCDK     EQU    15          DROP SEEKS 
 FCDR     EQU    20          DRIVE RELEASE
 FCDS     EQU    23          DETAILED STATUS FUNCTION CODE
 FCRF     EQU    30          READ FACTORY DATA FUNCTION CODE
 FCRU     EQU    31          READ UTILITY SECTOR FUNCTION CODE
 FCRP     EQU    34          READ PROTECTED SECTOR
 FCWL     EQU    35          WRITE LAST SECTOR
 FCWP     EQU    37          WRITE PROTECTED SECTOR 
 FCRB     EQU    43          READ BACK COUPLER BUFFER 
 FCST     EQU    52          INPUT PROCESSOR STATUS 
 FCSU     EQU    55          SPIN UP AN ISD DRIVE 
 FCSD     EQU    56          SPIN DOWN AN ISD DRIVE 
 FCTD     EQU    56          INPUT TIMING DATA
 FCDP     EQU    61          AUTODUMP 
 FCMP     EQU    62          MANIPULATE PROCESSOR 
 FCID     EQU    63          INPUT DISPLAY DATA 
 FCFT     EQU    64          FUNCTION TIMING DIFFERENCE COUNTER 
 FCLC     EQU    71          AUTOLOAD CONTROL MODULE FROM PP
 FCAL     EQU    414         AUTOLOAD FUNCTION CODE 
          SPACE  4
**        ASSEMBLY CONSTANTS. 
  
  
 DSLN     EQU    24          DETAILED STATUS LENGTH 
 FRNW     EQU    3           FIRMWARE REVISION NUMBER WORD
 ARNW     EQU    20          FSC ADAPTOR REVISION NUMBER WORD 
 CMNW     EQU    21          CONTROL MODULE REVISION NUMBER WORD
 CH       EQU    0           MASS STORAGE CHANNEL 
 DEC      MICRO  1,, 6DI     DECK NAME
          TITLE  6DI - MAIN DRIVER. 
*         REDEFINE CHANNEL INSTRUCTIONS TO PRODUCE CHANNEL TABLE. 
  
          RICHI              REDEFINE CHANNEL INSTRUCTIONS
          SPACE  4
          ORG    MSFW 
          SPACE  4
*         ENTRY POINT TRANSFERS.
  
  
          CON    PRS         PRESET ADDRESS 
  
  
 RDS      CON    0           ENTRY
          UJN    RDS.        READ SECTOR
  
  
 WDS      CON    0           ENTRY
          UJN    WDS. 
 EMS      SPACE  4,10 
**        EMS - END MASS STORAGE PROCESSING.
* 
*         ENTRY  (T4) = CHANNEL, IF PREVIOUSLY RESERVED.
*                (T5) = EQUIPMENT.
* 
*         EXIT   (A) = 0. 
* 
*         NOTE - THE *.EMS* ENTRY POINT IS SUPPORTED ONLY VIA THE 
*         *ENDMS* MACRO DEFINED IN *COMPMAC*.  IF THIS LOCATION 
*         CHANGES, THE DEFINITION OF *.EMS* MUST BE CHANGED IN
*         *PPCOM* AND ALL PROGRAMS USING THE *ENDMS*
*         MACRO MUST BE REASSEMBLED.
  
  
 .EMS     SUBR               ENTRY/EXIT 
          LDN    0
          STD    CM+3 
          STI    D1          SET POSITION REQUIRED
          RJM    DSW         DROP CHANNEL VIA *DSWM*
          UJN    .EMSX       RETURN 
 RDS      SPACE  4
**        RDS - READ SECTOR.
* 
*         ENTRY  (A) = BUFFER ADDRESS FOR SECTOR. 
* 
*         EXIT   (A) .LT. 0 IF UNRECOVERED ERROR AND READ ERROR 
*                PROCESSING SELECTED. 
* 
*         CALLS  DST, FNC, LDA. 
  
  
 RDS.     STM    RDSB        SET BUFFER ADDRESS 
  
*         THE CODE BETWEEN *RDSC* AND *RDSA* IS OVERLAID TO MEASURE 
*         THE SERVO TIMING.  *0SI* MEASURES THE SERVO 
*         TIMING AND OVERLAYS *RDS*.
  
 RDSC     BSS    0
  
*         THE FOLLOWING CODE MUST BE DUPLICATED IN BOTH *RDS* AND 
*         *WDS* BECAUSE OF TIMING CONSTRAINTS FOR THE 885.
  
          SOI    D1 
          MJN    RDS1        IF POSITION REQUIRED 
          ADD    T7 
          LMM    WDSA 
          ZJN    RDS2        IF CONSECUTIVE SECTORS 
 RDS1     RJM    LDA         LOAD ADDRESS AND ISSUE POSITION
 RDS2     LDN    FCRD        NORMAL READ
 RDSA     EQU    *-1
*         LDN    FCRU        READ UTILITY SECTOR
*         LDN    FCRF        READ FACTORY DATA
*         LDN    FCDS        (READING DETAILED STATUS)
*         LDN    FCTD        (PERFORMING SERVO ADJUSTMENT FOR 885)
*         UJN    RDS4        (ISSUING DISABLE RESERVES) 
  
*         ENTERED HERE FROM *7SI* TO ISSUE CONTINUE FUNCTION. 
*         ENTERED HERE TO READ BACK COUPLER BUFFER ON FULL TRACK
*         WRITE BUFFER TO DISK ERROR. 
  
 RDS3     RJM    FNC
          IAM    *,CH 
 RDSB     EQU    *-1
 RDS3.1   NJN    WDS5        IF TRANSFER NOT COMPLETE 
*         LJM    DEI6.0      (IF COUPLER READ BACK) 
 RDSD     EQU    *-1
 RDS4     LDM    RDS
          SFM    LDA8,CH     IF CHANNEL PARITY ERROR (LOWER 800 SERIES) 
          UJN    DST1        CHECK STATUS 
 WDS      SPACE  4
**        WDS - WRITE SECTOR. 
* 
*         ENTRY  (A) = BUFFER ADDRESS FOR SECTOR. 
* 
*         EXIT   (A) = 0 IF NO ERROR. 
*                (A) = -0 IF UNRECOVERED ERROR AND WRITE ERROR
*                PROCESSING SELECTED. 
*                (A) .EQ. -1 IF UNRECOVERED ERROR ON PREVIOUS SECTOR, 
*                NO WRITE ERROR PROCESSING BUFFER SPECIFIED IN *WDSE* 
*                AND WRITE ERROR PROCESSING SELECTED. 
* 
*         CALLS  DST, FNC, LDA. 
  
  
 WDS.     STM    WDSC        SET BUFFER ADDRESS 
          SHN    -14
          STM    WDSB        SET WRITE LAST SECTOR
  
*         THE FOLLOWING CODE MUST BE DUPLICATED IN BOTH *RDS* AND 
*         *WDS* BECAUSE OF TIMING CONSTRAINTS FOR THE 885.
  
          SOI    D1 
          MJN    WDS1        IF POSITION REQUIRED 
          ADD    T7 
          LMC    *
 WDSA     EQU    *-1
          ZJN    WDS2        IF CONSECUTIVE SECTORS 
 WDS1     RJM    LDA         LOAD ADDRESS AND ISSUE POSITION
 WDS2     LDI    D1          CHECK END OF UNIT/TRACK
*         LJM    /0SD/SUE2   (SPINNING DOWN AN ISD DRIVE) 
*         LJM    /0SD/SUE4   (SPINNING UP AN ISD DRIVE) 
          ZJN    WDS3        IF END OF UNIT/TRACK 
          LDC    0
 WDSB     EQU    *-1
 WDS3     LMN    FCWL        WRITE LAST SECTOR
  
*         ENTERED HERE FROM *7SI* TO ISSUE CONTINUE FUNCTION. 
*         ENTERED HERE FROM *0SD* TO ISSUE SPINUP/SPINDOWN FUNCTION.
  
 WDS4     RJM    FNC
          OAM    *,CH 
 WDSC     EQU    *-1
 WDS5     NJN    LDA9        IF INCOMPLETE TRANSFER 
 WDSD     LDM    WDS
*         LDC    /0SD/SUE4   (SPINNING UP/DOWN AN ISD DRIVE)
*         UJN    DST         PROCESS STATUS 
 DST      SPACE  4
**        DST - DEVICE STATUS.
*         WAITS FOR CHANNEL EMPTY, THEN DISCONNECTS.
* 
*         ENTRY  (A) = EXIT ADDRESS.
* 
*         EXIT   (A) = 0 AND EXIT TO EXIT ADDRESS IF NO STATUS ERROR. 
*                      EXIT TO LDA1 IF STATUS ERROR.
  
  
 DST      FJM    *,CH 
          DCN    CH+40
 DST1     STD    CM          SAVE EXIT ADDRESS
  
*         THE *7155* CONTROLLER CANNOT ACCEPT THE GENERAL STATUS
*         FUNCTION FOR 5 MICRO SECONDS AFTER THE DATA TRANSFER
*         IS COMPLETE FOR READS AND 10 MICRO SECONDS FOR WRITE. 
*         IN ORDER TO MAKE USE OF THIS TIMING CONSTRAINT THE EXIT 
*         ADDRESS IS AN ENTRY CONDITION TO *DST*, WHICH IS STORED 
*         IN THE EXIT INSTRUCTION DURING THE CONTROLLER OVERHEAD
*         PERIOD AFTER THE DATA TRANSFER.  THIS ALLOWS THE SHORTEST 
*         DELAY POSSIBLE TO RETURN TO THE CALLER AFTER GENERAL
*         STATUS IS RECEIVED.  GENERAL STATUS IS PERFORMED AS AN
*         IN LINE OPERATION TO MINIMIZE OVERHEAD TIME FOR THE 
*         *7155* CONTROLLER.
  
          LDN    FCGS        GET GENERAL STATUS 
          RJM    FNC         ISSUE FUNCTION 
          IAN    CH+40
          SFM    LDA8,CH     IF CHANNEL PARITY ERROR (800 SERIES) 
 DSTA     NJN    LDA3        IF ERRORS
*         LJM    /0SD/CGS    (SPINNING UP/DOWN AN ISD DRIVE)
 DSTB     LJM    0,CM        RETURN 
*         LJM    /0SC/SCP8   (SWEEP CYCLING)
 LDA      SPACE  4,10 
**        LDA - LOAD ADDRESS. 
* 
*         ENTRY  (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         ENTRY  LDA3 = ENTRY POINT TO PROCESS GENERAL STATUS ERRORS. 
*                LDA2 = ENTRY POINT TO JUMP TO ERROR PROCESSOR. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  DST, DSW, FNC. 
* 
*         MACROS MONITOR. 
  
  
 LDA8     LCN    CHPE        SET CHANNEL PARITY ERROR FLAG
 LDA9     LJM    DSW7        CALL ERROR PROCESSOR 
  
 LDA      CON    0           ENTRY
  
*         REENTER HERE ON ERROR RETRY.
*         COMPUTE PHYSICAL ADDRESS. 
  
 LDA1     LDD    OA          WAIT OUTPUT REGISTER CLEAR 
          CRD    CM 
          LDD    CM 
          NJN    LDA1        IF NOT CLEAR 
          STD    CM+1        INDICATE A STANDARD SEEK 
          LDD    MA 
          CWD    T4 
          MONITOR LDAM       CONVERT LOGICAL TO PHYSICAL ADDRESS
          SOD    CM+4        SET UNIT SWITCH COUNTER
          STI    D1 
          ADD    T7          SET CONSECUTIVE SECTOR COUNT 
          STM    WDSA 
          UJN    LDA4        CHECK FOR SEEK WAIT NEEDED 
  
*         ENTER HERE TO PROCESS GENERAL STATUS ERRORS.
*         *DSW* WILL DETERMINE IF STATUS REQUIRES AN ERROR PROCESSOR
*         CALL OR A SEEK WAIT MONITOR FUNCTION. 
  
 LDA3     STD    CM+3        SAVE STATUS
 LDA4     RJM    DSW         DRIVER SEEK WAIT PROCESSING
          LDD    CM+2 
          ZJN    LDA5        IF CONTROLLER PREVIOUSLY RESERVED
          RJM    FNC
          IAN    CH+40
          SFM    LDA8,CH     IF CHANNEL PARITY ERROR (800 SERIES) 
          LPC    2000 
          NJN    LDA3        IF CONTROLLER RESERVED 
          LDN    11-1        SET CONNECTED STATUS IN CHRV 
          RAM    CHRV 
 LDA5     LDD    MA          READ SEEK PARAMETERS 
*         LJM    RDS2        (GET DETAILED STATUS FOR *0CI*)
 LDAC     EQU    *-1
          ADN    1
          CRD    CM 
 LDAA     LDN    0           SEEK FUNCTION
*         LDN    FCS1        (SEEK 1 TO 1 INTERLACE)
*         LDN    FCS2        (SEEK 2 TO 1 INTERLACE)
*         LDN    FCGR        (ISSUING DISABLE RESERVES) 
          RJM    FNC
 LDAB     LDN    4
*         UJN    LDA7        (ISSUING DISABLE RESERVES) 
          OAM    CM+1,CH     OUTPUT UNIT, CYLINDER, TRACK AND SECTOR
 LDA6     NJN    ERR         IF ERROR 
 LDA7     LDM    LDA
          LJM    DST         CHECK STATUS 
 FNC      SPACE  4,15 
**        FNC - FUNCTION DEVICE.
* 
*         ENTRY  (A)  = FUNCTION CODE.
* 
*         EXIT   (A) = 502, IF NORMAL FUNCTION. 
*                    = *DSLN*, IF READING DETAILED STATUS.
*                    = 2, IF PERFORMING SERVO ADJUSTMENT FOR 885. 
*                    = 1, IF SPINNING UP/DOWN AN ISD DRIVE. 
*                FUNCTION ISSUED. 
*                CHANNEL ACTIVATED. 
* 
*         CALLS  ERR. 
  
  
 FNC4     ACN    CH 
          LDC    502         FULL BUFFER WORD COUNT 
 FNCA     EQU    *-1
*         LDC    DSLN        (READING DETAILED STATUS)
*         LDC    2           (PERFORMING SERVO ADJUSTMENT FOR 885)
*         LDC    1           (SPINNING UP/DOWN AN ISD DRIVE)
  
 FNC      SUBR               ENTRY/EXIT 
 FNC1     AJM    ERR,CH      IF CONTROLLER NOT READY
 FNCC     FAN    CH 
  
*         THE FOLLOWING DELAY MUST ALLOW AT LEAST 15 SECONDS. 
  
          LDD    HN 
          STD    T0 
 FNC2     ADD    ON          ENSURE DELAY IS SATISIFIED 
 FNCB     IJM    FNC4,CH     IF FUNCTION ACCEPTED 
          NJN    FNC2        IF INNER TIMEOUT LOOP NOT YET COMPLETE 
          SOD    T0 
          NJN    FNC2        IF NOT YET TIMED OUT 
  
*         UJN    ERR         PROCESS ERROR
 ERR      SPACE  4,10 
**        ERR - CALL *7BI*. 
  
  
 ERR      MSERR  7BI,*
          LJM    LEP1        CALL ERROR PROCESSOR 
*         LJM    DCI8        (DURING *7CI* PROCESSING)
*         LJM    DEI6.1      (DURING *7EI* PROCESSING)
*         LJM    FTO13       (DURING *7FI* PROCESSING)
*         LJM    FTO16       (DURING *7FI* PROCESSING)
*         LJM    DCP3        (DURING *7GI* PROCESSING)
*         LJM    DCP5        (DURING *7GI* PROCESSING)
*         LJM    EXD4        (DURING *7KI* PROCESSING)
*         LJM    EXD11       (DURING *7KI* PROCESSING)
*         LJM    /0SC/SCP9   (SWEEP CYCLING)
 ERRA     EQU    *-1         EXIT ADDRESS 
 DSW      SPACE  4,30 
**        DSW - DRIVER SEEK WAIT PROCESSING.
* 
*         ENTRY  (CM+3) = SEEK WAIT FUNCTION.  THE FOLLOWING IS A LIST
*                         OF THE POSSIBLE VALUES AND THEIR ORIGIN.
*                         0 = CHANNEL RELEASE REQUEST. *ENDMS REQUEST*
*                         2 = SEEK IN PROGRESS.    *CONTROLLER STATUS*
*                         4 = STORAGE MOVE REQUESTED OR  *LDAM STATUS*
*                             UNIT SWITCH REQUESTED.     *LDAM STATUS*
*                        10 = DRIVE RESERVED.      *CONTROLLER STATUS*
*                        11 = REQUEST CHANNEL AND UNIT.  *LDAM STATUS*
*                      2000 = CONTROLLER RESERVED. *CONTROLLER STATUS*
*                      4XXX = ERROR STATUS.        *CONTROLLER STATUS*
*                      5XXX = ERROR STATUS.        *CONTROLLER STATUS*
*                      77YY = ERROR STATUS.              *LDAM STATUS*
*                             YY = COMPLIMENT OF ERROR CODE.
*                (CHRV) = DRIVER CONTROL WORD.  SEE *COMSMSP*.
* 
*         EXIT   (A) = 0. 
*                (T4) = CHANNEL.
*                (T5) = SYSTEM DEVICE SELECTED WHEN APPROPRIATE.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 DSW4     FNC    FCOC,CH+40  ISSUE RELEASE FUNCTION 
 DSWD     EQU    *-1
*         FNC    FCDR,CH+40  A DRIVE RELEASE FUNCTION IS ISSUED AS
*                            OPPOSED TO THE OPERATION COMPLETE WHEN 
*                            A SEEK OPERATION IS OUTSTANDING ON A 
*                            SHARED DRIVE THROUGH THE SAME CHANNEL. 
*                            THE ISSUING OF THE DRIVE RELEASE PREVENTS
*                            ANOTHER MACHINE FROM ACCESSING, THROUGH
*                            THE SAME CONTROLLER, THE DRIVE THAT HAS
*                            THE SEEK INITIATED.
          LDD    HN 
          STD    T0 
 DSW5     IJM    DSW2,CH     IF FUNCTION ACCEPTED 
          ADD    ON          ENSURE DELAY IS SATISIFIED 
          NJN    DSW5        IF INNER TIMEOUT LOOP NOT YET COMPLETE 
          SOD    T0 
          NJN    DSW5        IF NOT YET TIMED OUT 
          UJN    DSW2        ISSUE DRIVER SEEK WAIT 
  
 DSW      SUBR               ENTRY/EXIT 
          LDM    CHRV        CHECK CHANNEL RESERVATION
          STD    CM 
          LPN    11 
 DSW1     LMD    CM+3 
          ZJN    DSWX        IF NO *DSWM* NEEDED
 DSWB     SCN    77 
*         SCN    75          (SHARED DEVICE - NO RELEASE AFTER SEEK)
          SHN    21-13
          NJN    DSW6        IF NO RELEASE OR ERROR 
          LDD    CM 
          LPN    10 
          NJN    DSW4        IF CONNECTED ISSUE RELEASE 
 DSW2     LDD    MA          WRITE MESSAGE BUFFER PARAMETERS
          CWD    T4 
          MONITOR DSWM       DRIVER SEEK WAIT 
*         LDN    0
 DSW3     RAI    T0          MODIFY CHANNEL INSTRUCTIONS
          LDM    TCHA,CM
          STD    T0 
          AOD    CM 
          LDD    CM+4 
 DSWA     SBN    CH 
          NJN    DSW3        IF MORE CHANNEL INSTRUCTIONS TO MODIFY 
          LDD    MA          SET T4, T5, AND CM 
          CRD    T4 
          LDD    CM+1        SET RELEASE CODE 
          STM    DSWD 
          LDD    CM          SET CHANNEL STATUS 
          STM    CHRV 
          UJN    DSW1        CHECK FOR ERROR
  
 DSW6     PJN    DSW2        IF NO ERROR
          LDD    CM+3        SET ERROR CODE 
 DSW7     STI    D1 
          LJM    ERR         PROCESS ERROR
 TCHS     SPACE  4,10 
**        TCHA - TABLE OF CHANNEL INSTRUCTION ADDRESSES.
  
  
          CHTL   DSWA        TERMINATE CHANNEL TABLE
 TCHA     CHTB
          RSTC               RESTORE CHANNEL INSTRUCTIONS 
  
 PRS      SPACE  4,10 
**        PRS - PRESET. 
* 
*         ENTRY  (CM - CM+4) = *EQDE* WORD OF EST ENTRY.
* 
*         EXIT   SEEK FUNCTION SELECTED.
*                SELECTION MADE FOR DRIVE RELEASE AFTER SEEK. 
  
  
 PRS      LDM    STSB        SET SEEK FUNCTION
          ADK    LDNI+FCS1-2000 
          STM    LDAA 
          LDI    D1 
          STM    DSWB 
          LDN    0           INITIALIZE UNIT SWITCH COUNTER 
          STI    D1 
          LJM    SMSX        RETURN 
          SPACE  4
 .1       SET    *+4-MSFW    CHECK FOR OVERFLOW 
 .1       SET    .1/5 
 .1       SET    MSFW+.1*5
 .2       SET    PPFW-5-*    BYTES AVAILABLE BEFORE OVERFLOW
          ERRNG  PPFW-5-.1   DRIVER OVERFLOWS INTO *PPFW*-5 
          TITLE  6DJ - ISD DISK DRIVER. 
          IDENT  6DJ,MSFW    ISD DISK DRIVER. 
*COMMENT  6DI - ISD DISK DRIVER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       6DJ - ISD DISK DRIVER.
* 
*         K. F. REHM.        85/03/11.
          SPACE  4,15 
***              *6DJ* ALLOWS ACCESS TO ISD (834 AND 836) DRIVES ONLY.
*         IT PROVIDES IMPROVED DISK PERFORMANCE OVER *6DI* BY MAKING
*         SEVERAL CHANGES TO THE DATA TRANSFER PROTOCOL.  *6DJ* CAUSES
*         *CPUMTR* TO PASS THE DIRECTION OF THE DISK TRANSFER (READ OR
*         WRITE) IN PREVIOUSLY UNUSED BITS IN THE SEEK PARAMETER WORDS. 
*         THIS ALLOWS THE ADAPTER TO REDUCE SOME OF THE OVERHEAD IN ITS 
*         COMMUNICATIONS WITH THE CONTROL MODULE AND ALLOWS THE PP TO 
*         GIVE UP THE CHANNEL UNTIL DATA IS AVAILABLE IN THE CONTROL
*         MODULE-S BUFFER, EFFECTIVELY OVERLAPPING DISK LATENCY TIME. 
*         *6DJ* ALSO GIVES UP THE CHANNEL AFTER A *WLSF* IF THE LAST
*         SECTOR WRITTEN HAS NOT YET ARRIVED ON DISK.  THIS ALLOWS
*         OTHER PP-S TO USE THE CHANNEL WHILE THE CONTROL MODULE
*         FINISHES WRITING THE SECTOR.  FOR NON-PERFORMANCE CRITICAL
*         DATA TRANSFERS SUCH AS READING THE PACK SERIAL NUMBER, THE
*         REGULAR *6DI* DRIVER IS USED INSTEAD. 
* 
*                *6DJ* USES ALL THE SAME MASS STORAGE OVERLAYS AS 
*         *6DI*.  SINCE THE OVERLAYS OFTEN READ FROM OR MODIFY THE
*         RESIDENT DRIVER, MANY OF THE SUBROUTINE TAGS IN *6DJ* MUST
*         BE DEFINED AT THE SAME ADDRESS AS THOSE IN *6DI*.  THOSE
*         TAGS IN *6DJ* WHICH DO NOT NEED TO BE IN LINE WITH THEIR
*         *6DI* COUNTERPARTS HAVE A *.J* APPENDED TO THEM TO PREVENT
*         ASSEMBLY ERRORS.
          SPACE  4,10 
**        ENTRY CONDITIONS. 
* 
*         (T4) = CHANNEL IF PREVIOUSLY RESERVED.
*         (T5) = EST ORDINAL. 
*         (T6) = TRACK. 
*         (T7) = SECTOR.
          SPACE  4,10 
*         REDEFINE CHANNEL INSTRUCTIONS TO PRODUCE CHANNEL TABLE. 
  
          RICHI              REDEFINE CHANNEL INSTRUCTIONS
          SPACE  4
          ORG    MSFW 
          SPACE  4
*         ENTRY POINT TRANSFERS.
  
  
          CON    PRS         PRESET *6DJ* 
  
  
 RDS      CON    0           ENTRY
          UJN    RDS.        READ SECTOR
  
  
 WDS      CON    0           ENTRY
          UJN    WDS.        WRITE SECTOR 
 EMS      SPACE  4,10 
**        EMS - END MASS STORAGE PROCESSING.
* 
*         ENTRY  (T4) = CHANNEL, IF PREVIOUSLY RESERVED.
*                (T5) = EQUIPMENT.
* 
*         EXIT   (A) = 0. 
* 
*         NOTE - THE *.EMS* ENTRY POINT IS SUPPORTED ONLY VIA THE 
*         *ENDMS* MACRO DEFINED IN *COMPMAC*.  IF THIS LOCATION 
*         CHANGES, THE DEFINITION OF *.EMS* MUST BE CHANGED IN
*         *PPCOM* AND ALL PROGRAMS USING THE *ENDMS*
*         MACRO MUST BE REASSEMBLED.
  
  
 .EMS     SUBR               ENTRY/EXIT 
          LDN    0
          STD    CM+3 
          STI    D1          SET POSITION REQUIRED
          RJM    DSW         DROP CHANNEL VIA *DSWM*
          UJN    .EMSX       RETURN 
 RDS      SPACE  4,10 
**        RDS - READ SECTOR.
* 
*         ENTRY  (A) = BUFFER ADDRESS FOR SECTOR. 
* 
*         EXIT   (A) .LT. 0 IF UNRECOVERED ERROR AND READ ERROR 
*                PROCESSING SELECTED. 
* 
*         CALLS  DST, FNC, LDA. 
  
  
 RDS.     STM    RDSB        SET BUFFER ADDRESS 
          SOI    D1 
          MJN    RDS1        IF POSITION REQUIRED 
          ADD    T7 
          LMM    WDSA 
          ZJN    RDS2        IF CONSECUTIVE SECTORS 
 RDS1     RJM    LDA         LOAD ADDRESS AND ISSUE POSITION
 RDS2     LDN    FCRD        NORMAL READ
          ERRNZ  RDS2-.RDS2  ENSURE ADDRESS IS CORRECT FOR *LDAM* CHECK 
  
*         ENTERED HERE FROM *7SI* TO ISSUE CONTINUE FUNCTION. 
*         ENTERED HERE TO READ BACK COUPLER BUFFER ON FULL TRACK
*         WRITE BUFFER TO DISK ERROR. 
  
 RDS3     RJM    FNC
          IAM    *,CH 
 RDSB     EQU    *-1
          NJN    WDS5        IF TRANSFER NOT COMPLETE 
          SFM    LDA8,CH     IF CHANNEL PARITY ERROR (LOWER 800 SERIES) 
          LDM    RDS
          UJN    DST1        CHECK STATUS 
 WDS      SPACE  4,10 
**        WDS - WRITE SECTOR. 
* 
*         ENTRY  (A) = BUFFER ADDRESS FOR SECTOR. 
* 
*         EXIT   (A) = 0 IF NO ERROR. 
*                (A) = -0 IF UNRECOVERED ERROR AND WRITE ERROR
*                PROCESSING SELECTED. 
*                (A) .EQ. -1 IF UNRECOVERED ERROR ON PREVIOUS SECTOR, 
*                NO WRITE ERROR PROCESSING BUFFER SPECIFIED IN *WDSE* 
*                AND WRITE ERROR PROCESSING SELECTED. 
* 
*         CALLS  DST, FNC, LDA. 
  
  
 WDS.     STM    WDSC        SET BUFFER ADDRESS 
          SHN    -14
          STM    WDSB        SET WRITE LAST SECTOR
          SOI    D1 
          MJN    WDS1        IF POSITION REQUIRED 
          ADD    T7 
          LMC    *
 WDSA     EQU    *-1
          ZJN    WDS2        IF CONSECUTIVE SECTORS 
 WDS1     RJM    LDA         LOAD ADDRESS AND ISSUE POSITION
 WDS2     LDI    D1          CHECK END OF UNIT/TRACK
          ZJN    WDS3        IF END OF UNIT/TRACK 
          LDC    0
 WDSB     EQU    *-1
 WDS3     LMN    FCWL        WRITE LAST SECTOR
  
*         ENTERED HERE FROM *7SI* TO ISSUE CONTINUE FUNCTION. 
  
 WDS4     RJM    FNC
          OAM    *,CH 
 WDSC     EQU    *-1
 WDS5     NJN    LDA9        IF INCOMPLETE TRANSFER 
          LDM    WDS
*         UJN    DST         PROCESS STATUS 
 DST      SPACE  4,10 
**        DST - DEVICE STATUS.
*         WAITS FOR CHANNEL EMPTY, THEN DISCONNECTS.
* 
*         ENTRY  (A) = EXIT ADDRESS.
* 
*         EXIT   (A) = 0 AND EXIT TO EXIT ADDRESS IF NO STATUS ERROR. 
*                      EXIT TO LDA1 IF STATUS ERROR.
  
  
 DST      FJM    *,CH        IF LAST WORD NOT YET TAKEN 
          DCN    CH+40
 DST1     STD    CM          SAVE EXIT ADDRESS
          ERRNZ  DST1-.DST1  ENSURE ADDRESS IS CORRECT FOR *1MS* JUMP 
          LDN    FCGS        GET GENERAL STATUS 
          RJM    FNC         ISSUE FUNCTION 
          IAN    CH+40
          SFM    LDA8,CH     IF CHANNEL PARITY ERROR (800 SERIES) 
          NJN    LDA3.J      IF ERRORS
          LJM    0,CM        RETURN 
 LDA      SPACE  4,10 
**        LDA - LOAD ADDRESS. 
* 
*         ENTRY  (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         ENTRY  LDA3 = ENTRY POINT TO PROCESS GENERAL STATUS ERRORS. 
*                LDA2 = ENTRY POINT TO JUMP TO ERROR PROCESSOR. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  DST, DSW, FNC. 
* 
*         MACROS MONITOR. 
  
  
 LDA8     LCN    CHPE        SET CHANNEL PARITY ERROR FLAG
 LDA9     LJM    DSW7A       CALL ERROR PROCESSOR 
  
 LDA      CON    0           ENTRY
  
*         REENTER HERE ON ERROR RETRY.
*         COMPUTE PHYSICAL ADDRESS. 
  
 LDA1     LDD    OA          WAIT OUTPUT REGISTER CLEAR 
          CRD    CM 
          LDD    CM 
          NJN    LDA1        IF NOT CLEAR 
          LDD    MA 
          CWD    T4 
          LDM    LDA         PASS READ/WRITE FLAG TO *CPUMTR* 
          STD    CM+1 
          MONITOR LDAM       CONVERT LOGICAL TO PHYSICAL ADDRESS
          SOD    CM+4        SET UNIT SWITCH COUNTER
          STI    D1 
          ADD    T7          SET CONSECUTIVE SECTOR COUNT 
          STM    WDSA 
          UJN    LDA4.J      CHECK FOR SEEK WAIT NEEDED 
  
*         ENTER HERE TO PROCESS GENERAL STATUS ERRORS.
*         *DSW* WILL DETERMINE IF STATUS REQUIRES AN ERROR PROCESSOR
*         CALL OR A SEEK WAIT MONITOR FUNCTION. 
  
 LDA3.J   STD    CM+3        SAVE STATUS
 LDA4.J   RJM    DSW         DRIVER SEEK WAIT PROCESSING
  
*         IF (CM+2) = 1, THEN *DSW* WAS ENTERED BECAUSE A *0020*
*         GENERAL STATUS INDICATED THAT THE SECTOR JUST WRITTEN HAD NOT 
*         YET ARRIVED ON DISK.  IN ORDER TO ALLOW OTHER PP-S TO USE THE 
*         CHANNEL DURING THIS DELAY, *6DJ* GIVES UP THE CHANNEL, THEN 
*         PERIODICALLY RE-REQUESTS IT TO SEE IF THE SECTOR HAS BEEN 
*         WRITTEN, GIVING THE CHANNEL UP AGAIN IF THE SECTOR IS STILL 
*         NOT ON DISK.  A GENERAL STATUS OF ZERO INDICATES THAT THE 
*         SECTOR HAS ARRIVED ON DISK;  BY PATCHING THE DRIVER EXIT
*         ADDRESS INTO *LDA*, THE ZERO GENERAL STATUS WILL CAUSE *6DJ*
*         TO CORRECTLY RETURN TO ITS CALLER.
  
          LDD    CM+2 
          ZJN    LDA5        IF CONTROLLER PREVIOUSLY RESERVED
          SBN    1
          NJN    LDA4.1      IF NOT BACK FROM A DSWM SUBFUNCTION 20 
          LDM    WDS
          STM    LDA
 LDA4.1   LDN    11-1        SET CONNECTED STATUS IN CHRV 
          RAM    CHRV 
 LDA5     LDD    MA          READ SEEK PARAMETERS 
          ADN    1
          CRD    CM 
          LDN    FCS1        (SEEK ONE TO ONE INTERLACE)
          RJM    FNC
          LDN    4
          OAM    CM+1,CH     OUTPUT UNIT, CYLINDER, TRACK AND SECTOR
          NJN    ERR         IF ERROR 
          LDM    LDA
          LJM    DST         CHECK STATUS 
 FNC      SPACE  4,10 
**        FNC - FUNCTION DEVICE.
* 
*         ENTRY  (A)  = FUNCTION CODE.
* 
*         EXIT   (A) = 502. 
*                FUNCTION ISSUED. 
*                CHANNEL ACTIVATED. 
* 
*         CALLS  ERR. 
  
  
 FNC4     ACN    CH 
          LDC    502         FULL BUFFER WORD COUNT 
  
 FNC      SUBR               ENTRY/EXIT 
          AJM    ERR,CH      IF CONTROLLER NOT READY
          FAN    CH 
  
*         NOTE - THE FOLLOWING DELAY MUST BE AT LEAST 300 MS. 
  
 FNC2A    ADD    ON          ENSURE 300 MS DELAY IS SATISFIED 
          IJM    FNC4,CH     IF FUNCTION ACCEPTED 
          NJN    FNC2A       IF NOT YET TIMED OUT 
          UJN    ERR         PROCESS ERROR
          SPACE  4,10 
*         NOTE - THE FOLLOWING CODE IS PLACED HERE TO ALLOW *6DJ* 
*         ADDRESSES TO REMAIN IN SYNCH WITH *6DI* 
  
 DSW6A    PJN    DSW5.1      IF NO ERROR
          LDD    CM+3        SET ERROR CODE 
 DSW7A    STI    D1 
*         UJN    ERR         PROCESS ERROR
 ERR      SPACE  4,10 
**        ERR - CALL *7BI*. 
  
  
 ERR      MSERR  7BI,*
          LJM    LEP1        CALL ERROR PROCESSOR 
*         LJM    DCI8        (DURING *7CI* PROCESSING)
*         LJM    DEI6.1      (DURING *7EI* PROCESSING)
*         LJM    FTO13       (DURING *7FI* PROCESSING)
*         LJM    FTO16       (DURING *7FI* PROCESSING)
*         LJM    DCP3        (DURING *7GI* PROCESSING)
*         LJM    DCP5        (DURING *7GI* PROCESSING)
 ERRA     EQU    *-1         EXIT ADDRESS 
 DSW      SPACE  4,30 
**        DSW - DRIVER SEEK WAIT PROCESSING.
* 
*         ENTRY  (CM+3) = SEEK WAIT FUNCTION.  THE FOLLOWING IS A LIST
*                         OF THE POSSIBLE VALUES AND THEIR ORIGIN.
*                         0 = CHANNEL RELEASE REQUEST. *ENDMS REQUEST*
*                         2 = SEEK IN PROGRESS.    *CONTROLLER STATUS*
*                         4 = STORAGE MOVE REQUESTED OR  *LDAM STATUS*
*                             UNIT SWITCH REQUESTED.     *LDAM STATUS*
*                        10 = DRIVE RESERVED.      *CONTROLLER STATUS*
*                        11 = REQUEST CHANNEL AND UNIT.  *LDAM STATUS*
*                        20 = WRITE IN PROGRESS.   *CONTROLLER STATUS*
*                      4XXX = ERROR STATUS.        *CONTROLLER STATUS*
*                      5XXX = ERROR STATUS.        *CONTROLLER STATUS*
*                      77YY = ERROR STATUS.              *LDAM STATUS*
*                             YY = COMPLIMENT OF ERROR CODE.
*                (CHRV) = DRIVER CONTROL WORD.  SEE *COMSMSP*.
* 
*         EXIT   (A) = 0. 
*                (T4) = CHANNEL.
*                (T5) = SYSTEM DEVICE SELECTED WHEN APPROPRIATE.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 DSW4     FNC    FCOC,CH+40  ISSUE RELEASE FUNCTION 
 DSWD     EQU    *-1
*         FNC    FCDR,CH+40  A DRIVE RELEASE FUNCTION IS ISSUED AS
*                            OPPOSED TO THE OPERATION COMPLETE WHEN 
*                            A SEEK OPERATION IS OUTSTANDING ON A 
*                            SHARED DRIVE THROUGH THE SAME CHANNEL. 
*                            THE ISSUING OF THE DRIVE RELEASE PREVENTS
*                            ANOTHER MACHINE FROM ACCESSING, THROUGH
*                            THE SAME CONTROLLER, THE DRIVE THAT HAS
*                            THE SEEK INITIATED.
          LDN    1
          STD    T0 
 DSW5     IJM    DSW2,CH     IF FUNCTION ACCEPTED 
          ADN    1           ENSURE DELAY IS SATISIFIED 
          NJN    DSW5        IF INNER TIMEOUT LOOP NOT YET COMPLETE 
          SOD    T0 
          NJN    DSW5        IF NOT YET TIMED OUT 
 DSW5.1   UJN    DSW2        ISSUE DRIVER SEEK WAIT 
  
 DSW      SUBR               ENTRY/EXIT 
          LDM    CHRV        CHECK CHANNEL RESERVATION
          STD    CM 
          LPN    11 
 DSW1     LMD    CM+3 
          ZJN    DSWX        IF NO *DSWM* NEEDED
          SCN    55 
          SHN    21-13
          NJN    DSW6A       IF NO RELEASE OR ERROR 
          LDD    CM 
          LPN    10 
          NJN    DSW4        IF CONNECTED ISSUE RELEASE 
 DSW2     LDD    OA          CHECK IF *DRCM*/*EXCM* COMPLETED 
          CRM    DSWC,ON
          LDM    DSWC 
          NJN    DSW2        IF FUNCTION NOT YET PROCESSED
          LDD    MA          STORE PARAMETERS 
          CWD    T4 
          MONITOR DSWM       DRIVER SEEK WAIT 
*         LDN    0
 DSW3.J   RAI    T0          MODIFY CHANNEL INSTRUCTIONS
          LDM    TCHA.J,CM
          STD    T0 
          AOD    CM 
          LDD    CM+4 
 DSWA.J   SBN    CH 
          NJN    DSW3.J      IF MORE CHANNEL INSTRUCTIONS TO MODIFY 
          LDD    MA          SET T4, T5, AND CM 
          CRD    T4 
          LDD    CM+1        SET RELEASE CODE 
          STM    DSWD 
          LDD    CM          SET CHANNEL STATUS 
          STM    CHRV 
          LJM    DSW1        CHECK FOR ERROR
 TCHS     SPACE  4,10 
**        TCHA.J - TABLE OF CHANNEL INSTRUCTION ADDRESSES 
  
  
          CHTL   DSWA.J      TERMINATE CHANNEL TABLE
 TCHA.J   CHTB
          RSTC               RESTORE CHANNEL INSTRUCTIONS 
  
          ERRNG  PRS-*       DRIVER OVERFLOWED INTO SCRATCH AREA
 PRS      SPACE  4,10 
**        PRS - PRESET *6DJ*. 
  
  
 PRS      BSS    0           ENTRY
          LDN    0           FORCE *LDA* CALL ON FIRST OPERATION
          STI    D1 
          LJM    SMSX        EXIT VIA *.SMS*
  
 DSWC     BSS    0           *DRCM*/*ECXM* CHECK SCRATCH AREA 
          SPACE  4
 .1       SET    *+5+4-MSFW  CHECK FOR OVERFLOW 
 .1       SET    .1/5 
 .1       SET    MSFW+.1*5
 .2       SET    PPFW-5-*-5  BYTES AVAILABLE BEFORE OVERFLOW
          ERRNG  PPFW-5-.1   DRIVER OVERFLOWS INTO *PPFW*-5 
 7BI      MSOVL  7651,T2,EPFW-1,("HN" INITIAL ERROR PROCESSOR.) 
 7CI      SPACE  4,10 
***       INITIALIZE ERROR PROCESSOR. 
*         K. F. REHM.        84/02/01.
 7CI      SPACE  4,10 
***              *7BI* IS CALLED BY *6DI*/*6DJ* WHEN AN ERROR HAS BEEN
*         DETECTED.  *7BI* OVERLAYS *6DI*/*6DJ* PRESET WITH RECOVERY
*         CODE INITIALIZES MEMORY LOCATIONS USED BY OTHER OVERLAYS. 
          SPACE  4,10 
**        DBI - INITIALIZE ERROR PROCESSING.
* 
*         ENTRY  (T1) = LENGTH OF *PRS* OVERLAY CODE. 
*                (T2) = RDCT. 
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (RDCT) = ERROR PROCESSOR INTERFACE WORD. 
*                         BIT 6 = 0 IF FIRST RETRY ATTEMPT. 
*                (DRSW) = *LDAM*/*DSWM*/CHANNEL PARITY ERROR CODE 
*                         COMPLIMENT. 
* 
*         EXIT   TO *7CI*.
*                (T4 - T7) = UNCHANGED. 
*                (DEAI) = ALGORITHM INDEX.
*         EXIT   (DEDT) = ERROR PROCESSING CONTROL WORD.
*                         BITS AFFECTED BY THIS OVERLAY - 
*                         BITS 3 - 0 = *6DI*/*6DJ* DRIVER TYPE. 
*                (DEGS) = 0.
*                (DENR) = 0 IF FIRST RETRY ATTEMPT, ELSE UNCHANGED. 
*                (DERC) = 0 IF FIRST RETRY ATTEMPT, ELSE UNCHANGED. 
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (DEST) = 0.
*                (DEWR) = 0 IF FIRST RETRY ATTEMPT, ELSE UNCHANGED. 
*                (DEXA) = *LDA1*, *7EP* EXIT ADDRESS. 
*                (MSFW) = INITIAL CHANNEL.
*                (RDCT) = ERROR PROCESSOR INTERFACE WORD. 
*                         BITS AFFECTED BY THIS OVERLAY - 
*                         BIT 4 = 1.
*                (WDSB) = *WLSF* FUNCTION.
*                (MB, BYTES 0-3) = T4 - T7, SAVED FOR *7FI*.
*                (MB, BYTE 4) = ADDRESS OF LAST *FNC* CALL FOR *7FI*. 
*                (MB+1) = PHYSICAL DISK ADDRESS FROM *LDAM*.
* 
*         USES   T1, CM - CM+4. 
* 
*         MACROS MONITOR, MSERR.
          SPACE  4,10 
*         *7BI* MOVES THE FOLLOWING CODE TO THE *6DI* PRESET AREA.
  
  
          QUAL
 DBIA     BSS    0           ERROR PROCESSOR CALLS
          LOC    PRS
  
**        ERR2 - CALL STATUS PROCESSOR. 
  
 ERR2     MSERR  7SI,*
          UJN    WEP1        EXECUTE *7SI*
  
**        WEP - WRITE ERROR PROCESSOR.
  
 WEP      STD    T2 
          MSERR  7WI,*
 WEP1     LJM    LEP1        EXECUTE OVERLAY
  
*         THE FOLLOWING CHECK VERIFIES THAT LINKAGE BYTES ARE NOT 
*         DESTROYED DURING ERROR RECOVERY OF THE FIRST SECTOR OF A
*         PP PROGRAM LOAD.  IT ALSO VERIFIES THAT THE USE OF LONG 
*         TERM ERROR PROCESSOR DATA CELLS DOES NOT DESTROY THE ERROR
*         PROCESSOR CALL CODE.
  
          ERRNG  DEFW+1-*    OVERFLOW 
          LOC    *O 
 DBIAL    EQU    *-DBIA 
          QUAL   *
          SPACE  4,10 
 DBI      ENTRY              *7BI* ENTRY
  
 DBI1     LDM    DBIA-1,T1   MOVE CODE TO PRESET AREA 
          STM    PRS-1,T1 
          SOD    T1 
          NJN    DBI1        IF MORE TO MOVE
          STM    DEST        INITIALIZE ERROR PROCESSING CONTROL WORD 
          STM    DEGS        INITIALIZE GENERAL STATUS
          STM    DEDT        SET DRIVER TYPE
          ERRNZ  /COMSDFS/D6DI  CODE REQUIRES *D6DI* = 0
          ERRNZ  /COMSDFS/D6DJ  CODE REQUIRES *D6DJ* = 0
          LCN    0
          STM    DELF        PRESET LAST FUNCTION 
          SFA    EST,T5 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        GET ALGORITHM INDEX FROM MST 
          SHN    3
          ADK    DILL 
          CRD    CM 
          LDD    CM+4 
          LPN    77 
          STM    DEAI 
          LDM    FNC         PRESERVE ADDRESS OF LAST *FNC* CALL
          STD    CM 
          LDD    MA          SAVE (T4 - CM) IN CASE *7FI* IS CALLED 
          CWD    T4 
          LDN    0
          STD    CM+1 
          MONITOR LDAM       SAVE PHYSICAL DISK ADDRESS 
          LDC    RDS2        SET READ/WRITE FLAG
          SBM    LDA
          SHN    -21
          ERRNZ  WRIP-1      CODE DEPENDS ON VALUE OF *WRIP*
          ERRNZ  REDP        CODE DEPENDS ON VALUE OF *REDP*
          STM    DERW 
          LDI    T2 
          LPC    100
          NJN    DBI2        IF NOT FIRST RETRY ATTEMPT 
          STM    DERC        INITIALIZE RETRY COUNT 
          STM    DEWR        INITIALIZE *DATA WRITTEN/READ* FLAG
          STM    DENR        INITIALIZE *NON-RECOVERABLE ERROR* FLAG
          LDD    HN 
          STI    T2 
          LDD    T4          SAVE INITIAL CHANNEL 
          STM    MSFW 
          LDI    D1 
          LMC    7777&LNRE
          ZJN    DBI2        IF SUSPECT SET BY PREVIOUS PP
          LDM    CHRV 
          SCN    EPNS 
          LMN    EPNS        PERMIT ACCESS TO SUSPECT DEVICE
          STM    CHRV 
 DBI2     LDC    LDA1        SET ERROR PROCESSOR EXIT ADDRESS 
          STM    DEXA 
          MSERR  7CI         EXECUTE *7CI*
          SPACE  4,10 
          ERRNG  10000-*     *7BI* OVERFLOW 
          BSS    10000-*     (SPARES) 
          CON    DBI-1       (T0) = ENTRY ADDRESS - 1 
          CON    DBIAL       (T1) = LENGTH OF ERROR PROCESSOR CALL CODE 
          CON    RDCT        (T2) = RDCT
          ERRNZ  LN-*        INCORRECT *7BI* OVERLAY LENGTH 
          QUAL   *
 7CI      MSOVL  7637,T2,DEXA,(OBTAIN GENERAL AND DETAILED STATUS.) 
          SPACE  4,10 
***       OBTAIN GENERAL AND DETAILED STATUS. 
*         R. J. MAAS.        80/12/12.
*         C. R. LUND.        81/07/30.
          SPACE  4,10 
*                *7CI* IS CALLED BY *7BI*.  IF THE ERROR IS A 
*         CONTROLLER REPORTED ERROR, *7CI* WILL OBTAIN GENERAL AND
*         DETAILED STATUS FROM THE CONTROLLER.  IF THE ERROR IS A 
*         *DSWM*, *LDAM* OR CHANNEL PARITY ERROR, STATUS WILL NOT BE
*         TAKEN.  INSTEAD, *7EI* WILL BE CALLED IMMEDIATELY.  *7FI* 
*         WILL BE CALLED IF EITHER STATUS FUNCTION TIMES OUT OR AN
*         INCOMPLETE DATA TRANSFER OCCURS ON EITHER STATUS INPUT. 
 7DI      SPACE  4,10 
*         REDEFINE CHANNEL INSTRUCTIONS TO PRODUCE LINKED LIST. 
  
 FWDL$    EQU    1           SELECT FORWARD LINKED CHANNEL INSTRUCTIONS 
          RICHL 
 LEO      SPACE  4,10 
**        DCI - OBTAIN GENERAL AND DETAILED STATUS. 
* 
*         ENTRY  (T1) = DETAILED STATUS SIZE. 
*                (T2) = FIRST CHANNEL INSTRUCTION ADDRESS.
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (D1) = DRSW. 
*                (DRSW) = *LDAM*/*DSWM*/CHANNEL PARITY ERROR CODE 
*                         COMPLIMENT. 
*                (MB, BYTES 0-3) = T4 - T7, SAVED FOR *7FI*.
*                (MB, BYTE 4) = ADDRESS OF LAST *FNC* CALL FOR *7FI*. 
*                (MB+1) = PHYSICAL DISK ADDRESS FROM *LDAM*.
* 
*         EXIT   TO *7EI* IF NOT A CONTROLLER REPORTED ERROR OR A 
*                CHANNEL PARITY ERROR OCCURS WHEN ATTEMPTING TO INPUT 
*                STATUS.
*                TO *7FI* IF FUNCTION TIMEOUT OR INCOMPLETE DATA
*                TRANSFER ON STATUS INPUT.
*                TO *7DI* OTHERWISE.
*                (T2) = *7EI* PROCESSING INDEX IF *7EI* IS CALLED.
*                (T4 - T7) = UNCHANGED. 
*                (DEEC) = ERROR CODE (MEANINGFUL ONLY IF CALLING *7EI*
*                         OR *7FI*).
*                       = *CSTE* IF FUNCTION TIMEOUT OR INCOMPLETE DATA 
*                         TRANSFER. 
*                       = *CHPE* IF CHANNEL PARITY ERROR ON STATUS
*                         INPUT OR CHANNEL PARITY ERROR ON INPUT IN 
*                         DRIVER. 
*                       = ERROR CODE REPORTED BY *DSWM* OR *LDAM*.
*                (DEGS) = GENERAL STATUS. 
*                (DELF) = FUNCTION (COULD BE DATA) RETRIEVED FROM 
*                         CHANNEL.
*                (DERC) = *CHPE* RETRY LIMIT - 1 IF CHANNEL PARITY
*                         ERROR ON STATUS INPUT IN THIS OVERLAY,
*                         OTHERWISE UNCHANGED.
*                (MB, BYTES 0-3) = UNCHANGED. 
*                (MB, BYTE 4) = UNCHANGED.
*                (MB+1) = UNCHANGED.
*                (MB+2 - MB+5) = DETAILED STATUS IF CALLING *7DI*.
* 
*         USES   CM, T1, T2.
* 
*         CALLS  FNC. 
* 
*         MACROS MSERR. 
  
  
 DCI      ENTRY              *7CI* ENTRY
  
          LDC    DCI8        SET FUNCTION TIMEOUT ERROR ADDRESS 
          STM    ERRA 
  
*         INITIALIZE TO ZEROS THE AREA WHERE DETAILED STATUS WILL BE
*         READ IN.
  
          ERRNG  *-OFFW-DSLN DETAILED STATUS DESTROYS CODE
 DCI1     LDN    0
          STM    OFFW-1,T1
          SOD    T1 
          NJN    DCI1        IF MORE BYTES TO CLEAR 
  
*         MODIFY CHANNEL INSTRUCTIONS.
  
*         LDN    0
 DCI2     RAD    T2 
          LDI    T2          SAVE LINK TO NEXT CHANNEL INSTRUCTION
          LPN    37 
          STD    CM 
          LDD    T4          MODIFY A CHANNEL INSTRUCTION 
          SBD    CM 
          RAI    T2 
          LDD    CM 
          NJN    DCI2        IF MORE INSTRUCTIONS TO MODIFY 
  
*         IF THE ERROR WAS REPORTED BY THE CONTROLLER, PROCEED TO 
*         TAKE GENERAL AND DETAILED STATUS.  IN ALL OTHER CASES GO
*         DIRECTLY TO *7EI*.
  
          LDI    D1 
          SBK    7700 
          MJN    DCI5        IF CONTROLLER REPORTED ERROR 
          LMN    77 
          UJN    DCI4        EXECUTE *7EI*
  
*         PROCESS A CHANNEL PARITY ERROR (800 SERIES MACHINES)
*         THAT OCCURS ON INPUT OF GENERAL OR DETAILED STATUS
*         IN *7CI*.  *CHRT* RETRIES WILL BE PERFORMED BEFORE
*         THE ERROR IS CONSIDERED UNRECOVERED.
  
 DCI3     AOD    T1 
          SBN    CHRT 
          MJN    DCI6        IF NOT UNRECOVERED YET 
          LDK    CHRT-1      FORCE UNRECOVERED ERROR
          STM    DERC 
          LDN    CHPE        SET CHANNEL PARITY ERROR FLAG
 DCI4     LJM    DCI9        CALL *7EI* 
  
*         RETRIEVE ANY FUNCTION OR DATA LEFT ON THE CHANNEL AND THEN
*         TAKE BOTH GENERAL AND DETAILED STATUS.  IF A FUNCTION TIMES 
*         OUT OR IF ALL OF GENERAL OR DETAILED STATUS IS NOT RECEIVED,
*         CALL *7FI* TO DETERMINE THE CAUSE OF THE PROBLEM. 
  
 DCI5     IJM    DCI7,CH     IF NOT FUNCTION TIMEOUT
          EJM    DCI6,CH     IF NO FUNCTION ON CHANNEL
          IAN    CH+40       INPUT FUNCTION 
          STM    DELF 
 DCI6     DCN    CH+40
 DCI7     LDN    FCGS        GET GENERAL STATUS 
          RJM    FNC
          LDN    1
          IAM    DEGS,CH
          SFM    DCI3,CH     IF CHANNEL PARITY ERROR (800 SERIES) 
          NJN    DCI8        IF INCOMPLETE DATA TRANSFER
          STD    T1          RESET CHANNEL PARITY ERROR RETRY COUNT 
          LDM    DEGS 
          LMC    5017 
          ZJN    DCI8        IF CONTROL MODULE MEMORY ERROR 
          SHN    0-12 
          LPN    1
          LMN    1
          ERRNZ  EI0         CODE ASSUMES *EI0* = 0 
          ZJN    DCI11       IF OPPOSITE ACCESS RESERVED
          LDN    FCDS        GET DETAILED STATUS
          RJM    FNC
          LDN    DSLN 
          IAM    OFFW,CH
          ERRNG  *-OFFW-DSLN DATA READ IN DESTROYS CODE 
          SFM    DCI3,CH     IF CHANNEL PARITY ERROR (800 SERIES) 
          NJN    DCI8        IF INCOMPLETE DATA TRANSFER
          LDN    3R7DQ&3R7DI
          STM    DCIA 
          MSERR  7DI,=
          UJN    DCI12       EXECUTE *7DI*
  
 DCI8     LDD    HN 
          ERRNZ  3R7FI-3R7EI-100  CODE ASSUMES RELATIVE VALUES
          RAM    DCIA 
          LDN    CSTE        SET CONTROLLER STOP ERROR CODE 
 DCI9     STM    DEEC 
          LDN    EI3         SET *7EI* PROCESSOR INDEX
 DCI11    STD    T2 
 DCI12    LDN    DSLN/5 
          STD    T1 
          LDD    MA 
          ADN    2
          CWM    OFFW,T1
          ERRNZ  DSLN/5-4    ADJUST IF VALUE OF *DSLN* CHANGES
          MSERR  7EI,*
          MSERR  7FI,=       (FUNCTION TIMEOUT/DATA TRANSFER ERROR) 
 DCIA     EQU    *-1
          LJM    LEP1        EXECUTE *7DI*/*7EI*/*7FI*
          SPACE  4
          HERE               TERMINATE LINKED CHANNEL INSTRUCTIONS
          SPACE  4,10 
          ERRNG  10000-*     *7CI* OVERFLOW 
          BSS    10000-*     (SPARES) 
          CON    DCI-1       (T0) = ENTRY ADDRESS - 1 
          CON    DSLN        (T1) = DETAILED STATUS LENGTH
          CON    CH01$       (T2) = FIRST CHANNEL INSTRUCTION ADDRESS 
          ERRNZ  LN-*        INCORRECT *7CI* OVERLAY LENGTH 
          QUAL   *
 7DI      MSOVL  7550,T2,DEXA,(DETAILED STATUS PROCESSOR.)
 7DI      SPACE  4,10 
***       DETAILED STATUS PROCESSOR.
*         R. M. DANISCH.     85/02/06.
 7DI      SPACE  4,10 
*                *7DI* IS CALLED BY *7CI* TO DETERMINE THE ERROR TYPE 
*         BY ANALYZING DETAILED STATUS. 
 7DI      SPACE  4,10 
**        DDI - DETAILED STATUS PROCESSOR.
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = DEGS. 
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (DEAI) = ALGORITHM INDEX.
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (DEGS) = GENERAL STATUS. 
*                (RDCT) = ERROR PROCESSING INTERFACE WORD.
*                (MB+1) = PHYSICAL DISK ADDRESS FROM *LDAM*.
*                (MB+2 - MB+5) = DETAILED STATUS. 
* 
*         EXIT   TO *7EI*.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                         BITS AFFECTED BY THIS OVERLAY - 
*                         BIT 5 = 1 IF ISD DRIVE FAULT. 
*                         BIT 0 = 1 IF ERROR ON PREVIOUS SECTOR.
*                (DEWR) = 1 IF DATA WRITTEN TO DISK.
*                (MB+1) = UNCHANGED.
*                (MB+2 - MB+5) = UNCHANGED. 
* 
*         USES   CM, T2.
* 
*         MACROS MSERR. 
  
  
 DDI      ENTRY              *7DI* ENTRY
  
          LDI    T2 
          SHN    0-11 
          LMN    5
          ZJN    DDI1        IF GENERAL STATUS = 5XXX 
          LDN    EI0         SET *7EI* PROCESSOR INDEX
          LJM    DDI22       EXECUTE *7EI*
  
 DDI1     LDM    DEAI        IDENTIFY HARDWARE TYPE 
          SBN    AIIB 
          MJN    DDI3        IF 844/885 DEVICE
          SBK    AIIE-AIIB
          PJN    DDI2        IF NOT ISD DEVICE
          LDN    12-10
          RAM    DDIE 
          LDC    UJNI+DDI18.1-DDIH
          ERRPL  DDI18.1-DDIH-40   RANGE ERROR
          STM    DDIH 
          LDN    7-3
          UJN    DDI6        CONTINUE 
  
 DDI2     SBN    AIDX-AIIE
          PJN    DDI7        IF FSC DEVICE
          LJM    DDI20       REPORT STATUS ERROR FOR BUFFERED DEVICE
  
 DDI3     LDN    PSNI        ENABLE DATA WRITTEN CHECK
          STM    DDIC 
          LDM    DEAI 
          SBN    AIDQ 
          PJN    DDI4        IF *DR* OR *DQ* DEVICE 
          ADN    AIDQ-AIDM
          NJN    DDI9        IF 844 DEVICE
 DDI4     LDN    PSNI 
          STM    DDID        ENABLE 885 NOT READY CHECK 
 DDI6     UJN    DDI8        CONTINUE 
  
 DDI7     LCN    10-0        MODIFY CODE FOR FSC DEVICE 
          RAM    DDIE 
          LDC    LMNI+1 
          STM    DDIG 
          LDN    21-14
          RAM    DDIH+1 
          LDC    UJNI+DDI23-DDII
          ERRPL  DDI23-DDII-40   RANGE ERROR
          STM    DDII 
          LCN    12-7 
 DDI8     RAM    DDIF 
 DDI9     LDN    DSLN/5      READ DETAILED STATUS FROM MESSAGE BUFFER 
          STD    CM 
          LDD    MA 
          ADN    2
          CRM    OFFW,CM
          ERRNZ  DSLN/5-4    ADJUST CODE IF VALUE OF *DSLN* CHANGES 
          ERRNG  *-OFFW-DSLN CODE IS DESTROYED BY DETAILED STATUS 
  
*         CHECK FOR DATA WRITTEN TO DISK. 
  
 DDI13    UJN    DDI15       CONTINUE FOR NON-844/885 DEVICE
*         PSN                (844/885)
 DDIC     EQU    *-1
          LDM    OFFW+20
          LPN    2
          ZJN    DDI14       IF NOT DATA FIELD ERROR
          LDM    DERW 
          ZJN    DDI14       IF READ REQUEST
          STM    DEWR        SET *DATA WRITTEN/READ* FLAG 
  
*         CHECK FOR DRIVE NOT READY.
  
 DDI14    UJN    DDI15       CONTINUE FOR NON-885 
*         PSN                (885)
 DDID     EQU    *-1
          LDM    OFFW+7 
          SHN    21-0 
          MJN    DDI17       IF NOT *NOT READY* 
 DDI15    LDI    T2 
          LMC    5020 
          NJN    DDI17       IF NOT *NOT READY* 
          LDM    OFFW+10
*         LDM    OFFW        (FSC)
*         LDM    OFFW+12     (ISD)
 DDIE     EQU    *-1
          SHN    0-7
*         SHN    0-12        (FSC)
*         SHN    0-3         (ISD)
 DDIF     EQU    *-1
          LPN    1
 DDIG     PSN 
*         LMN    1           (FSC)
          NJN    DDI17       IF NOT *NOT READY* 
          LDN    EI6         SET *7EI* PROCESSOR INDEX
          UJN    DDI18       EXECUTE *7EI*
  
*         CHECK FOR ERROR ON PREVIOUS SECTOR. 
  
 DDI17    LDM    OFFW+14
*         LDM    OFFW+21     (FSC)
*         UJN    DDI18.1     (ISD)
 DDIH     EQU    *-2
          SHN    0-13 
          ZJN    DDI19       IF NOT ERROR ON PREVIOUS SECTOR
          LDM    DERW 
          ZJN    DDI18.2     IF NOT A WRITE 
          AOI    T1          SET *ERROR ON PREVIOUS SECTOR* FLAG
          LDN    EI1         SET *7EI* PROCESSOR INDEX
 DDI18    LJM    DDI22       EXECUTE *7EI*
  
*         CHECK FOR ISD MEDIA ERROR.
  
 DDI18.1  LDM    OFFW+20     CHECK BOX ISOLATION STATUS 
          SHN    21-5 
          PJN    DDI20       IF NOT DRIVE/MEDIA FAULT 
          LDM    OFFW+10
          SHN    0-4
          LMC    101
          ZJN    DDI21       IF MEDIA ERROR IN HEADER 
          LMN    101&103
          ZJN    DDI21       IF MEDIA ERROR IN DATA 
          LDN    40          SET *EXECUTE DIAGNOSTICS* FLAG 
          RAI    T1 
 DDI18.2  UJN    DDI20       SET *7EI* PROCESSOR INDEX (STATUS ERROR) 
  
*         CHECK FOR 844/885 MEDIA ERROR.
  
 DDI19    LDM    OFFW 
*         UJN    DDI23       (FSC)
 DDII     EQU    *-2
          LPN    17 
          LMN    10 
          ZJN    DDI21       IF MEDIA ERROR 
          LDM    OFFW+1 
          SHN    21-13
          MJN    DDI21       IF MEDIA ERROR 
          SHN    13-11
          MJN    DDI21       IF MEDIA ERROR 
          LDM    OFFW+20
          SHN    21-10
          MJN    DDI21       IF MEDIA ERROR 
 DDI20    SOM    DDIJ 
          ERRNZ  EI5-EI4-1   CODE ASSUMES *EI5* = *EI4* + 1 
 DDI21    LDN    EI5         SET *7EI* PROCESSOR INDEX
*         LDN    EI4         (NOT A MEDIA ERROR)
 DDIJ     EQU    *-1
 DDI22    STD    T2 
          MSERR  7EI         EXECUTE *7EI*
  
*         CHECK FOR FSC MEDIA ERROR.
  
 DDI23    LDI    T2 
          SHN    21-4 
          PJN    DDI20       IF NOT MEDIA ERROR 
          LDM    OFFW 
          SHN    21-7 
          PJN    DDI20       IF NOT MEDIA ERROR 
          LDM    OFFW+1 
          SHN    21-6 
          PJN    DDI20       IF NOT MEDIA ERROR 
          UJN    DDI21       EXECUTE *7EI*
          SPACE  4,10 
          ERRNG  10000-*     *7DI* HAS OVERFLOWED 
          BSS    10000-*     SPARES 
          CON    DDI-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          CON    DEGS        (T2) = DEGS
          ERRNZ  LN-*        INCORRECT *7DI* OVERLAY LENGTH 
          QUAL   *
 7EI      MSOVL  7542,T1,DEXA,(SET ERROR CODE.) 
          SPACE  4
***       SET ERROR CODE. 
*         R. J. THIELEN.     75/11/20.
*         W. E. GOEBEL.      77/01/24.
          SPACE  4
*                *7EI* IS CALLED BY *7CI*, *7DI* OR *7FI* TO PERFORM
*         ADDITIONAL CHECKS ON GENERAL STATUS AND TO ASSIGN AN ERROR
*         CODE FOR THE CURRENT ERROR.  FOR COUPLER TO DISK ERRORS,
*         *7EI* WILL READ BACK THE PREVIOUS SECTOR FROM THE CONTROLLER
*         SO THAT THE DRIVER CAN RE-WRITE IT. 
 MSE      SPACE  4
**        DEI - SET ERROR CODE. 
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = INDEX TO PROCESSING ADDRESS IN *7EI*. 
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (DEAI) = ALGORITHM INDEX.
*                (DEEC) = ERROR CODE IF CALLED BY *7CI* OR *7FI*. 
*                (DEGS) = GENERAL STATUS. 
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (RDSB) = ADDRESS OF DATA BUFFER FOR READ.
*                (WDSC) = ADDRESS OF DATA BUFFER FOR WRITE. 
*                (WDSE) = ADDRESS OF BUFFER FOR WRITE ERROR RETRY (IF 
*                         SPECIFIED ON *SETMS*).
*                (MB+1) = PHYSICAL DISK ADDRESS FROM *LDAM*.
*                (MB+2 - MB+5) = DETAILED STATUS, IF ERROR WAS REPORTED 
*                                BY CONTROLLER (NOT A *DSWM*/*LDAM*/
*                                CHANNEL PARITY ERROR.
* 
*         EXIT   TO *7EK* 
*                (T2) = READ BUFFER ADDRESS.
*                (T4 - T7) = UNCHANGED. 
*                (DEEC) = ERROR CODE. 
*                (DENR) = 1 IF NON-RECOVERABLE ERROR. 
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                         BITS AFFECTED BY THIS OVERLAY - 
*                         BIT 12 = 1 IF NO RETRIES ARE ALLOWED. 
*                         BIT  4 = 1 IF RECOVERY IN PROGRESS (BIT 10
*                                  OF GENERAL STATUS IS SET). 
*                         BIT  3 = 1 IF BUFFER READBACK FAILED. 
*                (DEWR) = 1 IF DATA MAY HAVE BEEN WRITTEN TO DISK.
*                (DEXA) = ADDRESS AT WHICH TO RETRY OPERATION.
*                         *LDA1*, IF *7SI* WILL NOT BE CALLED.
*                         *ERR2*, IF *7SI* TO BE CALLED.
*                (MB+1) = UNCHANGED.
*                (MB+2 - MB+5) = UNCHANGED. 
* 
*         USES   T2, T7, CM.
* 
*         MACROS ISTORE, MSERR. 
  
  
 DEI      ENTRY              *7EI* ENTRY
  
          LDM    TDEI,T2
          STD    CM 
          LDN    0
          LJM    0,CM        ENTER PROCESSOR
  
*         *EI0* - GENERAL STATUS .NE. 5XXX. 
  
 DEI1     LDM    DEGS 
          SHN    21-10
          PJN    DEI4        IF NO RECOVERY IN PROGRESS 
          SHN    10-5 
          PJN    DEI3        IF NOT A CORRECTABLE ERROR 
          LDM    RDSB 
          SBK    EPFW-502+1 
          PJN    DEI4        IF ERROR PROCESSOR OVERLAYS BUFFER 
 DEI3     LDC    ERR2        CAUSE *7EP* TO CALL *7SI*
          STM    DEXA 
          LDN    20          SET IMMEDIATE EXIT FLAG FOR *7EP*
          RAI    T1 
 DEI4     LJM    DEI9        SET *DSTE* ERROR CODE
  
*         *EI1* - WRITE ERROR ON PREVIOUS SECTOR. 
  
 DEI5     LDM    ERXA 
          NJP    DEI8        IF ERROR ON A RETRY
          STM    WDSB        FORCE *WRITE LAST SECTOR*
          ERRNZ  WLSF        CODE ASSUMES VALUE 
          LDM    WDSE 
          NJN    DEI6        IF WRITE BUFFER SPECIFIED
          LDM    WDSC        DESTROY CURRENT SECTOR BUFFER
 DEI6     STM    RDSB 
          STD    T2 
          SBK    EPFW-502+1 
          PJN    DEI6.1      IF BUFFER IN ERROR PROCESSOR AREA
          LDC    DEI7        SET RETURN FROM READ OF COUPLER BUFFER 
          STM    RDS
          LDC    DEI6.1      SET ERROR RETURN 
          STM    ERRA 
          LDD    HN 
          ERRNZ  LJMI-100    CODE DEPENDS ON VALUE
          STM    RDSD 
          LDC    DEI6.0 
          STM    RDSD+1 
          LDN    FCRB        READ BACK COUPLER BUFFER 
          LJM    RDS3        USE READ PROCESSOR 
  
*         RETURN HERE ON ERROR IN COUPLER BUFFER READ ATTEMPT.
  
 DEI6.1   LDC    UJNI+DEI17-DEIA
          ERRPL  DEI17-DEIA-40   RANGE ERROR
          STM    DEIA 
          LDN    10          SET *ERROR ON BUFFER READBACK* FLAG
          RAI    T1 
          UJN    DEI8        CONTINUE 
  
*         RETURN HERE TO DELAY DURING COUPLER READ BACK.
  
 DEI6.0   STD    T0          SAVE (A) 
          LDC    LDMI        RESTORE DRIVER CODE
          STM    RDSD+1 
          ISTORE RDSD,(NJN WDS5)
          SBN    1           DELAY AT LEAST 128 MICROSECONDS
          NJN    *-1         IF DELAY NOT EXPIRED 
          LDD    T0          RESTORE (A)
          LJM    RDS3.1      RE-ENTER DRIVER
  
*         SET UP RETRY OF PREVIOUS SECTOR.
  
 DEI7     LDM    WDS         SAVE *WDS* RETURN IN *RDS* 
          STM    RDS
          LDC    WEP         RETURN TO WEP AFTER RETRY
          STM    WDS
          LDM    WDSC        SAVE CURRENT BUFFER ADDRESS
          STM    RDSB 
          LDD    T2          SET RETRY BUFFER ADDRESS 
          STM    WDSC 
          SOD    T7 
  
*         *EI2* - FUNCTION TIMEOUT / CONTROLLER MEMORY ERROR. 
  
 DEI8     LDI    T1 
          LPC    101
          ZJN    DEI11       IF FUNCTION TIMEOUT
          LPN    1
          ZJN    DEI10       IF CONTROLLER MEMORY ERROR 
  
*         *EI4* - STATUS ERROR. 
  
 DEI9     LDK    DSTE&RAME   SET *DSTE* ERROR CODE
 DEI10    LMK    RAME&FTOE   SET *RAME* ERROR CODE
 DEI11    LMK    FTOE&PARE   SET *FTOE* ERROR CODE
  
*         *EI5* - MEDIA ERROR.
  
 DEI12    LMK    PARE&NRDE   SET *PARE* ERROR CODE
  
*         *EI6* - DEVICE NOT READY. 
  
 DEI13    LMK    NRDE        SET *NRDE* ERROR CODE
 DEI14    STM    DEEC 
  
*         *EI3* - ERROR CODE ALREADY SET. 
  
 DEI15    LDM    DEEC 
*         UJN    DEI17       (ERROR ON COUPLER BUFFER READ) 
 DEIA     EQU    *-2
          SBK    RESE 
          PJN    DEI18       IF RESERVE ERROR 
  
*         CHECK FOR A WRITE REQUEST ON AN ISD DEVICE.  THIS IS
*         CONSIDERED A NON-RECOVERABLE CASE FOR CONTROLLER REPORTED 
*         ERRORS DUE TO THE DATA BUFFERING IN THE 7255 ADAPTER AND
*         CONTROL MODULE.  THE ERROR IS ALSO FORCED UNRECOVERED TO
*         PREVENT RETRYING THE OPERATION. 
  
          LDM    DEAI 
          SBK    AIIB 
          MJN    DEI18       IF NOT ISD 
          SBK    AIIE-AIIB
          PJN    DEI18       IF NOT ISD 
          LDC    600         SET ISD/WRITE BUFFERING FLAGS
          RAI    T1 
          SHN    21-4 
          MJN    DEI18       IF *CONTINUE* TO BE ISSUED 
 DEI17    LDM    DERW 
          ZJN    DEI18       IF READ REQUEST
          STM    DEWR        SET *DATA WRITTEN/READ* FLAG 
          STM    DENR        SET *NON-RECOVERABLE* FLAG 
          LDC    2000        SET *UNRECOVERED* FLAG 
          RAI    T1 
 DEI18    LDC    LEP1        RESET *FNC* TIMEOUT EXIT ADDRESS 
          STM    ERRA 
          LDM    RDSB 
          STD    T2 
          MSERR  7EK         EXECUTE *7EK*
  
  
          QUAL
 TDEI     BSS    0           PROCESSOR ADDRESS TABLE
          LOC    0
 EI0      CON    /7EI/DEI1
 EI1      CON    /7EI/DEI5
 EI2      CON    /7EI/DEI8
 EI3      CON    /7EI/DEI15 
 EI4      CON    /7EI/DEI9
 EI5      CON    /7EI/DEI12 
 EI6      CON    /7EI/DEI13 
          CON    0           FORCE LAST ENTRY OF TABLE .LT. 7777B 
          LOC    *O 
          QUAL   *
          SPACE  4
          ERRNG  10000-*     *7EI* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    DEI-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          ERRNZ  LN-*        INCORRECT *7EI* OVERLAY LENGTH 
          QUAL   *
 7FI      MSOVL  7517,T2,DEXA,(FUNCTION TIMEOUT PROCESSOR.) 
 FTO      SPACE  4,10 
***       PROCESS FUNCTION TIMEOUT. 
*         R. M. DANISCH      83/01/03.
*         P. D. HAAS.        83/04/29.
 FTO      SPACE  4,10 
***              THE FUNCTION TIMEOUT PROCESSOR IS CALLED BY *7CI*
*         WHEN ONE OF THE FOLLOWING OCCURS - THE GENERAL STATUS 
*         FUNCTION ISSUED BY *7CI* TIMES OUT, THE DETAILED
*         STATUS FUNCTION ISSUED BY *7CI* TIMES OUT, OR THERE 
*         IS AN INCOMPLETE DATA TRANSFER ON THE INPUT OF GENERAL
*         OR DETAILED STATUS IN *7CI*.
* 
*         THIS OVERLAY PERFORMS THE FOLLOWING FUNCTIONS - 
*                1. RESTART A 7054 CONTROLLER HUNG ON A COUPLER LOCKUP
*                   VIA A SHORT AUTOLOAD. 
*                2. DETERMINE IF A RAM PARITY ERROR OR CONTROLLER STOP
*                   OCCURRED ON A 7155 CONTROLLER.
 7FI      SPACE  4,10 
*         REDEFINE CHANNEL INSTRUCTIONS TO PRODUCE A LINKED LIST. 
  
 FWDL$    EQU    1           SELECT FORWARD LINKING 
          RICHL 
 FTO      SPACE  4,10 
**        FTO - FUNCTION TIMEOUT PROCESSOR. 
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = FIRST CHANNEL INSTRUCTION ADDRESS.
*                (T4) = CHANNEL NUMBER. 
*                (DEAI) = ALGORITHM INDEX.
*                (DEEC) = *CSTE* ERROR CODE.
*                (DEGS) = GENERAL STATUS. 
*                         5002 IF 7255 MEMORY ERROR.
*                         5017 IF ISD CONTROL MODULE MEMORY ERROR.
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (MB, BYTES 0-3) = T4 - T7. 
*                (MB, BYTE 4) = ADDRESS OF LAST *FNC* CALL. 
*                (MB+1) = PHYSICAL DISK ADDRESS FROM *LDAM*.
*                (MB+2 - MB+5) = DETAILED STATUS, IF ONE TAKEN. 
* 
*         EXIT   TO *7EI*.
*                (T2) = INDEX TO PROCESSING ADDRESS IN *7EI*
*                (T4 - T7) = RESTORED FROM *MB*.
*                (DENR) = 1 IF ALL OF THE FOLLOWING CONDITIONS HOLD - 
*                            A. THE CONTROLLER IS CONNECTED.
*                            B. NOT AN ISD DEVICE.
*                            C. THE OPERATION IS A WRITE. 
*                            D. TIMEOUT OCCURRED BEFORE THE PREVIOUS
*                               SECTOR WAS WRITTEN TO DISK. 
*                (DERC) = *FTRT* IF ALL OF THE FOLLOWING ARE TRUE - 
*                            A. THE CONTROLLER IS CONNECTED.
*                            B. THE DRIVE IS NOT AN ISD.
*                            C. THE CONTROLLER TYPE IS NOT A 7155 MODEL 
*                               B OR C. 
*                            D. TIMEOUT OCCURRED BEFORE THE PREVIOUS
*                               SECTOR WAS WRITTEN TO DISK. 
*                            E. THE ERROR IS NOT A RAM PARITY ERROR.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                         BITS AFFECTED BY THIS OVERLAY - 
*                         BIT   6 = 1 IF RAM PARITY ERROR.
*                         BITS 2-1 = CONTROLLER TYPE. 
*                                    0    7155 MODEL A. 
*                                    1    7155 MODEL B OR C.
*                                    2    7255 ADAPTER. 
*                                    3    CONTROL MODULE. 
*                (DEWR) = 1 IF WRITE OPERATION ON NON-ISD DEVICE AND
*                         THE CONTROLLER IS CONNECTED.
* 
*         USES   T0 - T2, T4 - T7, CM - CM+4. 
* 
*         CALLS  FNC, RCM.
* 
*         MACROS MSERR, RICHL.
  
  
 DFI      ENTRY              *7FI* ENTRY
  
 FTO      LDN    0
 FTO1     RAD    T2          MODIFY CHANNEL INSTRUCTIONS
          LDI    T2 
          LPN    37 
          STD    CM 
          LDD    T4 
          SBD    CM 
          RAI    T2 
          LDD    CM 
          NJN    FTO1        IF MORE INSTRUCTIONS 
          ERRNZ  WLSF        CODE DEPENDS ON VALUE
          STM    WDSB 
          LDN    EI3         PRESET *7EI* PROCESSOR INDEX 
          STD    T2 
          DCN    CH+40
          LDM    DEAI 
          SBK    AIIB 
          MJN    FTO4        IF NOT ISD DEVICE
          SBK    AIIE-AIIB
          PJN    FTO4        IF NOT ISD DEVICE
          LDD    HN          SET *MEMORY ERROR* FLAG
          RAI    T1 
          LDM    DEGS        SET CONTROLLER TYPE
          LMC    5017 
          ZJN    FTO3        IF ISD CONTROL MODULE MEMORY ERROR 
          LDN    1S1
 FTO3     LMN    3S1
          RAI    T1 
          LJM    FTO15       CALL *7EI* 
  
*         ISSUE A SHORT AUTOLOAD TO RESTART THE CONTROLLER IN CASE IT 
*         IS HUNG, AND WAIT UNTIL THE FUNCTION HAS COMPLETED. 
*         DETERMINE WHETHER OR NOT THE ERROR COULD HAVE OCCURRED ON A 
*         PREVIOUS SECTOR.
  
 FTO3.1   ADN    AIDR-AIDQ
          ZJN    FTO6        IF 885 *DQ* DRIVE
          ADN    AIDQ-AIDM
          UJN    FTO4.1      CHECK FOR 885 *DM* DRIVE 
  
 FTO4     FNC    FCAL,CH     ISSUE SHORT AUTOLOAD FUNCTION
          LDM    DERW 
          ZJN    FTO5        IF READ SEQUENCE 
          STM    DEWR        SET *DATA WRITTEN* FLAG
          LDM    DEAI 
          SBK    AIDR 
          MJN    FTO3.1      IF POSSIBLE 885 *DQ* OR *DM* DRIVE 
 FTO4.1   ZJN    FTO6        IF CDSS II *DR* OR 885 *DM* DRIVE
          LDM    LDAA 
          LPN    77          EXTRACT INTERLACE
 FTO5     LMN    FCS1 
          ERRZR  FCS1        CODE DEPENDS ON VALUE
 FTO6     STD    T7 
          LDD    TH          SET 5 SECOND TIMEOUT 
          STD    T5 
 FTO7     DELAY  10D*8D      DELAY FOR 10 MS
          SOD    T5 
          MJN    RCM1        IF AUTOLOAD TIMEOUT
          AJM    FTO7,CH     IF AUTOLOAD NOT PROCESSED
  
*         ACTIVATE THE CHANNEL FOR 25 - 750 MICROSECONDS. 
  
*         LDC    **          0 .LE. (A) .LT. 1000B
          ACN    CH 
          SBD    MA          1022B .LE. (MA) .LE. 7632B 
          MJN    *-1         IF DELAY INCOMPLETE
          DCN    CH+40
  
*         DETERMINE IF RAM PARITY ERROR OCCURRED.  THE METHOD FOR 
*         DOING THIS IS TO ISSUE A MANIPULATE PROCESSOR FUNCTION
*         AND SEE IF IT TIMES OUT.  IF IT DOESN-T, THE CONTROLLER 
*         TYPE IS ESTABLISHED AS A 7155, OTHER MODELS WILL NOT ACCEPT 
*         THE FUNCTION.  THE INPUT DISPLAY DATA FUNCTION IS USED
*         TO REFERENCE EACH RAM ADDRESS IN THE CONTROLLER AND WILL
*         NOT HALT IF A PARITY ERROR IS DETECTED, RATHER A BIT WILL 
*         BE SET IN THE CONTROLLER-S PROCESSOR STATUS THAT INDICATES
*         THE ERROR.  THIS BIT WILL BE INTERROGATED BY THE PP.
  
          LDN    ZERL 
          CRD    CM 
          LDC    FTO13       SET ERROR EXIT FOR FUNCTION TIMEOUT
          STM    ERRA 
          LDC    8192DS-5    SET LOOP COUNT FOR 16384 BYTE DUMP 
          STD    T5 
  
 BUF      EQU    OFFW        SCRATCH BUFFER 
          ERRPL  BUF+77-*    BUFFER OVERLAYS CODE 
 RCM      SPACE  4,10 
**        RCM - READ CONTROLLER MEMORY. 
* 
*         ENTRY  (CM+1 - CM+2) = ADDRESS IN CONTROLLER MEMORY.
* 
*         EXIT   (CM) = 2.
*                *FCID* FUNCTION ISSUED TO CONTROLLER.
*                (ERRA) = *FTO16*.
* 
*         CALLS  FNC. 
  
  
 RCMX     LJM    FTO8        ENTRY/EXIT 
 RCM      EQU    *-1
          LDN    2           SET READ MODE
          STD    CM 
          LDN    FCMP        ISSUE *MANIPULATE PROCESSOR* FUNCTION
          RJM    FNC
          LDN    5           OUTPUT PARAMETERS
          OAM    CM,CH
 RCM1     NJN    FTO9        IF INCOMPLETE TRANSFER 
          DCN    CH+40
          LDC    FTO16       SET ERROR EXIT FOR FUNCTION TIMEOUT
          STM    ERRA 
          LDN    FCID        ISSUE *INPUT DISPLAY DATA* FUNCTION
          RJM    FNC
          UJN    RCMX        RETURN 
  
*         READ OUT CONTROLLER MEMORY. 
  
 FTO8     RJM    RCM
          LDD    HN          INPUT 64 BYTES 
          IAM    BUF,CH 
 FTO9     NJN    FTO11       IF INCOMPLETE TRANSFER 
          LDN    40 
          RAD    CM+2        ADVANCE CONTROLLER ADDRESS 
          SHN    21-10
          PJN    FTO10       IF NOT 8 BIT OVERFLOW
          STD    CM+2 
          AOD    CM+1        ADJUST CONTROLLER ADDRESS
 FTO10    SOD    T5 
          NJN    FTO8        IF MORE TO READ
  
*         OBTAIN PROCESSOR STATUS.
  
          LDN    FCST        ISSUE *INPUT PROCESSOR STATUS* FUNCTION
          RJM    FNC
          LDN    40          INPUT STATUS 
          IAM    BUF,CH 
 FTO11    NJN    FTO12       IF INCOMPLETE TRANSFER 
          LDM    BUF+23 
          LPN    20 
          SHN    1-4         SET 7155 CONTROLLER TYPE, MODEL A OR/B/C 
          RAI    T1 
          LDM    BUF         SET *RAM PARITY ERROR* FLAG
          LPN    20 
          SHN    6-4
          RAI    T1 
          LDD    MA 
          CRD    CM 
          LDD    CM+4        CHECK LAST CALL TO *FNC* 
          LMC    WDS4+2 
          NJN    FTO15       IF NOT WRITE FUNCTION TIMEOUT
          STD    CM+1 
          LDC    321
          STD    CM+2        READ CONTROLLER MEMORY 
          RJM    RCM
          LDN    2           INPUT *WRITE BUFFER TO DISK* FLAG
          IAM    T6,CH
 FTO12    NJN    FTO16       IF INCOMPLETE TRANSFER 
 FTO13    LDD    T7 
          NJN    FTO15       IF NOT ERROR AFFECTING PREVIOUS SECTOR 
          LDN    1           FORCE ERROR NON-RECOVERABLE
          STM    DENR 
          LDI    T1 
          SHN    21-1 
          PJN    FTO14       IF NOT B/C MODEL 7155 CONTROLLER 
          SOD    T2 
          ERRNZ  EI1+1-EI2   CODE DEPENDS ON VALUES 
          UJN    FTO15       ADJUST *7EI* PROCESSOR INDEX 
  
 FTO14    LPN    20 
          NJN    FTO15       IF RAM PARITY ERROR
          LDK    FTRT-1      FORCE UNRECOVERED
          STM    DERC 
 FTO15    SOD    T2 
          ERRNZ  EI2+1-EI3   CODE DEPENDS ON VALUES 
 FTO16    DCN    CH+40
          LDD    MA          RESTORE DRIVER PARAMETERS
          CRD    T4 
          MSERR  7EI         CALL *7EI* 
 FTO      SPACE  4,10 
          HERE               TERMINATE LINKED CHANNEL INSTRUCTIONS
          SPACE  4,10 
          ERRNG  10000-*     OVERFLOW 
          BSS    10000-*     SPARES 
          CON    DFI-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          CON    CH01$       (T2) = FIRST CHANNEL INSTRUCTION ADDRESS 
          ERRNZ  LN-*        INCORRECT *7FI* OVERLAY LENGTH 
          QUAL   *
 7GI      MSOVL  7613,T2,DSFA+4,(CHANNEL/CONTROLLER ERROR PROCESSOR.) 
 DCP      SPACE  4,10 
***       PROCESS CHANNEL/CONTROLLER ERROR. 
*         R. M. DANISCH      83/01/03.
 DCP      SPACE  4,10 
*         THE CHANNEL/CONTROLLER ERROR PROCESSOR IS CALLED BY *7HI*.
*         IF *7HI* WAS UNSUCCESSFUL IN ATTEMPTING THE CONTROLWARE 
*         RELOAD, *7GI* WILL ATTEMPT TO RELEASE DRIVES RESERVED TO THE
*         FAILING CONTROLLER SO THEY MAY BE ACCESSED THROUGH AN 
*         ALTERNATE CHANNEL.  IF THE CONTROLLER IS UNABLE TO RELEASE
*         DRIVES, IT MAY BE NECESSARY TO REMOVE DRIVE RESERVATIONS
*         MANUALLY IN ORDER TO GAIN ACCESS THROUGH AN ALTERNATE 
*         CHANNEL.
          SPACE  4,10 
*         GENERATE LINKED LIST OF CHANNEL INSTRUCTIONS. 
  
 FWDL$    EQU    1           SELECT FORWARD LINKING 
          RICHL 
          SPACE  4,10 
*         LIST OF PROCESSOR INDICES.
  
  
          QUAL
 DC1      EQU    0           *DCP1* INDEX 
 DC6      EQU    1           *DCP6* INDEX 
 DC9      EQU    2           *DCP9* INDEX 
 DC11     EQU    3           *DCP11* INDEX
          QUAL   *
 DCP      SPACE  4,10 
**        DCP - PROCESS CHANNEL/CONTROLLER ERROR. 
* 
*         ENTRY  (A) = 0. 
*                (T1) = RDCT. 
*                (T2) = CH01$.
*                (T4) = CHANNEL NUMBER. 
*                (T5) = EST ORDINAL.
* 
*         USES   CM, T2.
* 
*         CALLS  FNC. 
* 
*         MACROS ENDMS. 
  
  
 DCP1     RAD    T2 
          LDI    T2          MODIFY CHANNEL INSTRUCTIONS
          LPN    37 
          STD    CM 
          LDD    T4 
          SBD    CM 
          RAI    T2 
          LDD    CM 
          NJN    DCP1        IF MORE INSTRUCTIONS 
          LDM    CHRV        PREVENT OPERATION COMPLETE 
          SCN    10 
          STM    CHRV 
          LDM    DEST 
          LPN    40 
          ZJN    DCP2        IF NOT AN ISD DEVICE 
          LJM    DCP6        AVOID DROP SEEKS AND CONTROLLER HANG 
  
 DCP2     AOM    DCPA        SET TIME-OUT FLAG
          LDM    UERR 
          ERRNZ  EPDE-400-EPSM  CODE ASSUMES VALUES 
          SHN    21-10
          MJN    DCP4        IF *ENDMS* IS DISABLED 
          LDC    DCP3        SET ERROR EXIT ADDRESS 
          STM    ERRA 
  
*         RELEASE ALL UNITS RESERVED TO CONTROLLER. 
  
          LDN    FCDK        RELEASE ALL BUT LAST DRIVE ACCESSED
          RJM    FNC
          DCN    CH+40
          LDN    FCDR        RELEASE LAST DRIVE ACCESSED
          RJM    FNC
          SOM    DCPA        CLEAR TIME-OUT FLAG
 DCP3     DCN    CH+40
  
*         SINCE IT IS KNOWN THE CONTROLLER CONTAINS A RAM PARITY
*         ERROR, IT IS DESIRABLE TO LEAVE THE CONTROLLER IN SUCH A
*         STATE THAT THE NEXT PP TO ACCESS IT DISCOVERS THE ERROR 
*         ALSO.  THE METHOD USED TO ACCOMPLISH THIS IS TO ISSUE A 
*         PROCESSOR MANIPULATION FUNCTION TO CAUSE THE CONTROLLER TO
*         HANG ON A ZERO INSTRUCTION. 
  
 DCP4     LDC    DCP5        SET ERROR EXIT ADDRESS 
          STM    ERRA 
          LDN    FCMP        HANG CONTROLLER
          RJM    FNC
          LDN    5
          OAM    DCPB,CH
 DCP5     LDC    LEP1        RESET ERROR EXIT ADDRESS 
          STM    ERRA 
          DCN    CH+40
 DCP6     LDM    UERR 
          ERRNZ  EPDE-400-EPSM  CODE ASSUMES VALUES 
          SHN    21-10
          MJN    DCP8        IF *ENDMS* DISABLED
          ENDMS 
          LDM    CHRV 
          SHN    21-4 
          MJN    DCP11       IF CALLER SELECTED CHANNEL 
 DCPA     LDN    0
*         LDN    1           (*FCDK*/*FCDR* TIMED OUT)
 DCP8     NJN    DCP11       IF DRIVES NOT RELEASED 
 DCP9     STD    CM 
          LDI    T1 
          LPC    500
          STI    T1 
          SOM    HEDR+6 
          LDM    DEST 
          LPC    -3000
          STM    DEST 
          LDD    CP          CLEAR CONTROL POINT MESSAGE
          ADN    MS2W 
          CWD    CM 
          LJM    LDA1        RETRY I/O
  
 DCP11    LDM    DEST        SET UNRECOVERED FLAG 
          LPC    -2000
          LMC    2000 
          STM    DEST 
          LJM    LEP         EXECUTE *7EQ*
  
 DCPB     CON    4,0,27,0,0 
 PCE      SPACE  4,20 
**        PCE - PROCESS CHANNEL/CONTROLLER ERROR. 
* 
*         ENTRY  (T3) = PROCESSOR INDEX.
*                     = 0 FOR *DCP1*. 
*                     = 1 FOR *DCP6*. 
*                     = 2 FOR *DCP9*. 
*                     = 3 FOR *DCP11*.
*                (MB+2) = ORIGINAL CELLS (T3 - T7). 
*                (MB+3 - MB+5) = LAST THREE WORDS OF DETAILED STATUS. 
* 
*         EXIT   (A) = 0. 
*                (T3 - T7) = RESTORED FROM (MB+2).
*                (MB+3 - MB+5) = UNCHANGED. 
* 
*         USES   CM.
* 
*         NOTE   IF THE TAGS IN *7GI* ARE RENAMED OR RENUMBERED,
*                THE TABLE INDEX MNEMONICS DEFINED ABOVE SHOULD ALSO
*                BE UPDATED TO REFLECT THOSE CHANGES (FOR CLARITY). 
  
  
 DGI      ENTRY              *7GI* ENTRY
  
 PCE      BSS    0
          LDM    TPCE,T3     SET PROCESSOR ADDRESS
          STD    CM 
          LDD    MA          RESTORE DIRECT CELLS 
          ADN    2
          CRD    T3 
          LDN    0
          LJM    0,CM        EXIT TO PROCESSOR
  
  
 TPCE     BSS    0           PROCESSOR ADDRESSES
          LOC    0
 DC1      CON    DCP1 
 DC6      CON    DCP6 
 DC9      CON    DCP9 
 DC11     CON    DCP11
          LOC    *O 
 DCP      SPACE  4,10 
          HERE               TERMINATE LINKED CHANNEL INSTRUCTIONS
          SPACE  4,10 
          ERRNG  10000-*     OVERFLOW 
          BSS    10000-*     SPARES 
          CON    DGI-1       (T0) = ENTRY ADDRESS - 1 
          CON    RDCT        (T1) = RDCT
          CON    CH01$       (T2) = CH01$ 
          ERRNZ  LN-*        INCORRECT *7GI* OVERLAY LENGTH 
          QUAL   *
 7HI      MSOVL  7574,T2,DSFA+4,(CONTROLWARE RELOAD PROCESSOR.) 
          SPACE  4,10 
***       PROCESS CONTROLWARE RELOAD. 
*         P. D. HAAS.        83/04/29.
 7HI      SPACE  4,10 
*                *7HI* IS CALLED BY *7JI* TO RELOAD CHANNEL OR CONTROL
*         MODULE CONTROLWARE.  *7HI* SETS THE RELOAD FLAG FOR THE 
*         CHANNEL OR CONTROL MODULE AND THEN CALLS *1DS* TO START A 
*         *LOADBC* JOB WHICH RELOADS THE CONTROLWARE.  *7HI* WILL WAIT
*         UP TO *CRTO* SECONDS FOR THE RELOAD TO COMPLETE BEFORE GIVING 
*         UP. 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMS1DS 
 RCW      SPACE  4,25 
**        RCW - RELOAD CONTROLWARE PROCESSOR. 
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = RELOAD TIMEOUT VALUE. 
*                (T3) = ADDRESS + *CM* OF BYTE CONTAINING 
*                       RELOAD FLAGS. 
*                (T4) = CONTROL MODULE ACCESS INDICATOR.  FOR C/M 
*                       RELOADS, 1 INDICATES PRIMARY CHANNEL SHOULD 
*                       BE USED FOR RELOAD.  0 INDICATES SECONDARY
*                       CHANNEL SHOULD BE USED.  THIS CELL IS 
*                       UNUSED FOR NON-C/M RELOADS. 
*                (T5) = SYSTEM CP *MS2W* ADDRESS. 
*                (T6 - T7) = ADDRESS OF RELOAD INTERLOCK WORD.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (MB+2) = ORIGINAL CELLS (T3 - T7)
*                (MB+3 - MB+5) = LAST THREE WORDS OF DETAILED STATUS. 
* 
*         EXIT   TO *7GI*.
*                (T3) = *7GI* PROCESSOR INDEX.
*                (MB+2) = UNCHANGED.
*                (MB+3 - MB+5) = UNCHANGED. 
* 
*         USES   CM - CM+4, T0 - T7.
* 
*         CALLS  FTN, SCT.
* 
*         MACROS DELAY, MONITOR, MSERR, PAUSE.
  
  
 DHI      ENTRY              *7HI* ENTRY
  
 RCW      LDI    T1 
          SHN    0-1
          LPN    3
          LMN    3
          NJN    RCW0        IF NOT CONTROL MODULE RELOAD 
          LDD    T4          STORE C/M ACCESS INDICATOR 
          RAM    SCTC+4      SET PRIMARY OR SECONDARY CHANNEL 
          SOM    RCWD        AVOID DOWNING CHANNEL IF RELOAD FAILS
          ERRNZ  RCW8-RCW7-1  CODE ASSUMES *RCW8* = RCW7* + 1 
          AOM    RCWC+4      INDICATE CONTROL MODULE RELOAD TO *1DS*
          UJN    RCW0.1      BEGIN RELOAD 
  
 RCW0     LDM    SCTA-CM,T3  DEFINE LOCATION OF LOAD FLAGS
          STM    SCTC+1 
          STM    SCTB+1 
          SOM    SCTC        SET CORRECT FIELD WIDTH FOR NON-C/M LOAD 
          STM    SCTC+4      SET CORRECT FIELD VALUE
  
*         SET THE CONTROLWARE RELOAD FLAG FOR THE APPROPRIATE CHANNEL 
*         OR CONTROL MODULE.
  
 RCW0.1   LDN    2           SET *UTEM* PARAMETER COUNT FOR *SCT* 
          STD    T4 
          RJM    SCT
          NJN    RCW3        IF RELOAD ALREADY REQUESTED OR IN PROGRESS 
  
*         INITIATE A CONTROLWARE RELOAD *1DS* CALL.  *1DS* WILL START A 
*         *LOADBC* JOB TO RELOAD THE CONTROLWARE. 
  
 RCW1     RJM    FTN
*         PAUSE  NE          PAUSE FOR MOVE 
          LDD    MA 
          CWM    RCWC,ON     STORE *1DS* CALL 
          MONITOR  RPPM 
          LDD    CM+1 
          ZJN    RCW1        IF PP NOT ASSIGNED 
  
*         WAIT *CRTO* SECONDS FOR THE RELOAD TO COMPLETE. 
  
          LDN    0
 RCW2     LPN    1
 RCWA     ZJN    RCW3        IF RELOAD NOT INITIATED
          STM    RCWA 
          ZJN    RCW4        IF RELOAD ABORTED
 RCW3     SOD    T2 
          NJN    RCW5        IF NOT RELOAD TIMEOUT
 RCW4     RJM    SCT         CLEAR LOAD REQUESTED FLAG
          NJN    RCW5        IF RELOAD REQUEST NOT CLEARED
          LJM    RCW8        CONTINUE 
 RCWD     EQU    *-1
  
 RCW5     DELAY  100D*8D     100 MILLISECOND DELAY LOOP 
          RJM    FTN
*         PAUSE  NE 
          LDD    T6          CHECK RELOAD FLAGS 
          SHN    14 
          LMD    T7 
          CRD    CM 
          LDI    T3 
          SHN    0-12 
          NJN    RCW2        IF RELOAD NOT COMPLETE 
          LDI    T1 
          SHN    0-1
          LPN    7
          LMN    1
          ZJN    RCW6        IF 7155 B OR C AND READBACK WORKED 
          LDM    DENR 
          LMN    1
          ZJN    RCW7        IF UNRECOVERABLE WITH CONTROLWARE RELOAD 
 RCW6     LDN    DC9&DC11 
 RCW7     LMN    DC11 
          ERRNZ  DC1         CODE DEPENDS ON VALUE
 RCW8     STD    T3 
          LDN    0
          STD    CM 
          LDD    T5          CLEAR SYSTEM CP MESSAGE
          CWD    CM 
          MSERR  7GI         EXECUTE *7GI*
  
  
 RCWC     VFD    18/0L1DS,6/0,6/0,6/ILJF,24/0 
 SCT      SPACE  4,15 
**        SCT - SET (CLEAR) CONTROLWARE LOAD REQUEST FLAG.
* 
*         ENTRY  (T4) = 2.
*                (T6 - T7) = ADDRESS OF WORD CONTAINING CONTROLWARE 
*                            LOAD FLAGS.
* 
*         EXIT   (A) = RESPONSE FROM *UTEM* REQUEST.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 SCT      SUBR               ENTRY/EXIT 
          LDD    MA          SETUP OUTPUT REGISTER
          CWD    T7-4 
          CRD    CM 
          CWM    SCTB,CM+1   STORE *UTEM* PARAMETERS
          MONITOR  UTEM 
*         LDN    0           RESET PARAMETERS FOR ERROR PROCESSING
          STM    SCTC+4 
          LDN    2
          STM    SCTB+4 
          LDD    CM+1 
          UJN    SCTX        RETURN 
  
  
 SCTA     BSS    0           TABLE OF RELOAD FLAG BIT POSITIONS 
          CON    58DS6
          CON    46DS6
          CON    34DS6
          CON    22DS6
          CON    10DS6
  
 SCTB     VFD    1/1,5/0,6/2,6/34D,42/0 
*         VFD    1/1,5/0,6/2,6/34D,42/2 
 SCTC     VFD    1/0,5/0,6/3,6/33D,42/4 
*         VFD    1/0,5/0,6/3,6/33D,42/0 
          SPACE  4,10 
          ERRNG  10000-*     OVERFLOW 
          BSS    10000-*     SPARES 
          CON    DHI-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          CON    CRTO*10D+1  (T2) = RELOAD TIMEOUT VALUE
          ERRNZ  LN-*        INCORRECT *7HI* OVERLAY LENGTH 
          QUAL   *
 7II      MSOVL  7613,T2,DSFA+4,(INITIATE CONTROLWARE RELOAD.)
          SPACE  4,10 
***       INITIATE CONTROLWARE RELOAD.
*         P. D. HAAS.        83/04/29.
*         R. M. DANISCH.     83/10/17.
          SPACE  4,10 
***              *7II* IS CALLED BY *7EP* TO DETERMINE WHETHER OR NOT 
*         A CONTROLWARE RELOAD IS POSSIBLE.  IF SO, *7JI* IS CALLED TO
*         BEGIN THE RELOAD PROCESS.  IF NOT, *7GI* IS CALLED TO TRY AND 
*         DOWN THE CHANNEL ON WHICH THE ERROR OCCURRED. 
 7II      SPACE  4,10 
**        ICR - INITIATE CONTROLWARE RELOAD.
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = DEEC. 
*                (T4) = CHANNEL NUMBER. 
*                (DEEC) = ERROR CODE. 
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (MB+3 - MB+5) = LAST THREE WORDS OF DETAILED STATUS. 
* 
*         EXIT   TO *7GI* IF NO CONTROLWARE RELOAD. 
*                (T3) = *7GI* PROCESSOR INDEX.
*                (MB+2) = ORIGINAL CELLS (T3 - T7). 
*                (MB+3 - MB+5) = UNCHANGED. 
* 
*                TO *7JI* IF CONTROLWARE RELOAD.
*                (T3) = ADDRESS OF BYTE CONTAINING RELOAD FLAGS.
*                (T4) = CONTROL MODULE ACCESS INDICATOR.  FOR C/M 
*                       RELOADS, 1 INDICATES PRIMARY CHANNEL SHOULD BE
*                       USED FOR RELOAD.  0 INDICATES SECONDARY CHANNEL 
*                       SHOULD BE USED.  THIS CELL IS UNUSED FOR
*                       NON-C/M RELOADS.
*                (T5) = CONTROL MODULE EST ORDINAL IF C/M RELOAD. 
*                (T6-T7) = ADDRESS OF RELOAD INTERLOCK WORD.
*                (MB+2) = ORIGINAL CELLS (T3 - T7). 
*                (MB+3 - MB+5) = UNCHANGED. 
* 
*         USES   CM - CM+4, T0 - T7.
* 
*         CALLS  FCM, FCT.
* 
*         MACROS MSERR. 
  
  
 DII      ENTRY              *7II* ENTRY
  
*         IF THE ERROR IS EITHER A CHANNEL PARITY ERROR OR A CONTROLLER 
*         STOP, PROCEED TO *7GI* TO TRY AND DOWN THE CHANNEL. 
  
 ICR      LDD    MA          SAVE DRIVER PARAMETERS 
          ADN    2
          CWD    T3 
          LDI    T2 
          SBN    RAME 
          PJN    ICR2        IF FUNCTION TIMEOUT / RAM PARITY 
          LDN    DC6&DC11 
 ICR0     LMN    DC11 
          ERRNZ  DC1         CODE DEPENDS ON VALUE
 ICR1     STD    T3 
          MSERR  7GI         EXECUTE *7GI*
  
  
*         FOR RAM PARITY ERRORS AND FUNCTION TIMEOUTS, CHECK IF THE 
*         CONTROLWARE RELOAD LIMIT HAS ALREADY BEEN REACHED.  IF NOT, 
*         CALL *7JI* TO BEGIN THE RELOAD. 
  
 ICR2     LDI    T1 
          SHN    0-1
          LPN    3
          LMN    3
          ZJN    ICR3        IF CONTROL MODULE RELOAD 
          ERRNZ  ICR1-ICR0-1  CODE REQUIRES *ICR1* = *ICR0* + 1 
          AOM    ICRB 
          LDC    FCT         STORE ADDRESS OF NON-C/M PROCESSOR 
          STM    ICRA 
 ICR3     RJM    FCM         FIND CONTROL MODULE EST ENTRY
*         RJM    FCT         (NOT CONTROL MODULE RELOAD)
 ICRA     EQU    *-1
          LDD    CM+1 
          RAD    T7          SET CONTROLWARE TABLE WORD ADDRESS 
          SHN    -14
          ADD    CM 
          STD    T6 
          SHN    14          READ RELOAD FLAGS WORD 
          LMD    T7 
          CRD    CM 
          LDI    T3 
          SHN    -6 
          LPN    7
          LMN    CRTH 
          ZJN    ICR0        IF RELOAD THRESHOLD REACHED
*         ZJN    ICR1        (NOT CONTROL MODULE ERROR) 
 ICRB     EQU    *-1
          MSERR  7JI         EXECUTE *7JI*
 FCM      SPACE  4,15 
**        FCM - FIND CONTROL MODULE EST ENTRY.
* 
*         ENTRY  (T4) = CHANNEL NUMBER. 
*                (HEDR+3) = ISD UNIT NUMBER.
* 
*         EXIT   (T3) = *CM* + 2. 
*                (T4) = 1 IF PRIMARY CHANNEL SHOULD BE USED FOR RELOAD. 
*                       0 IF SECONDARY CHANNEL SHOULD BE USED.
*                (T5) = CONTROL MODULE EST ORDINAL. 
*                (T7) = RELOAD INTERLOCK WORD OFFSET FROM FWA OF EST. 
*                (CM - CM+1) = FWA OF EST.
* 
*         USES   T2 - CM+4. 
* 
*         MACROS MONITOR, SFA.
  
  
 FCM      CON    0           ENTRY
          LDD    T4          STORE CHANNEL FOR COMPARISON 
          RAM    FCMA 
          STM    FCMB 
          LDK    ESTP 
          CRD    CM 
 FCM1     SOD    CM+2        DECREMENT EST ORDINAL
          CFI    EST         SAVE EST ENTRY OFFSET
          STD    T7 
          NJN    FCM3        IF NOT END OF SCAN 
 FCM2     MONITOR  HNGM 
          UJN    FCM2        HANG PP
  
 FCM3     SFA    EST,CM+2   READ NEXT ENTRY 
          ADK    EQDE 
          CRD    T2 
          LDD    T2+3 
          LMC    2RCM 
          NJN    FCM1        IF NOT CONTROL MODULE EST ENTRY
          LDD    T2+4 
          SHN    0-6
          LMM    HEDR+3 
          SCN    7
          NJN    FCM1        IF WRONG EQUIPMENT 
          LDD    T2+2        SET CHANNEL INDICATOR FOR *7HI*
          ZJN    FCM4        IF NO SECONDARY CHANNEL
          LPN    37 
          LMN    ** 
 FCMA     EQU    *-1
          ZJN    FCM5        IF SECONDARY CHANNEL IN USE
 FCM4     LDD    T2+1 
          LPN    37 
          LMN    ** 
 FCMB     EQU    *-1
          NJN    FCM2        IF CHANNEL NOT IN EST ENTRY
          LDN    1
 FCM5     STD    T4 
          LDD    CM+2        SAVE EST ORDINAL FOR *7HI* 
          STD    T5 
          LDN    CM+2        SET BYTE NUMBER
          STD    T3 
          AOD    T7          ADVANCE TO *EQAE* WORD OF EST ENTRY
          ERRNZ  EQAE-1      CODE ASSUMES *EQAE* = 1
 FCM6     LJM    ICRA+1      RETURN 
 FCT      SPACE  4,10 
**        FCT - FIND CONTROLWARE TABLE ENTRY. 
* 
*         ENTRY  (T4) = CHANNEL NUMBER. 
* 
*         EXIT   (T3) = CHANNEL NUMBER MODULO 5 + *CM*. 
*                (T7) = WORD OFFSET RELATIVE TO FWA OF CONTROLWARE
*                       TABLE.
*                (CM - CM+1) = FWA OF CONTROLWARE TABLE.
* 
*         USES   T3, T4, T6 - CM+2. 
  
  
 FCT      CON    0           ENTRY
          LDD    T4          STORE CHANNEL NUMBER 
          RAM    FCTA 
          FNC    FCAL,CH     ISSUE SHORT AUTOLOAD 
 FCTA     EQU    *-2
          LDC    CHTP        READ CHANNEL TABLE POINTER 
          CRD    CM-2 
          LDN    2*CTALL-1   INITIALIZE WORD OFFSET 
          STD    T7 
 FCT1     AOD    T7          INCREMENT WORD OFFSET
          LCN    5
          RAD    T4 
          PJN    FCT1        IF CORRECT WORD NOT REACHED
          ADN    CM+5        SAVE BYTE NUMBER + *CM*
          STD    T3 
          UJN    FCM6        RETURN 
          SPACE  4,10 
          ERRNG  10000-*     OVERFLOW 
          BSS    10000-*     SPARES 
          CON    DII-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          CON    DEEC        (T2) = DEEC
          ERRNZ  LN-*        INCORRECT *7II* OVERLAY LENGTH 
          QUAL   *
 7JI      MSOVL  7702,T2,DSFA+4,(ISSUE RELOAD MESSAGE.) 
          SPACE  4,10 
***       ISSUE RELOAD MESSAGE. 
*         R. M. DANISCH.     83/10/11.
 7JI      SPACE  4,10 
***              *7JI* IS CALLED BY *7II* TO ISSUE A MESSAGE TO THE 
*         SYSTEM CONTROL POINT TO SHOW THE OPERATOR WHAT CHANNEL OR 
*         CONTROL MODULE IS HAVING ITS CONTROLWARE RELOADED.  *7JI* 
*         THEN CALLS *7HI* TO BEGIN THE ACTUAL RELOAD.
 IRM      SPACE  4,30 
**        IRM - ISSUE RELOAD MESSAGE. 
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = HEDR+7. 
*                (T3) = ADDRESS + *CM* OF BYTE CONTAINING RELOAD FLAGS. 
*                (T4) = CONTROL MODULE ACCESS INDICATOR.  FOR CONTROL 
*                       MODULE RELOADS, 1 INDICATES THE PRIMARY CHANNEL 
*                       SHOULD BE USED FOR RELOAD.  0 INDICATES 
*                       SECONDARY CHANNEL SHOULD BE USED.  THIS CELL IS 
*                       UNUSED FOR NON-CONTROL MODULE RELOADS.
*                (T5) = CONTROL MODULE EST ORDINAL IF C/M RELOAD. 
*                (T6 - T7) = ADDRESS OF RELOAD INTERLOCK WORD.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (MB+2) = ORIGINAL (T3 - T7). 
*                (MB+3 - MB+5) = LAST THREE WORDS OF DETAILED STATUS. 
* 
*         EXIT   TO *7HI*.
*                (T3) = UNCHANGED.
*                (T4) = UNCHANGED.
*                (T5) = SYSTEM CP *MS2W* ADDRESS. 
*                (T6 - T7) = UNCHANGED. 
*                (MB+2) = UNCHANGED.
*                (MB+3 - MB+5) = UNCHANGED. 
* 
*         USES   T5, CM - CM+4. 
* 
*         MACROS MSERR. 
  
  
 DJI      ENTRY              *7JI* ENTRY
  
 IRM      LDI    T1 
          SHN    0-1
          LPN    3
          LMN    3
          NJN    IRM1        IF NOT CONTROL MODULE RELOAD 
          LDC    2REQ        CONVERT MESSAGE FOR C/M RELOAD 
          STM    IRMA+5 
          UJN    IRM2        CONVERT EST ORDINAL
  
 IRM1     LDI    T2          GET CHANNEL NUMBER 
          SHN    -6 
          STD    T5 
          LDC    2R 0 
          STM    IRMA+6 
 IRM2     LDD    T5          CONVERT CHANNEL OR EST ORDINAL TO DISPLAY
          LPN    7
          SHN    6
          RAM    IRMA+7 
          LDD    T5 
          SHN    -3 
          LPN    7
          LMD    T5 
          LPN    77 
          LMD    T5 
          RAM    IRMA+6 
          LDN    NCPL        WRITE MESSAGE TO SYSTEM CONTROL POINT
          CRD    CM 
          AOD    CM+1 
          SHN    7
          ADN    MS2W 
          STD    T5 
          CWM    IRMA,TR
          MSERR  7HI         EXECUTE *7HI*
  
  
 IRMA     DATA   C*RELOADING CH000 CONTROLWARE.*
 IRM      SPACE  4,10 
          ERRNG  10000-*     OVERFLOW 
          BSS    10000-*     SPARES 
          CON    DJI-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          CON    HEDR+7      (T2) = POINTER TO CHANNEL NUMBER 
          ERRNZ  LN-*        INCORRECT *7JI* OVERLAY LENGTH 
          QUAL   *
 7KI      MSOVL  7567,T2,DSFA+4,(EXECUTE LEVEL 1 DIAGNOSTICS.)
          SPACE  4,10 
***       EXECUTE LEVEL 1 DIAGNOSTICS.
*         R. M. DANISCH.     83/10/17.
          SPACE  4,10 
***              *7KI* IS CALLED BY *7EO* FOR UNRECOVERED ERRORS ON 
*         ISD DEVICES.  IT ISSUES A SPINUP COMMAND TO EXECUTE 
*         LEVEL 1 DIAGNOSTICS IN THE CONTROL MODULE.  FOLLOWING 
*         COMPLETION OF THE DIAGNOSTICS EXECUTION, *7EP* IS ENTERED 
*         TO ISSUE A BML MESSAGE NOTING DIAGNOSTIC RESULTS FOR *HPA*. 
          SPACE  4,10 
*         GENERATE LINKED LIST OF CHANNEL INSTRUCTIONS. 
  
 FWDL$    EQU    1           SELECT FORWARD LINKING 
          RICHL 
 7KI      SPACE  4,10 
**        EXD - EXECUTE LEVEL 1 DIAGNOSTICS.
* 
*         ENTRY  (T1) = DEDT. 
*                (T2) = FIRST CHANNEL INSTRUCTION ADDRESS.
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (DEDT) = ERROR PROCESSING CONTROL WORD.
*                (MSGH - MSGH+4) = *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (DSFA - DSFA+4) = FIRST WORD OF DETAILED STATUS. 
*                (MB+2 - MB+5) = DETAILED STATUS TAKEN BY *7CI*.
* 
*         EXIT   (T4 - T7) = UNCHANGED. 
*                (MSGH - MSGH+4) = UNCHANGED. 
*                (HEDR - HEDR+11) = BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (DSFA - DSFA+23) = DETAILED STATUS TAKEN BY *7KI*. 
*                (MB+2 - MB+5) = DETAILED STATUS TAKEN BY *7KI*.
* 
*         USES   T0 - T2, CM - CM+4.
* 
*         CALLS  FNC. 
* 
*         MACROS DELAY, MSERR, PAUSE. 
  
  
 DKI      ENTRY              *7KI* ENTRY
  
          LDI    T1          CHECK INITIAL CALL 
          LPN    20 
          NJN    EXD1        IF FIRST FAILURE MESSAGE ISSUED
          LDM    ERXA 
          STI    D1          SAVE ERROR RETURN ADDRESS
          MSERR  7KI,*
          STM    ERR2+1      MODIFY ERROR PROCESSOR CALL
          LDC    ERR2 
          STM    ERXA 
          LDN    20          SET RETURN TO ERROR PROCESSOR
          RAI    T1 
          LJM    LEP         ISSUE FIRST FAILURE MESSAGE
  
 EXD1     LDI    D1          RESTORE ERROR RETURN ADDRESS 
          STM    ERXA 
          LCN    20          CLEAR RETURN TO ERROR PROCESSOR
          RAI    T1 
          MSERR  7SI,*       RESTORE ERROR PROCESSOR CALL 
          STM    ERR2+1 
          LDN    0
 EXD2     RAD    T2          MODIFY CHANNEL INSTRUCTIONS
          LDI    T2 
          LPN    37 
          STD    T0 
          LDD    T4 
          SBD    T0 
          RAI    T2 
          LDD    T0 
          NJN    EXD2        IF MORE INSTRUCTIONS TO MODIFY 
  
*         ISSUE SPINUP FUNCTION TO EXECUTE LEVEL ONE DIAGNOSTICS. 
  
 EXD3     LDN    0
          STD    CM          INITIALIZE *FCSU* TIMEOUT FLAG 
          STD    T2          INITIALIZE CHANNEL PARITY RETRY COUNT
          LDC    EXD5 
          STM    ERRA        SET ERROR EXIT ADDRESS 
          LDN    FCSU        ISSUE SPINUP FUNCTION
          RJM    FNC
          LDN    1           OUTPUT PARAMETER 
          OAM    HEDR+3,CH
          NJN    EXD5        IF INCOMPLETE TRANSFER 
 EXD4     SBN    1
          ZJN    EXD5        IF TIMEOUT 
          FJM    EXD4,CH     IF CHANNEL FULL
          AOD    CM          INDICATE NO ERROR ON *FCSU*
 EXD5     DCN    CH+40
  
*         TAKE GENERAL STATUS.  IF STATUS SHOWS SPINUP STILL IN 
*         PROGRESS, LOOP ISSUING SPINUP AND GENERAL STATUS FUNCTIONS
*         UNTIL DIAGNOSTICS COMPLETE.  IF GENERAL STATUS CANNOT BE
*         TAKEN, EXIT TO *7EP*. 
  
          LDC    EXD11       SET ERROR EXIT ADDRESS 
          STM    ERRA 
 EXD6     AOD    T2          INCREMENT CHANNEL PARITY RETRY COUNT 
          LMN    CHRT+1 
          ZJN    EXD7        IF CHANNEL PARITY RETRY LIMIT REACHED
          LDN    FCGS        ISSUE GENERAL STATUS FUNCTION
          RJM    FNC
          LDN    1           INPUT GENERAL STATUS 
          IAM    DEGS,CH
          ZJN    EXD9        IF DATA TRANSFER COMPLETE
 EXD7     LJM    EXD11       CALL *7EP* 
  
 EXD8     LJM    EXD3        REISSUE SPINUP FUNCTION
  
 EXD9     STD    T2          CLEAR CHANNEL PARITY RETRY COUNT 
          LDD    CM 
          SFM    EXD6,CH     IF CHANNEL PARITY ERROR
          ZJN    EXD10       IF *FCSU* TIMED OUT
          LDM    DEGS 
          STM    DDMD+4      SET GENERAL STATUS IN MESSAGE
          LMN    2
          NJN    EXD10       IF NOT BUSY STATUS 
          DELAY  1*8D        DELAY FOR 1 MILLISECOND
          PAUSE 
          LDD    CM+1 
          LMN    ORET 
          NJN    EXD8        IF NOT OPERATOR OVERRIDE 
  
*         TAKE DETAILED STATUS. 
  
 EXD10    AOD    T2          INCREMENT CHANNEL PARITY RETRY COUNT 
          LMN    CHRT+1 
          ZJN    EXD11       IF CHANNEL PARITY RETRY LIMIT REACHED
          LDN    FCDS        ISSUE DETAILED STATUS
          RJM    FNC
          LDN    DSLN        INPUT DETAILED STATUS
          IAM    DSFA,CH
          NJN    EXD11       IF DATA TRANSFER ERROR 
          SFM    EXD10,CH    IF CHANNEL PARITY ERROR
          LDN    DSLN/5 
          STD    T2 
          LDD    MA 
          ADN    2           SAVE NEW DETAILED STATUS 
          CWM    DSFA,T2
          LDC    /COMSDFS/RS0200+/COMSDFS/D6DJ*400  SET SYMPTOM CODE
          STM    HEDR+1 
          UJN    EXD12       CALL *7EP* 
  
 EXD11    DCN    CH+40
          LDM    DEST        INHIBIT BML MESSAGE
          LPC    3777 
          STM    DEST 
 EXD12    MSERR  7EP         EXECUTE *7EP*
 EXD      SPACE  4,10 
          HERE               TERMINATE LINKED CHANNEL INSTRUCTIONS
 EXD      SPACE  4,10 
          ERRNG  10000-*     OVERFLOW 
          BSS    10000-*     SPARES 
          CON    DKI-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEDT        (T1) = DEDT
          CON    CH01$       (T2) = FIRST CHANNEL INSTRUCTION ADDRESS 
          ERRNZ  LN-*        INCORRECT *7KI* OVERLAY LENGTH 
          QUAL   *
 7SI      MSOVL  7733,T2,DSFA+4,(STATUS PROCESSOR.) 
          SPACE  4
***       MASS STORAGE STATUS PROCESSOR.
*         R. J. THIELEN.     75/11/20.
*         W. E. GOEBEL.      77/01/24.
 7SI      SPACE  4,10 
***              *7SI* IS CALLED BY *7EP* TO PERFORM ADDITIONAL 
*         DETAILED STATUS PROCESSING.  IF A CORRECTION VECTOR IS
*         PROVIDED IN DETAILED STATUS, *7SI* CORRECTS THE ERROR IN THE
*         READ BUFFER AND THEN EXITS TO *7EQ* TO COMPLETE ERROR 
*         RECOVERY.  FOR OTHER ERRORS, *7SI* REENTERS THE DRIVER AND
*         ISSUES A *CONTINUE* FUNCTION CAUSING THE CONTROLLER TO RETRY
*         THE PREVIOUS OPERATION. 
 DSI      SPACE  4
**        DSI - MAIN ROUTINE. 
* 
*         ENTRY  (T1) = DEGS. 
*                (T2) = DERW. 
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (DEGS) = GENERAL STATUS. 
*                (HEDR - HEDR+11) = BML MESSAGE HEADER. 
*                (HEDR+12 - HEDR+16) = FIRST WORD OF DETAILED STATUS. 
*                (MB+3 - MB+5) = LAST THREE WORDS OF DETAILED STATUS. 
* 
*         EXIT   TO *6DI* IF CONTINUE FUNCTION TO BE ISSUED.
*                TO *7EQ* IF ERROR CAN BE CORRECTED ON THE FLY. 
*                (T4 - T7) = UNCHANGED. 
*                (MB+3 - MB+5) = UNCHANGED. 
* 
*         USES   CM, CM+1.
  
  
 DSI      ENTRY              *7SI* ENTRY
  
          LDI    T2 
          ZJN    DSI1        IF READ
          LDN    WDS4-RDS3   SET EXIT ADDRESS FOR CONTINUE
 DSI1     STD    CM+1 
          LDI    T1 
          LPN    40 
          NJN    DSI2        IF CORRECTABLE ON THE FLY
          LDN    FCCO 
          LJM    RDS3,CM+1   ISSUE CONTINUE FUNCTION
  
*         PERFORM ERROR CORRECTION. 
  
 DSI2     LDD    MA 
          ADN    3
          CRM    DSFA+5,TR   READ IN REMAINDER OF DETAILED STATUS 
          ERRNG  *-DSFA-DSLN DATA READ IN DESTROYS CODE 
          LDM    DSFA+14     SET BUFFER ADDRESS 
          LPC    777
          ADM    RDSB 
          STD    CM 
          LDM    DSFA+15     PERFORM CORRECTION ON FIRST WORD 
          LMI    CM 
          STI    CM 
          AOD    CM 
          LDM    DSFA+16     PERFORM CORRECTION ON SECOND WORD
          LMI    CM 
          STI    CM 
          LJM    LEP         CALL *7EQ* TO REPORT RECOVERY
          SPACE  4
          ERRNG  10000-*     *7SI* HAS OVERFLOWED 
          BSS    10000-*     SPARES (ADJUST ORIGIN BY 5 AS REQUIRED)
          CON    DSI-1       ENTRY ADDRESS - 1
          CON    DEGS        (T1) = DEGS
          CON    DERW        (T2) = DERW
          ERRNZ  LN-*        INCORRECT *7SI* OVERLAY LENGTH 
          QUAL   *
 7WI      MSOVL  7732,T1,DEEC,(WRITE ERROR PROCESSOR.)
          SPACE  4
***       WRITE ERROR PROCESSOR.
*         W. E. GOEBEL.      77/01/24.
          SPACE  4
***              THE WRITE ERROR PROCESSOR IS CALLED ONLY WHEN
*         WRITING IN FULL TRACK MODE UTILIZING THE 715X CONTROLLER
*         OR THE FSC CHANNEL ADAPTOR.  *7WI* IS CALLED TO 
*         RETRY THE CURRENT SECTOR AFTER THE ERROR PROCESSOR
*         HAS INITIATED A RETRY OF THE PREVIOUS SECTOR. THE PREVIOUS
*         SECTOR HAD BEEN DETECTED TO BE IN ERROR BY A FUNCTION 
*         TIME OUT. 
* 
*                IF THE PREVIOUS SECTOR WAS SUCCESSFULLY WRITTEN
*         AND THE CURRENT SECTOR DATA STILL EXISTS (BUFFER SPECIFIED
*         IN WDSE) NORMAL PROCESSING WILL RESUME AT THE CURRENT SECTOR. 
* 
*                IF NO BUFFER WAS SPECIFIED VIA WDSE THE CURRENT SECTOR 
*         DATA DOES NOT EXIST IN THE PPU FOR RETRY. IN THIS CASE
*         CONTROL WILL BE RETURNED TO THE CALLING PROGRAM WITH BIT 11 
*         OF THE ACCUMULATOR (AND *RDCT*) SET.
* 
*         ENTRY  (T1) = RDS.
*                (T2) = 0 IF PREVIOUS SECTOR ERROR WAS RECOVERED. 
*                (RDS) = *WDS* EXIT ADDRESS.
*                (RDSB) = BUFFER ADDRESS. 
*                (WDSE) = WRITE ERROR BUFFER ADDRESS (IF ANY).
*                (DEEC) = ERROR CODE. 
* 
*         EXIT   (A) = 1/1, 5/0, 12/(RDCT)
*                (RDCT) = 1/0, 1/1, 1/F, 3/0, 6/E.
*                         F = 1 IF CURRENT SECTOR DATA WAS DESTROYED BY 
*                             PREVIOUS SECTOR RECOVERY.  CALLER SHOULD
*                             REISSUE CURRENT SECTOR WRITE REQUEST. 
*                         E = ERROR CODE. 
*                (T7) = CURRENT SECTOR. 
* 
*         USES   T1, T7.
* 
*         MACROS ENDMS. 
 PWI      SPACE  4,10 
 DWI      ENTRY              *7WI* ENTRY
  
 PWI      AOD    T7          ADVANCE TO CURRENT SECTOR
          LDM    RDSB        RESTORE BUFFER ADDRESS 
          STM    WDSC 
          LDI    T1          RESTORE EXIT ADDRESS 
          STD    T1 
          STM    WDS
          LDD    T2 
          NJN    PWI1        IF UNRECOVERED ERROR 
          LDD    TH          SET *REISSUE CURRENT SECTOR* FLAG
          RAM    PWIA 
          LDM    WDSE 
          NJN    PWI2        IF ERROR RECOVERY BUFFER SPECIFIED 
          LDM    UERR 
          ERRNZ  EPDE-400-EPSM  CODE ASSUMES VALUES 
          SHN    21-10
          MJN    PWI1        IF *ENDMS* DISABLED
          ENDMS 
 PWI1     LDM    DEEC        SET ERROR PROCESSOR INTERFACE WORD 
          LMC    1S17D+1S10D
 PWIA     EQU    *-1
          STM    RDCT 
          LJM    0,T1        RETURN 
  
 PWI2     LJM    LDA1        RETRY CURRENT SECTOR 
  
  
          ERRNG  10000-*     *7WI* HAS OVERFLOWED 
          BSS    10000-*     SPARES (ADJUST ORIGIN BY 5 AS REQUIRED)
          CON    DWI-1       (T0) = ENTRY ADDRESS - 1 
          CON    RDS         (T1) = *RDS* 
          ERRNZ  LN-*        INCORRECT *7WI* OVERLAY LENGTH 
          QUAL   *
          TITLE  0TI - TRACK FLAW PROCESSOR.
          QUAL   0TI
          IDENT  0TI,FFIX   "HN" TRACK FLAW PROCESSOR.
*COMMENT  6DI - "HN" TRACK FLAW PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 FFI      SPACE  4
***       TRACK FLAW PROCESSOR. 
*         R. J. THIELEN.     75/11/20.
*         W. E. GOEBEL.      77/01/24.
*         J. R. HILDEBRAND.  82/01/12.
 FFI      SPACE  4
***              THE TRACK FLAW PROCESSOR READS FLAW MAPS FROM DISK 
*         PACKS AND FLAWS LOGICAL TRACKS CORRESPONDING TO THE PHYSICAL
*         FLAW ADDRESSES RECORDED THERE.
* 
* 
**        ENTRY CONDITIONS. 
* 
*         ((LA)-1) = EQUIPMENT. 
* 
*         THE TRACK FLAW PROCESSOR IS CALLED IN THE SAME MANNER AS
*         LOCATION FREE OVERLAYS. 
* 
* 
*         EXIT CONDITIONS.
* 
*         (A) = NON-ZERO IF FLAWING INCOMPLETE. 
*         (T5) = EQUIPMENT EST ORDINAL. 
*         TRACKS FLAWED IN TRT IF POSSIBLE TO DO SO.
* 
*         CALLS  RDS. 
* 
*         USES   DIRECT CELLS 00 - 17, BFMS - BFMS+501. 
* 
* 
*         NOTES - 
* 
*         MODIFIES READ FUNCTION CODE IN MAIN DRIVER AND CLEARS 
*         *MSD* SO THAT DRIVER WILL BE RELOADED BY A *SMS*. 
* 
*         PHYSICAL FLAW INFORMATION IS RECORDED IN THE UTILITY
*         SECTOR IN 24 BIT FORMAT AS FOLLOWS
* 
*         1/S, 1/T, 10/CY, 6/HD, 6/SC 
* 
*         WHERE   S = SECTOR FLAW IF SET = 1
*                 T = TRACK FLAW IF SET = 1 
*                CY = CYLINDER
*                HD = HEAD
*                SC = SECTOR
* 
*         THE MAIN OVERLAY, 0TI, CONTAINS COMMON SUBROUTINES AND
*         PROCESSORS FOR THE FOLLOWING DEVICES -
* 
*                DI 
*                DJ 
* 
*         AN AUXILLIARY OVERLAY, 0TJ, CONTAINS PROCESSORS FOR - 
* 
*                DK 
*                DL 
*                DM 
*                DQ 
*                DR 
*                DX 
*                DY 
*                DZ 
*                DA 
*                DB 
*                DC 
* 
*         THE FOLLOWING TYPES OF DEVICES DO NOT HAVE FLAW MAPS RECORDED 
*         ON DISK, SO *0TI* IS IMMEDIATELY EXITED - 
* 
*                DD 
*                DG 
          SPACE  4
**        DIRECT LOCATION ASSIGNMENTS.
  
  
 T8       EQU    16          TEMPORARY
 T9       EQU    17          TEMPORARY
          SPACE  4
*         REDEFINE INSTRUCTIONS FOR LOCATION FREE EXECUTION.
  
          RIREL              REDEFINE INSTRUCTIONS
 FFI      SPACE  4,10 
          ORG    5
 FFI      SUBR               ENTRY/EXIT 
          RJM    PRS         PRESET FLAW PROCESSING 
          ZJN    FFIX        IF NO FLAW MAP ON DISK TO READ 
          MJN    FFIX        IF NO ALGORITHM INDEX
  
*         MAIN FLAW PROCESSING LOOP.
  
 FFI1     LDC    0
*         LDC    NTDA/2      (DA DEVICE)
 FFID     EQU    *-1
          RJM    POM         PROCESS ONE FLAW MAP 
 FFIA     UJN    FFI2        CONTINUE 
*         LDD    T9          (PROCESS SECOND *DA* FLAW MAP) 
          ADC    -NTDA/2
          STD    T9 
          LDN    0
          RJM    POM         PROCESS FLAW MAP FOR SECOND *DA* VOLUME
 FFI2     LDC    **          SINGLE UNIT SECTOR LIMIT 
 FFIB     EQU    *-1
          RAD    T7          ADVANCE LOGICAL SECTOR ADDRESS 
          SBM.   SLM
          MJN    FFI1        IF MORE UNITS FOR THIS DEVICE
 FFIC     UJN    *+2         CONTINUE 
*         RJM    FCE         (*DA* DEVICE)
          VFD    12/FCE 
          LDD    T8          ERROR STATUS 
          UJN    FFIX        EXIT 
 POM      SPACE  4,10 
**        POM - PROCESS ONE FLAW MAP. 
* 
*         ENTRY  (A) = *NTDA*/2, IF FIRST CALL FOR A *DA* DEVICE. 
*                      0 IF NOT.
*                T9 = LOGICAL TRACK NUMBER OF UTILITY FLAW SECTOR.
* 
*         EXIT   T8 INCREMENTED IF ERROR. 
* 
*         CALLS  RDS, FLAW PROCESSORS.
  
  
 POM2     AOD    T8          COUNT ERROR
  
 POM      SUBR
          STM    POMA+1      SET *DA* TRACK BIAS
          LDD    T9          SET DEADSTART CYLINDER TRACK ADDRESS 
          STD    T6 
          LDC    BFMS        RESET UTILITY MAP INDEX
          STD    T3 
          RJM.   RDS         READ UTILITY SECTOR
          SHN    -17D 
          STD    T6          SAVE STATUS
          ENDMS 
          LDD    T6 
          NJN    POM2        IF ERROR IN READ 
  
*         CONVERT FLAWS FROM PHYSICAL TO LOGICAL. 
  
 POM1     LDI    T3          READ TRACK ADDRESS 
          ZJN    POMX        IF NO MORE FLAWS 
          LPC    1777 
 POMA     ADC    0
*         ADC    NTDA/2      (FIRST CALL FOR *DA* DEVICE) 
          SHN    1
          STD    T6 
 POMB     RJM    **          PROCESS FLAW 
          LDN    2           ADVANCE UTILITY SECTOR INDEX 
          RAD    T3 
          UJN    POM1        CONTINUE PROCESSING
 FLT      SPACE  4
**        FLT - FLAW LOGICAL TRACK. 
* 
*         ENTRY  (T6) = LOGICAL TRACK.
* 
*         EXIT   LOGICAL TRACK FLAWED IF WITHIN TRT.
* 
*         USES   CM+1 - CM+3. 
  
  
 FLT      SUBR               ENTRY/EXIT 
          LDD    T6          CHECK IF TRACK WITHIN TRT
          STD    CM+2 
          ADC    -**
 FLTA     EQU    *-1         NUMBER OF TRACKS 
          PJN    FLTX        IF BEYOND TRT
          LDN    STFS        SELECT TRACK FLAW FUNCTION 
          STD    CM+3 
          LDD    T5          SET EQUIPMENT
          STD    CM+1 
          MONITOR STBM       SET TRACK FLAW 
          UJN    FLTX        EXIT 
 PRS      SPACE  4,10 
**        PRS - PRESET FLAW PROCESSOR.
* 
*         LOAD DRIVER AND PRESET FOR UTILITY SECTOR READ. 
*         LOAD AUXILLIARY OVERLAY IF NEEDED.
*         MODIFY CODE FOR PROPER DEVICE.
* 
*         EXIT   (T9) = LOGICAL TRACK OF UTILITY SECTOR.
*                (T7) = LOGICAL SECTOR OF UTILITY SECTOR. 
*                (T8) = 0.
*                (A)  .LT. 0 IF NO ALGORITHM INDEX IN MST.
*                (A)  .EQ. 0 IF NO FLAW MAP ON DISK TO READ.
*                (T5) = EQUIPMENT.
  
  
 PRS3     RJM.   EXR
          EXECUTE  0TJ,=     LOAD AUXILLIARY PROCESSOR OVERLAY
          LDC    -PFLA
          RAD    LA          RESTORE 0TI LOAD ADDRESS 
 PRS4     LDM    -1 
          STD    T5          SET EST ORDINAL
          SETMS  PIO,(DF,NR,NS) 
          LDC    ** 
 PRSB     EQU    *-1
          STD    T7          SET SECTOR NUMBER
          LDC    ** 
 PRSC     EQU    *-1
          STD    T9          SET TRACK NUMBER 
          LDN    0
          STD    T8          PRESET RETURN STATUS 
          LDC    LDNI+FCRU   SET UTILITY SECTOR FUNCTION CODE 
          STM.   RDSA 
  
 PRS      SUBR
  
 PFLA     BSS    0           AUXILLIARY PROCESSOR OVERLAY ORIGIN
  
          LDM    -1          SET EST ORDINAL
          STD    T5 
          SFA    EST
          ADK    EQDE 
          CRD    CM          READ EST ENTRY 
          LDD    CM+4 
          SHN    3
          ADN    DILL        READ ALGORITHM INDEX 
          CRD    CM 
          SBN    DILL-TDGL
          CRD    CM-1 
          LCN    0           SET NUMBER OF TRACKS 
          LMD    CM-1+2 
          SHN    2
          STM    FLTA        STORE IN *FLT* SUBROUTINE
  
*         SET ALGORITHM INDEX DEPENDENT PARAMETERS. 
  
          LDD    CM+4 
          LPN    77 
          SBN    1
          MJN    PRSX        IF NO ALGORITHM INDEX
          STD    T0 
          SHN    2           SET *TALP* OFFSET
          ADD    T0 
          ADD    LA 
          STD    T3 
          LDM.   TALP,T3     SET LOGICAL TRACK
          ZJN    PRSX        IF NO FLAW MAP ON DISK TO READ 
          STM    PRSC 
          LDM.   TALP+1,T3   SAVE LOGICAL SECTOR
          STM    PRSB 
          LDM.   TALP+2,T3   SET FLAW PROCESSOR 
          STM    POMB+1 
          LDM.   TALP+3,T3   SET SINGLE UNIT SECTOR LIMIT 
          STM    FFIB 
          LDD    T0 
          SBN    AIDA-1 
          NJN    PRS1        IF NOT A *DA* DEVICE 
          LDC    NTDA/2      SET UP FOR *DA* PROCESS
          STM    FFID 
          LDC    LDDI+T9
          STM    FFIA 
          LDC    RJMI+LA
          STM    FFIC 
 PRS1     LDM.   TALP+4,T3
          NJN    PRS2        IF AUXILLIARY OVERLAY NEEDED 
          LJM    PRS4        LOAD DRIVER
  
 PRS2     LDC    PFLA 
          RAD    LA          SET LOAD ADDRESS FOR AUXILLIARY OVERLAY
          LDM.   TALP+4,T3
          SHN    6
          ADN    1R0
          SHN    18D-6
          LJM    PRS3-PFLA   LOAD AUXILLIARY PROCESSOR OVERLAY
 TALP     SPACE  4
**        TALP - TABLE OF ALGORITHM INDEX DEPENDENT PARAMETERS. 
* 
*         ENTRY = 5 BYTES.
*         WORD 1 = LOGICAL TRACK OF FLAW INFORMATION. 
*         WORD 2 = LOGICAL SECTOR OF FLAW INFORMATION.
*         WORD 3 = FLAW PROCESSOR ADDRESS.
*         WORD 4 = SINGLE UNIT SECTOR LIMIT.
*         WORD 5 = PROCESSOR OVERLAY NAME.
  
  
 TALP     INDEX 
          INDEX  5*AIDI-5,(7150,1,FPI,SLDI,0) 
          INDEX  5*AIDJ-5,(7154,1,FPJ,SLDJ,0) 
          INDEX  5*AIDK-5,(7150,2,FPK,SLDK,2RTJ)
          INDEX  5*AIDL-5,(7154,2,FPL,SLDL,2RTJ)
          INDEX  5*AIDM-5,(7223,20,FPM,SLDM,2RTJ) 
          INDEX  5*AIDQ-5,(7222,41,FPQ,SLDQ,2RTJ) 
          INDEX  5*AIDR-5,(0,0,0,0,0) 
          INDEX  5*AIDD-5,(0,0,0,0,0) 
          INDEX  5*AIDG-5,(0,0,0,0,0) 
          INDEX  5*AIDX-5,(7150,1,FPX,SLDX,2RTJ)
          INDEX  5*AIDY-5,(7134,1,FPY,SLDY,2RTJ)
          INDEX  5*AIDZ-5,(6136,1,FPZ,SLDZ,2RTJ)
          INDEX  5*AIDA-5,(6137,1,FPA,SLDA,2RTJ)
          INDEX  5*AIDB-5,(7222,204,FPB,SLDB,2RTJ)
          INDEX  5*AIDC-5,(7352,1,FPC,SLDC,2RTJ)
          INDEX  5*AIDS-5 
 FPX      SPACE  4,10 
**        FLAW PROCESSORS.
* 
*         ENTRY  (T3) = ADDRESS OF PHYSICAL ADDRESS.
*                (A) = (T6) = CYLINDER * 2. 
* 
*         EXIT   LOGICAL TRACK CORRESPONDING TO THE PHYSICAL ADDRESS
*                FLAWED IN THE TRT. 
* 
*         MAY USE  T1, T2, T6, T7, CM - CM+4. 
* 
*         CALLS  FLT. 
 FPI      SPACE  4
**        FPI - FLAW PROCESSOR FOR *DI* EQUIPMENTS. 
  
  
 FPI      SUBR               ENTRY/EXIT 
          RAD    T6 
          LDM.   1,T3        TRACK AND SECTOR 
          STD    T2 
          SHN    -6 
          SBN    11 
          MJN    FPI1        IF LOWER HALF OF CYLINDER
          AOD    T6 
 FPI1     LDD    T2          SET EVEN ODD PHYSICAL SECTOR 
          LPN    1
          SHN    1
          RAD    T6 
          RJM    FLT         FLAW TRACK 
          LDI    T3          CHECK FOR TRACK MODE FLAW
          SHN    21-12
          PJN    FPIX        IF NOT TRACK MODE FLAW 
          LDD    T6 
          LMN    2           SELECT OTHER LOGICAL TRACK 
          STD    T6 
          RJM    FLT         FLAW LOGICAL TRACK 
          UJN    FPIX        EXIT 
 FPJ      SPACE  4,10 
**        FPJ - FLAW PROCESSOR FOR *DJ* EQUIPMENTS. 
  
  
 FPJ      SUBR               ENTRY/EXIT 
          LDM.   1,T3        SET EVEN/ODD TRACK 
          LPN    1
          RAD    T6 
          RJM    FLT         FLAW LOGICAL TRACK 
          LDI    T3          CHECK FOR TRACK MODE FLAW
          SHN    21-12
          PJN    FPJX        IF NOT TRACK MODE FLAW 
          LDD    T6          SELECT OTHER LOGICAL TRACK 
          LMN    1
          STD    T6 
          RJM    FLT         FLAW LOGICAL TRACK 
          UJN    FPJX        EXIT 
          SPACE  4
          ERRNG  473-*       OVERLAY OVERFLOWS PRU
          TITLE  0TJ - TRACK FLAW PROCESSOR FOR 33502.
          IDENT  0TJ,FFIX   "HN" TRACK FLAW PROCESSOR.
*COMMENT  6DI - "HN" TRACK FLAW PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 ZTJ      SPACE  4,10 
***       TRACK FLAW PROCESSOR AUXILLIARY OVERLAY.
*         J. D. MEYER        80/12/12.
*         J. R. HILDEBRAND   82/01/12.
 ZTJ      SPACE  4,10 
***       ADDITIONAL FLAW PROCESSORS FOR *0TI*. 
* 
*         CONTAINS FLAW PROCESSORS FOR THE FOLLOWING EQUIPMENTS - 
* 
*                DK 
*                DL 
*                DM 
*                DQ 
*                DX 
*                DY 
*                DZ 
*                DA 
*                DB 
*                DC 
* 
*         ENTRY  (T3) = ADDRESS OF PHYSICAL ADDRESS.
*                (A) = (T6) = CYLINDER * 2. 
* 
*         EXIT   LOGICAL TRACK CORRESPONDING TO THE PHYSICAL ADDRESS
*                FLAWED IN THE TRT. 
* 
*         MAY USE  T1, T2, T6, T7, CM - CM+4. 
* 
*         CALLS  CHS, FLT, PTF. 
          SPACE  4
          ORG    5
          LOC    PFLA+5 
 ZTJ      SUBR
          UJN    ZTJX        RETURN AFTER LOADING ROUTINES
 FPK      SPACE  4
**        FPK - FLAW PROCESSOR FOR *DK* EQUIPMENT.
  
  
 FPK5     ADN    2
          PJN    FPKX        IF IN GAP SECTOR 
 FPK6     RJM    FLT         FLAW LOGICAL TRACK 
  
 FPK      SUBR               ENTRY/EXIT 
          RAD    T6 
          LDI    T3 
          SHN    21-12
          MJN    FPK2        IF TRACK MODE FLAW 
          RJM    CHS         CONVERT HEAD GROUP AND SECTOR
 FPK1     LDC    -SLDK-2
          RAD    T2 
          MJN    FPK5        IF IN PREVIOUS TRACK 
          AOD    T6          ADVANCE TRACK
          UJN    FPK1 
  
 FPK2     RJM    PTF         PROCESS TRACK FLAW 
          UJN    FPKX        RETURN 
 FPL      SPACE  4
**        FPL - FLAW PROCESSOR FOR *DL* EQUIPMENTS. 
  
  
 FPL4     ADN    2
          PJN    FPLX        IF IN GAP SECTOR 
 FPL5     RJM    FLT         FLAW LOGICAL TRACK 
  
 FPL      SUBR               ENTRY/EXIT 
          LDI    T3 
          SHN    21-12
          MJN    FPL2        IF TRACK MODE FLAW 
          RJM    CHS         CONVERT HEAD GROUP AND SECTOR
 FPL1     LDC    -SLDL-2
          RAD    T2 
          MJN    FPL4        IF IN PREVIOUS TRACK 
          AOD    T6          ADVANCE TRACK
          UJN    FPL1 
  
 FPL2     RJM    FPY         PROCESS TRACK FLAW 
          UJN    FPLX        RETURN 
 FPM      SPACE  4,10 
**        FPM - FLAW PROCESSOR FOR *DM* EQUIPMENTS. 
  
  
 FPM      SUBR               ENTRY/EXIT 
          RJM    FLT         FLAW TRACK 
          AOD    T6 
          RJM    FLT         FLAW TRACK 
          UJN    FPMX        RETURN 
 FPQ      SPACE  4,10 
**        FPQ - FLAW PROCESSOR FOR *DQ* EQUIPMENTS. 
  
  
 FPQ      SUBR               ENTRY/EXIT 
          LDM.   1,T3 
          SHN    -6 
          SBN    24 
          MJN    FPQ1        IF IN FIRST HALF OF CYLINDER 
          AOD    T6 
 FPQ1     RJM    FLT         FLAW TRACK 
          UJN    FPQX        RETURN 
 FPX      SPACE  4,10 
**        FLAW PROCESSOR FOR *DX* EQUIPMENTS. 
  
  
 FPX      SUBR               ENTRY/EXIT 
          RAD    T6 
          RJM    PTF         PROCESS TRACK FLAW 
          UJN    FPXX        RETURN 
 FPY      SPACE  4,10 
**        FLAW PROCESSOR FOR *DY* EQUIPMENTS. 
  
  
 FPY2     RJM    FLT         FLAW LOGICAL TRACK 
  
 FPY      SUBR               ENTRY/EXIT 
          LDM.   1,T3 
          SHN    -6 
          SBN    11 
          MJN    FPY2        IF IN FIRST TRACK
          NJN    FPY1        IF IN SECOND TRACK 
          RJM    FLT         FLAW BOTH TRACKS 
 FPY1     AOD    T6 
          UJN    FPY2        FLAW SECOND TRACK
 FPZ      SPACE  4,10 
**        FLAW PROCESSOR FOR *DZ* EQUIPMENTS. 
  
  
 FPZ      SUBR               ENTRY/EXIT 
          LDM.   1,T3 
          SHN    -6 
          SBN    17 
          MJN    FPZ1        IF FIRST TRACK IN CYLINDER 
          AOD    T6          ADVANCE TRACK
 FPZ1     RJM    FLT         FLAW LOGICAL TRACK 
          UJN    FPZX        RETURN 
 FPA      SPACE  4,10 
**        FPA - FLAW PROCESSOR FOR *DA* EQUIPMENTS. 
  
  
 FPA      SUBR
          SHN    -1 
          STD    T6          SET LOGICAL TRACK = PHYSICAL CYLINDER
          RJM    FLT         PROCESS FLAW 
          UJN    FPAX        EXIT 
 FCE      SPACE  4,10 
**        FCE - FLAW DS AND CE TRACKS FOR *DA* DEVICE.
  
  
 FCE      SUBR
          LDD    T9 
          ADC    NTDA/2 
          LPC    3777 
          STD    T6          SET DEAD START TRACK ADDRESS 
          RJM    FLT         FLAW TRACK 
          SOD    T6 
          RJM    FLT
          LDD    T6 
          SHN    -1 
          STD    T6 
          RJM    FLT
          SOD    T6 
          RJM    FLT
          UJN    FCEX        RETURN 
 FPB      SPACE  4,10 
**        FPB - FLAW PROCESSOR FOR *DB* EQUIPMENTS. 
  
  
 FPB      SUBR
          LDM.   1,T3 
          SHN    -6 
          SBN    5
          MJN    FPB1        IF FIRST HALF OF CYLINDER
          AOD    T6 
 FPB1     RJM    FLT         ENTER FLAW 
          UJN    FPBX        RETURN 
 FPC      SPACE  4,10 
**        FLAW PROCESSOR FOR *DC* EQUIPMENTS. 
  
  
 FPC      SUBR               ENTRY/EXIT 
          LDM.   1,T3 
          SHN    -6 
          SBN    7
          MJN    FPC2        IF IN FIRST TRACK
          NJN    FPC1        IF IN SECOND TRACK 
          RJM    FLT         FLAW BOTH TRACKS 
 FPC1     AOD    T6 
 FPC2     RJM    FLT         FLAW LOGICAL TRACK 
          UJN    FPCX        FLAW SECOND TRACK
          SPACE  4,10 
**        FLAW SUBROUTINES. 
 CHS      SPACE  4,10 
**        CHS - CONVERT HEAD AND SECTOR TO RELATIVE SECTOR IN CYLINDER. 
* 
*         ENTRY  ((T3)+1) = 6/  HEAD,6/  SECTOR.
* 
*         EXIT   (T2) = RELATIVE SECTOR IN CYLINDER.
*                     = HEAD * 30B + SECTOR.
* 
*         USES   T1, T2.
  
  
 CHS      SUBR               ENTRY/EXIT 
          LDM.   1,T3        SET HEAD GROUP 
          SHN    -6 
          STD    T1 
          LDM.   1,T3        SET SECTOR 
          LPN    77 
          STD    T2 
 CHS1     SOD    T1 
          MJN    CHSX        IF END OF MULTIPLY 
          LDN    30 
          RAD    T2 
          UJN    CHS1        LOOP 
 PTF      SPACE  4,10 
**        PTF - PROCESS TRACK FLAW. 
* 
*         ENTRY  (T3) = ADDRESS OF PHYSICAL ADDRESS.
*                (T6) = PHYSICAL CYLINDER * 4.
* 
*         EXIT   LOGICAL TRACK FLAWED.
* 
*         USES   T1.
* 
*         CALLS  FLT. 
  
  
 PTF3     RJM    FLT         FLAW LOGICAL TRACK 
  
 PTF      SUBR               ENTRY/EXIT 
          LDM.   1,T3 
          SHN    -6 
          ADN    1
          STD    T1          HEAD GROUP + 1 
          UJN    PTF2        CONTINUE PROCESSING
  
 PTF1     AOD    T6          ADVANCE TRACK
 PTF2     LCN    5
          RAD    T1 
          MJN    PTF3        IF IN PREVIOUS TRACK 
          NJN    PTF1        IF NOT HEAD GROUP CROSSING TRACK BOUNDARY
          RJM    FLT         FLAW LOGICAL TRACK 
          AOD    T6 
          UJN    PTF3        FLAW SECOND TRACK
          SPACE  4
          ERRNG  473-*       OVERLAY OVERFLOWS PRU
  
          RSTR               RESTORE INSTRUCTIONS 
          TITLE  0PI - PACK SERIAL PROCESSOR. 
          QUAL   0PI
          IDENT  0PI,PRSX   "HN" PACK SERIAL PROCESSOR. 
*COMMENT  6DI - "HN" PACK SERIAL PROCESSOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       PACK SERIAL PROCESSOR.
*         R. J. THIELEN.     75/11/20.
*         W. E. GOEBEL.      78/03/06.
          SPACE  4
***              THE PACK SERIAL PROCESSOR PERFORMS ANY ONE OF THREE
*         DIFFERENT FUNCTIONS, DEPENDING UPON THE OPTION CHOSEN BY THE
*         CALLER. 
*         1)     IT READS THE PACK SERIAL NUMBER FROM A SPECIFIED DISK
*                PACK AND PLACES IT INTO BOTH ERRLOG AND BML MESSAGES 
*                WHICH ARE RETURNED TO THE CALLING PROGRAM. 
*         2)     IT LOADS AND MODIFIES THE MASS STORAGE DRIVER TO ALLOW 
*                THE CALLER TO READ AND WRITE PROTECTED SECTORS.
*         3)     IT READS THE DEADSTART SECTOR FROM A SPECIFIED DISK
*                DRIVE AND VERIFIES THAT IT IS VALID BY CHECKING THOSE
*                FIELDS IN THE SECTOR WHOSE CONTENTS ARE KNOWN AND
*                CONSTANT.  AN *ENDMS* IS NOT ISSUED IF THE SECTOR IS 
*                VALID, ALLOWING THE CALLER TO UPDATE AND REWRITE THE 
*                SECTOR BEFORE ANOTHER MAINFRAME CAN GAIN ACCESS TO THE 
*                DRIVE. 
          SPACE  4
*         REDEFINE INSTRUCTIONS FOR LOCATION FREE EXECUTION.
  
          RIREL              REDEFINE INSTRUCTIONS
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMSDFS 
 PRS      EJECT 
***       PRS - PRESET PACK SERIAL PROCESSOR. 
* 
*         ENTRY  ((LA)-1) = 3/ FC,9/ EQ.
*                EQ = EST ORDINAL.
*                FC = 0 IF TO READ PACK SERIAL NUMBER.
*                FC = 1 IF TO MODIFY DRIVER TO READ AND WRITE PROTECTED 
*                       SECTORS.
*                FC = 4 IF TO READ AND VERIFY THE DEADSTART SECTOR. 
* 
*         EXIT   (T5) = EST ORDINAL.
* 
*                FOR FC = 0,
*                (A) = MAIN PROCESSOR ENTRY ADDRESS.
*                (T6) = LOGICAL TRACK OF PACK SERIAL NUMBER.
*                (T7) = LOGICAL SECTOR OF PACK SERIAL NUMBER. 
*                PACK SERIAL NUMBER PROCESSOR INITIALIZED.
* 
*                FOR FC = 1,
*                DRIVER MODIFIED TO READ AND WRITE PROTECTED SECTORS. 
* 
*                FOR FC = 4,
*                (A) = 0 IF DEADSTART SECTOR LOADED AND VERIFIED. 
*                    = 1 IF MASS STORAGE ERROR OCCURRED WHILE READING 
*                        DEADSTART SECTOR.
*                    = 2 IF DEADSTART SECTOR FIELDS WERE NOT CORRECT. 
*                (T6) = LOGICAL TRACK OF DEADSTART SECTOR.
*                (T7) = LOGICAL SECTOR OF DEADSTART SECTOR. 
*                (BFMS - BFMS+501) = DEADSTART SECTOR, IF (A) = 0.
* 
*         USES   T3, T5 - T7, CM - CM+4.
* 
*         CALLS  C2D, RDS.
* 
*         MACROS ENDMS, SETMS.
  
  
          ORG    5
 PRS      SUBR               ENTRY/EXIT 
          LDD    LA          ABSOLUTIZE MESSAGE ADDRESSES 
          RAM    TDMA 
          LDD    LA 
          RAM    TDMA+1 
          LDM    -1          SET EST ORDINAL
          LPC    777
          STD    T5 
          STM    MSGB+5 
          SHN    -3          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          RJM    C2D
          STM    MSGA+1 
          LDD    T5          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          RAM    MSGA+2 
  
*         *SETMS* IS CHANGED TO SUPPRESS ERROR REPORTING OF NORMAL AND
*         NOT READY ERRORS WHILE READING BOTH THE DEADSTART SECTOR AND
*         THE PACK SERIAL NUMBER, PREVENTING UNNECESSARY ERROR MESSAGES 
*         FROM BEING ISSUED TO THE OPERATOR.  EXAMPLES OF UNNEEDED
*         ERROR MESSAGES ARE 1) READING THE DEADSTART SECTOR ON ISD AND 
*         844 PACKS WHICH HAVE NEVER HAD *CIP* INSTALLED, AND 2) TRYING 
*         TO READ THE PACK SERIAL NUMBER ON AN ISD PACK THAT DOES NOT 
*         HAVE ONE. 
  
          SETMS  PIO
          SETMS  =,PIO,(AR,DF,-RR,SM) 
          LDK    EPAR&EPDF&EPRR&EPSM
          STM.   UERR 
          LDM.   CHRV        SET ACCESS TO A DOWN DEVICE
          SCN    EPAD 
          LMN    EPAD 
          STM.   CHRV 
          LDC    LDNI+FCRF   SET READ FACTORY DATA FUNCTION 
          STM.   RDSA 
          LDD    CM+3        SET EQUIPMENT NAME IN MESSAGE
          LPC    3777 
          STM    MSGA 
          STM    MSGB+2 
          LDD    CM+4 
          SHN    3
          ADN    DILL        READ ALGORITHM INDEX 
          CRD    CM 
          SBN    DILL-MDGL   READ SECTOR LIMIT
          CRD    CM-1 
          LDD    CM-1+1      SET SINGLE UNIT SECTOR LIMIT 
          LPC    3777 
          STM    PSPB 
  
*         SET ALGORITHM INDEX DEPENDENT PROCESSING. 
  
          LDD    CM+4 
          LPN    77 
          ADC    TALP 
          ADD    LA 
          STD    T3 
          LDI    T3          SET TRACK
          STD    T6 
  
*         NOTE - THE FOLLOWING CODE SETS THE CORRECT *FACTORY* SECTOR 
*         NUMBER FOR ALL DEVICES (ZERO FOR ALL EXCEPT CDSS II).  IF A 
*         NEW DEVICE IS TO BE ADDED WITH A *DEADSTART* SECTOR NUMBER
*         EXCEEDING 377, THIS CODE MAY REQUIRE ALTERATION.
  
          LDM.   TDSS-TALP,T3  SET FACTORY SECTOR NUMBER
          LPC    7400        CLEAR BITS 7-0 
          STD    T7 
          LDM    -1          CHECK OPTION TYPE
          SHN    0-11 
          NJN    PRS2        IF NOT READING PACK SERIAL NUMBER
          LDC    PSP         RETURN MAIN PROCESSOR ENTRY ADDRESS
          ADD    LA 
 PRS1     LJM    PRSX        EXIT 
  
 PRS2     LDC    LDNI+FCRP
          STM.   RDSA 
          LDC    LDNI+FCWP
          STM.   WDS3 
          LDM    -1 
          SHN    0-12 
          ZJN    PRS1        IF SETTING FOR PROTECTED READS AND WRITES
          LDM.   TDST-TALP,T3  SET DEADSTART TRACK
          STD    T6 
          LDM.   TDSS-TALP,T3  SET DEADSTART SECTOR NUMBER
          STD    T7 
          LDC    BFMS        READ THE DEADSTART SECTOR
          RJM.   RDS
          SHN    0-21 
          NJN    PRS4        IF DEADSTART SECTOR CANNOT BE READ 
          LDN    PRSBL+1
          STD    CM 
          LDD    LA 
          RAM    PRSA 
 PRS3     SOD    CM          CHECK NEXT BYTE
          ZJN    PRS4        IF ALL KNOWN BYTES IN SECTOR ARE CORRECT 
          LDM.   BFMS-1,CM
          LMM.   PRSB-1,CM   VERIFY BYTE AGAINST EXPECTED VALUE 
 PRSA     EQU    *-1
          ZJN    PRS3        IF BYTE CONTENTS ARE CORRECT 
          ENDMS 
          LDN    2
 PRS4     LJM    PRSX        EXIT 
  
  
 PRSB     CON    0500,0016                  CONTROL BYTES 
          CON    0000,0000,0000,1120,1400   FIRST WORD OF SECTOR
          CON    0000,0000,0000             BEGINNING OF SECOND WORD
 PRSBL    EQU    *-PRSB 
 PSP      SPACE  4
***       PSP - PACK SERIAL PROCESSOR.
* 
*         ENTRY  (A) = LOGICAL UNIT.
*                (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         EXIT   (A) = 6/BL, 12/TA. 
*                      BL = BML MESSAGE LENGTH. 
*                      TA = DAYFILE MESSAGE TABLE ADDRESS.
*                (A) = 0 IF DISK ERROR DETECTED.
*                (BFMS - BFMS+1) = PACK SERIAL NUMBER IF NO DISK ERROR. 
* 
*         USES   T0, T3 - T7, CM - CM+4.
* 
*         CALLS  CBD, CHB, CSD, CTD, RDS. 
* 
*         MACROS ENDMS. 
  
  
 PSP4     LDN    0           RETURN ERROR STATUS
  
 PSP      SUBR               ENTRY/EXIT 
          STD    T1          SAVE LOGICAL UNIT
 PSP1     SOD    T1          FORM LOGICAL UNIT * SECTOR LIMIT 
          MJN    PSP2        IF MULTIPLICATION COMPLETE 
          LDC    0           ADD SINGLE UNIT SECTOR LIMIT 
 PSPB     EQU    *-1
          RAD    T7 
          UJN    PSP1 
  
 PSP2     LDC    BFMS        READ FACTORY SECTOR
          RJM.   RDS
          MJN    PSP4        IF ERROR 
          LDD    MA          GET PHYSICAL UNIT NUMBER 
          CWD    T4 
          MONITOR  LDAM      CONVERT ADDRESS
          ENDMS 
          LDD    MA 
          ADN    1
          CRD    CM 
          LDD    CM+1        PUT PHYSICAL UNIT NUMBER IN MESSAGE
          STM    MSGB+3 
          RJM    C2D
          STM    MSGA+4 
          LDC    BFMS        SET ADDRESS OF PACK SERIAL NUMBER
          STD    CM 
          LDC    MSGA+7      SET ERRLOG MESSAGE DESTINATION ADDRESS 
          ADD    LA 
          STD    CM+1 
          LDC    MSGB+7      SET BML MESSAGE DESTINATION ADDRESS
          ADD    LA 
          STD    CM+2 
          RJM    CSD         CONVERT 6 BCD DIGITS TO DISPLAY
          LDC    TDMA+MSG1L*10000 
          ADD    LA 
          LJM    PSPX        EXIT 
  
  
 MSGA     DATA   C*EQ000, U00,PS=000000.* 
  
 MSGB     CON    DM0401      MESSAGE ID 
          CON    HI0100      MESSAGE SYMPTOM
          CON    0           DEVICE TYPE (DISPLAY CODE) 
          CON    0           UNIT NUMBER (BINARY) 
          CON    0           RESERVED FOR CDC 
          CON    0           EST ORDINAL (BINARY) 
          CON    0           RESERVED FOR CDC 
          DATA   6AXXXXXX    PACK SERIAL NUMBER (DISPLAY CODE)
 MSG1L    EQU    *-MSGB      REGULAR BML MESSAGE LENGTH 
 TDMA     SPACE  4,10 
**        TDMA - TABLE OF DAYFILE MESSAGE ADDRESSES.
  
  
 TDMA     BSS    0
          CON    MSGA        ERRLOG MESSAGE ADDRESS 
          CON    MSGB        BML MESSAGE ADDRESS
 TALP     SPACE  4
**        TALP - TABLE OF ALGORITHM INDEX PROCESSING PARAMETERS.
* 
*         ENTRY = 1 WORDS.
*         WORD 1 = LOGICAL TRACK OF MANUFACTURING SECTOR. 
  
  
 TALP     INDEX 
          INDEX  AIDI,(7150)
          INDEX  AIDJ,(7154)
          INDEX  AIDK,(7150)
          INDEX  AIDL,(7154)
          INDEX  AIDM,(7222)
          INDEX  AIDQ,(7222)
          INDEX  AIDR,(5060)
          INDEX  AIDX,(7150)
          INDEX  AIDY,(7134)
          INDEX  AIDZ,(6136)
          INDEX  AIDA,(6137)
          INDEX  AIDB,(7222)
          INDEX  AIDC,(7352)
          INDEX  AIDD,(0) 
          INDEX  AIDG,(0) 
          INDEX  AIDS 
 TDST     SPACE  4,10 
**        TDST - TABLE OF DEADSTART TRACK NUMBERS.
  
  
 TDST     INDEX 
          INDEX  AIDI,7152
          INDEX  AIDJ,7155
          INDEX  AIDK,7150
          INDEX  AIDL,7154
          INDEX  AIDM,7222
          INDEX  AIDQ,7222
          INDEX  AIDR,5060
          INDEX  AIDX,7150
          INDEX  AIDY,7134
          INDEX  AIDZ,6136
          INDEX  AIDA,6137
          INDEX  AIDB,7222
          INDEX  AIDC,(7352)
          INDEX  AIDD,7140
          INDEX  AIDG,6570
          INDEX  AIDS 
 TDSS     SPACE  4,10 
**        TDSS - TABLE OF DEADSTART SECTOR NUMBERS. 
* 
*         NOTE - IF A NEW DEVICE WITH A DEADSTART SECTOR NUMBER GREATER 
*         THAN 377 IS ADDED TO THIS TABLE, CODE IN THE AREA JUST BEFORE 
*         TAG *PRS1* MAY REQUIRE ALTERATION.
  
  
 TDSS     INDEX 
          INDEX  AIDI,1 
          INDEX  AIDJ,1 
          INDEX  AIDK,3 
          INDEX  AIDL,3 
          INDEX  AIDM,37B 
          INDEX  AIDQ,76B 
          INDEX  AIDR,2476B 
          INDEX  AIDX,2 
          INDEX  AIDY,2 
          INDEX  AIDZ,2 
          INDEX  AIDA,2 
          INDEX  AIDB,370B
          INDEX  AIDC,2 
          INDEX  AIDD,0 
          INDEX  AIDG,0 
          INDEX  AIDS 
 CBD      SPACE  4
**        CBD - CONVERT BINARY CODED DECIMAL TO DISPLAY CODE. 
* 
*         ENTRY  (A) = 10/,8/ 2 BCD DIGITS. 
*                (CM+1) = ADDRESS IN ERRLOG MESSAGE WHERE RESULT IS 
*                         TO BE STORED. 
*                (CM+2) = ADDRESS IN BML MESSAGE WHERE RESULT IS TO 
*                         BE STORED.
* 
*         EXIT   CONVERTED DIGITS ADDED TO ERRLOG AND BML MESSAGES. 
*                (CM+1) AND (CM+2) INCREMENTED. 
* 
*         USES   T0.
  
  
 CBD      SUBR               ENTRY/EXIT 
          LPC    377         UNPACK DIGITS
          SHN    16          SAVE HIGH ORDER DIGIT
          STD    T0 
          SCN    17 
          SHN    -2          POSITION LOW ORDER DIGIT 
          LMD    T0          MERGE HIGH ORDER DIGIT 
          SHN    6
          ADC    2R00        CONVERT TO DISPLAY CODE
          STI    CM+1 
          STI    CM+2 
          AOD    CM+1 
          AOD    CM+2 
          UJN    CBDX        EXIT 
 CSD      SPACE  4,10 
**        CSD - CONVERT SIX BCD DIGITS TO DISPLAY CODE. 
* 
*         ENTRY  (CM) = ADDRESS OF BCD DIGITS.
*                (CM+1) = STARTING ADDRESS IN ERRLOG MESSAGE WHERE
*                         RESULT IS TO BE STORED. 
*                (CM+2) = STARTING ADDRESS IN BML MESSAGE WHERE RESULT
*                         IS TO BE STORED.
* 
*         EXIT   DIGITS ADDED TO ERRLOG AND BML MESSAGES. 
*                (CM - CM+2) EACH INCREMENTED TO POINT TO THE FIRST 
*                BYTE AFTER THE ADDED DIGITS. 
* 
*         USES   CM.
* 
*         CALLS  CBD. 
  
  
 CSD      SUBR               ENTRY/EXIT 
          LDI    CM          CONVERT BCD DIGITS ONE AND TWO 
          SHN    -4 
          RJM    CBD
          LDI    CM          CONVERT BCD DIGITS THREE AND FOUR
          LPN    17 
          SHN    14 
          LMM.   1,CM 
          SHN    -10
          RJM    CBD
          AOD    CM 
          LDI    CM          CONVERT BCD DIGITS FIVE AND SIX
          RJM    CBD
          AOD    CM 
          UJN    CSDX        EXIT 
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMPC2D 
          SPACE  4
          ERRNG  473-*       OVERLAY OVERFLOWS PRU
          RSTR               RESTORE INSTRUCTIONS 
          TITLE  0RI - UNIT RESERVE PROCESSOR.
          QUAL   0RI
          IDENT  0RI,PRSX   "HN" UNIT RESERVE PROCESSOR.
*COMMENT  6DI - "HN" UNIT RESERVE PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       UNIT RESERVE PROCESSOR. 
*         R. J. THIELEN.     75/11/20.
*         W. E. GOEBEL.      78/03/06.
*         K. F. REHM.        84/07/12.
          SPACE  4
***              THE UNIT RESERVE PROCESSOR IS USED IN CASES WHERE 844
*         DRIVES ARE CONNECTED TO MORE THAN ONE CONTROLLER, AND THE 
*         CONTROLLER WHICH IS CURRENTLY HOLDING DRIVES RESERVED IS
*         INOPERATIVE.  THE PROCESSOR ISSUES A *GRENADE* FUNCTION TO
*         THE FUNCTIONING CONTROLLER, WHICH RELEASES ALL 844 DRIVES 
*         RESERVED BY THE INOPERATIVE CONTROLLER. 
          SPACE  4
*         REDEFINE INSTRUCTIONS FOR LOCATION FREE EXECUTION.
  
          RIREL              REDEFINE INSTRUCTIONS
 PRS      SPACE  4,10 
***       PRS - PRESET UNIT RESERVE PROCESSOR.
* 
*         EXIT   (A) = MAIN PROCESSOR ENTRY ADDRESS.
  
  
          ORG    5
 PRS      SUBR               ENTRY/EXIT 
          LDC    RUR
          ADD    LA 
          UJN    PRSX        EXIT 
 RUR      SPACE  4,10 
**        RUR - RELEASE UNIT RESERVES.
* 
*         ENTRY  (T5) = EST ORDINAL OF EQUIPMENT. 
*                (T6) = LEGAL TRACK NUMBER. 
*                (T7) = LEGAL SECTOR NUMBER.
* 
*         CALLS  RDS. 
* 
*         MACROS SETMS. 
  
  
 RUR      SUBR               ENTRY/EXIT 
          SETMS  PIO,(DF,NS)
          LDC    LDNI+FCGR
          STM.   LDAA 
          LDM    RURA 
          STM.   LDAB 
          LDM    RURB 
          STM.   RDSA 
          RJM.   RDS         ISSUE GRENADE FUNCTION 
          ENDMS 
          UJN    RURX        RETURN 
  
 RURA     BSS    0
          LOC    LDAB 
          UJN    LDA7        AVOID OUTPUT OF DISK ADDRESS 
          LOC    *O 
  
 RURB     BSS    0
          LOC    RDSA 
          UJN    RDS4        AVOID ISSUING FURTHER FUNCTIONS
          LOC    *O 
  
  
          BSS    0
          ERRNG  473-*       OVERLAY OVERFLOWS PRU
          RSTR               RESTORE INSTRUCTIONS 
          TITLE  0SI - SERVO TIMING PROCESSOR.
          QUAL   0SI
          IDENT  0SI,PRSX   "HN" SERVO TIMING PROCESSOR.
  COMMENT 82/02/26. 82/10/23. 6DI - "HN" SERVO TIMING PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       SERVO TIMING PROCESSOR. 
*         R. J. THIELEN.     75/11/20.
*         W. E. GOEBEL.      78/03/06.
*         T. J. CALLAGHAN.   83/03/09.
          SPACE  4,10 
***              THE SERVO TIMING PROCESSOR PERFORMS SERVO
*         ADJUSTMENTS FOR 885 DRIVES. 
          SPACE  4,10 
*         REDEFINE INSTRUCTIONS FOR LOCATION FREE EXECUTION.
  
          RIREL              REDEFINE INSTRUCTIONS
 PRS      SPACE  4,10 
***       PRS - PRESET PACK SERIAL PROCESSOR. 
* 
*         ENTRY  ((LA)-1) = 3/,9/  EQ.
*                EQ = EST ORDINAL.
* 
*         EXIT   (A) = MAIN PROCESSOR ENTRY ADDRESS.
*                (T5) = EST ORDINAL.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
*                PACK SERIAL PROCESSOR INITIALIZED. 
*                MASS STORAGE DRIVER INITIALIZED AND MODIFIED TO READ 
*                THE APPROPRIATE SECTOR.
* 
*         USES   T5.
* 
*         MACROS SETMS. 
  
  
          ORG    5
 PRS      SUBR               ENTRY/EXIT 
          LDM    -1          SET EST ORDINAL
          LPC    777
          STD    T5 
          SETMS  PIO,(DF,NS)
          LDD    LA          ABSOLUTIZE ADDRESS 
          RAM    FTCA 
          SBN    TFTC-FTC    RETURN PROCESSOR ADDRESS 
          UJN    PRSX        RETURN 
 FTC      SPACE  4,10 
**        FTC - FUNCTION SERVO DIFFERENCE TIMING COUNTER. 
* 
*         ENTRY  (T7) = LOGICAL UNIT * SINGLE UNIT SECTOR LIMIT.
* 
*         EXIT   (A) = 0 IF TIMING TOO LARGE. 
*                (A) .LT. 0 IF DISK ERROR.
*                (A) = SERVO TIMING AVERAGED OVER 20 SAMPLES. 
* 
*         USES   T1, T3.
* 
*         CALLS  RDS. 
* 
*         MACROS ENDMS, SETMS.
  
  
 FTC3     ENDMS 
  
 FTC      SUBR               ENTRY/EXIT 
          LDN    2           SET DRIVER 
          STM.   FNCA 
          LDN    TFTCL-1     MOVE CODE TO *RDS* 
          STD    T1 
 FTC1     LDM.   TFTC,T1
 FTCA     EQU    *-1
          STM.   RDSC,T1
          SOD    T1 
          PJN    FTC1        IF MORE TO MOVE
          LDN    20          SET TIMING LOOP COUNTER
          STD    T3 
 FTC2     LDC    BFMS        INPUT TIMING SAMPLE
          RJM.   RDS
          MJN    FTCX        IF ERROR 
          LDM.   BFMS 
          NJN    FTC3        IF TIMING DATA TOO LARGE 
          LDM.   BFMS+1      PROCESS TIMING SAMPLE
          RAM    FTCB+1 
          SHN    -14
          RAM    FTCB 
          SOD    T3 
          NJN    FTC2        IF MORE SAMPLES TO PROCESS 
          ENDMS 
 FTCB     LDC    0           TOTAL OF TIMING SAMPLES
          SHN    -4 
          LJM    FTCX        RETURN 
  
 TFTC     BSS    0           CODE TO OVERLAY *RDS*
          LOC    RDSC 
          RJM.   LDA         SEEK TO CYLINDER 0 
          RJM    FTD         FUNCTION TIMING DIFFERENCE COUNTER 
          UJN    RDSA        INPUT TIMING DATA
          BSS    RDSA-*      SPARES 
 RDSA     LDN    FCTD        INPUT TIMING DATA
          LOC    *O 
 TFTCL    EQU    *-TFTC 
 FTC      SPACE  4,10 
**        FTD - FUNCTION TIMING DIFFERENCE COUNTER. 
  
  
 FTD      SUBR               ENTRY/EXIT 
          LDM.   FNCC        SET FUNCTION 
          ADN    40 
          STM    FTDA 
          LDM.   FNCB        SET TEST 
          STM    FTDB 
          LDN    FCFT        FUNCTION TIMING DIFFERENCE COUNTER 
 FTDA     FAN    0+40 
          LDD    TH 
          STD    T1 
          STD    T2 
 FTDB     CON    0,RDSA 
*         IJM    RDSA,CH     IF FUNCTION ACCEPTED 
          SOD    T1 
          PJN    FTDB        IF NOT TIME OUT
          SOD    T2 
          PJN    FTDB        IF NOT TIME OUT
          UJN    FTDX        RETURN 
          SPACE  4
          ERRNG  473-*       OVERLAY OVERFLOWS PRU
          RSTR   RESTORE INSTRUCTIONS 
          TITLE  0CI - FIRMWARE IDENT PROCESSOR.
          QUAL   0CI
          IDENT  0CI,PRSX   "HN" FIRMWARE IDENT PROCESSOR.
*COMMENT  6DI - "HN" FIRMWARE IDENT PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       FIRMWARE IDENT PROCESSOR. 
*         R. J. THIELEN.     75/11/20.
*         W. E. GOEBEL.      78/03/06.
          SPACE  4
***              THE FIRMWARE IDENT PROCESSOR OBTAINS DETAILED STATUS 
*         FOR A SPECIFIED EQUIPMENT, CHANNEL AND LOGICAL UNIT, EXTRACTS 
*         THE FIRMWARE REVISION NUMBER AND PLACES THAT INFORMATION IN A 
*         DAYFILE MESSAGE THAT IT RETURNS TO THE CALLING PROGRAM. 
          SPACE  4
*         REDEFINE INSTRUCTIONS FOR LOCATION FREE EXECUTION.
  
          RIREL              REDEFINE INSTRUCTIONS
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMSDFS 
 PRS      SPACE  4,10 
***       PRS - PRESET FIRMWARE IDENTIFICATION PROCESSOR. 
* 
*         ENTRY  ((LA)-1) = 3/ FN,9/ EQ.
*                FN = FUNCTION NUMBER.
*                     0 = CHANNEL CONTROLWARE IDENTIFICATION. 
*                     1 = CONTROL MODULE CONTROLWARE IDENTIFICATION.
* 
*         EXIT   (A) = MAIN PROCESSOR ENTRY ADDRESS.
*                (T5) = EST ORDINAL.
*                FIRMWARE IDENTIFICATION PROCESSOR INITIALIZED. 
* 
*         USES   T5, T7, CM - CM+4. 
* 
*         MACROS SETMS. 
  
  
          ORG    5
 PRS      SUBR               ENTRY/EXIT 
          LDD    LA          ABSOLUTIZE MESSAGE ADDRESSES 
          RAM    TDMA 
          RAM    TDMA+1 
          LDM    -1          SET EST ORDINAL
          LPC    777
          STD    T5 
          SETMS  PIOCH,(DF,NR,NS) 
          LDD    CM+4        GET ALGORITHM INDEX FROM MST 
          SHN    3
          ADN    DILL 
          CRD    CM 
          LDD    CM+4 
          LPN    77 
          RAM    FIPC 
          STM    PRSA 
          ADC    -AIIB-TDAI 
          MJN    PRS2        IF NOT ISD 
          SBK    AIIE-AIIB
          MJN    PRS3        IF ISD 
          SBK    AIDC-AIIE
          ERRNG  AIDC-AIIE   ALGORITHM INDEXES OUT OF ORDER 
          MJN    PRS2        IF NOT FSC, 7165 NOR ISD 
          STD    T0 
          LDN    ARNW-FRNW   SET ADAPTOR REVISION NUMBER WORD 
          RAM    FIPF 
          LDD    T0 
          ZJN    PRS5        IF 7165/895 EQUIPMENT
 PRS2     UJN    PRS6        MODIFY DRIVER
  
*         MODIFY OVERLAY FOR EITHER THE 7255 ADAPTOR OR FOR A CONTROL 
*         MODULE. 
  
 PRS3     LDM    -1 
          SHN    0-11 
          ZJN    PRS5        IF 7255 ADAPTOR
          LDM    PRSA 
          ADK    -AIDD-TDAI 
          ZJN    PRS4        IF *DD* DEVICE TYPE
          LDN    /CNTL/T424-/CNTL/T422   (CONTROL MODULE II)
 PRS4     ADN    /CNTL/T422  (CONTROL MODULE I) 
          STM    ** 
 PRSA     EQU    *-1         (MODIFY CONTROLWARE INDEX TABLE CONTENTS)
          LDN    PSNI 
          STM    FIPE 
          LDN    HI0104-HI0101
          RAM    MSGB+1 
 PRS5     LDN    1RD-1RA
          RAM    MSGA+5 
          STM    MSGB+10
 PRS6     LDC    LDNI+FCDS   SET DRIVER TO READ *DETAILED STATUS* 
          STM.   RDSA 
          LDM    -1 
          SHN    0-11 
          NJN    PRS7        IF CONTROL MODULE FIRMWARE IDENTIFICATION
          LDD    HN          ENABLE A BRANCH TO READ *DETAILED STATUS*
          ERRNZ  LJMI-100    ADJUST IF VALUE CHANGES
          STM.   LDAC 
          LDC    RDS2 
          STM.   LDAC+1 
 PRS7     LDN    DSLN 
          STM.   FNCA 
          LDC    FIP
          ADD    LA 
          LJM    PRSX        EXIT 
  
 MSGA     DATA   C*CH00 MA722-A00,CM0.* 
  
 MSGB     CON    DM0401      MESSAGE ID 
          CON    HI0101      MESSAGE SYMPTOM
          CON    0           CHANNEL (OCTAL)
          CON    0           (CONTROL MODULE EQUIPMENT NUMBER)
          CON    0           RESERVED FOR CDC 
          DATA   10A MA722-AYY  FIRMWARE REVISION LEVEL (DISPLAY CODE)
 MSGBL    EQU    *-MSGB      BML MESSAGE LENGTH 
 TDMA     SPACE  4,10 
**        TDMA - TABLE OF DAYFILE MESSAGE ADDRESSES.
  
  
 TDMA     BSS    0
          CON    MSGA        ERRLOG MESSAGE ADDRESS 
          CON    MSGB-MSGA   BML MESSAGE ADDRESS
 FIP      SPACE  4
***       FIP - FIRMWARE IDENTIFICATION PROCESSOR.
* 
*         ENTRY  (T4) = CHANNEL.
*                (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 6/BL, 12/TA. 
*                      BL = BML MESSAGE LENGTH. 
*                      TA = ADDRESS OF MESSAGE PARAMETER BLOCK. 
*                    .LT. 0 IF MASS STORAGE ERROR.
*                (T5) = UNCHANGED.
*                (BFMS) = DETAILED STATUS.
* 
*         USES   T3, T6, T7.
* 
*         CALLS  CDD, COD, RDS. 
* 
*         MACROS ENDMS. 
  
  
 FIP      SUBR               ENTRY/EXIT 
          LDN    0
          STD    T6          CLEAR LOGICAL ADDRESS
          STD    T7 
          LDC    BFMS        READ DETAILED STATUS 
          RJM.   RDS
          MJN    FIPX        IF ERROR 
          ENDMS 
  
*         ADD CHANNEL NUMBER TO THE ERRLOG AND BML MESSAGES.
  
          LDD    T4          PUT CHANNEL IN MESSAGE 
          STM    MSGB+2 
          RJM    COD
          STM    MSGA+1 
  
*         ADD FIRMWARE TYPE TO ERRLOG AND BML MESSAGES. 
  
          LDM    TDAI 
 FIPC     EQU    *-1
          NJN    FIP4        IF CONTROLWARE TYPE ALREADY KNOWN
          LDM.   BFMS+FRNW
          SHN    -12
          SHN    1
 FIP4     ADD    LA 
          ADC    FIPH 
          STD    T3 
          LDI    T3 
          STM    MSGA+3 
          STM    MSGB+6 
          LDM.   1,T3 
          STM    MSGA+4 
          STM    MSGB+7 
  
*         ADD REVISION NUMBER TO ERRLOG AND BML MESSAGES.  IF 
*         PROCESSING A CONTROL MODULE, ADD THE CONTROL MODULE 
*         EQUIPMENT NUMBER TO THE MESSAGES. 
  
          LDC    MSGA+7 
          ADD    LA 
          STD    T3 
          UJN    FIP6        CHANNEL FIRMWARE IDENTIFICATION
*         PSN                (CONTROL MODULE FIRMWARE IDENTIFICATION) 
 FIPE     EQU    *-1
          LDM.   BFMS+FRNW   GET CONTROL MODULE EQUIPMENT NUMBER
          SHN    -3 
          LPN    7
          STM    MSGB+3 
          ADC    2RM0 
          STM    MSGA+10
          LDN    11-7 
          RAD    T3 
          LDM.   BFMS+CMNW
          LPN    37 
          UJN    FIP7        ADD REVISION NUMBER
  
 FIP6     LDM.   BFMS+FRNW
*         LDM.   BFMS+ARNW   (FSC AND 7165 EQUIPMENTS)
 FIPF     EQU    *-1
          SHN    -6 
          LPN    17 
 FIP7     RJM    CDD
          STM    MSGA+6 
          STM    MSGB+11
  
*         TERMINATE THE ERROR LOG MESSAGE.
  
          LDC    2R.
          STI    T3 
          LDN    0
          STM.   1,T3 
          LDC    TDMA+MSGBL*10000  SET TABLE ADDRESS, BML MSG LENGTH
          ADD    LA 
          LJM    FIPX        RETURN 
  
  
 FIPH     BSS    0
          LOC    0
          QUAL   CNTL 
 T710     DATA   4RA710      HALF TRACK CONTROLWARE 
 T454     DATA   4RA454      FSC ADAPTOR CONTROLWARE
 T401     DATA   4RA401      FULL TRACK CONTROLWARE 
 T721     DATA   4RA721      FMD CONTROLWARE
 T722     DATA   4RA722      DEMA/PFMD CONTROLWARE
 T462     DATA   4RA462      7255 ADAPTOR CONTROLWARE 
 T422     DATA   4RH422      CONTROL MODULE I CONTROLWARE 
 T424     DATA   4RH424      CONTROL MODULE II CONTROLWARE
 T464     DATA   4RA464      7165 CONTROLWARE 
          QUAL   *
          LOC    *O 
  
  
 TDAI     INDEX 
          INDEX  AIDI,0 
          INDEX  AIDJ,0 
          INDEX  AIDM,0 
          INDEX  AIDK,0 
          INDEX  AIDL,0 
          INDEX  AIDQ,0 
          INDEX  AIDR,0 
          INDEX  AIDD,/CNTL/T462
          INDEX  AIDG,/CNTL/T462
          INDEX  AIDB,/CNTL/T722
          INDEX  AIDC,/CNTL/T464
          INDEX  AIDX,/CNTL/T401
          INDEX  AIDY,/CNTL/T401
          INDEX  AIDZ,/CNTL/T401
          INDEX  AIDA,/CNTL/T401
          INDEX  AIDS 
 CDD      SPACE  4,10 
**        CDD - CONVERT TWO DIGITS TO DECIMAL DISPLAY CODE. 
* 
*         ENTRY  (A) = NUMBER TO CONVERT. 
* 
*         EXIT   (A) = DISPLAY CODE VALUE.
* 
*         USES   T0 - T1. 
  
  
 CDD2     ADN    10D+1R0
          SHN    14          POSITION UNITS 
          ADD    T0 
          SHN    6
  
 CDD      SUBR               ENTRY/EXIT 
          STD    T1          SAVE NUMBER
          LDN    1R0         PRESET TENS
          STD    T0 
 CDD1     LDD    T1          COUNT 10 
          SBN    10D
          MJN    CDD2        IF CONVERSION COMPLETE 
          STD    T1 
          AOD    T0 
          UJN    CDD1        LOOP TO END OF CONVERSION
 COD      SPACE  4,10 
**        COD - CONVERT TWO DIGITS TO OCTAL DISPLAY CODE. 
* 
*         ENTRY  (A) = NUMBER TO CONVERT. 
* 
*         EXIT   (A) = DISPLAY CODE VALUE.
* 
*         USES   T0.
  
  
 COD      SUBR               ENTRY/EXIT 
          STD    T0 
          SHN    3
          LMD    T0 
          SCN    70 
          ADC    2R00 
          UJN    CODX        RETURN 
  
  
          BSS    0
          ERRNG  473-*       OVERLAY OVERFLOWS PRU
          RSTR               RESTORE INSTRUCTIONS 
          TITLE  0SC - SWEEP CYCLING PROCESSOR. 
          QUAL   0SC
          IDENT  0SC,SCPX 
*COMMENT  6DI - SWEEP CYCLING PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 0SC      SPACE  4,10 
***       0SC - SWEEP CYCLING PROCESSOR.
*         R. M. DANISCH.     87/01/01.
 0SC      SPACE  4,10 
***       *0SC* IS CALLED BY *1MV* TO EXECUTE THE NEXT SWEEP CYCLING
*         SEEK SEQUENCE FOR A SPECIFIED MASS STORAGE DEVICE.  THE SEEK
*         SEQUENCE WILL BE EXECUTED FOR EACH PHYSICAL UNIT OF A 
*         MULTI-UNIT DEVICE.  WORD *SCLL* OF THE MST ENTRY CONTAINS THE 
*         CYLINDER NUMBER USED FOR THE LAST SEEK IN THE PREVIOUS
*         SEQUENCE. 
 0SC      SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
* 
*         (IR+2) = EST ORDINAL. 
 0SC      SPACE  4,10 
*         DIRECT CELL ASSIGNMENTS.
  
  
 CN       EQU    20 - 24     CM WORD BUFFER 
 AB       EQU    25 - 31     CM WORD BUFFER 
 SU       EQU    32          SINGLE UNIT SECTOR LIMIT 
 SC       EQU    33          SEEK COUNT 
 SI       EQU    34          SEEK INCREMENT 
 TI       EQU    35          *TDVP* TABLE INDEX 
 MS       EQU    36          MST ENTRY ADDRESS / 10B
 0SC      SPACE  4,10 
*         REDEFINE INSTRUCTIONS FOR LOCATION FREE EXECUTION.
  
          RIREL 
 SCP      SPACE  4,10 
          ORG    5
  
**        SCP - SWEEP CYCLING PROCESSOR.
  
  
 SCP      SUBR               ENTRY/EXIT 
  
*         PRESET *0SC*. 
  
          LDD    IR+2 
          STD    T5 
          SETMS  PIO,(NS) 
          LDD    CM+4        SAVE MST ENTRY ADDRESS 
          STD    MS 
          SHN    3
          ADN    MDGL        READ SINGLE UNIT SECTOR LIMIT
          CRD    AB 
          ADK    SCLL-MDGL   READ SWEEP CYCLING CONTROL WORD
          CRD    CN 
          LDD    AB+1        SET SINGLE UNIT SECTOR LIMIT 
          LPC    3777 
          STD    SU 
          LDD    LA          INITIALIZE *TDVP* TABLE INDEX
          SBN    5
          STD    TI 
 SCP1     LDN    5           ADVANCE TO NEXT TABLE ENTRY
          RAD    TI 
          SBD    LA 
          LMC    TDVPL
          ZJP    SCPX        IF SWEEP CYCLING NOT SUPPORTED ON DEVICE 
          LDM.   TDVP,TI
          LMD    CM+3 
          NJN    SCP1        IF NOT DEVICE TYPE MATCH 
          STD    T7 
          LDC    SCP9        DISABLE ERROR PROCESSING 
          ADD    LA 
          STM.   ERRA 
          LDD    HN          AVOID DATA TRANSFER
          STM.   DSTB 
          ERRNZ  LJMI-100    CODE DEPENDS ON VALUE
  
*         POSITION TO STARTING CYLINDER.
  
 SCP2     LDN    0           CAUSE IMMEDIATE EXIT IF ERROR ON 1ST SEEK
          STD    SC 
          LDN    SCP4        AVOID DATA TRANSFER
          ADD    LA 
          STM.   DSTB+1 
          LDD    CN 
          ADN    1
          LMM.   TDVP+1,TI
          ZJN    SCP3        IF PRIOR SEQUENCE ENDED ON LAST CYLINDER 
          LDD    CN          SET INITIAL POSITION 
          SHN    1           CONVERT CYLINDER TO LOGICAL TRACK
 SCP3     STD    T6 
*         LDC    BFMS        ISSUE READ REQUEST FOR SEEK EXECUTION
          RJM.   RDS         CALL DRIVER TO ISSUE SEEK
 SCP4     DELAY  8D*17D      DELAY FOR ONE DISK REVOLUTION
  
*         ISSUE SEEK SEQUENCE.
  
          LDC    SCP8        AVOID DATA TRANSFER
          ADD    LA 
          STM.   DSTB+1 
          LDM.   TDVP+2,TI   SET SMALL SEEK COUNT 
          STD    SC 
          LDM.   TDVP+3,TI   SET SMALL SEEK INCREMENT 
 SCP5     STD    SI 
 SCP6     LDD    SI          ADVANCE POSITION BY SEEK INCREMENT 
          SHN    1
          RAD    T6 
          SHN    -1 
          SBM.   TDVP+1,TI
          MJN    SCP7        IF NOT BEYOND END OF DEVICE
          LDN    0           PERFORM ONLY ONE SEEK AT END OF DEVICE 
          STD    SC 
          LDM.   TDVP+1,TI   SEEK TO LAST CYLINDER
          SBN    1
          SHN    1
          STD    T6 
*         LDC    BFMS        ISSUE READ REQUEST WITH NO DATA TRANSFER 
 SCP7     RJM.   RDS         CALL DRIVER TO ISSUE SEEK
 SCP8     DELAY  8D*17D      DELAY FOR ONE DISK REVOLUTION
 SCP9     SOD    SC          DECREMENT SEEK COUNT 
          MJN    SCP10       IF POSITIONING COMPLETE
          NJN    SCP6        IF SMALL SEEK SEQUENCE INCOMPLETE
          LDM.   TDVP+4,TI   SET MAJOR POSITION INCREMENT 
          UJN    SCP5        CALCULATE NEXT SEEK ADDRESS
  
*         RELEASE THE CURRENT DRIVE AND CHECK FOR ANOTHER (MULTI-UNIT). 
  
 SCP10    ENDMS 
          LDD    SU          ADVANCE TO NEXT UNIT 
          RAD    T7 
          SBM.   SLM
          MJP    SCP2        IF MORE UNITS TO PROCESS 
  
*         UPDATE THE SWEEP CYCLING CONTROL WORD IN THE MST ENTRY. 
  
          LDD    T6          STORE FINAL POSITION IN *SCLL* 
          SHN    -1 
          STD    CN 
          LDK    RTCL        STORE NEW TIME STAMP IN *SCLL* 
          CRD    CM 
          LDD    CM+1 
          STD    CN+1 
          LDD    MS          UPDATE *SCLL*
          SHN    3
          ADN    SCLL 
          CWD    CN 
          LJM    SCPX        RETURN 
 TDVP     SPACE  4,10 
**        TDVP - TABLE OF DEVICE PARAMETERS.
  
  
 TDVP     BSS    0
  
          CON    2RDB        DEVICE TYPE *DB* 
          CON    CYUNDB      NUMBER OF CYLINDERS ON DEVICE
          CON    3           NUMBER OF SMALL INCREMENT SEEKS
          CON    12D         SIZE OF SMALL INCREMENT SEEK 
          CON    93D         SIZE OF LARGE INCREMENT SEEK 
  
          CON    2RDD        DEVICE TYPE *DD* 
          CON    CYUNDD      NUMBER OF CYLINDERS ON DEVICE
          CON    4           NUMBER OF SMALL INCREMENT SEEKS
          CON    13D         SIZE OF SMALL INCREMENT SEEK 
          CON    50D         SIZE OF LARGE INCREMENT SEEK 
  
          CON    2RDG        DEVICE TYPE *DG* 
          CON    CYUNDG      NUMBER OF CYLINDERS ON DEVICE
          CON    6           NUMBER OF SMALL INCREMENT SEEKS
          CON    16D         SIZE OF SMALL INCREMENT SEEK 
          CON    80D         SIZE OF LARGE INCREMENT SEEK 
  
          CON    2RDM        DEVICE TYPE *DM* 
          CON    CYUNDM      NUMBER OF CYLINDERS ON DEVICE
          CON    3           NUMBER OF SMALL INCREMENT SEEKS
          CON    12D         SIZE OF SMALL INCREMENT SEEK 
          CON    93D         SIZE OF LARGE INCREMENT SEEK 
  
          CON    2RDQ        DEVICE TYPE *DQ* 
          CON    CYUNDQ      NUMBER OF CYLINDERS ON DEVICE
          CON    3           NUMBER OF SMALL INCREMENT SEEKS
          CON    12D         SIZE OF SMALL INCREMENT SEEK 
          CON    93D         SIZE OF LARGE INCREMENT SEEK 
  
 TDVPL    BSS    0           LWA+1 OF TABLE 
 0SC      SPACE  4
          OVERFLOW  5,ZSCL   *0SC* OVERFLOWS PRU
          TITLE  0SD - SPIN UP/DOWN ISMD DRIVES.
          QUAL   0SD
          IDENT  0SD,PRSX    "HN" SPIN UP/DOWN MS DRIVES. 
*COMMENT  6DI - SPIN UP/DOWN MS DRIVES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       0SD - SPIN UP/DOWN MASS STORAGE DRIVES. 
*         K. F. REHM.        83/06/16.
          SPACE  4,10 
***       *0SD* IS USED TO SPINUP OR SPINDOWN THOSE MASS STORAGE
*         DEVICES THAT SUPPORT SAID CAPABILITY.  FOR ISMD TYPE
*         DEVICES, THE DRIVER IS MODIFIED TO ISSUE A SPINUP OR
*         SPINDOWN FUNCTION.  FOR BUFFERED DEVICES, A FLAG IS 
*         SET IN THE BUFFERED I/O PHYSICAL UNIT TABLE TO BE 
*         PROCESSED BY DEVICE SPECIFIC DRIVERS. 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMSHIO 
          SPACE  4,10 
*         REDEFINE INSTRUCTIONS FOR LOCATION FREE EXECUTION.
  
          RIREL              REDEFINE INSTRUCTIONS
 PRS      SPACE  4,10 
**        PRS - PRESET SPINUP/DOWN PROCESSOR. 
* 
*         EXIT   (A) = PROCESSOR ENTRY ADDRESS. 
  
  
          ORG    5
 PRS      SUBR               ENTRY/EXIT 
          LDD    LA 
          RAM    PRDC 
          LDN    SUE         RETURN SPINUP/SPINDOWN PROCESSOR ADDRESS 
          ADD    LA 
          UJN    PRSX        EXIT 
 SUE      SPACE  4,10 
**        SUE - SPIN UP/DOWN AN ISD DRIVE.
* 
*         ENTRY  ((LA)-1) = EST ORDINAL OF EQUIPMENT TO SPIN UP/DOWN. 
*                ((LA)-2) = 7/0,1/SF,4/0, WHERE 
*                           SF = 0, IF TO SPIN UP EQUIPMENT.
*                              = 1, IF TO SPIN DOWN EQUIPMENT.
* 
*         EXIT   ((LA)-1) = UNCHANGED.
*                ((LA)-2) = UNCHANGED.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  ANU, PRD, WDS. 
* 
*         MACROS MONITOR. 
  
  
 SUE4     RJM    ANU         ADVANCE TO THE NEXT PHYSICAL UNIT
          NJN    SUE1        IF MORE UNITS TO SPIN UP 
  
 SUE      SUBR               ENTRY/EXIT 
          RJM    PRD         PRESET DRIVER
          ZJN    SUEX        IF NOT AN ISD DRIVE
 SUE1     LDN    0
          STM    CGSA 
          LDN    CM+1 
          RJM.   WDS
          LPN    17 
          LMN    NRDE 
          NJN    SUE4        IF HARDWARE FAILURE
          STD    CM          CLEAR FLASHING *MS2W* MESSAGE
          LDD    CP 
          ADK    MS2W 
          CWD    CM 
          LDM    -2 
          NJN    SUE4        IF SPINDOWN REQUEST
 SUE2     LDD    MA 
          CWD    T4 
          MONITOR  LDAM 
          LDD    MA 
          ADN    1
          CRD    CM 
          LDN    2           IGNORE *DRIVE BUSY* GENERAL STATUS 
          STM    CGSA 
          LDM    -2 
          ZJN    SUE3        IF SPINUP REQUEST
          LDN    FCSD&FCSU   SET SPINDOWN 
 SUE3     LMK    FCSU        SET SPINUP 
          LJM.   WDS4        ISSUE SPINUP/DOWN FUNCTION 
 ANU      SPACE  4,10 
**        ANU - ADVANCE TO NEXT PHYSICAL UNIT.
* 
*         *ANU* WILL DELAY AT LEAST 10 MSEC TO AVOID POWER FLUCTUATIONS 
*         WHEN MORE THAN ONE UNIT IS TO BE SPUN UP/DOWN.
* 
*         ENTRY  (T6) = NUMBER OF UNITS REMAINING TO BE SPUN UP/DOWN. 
* 
*         EXIT   (A) .NE. 0, IF NEXT UNIT EXISTS. 
* 
*         USES   CM.
* 
*         MACROS DELAY, ENDMS.
  
  
 ANU2     ENDMS 
*         LDN    0           (A) = 0 IS *ENDMS* EXIT CONDITION
  
 ANU      SUBR               ENTRY/EXIT 
          LDC    0           (SINGLE UNIT SECTOR LIMIT) 
 ANUA     EQU    *-1         SET BY *PRD* 
          RAD    T7 
          SOD    T6 
          MJN    ANU2        IF NO MORE UNITS IN EQUIPMENT
          DELAY  10D*8D       DELAY 10 MILLISECONDS 
          PAUSE  ST 
          LDN    1
          UJN    ANUX        EXIT 
 CGS      SPACE  4,10 
**        CGS - CHECK GENERAL STATUS. 
* 
*         *CGS* TRAPS ALL GENERAL STATUS FUNCTIONS ISSUED BY *6DI* TO 
*         THE CONTROLLER AND RETURNS TO CALLER IF EITHER A *0000* 
*         (OPERATION SUCCESSFUL) OR *0002* (DRIVE BUSY) STATUS IS 
*         ISSUED.  THIS ALLOWS *0SD* TO CONTINUE SPINNING UP/DOWN 
*         OTHER DRIVES WITHOUT HAVING TO WAIT IN *DSWM* PROCESSING
*         UNTIL THE CURRENT DRIVE FINISHES SPINNING UP/DOWN.
* 
*         ENTRY  (A) = GENERAL STATUS.
* 
*         EXIT   TO *SUE4* IF SPINUP AND NON-ERROR GENERAL STATUS.
*                TO *SUE2* IF SPINDOWN AND NON-ERROR GENERAL STATUS.
*                TO *LDA1* IF ERROR GENERAL STATUS. 
  
  
 CGS      BSS    0           ENTRY
          NJN    CGS2        IF NOT *0000* GENERAL STATUS 
 CGS1     LJM.   0,CM        RETURN TO CALLER 
  
 CGS2     STD    CM+3        SAVE STATUS
          LMC    0
*         LMC    2           (IGNORE *DRIVE BUSY* GENERAL STATUS) 
 CGSA     EQU    *-1
          ZJN    CGS1        IF *DRIVE BUSY*
          SHN    21-13
          PJN    CGS3        IF NO ERROR
          LDN    0
          STM    CGSA 
 CGS3     LDD    CM+3        RESTORE STATUS 
          LJM.   LDA3        PROCESS STATUS 
 PRD      SPACE  4,10 
**        PRD - PRESET DRIVER.
* 
*         EXIT   (A) = 0 IF DEVICE NOT CANDIDATE FOR SPINUP/SPINDOWN. 
*                (T5) = EST ORDINAL.
*                (T6) = NUMBER OF UNITS - 1 IN EQUIPMENT. 
* 
*         USES   T6, T7, CM - CM+4. 
* 
*         MACROS SETMS, SFA.
  
  
 PRD6     LDM    -2          SET FLAG VALUE 
          SHN    -3 
          NJN    PRD7        IF SPINDOWN REQUEST
          LDN    4
          ERRNZ  SPDF+1-SPUF CODE DEPENDS ON VALUE
 PRD7     LMN    1
          ERRNZ  DUNF+1-SPDF CODE DEPENDS ON VALUE
          STM    PRDA+4 
          LDC    BIOL        GET POINTER TO BUFFERED I/O TABLES 
          CRD    CM 
          LDD    CM+1        FETCH *PUT* TABLE POINTER WORD 
          SHN    14 
          LMD    CM+2 
          ADN    PUTP 
          CRD    CM 
          LDD    CM+4        SET FWA OF *UNCT* WORD IN *PUT*
          ADK    UNCT 
          STM    PRDB 
          SHN    -14
          ADD    CM+3 
          LPN    77          CLEAR FLAGS
          LMC    ADCI 
          STM    PRDB-1 
          LDD    CM          NUMBER OF ENTRIES IN TABLE 
          STD    T7 
 PRD8     SHN    PUTLS       READ UNIT DESCRIPTOR WORD
          ADC    0
 PRDB     EQU    *-1
          CRD    CM 
          STD    CM+4        SAVE ADDRESS FOR MONITOR CALL
          SHN    -14
          STD    CM+3 
          LDD    CM+1        CHECK EST ORDINAL
          LMD    T5 
          NJN    PRD9        IF NOT REQUESTED DEVICE
          LDN    1
          STD    CM+1 
          LDD    MA          STORE *UTEM* REQUEST IN MESSAGE BUFFER 
          CWM.   PRDA,CM+1
 PRDC     EQU    *-1
          MONITOR  UTEM      SET FLAG FOR BUFFERED DEVICE DRIVER
          SOD    T6 
          MJN    PRD10       IF NO MORE UNITS 
 PRD9     SOD    T7 
          NJN    PRD8        IF NOT END OF *PUT*
 PRD10    LDN    0           DEVICE NOT CANDIDATE FOR SPINUP/SPINDOWN 
  
 PRD      SUBR               ENTRY/EXIT 
          LDM    -1          SET EQUIPMENT
          STD    T5 
          SFA    EST         GET EST ENTRY
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          SHN    21-13
          PJN    PRD10       IF NOT A MASS STORAGE DEVICE 
          LDC    TPRD-1      CHECK DEVICE TYPE
          ADD    LA 
          STD    T1 
 PRD1     AOD    T1 
          LDI    T1 
          ZJN    PRD10       IF NOT CANDIDATE FOR SPINUP/SPINDOWN 
          LMD    CM+3 
          NJN    PRD1        IF DEVICE TYPE DOES NOT MATCH
 PRD2     LDD    CM+4 
          SHN    3
          ADN    DDLL        FETCH DEVICE UNIT COUNT
          CRD    T6 
          SBN    DDLL-DILL   GET DEVICE DEPENDENT PARAMETERS
          CRD    T7 
          LDD    T6          CHECK FOR NULL EQUIPMENT 
          LPC    2007 
          STD    T6          SAVE UNIT COUNT
          SHN    21-12
          MJP    PRD10       IF NULL EQUIPMENT
          LDD    T7+3 
          SHN    21-12
          MJP    PRD6        IF BUFFERED DEVICE 
          LDD    CM+4 
          SHN    3
          ADN    MDGL        GET SINGLE UNIT SECTOR LIMIT 
          CRD    CM 
          LDD    CM+1        SECTOR LIMIT 
          LPC    3777 
          STM    ANUA 
          SETMS  PIO,(AD,DE,DF,NR,NS) 
          LDN    0
          STD    T7 
          LDD    HN 
          ERRNZ  LJMI-100B   CODE USES *HN* TO CREATE *LJM* 
          STM.   DSTA 
          STM.   WDS2        MODIFY ROUTINES *WDS* AND *DST*
          LDC    CGS
          ADD    LA 
          STM.   DSTA+1 
          LDM    -2 
          ZJN    PRD5        IF SPINUP REQUEST
          LDK    SUE2&SUE4
 PRD5     LMK    SUE4 
          ADD    LA 
          STM.   WDS2+1 
          LDC    LDCI 
          STM.   WDSD 
          LDK    SUE4 
          ADD    LA 
          STM.   WDSD+1 
          LDN    1
          STM.   FNCA 
          LJM    PRDX        EXIT 
  
  
 PRDA     VFD    1/0,5/PILL-UNCT,6/3,6/DUNF,42/0  *UTEM* REQUEST
  
 TPRD     BSS    0           CANDIDATE DEVICES FOR SPINUP/SPINDOWN
          CON    2RDD        834
          CON    2RDG        836
          CON    2RDF        887 (4KB SECTOR) 
          CON    2RDH        887 (16KB SECTOR)
          CON    0
          SPACE  4,10 
          ERRNG  473-*       OVERLAY OVERFLOWS PRU
          RSTR               RESTORE INSTRUCTIONS 
          SPACE  4
          END 
