*COMDECK,844FT                                                           MLD
          EJECT                                                          MLD
 58F      SEGMENT POVLA                                                  MLD
          ORG    POVLA                                                   MLD
          QUAL   844FT                                                   MLD
*CALL,VERS
          COMMENT 844FT PRODUCT OVERLAY FOR MALET "VERS"
          EJECT                                                          MLD
          TITLE  HIGH LEVEL 844 FULL TRACK PRODUCT OVERLAY FOR MALET.    MLD
**        THE FOLLOWING COMMANDS ARE DESIGNED FOR  THE  844  DISK  SUB-  MLD
*         SYSTEMS  RUNNING  IN  A  FULL-TRACK MODE.  58F IS THE PRODUCT  MLD
*         OVERLAY THAT EXECUTES THESE COMMANDS AND  IS  DRIVEN  BY  THE  MLD
*         INSTRUCTION STACK OF THE MALET PP  DRIVER.  REQUESTS ARE MADE  MLD
*         BY THE DRIVER BY STORING PARAMETERS INTO PP  DIRECT CELLS AND  MLD
*         PERFORMING  A  RETURN-JUMP TO AN OVERLAY SUBROUTINE. ONCE THE  MLD
*         REQUEST HAS BEEN COMPLETED, CONTROL IS RETURNED TO THE  STACK  MLD
*         TO EXECUTE THE NEXT COMMAND.                                   MLD
*                                                                        MLD
*                                                                        MLD
*         THE 844 FULL-TRACK PRODUCT OVERLAY  SUPPORTS  A  PROGRAMMABLE  MLD
*         INPUT BUFFER (IB) OF 505B PP WORDS, AN  OUTPUT BUFFER (OB) OF  MLD
*         505B PP WORDS AND A STATUS BUFFER (SB) OF 64B PP WORDS.  DATA  MLD
*         IS  WRITTEN  TO  THE  DISK FROM THE OUTPUT BUFFER AND IS READ  MLD
*         FROM THE DISK TO THE INPUT BUFFER.  THE STATUS BUFFER IS USED  MLD
*         TO HOLD GENERAL AND DETAIL/EXTENDED STATUS FROM THE SUBSYSTEM  MLD
*         AND OTHER WORDS DEFINED LATER.                                 MLD
*                                                                        MLD
*         THIS PRODUCT OVERLAY SHOULD NOT BE USED ON CONTROLWARE LEVELS  MLD
*         BELOW A07. SUPPORTED CAPABILITIES ARE AS FOLLOWS_              MLD
*                                                                        MLD
*                                                                        MLD
*           DIAGRD - READ 322D WORDS FROM SUBSYSTEM MEMORY TO IB.        MLD
*           DIAGWR - WRITE 322D WORDS FROM OB TO SUBSYSTEM MEMORY.       MLD
*           GET    - READ SERIAL, FACTORY OR UTILITY MAP SECTOR TO IB.   MLD
*           MARGINS- SET STROBES AND OFFSET FOR READ AND READCW.         MLD
*           READ   - SEEK AND READ 0 TO 4095 SECTORS FROM DISK TO IB.    MLD
*           READCB - PREFORM A READ ON THE COUPLER BUFFER                MLD
*           READCW - SEEK AND READ CHECKWORD ON 0 TO 4095 SECTORS.       MLD
*           REL    - RELEASE DRIVE, CONTROLLER AND I/O CHANNEL.          MLD
*           RES    - RESERVE I/O CHANNEL, CONTROLLER AND DRIVE.          MLD
*           RESET  - AUTOLOAD CONTROLLER TO MONITOR LOOP.                MLD
*           RTNADDR- READ LAST CYLINDER ADDRESS TO IB.                   MLD
*           SEEK   - MOVE DRIVE POSITIONER.                              MLD
*           SHORTRD- READ ONE SHORT SECTOR(477B WORDS) FROM DISK TO IB.  MLD
*           STATUS - INPUT GENERAL, DETAIL OR EXTENDED STATUS TO SB.     MLD
*           VERIFY - SEEK AND WRITE VERIFY 0 TO 4095 SECTORS ON DISK.    MLD
*           WRITE  - SEEK AND WRITE 0 TO 4095 SECTORS ON DISK.           MLD
*                                                                        MLD
*         DIAGRD, DIAGWR, GET, READ, WRITE, WRITE VERIFY AND WRITE  ALL  MLD
*         TRANSFER 502B WORDS TO/FROM THE INPUT/OUTPUT BUFFERS. SHORTRD  MLD
*         USES 477B WORDS.  ALL TRANSFERS ARE TO THE FIRST WORD OF THE   MLD
*         BUFFER, EXAMPLE_ IB(0).                                        MLD
          EJECT                                                          MLD
**        THE FOLLOWING CHART DEFINES THE LAY-OUT OF THE STATUS BUFFER.  MLD
*                                                                        MLD
*                  --------------------   ---                            MLD
*               0  I   GENERAL STATUS I      I                           MLD
*                  I------------------I      I                           MLD
*               1  I                  I      I                           MLD
*              .   I                  I      I                           MLD
*              .   I   DETAIL STATUS  I      I THIS IS THE NORMAL/LAST   MLD
*             14B  I                  I      I TAKEN STATUS FROM THE     MLD
*                  I------------------I      I SUBSYSTEM                 MLD
*             15B  I                  I      I                           MLD
*              .   I EXTENDED STATUS  I      I                           MLD
*              .   I                  I      I                           MLD
*             24B  I                  I   ---                            MLD
*                  I------------------I   ---                            MLD
*             25B  I   GENERAL STATUS I      I                           MLD
*                  I------------------I      I                           MLD
*             26B  I                  I      I                           MLD
*              .   I                  I      I THIS IS THE FIRST TAKEN   MLD
*              .   I   DETAIL STATUS  I      I STATUS WITHIN SEQUENCES   MLD
*             41B  I                  I      I THAT REQUIRED RECOVERY    MLD
*                  I------------------I      I TO BE PERFORMED.          MLD
*             42B  I                  I      I (CONTINUE FUNCTIONS       MLD
*              .   I                  I      I ISSUED)                   MLD
*              .   I EXTENDED STATUS  I      I                           MLD
*             51B  I                  I   ---                            MLD
*                  I------------------I   ---                            MLD
*             52B  I RETRY COUNT      I   ---I ERROR CORRECTION DATA
*                  I------------------I   ---                            MLD
*             56B  I 1ST BYTE         I      I DISK PACK SERIAL NUMBER   MLD
*             57B  I 2ND BYTE         I      I (FROM ASSIGN DIRECTIVE)   MLD
*                  I------------------I   ---                            MLD
*             60B  I SEEK TIME        I        MILLISECONDS TO DO LAST   MLD
*                  I------------------I        SEEK                      MLD
*             61B  I CHANNEL          I   ---                            MLD
*             62B  I EQUIPMENT        I      I                           MLD
*             63B  I UNIT             I      I EQUIPMENT UNDER TEST      MLD
*                  --------------------   ---                            MLD
*                                                                        MLD
*                                                                        MLD
*         ALL SUBROUTINES IN THIS PRODUCT OVERLAY USE  A  COMMON  ERROR  MLD
*         EXIT  SEQUENCE  WHEN  AN  ERROR  IS  DETECTED.  THIS SEQUENCE  MLD
*         STORES AN INTERNAL ERROR CODE INTO THE EC REGISTER, AN  ERROR  MLD
*         MESSAGE INDEX INTO THE EM REGISTER AND THE CURRENT P REGISTER  MLD
*         CONTENTS (LINE NUMBER) INTO THE  EA  REGISTER.   I/O  CHANNEL  MLD
*         CLEAN-UP  OCCURS  AND  A JUMP IS MADE TO THE STATEMENT NUMBER  MLD
*         SPECIFIED BY THE ABT ADDRESS IN THE COMMAND.                   MLD
          EJECT                                                          MLD
**        THE FOLLOWING TABLE DEFINES THE ERROR CODES AND MESSAGES THAT  MLD
*         MAY BE GENERATED FOR EACH COMMAND.                             MLD
*                                                                        MLD
*                                   DIAGRD----------. .-----RESET        MLD
*                                  DIAGWR---------. . . .----RTNADDR     MLD
*                                 GET-----------. . . . . .---SEEK       MLD
*                                MARGINS------. . . . . . . .--SHORTRD   MLD
*                               READ--------. . . . . . . . . .-STATUS   MLD
*                              READCW-----. . . . . . . . . . . -VERIFY  MLD
*                             REL-------. . . . . . . . . . . . . WRITE  MLD
* CODE      MESSAGE          RES------. . . . . . . . . . . . . . .      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 04 WC OR BUFFER INDEX ERROR         . . . . . . . . . X . . . . .      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 10 CH NOT ASSIGNED                  . . . . . . . . X . . . . . .      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 11 CH ACTIVE ON ENTRY               X . X X . . . . . . . . . X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 12 NO INACTIVE TO LAST FUNC.        X X X X . X X X X X X X X X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 13 NO INACTIVE TO GENERAL STATUS    X . X X . X . . . X X X X X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 14 NO INACTIVE TO DETAIL/EXTENDED   X . X X . X . . . . X X X X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 15 GENERAL STATUS NOT RETURNED      X . X X . X . . . X X X X X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 16 INCOMPLETE STATUS RETURNED       X . X X . X . . . . X X X X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 17 FUNC PARAMETERS NOT ACCEPTED     X . X X . X . . X . X X . X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 20 ALL DATA NOT ACCEPTED FROM PP    . . . . . . X . . . . . . X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 21 INCOMPLETE DATA RETURNED TO PP   . . . X . X . X X . . X . . .      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 22 CONTROLLER/UNIT NOT CONNECTED    . . X X . X X X . X X X X X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 23 ACCESS LEVEL TOO LOW FOR REQ     . . X X . X . . . . . X . X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 24 NO RESERVE IN 5 MINUTES          X . X X . . . . . . . . . X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 25 ABNORMAL GENERAL STATUS          X . X X . X . . . X X X . X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 26 ILLEGAL STROBES/OFFSET           . . . . X . . . . . . . . . .      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 27 UNIT HUNG BUSY ON SEEK           . . X X . X . . . . X X X X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 30 SUCCESSFUL RETRY                 . . X X . X . . . . . . . X X      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 31 DATA COMPARE ERROR               . . . X . . . . . . . . . . .      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 32 DEVICE CODE/STATUS MISMATCH      X . . . . . . . . . . . . . .      MLD
*    -------------------------------- - - - - - - - - - - - - - - -      MLD
* 33 NO INACTIVE AFTER DATA XFER      X . X X . . X . X . X . . X X      MLD
*    --------------------------------------------------------------      MLD
* 34 CHANNEL PE ON INPUT              . . . X . . . X . . . X X . . 
*    -------------------------------------------------------------- 
          EJECT                                                          MLD
**        FLOW-CHART FOR 1_1 INTERLACE.                                  MLD
*                                                                        MLD
*                      -----------------------                           MLD
*                      IPROCESS ONE SECTOR.  I                           MLD
*                      IDECREMENT SECTORS TO I                           MLD
*              I------>IDO.TERMINATE WHEN ALLI<---------I                MLD
*              I       ISECTORS PROCESSED.   I          I                MLD
*              I       -----------------------   ---------------         MLD
*              I                 V               I  PERFORM    I         MLD
*              I          ---------------        I    SEEK     I<-START  MLD
*              I          I  ADD 1 TO   I        I  SEQUENCE   I         MLD
*              I          I   SECTOR    I        ---------------         MLD
*              I          I  REGISTER   I                                MLD
*              I          ---------------                                MLD
*              I                 V                                       MLD
*              I             ---------                                   MLD
*              I       NO   /         \                                  MLD
*              I<----------/  SECTOR   \                                 MLD
*              I           \   .GT.    /                                 MLD
*              I            \  27B    /                                  MLD
*              I             ---------                                   MLD
*              I            YES  V                                       MLD
*              I          ---------------                                MLD
*              I          I SUBTRACT 30B\                                MLD
*              I          I FROM SECTOR \                                MLD
*              I          I REGISTER.   \                                MLD
*              I          I (SETS IT TO \                                MLD
*              I          I  0  OR  1 ) \                                MLD
*              I          ---------------                                MLD
*              I                 V                                       MLD
*              I          ---------------                                MLD
*              I          I  ADD 1 TO   I                                MLD
*              I          I TRACK REG.  I                                MLD
*              I          ---------------                                MLD
*              I                 V                                       MLD
*              I             ---------           ---------------         MLD
*              I        NO  /         \          I  EXIT TO    I         MLD
*              I<----------/  TRACK    \         I   STACK     I         MLD
*              I           \   .GT.    /         I             I         MLD
*              I            \  22B    /          ---------------         MLD
*              I             ---------                  &                MLD
*              I           YES   V               ---------------         MLD
*              I          ---------------        I  SET TRACK  I         MLD
*              I          I RESET TRACK I        I  REGISTER   I         MLD
*              I          I REG. TO ZEROI        I  TO 22B     I         MLD
*              I          ---------------        ---------------         MLD
*              I                 V                      &                MLD
*         ------------       ---------           ---------------         MLD
*         I   SET    I  NO  /         \  YES     I     SET     I         MLD
*         I SECTOR   I<----/PROCESSING \-------->I   SECTOR    I         MLD
*         I REGISTER I     \    ODD    /         I  REGISTER   I         MLD
*         I  TO 1    I      \ SECTORS /          I    TO 27B   I         MLD
*         ------------       ---------           --------------          MLD
*                                                                        MLD
          EJECT                                                          MLD
*         EQUATES FOR ERROR CODES - FIRST 7 ARE FOR BASIC DRIVER.        MLD
                                                                         MLD
 EC.FLE   EQU    1           ADDRESS OUT OF FIELD LENGTH                 MLD
 EC.TL    EQU    2           TIME LIMIT ERROR FOR COMMUNICATIONS         MLD
 EC.SEE   EQU    3           SUBROUTINE ENTRY/EXIT ERROR                 MLD
 EC.WC    EQU    4           BUFFER REFERENCE OR WC ERROR                MLD
 EC.RES   EQU    5           RESERVED FOR BASIC DRIVER                   MLD
 EC.RES1  EQU    6           RESERVED FOR BASIC DRIVER                   MLD
 EC.RES2  EQU    7           RESERVED FOR BASIC DRIVER                   MLD
                                                                         MLD
 EC.CNA   EQU    10B         CHANNEL NOT ASSIGNED                        MLD
 EC.CAS   EQU    11B         CHANNEL ACTIVE FROM SYSTEM                  MLD
 EC.NIF   EQU    12B         NO INACTIVE TO LAST FUNCTION                MLD
 EC.NIGS  EQU    13B         NO INACTIVE TO GENERAL STATUS               MLD
 EC.NIDS  EQU    14B         NO INACTIVE TO DETAIL  STATUS               MLD
 EC.GSNR  EQU    15B         GENERAL STATUS NOT RETURNED                 MLD
 EC.ISR   EQU    16B         INCOMPLETE STATUS RETURNED                  MLD
 EC.FPNA  EQU    17B         FUNCTION PARAMETERS NOT ACCEPTED            MLD
 EC.DNA   EQU    20B         ALL DATA NOT ACCEPTED FROM PP               MLD
 EC.IDR   EQU    21B         INCOMPLETE DATA RETURNED TO PP              MLD
 EC.CNC   EQU    22B         CONTROLLER/DRIVE NOT CONNECTED              MLD
 EC.IAL   EQU    23B         ACCESS LEVEL TOO LOW FOR REQUEST            MLD
 EC.NRES  EQU    24B         NO RESERVE IN 5 MINUTES                     MLD
 EC.AGS   EQU    25B         ABNORMAL GENERAL STATUS                     MLD
 EC.ISO   EQU    26B         ILLEGAL STROBES/OFFSET                      MLD
 EC.UHB   EQU    27B         UNIT HUNG BUSY ON SEEK                      MLD
 EC.STRY  EQU    30B         SUCCESSFUL RETRY                            MLD
 EC.DCE   EQU    31B         DATA COMPARE ERROR                          MLD
 EC.DCSM  EQU    32B         DEVICE CODE/STATUS MISMATCH                 MLD
 EC.NIDT  EQU    33B         NO INACTIVE AFTER DATA TRANSFER             MLD
 EC.CPE   EQU    34B         CHANNEL PARITY ERROR ON INPUT
                                                                         MLD
*         DIRECT CELL EQUATES                                            MLD
                                                                         MLD
 RDWRF    EQU    60B         READ/WRITE FLAG                             MLD
 COD      EQU    61B         WRITE - READ CODED FLAG                     MLD
 FUN      EQU    62B         FUNCTION FOR READ OR WRITE                  MLD
 CL       EQU    63B         ADDRESS OF CURRENT IO LENGTH  - V           MLD
 WC       EQU    64B         WORD COUNT FOR I/O                          MLD
 CC       EQU    65B         ADDRESS OF CURRNET CYLINDER   - W           MLD
 CT       EQU    66B         ADDRESS OF CURRENT TRACK      - X           MLD
 CS       EQU    67B         ADDRESS OF CURRENT SECTOR     - Y           MLD
                                                                         MLD
 SEEKA    EQU    D.Z3        SEEK ADDRESS USES D.Z3 THRU D.Z7            MLD
 PA       EQU    D.T0        PARAMETER ADDRESS                           MLD
                                                                         MLD
          EJECT                                                          MLD
*         EQUATES FOR EQUIPMENT FUNCTIONS.                               MLD
                                                                         MLD
 CONN     EQU    0           CONNECT                                     MLD
 SEK11    EQU    1           SEEK 1_1 INTERLACE                          MLD
 IOL      EQU    3           I/O LENGTH IN SECTORS                       MLD
 RD       EQU    4           READ                                        MLD
 WR       EQU    5           WRITE                                       MLD
                                                                         MLD
 WRV      EQU    6           WRITE VERIFY                                MLD
 RDCW     EQU    7           READ CHECKWORD                              MLD
                                                                         MLD
 OC       EQU    10B         OPERATION COMPLETE                          MLD
 GS       EQU    12B         GENERAL STATUS                              MLD
 DS       EQU    13B         DETAIL STATUS                               MLD
 CONT     EQU    14B         CONTINUE                                    MLD
 DREL     EQU    20B         DRIVE RELEASE
 RCA      EQU    21B         RETURN CYLINDER ADDRESS                     MLD
 EDS      EQU    23B         EXTENDED DETAIL STATUS                      MLD
 RFD      EQU    30B         READ FACTORY DATA                           MLD
 RUM      EQU    31B         READ UTILITY MAP                            MLD
 DR       EQU    32B         DIAGNOSTIC READ                             MLD
 DW       EQU    33B         DIAGNOSTIC WRITE                            MLD
 WLS      EQU    36B         WRITE LAST SECTOR                           MLD
 WVLS     EQU    37B         WRITE VERIFY LAST SECTOR                    MLD
 RS       EQU    40B         READ SHORT                                  MLD
 SSO      EQU    41B         SELECT STROBES AND OFFSET                   MLD
 RCB      EQU    43B         READ COUPLER BUFFER                         MLD
 AUTO     EQU    414B        AUTOLOAD FUNCTION                           MLD
                                                                         MLD
*         GENERAL STATUS BIT EQUATES.                                    MLD
                                                                         MLD
 NDE      EQU    0           NONRECOVERABLE DATA ERROR                   MLD
 BUSY     EQU    1           UNIT BUSY                                   MLD
 DRES     EQU    3           DRIVE RESERVED                              MLD
 COR      EQU    5           CORRECTABLE ERROR BIT                       MLD
 RIP      EQU    8D          RECOVERY IN PROGRESS                        MLD
 UNR      EQU    9D          NONRECOVERABLE ERROR                        MLD
 CRES     EQU    10D         CONTROLLER RESERVED                         MLD
                                                                         MLD
*         DEVICE CODES SUPPORTED                                         MLD
                                                                         MLD
 D844A    EQU    2           7054/844-2X                                 MLD
 D844B    EQU    3           7054/844-4X                                 MLD
 D844C    EQU    4           7154/844-2X                                 MLD
 D844D    EQU    5           7154/844-4X                                 MLD
          SPACE  4,20                                                    MLD
*         MISCELANOUS EQUATES.                                           MLD
                                                                         MLD
 TIMFJM   EQU    400/2       TIME OUT DELAY FOR FULL
 TIMIJM   EQU    50000D/2    MAXIMUM TIME TO INACTIVE - 50 MSEC 
 TIMREL   EQU    400000D/100D INTERVAL FOR CHANNEL RELEASE-              MLD
 MAXITT   EQU    12D         ITERATION COUNT FOR ABOUT A 5 SEC.DELAY     MLD
                                                                         MLD
 MAXCDD   EQU    1466B       MAXIMUM CYLINDER ON A 844-41                MLD
 MAXCSD   EQU    632B        MAXIMUM CYLINDER ON A 844-21                MLD
 PRECYL   EQU    3           NUMBER OF PREALLOCATED CYLINDERS            MLD
                                                                         MLD
 ARP      EQU    1           READ PREALLOCATED                           MLD
*IF,DEF,SECURE,1
 ARD      EQU    4           ACCESS LEVEL REQUIRED TO READ ANYWHERE 
*IF,-DEF,SECURE,1 
 ARD      EQU    2           READ ANYWHERE                               MLD
 ARWP     EQU    3           READ ANYWHERE, WRITE PREALLOCATED           MLD
 ARW      EQU    4           READ ANYWHERE, WRITE ANYWHERE               MLD
 AL21     EQU    21B         ACCESS LEVEL FOR NO CHANNEL CLEANUP ON ERR  MLD
                                                                         MLD
 CH       EQU    37B         DEFAULT CHANNEL VALUE FOR I/O COMMANDS      MLD
                                                                         MLD
 SEL      EQU    27B         MAXIMUM SECTOR COUNT                        MLD
 TRL      EQU    22B         MAXIMUM TRACK COUNT                         MLD
 SEI      EQU    2           SECTOR INCREMENT                            MLD
                                                                         MLD
 WRRD     EQU    502B        STANDARD WORD COUNT                         MLD
 SHRD     EQU    477B        SHORT WORD COUNT                            MLD
          EJECT                                                          MLD
**        ERROR MESSAGES - WRITTEN TO CM DURING INITIALIZATION.          MLD
*                                                                        MLD
*         MMSG MARCO.                                                    MLD
*                                                                        MLD
*         MMSG  MACRO  NAME,ECODE,MSG,FABT                               MLD
*                                                                        MLD
*         NAME = 6/FABT,6/MESSAGE ORDINAL,6/ECODE.                       MLD
*                                                                        MLD
*         ECODE = ERROR CODE TO BE ASSIGNED (6 BITS).                    MLD
*                                                                        MLD
*         MSG = ERROR MESSAGE (40 CHARACTERS).                           MLD
*                                                                        MLD
*         FABT = FORCE ABORT (UPPER 6 BITS OF NAME.                      MLD
*                                                                        MLD
          PURGMAC MMSG                                                   MLD
 MMSG     MACRO  NAME,ECODE,MSG,FABT                                     MLD
          IF     -DEF,MMSGORD,1                                          MLD
 MMSGORD  SET    0                        INITIALIZE ORDINAL             MLD
          IFC    EQ,$FABT$$,2             TEST FOR NO FORCE ABORT        MLD
 NAME     EQU    MMSGORD*100B+ECODE                                      MLD
          ELSE   1                                                       MLD
 NAME     EQU    FABT*10000B+MMSGORD*100B+ECODE                          MLD
 MMSGBGN  SET    *                        SAVE CURRENT ADDRESS           MLD
          IFC    EQ,$MSG$$,2              TEST NULL MESSAGE              MLD
          DATA   1H                       INSURE DATA ITEM               MLD
          ELSE   1                                                       MLD
          DATA   H$MSG$                   STORE MESSAGE                  MLD
          DATA   0                        SET END OF MESSAGE             MLD
          IFGT   *-MMSGBGN,BD.MSGML*5+1,1 TEST MESSAGE TOO LONG          MLD
 P        ERR    MESSAGE TOO LONG                                        MLD
 MMSGORD  SET    MMSGORD+1                BUMP ORDINAL                   MLD
          IFGT   MMSGORD,BD.MSGMN,1       TEST TOO MANY MESSAGES         MLD
 P        ERR    TOO MANY MESSAGES                                       MLD
 MMSGL    SET    MMSGORD*BD.MSGML         SET CM WORD COUNT              MLD
          ENDM                                                           MLD
          EJECT                                                          MLD
                                                                         MLD
 START    LJM    **          ENTRY POINT FOR OVERLAY INITIALIZATION      MLD
          LJM    INIT                                                    MLD
                                                                         MLD
          CON    IB          FWA OF INPUT BUFFER
          CON    OB          FWA OF OUTPUT BUFFER 
          CON    SB          FWA OF STATUS BUFFER 
          CON    LIB         LENGTH OF INPUT BUFFER 
          CON    LIB         LENGTH OF OUTPUT BUFFER
          CON    LSB         LENGTH OF STATUS BUFFER
          CON    BD.VERS     VERSION NUMBER 
                                                                         MLD
*         FIXED ADDRESS TABLE OF SUBROUTINE ENTRY POINTS                 MLD
                                                                         MLD
                                                                         MLD
 XREL     LJM    **                                                      MLD
          LJM    REL         RELEASE SUBROUTINE                          MLD
 XRES     LJM    **                                                      MLD
          LJM    RES         RESERVE SUBROUTINE                          MLD
 XDIAG    LJM    **                                                      MLD
          LJM    DIAG        DIAGNOSTIC WRITE,READ,WRITE LAST SECTOR     MLD
 XGET     LJM    **                                                      MLD
          LJM    GET         GET SERIAL/FACTORY/UTILITY SECTOR           MLD
 XMARGINS LJM    **                                                      MLD
          LJM    MARGINS     SELECT OFFSET AND STROBE MARGINS SUBROUTINE MLD
 XRDWR    LJM    **                                                      MLD
          LJM    RDWR        READ,READCW, WRITE, VERIFY SUBROUTINE       MLD
 XRESET   LJM    **                                                      MLD
          LJM    RESET       AUTOLOAD BC SUBROUTINE/                     MLD
 XRTNADD  LJM    **                                                      MLD
          LJM    RTNADDR     RETURN ADDRESS SUBROUTINE                   MLD
 XSEEK    LJM    **                                                      MLD
          LJM    SEEK        SEEK SUBROUTINE                             MLD
 XSHORT   LJM    **                                                      MLD
          LJM    SHORTRD     READ SHORT SUBROUTINE                       MLD
 XSTATUS  LJM    **                                                      MLD
          LJM    STATUS      STATUS SUBROUTINE                           MLD
          EJECT                                                          MLD
**        REL    - RELEASE CONTROLLER AND DRIVE IF CONNECTED.            MLD
*                                                                        MLD
*                  REL, ABT Z                                            MLD
*                                                                        MLD
*         ENTRY  - (A) = ABORT ADDRESS IN CASE OF AN I/O ERROR DURING    MLD
*                  THE RELEASE SEQUENCE.                                 MLD
*                                                                        MLD
*         EXIT   - DEVICE CONNECT HAS BEEN RELEASED IF ASSIGNED AND THE  MLD
*                  CHANNEL IS RELEASED TO THE SYSTEM.                    MLD
*                                                                        MLD
*         USES   - P                                                     MLD
*                                                                        MLD
*         CALLS  - ERA, OPC, BD.DCH                                      MLD
*                                                                        MLD
                                                                         MLD
**     1. DISCONNECT DRIVE AND CONTROLLER WITH AN OPERATION COMPLETE     MLD
*         FUNCTION IF EITHER IS CONNECTED.                               MLD
*                                                                        MLD
*      2. DROP THE I/O CHANNEL TO THE OPERATING SYSTEM IF ASSIGNED.      MLD
                                                                         MLD
 REL      RJM    ERA         SAVE ABT ADDRESS IN CASE OF ERROR           MLD
          RJM    OPC         RELEASE THE EQUIPMENT IF CONNECTED          MLD
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC        MLD
          LJM    XREL        EXIT TO CALLER                              MLD
          EJECT                                                          MLD
**        RES    - RESERVE CONTROLLER OR CONTROLLER AND DRIVE.           MLD
*                                                                        MLD
*                  RES CONTROLLER, ABT Z                                 MLD
*                  RES DRIVE, ABT Z                                      MLD
*                                                                        MLD
*         ENTRY  - (A) = ABORT ADDRESS IN CASE OF I/O ERROR DURING THE   MLD
*                  EXECUTION OF THE RELEASE SEQUENCE.                    MLD
*                  (PA) = CONTROLLER/DRIVE FLAG.                         MLD
*                                                                        MLD
*         EXIT   - I/O CHANNEL ASSIGNED AND CHANNEL ASSIGNED FLAGS ARE   MLD
*                  SET IN ALL THE OTHER SUBROUTINES.                     MLD
*                                                                        MLD
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  MLD
*                  ERRCAS  - IF CHANNEL ACTIVE FROM SYSTEM               MLD
*                  ERRDCSM - IF DEVICE CODE/STATUS MISMATCH              MLD
*                  ERRNRES - IF NOT RESERVED IN 5 MINUTES                MLD
*                                                                        MLD
*         USES   - EC, EA, EM, P, D.T3, D.T4, RESA, RES7,                MLD
*                  COCON, DRCON, DST2, DST4, DEVTY, SBIE(SB25), RDW19    MLD
*                                                                        MLD
*         CALLS  - ERA, RES1, OPC, STS, DST, FNA, BD.RCH.                MLD
                                                                         MLD
**     1. DISCONNECT DRIVE AND CONTROLLER WITH AN OPERATION COMPLETE     MLD
*         FUNCTION IF EITHER IS CONNECTED.                               MLD
                                                                         MLD
 RES      RJM    ERA         SAVE ABT ADDRESS IN CASE OF ERROR           MLD
                                                                         MLD
**     2. CLEAR ERROR EXIT REGISTERS.                                    MLD
                                                                         MLD
          LDN    0                                                       MLD
          STD    EC          CLEAR ERROR REGISTERS                       MLD
          STD    EA                                                      MLD
          STD    EM                                                      MLD
                                                                         MLD
**     3. DROP/REQUEST I/O CHANNEL FROM THE SYSTEM.                      MLD
                                                                         MLD
 RES1     LDN    MAXITT      ITERATION COUNT FOR STATUS                  MLD
          STM    RESA        AND PAUSE LOOP                              MLD
          LDD    PA                                                      MLD
          STM    RES7        SAVE CONTROLLER/DRIVE CONNECT FLAG          MLD
 RES1A    RJM    OPC         PERFORM OPERATION COMPLETE 
          LDN    0
          STM    WD13        SET CONTROLLER AND UNIT NOT RESERVED 
 RES2     SOM    RESA        DECREMENT THE ITERATION COUNT               MLD
          PJN    RES3        IF NOT TIMED OUT                            MLD
          LDC    ER.NRES     ELSE ERROR EXIT                             MLD
          LJM    ERR                                                     MLD
 RES3     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED           MLD
          RJM    IJM         WAIT CHANNEL ACTIVE
          LDC    ER.CAS                                                  MLD
          AJM    ERR,CH      ERROR IF CHANNEL ACTIVE FROM SYSTEM         MLD
                                                                         MLD
**     4. REQUEST AND INPUT GENERAL STATUS.                              MLD
                                                                         MLD
          LDC    TIMREL      DELAY CONSTANT FOR TIMEOUT                  MLD
          STD    D.T3        TO COUNT STATUS ITERATIONS                  MLD
 RES4     RJM    STS         TO GET GENERAL STATUE                       MLD
          STM    SBIE        SAVE IT AS STATUS BEFORE ERROR TIME         MLD
                                                                         MLD
**     5. IF BIT 2**10 IS SET, REPEAT STEP 4 UNTIL 500 MSEC HAS          MLD
*         ELAPSED.  IF A RESERVE IS NOT SUCCESSFUL WITHIN THIS           MLD
*         TIME-FRAME, EXECUTE THE *REL* SEQUENCE TO COMMUNICATE          MLD
*         WITH THE SYSTEM.  REPEAT THIS STEP UNTIL A RESERVE IS          MLD
*         SUCCESSFUL OR 5 MINUTES HAVE ELAPSED. ABORT IF NO              MLD
*         RESERVE IN 5 MINUTES.                                          MLD
                                                                         MLD
          SHN    17D-CRES                                                MLD
          PJN    RES6        IF COUPLER IS CONNECTED                     MLD
          SOD    D.T3        DECREMENT LOOP COUNT                        MLD
          PJN    RES4        IF NOT TIMED OUT                            MLD
 RES5     UJN    RES2        ELSE START NEXT ITERATION                   MLD
                                                                         MLD
**     6. SET THE CONTROLLER CONNECTED FLAG.                             MLD
                                                                         MLD
 RES6     RJM    DST         GET DETAIL STATUS
          SHN    -9          POSITION CONTROLLER/UNIT RESERVE BITS
          LPN    2           MASK OFF CONTROLLER RESERVE BIT
          ADN    1           SET UNIT RESERVE BIT 
          STM    WD13        SAVE FOR OPERATION COMPLETE
          LDM    SB+4        WORD WITH CONTROLWARE NUMBER 
          SHN    -6 
          SBN    11B
          MJN    RES6B       IF NOT A09 OR ABOVE
          ADN    9
          LPN    20B
          ZJN    RES6B       IF NOT FMD CONTROLLER
          LDM    UN 
          SBN    10B
          PJN    ERRDCSM     ELSE ERROR EXIT
                                                                         MLD
                                                                         MLD
**     7. EXIT IF THE KEYWORD *CONTROLLER* IS SPECIFIED.                 MLD
                                                                         MLD
 RES6B    LDC    **          TYPE OF FUNCTION 
 RES7     EQU    *-1         *** CONNECT DRIVER/CONTROLLER FLAG          MLD
          NJN    RES9        IF DRIVE CONNECT IS ALSO DESIRED            MLD
 RES8     LJM    XRES        EXIT TO STACK
                                                                         MLD
**     8. ISSUE A CONNECT FUNCTION AND OUTPUT THE UNIT NUMBER.           MLD
                                                                         MLD
 RES9     LDC    **          UNIT NUMBER STORED HERE                     MLD
 UN       EQU    *-1                                                     MLD
          STD    D.T4        SAVE FOR SUBROUTINE                         MLD
          LDN    CONN        LOAD CONNECT FUNCTION                       MLD
          RJM    FNO         TO PERFORM FUNCTION AND OUTPUT CONTROL WORD MLD
                                                                         MLD
**     9. REQUEST AND INPUT GENERAL AND DETAIL STATUS. VERIFY THAT       MLD
*         GENERAL STATUS IS 0000 OR 0002 AND  THAT  DETAIL  STATUS       MLD
*         INDICATES THAT THE UNIT ASSIGNED MATCHES THE DEVICE CODE       MLD
*         ASSIGNED. (844-41 OR NOT).                                     MLD
                                                                         MLD
          RJM    STS         TO GET STATUS                               MLD
          SCN    2           TO TEST OTHER THAN BUSY                     MLD
          ZJN    RES11       IF NO ERROR STATUS                          MLD
          SHN    17D-DRES    TO TEST THE DRIVE RESERVED BIT              MLD
          PJN    RES10       IF THE UNIT IS NOT RESERVED                 MLD
          SOD    D.T3        DECREMENT THE COUNT                         MLD
          PJN    RES9        IF NOT DONE THIS ITERATON                   MLD
          LJM    RES1A       START ANOTHER ITERATION
 RES10    LJM    ERRAGS      ELSE ERROR EXIT
                                                                         MLD
 ERRDCSM  LDC    ER.DCSM     ELSE ERROR EXIT
          LJM    ERR
 RES11    RJM    DST
          SHN    17-9        POSITION UNIT RESERVE BIT
          MJN    RES12       IF UNIT RESERVED 
          SOM    WD13        CLEAR UNIT RESERVED BIT
 RES12    LDM    SB+9 
                                                                         MLD
*         INITIALIZE FOR SINGLE/DOUBLE DENSITY DRIVES                    MLD
                                                                         MLD
          SHN    17D-5                                                   MLD
          PJN    RES15       IF NOT DOUBLE DENSITY                       MLD
          LDD    DC          ELSE TEST DEVICE CODE                       MLD
          LPN    D844B-D844A                                             MLD
          ZJN    ERRDCSM     DEVICE CODE STATUS MISMATCH
 RES14    LDC    MAXCDD-MAXCSD                                           MLD
          UJN    RES16       JUST JUMP                                   MLD
                                                                         MLD
 RES15    LDD    DC          TEST DEVICE CODE                            MLD
          LPN    D844B-D844A                                             MLD
          NJN    ERRDCSM     IF NOT SINGLE DENSITY
 RES16    STM    DEVTY       SEE *DEVTY* TAG                             MLD
                                                                         MLD
**    10. SET THE DRIVE CONNECTED FLAG.                                  MLD
                                                                         MLD
          LDN    0
          STM    DRCON       SET DRIVE CONNECTED FLAG                    MLD
          LDM    SB+4                                                    MLD
          SHN    6                                                       MLD
          MJN    RES17       IF FULL-TRACK CONTROLWARE                   MLD
          LDC    0300B+RDW20-RDW19                                       MLD
          STM    RDW19       INDICATE HALF TRACK CONTROLWARE             MLD
 RES17    LJM    RES8        BUMP P AND EXIT                             MLD
                                                                         MLD
 RESA     DATA   0           DROP/REQUEST CHANNEL FLAG ITERATION COUNT   MLD
          EJECT                                                          MLD
**        DIAG   - DIAGNOSTIC READ TO INPUT BUFFER.                      MLD
*                  DIAGNOSTIC WRITE FROM OUTPUT BUFFER.                  MLD
*                                                                        MLD
*                  DIAGRD, ABT Z                                         MLD
*                  DIAGWR, ABT Z                                         MLD
*                  READCB, ABT Z                                         MLD
*                                                                        MLD
*         ENTRY  - (A)  = ABT ADDRESS                                    MLD
*                  (PA) = FUNCTION CODE FOR DIAGRD OR DIAGWR             MLD
*                                                                        MLD
*         EXIT   - ERRNIDT - IF NO INACTIVE AFTER DATA TRANSFER          MLD
*                                                                        MLD
*         USES   - P, RDWRF, WT, IB(0-501), D.T1                         MLD
*                                                                        MLD
*         CALLS  - TCO, FNC, IJM                                         MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE CONTROLLER IS CONNECTED.                       MLD
                                                                         MLD
 DIAG     RJM    TCO         TEST CONTROLLER CONNECTED                   MLD
          STD    WT          CLEAR THE DIFFERENCE REGISTER               MLD
          LDD    PA          GET THE FUNCTION PARAMETER                  MLD
          SBN    DR                                                      MLD
          ZJN    DIAG1       IF DIAGNOSTIC READ                          MLD
          SBN    RCB-DR                                                  MLD
 DIAG1    STD    RDWRF       SET THE READ WRITE FLAG                     MLD
                                                                         MLD
**     2. ISSUE A 32 FUNC(DIAGRD), 33 FUNC(DIAGWR) OR 43 FUNC(READCB)    MLD
                                                                         MLD
          LDD    PA          GET THE FUNCTION                            MLD
          RJM    FNC         TO PERFORM THE FUNCTION                     MLD
                                                                         MLD
**     3. INPUT 322D WORDS FROM THE SUBSYSTEM MEMORY TO THE INPUT        MLD
*         BUFFER IF A DIAGRD OR READCB.                                  MLD
                                                                         MLD
          ACN    CH          ACTIVATE THE CHANNEL                        MLD
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          NJN    DIAG2       IF IT IS A WRITE                            MLD
          LDD    WC                                                      MLD
          IAM    IB,CH       READ TO INPUT BUFFER                        MLD
          UJN    DIAG3                                                   MLD
                                                                         MLD
**     4. OUTPUT 322B WORDS FROM THE OUTPUT BUFFER TO THE SUBSYSTEM      MLD
*         IF A DIAGWR.                                                   MLD
                                                                         MLD
 DIAG2    LDD    WC          LOAD WORD COUNT                             MLD
          OAM    OB,CH       WRITE FROM THE OUTPUT BUFFER                MLD
                                                                         MLD
**     4. VERIFY THAT 322B WORDS WERE ACTUALLY INPUT.                    MLD
                                                                         MLD
 DIAG3    STD    D.T1        SAVE COUNT OF WORDS NOT WRITTEN             MLD
          LDD    WC          LOAD THE EXPECTED WORD COUNT                MLD
          SBD    D.T1                                                    MLD
          STD    WT          STORE THE WORDS ACTUALLY TRANSFERED         MLD
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          NJN    DIAG4       IF IT IS A WRITE                            MLD
          RJM    IJM         TO INSURE CHANNEL IS INACTIVE               MLD
          ZJN    DIAG3A      IF CHANNEL HUNG ACTIVE 
          SFM    ERCPE3,CH   CHECK FOR CH PARITY ERROR
          UJN    DIAG5
  
 DIAG3A   LJM    ERRNIDT     ELSE ERROR EXIT
                                                                         MLD
 DIAG4    DCN    CH+40B      DEACTIVATE THE CHANNEL                      MLD
 DIAG5    LDD    D.T1                                                    MLD
          ZJN    DIAG6       IF ALL WORDS TRANSFERED                     MLD
          LJM    RDW36                                                   MLD
                                                                         MLD
 DIAG6    LJM    XDIAG       EXIT TO STACK
                                                                         MLD
                                                                         MLD
          EJECT                                                          MLD
**        GET    - READ SERIAL, FACTORY OR UTILITY FLAW MAP SECTORS.     MLD
*                                                                        MLD
*                  GET SERIAL, ABT Z                                     MLD
*                  GET FACTORY, ABT Z                                    MLD
*                  GET UTILITY, ABT Z                                    MLD
*                                                                        MLD
*         ENTRY  - (A)  = ABT ADDRESS                                    MLD
*                  (PA) = CODE        0 = SERIAL                         MLD
*                                     1 = FACTORY                        MLD
*                                     2 = UTILITY                        MLD
*                                                                        MLD
*         EXIT   - NONE                                                  MLD
*                                                                        MLD
*                                                                        MLD
*         USES   - P, CC, CT, CS, CL, D.T5, D.T6, D.T7,                  MLD
*                  COD, RDWRF                                            MLD
*                                                                        MLD
*         CALLS  - TDR, RDW0                                             MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            MLD
                                                                         MLD
 GET      RJM    TDR         CALLER ENTRY POINT                          MLD
          STD    D.T7        TRACK NUMBER                                MLD
          STD    COD         ELIMINATE CODED DATA CHECK                  MLD
          STD    RDWRF       INDICATE A READ OPERATION                   MLD
                                                                         MLD
**     2. EXECUTE THE SEEK SEQUENCE TO SEEK TO CYLINDER 1466B IF AN      MLD
*         844-41 IS ASSIGNED. OTHERWISE, SEEK TO CYLINDER 632B.  THE     MLD
*         SEEK IS PERFORMED TO TRACK 0 AND SECTOR 0,1, OR 2 BASED ON     MLD
*         THE KEYWORDS SERIAL, FACTORY AND UTILITY.                      MLD
                                                                         MLD
          LDM    DEVTY                                                   MLD
          ADC    MAXCSD      CODE TO SET UP FOR THE SEEK                 MLD
          STD    D.T6        MAXIMUM CYLINDER NUMBER                     MLD
          LDN    D.T6        TO SET FOR SEEK                             MLD
          STD    CC          INDIRECT MEMORY REF.                        MLD
          LDN    D.T7                                                    MLD
          STD    CT                                                      MLD
          LDN    PA                                                      MLD
          STD    CS                                                      MLD
          LDN    1                                                       MLD
          STD    D.T5        STORE NUMBER OF SECTORS TO READ             MLD
          LDN    D.T5                                                    MLD
          STD    CL          SET ADDRESS OF SECTORS TO READ              MLD
                                                                         MLD
**     3. AFTER THE SEEK HAS COMPLETED, ISSUE A 30 OR 31 FUNCTION        MLD
*         (READ FACTORY DATA OR READ UTILITY MAP).                       MLD
*                                                                        MLD
*      4. INPUT 322B WORDS TO THE INPUT BUFFER (IB).                     MLD
*                                                                        MLD
*      5. SET THE WT REGISTER TO THE NUMBER OF PP WORDS ACTUALLY READ.   MLD
*                                                                        MLD
*      6. REQUEST  AND  INPUT  GENERAL  STATUS TO DETERMINE IF THE       MLD
*         OPERATION COMPLETED SUCCESSFULY. IF  GENERAL  STATUS  IS       MLD
*         ZERO (NO ERROR), GO TO STEP 11.                                MLD
*                                                                        MLD
*      7. REQUEST AND INPUT DETAIL STATUS.  EXECUTE THE ERROR EXIT       MLD
*         SEQUENCE IF BIT 2**9 IS SET IN GENERAL STATUS.                 MLD
*         (NONRECOVERABLE ERROR).                                        MLD
*                                                                        MLD
*      8. IF BIT 2**5 IS SET IN GENERAL STATUS  (CORRECTABLE  DATA       MLD
*         ERROR),  REQUEST  AND  INPUT  DETAIL STATUS, COMPUTE AND       MLD
*         SAVE THE CORRECTION VECTOR DATA IN THE STATUS BUFFER AND       MLD
*         EXECUTE THE ERROR EXIT SEQUENCE.                               MLD
*                                                                        MLD
*      9. IF BIT 2**8 IS CLEAR (NO RECOVERY IN PROGRESS) ENTER THE       MLD
*         ERROR EXIT SEQUENCE. (GENERAL STATUS AT  THIS  POINT  IS       MLD
*         STRANGE  SINCE  IT  IS NOT ZERO, BUT DOES NOT INDICATE A       MLD
*         RECOVERABLE OR NONRECOVERABLE ERROR).                          MLD
*                                                                        MLD
*     10. IF BIT 2**8 IS SET  (RECOVERY IN PROGRESS), DETERMINE IF       MLD
*         THE RETRY COUNT IN THE STATUS BUFFER IS ZERO (FIRST TIME       MLD
*         FAILURE).  IF SO, REQUEST AND INPUT  DETAIL  STATUS  AND       MLD
*         STORE  IT  AND GENERAL STATUS INTO WORDS 25B THRU 51B OF       MLD
*         THE STATUS BUFFER TO CAPTURE THE  ORIGINAL  STATUS  THAT       MLD
*         CAUSED  RECOVERY  TO  BE  PERFORMED.   ISSUE  A CONTINUE       MLD
*         FUNCTION  (0014), BUMP  THE  RETRY  COUNTER  IN  THE  PP       MLD
*         STATUS BUFFER AND GO TO STEP 6 TO PERFORM A RETRY OF THE       MLD
*         GET OPERATION.                                                 MLD
*                                                                        MLD
*     11. WE ARRIVE AT THIS STEP AFTER COMPLETING A GET  OPERATION       MLD
*         AND GENERAL STATUS IS ZERO (NO ERROR). EXECUTE THE ERROR       MLD
*         EXIT SEQUENCE IF THE RETRY COUNT IN THE STATUS BUFFER IS       MLD
*         NON-ZERO  (THE  READ  OF  THIS SECTOR HAS BEEN COMPLETED       MLD
*         SUCCESSFULLY BUT A RETRY WAS REQUIRED,  SO  CONTROL   IS       MLD
*         RETURNED  TO  THE  USER FOR POSSIBLE MESSAGE REPORTING).       MLD
*                                                                        MLD
*     12. DECREMENT  THE  CONTENTS OF REGISTER V BY ONE (NUMBER OF       MLD
*         SECTORS REMAINING TO BE READ). IF THE  RESULT  IS  ZERO,       MLD
*         PERFORM A NORMAL COMMAND EXIT.                                 MLD
*                                                                        MLD
          LDD    PA          TO FORM THE FUNCTION                        MLD
          SHN    0-1                                                     MLD
          ADN    RFD         LOAD THE FUNCTION                           MLD
          LJM    RDW0        READ ONE SECTOR                             MLD
          EJECT                                                          MLD
**        MARGINS- SAVE STROBES AND OFFSET MARGINS FOR LATER READS.      MLD
*                                                                        MLD
*                  MARGINS W, ABT Z                                      MLD
*                  MARGINS X OFFSET Y STROBES, ABT Z                     MLD
*                                                                        MLD
*         ENTRY  -  (A)  = ABT ADDRESS                                   MLD
*                   (PA) = MARGINS                                       MLD
*                                                                        MLD
*         EXIT   - MARGINS PARAMETER CONVERTED FOR FUNCTION              MLD
*                                                                        MLD
*                  ERRISO  - IF ILLEGAL STROBE/OFFSET WERE SELECTED      MLD
*                                                                        MLD
*         USES   - P, MARGINSA                                           MLD
*                                                                        MLD
*         CALLS  - ERA                                                   MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT MARGINS ARE LEGAL.                                 MLD
                                                                         MLD
 MARGINS  RJM    ERA         CALLER ENTRY POINT                          MLD
          LDD    PA          MARGIN PARAMETER WORD                       MLD
          SCN    33B         MASK OUT LEGAL BITS                         MLD
          ZJN    MARGINS1    IF LEGAL PARAMETERS                         MLD
          LDC    ER.ISO      ERROR EXIT                                  MLD
          LJM    ERR                                                     MLD
                                                                         MLD
**     2. SAVE SELECTED MARGINS.                                         MLD
                                                                         MLD
 MARGINS1 LDD    PA          PARAMETER WORD                              MLD
          SHN    2           LINE IT UP                                  MLD
          LPN    4           MASK IT                                     MLD
          STM    MARGINSA    STORE FORWARD OFFSET                        MLD
          LDD    PA          PARAMETER WORD                              MLD
          LPN    32B         MASK IN THE OTHER BITS                      MLD
          SHN    4           SHIFT TO CORRECT BIT POSITION               MLD
          RAM    MARGINSA    STORE IT                                    MLD
          LJM    XMARGINS    EXIT TO CALLER                              MLD
                                                                         MLD
                                                                         MLD
          EJECT                                                          MLD
**        RDWR   - SEEK AND I/O THE REQUESTED NUMBER OF SECTORS.         MLD
*                                                                        MLD
*                  READ V SECTORS AT CYL W TRK X SEC Y, ABT Z            MLD
*                  READ V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z      MLD
*                  READCW V SECTORS AT CYL W TRK X SEC Y, ABT Z          MLD
*                  VERIFY V SECTORS AT CYL W TRK X SEC Y, ABT Z          MLD
*                  VERIFY V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z    MLD
*                  WRITE V SECTORS AT CYL W TRK X SEC Y, ABT Z           MLD
*                  WRITE V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z     MLD
*                                                                        MLD
*         ENTRY  - (A)      = ABT ADDRESS                                MLD
*                  (PA)     = BITS 0-2 = FUNCTION CODE                   MLD
*                             BIT 4    = UNCODED/CODED FLAG              MLD
*                             BIT 5    = READ/WRITE FLAG                 MLD
*                                                                        MLD
*                  (PA+63B) = V                                          MLD
*                  (PA+65B) = W                                          MLD
*                  (PA+66B) = X                                          MLD
*                  (PA+67B) = Y                                          MLD
*                                                                        MLD
*         EXIT   - V = ZERO,                                             MLD
*                  W, X, _ Y = LAST CYL, TRK, _ SEC.                     MLD
*                                                                        MLD
*                  ERRDCE  - IF DATA COMPARE ERROR                       MLD
*                  ERRDNA  - IF ALL DATA NOT ACCEPTED FROM PP            MLD
*                  ERRIAL  - IF ACCESS LEVEL TO LOW FOR REQUEST          MLD
*                  ERRIDR  - IF INCOMPLETE DATA RETURNED TO PP           MLD
*                  ERRGSNR - IF GENERAL STATUS NOT RETURNED              MLD
*                  ERRNIDT - IF NO INACTIVE AFTER DATA TRANSFER          MLD
*                  ERRNIF  - IF NO INACTIVE TO LAST FUNCTION             MLD
*                  ERRNIGS - IF NO INACTIVE TO GENERAL STATUS            MLD
*                  ERRSTRY - IF A SUCCESSFUL RETRY HAS OCCURRED          MLD
*                                                                        MLD
*         USES   - RDWRF, COD, FUN, D.T1, D.T2, D.T4, SB(0-51),          MLD
*                  SBIE(SB(25-51)), (CL), (CT), (CS), D.Z0,              MLD
*                  D.Z1, D.Z2, VECTOR1(SB54), VECTOR2(SB55),             MLD
*                  VECADDR(SB53), WT, IR(0-501, OR(1-3)                  MLD
*                  RDW16, RDW23+1, RDW18, RDW22, RDW25,                  MLD
*                  RDW47, RDW46                                          MLD
*                                                                        MLD
*         CALLS  - SEEK1, RDW, STS, DST                                  MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            MLD
                                                                         MLD
 RDWR     RJM    TDR         CALLER ENTRY POINT                          MLD
                                                                         MLD
**     2. VALIDATE  ACCESS  TO  THE  CYLINDER  SPECIFIED  BY W AND       MLD
*         EXECUTE THE SEEK SEQUENCE TO MOVE THE DISK POSITIONER.         MLD
                                                                         MLD
          LDD    PA                                                      MLD
          SHN    18D-5D      SHIFT READ/WRITE FLAG TO BIT 0              MLD
          STD    RDWRF       SET/CLEAR READ/WRITE FLAG                   MLD
          SCN    1           CLEAR THE BIT                               MLD
          SHN    18D-4D-18D+5D SHIFT CODED FLAG TO BIT 0                 MLD
          STD    COD         SET/CLEAR THE CODED FLAG                    MLD
          SHN    0-14D       SHIFT IN THE FUNCTION                       MLD
                                                                         MLD
*         ENTRY POINT FOR GET AND SHORTRD                                MLD
                                                                         MLD
 RDW0     STD    FUN         SAVE THE FUNCTION                           MLD
                                                                         MLD
          LDC    0315B
          STM    RDW16       INDICATE NO RETRY                           MLD
          LDC    RDW24                                                   MLD
          STM    RDW23+1     SET JUMP ADDRESS FOR ALL BUT READCW         MLD
          LDM    RDWAL,RDWRF LOAD THE ACCESS LEVEL REQUIRED              MLD
          STD    D.T1                                                    MLD
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          ZJN    RDW2        IF IT IS A READ                             MLD
          LDD    COD         GOT THE CODED WORD                          MLD
          ZJN    RDW1        IF NOR CODED                                MLD
          LDI    CC                                                      MLD
          STM    OB+1                                                    MLD
 RDW1     LDC    0302B       FOR WRITE TYPE OPERATION FLAG               MLD
 RDW2     STM    RDW18       AND MODIFY REQUIRED LOCATIONS               MLD
          STM    RDW22                                                   MLD
          STM    RDW25                                                   MLD
          LDD    COD                                                     MLD
          NJN    RDW3                                                    MLD
          STM    RDW22                                                   MLD
                                                                         MLD
 RDW3     LDN    RETRY-SB 
          STD    D.T2        NUMBER OF WORDS IN SB TO CLEAR              MLD
 RDW4     LDN    0                                                       MLD
          STM    SB,D.T2     CLEAR THE STATUS BUFFER                     MLD
          SOD    D.T2                                                    MLD
          PJN    RDW4        IF NOT DONE                                 MLD
                                                                         MLD
          LDD    FUN                                                     MLD
          LMN    RDCW                                                    MLD
          NJN    RDW5        IF NOT READCW                               MLD
          LDC    RDW30                                                   MLD
          STM    RDW23+1     SET JUMP ADDRESS FOR READCW                 MLD
          UJN    RDW7        IGNORE ACCESS LEVEL ON READCW               MLD
                                                                         MLD
 RDW5     LDD    BD.AL                                                   MLD
          SBD    D.T1        TO TEST ACCESS LEVEL                        MLD
          PJN    RDW7        IF ACC.LEV. NOT PREALLOCATED AREA.          MLD
          ADN    1           TO VERIFY ANY OPERATION OK                  MLD
          MJN    RDW6        IF PREALLOCATED OPERATION IS NOT OK         MLD
          LDC    **                                                      MLD
 DEVTY    EQU    *-1         *** DEVICE TYPE STORE HERE ***              MLD
*         LDC    0000B       *** IF SINGLE DENSITY UNIT ASSIGNED ***     MLD
*         LDC    0634B       *** IF DOUBLE DENSITY UNIT ASSIGNED ***     MLD
          ADC    MAXCSD-PRECYL DETERMINES INNER MOST PREALLTD.           MLD
          SBI    CC          CURRENT CYLINDER                            MLD
          MJN    RDW7        IF CYL DESIRED IS IN PREALLOCATED AREA      MLD
 RDW6     LDC    ER.IAL      ELSE ERROR EXIT                             MLD
          LJM    ERR                                                     MLD
                                                                         MLD
 RDW7     RJM    SEEK1       TO SEEK TO DESIRED CYLINDER                 MLD
                                                                         MLD
**     3. EXECUTE  A  NORMAL EXIT IF THE CONTENTS OF REGISTER V IS       MLD
*         ZERO (NO SECTORS TO READ).                                     MLD
                                                                         MLD
          LDI    CL          LOAD THE REMAINING SECTOR COUNT             MLD
          SHN    -2                                                      MLD
          RAD    RT                                                      MLD
          LDI    CL                                                      MLD
          NJN    RDW11       IF THERE ARE SECTORS TO READ                MLD
                                                                         MLD
*         AN EXIT POINT                                                  MLD
                                                                         MLD
 RDW8     LDD    FUN         LOAD THE CURRENT FUNCTION
          LMN    RS          MASK FOR SHORTRD                            MLD
          NJN    RDW9        IF NOT A SHORT READ                         MLD
          LJM    XSHORT      EXIT TO SHORT READ                          MLD
                                                                         MLD
 RDW9     LDD    FUN          LOAD THE CURRENT FUNCTION                  MLD
          LMN    RFD         TEST IF A GET OPERATION                     MLD
          SHN    0-1                                                     MLD
          NJN    RDW10       IF IT IS NOT A GET OPERATION                MLD
          LJM    XGET        EXIT TO GET ROUTINE                         MLD
                                                                         MLD
 RDW10    LJM    XRDWR       EXIT TO STACK                               MLD
                                                                         MLD
**     4. ISSUE SELECTED STROBES AND OFFSET OPTIONS IF  THEY  HAVE       MLD
*         BEEN DEFINED BY A PREVIOUS MARGINS COMMAND.                    MLD
                                                                         MLD
 RDW11    LDD    FUN         CHECK FOR WRITE FUNCTION 
          SBN    WR 
          ZJN    RDW12       SKIP MARGINS ON WRITE ONLY 
          LDC    **          *** STROBE AND OFFSET SELECTIONS            MLD
 MARGINSA EQU    *-1                                                     MLD
          ZJN    RDW12       IF NO MARGINS                               MLD
          STD    D.T4        SAVE FOR MARGINS FUNCTION                   MLD
          LDN    SSO         LOAD THE FUNCTION                           MLD
          RJM    FNO         TO SEND MARGIN FUNCTION                     MLD
                                                                         MLD
**     5. CALCULATE THE NUMBER OF SECTORS THAT  CAN  BE  PROCESSED       MLD
*         FROM THE CURRENT TRACK AND SECTOR SPECIFIED BY REGISTERS       MLD
*         X AND Y TO THE END OF THE CURRENT  CYLINDER.  SET  THE         MLD
*         NUMBER  OF SECTORS TO READ THIS VALUE  OR THE  CONTENTS        MLD
*         OF REGISTER V,  WHICHEVER IS SMALLER.   ( NOTE THAT THE        MLD
*         MAXIMIM  NUMBER  OF  SECTORS  ( I/O LENGTH ) THAT CAN BE       MLD
*         PROCESSED  IS 456D ( ONE CYLINDER ).                           MLD
                                                                         MLD
 RDW12    LDN    TRL         TRACK LIMIT                                 MLD
          SBI    CT          BEGINNING TRACK                             MLD
          SHN    3           MULTIPLY BY 10                              MLD
          STD    D.T4                                                    MLD
          SHN    1           MULTIPLY BY 20                              MLD
          RAD    D.T4        TO GET TRACKS * SECTORS                     MLD
          LDN    SEL+1                                                   MLD
          SBI    CS          TO GET NUMBER OF SECTORS IN THIS TRACK      MLD
          RAD    D.T4        SECTORS REMAINING IN CYL.                   MLD
          SBI    CL          SECTORS TO READ                             MLD
          PJN    RDW13       IF LESS THAN SECTORS IN CYLINDER            MLD
          LDD    D.T4        SAVE THE SECTOR COUNT FOR THIS CYLINDER     MLD
          STI    CL                                                      MLD
 RDW13    LDI    CL          SECTORS TO READ OR WRITE                    MLD
                                                                         MLD
**     6. ISSUE AN I/O LENGTH  FUNCTION AND OUTPUT  THE  NUMBER OF       MLD
*         SECTORS TO BE  PROCESSED ( CALCULATED IN STEP 5 ) .            MLD
*         EFFECT ONLY WHEN USED ON 7054 S .                              MLD
                                                                         MLD
          STD    D.T4        SAVE FOR I/O LIMIT FUNCTION                 MLD
          LDN    IOL                                                     MLD
          RJM    FNO         TO FUNCTION AND OUTPUT THE I/O LIMIT        MLD
          UJN    RDW17       PERFORM FIRST OPERATION                     MLD
                                                                         MLD
                                                                         MLD
          EJECT                                                          MLD
* ******************************************************************     MLD
* ******************************************************************     MLD
*                                                                  *     MLD
*                                                                  *     MLD
*             NOTE.. NOTE.. NOTE.. NOTE..                          *     MLD
*                                                                  *     MLD
*             THIS IS THE START OF CODE                            *     MLD
*             IN WHICH THE TIMING IS CRITICAL                      *     MLD
*             WITH RESPECT TO THE DISK DRIVES.                     *     MLD
*                                                                  *     MLD
*             AFTER THE LAST INTERMITTENT ERROR                    *     MLD
*             INDICATE BY A LOST DATA CONTITION A                  *     MLD
*             CHANGE WAS MADE TO REMOVE 7 MICRO                    *     MLD
*             SECONDS OF CODE. ALL TEST CASES                      *     MLD
*             NOW RUN. IF CHANGES ARE REQUIRED                     *     MLD
*             DO THE FOLLOWING%                                    *     MLD
*             1. READ THE REFERENCE MANUALS                        *     MLD
*             2. ANALYZE AND UNDERSTAND THE CODE                   *     MLD
*             3. PERFORM A THOROUGH TEST ON ALL                    *     MLD
*                SUPPORTED DEVICES, AND ALLOW                      *     MLD
*                FOR POOR HEAD SWITCH TIMING.                      *     MLD
*                                                                  *     MLD
                                                                         MLD
                                                                         MLD
**     7. DECREMENT  THE  CONTENTS OF REGISTER V BY ONE (NUMBER OF       MLD
*         SECTORS REMAINING TO BE READ). IF THE  RESULT  IS  ZERO,       MLD
*         PERFORM A NORMAL COMMAND EXIT.                                 MLD
                                                                         MLD
 RDW14    ZJN    RDW16       IF NO STATUS ERROR                          MLD
                                                                         MLD
*         AN ERROR HAS OCCURRED, SO THE BUMPING OF SECTORS THAT          MLD
*         HAVE BEEN DONE MUST BE REVERSED AS THEY WERE ADVANCED.         MLD
                                                                         MLD
          AOI    CL          BUMP NUMBER OF SECTORS TO DO                MLD
          SBN    1                                                       MLD
          ZJN    RDW15       IF LAST SECTOR, SKIP TRACK/SECTOR           MLD
          SOI    CS          DECREMENT THE SECTOR REGISTER               MLD
          PJN    RDW15       IF NO SECTOR UNDERFLOW                      MLD
          LDN    27B
          STI    CS          RESET SECTOR REGISTER TO ZERO               MLD
          SOI    CT          DECREMENT TRACK                             MLD
 RDW15    LDM    SB 
          LMC    7777B
          ZJN    RDW15A 
          LJM    RDW39       PROCESS ERROR
                                                                         MLD
**     8. INCREMENT THE CONTENTS OF REGISTERS W,X,Y PER THE              MLD
*         1%1 INTERLACE FLOW-CHART. IF WE ARE ABOUT TO WRITE THE         MLD
*         LAST SECTOR ON A 7154 CONTROLLER, A WRITE LAST SECTOR          MLD
*         FUNCTION IS USED (0036 FOR WRITE, OR 0037 FOR WRITE VERIFY).   MLD
                                                                         MLD
 RDW16    UJN    *+15B       *** JUMP *+15 IF NO RETRY
*         DATA   0           *** DATA 0 IF RETRY DONE                    MLD
          AOI    CL          BUMP NUMBER OF SECTORS TO DO 
          SBN    1
          ZJN    RDW16A      IF LAST SECTOR, SKIP TRACK/SECTOR
          SOI    CS          DECREMENT THE SECTOR REGISTER
          PJN    RDW16A      IF NO SECTOR UNDERFLOW 
          LDN    27B
          STI    CS          RESET SECTOR REGISTER TO ZERO
          SOI    CT          DECREMENT TRACK
 RDW16A   LDC    ER.STRY     INDICATE SUCCESSFUL RETRY ERROR
          LJM    ERR
                                                                         MLD
 RDW17    LDI    CL                                                      MLD
          NJN    RDW18       IF MORE SECTORS TO PROCESS                  MLD
          LJM    RDW8        IF DONE                                     MLD
 RDW15A   LJM    ERRGSNR     ERR GENERAL STATUS NOT RECEIVED
                                                                         MLD
 RDW18    UJN    *+2         *** UJN *+2 FOR A WRITE TYPE FUNCTION       MLD
*         DATA   0           *** DATA  0 FOR A READ TYPE FUNCTION        MLD
          UJN    RDW20       IF READ                                     MLD
                                                                         MLD
          LMN    1                                                       MLD
 RDW19    NJN    RDW20       ***  NJN  IF NOT THE LAST SECTOR            MLD
*         UJN    *+4         ***  UJN  IF IT IS A 7054 CONTROLLER        MLD
          LDD    FUN                                                     MLD
          ADN    30B         CREATE A WRITE LAST SECTOR TYPE FUNCTION    MLD
          UJN    RDW21       TO PERFORM THE FUNCTION                     MLD
                                                                         MLD
**     9. ISSUE A FUNCTION TO READ, READCW, WRITE VERIFY, WRITE,         MLD
*         CONTINUE, WRITE VERIFY LAST SECTOR, OR WRITE LAST SECTOR.      MLD
                                                                         MLD
 RDW20    LDD    FUN         LOAD THE FUNCTION                           MLD
 RDW21    FAN    CH          SEND THE FUNCTION                           MLD
          STD    LF          SAVE THE FUNCTION                           MLD
                                                                         MLD
 RDW22    UJN    *+2         *** UJN *+2 FOR A WRITE TYPE FUNCTION       MLD
*         DATA   0           *** DATA  0 FOR A READ TYPE FUNCTION        MLD
          UJN    RDW23       IF READ                                     MLD
                                                                         MLD
**    10. IF  THE KEYWORD CODED WAS SPECIFIED IN THE WRITE OR VERIFY     MLD
*         COMMAND, STORE THE FOLLOWING DATA INTO THE PP OUTPUT BUFFER.   MLD
*                                                                        MLD
*           OB(1) TO REGISTER W (CYLINDER)                               MLD
*           OB(2) TO REGISTER X (TRACK)                                  MLD
*           OB(3) TO REGISTER Y (SECTOR)                                 MLD
                                                                         MLD
          LDI    CT                                                      MLD
          STM    OB+2        SET THE TRACK CODING                        MLD
          LDI    CS                                                      MLD
          STM    OB+3        SET THE SECTOR CODING                       MLD
                                                                         MLD
 RDW23    IJM    RDW24,CH    IF CHANNEL DEACTIVATED                      MLD
*         IJM    RDW30       *** IF READCW COMMAND                       MLD
          ADN    1                                                       MLD
          PJN    RDW23       IF NOT TIMED OUT                            MLD
          LDN    0                                                       MLD
          STD    WT          FORCE WORD COUNT TO ZERO                    MLD
          LJM    ERRNIF      ELSE ERROR EXIT                             MLD
                                                                         MLD
**    11. INPUT OR OUTPUT THE NUMBER OF WORDS SPECIFIED BY WC TO/FROM    MLD
*         THE PP INPUT/OUTPUT BUFFER. IF THE A REGISTER IS NON ZERO      MLD
*         AFTER COMPLETION, GO TO STEP 14.                               MLD
                                                                         MLD
 RDW24    ACN    CH          ACTIVATE THE CHANNEL                        MLD
          LDD    WC          GET THE WORD COUNT                          MLD
          STD    WT          PRESET WT ASSUME GOOD READ OR WRITE         MLD
 RDW25    UJN    *+2         *** UJN *+2 FOR A WRITE TYPE FUNCTION       MLD
*         DATA   0           *** DATA  0 FOR A READ TYPE FUNCTION        MLD
          UJN    RDW26       IF READ FUNCTION                            MLD
                                                                         MLD
          OAM    OB,CH       OUTPUT THE DATA                             MLD
          NJN    RDW27       IF WRITE ABORT                              MLD
 RDW25B   EJM    RDW25C,CH   CHECK CHANNEL
          ADN    1           EMPTY
          PJN    RDW25B      ELSE 
          LJM    RDW37       ERROR
 RDW25C   DCN    CH+40B      DISCONNECT THE CHANNEL 
          LDN    5
 RDW25A   SBN    1
          NJN    RDW25A      DELAY BEFORE SENDING GS FUNCTION 
          UJN    RDW29A      TO STATUS
                                                                         MLD
 RDW26    IAM    IB,CH       INPUT THE DATA                              MLD
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
          ZJN    RDW28       IF READ ABORT                               MLD
 RDW27    LJM    RDW35       TO PROCESS THE ERROR                        MLD
 RDW28    IJM    RDW29,CH    IF CHANNEL DEACTIVATED PROPERLY             MLD
          LJM    ERRNIDT     ELSE ERROR EXIT                             MLD
                                                                         MLD
**    12. IF  THE KEYWORD CODED WAS SPECIFIED IN THE READ COMMAND,       MLD
*         COMPARE THE CONTENTS OF THE FOLLOWING_                         MLD
*                                                                        MLD
*           IB(1) TO REGISTER W (CYLINDER)                               MLD
*           IB(2) TO REGISTER X (TRACK)                                  MLD
*           IB(3) TO REGISTER Y (SECTOR)                                 MLD
*                                                                        MLD
*         IF A NON-COMPARE IS DETECTED,  EXECUTE  THE  ERROR  EXIT       MLD
*          SEQUENCE.                                                     MLD
                                                                         MLD
 RDW29    LDM    IB+1        CHECK FOR CORRECT CODING                    MLD
          ADM    IB+2                                                    MLD
          ADM    IB+3                                                    MLD
          SBI    CC          FOR CODING CHECK                            MLD
          SBI    CT                                                      MLD
          SBI    CS                                                      MLD
 RDW29A   ZJN    RDW30       IF NO CODING ERROR 
          LDD    COD         CODED DATA FLAG                             MLD
          ZJN    RDW30       IF NOT CODED DATA                           MLD
          RJM    STS         GET GENERAL STATUS                          MLD
          RJM    DST         GET DETAIL STATUS                           MLD
          LDC    ER.DCE      ERROR EXIT FOR CODED ERROR                  MLD
          LJM    ERR                                                     MLD
                                                                         MLD
*     13. REQUEST  AND  INPUT  GENERAL  STATUS TO DETERMINE IF THE       MLD
*         OPERATION COMPLETED SUCCESSFULY. IF  GENERAL  STATUS  IS       MLD
*         ZERO (NO ERROR), GO TO STEP 7.  EXECUTE                        MLD
*         THE ERROR EXIT SEQUENCE IF THE RETRY COUNT IN THE STATUS       MLD
*         BUFFER IS NON-ZERO (THE READ OF  THIS  SECTOR  HAS  BEEN       MLD
*         COMPLETED SUCCESSFULLY BUT  A  RETRY  WAS  REQUIRED,  SO       MLD
*         CONTROL  IS  RETURNED  TO  THE USER FOR POSSIBLE MESSAGE       MLD
*         REPORTING).                                                    MLD
*                                                                        MLD
                                                                         MLD
 RDW30    FNC    GS,CH       FUNCTION FOR GENERAL STATUS                 MLD
          SOI    CL          DECREMENT SECTORS TO PROCESS                MLD
          ZJN    RDW32       IF NO MORE SECTORS TO DO                    MLD
          AOI    CS          BUMP SECTOR                                 MLD
          SBN    SEL+1                                                   MLD
          MJN    RDW31    -  IF NOT COMPLETE THIS TRACK                  MLD
          STI    CS          SET SECTOR TO ZERO                          MLD
          AOI    CT          BUMP THE TRACK                              MLD
 RDW31    LDN    0           TO INSURE THE REGISTER IS POSITIVE          MLD
 RDW32    IJM    RDW33,CH    IF CHANNEL DEACTIVATED                      MLD
          ADN    1                                                       MLD
          PJN    RDW32       IF NOT TIMED OUT                            MLD
          LJM    ERRNIGS     ELSE ERROR EXIT                             MLD
                                                                         MLD
 RDW33    ACN    CH          ACTIVATE THE CHANNEL                        MLD
          LCN    0
          IAN    40B+CH      INPUT GENERAL STATUS 
          STM    SB          SAVE STATUS
          IJM    RDW14,CH    IF CHANNEL DEACTIVATED                      MLD
          LMC    7777B
          ZJN    RDW34       IF NO STATUS RETURNED
          LDM    SB          GET GENERAL STATUS 
          IJM    RDW14,CH    TEST FOR INACTIVE AGAIN 7155 TAKE 4 USEC 
 RDW34    LJM    ERRGSNR
*                                                                   *    MLD
*                                                                   *    MLD
*                   END OF CRITICAL CODE                            *    MLD
*                                                                   *    MLD
* *******************************************************************    MLD
* *******************************************************************    MLD
                                                                         MLD
                                                                         MLD
**    14. PROCESS FOR READ ABORT BECAUSE THE  A  REGISTER IS NOT EQUAL   MLD
*         ZERO. SAVE THE COUNT OF ACTUAL WORDS READ IN LOCATION  WT      MLD
*         AND EXIT.                                                      MLD
                                                                         MLD
 RDW35    STD    D.T1        SAVE THE REMAINING WORD COUNT               MLD
          LDD    WC          LOAD THE WORD COUNT                         MLD
          SBD    D.T1        SUBTRACT THE REMAINDER                      MLD
          STD    WT          SAVE IT                                     MLD
          RJM    STS         TO PROVIDE ERROR STATUS                     MLD
          RJM    DST                                                     MLD
 RDW36    LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          NJN    RDW37       IF IT IS A WRITE                            MLD
          LDC    ER.IDR      ELSE ERROR EXIT                             MLD
          UJN    RDW38                                                   MLD
                                                                         MLD
 RDW37    LDC    ER.DNA      ERROR EXIT                                  MLD
 RDW38    LJM    ERR                                                     MLD
                                                                         MLD
*     15. REQUEST AND INPUT DETAIL STATUS.  EXECUTE THE ERROR EXIT       MLD
*         SEQUENCE IF BIT 2**9 IS SET IN GENERAL STATUS.                 MLD
*         (NONRECOVERABLE ERROR).                                        MLD
                                                                         MLD
 RDW39    RJM    DST         TO GET DETAILED STATUS                      MLD
          LDM    SB          GENERALSTATUS                               MLD
          SHN    17D-UNR                                                 MLD
          PJN    RDW40       IF NOT A UNRECOVERED ERROR                  MLD
          LDD    FUN         GET THE CURRENT FUNCTION                    MLD
          LMN    RS          COMPARE WITH SHORT READ                     MLD
          NJN    RDW41       IF NOT A SHORT READ                         MLD
          LJM    RDW8        ELSE EXIT IF SHORT READ                     MLD
                                                                         MLD
**    16. IF BIT 2**8 IS CLEAR (NO RECOVERY IN PROGRESS) ENTER THE       MLD
*         ERROR EXIT SEQUENCE. (GENERAL STATUS AT  THIS  POINT  IS       MLD
*         STRANGE  SINCE  IT  IS NOT ZERO, BUT DOES NOT INDICATE A       MLD
*         RECOVERABLE OR NONRECOVERABLE ERROR).                          MLD
                                                                         MLD
 RDW40    SHN    17D-RIP-17D+UNR   TEST REC. IN PROGRESS                 MLD
          PJN    RDW41       IF NO RECOVERY IN PROGRESS                  MLD
                                                                         MLD
**    17. IF BIT 2**5 IS SET IN GENERAL STATUS  (CORRECTABLE  DATA       MLD
*         ERROR),  REQUEST  AND  INPUT  DETAIL STATUS, COMPUTE AND       MLD
*         SAVE THE CORRECTION VECTOR DATA IN THE STATUS BUFFER AND       MLD
*         EXECUTE THE ERROR EXIT SEQUENCE.                               MLD
  
          SHN    3
          PJN    RDW49A      IF NON RECOVERABLE ERROR ON 7054 
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)
          ZJN    RDW43       IF IT IS A READ                             MLD
 RDW41    LJM    ERRAGS      ERROR EXIT FOR ABNORMAL STATUS              MLD
                                                                         MLD
 RDW42    LJM    RDW50                                                   MLD
                                                                         MLD
 RDW43    LCN    0                                                       MLD
          STD    D.Z1        PRESET RESULT                               MLD
                                                                         MLD
 RDW44    LDD    FUN         GET CURRENT FUNCTION 
          LMN    RS          COMPARE WITH SHORT READ                     MLD
          NJN    RDW50       RETRY NOT A SHORT READ 
          LJM    RDW8        ELSE EXIT IF SHORT READ                     MLD
                                                                         MLD
 RDW49A   LDM    SB+4 
          SHN    17-10
  
**    18. IF BIT 2**8  IS SET (RECOVERY IN PROGRESS), DETERMINE IF       MLD
*         THE RETRY COUNT IN THE STATUS BUFFER IS ZERO (FIRST TIME       MLD
*         FAILURE).  IF SO, REQUEST AND INPUT  DETAIL  STATUS  AND       MLD
*         STORE  IT  AND GENERAL STATUS INTO WORDS 25B THRU 51B OF       MLD
*         THE STATUS BUFFER TO CAPTURE THE  ORIGINAL  STATUS  THAT       MLD
*         CAUSED  RECOVERY  TO  BE  PERFORMED.   ISSUE  A CONTINUE       MLD
*         FUNCTION  (0014), BUMP  THE  RETRY  COUNTER  IN  THE  PP       MLD
*         STATUS BUFFER AND GO TO STEP 6 TO PERFORM A RETRY OF THE       MLD
*         READ.                                                          MLD
                                                                         MLD
 RDW50    LDM    RETRY                                                   MLD
          NJN    RDW52       IF NOT THE FIRST ERROR RETRY                MLD
          STM    RDW16       INDICATE A RETRY TO CRITICAL TIMING LOOP    MLD
          LDN    25B         ELSE MOVE THE INITIAL ERROR TO SBIE         MLD
          STD    D.T1                                                    MLD
 RDW51    LDM    SB,D.T1     LOAD A WORD                                 MLD
          STM    SBIE,D.T1   STORE A WORD                                MLD
          SOD    D.T1        DECREMENT THE COUNT                         MLD
          PJN    RDW51       IF NOT DONE MOVING WORDS                    MLD
 RDW52    AOM    RETRY       INCREMENT THE RETRY COUNT                   MLD
          LDN    CONT        FOR THE CONTINUE FUNCTION                   MLD
          LJM    RDW21       TO INPUT AFTER A CONTINUE                   MLD
                                                                         MLD
*         THE FOLLOWING FUNCTION TABLE MUST BE KEPT IN ORDER.            MLD
                                                                         MLD
          EJECT                                                          MLD
**        RESET  - AUTOLOAD THE BC TO RESTART CONTROLWARE AT THE IDLE    MLD
*                  LOOP.                                                 MLD
*                                                                        MLD
*                  RESET, ABT Z                                          MLD
*                                                                        MLD
*         ENTRY  - (A) = ABT ADDRESS                                     MLD
*                                                                        MLD
*         EXIT   - NONE                                                  MLD
*                                                                        MLD
*         USES   - P                                                     MLD
*                                                                        MLD
*         CALLS  - TCA, FNC                                              MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE I/O CHANNEL IS ASSIGNED.                       MLD
                                                                         MLD
 RESET    RJM    TCA         CHECK CHANNEL ASSIGNED AND SAVE ABORT ADDR. MLD
                                                                         MLD
**     2. ISSUE AN AUTOLOAD FUNCTION, ACTIVATE AND DEACTIVATE THE I/O    MLD
*         CHANNEL TO CAUSE THE BC TO RE-START EXECUTION.                 MLD
                                                                         MLD
          LDC    AUTO                                                    MLD
          RJM    FNC         TO FUNCTION AUTOLOAD                        MLD
          ACN    CH          ACTIIVATE THE CHANNEL                       MLD
          LDN    40B         DELAY A LITTLE                              MLD
 RESET1   SBN    1                                                       MLD
          NJN    RESET1      IF NOT END OF DELAY                         MLD
          DCN    CH+40B      DEACTIVATE THE CHANNEL                      MLD
          STM    COCON       SET CONTROLLER CONNECTED FLAG
                                                                         MLD
**     3. DELAY 10 MILLISECONDS TO ALL THE BC TO COMPLETE ITS            MLD
*         INITIALIZATION AND ENTER ITS MONITOR LOOP.                     MLD
                                                                         MLD
          LDC    10000       5 MSEC 
 RESET2   SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    RESET2      IF TIME NOT COUNTED DOWN                    MLD
          LJM    XRESET      EXIT TO CALLER                              MLD
          EJECT                                                          MLD
**        RTNADDR- PERFORM A RETURN CYLINDER ADDRESS FUNCTION.           MLD
*                                                                        MLD
*                  RTNADDR TO Y, ABT Z                                   MLD
*                                                                        MLD
*         ENTRY  - (A)  = ABT ADDRESS                                    MLD
*                  (PA) = Y                                              MLD
*                                                                        MLD
*         EXIT   - (PA) = THE ADDRESS RETURNED                           MLD
*                                                                        MLD
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  MLD
*                  ERRNIDT - IF NO INACTIVE AFTER DATA TRANSFER          MLD
*                  ERRWC   - IF BUFFER ADDRESS OR WC INCORRECT           MLD
*                                                                        MLD
*         USES   - (PA), P                                               MLD
*                                                                        MLD
*         CALLS  - TCO, STS, FNC, FJM, IJM                               MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE CONTROLLER IS CONNECTED.                       MLD
                                                                         MLD
 RTNADDR  RJM    TCO                                                     MLD
                                                                         MLD
**     2. VERIFY THAT Y IS IN RANGE OF THE INPUT BUFFER.                 MLD
                                                                         MLD
          LDN    1
          STD    PA+1        STORE WORD COUNT FOR RNTADDR 
          RJM    BD.TEST     TEST IF WITHIN RANGE 
                                                                         MLD
**     3. REQUEST AND INPUT GENERAL STATUS AND VERIFY THAT IT IS ZERO.   MLD
                                                                         MLD
 RTNADDR2 RJM    STS         TO GET STATUS                               MLD
          SHN    17D-BUSY                                                MLD
          PJN    RTNADDR3    IF STATUS IS OK                             MLD
          LJM    ERRAGS      ELSE ERROR EXIT                             MLD
                                                                         MLD
**     4. ISSUE A RETURN CYLINDER ADDRESS FUNCTION (0021).               MLD
                                                                         MLD
 RTNADDR3 LDN    RCA                                                     MLD
          RJM    FNC         TO FUNCTION RETURN CYLINDER ADDRESS         MLD
                                                                         MLD
**     5. PERFORM A ONE WORD INPUT AND STORE IT INTO THE INPUT BUFFER    MLD
*         AT THE ADDRESS SPECIFIED BY Y.                                 MLD
                                                                         MLD
          ACN    CH          TO ACTIVATE AND                             MLD
          RJM    FJM         WAIT FULL                                   MLD
          ZJN    RTNADDR4    IF NO FULL                                  MLD
          IAN    CH          INPUT THE WORD                              MLD
          STI    PA          SAVE THE WORD                               MLD
          RJM    IJM         INSURE THE CHANNEL DEACTIVATES              MLD
          NJN    RTNADDR6    IF NOT TIMED OUT                            MLD
                                                                         MLD
 ERRNIDT  EQU    *                                                       MLD
 RTNADDR4 LDC    ER.NIDT     ELSE ERROR EXIT                             MLD
 RTNADDR5 LJM    ERR                                                     MLD
                                                                         MLD
 RTNADDR6 LJM    XRTNADD     EXIT TO STACK
          EJECT                                                          MLD
**        SEEK   - SEEK TO THE ADDRESS SPECIFIED.                        MLD
*                                                                        MLD
*                  SEEK CYL W TRK X SEC Y, ABT Z                         MLD
*                                                                        MLD
*         ENTRY  - (A)      = ABT ADDRESS                                MLD
*                  (PA+65B) = W                                          MLD
*                  (PA+66B) = X                                          MLD
*                  (PA+67B) = Y                                          MLD
*                                                                        MLD
*         EXIT   - SEEK COMPLETED TO NEW ADDRESS                         MLD
*                                                                        MLD
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  MLD
*                  ERRCNC  - IF CONTROLLER/DRIVE NOT CONNECTED           MLD
*                  ERRFPNA - IF FUNCTION PARAMETERS NOT ACCEPTED         MLD
*                  ERRUHB  - IF THE UNIT IF BUSY FOR OVER 200 MSEC       MLD
*                                                                        MLD
*         USES   - P, SEEKA(0-4), SBIE, D.T1, D.T2                       MLD
*                                                                        MLD
*         CALLS  - TDR, STS, FNC, DST                                    MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            MLD
                                                                         MLD
 SEEK     RJM    TDR         SAVE ABORT ADDRESS,INSURE DR.CONN.          MLD
          RJM    SEEK1       TO DO A SEEK                                MLD
          LJM    XSEEK       EXIT                                        MLD
                                                                         MLD
 SEEK1X   LJM    **          SECONDARY ENTRY/EXIT                        MLD
 SEEK1    EQU    *-1                                                     MLD
          LDN    0           PROVIDES SEEK TIME BIASED BY MINUS ONE      MLD
          STD    SEEKA       PRESET CURRENT SEEK TIME                    MLD
          RJM    STS         TO GET STATUS                               MLD
          SHN    17D-CRES                                                MLD
          PJN    SEEK3                                                   MLD
 SEEK2    LJM    ERRCNC      ELSE IT IS AN ERROR                         MLD
                                                                         MLD
                                                                         MLD
**     2. PRESET SEEK FUNCTION DATA                                      MLD
                                                                         MLD
 SEEK3    LDM    UN          UNIT NUMBER                                 MLD
          STD    SEEKA+1                                                 MLD
          LDI    CC          CURRENT CYLINDER                            MLD
          STD    SEEKA+2                                                 MLD
          LDI    CT          CURRENT TRACK                               MLD
          STD    SEEKA+3                                                 MLD
          LDI    CS          CURRENT SECTOR                              MLD
          STD    SEEKA+4                                                 MLD
                                                                         MLD
**     3. ISSUE A 1/1 SEEK FUNCTION (0001).                              MLD
                                                                         MLD
          IANN   14B         INPUT THE REAL TIME CLOCK                   MLD
          STD    D.T1                                                    MLD
 SEEK5    LDN    SEK11                                                   MLD
          RJM    FNC         TO SEND A FUNCTION                          MLD
                                                                         MLD
**     4. OUTPUT 4 SEEK PARAMETER WORDS AND STORE THE NUMBER OF WORDS    MLD
*         ACTUALLY OUTPUT INTO THE WT REGISTER. VERIFY THAT 4 WORDS      MLD
*         WERE ACTUALLY TRANSMITTED.                                     MLD
                                                                         MLD
          LDN    4           WORD COUNT                                  MLD
          ACN    CH          ACTIVATE THE CHANNEL                        MLD
          OAM    SEEKA+1,CH  OUTPUT THE SEEK DATA                        MLD
          RJM    ETYCH
                                                                         MLD
**     5. REQUEST AND INPUT GENERAL STATUS.                              MLD
                                                                         MLD
 SEEK7    RJM    STS         TO OBTAIN STATUS                            MLD
          STM    SBIE                                                    MLD
                                                                         MLD
**     6. GO TO STEP 3 IF UNIT IS STILL BUSY AND 200 MSEC HAS NOT        MLD
*         ELAPSED (ABORT WHEN TIME ELAPSES).                             MLD
                                                                         MLD
          SHN    17D-BUSY    TEST FOR BUSY                               MLD
          PJN    SEEK11 
          LDC    1000D       WAIT AND TRY AGAIN                          MLD
          RAD    D.T1                                                    MLD
 SEEK8    IANN   14B         CHECK CLOCK AGAIN                           MLD
          STD    D.T2                                                    MLD
          LDD    D.T1                                                    MLD
          SBD    D.T2                                                    MLD
          ZJN    SEEK9       IF TIMING LOOP IS COMPLETE                  MLD
          SHN    17D-11D     TO ELIMINATE CLK WRAPE AROUND               MLD
          PJN    SEEK8       IF NOT TIMED OUT                            MLD
 SEEK9    AOD    SEEKA       INCREMENT ITERATION COUNT IF TIMED OUT      MLD
          LMC    200000D/1000D COUNT LIMIT FOR BUSY                      MLD
          ZJN    SEEK10      IF BUSY TIMED OUT                           MLD
          LJM    SEEK5       ELSE TRY AGAIN                              MLD
                                                                         MLD
 SEEK10   RJM    DST         IF TIMED OUT GET DET. STATUS                MLD
          LDC    ER.UHB      AND ERROR EXIT                              MLD
          UJN    SEEK13                                                  MLD
                                                                         MLD
**     7. STORE THE NUMBER OF MILLISECONDS REQUIRED TO COMPLETE THE      MLD
*         SEEK INTO SB(60).                                              MLD
                                                                         MLD
 SEEK11   LDD    SEEKA       MOVE THE SEEK TIME                          MLD
          ZJN    SEEK12      IF READY WITHOUT ANY MOVE                   MLD
          SBN    1           ADJUST THE SEEK TIME                        MLD
 SEEK12   STM    SEEKTIM     THIS IS MILLISEC. COUNT REQUIRED FOR SEEK   MLD
          SHN    -1                                                      MLD
          RAD    RT          INCREMENT I/O LIMIT                         MLD
                                                                         MLD
**     8. IF GENERAL STATUS IS ZERO, EXIT.  OTHERWISE, REQUEST AND       MLD
*         INPUT DETAIL STATUS AND EXECUTE THE ERROR EXIT SEQUENCE.       MLD
                                                                         MLD
          LDM    SB                                                      MLD
          ZJN    SEEK14      IF ZERO AFTER NOT BUSY                      MLD
          RJM    DST         ELSE GET DETAIL STATUS                      MLD
 ERRAGS   LDC    ER.AGS      AND ERROR EXIT                              MLD
 SEEK13   LJM    ERR                                                     MLD
                                                                         MLD
 SEEK14   LJM    SEEK1X      TO EXIT                                     MLD
          EJECT                                                          MLD
**        SHORTRD- PERFORM A SHORT READ OPERATION ON ONE SECTOR.         MLD
*                                                                        MLD
*                  SHORTRD CYL W TRK X SEC Y, ABT Z                      MLD
*                                                                        MLD
*         ENTRY  - (A)      = ABT ADDRESS                                MLD
*                  (PA+65B) = W                                          MLD
*                  (PA+66B) = X                                          MLD
*                  (PA+67B) = Y                                          MLD
*                                                                        MLD
*         EXIT   - NONE                                                  MLD
*                                                                        MLD
*         USES   - P, COD, RDWRF, WC, WT, D.T7, CL                       MLD
*                                                                        MLD
*         CALLS  - TDR, RDW0                                             MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            MLD
                                                                         MLD
                                                                         MLD
 SHORTRD  RJM    TDR         CALLER ENTRY POINT                          MLD
          STD    COD         SAVE THE UNCODED FLAG (FORCED)              MLD
          STD    RDWRF       INDICATE A READ OPERATION                   MLD
          LDC    SHRD                                                    MLD
          STD    WC          SET FOR ABNORMAL WORD COUNT                 MLD
          LDN    1                                                       MLD
          STD    D.T7        NUMBER OF SECTORS TO READ                   MLD
          LDN    D.T7                                                    MLD
          STD    CL          ADDRESS OF THE NUMBER OF SECTORS TO READ    MLD
                                                                         MLD
**     2. EXECUTE THE SEEK SEQUENCE TO MOVE THE DISK POSITIONER TO THE   MLD
*         SELECTED CYLINDER.                                             MLD
*                                                                        MLD
*      3. ISSUE A READ SHORT FUNCTION (0040).                            MLD
                                                                         MLD
          LDN    RS          TO SET THE FUNCTION                         MLD
          LJM    RDW0        TO VERIFY, SEEK, AND READ                   MLD
                                                                         MLD
**     4. INPUT 477B WORDS TO THE PP INPUT BUFFER.                       MLD
*                                                                        MLD
*      5. SET THE WT REGISTER TO THE NUMBER OF WORDS ACTUALLY INPUT.     MLD
*                                                                        MLD
*      6. REQUEST AND INPUT GENERAL AND DETAIL STATUS.                   MLD
                                                                         MLD
                                                                         MLD
**     7. VERIFY THAT 477B DATA WORDS WERE ACTUALLY READ.                MLD
                                                                         MLD
                                                                         MLD
          EJECT                                                          MLD
**        STATUS - GET GENERAL OR DETAIL/EXTENDED STATUS.                MLD
*                                                                        MLD
*                  STATUS GENERAL, ABT Z                                 MLD
*                  STATUS DETAIL, ABT Z                                  MLD
*                                                                        MLD
*           GENERAL - INPUT 1 WORD OF GENERAL STATUS TO  SB(0).          MLD
*           DETAIL  - INPUT 12D WORDS OF DETAIL STATUS TO SB(1)-SB(12D)  MLD
*                     IF CONTROLWARE IS BELOW LEVEL A09.  OTHERWISE,     MLD
*                     INPUT 20D WORDS OF DETAIL STATUS TO SB(1)-SB(20D)  MLD
*                                                                        MLD
*         ENTRY  - (A)  = ABT ADDRESS                                    MLD
*                  (PA) = CODE          0 = GENERAL                      MLD
*                                       1 = DETAIL/EXTENDED              MLD
*                                                                        MLD
*         EXIT   - NONE                                                  MLD
*                                                                        MLD
*         USES   - LF, P                                                 MLD
*                                                                        MLD
*         CALLS  - TCO, STS, DST                                         MLD
                                                                         MLD
**     1. STORE 7777B INTO THE STATUS BUFFER FOR WORDS ABOUT TO BE READ. MLD
*                                                                        MLD
*      2. VERIFY THAT THE CONTROLLER IS CONNECTED.                       MLD
*                                                                        MLD
 STATUS   RJM    TCO         TEST CONTROLLER CONNECTED
          LDD    PA                                                      MLD
          ZJN    STAT0A      IF GENERAL STATUS REQUEST                   MLD
          LDN    24B                                                     MLD
          STD    D.T1                                                    MLD
 STATUS0  LCN    0                                                       MLD
          STM    SB,D.T1                                                 MLD
          SOD    D.T1                                                    MLD
          NJN    STATUS0     IF NOT DONE SETTING DETAIL STATUS TO 7777B  MLD
 STAT0A   LDM    ERR3                                                    MLD
          SHN    12                                                      MLD
          ADM    ERR4        FORM ABORT ADDRESS IN A REGISTER            MLD
*                                                                        MLD
*      3. ISSUE THE SELECTED STATUS FUNCTION SPECIFIED BY THE KEYWORD    MLD
*         GENERAL (0012), DETAIL (0013) OR EXTENDED (0023).              MLD
*                                                                        MLD
*      4. INPUT THE REQUIRED NUMBER OF WORDS TO THE STATUS BUFFER        MLD
*         (1, 14B OR 24B).                                               MLD
                                                                         MLD
          LDD    PA          LOAD CODE                                   MLD
          NJN    STATUS1     IF DETAIL STATUS REQUEST                    MLD
          LDN    GS                                                      MLD
          STD    LF          SAVE LAST PRIMARY FUNCTION                  MLD
          RJM    STS         GET GENERAL STATUS                          MLD
          UJN    STATUS2                                                 MLD
                                                                         MLD
 STATUS1  LDN    EDS         EXTENDED DETAIL STATUS 
          STD    LF          SAVE LAST PRIMARY FUNCTION                  MLD
          RJM    DST         GET DETAIL/EXTENDED STATUS                  MLD
 STATUS2  LJM    XSTATUS     EXIT TO STACK
          EJECT                                                          MLD
**        THE FOLLOWING ARE GENERAL PURPOSE SUBROUTINES TO BE USED BY    MLD
*         ANY OF THE FUNCTIONS.                                          MLD
          SPACE  4,10                                                    MLD
**        DST    - OBTAIN DETAIL/EXTENDED STATUS.                        MLD
*                                                                        MLD
*         ENTRY  - NONE                                                  MLD
*                                                                        MLD
*         EXIT   - STATUS BUFFER CONTAINS THE CURRENT DETAIL STATUS      MLD
*                  OR EXTENDED DETAILED STATUS. TO BE USED FOR ERROR     MLD
*                  CHECKING.                                             MLD
*                                                                        MLD
*                - (A) = (SB+13D) 
* 
*                  ERRISR  - IF INCOMPLETE STATUS RETURNED               MLD
*                  ERRNIDS - IF NO INACTIVE TO DETAIL STATUS             MLD
*                                                                        MLD
*         USES   -                                                       MLD
*                                                                        MLD
*         CALLS  - STATUS1                                               MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 247+ MICROSEC.     MLD
*                                                                        MLD
                                                                         MLD
 DST0     LDM    SB+13D      DETAIL STATUS WORD 13
 DSTX     LJM    **          ENTRY/EXIT                                  MLD
 DST      EQU    *-1                                                     MLD
                                                                         MLD
*         STORE 7777B INTO ALL WORDS                                     MLD
                                                                         MLD
          LDN    24B         WORD COUNT FOR EXTENDED STATUS 
          STD    D.T1                                                    MLD
 DST1     LCN    0                                                       MLD
          STM    SB,D.T1                                                 MLD
          SOD    D.T1                                                    MLD
          NJN    DST1        DO ALL WORDS                                MLD
                                                                         MLD
          LDN    EDS         EXTENDED STATUS FUNCTION 
          RJM    FNA         ISSUE STATUS FUNCTION                       MLD
          NJN    DST3        IF FUNCTION ACCEPTED                        MLD
          LDC    ER.NIDS     ERROR IF NO INACTIVE TO DETAIL/EXTENDED     MLD
          UJN    DST6                                                    MLD
                                                                         MLD
 DST3     ACN    CH                                                      MLD
          RJM    FJM         WAIT FOR FULL                               MLD
          ZJN    DST5        IF FULL NOT RECEIVED                        MLD
          LDN    24B
          IAM    SB+1,CH                                                 MLD
          NJN    DST5        IF ALL WORDS NOT INPUT                      MLD
          SFM    ERCPE3,CH   CHECK FOR CH PARITY ERROR
          RJM    IJM         VERIFY INACTIVE IS RECEIVED                 MLD
          NJN    DST0        IF INACTIVE RECEIVED 
 DST5     LDC    ER.ISR      ERROR IF INCOMPLETE STATUS RETURNED         MLD
 DST6     LJM    ERR                                                     MLD
          SPACE  4,10                                                    MLD
**        ERA    - SAVE ERROR EXIT (ABORT) ADDRESS.                      MLD
*                                                                        MLD
*         ENTRY  - (A) = THE ABORT ADDRESS                               MLD
*                                                                        MLD
*         EXIT   - ABT ADDRESS SAVED IN ERR3 AND ERR4.                   MLD
*                                                                        MLD
*         USES   - ERR3,ERR4                                             MLD
*                                                                        MLD
*         CALLS  - NONE                                                  MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 10 MICROSEC.       MLD
*                                                                        MLD
                                                                         MLD
 ERAX     LJM    **          ENTRY/EXIT                                  MLD
 ERA      EQU    *-1                                                     MLD
          STM    ERR4        SAVE ABORT ADDRESS                          MLD
          SHN    -12                                                     MLD
          STM    ERR3                                                    MLD
          UJN    ERAX        EXIT                                        MLD
  
  
  
**        ETYCH  - WAIT FOR CHANNEL TO GO EMPTY.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - ERRFPNA-IF FUNCTION NOT ACCEPTED 
*                - RDW37 -IF NOT EMPTY
* 
*         USES   - NONE 
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC
* 
  
 ETYCHX   LJM    ** 
 ETYCH    EQU    *-1
          ZJN    ETYCH2      OUTPUT COMPLETE
 ERRFPNA  LDC    ER.FPNA     ELSE ERROR 
 ETYCH1   LJM    ERR         PROCESS ERROR
 ETYCH2   EJM    ETYCH3,CH   EMPTY CHECK
          ADN    1           INCREMENT COUNT
          PJN    ETYCH2      WAIT 
          LJM    RDW37       GO TO ERROR
  
  
 ETYCH3   DCN    CH+40B      DEACTIVATE 
          UJN    ETYCHX      EXIT 
          SPACE  4,10                                                    MLD
**        FJM    - WAIT FOR CHANNEL TO GO FULL.                          MLD
*                                                                        MLD
*         ENTRY  - NONE                                                  MLD
*                                                                        MLD
*         EXIT   - (A) NONZERO IF NOT TIMED OUT WAITING FULL             MLD
*                  (A) ZERO IF TIMED OUT                                 MLD
*                                                                        MLD
*         USES   - D.T1                                                  MLD
*                                                                        MLD
*         CALLS  - NONE                                                  MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC.        MLD
*                                                                        MLD
                                                                         MLD
 FJMX     LJM    **          ENTRY/EXIT                                  MLD
 FJM      EQU    *-1                                                     MLD
          LDC    TIMFJM*2    ITERATION TIME 
 FJM1     FJM    FJMX,CH     IF FULL EXIT                                MLD
 FJM2     SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    FJM1        IF TIME NOT COUNTED DOWN                    MLD
          UJN    FJMX        ELSE EXIT WITH A EQ. ZERO                   MLD
          SPACE  4,10                                                    MLD
**        FNC    - ISSUE A FUNCTION ON A CHANNEL AND WAIT INACTIVE.      MLD
*                                                                        MLD
*         ENTRY  - (A) = FUNCTION TO ISSUE                               MLD
*                                                                        MLD
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED.                   MLD
*                                                                        MLD
*                  ERRNIF  - IF NO INACTIVE TO LAST FUNCTION             MLD
*                                                                        MLD
*         USES   - LF                                                    MLD
*                                                                        MLD
*         CALLS  - FNA                                                   MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 22 MICROSEC.       MLD
*                                                                        MLD
                                                                         MLD
 FNCX     LJM    **          ENTRY/EXIT                                  MLD
 FNC      EQU    *-1                                                     MLD
          STD    LF          TO SAVE LAST MAJOR FUNCTION                 MLD
          RJM    FNA         TO FUNCTION AND WAIT INACTIVE               MLD
          NJN    FNCX        IF INACTIVE EXIT                            MLD
 ERRNIF   LDC    ER.NIF      ELSE ERROR EXIT                             MLD
          UJN    ETYCH1      GO TO ERROR
          SPACE  4,10                                                    MLD
**        FNA    - ISSUE A FUNCTION AND WAIT INACTIVE.                   MLD
*                                                                        MLD
*         ENTRY  - (A) = FUNCTION TO ISSUE                               MLD
*                                                                        MLD
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED                    MLD
*                                                                        MLD
*         USES   - NONE                                                  MLD
*                                                                        MLD
*         CALLS  - IJM                                                   MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 14 MICROSEC.       MLD
*                                                                        MLD
                                                                         MLD
 FNAX     LJM    **          ENTRY/EXIT                                  MLD
 FNA      EQU    *-1                                                     MLD
          FAN    CH          FUNCTION FROM A                             MLD
          RJM    IJM         WAIT FOR INACTIVE                           MLD
          UJN    FNAX        EXIT                                        MLD
          SPACE  4,10                                                    MLD
**        FNO    - ISSUE FUNCTION AND OUTPUT ONE WORD OF DATA.           MLD
*                                                                        MLD
*         ENTRY  - (A)  = FUNCTION DESIRED                               MLD
*                  FNOA = DATA WORD TO OUTPUT                            MLD
*                                                                        MLD
*         EXIT   - NONE                                                  MLD
*                                                                        MLD
*                 ERRFPNA - IF FUNCTION PARAMETERS NOT ACCEPTED          MLD
*                                                                        MLD
*         USES   - NONE                                                  MLD
*                                                                        MLD
*         CALLS  - FNC, DCN                                              MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 40 MICROSEC.       MLD
*                                                                        MLD
                                                                         MLD
 FNOX     LJM    **          ENTRY/EXIT                                  MLD
 FNO      EQU    *-1                                                     MLD
          RJM    FNC         TO SEND FUNCTION                            MLD
          ACN    CH          ACTIVATE THE CHANNEL                        MLD
          LDN    1                                                       MLD
          OAM    D.T4,CH     OUTPUT THE CONTROL DATA                     MLD
          RJM    ETYCH       GO TO EMPTY CHECK
          UJN    FNOX        EXIT 
                                                                         MLD
          SPACE  4,10                                                    MLD
**        IJM    - WAIT INACTIVE AND TIME OUT.                           MLD
*                                                                        MLD
*         ENTRY  - NONE                                                  MLD
*                                                                        MLD
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED                    MLD
*                        ZERO IF FUNCTION NOT ACCEPTED                   MLD
*                                                                        MLD
*         USES   - D.T3                                                  MLD
*                                                                        MLD
*         CALLS  - NONE                                                  MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC.        MLD
*                                                                        MLD
                                                                         MLD
 IJMX     LJM    **          ENTRY/EXIT                                  MLD
 IJM      EQU    *-1                                                     MLD
          LDN    4
          STM    IJM3 
 IJMA     LCN    3
 IJM1     IJM    IJMX,CH     IF INACTIVE EXIT                            MLD
 IJM2     SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    IJM1        IF NOT COUNTED DOWN                         MLD
          SOM    IJM3 
          NJN    IJMA        IF NOT ONE SECOND
          UJN    IJMX        ELSE EXIT W/(A) = ZERO                      MLD
  
 IJM3     DATA   0           TIME FOR 1 SECOND
          SPACE  4,10                                                    MLD
**        OPC    - RELEASE THE CONTROLLER WITH AN OPERATION COMPLETE.    MLD
*                                                                        MLD
*         ENTRY  - NONE                                                  MLD
*                                                                        MLD
*         EXIT   - (A) = ZERO IF CONTROLLER NOT CONNECTED                MLD
*                      = NONZERO IF OPERATION COMPLETE ACCEPTED          MLD
*                                                                        MLD
*         USES   - NONE                                                  MLD
*                                                                        MLD
*         CALLS  - FNC                                                   MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 44 MICROSEC.       MLD
*                                                                        MLD
                                                                         MLD
 OPCX     LJM    **          ENTRY/EXIT                                  MLD
 OPC      EQU    *-1                                                     MLD
          LDM    BD.CHFG                                                 MLD
          ZJN    OPCX        EXIT IF CHANNEL NOT RESERVED                MLD
          LDM    COCON                                                   MLD
          NJN    OPCX        EXIT IF CONTROLLER NOT RESERVED             MLD
          LDN    77B                                                     MLD
          STM    COCON       CLEAR THE CONTROLLER CONNECT FLAG           MLD
          STM    DRCON       CLEAR THE DRIVE CONNECT FLAG                MLD
          LDC    ** 
 WD13     EQU    *-1         DETAIL STATUS WORD 13 STORED HERE
          SBN    2
          MJN    OPC0A       IF CONTROLLER NOT RESERVED 
          NJN    OPCX        IF CONTROLLER AND UNIT RESERVED
          LDN    DREL 
          UJN    OPC0B
 OPC0A    LDM    ERR3        UPPER BITS OF ABT ADDRESS
  
          SBN    77B                                                     MLD
          NJN    OPC1        IF NORMAL USER CALL                         MLD
          LDN    OC                                                      MLD
 OPC0B    RJM    FNA
          NJN    OPCX        IF NOT FUNCTION TIMEOUT                     MLD
          DCN    CH+40B      ELSE DO A DISCONNECT                        MLD
 OPC0     UJN    OPCX        RETURN 
                                                                         MLD
 OPC1     LDN    OC                                                      MLD
          RJM    FNC         TO FUNCTION OPERATION COMPLETE              MLD
          UJN    OPC0        EXIT 
          SPACE  4,10                                                    MLD
**        STS    - REQUEST AND INPUT GENERAL STATUS.                     MLD
*                                                                        MLD
*         ENTRY  - NONE                                                  MLD
*                                                                        MLD
*         EXIT   - (A) = STATUS                                          MLD
*                                                                        MLD
*                  ERRGSNR - IF GENERAL STATUS NOT RETURNED              MLD
*                  ERRNIGS - IF NO INACTIVE TO GENERAL STATUS            MLD
*                                                                        MLD
*         USES   - SB                                                    MLD
*                                                                        MLD
*         CALLS  - STATUS1                                               MLD
*                                                                        MLD
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 60 MICROSEC.       MLD
*                                                                        MLD
                                                                         MLD
 STSXX    LDM    SB          LOAD STATUS AND EXIT                        MLD
 STSX     LJM    **          ENTRY/EXIT                                  MLD
 STS      EQU    *-1                                                     MLD
          LCN    0                                                       MLD
          STM    SB          NEGATIVE ZERO TO SB                         MLD
          LDN    GS                                                      MLD
          RJM    FNA         ISSUE GENERAL STATUS FUNCTION               MLD
          NJN    STS1        IF FUNCTION ACCEPTED                        MLD
 ERRNIGS  LDC    ER.NIGS     ERROR IF NO INACTIVE TO GS FUNCTION         MLD
          UJN    STS3                                                    MLD
                                                                         MLD
 STS1     LDN    0
          STM    COCON       SET CONTROLLER CONNECTED 
          ACN    CH 
          RJM    FJM         WAIT FOR FULL                               MLD
          ZJN    STS2        IF NO FULL RECEIVED                         MLD
          LDN    1                                                       MLD
          IAM    SB,CH       INPUT GENERAL STATUS                        MLD
          NJN    STS2        IF NO STATUS PROVIDED                       MLD
          SFM    ERCPE2,CH   CHECK FOR CH PARITY ERROR
          RJM    IJM         WAIT FOR INACTIVE                           MLD
          NJN    STSXX       IF INACTIVE RECEIVED                        MLD
                                                                         MLD
 ERRGSNR  EQU    *                                                       MLD
 STS2     LDC    ER.GSNR     ERROR IF NO FULL OR NO INACTIVE             MLD
 STS3     UJN    TCA1                                                    MLD
          SPACE  4,10                                                    MLD
**        TCA    - TEST CHANNEL ASSIGNMENT.                              MLD
*                                                                        MLD
*         ENTRY  - (A) = ABORT ADDRESS                                   MLD
*                                                                        MLD
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4                   MLD
*                                                                        MLD
*                  ERRCNA  - IF CHANNEL NOT RESERVED                     MLD
*                                                                        MLD
*         CALLS  - ERA                                                   MLD
*                                                                        MLD
*         USES   - NONE                                                  MLD
*                                                                        MLD
                                                                         MLD
 TCAX     LJM    **          ENTRY/EXIT                                  MLD
 TCA      EQU    *-1                                                     MLD
          RJM    ERA         TO SAVE ABORT ADDRESS                       MLD
          LDM    BD.CHFG                                                 MLD
          NJN    TCAX        EXIT IF CHANNEL ASSIGNED                    MLD
          LDC    ER.CNA      ERROR IF CHANNEL NOT RESERVED               MLD
 TCA1     UJN    TDR1                                                    MLD
          SPACE  4,10                                                    MLD
**        TCO    - TEST CONTROLLER CONNECTED.                            MLD
*                                                                        MLD
*         ENTRY  - (A) = ABORT ADDRESS                                   MLD
*                                                                        MLD
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4                   MLD
*                  WC SET TO WRRD                                        MLD
*                                                                        MLD
*         USES   - WC                                                    MLD
*                                                                        MLD
*         CALLS  - TCA                                                   MLD
*                                                                        MLD
                                                                         MLD
 TCOX     LJM    **          ENTRY/EXIT                                  MLD
 TCO      EQU    *-1                                                     MLD
          RJM    TCA         TO SAVE ABORT ADDRESS, CHECK ACTIVE         MLD
          LDC    WRRD                                                    MLD
          STD    WC          SET WORD COUNT FOR ALL COMMANDS.            MLD
          LDC    77B                                                     MLD
 COCON    EQU    *-1         *** CONTROLLER CONNECTED FLAG STORED HERE   MLD
          ZJN    TCOX        IF CONNECTED                                MLD
          UJN    ERRCNC      ELSE ERROR EXIT                             MLD
          SPACE  4,10                                                    MLD
**        TDR    - TEST DRIVE RESERVED.                                  MLD
*                                                                        MLD
*         ENTRY  - (A) = ABORT ADDRESS                                   MLD
*                                                                        MLD
*         EXIT   - NONE                                                  MLD
*                                                                        MLD
*         USES   - NONE                                                  MLD
*                                                                        MLD
*         CALLS  - TCO                                                   MLD
*                                                                        MLD
                                                                         MLD
 TDRX     LJM    **          ENTRY/EXIT                                  MLD
 TDR      EQU    *-1                                                     MLD
          RJM    TCO         SAVE ABT ADDRESS,CHECK CTLR. CONNECTED      MLD
          LDC    77B                                                     MLD
 DRCON    EQU    *-1         *** DRIVE CONNECTED FLAG STORED HERE.       MLD
          ZJN    TDRX        IF CONNECTED EXIT                           MLD
 ERRCNC   LDC    ER.CNC      ELSE ERROR EXIT                             MLD
 TDR1     UJN    ERR                                                     MLD
  
 ERCPE1   RJM    STS         GET GENERAL STATUS 
 ERCPE2   RJM    DST         GET DETAILED STATUS
 ERCPE3   LDC    ER.CPE 
          EJECT                                                          MLD
**        ERR    - ERROR EXIT SUBROUTINE                                 MLD
*                                                                        MLD
*         ENTRY  - (A) = MESSAGE ADDRESS INDEX                           MLD
*                                                                        MLD
*         EXIT   - (A) = ABORT ADDRESS FOR AN ABORT                      MLD
*                  (A) = LINE NUMBER FOR MUDULE TERMINATE                MLD
*                                                                        MLD
*         USES   - D.Z1, D.Z2, EC, EM, EA                                MLD
                                                                         MLD
*                                                                        MLD
*         CALLS  - NONE                                                  MLD
*                                                                        MLD
                                                                         MLD
 ERR      STD    D.Z1        SAVE MESSAGE INDEX AND ERROR NUMBER         MLD
          SHN    -12                                                     MLD
          STD    D.Z2        SAVE ABORT FLAG                             MLD
          LDM    BD.CHFG                                                 MLD
          ZJN    ERR2        IF CHANNEL IS NOT ASSIGNED                  MLD
          LDD    BD.AL                                                   MLD
          SBN    AL21                                                    MLD
          ZJN    ERR2        IF ACCESS LEVEL INDICATES NO CHAN CLEANUP   MLD
 ERR1     IJM    ERR2,0      CLEAN UP CHANNEL                            MLD
          DCN    40B                                                     MLD
 ERR2     LDD    D.Z1                                                    MLD
          LPN    77B         MASK ERROR CODE                             MLD
          ADC    4500B       ADD IN BIAS FOR 844HT PRODUCT OVERLAY       MLD
          STD    EC          STORE ERROR CODE                            MLD
          LDD    D.Z1                                                    MLD
          SHN    -6                                                      MLD
          ADC    100B        FLAG MESSAGE INDEX AS OVERLAY MESSAGE       MLD
          STD    EM          STORE MESSAGE INDEX                         MLD
          LDD    P                                                       MLD
          STD    EA          STORE LINE NUMBER WHERE ERROR OCCURRED      MLD
          LDD    D.Z2                                                    MLD
          NJN    ERR5        IF ABORT FLAG SET                           MLD
          LDC    **                                                      MLD
 ERR3     EQU    *-1         FOR ABORT ADDRESS                           MLD
          SHN    12                                                      MLD
          LMC    **                                                      MLD
 ERR4     EQU    *-1         FOR ABORT ADDRESS                           MLD
          LJM    BD.RNI      RNI AT THE REJECT ADDRESS                   MLD
                                                                         MLD
 ERR5     LJM    BD.ABT      TERMINATE MODULE                            MLD
                                                                         MLD
                                                                         MLD
 IB       EQU    6500B       INPUT BUFFER                                MLD
 LIB      EQU    505B        LENGTH OF INPUT AND OUTPUT BUFFERS          MLD
 OB       EQU    IB+LIB      OUTPUT BUFFER                               MLD
 SB       EQU    OB+LIB      STATUS BUFFER                               MLD
 SBIE     EQU    SB+25B      STATUS THAT DETECTED THE ERROR              MLD
 RETRY    EQU    SB+52B      RETRY COUNT                                 MLD
 RDWAL    EQU    SB+53B      ACCESS LEVEL FOR READ AND WRITE
 SERNUM1  EQU    SB+56B      FIRST HALF OF PACK SERIAL NUMBER            MLD
 SERNUM2  EQU    SB+57B      SECND HALF OF PACK SERIAL NUMBER            MLD
 SEEKTIM  EQU    SB+60B      LAST SEEK TIME                              MLD
 SBLWA    EQU    SB+64B      STATUS BUFFER LWA+1                         MLD
 LSB      EQU    64B         LENGTH OF STATUS BUFFER                     MLD
                                                                         MLD
          ERRPL  *-IB-1      ERROR IF 844FT OVERLAY OVERFLOW             MLD
          EJECT                                                          MLD
**        THE INITIALIZATION CODE THAT FOLLOWS IS OVERLAYED BY THE       MLD
*         PRODUCT OVERLAY BUFFERS ABOVE.                                 MLD
*                                                                        MLD
*         TEST EQUIPMENT AND UNIT NUMBER                                 MLD
*                                                                        MLD
 INIT     LDN    0                                                       MLD
          STD    D.Z1        CLEAR COUNTER                               MLD
 INIT0    LDN    0                                                       MLD
          STM    SB,D.Z1     CLEAR STATUS BUFFER                         MLD
          AOD    D.Z1                                                    MLD
          SBN    LSB                                                     MLD
          NJN    INIT0       IF STATUS BUFFER NOT CLEARED                MLD
          LDM    BD.SN                                                   MLD
          STM    SERNUM1     SAVE USER SUPPLIED SERIAL NUMBER IN SB      MLD
          LDM    BD.SN+1                                                 MLD
          STM    SERNUM2                                                 MLD
          LDM    BD.EQ                                                   MLD
          LPN    77B                                                     MLD
          STM    UN          SET UNIT NUMBER                             MLD
          STM    SB+63B      UNIT TO STATUS BUFFER                       MLD
          LDN    0                                                       MLD
          STM    SB+62B      EQUIPMENT NUMBER TO STATUS BUFFER           MLD
                                                                         MLD
*         SET DELAY TIME BASED ON SPEED OF PPU                           MLD
                                                                         MLD
 INIT1    LDC    TSPEED 
          STD    D.T0                                                    MLD
 INIT2    LDI    D.T0                                                    MLD
          ZJN    INIT3       IF END OF TABLE                             MLD
          STD    D.T1                                                    MLD
          LDI    D.T1                                                    MLD
          SCN    77B
          ADM    BD.SPEED 
          STI    D.T1        SET ADN/SBN VALUE
          AOD    D.T0                                                    MLD
          UJN    INIT2       COMPLETE ALL WORDS                          MLD
                                                                         MLD
*         STORE I/O CHANNEL INTO COMMANDS                                MLD
                                                                         MLD
 INIT3    LDM    BD.CHAN                                                 MLD
          STD    D.T2                                                    MLD
          STM    SB+61B      I/O CHANNEL TO STATUS BUFFER                MLD
          LDC    TCHAN                                                   MLD
          STD    D.T0        SET FWA OF TABLE CONTAINING ADDRESSES       MLD
 INIT4    LDI    D.T0                                                    MLD
          ZJN    INIT5       IF END OF TABLE                             MLD
          STD    D.T1                                                    MLD
          LDI    D.T1                                                    MLD
          LPC    7740B                                                   MLD
          ADD    D.T2                                                    MLD
          STI    D.T1                                                    MLD
          AOD    D.T0                                                    MLD
          UJN    INIT4       COMPLETE ALL WORDS                          MLD
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS DEFINED
*         AT UPDATE TIME. THIS DEFINITION MEANS THAT THE ASSEMBLY WILL BE 
*         FOR THE NOSVE ENVIRONMENT.
* 
*         *IF DEF,MVE 
*IF DEF,MVE 
 INIT5    STD    D.T1        CLEAR CELL 
          LDC    MMSGL. 
          STD    D.T0        LENGTH OF PO MSG AREA IN 60 BIT WORDS
 INIT5.1  SBN    3           NUMBER OF 60 BIT WORDS/MESSAGE 
          MJN    INIT5.2     IF NO MESSAGES 
          STD    D.T0 
          AOD    D.T1        INCREMENT MESSAGE COUNT
          LDD    D.T0 
          NJN    INIT5.1     IF MORE MESSAGES 
 INIT5.2  LDD    D.T1 
          STM    BD.MSGS     MESSAGE COUNT
* 
*         WRITE PP MESSAGES TO CM 
* 
 INIT5.3  LDN    0
          STD    D.Z1 
          STD    D.Z2 
          STD    D.Z3 
          STD    D.Z4 
 INIT6    LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD
 INIT6.1  EQU    *-1         MODIFIED TO FWA OF INITIALIZATION ERROR
          ZJN    INIT8       IF END OF MESSAGE
 INIT7    STM    D.T4,D.Z2   STORE IN D.T4+ 
          AOD    D.Z1        BUMP PP MESSAGE POINTER
          UJN    INIT9
 INIT8    LDC    2R          MESSAGE END, STORE BLANKS
          STM    D.T4,D.Z2
 INIT9    AOD    D.Z2        BUMP D.T4+ POINTER 
          SBN    4
          NJN    INIT6       IF NOT 4 PP WORDS
          STD    D.Z2        CLEAR POINTER
          LDC    BD.MSGA     INDEX INTO CM COMM BUFFER TO PO MSG AREA 
          ADD    D.Z4        BIAS TO WORD WITHIN PO MSG AREA
          STM    BD.IDEX
          LDN    BD.CMB      POINTER TO FWA OF CM COMM BUFFER 
          RJM    BD.SETR
          CWDL   D.T4        WRITE MSG WORD TO CM 
          AOD    D.Z4        INCREMENT BIAS INTO PO MSG AREA
          AOD    D.Z3        BUMP CM WORD COUNTER 
          SBN    BD.MSGML+1  EACH MESSAGE OCCUPIES A 4 WORD CM BLOCK
          NJN    INIT6       IF NOT BD.MSGML CM WORDS 
          STD    D.Z3        CLEAR CM WORD COUNTER
          LDC    0
 INIT9.1  EQU    *-1         MODIFIED TO FWA OF INITIALIZATION ERROR
          ZJN    INIT9.2     IF NOT PO INITIALIZATION ERROR 
          LCN    0
          LJM    INIT11      PO INITIALIZATION ERROR (A) = NEG ZERO 
 INIT9.2  LDM    PPMSGS,D.Z1
          ZJN    INIT10      IF MESSAGE ENDED IN ZERO BYTE
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR
 INIT10   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE
          LDM    PPMSGS,D.Z1
          ZJN    INIT10.1    IF LAST MESSAGE
          LJM    INIT7       GET NEXT MESSAGE 
 INIT10.1 EQU    *
  
*ENDIF
*         *ENDIF
**
  
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS NOT DEFINED
*         AT UPDATE TIME. THIS MEANS THAT THE ASSEMBLY WILL BE FOR THE NOS
*         OR NOSBE ENVIRONMENT. 
* 
*         *IF -DEF,MVE
*IF -DEF,MVE
                                                                         MLD
*         WRITE PP MESSAGES TO CM                                        MLD
                                                                         MLD
 INIT5    LDM    BD.MSGA     GET PP MESSAGE AREA ADDRESS                 MLD
          STD    D.T6        SAVE IT                                     MLD
          ADC    MMSGL.      ADD LENGTH 
          RJM    BD.TFL      SEE IF IN FL                                MLD
          LDN    P.ZERO      CLEAR CELLS, D.Z1=PP MESSAGE ADDRESS        MLD
          CRD    D.Z1        D.Z2=D.T0-D.T4 POINTER, D.Z3=CM WD COUNTER  MLD
 INIT6    LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD                         MLD
          ZJN    INIT8       IF END OF MESSAGE                           MLD
 INIT7    STM    D.T0,D.Z2   STORE IN D.T0+                              MLD
          AOD    D.Z1        BUMP PP MESSAGE POINTER                     MLD
          UJN    INIT9                                                   MLD
 INIT8    LDC    2R          MESSAGE END, STORE BLANKS                   MLD
          STM    D.T0,D.Z2                                               MLD
 INIT9    AOD    D.Z2        BUMP D.T0+ POINTER                          MLD
          SBN    5                                                       MLD
          NJN    INIT6       IF NOT 5 PP WORDS                           MLD
          STD    D.Z2        CLEAR POINTER                               MLD
          LDD    D.RA        PUT RA IN A REG                             MLD
          SHN    6                                                       MLD
          ADD    D.T6        ADD MESSAGE ADDRESS                         MLD
          CWD    D.T0        WRITE ONE WORD FROM D.T0                    MLD
          AOD    D.T6        UPDATED ADDRESS                             MLD
          AOD    D.Z3        BUMP CM WORD COUNTER                        MLD
          SBN    BD.MSGML                                                MLD
          NJN    INIT6       IF NOT BD.MSGML CM WORDS                    MLD
          STD    D.Z3        CLEAR CM WORD COUNTER                       MLD
          LDM    PPMSGS,D.Z1                                             MLD
          ZJN    INIT10      IF MESSAGE ENDED IN ZERO BYTE               MLD
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR                   MLD
 INIT10   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE     MLD
          LDM    PPMSGS,D.Z1                                             MLD
          NJN    INIT7       IF NOT LAST MESSAGE                         MLD
*ENDIF
*         *ENDIF
**
                                                                         MLD
*         SET DIRECT CELLS                                               MLD
                                                                         MLD
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER            MLD
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER            MLD
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS NOT DEFINED
*         AT UPDATE TIME. THIS MEANS THAT THE ASSEMBLY WILL BE FOR THE NOS
*         OR NOSBE ENVIRONMENT. 
* 
*         *IF -DEF,MVE
*IF -DEF,MVE
          LDC    100D        100 MSEC DELAY IN BD.RCH 
          STM    DLYDCH      MODIFY DELAY USED ON CHANNEL DROP
*ENDIF
*         *ENDIF
**
 INIT10A  LDC    WRRD 
          STD    WC          SET DEFAULT VALUE IN WORD COUNT REGISTER    MLD
          LDN    ARD
          STM    RDWAL       SAVE ACCESS LEVEL NEEDED FOR READ
          LDN    ARW
          STM    RDWAL+1     SAVE ACCESS LEVEL NEEDED FOR WRITE 
                                                                         MLD
*         VERIFY THAT THE ASSIGNED DEVICE CODE IS SUPPORTED              MLD
                                                                         MLD
          LDD    DC          DEVICE CODE CURRENTLY ASSIGNED              MLD
          SBN    D844A                                                   MLD
          ZJN    INIT11                                                  MLD
          SBN    D844B-D844A                                             MLD
          ZJN    INIT11                                                  MLD
          SBN    D844C-D844B                                             MLD
          ZJN    INIT11                                                  MLD
          SBN    D844D-D844C                                             MLD
          ZJN    INIT11      (A) = ZERO IF SUPPORTED                     MLD
          LDC    INITA       (A) = POINTER TO ERROR MSG IF NO SUPPORT    MLD
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS DEFINED
*         AT UPDATE TIME. THIS DEFINITION MEANS THAT THE ASSEMBLY WILL
*         BE FOR THE NOSVE ENVIRONMENT. 
* 
*         *IF DEF,MVE 
*IF DEF,MVE 
          STM    INIT6.1
          STM    INIT9.1
          LJM    INIT5.3     PROCESS ERROR MESSAGE
*ENDIF
*         *ENDIF
**
 INIT11   LJM    START       EXIT WITH (A) = ERROR/NO ERROR FLAG         MLD
                                                                         MLD
 INITA    DIS    ,*  SELECTED DEVICE CODE NOT SUPPORTED*                 MLD
                                                                         MLD
*         TABLE OF PPU SPEED SWITCHES                                    MLD
                                                                         MLD
                                                                         MLD
 TSPEED   CON    RESET2 
          CON    FJM2 
          CON    IJM2 
          DATA   0           END OF SPEED SWITCHES TABLE                 MLD
                                                                         MLD
          EJECT                                                          MLD
          TITLE  ERROR MESSAGES                                          MLD
 PPMSGS   EQU    *           START OF PP MESSAGES                        MLD
****                                                                     MLD
          MMSG   ER.FLE,EC.FLE,(ADDR OUT OF FL),1                        MLD
          MMSG   ER.TL,EC.TL,(I/O TIME OUT ON CH RESERVE),1              MLD
          MMSG   ER.SEE,EC.SEE,(SUBR ENTRY/EXIT ERR),1                   MLD
          MMSG   ER.WC,EC.WC,(BUFFER INDEX OR WC ERR),1                  MLD
          MMSG   ER.RES,EC.RES,(R)                                       MLD
          MMSG   ER.RES1,EC.RES1,(R)                                     MLD
          MMSG   ER.RES2,EC.RES2,(R)                                     MLD
          MMSG   ER.CNA,EC.CNA,(CH NOT ASSIGNED)                         MLD
          MMSG   ER.CAS,EC.CAS,(CH ACTIVE ON ENTRY)                      MLD
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE TO LAST FUNC)                MLD
          MMSG   ER.NIGS,EC.NIGS,(NO INACTIVE TO GENERAL STATUS)         MLD
          MMSG   ER.NIDS,EC.NIDS,(NO INACTIVE TO DETAIL STATUS)          MLD
          MMSG   ER.GSNR,EC.GSNR,(GENERAL STATUS NOT RETURNED)           MLD
          MMSG   ER.ISR,EC.ISR,(INCOMPLETE STATUS RETURNED)              MLD
          MMSG   ER.FPNA,EC.FPNA,(FUNC PARAMETERS NOT ACCEPTED)          MLD
          MMSG   ER.DNA,EC.DNA,(ALL DATA NOT ACCEPTED FROM PP)           MLD
          MMSG   ER.IDR,EC.IDR,(INCOMPLETE DATA RETURNED TO PP)          MLD
          MMSG   ER.CNC,EC.CNC,(CONTROLLER/DRIVE NOT CONNECTED)          MLD
          MMSG   ER.IAL,EC.IAL,(ACCESS LEVEL TOO LOW FOR REQ)            MLD
          MMSG   ER.NRES,EC.NRES,(NO RESERVE IN 5 MINUTES)               MLD
          MMSG   ER.AGS,EC.AGS,(ABNORMAL GENERAL STATUS)                 MLD
          MMSG   ER.ISO,EC.ISO,(ILLEGAL STROBES/OFFSET)                  MLD
          MMSG   ER.UHB,EC.UHB,(UNIT HUNG BUSY ON SEEK)                  MLD
          MMSG   ER.STRY,EC.STRY,(SUCCESSFUL RETRY)                      MLD
          MMSG   ER.DCE,EC.DCE,(DATA COMPARE ERROR)                      MLD
          MMSG   ER.DCSM,EC.DCSM,(DEVICE CODE/STATUS MISMATCH)           MLD
          MMSG   ER.NIDT,EC.NIDT,(NO INACTIVE AFTER DATA XFER)           MLD
          MMSG   ER.CPE,EC.CPE,(CHANNEL PE ON INPUT)
 MMSGL.   EQU    MMSGL
          DATA   0                                                       MLD
****                                                                     MLD
 TCHAN    EQU    *           CREATE CHANNEL TABLE                        MLD
          LIST   D                                                       MLD
          HERE                                                           MLD
          LIST   *                                                       MLD
          DATA   0           END OF CHANNEL TABLE                        MLD
                                                                         MLD
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS NOT
*         DEFINED AT UPDATE TIME. THIS MEANS THAT THE ASSEMBLY IS NOT 
*         FOR THE NOSVE ENVIRONMENT.
* 
*         *IF -DEF,MVE
*IF -DEF,MVE
          IFEQ   NOS,1                                                   MLD
 .1       SET    POVLA                                                   MLD
 .2       SET    10000B                                                  MLD
 .3       SET    *-.1+5+4+500B                                           MLD
 .4       SET    .2-.1+5-1                                               MLD
          ERRNG  .2-.1+5-.3/500B*500B-1  BYTES LEFT AFTER LAST SECTOR    MLD
          ERRNG  .3/500B*500B-5-*+.1-5   BYTES LEFT IN LAST SECTOR       MLD
          ERRNG  .4/500B*500B-5-*+.1-5   BYTES CAN BE ADDED TO OVERLAY   MLD
          ENDIF                                                          MLD
*ENDIF
*         *ENDIF
**
  
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS DEFINED
*         AT UPDATE TIME. THIS MEANS THAT THE ASSEMBLY IS BEING MADE FOR
*         THE NOSVE ENVIRONMENT.
* 
*         *IF DEF,MVE 
*IF DEF,MVE 
          ERRPL  *-7773B     ERROR IF 844FT OVERLAY OVERFLOW
*ENDIF
*         *ENDIF
**
                                                                         MLD
          IFEQ   NOSBE,1,1                                               MLD
          ERRPL  *-7773B     IF OVERFLOW IN 844FT PRODUCT OVERLAY        MLD
          QUAL   *                                                       MLD
          EJECT 
