*COMDECK,DEMA3
          TITLE  HIGH LEVEL DEMA3 FULL TRACK PRODUCT OVERLAY FOR MALET.  DEMA3
 5D3      SEGMENT POVLA                                                  DEMA3
          ORG    POVLA                                                   DEMA3
          QUAL   DEMA3                                                   DEMA3
*CALL,VERS
          COMMENT DEMA3 PRODUCT OVERLAY FOR MALET "VERS"
          EJECT                                                          DEMA3
**        THE FOLLOWING COMMANDS ARE DESIGNED FOR  THE DEMA DISK  SUB-   DEMA3
*         SYSTEMS  RUNNING  IN  FULL-TRACK MODE.  5D3 IS THE PRODUCT     DEMA3
*         OVERLAY THAT EXECUTES THESE COMMANDS AND  IS  DRIVEN  BY  THE  DEMA3
*         INSTRUCTION STACK OF THE MALET PP  DRIVER.  REQUESTS ARE MADE  DEMA3
*         BY THE DRIVER BY STORING PARAMETERS INTO PP  DIRECT CELLS AND  DEMA3
*         PERFORMING  A  RETURN-JUMP TO THE OVERLAY SUBROUTINE.  THE         12 
*         OVERLAY SUBROUTINE ALSO USES PARAMETERS WHICH HAVE BEEN 
*         COMPILED INTO THE INSTRUCTION STACK AREA.   ONCE THE
*         REQUEST HAS BEEN COMPLETED, CONTROL IS RETURNED TO THE  STACK  DEMA3
*         TO EXECUTE THE NEXT COMMAND.  THE DEVICE TYPE FOR THESE        DEMA3
*         COMMANDS IS DEMA3.                                             DEMA3
*                                                                        DEMA3
*         THE DEMA3 FULL-TRACK PRODUCT OVERLAY SUPPORTS  A PROGRAMMABLE  DEMA3
*         INPUT BUFFER (IB) OF 505B PP WORDS, AN  OUTPUT BUFFER (OB) OF  DEMA3
*         505B PP WORDS AND A STATUS BUFFER (SB) OF 64B PP WORDS.  DATA  DEMA3
*         IS  WRITTEN  TO  THE  DISK FROM THE OUTPUT BUFFER AND IS READ  DEMA3
*         FROM THE DISK TO THE INPUT BUFFER.  DATA IS ALSO TRANSFERRED    DEMA3 
*         BETWEEN DISK AND ESM AND BETWEEN SUBSYSTEM MEMORY AND ESM.
*         THE STATUS BUFFER IS USED TO HOLD GENERAL, GENERAL EXTENDED,
*         LOW SPEED PORT AND DETAIL STATUS FROM THE SUBSYSTEM AND OTHER 
*         WORDS DEFINED LATER.  SUPPORTED CAPABILITIES ARE AS FOLLOWS_
*                                                                        DEMA3
*           DIAGRD - READ 2540B WORDS FROM SUBSYSTEM MEMORY TO IB OR        DEMA
*                    2400B WORDS FROM ESM TO SUBSYSTEM MEMORY.
*           DIAGWR - WRITE 2540B WORDS FROM OB TO SUBSYSTEM MEMORY OR    DEMA3
*                    2400B WORDS FROM SUBSYSTEM MEMORY TO ESM.
*           LSP ECHO-WRITE 120B WORDS FROM PP TO ESM LSP AND
*                    READ THE SAME 120B WORDS BACK TO PP. 
*           READ   - SEEK AND READ 0 TO 500B SECTORS FROM DISK TO ESM    DEMA3
*                    OR ONE SECTOR FROM DISK TO IB. 
*           REL    - RELEASE DRIVE, CONTROLLER AND I/O CHANNEL.          DEMA3
*           RES    - RESERVE I/O CHANNEL, CONTROLLER AND DRIVE.          DEMA3
*           RESET  - AUTOLOAD CONTROLLER TO MONITOR LOOP.                DEMA3
*           SEEK   - MOVE DRIVE POSITIONER.                              DEMA3
*           SHORTRD- READ 2520B WORDS FROM DISK TO IB.
*           STATUS - INPUT GEN., GEN. EXT., DETAIL OR LSP STATUS TO SB. 
*           VERIFY - SEEK AND WRITE VERIFY 0 TO 500B SECTORS ON DISK     DEMA3
*                    FROM ESM.
*           WRITE  - SEEK AND WRITE 0 TO 500B SECTORS TO DISK FROM ESM    DEMA3 
*                    OR WRITE ONE SECTOR FROM OB TO DISK. 
*                                                                        DEMA3
*         THIS PRODUCT OVERLAY DOES NOT USE THE WC OR BA  REGISTERS  TO  DEMA3
*         CONTROL  I/O OPERATIONS.  THESE REGISTERS ARE FREE FOR USE BY  DEMA3
*         THE MODULE PROGRAMMER.  READS AND WRITES BETWEEN CONTROLLER     DEMA3 
*         AND PP TRANSFER 2540B WORDS ACCOMPLISHED BY REPETITIVE INPUTS     DEMA
*         OR OUTPUTS FROM THE BUFFER (A BLOCK OF 140B WORDS FOLLOWED BY 
*         FOUR BLOCKS OF 500B WORDS).  IN THIS WAY A LARGE SECTOR        DEMA3
*         OF 2540B WORDS IS CONSTRUCTED FROM THE 500B WORD BUFFER.       DEMA3
*         EXECUTION OF A READ WILL LEAVE THE LAST 500B WORD BLOCK        DEMA3
*         IN THE INPUT BUFFER.                                           DEMA3
*                                                                        DEMA3
          EJECT                                                          DEMA3
**        THE FOLLOWING CHART DEFINES THE LAY-OUT OF THE STATUS BUFFER.  DEMA3
*                                                                        DEMA3
*                   --------------------   ---                           DEMA3
*               0   /   GENERAL STATUS /      /                          DEMA3
*                   /------------------/      /                          DEMA3
*               1   /                  /      /                          DEMA3
*               .   /                  /      /                          DEMA3
*               .   /   DETAIL STATUS  /      / THIS IS THE NORMAL/LAST  DEMA3
*               .   /                  /      / TAKEN STATUS FROM THE    DEMA3
*               .   /                  /      / SUBSYSTEM                DEMA3
*               .   /                  /      /                          DEMA3
*               .   /                  /      /                          DEMA3
*               .   /                  /      /                          DEMA3
*              24B  /                  /   ---                           DEMA3
*                   /------------------/   ---                           DEMA3
*              25B  /   GENERAL STATUS /      /                          DEMA3
*                   /------------------/      /                          DEMA3
*              26B  /                  /      /                          DEMA3
*               .   /                  /      / THIS IS THE FIRST TAKEN  DEMA3
*               .   /   DETAIL STATUS  /      / STATUS WITHIN SEQUENCES  DEMA3
*               .   /                  /      / THAT REQUIRED RECOVERY   DEMA3
*               .   /                  /      / TO BE PERFORMED.         DEMA3
*               .   /                  /      / (CONTINUE FUNCTIONS      DEMA3
*               .   /                  /      / ISSUED)                  DEMA3
*               .   /                  /      /                          DEMA3
*              51B  /                  /   ---                           DEMA3
*                   /------------------/   ---                           DEMA3
*              52B  /  RETRY COUNT     /      / ERROR CORRECTION DATA    DEMA3
*                   /------------------/   ---                           DEMA3
*              56B  / 1ST BYTE         /      / DISK PACK SERIAL NUMBER  DEMA3
*              57B  / 2ND BYTE         /      / (FROM ASSIGN DIRECTIVE)  DEMA3
*                   /------------------/   ---                           DEMA3
*              60B  / SEEK TIME        /      / MILLISECONDS TO DO LAST  DEMA3
*                   /------------------/      / SEEK                     DEMA3
*              61B  / CHANNEL          /   ---                           DEMA3
*              62B  / EQUIPMENT        /      /                          DEMA3
*              63B  / UNIT             /      / EQUIPMENT UNDER TEST     DEMA3
*                   --------------------   ---                           DEMA3
*                                                                        DEMA3
*         ALL SUBROUTINES IN THIS PRODUCT OVERLAY USE  A  COMMON  ERROR  DEMA3
*         EXIT  SEQUENCE  WHEN  AN  ERROR  IS  DETECTED.  THIS SEQUENCE  DEMA3
*         STORES AN INTERNAL ERROR CODE INTO THE EC REGISTER, AN  ERROR  DEMA3
*         MESSAGE INDEX INTO THE EM REGISTER AND THE CURRENT P REGISTER  DEMA3
*         CONTENTS (LINE NUMBER) INTO THE  EA  REGISTER.   I/O  CHANNEL  DEMA3
*         CLEAN-UP  OCCURS  AND  A JUMP IS MADE TO THE STATEMENT NUMBER  DEMA3
*         SPECIFIED BY THE ABT ADDRESS IN THE COMMAND.                   DEMA3
*                                                                        DEMA3
          EJECT                                                          DEMA3
* MATRIX OF DEMA3 COMMANDS       RES------------/ .----------RESET             1
* VS ERRORS THAT MAY BE         REL-----------. / . /----------SEEK 
* GENERATED FOR EACH           READ---------/ . / . / .------SHORTRD       3
* COMMAND.                    LSP ECHO----. / . / . / . /------STATUS       3 
*                            DIAGWR-----/ . / . / . / . / .-----VERIFY
* CODE         MESSAGE      DIAGRD----. / . / . / . / . / . /-----WRITE      3
* 4001 ADDR OUT OF FL                 . . . . X X . . . . . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5710 CH NOT ASSIGNED                X X X X . . X X X . X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5711 CH ACTIVE ON ENTRY             . . . . . X . . . . . .                 3 
*      ------------------------------ - - - - - - - - - - - - 
* 5712 NO INACTIVE TO LAST FUNC       X X X X X X X X X . X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5713 NO INACTIVE TO GEN STATUS      X X X X X X X X . . X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5714 NO INACTIVE TO DETAIL STATUS   . . . X . X . X X X X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5715 GEN STATUS NOT RETURNED        . . . X . X . X X X X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5716 INCOMPLETE STATUS RETURNED     . . . X . X . X X X X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5717 FUNC PARAMS NOT ACCEPTED       . . . X . X . X X . X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5720 ALL DATA NOT ACCEPTED FROM PP  X X X X . . . . . . X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5721 INCOMPLETE DATA RETURNED TO PP . . X X . . . . X . . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5722 CONTROLLER/DRIVE NOT CONNECTED X X X X . . X X X . X X               138 
*      ------------------------------ - - - - - - - - - - - - 
* 5723 AL TOO LOW FOR REQ             . . . X . . . . X . X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5724 RESERVE TIMEOUT                . . . . . X . . . . . .                 14
*      ------------------------------ - - - - - - - - - - - - 
* 5725 ABNORMAL GEN STATUS            . . . X . . . X X . X X                144
*      ------------------------------ - - - - - - - - - - - - 
* 5726 CH FAILED TO GO EMPTY          . . X . . . . . . . . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5727 UNIT HUNG BUSY ON SEEK         . . . X . . . X X . X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5730 SUCCESSFUL RETRY               . . . X . . . . . . X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5731 DATA COMPARE ERROR             . . . X . . . . . . . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5732 DEVICE CODE/STATUS MISMATCH    . . . . . X . . . . . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5733 NO INACTIVE AFTER DATA XFER    . . . X . . . . X . . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5734 NO INACTIVE TO GEN EXT STATUS  . . . X . . . . X X X X 
*      ------------------------------ - - - - - - - - - - - - 
* 5735 GEN EXT STATUS NOT RETURNED    . . . X . . . . . X . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5736 NO INACTIVE TO ESM LSP STATUS  . . X . . . . . . X . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5737 ESM LSP STATUS NOT RETURNED    . . X . . . . . . X . . 
*      ------------------------------ - - - - - - - - - - - - 
* 5740 ABNORMAL ESM LSP STATUS        . . X . . . . . . . . . 
          EJECT                                                          DEMA3
*         THE PROCESS DESCRIBED IN THE FOLLOWING STEPS IS USED WITHIN 
*         DEMA3 PRODUCT OVERLAY TO UPDATE TRACK AND SECTOR REGISTERS
*         WHILE PROCESSING I/O DATA TRANSFER COMMANDS READ, READ TO ESM,
*         WRITE, WRITE FROM ESM, VERIFY, GET AND SHORTRD IN 1:1 
*         INTERLACE MODE. 
* 
*         THE "SECTORS REMAINING COUNT" IS THE NUMBER OF SECTORS
*         REQUESTED WHICH REMAIN TO BE PROCESSED.  INITIALLY, 
*         "SECTORS REMAINING COUNT" EQUALS NUMBER OF SECTORS REQUESTED. 
* 
*         THE "SECTOR COUNT" IS THE PHYSICAL SECTOR POSITION OF THE 
*         SECTOR CURRENTLY BEING TRANSFERRED.  THE "TRACK COUNT" IS 
*         THE PHYSICAL TRACK POSITION OF THE TRACK CURRENTLY BEING
*         TRANSFERRED.
* 
*          1. PERFORM SEEK SEQUENCE.
* 
*          2. IF SECTORS REMAINING COUNT (V) = 0, EXIT TO STACK.
* 
*          3. CALCULATE NUMBER OF SECTORS THAT CAN BE PROCESSED FROM
*             TRACK/SECTOR TO END OF CYLINDER.  SET THE NUMBER OF 
*             SECTORS REMAINING TO THIS VALUE OR TO THE NUMBER
*             REQUESTED WHICHEVER IS SMALLER. 
* 
*          4. PROCESS ONE SECTOR. 
* 
*          5. SUBTRACT 1 FROM SECTORS REMAINING COUNT.
* 
*          6. IF SECTORS REMAINING COUNT = 0, EXIT TO STACK.
* 
*          7. INCREMENT SECTOR COUNT. 
* 
*          8. IF SECTOR COUNT IS GREATER THAN 37B, GO TO 9, ELSE
*             GO TO 4.
* 
*          9. CLEAR SECTOR COUNT. 
* 
*         10. INCREMENT TRACK COUNT.
* 
*         11. GO TO 4.
          EJECT 
*         EQUATES FOR ERROR CODES - FIRST 7 ARE FOR BASIC DRIVER.        DEMA3
                                                                         DEMA3
 EC.FLE   EQU    1           ADDR OUT OF FL                              DEMA3
 EC.TL    EQU    2           I/O TIMEOUT ON CH RESERVE                   DEMA3
 EC.SEE   EQU    3           SUBR ENTRY/EXIT ERROR                       DEMA3
 EC.WC    EQU    4           BUFFER INDEX OR WC ERR                      DEMA3
 EC.RES   EQU    5           RESERVED FOR BASIC DRIVER                   DEMA3
 EC.RES1  EQU    6           RESERVED FOR BASIC DRIVER                   DEMA3
 EC.RES2  EQU    7           RESERVED FOR BASIC DRIVER                   DEMA3
                                                                         DEMA3
 EC.CNA   EQU    10B         CH NOT ASSIGNED                             DEMA3
 EC.CAS   EQU    11B         CH ACTIVE ON ENTRY                          DEMA3
 EC.NIF   EQU    12B         NO INACTIVE TO LAST FUNC                    DEMA3
 EC.NIGS  EQU    13B         NO INACTIVE TO GENERAL STATUS               DEMA3
 EC.NIDS  EQU    14B         NO INACTIVE TO DETAIL  STATUS               DEMA3
 EC.GSNR  EQU    15B         GENERAL STATUS NOT RETURNED                 DEMA3
 EC.ISR   EQU    16B         INCOMPLETE STATUS RETURNED                  DEMA3
 EC.FPNA  EQU    17B         FUNC PARAMETERS NOT ACCEPTED                DEMA3
 EC.DNA   EQU    20B         ALL DATA NOT ACCEPTED FROM PP               DEMA3
 EC.IDR   EQU    21B         INCOMPLETE DATA RETURNED TO PP              DEMA3
 EC.CNC   EQU    22B         CONTROLLER/DRIVE NOT CONNECTED              DEMA3
 EC.IAL   EQU    23B         ACCESS LEVEL TOO LOW FOR REQ                DEMA3
 EC.NRES  EQU    24B         RESERVE TIMEOUT                             DEMA3
 EC.AGS   EQU    25B         ABNORMAL GENERAL STATUS                     DEMA3
 EC.CFE   EQU    26B         CHANNEL FAILED TO GO EMPTY 
 EC.UHB   EQU    27B         UNIT HUNG BUSY ON SEEK                      DEMA3
 EC.STRY  EQU    30B         SUCCESSFUL RETRY                            DEMA3
 EC.DCE   EQU    31B         DATA COMPARE ERROR                          DEMA3
 EC.DCSM  EQU    32B         DEVICE CODE/STATUS MISMATCH                 DEMA3
 EC.NIDT  EQU    33B         NO INACTIVE AFTER DATA TRANSFER             DEMA3
 EC.NIES  EQU    34B         NO INACTIVE TO GEN EXT STATUS
 EC.GENR  EQU    35B         GEN EXT STATUS NOT RETURNED
 EC.NILS  EQU    36B         NO INACTIVE TO ESM LSP STATUS
 EC.ELNR  EQU    37B         ESM LSP STATUS NOT RETURNED
 EC.AELS  EQU    40B         ABNORMAL ESM LSP STATUS
                                                                         DEMA3
*         DIRECT CELL EQUATES                                            DEMA3
                                                                         DEMA3
 RDWRF    EQU    60B         READ/WRITE (TO/FROM PP) FLAG 
 COD      EQU    61B         WRITE - READ CODED FLAG                     DEMA3
 FUN      EQU    62B         FUNCTION FOR READ OR WRITE                  DEMA3
 CL       EQU    63B         ADDRESS OF CURRENT (SECTOR) LENGTH  - V     DEMA3
 CC       EQU    65B         ADDRESS OF CURRNET CYLINDER         - W     DEMA3
 CT       EQU    66B         ADDRESS OF CURRENT TRACK            - X     DEMA3
 CS       EQU    67B         ADDRESS OF CURRENT SECTOR           - Y     DEMA3
                                                                         DEMA3
 SEEKA    EQU    D.Z3        SEEK ADDRESS USES D.Z3 THRU D.Z7            DEMA3
 PA       EQU    D.T0        PARAMETER ADDRESS/ 
 IOC      EQU    D.T6        I/O CODE REGISTER
 ESM      EQU    D.T7        RDWR FLAG FOR COMMAND WITH KEYWORD ESM 
                                                                         DEMA3
          EJECT                                                          DEMA3
*         EQUATES FOR EQUIPMENT FUNCTIONS.                               DEMA3
                                                                         DEMA3
 CONN     EQU    0           CONNECT                                     DEMA3
 SEK11    EQU    1           SEEK 1 TO 1 INTERLACE                       DEMA3
                                                                         DEMA3
                                                                         DEMA3
 OC       EQU    10B         OPERATION COMPLETE                          DEMA3
 GS       EQU    12B         GENERAL STATUS                              DEMA3
 CONT     EQU    14B         CONTINUE                                    DEMA3
 DREL     EQU    20B         DRIVE RELEASE                               DEMA3
 EDS      EQU    23B         EXTENDED DETAIL STATUS                      DEMA3
 DR       EQU    70B         DIAGNOSTIC READ USING SPECIAL CHANNEL
 DRE      EQU    72B         DIAGNOSTIC READ FROM ESM 
 RS       EQU    40B         READ SHORT                                  DEMA3
 GE       EQU    66B         GENERAL EXTENDED STATUS
 AUTO     EQU    414B        AUTOLOAD FUNCTION                           DEMA3
 PS       EQU    5004B       READ (ESM LOW SPEED PORT) STATUS 
 MCLSP    EQU    5010B       MASTER CLEAR LOW SPEED PORT
 MMR      EQU    5021B       MAINTENANCE MODE READ
 MMW      EQU    5022B       MAINTENANCE MODE WRITE 
                                                                         DEMA3
*         GENERAL STATUS BIT EQUATES.                                    DEMA3
                                                                         DEMA3
 BUSY     EQU    1           UNIT BUSY                                   DEMA3
 DRES     EQU    3           DRIVE RESERVED                              DEMA3
 RIP      EQU    8D          RECOVERY IN PROGRESS                        DEMA3
 UNR      EQU    9D          NONRECOVERABLE ERROR                        DEMA3
 CRES     EQU    10D         CONTROLLER RESERVED                         DEMA3
                                                                         DEMA3
*         DEVICE CODES SUPPORTED                                         DEMA3
                                                                         DEMA3
 DEMA     EQU    14B         DEMA 4HP 885-42                             DEMA3
          SPACE  4,20                                                    DEMA3
*         MISCELANOUS EQUATES.                                           DEMA3
                                                                         DEMA3
 TIMFJM   EQU    50000D/2     INTERATION TIME TO WAIT FOR FULL 50 MSEC   DEMA3
 TIMREL   EQU    400000D/100D INTERVAL FOR CHANNEL RELEASE-              DEMA3
 MAXITT   EQU    12D         ITERATION COUNT FOR ABOUT A 5 SEC.DELAY     DEMA3
                                                                         DEMA3
 MAXCDD   EQU    1512B       MAXIMUM CYLINDER ON A 885                   DEMA3
 PRECYL   EQU    2           NUMBER OF PREALLOCATED CYLINDERS            DEMA3
                                                                         DEMA3
*IF,DEF,SECURE,1
 ARD      EQU    4           READ ANYWHERE
*IF,-DEF,SECURE,1 
 ARD      EQU    2           READ ANYWHERE
 ARW      EQU    4           READ ANYWHERE, WRITE ANYWHERE               DEMA3
 AL21     EQU    21B         ACCESS LEVEL FOR NO CHANNEL CLEANUP ON ERR  DEMA3
                                                                         DEMA3
 CH       EQU    37B         DEFAULT CHANNEL VALUE FOR I/O COMMANDS      DEMA3
                                                                         DEMA3
 SEL      EQU    37B         MAXIMUM SECTOR COUNT                        DEMA3
 TRL      EQU    11B         MAXIMUM TRACK COUNT                         DEMA3
  
 ESMT     EQU    D.T0        TEMPORARY DIRECT BLOCK FOR ESM ADDRESS 
          EJECT 
**        ERROR MESSAGES - WRITTEN TO CM DURING INITIALIZATION.          DEMA3
*                                                                        DEMA3
*         MMSG MACRO.                                                    DEMA3
*                                                                        DEMA3
*         MMSG  MACRO  NAME,ECODE,MSG,FABT                               DEMA3
*                                                                        DEMA3
*         NAME = 6/FABT,6/MESSAGE ORDINAL,6/ECODE.                       DEMA3
*                                                                        DEMA3
*         ECODE = ERROR CODE TO BE ASSIGNED (6 BITS).                    DEMA3
*                                                                        DEMA3
*         MSG = ERROR MESSAGE (40 CHARACTERS).                           DEMA3
*                                                                        DEMA3
*         FABT = FORCE ABORT (UPPER 6 BITS OF NAME.                      DEMA3
*                                                                        DEMA3
          PURGMAC MMSG                                                   DEMA3
 MMSG     MACRO  NAME,ECODE,MSG,FABT                                     DEMA3
          IF     -DEF,MMSGORD,1                                          DEMA3
 MMSGORD  SET    0                        INITIALIZE ORDINAL             DEMA3
          IFC    EQ,$FABT$$,2             TEST FOR NO FORCE ABORT        DEMA3
 NAME     EQU    MMSGORD*100B+ECODE                                      DEMA3
          ELSE   1                                                       DEMA3
 NAME     EQU    FABT*10000B+MMSGORD*100B+ECODE                          DEMA3
 MMSGBGN  SET    *                        SAVE CURRENT ADDRESS           DEMA3
          IFC    EQ,$MSG$$,2              TEST NULL MESSAGE              DEMA3
          DATA   1H                       INSURE DATA ITEM               DEMA3
          ELSE   1                                                       DEMA3
          DATA   H$MSG$                   STORE MESSAGE                  DEMA3
          DATA   0                        SET END OF MESSAGE             DEMA3
          IFGT   *-MMSGBGN,BD.MSGML*5+1,1 TEST MESSAGE TOO LONG          DEMA3
 P        ERR    MESSAGE TOO LONG                                        DEMA3
 MMSGORD  SET    MMSGORD+1                BUMP ORDINAL                   DEMA3
          IFGT   MMSGORD,BD.MSGMN,1       TEST TOO MANY MESSAGES         DEMA3
 P        ERR    TOO MANY MESSAGES                                       DEMA3
 MMSGL    SET    MMSGORD*BD.MSGML         SET CM WORD COUNT              DEMA3
          ENDM                                                           DEMA3
          EJECT                                                          DEMA3
 START    LJM    **          ENTRY POINT FOR OVERLAY INITIALIZATION      DEMA3
          LJM    INIT                                                    DEMA3
                                                                         DEMA3
          VFD    12/IB       FWA OF INPUT BUFFER                         DEMA3
          VFD    12/OB       FWA OF OUTPUT BUFFER                        DEMA3
          VFD    12/SB       FWA OF STATUS BUFFER                        DEMA3
          VFD    12/LIB      LENGTH OF INPUT BUFFER                      DEMA3
          VFD    12/LIB      LENGTH OF OUTPUT BUFFER                     DEMA3
          VFD    12/LSB      LENGTH OF STATUS BUFFER                     DEMA3
                                                                         DEMA3
          VFD    12/BD.VERS  VERSION NUMBER OF THIS OVERLAY              DEMA3
                                                                         DEMA3
**        RFM    - RELEASE FROM MLD (FIXED LOCATION ENTRY POINT)         DEMA3
*                  RELEASE CALLED FROM MAINTENANCE LANGUAGE DRIVER       DEMA3
*                  RELEASE CONTROLLER AND DRIVE IF CONNECTED             DEMA3
*                                                                        DEMA3
*                  REL, ABT Z                                            DEMA3
*                                                                        DEMA3
*         ENTRY  - (A) = ABORT ADDRESS (777777B)                         DEMA3
*                                                                        DEMA3
*         EXIT   - RELEASE COMMAND HAS BEEN EXECUTED                     DEMA3
*                                                                        DEMA3
*         USES   - ERR3, ERR4                                            DEMA3
*                                                                        DEMA3
*         CALLS  - OPC, BD.DCH                                           DEMA3
*                                                                        DEMA3
 XRFM     LJM    **          EXIT TO MLD                                 DEMA3
 RFM      EQU    *-1                                                     DEMA3
          STM    ERR4        SAVE ABORT ADDRESS (777777B)                DEMA3
          SHN    -12D                                                    DEMA3
          STM    ERR3                                                    DEMA3
          RJM    OPC         RELEASE THE EQUIPMENT IF CONNECTED          DEMA3
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC        DEMA3
          UJN    XRFM        EXIT TO MLD                                 DEMA3
                                                                         DEMA3
**        ENT    - DISTRIBUTE CONTROL TO REQUESTED COMMAND               DEMA3
*                                                                        DEMA3
*         ENTRY  - ((ENT))    BITS 11 - 06 = INDEX TO TBLENT ENTRY       DEMA3
*                                            BIASED BY 20B               DEMA3
*                  ((ENT))    BITS 05 - 00 = LINE NO. UPPER 6 BITS       DEMA3
*                                                                        DEMA3
*                  ((ENT)+1)  BIT  11      = LINE NO. LOWER BIT          DEMA3
*                  ((ENT)+1)  BITS 10 - 00 = ABORT ADDRESS IN STACK      DEMA3
*                                                                        DEMA3
*         EXIT   - COMMAND HAS BEEN EXECUTED                             DEMA3
*                                                                        DEMA3
*         USES   - D.Z1, D.Z2, D.Z3, ERR3, ERR4                          DEMA3
*                                                                        DEMA3
*         CALLS  - NONE (LJM TO REQUESTED COMMAND)                       DEMA3
*                                                                        DEMA3
 XENT     LJM    **          EXIT TO CALLER OF COMMAND CODE (IN STACK)   DEMA3
 ENT      EQU    *-1                                                     DEMA3
          LDM    ENT         ADDRESS OF COMMAND PARAMETERS IN STACK      DEMA3
          STD    D.Z2        SAVE FOR INDIRECT LOAD OF PARAMETERS        DEMA3
          LDI    D.Z2        LOAD COMMAND PARAMETER WORD 1 FROM STACK    DEMA3
          SHN    12D         OBTAIN INDEX+20B TO CURRENT TBLENT ENTRY    DEMA3
          STD    D.Z3        SAVE FOR LOAD OF ADDRESS OF COMMAND CODE    DEMA3
          SHN    -12D        OBTAIN UPPER 6 BITS OF LINE NUMBER          DEMA3
          STM    ERR3        SAVE IN ERROR PROCESSING AREA               DEMA3
          AOD    D.Z2        INCREMENT TO COMMAND STACK PARAMETER WORD 2 DEMA3
          LDI    D.Z2        LOAD COMMAND PARAMETER WORD 2 FROM STACK    DEMA3
          STM    ERR4        RIGHT BIT OF LINE NO./ 11 BIT ABORT ADDRESS DEMA3
          AOD    D.Z2        INCREMENT TO NEXT COMMAND IN STACK          DEMA3
          STM    ENT         STORE ADDRESS IN EXIT TO STACK LONG JUMP    DEMA3
          LDM    TBLENT-20B,D.Z3     LOAD FWA OF CODE TO EXECUTE COMMAND DEMA3
          STD    D.Z1                                                    DEMA3
          LJM    0,D.Z1      GO EXECUTE COMMAND                          DEMA3
                                                                         DEMA3
**        TABLE OF ENTRY POINTS FOR EXECUTING HIGH LEVEL COMMANDS        DEMA3
*                                                                        DEMA3
 TBLENT   VFD    12/REL      RELEASE CONTROLLER AND DRIVE                DEMA3
          VFD    12/RES      RESERVE CONTROLLER OR CONTROLLER AND DRIVE  DEMA3
          VFD    12/DIAG     DIAGNOSTIC I/O TO/FROM INPUT/OUTPUT BUFFER  DEMA3
          PSN                RESERVED 
          VFD    12/RDWR     SEEK AND I/O THE REQUESTED NO. OF SECTORS   DEMA3
          VFD    12/RESET    AUTOLOAD THE CONTROLLER, RESET LSP          DEMA3
          VFD    12/SEEK     SEEK TO THE ADDRESS SPECIFIED               DEMA3
          VFD    12/STATUS   GET GENERAL, DETAIL, GEN.EXT. OR LSP STATUS DEMA3
          VFD    12/ECHO     LOW SPEED PORT ECHO
          VFD    12/SHORTRD  READ 2520B WORDS FROM DISK TO IB 
          EJECT                                                          DEMA3
 REL      TITLE  REL - RELEASE CONTROLLER AND DRIVE IF CONNECTED.        DEMA3
**        REL    - RELEASE CONTROLLER AND DRIVE IF CONNECTED.            DEMA3
*                                                                        DEMA3
*                  REL, ABT Z                                            DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - DEVICE CONNECT HAS BEEN RELEASED IF ASSIGNED AND THE  DEMA3
*                  CHANNEL IS RELEASED TO THE SYSTEM.                    DEMA3
*                                                                        DEMA3
*         USES   - NONE                                                  DEMA3
*                                                                        DEMA3
*         CALLS  - OPC, BD.DCH                                           DEMA3
*                                                                        DEMA3
                                                                         DEMA3
**     1. DISCONNECT DRIVE AND CONTROLLER WITH AN OPERATION COMPLETE     DEMA3
*         FUNCTION IF EITHER IS CONNECTED.                               DEMA3
*                                                                        DEMA3
*      2. DROP THE I/O CHANNEL TO THE OPERATING SYSTEM IF ASSIGNED.      DEMA3
*                                                                        DEMA3
 REL      RJM    OPC         RELEASE THE EQUIPMENT IF CONNECTED          DEMA3
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC        DEMA3
          LJM    XENT        EXIT TO STACK                               DEMA3
          EJECT                                                          DEMA3
 RES      TITLE  RES - RESERVE CONTROLLER OR CONTROLLER AND DRIVE.       DEMA3
**        RES    - RESERVE CONTROLLER OR CONTROLLER AND DRIVE.           DEMA3
*                                                                        DEMA3
*                  RES CONTROLLER, ABT Z                                 DEMA3
*                  RES DRIVE, ABT Z                                      DEMA3
*                                                                        DEMA3
*         ENTRY  - (PA) = CONTROLLER/DRIVE FLAG.                         DEMA3
*                                                                        DEMA3
*         EXIT   - I/O CHANNEL ASSIGNED AND CHANNEL ASSIGNED FLAGS ARE   DEMA3
*                  SET IN ALL THE OTHER SUBROUTINES.                     DEMA3
*                                                                        DEMA3
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  DEMA3
*                  ERRCAS  - IF CHANNEL ACTIVE FROM SYSTEM               DEMA3
*                  ERRDCSM - IF DEVICE CODE/STATUS MISMATCH              DEMA3
*                  ERRNRES - IF NOT RESERVED IN 5 MINUTES                DEMA3
*                                                                        DEMA3
*         USES   - EC, EA, EM, RESA, RES7, OPC1, D.T3, SBIE, D.T4,
*                  DRCON
*                                                                        DEMA3
*         CALLS  - RES1, OPC, STC, DST, FNA, BD.RCH                      DEMA3
                                                                         DEMA3
**     1. DISCONNECT DRIVE AND CONTROLLER WITH AN OPERATION COMPLETE     DEMA3
*         FUNCTION IF EITHER IS CONNECTED.                               DEMA3
*                                                                        DEMA3
                                                                         DEMA3
**     2. CLEAR ERROR EXIT REGISTERS.                                    DEMA3
*                                                                        DEMA3
 RES      LDN    0                                                       DEMA3
          STD    EC          CLEAR ERROR REGISTERS                       DEMA3
          STD    EA                                                      DEMA3
          STD    EM                                                      DEMA3
                                                                         DEMA3
**     3. DROP/REQUEST I/O CHANNEL FROM THE SYSTEM.                      DEMA3
*                                                                        DEMA3
          LDN    MAXITT      ITERATION COUNT FOR STATUS                  DEMA3
          STM    RESA        AND PAUSE LOOP                              DEMA3
          LDD    PA                                                      DEMA3
          STM    RES7        SAVE CONTROLLER/DRIVE CONNECT FLAG          DEMA3
 RES2     RJM    OPC         TO RELEASE THE CONTROLLER IF SELECTED       DEMA3
          LDN    0                                                       DEMA3
          STM    OPC1        SET CONTROLLER AND UNIT NOT RESERVED        DEMA3
 RES2A    SOM    RESA        DECREMENT THE ITERATION COUNT               DEMA3
          PJN    RES3        IF NOT TIMED OUT                            DEMA3
          LDC    ER.NRES     ELSE ERROR EXIT                             DEMA3
          LJM    ERR                                                     DEMA3
 RES3     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED           DEMA3
          RJM    IJM         WAIT CHANNEL ACTIVE                         DEMA3
          LDC    ER.CAS                                                  DEMA3
          AJM    ERR,CH      ERROR IF CHANNEL ACTIVE FROM SYSTEM         DEMA3
                                                                         DEMA3
**     4. REQUEST AND INPUT GENERAL STATUS.                              DEMA3
*                                                                        DEMA3
          LDC    TIMREL      DELAY CONSTANT FOR TIMEOUT                  DEMA3
          STD    D.T3        TO COUNT STATUS ITERATIONS                  DEMA3
          LDN    GS          GENERAL STATUS FUNCTION CODE 
          STD    LF          SPECIFY LAST (MAJOR) FUNCTION
 RES4     RJM    STS         GET GENERAL STATUS 
          STM    SBIE        SAVE IT AS STATUS BEFORE ERROR TIME         DEMA3
                                                                         DEMA3
**     5. IF BIT 2**10 IS SET, REPEAT STEP 4 UNTIL 500 MSEC HAS          DEMA3
*         ELAPSED.  IF A RESERVE IS NOT SUCCESSFUL WITHIN THIS           DEMA3
*         TIME-FRAME, EXECUTE THE *REL* SEQUENCE TO COMMUNICATE          DEMA3
*         WITH THE SYSTEM.  REPEAT THIS STEP UNTIL A RESERVE IS          DEMA3
*         SUCCESSFUL OR 5 MINUTES HAVE ELAPSED. ABORT IF NO              DEMA3
*         RESERVE IN 5 MINUTES.                                          DEMA3
*                                                                        DEMA3
          SHN    17D-CRES                                                DEMA3
          PJN    RES6        IF COUPLER IS CONNECTED                     DEMA3
          SOD    D.T3        DECREMENT LOOP COUNT                        DEMA3
          PJN    RES4        IF NOT TIMED OUT                            DEMA3
          UJN    RES2A       ELSE START NEXT ITERATION                   DEMA3
                                                                         DEMA3
**     6. SET THE CONTROLLER CONNECTED FLAG.                             DEMA3
*                                                                        DEMA3
 RES6     RJM    DST         GET DETAILED STATUS                         DEMA3
          SHN    -9          POSITION CONTROLLER/UNIT RESERVE BITS       DEMA3
          LPN    2           MASK OFF CONTROLLER RESERVE BIT             DEMA3
          ADN    1           SET UNIT RESERVE BIT                        DEMA3
          STM    OPC1        SAVE DETAIL STATUS WD 13 FOR OPC            DEMA3
                                                                         DEMA3
                                                                         DEMA3
**     7. EXIT IF THE KEYWORD *CONTROLLER* IS SPECIFIED.                 DEMA3
*                                                                        DEMA3
 RES6A    LDC    **          TYPE OF FUNCTION                            DEMA3
 RES7     EQU    *-1         *** CONNECT DRIVER/CONTROLLER FLAG          DEMA3
          NJN    RES9        IF DRIVE CONNECT IS ALSO DESIRED            DEMA3
          LJM    RES12       TEST FOR FMD TYPE CONTROLLER 
                                                                         DEMA3
**     8. ISSUE A CONNECT FUNCTION AND OUTPUT THE UNIT NUMBER.           DEMA3
*                                                                        DEMA3
 RES9     LDC    **          UNIT NUMBER STORED HERE                     DEMA3
 UN       EQU    *-1                                                     DEMA3
          STD    D.T4        SAVE FOR SUBROUTINE FNO                     DEMA3
          LPN    77B         EXAMINE ONLY BITS FOR UNIT NO.              DEMA3
          SBN    40B                                                     DEMA3
          MJN    RES13       IF LT 40B  ERROR EXIT                       DEMA3
          SBN    20B
          PJN    RES13       JUMP IF UNIT NO. GREATER THAN 57B
          LDN    CONN        LOAD CONNECT FUNCTION                       DEMA3
          RJM    FNO         PERFORM FUNCTION AND OUTPUT CONTROL WORD    DEMA3
                                                                         DEMA3
**     9. REQUEST AND INPUT GENERAL AND DETAIL STATUS. VERIFY THAT       DEMA3
*         GENERAL STATUS IS 0000 OR 0002 AND  THAT  DETAIL  STATUS       DEMA3
*         INDICATES THAT THE UNIT ASSIGNED MATCHES THE DEVICE CODE       DEMA3
*         ASSIGNED. (FMD OR NOT).                                        DEMA3
*                                                                        DEMA3
          RJM    STS         TO GET STATUS                               DEMA3
          SCN    2           TO TEST OTHER THAN BUSY                     DEMA3
          ZJN    RES11       IF NO ERROR STATUS                          DEMA3
          SHN    17D-DRES    TO TEST THE DRIVE RESERVED BIT              DEMA3
          PJN    RES10       IF THE UNIT IS NOT RESERVED                 DEMA3
          SOD    D.T3        DECREMENT THE COUNT                         DEMA3
          PJN    RES6A       IF NOT DONE WITH THIS ITERATION             DEMA3
          LJM    RES2        ELSE START ANOTHER ITERATION                DEMA3
                                                                         DEMA3
 RES10    LJM    ERRAGS                                                  DEMA3
                                                                         DEMA3
 RES11    RJM    DST         TO GET DETAIL STATUS                        DEMA3
          SHN    17-9        POSITION UNIT RESERVE BIT
          MJN    RES12       IF UNIT RESERVED                            DEMA3
          SOM    OPC1        CLEAR UNIT RESERVED BIT                     DEMA3
 RES12    LDM    SB+4        DS WD WITH CTRLWARE NO. AND UNIT NO.        DEMA3
          SHN    17-10                                                   DEMA3
          MJN    RES14                                                   DEMA3
                                                                         DEMA3
 RES13    LDC    ER.DCSM     ELSE ERROR EXIT                             DEMA3
          LJM    ERR                                                     DEMA3
                                                                         DEMA3
**    10. SET THE DRIVE CONNECTED FLAG.                                  DEMA3
*                                                                        DEMA3
 RES14    LDN    0                                                       DEMA3
          STM    DRCON       SET DRIVE CONNECTED FLAG                    DEMA3
 RES15    LJM    XENT        EXIT TO STACK                               DEMA3
          EJECT                                                          DEMA3
DIAG      TITLE  DIAG - DIAGNOSTIC I/O TO/FROM INPUT/OUTPUT BUFFER
**        DIAG   - DIAGNOSTIC I/O TO/FROM INPUT/OUTPUT BUFFER 
* 
*                  DIAGNOSTIC READ FROM SUBSYSTEM BUFFER MEMORY TO PP 
*                  DIAGNOSTIC WRITE FROM PP TO SUBSYSTEM BUFFER MEMORY
*                  DIAGNOSTIC READ FROM ESM TO SUBSYSTEM BUFFER MEMORY
*                  DIAGNOSTIC WRITE TO ESM FROM SUBSYSTEM BUFFER MEMORY 
* 
*                  DIAGRD, ABT Z
*                  DIAGWR, ABT Z
*                  DIAGRD FROM ESM, ABT Z 
*                  DIAGWR TO ESM, ABT Z 
* 
*         ENTRY  - (PA) = FUNCTION CODE (70, 71, 72 OR 73)
* 
*         EXIT   - ERR - IF INCOMPLETE DATA RETURNED TO PP
*                        IF ALL DATA NOT ACCEPTED FROM PP 
* 
*         USES   WT, RDWRF, D.T2, D.T3, D.T1, IB(0-477B)
* 
*         CALLS  TCO, FNC, IJM
* 
**        VERIFY THAT THE CONTROLLER IS CONNECTED 
* 
 DIAG     RJM    TCO         TEST CONTROLLER CONNECTED
          STD    WT          CLEAR THE WORDS TRANSFERRED REGISTER 
  
**        ISSUE FUNCTION - 70,71,72 OR 73 
* 
          LDD    PA          LOAD FUNCTION CODE 
          RJM    FNC         PERFORM THE FUNCTION 
          ACN    CH+40B      ACTIVATE THE CHANNEL 
  
**        BRANCH ACCORDING TO ESM VS PP DATA TRANSFER 
* 
          LDD    PA          LOAD FUNCTION CODE 
          SBN    DRE         TEST IF ESM TRANSFER 
          MJN    DIAG1       JUMP IF NOT ESM TRANSFER 
  
**        PERFORM TRANSFER BETWEEN ESM AND CONTROLLER MEMORY
* 
          LDN    2           SPECIFY 2 WORDS FOR ESM ADDRESS
          STD    RDWRF       SET READ/WRITE FLAG TO WRITE FOR ERROR EXIT
          OAM    ESMA,CH     OUTPUT ESM ADDRESS FROM PP TO SUBSYSTEM
          ZJN    DIAG5       JUMP IF BOTH WORDS OF ESM ADDRESS OUTPUT 
          LJM    RDW36       ERROR - ALL DATA NOT ACCEPTED FROM PP
  
**        PERFORM TRANSFER BETWEEN PP AND CONTROLLER MEMORY 
* 
DIAG1     LDD    PA          LOAD FUNCTION CODE (70B OR 71B)
          SBN    DR          BIAS BY 70B
          STD    RDWRF       SET READ/WRITE FLAG (READ = 0, WRITE = 1)
          LDN    4           SPECIFY 5 PP I/O BLOCK TRANSFERS 
          STD    D.T2        INITIALIZE LOOP COUNTER FOR BLOCK TRANSFERS
  
**        BEGIN LOOP TO TRANSFER DATA BETWEEN PP AND CONTROLLER MEMORY
* 
DIAG2     LDM    BTSD,D.T2   LOAD CURRENT PP I/O BLOCK TRANSFER SIZE
          STD    D.T3 
          LDD    RDWRF       LOAD READ/WRITE FLAG 
          NJN    DIAG3       JUMP IF WRITE
  
**        INPUT CURRENT NO. WORDS FROM THE SUBSYSTEM MEMORY TO THE PP 
*         INPUT BUFFER USING SPECIAL CYBER CHANNEL IN SUBSYSTEM 
* 
          LDD    D.T3        CURRENT PP I/O BLOCK TRANSFER SIZE 
          IAM    IB,CH       READ CONTROLLER BUFFER TO PP INPUT BUFFER
          UJN    DIAG4
  
**        OUTPUT CURRENT NO. WORDS FROM PP OUTPUT BUFFER TO THE 
*         SUBSYSTEM MEMORY USING SPECIAL CYBER CHANNEL IN SUBSYSTEM 
* 
 DIAG3    LDD    D.T3        CURRENT PP I/O BLOCK TRANSFER SIZE 
          OAM    OB,CH       WRITE PP OUTPUT BUFFER TO CONTROLLER BUFFER
  
*         VERIFY THAT THE CURRENT SELECTED NO. WORDS WERE ACTUALLY
*         TRANSFERRED. STORE CUMULATIVE NO. WORDS TRANSFERRED IN WT REG.
* 
 DIAG4    STD    D.T1        SAVE COUNT OF WORDS NOT TRANSFERRED
          LDD    D.T3        CURRENT PP BLOCK TRANSFER SIZE 
          SBD    D.T1        COMPUTE NO. WORDS ACTUALLY TRANSFERRED 
          RAD    WT          UPDATE CUMULATIVE NO. WORDS TRANSFERRED
          LDD    D.T1        COUNT OF WORDS NOT TRANSFERRED 
          NJN    DIAG7       IF NOT ZERO, EARLY (ERROR) EXIT
  
**        UPDATE LOOP COUNT FOR PP I/O BLOCK TRANSFERS
* 
          SOD    D.T2        DECREMENT LOOP COUNT 
          PJN    DIAG2       LOOP BACK IF NOT LAST PP BLOCK I/O 
  
**        COMPLETE I/O OPERATION
* 
 DIAG5    RJM    IJM         TEST IF CHANNEL IS INACTIVE
          NJN    DIAG6       JUMP IF CHANNEL IS INACTIVE
          DCN    CH+40B      DEACTIVATE THE CHANNEL 
 DIAG6    LJM    XENT        EXIT TO STACK
  
 DIAG7    LJM    RDW36       ERROR, A REG. NON-ZERO AFTER PP BLOCK I/O
          EJECT 
ECHO      TITLE  ECHO - WRITE TO AND READ FROM ESM LSP BUFFER 
**        ECHO   - WRITE TO AND READ FROM ESM LSP BUFFER
* 
*                  LSP ECHO, ABT Z
* 
*         ENTRY  - NONE 
* 
*         EXIT   - 80 WORDS IN OB COPIED TO IB VIA ESM LSP BUFFER.
* 
*                  ERR - IF ALL DATA NOT ACCEPTED FROM PP 
*                        IF INCOMPLETE DATA RETURNED TO PP
*                        IF ABNORMAL ESM STATUS 
* 
*         USES   IB(0-117B), WT 
* 
*         CALLS  TCO, FNC, EJM, LSP 
  
**        VERIFY THAT THE CONTROLLER IS CONNECTED 
* 
 ECHO     RJM    TCO         TEST CONTROLLER CONNECTED
  
**        SEND THE MAINTENANCE MODE WRITE FUNCTION (5022B)
* 
          LDC    MMW         LOAD THE FUNCTION CODE 
          RJM    FNC         PERFORM THE FUNCTION 
  
**        OUTPUT 2 ESM ADDRESS WORDS FROM PP TO CONTROLLER
* 
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          LDN    2           SPECIFY 2 WORD DATA TRANSFER 
          STD    WT          PRESET WORDS TRANSFERRED REGISTER
          OAM    ESMA,CH     OUTPUT 2 ESM ADDRESS WORDS 
          NJN    ECHO3       JUMP IF ALL DATA NOT ACCEPTED FROM PP
  
**        OUTPUT 120B WORDS FROM PP TO CONTROLLER TO LSP BUFFER 
* 
          LDC    120B        SPECIFY 120B WORD DATA TRANSFER
          STD    WT          PRESET WORDS TRANSFERRED REGISTER
          OAM    OB,CH       OUTPUT 80 WORDS FROM PP OUTPUT BUFFER
          NJN    ECHO3       JUMP IF ALL DATA NOT ACCEPTED FROM PP
          RJM    EJM         WAIT FOR CHANNEL TO GO EMPTY 
          DCN    CH+40B      DISCONNECT THE CHANNEL 
  
**        CHECK ESM LOW SPEED PORT STATUS 
* 
          RJM    LSP         REQUEST ESM LSP STATUS 
          LDM    ESMST       LOAD ESM LSP STATUS FROM BUFFER
          SCN    12B         MASK OUT NON-ERROR BITS
          ZJN    ECHO2       JUMP IF NO ESM LSP STATUS ERROR
          LDC    ER.AELS     ERROR - ABNORMAL ESM LSP STATUS
 ECHO1    LJM    ERR         ERROR EXIT 
  
**        SEND THE MAINTENANCE MODE READ FUNCTION (5021B) 
* 
 ECHO2    LDC    MMR         LOAD THE FUNCTION CODE 
          RJM    FNC         PERFORM THE FUNCTION 
  
**        OUTPUT 2 ESM ADDRESS WORDS FROM PP TO CONTROLLER
* 
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          LDN    2           SPECIFY 2 WORD DATA TRANSFER 
          STD    WT          PRESET WORDS TRANSFERRED REGISTER
          OAM    ESMA,CH     OUTPUT 2 ESM ADDRESS WORDS 
          ZJN    ECHO4       JUMP IF ALL DATA ACCEPTED FROM PP
 ECHO3    LMC    777777B     FORM COMPLEMENT OF WORDS NOT TRANSFERRED 
          RAD    WT          ADJUST WORDS TRANSFERRED REGISTER
          LDC    ER.DNA      ERROR - ALL DATA NOT ACCEPTED FROM PP
          UJN    ECHO1       ERROR EXIT 
  
**        INPUT 120B WORDS TO PP FROM CONTROLLER FROM LSP BUFFER
* 
 ECHO4    RJM    EJM         WAIT FOR CHANNEL TO GO EMPTY 
          LDC    120B        SPECIFY 120B WORD DATA TRANSFER
          STD    WT          PRESET WORDS TRANSFERRED REGISTER
          IAM    IB,CH       INPUT 80 WORDS TO PP INPUT BUFFER
          ZJN    ECHO5       JUMP IF ALL DATA RETURNED TO PP
          LMC    777777B     FORM COMPLEMENT OF WORDS NOT TRANSFERRED 
          RAD    WT          ADJUST WORDS TRANSFERRED REGISTER
          LDC    ER.IDR      ERROR - INCOMPLETE DATA RETURNED TO PP 
          UJN    ECHO1       ERROR EXIT 
  
 ECHO5    DCN    CH+40B      DISCONNECT THE CHANNEL 
          LJM    XENT        EXIT TO STACK
          EJECT 
 SHORTRD  TITLE  SHORTRD- PERFORM A SHORT READ OPERATION ON ONE SECTOR. 
**        SHORTRD - PERFORM A SHORT READ OPERATION ON ONE SECTOR
* 
*                   SHORTRD CYL W TRK X SEC Y, ABT Z
* 
*         ENTRY  - (PA+65B) = W 
*                  (PA+66B) = X 
*                  (PA+67B) = Y 
* 
*         EXIT   - NONE 
* 
*         USES   - COD, RDWRF, ESM, D.T5, CL, FUN 
* 
*         CALLS  - RDW5 (LONG JUMP) 
* 
 SHORTRD  RJM    TDR         VERIFY THAT DRIVE IS CONNECTED 
          STD    COD         ELIMINATE CODED DATA CHECK 
          STD    RDWRF       INDICATE A READ OPERATION TO PP
          STD    ESM         SPECIFY NO ESM TRANSFERS 
* 
          LDN    1           SPECIFY READ ONE SECTOR
          STD    D.T5        STORE NUMBER OF SECTORS TO READ
          LDN    D.T5        ADDRESS OF NUMBER OF SECTORS TO READ 
          STD    CL          CURRENT LENGTH (IN SECTORS)
* 
          LDN    RS          CONTROLLER FUNCTION CODE FOR READ SHORT
          STD    FUN         STORE CONTROLLER FUNCTION CODE 
          LDN    5           I/O CODE FOR SHORTRD COMMAND = 5 
* 
*         EXIT TO READ/WRITE ROUTINE RDWR 
* 
          UJN    RDW5        GO READ ONE SHORT SECTOR (2520B WORDS) 
          EJECT                                                          DEMA3
RDWR      TITLE  RDWR - SEEK AND I/O THE REQUESTED NUMBER OF SECTORS
**        RDWR   - SEEK AND I/O THE REQUESTED NUMBER OF SECTORS 
* 
*         READ ONE SECTORS AT CYL W TRK X SEC Y, ABT Z
*         READ ONE CODED SECTORS AT CYL W TRK X SEC Y, ABT Z
*         READ TO ESM V SECTORS AT CYL W TRK X SEC Y, ABT Z 
*         READ TO ESM V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z 
* 
*         WRITE ONE SECTORS AT CYL W TRK X SEC Y, ABT Z 
*         WRITE ONE CODED SECTORS AT CYL W TRK X SEC Y, ABT Z 
*         WRITE FROM ESM V SECTORS AT CYL W TRK X SEC Y, ABT Z
*         WRITE FROM ESM V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z
* 
*         VERIFY FROM ESM V SECTORS AT CYL W TRK X SEC Y, ABT Z 
*         VERIFY FROM ESM V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z 
* 
*         ENTRY  - (PA)      BITS 0-2  = CONTROLLER FUNCTION CODE 
*                            BIT  3    = NOT ESM/ESM FLAG 
*                            BIT  4    = NOT CODED/CODED FLAG 
*                            BIT  5    = READ/WRITE FLAG
* 
*                  (CL) = V        CURRENT LENGTH (IN SECTORS)
*                  (CC) = W        CURRENT CYLINDER 
*                  (CT) = X        CURRENT TRACK
*                  (CS) = Y        CURRENT SECTOR 
* 
*         EXIT   - V = ZERO,
*                  W, X, AND Y = LAST CYL, TRK, AND SEC.
* 
*         USES   RDWRF, COD, ESM, FUN, IOC, D.T2, SB(0-24B),
*                SBIE(0-24B), RETRY, RDW17, D.T4, (CL), 
*                RT, WT, IB(0-477B), OB(500B-502B), D.T1,  D.T3, (CS),
*                (CT) 
* 
*         CALLS  TDR, SEEK1, STS, GES, DST
* 
 RDWR     RJM    TDR         VERIFY THAT THE DRIVE IS CONNECTED 
* 
*         PRESTORE PARAMETERS PASSED WITH CALL FROM STACK 
* 
          LDD    PA          PARAMETER ADDRESS
          SHN    13D         SHIFT READ/WRITE FLAG TO BIT 0 
          STD    RDWRF       SET/CLEAR READ/WRITE (TO/FROM PP) FLAG 
          SCN    1           CLEAR READ/WRITE BIT 
          SHN    1           SHIFT CODED FLAG TO BIT 0
          STD    COD         SET/CLEAR THE CODED FLAG 
          SCN    1           CLEAR CODED FLAG BIT 
          SHN    1           SHIFT ESM FLAG TO BIT 0
          STD    ESM         SET/CLEAR THE ESM FLAG 
          SHN    -15D        RIGHT ADJUST THE FUNCTION CODE 
          STD    FUN         STORE THE FUNCTION CODE
* 
*         ASSIGN VALUE TO DEMA3 I/O CODE REGISTER CORRESPONDING TO
*         CURRENT RDWR DATA TRANSFER COMMAND
* 
          LJM    RDW1-4,FUN  DISTRIBUTE CONTROL ACCORDING TO FUNCTION 
 RDW1     UJN    RDW2        READ   (FUNCTION CODE = 4) 
          UJN    RDW3        WRITE  (FUNCTION CODE = 5) 
*                            VERIFY (FUNCTION CODE = 6) 
* 
          LDN    4           I/O CODE (IOC) FOR VERIFY = 4
          UJN    RDW5        GO STORE I/O CODE
* 
 RDW2     LDN    1           I/O CODE (IOC) FOR READ = 1
          UJN    RDW4        I/O CODE (IOC) FOR READ/ESM = 0
* 
 RDW3     LDN    3           I/O CODE (IOC) FOR WRITE = 3 
 RDW4     SBD    ESM         I/O CODE (IOC) FOR WRITE/ESM = 2 
* 
*         ENTRY POINT FOR SHORTRD COMMAND (IOC = 5) 
* 
 RDW5     STD    IOC         INITIALIZE DEMA3 I/O CODE REGISTER 
* 
*         ADJUST READ/WRITE FLAG FOR PP I/O BLOCK TRANSFERS IF READ/ESM 
* 
          NJN    RDW6        JUMP IF NOT READ/ESM 
          LDN    1           READ/ESM HAS PP I/O BLOCK TRANSFER = WRITE 
          STD    RDWRF       ADJUST READ/WRITE FLAG TO SPECIFY WRITE
* 
*         CLEAR THE STATUS BUFFER (SB),  STATUS SAVE AREA FOR INITIAL 
*         ERROR ON RETRY (SBIE) AND RETRY COUNTER (RETRY) 
* 
 RDW6     LDN    RETRY-SB 
          STD    D.T2        NUMBER OF WORDS IN SB TO CLEAR 
 RDW7     LDN    0
          STM    SB,D.T2     CLEAR THE STATUS BUFFER
          SOD    D.T2 
          PJN    RDW7        LOOP BACK IF NOT DONE
* 
*         PERFORM ACCESS LEVEL CHECKS 
* 
          LDD    BD.AL       ACCESS LEVEL ASSIGNED
          SBM    RDWAL,RDWRF COMPARE WITH ACCESS LEVEL REQUIRED 
          PJN    RDW9        JUMP IF ACCESS LEVEL HIGH ENOUGH 
          ADN    1           TEST IF ACCESS LEVEL FOR PREALLOCATED AREA 
          MJN    RDW8        JUMP IF TOO LOW FOR PREALLOCATED AREA
          LDC    MAXCDD-PRECYL   PREALLOCATED CYLINDER - 1
          SBI    CC          CURRENT CYLINDER 
          MJN    RDW9        JUMP IF CYL DESIRED IS IN PREALLOCATED AREA
 RDW8     LDC    ER.IAL      ERROR - ACCESS LEVEL TOO LOW FOR REQ 
          LJM    ERR         ERROR EXIT 
* 
 RDW9     RJM    SEEK1       SEEK TO DESIRED CYLINDER 
* 
*         EXIT IF NO SECTORS REQUESTED (V = 0)
* 
          LDI    CL          REMAINING SECTOR COUNT 
          NJN    RDW10       JUMP IF SECTORS REQUESTED
          LJM    XENT        EXIT TO STACK
* 
*         PRESTORE ADDRESS OF CURRENT BLOCK CONTAINING PP I/O BLOCK 
*         TRANSFER SIZES. 
* 
 RDW10    LDM    BTSA,IOC   ADDRESS OF CURRENT BLOCK TRANSFER SIZE BLOCK
          STM    RDW17       STORE IN INSTRUCTION TO LOAD CURRENT BTS 
* 
* 
*         CALCULATE NUMBER OF SECTORS THAT CAN BE PROCESSED FROM CURRENT
*         TRACK/SECTOR TO END OF CYLINDER.  SET THE NUMBER OF SECTORS TO
*         PROCESS ((CL)) TO THIS VALUE OR TO THE CONTENTS OF REGISTER V 
*         (ORIGINAL ((CL))) WHICHEVER IS SMALLER. 
* 
          LDN    TRL         TRACK LENGTH (NO. TRACKS IN CYLINDER) - 1
          SBI    CT          MINUS CURRENT TRACK (HERE = STARTING TRACK)
          SHN    5           CONVERT TO SECTORS (32 SECTORS PER TRACK)
          STD    D.T4        SECTORS FROM CURR. TRK+1 TO END OF CYLINDER
          LDN    SEL+1       SECTOR LENGTH (MAXIMUM SECTORS PER TRACK)
          SBI    CS          MINUS CURRENT SECTOR (HERE=STARTING SECTOR)
          RAD    D.T4        SECS. FROM STARTING SEC. TO END OF CYLINDER
          SBI    CL          COMPARE WITH NUMBER OF SECTORS REQUESTED 
          PJN    RDW11       JUMP IF NO. REQUESTED IS CONTAINED IN CYL. 
          LDD    D.T4        SECS. FROM STARTING SEC. TO END OF CYLINDER
          STI    CL          GRANT ONLY SECTORS TO END OF CYLINDER
* 
 RDW11    LDI    CL          CURRENT LENGTH IN SECTORS
          SHN    -2 
          RAD    RT          RESET REAL TIME CLOCK
* 
*         START OF LOOP TO TRANSFER DATA (1 LARGE SECTOR PER ITERATION) 
* 
*         DETERMINE IF CURRENT SECTOR IS LAST SECTOR TO BE TRANSFERRED
* 
 RDW11A   LDI    CL          CURRENT LENGTH IN SECTORS
          LMN    1           COMPARE CURRENT SECTOR WITH 1
          NJN    RDW12       JUMP IF NOT THE LAST SECTOR
* 
*         DETERMINE WHETHER LAST SECTOR TEST APPLIES TO CURRENT COMMAND 
* 
          LDD    RDWRF       PP I/O BLOCK TRANSFER READ/WRITE FLAG
          ZJN    RDW12       JUMP IF READ TO PP 
          LDD    IOC         DEMA3 I/O CODE 
          ZJN    RDW12       JUMP IF READ/ESM COMMAND 
* 
*         THE CURRENT COMMAND IS EITHER A WRITE (FUN = 0005) OR WRITE 
*         VERIFY (FUN = 0006).  TO WRITE LAST SECTOR ON A 7155
*         CONTROLLER, A WRITE LAST SECTOR FUNCTION IS USED (0035 FOR
*         WRITE, 0036 FOR WRITE VERIFY).  USING THESE LAST SECTOR 
*         FUNCTIONS ALLOWS USEFUL STATUS TO BE READ ON THE FIRST
*         REQUEST AFTER WRITE OF DATA.
* 
          LDD    FUN         CONTROLLER FUNCTION CODE 
          ADN    30B         CREATE WRITE LAST SECTOR FUNCTION-35 OR 36 
          UJN    RDW13       JUMP TO PERFORM THE FUNCTION 
* 
*         ISSUE A FUNCTION TO PERFORM ONE OF THE FOLLOWING COMMANDS-
*         READ/ESM (4), READ (4), WRITE/ESM (5), WRITE (5), VERIFY (6), 
*         CONTINUE (14), WRITE LAST SECTOR (35), WRITE VERIFY LAST
*         SECTOR (36), SHORTRD (40).
* 
 RDW12    LDD    FUN         LOAD THE FUNCTION
 RDW13    RJM    FNC         SEND THE FUNCTION
          LDN    0           CLEAR REGISTER FOR CUMULATIVE NUMBER OF
          STD    WT          WORDS TRANSFERRED
* 
*         IF THE KEYWORD CODED WAS SPECIFIED IN THE WRITE OR VERIFY 
*         COMMAND, STORE THE FOLLOWING DATA INTO THE PP OUTPUT BUFFER.
* 
*           OB(500B) TO REGISTER W (CYLINDER) 
*           OB(501B) TO REGISTER X (TRACK)
*           OR(502B) TO REGISTER Y (SECTOR) 
* 
          LDD    IOC         DEMA3 I/O CODE REGISTER
          SBN    2           TEST IF READ OR READ TO ESM
          MJN    RDW15       JUMP IF READ OR READ TO ESM
          LDD    COD         LOAD CODED FLAG
          ZJN    RDW15       JUMP IF NOT CODED
* 
          LDI    CC          CURRENT CYLINDER 
          STM    OB+500B     LOCATION IN BUFFER FOR CODED CYLINDER
          LDI    CT          CURRENT TRACK
          STM    OB+501B     LOCATION IN BUFFER FOR CODED TRACK 
          LDI    CS          CURRENT SECTOR 
          STM    OB+502B     LOCATION IN BUFFER FOR CODED SECTOR
* 
 RDW15    ACN    CH+40B      ACTIVATE THE CHANNEL 
* 
*         PRESET LOOP COUNT FOR CURRENT NO. PP I/O BLOCK TRANSFERS
* 
*         COMMAND          NO. TRANSFERS        LOOP COUNT     I/O CODE 
*          READ TO ESM          1                    0            0 
*          READ                 5                    4            1 
*          WRITE FROM ESM       2                    1            2 
*          WRITE                5                    4            3 
*          VERIFY               2                    1            4 
*          SHORTRD              5                    4            5 
* 
          LDM    LIO,IOC     LOOP COUNT FOR CURRENT NO. PP BLOCK XFERS
          STD    D.T2        SAVE LOOP COUNT
* 
*         START OF LOOP TO TRANSFER DATA
*         ONE PP I/O BLOCK TRANSFER PER ITERATION 
* 
 RDW16    LDM    **,D.T2     LOAD CURRENT PP I/O BLOCK TRANSFER SIZE
 RDW17    EQU    RDW16+1     ADDRESS OF CURRENT BLOCK OF PP I/O BTS'S 
          STD    D.T3        SAVE CURRENT PP I/O BLOCK TRANSFER SIZE
* 
*         DISTRIBUTE CONTROL TO CODE TO TRANSFER DATA BETWEEN PP AND
*         CONTROLLER (AND INDIRECTLY BETWEEN ESM AND CONTROLLER IF
*         ESM REQUESTED)
* 
          LJM    RDW18,IOC   JUMP TO TRANSFER CODE FOR CURRENT COMMAND
 RDW18    UJN    RDW22       READ TO ESM
          UJN    RDW19       READ 
          UJN    RDW20       WRITE FROM ESM 
          UJN    RDW24       WRITE
          UJN    RDW20       VERIFY 
*                            SHORTRD
* 
* 
*         SHORTRD OR READ (NOT ESM) COMMAND - READ TO INPUT BUFFER
* 
 RDW19    LJM    RDW19A,D.T2 READ TO INPUT BUFFER DISTRIBUTOR 
 RDW19A   UJN    RDW19B      READ TO INPUT BUFFER - 5TH OF 5
          UJN    RDW19B      READ TO INPUT BUFFER - 4TH OF 5
          UJN    RDW19B      READ TO INPUT BUFFER - 3RD OF 5
          UJN    RDW19B      READ TO INPUT BUFFER - 2ND OF 5
          IAM    IB+344B,CH  READ TO INPUT BUFFER - 1ST OF 5
          UJN    RDW25
 RDW19B   IAM    IB,CH       READ TO INPUT BUFFER - LAST 4 OF 5 
          UJN    RDW25
* 
*         WRITE FROM ESM OR VERIFY COMMAND - TEST WHICH OF 2 TRANSFERS
* 
 RDW20    LJM    RDW21,D.T2  DISTRIBUTE CONTROL ACCORDING TO WHICH PASS 
 RDW21    UJN    RDW23       2ND PP I/O BLOCK TRANSFER
*         UJN    RDW22       1ST PP I/O BLOCK TRANSFER
* 
*         READ/ESM OR WRITE/ESM (1ST TRANSFER) COMMAND - 2 WORD WRITE 
* 
 RDW22    OAM    ESMA,CH     OUTPUT FROM PP TO SUBSYSTEM THE ESM ADDRESS
          UJN    RDW25
* 
*         WRITE/ESM OR VERIFY/ESM COMMAND - 2ND PP I/O BLOCK TRANSFER 
* 
 RDW23    OAM    OB+500B,CH  WRITE 4 WORDS FROM OUTPUT BUFFER (OB+500B) 
          UJN    RDW25
* 
*         WRITE (NOT ESM) COMMAND - WRITE FROM OUTPUT BUFFER
* 
 RDW24    LJM    RDW24A,D.T2 WRITE FROM OUTPUT BUFFER DISTRIBUTOR 
 RDW24A   UJN    RDW24B      WRITE FROM OUTPUT BUFFER - 5TH OF 5
          UJN    RDW24B      WRITE FROM OUTPUT BUFFER - 4TH OF 5
          UJN    RDW24B      WRITE FROM OUTPUT BUFFER - 3RD OF 5
          UJN    RDW24B      WRITE FROM OUTPUT BUFFER - 2ND OF 5
          OAM    OB+344B,CH  WRITE FROM OUTPUT BUFFER - 1ST OF 5
          UJN    RDW25
 RDW24B   OAM    OB,CH       WRITE FROM OUTPUT BUFFER - LAST 4 OF 5 
* 
*         VERIFY THAT THE CURRENT SELECTED NUMBER OF WORDS WERE ACTUALLY
*         TRANSFERRED. STORE CUMULATIVE NO. WORDS TRANSFERRED IN WT REG.
* 
 RDW25    STD    D.T1        SAVE COUNT OF WORDS NOT WRITTEN
          LDD    D.T3        CURRENT PP I/O BLOCK TRANSFER SIZE 
          SBD    D.T1        COMPUTE NO. WORDS ACTUALLY TRANSFERRED 
          RAD    WT          UPDATE CUMULATIVE NO. WORDS TRANSFERRED
          LDD    D.T1        COUNT OF WORDS NOT WRITTEN 
          NJN    RDW27       IF NOT ZERO, EARLY (ERROR) EXIT
* 
*         UPDATE LOOP COUNT FOR PP I/O BLOCK TRANSFERS
* 
          SOD    D.T2        DECREMENT LOOP COUNT 
          MJN    RDW25A      JUMP IF LAST PP I/O BLOCK TRANSFER 
          LJM    RDW16       LOOP BACK FOR NEXT PP I/O BLOCK TRANSFER 
* 
*         COMPLETE I/O OPERATION
* 
 RDW25A   LDD    RDWRF       READ/WRITE (TO/FROM PP) FLAG 
          NJN    RDW28       JUMP IF WRITE FROM PP
 RDW26    IJM    RDW29,CH    JUMP IF CHANNEL DEACTIVATED PROPERLY 
          ADN    1           INCREMENT TIMER (A REGISTER) 
          PJN    RDW26       JUMP IF NOT TIMED OUT
          LDC    ER.NIDT     ERROR - NO INACTIVE AFTER DATA XFER
          LJM    ERR         ERROR EXIT 
 RDW27    LJM    RDW36       ERROR, A REGISTER NON-ZERO AFTER PP I/O
 RDW28    RJM    EJM         INSURE CHANNEL HAS GONE EMPTY
          DCN    CH+40B      DEACTIVATE THE CHANNEL 
* 
*         REQUEST AND INPUT GENERAL STATUS (EXTENDED GENERAL STATUS IF
*         READ/ESM) TO DETERMINE IF OPERATION COMPLETED SUCCESSFULLY. 
*         IF GENERAL STATUS IS NON-ZERO ENTER ERROR SEQUENCE. 
* 
 RDW29    LDD    IOC         LOAD I/O CODE
          ZJN    RDW30       JUMP IF READ/ESM COMMAND 
          RJM    STS         READ GENERAL STATUS
          UJN    RDW31
 RDW30    RJM    GES         READ GENERAL EXTENDED STATUS 
 RDW31    ZJN    RDW31A      JUMP IF NO GENERAL STATUS ERROR
          LJM    RDW43       ENTER ERROR EXIT OR RECOVERY SEQUENCE
* 
*         IF READ/CODED COMPARE CYLINDER (CC), TRACK (CT), AND SECTOR 
*         (CS) WITH CODED INFORMATION READ.  IF ESM COMPARE WITH SB(1-3)
*         IF NOT ESM COMPARE WITH OB(134B - 137B).
* 
 RDW31A   LDD    IOC         I/O CODE REGISTER
          SBN    2           TEST IF READ OR READ TO ESM COMMAND
          PJN    RDW34       JUMP IF NOT READ 
          LDD    COD         CODED FLAG 
          ZJN    RDW34       JUMP IF NOT CODED
          LDD    IOC         I/O CODE REGISTER
          ZJN    RDW32       JUMP IF READ TO ESM COMMAND
          LDM    IB+500B     CHECK FOR CORRECT READ CODING (CYLINDER) 
          ADM    IB+501B                                   (TRACK)
          ADM    IB+502B                                   (SECTOR) 
          UJN    RDW33
 RDW32    LDM    SB+1        CHECK FOR CORRECT READ/ESM CODING (CYL)
          ADM    SB+2                                          (TRACK)
          ADM    SB+3                                          (SECTOR) 
 RDW33    SBI    CC          CURRENT CYLINDER 
          SBI    CT          CURRENT TRACK
          SBI    CS          CURRENT SECTOR 
          ZJN    RDW34       JUMP IF NO CODING ERROR
          LDC    ER.DCE      ERROR CODE FOR DATA COMPARE ERROR
          UJN    RDW46       ERROR EXIT FOR CODED ERROR 
* 
 RDW34    LDM    RETRY       TEST IF RETRY COMPLETED
          NJN    RDW45       JUMP IF RETRY COMPLETED
* 
*         UPDATE SECTOR AND TRACK COUNTS
* 
          SOI    CL          DECREMENT SECTORS REMAINING COUNT (V)
          ZJN    RDW42       EXIT TO STACK IF ALL SECTORS PROCESSED 
* 
*         INCREMENT THE CONTENTS OF REGISTERS X AND Y PER 1 TO 1
*         INTERLACE ALGORITHM 
* 
          AOI    CS          INCREMENT CURRENT SECTOR (REGISTER Y)
          SBN    SEL+1       TEST IF SECTOR COUNT .GT. 37B
          MJN    RDW35       JUMP IF NO, GO PROCESS NEXT SECTOR 
          STI    CS          CLEAR CURRENT SECTOR 
          AOI    CT          INCREMENT CURRENT TRACK (REGISTER X) 
 RDW35    LJM    RDW11A      GO PROCESS NEXT SECTOR 
* 
*         PROCESS PP I/O ABORT BECAUSE THE A REGISTER UNEQUAL ZERO
* 
 RDW36    RJM    STS         OBTAIN GENERAL STATUS
          LDD    RDWRF       READ/WRITE (TO/FROM PP) FLAG 
          NJN    RDW40       JUMP IF WRITE FROM PP
* 
          LDC    ER.IDR      ERROR - INCOMPLETE DATA RETURNED TO PP 
          UJN    RDW41
* 
 RDW40    LDC    ER.DNA      ERROR - ALL DATA NOT ACCEPTED FROM PP
 RDW41    LJM    ERRDST      GO GET DETAIL STATUS AND ERROR EXIT
* 
 RDW42    LJM    XENT        EXIT TO STACK
* 
*         PROCESS ERROR EXIT FOR SUCCESSFUL RETRY 
* 
 RDW45    LDD    FUN         CURRENT CONTROLLER FUNCTION CODE 
          LMN    RS          TEST IF SHORT READ (SHORTRD) 
          ZJN    RDW42       EXIT TO STACK IF SHORT READ
          LDC    ER.STRY     ERROR - SUCCESSFUL RETRY 
 RDW46    LJM    ERR         ERROR EXIT 
* 
*         REQUEST AND INPUT DETAIL STATUS.  EXECUTE THE ERROR EXIT
*         SEQUENCE IF BIT 2**9 IS SET IN GENERAL STATUS.
*         (NONRECOVERABLE ERROR). 
* 
 RDW43    RJM    DST         GET DETAILED STATUS
          LDM    SB          LOAD GENERAL STATUS
          SHN    17D-UNR     LEFT ADJUST NONRECOVERABLE ERROR BIT 
          MJN    RDW44       JUMP IF AN UNRECOVERED ERROR 
* 
*         IF BIT 2**8 IS SET (RECOVERY IN PROGRESS) ENTER THE RECOVERY
*         SEQUENCE. IF BIT 2**8 IS CLEAR (NO RECOVERY IN PROGRESS) ENTER
*         THE ERROR EXIT SEQUENCE.  (GENERAL STATUS AT THIS POINT IS
*         STRANGE  SINCE  IT  IS NOT ZERO, BUT DOES NOT INDICATE A
*         RECOVERABLE OR NONRECOVERABLE ERROR). 
* 
          SHN    17D-RIP-17D+UNR   TEST IF RECOVERY IN PROGRESS 
          MJN    RDW47       JUMP IF RECOVERY IN PROGRESS 
          UJN    RDW44A      GO REPORT ERROR
 RDW44    LDD    FUN         CURRENT CONTROLLER FUNCTION CODE 
          LMN    RS          TEST IF SHORT READ (SHORTRD) 
          ZJN    RDW42       EXIT TO STACK IF SHORT READ
 RDW44A   LDC    ER.AGS      ERROR - ABNORMAL GENERAL STATUS
          UJN    RDW46       JUMP TO ERROR EXIT 
* 
*         BIT 2**8 IS SET (RECOVERY IN PROGRESS).  DETERMINE IF 
*         THE RETRY COUNT IN THE STATUS BUFFER IS ZERO (FIRST TIME
*         FAILURE).  IF SO, REQUEST AND INPUT  DETAIL  STATUS  AND
*         STORE  IT  AND GENERAL STATUS INTO WORDS 25B THRU 51B OF
*         THE STATUS BUFFER TO CAPTURE THE ORIGINAL  STATUS  THAT 
*         CAUSED  RECOVERY  TO  BE  PERFORMED.   ISSUE  A CONTINUE
*         FUNCTION  (0014), INCREMENT THE RETRY COUNTER IN THE PP 
*         STATUS BUFFER AND GO PERFORM THE RETRY OF THE I/O DATA
*         TRANSFER. 
* 
 RDW47    LDM    RETRY
          NJN    RDW49       JUMP IF NOT FIRST ERROR RETRY
          LDN    25B         ELSE MOVE THE INITIAL ERROR STATUS TO SBIE 
          STD    D.T1        INITIALIZE LOOP COUNTER
 RDW48    LDM    SB,D.T1     LOAD A DETAIL STATUS WORD
          STM    SBIE,D.T1   STORE A DETAIL STATUS WORD 
          SOD    D.T1        DECREMENT LOOP COUNT 
          PJN    RDW48       LOOP BACK IF NOT DONE MOVING DETAIL STATUS 
 RDW49    AOM    RETRY       INCREMENT THE RETRY COUNT
          SBN    28D
          MJN    RDW50       JUMP IF .LT. 28D RETRIES 
          LJM    RDW45       ERROR EXIT IF .GT. 27D RETRIES 
 RDW50    LDN    CONT        LOAD CONTINUE FUNCTION CODE
          LJM    RDW13       GO PERFORM I/O TRANSFER AFTER A CONTINUE 
* 
*         LOOP COUNTS USED TO SPECIFY NUMBER OF PP I/O BLOCK TRANSFERS
*         PER CONTROLLER DATA TRANSFER FUNCTION 
* 
*         FUNCTION         NO. TRANSFERS     LOOP COUNT     I/O CODE
*          READ/ESM             1                 0            0
*          READ                 5                 4            1
*          WRITE/ESM            2                 1            2
*          WRITE                5                 4            3
*          VERIFY               2                 1            4
*          SHORTRD              5                 4            5
* 
 LIO      DATA   0,4,1,4,1,4
* 
*         ADDRESSES OF BLOCK TRANSFER SIZE BLOCKS 
*         ADDRESS ENTRIES MUST BE IN ORDER CORRESPONDING TO I/O CODE
* 
*                ADDRESS     IOC    COMMAND 
 BTSA     CON    BTSRE        0     READ/ESM
          CON    BTSR         1     READ
          CON    BTSWE        2     WRITE/ESM 
          CON    BTSW         3     WRITE 
          CON    BTSV         4     VERIFY
          CON    BTSS         5     SHORTRD 
* 
*         BLOCK TRANSFER SIZE BLOCKS (ENTRIES ARE USED IN REVERSE ORDER)
* 
 BTSR     DATA   500B,500B,500B,500B,140B     READ      COMMAND 
 BTSS     DATA   500B,500B,500B,500B,120B     SHORTRD   COMMAND 
 BTSWE    DATA   4,2                          WRITE/ESM COMMAND 
 BTSRE    EQU    BTSWE+1                      READ/ESM  COMMAND 
 BTSW     EQU    BTSR                         WRITE     COMMAND 
 BTSV     EQU    BTSWE                        VERIFY    COMMAND 
* 
 BTSD     EQU    BTSR                     DIAGRD/DIAGWR COMMANDS
* 
*         READ/WRITE ACCESS LEVEL TABLE 
* 
 RDWAL    VFD    12/ARD      ACCESS LEVEL FOR READ ANYWHERE 
          VFD    12/ARW      ACCESS LEVEL FOR READ OR WRITE ANYWHERE
* 
*         ESM ADDRESS USED BY ALL ESM DATA TRANSFERS
* 
 ESMA     BSSZ   2
          EJECT 
RESET     TITLE  RESET - AUTOLOAD CONTROLLER OR MASTER CLEAR LSP
**        RESET  - AUTOLOAD CONTROLLER OR MASTER CLEAR LOW SPEED PORT 
* 
*                  RESET, ABT Z 
*                  RESET LSP, ABT Z 
* 
*           RESET     - AUTOLOAD THE CONTROLLER TO RESTART CONTROLWARE
*                       AT THE IDLE LOOP
* 
*           RESET LSP - MASTER CLEAR LOW SPEED PORT 
* 
*         ENTRY  - (PA) = CODE        0 = RESET 
*                                     1 = RESET LSP 
*         EXIT   - NONE 
* 
*         USES   - COCON
* 
*         CALLS  - TCA, FNC, TCO
* 
 RESET    LDD    PA          LOAD CODE
          NJN    RESET3      JUMP IF RESET LSP REQUEST
  
**     1. INSURE CHANNEL IS ASSIGNED (RJM   TCA)
* 
*      2. ISSUE AUTOLOAD FUNCTION (0414B) 
* 
*      3. ACTIVATE CHANNEL (ACN   CH) 
* 
*      4. DELAY 16D-64D MILLISECONDS TO ALLOW THE CONTROLLER TO COMPLETE
*         ITS INITIALIZATION AND ENTER ITS MONITOR LOOP 
* 
*      5. DEACTIVATE THE CHANNEL (DCN   CH+40B) 
* 
*      6. SET CONTROLLER CONNECTED FLAG (COCON) 
* 
*      7. EXIT TO STACK 
* 
          RJM    TCA         INSURE CHANNEL IS ASSIGNED 
          LDC    AUTO        AUTOLOAD FUNCTION CODE 
          RJM    FNC         ISSUE AUTOLOAD FUNCTION
          ACN    CH+40B      ACTIVATE CHANNEL 
          LDN    40B         DELAY 16D-64D MILLISECONDS DEPENDING ON PP 
 RESET1   SBN    1           SPEED TO ALLOW THE CONTROLLER TO COMPLETE
          NJN    RESET1      ITS INITIALIZATION AND ENTER MONITOR LOOP
          DCN    CH+40B      DEACTIVATE THE CHANNEL 
          STM    COCON       SET CONTROLLER CONNECTED FLAG
 RESET2   LJM    XENT        EXIT TO STACK
  
**     1. VERIFY THAT CONTROLLER IS CONNECTED 
* 
*      2. ISSUE LOW SPEED PORT MASTER CLEAR FUNCTION
* 
*      3. EXIT TO STACK 
* 
 RESET3   RJM    TCO         VERIFY THAT CONTROLLER IS CONNECTED
          LDC    MCLSP       MASTER CLEAR LOW SPEED PORT FUNCTION CODE
          RJM    FNC         ISSUE MASTER CLEAR LOW SPEED PORT FUNCTION 
          UJN    RESET2      EXIT TO STACK
          EJECT 
 SEEK     TITLE  SEEK - SEEK TO THE ADDRESS SPECIFIED.                   DEMA3
**        SEEK   - SEEK TO THE ADDRESS SPECIFIED.                        DEMA3
*                                                                        DEMA3
*                  SEEK CYL W TRK X SEC Y, ABT Z                         DEMA3
*                                                                        DEMA3
*         ENTRY  - (CC) = W                                              DEMA3
*                  (CT) = X                                              DEMA3
*                  (CS) = Y                                              DEMA3
*                                                                        DEMA3
*         EXIT   - SEEK COMPLETED TO NEW ADDRESS                         DEMA3
*                                                                        DEMA3
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  DEMA3
*                  ERRCNC  - IF CONTROLLER/DRIVE NOT CONNECTED           DEMA3
*                  ERRFPNA - IF FUNCTION PARAMETERS NOT ACCEPTED         DEMA3
*                  ERRUHB  - IF THE UNIT IF BUSY FOR OVER 200 MSEC       DEMA3
*                                                                        DEMA3
*         USES   - P, SEEKA(0-4), SBIE, D.T1, D.T2                       DEMA3
*                                                                        DEMA3
*         CALLS  - TDR, STS, FNC, DST                                    DEMA3
*                                                                        DEMA3
                                                                         DEMA3
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            DEMA3
*                                                                        DEMA3
 SEEK     RJM    TDR         INSURE DRIVE CONNECTED                      DEMA3
          RJM    SEEK1       TO DO A SEEK                                DEMA3
          UJN    RESET2      EXIT TO STACK                               DEMA3
                                                                         DEMA3
 SEEK1X   LJM    **          SECONDARY ENTRY/EXIT                        DEMA3
 SEEK1    EQU    *-1                                                     DEMA3
          LDN    0           PROVIDES SEEK TIME BIASED BY MINUS ONE      DEMA3
          STD    SEEKA       PRESET CURRENT SEEK TIME                    DEMA3
          RJM    STS         TO GET STATUS                               DEMA3
          SHN    17D-CRES                                                DEMA3
          PJN    SEEK3                                                   DEMA3
          LJM    ERRCNC      ELSE IT IS AN ERROR                         DEMA3
                                                                         DEMA3
                                                                         DEMA3
**     2. PRESET SEEK FUNCTION DATA                                      DEMA3
*                                                                        DEMA3
 SEEK3    LDD    ESM         FLAG FOR ESM DATA TRANSFER 
          SHN    6           STORE ESM FLAG IN BIT 6
          ADM    UN          DISK UNIT NUMBER 
          STD    SEEKA+1                                                 DEMA3
          LDI    CC          CURRENT CYLINDER                            DEMA3
          STD    SEEKA+2                                                 DEMA3
          LDI    CT          CURRENT TRACK                               DEMA3
          STD    SEEKA+3                                                 DEMA3
          LDI    CS          CURRENT SECTOR                              DEMA3
          STD    SEEKA+4                                                 DEMA3
                                                                         DEMA3
**     3. ISSUE A 2 TO 1 SEEK FUNCTION (0002)                            DEMA3
*                                                                        DEMA3
          IANN   14B         INPUT THE REAL TIME CLOCK                   DEMA3
          STD    D.T1                                                    DEMA3
 SEEK5    LDN    SEK11       SEEK 1 TO 1 INTERLACE                       DEMA3
          RJM    FNC         TO SEND A FUNCTION                          DEMA3
                                                                         DEMA3
**     4. OUTPUT 4 SEEK PARAMETER WORDS AND STORE THE NUMBER OF WORDS    DEMA3
*         ACTUALLY OUTPUT INTO THE WT REGISTER. VERIFY THAT 4 WORDS      DEMA3
*         WERE ACTUALLY TRANSMITTED.                                     DEMA3
*                                                                        DEMA3
          LDN    4           WORD COUNT                                  DEMA3
          ACN    CH+40B      ACTIVATE THE CHANNEL                        DEMA3
          OAM    SEEKA+1,CH  OUTPUT THE SEEK DATA                        DEMA3
          ZJN    SEEK6       IF OUTPUT COMPLETE                          DEMA3
          LJM    ERRFPNA     ELSE ERROR EXIT                             DEMA3
                                                                         DEMA3
 SEEK6    DCN    CH+40B      DEACTIVATE THE CHANNEL                      DEMA3
                                                                         DEMA3
**     5. REQUEST AND INPUT GENERAL STATUS.                              DEMA3
*                                                                        DEMA3
          RJM    STS         TO OBTAIN STATUS                            DEMA3
                                                                         DEMA3
**     6. GO TO STEP 3 IF UNIT IS STILL BUSY AND 200 MSEC HAS NOT        DEMA3
*         ELAPSED (ABORT WHEN TIME ELAPSES).                             DEMA3
*                                                                        DEMA3
          SHN    17D-BUSY    TEST FOR BUSY                               DEMA3
          PJN    SEEK11      IF NOT BUSY JUMP                            DEMA3
          LDC    1000D       WAIT AND TRY AGAIN                          DEMA3
          RAD    D.T1                                                    DEMA3
 SEEK8    IANN   14B         CHECK CLOCK AGAIN                           DEMA3
          STD    D.T2                                                    DEMA3
          LDD    D.T1                                                    DEMA3
          SBD    D.T2                                                    DEMA3
          ZJN    SEEK9       IF TIMING LOOP IS COMPLETE                  DEMA3
          SHN    17D-11D     TO ELIMINATE CLOCK WRAP AROUND              DEMA3
          PJN    SEEK8       IF NOT TIMED OUT                            DEMA3
 SEEK9    AOD    SEEKA       INCREMENT ITERATION COUNT IF TIMED OUT      DEMA3
          LMC    200000D/1000D COUNT LIMIT FOR BUSY                      DEMA3
          NJN    SEEK5       IF BUSY NOT TIMED OUT                       DEMA3
                                                                         DEMA3
          LDC    ER.UHB      AND ERROR EXIT                              DEMA3
 ERRDST   STD    D.T2                                                    DEMA3
          RJM    DST         GET DETAIL STATUS                           DEMA3
          LDD    D.T2                                                    DEMA3
          LJM    ERR                                                     DEMA3
                                                                         DEMA3
**     7. STORE THE NUMBER OF MILLISECONDS REQUIRED TO COMPLETE THE      DEMA3
*         SEEK INTO SB(60).                                              DEMA3
*                                                                        DEMA3
 SEEK11   LDD    SEEKA       MOVE THE SEEK TIME                          DEMA3
          ZJN    SEEK12      IF READY WITHOUT ANY MOVE                   DEMA3
          SBN    1           ADJUST THE SEEK TIME                        DEMA3
 SEEK12   STM    SEEKTIM     THIS IS MILLISEC. COUNT REQUIRED FOR SEEK   DEMA3
          SHN    -1                                                      DEMA3
          RAD    RT          INCREMENT I/O LIMIT                         DEMA3
                                                                         DEMA3
**     8. IF GENERAL STATUS IS ZERO, EXIT.  OTHERWISE, REQUEST AND       DEMA3
*         INPUT DETAIL STATUS AND EXECUTE THE ERROR EXIT SEQUENCE.       DEMA3
*                                                                        DEMA3
          LDM    SB                                                      DEMA3
          ZJN    SEEK14      IF ZERO AFTER NOT BUSY                      DEMA3
 ERRAGS   LDC    ER.AGS      AND ERROR EXIT                              DEMA3
          UJN    ERRDST                                                  DEMA3
 SEEK14   LJM    SEEK1X      TO EXIT                                     DEMA3
          EJECT 
STATUS    TITLE  STATUS - GET GEN., DETAIL, GEN. EXT. OR LSP STATUS 
**        STATUS - GET GENERAL, DETAIL, GENERAL EXTENDED OR LSP STATUS
* 
*                  STATUS GENERAL, ABT Z
*                  STATUS DETAIL, ABT Z 
*                  STATUS GENERAL EXTENDED, ABT Z 
*                  STATUS ESM LSP, ABT Z
* 
*           GENERAL          - INPUT 1 WORD OF GENERAL STATUS TO SB(0). 
*           DETAIL           - INPUT 24B WORDS OF DETAIL STATUS TO
*                              SB(1) - SB(24B). 
*           GENERAL EXTENDED - INPUT 5 WORDS OF GENERAL EXTENDED STATUS 
*                              TO SB(0) - SB(4).
*           ESM LSP          - INPUT 1 WORD OF ESM LOW SPEED PORT STATUS
*                              TO ESMST (SB+19D). 
* 
*         ENTRY  - (PA) = CODE           0 = GENERAL
*                                        1 = DETAIL 
*                                        2 = GENERAL EXTENDED 
*                                        3 = ESM LSP
* 
*         EXIT   - STATUS STORED IN SB
* 
*         USES   - LF 
* 
*         CALLS  - LSP, STS, GES, DST 
  
**     1. STORE 7777B INTO THE STATUS BUFFER FOR WORDS ABOUT TO BE READ 
* 
*      2. ISSUE THE SELECTED STATUS FUNCTION SPECIFIED BY THE KEYWORD 
*         GENERAL (0012B), GENERAL EXTENDED (0066B), DETAIL (0023B),
*         ESM LSP (5004B) 
* 
*      3. INPUT THE REQUIRED NUMBER OF WORDS TO THE STATUS BUFFER (1, 
*         24B, 5 OR 1). 
* 
 STATUS   RJM    TCO         TEST CONTROLLER CONNECTED
          LJM    STATUS1,PA  JUMP TO CODE FOR SPECIFIC STATUS 
 STATUS1  UJN    STATUS3     GENERAL STATUS 
          UJN    STATUS5     DETAIL STATUS
          UJN    STATUS4     GENERAL EXTENDED STATUS
* 
*         OBTAIN LOW SPEED PORT STATUS
* 
          LDC    PS          FUNCTION CODE FOR LOW SPEED PORT STATUS
          STD    LF          SAVE LAST PRIMARY FUNCTION 
          RJM    LSP         GET LOW SPEED PORT STATUS
 STATUS2  LJM    XENT        EXIT TO STACK
* 
*         OBTAIN GENERAL STATUS 
* 
 STATUS3  LDN    GS          FUNCTION CODE FOR GENERAL STATUS 
          STD    LF          SAVE LAST PRIMARY FUNCTION 
          RJM    STS         GET GENERAL STATUS 
          UJN    STATUS2     EXIT TO STACK
* 
*         OBTAIN GENERAL EXTENDED STATUS
* 
 STATUS4  LDN    GE          FUNCTION CODE FOR GENERAL EXTENDED STATUS
          STD    LF          SAVE LAST PRIMARY FUNCTION 
          RJM    GES         GET GENERAL EXTENDED STATUS
          UJN    STATUS2     EXIT TO STACK
* 
*         OBTAIN DETAIL STATUS (NAME USED AT MALET COMPILER LEVEL)
*         (AT CONTROLLER LEVEL THIS IS CALLED EXTENDED DETAIL STATUS) 
* 
 STATUS5  LDN    EDS         FUNCTION CODE FOR EXTENDED DETAIL STATUS 
          STD    LF          SAVE LAST PRIMARY FUNCTION 
          RJM    DST         GET (EXTENDED) DETAIL STATUS 
          UJN    STATUS2     EXIT TO STACK
GES       TITLE  UTILITIES USED BY THE DEMA3 PRODUCT OVERLAY
**        GES    - REQUEST AND INPUT GENERAL EXTENDED STATUS
* 
*         ENTRY  - NONE 
* 
*         EXIT   - STATUS BUFFER CONTAINS THE CURRENT GENERAL 
*                  EXTENDED STATUS, SB(0-4).
* 
*                  (A) = GENERAL STATUS, SB(0)
* 
*                  ERRNIES - IF NO INACTIVE TO GEN EXT STATUS 
*                  ERRGENR - IF GEN EXT STATUS NOT RETURNED 
* 
*         USES   - D.T1, SB(0-4)
* 
*         CALLS  - FNA, FJM, IJM
* 
 GES0     LDM    SB          LOAD GENERAL STATUS FOR EXIT 
          LJM    **          SUBROUTINE ENTRY/EXIT
 GES      EQU    *-1
* 
*         STORE 7777B INTO SB(0-4)
* 
          LDN    4           SPECIFY RESET OF 1ST 5 LOCATIONS OF SB 
          STD    D.T1        LOOP COUNTER FOR RESET 
 GES1     LCN    0           RESET WITH 7777B 
          STM    SB,D.T1     STORE 7777B INTO CURRENT STATUS BUFFER LOC.
          SOD    D.T1        DECREMENT LOOP COUNTER FOR RESET 
          PJN    GES1        LOOP BACK IF NOT LAST LOCATION TO RESET
* 
*         ISSUE GENERAL EXTENDED STATUS FUNCTION
* 
          LDN    GE          FUNCTION CODE FOR GENERAL EXTENDED STATUS
          RJM    FNA         ISSUE FUNCTION 
          NJN    GES2        JUMP IF FUNCTION ACCEPTED
          LDC    ER.NIES     ERROR -  NO INACTIVE TO GEN EXT STATUS 
          UJN    GES4        EXIT AND REPORT ERROR
* 
*         ACTIVATE CHANNEL
* 
 GES2     ACN    CH+40B      ACTIVATE THE CHANNEL 
          RJM    FJM         WAIT FOR FULL
          ZJN    GES3        JUMP IF FULL NOT RECEIVED, ERROR EXIT
* 
*         INPUT 5 WORDS - GENERAL EXTENDED STATUS 
* 
          LDN    5           SPECIFY 5 WORDS FOR INPUT
          IAM    SB,CH       INPUT GENERAL EXTENDED STATUS TO SB(0-4) 
          NJN    GES3        JUMP IF ALL WORDS NOT INPUT, ERROR EXIT
* 
*         WAIT FOR CHANNEL TO GO INACTIVATE 
* 
          RJM    IJM         WAIT FOR CHANNEL INACTIVE
          NJN    GES0        JUMP IF INACTIVE RECEIVED, NORMAL EXIT 
 GES3     LDC    ER.GENR     ERROR - GEN EXT STATUS NOT RETURNED
 GES4     LJM    ERR         EXIT AND REPORT ERROR
          EJECT 
**        LSP    - REQUEST AND INPUT LOW SPEED PORT STATUS
* 
*         ENTRY  - NONE 
* 
*         EXIT   - ESM LOW SPEED PORT STATUS IN SB(23B) 
* 
*                  ERRNILS - NO INACTIVE TO ESM LSP STATUS
*                  ERRELNR - ESM LSP STATUS NOT RETURNED
* 
*         USES   - SB 
* 
*         CALLS  - FNA, FJM 
* 
 LSPX     LJM    **          SUBROUTINE ENTRY/EXIT
 LSP      EQU    *-1
* 
*         ISSUE READ (LOW SPEED PORT) STATUS FUNCTION 
* 
          LCN    0           RESET WITH 7777B 
          STM    ESMST       RESET STATUS BUFFER LOCATION 23B TO 7777B
          LDC    5004B       ISSUE READ (LOW SPEED PORT) STATUS FUNCTION
          RJM    FNA         ISSUE FUNCTION 
          NJN    LSP1        JUMP IF FUNCTION ACCEPTED
          LDC    ER.NILS     ERROR - NO INACTIVE TO ESM LSP STATUS
          UJN    LSP3        EXIT AND REPORT ERROR
* 
*         ACTIVATE THE CHANNEL
* 
 LSP1     ACN    CH+40B      ACTIVATE THE CHANNEL 
          RJM    FJM         WAIT FOR FULL
          ZJN    LSP2        JUMP IF FULL NOT RECEIVED
* 
*         INPUT READ (LOW SPEED PORT) STATUS
* 
          LDN    1           SPECIFY ONE WORD FOR INPUT 
          IAM    ESMST,CH    INPUT 1 WORD - READ STATUS 
          NJN    LSP2        JUMP IF STATUS NOT INPUT, ERROR EXIT 
* 
*         DISCONNECT CHANNEL
* 
          DCN    CH+40B      DISCONNECT CHANNEL 
          UJN    LSPX        NORMAL SUBROUTINE EXIT 
 LSP2     LDC    ER.ELNR     ERROR - ESM LSP STATUS NOT RETURNED
 LSP3     LJM    ERR         EXIT AND REPORT ERROR
          EJECT 
          EJECT 
**        DST    - OBTAIN DETAIL STATUS.                                 DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - STATUS BUFFER CONTAINS THE CURRENT DETAIL STATUS.     DEMA3
*                  TO BE USED FOR ERROR CHECKING.                        DEMA3
*                                                                        DEMA3
*                - (A) = (SB+13D)                                        DEMA3
*                                                                        DEMA3
*                  ERRISR  - IF INCOMPLETE STATUS RETURNED               DEMA3
*                  ERRNIDS - IF NO INACTIVE TO DETAIL STATUS             DEMA3
*                                                                        DEMA3
*         USES   - D.T1, SB(1 -24B)                                      DEMA3
*                                                                        DEMA3
*         CALLS  - STATUS1                                               DEMA3
*                                                                        DEMA3
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 247+ MICROSEC.     DEMA3
*                                                                        DEMA3
 DST0     LDM    SB+13D      DETAIL STATUS WORD 13D                       DEMA3 
          LJM    **          ENTRY/EXIT                                  DEMA3
 DST      EQU    *-1                                                     DEMA3
                                                                         DEMA3
*         STORE 7777B INTO ALL WORDS                                     DEMA3
                                                                         DEMA3
          LDN    24B                                                     DEMA3
          STD    D.T1                                                    DEMA3
 DST1     LCN    0                                                       DEMA3
          STM    SB,D.T1                                                 DEMA3
          SOD    D.T1                                                    DEMA3
          NJN    DST1        DO ALL WORDS                                DEMA3
          LDN    EDS                                                     DEMA3
          RJM    FNA         ISSUE STATUS FUNCTION                       DEMA3
          NJN    DST3        IF FUNCTION ACCEPTED                        DEMA3
          LDC    ER.NIDS     ERROR IF NO INACTIVE TO DETAIL STATUS       DEMA3
          UJN    DST6                                                    DEMA3
                                                                         DEMA3
 DST3     ACN    CH+40B                                                  DEMA3
          RJM    FJM         WAIT FOR FULL                               DEMA3
          ZJN    ERRISR      IF FULL NOT RECEIVED                        DEMA3
          LDN    24B                                                     DEMA3
          IAM    SB+1,CH                                                 DEMA3
          NJN    ERRISR      IF ALL WORDS NOT INPUT                      DEMA3
          RJM    IJM         VERIFY INACTIVE IS RECEIVED                 DEMA3
          NJN    DST0        IF INACTIVE RECEIVED                        DEMA3
 ERRISR   LDC    ER.ISR      ERROR IF INCOMPLETE STATUS RETURNED         DEMA3
 DST6     LJM    ERR                                                     DEMA3
          SPACE  4,17 
**        EJM    - WAIT FOR CHANNEL TO GO EMPTY 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - NONE 
* 
*         USES   - NONE 
* 
*         CALLS  - NONE 
* 
 EJMX     LJM    **          SUBROUTINE ENTRY/EXIT
 EJM      EQU    *-1
 EJM1     EJM    EJMX,CH     JUMP IF CHANNEL EMPTY
          ADN    1           UPDATE LOOP COUNT
          PJN    EJM1        LOOP ON CHANNEL EMPTY TEST 
          LDC    ER.CFE      ERROR- CHANNEL FAILED TO GO EMPTY
          LJM    ERR         ERROR EXIT 
          SPACE  4,22                                                    DEMA3
**        FJM    - WAIT FOR CHANNEL TO GO FULL.                          DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - (A) NONZERO IF NOT TIMED OUT WAITING FULL             DEMA3
*                  (A) ZERO IF TIMED OUT                                 DEMA3
*                                                                        DEMA3
*         USES   - NONE                                                  DEMA3
*                                                                        DEMA3
*         CALLS  - NONE                                                  DEMA3
*                                                                        DEMA3
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC.        DEMA3
*                                                                        DEMA3
 FJMX     LJM    **          ENTRY/EXIT                                  DEMA3
 FJM      EQU    *-1                                                     DEMA3
          LDC    TIMFJM*2                                                DEMA3
 FJM1     FJM    FJMX,CH     IF FULL EXIT                                DEMA3
 FJM2     SBN    4           *** SBN 4 IF 1X SPEED PPU ***               DEMA3
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***               DEMA3
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***               DEMA3
          NJN    FJM1        IF TIME NOT COUNTED DOWN                    DEMA3
          UJN    FJMX        ELSE EXIT WITH A EQ. ZERO                   DEMA3
          SPACE  4,21                                                    DEMA3
**        FNC    - ISSUE A FUNCTION ON A CHANNEL AND WAIT INACTIVE.      DEMA3
*                                                                        DEMA3
*         ENTRY  - (A) = FUNCTION TO ISSUE                               DEMA3
*                                                                        DEMA3
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED.                   DEMA3
*                                                                        DEMA3
*                  ERRNIF  - IF NO INACTIVE TO LAST FUNCTION             DEMA3
*                                                                        DEMA3
*         USES   - LF                                                    DEMA3
*                                                                        DEMA3
*         CALLS  - FNA                                                   DEMA3
*                                                                        DEMA3
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 22 MICROSEC.       DEMA3
*                                                                        DEMA3
 FNCX     LJM    **          ENTRY/EXIT                                  DEMA3
 FNC      EQU    *-1                                                     DEMA3
          STD    LF          TO SAVE LAST MAJOR FUNCTION                 DEMA3
          RJM    FNA         TO FUNCTION AND WAIT INACTIVE               DEMA3
          NJN    FNCX        IF INACTIVE EXIT                            DEMA3
          LDC    ER.NIF      ELSE ERROR EXIT                             DEMA3
          UJN    FNO1                                                    DEMA3
          SPACE  4,17                                                    DEMA3
**        FNA    - ISSUE A FUNCTION AND WAIT INACTIVE.                   DEMA3
*                                                                        DEMA3
*         ENTRY  - (A) = FUNCTION TO ISSUE                               DEMA3
*                                                                        DEMA3
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED                    DEMA3
*                                                                        DEMA3
*         USES   - NONE                                                  DEMA3
*                                                                        DEMA3
*         CALLS  - IJM                                                   DEMA3
*                                                                        DEMA3
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 14 MICROSEC.       DEMA3
*                                                                        DEMA3
 FNAX     LJM    **          ENTRY/EXIT                                  DEMA3
 FNA      EQU    *-1                                                     DEMA3
          FAN    CH+40B      FUNCTION FROM A                             DEMA3
          RJM    IJM         WAIT FOR INACTIVE                           DEMA3
          UJN    FNAX        EXIT                                        DEMA3
          SPACE  4,30                                                    DEMA3
**        FNO    - ISSUE FUNCTION AND OUTPUT ONE WORD OF DATA.           DEMA3
*                                                                        DEMA3
*         ENTRY  - (A)  = FUNCTION DESIRED                               DEMA3
*                  D.T4 = DATA WORD TO OUTPUT                            DEMA3
*                                                                        DEMA3
*         EXIT   - NONE                                                  DEMA3
*                                                                        DEMA3
*                 ERRFPNA - IF FUNCTION PARAMETERS NOT ACCEPTED          DEMA3
*                                                                        DEMA3
*         USES   - NONE                                                  DEMA3
*                                                                        DEMA3
*         CALLS  - FNC, DCN                                              DEMA3
*                                                                        DEMA3
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 40 MICROSEC.       DEMA3
*                                                                        DEMA3
 FNOX     LJM    **          ENTRY/EXIT                                  DEMA3
 FNO      EQU    *-1                                                     DEMA3
          RJM    FNC         TO SEND FUNCTION                            DEMA3
          ACN    CH+40B                                                  DEMA3
          LDD    D.T4                                                    DEMA3
          OAN    40B+CH                                                  DEMA3
                                                                         DEMA3
 FNO2     EJM    FNO3,CH                                                 DEMA3
          ADN    1                                                       DEMA3
          PJN    FNO2        LOOP ON CHANNEL EMPTY TEST                  DEMA3
 ERRFPNA  LDC    ER.FPNA                                                 DEMA3
 FNO1     LJM    ERR                                                     DEMA3
                                                                         DEMA3
 FNO3     DCN    CH+40B                                                  DEMA3
          UJN    FNOX        EXIT                                        DEMA3
          SPACE  4,22                                                    DEMA3
**        IJM    - WAIT INACTIVE AND TIME OUT.                           DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED                    DEMA3
*                        ZERO IF FUNCTION NOT ACCEPTED                   DEMA3
*                                                                        DEMA3
*         USES   - NONE                                                  DEMA3
*                                                                        DEMA3
*         CALLS  - NONE                                                  DEMA3
*                                                                        DEMA3
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC.        DEMA3
*                                                                        DEMA3
 IJMX     LJM    **          ENTRY/EXIT                                  DEMA3
 IJM      EQU    *-1                                                     DEMA3
          LCN    3                                                       DEMA3
 IJM1     IJM    IJMX,CH     IF INACTIVE EXIT                            DEMA3
 IJM2     SBN    4           *** SBN 4 IF 1X SPEED PPU ***               DEMA3
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***               DEMA3
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***               DEMA3
          NJN    IJM1        IF NOT COUNTED DOWN                         DEMA3
          UJN    IJMX        ELSE EXIT W/(A) = ZERO                      DEMA3
          SPACE  4,46 
**        OPC    - RELEASE THE CONTROLLER WITH AN OPERATION COMPLETE.    DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - (A) = ZERO IF CONTROLLER NOT CONNECTED                DEMA3
*                      = NONZERO IF OPERATION COMPLETE ACCEPTED          DEMA3
*                                                                        DEMA3
*         USES   - COCON, DRCON, D.T5 
*                                                                        DEMA3
*         CALLS  - FNC                                                   DEMA3
*                                                                        DEMA3
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 44 MICROSEC.       DEMA3
*                                                                        DEMA3
 OPCX     LJM    **          ENTRY/EXIT                                  DEMA3
 OPC      EQU    *-1                                                     DEMA3
          LDM    BD.CHFG                                                 DEMA3
          ZJN    OPCX        EXIT IF CHANNEL NOT RESERVED                DEMA3
          LDM    COCON                                                   DEMA3
          NJN    OPCX        EXIT IF CONTROLLER NOT RESERVED             DEMA3
          LDN    77B                                                     DEMA3
          STM    COCON       CLEAR THE CONTROLLER CONNECT FLAG           DEMA3
          STM    DRCON       CLEAR THE DRIVE CONNECT FLAG                DEMA3
          LDC    **                                                      DEMA3
 OPC1     EQU    *-1         DETAIL STATUS WORD 13 STORED HERE           DEMA3
          SBN    2                                                       DEMA3
          MJN    OPC3        IF CONTROLLER NOT RESERVED                  DEMA3
          NJN    OPCX        IF CONTROLLER AND UNIT RESERVED             DEMA3
          LDN    DREL                                                    DEMA3
          UJN    OPC4                                                    DEMA3
                                                                         DEMA3
 OPC2     UJN    OPCX        RETURN                                      DEMA3
                                                                         DEMA3
 OPC3     LDN    OC                                                      DEMA3
 OPC4     STD    D.T5        ONLY FOR SPECIAL CALL FROM BASIC DRIVER     DEMA3
          LDM    ERR3        UPPER BITS OF ABT ADDRESS                   DEMA3
          SBN    77B                                                     DEMA3
          NJN    OPC5        IF NORMAL USER CALL                         DEMA3
          LDD    D.T5                                                    DEMA3
          RJM    FNA         ONLY FOR SPECIAL CALL FROM BASIC DRIVER     DEMA3
          NJN    OPC2        IF NOT FUNCTION TIMEOUT                     DEMA3
          DCN    CH+40B      ELSE DO A DISCONNECT                        DEMA3
          UJN    OPC2        AND EXIT                                    DEMA3
                                                                         DEMA3
 OPC5     LDD    D.T5                                                    DEMA3
          RJM    FNC         TO FUNCTION OPERATION COMPLETE              DEMA3
          UJN    OPC2        EXIT                                        DEMA3
          SPACE  4,40                                                    DEMA3
**        STS    - REQUEST AND INPUT GENERAL STATUS.                     DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - (A) = STATUS                                          DEMA3
*                                                                        DEMA3
*                  ERRGSNR - IF GENERAL STATUS NOT RETURNED              DEMA3
*                  ERRNIGS - IF NO INACTIVE TO GENERAL STATUS            DEMA3
*                                                                        DEMA3
*         USES   - SB, COCON
*                                                                        DEMA3
*         CALLS  - STATUS1                                               DEMA3
*                                                                        DEMA3
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 60 MICROSEC.       DEMA3
*                                                                        DEMA3
 STSXX    LDM    SB          LOAD STATUS AND EXIT                        DEMA3
          LJM    **          ENTRY/EXIT                                  DEMA3
 STS      EQU    *-1                                                     DEMA3
          LCN    0                                                       DEMA3
          STM    SB          NEGATIVE ZERO TO SB                         DEMA3
          LDN    GS                                                      DEMA3
          RJM    FNA         ISSUE GENERAL STATUS FUNCTION               DEMA3
          NJN    STS1        IF FUNCTION ACCEPTED                        DEMA3
          LDC    ER.NIGS     ERROR IF NO INACTIVE TO GS FUNCTION         DEMA3
          UJN    STS3                                                    DEMA3
                                                                         DEMA3
 STS1     LDN    0                                                       DEMA3
          STM    COCON       SET CONTROLLER CONNECTED                    DEMA3
          ACN    CH+40B                                                  DEMA3
          RJM    FJM         WAIT FOR FULL                               DEMA3
          ZJN    STS2        IF NO FULL RECEIVED                         DEMA3
          LDN    1                                                       DEMA3
          IAM    SB,CH       INPUT GENERAL STATUS                        DEMA3
          NJN    STS2        IF NO STATUS PROVIDED                       DEMA3
          RJM    IJM         WAIT FOR INACTIVE                           DEMA3
          NJN    STSXX       IF INACTIVE RECEIVED                        DEMA3
                                                                         DEMA3
 STS2     LDC    ER.GSNR     ERROR IF NO FULL OR NO INACTIVE             DEMA3
 STS3     UJN    TCA1                                                    DEMA3
          SPACE  4,17                                                    DEMA3
**        TCA    - TEST CHANNEL ASSIGNMENT.                              DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4                   DEMA3
*                                                                        DEMA3
*                  ERRCNA  - IF CHANNEL NOT RESERVED                     DEMA3
*                                                                        DEMA3
*         CALLS  - NONE                                                  DEMA3
*                                                                        DEMA3
*         USES   - NONE                                                  DEMA3
*                                                                        DEMA3
 TCAX     LJM    **          ENTRY/EXIT                                  DEMA3
 TCA      EQU    *-1                                                     DEMA3
          LDM    BD.CHFG                                                 DEMA3
          NJN    TCAX        EXIT IF CHANNEL ASSIGNED                    DEMA3
          LDC    ER.CNA      ERROR IF CHANNEL NOT RESERVED               DEMA3
 TCA1     UJN    ERR                                                     DEMA3
          SPACE  4,18                                                    DEMA3
**        TCO    - TEST CONTROLLER CONNECTED.                            DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4                   DEMA3
*                  WC SET TO WRRD                                        DEMA3
*                                                                        DEMA3
*         USES   - WC                                                    DEMA3
*                                                                        DEMA3
*         CALLS  - TCA                                                   DEMA3
*                                                                        DEMA3
 TCOX     LJM    **          ENTRY/EXIT                                  DEMA3
 TCO      EQU    *-1                                                     DEMA3
          RJM    TCA         TO SAVE ABORT ADDRESS, CHECK ACTIVE         DEMA3
          LDC    77B                                                     DEMA3
 COCON    EQU    *-1         *** CONTROLLER CONNECTED FLAG STORED HERE   DEMA3
          ZJN    TCOX        IF CONNECTED                                DEMA3
          UJN    ERRCNC      ELSE ERROR EXIT                             DEMA3
          SPACE  4,17                                                    DEMA3
**        TDR    - TEST DRIVE RESERVED.                                  DEMA3
*                                                                        DEMA3
*         ENTRY  - NONE                                                  DEMA3
*                                                                        DEMA3
*         EXIT   - NONE                                                  DEMA3
*                                                                        DEMA3
*         USES   - NONE                                                  DEMA3
*                                                                        DEMA3
*         CALLS  - TCO                                                   DEMA3
*                                                                        DEMA3
 TDRX     LJM    **          ENTRY/EXIT                                  DEMA3
 TDR      EQU    *-1                                                     DEMA3
          RJM    TCO         SAVE ABT ADDRESS,CHECK CTLR. CONNECTED      DEMA3
          LDC    77B                                                     DEMA3
 DRCON    EQU    *-1         *** DRIVE CONNECTED FLAG STORED HERE.       DEMA3
          ZJN    TDRX        IF CONNECTED EXIT                           DEMA3
 ERRCNC   LDC    ER.CNC      ELSE ERROR EXIT                             DEMA3
          EJECT                                                          DEMA3
**        ERR    - ERROR EXIT PROCESSING                                 DEMA3
*                                                                        DEMA3
*         ENTRY  - (A) = MESSAGE ADDRESS INDEX                           DEMA3
*                                                                        DEMA3
*         EXIT   - (A) = ABORT ADDRESS FOR AN ABORT                      DEMA3
*                  (A) = LINE NUMBER FOR MODULE TERMINATE                DEMA3
*                                                                        DEMA3
*         USES   - D.Z1, D.Z2, EC, EM, EA                                DEMA3
*                                                                        DEMA3
*         CALLS  - NONE                                                  DEMA3
*                                                                        DEMA3
 ERR      STD    D.Z1        SAVE MESSAGE INDEX AND ERROR NUMBER         DEMA3
          SHN    -12                                                     DEMA3
          STD    D.Z2        SAVE ABORT FLAG                             DEMA3
          LDM    BD.CHFG                                                 DEMA3
          ZJN    ERR2        IF CHANNEL IS NOT ASSIGNED                  DEMA3
          LDD    BD.AL                                                   DEMA3
          SBN    AL21                                                    DEMA3
          ZJN    ERR2        IF ACCESS LEVEL INDICATES NO CHAN CLEANUP   DEMA3
          IJM    ERR2,0      CLEAN UP CHANNEL                            DEMA3
          DCN    40B                                                     DEMA3
 ERR2     LDD    D.Z1                                                    DEMA3
          LPN    77B         MASK ERROR CODE                             DEMA3
          ADC    5700B       ADD IN BIAS FOR DEMA3 PRODUCT OVERLAY       DEMA3
          STD    EC          STORE ERROR CODE                            DEMA3
          LDD    D.Z1                                                    DEMA3
          SHN    -6                                                      DEMA3
          ADC    100B        FLAG MESSAGE INDEX AS OVERLAY MESSAGE       DEMA3
          STD    EM          STORE MESSAGE INDEX                         DEMA3
          LDD    P                                                       DEMA3
          STD    EA          STORE LINE NUMBER WHERE ERROR OCCURRED      DEMA3
          LDD    D.Z2                                                    DEMA3
          NJN    ERR5        IF ABORT FLAG SET                           DEMA3
          LDC    **                                                      DEMA3
 ERR3     EQU    *-1         FOR ABORT ADDRESS                           DEMA3
          SHN    12                                                      DEMA3
          LMC    **                                                      DEMA3
 ERR4     EQU    *-1         FOR ABORT ADDRESS                           DEMA3
          LJM    BD.RNI      RNI AT THE REJECT ADDRESS                   DEMA3
                                                                         DEMA3
 ERR5     LJM    BD.ABT      TERMINATE MODULE                            DEMA3
                                                                         DEMA3
 IB       EQU    6500B       INPUT BUFFER                                DEMA3
 LIB      EQU    505B        LENGTH OF INPUT AND OUTPUT BUFFERS          DEMA3
 OB       EQU    IB+LIB      OUTPUT BUFFER                               DEMA3
 SB       EQU    OB+LIB      STATUS BUFFER                               DEMA3
 ESMST    EQU    SB+23B      ESM LOW SPEED PORT STATUS
 SBIE     EQU    SB+25B      STATUS THAT DETECTED THE ERROR              DEMA3
 RETRY    EQU    SB+52B      RETRY COUNT                                 DEMA3
 SERNUM1  EQU    SB+56B      FIRST HALF OF PACK SERIAL NUMBER            DEMA3
 SERNUM2  EQU    SB+57B      SECND HALF OF PACK SERIAL NUMBER            DEMA3
 SEEKTIM  EQU    SB+60B      LAST SEEK TIME                              DEMA3
 RESA     EQU    SB+64B                                                  DEMA3
 LSB      EQU    64B         LENGTH OF STATUS BUFFER                     DEMA3
                                                                         DEMA3
          ERRPL  *-IB-1      ERROR IF DEMA3 OVERLAY OVERFLOW             DEMA3
          EJECT                                                          DEMA3
 INIT     TITLE  INIT - INITIALIZATION.                                  DEMA3
**        THE INITIALIZATION CODE THAT FOLLOWS IS OVERLAYED BY THE       DEMA3
*         PRODUCT OVERLAY BUFFERS ABOVE.                                 DEMA3
*                                                                        DEMA3
*         TEST EQUIPMENT AND UNIT NUMBER                                 DEMA3
*                                                                        DEMA3
 INIT     LDN    LSB-1       SPECIFY 64B WORDS (STATUS BUFFER SIZE) 
          STD    D.Z1        INITIALIZE COUNTER 
 INIT0    LDN    0           (INCLUDES SETTING EQUIP. NO. = 0, SB+62B)
          STM    SB,D.Z1     CLEAR STATUS BUFFER
          SOD    D.Z1        DECREMENT LOOP COUNTER 
          PJN    INIT0       LOOP BACK IF NOT LAST ITERATION
  
          LDM    BD.SN                                                   DEMA3
          STM    SERNUM1     SAVE USER SUPPLIED SERIAL NUMBER IN SB      DEMA3
          LDM    BD.SN+1                                                 DEMA3
          STM    SERNUM2                                                 DEMA3
          LDM    BD.EQ                                                   DEMA3
          LPN    77B                                                     DEMA3
          STM    SB+63B      UNIT TO STATUS BUFFER                       DEMA3
          ADC    1000B       SET LARGE SECTOR BIT                        DEMA3
          STM    UN          SET UNIT NUMBER                             DEMA3
                                                                         DEMA3
*         SET DELAY TIME BASED ON SPEED OF PPU                           DEMA3
                                                                         DEMA3
          LDC    TSPEED                                                  DEMA3
          STD    D.T0                                                    DEMA3
 INIT2    LDI    D.T0                                                    DEMA3
          ZJN    INIT3       IF END OF TABLE                             DEMA3
          STD    D.T1                                                    DEMA3
          LDI    D.T1                                                    DEMA3
          SCN    77B                                                     DEMA3
          ADM    BD.SPEED                                                DEMA3
          STI    D.T1        SET ADN/SBN VALUE                           DEMA3
          AOD    D.T0                                                    DEMA3
          UJN    INIT2       COMPLETE ALL WORDS                          DEMA3
                                                                         DEMA3
*         STORE I/O CHANNEL INTO COMMANDS                                DEMA3
                                                                         DEMA3
 INIT3    LDM    BD.CHAN                                                 DEMA3
          STD    D.T2                                                    DEMA3
          STM    SB+61B      I/O CHANNEL TO STATUS BUFFER                DEMA3
          LDC    TCHAN                                                   DEMA3
          STD    D.T0        SET FWA OF TABLE CONTAINING ADDRESSES       DEMA3
 INIT4    LDI    D.T0                                                    DEMA3
          ZJN    INIT5       IF END OF TABLE                             DEMA3
          STD    D.T1                                                    DEMA3
          LDI    D.T1                                                    DEMA3
          LPC    7740B                                                   DEMA3
          ADD    D.T2                                                    DEMA3
          STI    D.T1                                                    DEMA3
          AOD    D.T0                                                    DEMA3
          UJN    INIT4       COMPLETE ALL WORDS                          DEMA3
                                                                         DEMA3
*         WRITE PP MESSAGES TO CM                                        DEMA3
                                                                         DEMA3
 INIT5    LDM    BD.MSGA     GET PP MESSAGE AREA ADDRESS                 DEMA3
          STD    D.T6        SAVE IT                                     DEMA3
          ADC    MMSGL.      ADD LENGTH                                  DEMA3
          RJM    BD.TFL      SEE IF IN FL                                DEMA3
          LDN    P.ZERO      CLEAR CELLS, D.Z1=PP MESSAGE ADDRESS        DEMA3
          CRD    D.Z1        D.Z2=D.T0-D.T4 POINTER, D.Z3=CM WD COUNTER  DEMA3
 INIT6    LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD                         DEMA3
          ZJN    INIT8       IF END OF MESSAGE                           DEMA3
 INIT7    STM    D.T0,D.Z2   STORE IN D.T0+                              DEMA3
          AOD    D.Z1        BUMP PP MESSAGE POINTER                     DEMA3
          UJN    INIT9                                                   DEMA3
 INIT8    LDC    2R          MESSAGE END, STORE BLANKS                   DEMA3
          STM    D.T0,D.Z2                                               DEMA3
 INIT9    AOD    D.Z2        BUMP D.T0+ POINTER                          DEMA3
          SBN    5                                                       DEMA3
          NJN    INIT6       IF NOT 5 PP WORDS                           DEMA3
          STD    D.Z2        CLEAR POINTER                               DEMA3
          LDD    D.RA        PUT RA IN A REG                             DEMA3
          SHN    6                                                       DEMA3
          ADD    D.T6        ADD MESSAGE ADDRESS                         DEMA3
          CWD    D.T0        WRITE ONE WORD FROM D.T0                    DEMA3
          AOD    D.T6        UPDATED ADDRESS                             DEMA3
          AOD    D.Z3        BUMP CM WORD COUNTER                        DEMA3
          SBN    BD.MSGML                                                DEMA3
          NJN    INIT6       IF NOT BD.MSGML CM WORDS                    DEMA3
          STD    D.Z3        CLEAR CM WORD COUNTER                       DEMA3
          LDM    PPMSGS,D.Z1                                             DEMA3
          ZJN    INIT10      IF MESSAGE ENDED IN ZERO BYTE               DEMA3
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR                   DEMA3
 INIT10   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE     DEMA3
          LDM    PPMSGS,D.Z1                                             DEMA3
          NJN    INIT7       IF NOT LAST MESSAGE                         DEMA3
                                                                         DEMA3
*         SET DIRECT CELLS                                               DEMA3
                                                                         DEMA3
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER            DEMA3
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER            DEMA3
          STD    ESM         CLEAR FLAG FOR ESM DATA TRANSFER 
          LDC    100D        100 MSEC DELAY IN BD.RCH                    DEMA3
          STM    DLYDCH      MODIFY DELAY USED ON RES AND REL CHANNEL    DEMA3
  
*         RETRIEVE ESM ADDRESS PROVIDED BY MALET FROM CM
  
          LDD    D.RA        OBTAIN RELATIVE ADDRESS FOR MALET
          SHN    6           RA IS GIVEN AS A MULTIPLE OF 100B
          ADM    P.MB        ADDRESS OF MESSAGE BUFFER FROM MALET TO MLD
          ADN    4           RAE IS IN 5TH CM WORD OF MESSAGE BUFFER
          CRD    ESMT        READ CM WORD CONTAINING RAE TO PP DIRECT BLOCK 
          LDD    ESMT+1      LOAD ESM ADDRESS (RAE) - LEFT 12 BITS
          STM    ESMA        STORE IN ESM ADDRESS BLOCK FOR DEMA3 
          LDD    ESMT+2      LOAD ESM ADDRESS (RAE) - RIGHT 12 BITS 
          STM    ESMA+1      STORE IN ESM ADDRESS BLOCK FOR DEMA3 
          RAD    ESMT+1      TEST IF RAE = 0 (NO ESM ADDRESS GIVEN) 
          NJN    INIT11      JUMP IF ESM ADDRESS PROVIDED 
          LDC    INIT14      POINTER TO ERROR MESSAGE - NO RAE
          UJN    INIT12      ERROR EXIT 
                                                                         DEMA3
*         VERIFY THAT THE ASSIGNED DEVICE CODE IS SUPPORTED              DEMA3
                                                                         DEMA3
 INIT11   LDD    DC          DEVICE CODE CURRENTLY ASSIGNED 
          SBN    DEMA        DEVICE CODE FOR DEMA 
          ZJN    INIT12      JUMP IF LEGAL DEVICE CODE
          LDC    INIT13      POINTER TO ERROR MESSAGE - DC NOT SUPPORTED
 INIT12   LJM    START       EXIT WITH (A) = NO ERROR/ERROR FLAG
  
 INIT13   DIS    ,*DC NOT SUPPORTED*
  
 INIT14   DIS    ,*NO RAE*
                                                                         DEMA3
*         TABLE OF PPU SPEED SWITCHES                                    DEMA3
                                                                         DEMA3
 TSPEED   VFD    12/FJM2                                                 DEMA3
          VFD    12/IJM2                                                 DEMA3
          DATA   0           END OF SPEED SWITCHES TABLE                 DEMA3
          EJECT                                                          DEMA3
 PPMSGS   TITLE  ERROR MESSAGES                                          DEMA3
 PPMSGS   EQU    *           START OF PP MESSAGES                        DEMA3
****                                                                     DEMA3
          MMSG   ER.FLE,EC.FLE,(ADDR OUT OF FL),1                        DEMA3
          MMSG   ER.TL,EC.TL,(I/O TIME OUT ON CH RESERVE),1              DEMA3
          MMSG   ER.SEE,EC.SEE,(SUBR ENTRY/EXIT ERR),1                   DEMA3
          MMSG   ER.WC,EC.WC,(BUFFER INDEX OR WC ERR),1                  DEMA3
          MMSG   ER.RES,EC.RES,(R)                                       DEMA3
          MMSG   ER.RES1,EC.RES1,(R)                                     DEMA3
          MMSG   ER.RES2,EC.RES2,(R)                                     DEMA3
          MMSG   ER.CNA,EC.CNA,(CH NOT ASSIGNED)                         DEMA3
          MMSG   ER.CAS,EC.CAS,(CH ACTIVE ON ENTRY)                      DEMA3
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE TO LAST FUNC) 
          MMSG   ER.NIGS,EC.NIGS,(NO INACTIVE TO GEN STATUS)                  21
          MMSG   ER.NIDS,EC.NIDS,(NO INACTIVE TO DETAIL STATUS) 
          MMSG   ER.GSNR,EC.GSNR,(GEN STATUS NOT RETURNED)                    21
          MMSG   ER.ISR,EC.ISR,(INCOMPLETE STATUS RETURNED) 
          MMSG   ER.FPNA,EC.FPNA,(FUNC PARAMS NOT ACCEPTED)                   21
          MMSG   ER.DNA,EC.DNA,(ALL DATA NOT ACCEPTED FROM PP)
          MMSG   ER.IDR,EC.IDR,(INCOMPLETE DATA RETURNED TO PP) 
          MMSG   ER.CNC,EC.CNC,(CONTROLLER/DRIVE NOT CONNECTED) 
          MMSG   ER.IAL,EC.IAL,(AL TOO LOW FOR REQ)                     2175
          MMSG   ER.NRES,EC.NRES,(RESERVE TIMEOUT)
          MMSG   ER.AGS,EC.AGS,(ABNORMAL GEN STATUS)                          21
          MMSG   ER.CFE,EC.CFE,(CH FAILED TO GO EMPTY)
          MMSG   ER.UHB,EC.UHB,(UNIT HUNG BUSY ON SEEK) 
          MMSG   ER.STRY,EC.STRY,(SUCCESSFUL RETRY) 
          MMSG   ER.DCE,EC.DCE,(DATA COMPARE ERROR) 
          MMSG   ER.DCSM,EC.DCSM,(DEVICE CODE/STATUS MISMATCH)           DEMA3
          MMSG   ER.NIDT,EC.NIDT,(NO INACTIVE AFTER DATA XFER)           DEMA3
          MMSG   ER.NIES,EC.NIES,(NO INACTIVE TO GEN EXT STATUS)
          MMSG   ER.GENR,EC.GENR,(GEN EXT STATUS NOT RETURNED)
          MMSG   ER.NILS,EC.NILS,(NO INACTIVE TO ESM LSP STATUS)
          MMSG   ER.ELNR,EC.ELNR,(ESM LSP STATUS NOT RETURNED)
          MMSG   ER.AELS,EC.AELS,(ABNORMAL ESM LSP STATUS)                  DEMA
 MMSGL.   EQU    MMSGL                                                   DEMA3
          DATA   0                                                       DEMA3
****                                                                     DEMA3
 TCHAN    EQU    *           CREATE CHANNEL TABLE                        DEMA3
          LIST   D                                                       DEMA3
          HERE                                                           DEMA3
          LIST   *                                                       DEMA3
          DATA   0           END OF CHANNEL TABLE                        DEMA3
                                                                         DEMA3
          IFEQ   NOS,1                                                   DEMA3
 .1       SET    POVLA                                                   DEMA3
 .2       SET    10000B                                                  DEMA3
 .3       SET    *-.1+5+4+500B                                           DEMA3
 .4       SET    .2-.1+5-1                                               DEMA3
          ERRNG  .2-.1+5-.3/500B*500B-1  BYTES LEFT AFTER LAST SECTOR    DEMA3
          ERRNG  .3/500B*500B-5-*+.1-5   BYTES LEFT IN LAST SECTOR       DEMA3
          ERRNG  .4/500B*500B-5-*+.1-5   BYTES CAN BE ADDED TO OVERLAY   DEMA3
          ENDIF                                                          DEMA3
                                                                         DEMA3
          IFEQ   NOSBE,1,1                                               DEMA3
          ERRPL  *-7773B     IF OVERFLOW IN DEMA3 PRODUCT OVERLAY        DEMA3
          QUAL   *                                                       DEMA3
