*COMDECK,DEMA1
          TITLE  HIGH LEVEL DEMA1 HALF TRACK PRODUCT OVERLAY FOR MALET.  DEMA1HT
 5D1      SEGMENT POVLA                                                  FMDHT
          ORG    POVLA                                                   FMDHT
          QUAL   DEMA1                                                   FMDHT
*CALL,VERS
          COMMENT DEMA1 PRODUCT OVERLAY FOR MALET "VERS"
          EJECT                                                          FMDHT
                                                                         FMDHT
**        THE FOLLOWING COMMANDS ARE DESIGNED FOR  THE DEMA1 DISK  SUB-  FMDHT
*         SYSTEMS ON AN 885-42 RUNNING IN A HALF-TRACK MODE.  5D1 IS THE   FMDHT
*         PRODUCT OVERLAY THAT EXECUTES THESE COMMANDS AND IS DRIVEN BY 
*         THE INSTRUCTION STACK OF THE MALET PP DRIVER. REQUESTS ARE
*         MADE BY THE DRIVER BY STORING PARAMETERS INTO PP  DIRECT CELLS   FMDHT
*         AND PERFORMING  A  RETURN-JUMP TO AN OVERLAY SUBROUTINE. ONCE  FMDHT
*         THE REQUEST HAS BEEN COMPLETED, CONTROL IS RETURNED TO THE    FMDHT 
*         STACK TO EXECUTE THE NEXT COMMAND.  THE DEVICE TYPE FOR THESE 
*         COMMANDS IS DEMA1.
*                                                                        FMDHT
*         THE DEMA1 HALF-TRACK PRODUCT OVERLAY SUPPORTS A PROGRAMMABLE
*         INPUT BUFFER (IB) OF 505B PP WORDS, AN  OUTPUT BUFFER (OB) OF  FMDHT
*         505B PP WORDS AND A STATUS BUFFER (SB) OF 64B PP WORDS.  DATA  FMDHT
*         IS  WRITTEN  TO  THE  DISK FROM THE OUTPUT BUFFER AND IS READ  FMDHT
*         FROM THE DISK TO THE INPUT BUFFER.  THE STATUS BUFFER IS USED  FMDHT
*         TO HOLD GENERAL AND DETAIL  STATUS  FROM  THE  SUBSYSTEM  AND  FMDHT
*         OTHER  WORDS  DEFINED  LATER.  SUPPORTED  CAPABILITIES ARE AS  FMDHT
*         FOLLOWS_                                                       FMDHT
*                                                                        FMDHT
*           CONTROL- SEND CONTROL WORD TO CONTROLLER AL .GE. 10 NEEDED.  FMDHT
*           FLAG   - SEND FLAG PULSE FUNCTION TO CONTROLLER 
*           FMDPT  - SEND POSITIONER TEST FUNCTION TO SUBSYSTEM 
*           GET    - READ SERIAL, FACTORY OR UTILITY MAP SECTOR TO IB.   FMDHT
*           MARGINS- SET STROBES AND OFFSET FOR READ AND READCW.         FMDHT
*           OUT    - OUTPUT CONTROL FUNCTION AL .GE. 10 NEEDED.          FMDHT
*           READ   - SEEK AND READ 0 TO 500B SECTORS FROM DISK TO IB.    FMDHT
*           READCW - SEEK AND READ CHECKWORD ON 0 TO 500B SECTORS.       FMDHT
*           REL    - RELEASE DRIVE, CONTROLLER AND I/O CHANNEL.          FMDHT
*           RES    - RESERVE I/O CHANNEL, CONTROLLER AND DRIVE.          FMDHT
*           RESET  - AUTOLOAD CONTROLLER TO MONITOR LOOP.                FMDHT
*           RTNADDR- READ LAST CYLINDER ADDRESS TO IB.                   FMDHT
*           SEEK   - MOVE DRIVE POSITIONER.                              FMDHT
*           STATUS - INPUT GENERAL, DETAIL OR CHANNEL STATUS TO SB.      FMDHT
*           VERIFY - SEEK AND WRITE VERIFY 0 TO 500B SECTORS ON DISK.    FMDHT
*           WRITE  - SEEK AND WRITE 0 TO 500B SECTORS ON DISK.           FMDHT
*                                                                        FMDHT
*         THIS PRODUCT OVERLAY DOES NOT USE THE WC OR BA  REGISTERS  TO  FMDHT
*         CONTROL  I/O OPERATIONS.  THESE REGISTERS ARE FREE FOR USE BY  FMDHT
*         THE MODULE PROGRAMMER.  ALL NORMAL READS AND WRITES  TRANSFER  FMDHT
*         2540B WORDS ACCOMPLISHED BY REPITITIVE INPUTS OR OUTPUTS
*         FROM THE BUFFER (A BLOCK OF 140B WORDS FOLLOWED BY FOUR 
*         BLOCKS OF 500B WORDS).  IN THIS WAY A LARGE SECTOR OF 2540B 
*         WORDS IS CONSTRUCTED FROM THE 500B WORD BUFFER. 
*         EXECUTION OF A READ WILL LEAVE THE LAST 500B WORD BLOCK 
*         IN THE INPUT BUFFER.
*                                                                        FMDHT
          EJECT                                                          FMDHT
**        THE FOLLOWING CHART DEFINES THE LAY-OUT OF THE STATUS BUFFER.  FMDHT
*                                                                        FMDHT
*                   --------------------   ---                           FMDHT
*               0   /   GENERAL STATUS /      /                          FMDHT
*          ----     /------------------/      /                          FMDHT
*         /     1   /                  /      /                          FMDHT
*         /     .   /                  /      /                          FMDHT
*         /CHANNEL  /   DETAIL STATUS  /      / THIS IS THE NORMAL/LAST  FMDHT
*         /STATUS   /                  /      / TAKEN STATUS FROM THE    FMDHT
*         /WORDS.   /                  /      / SUBSYSTEM                FMDHT
*         /     .   /                  /      /                          FMDHT
*         /     .   /                  /      /                          FMDHT
*         /     .   /                  /      /                          FMDHT
*         /    24B  /                  /   ---                           FMDHT
*         /         /------------------/   ---                           FMDHT
*         /    25B  /   GENERAL STATUS /      /                          FMDHT
*         /         /------------------/      /                          FMDHT
*         /    26B  /                  /      /                          FMDHT
*         /     .   /                  /      / THIS IS THE FIRST TAKEN  FMDHT
*         /     .   /   DETAIL STATUS  /      / STATUS WITHIN SEQUENCES  FMDHT
*         /     .   /                  /      / THAT REQUIRED RECOVERY   FMDHT
*          ----40B  /                  /      / TO BE PERFORMED.         FMDHT
*               .   /                  /      / (CONTINUE FUNCTIONS      FMDHT
*               .   /                  /      / ISSUED)                  FMDHT
*               .   /                  /      /                          FMDHT
*              51B  /                  /   ---                           FMDHT
*                   /------------------/   ---                           FMDHT
*              52B  /  RETRY COUNT     /      / ERROR CORRECTION DATA    FMDHT
*                   /------------------/   ---                           FMDHT
*              56B  / 1ST BYTE         /      / DISK PACK SERIAL NUMBER  FMDHT
*              57B  / 2ND BYTE         /      / (FROM ASSIGN DIRECTIVE)  FMDHT
*                   /------------------/   ---                           FMDHT
*              60B  / SEEK TIME        /      / MILLISECONDS TO DO LAST  FMDHT
*                   /------------------/      / SEEK                     FMDHT
*              61B  / CHANNEL          /   ---                           FMDHT
*              62B  / EQUIPMENT        /      /                          FMDHT
*              63B  / UNIT             /      / EQUIPMENT UNDER TEST     FMDHT
*                   --------------------   ---                           FMDHT
*                                                                        FMDHT
*                                                                        FMDHT
*         ALL SUBROUTINES IN THIS PRODUCT OVERLAY USE  A  COMMON  ERROR  FMDHT
*         EXIT  SEQUENCE  WHEN  AN  ERROR  IS  DETECTED.  THIS SEQUENCE  FMDHT
*         STORES AN INTERNAL ERROR CODE INTO THE EC REGISTER, AN  ERROR  FMDHT
*         MESSAGE INDEX INTO THE EM REGISTER AND THE CURRENT P REGISTER  FMDHT
*         CONTENTS (LINE NUMBER) INTO THE  EA  REGISTER.   I/O  CHANNEL  FMDHT
*         CLEAN-UP  OCCURS  AND  A JUMP IS MADE TO THE STATEMENT NUMBER  FMDHT
*         SPECIFIED BY THE ABT ADDRESS IN THE COMMAND.                   FMDHT
*                                                                        FMDHT
          EJECT                                                          FMDHT
**        THE FOLLOWING TABLE DEFINES THE ERROR CODES AND MESSAGES THAT  FMDHT
*         MAY BE GENERATED FOR EACH COMMAND.                             FMDHT
*                                                    OUT                 FMDHT
*                                 CONTROL-----------. / .--- RES         FMDHT
*                               FMDPT-------------/ . / . /-- RESET      FMDHT
*                              FLAG-------------. / . / . / .- RTNADDR   FMDHT
*                             GET-------------/ . / . / . / . / SEEK     FMDHT
*                            MARGINS--------. / . / . / . / . / .STATUS  FMDHT
*                           READ----------/ . / . / . / . / . / . VERIFY FMDHT
*                          READCW-------. / . / . / . / . / . / . / WRIT FMDHT
*   CODE     MESSAGE      REL---------/ . / . / . / . / . / . / . / .    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 4001 ADDR OUT OF FL                 X . . . . . . X . X . X . . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - 
* 4004 BUFFER INDEX OR WC ERROR       . . . . . . . X . . . X . . . .    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5510 CH NOT ASSIGNED                . X X . X X X X X . X X X X X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5511 CH ACTIVE ON ENTRY             . . . . . . . . . X . . . . . .    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5512 NO INACTIVE TO LAST FUNC.      X X X . X X X X X X X X X X X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5513 NO INACTIVE TO GENERAL STATUS  . X X . X . . . . X . X X X X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5514 NO INACTIVE TO DETAIL STATUS   . X X . X . . . . X . . X X X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5515 GENERAL STATUS NOT RETURNED    . X X . X . . . . X . X X X X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5516 INCOMPLETE STATUS RETURNED     . X X . X . X X . X . . X X X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5517 FUNC PARAMETERS NOT ACCEPTED   . X X . X X . X . X . . X . X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5520 ALL DATA NOT ACCEPTED FROM PP  . . . . . X . X X . . . . . X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5521 INCOMPLETE DATA RETURNED TO PP . . X . X . . . . . . . . . . .    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5522 CONTROLLER/UNIT NOT CONNECTED  . X X . X X X X X . . X X X X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5523 ACCESS LEVEL TOO LOW FOR REQ   . X X . X . . X X . . . . . X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5524 RESERVE TIMEOUT                . . . . . . . . . X . . . . . .    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5525 ABNORMAL GENERAL STATUS        . X X . X . . . . X . X X . X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5526 ILLEGAL STROBES/OFFSET         . . . X . . . . . . . . . . . .    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5527 UNIT HUNG BUSY ON SEEK         . X X . X . . . . . . . X . X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5530 SUCCESSFUL RETRY               . X X . X . . . . . . . . . X X    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5531 DATA COMPARE ERROR             . . X . . . . . . . . . . . . .    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5532 DEVICE CODE/STATUS MISMATCH    . . . . . . . . . X . . . . . .    FMDHT
*      ------------------------------ - - - - - - - - - - - - - - - -    FMDHT
* 5533 NO INACTIVE AFTER DATA XFER    . X X . X . . . . . . X . . . .    FMDHT
*      ---------------------------------------------------------------   FMDHT
          EJECT                                                          FMDHT
  
*         THE PROCESS DESCRIBED IN THE FOLLOWING STEPS IS USED WITHIN 
*         DEMA1 PRODUCT OVERLAY TO UPDATE TRACK AND SECTOR REGISTERS
*         WHILE PROCESSING I/O DATA TRANSFER COMMANDS READ, READCW, 
*         VERIFY AND WRITE IN 2: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
*             CURRENT TRACK/SECTOR TO END OF CYLINDER.  SET THE 
*             SECTORS REMAINING COUNT TO THIS VALUE OR TO THE NUMBER
*             REQUESTED WHICHEVER IS SMALLER. 
* 
*          4. PROCESS ONE SECTOR. 
* 
*          5. SUBTRACT ONE FROM SECTORS REMAINING COUNT.
* 
*          6. IF SECTORS REMAINING COUNT = 0, EXIT TO STACK.
* 
*          7. INCREMENT SECTOR COUNT BY 2.
* 
*          8. IF SECTOR COUNT IS LESS THAN 40B GO TO 4, ELSE GO TO 9. 
* 
*          9. SUBTRACT 40B FROM SECTOR COUNT. 
* 
*         10. INCREMENT TRACK COUNT.
* 
*         11. IF TRACK COUNT IS LESS THAN 12B GO TO 4; ELSE TO TO 12. 
* 
*         12. SUBTRACT 12B FROM TRACK COUNT.
* 
*         13. SET SECTOR COUNT TO 1.
* 
*         14. GO TO 4.
          EJECT                                                          FMDHT
**        ALL SUBROUTINES IN THIS PRODUCT OVERLAY USE  A  COMMON  ERROR  FMDHT
*         EXIT  SEQUENCE  WHEN  AN  ERROR  IS  DETECTED.  THIS SEQUENCE  FMDHT
*         STORES AN INTERNAL ERROR CODE INTO THE EC REGISTER, AN  ERROR  FMDHT
*         MESSAGE INDEX INTO THE EM REGISTER AND THE CURRENT P REGISTER  FMDHT
*         CONTENTS (LINE NUMBER) INTO THE  EA  REGISTER.   I/O  CHANNEL  FMDHT
*         CLEAN-UP  OCCURS  AND  A JUMP IS MADE TO THE STATEMENT NUMBER  FMDHT
*         SPECIFIED BY THE ABT ADDRESS IN THE COMMAND.                   FMDHT
*                                                                        FMDHT
                                                                         FMDHT
*         EQUATES FOR ERROR CODES - FIRST 7 ARE FOR BASIC DRIVER.        FMDHT
                                                                         FMDHT
 EC.FLE   EQU    1           ADDRESS OUT OF FIELD LENGTH                 FMDHT
 EC.TL    EQU    2           TIME LIMIT ERROR FOR COMMUNICATIONS         FMDHT
 EC.SEE   EQU    3           SUBROUTINE ENTRY/EXIT ERROR                 FMDHT
 EC.WC    EQU    4           BUFFER REFERENCE OR WC ERROR                FMDHT
 EC.RES   EQU    5           RESERVED FOR BASIC DRIVER                   FMDHT
 EC.RES1  EQU    6           RESERVED FOR BASIC DRIVER                   FMDHT
 EC.RES2  EQU    7           RESERVED FOR BASIC DRIVER                   FMDHT
                                                                         FMDHT
 EC.CNA   EQU    10B         CHANNEL NOT ASSIGNED                        FMDHT
 EC.CAS   EQU    11B         CHANNEL ACTIVE FROM SYSTEM                  FMDHT
 EC.NIF   EQU    12B         NO INACTIVE TO LAST FUNCTION                FMDHT
 EC.NIGS  EQU    13B         NO INACTIVE TO GENERAL STATUS               FMDHT
 EC.NIDS  EQU    14B         NO INACTIVE TO DETAIL  STATUS               FMDHT
 EC.GSNR  EQU    15B         GENERAL STATUS NOT RETURNED                 FMDHT
 EC.ISR   EQU    16B         INCOMPLETE STATUS RETURNED                  FMDHT
 EC.FPNA  EQU    17B         FUNCTION PARAMETERS NOT ACCEPTED            FMDHT
 EC.DNA   EQU    20B         ALL DATA NOT ACCEPTED FROM PP               FMDHT
 EC.IDR   EQU    21B         INCOMPLETE DATA RETURNED TO PP              FMDHT
 EC.CNC   EQU    22B         CONTROLLER/DRIVE NOT CONNECTED              FMDHT
 EC.IAL   EQU    23B         ACCESS LEVEL TOO LOW FOR REQUEST            FMDHT
 EC.NRES  EQU    24B         NO RESERVE IN 5 MINUTES                     FMDHT
 EC.AGS   EQU    25B         ABNORMAL GENERAL STATUS                     FMDHT
 EC.ISO   EQU    26B         ILLEGAL STROBES/OFFSET                      FMDHT
 EC.UHB   EQU    27B         UNIT HUNG BUSY ON SEEK                      FMDHT
 EC.STRY  EQU    30B         SUCCESSFUL RETRY                            FMDHT
 EC.DCE   EQU    31B         DATA COMPARE ERROR                          FMDHT
 EC.DCSM  EQU    32B         DEVICE CODE/STATUS MISMATCH                 FMDHT
 EC.NIDT  EQU    33B         NO INACTIVE AFTER DATA TRANSFER             FMDHT
                                                                         FMDHT
*         DIRECT CELL EQUATES.                                           FMDHT
                                                                         FMDHT
 RDWRF    EQU    60B         READ/WRITE FLAG                             FMDHT
 COD      EQU    61B         WRITE - READ CODED FLAG                     FMDHT
 FUN      EQU    62B         FUNCTION FOR READ OR WRITE                  FMDHT
 CL       EQU    63B         ADDRESS OF CURRENT IO LENGTH  - V           FMDHT
 WC       EQU    64B         WORD COUNT FOR I/O                          FMDHT
 CC       EQU    65B         ADDRESS OF CURRNET CYLINDER   - W           FMDHT
 CT       EQU    66B         ADDRESS OF CURRENT TRACK      - X           FMDHT
 CS       EQU    67B         ADDRESS OF CURRENT SECTOR     - Y           FMDHT
                                                                         FMDHT
 SEEKA    EQU    D.Z3        SEEK ADDRESS USES D.Z3 THRU D.Z7            FMDHT
 PA       EQU    D.T0        PARAMETER ADDRESS                           FMDHT
                                                                         FMDHT
          EJECT                                                          FMDHT
*         EQUATES FOR EQUIPMENT FUNCTIONS.                               FMDHT
                                                                         FMDHT
 CONN     EQU    0           CONNECT                                     FMDHT
 SEK21    EQU    2           SEEK 2 TO 1 INTERLACE                          FMDH
 RDCW     EQU    7           READ CHECKWORD                              FMDHT
 OC       EQU    10B         OPERATION COMPLETE                          FMDHT
 GS       EQU    12B         GENERAL STATUS                              FMDHT
 CONT     EQU    14B         CONTINUE                                    FMDHT
 DREL     EQU    20B         DRIVE RELEASE                               FMDHT
 RCA      EQU    21B         RETURN CYLINDER ADDRESS                     FMDHT
 EDS      EQU    23B         EXTENDED DETAIL STATUS                      FMDHT
 RFD      EQU    30B         READ FACTORY DATA                           FMDHT
 DW       EQU    33B         DIAGNOSTIC WRITE                            FMDHT
 SSO      EQU    41B         SELECT STROBES AND OFFSET                   FMDHT
 IPCS     EQU    52B         INPUT PROCESSOR CHANNEL STATUS              FMDHT
 FP       EQU    54B         FLAG PULSE FUNCTION                         DIMA152
 PT       EQU    64B         POSITIONER TEST FUNCTION                    DIMA152
 AUTO     EQU    414B        AUTOLOAD FUNCTION                           FMDHT
                                                                         FMDHT
*         GENERAL STATUS BIT EQUATES.                                    FMDHT
                                                                         FMDHT
 NDE      EQU    0           NONRECOVERABLE DATA ERROR                   FMDHT
 BUSY     EQU    1           UNIT BUSY                                   FMDHT
 DRES     EQU    3           DRIVE RESERVED                              FMDHT
 RIP      EQU    8D          RECOVERY IN PROGRESS                        FMDHT
 UNR      EQU    9D          NONRECOVERABLE ERROR                        FMDHT
 CRES     EQU    10D         CONTROLLER RESERVED                         FMDHT
                                                                         FMDHT
*         DEVICE CODES SUPPORTED.                                        FMDHT
                                                                         FMDHT
 DEMA     EQU    14B         DEMA 4HP 885-42
 PFMD     EQU    15B         PFMD 4HP 885-42
          SPACE  4,20                                                    FMDHT
*         MISCELANOUS EQUATES.                                           FMDHT
                                                                         FMDHT
 TIMFJM   EQU    50000D/2    MAXIMUM TIME TO WAIT FOR FULL- 50 MSEC      FMDHT
 TIMREL   EQU    400000D/100D INTERVAL FOR CHANNEL RELEASE-              FMDHT
 MAXITT   EQU    12D         ITERATION COUNT FOR ABOUT A 5 SEC.DELAY     FMDHT
                                                                         FMDHT
 MAXCDD   EQU    1512B       MAXIMUM CYLINDER ON A 885                   FMDHT
 MAPCYL   EQU    1511B       CYLINDER CONTAINING MAP INFORMATION         FMDHT
 PRECYL   EQU    2           NUMBER OF PREALLOCATED CYLINDERS            FMDHT
                                                                         FMDHT
*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               FMDHT
 AL21     EQU    21B         ACCESS LEVEL FOR NO CHANNEL CLEANUP ON ERR  FMDHT
 CH       EQU    37B         DEFAULT CHANNEL VALUE FOR I/O COMMANDS      FMDHT
 SEL      EQU    37B         MAXIMUM SECTOR COUNT                        FMDHT
 GCM      EQU    76B         GET (COMMAND) CODE MASK                     DEMAHT 
 TRL      EQU    11B         MAXIMUM TRACK COUNT                         DEMAHT 
 SEI      EQU    2           SECTOR INCREMENT                            FMDHT
 WRRD     EQU    2540B       STANDARD WORD COUNT                         DEMAHT 
          EJECT                                                          FMDHT
**        ERROR MESSAGES - WRITTEN TO CM DURING INITIALIZATION.          FMDHT
*                                                                        FMDHT
*         MMSG MACRO.                                                    FMDHT
*                                                                        FMDHT
*         MMSG  MACRO  NAME,ECODE,MSG,FABT                               FMDHT
*                                                                        FMDHT
*         NAME = 6/FABT,6/MESSAGE ORDINAL,6/ECODE.                       FMDHT
*                                                                        FMDHT
*         ECODE = ERROR CODE TO BE ASSIGNED (6 BITS).                    FMDHT
*                                                                        FMDHT
*         MSG = ERROR MESSAGE (40 CHARACTERS).                           FMDHT
*                                                                        FMDHT
*         FABT = FORCE ABORT (UPPER 6 BITS OF NAME.                      FMDHT
*                                                                        FMDHT
          PURGMAC MMSG                                                   FMDHT
 MMSG     MACRO  NAME,ECODE,MSG,FABT                                     FMDHT
          IF     -DEF,MMSGORD,1                                          FMDHT
 MMSGORD  SET    0                        INITIALIZE ORDINAL             FMDHT
          IFC    EQ,$FABT$$,2             TEST FOR NO FORCE ABORT        FMDHT
 NAME     EQU    MMSGORD*100B+ECODE                                      FMDHT
          ELSE   1                                                       FMDHT
 NAME     EQU    FABT*10000B+MMSGORD*100B+ECODE                          FMDHT
 MMSGBGN  SET    *                        SAVE CURRENT ADDRESS           FMDHT
          IFC    EQ,$MSG$$,2              TEST NULL MESSAGE              FMDHT
          DATA   1H                       INSURE DATA ITEM               FMDHT
          ELSE   1                                                       FMDHT
          DATA   H$MSG$                   STORE MESSAGE                  FMDHT
          DATA   0                        SET END OF MESSAGE             FMDHT
          IFGT   *-MMSGBGN,BD.MSGML*5+1,1 TEST MESSAGE TOO LONG          FMDHT
 P        ERR    MESSAGE TOO LONG                                        FMDHT
 MMSGORD  SET    MMSGORD+1                BUMP ORDINAL                   FMDHT
          IFGT   MMSGORD,BD.MSGMN,1       TEST TOO MANY MESSAGES         FMDHT
 P        ERR    TOO MANY MESSAGES                                       FMDHT
 MMSGL    SET    MMSGORD*BD.MSGML         SET CM WORD COUNT              FMDHT
          ENDM                                                           FMDHT
          EJECT                                                          FMDHT
 START    LJM    **          ENTRY POINT FOR OVERLAY INITIALIZATION      FMDHT
          LJM    INIT                                                    FMDHT
                                                                         FMDHT
          VFD    12/IB       FWA OF INPUT BUFFER                         FMDHT
          VFD    12/OB       FWA OF OUTPUT BUFFER                        FMDHT
          VFD    12/SB       FWA OF STATUS BUFFER                        FMDHT
          VFD    12/LIB      LENGTH OF INPUT BUFFER                      FMDHT
          VFD    12/LIB      LENGTH OF OUTPUT BUFFER                     FMDHT
          VFD    12/LSB      LENGTH OF STATUS BUFFER                     FMDHT
          VFD    12/BD.VERS  VERSION NUMBER OF THIS OVERLAY 
                                                                         FMDHT
**        RFM    - RELEASE FROM MLD (FIXED LOCATION ENTRY POINT)
*                  RELEASE CALLED FROM MAINTENANCE LANGUAGE DRIVER
*                  RELEASE CONTROLLER AND DRIVE IF CONNECTED
* 
*                  REL, ABT Z 
* 
*         ENTRY  - (A) = ABORT ADDRESS (777777B)
* 
*         EXIT   - RELEASE COMMAND HAS BEEN EXECUTED
* 
*         USES   - ERR3, ERR4 
* 
*         CALLS  - OPC, BD.DCH
* 
 XRFM     LJM    **          EXIT TO MLD
 RFM      EQU    *-1
          STM    ERR4        SAVE ABORT ADDRESS (777777B) 
          SHN    -12D 
          STM    ERR3 
          RJM    OPC         RELEASE THE EQUIPMENT IF CONNECTED 
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC 
          UJN    XRFM        EXIT TO MLD
  
**        ENT    - DISTRIBUTE CONTROL TO REQUESTED COMMAND
* 
*         ENTRY  - ((ENT))    BITS 11 - 06 = INDEX TO TBLENT ENTRY
*                                            BIASED BY 20B
*                  ((ENT))    BITS 05 - 00 = LINE NO. UPPER 6 BITS
* 
*                  ((ENT)+1)  BIT  11      = LINE NO. LOWER BIT 
*                  ((ENT)+1)  BITS 10 - 00 = ABORT ADDRESS IN STACK 
* 
*         EXIT   - COMMAND HAS BEEN EXECUTED
* 
*         USES   - D.Z1, D.Z2, D.Z3, ERR3, ERR4 
* 
*         CALLS  - NONE (LJM TO REQUESTED COMMAND)
* 
 XENT     LJM    **          EXIT TO CALLER OF COMMAND CODE (IN STACK)
 ENT      EQU    *-1
          LDM    ENT         ADDRESS OF COMMAND PARAMETERS IN STACK 
          STD    D.Z2        SAVE FOR INDIRECT LOAD OF PARAMETERS 
          LDI    D.Z2        LOAD COMMAND PARAMETER WORD 1 FROM STACK 
          SHN    12D         OBTAIN INDEX+20B TO CURRENT TBLENT ENTRY 
          STD    D.Z3        SAVE FOR LOAD OF ADDRESS OF COMMAND CODE 
          SHN    -12D        OBTAIN UPPER 6 BITS OF LINE NUMBER 
          STM    ERR3        SAVE IN ERROR PROCESSING AREA
          AOD    D.Z2        INCREMENT TO COMMAND STACK PARAMETER WORD 2
          LDI    D.Z2        LOAD COMMAND PARAMETER WORD 2 FROM STACK 
          STM    ERR4        RIGHT BIT OF LINE NO./ 11 BIT ABORT ADDRESS
          AOD    D.Z2        INCREMENT TO NEXT COMMAND IN STACK 
          STM    ENT         STORE ADDRESS IN EXIT TO STACK LONG JUMP 
          LDM    TBLENT-20B,D.Z3     LOAD FWA OF CODE TO EXECUTE COMMAND
          STD    D.Z1 
          LJM    0,D.Z1      GO EXECUTE COMMAND 
                                                                         HTENT
**        TABLE OF ENTRY POINTS FOR EXECUTING HIGH LEVEL COMMANDS        HTENT
*                                                                        HTENT
 TBLENT   VFD    12/REL      RELEASE CONTROLLER AND DRIVE                HTENT
          VFD    12/RES      RESERVE CONTROLLER OR CONTROLLER AND DRIVE  HTENT
          VFD    12/CNTRL    SEND CONTROL FUNCTION TO CONTROLLER         HTENT
          VFD    12/GET      READ SERIAL, FACTORY OR UTILITY SECTOR      HTENT
          VFD    12/MARGINS  SAVE STROBES AND OFFSET MARGINS             HTENT
          VFD    12/OUT      SEND CONTROL FUNCTION TO CONTROLLER         HTENT
          VFD    12/RDWR     SEEK AND I/O THE REQUESTED NO. OF SECTORS   HTENT
          VFD    12/RESET    AUTOLOAD THE CONTROLLER                     HTENT
          VFD    12/RTNADDR  RETURN CYLINDER ADDRESS FUNCTION            HTENT
          VFD    12/SEEK     SEEK TO THE ADDRESS SPECIFIED               HTENT
          VFD    12/FMDPT    FMD POSITIONER TEST
          VFD    12/STATUS   GET GENERAL, DETAIL OR CHANNEL STATUS       HTENT
          VFD    12/FLAG     FMD FLAG PULSE                              HTENT
          EJECT                                                          FMDHT
 REL      TITLE  REL - RELEASE CONTROLLER AND DRIVE IF CONNECTED.        FMDHT
**        REL    - RELEASE CONTROLLER AND DRIVE IF CONNECTED.            FMDHT
*                                                                        FMDHT
*                  REL, ABT Z                                            FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  HTENT
*                                                                        FMDHT
*         EXIT   - DEVICE CONNECT HAS BEEN RELEASED IF ASSIGNED AND THE  FMDHT
*                  CHANNEL IS RELEASED TO THE SYSTEM.                    FMDHT
*                                                                        FMDHT
*         USES   - P                                                     FMDHT
*                                                                        FMDHT
*         CALLS  - ERA,OPC,BD.DCH                                        FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. DISCONNECT DRIVE AND CONTROLLER WITH AN OPERATION COMPLETE     FMDHT
*         FUNCTION IF EITHER IS CONNECTED.                               FMDHT
*                                                                        FMDHT
*      2. DROP THE I/O CHANNEL TO THE OPERATING SYSTEM IF ASSIGNED.      FMDHT
                                                                         FMDHT
 REL      RJM    OPC         RELEASE THE EQUIPMENT IF CONNECTED          HTENT
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC        FMDHT
          LJM    XENT        EXIT TO STACK                               HTENT
          EJECT                                                          FMDHT
 RES      TITLE  RES - RESERVE CONTROLLER OR CONTROLLER AND DRIVE.       FMDHT
**        RES    - RESERVE CONTROLLER OR CONTROLLER AND DRIVE.           FMDHT
*                                                                        FMDHT
*                  RES CONTROLLER, ABT Z                                 FMDHT
*                  RES DRIVE, ABT Z                                      FMDHT
*                                                                        FMDHT
*         ENTRY  - (PA) = CONTROLLER/DRIVE FLAG                          HTENT
*                                                                        FMDHT
*         EXIT   - I/O CHANNEL ASSIGNED AND CHANNEL ASSIGNED FLAGS ARE   FMDHT
*                  SET IN ALL THE OTHER SUBROUTINES.                     FMDHT
*                                                                        FMDHT
*                  ER.NRES - IF NO RESERVE WITHIN 5 MINUTES              FMDHT
*                  ER.CAS  - IF CHANNEL ACTIVE FROM SYSTEM               FMDHT
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  FMDHT
*                  ER.DCSM - IF DEVICE CODE/STATUS MISMATCH              FMDHT
*                                                                        FMDHT
*         USES   - EC, EA, EM, RESA, RES6, OPC1, D.T3, D.T4, DRCON
*                                                                        FMDHT
*         CALLS  - ERA, RES1, OPC, STS, DST, FNA, BD.RCH.                FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. DISCONNECT DRIVE AND CONTROLLER WITH AN OPERATION COMPLETE     FMDHT
*         FUNCTION IF EITHER IS CONNECTED.                               FMDHT
                                                                         FMDHT
**     2. CLEAR ERROR EXIT REGISTERS.                                    FMDHT
                                                                         FMDHT
 RES      LDN    0                                                       HTENT
          STD    EC          CLEAR ERROR REGISTERS                       FMDHT
          STD    EA                                                      FMDHT
          STD    EM                                                      FMDHT
                                                                         FMDHT
**     3. DROP/REQUEST I/O CHANNEL FROM THE SYSTEM.                      FMDHT
                                                                         FMDHT
          LDN    MAXITT      ITERATION COUNT FOR STATUS                  FMDHT
          STM    RESA        AND PAUSE LOOP                              FMDHT
          LDD    PA                                                      FMDHT
          STM    RES6        SAVE CONTROLLER/DRIVE CONNECT FLAG          FMDHT
 RES1     RJM    OPC         TO RELEASE THE CONTROLLER IF SELECTED       FMDHT
          LDN    0                                                       DIMA599
          STM    OPC1        SET CONTROLLER AND UNIT NOT RESERVED        DIMA599
 RES1A    SOM    RESA        DECREMENT THE ITERATION COUNT               FMDHT
          PJN    RES2        IF NOT TIMED OUT                            FMDHT
          LDC    ER.NRES     ERROR - RESERVE TIMEOUT
          LJM    ERR         ERROR EXIT 
                                                                         FMDHT
 RES2     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED           FMDHT
          RJM    IJM         WAIT CHANNEL ACTIVE                         DIMA571
          LDC    ER.CAS      ERROR - CH ACTIVE ON ENTRY 
          AJM    ERR,CH      ERROR IF CHANNEL ACTIVE FROM SYSTEM         FMDHT
                                                                         FMDHT
**     4. REQUEST AND INPUT GENERAL STATUS.                              FMDHT
                                                                         FMDHT
          LDC    TIMREL      DELAY CONSTANT FOR TIMEOUT                  FMDHT
          STD    D.T3        TO COUNT STATUS ITERATIONS                  FMDHT
          LDN    GS          GENERAL STATUS FUNCTION CODE 
          STD    LF          SPECIFY LAST (MAJOR) FUNCTION
 RES3     RJM    STS         GET GENERAL STATUS 
                                                                         FMDHT
**     5. IF BIT 2**10 IS SET, REPEAT STEP 4 UNTIL 500 MSEC HAS          FMDHT
*         ELAPSED.  IF A RESERVE IS NOT SUCCESSFUL WITHIN THIS           FMDHT
*         TIME-FRAME, EXECUTE THE *REL* SEQUENCE TO COMMUNICATE          FMDHT
*         WITH THE SYSTEM.  REPEAT THIS STEP UNTIL A RESERVE IS          FMDHT
*         SUCCESSFUL OR 5 MINUTES HAVE ELAPSED. ABORT IF NO              FMDHT
*         RESERVE IN 5 MINUTES.                                          FMDHT
                                                                         FMDHT
          SHN    17D-CRES                                                FMDHT
          PJN    RES5        IF COUPLER IS CONNECTED                     FMDHT
          SOD    D.T3        DECREMENT LOOP COUNT                        FMDHT
          PJN    RES3        IF NOT TIMED OUT                            FMDHT
          UJN    RES1A       ELSE START NEXT ITERATION                   FMDHT
                                                                         FMDHT
**     6. SET THE CONTROLLER CONNECTED FLAG.                             FMDHT
                                                                         FMDHT
 RES5     RJM    DST         GET DETAILED STATUS                         DIMA599
          SHN    -9          POSITION CONTROLLER/UNIT RESERVE BITS       DIMA599
          LPN    2           MASK OFF CONTROLLER RESERVE BIT             DIMA599
          ADN    1           SET UNIT RESERVE BIT                        DIMA599
          STM    OPC1        SAVE DETAIL STATUS WD 13 FOR OPC            FMDHT
                                                                         FMDHT
**     7. STEP 11 IF THE KEYWORD *CONTROLLER* IS SPECIFIED.              FMDHT
                                                                         FMDHT
 RES5B    LDC    **          **   TYPE OF FUNCTION                       DIMA252
 RES6     EQU    *-1         *** CONNECT DRIVER/CONTROLLER FLAG          FMDHT
          NJN    RES8        IF DRIVE CONNECT IS ALSO DESIRED            FMDHT
          LJM    RES12       TEST FOR FMD TYPE CONTROLLER 
                                                                         FMDHT
**     8. ISSUE A CONNECT FUNCTION AND OUTPUT THE UNIT NUMBER.           FMDHT
                                                                         FMDHT
 RES8     LDC    **          UNIT NUMBER STORED HERE
 UN       EQU    *-1                                                     FMDHT
          STD    D.T4        SAVE FOR SUBROUTINE FNO
          LPN    77B         STRIP OFF BIT 10 (LARGE SECTOR REQUEST)
          SBN    40B                                                     FMDHT
          MJN    RES9B       JUMP IF UNIT NO. LESS THAN 40B 
          SBN    20B
          PJN    RES9B       JUMP IF UNIT NO. GREATER THAN 57B
                                                                         DIMA470
 RES8A    LDN    CONN        LOAD CONNECT FUNCTION                       DIMA470
          RJM    FNO         PERFORM FUNCTION AND OUTPUT CONTROL WORD 
                                                                         FMDHT
**     9. REQUEST AND INPUT GENERAL AND DETAIL STATUS. VERIFY THAT       FMDHT
*         GENERAL STATUS IS 0000 OR 0002 AND  THAT  DETAIL  STATUS       FMDHT
*         INDICATES THAT THE UNIT ASSIGNED MATCHES THE DEVICE CODE       FMDHT
*         ASSIGNED. (FMD OR NOT).                                        FMDHT
                                                                         FMDHT
          RJM    STS         TO GET STATUS                               FMDHT
          ZJN    RES11       IF STATUS OK                                DIMA320
          SHN    17-DRES     DRIVE BUSY BIT                              DIMA601
          MJN    RES9C       IF DRIVE HUNG BUSY                          DIMA470
          SHN    2                                                       DIMA601
          PJN    RES10       IF NOT CONTROLLER BUSY                      DIMA320
 RES9A    SOD    D.T3        DECREMENT COUNT                             DIMA320
          PJN    RES5B       IF NOT DONE WITH THIS ITERATION             DIMA252
          LJM    RES1        ELSE START ANOTHER ITERATION                DIMA470
  
 RES9B    LDC    ER.DCSM     ERROR - DEVICE CODE/STATUS MISMATCH
          LJM    ERR         ERROR EXIT 
                                                                         DIMA470
 RES9C    LDM    RESA                                                    DIMA470
          NJN    RES9A       IF NOT LAST PASS                            DIMA470
                                                                         FMDHT
 RES10    LJM    ERRAGS      ERROR - ABNORMAL GENERAL STATUS
                                                                         FMDHT
 RES11    STM    DRCON                                                   DIMA320
          RJM    DST         GET DETAIL STATUS                           DIMA320
          SHN    17-9        POSITION UNIT RESERVE BIT
          MJN    RES12       IF UNIT RESERVED                            DIMA599
          SOM    OPC1        CLEAR UNIT RESERVED BIT                     DIMA599
 RES12    LDM    SB+4        DS WD WITH CTRLWARE NO. AND UNIT NO.        DIMA599
          SHN    17-10                                                   FMDHT
          PJN    RES9B       JUMP IF NOT FMD CONTROLLER 
                                                                         FMDHT
                                                                         FMDHT
**    11. BUMP P AND EXIT                                                FMDHT
                                                                         FMDHT
 RES15    LJM    XENT        EXIT TO STACK                               HTENT
          EJECT                                                          FMDHT
 CNTRL    TITLE  CNTRL - SEND CONTROL FUNTION TO CONTROLLER.             FMDHT
**        CNTRL- SEND CONTROL FUNTION TO CONTROLLER.                     FMDHT
*                                                                        FMDHT
*                  CONTROL A B C D ,ABT Z                                FMDHT
*                  CONTROL A B C D EXECUTE,ABT Z                         FMDHT
*                  CONTROL A B C D TIME V TO X AND Y,ABT Z               FMDHT
*                  CONTROL A B C D TIME V X AND Y,ABT Z                  FMDHT
*                  CONTROL A B C D TIME V X Y,ABT Z                      FMDHT
*                                                                        FMDHT
*         ENTRY  - (PA) = CODE   DESCRIPTION                             HTENT
*                  ------------------------------------------            FMDHT
*                          0     CONTROL.                                FMDHT
*                          1     CONTROL EXECUTE.                        FMDHT
*                          2     CONTROL EXECUTE WITH TIMING.            FMDHT
*                                                                        FMDHT
*                  (PA+1  ) = VALUE V                                    FMDHT
*                  (PA+55B) = REG X ADDRESSS                             FMDHT
*                  (PA+56B) = REG Y ADDRESSS                             FMDHT
*                  (PA+50B) = VALUE A                                    FMDHT
*                  (PA+51B) = VALUE B                                    FMDHT
*                  (PA+52B) = VALUE C                                    FMDHT
*                  (PA+53B) = VALUE D                                    FMDHT
*                                                                        FMDHT
*         EXIT   - (FMDADDR) = ADDRESS OF NEXT STORE-1                   FMDHT
*                                                                        FMDHT
*                  ERRDNA - ERROR EXIT IF DATA NOT ACCEPTED              FMDHT
*                  ERRIDR - ERROR EXIT IF DATA NOT RECEIVED              FMDHT
*                                                                        FMDHT
*         USES   - P, FUN, PA, PA+1, D.T0, D.T1, D.T2, D.T4, PA+50B,     FMDHT
*                  PA+51B, PA+52B, PA+53B, PA+55B, PA+56B,               FMDHT
*                  OB, WT, AL.                                           FMDHT
*                                                                        FMDHT
*         CALLS  - TCO, FNC, IJM, BD.TEST, FNO.                          FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. VERIFY THAT THE CONTROLLER IS CONNECTED.                       FMDHT
*                                                                        FMDHT
 CNTRL    RJM    TCO         TEST CONTROLLER CONNECTED                   FMDHT
          STD    WT          (WT)   = 0                                  FMDHT
          STD    D.T2        (D.T2) = 0                                  FMDHT
          LDD    D.T1                                                    FMDHT
          STD    D.T4                                                    DIMA353
          LDD    PA                                                      DIMA320
          STD    D.Z1        SAVE CONTROL CODE                           DIMA152
                                                                         FMDHT
**     2. TEST ADDRESS TO SEE IF IN RANGE OF OB, AND INITIALIZE VALUES   FMDHT
*         FOR DATA STORING.                                              FMDHT
*                                                                        FMDHT
          LDM    FMDADDR                                                 FMDHT
          STD    D.T0        (D.T0) = FIRST WORD TO STORE ADDRESS        FMDHT
          ADC    -OB-1+4                                                 FMDHT
          SHN    -2          DIVIDE BY FOUR TO GET NO. OF CONTROL WORDS  FMDHT
          STM    OB          (OB) = WORD COUNT OF CONTROL WORDS          FMDHT
          LDN    4                                                       FMDHT
          STD    D.T1        (D.T1) = WORD COUNT                         FMDHT
          RJM    BD.TEST                                                 FMDHT
                                                                         FMDHT
**     3. MOVE THE 4 WORDS TO OB.                                        FMDHT
*                                                                        FMDHT
 CNT1     LDM    PA+50B,D.T2 GET DATA                                    FMDHT
          STM    OB+1,PA+2                                               FMDHT
 FMDADDR  EQU    *-1         STORE ADDRESS IN OB                         FMDHT
          AOD    D.T2        ADVANCE LOAD ADDRESS                        FMDHT
          LPN    4                                                       FMDHT
          ZJN    CNT1        IF A-D NOT MOVED                            FMDHT
          RAM    FMDADDR                                                 FMDHT
                                                                         FMDHT
**     4. DECREMENT CODE IF EXECUTE THEN STEP 5, ELSE STEP 8.            FMDHT
*                                                                        FMDHT
          SOD    D.Z1        DECREMENT CONTROL CODE                      DIMA152
          PJN    CNT2        IF NOT ZERO                                 FMDHT
          LJM    CNT13       EXIT TO STACK                               DIMA320
                                                                         FMDHT
**     5. RESET STORE WORD TO FIRST WORD OF BUFFER OB.                   FMDHT
*         CHECK CODE IF EXECUTE WITH NO TIMING THEN STEP 6, ELSE SEND    FMDHT
*         55 FUNCTION WITH CHANNEL 5 THEN STEP 6.                        FMDHT
*                                                                        FMDHT
*         RESET STORE WORD TO FIRST WORD OF BUFFER OB.                   FMDHT
*                                                                        FMDHT
 CNT2     LDC    OB+1                                                    FMDHT
          STM    FMDADDR     RESET VALUE FOR NEXT CONTROL FUNCTION       FMDHT
          LDD    AL                                                      DIMA320
          SBN    3                                                       DIMA320
          MJN    CNT5        IF ACCESS LEVEL LT 3                        DIMA320
          NJN    CNT6        IF ACCESS LEVEL GE 4                        DIMA320
          LDM    OB                                                      DIMA320
          STD    PA          SAVE NUMBER OF CONTROL WORDS                DIMA320
          LDC    OB+4                                                    DIMA320
          STD    PA+1        (PA+1)=NUMBER LEFT TO CHECK                 DIMA320
 CNT3     LDI    PA+1                                                    DIMA320
          LPN    10B                                                     DIMA320
          NJN    CNT4        IF WRITE BIT SET                            DIMA320
          LDN    4                                                       DIMA320
          RAD    PA+1        INCREMENT ADDRESS FOR NEXT CONTROL WORD     DIMA320
          SOD    PA                                                      DIMA320
          PJN    CNT3        IF NOT DONE                                 DIMA320
          UJN    CNT6        IF DONE                                     DIMA320
                                                                         DIMA320
 CNT4     LDC    0                                                       DIMA320
 FPRECYL  EQU    *-1         NON ZERO = PRE-ALLOCATED AREA  ZERO = NOT   DIMA320
          NJN    CNT6        IF PRE-ALLOCATED AREA                       DIMA320
 CNT5     LJM    ERRIAL      WRITE AND NOT PRE-ALLOCATED AREA            DIMA320
                                                                         DIMA320
 CNT6     LDD    D.Z1                                                    DIMA320
          ZJN    CNT7        IF EXECUTE                                  DIMA320
          LDN    55B                                                     FMDHT
          RJM    FNO         SEND INITIATE TIMING FUNCTION               FMDHT
                                                                         FMDHT
**     6. SEND 51 FUNCTION AND OUTPUT NUMBER OF WORDS.                   FMDHT
*                                                                        FMDHT
 CNT7     LDN    51B                                                     DIMA320
          RJM    FNC                                                     FMDHT
          ACN    CH+40B                                                  DIMA320
          LDN    49                                                      DIMA320
          OAM    OB,CH       SEND DATA TO BC                             FMDHT
          ZJN    CNT9        IF ALL DATA NOT ACCEPTED FROM PP            DIMA320
          LJM    ERRDNA      ALL DATA NOT ACCEPTED FROM PP               FMDHT
                                                                         FMDHT
 CNT9     DCN    CH+40B                                                  DIMA320
          LDD    D.Z1        GET CONTROL CODE                            DIMA152
                                                                         FMDHT
**     7. IF EXECUTE ONLY THEN STEP 8 ELSE GET TIMING DATA AND STORE     FMDHT
*         IN REGISTERS SPECIFIED BY X AND Y.                             FMDHT
*                                                                        FMDHT
          ZJN    CNT13       IF EXECUTE ONLY                             DIMA320
 CNT10    LDN    56B         FUNCTION FOR TIMING DATA                    DIMA320
          RJM    FNC                                                     FMDHT
          ACN    CH+40B                                                  DIMA320
          RJM    FJM         WAIT FOR CHANNEL FULL                       FMDHT
          ZJN    CNT11       IF CHANNEL DID NOT GO FULL                  DIMA320
          IAN    CH+40B                                                  DIMA320
          STI    PA+55B      SAVE TIMING WORD IN REGISTER X              FMDHT
          RJM    FJM                                                     FMDHT
          NJN    CNT12       IF CHANNEL DID NOT GO FULL                  DIMA320
 CNT11    LJM    ERRISR      ERROR EXIT IF INCOMPLETE STATUS RETURNED    DIMA320
                                                                         FMDHT
 CNT12    IAN    CH+40B                                                  DIMA320
          STI    PA+56B      SAVE TIMING WORD IN REGISTER Y              FMDHT
          DCN    CH+40B                                                  DIMA320
                                                                         FMDHT
**     8. RETURN TO STACK.                                               FMDHT
*                                                                        FMDHT
 CNT13    LJM    XENT        EXIT TO STACK                               HTENT
          EJECT                                                          FMDHT
          EJECT                                                          FMDHT
 FLAG     TITLE  FLAG - FMD FLAG PULSE.                                  DIMA152
**        FLAG - FMD FLAG PULSE.                                         DIMA152
*                                                                        DIMA152
*                FLAG PULSE CHANNEL=X,ABT Z                              DIMA152
*                                                                        DIMA152
*         ENTRY  - (PA) = VALUE X TO BE SENT WITH FUNCTION               HTENT
*                                                                        DIMA152
*         EXIT   - NONE.                                                 DIMA152
*                                                                        DIMA152
*         USES   - FNOA.                                                 DIMA152
*                                                                        DIMA152
*         CALLS  - FNO, TDR.                                             DIMA152
*                                                                        DIMA152
                                                                         DIMA152
**        1. VERIFY THAT THE CONTROLLER IS CONNECTED.                    DIMA152
*                                                                        DIMA152
 FLAG     RJM    TCO                                                     DIMA152
                                                                         DIMA152
**        2. SEND FLAG PUSE FUNCTION AND DATA WORD.                      DIMA152
*                                                                        DIMA152
          LDD    PA                                                      DIMA152
          STD    D.T4                                                    DIMA353
          LDN    FP                                                      DIMA152
          RJM    FNO         SEND FUNCTION                               DIMA152
                                                                         DIMA152
**        3. EXIT TO STACK.                                              DIMA152
*                                                                        DIMA152
          UJN    CNT13       EXIT TO STACK                               HTENT
          EJECT                                                          DIMA152
 FMDPT    TITLE  FMDPT - FMD POISITIONER TEST.                           DIMA152
**        FMDPT - FMD POSITIONER TEST.                                   DIMA152
*                                                                        DIMA152
*                FMDPT X Y,ABT Z                                         DIMA152
*                                                                        DIMA152
*         ENTRY  - ((PA+55B)) = ADDRESS FOR WORD ONE OF TIMING DATA.     HTENT
*                  ((PA+56B)) = ADDRESS FOR WORD TWO OF TIMING DATA.     DIMA152
*                                                                        DIMA152
*         EXIT   - ((PA+55B)) = WORD ONE OF TIMING DATA.                 DIMA152
*                  ((PA+56B)) = WORD TWO OF TIMING DATA.                 DIMA152
*                                                                        DIMA152
*         USES   - XCNTRL+1.                                             DIMA152
*                                                                        DIMA152
*         CALLS  - FNC, TDR, CNT5A.                                      DIMA152
*                                                                        DIMA152
                                                                         DIMA152
**        1. VERIFY THAT THE DRIVE IS CONNECTED.                         DIMA152
*                                                                        DIMA152
 FMDPT    RJM    TDR                                                     DIMA152
                                                                         DIMA152
**        2. SEND FMD POSITIONER TEST FUNCTION THEN JUMP TO INPUT        DIMA152
*            TIMING DATA.                                                DIMA152
*                                                                        DIMA152
          LDN    PT                                                      DIMA152
          RJM    FNC         SEND FUNCTION                               DIMA152
          LJM    CNT10       GO TO INPUT TIMING DATA                     DIMA320
          EJECT                                                          DIMA152
 GET      TITLE  GET - READ SERIAL, FACTORY OR UTILITY MAP SECTORS.      FMDHT
**        GET    - READ SERIAL, FACTORY OR UTILITY FLAW MAP SECTORS.     FMDHT
*                                                                        FMDHT
*                  GET SERIAL, ABT Z                                     FMDHT
*                  GET FACTORY SECTOR X, ABT Z                           FMDHT
*                  GET UTILITY SECTOR X, ABT Z                           FMDHT
*                                                                        FMDHT
*         ENTRY  - (PA)   = CODE ------ 0 = SERIAL                       HTENT
*                  (PA+1) = SECTOR      1 = FACTORY                      FMDHT
*                                       2 = UTILITY                      FMDHT
*                                                                        FMDHT
*         EXIT   - SELECTED SECTOR READ INTO IB                          FMDHT
*                                                                        FMDHT
*         USES   - COD, RDWRF, D.T6, CC, CT, GETA, CS,
*                  RDW5, WC, D.T7, D.Z1, D.T5, CL 
*                                                                        FMDHT
*         CALLS  - TDR, RDWR0.                                           FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            FMDHT
*                                                                        FMDHT
 GET      RJM    TDR         CALLER ENTRY POINT                          FMDHT
                                                                         FMDHT
**     2. EXECUTE THE SEEK SEQUENCE TO SEEK TO CYLINDER 1511B,           FMDHT
*         SECTOR 0 (SERIAL) OR SECTOR X (FACTORY, UTILITY). 
*                                                                        FMDHT
          STD    COD         ELIMINATE CODED DATA CHECK                  FMDHT
          STD    RDWRF       INDICATE A READ OPERATION                   FMDHT
          LDC    MAPCYL                                                  FMDHT
          STD    D.T6        CYLINDER NUMBER                             FMDHT
          LDN    D.T6        TO SET FOR SEEK                             FMDHT
          STD    CC          INDIRECT MEMORY REF.                        FMDHT
          LDN    D.T7                                                    FMDHT
          STD    CT                                                      FMDHT
          LDD    PA+1                                                    FMDHT
          STM    GETA                                                    FMDHT
          LDC    GETA                                                    FMDHT
          STD    CS                                                      FMDHT
          LDC    BTSG        BLOCK TRANSFER SIZE, GET COMMAND            DEMAHT 
          STM    RDW5                                                    DEMAHT 
          LDM    BTSG 
          STD    WC          PRESET WORD COUNT FOR ERROR CHECK
                                                                         FMDHT
**     3. EXIT TO STEP 2 READ/WRITE RDWR ROUTINE.                        FMDHT
*                                                                        FMDHT
* 
*         SPECIFY TRACK (SERIAL = 1, FACTORY = 0, UTILITY = 1)
* 
          LDD    PA          LOAD GET CODE
          LPN    1           SELECT RIGHT BIT 
          LMN    1           COMPLEMENT RIGHT BIT 
          STD    D.T7        STORE TRACK
* 
*         SPECIFY FUNCTION (SERIAL, FACTORY = 30, UTILITY = 31) 
* 
          LDD    PA          LOAD GET CODE
          SHN    0-1         SELECT BIT 2**1
          ADN    RFD         BIAS BY FUNCTION FOR READ FACTORY DATA 
          STD    D.Z1        SAVE FUNCTION ** ENTRY FOR SHORTRD **       DIMA152
          LDN    1                                                       DIMA152
          STD    D.T5        STORE NUMBER OF SECTORS                     DIMA152
          LDN    D.T5                                                    DIMA152
          STD    CL                                                      DIMA152
          LDD    D.Z1        GET FUNCTION                                DIMA152
          LJM    RDWR0       READ ONE SECTOR                             FMDHT
                                                                         FMDHT
 GETA     DATA   0           STORAGE FOR SECTOR NUMBER                   FMDHT
* 
*         BLOCK TRANSFER SIZE, GET COMMAND                               DEMAHT 
* 
 BTSG     DATA   502B                                                    DEMAHT 
          EJECT                                                          FMDHT
 MARGINS  TITLE  MARGINS- PROCESS MARGINS COMMMAND.                      FMDHT
**        MARGINS- SAVE STROBES AND OFFSET MARGINS FOR LATER READS.      FMDHT
*                                                                        FMDHT
*                  MARGINS W, ABT Z                                      FMDHT
*                  MARGINS X OFFSET Y STROBES, ABT Z                     FMDHT
*                                                                        FMDHT
*         ENTRY  - (PA) = MARGINS                                        HTENT
*                                                                        FMDHT
*         EXIT   - MARGINS PARAMETER CONVERTED FOR FUNCTION              FMDHT
*                                                                        FMDHT
*                  ERRISO  - IF ILLEGAL STROBE/OFFSET PARAMETER          FMDHT
*                                                                        FMDHT
*         USES   - P, MARGINSA                                           FMDHT
*                                                                        FMDHT
*         CALLS  - ERA                                                   FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. VERIFY THAT MARGINS ARE LEGAL.                                 FMDHT
*                                                                        FMDHT
 MARGINS  LDD    PA          MARGIN PARAMETER WORD                       HTENT
          SCN    33B         MASK OUT LEGAL BITS                         FMDHT
          ZJN    MARGINS1    IF LEGAL PARAMETERS                         FMDHT
          LDC    ER.ISO      ERROR EXIT                                  FMDHT
          LJM    ERR                                                     FMDHT
                                                                         FMDHT
**     2. SAVE SELECTED MARGINS.                                         FMDHT
*                                                                        FMDHT
 MARGINS1 LDD    PA          PARAMETER WORD                              FMDHT
          SHN    2           LINE IT UP                                  FMDHT
          LPN    4           MASK IT                                     FMDHT
          STM    MARGINSA    STORE FORWARD OFFSET                        FMDHT
          LDD    PA          PARAMETER WORD                              FMDHT
          LPN    32B         MASK IN THE OTHER BITS                      FMDHT
          SHN    4           SHIFT TO CORRECT BIT POSITION               FMDHT
          RAM    MARGINSA    STORE IT                                    FMDHT
          UJN    OUT4        EXIT TO STACK                               HTENT
          EJECT                                                          FMDHT
 OUT      TITLE  OUT - SEND CONTROL FUNCTION TO CONTROLLER.               FMDHT 
**        OUT - SEND CONTROL FUNCTION TO CONTROLLER.                      FMDHT 
*                                                                        FMDHT
*                  OUT CHANNEL=A B C,ABT Z                               FMDHT
*                                                                        FMDHT
*         ENTRY  - (PA)   = CHANNEL                                      HTENT
*                  (PA+1) = VALUE B                                      FMDHT
*                  (PA+2) = VALUE C                                      FMDHT
*                                                                        FMDHT
*         EXIT   - ERRDNA - ERROR EXIT IF DATA NOT ACCEPTED              FMDHT
*                  ERRIDR - ERROR EXIT IF DATA NOT RECEIVED              FMDHT
*                  ERRIAL - ERROR EXIT IF ACCESS LEVEL TOO LOW           FMDHT
*                                                                        FMDHT
*         USES   - P, FUN.                                               FMDHT
*                                                                        FMDHT
*         CALLS  - TCO, FNC, IJM, BD.TEST, FNO.                          FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. VERIFY THAT THE CONTROLLER IS CONNECTED.                       FMDHT
*                                                                        FMDHT
 OUT      RJM    TCO         TEST CONTROLLER CONNECTED                   FMDHT
          LDD    AL                                                      FMDHT
          SBN    3                                                       DIMA320
          PJN    OUT1        IF ACCESS LEVEL .GE. 3                      DIMA320
          LJM    ERRIAL      ERROR EXIT AL TOO LOW FOR REQUEST           FMDHT
                                                                         FMDHT
 OUT1     LDN    50B                                                     FMDHT
          RJM    FNC         SEND FUNCTION TO FMD                        FMDHT
          ACN    CH+40B      ACTIVATE THE CHANNEL                        FMDHT
          LDN    3                                                       FMDHT
          STD    WT                                                      FMDHT
          OAM    PA,CH       OUTPUT THE THREE WORDS TO PROCESSOR         FMDHT
          STD    D.Z1                                                    FMDHT
          DCN    40B+CH                                                  DIMA320
          ZJN    OUT3        IF ALL WORDS TRANSMITTED                    FMDHT
          LDD    WT                                                      FMDHT
          SBD    D.Z1                                                    FMDHT
          STD    WT          STORE WORDS TRANSMITTED                     FMDHT
          LJM    ERRDNA      ALL DATA NOT ACCEPTED FROM PP               FMDHT
                                                                         FMDHT
 OUT3     STM    FPRECYL     CLEAR PRE-ALLOCATED CYL FLAG                DIMA320
 OUT4     LJM    XENT        EXIT TO STACK                               HTENT
          EJECT                                                          FMDHT
 RDWR     TITLE  RDWR - SEEK AND I/O THE REQUESTED NUMBER OF SECTORS.    FMDHT
**        RDWR   - SEEK AND I/O THE REQUESTED NUMBER OF SECTORS.         FMDHT
*                                                                        FMDHT
*                  READ V SECTORS AT CYL W TRK X SEC Y, ABT Z            FMDHT
*                  READ V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z      FMDHT
*                  READCW V SECTORS AT CYL W TRK X SEC Y, ABT Z          FMDHT
*                  VERIFY V SECTORS AT CYL W TRK X SEC Y, ABT Z          FMDHT
*                  VERIFY V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z    FMDHT
*                  WRITE V SECTORS AT CYL W TRK X SEC Y, ABT Z           FMDHT
*                  WRITE V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z     FMDHT
*                                                                        FMDHT
*         ENTRY  - (PA)      BITS 0-2  = FUNCTION CODE                    HTENT 
*                            BIT  4    = NOT CODED/CODED FLAG            FMDHT
*                            BIT  5    = READ/WRITE FLAG                 FMDHT
*                                                                        FMDHT
*                  (CL) = V                                             HT     9
*                  (CC) = W                                             HT     9
*                  (CT) = X                                             HT     9
*                  (CS) = Y                                             HT     9
*                                                                        FMDHT
*         EXIT   - V = ZERO,                                             FMDHT
*                  W, X, AND Y = LAST CYL, TRK, AND SEC.                    FMDH
*                                                                        FMDHT
*                  ER.IAL  - IF ACCESS LEVEL TO LOW FOR REQUEST          FMDHT
*                  ER.NIDT - IF NO INACTIVE AFTER DATA XFER 
*                  ER.AGS  - IF ABNORMAL GENERAL STATUS                  FMDHT
*                  ER.IDR  - IF INCOMPLETE DATA RETURNED TO PP           FMDHT
*                  ER.DNA  - IF DATA NOT ACCEPTED FROM PP                FMDHT
*                  ER.STRY - IF SUCCESSFUL RETRY                         FMDHT
*                  ER.DCE  - IF DATA COMPARE ERROR                       FMDHT
*                                                                        FMDHT
*         USES   - RDW5, WC, RDWRF, COD, FUN, D.T2, SB(0-24B),
*                  SBIE(0-24B), RETRY, D.T1, RT, D.T4, (CL),
*                  OB(500B-502B), WT, RDW7, RDW8, D.T3, IB(0-501B), 
*                  (CS), (CT) 
*                                                                        FMDHT
*                                                                        FMDHT
*         CALLS  - TDR, SEEK1, STS, DST 
*                                                                        FMDHT
                                                                         FMDHT
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            FMDHT
*                                                                        FMDHT
 RDWR     RJM    TDR         ENTRY POINT FOR READ, READCW, VERIFY, WRITE   FMDHT
          LDC    BTSR        BLOCK TRANSFER SIZE, REGULAR I/O COMMANDS    DEMAHT
          STM    RDW5                                                    DEMAHT 
          LDC    WRRD        SPECIFY STANDARD WORD COUNT
          STD    WC          WORD COUNT (LARGE SECTOR SIZE) 
                                                                         FMDHT
**     2. VALIDATE  ACCESS  TO  THE  CYLINDER  SPECIFIED  BY W AND       FMDHT
*         EXECUTE THE SEEK SEQUENCE TO MOVE THE DISK POSITIONER.         FMDHT
*                                                                        FMDHT
          LDD    PA                                                      FMDHT
          SHN    18D-5D      SHIFT READ/WRITE FLAG TO BIT 0              FMDHT
          STD    RDWRF       SET THE READ/WRITE FLAG                     FMDHT
          SCN    1           CLEAR THE BIT                               FMDHT
          SHN    18D-4D-18D+5D SHIFT CODED FLAG TO BIT 0                 FMDHT
          STD    COD         SET/CLEAR THE CODED FLAG                    FMDHT
          SHN    0-14D       SHIFT IN THE FUNCTION CODE                  FMDHT
                                                                         FMDHT
*         ENTRY POINT FOR GET COMMAND 
                                                                         FMDHT
 RDWR0    STD    FUN         SAVE THE FUNCTION CODE                      FMDHT
          LDN    RETRY-SB                                                FMDHT
          STD    D.T2        NUMBER OF WORDS IN SB TO CLEAR              FMDHT
 RDWR1    LDN    0                                                       FMDHT
          STM    SB,D.T2     CLEAR THE STATUS BUFFER                     FMDHT
          SOD    D.T2                                                    FMDHT
          PJN    RDWR1       IF NOT DONE                                 FMDHT
          LDM    RDWAL,RDWRF                                             FMDHT
          STD    D.T1        SET READ/WRITE ACCESS LEVEL REQUIRED        FMDHT
          LDD    BD.AL                                                   FMDHT
          SBD    D.T1        TO TEST ACCESS LEVEL                        FMDHT
          PJN    RDWR3       IF ACC.LEV. NOT PREALLOCATED AREA.          FMDHT
          ADN    1           TO VERIFY ANY OPERATION OK                  FMDHT
          MJN    ERRIAL      IF PREALLOCATED OPERATION IS NOT OK         FMDHT
          LDD    FUN         LOAD THE CURRENT FUNCTION                   FMDHT
          LMN    RDCW        MASK IT WITH READ CHECKWORD                 FMDHT
          ZJN    RDWR3       IF READCW IGNORE VALIDATON                  FMDHT
          LDC    MAXCDD-PRECYL   PREALLOCATED CYLINDER - 1
          SBI    CC          CURRENT CYLINDER                            FMDHT
          MJN    RDWR3       IF CYL DESIRED IS IN PREALLOCATED AREA      FMDHT
 ERRIAL   LDC    ER.IAL      ERROR - ASSESS LEVEL TOO LOW FOR REQ 
          LJM    ERR         ERROR EXIT 
                                                                         FMDHT
 RDWR3    RJM    SEEK1       TO SEEK TO DESIRED CYLINDER                 FMDHT
                                                                         FMDHT
**     3. EXECUTE  A  NORMAL EXIT IF THE CONTENTS OF REGISTER V IS       FMDHT
*         ZERO (NO SECTORS TO READ).                                     FMDHT
*                                                                        FMDHT
          LDI    CL          LOAD THE REMAINING SECTOR COUNT             FMDHT
          SHN    -2                                                      FMDHT
          RAD    RT                                                      FMDHT
          LDI    CL                                                      FMDHT
          NJN    RDWR7       IF THERE ARE SECTORS TO READ                FMDHT
          LJM    XENT        EXIT TO STACK                               HTENT
                                                                         FMDHT
**     4. ISSUE SELECTED STROBES AND OFFSET OPTIONS IF  THEY  HAVE       FMDHT
*         BEEN DEFINED BY A PREVIOUS MARGINS COMMAND. CALCULATE          FMDHT
*         THE SECTORS REMAINING IN THIS HALF TRACK, IF THE REMAIN-       FMDHT
*         ING COUNT IS MORE THAN  V  USE  V.  IF  NOT  SET  THE          FMDHT
*         REMAINING COUNT INTO  V. NORMAL EXIT WILL BE WITH  V           FMDHT
*         EQUAL ZERO.                                                    FMDHT
*                                                                        FMDHT
 RDWR7    LDD    RDWRF                                                   FMDHT
          NJN    RDWR8       SKIP MARGINS ON A WRITE OPERATION           FMDHT
          LDC    **          *** STROBE AND OFFSET SELECTIONS            FMDHT
 MARGINSA EQU    *-1                                                     FMDHT
          ZJN    RDWR8       IF NO MARGINS                               FMDHT
          STD    D.T4                                                    DIMA353
          LDN    SSO         LOAD THE FUNCTION                           FMDHT
          RJM    FNO         TO SEND MARGIN FUNCTION                     FMDHT
                                                                         FMDHT
**        CALCULATE NUMBER OF SECTORS THAT CAN BE PROCESSED FROM CURRENT FT2TO1 
*         TRACK/SECTOR TO END OF CYLINDER.  SET THE NUMBER OF SECTORS TO FT2TO1 
*         PROCESS ((CL)) TO THIS VALUE OR TO THE CONTENTS OF REGISTER V    FT2TO
*         (ORIGINAL ((CL))) WHICHEVER IS SMALLER.                            FT2
*                                                                        FT2TO1 
 RDWR8    LDI    CS          CURRENT (AND STARTING) SECTOR               FT2TO1 
          SHN    -1          SECTORS BYPASSED IN CURRENT HALF TRACK      FT2TO1 
          STD    D.T1        SAVE                                        FT2TO1 
          LDI    CS          CURRENT (AND STARTING) SECTOR
          LPN    1           MASK FOR ODD OR EVEN HALF TRACKS            FT2TO1 
          LMN    1           TEST IF STARTING WITH ODD HALF TRACKS
          ZJN    RDWR9       JUMP IF STARTING WITH ODD HALF TRACKS
          LDN    TRL+1       ELSE FOR EVEN ADD ALL ODD TRACK COUNT       FT2TO1 
 RDWR9    ADN    TRL         ADD CURRENT HALF TRACK COUNT                FT2TO1 
          SBI    CT          SUBTRACT THE TRACKS WE DON'T NEED TO DO     FT2TO1 
          SHN    4           REMAINDER X 16 (MAX. SECTORS/HALF TRACK)    FT2TO1 
          STD    D.T4        SECTORS FROM CURR. TRK+1 TO END OF CYLINDER FT2TO1 
          LDN    20B         MAXIMUM SECTORS PER HALF TRACK              FT2TO1 
          SBD    D.T1        MINUS SECTORS BYPASSED IN CURR. HALF TRACK  FT2TO1 
          RAD    D.T4        SECS. FROM CURR. TRK/SEC TO END OF CYLINDER FT2TO1 
          SBI    CL          SUBTRACT THE NUMBER REQUESTED IN COMMAND    FT2TO1 
          PJN    RDWR10      JUMP IF NO. REQUESTED .LT. NO. AVAILABLE    FT2TO1 
          LDD    D.T4        SECS. FROM CURR. TRK/SEC TO END OF CYLINDER FT2TO1 
          STI    CL          NO. OF SECTORS TO PROCESS = MAX. AVAILABLE  FT2TO1 
                                                                         FMDHT
**     5. ISSUE A READ FUNCTION (0004).                                  FMDHT
*                                                                        FMDHT
 RDWR10   LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       FMDHT
          ZJN    RDWR11      IF IT IS A READ                             FMDHT
          LDD    COD         CODED DATA FLAG                             FMDHT
          ZJN    RDWR11      IF IT IS NOT CODED                          FMDHT
          LDI    CC          CURRENT CYLINDER                            CODHT
          STM    OB+500B     SET THE CYLINDER                            CODHT
          LDI    CT          CURRENT TRACK                               CODHT
          STM    OB+501B     SET THE TRACK                               CODHT
          LDI    CS          CURRENT SECTOR                              CODHT
          STM    OB+502B     SET THE SECTOR                              CODHT
 RDWR11   LDD    FUN         LOAD THE FUNCTION                           FMDHT
                                                                         FMDHT
**     6. INPUT THE NUMBER OF WORDS SPECIFIED  BY  THE WC REGISTER       FMDHT
*         INTO THE PP INPUT  BUFFER AND STORE THE NUMBER OF  WORDS       FMDHT
*         ACTUALLY READ INTO THE WT REGISTER.                            FMDHT
                                                                         DEMAHT 
**     A. ISSUE THE REQUESTED FUNCTION                                   DEMAHT 
*                                                                        DEMAHT 
 RDWR12   RJM    FNC         ISSUE THE FUNCTION                          DEMAHT 
          LDN    0                                                       DEMAHT 
          STD    WT          CLEAR THE WT REGISTER                       DEMAHT 
          LDD    FUN                                                     DEMAHT 
          LMN    RDCW                                                    DEMAHT 
          NJN    RDW1        JUMP IF NOT READCW COMMAND 
          LJM    RDWR12A     READCW COMMAND - NO DATA TRANSFER
 RDW1     LDD    FUN
          LPN    GCM         GET (COMMAND) CODE MASK                     DEMAHT 
          LMN    RFD         READ FACTORY DATA FUNCTION CODE             DEMAHT 
          ZJN    RDW2        JUMP IF FUNCTION IS 30 OR 31                DEMAHT 
          LDN    4           SET LOOP COUNT FOR 5 PP I/O BLOCK TRANSFERS DEMAHT 
 RDW2     STD    D.T2                                                    DEMAHT 
          ACN    CH+40B      ACTIVATE THE CHANNEL                        DEMAHT 
                                                                         DEMAHT 
**     B. ASSEMBLE PP I/O INSTRUCTION (WRITE - OAM, READ -IAM)
* 
          LDM    PIOC,RDWRF  LOAD CURRENT PP I/O INSTRUCTION CODE 
          ADM    BD.CHAN     APPEND CHANNEL NUMBER
          STM    RDW7        STORE 1ST 12 BITS OF ASSEMBLED INSTRUCTION 
  
**     C. START OF LOOP TO TRANSFER DATA
*         ONE PP I/O BLOCK TRANSFER PER ITERATION 
  
 RDW3     LDM    IOBA,RDWRF  PP I/O BUFFER ADDRESS - OB OR IB 
          STM    RDW8        STORE 2ND 12 BITS OF ASSEMBLED INSTRUCTION 
  
**     D. SELECT CURRENT PP I/O BLOCK TRANSFER SIZE 
* 
 RDW4     LDM    **,D.T2     CURRENT PP I/O BLOCK TRANSFER SIZE (BTS) 
 RDW5     EQU    RDW4+1 
          STD    D.T3        SAVE CURRENT BTS 
  
**     E. THE FIRST TRANSFER FOR A WRITE, WRITE VERIFY OR READ COMMAND
*         IS OFFSET IN BUFFER BY 344B WORDS (TRANSFERS OF 140B WORDS).
*         THIS ALLOWS CODED DATA TO BE LOCATED IN IB/OB(500B-502B). 
* 
          ADC    -140B       TEST IF CURRENT BTS = 140B WORDS 
          NJN    RDW6        JUMP IF NOT BTS = 140B 
          LDC    344B        SELECT IB/OB(344B) AS FWA FOR I/O BUFFER 
          RAM    RDW8        BIAS 2ND WORD OF PP I/O INSTRUCTION BY 344B
  
**     F. EXECUTE PP I/O BLOCK DATA TRANSFER (OAM OR IAM INSTRUCTION) 
* 
 RDW6     LDD    D.T3        CURRENT PP I/O BLOCK TRANSFER SIZE (BTS) 
 RDW7     OAM    **,0        WRITE/READ FROM/TO OUTPUT/INPUT BUFFER 
 RDW8     EQU    RDW7+1      FWA OF PP I/O BLOCK DATA TRANSFER
  
**     G. VERIFY THAT THE CURRENT SELECTED NUMBER OF WORDS WERE ACTUALLY
*         TRANSFERRED. STORE CUMULATIVE NO. WORDS TRANSFERRED IN WT REG.
* 
          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 TRANFERRED 
          LDD    D.T1        COUNT OF WORDS NOT WRITTEN 
          NJN    RDW9        IF NOT ZERO, EARLY (ERROR) EXIT
  
**     H. UPDATE LOOP COUNT FOR PP I/O BLOCK TRANSFERS
* 
          SOD    D.T2        DECREMENT LOOP COUNT 
          PJN    RDW3        LOOP BACK IF BLOCK TRANSFERS NOT COMPLETE
  
**     I. COMPLETE I/O OPERATION
* 
 RDW9     LDD    RDWRF       READ/WRITE FLAG
          NJN    RDW10       JUMP IF WRITE
          RJM    IJM         INSURE CHANNEL IS INACTIVE 
          NJN    RDWR12A     JUMP IF CHANNEL NOT HUNG ACTIVE
 ERRNIDT  LDC    ER.NIDT     ERROR - NO INACTIVE AFTER DATA XFER
          UJN    RDWR15A     JUMP TO ERR
  
 RDW10    DCN    CH+40B      DEACTIVATE THE CHANNEL 
*                                                                        FMDHT
*      7. REQUEST  AND  INPUT  GENERAL  STATUS TO DETERMINE IF THE       FMDHT
*         OPERATION COMPLETED SUCCESSFULY. IF  GENERAL  STATUS  IS       FMDHT
*         ZERO (NO ERROR), GO TO STEP 11.                                FMDHT
*                                                                        FMDHT
 RDWR12A  RJM    STS         TO GET GENERAL STATUS                       DEMAHT 
          NJN    RDWR13      IF BAD STATUS                               FMDHT
          LJM    RDWR27      TO I/O AGAIN AFTER UPDATING PARAMETERS     FMDHT 
                                                                         FMDHT
**     8. REQUEST AND INPUT DETAIL STATUS.  EXECUTE THE ERROR EXIT       FMDHT
*         SEQUENCE IF BIT 2**9 IS SET IN GENERAL STATUS.                 FMDHT
*         (NONRECOVERABLE ERROR).                                        FMDHT
*                                                                        FMDHT
 RDWR13   RJM    DST         TO GET DETAILED STATUS                      FMDHT
          LDM    SB          GENERAL STATUS                              FMDHT
          SHN    17D-UNR                                                 FMDHT
          MJN    RDWR15      JUMP IF AN UNRECOVERED ERROR 
                                                                         FMDHT
                                                                         FMDHT
**     9. IF BIT 2**8 IS CLEAR (NO RECOVERY IN PROGRESS) ENTER THE       FMDHT
*         ERROR EXIT SEQUENCE. (GENERAL STATUS AT  THIS  POINT  IS       FMDHT
*         STRANGE  SINCE  IT  IS NOT ZERO, BUT DOES NOT INDICATE A       FMDHT
*         RECOVERABLE OR NONRECOVERABLE ERROR).                          FMDHT
*                                                                        FMDHT
          SHN    17D-RIP-17D+UNR   TEST IF RECOVERY IN PROGRESS 
          MJN    RDWR24      JUMP IF RECOVERY IN PROGRESS 
 RDWR15   LDC    ER.AGS      ERROR - ABNORMAL GENERAL STATUS
 RDWR15A  LJM    ERR         ERROR EXIT FOR NO RECOVERY IN PROGRESS 
                                                                         FMDHT
**    10. IF BIT 2**8  IS SET (RECOVERY IN PROGRESS), DETERMINE IF       FMDHT
*         THE RETRY COUNT IN THE STATUS BUFFER IS ZERO (FIRST TIME       FMDHT
*         FAILURE).  IF SO, REQUEST AND INPUT  DETAIL  STATUS  AND       FMDHT
*         STORE  IT  AND GENERAL STATUS INTO WORDS 25B THRU 51B OF       FMDHT
*         THE STATUS BUFFER TO CAPTURE THE  ORIGINAL  STATUS  THAT       FMDHT
*         CAUSED  RECOVERY  TO  BE  PERFORMED.   ISSUE  A CONTINUE       FMDHT
*         FUNCTION  (0014), BUMP  THE  RETRY  COUNTER  IN  THE  PP       FMDHT
*         STATUS BUFFER AND GO TO STEP 6 TO PERFORM A RETRY OF THE       FMDHT
*         READ.                                                          FMDHT
*                                                                        FMDHT
 RDWR24   LDM    RETRY       RETRY COUNTER
          NJN    RDWR26      JUMP IF NOT THE FIRST ERROR RETRY                FM
          LDN    25B         ELSE MOVE THE INITIAL ERROR TO SBIE         FMDHT
          STD    D.T1        INITIALIZE COUNTER 
 RDWR25   LDM    SB,D.T1     LOAD A WORD                                 FMDHT
          STM    SBIE,D.T1   STORE A WORD                                FMDHT
          SOD    D.T1        DECREMENT THE COUNT                         FMDHT
          PJN    RDWR25      LOOP BACK IF NOT DONE MOVING WORDS 
 RDWR26   AOM    RETRY       INCREMENT THE RETRY COUNT                   FMDHT
          SBN    28D                                                     FMDHT
          PJN    ERRSTRY     JUMP IF .GT. 27D RETRIES (SUCCESSFUL RETRY)
          LDN    CONT        CODE FOR THE CONTINUE FUNCTION                   FM
          LJM    RDWR12      JUMP TO INPUT AFTER A CONTINUE                   FM
                                                                         FMDHT
**    11. WE ARRIVE AT THIS  STEP  AFTER  COMPLETING  A  READ  AND       FMDHT
*         GENERAL  STATUS  IS  ZERO  (NO ERROR). EXECUTE THE ERROR       FMDHT
*         EXIT SEQUENCE IF THE CONTENTS OF THE WT REGISTER IS  NOT       FMDHT
*         EQUAL  THE  WC  REGISTER  (ALL BYTES NOT READ) OR IF THE       FMDHT
*         RETRY COUNT IN THE STATUS BUFFER IS NON-ZERO  (THE  READ       FMDHT
*         OF  THIS  SECTOR  HAS  BEEN COMPLETED SUCCESSFULLY BUT A       FMDHT
*         RETRY WAS REQUIRED, SO CONTROL IS RETURNED TO  THE  USER       FMDHT
*         FOR POSSIBLE MESSAGE REPORTING).                               FMDHT
*                                                                        FMDHT
 RDWR27   LDD    FUN         WHAT IS THE CURRENT FUNCTION                FMDHT
          LMN    RDCW        IS IT A READCW                              FMDHT
          ZJN    RDWR31      IF READCW DONT COMPARE WC AND WT            FMDHT
          LDD    WT          WORD ACTUALLY READ                          FMDHT
          SBD    WC          DESIRED WORD COUNT                          FMDHT
          ZJN    RDWR31      JUMP IF WORD COUNTS AGREE
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       FMDHT
          NJN    ERRDNA      JUMP IF IT IS A WRITE                            FM
          LDC    ER.IDR      ERROR - INCOMPLETE DATA RETURNED TO PP 
          UJN    RDW30       GET DETAIL STATUS AND ERROR EXIT 
                                                                         FMDHT
 ERRDNA   LDC    ER.DNA      ERROR - ALL DATA NOT ACCEPTED FROM PP
 RDW30    LJM    ERRDST      GET DETAIL STATUS AND ERROR EXIT 
                                                                         FMDHT
 RDWR31   LDM    RETRY                                                   FMDHT
          ZJN    RDWR32      JUMP IF NO RETRYS                                FM
 ERRSTRY  LDC    ER.STRY     ERROR - SUCCESSFUL RETRY 
          UJN    RDW30       GET DETAIL STATUS AND ERROR EXIT 
                                                                         FMDHT
**    12. IF  THE KEYWORD CODED WAS SPECIFIED IN THE READ COMMAND,       FMDHT
*         COMPARE THE CONTENTS OF THE FOLLOWING_                         FMDHT
*                                                                        FMDHT
*           IB(500B) TO REGISTER W (CYLINDER)                            CODHT
*           IB(501B) TO REGISTER X (TRACK)                               CODHT
*           IB(502B) TO REGISTER Y (SECTOR)                              CODHT
*                                                                        FMDHT
*         IF A NON-COMPARE IS DETECTED,  EXECUTE  THE  ERROR  EXIT       FMDHT
*          SEQUENCE.                                                     FMDHT
*                                                                        FMDHT
 RDWR32   LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       FMDHT
          NJN    RDWR33      IF IT IS A WRITE                            FMDHT
          LDD    COD         CODED DATA FLAG                             FMDHT
          ZJN    RDWR33      IF NOT CODED DATA                           FMDHT
          LDM    IB+500B     ADD UP THE CODED DATA WORDS                       C
          ADM    IB+501B                                                 CODHT
          ADM    IB+502B                                                 CODHT
          SBI    CC          SUBTRACT THE REGISTERS                      FMDHT
          SBI    CT                                                      FMDHT
          SBI    CS                                                      FMDHT
          ZJN    RDWR33      JUMP IF NOT A CODED ERROR                         F
          LDC    ER.DCE      ERROR - DATA COMPARE ERROR 
          UJN    RDW30       GET DETAIL STATUS AND ERROR EXIT 
                                                                         FMDHT
**    13. DECREMENT  THE  CONTENTS OF REGISTER V BY ONE (NUMBER OF       FMDHT
*         SECTORS REMAINING TO BE READ). IF THE  RESULT  IS  ZERO,       FMDHT
*         PERFORM A NORMAL COMMAND EXIT.                                 FMDHT
*                                                                        FMDHT
 RDWR33   SOI    CL          DECREMENT THE SECTORS REMAINING FLAG        FMDHT
          ZJN    RDWR37      IF ALL SECTORS PROCESSED                    DIMA320
                                                                         FMDHT
**    14. INCREMENT  THE  CONTENTS  OF REGISTERS W/X/Y PER THE 2_1       FMDHT
*         INTERLACE FLOW-CHART. IF THE CYLINDER IS NOT  COMPLETED,       FMDHT
*         GO TO STEP 5 TO CONTINUE READING FROM THE SAME CYLINDER.       FMDHT
*         IF THE CYLINDER IS COMPLETED, EXIT WITH W/X/Y POINTING         FMDHT
*         TO THE LAST SECTOR PROCESSED.                                  FMDHT
*                                                                        FMDHT
          LDN    SEI         SECTOR INCREMENT 
          RAI    CS          INCREMENT SECTOR                            FMDHT
          SBN    SEL+1       FOR LIMIT TESTING                           FMDHT
          MJN    RDWR35      IF NOT COMPLETE THIS TRACK                  FMDHT
          STI    CS          ELSE RESET SECTOR                           FMDHT
          AOI    CT          AND INCREMENT TRACK                         FMDHT
          SBN    TRL+1       FOR LIMIT TESTING                           FMDHT
          MJN    RDWR35      IF NOT COMPLETE THIS CYLINDER               FMDHT
          STI    CT          ELSE RESET TRACK (TO ZERO)                  FMDHT
          LDN    1           SET SECTOR TO 1
          STI    CS          SWITCH HALF TRACKS 
 RDWR35   LJM    RDWR10      READ ANOTHER SECTOR                    FMDHT    120
                                                                         FMDHT
 RDWR37   LJM    XENT        EXIT TO STACK                               HTENT
                                                                         DEMAHT 
*         BLOCK TRANSFER SIZES, REGULAR I/O COMMANDS                     DEMAHT 
*         (USED IN REVERSED ORDER)
*                                                                        DEMAHT 
 BTSR     DATA 500B,500B,500B,500B,140B                                  DEMAHT 
* 
*         PP I/O INSTRUCTION CODES (USED IN ASSEMBLING I/O INSTRUCTIONS)
* 
 PIOC     DATA   7100B       INSTRUCTION CODE FOR IAM INSTRUCTION 
          DATA   7300B       INSTRUCTION CODE FOR OAM INSTRUCTION 
* 
*         PP I/O BUFFER ADDRESS 
* 
 IOBA     CON    IB          FWA OF INPUT  BUFFER 
          CON    OB          FWA OF OUTPUT BUFFER 
          EJECT                                                          FMDHT
 RESET    TITLE  RESET - AUTOLOAD THE BC TO RESTART CONTROLWARE.         FMDHT
**        RESET  - AUTOLOAD THE BC TO RESTART CONTROLWARE AT THE IDLE    FMDHT
*                  LOOP.                                                 FMDHT
*                                                                        FMDHT
*                  RESET, ABT Z                                          FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  HTENT
*                                                                        FMDHT
*         EXIT   - NONE                                                  FMDHT
*                                                                        FMDHT
*         USES   - P                                                     FMDHT
*                                                                        FMDHT
*         CALLS  - TCA, FNC                                              FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. VERIFY THAT THE I/O CHANNEL IS ASSIGNED.                       FMDHT
*                                                                        FMDHT
 RESET    RJM    TCA         CHECK CHANNEL ASSIGNED                      HTENT
                                                                         FMDHT
**     2. ISSUE AN AUTOLOAD FUNCTION, ACTIVATE AND DEACTIVATE THE I/O    FMDHT
*         CHANNEL TO CAUSE THE BC TO RE-START EXECUTION.                 FMDHT
*                                                                        FMDHT
          LDC    AUTO                                                    FMDHT
          RJM    FNC         TO FUNCTION AUTOLOAD                        FMDHT
          ACN    CH          ACTIIVATE THE CHANNEL                       FMDHT
          LDN    40B         DELAY A LITTLE                              FMDHT
 RESET1   SBN    1                                                       FMDHT
          NJN    RESET1      IF NOT END OF DELAY                         FMDHT
          DCN    CH+40B      DEACTIVATE THE CHANNEL                      FMDHT
          STM    COCON       SET CONTROLLER CONNECTED FLAG               DIMA599
          UJN    RDWR37      EXIT TO STACK                               HTENT
          EJECT                                                          FMDHT
 RTNADDR  TITLE  RTNADDR- PERFORM A RETURN CYLINDER ADDRESS FUNCTION.    FMDHT
**        RTNADDR- PERFORM A RETURN CYLINDER ADDRESS FUNCTION.           FMDHT
*                                                                        FMDHT
*                  RTNADDR TO Y, ABT Z                                   FMDHT
*                                                                        FMDHT
*         ENTRY  - (PA) = Y                                              HTENT
*                                                                        FMDHT
*         EXIT   - (PA) = THE ADDRESS RETURNED                           FMDHT
*                                                                        FMDHT
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  FMDHT
*                  ERRNIDT - IF NO INACTIVE AFTER DATA TRANSFER          FMDHT
*                  ERRWC   - IF BUFFER ADDRESS OR WC INCORRECT           FMDHT
*                                                                        FMDHT
*         USES   - (PA), P                                               FMDHT
*                                                                        FMDHT
*         CALLS  - TCO, STS, FNC, FJM, IJM                               FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. VERIFY THAT THE CONTROLLER IS CONNECTED.                       FMDHT
*                                                                        FMDHT
 RTNADDR  RJM    TCO                                                     FMDHT
                                                                         FMDHT
**     2. VERIFY THAT Y IS IN RANGE OF THE INPUT BUFFER.                 FMDHT
*                                                                        FMDHT
          LDN    1                                                       DIMA252
          STD    PA+1        WORD COUNT FOR RTNADDR                      DIMA252
          RJM    BD.TEST     TEST IF ADDRESS WITHIN RANGE                DIMA252
                                                                         FMDHT
**     3. REQUEST/INPUT GENERAL STATUS AND VERIFY THAT IT IS NOT BUSY.   FMDHT
*                                                                        FMDHT
          RJM    STS         TO GET STATUS                               FMDHT
          SHN    17D-BUSY                                                FMDHT
          PJN    RTNADDR3    IF STATUS IS OK                             FMDHT
          LJM    ERRAGS      ELSE ERROR EXIT                             FMDHT
                                                                         FMDHT
**     4. ISSUE A RETURN CYLINDER ADDRESS FUNCTION (0021).               FMDHT
*                                                                        FMDHT
 RTNADDR3 LDN    RCA                                                     FMDHT
          RJM    FNC         TO FUNCTION RETURN CYLINDER ADDRESS         FMDHT
                                                                         FMDHT
**     5. PERFORM A ONE WORD INPUT AND STORE IT INTO THE INPUT BUFFER    FMDHT
*         AT THE ADDRESS SPECIFIED BY Y.                                 FMDHT
*                                                                        FMDHT
          ACN    CH          TO ACTIVATE AND                             FMDHT
          RJM    FJM         WAIT FULL                                   FMDHT
          ZJN    RTNADDR4    IF NO FULL                                  FMDHT
          IAN    CH          INPUT THE WORD                              FMDHT
          STI    PA          SAVE THE WORD                               FMDHT
          RJM    IJM         INSURE THE CHANNEL DEACTIVATES              FMDHT
          NJN    SEEK0       EXIT TO STACK IF NOT TIMED OUT              HTENT
 RTNADDR4 LJM    ERRNIDT     ELSE ERROR EXIT                             FMDHT
          EJECT                                                          FMDHT
 SEEK     TITLE  SEEK - SEEK TO THE ADDRESS SPECIFIED.                   FMDHT
**        SEEK   - SEEK TO THE ADDRESS SPECIFIED.                        FMDHT
*                                                                        FMDHT
*                  SEEK CYL W TRK X SEC Y, ABT Z                         FMDHT
*                                                                        FMDHT
*         ENTRY  - (CC) = W 
*                  (CT) = X                                                   13
*                  (CS) = Y                                                   13
*                                                                        FMDHT
*         EXIT   - SEEK COMPLETED TO NEW ADDRESS                         FMDHT
*                                                                        FMDHT
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  FMDHT
*                  ERRCNC  - IF CONTROLLER/DRIVE NOT CONNECTED           FMDHT
*                  ERRFPNA - IF FUNCTION PARAMETERS NOT ACCEPTED         FMDHT
*                  ERRUHB  - IF THE UNIT IF BUSY FOR OVER 200 MSEC       FMDHT
*                                                                        FMDHT
*         USES   - P, SEEKA(0-4), SBIE, D.T1, D.T2                       FMDHT
*                                                                        FMDHT
*         CALLS  - TDR, STS, FNC, DST                                    FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            FMDHT
*                                                                        FMDHT
 SEEK     RJM    TDR         INSURE DRIVE CONNECTED 
          RJM    SEEK1       TO DO A SEEK                                FMDHT
 SEEK0    LJM    XENT        EXIT TO STACK                               HTENT
                                                                         FMDHT
 SEEK1X   LJM    **          SECONDARY ENTRY/EXIT                        FMDHT
 SEEK1    EQU    *-1                                                     FMDHT
          LDN    0                                                       FMDHT
          STD    SEEKA       CLEAR CURRENT SEEK TIME                     FMDHT
          STM    FPRECYL     CLEAR PRE-ALLOCATED CYL FLAG                DIMA320
          RJM    STS         TO GET STATUS                               FMDHT
          SHN    17D-CRES                                                FMDHT
          PJN    SEEK3       IF COUPLER RESERVED                         FMDHT
          LJM    ERRCNC      ELSE IT IS AN ERROR                         FMDHT
                                                                         FMDHT
                                                                         FMDHT
**     2. PRESET SEEK FUNCTION DATA                                      FMDHT
*                                                                        FMDHT
 SEEK3    LDM    UN          UNIT NUMBER                                 FMDHT
          STD    SEEKA+1                                                 FMDHT
          LDI    CC          CURRENT CYLINDER                            FMDHT
          STD    SEEKA+2                                                 FMDHT
          LDI    CT          CURRENT TRACK                               FMDHT
          STD    SEEKA+3                                                 FMDHT
          LDI    CS          CURRENT SECTOR                              FMDHT
          STD    SEEKA+4                                                 FMDHT
                                                                         FMDHT
**     3. ISSUE A 2 TO 1 SEEK FUNCTION (0002).                              FMDH
*                                                                        FMDHT
          IANN   14B         INPUT THE REAL TIME CLOCK                   FMDHT
          STD    D.T1                                                    FMDHT
 SEEK5    LDN    SEK21                                                   FMDHT
          RJM    FNC         TO SEND A FUNCTION                          FMDHT
                                                                         FMDHT
**     4. OUTPUT 4 SEEK PARAMETER WORDS AND STORE THE NUMBER OF WORDS    FMDHT
*         ACTUALLY OUTPUT INTO THE WT REGISTER. VERIFY THAT 4 WORDS      FMDHT
*         WERE ACTUALLY TRANSMITTED.                                     FMDHT
*                                                                        FMDHT
          LDN    4           WORD COUNT                                  FMDHT
          ACN    CH+40B      ACTIVATE THE CHANNEL                        FMDHT
          OAM    SEEKA+1,CH  OUTPUT THE SEEK DATA                        FMDHT
          ZJN    SEEK6       IF OUTPUT COMPLETE                          FMDHT
          LJM    ERRFPNA     ELSE ERROR EXIT                             FMDHT
                                                                         FMDHT
 SEEK6    DCN    CH+40B      DEACTIVATE THE CHANNEL                      FMDHT
                                                                         FMDHT
**     5. REQUEST AND INPUT GENERAL STATUS.                              FMDHT
*                                                                        FMDHT
          RJM    STS         TO OBTAIN STATUS                            FMDHT
                                                                         FMDHT
**     6. GO TO STEP 3 IF UNIT IS STILL BUSY AND 200 MSEC HAS NOT        FMDHT
*         ELAPSED (ABORT WHEN TIME ELAPSES).                             FMDHT
*                                                                        FMDHT
          SHN    17D-BUSY    TEST FOR BUSY                               FMDHT
          PJN    SEEK11      IF NOT BUSY JUMP                            FMDHT
          LDC    1000D       ELSE WAIT AND TRY AGAIN                     FMDHT
          RAD    D.T1                                                    FMDHT
 SEEK8    IANN   14B         CHECK CLOCK AGAIN                           FMDHT
          STD    D.T2                                                    FMDHT
          LDD    D.T1                                                    FMDHT
          SBD    D.T2                                                    FMDHT
          ZJN    SEEK9       IF TIMING LOOP IS COMPLETE                  FMDHT
          SHN    17D-11D     TO ELIMINATE CLOCK WRAP AROUND               FMDHT 
          PJN    SEEK8       IF NOT TIMED OUT                            FMDHT
 SEEK9    AOD    SEEKA       INCREMENT ITERATION COUNT IF TIMED OUT      FMDHT
          SHN    -8                                                      DIMA320
          ZJN    SEEK5       IF NOT BUSY FOR 256 MSEC                    DIMA320
                                                                         FMDHT
          LDC    ER.UHB      AND ERROR EXIT                              FMDHT
 ERRDST   STD    D.T2                                                    FMDHT
          RJM    DST         GET DETAIL STATUS                           FMDHT
          LDD    D.T2                                                    FMDHT
          LJM    ERR                                                     FMDHT
                                                                         FMDHT
**     7. STORE THE NUMBER OF MILLISECONDS REQUIRED TO COMPLETE THE      FMDHT
*         SEEK INTO SB(60).                                              FMDHT
*                                                                        FMDHT
 SEEK11   LDD    SEEKA                                                   FMDHT
          ZJN    SEEK11A     IF NO SEEK TIME                             FMDHT
          SBN    1           ADJUST SEEK TIME                            FMDHT
 SEEK11A  STM    SEEKTIM     THIS IS MILLISEC. COUNT REQUIRED FOR SEEK   FMDHT
          SHN    -1                                                      FMDHT
          RAD    RT          INCREMENT I/O LIMIT                         FMDHT
                                                                         FMDHT
**     8. IF GENERAL STATUS IS ZERO, EXIT.  OTHERWISE, REQUEST AND       FMDHT
*         INPUT DETAIL STATUS AND EXECUTE THE ERROR EXIT SEQUENCE.       FMDHT
*                                                                        FMDHT
          LDM    SB                                                      FMDHT
          ZJN    SEEK13      IF ZERO AFTER NOT BUSY                      FMDHT
 ERRAGS   LDC    ER.AGS      AND ERROR EXIT                              FMDHT
          UJN    ERRDST      ERROR EXIT                                  FMDHT
                                                                         FMDHT
 SEEK13   LDC    MAXCDD-PRECYL+1                                         DIMA320
          SBI    CC          SUBTRACT CURRENT CYL                        DIMA320
          PJN    SEEK14      IF NOT PRE-ALLOCATED CYL                    DIMA320
          AOM    FPRECYL     FLAG PRE-ALLOCATED CYL                      DIMA320
 SEEK14   LJM    SEEK1X      RETURN                                      DIMA320
          EJECT                                                          FMDHT
 STATUS   TITLE  STATUS - GET GENERAL, DETAIL OR CHANNEL STATUS.         FMDHT
**        STATUS - GET GENERAL, DETAIL OR CHANNEL STATUS.                FMDHT
*                                                                        FMDHT
*                  STATUS GENERAL, ABT Z                                 FMDHT
*                  STATUS DETAIL, ABT Z                                  FMDHT
*                  STATUS CHANNEL, ABT Z                                 FMDHT
*                                                                        FMDHT
*          GENERAL - INPUT 1 WORD OF GENERAL STATUS TO  SB(0).           FMDHT
*          DETAIL  - INPUT 20D WORDS OF DETAIL STATUS TO SB(1)-SB(20D)   FMDHT
*          CHANNEL - INPUT 30D WORDS OF CHANNEL STATUS TO SB(1)-SB(30D)  FMDHT
*                                                                        FMDHT
*         ENTRY  - (PA) = CODE          0 = GENERAL                      HTENT
*                                       1 = DETAIL                       FMDHT
*                                       2 = CHANNEL                      FMDHT
*                                                                        FMDHT
*         EXIT   - (A)  = STATUS (IF GENERAL STATUS IS SELECTED)         FMDHT
*                  (SB), OR (SB 0-24) = STATUS OR DETAIL.                FMDHT
*                                                                        FMDHT
*                  ERRISR - ERROR EXIT IF INCOMPLETE STATUS RETURNED     FMDHT
*                                                                        FMDHT
*         USES   - LF, P, D.T1, SB, WT                                   FMDHT
*                                                                        FMDHT
*         CALLS  - ERA, TCO, STS, DST, FNC, FJM, IJM                     FMDHT
*                                                                        FMDHT
                                                                         FMDHT
**     1. STORE 7777B INTO THE STATUS BUFFER FOR WORDS ABOUT TO BE READ  FMDHT
*                                                                        FMDHT
**     2. VERIFY THAT THE CONTROLLER IS CONNECTED.                       FMDHT
*                                                                        FMDHT
 STATUS   RJM    TCO         TEST CONTROLLER CONNECTED                   DIMA345
          STD    WT          CLEAR WT REGISTER                           DIMA345
                                                                         FMDHT
**     3. ISSUE THE SELECTED STATUS FUNCTION SPECIFIED BY THE KEYWORD    FMDHT
*         GENERAL (0012), DETAIL (0023).                                 FMDHT
*                                                                        FMDHT
*      4. INPUT THE REQUIRED NUMBER OF WORDS TO THE STATUS BUFFER        FMDHT
*         (1, OR 24B).                                                   FMDHT
*                                                                        FMDHT
          LDD    PA          LOAD CODE                                   FMDHT
          NJN    STATUS3     IF DETAIL STATUS REQUEST                    FMDHT
          LDN    GS                                                      FMDHT
          STD    LF          SAVE LAST PRIMARY FUNCTION                  FMDHT
          RJM    STS         GET GENERAL STATUS                          FMDHT
          UJN    STATUS4                                                 FMDHT
                                                                         FMDHT
 STATUS3  SBN    1                                                       FMDHT
          NJN    STATUS5     IF NOT STATUS DETAIL                        FMDHT
          LDN    EDS         SAVE LAST FUNCTION                          FMDHT
          STD    LF          SAVE LAST PRIMARY FUNCTION                  FMDHT
          RJM    DST         GET DETAIL STATUS                           FMDHT
 STATUS4  LJM    XENT        EXIT TO STACK                               HTENT
                                                                         FMDHT
 STATUS5  LDN   IPCS                                                     DIMA345
          RJM    FNC         SEND FUNCTION TO PROCESSOR                  FMDHT
          ACN    CH+40B                                                  FMDHT
          RJM    FJM         WAIT FOR FULL                               FMDHT
          ZJN    STATUS6     IF CHANNEL DID NOT GO FULL                  DIMA353
          LDN    32D                                                     DIMA252
          IAM    SB+1,CH     INPUT PROCESSOR CHANNEL STATUS              FMDHT
          NJN    STATUS6                                                 FMDHT
          RJM    IJM         WAIT FOR INACTIVE                           FMDHT
          NJN    STATUS4     IF OK EXIT TO STACK                           FMDHT
 STATUS6  UJN    ERRISR                                                  DIMA353
          EJECT                                                          FMDHT
 DST      TITLE  UTILITIES USED BY DEMA1 PRODUCT OVERLAY.                  DEMA1
**        DST    - OBTAIN DETAIL STATUS.                                 FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  FMDHT
*                                                                        FMDHT
*         EXIT   - STATUS BUFFER CONTAINS THE CURRENT DETAIL STATUS.     FMDHT
*                  TO BE USED FOR ERROR CHECKING.                        FMDHT
*                                                                        FMDHT
*                - (A) = (SB+13D)                                        DIMA599
*                                                                        DIMA599
*                  ERRISR  - IF INCOMPLETE STATUS RETURNED               FMDHT
*                  ERRNIDS - IF NO INACTIVE TO DETAIL STATUS             FMDHT
*                                                                        FMDHT
*         USES   - D.T1, SB(1-24)                                        FMDHT
*                                                                        FMDHT
*         CALLS  - FNA, FJM, IJM                                         FMDHT
*                                                                        FMDHT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 247+ MICROSEC.     FMDHT
*                                                                        FMDHT
 DST0     LDM    SB+13       DETAIL STATUS WORD 13                       DIMA599
          LJM    **          ENTRY/EXIT                                  FMDHT
 DST      EQU    *-1                                                     FMDHT
                                                                         FMDHT
**        1.  STORE 7777B INTO ALL WORDS                                 FMDHT
*                                                                        FMDHT
          LDN    24B                                                     FMDHT
          STD    D.T1                                                    FMDHT
 DST1     LCN    0                                                       FMDHT
          STM    SB,D.T1                                                 FMDHT
          SOD    D.T1                                                    FMDHT
          NJN    DST1        DO ALL WORDS                                FMDHT
                                                                         FMDHT
**        2. ISSUE DETAIL EXTENDED STATUS FUNCTION.                      FMDHT
*                                                                        FMDHT
          LDN    EDS                                                     FMDHT
          RJM    FNA         ISSUE STATUS FUNCTION                       FMDHT
          NJN    DST2        IF FUNCTION ACCEPTED                        FMDHT
          LDC    ER.NIDS     ERROR IF NO INACTIVE TO DETAIL STATUS       FMDHT
          UJN    DST4                                                    FMDHT
                                                                         FMDHT
**        3. INPUT STATUS AND RETURN.                                    FMDHT
*                                                                        FMDHT
 DST2     ACN    CH+40B                                                  FMDHT
          RJM    FJM         WAIT FOR FULL                               FMDHT
          ZJN    ERRISR      IF FULL NOT RECEIVED                        FMDHT
          LDN    24B                                                     FMDHT
          IAM    SB+1,CH                                                 FMDHT
          NJN    ERRISR      IF ALL WORDS NOT INPUT                      FMDHT
          RJM    IJM         VERIFY INACTIVE IS RECEIVED                 FMDHT
          NJN    DST0        IF INACTIVE RECEIVED                        DIMA599
 ERRISR   LDC    ER.ISR      ERROR IF INCOMPLETE STATUS RETURNED         FMDHT
 DST4     UJN    FNC1                                                    DIMA353
          SPACE  4,22                                                    FMDHT
**        FJM    - WAIT FOR CHANNEL TO GO FULL.                          FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  FMDHT
*                                                                        FMDHT
*         EXIT   - (A) NONZERO IF NOT TIMED OUT WAITING FULL             FMDHT
*                  (A) ZERO IF TIMED OUT                                 FMDHT
*                                                                        FMDHT
*         USES   - D.T1                                                  FMDHT
*                                                                        FMDHT
*         CALLS  - NONE                                                  FMDHT
*                                                                        FMDHT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC.        FMDHT
*                                                                        FMDHT
 FJMX     LJM    **          ENTRY/EXIT                                  FMDHT
 FJM      EQU    *-1                                                     FMDHT
          LDC    TIMFJM*2    ITERATION TIME                              DIMA215
 FJM1     FJM    FJMX,CH     IF FULL EXIT                                FMDHT
 FJM2     SBN    4           *** SBN 4 IF 1X SPEED PPU ***               DIMA215
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***               DIMA215
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***               DIMA215
          NJN    FJM1        IF TIME NOT COUNTED DOWN                    FMDHT
          UJN    FJMX        ELSE EXIT WITH A EQ. ZERO                   FMDHT
          SPACE  4,21                                                    FMDHT
**        FNC    - ISSUE A FUNCTION ON A CHANNEL AND WAIT INACTIVE.      FMDHT
*                                                                        FMDHT
*         ENTRY  - (A) = FUNCTION TO ISSUE                               FMDHT
*                                                                        FMDHT
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED.                   FMDHT
*                                                                        FMDHT
*                  ERRNIF  - IF NO INACTIVE TO FUNCTION                  FMDHT
*                                                                        FMDHT
*         USES   - LF                                                    FMDHT
*                                                                        FMDHT
*         CALLS  - FNA                                                   FMDHT
*                                                                        FMDHT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 22 MICROSEC.       FMDHT
*                                                                        FMDHT
 FNCX     LJM    **          ENTRY/EXIT                                  FMDHT
 FNC      EQU    *-1                                                     FMDHT
          STD    LF          TO SAVE LAST MAJOR FUNCTION                 FMDHT
          RJM    FNA         TO FUNCTION AND WAIT INACTIVE               FMDHT
          NJN    FNCX        IF INACTIVE EXIT                            FMDHT
          LDC    ER.NIF      ELSE ERROR EXIT                             FMDHT
 FNC1     UJN    FNO1                                                    DIMA353
          SPACE  4,17                                                    FMDHT
**        FNA    - ISSUE A FUNCTION AND WAIT INACTIVE.                   FMDHT
*                                                                        FMDHT
*         ENTRY  - (A) = FUNCTION TO ISSUE                               FMDHT
*                                                                        FMDHT
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED                    FMDHT
*                                                                        FMDHT
*         USES   - NONE                                                  FMDHT
*                                                                        FMDHT
*         CALLS  - IJM                                                   FMDHT
*                                                                        FMDHT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 14 MICROSEC.       FMDHT
*                                                                        FMDHT
 FNAX     LJM    **          ENTRY/EXIT                                  FMDHT
 FNA      EQU    *-1                                                     FMDHT
          FAN    CH+40B      FUNCTION FROM A                             FMDHT
          RJM    IJM         WAIT FOR INACTIVE                           FMDHT
          UJN    FNAX        EXIT                                        FMDHT
          SPACE  4,29                                                    FMDHT
**        FNO    - ISSUE FUNCTION AND OUTPUT ONE WORD OF DATA.           FMDHT
*                                                                        FMDHT
*         ENTRY  - (A)  = FUNCTION DESIRED                               FMDHT
*                  D.T4 = DATA WORD TO OUTPUT                            FMDHT
*                                                                        FMDHT
*         EXIT   - ERRFPNA - IF FUNCTION PARAMETER NOT ACCEPTED          FMDHT
*                                                                        FMDHT
*         USES   - NONE                                                  FMDHT
*                                                                        FMDHT
*         CALLS  - FNC                                                   FMDHT
*                                                                        FMDHT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 40 MICROSEC.       FMDHT
*                                                                        FMDHT
 FNOX     LJM    **          ENTRY/EXIT                                  FMDHT
 FNO      EQU    *-1                                                     FMDHT
          RJM    FNC         TO SEND FUNCTION                            FMDHT
          ACN    CH+40B      ACTIVATE THE CHANNEL                        FMDHT
          LDN    1                                                       FMDHT
          OAM    D.T4,CH                                                 DIMA353
          ZJN    FNO2        IF PARAMETER WAS ACCEPTED                   FMDHT
 ERRFPNA  LDC    ER.FPNA     ELSE ERROR EXIT                             FMDHT
 FNO1     LJM    ERR                                                     FMDHT
                                                                         FMDHT
 FNO2     EJM    FNO3,CH                                                 DIMA353
          ADN    1                                                       DIMA353
          PJN    FNO2        LOOP ON CHANNEL EMPTY TEST                  DIMA353
          LJM    ERRDNA      ERROR EXIT IF CHANNEL DID NOT GO EMPTY      DIMA353
                                                                         DIMA353
 FNO3     DCN    CH+40B                                                  DIMA353
          UJN    FNOX        EXIT                                        FMDHT
          SPACE  4,22                                                    FMDHT
**        IJM    - WAIT INACTIVE AND TIME OUT.                           FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  FMDHT
*                                                                        FMDHT
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED                    FMDHT
*                        ZERO IF FUNCTION NOT ACCEPTED                   FMDHT
*                                                                        FMDHT
*         USES   - NONE                                                  FMDHT
*                                                                        FMDHT
*         CALLS  - NONE                                                  FMDHT
*                                                                        FMDHT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC.        FMDHT
*                                                                        FMDHT
 IJMX     LJM    **          ENTRY/EXIT                                  FMDHT
 IJM      EQU    *-1                                                     FMDHT
          LCN    3                                                       DIMA215
 IJM1     IJM    IJMX,CH     IF INACTIVE EXIT                            FMDHT
 IJM2     SBN    4           *** SBN 4 IF 1X SPEED PPU ***               DIMA215
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***               DIMA215
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***               DIMA215
          NJN    IJM1        IF NOT COUNTED DOWN                         FMDHT
          UJN    IJMX        ELSE EXIT W/(A) = ZERO                      FMDHT
          SPACE  4,49                                                    FMDHT
**        OPC    - RELEASE THE CONTROLLER WITH AN OPERATION COMPLETE.    FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  FMDHT
*                                                                        FMDHT
*         EXIT   - (A) = ZERO IF CONTROLLER NOT CONNECTED                FMDHT
*                      = NONZERO IF OPERATION COMPLETE ACCEPTED          FMDHT
*                                                                        FMDHT
*         USES   - NONE                                                  FMDHT
*                                                                        FMDHT
*         CALLS  - FNC                                                   FMDHT
*                                                                        FMDHT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 44 MICROSEC.       FMDHT
*                                                                        FMDHT
 OPCX     LJM    **          ENTRY/EXIT                                  FMDHT
 OPC      EQU    *-1                                                     FMDHT
          LDM    BD.CHFG                                                 FMDHT
          ZJN    OPCX        EXIT IF CHANNEL NOT RESERVED                FMDHT
          LDM    COCON                                                   FMDHT
          NJN    OPCX        EXIT IF CONTROLLER NOT RESERVED             FMDHT
          STM    FPRECYL     CLEAR PRE-ALLOCATED CYLINDER FLAG           DIMA320
          AOM    COCON       CLEAR CONTROLLER CONNECT FLAG               DIMA252
          AOM    DRCON       CLEAR DRIVE CONNECT FLAG                    DIMA252
          LDC    **                                                      FMDHT
 OPC1     EQU    *-1         DETAIL STATUS WORD 13 STORED HERE           FMDHT
          SBN    2                                                       DIMA599
          MJN    OPC3        IF CONTROLLER NOT RESERVED                  DIMA599
          NJN    OPCX        IF CONTROLLER AND UNIT RESERVED             DIMA599
          LDN    DREL        DRIVE RELEASE FUNCTION                      FMDHT
          UJN    OPC4                                                    FMDHT
                                                                         FMDHT
 OPC2     UJN    OPCX        RETURN                                      FMDHT
                                                                         FMDHT
*         THE RELEASE REQUEST CAME FROM THE BASIC DRIVER, SO PROCESS     FMDHT
*         IT WITHOUT CHANGING ANY DATA OR CREATING AN ERROR EXIT.        FMDHT
                                                                         FMDHT
 OPC3     LDN    OC                                                      FMDHT
 OPC4     STD    D.T5                                                    FMDHT
          LDM    ERR3        UPPER BITS OF ABT ADDRESS                   FMDHT
          SBN    77B                                                     FMDHT
          NJN    OPC5        IF REQUEST IS FROM THE USER                 FMDHT
          LDD    D.T5                                                    FMDHT
          RJM    FNA         EXECUTE OPERATION COMPLETE FUNCTION         FMDHT
          NJN    OPC2        EXIT IF NOT FUNCTION TIMEOUT                FMDHT
          DCN    CH+40B      ELSE DO A DISCONNECT                        FMDHT
          UJN    OPC2        AND EXIT                                    FMDHT
                                                                         FMDHT
 OPC5     LDD    D.T5                                                    FMDHT
          RJM    FNC         TO FUNCTION OPERATION COMPLETE              FMDHT
          UJN    OPC2        EXIT                                        FMDHT
          SPACE  4,39                                                    FMDHT
**        STS    - REQUEST AND INPUT GENERAL STATUS.                     FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  FMDHT
*                                                                        FMDHT
*         EXIT   - (A) = STATUS                                          FMDHT
*                                                                        FMDHT
*                  ERRGSNR - IF GENERAL STATUS NOT RETURNED              FMDHT
*                  ERRNIGS - IF NO INACTIVE TO GENERAL STATUS            FMDHT
*                                                                        FMDHT
*         USES   - SB                                                    FMDHT
*                                                                        FMDHT
*         CALLS  - FNA, FJM, IJM                                         FMDHT
*                                                                        FMDHT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 60 MICROSEC.       FMDHT
*                                                                        FMDHT
 STSXX    LDM    SB          LOAD STATUS AND EXIT                        FMDHT
          LJM    **          ENTRY/EXIT                                  FMDHT
 STS      EQU    *-1                                                     FMDHT
          LCN    0                                                       FMDHT
          STM    SB          NEGATIVE ZERO TO SB                         FMDHT
          LDN    GS                                                      FMDHT
          RJM    FNA         ISSUE GENERAL STATUS FUNCTION               FMDHT
          NJN    STS1        IF FUNCTION ACCEPTED                        FMDHT
          LDC    ER.NIGS     ERROR IF NO INACTIVE TO GS FUNCTION         FMDHT
          UJN    STS3        JUMP TO ERR                                 DIMA152
                                                                         FMDHT
 STS1     LDN    0                                                       DIMA599
          STM    COCON       SET CONTROLLER CONNECTED                    DIMA599
          ACN    CH+40B                                                  DIMA599
          RJM    FJM         WAIT FOR FULL                               FMDHT
          ZJN    STS2        IF NO FULL RECEIVED                         FMDHT
          LDN    1                                                       FMDHT
          IAM    SB,CH       INPUT GENERAL STATUS                        FMDHT
          NJN    STS2        IF NO STATUS PROVIDED                       FMDHT
          RJM    IJM         WAIT FOR INACTIVE                           FMDHT
          NJN    STSXX       EXIT IF INACTIVE RECEIVED                   FMDHT
 STS2     LDC    ER.GSNR     ERROR IF NO FULL OR NO INACTIVE             FMDHT
 STS3     UJN    TCA1        JUMP TO ERR                                 DIMA152
          SPACE  4,18                                                    FMDHT
**        TCA    - TEST CHANNEL ASSIGNMENT.                              FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  HTENT
*                                                                        FMDHT
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4                   FMDHT
*                                                                        FMDHT
*                  ERRCNA  - IF CHANNEL NOT ASSIGNED                     FMDHT
*                                                                        FMDHT
*         CALLS  - ERA                                                   FMDHT
*                                                                        FMDHT
*         USES   - NONE                                                  FMDHT
*                                                                        FMDHT
 TCAX     LJM    **          ENTRY/EXIT                                  FMDHT
 TCA      EQU    *-1                                                     FMDHT
          LDM    BD.CHFG                                                 FMDHT
          NJN    TCAX        EXIT IF CHANNEL ASSIGNED                    FMDHT
          LDC    ER.CNA      ERROR IF CHANNEL NOT RESERVED               FMDHT
 TCA1     UJN    ERR                                                     DIMA152
          SPACE  4,18                                                    FMDHT
**        TCO    - TEST CONTROLLER CONNECTED.                            FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  HTENT
*                                                                        FMDHT
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4                   FMDHT
*                  WC SET TO WRRD                                        FMDHT
*                                                                        FMDHT
*         USES   - WC                                                    FMDHT
*                                                                        FMDHT
*         CALLS  - TCA                                                   FMDHT
*                                                                        FMDHT
 TCOX     LJM    **          ENTRY/EXIT                                  FMDHT
 TCO      EQU    *-1                                                     FMDHT
          RJM    TCA         CHECK ACTIVE                                HTENT
          LDC    **                                                      FMDHT
 COCON    EQU    *-1         *** CONTROLLER CONNECTED FLAG STORED HERE   FMDHT
          ZJN    TCOX        IF CONNECTED                                FMDHT
          UJN    ERRCNC      ELSE ERROR EXIT                             FMDHT
          SPACE  4,17                                                    FMDHT
**        TDR    - TEST DRIVE RESERVED.                                  FMDHT
*                                                                        FMDHT
*         ENTRY  - NONE                                                  HTENT
*                                                                        FMDHT
*         EXIT   - NONE                                                  FMDHT
*                                                                        FMDHT
*         USES   - NONE                                                  FMDHT
*                                                                        FMDHT
*         CALLS  - TCO                                                   FMDHT
*                                                                        FMDHT
 TDRX     LJM    **          ENTRY/EXIT                                  FMDHT
 TDR      EQU    *-1                                                     FMDHT
          RJM    TCO         CHECK CONTROLLER CONNECTED                  HTENT
          LDC    **                                                      FMDHT
 DRCON    EQU    *-1         *** DRIVE CONNECTED FLAG STORED HERE.       FMDHT
          ZJN    TDRX        IF CONNECTED EXIT                           FMDHT
 ERRCNC   LDC    ER.CNC      ELSE ERROR EXIT                             FMDHT
          EJECT                                                          FMDHT
**        ERR    - ERROR EXIT SUBROUTINE                                 FMDHT
*                                                                        FMDHT
*         ENTRY  - (A) = MESSAGE ADDRESS INDEX                           FMDHT
*                                                                        FMDHT
*         EXIT   - (A) = ABORT ADDRESS FOR AN ABORT                      FMDHT
*                  (A) = LINE NUMBER FOR MODULE TERMINATE                FMDHT
*                                                                        FMDHT
*         USES   - D.Z1, D.Z2, EC, EM, EA                                FMDHT
*                                                                        FMDHT
*         CALLS  - NONE                                                  FMDHT
*                                                                        FMDHT
 ERR      STD    D.Z1        SAVE MESSAGE INDEX AND ERROR NUMBER         FMDHT
          SHN    -12                                                     FMDHT
          STD    D.Z2        SAVE ABORT FLAG                             FMDHT
          LDM    BD.CHFG                                                 FMDHT
          ZJN    ERR2        IF CHANNEL IS NOT ASSIGNED                  FMDHT
          LDD    BD.AL                                                   FMDHT
          SBN    AL21                                                    FMDHT
          ZJN    ERR2        IF ACCESS LEVEL INDICATES NO CHAN CLEANUP   FMDHT
          IJM    ERR2,0      CLEAN UP CHANNEL                            FMDHT
          DCN    40B                                                     FMDHT
 ERR2     LDD    D.Z1                                                    FMDHT
          LPN    77B         MASK ERROR CODE                             FMDHT
          ADC    5500B       ADD IN BIAS FOR DEMA1 PRODUCT OVERLAY       DEMAHT 
          STD    EC          STORE ERROR CODE                            FMDHT
          LDD    D.Z1                                                    FMDHT
          SHN    -6                                                      FMDHT
          ADC    100B        FLAG MESSAGE INDEX AS OVERLAY MESSAGE       FMDHT
          STD    EM          STORE MESSAGE INDEX                         FMDHT
          LDD    P                                                       FMDHT
          STD    EA          STORE LINE NUMBER WHERE ERROR OCCURRED      FMDHT
          LDD    D.Z2                                                    FMDHT
          NJN    ERR5        IF ABORT FLAG SET                           FMDHT
          LDC    **                                                      FMDHT
 ERR3     EQU    *-1         FOR ABORT ADDRESS                           FMDHT
          SHN    12                                                      FMDHT
          LMC    **                                                      FMDHT
 ERR4     EQU    *-1         FOR ABORT ADDRESS                           FMDHT
          LJM    BD.RNI      RNI AT THE REJECT ADDRESS                   FMDHT
                                                                         FMDHT
 ERR5     LJM    BD.ABT      TERMINATE MODULE                            FMDHT
                                                                         FMDHT
 IB       EQU    6500B       INPUT BUFFER                                FMDHT
 LIB      EQU    505B        LENGTH OF INPUT AND OUTPUT BUFFERS          FMDHT
 OB       EQU    IB+LIB      OUTPUT BUFFER                               FMDHT
 SB       EQU    OB+LIB      STATUS BUFFER                               FMDHT
 SBIE     EQU    SB+25B      STATUS THAT DETECTED THE ERROR              FMDHT
 RETRY    EQU    SB+52B      RETRY COUNT                                 FMDHT
 RDWAL    EQU    SB+53B      AL REQUIRED FOR READ NON PREALLOCATED       DIMA152
 SERNUM1  EQU    SB+56B      FIRST HALF OF PACK SERIAL NUMBER            FMDHT
 SERNUM2  EQU    SB+57B      SECND HALF OF PACK SERIAL NUMBER            FMDHT
 SEEKTIM  EQU    SB+60B      LAST SEEK TIME                              FMDHT
 RESA     EQU    SB+64B      ITERATION COUNT FOR RES COMMAND             DIMA152
 LSB      EQU    64B         LENGTH OF STATUS BUFFER                     FMDHT
                                                                         FMDHT
          ERRPL  *-IB-1      ERROR IF FMDHT PRODUCT OVERLAY OVERFLOW     FMDHT
          EJECT                                                          FMDHT
 INIT     TITLE  INIT - INITIALIZATION.                                  FMDHT
**        THE INITIALIZATION CODE THAT FOLLOWS IS OVERLAYED BY THE       FMDHT
*         PRODUCT OVERLAY BUFFERS ABOVE.                                 FMDHT
*                                                                        FMDHT
*         TEST EQUIPMENT AND UNIT NUMBER                                 FMDHT
*                                                                        FMDHT
 INIT     LDN    0                                                       FMDHT
          STD    D.Z1        CLEAR COUNTER                               FMDHT
 INIT0    LDN    0                                                       FMDHT
          STM    SB,D.Z1     CLEAR STATUS BUFFER                         FMDHT
          AOD    D.Z1                                                    FMDHT
          SBN    LSB                                                     FMDHT
          NJN    INIT0       IF STATUS BUFFER NOT CLEARED                FMDHT
          LDM    BD.SN                                                   FMDHT
          STM    SERNUM1     SAVE USER SUPPLIED SERIAL NUMBER IN SB      FMDHT
          LDM    BD.SN+1                                                 FMDHT
          STM    SERNUM2                                                 FMDHT
          LDM    BD.EQ                                                   FMDHT
          LPN    77B                                                     FMDHT
          STM    SB+63B      UNIT TO STATUS BUFFER                       FMDHT
          ADC    1000B       SET LARGE SECTOR BIT (BIT 9) 
          STM    UN          SET UNIT NUMBER                             FMDHT
          LDN    0                                                       FMDHT
          STM    SB+62B      EQUIPMENT NUMBER TO STATUS BUFFER           FMDHT
                                                                         FMDHT
*         SET DELAY TIME BASED ON SPEED OF PPU                           FMDHT
                                                                         FMDHT
          LDC    TSPEED                                                  DIMA215
          STD    D.T0                                                    FMDHT
 INIT2    LDI    D.T0                                                    FMDHT
          ZJN    INIT3       IF END OF TABLE                             FMDHT
          STD    D.T1                                                    FMDHT
          LDI    D.T1                                                    FMDHT
          SCN    77B                                                     DIMA215
          ADM    BD.SPEED                                                DIMA215
          STI    D.T1        SET ADN/SBN/VALUE                           DIMA215
          AOD    D.T0                                                    FMDHT
          UJN    INIT2       COMPLETE ALL WORDS                          FMDHT
                                                                         FMDHT
*         STORE I/O CHANNEL INTO COMMANDS                                FMDHT
                                                                         FMDHT
 INIT3    LDM    BD.CHAN                                                 FMDHT
          STD    D.T2                                                    FMDHT
          STM    SB+61B      I/O CHANNEL TO STATUS BUFFER                FMDHT
          LDC    TCHAN                                                   FMDHT
          STD    D.T0        SET FWA OF TABLE CONTAINING ADDRESSES       FMDHT
 INIT4    LDI    D.T0                                                    FMDHT
          ZJN    INIT5       IF END OF TABLE                             FMDHT
          STD    D.T1                                                    FMDHT
          LDI    D.T1                                                    FMDHT
          LPC    7740B                                                   FMDHT
          ADD    D.T2                                                    FMDHT
          STI    D.T1                                                    FMDHT
          AOD    D.T0                                                    FMDHT
          UJN    INIT4       COMPLETE ALL WORDS                          FMDHT
                                                                         FMDHT
*         WRITE PP MESSAGES TO CM                                        FMDHT
                                                                         FMDHT
 INIT5    LDM    BD.MSGA     GET PP MESSAGE AREA ADDRESS                 FMDHT
          STD    D.T6        SAVE IT                                     FMDHT
          ADC    MMSGL.      ADD LENGTH                                  DIMA234
          RJM    BD.TFL      SEE IF IN FL                                FMDHT
          LDN    P.ZERO      CLEAR CELLS, D.Z1=PP MESSAGE ADDRESS        FMDHT
          CRD    D.Z1        D.Z2=D.T0-D.T4 POINTER, D.Z3=CM WD COUNTER  FMDHT
 INIT6    LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD                         FMDHT
          ZJN    INIT8       IF END OF MESSAGE                           FMDHT
 INIT7    STM    D.T0,D.Z2   STORE IN D.T0+                              FMDHT
          AOD    D.Z1        BUMP PP MESSAGE POINTER                     FMDHT
          UJN    INIT9                                                   FMDHT
 INIT8    LDC    2R          MESSAGE END, STORE BLANKS                   FMDHT
          STM    D.T0,D.Z2                                               FMDHT
 INIT9    AOD    D.Z2        BUMP D.T0+ POINTER                          FMDHT
          SBN    5                                                       FMDHT
          NJN    INIT6       IF NOT 5 PP WORDS                           FMDHT
          STD    D.Z2        CLEAR POINTER                               FMDHT
          LDD    D.RA        PUT RA IN A REG                             FMDHT
          SHN    6                                                       FMDHT
          ADD    D.T6        ADD MESSAGE ADDRESS                         FMDHT
          CWD    D.T0        WRITE ONE WORD FROM D.T0                    FMDHT
          AOD    D.T6        UPDATED ADDRESS                             FMDHT
          AOD    D.Z3        BUMP CM WORD COUNTER                        FMDHT
          SBN    BD.MSGML                                                FMDHT
          NJN    INIT6       IF NOT BD.MSGML CM WORDS                    FMDHT
          STD    D.Z3        CLEAR CM WORD COUNTER                       FMDHT
          LDM    PPMSGS,D.Z1                                             FMDHT
          ZJN    INIT10      IF MESSAGE ENDED IN ZERO BYTE               FMDHT
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR                   FMDHT
 INIT10   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE     FMDHT
          LDM    PPMSGS,D.Z1                                             FMDHT
          NJN    INIT7       IF NOT LAST MESSAGE                         FMDHT
                                                                         FMDHT
*         SET DIRECT CELLS                                               FMDHT
                                                                         FMDHT
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER            FMDHT
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER            FMDHT
          LDC    100D        100 MSEC DELAY IN BD.RCH                    DIMA253
          STM    DLYDCH      MODIFY DELAY USED ON REL AND RES CHANNEL    DIMA152
          LDN    ARD                                                     DIMA152
          STM    RDWAL       SET AL FOR READ NON PREALLOCATED            DIMA152
          LDN    ARW                                                     DIMA152
          STM    RDWAL+1     SET AL FOR WRITE NON PREALLOCATED           DIMA152
                                                                         FMDHT
*         VERIFY THAT THE ASSIGNED DEVICE CODE IS SUPPORTED              FMDHT
                                                                         FMDHT
          LDD    DC          DEVICE CODE CURRENTLY ASSIGNED              FMDHT
          SBN    DEMA        TEST IF DEVICE CODE = DEMA 
          ZJN    INIT12                                                  FMDHT
          SBN    PFMD-DEMA   TEST IF DEVICE CODE = PFMD 
          ZJN    INIT12 
          LDC    INITA       (A) = POINTER TO ERROR MSG IF NO SUPPORT    FMDHT
 INIT12   LJM    START       EXIT WITH (A) = ERROR/NO ERROR FLAG         FMDHT
                                                                         FMDHT
 INITA    DIS    ,*  SELECTED DEVICE CODE NOT SUPPORTED*                 FMDHT
                                                                         FMDHT
*         TABLE OF PPU SPEED SWITCHES                                    FMDHT
                                                                         FMDHT
 TSPEED   VFD    12/FJM2                                                 FMDHT
          VFD    12/IJM2                                                 FMDHT
          DATA   0           END OF SPEED SWITCHES TABLE                 FMDHT
                                                                         FMDHT
          EJECT                                                          FMDHT
          TITLE  ERROR MESSAGES                                          FMDHT
 PPMSGS   EQU    *           START OF PP MESSAGES                        FMDHT
****                                                                     FMDHT
          MMSG   ER.FLE,EC.FLE,(ADDR OUT OF FL),1                        FMDHT
          MMSG   ER.TL,EC.TL,(I/O TIME OUT ON CH RESERVE),1              FMDHT
          MMSG   ER.SEE,EC.SEE,(SUBR ENTRY/EXIT ERR),1                   FMDHT
          MMSG   ER.WC,EC.WC,(BUFFER INDEX OR WC ERR),1                  FMDHT
          MMSG   ER.RES,EC.RES,(R)                                       FMDHT
          MMSG   ER.RES1,EC.RES1,(R)                                     FMDHT
          MMSG   ER.RES2,EC.RES2,(R)                                     FMDHT
          MMSG   ER.CNA,EC.CNA,(CH NOT ASSIGNED)                         FMDHT
          MMSG   ER.CAS,EC.CAS,(CH ACTIVE ON ENTRY)                      FMDHT
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE TO LAST FUNC)                FMDHT
          MMSG   ER.NIGS,EC.NIGS,(NO INACTIVE TO GENERAL STATUS)         FMDHT
          MMSG   ER.NIDS,EC.NIDS,(NO INACTIVE TO DETAIL STATUS)          FMDHT
          MMSG   ER.GSNR,EC.GSNR,(GENERAL STATUS NOT RETURNED)           FMDHT
          MMSG   ER.ISR,EC.ISR,(INCOMPLETE STATUS RETURNED)              FMDHT
          MMSG   ER.FPNA,EC.FPNA,(FUNC PARAMETERS NOT ACCEPTED)          FMDHT
          MMSG   ER.DNA,EC.DNA,(ALL DATA NOT ACCEPTED FROM PP)           FMDHT
          MMSG   ER.IDR,EC.IDR,(INCOMPLETE DATA RETURNED TO PP)          FMDHT
          MMSG   ER.CNC,EC.CNC,(CONTROLLER/DRIVE NOT CONNECTED)          FMDHT
          MMSG   ER.IAL,EC.IAL,(ACCESS LEVEL TOO LOW FOR REQ)            FMDHT
          MMSG   ER.NRES,EC.NRES,(RESERVE TIMEOUT)                       FMDHT
          MMSG   ER.AGS,EC.AGS,(ABNORMAL GENERAL STATUS)                 FMDHT
          MMSG   ER.ISO,EC.ISO,(ILLEGAL STROBES/OFFSET)                  FMDHT
          MMSG   ER.UHB,EC.UHB,(UNIT HUNG BUSY ON SEEK)                  FMDHT
          MMSG   ER.STRY,EC.STRY,(SUCCESSFUL RETRY)                      FMDHT
          MMSG   ER.DCE,EC.DCE,(DATA COMPARE ERROR)                      FMDHT
          MMSG   ER.DCSM,EC.DCSM,(DEVICE CODE/STATUS MISMATCH)           FMDHT
          MMSG   ER.NIDT,EC.NIDT,(NO INACTIVE AFTER DATA XFER)           FMDHT
 MMSGL.   EQU    MMSGL                                                   DIMA234
          DATA   0                                                       FMDHT
****                                                                     FMDHT
 TCHAN    EQU    *           CREATE CHANNEL TABLE                        FMDHT
          LIST   D                                                       FMDHT
          HERE                                                           FMDHT
          LIST   *                                                       FMDHT
          DATA   0           END OF CHANNEL TABLE                        FMDHT
                                                                         FMDHT
          IFEQ   NOS,1                                                   FMDHT
 .1       SET    POVLA                                                   FMDHT
 .2       SET    10000B                                                  FMDHT
 .3       SET    *-.1+5+4+500B                                           FMDHT
 .4       SET    .2-.1+5-1                                               FMDHT
          ERRNG  .2-.1+5-.3/500B*500B-1  BYTES LEFT AFTER LAST SECTOR    FMDHT
          ERRNG  .3/500B*500B-5-*+.1-5   BYTES LEFT IN LAST SECTOR       FMDHT
          ERRNG  .4/500B*500B-5-*+.1-5   BYTES CAN BE ADDED TO OVERLAY   FMDHT
          ENDIF                                                          FMDHT
                                                                         FMDHT
          IFEQ   NOSBE,1,1                                               FMDHT
          ERRPL  *-7773B     ERROR IF DEMA1 OVERLAY OVERFLOW             FMDHT
                                                                         FMDHT
          QUAL   *                                                       FMDHT
