*COMDECK,844HT                                                           MLD
          EJECT                                                          MLD
 58H      SEGMENT POVLA                                                  MLD
          ORG    POVLA                                                   MLD
          QUAL   844HT                                                   MLD
*CALL,VERS
          COMMENT 844HT PRODUCT OVERLAY FOR MALET "VERS"
          EJECT                                                          MLD
          TITLE  HIGH LEVEL 844 HALF TRACK PRODUCT OVERLAY FOR MALET.    MLD
**        THE FOLLOWING COMMANDS ARE DESIGNED FOR  THE  844  DISK  SUB-  MLD
*         SYSTEMS  RUNNING  IN  A  HALF-TRACK MODE.  58H 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 HALF-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
*           CONTROL- SEND CONTROL WORD TO CONTROLLER. 
*           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
*           OUT    - OUTPUT PROCESSOR CONTROL FUNCTION AL=10 NEEDED.
*           READ   - SEEK AND READ 0 TO 4095 SECTORS FROM DISK TO IB.    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 CHANNEL STATUS TO SB. 
*           VERIFY - SEEK AND WRITE VERIFY 0 TO 4095 SECTORS ON DISK.    MLD
*           WRITE  - SEEK AND WRITE 0 TO 4095 SECTORS ON DISK.           MLD
*                                                                        MLD
*                                                                        MLD
*         THE CONTENTS OF THE WC (WORD  COUNT)  REGISTER  CONTROLS  THE  MLD
*         NUMBER  OF WORDS ACTUALLY WRITTEN OR READ ON THE WRITE, READ,  MLD
*         AND VERIFY COMMANDS.  ALL OUTPUTS BEGIN WITH THE  FIRST  WORD  MLD
*         OF  THE  OUTPUT  BUFFER,  OB(0), AND ALL READS BEGIN WITH THE  MLD
*         FIRST WORD OF THE INPUT BUFFER, IB(0).  THE  WC  REGISTER  IS  MLD
*         SET  TO  502B  BY  THE  PRODUCT  OVERLAY  AND IS NOT NORMALLY  MLD
*         CHANGED BY THE USER. A PRODUCT OVERLAY ERROR IS GENERATED  IF  MLD
*         A  READ OR WRITE IS ATTEMPTED WITH THE WC REGISTER CONTAINING  MLD
*         ANY VALUE OTHER THAN 502B.                                     MLD
          EJECT                                                          MLD
**        THE FOLLOWING CHART DEFINES THE LAY-OUT OF THE STATUS BUFFER.  MLD
*                                                                        MLD
*                   --------------------   ---
*               0   /   GENERAL STATUS /      / 
*         -----     /------------------/      / 
*         /     1   /                  /      / 
*         /     .   /                  /      / 
*         / CH  .   /   DETAIL STATUS  /      / THIS IS THE NORMAL/LAST 
*         /STATUS   /                  /      / TAKEN STATUS FROM THE 
*         /32 DEC   /                  /      / SUBSYSTEM 
*         /WORDS.   /                  /      / 
*         /     .   /                  /      / 
*         /     .   /                  /      / 
*         /    24B  /                  /   ---
*         /         /------------------/   ---
*         /    25B  /   GENERAL STATUS /      / 
*         /         /------------------/      / 
*         /    26B  /                  /      / 
*         /     .   /                  /      / THIS IS THE FIRST TAKEN 
*         /     .   /   DETAIL STATUS  /      / STATUS WITHIN SEQUENCES 
*         /     .   /                  /      / THAT REQUIRED RECOVERY
*         /----40B  /                  /      / TO BE PERFORMED.
*               .   /                  /      / (CONTINUE FUNCTIONS 
*               .   /                  /      / ISSUED) 
*               .   /                  /      / 
*              51B  /                  /   ---
*                   /------------------/   ---
*              52B  /  RETRY COUNT     /      / ERROR CORRECTION DATA 
*                   /------------------/   ---
*              56B  / 1ST BYTE         /      / DISK PACK SERIAL NUMBER 
*              57B  / 2ND BYTE         /      / (FROM ASSIGN DIRECTIVE) 
*                   /------------------/   ---
*              60B  / SEEK TIME        /        MILLISECONDS TO DO LAST 
*                   /------------------/        SEEK
*              61B  / CHANNEL          /   ---
*              62B  / EQUIPMENT        /      / 
*              63B  / UNIT             /      / EQUIPMENT UNDER TEST
*                   --------------------   ---
*                                                                        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 
*         MAY BE GENERATED FOR EACH COMMAND.
*                                                    OUT
*                                 CONTROL-----------. / .----RES
*                               DIAGRD------------/ . / . /---RESET 
*                              DIAGWR-----------. / . / . / ---RTNADDR
*                             GET-------------/ . / . / . / . /-SEEK
*                            MARGINS--------. / . / . / . / . / -SHORTRD
*                           READ----------/ . / . / . / . / . / . STATUS
*                          READCW-------. / . / . / . / . / . / . / VER 
*   CODE     MESSAGE      REL---------/ . / . / . / . / . / . / . / . WR
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4504 BUFFER INDEX ERROR OR WC ERROR . . X . . . . X . . . . . . . X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4510 CH NOT ASSIGNED                . X X . X X X X X . X X X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4511 CH ACTIVE ON ENTRY             . . . . . . . . . X . . . . . . . 
*      ------------------------------ - - - - - - -   - - - - - - - - - 
* 4512 NO INACTIVE TO LAST FUNC.      X X X . X X X X X X X X X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4513 NO INACTIVE TO GENERAL STATUS  . X X . X . . X . X . X X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4514 NO INACTIVE TO DETAIL STATUS   . X X . . . . . . X . . X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4515 GENERAL STATUS NOT RETURNED    . X X . X . . X . X . X X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4516 INCOMPLETE STATUS RETURNED     . X X . . . . X . X . . X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4517 FUNC PARAMETERS NOT ACCEPTED   . X X . X . . X X X . . X X . X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4520 ALL DATA NOT ACCEPTED FROM PP  . . . . . X . X X . . . . . . X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4521 INCOMPLETE DATA RETURNED TO PP . . X . X . X X . . . X . X . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4522 CONTROLLER/UNIT NOT CONNECTED  . X X X X X X X X . . X X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4523 ACCESS LEVEL TOO LOW FOR REQ   . . X . . . . X X . . . . X . X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4524 RESERVE TIMEOUT                . . . . . . . . . X . . . . . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4525 ABNORMAL GENERAL STATUS        . X X . X . . X . X . X X X . X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4526 ILLEGAL STROBES/OFFSET         . . . X . . . . . . . . . . . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4527 UNIT HUNG BUSY ON SEEK         . X X . X . . . . . . . X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4530 SUCCESSFUL RETRY               . X X . X . . . . . . . . . . X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4531 DATA COMPARE ERROR             . . X . . . . . . . . . . . . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4532 DEVICE CODE/STATUS MISMATCH    . . . . . . . . . X . . . . . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4533 NO INACTIVE AFTER DATA XFER    . X X . . X X X . X . . . . . X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 4534 CONTROLWARE NOT A09 OR ABOVE   . . . . . . . . . X . . . . . . . 
*      ---------------------------------------------------------------- 
          EJECT                                                          MLD
*                         FLOW-CHART FOR 2_1 INTERLACE                   MLD
*                                                                        MLD
*                      -----------------------   ---------------         MLD
*                      IPROCESS ONE SECTOR.  I   I             I         MLD
*                      IDECREMENT SECTORS TO I   I  PERFORM    I<-START  MLD
*              I------>IDO.TERMINATE WHEN ALLI<--I    SEEK     I         MLD
*              I       ISECTORS PROCESSED.   I   I  SEQUENCE   I         MLD
*              I       -----------------------   ---------------         MLD
*              I                 V                                       MLD
*              I          ---------------                                MLD
*              I          I  ADD 2 TO   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               I             I         MLD
*              I             ---------           I   EXIT      I         MLD
*              I        NO  /         \          I TO  STACK   I         MLD
*              I<----------/  TRACK    \         ---------------         MLD
*              I           \   .GT.    /                &                MLD
*              I            \  22B    /          ---------------         MLD
*              I             ---------           I    SET      I         MLD
*              I           YES   V               I   TRACK     I         MLD
*              I          ---------------        I  REGISTER   I         MLD
*              I          I RESET TRACK I        I    TO       I         MLD
*              I          I REG. TO ZEROI        I    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
          EJECT                                                          MLD
                                                                         MLD
                                                                         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.CNT   EQU    34B         CONTROLWARE NOT A09 OR ABOVE 
                                                                         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
 SEK21    EQU    2           SEEK 2%1 INTERLACE                          MLD
 RD       EQU    4           READ                                        MLD
 WR       EQU    5           WRITE                                       MLD
 WRV      EQU    6           WRITE VERIFY                                MLD
 RDCW     EQU    7           READ CHECKWORD                              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
 RS       EQU    40B         READ SHORT                                  MLD
 SSO      EQU    41B         SELECT STROBES AND OFFSET                   MLD
 IPCS     EQU    52B         CHANNEL STATUS FUNCTION
 FP       EQU    54B         FLAG PULSE FUNCTION
 PT       EQU    64B         POSITIONER TEST FUNCTION 
 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
                                                                         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    XDIAG       FILLER CODE FOR DELETED COMMAND
 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, VERIFY AND WRITE 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
 XCNTRL   LJM    ** 
          LJM    CNTRL       CONTROL SUBROUTINE 
 XFLAG    LJM    ** 
          LJM    FLAG        FLAG PULSE SUBROUTINE
 XOUT     LJM    ** 
          LJM    OUT         OUT SUBROUTINE 
          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 NO RESERVE WITHIN 5 MINUTES              MLD
*                                                                        MLD
*         USES   - EC, EA, EM, D.T3, D.T4, RESA,
*                  COCON, DRCON, DST2, DST4, DEVTY                       MLD
*                                                                        MLD
*         CALLS  - ERA, RES1, OPC, STS, DST, FNA, BD.RCH.                MLD
*                                                                        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
          LDN    MAXITT      ITERATION COUNT FOR STATUS                  MLD
          STM    RESA        AND PAUSE LOOP                              MLD
          LDD    PA                                                      MLD
          STM    RES6        SAVE CONTROLLER/DRIVE CONNECT FLAG          MLD
 RES0     RJM    OPC         PERFORM OPERATION COMPLETE 
          LDN    0
          STM    WD13        SET CONTROLLER AND UNIT NOT RESERVED 
 RES1     SOM    RESA        DECREMENT THE ITERATION COUNT               MLD
          MJN    ERRNRES     ERROR NO RESERVE 
                                                                         MLD
 RES2     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
          LCN    0
          STD    D.T3        TO COUNT STATUS ITERATIONS                  MLD
 RES3     RJM    STS         TO GET GENERAL STATUE                       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    RES5        IF COUPLER IS CONNECTED                     MLD
          SOD    D.T3        DECREMENT LOOP COUNT                        MLD
          PJN    RES3        IF NOT TIMED OUT                            MLD
 RES4     UJN    RES1        ELSE START NEXT ITERATION                   MLD
  
 ERRNRES  LDC    ER.NRES     ERROR NO RESERVE 
          UJN    RES51       ERROR EXIT 
                                                                         MLD
**     6. SET THE CONTROLLER CONNECTED FLAG.                             MLD
                                                                         MLD
 RES5     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 
          LDM    SB+4        WORD WITH CONTROLWARE NUMBER 
          SHN    -6 
          SBN    9
          PJN    RES5A
          LDC    ER.CNT 
 RES51    LJM    ERR         ELSE ERROR EXIT
  
 RES5A    ADN    9
          LPN    20B
          ZJN    RES5B       IF NOT FMD CONTROLLER
          LDM    UN 
         SBN    10B 
          MJN    RES5B       IF UN 0-7 ON FMD CONTROLLER
 RES5A1   LDC    ER.DCSM     ELSE ERROR EXIT
          UJN    RES51
                                                                         MLD
**     7. EXIT IF THE KEYWORD *CONTROLLER* IS SPECIFIED.                 MLD
                                                                         MLD
 RES5B    LDC    **          TYPE OF FUNCTION 
 RES6     EQU    *-1         *** CONNECT DRIVER/CONTROLLER FLAG          MLD
          NJN    RES8        IF DRIVE CONNECT IS ALSO DESIRED            MLD
 RES7     LJM    XRES        EXIT TO STACK
                                                                         MLD
**     8. ISSUE A CONNECT FUNCTION AND OUTPUT THE UNIT NUMBER.           MLD
                                                                         MLD
 RES8     SCN    1           IF RES DRIVE FAULT BIT 10 SET IN UN FIELD
          LMC    **          UNIT NUMBER STORED HERE
 UN       EQU    *-1                                                     MLD
          STD    D.T4        SAVE FOR OUTPUT ON FUNCTION TO CONNECT 
          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
 RES9     RJM    STS         TO GET STATUS                               MLD
          ZJN    RES11       IF STATUS OK 
          SHN    17-DRES     DRIVE BUSY BIT 
          MJN    RES9C       IF DRIVE HUNG BUSY 
          SHN    2
          PJN    RES10       IF NOT CONTROLLER BUSY 
 RES9A    SOD    D.T3        DECREMENT COUNT
          PJN    RES5B       IF NOT DONE WITH THIS ITERATION
 RES9B    LJM    RES0        ELSE START ANOTHER ITERATION 
  
 RES9C    LDM    RESA 
          NJN    RES9A       IF NOT LAST PASS 
                                                                         MLD
 RES10    LJM    ERRAGS      ELSE ERROR EXIT
                                                                         MLD
 RES11    STM    DRCON       SET DRIVER CONNECTED FLAG
          RJM    DST         GET DETAIL STATUS
          SHN    17-9        POSITION UNIT RESERVE BIT
          MJN    RES12       IF UNIT RESERVED 
          SOM    WD13        CLEAR UNIT RESERVED BIT
 RES12    LDM    SB+9 
          SHN    17D-5                                                   MLD
                                                                         MLD
*         INITIALIZE FOR SINGLE/DOUBLE DENSITY DRIVES                    MLD
                                                                         MLD
          PJN    RES15       IF NOT DOUBLE DENSITY                       MLD
          LDD    DC          ELSE TEST DEVICE CODE                       MLD
          LPN    D844B-D844A                                             MLD
          NJN    RES14       IF DOUBLE DENSITY                           MLD
 RES13    LJM    RES5A1      ELSE ERROR EXIT
                                                                         MLD
 RES14    LDC    MAXCDD-PRECYL
          UJN    RES16       JUST JUMP                                   MLD
                                                                         MLD
 RES15    LDD    DC          TEST DEVICE CODE                            MLD
          LPN    D844B-D844A                                             MLD
          NJN    RES13       IF NOT SINGLE DENSITY                       MLD
          LDC    MAXCSD-PRECYL
 RES16    STM    DEVTY       SEE *DEVTY* TAG                             MLD
          LJM    RES7        RETURN TO EXIT 
                                                                         MLD
          EJECT 
**        CNTRL  - SEND CONTROL FUNCTION TO CONTROLLER. 
* 
*           CONTROL A B C D ,ABT Z
*           CONTROL A B C D EXECUTE ,ABT Z
*           CONTROL A B C D TIME V TO X AND Y ,ABT Z
*           CONTROL A B C D TIME V X AND Y ,ABT Z 
*           CONTROL A B C D TIME V X Y ,ABT Z 
* 
*         ENTRY - (A)  = ABT ADDRESS
*                 (PA) = CODE     DESCRIPTION 
*                 --------------------------- 
*                          0      STORE A B C D INTO BUFFER 
*                          1      STORE AND EXECUTE 
*                          2      STORE EXECUTE WITH TIMING 
*                  (PA+1) = VALUE V 
*                  (PA+50B) VALUE A 
*                  (PA+51B) VALUE B 
*                  (PA+52B) VALUE C 
*                  (PA+53B) VALUE D 
*                  (PA+55B) = REG X ADDRESS 
*                  (PA+56B) = REG Y ADDRESS 
* 
*         EXIT (FMDADDR) = ADDRESS OF NEXT STORE-1
* 
*         USES   - D.T1, D.T2, D.T4, PA, FMDADDR, WT, OB, D.Z1, 
* 
*         CALLS  - BD.TEST, FNC, FNO, IJM, FJM. 
* 
  
**        1. VERIFY THAT THE CONTROLLER IS CONNECTED. 
* 
 CNTRL    RJM    TCO
          STD    D.T2 
          LDD    D.T1 
          STD    D.T4        (PA+1) PARAMETER FOR TIME
          LDD    PA 
          STD    D.Z1        SAVE CONTROL CODE
  
**        2. TEST ADDRESS TO SEE IF IN RANGE OF OB, AND INITIALIZE
*            VALUES FOR DATA STORING. 
* 
          LDM    FMDADDR
          STD    D.T0 
          ADC    -OB-1+4
          SHN    -2          DIVIDE BY 4 TO GET NUMBER OF CONTROL WDS 
          STM    OB          (OB) = WORD COUNT OF CONTROL WORDS 
          LDN    4
          STD    D.T1        (D.T1) = WORD COUNT
          RJM    BD.TEST
  
**        3. MOVE THE FOUR WORDS TO OB. 
* 
 CNT0     LDM    PA+50B,D.T2 GET DATA 
          STM    OB+1,PA+2
 FMDADDR  EQU    *-1         STORE ADDRESS IN OB
          AOD    D.T2 
          LPN    4
          ZJN    CNT0        IF NOT A-D MOVED 
          RAM    FMDADDR
  
**        4. DECREMENT CODE IF EXECUTE THE STEP 5 ELSE STEP 8.
* 
          SOD    D.Z1        DECREMENT CONTROL CODE 
          PJN    CNT1        IF EXECUTE 
          LJM    CNT11       EXIT TO STACK
  
**        5. RESET STORE WORD TO FIRST WORD OF BUFFER OB. 
*            CHECK CODE IF EXECUTE WITH NO TIMING THEN STEP 6, ELSE SEND
*            55B FUNCTON WITH CHANNEL THEN STEP 6.
* 
 CNT1     LDC    OB+1 
          STM    FMDADDR     RESET VALUE FOR NEXT CONTROL WORD FUNCTION 
          LDD    AL 
          SBN    3
          MJN    CNT4        IF ACCESS LEVEL LT 3 
          NJN    CNT5        IF ACCESS LEVEL GE 4 
          LDM    OB 
          STD    PA          SAVE NUMBER OF CONTROL WORDS 
          LDC    OB+4 
          STD    PA+1        (PA+1)=NUMBER LEFT TO CHECK
 CNT2     LDI    PA+1 
          LPN    10B
          ZJN    CNT3A       NOT  WRITE 
 CNT3     LDC    0
 FPRECYL  EQU    *-1         NONZERO = PREALL AREA 0 = NOT PRE AREA 
          NJN    CNT5        IF PREALLOCATED
 CNT4     LJM    OUT4        ELSE ERROR EXIT
 CNT3A    LDN    4
          RAD    PA+1        INCREMENT ADDRESS FOR NEXT CONTROL WORD
          SOD    PA 
          PJN    CNT2        IF NOT DONE
 CNT5     LDD    D.Z1 
          ZJN    CNT6        IF EXECUTE AND NO TIMING 
          LDN    55B
          RJM    FNO         SEND INITIATE TIMING FUNCTION
  
**        6. SEND 51B FUNCTION AND OUTPUT NUMBER OF WORDS.
  
 CNT6     LDN    51B
          RJM    FNC
          ACN    CH+40B 
          LDN    49 
          OAM    OB,CH       SEND CONTROL WORD SEQUENCE TO FMD BC 
          RJM    ETYCH
  
 CNT8     LDD    D.Z1        GET CONTROL CODE 
  
**        7. IF EXECUTE ONLY THE STEP 8 ELSE GET TIMING DATA AND STORE
*            IN REGISTERS SPECIFIED BY X AND Y. 
* 
          ZJN    CNT11       IF EXECUTE ONLY
          LDN    56B
          RJM    FNC
          ACN    CH+40B 
          RJM    FJM         WAIT FOR CHANNEL TO GO FULL
          ZJN    CNT9        IF CHANNEL DID NOT GO FULL 
          IAN    CH+40B 
          STI    PA+55B      SAVE TIMING WORD IN REGISTER X 
          RJM    FJM         WAIT FOR CHANNEL TO GO FULL
          NJN    CNT10       IF CHANNEL WENT FULL 
 CNT9     LJM    DST5        ERROR EXIT IF INCOMPLETE STATUS RETURNED 
  
 CNT10    IAN    CH+40B 
          STI    PA+56B      SAVE TIMING WORD IN REGISTER Y 
          DCN    CH+40B 
  
**        8. RETURN TO STACK. 
* 
 CNT11    LJM    XCNTRL      EXIT TO STACK
          EJECT 
          EJECT                                                          MLD
          EJECT 
**        FLAG - FMD FLAG PULSE.
* 
*                FLAG PULSE CHANNEL=X,ABT Z 
* 
*         ENTRY  - (A) = ABT ADDRESS
*                  (PA)= VALUE X TO BE SENT WITH FUNCTION.
* 
*         EXIT   - NONE.
* 
*         USES   - D.T4.
* 
*         CALLS  - FNO, TDR.
* 
  
**        1. VERIFY THAT THE CONTROLLER IS CONNECTED. 
* 
 FLAG     RJM    TCO
  
**        2. SEND FLAG PUSE FUNCTION AND DATA WORD. 
*            TIMING DATA. 
  
          LDD    PA 
          STD    D.T4 
          LDN    FP 
          RJM    FNO         SEND FUNCTION
          LJM    XFLAG       RETURN TO CALLER 
          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   -                                                       MLD
*                                                                        MLD
*         USES   - P, CC, CT, CS, CL, D.T5, D.T6, D.T7,                  MLD
*                  COD, RDWRF                                            MLD
*                                                                        MLD
*         CALLS  - TDR, RDWR0                                            MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            MLD
                                                                         MLD
 GET      RJM    TDR         CALLER ENTRY POINT                          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
          STD    D.T7        TRACK NUMBER                                MLD
          STD    COD         ELIMINATE CODED DATA CHECK                  MLD
          STD    RDWRF       INDICATE A READ OPERATION                   MLD
          LDM    DEVTY                                                   MLD
          ADN    PRECYL 
          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
                                                                         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
 GET1     STD    D.Z1 
          LDN    1
          STD    D.T5        SET NUMBER OF SECTORS TO READ
          LDN    D.T5 
          STD    CL 
          LDD    D.Z1        GET FUNCTION 
          LJM    RDWR0       READ ONE SECTOR                             MLD
                                                                         MLD
                                                                         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 PARAMETER          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
          UJN    OUT5        ERROR EXIT 
                                                                         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
                                                                         MLD
          EJECT 
**        OUT    - SEND CONTROL FUNCTION TO CONTROLLER. 
* 
*           OUT CHANNEL=A B C,ABT Z 
*           OUT CH=A B C,ABT Z
* 
*         ENTRY  - (A)    = ABT ADDRESS.
*                  (PA)   = CHANNEL DATA. 
*                  (PA+1) = VALUE B.
*                  (PA+1) = VALUE C.
* 
*         EXIT   - RDWR29 - ERROR EXIT IF DATA NOT ACCEPTED.
*                  ERRIDR - ERROR EXIT IF DATA NOT RECEIVED.
*                  RDWR2  - ERROR EXIT IF IF ACCESS LEVEL TOO LOW.
* 
*         USES   - D.Z1, WT.
* 
*         CALLS  - TCO, FNC, IJM, BD.TEST, FNO. 
* 
* 
  
**        1. VERIFY THAT THE CONTROLLER IS CONNECTED. 
* 
 OUT      RJM    TCO
          LDD    AL 
          SBN    3
          MJN    OUT4        IF ACCESS LEVEL .LT. 3 
  
 OUT1     LDN    50B
          RJM    FNC         SEND FUNCTION TO FMD CONTROLLER
          ACN    CH 
          LDN    3
          OAM    PA,CH       OUTPUT THE 3 CONTROL WORDS TO PROCESSOR
          RJM    ETYCH
 OUT3     LJM    XOUT 
  
 OUT4     LDC    ER.IAL      ELSE ERROR EXIT
 OUT5     LJM    ERR
          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    = CODED/NOT CODED FLAG            MLD
*                             BIT 5    = WRITE/READ 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
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  MLD
*                  ERRDCE  - IF DATA COMPARE ERROR                       MLD
*                  ERRDNA  - IF DATA NOT ACCEPTED FROM PP                MLD
*                  ERRIAL  - IF ACCESS LEVEL TO LOW FOR REQUEST          MLD
*                  ERRIDR  - IF INCOMPLETE DATA RETURNED TO PP           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)), FNOA, (CL), (CT), (CS), D.Z0,        MLD
*                  D.Z1, D.Z2, RDWR20, RDWR21, VECTOR1(SB54),            MLD
*                  VECTOR2(SB55), VECADDR(SB53), WT, IR(0-501, OR(1-3)   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 THE 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 CODE                  MLD
                                                                         MLD
*         ENTRY FOR GET AND SHORTRD                                      MLD
                                                                         MLD
 RDWR0    STD    FUN         SAVE THE FUNCTION CODE                      MLD
          LDN    RETRY-SB 
          STD    D.T2        NUMBER OF WORDS IN SB TO CLEAR              MLD
 RDWR1    LDN    0                                                       MLD
          STM    SB,D.T2     CLEAR THE STATUS BUFFER                     MLD
          SOD    D.T2                                                    MLD
          PJN    RDWR1       IF NOT DONE                                 MLD
          LDM    RDWAL,RDWRF                                             MLD
          STD    D.T1        SET READ/WRITE ACCESS LEVEL REQUIRED        MLD
          LDD    BD.AL                                                   MLD
          SBD    D.T1        TO TEST ACCESS LEVEL                        MLD
          PJN    RDWR3       IF ACC.LEV. NOT PREALLOCATED AREA.          MLD
          ADN    1           TO VERIFY ANY OPERATION OK                  MLD
          PJN    RDWR1B      IF PREALLOCATED IS OK
 RDWR1A   UJN    OUT4        ERROR EXIT 
  
 RDWR1B   LDD    FUN         LOAD THE CURRENT FUNCTION
          LMN    RDCW        MASK IT WITH READ CHECKWORD                 MLD
          ZJN    RDWR3       IF READCW IGNORE VALIDATON                  MLD
          LDC    **                                                      MLD
 DEVTY    EQU    *-1         ***FIRST PRE-ALLOCATED CYL-1 
*         LDC    627B        ***STORED HERE IF 844 HALF TRACK***
*         LDC    1463B       ***STORED HERE IF 844 FULL TRACK***
          SBI    CC          CURRENT CYLINDER                            MLD
          PJN    RDWR1A      IF CYL DESIRED IS NOT IN PREALLOCATED AREA 
                                                                         MLD
 RDWR3    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    RDWR7       IF THERE ARE SECTORS TO READ                MLD
 RDWR4    LDD    FUN         LOAD THE CURRENT FUNCTION
          LMN    RS          MASK FOR SHORTRD                            MLD
          NJN    RDWR5       IF NOT A SHORT READ                         MLD
          LJM    XSHORT      EXIT TO SHORT READ                          MLD
 RDWR5    LDD    FUN         LOAD THE CURRENT FUNCTION                   MLD
          LMN    RFD         MASK FOR GET COMMAND                        MLD
          SHN    0-1                                                     MLD
          NJN    RDWR6       IF IT IS NOT A GET COMMAND                  MLD
          LJM    XGET                                                    MLD
                                                                         MLD
 RDWR6    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. CALCULATE          MLD
*         THE SECTORS REMAINING IN THIS HALF TRACK, IF THE REMAIN-       MLD
*         ING COUNT IS MORE THAN  V  USE  V.  IF  NOT  SET  THE          MLD
*         REMAINING COUNT INTO  V. NORMAL EXIT WILL BE WITH  V           MLD
*         EQUAL ZERO.                                                    MLD
                                                                         MLD
 RDWR7    LDD    FUN         CHECK FOR WRITE FUNCTION 
          SBN    WR 
          ZJN    RDWR8       SKIP MARGINS ON WRITE ONLY 
          LDC    **          *** STROBE AND OFFSET SELECTIONS            MLD
 MARGINSA EQU    *-1                                                     MLD
          ZJN    RDWR8       IF NO MARGINS                               MLD
          STD    D.T4        SAVE THE MARGINS FUNCTION
          LDN    SSO         LOAD THE FUNCTION                           MLD
          RJM    FNO         TO SEND MARGIN FUNCTION                     MLD
                                                                         MLD
 RDWR8    LDI    CS                                                      MLD
          SHN    -1                                                      MLD
          STD    D.T1        SAVE SECTOR COUNT IN THIS HALF TRACK        MLD
          LDI    CS                                                      MLD
          LPN    1           MASK FOR ODD OR EVEN HALF TRACKS            MLD
          LMN    1                                                       MLD
          ZJN    RDWR9       IF ODD HALF TRACKS                          MLD
          LDN    TRL+1       ELSE FOR EVEN ADD ALL ODD TRACK COUNT       MLD
 RDWR9    ADN    TRL         ADD CURRENT HALF TRACK TRACK COUNT          MLD
          SBI    CT          SUBTRACT THE TRKS WE DONT NEED TO DO        MLD
          SHN    3           MULTIPLY THE REMAINDER BY 10                MLD
          STD    D.T4        SAVE IT                                     MLD
          SHN    -1          MULTIPLY BY 4                               MLD
          RAD    D.T4        THIS IS (SECTORS * HALF TRACKS) COUNT       MLD
          LDN    14B         MAX SECTORS PER HALF TRACK                  MLD
          SBD    D.T1        MINUS THOSE ALREADY DONE                    MLD
          RAD    D.T4        TOTAL REMAINING IN THIS HALF TRACK          MLD
          SBI    CL          SUBTRACT THE NUMBER DESIRED                 MLD
          PJN    RDWR10      IF LESS THAN MAX GO DO THEM                 MLD
          LDD    D.T4        ELSE SET DESIRED COUNT TO MAX.              MLD
          STI    CL                                                      MLD
                                                                         MLD
**     5. ISSUE A READ FUNCTION (0004).                                  MLD
                                                                         MLD
 RDWR10   LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          ZJN    RDWR11      IF IT IS A READ                             MLD
          LDD    COD         CODED DATA FLAG                             MLD
          ZJN    RDWR11      IF IT IS NOT CODED                          MLD
          LDI    CC                                                      MLD
          STM    OB+1        SET THE CYLINDER                            MLD
          LDI    CT                                                      MLD
          STM    OB+2        SET THE TRACK                               MLD
          LDI    CS                                                      MLD
          STM    OB+3        SET THE SECTOR                              MLD
 RDWR11   LDD    FUN         LOAD THE FUNCTION                           MLD
 RDWR12   RJM    RDW         TO SEND THE FUNCTION AND READ OR WRITE      MLD
                                                                         MLD
**     6. INPUT THE NUMBER OF WORDS SPECIFIED  BY  THE WC REGISTER       MLD
*         INTO THE PP INPUT  BUFFER AND STORE THE NUMBER OF  WORDS       MLD
*         ACTUALLY READ INTO THE WT REGISTER.                            MLD
*                                                                        MLD
*      7. REQUEST  AND  INPUT  GENERAL  STATUS TO DETERMINE IF THE       MLD
*         OPERATION COMPLETED SUCCESSFULY. IF  GENERAL  STATUS  IS       MLD
*         ZERO (NO ERROR), GO TO STEP 12.                                MLD
                                                                         MLD
          RJM    STS         TO GET GENERAL STATUS                       MLD
          NJN    RDWR13      IF BAD STATUS                               MLD
          LJM    RDWR27      TO READ AGAIN AFTER UPDATING PARAMETERS     MLD
                                                                         MLD
*      8. 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
 RDWR13   RJM    DST         TO GET DETAILED STATUS                      MLD
          LDM    SB          GENERAL STATUS                              MLD
          SHN    17D-UNR                                                 MLD
          PJN    RDWR14      IF NOT A UNRECOVERED ERROR                  MLD
          LDD    FUN         GET THE CURRENT FUNCTION                    MLD
          LMN    RS          COMPARE WITH SHORT READ                     MLD
          NJN    RDWR15      IF NOT A SHORT READ                         MLD
 RDWR13A  LJM    RDWR4       EXIT IF SHORT READ 
                                                                         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
 RDWR14   SHN    17D-RIP-17D+UNR   TEST REC. IN PROGRESS                 MLD
          PJN    RDWR15      IF NO RECOVERY IN PROGRESS                  MLD
                                                                         MLD
**    10. 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
          SHN    3
          PJN    RDWR23A     IF NOT CORRECTABLE DATA ERROR ON 7054
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          ZJN    RDWR17      IF IT IS A READ                             MLD
 RDWR15   LJM    ERRAGS      ERROR EXIT FOR ABNORMAL STATUS ON WRITE     MLD
                                                                         MLD
 RDWR17   LDD    FUN         GET THE CURRENT FUNCTION 
          LMN    RS          COMPARE WITH SHORT READ                     MLD
          ZJN    RDWR13A     EXIT IF SHORT READ 
                                                                         MLD
 RDWR23   UJN    RDWR24      RETRY
                                                                         MLD
 RDWR23A  LDM    SB+4 
          SHN    17-10
  
**    11. 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
 RDWR24   LDM    RETRY                                                   MLD
          NJN    RDWR26      IF NOT THE FIRST ERROR RETRY                MLD
          LDN    25B         ELSE MOVE THE INITIAL ERROR TO SBIE         MLD
          STD    D.T1                                                    MLD
 RDWR25   LDM    SB,D.T1     LOAD A WORD                                 MLD
          STM    SBIE,D.T1   STORE A WORD                                MLD
          SOD    D.T1        DECREMENT THE COUNT                         MLD
          PJN    RDWR25      IF NOT DONE MOVING WORDS                    MLD
 RDWR26   AOM    RETRY       INCREMENT THE RETRY COUNT                   MLD
          LDN    CONT        FOR THE CONTINUE FUNCTION                   MLD
          LJM    RDWR12      TO INPUT AFTER A CONTINUE                   MLD
                                                                         MLD
**    12. WE ARRIVE AT THIS  STEP  AFTER  COMPLETING  A  READ  AND       MLD
*         GENERAL  STATUS  IS  ZERO  (NO ERROR). EXECUTE THE ERROR       MLD
*         EXIT SEQUENCE IF THE CONTENTS OF THE WT REGISTER IS  NOT       MLD
*         EQUAL  THE  WC  REGISTER  (ALL BYTES NOT READ) OR IF THE       MLD
*         RETRY COUNT IN THE STATUS BUFFER IS NON-ZERO  (THE  READ       MLD
*         OF  THIS  SECTOR  HAS  BEEN COMPLETED SUCCESSFULLY BUT A       MLD
*         RETRY WAS REQUIRED, SO CONTROL IS RETURNED TO  THE  USER       MLD
*         FOR POSSIBLE MESSAGE REPORTING).                               MLD
                                                                         MLD
 RDWR27   LDD    FUN         WHAT IS THE CURRENT FUNCTION                MLD
          LMN    RDCW        IS IT A READCW                              MLD
          ZJN    RDWR31      IF READWC DONT COMPARE WC AND WT            MLD
          LDD    WT          WORD ACTUALLY READ                          MLD
          SBD    WC          DESIRED WORD COUNT                          MLD
          ZJN    RDWR31      IF WORD COUNTS DONT AGREE                   MLD
 RDWR28   LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          NJN    RDWR29      IF IT IS A WRITE                            MLD
          LDC    ER.IDR      ELSE ERROR EXIT                             MLD
          UJN    RDWR30                                                  MLD
                                                                         MLD
 RDWR29   LDC    ER.DNA      ERROR EXIT                                  MLD
 RDWR30   STD    D.T2                                                    MLD
          RJM    DST         GET DETAIL STATUS                           MLD
          LDD    D.T2                                                    MLD
          LJM    ERR                                                     MLD
                                                                         MLD
 RDWR31   LDM    RETRY                                                   MLD
          ZJN    RDWR32      IF NO RETRYS                                MLD
          LDD    FUN
          LMN    RS 
          NJN    ERRSTRY
          LJM    RDWR4       EXIT SHORT READ
 ERRSTRY  LDC    ER.STRY     ELSE ERROR EXIT                             MLD
 ERRSTR1  UJN    RDWR30      GET DETAIL STATUS
                                                                         MLD
**    13. 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
 RDWR32   LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          NJN    RDWR33      IF IT IS A WRITE                            MLD
          LDD    COD         CODED DATA FLAG                             MLD
          ZJN    RDWR33      IF NOT CODED DATA                           MLD
          LDM    IB+1        ADD UP THE DATA WORDS                       MLD
          ADM    IB+2                                                    MLD
          ADM    IB+3                                                    MLD
          SBI    CC          SUBTRACT THE REGISTERS                      MLD
          SBI    CT                                                      MLD
          SBI    CS                                                      MLD
          ZJN    RDWR33      IF NOT A CODE ERROR                         MLD
          LDC    ER.DCE      ELSE ERROR EXIT                             MLD
          UJN    ERRSTR1     GET DETAIL STATUS AND EXIT 
                                                                         MLD
**    14. 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
 RDWR33   SOI    CL          DECREMENT THE SECTORS REMAINING FLAG        MLD
          ZJN    RDWR37      ALL SECTORS READ EXIT-COMPLETE 
                                                                         MLD
**    15. INCREMENT  THE  CONTENTS  OF REGISTERS W/X/Y PER THE 2_1       MLD
*         INTERLACE FLOW-CHART. IF THE CYLINDER IS NOT  COMPLETED,       MLD
*         GO TO STEP 5 TO CONTINUE READING FROM THE SAME CYLINDER.       MLD
*         IF THE CYLINDER IS COMPLETED, EXIT WITH W/X/Y POINTING         MLD
*         TO THE LAST SECTOR PROCESSED.                                  MLD
                                                                         MLD
 RDWR34   LDN    SEI                                                     MLD
          RAI    CS          INCREMENT SECTOR                            MLD
          SBN    SEL+1       FOR LIMIT TESTING                           MLD
          MJN    RDWR35      IF NOT COMPLETE THIS TRACK                  MLD
          STI    CS          ELSE RESET SECTOR                           MLD
          AOI    CT          AND INCREMENT TRACK                         MLD
          SBN    TRL+1       FOR LIMIT TESTING                           MLD
          MJN    RDWR35      IF NOT COMPLETE THIS CYLINDER               MLD
          STI    CT          ELSE RESET TRACK (TO ZERO)                  MLD
          AOI    CS          SWITCH HALF TRACKS                          MLD
          LPN    1                                                       MLD
          STI    CS          SET SECTOR TO 0 OR 1                        MLD
          ZJN    RDWR36      IF A SEEK IS REQUIRED                       MLD
 RDWR35   LJM    RDWR10      ELSE READ ANOTHER SECTOR                    MLD
                                                                         MLD
 RDWR36   LDN    SEL                                                     MLD
          STI    CS          RESET CURRENT SECTOR TO LAST SECTOR         MLD
          LDN    TRL                                                     MLD
          STI    CT          RESET CURRENT TRACK TO LAST TRACK           MLD
 RDWR37   LJM    RDWR4       EXIT 
          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        WORD COUNT FOR RTNADDR 
          RJM    BD.TEST     TEST IF ADDRESS WITHIN RANGE 
                                                                         MLD
**     3. REQUEST/INPUT GENERAL STATUS AND VERIFY THAT IT IS NOT BUSY.   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    RTNADDR5    IF NOT TIMED OUT                            MLD
 RTNADDR4 LJM    ERRNIDT     ELSE ERROR EXIT                             MLD
                                                                         MLD
 RTNADDR5 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                                                       MLD
          STD    SEEKA       CLEAR CURRENT SEEK TIME                     MLD
          STM    FPRECYL     CLEAR PRE-ALLOCATED CYL FLAG 
          RJM    STS         TO GET STATUS                               MLD
          SHN    17D-CRES                                                MLD
          PJN    SEEK3       IF COUPLER RESERVED                         MLD
 SEEK2    LJM    ERRCNC      ELSE IT IS AN ERROR                         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 2%1 SEEK FUNCTION (0002).                              MLD
                                                                         MLD
          IANN   14B         INPUT THE REAL TIME CLOCK                   MLD
          STD    D.T1                                                    MLD
 SEEK5    LDN    SEK21                                                   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
                                                                         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       ELSE 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
          SHN    -8 
          ZJN    SEEK5       256 MSEC NOT PASSED TRY AGAIN
                                                                         MLD
 SEEK10   LDC    ER.UHB 
          UJN    SEEK12                                                  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    SEEK11A     IF NO TIME USED                             MLD
          SBN    1           DECREMENT IT BY 1 TO ACCOUNT FOR OVERHEAD   MLD
 SEEK11A  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    SEEK13      IF ZERO AFTER NOT BUSY                      MLD
 ERRAGS   LDC    ER.AGS      AND ERROR EXIT                              MLD
 SEEK12   LJM    RDWR30      GO GET DETAIL STATUS AND ABORT 
                                                                         MLD
 SEEK13   LDM    DEVTY
          ADC    MAXCSD-PRECYL
          SBI    CC          SUBTRACT CURRENT CYL 
          PJN    SEEK14      IF NOT PRE-ALLOCATED CYL 
          AOM    FPRECYL     FLAG PRE-ALLOCATED CYL 
 SEEK14   LJM    SEEK1X      RETURN 
          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, RDWR0                                            MLD
*                                                                        MLD
                                                                         MLD
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            MLD
                                                                         MLD
                                                                         MLD
 SHORTRD  RJM    TDR         CALLER ENTRY POINT                          MLD
          STD    COD         SET FOR NOT CODED READ                      MLD
          STD    RDWRF       SET FLAG FOR READ                           MLD
          LDC    SHRD                                                    MLD
          STD    WC          SET FOR ABNORMAL WORD COUNT                 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    GET1        ENTER GET TO SET SEC COUNT 
                                                                         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
*      7. VERIFY THAT 477B DATA WORDS WERE ACTUALLY READ.                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 20D WORDS OF DETAIL EXTENDED STATUS.
*           CHANNEL - INPUT 30D WORDS OF CHANNEL STATUS SB(1)-SB(30D) 
*                                                                        MLD
*         ENTRY  - (A)  = ABT ADDRESS                                    MLD
*          (PA) = CODE   0=GENERAL 1=DETAIL 2=CHANNEL 
*                                                                        MLD
*         EXIT   - (A)  = STATUS (IF GENERAL STATUS IS SELECTED)         MLD
*                  (SB), OR (SB+1-SB+24) = STATUS OR DETAIL EXTENDED. 
*                                                                        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
          NJN    STATUS1     IF NOT GENERAL STAUS REQUEST 
  
**        3. GET GENERAL STATUS THEN STEP 6.
* 
          LDN    GS 
          STD    LF          SAVE THE PRIMARY FUNCTION
          RJM    STS         GET GENERAL STATUS 
          UJN    STATUS2
  
**        4. IF (PA) = 1 GET DETAIL EXTENDED STATUS THEN STEP 6,
*            ELSE STEP 5. 
* 
 STATUS1  SBN    1
          NJN    STATUS3
          LDN    EDS
          STD    LF 
          RJM    DST         GET EXTENDED STATUS
 STATUS2  LJM    XSTATUS
  
**        5. GET CHANNEL STATUS IF FMD CONTROLLER AND STATUS CHANNEL
*            COMMAND. 
  
 STATUS3  LDN    IPCS        CHANNEL STATUS FUNCTION
          RJM    FNC         SEND CHANNEL STATUS FUNCTION 
          ACN    CH 
          RJM    FJM         WAIT FOR FULL
          ZJN    STATUS4
          LDN    32D
          IAM    SB+1,CH     INPUT PROCESSOR CHANNEL STATUS 
          NJN    STATUS4
          RJM    IJM         WAIT FOR INACTIVE
          NJN    STATUS2     IF OK RETURN 
 STATUS4  UJN    DST5        JUMP TO ERR EXIT 
          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   - D.T1, SB(1-24)                                        MLD
*                                                                        MLD
*         CALLS  - FNA, FJM, IJM                                         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 DETAIL 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
          LDN    EDS
          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
          RJM    IJM         VERIFY INACTIVE IS RECEIVED                 MLD
          NJN    DST0        IF INACTIVE RECEIVED 
 DST5     LDC    ER.ISR      ERROR IF INCOMPLETE STATUS RETURNED         MLD
 DST6     UJN    ETYCH1 
          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 
*                - RDWR29-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    RDWR29      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 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
 FNC1     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   - ERRFPNA - IF FUNCTION PARAMETER NOT ACCEPTED          MLD
*                                                                        MLD
*         USES   - NONE                                                  MLD
*                                                                        MLD
*         CALLS  - FNC                                                   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 FUNCTIONS PARAMTER WORD 
          RJM    ETYCH       GO TO EMPTY CHECK
          UJN    FNOX        EXIT 
          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   - NONE                                                  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
 OPC0     ZJN    OPCX        EXIT CH NOT RESERVED 
          LDM    COCON                                                   MLD
          NJN    OPCX        EXIT IF CONTROLLER NOT RESERVED             MLD
          STM    FPRECYL     CLEAR PRE-ALLOCATED CYLINDER FLAG
          AOM    COCON       CLEAR COTROLLER CONNECT FLAG 
          AOM    DRCON       CLEAR DRIVE CONNECT FLAG 
          LDC    ** 
 WD13     EQU    *-1         DETAIL STATUS WORD 13 STORED HERE
          SBN    2
          MJN    OPC1        IF CONTROLLER NOT RESERVED 
          NJN    OPCX        IF CONTROLLER AND UNIT RESERVED
          LDN    DREL 
          UJN    OPC2 
 OPC1     LDM    ERR3        UPPER BITS OF ABT ADDRESS
          SBN    77B                                                     MLD
          NJN    OPC4        IF REQUEST IS FROM STACK 
                                                                         MLD
*         THE RELEASE REQUEST CAME FROM THE BASIC DRIVER, SO PROCESS     MLD
*         IT WITHOUT CHANGING ANY DATA OR CREATING AN ERROR EXIT.        MLD
                                                                         MLD
          LDN    OC                                                      MLD
 OPC2     RJM    FNA
 OPC3     NJN    OPCX        EXIT IF NOT FUNCTION TIMEOUT 
          DCN    CH+40B      ELSE DO A DISCONNECT                        MLD
          UJN    OPC0        RETURN 
                                                                         MLD
 OPC4     LDN    OC 
          RJM    FNC         TO FUNCTION OPERATION COMPLETE              MLD
          UJN    OPC3        RETURN 
          SPACE  4,10                                                    MLD
**        RDW    - ISSUE REQUESTED FUNCTION AND READ OR WRITE.           MLD
*                                                                        MLD
*         ENTRY  - (A) = FUNCTION TO ISSUE.                              MLD
*                                                                        MLD
*         EXIT   - NONE                                                  MLD
*                                                                        MLD
*         USES   - IB(0-501), D.T1, WT                                   MLD
*                                                                        MLD
*         CALLS  - FNC, IJM                                              MLD
*                                                                        MLD
 RDWX     LJM    **          ENTRY/EXIT                                  MLD
 RDW      EQU    *-1                                                     MLD
                                                                         MLD
**     1. ISSUE THE REQUESTED FUNCTION.                                  MLD
                                                                         MLD
          SHN    12D                                                     MLD
          STD    WT          CLEAR WT REGISTER                           MLD
          SHN    -12D                                                    MLD
          RJM    FNC         ISSUE THE FUNCTION                          MLD
          LDD    FUN                                                     MLD
          LMN    RDCW                                                    MLD
          ZJN    RDWX        EXIT IF READCW - NO DATA TRANSFER           MLD
                                                                         MLD
**     2. INPUT 322D WORDS FROM THE SUBSYSTEM MEMORY TO THE INPUT        MLD
*         BUFFER IF IT IS A READ OPERATION.                              MLD
                                                                         MLD
          ACN    CH          ACTIVATE THE CHANNEL                        MLD
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       MLD
          NJN    RDW1        IF IT IS A WRITE                            MLD
          LDD    WC                                                      MLD
          IAM    IB,CH       READ TO INPUT BUFFER                        MLD
          UJN    RDW2                                                    MLD
                                                                         MLD
**     3. OUTPUT 322D WORDS FROM THE OUTPUT BUFFER TO THE SUBSYSTEM      MLD
*         IF IT IS A WRITE OPERATION.                                    MLD
                                                                         MLD
 RDW1     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
 RDW2     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    RDW4        IF IT IS A WRITE                            MLD
          RJM    IJM         TO INSURE CHANNEL IS INACTIVE               MLD
 RDW3     NJN    RDWX        EXIT IF CHANNEL NOT HUNG ACTIVE             MLD
 ERRNIDT  LDC    ER.NIDT     ELSE ERROR EXIT                             MLD
          UJN    STS0 
                                                                         MLD
 RDW4     DCN    CH+40B      DEACTIVATE THE CHANNEL                      MLD
          UJN    RDW3        EXIT                                        MLD
          SPACE  4,16                                                    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  - FNA, FJM, IJM                                         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
 STS0     UJN    STS3 
                                                                         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
          RJM    IJM         WAIT FOR INACTIVE                           MLD
          NJN    STSXX       EXIT IF INACTIVE RECEIVED                   MLD
 ERRGSNR  EQU    *                                                       MLD
 STS2     LDC    ER.GSNR     ERROR IF NO FULL OR NO INACTIVE             MLD
 STS3     UJN    TCA1 
          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 ASSIGNED                     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    ERR         GO TO ERROR EXIT 
          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    **                                                      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    **                                                      MLD
 DRCON    EQU    *-1         *** DRIVE CONNECTED FLAG STORED HERE.       MLD
          ZJN    TDRX        IF CONNECTED EXIT                           MLD
 ERRCNC   LDC    ER.CNC      ELSE ERROR EXIT                             MLD
          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
*         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
 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 WRITE SET BY INIT 
 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
 RESA     EQU    SB+64B      ITERATION COUNT FOR RES COMMAND
 SBLWA    EQU    SB+64B      STATUS BUFFER LWA+1                         MLD
 LSB      EQU    64B         LENGTH OF STATUS BUFFER                     MLD
                                                                         MLD
          ERRPL  *-IB-1      ERROR IF 844HT PRODUCT 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 SBN/ADN 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    *
                                                                         MLD
*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
*         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
          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       ACCESS LEVEL NEEDED FOR READ 
          LDN    ARW
          STM    RDWAL+1     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.CNT,EC.CNT,(CONTROLWARE NOT A09 OR ABOVE),1 
 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 844HT OVERLAY OVERFLOW
*ENDIF
*         *ENDIF
**
                                                                         MLD
          IFEQ   NOSBE,1,1                                               MLD
          ERRPL  *-7773B     ERROR IF 66X OVERLAY OVERFLOW               MLD
                                                                         MLD
          QUAL   *                                                       MLD
