*COMDECK,DEMA2
          TITLE  HIGH LEVEL DEMA2 HALF TRACK PRODUCT OVERLAY FOR MALET. 
 5D2      SEGMENT POVLA                                                  FMDFT
          ORG    POVLA                                                   FMDFT
          QUAL   DEMA2                                                   DEMA2
*CALL,VERS
          COMMENT DEMA2 PORDUCT OVERLAY FOR MALET "VERS"
          EJECT 
**        THE FOLLOWING COMMANDS ARE DESIGNED FOR  THE DEMA DISK  SUB-  FMDFT 
*         SYSTEMS  RUNNING  IN  HALF-TRACK MODE.  5D2 IS THE PRODUCT     FMDFT
*         OVERLAY THAT EXECUTES THESE COMMANDS AND  IS  DRIVEN  BY  THE  FMDFT
*         INSTRUCTION STACK OF THE MALET PP  DRIVER.  REQUESTS ARE MADE  FMDFT
*         BY THE DRIVER BY STORING PARAMETERS INTO PP  DIRECT CELLS AND  FMDFT
*         PERFORMING  A  RETURN-JUMP TO AN OVERLAY SUBROUTINE. ONCE THE  FMDFT
*         REQUEST HAS BEEN COMPLETED, CONTROL IS RETURNED TO THE  STACK  FMDFT
*         TO EXECUTE THE NEXT COMMAND.  THE DEVICE TYPE FOR THESE         FMDFT 
*         COMMANDS IS DEMA2.
*                                                                        FMDFT
*         THE DEMA2 HALF-TRACK PRODUCT OVERLAY SUPPORTS  A  PROGRAMMABLE  FMDFT 
*         INPUT BUFFER (IB) OF 505B PP WORDS, AN  OUTPUT BUFFER (OB) OF  FMDFT
*         505B PP WORDS AND A STATUS BUFFER (SB) OF 64B PP WORDS.  DATA  FMDFT
*         IS  WRITTEN  TO  THE  DISK FROM THE OUTPUT BUFFER AND IS READ  FMDFT
*         FROM THE DISK TO THE INPUT BUFFER.  THE STATUS BUFFER IS USED  FMDFT
*         TO HOLD GENERAL AND DETAIL STATUS FROM THE SUBSYSTEM           FMDFT
*         AND OTHER WORDS DEFINED LATER. SUPPORTED CAPABILITIES ARE  AS  FMDFT
*         FOLLOWS_                                                       FMDFT
*                                                                        FMDFT
*           DIAGRD - READ 322D WORDS FROM SUBSYSTEM MEMORY TO IB.        FMDFT
*           DIAGWR - WRITE 322D WORDS FROM OB TO SUBSYSTEM MEMORY.       FMDFT
*           GET    - READ SERIAL, FACTORY OR UTILITY MAP SECTOR TO IB.   FMDFT
*           MARGINS- SET STROBES AND OFFSET FOR READ AND READCW.         FMDFT
*           READ   - SEEK AND READ 0 TO 500B SECTORS FROM DISK TO IB. 
*           READCB - READ 322BD WORDS FROM COUPLER BUFFER TO IB.
*           READCW - SEEK AND READ CHECKWORD ON 0 TO 500B SECTORS.
*           REFORM - SEND FORMAT FUNCTION 
*           REL    - RELEASE DRIVE, CONTROLLER AND I/O CHANNEL. 
*           RES    - RESERVE I/O CHANNEL, CONTROLLER AND DRIVE.          FMDFT
*           RESET  - AUTOLOAD CONTROLLER TO MONITOR LOOP.                FMDFT
*           RTNADDR- READ LAST CYLINDER ADDRESS TO IB.                   FMDFT
*           SCAN   - SEND FUNCTION 47B TO SCAN CYLINDER FOR FLAWS 
*           SEEK   - MOVE DRIVE POSITIONER.                              FMDFT
*           STATUS - INPUT GENERAL OR DETAIL STATUS TO SB.               FMDFT
*           VERIFY - SEEK AND WRITE VERIFY 0 TO 500B SECTORS ON DISK.    FMDFT
*           WRITE  - SEEK AND WRITE 0 TO 500B SECTORS ON DISK.           FMDFT
*           WRITECB- WRITE 322BD WORDS FROM OB TO COUPLER BUFFER. 
*           WRPRO  - WRITE PROTECTED SECTOR 
*                                                                        FMDFT
*         THIS PRODUCT OVERLAY DOES NOT USE THE WC OR BA  REGISTERS  TO  FMDFT
*         CONTROL  I/O OPERATIONS.  THESE REGISTERS ARE FREE FOR USE BY  FMDFT
*         THE MODULE PROGRAMMER.  ALL NORMAL READS AND WRITES  TRANSFER  FMDFT
*         2540B WORDS ACCOMPLISHED BY REPETITIVE 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.
*                                                                        FMDFT
          EJECT                                                          FMDFT
**        THE FOLLOWING CHART DEFINES THE LAY-OUT OF THE STATUS BUFFER.  FMDFT
*                                                                        FMDFT
*                   --------------------   ---                           FMDFT
*               0   /   GENERAL STATUS /      /                          FMDFT
*                   /------------------/      /                          FMDFT
*               1   /                  /      /                          FMDFT
*               .   /                  /      /                          FMDFT
*               .   /   DETAIL STATUS  /      / THIS IS THE NORMAL/LAST  FMDFT
*               .   /                  /      / TAKEN STATUS FROM THE    FMDFT
*               .   /                  /      / SUBSYSTEM                FMDFT
*               .   /                  /      /                          FMDFT
*               .   /                  /      /                          FMDFT
*               .   /                  /      /                          FMDFT
*              24B  /                  /   ---                           FMDFT
*                   /------------------/   ---                           FMDFT
*              25B  /   GENERAL STATUS /      /                          FMDFT
*                   /------------------/      /                          FMDFT
*              26B  /                  /      /                          FMDFT
*               .   /                  /      / THIS IS THE FIRST TAKEN  FMDFT
*               .   /   DETAIL STATUS  /      / STATUS WITHIN SEQUENCES  FMDFT
*               .   /                  /      / THAT REQUIRED RECOVERY   FMDFT
*               .   /                  /      / TO BE PERFORMED.         FMDFT
*               .   /                  /      / (CONTINUE FUNCTIONS      FMDFT
*               .   /                  /      / ISSUED)                  FMDFT
*               .   /                  /      /                          FMDFT
*              51B  /                  /   ---                           FMDFT
*                   /------------------/   ---                           FMDFT
*              52B  /  RETRY COUNT     /      / ERROR CORRECTION DATA    FMDFT
*                   /------------------/   ---                           FMDFT
*              56B  / 1ST BYTE         /      / DISK PACK SERIAL NUMBER  FMDFT
*              57B  / 2ND BYTE         /      / (FROM ASSIGN DIRECTIVE)  FMDFT
*                   /------------------/   ---                           FMDFT
*              60B  / SEEK TIME        /      / MILLISECONDS TO DO LAST  FMDFT
*                   /------------------/      / SEEK                     FMDFT
*              61B  / CHANNEL          /   ---                           FMDFT
*              62B  / EQUIPMENT        /      /                          FMDFT
*              63B  / UNIT             /      / EQUIPMENT UNDER TEST     FMDFT
*                   --------------------   ---                           FMDFT
*                                                                        FMDFT
*         ALL SUBROUTINES IN THIS PRODUCT OVERLAY USE  A  COMMON  ERROR  FMDFT
*         EXIT  SEQUENCE  WHEN  AN  ERROR  IS  DETECTED.  THIS SEQUENCE  FMDFT
*         STORES AN INTERNAL ERROR CODE INTO THE EC REGISTER, AN  ERROR  FMDFT
*         MESSAGE INDEX INTO THE EM REGISTER AND THE CURRENT P REGISTER  FMDFT
*         CONTENTS (LINE NUMBER) INTO THE  EA  REGISTER.   I/O  CHANNEL  FMDFT
*         CLEAN-UP  OCCURS  AND  A JUMP IS MADE TO THE STATEMENT NUMBER  FMDFT
*         SPECIFIED BY THE ABT ADDRESS IN THE COMMAND.                   FMDFT
*                                                                        FMDFT
          EJECT                                                          FMDFT
**        THE FOLLOWING TABLE DEFINES THE ERROR CODES AND MESSAGES THAT  FMDFT
*         MAY BE GENERATED FOR EACH COMMAND.                             FMDFT
* 
*                                    D D G M R R R R R R R R S S S V W W
*                                    I I E A E E E E E E E T C E T E R R
*                                    A A T R A A A F L S S N A E A R I P
*                                    G G . G D D D O . / E A N K T I T R
*                                    R W . I . C C R . / T D . / U F E O
*                                    D R . N . B W M . / . D . / S Y . /
*                                    . / . S . / . / . / . R . / . / . /
*                                    . / . / . / . / . / . / . / . / . /
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 4001 ADDR OUT OF FL                . . . . . . . X X X . X . . . . . .
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 4004 WC OR BUFFER INDEX ERROR      . . . . . . . X . . . X . . . . . .      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5610 CH NOT ASSIGNED               X X X . X X X X . . X X X X . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5611 CH ACTIVE ON ENTRY            . . . . . . . . . X . . . . . . . .      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5612 NO INACTIVE TO LAST FUNC      X X X . X X X X X X X X X X . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5613 NO INACTIVE TO GENERAL STATUS . . X . X . X . . X . X . X X X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5614 NO INACTIVE TO DETAIL STATUS  . . X . X . X . . X . . . X X X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5615 GENERAL STATUS NOT RETURNED   . . X . X . X . . X . X . X X X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5616 INCOMPLETE STATUS RETURNED    . . X . X . X . . X . . . . . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5617 FUNC PARAMETERS NOT ACCEPTED  . . X . X . X . . X . . . X . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5620 ALL DATA NOT ACCEPTED FROM PP . X . . . . . . . . . . . . . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5621 INCOMPLETE DATA RETURNED TO PPX . X . X X X . . . . . . . . . . .      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5622 CONTROLLER/DRIVE NOT CONNECTEDX X X . X X X X . . . X X X . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5623 ACCESS LEVEL TOO LOW FOR REQ  . . X . X . . . . . . . . . . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5624 RESERVE TIMEOUT               . . . . . . . . . X . . . . . . . .      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5625 ABNORMAL GENERAL STATUS       . . X . X . X . . X . X . X . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5626 ILLEGAL STROBES/OFFSET        . . . X . . . . . . . . . . . . . .      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5627 UNIT HUNG BUSY ON SEEK        . . X . X . X . . . . . . X . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5630 SUCCESSFUL RETRY              . . X . X . X . . . . . . . . X X X      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5631 DATA COMPARE ERROR            . . . . X . . . . . . . . . . . . .      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5632 DEVICE CODE/STATUS MISMATCH   . . . . . . . . . X . . . . . . . .      FM
*      ----------------------------- - - - - - - - - - - - - - - - - - -  FMDFT 
* 5633 NO INACTIVE AFTER DATA XFER   . . X . X . X . . . . X . . . . . .      FM
*      ----------------------------------------------------------------- FMDFT
* NOTE. ERROR CODES FOR WRITECB ARE    .    SAME AS THOSE FOR DIAGWR
          EJECT                                                          FMDFT
  
*         THE PROCESS DESCRIBED IN THE FOLLOWING STEPS IS USED WITHIN 
*         DEMA2 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                                                          FMDFT
*         EQUATES FOR ERROR CODES - FIRST 7 ARE FOR BASIC DRIVER.        FMDFT
                                                                         FMDFT
 EC.FLE   EQU    1           ADDR OUT OF FL                               FMDFT 
 EC.TL    EQU    2           I/O TIMEOUT ON CH RESERVE                   FMDFT
 EC.SEE   EQU    3           SUBR ENTRY/EXIT ERROR                      FMDFT 
 EC.WC    EQU    4           BUFFER INDEX OR WC ERR                     FMDFT 
 EC.RES   EQU    5           RESERVED FOR BASIC DRIVER                   FMDFT
 EC.RES1  EQU    6           RESERVED FOR BASIC DRIVER                   FMDFT
 EC.RES2  EQU    7           RESERVED FOR BASIC DRIVER                   FMDFT
                                                                         FMDFT
 EC.CNA   EQU    10B         CH NOT ASSIGNED                            FMDFT 
 EC.CAS   EQU    11B         CH ACTIVE ON ENTRY                          FMDFT
 EC.NIF   EQU    12B         NO INACTIVE TO LAST FUNC                     FMDFT 
 EC.NIGS  EQU    13B         NO INACTIVE TO GENERAL STATUS               FMDFT
 EC.NIDS  EQU    14B         NO INACTIVE TO DETAIL  STATUS               FMDFT
 EC.GSNR  EQU    15B         GENERAL STATUS NOT RETURNED                 FMDFT
 EC.ISR   EQU    16B         INCOMPLETE STATUS RETURNED                  FMDFT
 EC.FPNA  EQU    17B         FUNC PARAMETERS NOT ACCEPTED                 FMDFT 
 EC.DNA   EQU    20B         ALL DATA NOT ACCEPTED FROM PP               FMDFT
 EC.IDR   EQU    21B         INCOMPLETE DATA RETURNED TO PP              FMDFT
 EC.CNC   EQU    22B         CONTROLLER/DRIVE NOT CONNECTED              FMDFT
 EC.IAL   EQU    23B         ACCESS LEVEL TOO LOW FOR REQ                 FMDFT 
 EC.NRES  EQU    24B         RESERVE TIMEOUT                                FMDF
 EC.AGS   EQU    25B         ABNORMAL GENERAL STATUS                     FMDFT
 EC.ISO   EQU    26B         ILLEGAL STROBES/OFFSET                      FMDFT
 EC.UHB   EQU    27B         UNIT HUNG BUSY ON SEEK                      FMDFT
 EC.STRY  EQU    30B         SUCCESSFUL RETRY                            FMDFT
 EC.DCE   EQU    31B         DATA COMPARE ERROR                          FMDFT
 EC.DCSM  EQU    32B         DEVICE CODE/STATUS MISMATCH                 FMDFT
 EC.NIDT  EQU    33B         NO INACTIVE AFTER DATA TRANSFER             FMDFT
                                                                         FMDFT
*         DIRECT CELL EQUATES                                            FMDFT
                                                                         FMDFT
 RDWRF    EQU    60B         READ/WRITE FLAG                             FMDFT
 COD      EQU    61B         WRITE - READ CODED FLAG                     FMDFT
 FUN      EQU    62B         FUNCTION FOR READ OR WRITE                  FMDFT
 CL       EQU    63B         ADDRESS OF CURRENT (SECTOR) LENGTH  - V     FMDFT
 CC       EQU    65B         ADDRESS OF CURRNET CYLINDER         - W           F
 CT       EQU    66B         ADDRESS OF CURRENT TRACK            - X           F
 CS       EQU    67B         ADDRESS OF CURRENT SECTOR           - Y           F
                                                                         FMDFT
 SEEKA    EQU    D.Z3        SEEK ADDRESS USES D.Z3 THRU D.Z7            FMDFT
 PA       EQU    D.T0        PARAMETER ADDRESS                           FMDFT
                                                                         FMDFT
          EJECT                                                          FMDFT
*         EQUATES FOR EQUIPMENT FUNCTIONS.                               FMDFT
                                                                         FMDFT
 CONN     EQU    0           CONNECT                                     FMDFT
 SEK21    EQU    2           SEEK 2 TO 1 INTERLACE                       FT2TO1 
                                                                         FMDFT
 RDCW     EQU    7           READ CHECKWORD                              FMDFT
                                                                         FMDFT
 OC       EQU    10B         OPERATION COMPLETE                          FMDFT
 GS       EQU    12B         GENERAL STATUS                              FMDFT
 CONT     EQU    14B         CONTINUE                                    FMDFT
 FMT      EQU    16B         FUNCTION CODE FOR FORMAT PACK               DIMA154
 DREL     EQU    20B         DRIVE RELEASE                               FMDFT
 RCA      EQU    21B         RETURN CYLINDER ADDRESS                     FMDFT
 EDS      EQU    23B         EXTENDED DETAIL STATUS                      FMDFT
 RFD      EQU    30B         READ FACTORY DATA                           FMDFT
 RUM      EQU    31B         READ UTILITY MAP                            FMDFT
 DR       EQU    32B         DIAGNOSTIC READ                             FMDFT
 WRP      EQU    37B         WRITE PROTECTED SECTOR FUNCTION             DIMA154
 SSO      EQU    41B         SELECT STROBES AND OFFSET                   FMDFT
 RCB      EQU    43B         READ COUPLER BUFFER                         FMDFT
 FSCAN    EQU    47B         SCAN DISK FUNCTION                          DIMA154
 AUTO     EQU    414B        AUTOLOAD FUNCTION                           FMDFT
                                                                         FMDFT
*         GENERAL STATUS BIT EQUATES.                                    FMDFT
                                                                         FMDFT
 BUSY     EQU    1           UNIT BUSY                                   FMDFT
 DRES     EQU    3           DRIVE RESERVED                              FMDFT
 COR      EQU    5           CORRECTABLE ERROR BIT                       FMDFT
 RIP      EQU    8D          RECOVERY IN PROGRESS                        FMDFT
 UNR      EQU    9D          NONRECOVERABLE ERROR                        FMDFT
 CRES     EQU    10D         CONTROLLER RESERVED                         FMDFT
                                                                         FMDFT
*         DEVICE CODES SUPPORTED                                         FMDFT
                                                                         FMDFT
 DEMA     EQU    14B         DEMA 4HP 885-42
 PFMD     EQU    15B         PFMD 4HP 885-42
          SPACE  4,20                                                    FMDFT
*         MISCELANOUS EQUATES.                                           FMDFT
                                                                         FMDFT
 TIMFJM   EQU    50000D/2     INTERATION TIME TO WAIT FOR FULL 50 MSEC   FMDFT
 TIMREL   EQU    400000D/100D INTERVAL FOR CHANNEL RELEASE-              FMDFT
 MAXITT   EQU    12D         ITERATION COUNT FOR ABOUT A 5 SEC.DELAY     FMDFT
                                                                         FMDFT
 MAXCDD   EQU    1512B       MAXIMUM CYLINDER ON A 885                   FMDFT
 MAPCYL   EQU    1511B       CYLINDER CONTAINING MAP INFORMATION         FMDFT
 PRECYL   EQU    2           NUMBER OF PREALLOCATED CYLINDERS            FMDFT
                                                                         FMDFT
*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               FMDFT
 AL21     EQU    21B         ACCESS LEVEL FOR NO CHANNEL CLEANUP ON ERR  FMDFT
                                                                         FMDFT
 CH       EQU    37B         DEFAULT CHANNEL VALUE FOR I/O COMMANDS      FMDFT
                                                                         FMDFT
 SEL      EQU    37B         MAXIMUM SECTOR COUNT                        FMDFT
 TRL      EQU    11B         MAXIMUM TRACK COUNT                         DEMAFT 
 SEI      EQU    2           SECTOR INCREMENT                            FMDHT
          EJECT                                                          FMDFT
**        ERROR MESSAGES - WRITTEN TO CM DURING INITIALIZATION.          FMDFT
*                                                                        FMDFT
*         MMSG MACRO.                                                    FMDFT
*                                                                        FMDFT
*         MMSG  MACRO  NAME,ECODE,MSG,FABT                               FMDFT
*                                                                        FMDFT
*         NAME = 6/FABT,6/MESSAGE ORDINAL,6/ECODE.                       FMDFT
*                                                                        FMDFT
*         ECODE = ERROR CODE TO BE ASSIGNED (6 BITS).                    FMDFT
*                                                                        FMDFT
*         MSG = ERROR MESSAGE (40 CHARACTERS).                           FMDFT
*                                                                        FMDFT
*         FABT = FORCE ABORT (UPPER 6 BITS OF NAME.                      FMDFT
*                                                                        FMDFT
          PURGMAC MMSG                                                   FMDFT
 MMSG     MACRO  NAME,ECODE,MSG,FABT                                     FMDFT
          IF     -DEF,MMSGORD,1                                          FMDFT
 MMSGORD  SET    0                        INITIALIZE ORDINAL             FMDFT
          IFC    EQ,$FABT$$,2             TEST FOR NO FORCE ABORT        FMDFT
 NAME     EQU    MMSGORD*100B+ECODE                                      FMDFT
          ELSE   1                                                       FMDFT
 NAME     EQU    FABT*10000B+MMSGORD*100B+ECODE                          FMDFT
 MMSGBGN  SET    *                        SAVE CURRENT ADDRESS           FMDFT
          IFC    EQ,$MSG$$,2              TEST NULL MESSAGE              FMDFT
          DATA   1H                       INSURE DATA ITEM               FMDFT
          ELSE   1                                                       FMDFT
          DATA   H$MSG$                   STORE MESSAGE                  FMDFT
          DATA   0                        SET END OF MESSAGE             FMDFT
          IFGT   *-MMSGBGN,BD.MSGML*5+1,1 TEST MESSAGE TOO LONG          FMDFT
 P        ERR    MESSAGE TOO LONG                                        FMDFT
 MMSGORD  SET    MMSGORD+1                BUMP ORDINAL                   FMDFT
          IFGT   MMSGORD,BD.MSGMN,1       TEST TOO MANY MESSAGES         FMDFT
 P        ERR    TOO MANY MESSAGES                                       FMDFT
 MMSGL    SET    MMSGORD*BD.MSGML         SET CM WORD COUNT              FMDFT
          ENDM                                                           FMDFT
          EJECT                                                          FMDFT
 START    LJM    **          ENTRY POINT FOR OVERLAY INITIALIZATION      FMDFT
          LJM    INIT                                                    FMDFT
                                                                         FMDFT
          VFD    12/IB       FWA OF INPUT BUFFER                         FMDFT
          VFD    12/OB       FWA OF OUTPUT BUFFER                        FMDFT
          VFD    12/SB       FWA OF STATUS BUFFER                        FMDFT
          VFD    12/LIB      LENGTH OF INPUT BUFFER                      FMDFT
          VFD    12/LIB      LENGTH OF OUTPUT BUFFER                     FMDFT
          VFD    12/LSB      LENGTH OF STATUS BUFFER                     FMDFT
                                                                         FMDFT
          VFD    12/BD.VERS  VERSION NUMBER OF THIS OVERLAY 
                                                                         FMDFT
**        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 
                                                                         FTENT
**        TABLE OF ENTRY POINTS FOR EXECUTING HIGH LEVEL COMMANDS        FTENT
*                                                                        FTENT
 TBLENT   VFD    12/REL      RELEASE CONTROLLER AND DRIVE                FTENT
          VFD    12/RES      RESERVE CONTROLLER OR CONTROLLER AND DRIVE  FTENT
          VFD    12/DIAG     DIAGNOSTIC I/O TO/FROM INPUT/OUTPUT BUFFER  FTENT
          VFD    12/GET      READ SERIAL, FACTORY OR UTILITY SECTOR      FTENT
          VFD    12/MARGINS  SAVE STROBES AND OFFSET MARGINS             FTENT
          VFD    12/RDWR     SEEK AND I/O THE REQUESTED NO. OF SECTORS   FTENT
          VFD    12/RESET    AUTOLOAD THE CONTROLLER                     FTENT
          VFD    12/RTNADDR  RETURN CYLINDER ADDRESS FUNCTION            FTENT
          VFD    12/SEEK     SEEK TO THE ADDRESS SPECIFIED               FTENT
          VFD    12/WRPRO    PROCESS WRITE PROTECTED SECTOR COMMAND 
          VFD    12/STATUS   GET GENERAL OR DETAIL STATUS                FTENT
          VFD    12/REFORM   PROCESS REFORM COMMAND                      FTENT
          VFD    12/SCAN     SEND SCAN FUNCTION                          FTENT
          EJECT                                                          FMDFT
 REL      TITLE  REL - RELEASE CONTROLLER AND DRIVE IF CONNECTED.        FMDFT
**        REL    - RELEASE CONTROLLER AND DRIVE IF CONNECTED.            FMDFT
*                                                                        FMDFT
*                  REL, ABT Z                                            FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FTENT
*                                                                        FMDFT
*         EXIT   - DEVICE CONNECT HAS BEEN RELEASED IF ASSIGNED AND THE  FMDFT
*                  CHANNEL IS RELEASED TO THE SYSTEM.                    FMDFT
*                                                                        FMDFT
*         USES   - P                                                     FMDFT
*                                                                        FMDFT
*         CALLS  - OPC, BD.DCH                                           FTENT
*                                                                        FMDFT
                                                                         FMDFT
**     1. DISCONNECT DRIVE AND CONTROLLER WITH AN OPERATION COMPLETE     FMDFT
*         FUNCTION IF EITHER IS CONNECTED.                               FMDFT
*                                                                        FMDFT
*      2. DROP THE I/O CHANNEL TO THE OPERATING SYSTEM IF ASSIGNED.      FMDFT
*                                                                        FMDFT
 REL      RJM    OPC         RELEASE THE EQUIPMENT IF CONNECTED          FTENT
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC        FMDFT
          LJM    XENT        EXIT TO STACK                               FTENT
          EJECT                                                          FMDFT
 RES      TITLE  RES - RESERVE CONTROLLER OR CONTROLLER AND DRIVE.       FMDFT
**        RES    - RESERVE CONTROLLER OR CONTROLLER AND DRIVE.           FMDFT
*                                                                        FMDFT
*                  RES CONTROLLER, ABT Z                                 FMDFT
*                  RES DRIVE, ABT Z                                      FMDFT
*                                                                        FMDFT
*         ENTRY  - (PA) = CONTROLLER/DRIVE FLAG.                         FTENT
*                                                                        FMDFT
*         EXIT   - I/O CHANNEL ASSIGNED AND CHANNEL ASSIGNED FLAGS ARE   FMDFT
*                  SET IN ALL THE OTHER SUBROUTINES.                     FMDFT
*                                                                        FMDFT
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  FMDFT
*                  ERRCAS  - IF CHANNEL ACTIVE FROM SYSTEM               FMDFT
*                  ERRDCSM - IF DEVICE CODE/STATUS MISMATCH              FMDFT
*                  ERRNRES - IF NOT RESERVED IN 5 MINUTES                FMDFT
*                                                                        FMDFT
*         USES   - EC, EA, EM, P, D.T3, D.T4, RESA, RES7,                FMDFT
*                  COCON, DRCON, DST2, DEVTY, SBIE(SB25), RDW19          FMDFT
*                                                                        FMDFT
*         CALLS  - RES1, OPC, STC, DST, FNA, BD.RCH                      FTENT
                                                                         FMDFT
**     1. DISCONNECT DRIVE AND CONTROLLER WITH AN OPERATION COMPLETE     FMDFT
*         FUNCTION IF EITHER IS CONNECTED.                               FMDFT
*                                                                        FMDFT
                                                                         FMDFT
**     2. CLEAR ERROR EXIT REGISTERS.                                    FMDFT
*                                                                        FMDFT
 RES      LDN    0                                                       FTENT
          STD    EC          CLEAR ERROR REGISTERS                       FMDFT
          STD    EA                                                      FMDFT
          STD    EM                                                      FMDFT
                                                                         FMDFT
**     3. DROP/REQUEST I/O CHANNEL FROM THE SYSTEM.                      FMDFT
*                                                                        FMDFT
          LDN    MAXITT      ITERATION COUNT FOR STATUS                  FMDFT
          STM    RESA        AND PAUSE LOOP                              FMDFT
          LDD    PA                                                      FMDFT
          STM    RES7        SAVE CONTROLLER/DRIVE CONNECT FLAG          FMDFT
 RES2     RJM    OPC         TO RELEASE THE CONTROLLER IF SELECTED       FMDFT
          LDN    0                                                       DIMA599
          STM    OPC1        SET CONTROLLER AND UNIT NOT RESERVED        DIMA599
 RES2A    SOM    RESA        DECREMENT THE ITERATION COUNT               FMDFT
          PJN    RES3        IF NOT TIMED OUT                            FMDFT
          LDC    ER.NRES     ELSE ERROR EXIT                             FMDFT
          LJM    ERR                                                     FMDFT
 RES3     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED           FMDFT
          RJM    IJM         WAIT CHANNEL ACTIVE                         DIMA571
          LDC    ER.CAS                                                  FMDFT
          AJM    ERR,CH      ERROR IF CHANNEL ACTIVE FROM SYSTEM         FMDFT
                                                                         FMDFT
**     4. REQUEST AND INPUT GENERAL STATUS.                              FMDFT
*                                                                        FMDFT
          LDC    TIMREL      DELAY CONSTANT FOR TIMEOUT                  FMDFT
          STD    D.T3        TO COUNT STATUS ITERATIONS                  FMDFT
          LDN    GS          GENERAL STATUS FUNCTION CODE 
          STD    LF          SPECIFY LAST (MAJOR) FUNCTION
 RES4     RJM    STS         GET GENERAL STATUS 
          STM    SBIE        SAVE IT AS STATUS BEFORE ERROR TIME         FMDFT
                                                                         FMDFT
**     5. IF BIT 2**10 IS SET, REPEAT STEP 4 UNTIL 500 MSEC HAS          FMDFT
*         ELAPSED.  IF A RESERVE IS NOT SUCCESSFUL WITHIN THIS           FMDFT
*         TIME-FRAME, EXECUTE THE *REL* SEQUENCE TO COMMUNICATE          FMDFT
*         WITH THE SYSTEM.  REPEAT THIS STEP UNTIL A RESERVE IS          FMDFT
*         SUCCESSFUL OR 5 MINUTES HAVE ELAPSED. ABORT IF NO              FMDFT
*         RESERVE IN 5 MINUTES.                                          FMDFT
*                                                                        FMDFT
          SHN    17D-CRES                                                FMDFT
          PJN    RES6        IF COUPLER IS CONNECTED                     FMDFT
          SOD    D.T3        DECREMENT LOOP COUNT                        FMDFT
          PJN    RES4        IF NOT TIMED OUT                            FMDFT
          UJN    RES2A       ELSE START NEXT ITERATION                   FMDFT
                                                                         FMDFT
**     6. SET THE CONTROLLER CONNECTED FLAG.                             FMDFT
*                                                                        FMDFT
 RES6     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            FMDFT
                                                                         FMDFT
                                                                         FMDFT
**     7. EXIT IF THE KEYWORD *CONTROLLER* IS SPECIFIED.                 FMDFT
*                                                                        FMDFT
 RES6A    LDC    **          TYPE OF FUNCTION                            DIMA252
 RES7     EQU    *-1         *** CONNECT DRIVER/CONTROLLER FLAG          FMDFT
          NJN    RES9        IF DRIVE CONNECT IS ALSO DESIRED            FMDFT
          LJM    RES12       TEST FOR FMD TYPE CONTROLLER 
                                                                         FMDFT
**     8. ISSUE A CONNECT FUNCTION AND OUTPUT THE UNIT NUMBER.           FMDFT
*                                                                        FMDFT
 RES9     LDC    **          UNIT NUMBER STORED HERE                     FMDFT
 UN       EQU    *-1                                                     FMDFT
          STD    D.T4        SAVE FOR SUBROUTINE FNO                      FMDFT 
          LPN    77B         EXAMINE ONLY BITS FOR UNIT NO. 
          SBN    40B                                                     DIMA487
          MJN    RES13       IF LT 40B  ERROR EXIT                        FMDFT 
          SBN    20B
          PJN    RES13       JUMP IF UNIT NO. GREATER THAN 57B
          LDN    CONN        LOAD CONNECT FUNCTION                       FMDFT
          RJM    FNO         PERFORM FUNCTION AND OUTPUT CONTROL WORD 
                                                                         FMDFT
**     9. REQUEST AND INPUT GENERAL AND DETAIL STATUS. VERIFY THAT       FMDFT
*         GENERAL STATUS IS 0000 OR 0002 AND  THAT  DETAIL  STATUS       FMDFT
*         INDICATES THAT THE UNIT ASSIGNED MATCHES THE DEVICE CODE       FMDFT
*         ASSIGNED. (FMD OR NOT).                                        FMDFT
*                                                                        FMDFT
          RJM    STS         TO GET STATUS                               FMDFT
          SCN    2           TO TEST OTHER THAN BUSY                     FMDFT
          ZJN    RES11       IF NO ERROR STATUS                          FMDFT
          SHN    17D-DRES    TO TEST THE DRIVE RESERVED BIT              FMDFT
          PJN    RES10       IF THE UNIT IS NOT RESERVED                 FMDFT
          SOD    D.T3        DECREMENT THE COUNT                         FMDFT
          PJN    RES6A       IF NOT DONE WITH THIS ITERATION             DIMA252
          LJM    RES2        ELSE START ANOTHER ITERATION                FMDFT
                                                                         FMDFT
 RES10    LJM    ERRAGS                                                  FMDFT
                                                                         FMDFT
 RES11    RJM    DST         TO GET DETAIL STATUS                        FMDFT
          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                                                   FMDFT
          MJN    RES14                                                   DIMA487
                                                                         FMDFT
 RES13    LDC    ER.DCSM     ELSE ERROR EXIT                             FMDFT
          LJM    ERR                                                     FMDFT
                                                                         FMDFT
**    10. SET THE DRIVE CONNECTED FLAG.                                  FMDFT
*                                                                        FMDFT
 RES14    LDN    0                                                       FMDFT
          STM    DRCON       SET DRIVE CONNECTED FLAG                    FMDFT
 RES15    LJM    XENT        EXIT TO STACK                               FTENT
          EJECT                                                          FMDFT
 DIAG     TITLE  DIAG - DIAGNOSTIC READ.                                 FMDFT
**        DIAG   - DIAGNOSTIC READ TO INPUT BUFFER.                      FMDFT
*                  DIAGNOSTIC WRITE FROM OUTPUT BUFFER.                  FMDFT
*                  READ COUPLER BUFFER TO INPUT BUFFER
*                  WRITE OUTPUT BUFFER TO COUPLER BUFFER. 
*                                                                        FMDFT
*                  DIAGRD, ABT Z                                         FMDFT
*                  DIAGWR, ABT Z                                         FMDFT
*                  READCB, ABT Z                                         FMDFT
*                  WRITECB, ABT Z 
*                                                                        FMDFT
*         ENTRY  - (PA) = FUNCTION CODE FOR DIAGRD, DIAGWR, READCB OR 
*                         WRITECB.
*                                                                        FMDFT
*         EXIT   - ERR - IF INCOMPLETE DATA RETURNED TO PP
*                        IF ALL DATA NOT ACCEPTED FROM PP 
* 
*         USES   - WT, RDWRF, IB(0-501), D.T1 
*                                                                        FMDFT
*         CALLS  - TCO, FNC, IJM                                         FMDFT
                                                                         FMDFT
**     1. VERIFY THAT THE CONTROLLER IS CONNECTED.                       FMDFT
*                                                                        FMDFT
 DIAG     RJM    TCO         TEST CONTROLLER CONNECTED                   FMDFT
          STD    WT          CLEAR THE WORDS TRANSFERRED REGISTER           FMDF
          LDD    PA          GET THE FUNCTION PARAMETER                  FMDFT
          SBN    DR                                                      FMDFT
          ZJN    DIAG1       IF DIAGNOSTIC READ                          FMDFT
          SBN    RCB-DR                                                  FMDFT
 DIAG1    STD    RDWRF       SET THE READ WRITE FLAG                     FMDFT
                                                                         FMDFT
**     2. ISSUE ONE OF THE FOLLOWING FUNCTIONS- 
*         DIAGRD(32), DIAGWR(33), READCB(43), WRITECB(44).
*                                                                        FMDFT
          LDD    PA          GET THE FUNCTION                            FMDFT
          RJM    FNC         TO PERFORM THE FUNCTION                     FMDFT
                                                                         FMDFT
**     3. INPUT 322D WORDS FROM THE SUBSYSTEM MEMORY TO THE INPUT        FMDFT
*         BUFFER IF A DIAGRD OR READCB.                                  FMDFT
*                                                                        FMDFT
          ACN    CH+40B      ACTIVATE THE CHANNEL                        FMDFT
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       FMDFT
          NJN    DIAG2       IF IT IS A WRITE                            FMDFT
          LDM    BTSD        BLOCK TRANSFER SIZE, DIAGNOSTIC I/O COMMAND
          IAM    IB,CH       READ TO INPUT BUFFER                        FMDFT
          UJN    DIAG3                                                   FMDFT
                                                                         FMDFT
**     4. OUTPUT 322D WORDS FROM THE OUTPUT BUFFER TO THE SUBSYSTEM      FMDFT
*         IF DIAGWR OR WRITECB. 
*                                                                        FMDFT
 DIAG2    LDM    BTSD        BLOCK TRANSFER SIZE, DIAGNOSTIC I/O COMMAND
          OAM    OB,CH       WRITE FROM THE OUTPUT BUFFER                FMDFT
                                                                         FMDFT
**     5. VERIFY THAT 322B WORDS WERE ACTUALLY INPUT.                    FMDFT
*                                                                        FMDFT
 DIAG3    STD    D.T1        SAVE COUNT OF WORDS NOT WRITTEN             FMDFT
          LDM    BTSD        LOAD THE EXPECTED WORD COUNT 
          SBD    D.T1                                                    FMDFT
          STD    WT          STORE THE WORDS ACTUALLY TRANSFERRED         FMDFT 
          RJM    IJM         INSURE CHANNEL IS INACTIVE 
          NJN    DIAG5       JUMP IF CHANNEL INACTIVE 
          DCN    CH+40B      DEACTIVATE THE CHANNEL                      FMDFT
 DIAG5    LDD    D.T1                                                    FMDFT
          ZJN    DIAG6       IF ALL WORDS TRANSFERRED, EXIT TO STACK     FTENT
          LJM    RDW36                                                   FMDFT
 DIAG6    LJM    XENT        EXIT TO STACK
          EJECT                                                          FMDFT
 REFORM   TITLE  REFORM - PROCESS REFORM COMMAND.                        DIMA154
**        REFORM - PROCESS REFORM COMMAND.                               DIMA154
*                                                                        DIMA154
*                  REFORM X,ABT Z                                        DIMA154
*                                                                        DIMA154
*         ENTRY  - (PA) = FWA OF 7 PARAMETER WORDS TO SEND.              FTENT
*                                                                        DIMA154
*         EXIT   - RDW6   - IF ACCESS LEVEL NOT 4 OR GREATER.            DIMA154
*                  RDW37  - IF ALL DATA NOT ACCEPTED.                    DIMA154
*                                                                        DIMA154
*         USES   - PA, PA+1, WT, PA+4, D.Z1, REF2.                       DIMA154
*                                                                        DIMA154
*         CALLS  - BD.TEST - TEST BUFFER ADDRESS FOR RANGE OF IB-OB.     DIMA154
*                  FNO     - SEND FUNCTION PLUS PARAMETER.               DIMA154
*                  TDR     - TEST DRIVE RESERVE.                         DIMA154
*                                                                        DIMA154
                                                                         DIMA154
**        1. VERIFY DRIVE IS CONNECTED.                                  DIMA154
*                                                                        DIMA154
 REFORM   RJM    TDR         CALLER ENTRY POINT                          DIMA154
                                                                         DIMA154
**        2. CLEAR WORDS TRANSMITTED, THEN TEST ACCESS LEVEL FOR 4 OR    DIMA154
*            GREATER, IF NOT ERROR EXIT ELSE STEP 3.                     DIMA154
*                                                                        DIMA154
          LDD    AL                                                      DIMA154
          SBN    4                                                       DIMA154
          PJN    REF1        IF AL=4 OR GREATER                          DIMA154
          LJM    RDW6                                                    DIMA154
                                                                         DIMA154
**        3. TEST BUFFER ADDRESSES FOR WC ERROR.                         DIMA154
*                                                                        DIMA154
 REF1     LDN    7                                                       DIMA154
          STD    PA+1        STORE WORD COUNT                            DIMA154
          STD    PA+4        STORE WORD COUNT                            DIMA154
          RJM    BD.TEST     TEST ADDRESS FOR RANGE IB-OB                DIMA154
                                                                         DIMA154
**        4. OUTPUT FORMAT FUNCTION AND SEVEN WORDS OF DATA.             DIMA154
*                                                                        DIMA154
          LDM    1,PA                                                    DIMA467
          SCN    77B                                                     DIMA467
 REFU     ADN    **          APPEND UNIT NO.
          STM    1,PA                                                    DIMA467
          LDD    PA                                                      DIMA154
          STM    REF2        STORE OUTPUT ADDRESS                        DIMA154
          LDN    FMT         LOAD FORMAT FUNCTION                        DIMA154
          RJM    FNC         SEND FORMAT FUNCTION                        DIMA154
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          LDN    7                                                       DIMA154
          OAM    OB,CH       SEND SEVEN WORDS TO FMD CONTROLLER          DIMA154
 REF2     EQU    *-1                                                     DIMA154
          STD    D.Z1                                                    DIMA154
                                                                         DIMA154
**        5. IF ALL DATA ACCEPTED RETURN TO STACK, ELSE ERROR EXIT        DIMA15
*            RDW37 .                                                     DIMA154
*                                                                        DIMA154
          ZJN    REF3        JUMP IF ALL WORDS ACCEPTED                       DI
          LJM    RDW37       ERROR EXIT, DATA NOT ACCEPTED                DIMA15
                                                                         DIMA154
 REF3     DCN    CH+40B      DEACTIVATE THE CHANNEL 
          LJM    XENT        EXIT TO STACK                               FTENT
          EJECT                                                          DIMA154
 GET      TITLE  GET- READ SERIAL, FACTORY OR UTILITY FLAW MAP SECTORS.  FMDFT
**        GET    - READ SERIAL, FACTORY OR UTILITY FLAW MAP SECTORS.     FMDFT
*                                                                        FMDFT
*                  GET SERIAL, ABT Z                                     FMDFT
*                  GET FACTORY SECTOR X, ABT Z                           FMDFT
*                  GET FACTORY SEC X, ABT Z                              FMDFT
*                  GET UTILITY SECTOR X, ABT Z                           FMDFT
*                  GET UTILITY SEC X, ABT Z                              FMDFT
*                                                                        FMDFT
*         ENTRY  - (PA)   = CODE ------ 0 = SERIAL                       FTENT
*                  (PA+1) = SECTOR      1 = FACTORY                      FMDFT
*                                       2 = UTILITY                      FMDFT
*         EXIT   - NONE                                                  FMDFT
*                                                                        FMDFT
*         USES   - COD, RDWRF, D.T6, CC, CT, GETA, CS,
*                  D.T5, CL, RDW24C, D.T7 
*                                                                        FMDFT
*         CALLS  - TDR, RDW0                                             FMDFT
*                                                                        FMDFT
                                                                         FMDFT
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            FMDFT
*                                                                        FMDFT
 GET      RJM    TDR         CALLER ENTRY POINT                          FMDFT
          STD    COD         ELIMINATE CODED DATA CHECK                  FMDFT
          STD    RDWRF       INDICATE A READ OPERATION                   FMDFT
                                                                         FMDFT
**     2. EXECUTE THE SEEK SEQUENCE TO SEEK TO CYLINDER 1511B,           FMDFT
*         SECTOR 0 (SERIAL) OR SECTOR X (FACTORY, UTILITY)
*                                                                        FMDFT
          LDC    MAPCYL      CODE TO SET UP FOR THE SEEK                 DIMA487
          STD    D.T6        MAP CYLINDER NUMBER                         FMDFT
          LDN    D.T6        TO SET FOR SEEK                             FMDFT
          STD    CC          INDIRECT MEMORY REF.                        FMDFT
          LDN    D.T7                                                    FMDFT
          STD    CT                                                      FMDFT
          LDD    PA+1                                                    FMDFT
          STM    GETA                                                    FMDFT
          LDC    GETA                                                    FMDFT
          STD    CS                                                      FMDFT
          LDN    1                                                       FMDFT
          STD    D.T5        STORE NUMBER OF SECTORS TO READ             FMDFT
          LDN    D.T5                                                    FMDFT
          STD    CL          SET ADDRESS OF SECTORS TO READ              FMDFT
          LDC    BTSG        BLOCK TRANSFER SIZE, GET COMMAND            DEMAFT 
          STM    RDW24D                                                  DEMAFT 
                                                                         FMDFT
**     3. EXIT TO READ WRITE ROUTINE RDWR STEP 2.                        FMDFT
*                                                                        FMDFT
* 
*         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 
          LJM    RDW0        READ ONE SECTOR                             FMDFT
                                                                         FMDFT
 GETA     DATA   0           STORAGE FOR SECTOR NUMBER                   FMDFT
                                                                         DEMAFT 
          EJECT                                                          FMDFT
 MARGINS  TITLE  MARGINS - PROCESS MARGINS COMMAND.                      FMDFT
**        MARGINS- SAVE STROBES AND OFFSET MARGINS FOR LATER READS.      FMDFT
*                                                                        FMDFT
*                  MARGINS W, ABT Z                                      FMDFT
*                  MARGINS X OFFSET Y STROBES, ABT Z                     FMDFT
*                                                                        FMDFT
*         ENTRY  - (PA) = MARGINS                                        FTENT
*                                                                        FMDFT
*         EXIT   - MARGINS PARAMETER CONVERTED FOR FUNCTION              FMDFT
*                                                                        FMDFT
*                  ERRISO  - IF ILLEGAL STROBE/OFFSET WERE SELECTED      FMDFT
*                                                                        FMDFT
*         USES   - P, MARGINSA                                           FMDFT
*                                                                        FMDFT
*         CALLS  - ERA                                                   FMDFT
*                                                                        FMDFT
                                                                         FMDFT
**     1. VERIFY THAT MARGINS ARE LEGAL.                                 FMDFT
*                                                                        FMDFT
 MARGINS  LDD    PA          MARGIN PARAMETER WORD                       FTENT
          SCN    33B         MASK OUT LEGAL BITS                         FMDFT
          ZJN    MARGINS1    IF LEGAL PARAMETERS                         FMDFT
          LDC    ER.ISO      ERROR EXIT                                  FMDFT
          LJM    ERR                                                     FMDFT
                                                                         FMDFT
**     2. SAVE SELECTED MARGINS.                                         FMDFT
*                                                                        FMDFT
 MARGINS1 LDD    PA          PARAMETER WORD                              FMDFT
          SHN    2           LINE IT UP                                  FMDFT
          LPN    4           MASK IT                                     FMDFT
          STM    MARGINSA    STORE FORWARD OFFSET                        FMDFT
          LDD    PA          PARAMETER WORD                              FMDFT
          LPN    32B         MASK IN THE OTHER BITS                      FMDFT
          SHN    4           SHIFT TO CORRECT BIT POSITION               FMDFT
          RAM    MARGINSA    STORE IT                                    FMDFT
          LJM    XENT        EXIT TO STACK                               FTENT
          EJECT                                                          FMDFT
 RDWR     TITLE  RDWR - SEEK AND I/O THE REQUESTED NUMBER OF SECTORS.    FMDFT
**        RDWR   - SEEK AND I/O THE REQUESTED NUMBER OF SECTORS.         FMDFT
*                                                                        FMDFT
*                  READ V SECTORS AT CYL W TRK X SEC Y, ABT Z            FMDFT
*                  READ V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z      FMDFT
*                  READCW V SECTORS AT CYL W TRK X SEC Y, ABT Z          FMDFT
*                  VERIFY V SECTORS AT CYL W TRK X SEC Y, ABT Z          FMDFT
*                  VERIFY V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z    FMDFT
*                  WRITE V SECTORS AT CYL W TRK X SEC Y, ABT Z           FMDFT
*                  WRITE V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z     FMDFT
*                                                                        FMDFT
*         ENTRY  - (PA)     = BITS 0-2 = FUNCTION CODE                   FTENT
*                             BIT 4    = UNCODED/CODED FLAG              FMDFT
*                             BIT 5    = READ/WRITE FLAG                 FMDFT
*                                                                        FMDFT
*                  (CL) = V                                               737 
*                  (CC) = W                                               738 
*                  (CT) = X                                               739 
*                  (CS) = Y                                               740 
*                                                                        FMDFT
*         EXIT   - V = ZERO,                                             FMDFT
*                  W, X, AND Y = LAST CYL, TRK, AND SEC.                     FMD
*                                                                        FMDFT
*                  ER.IAL  - IF ACCESS LEVEL TO LOW FOR REQUEST          FMDFT
*                  ER.NIF  - IF NO INACTIVE TO LAST FUNCTION             FMDFT
*                  ER.NIDT - IF NO INACTIVE AFTER DATA TRANSFER          FMDFT
*                  ER.NIGS - IF NO INACTIVE TO GENERAL STATUS            FMDFT
*                  ER.GSNR - IF GENERAL STATUS NOT RETURNED              FMDFT
*                  ER.DCE  - IF DATA COMPARE ERROR                       FMDFT
*                  ER.IDR  - IF INCOMPLETE DATA RETURNED TO PP           FMDFT
*                  ER.DNA  - IF ALL DATA NOT ACCEPTED FROM PP            FMDFT
*                  ER.AGS  - IF ABNORMAL GENERAL STATUS 
*                  ER.STRY - IF SUCCESSFUL RETRY                            FMDF
*                                                                        FMDFT
*         USES   - RDW24D, RDWRF, COD, FUN, RDW16, RDW23+1, 
*                  D.T1, OB(500B-502B), RDW18, RDW22, RDW34B, 
*                  SB(0-24B), SBIE(0-24B), RETRY, RT, D.T4, 
*                  (CL), LF, WT, D.T2, RDW24F, RDW24G, D.T3, (CS), (CT) 
*                                                                        FMDFT
*         CALLS  - TDR, SEEK1, STS, DST 
*                                                                        FMDFT
                                                                         FMDFT
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            FMDFT
*                                                                        FMDFT
 RDWR     RJM    TDR         CALLER ENTRY POINT                          FMDFT
          LDC    BTSR        BLOCK TRANSFER SIZES, REGULAR I/O COMMANDS  DEMAFT 
          STM    RDW24D                                                  DEMAFT 
                                                                         FMDFT
**     2. VALIDATE  ACCESS  TO  THE  CYLINDER  SPECIFIED  BY W AND       FMDFT
*         EXECUTE THE SEEK SEQUENCE TO MOVE THE DISK POSITIONER.         FMDFT
*                                                                        FMDFT
          LDD    PA                                                      FMDFT
          SHN    18D-5D      SHIFT READ/WRITE FLAG TO BIT 0              FMDFT
          STD    RDWRF       SET/CLEAR READ/WRITE FLAG                   FMDFT
          SCN    1           CLEAR THE BIT                               FMDFT
          SHN    18D-4D-18D+5D SHIFT CODED FLAG TO BIT 0                 FMDFT
          STD    COD         SET/CLEAR THE CODED FLAG                    FMDFT
          SHN    0-14D       SHIFT IN THE FUNCTION                       FMDFT
                                                                         FMDFT
*         ENTRY POINT FOR GET AND WRPRO COMMANDS
                                                                         FMDFT
 RDW0     STD    FUN         SAVE THE FUNCTION                           FMDFT
          LDC    0303B                                                   FMDFT
          STM    RDW16       INDICATE NO RETRY                           FMDFT
          LDC    RDW24                                                   FMDFT
          STM    RDW23+1     SET JUMP ADDRESS FOR ALL BUT READCW         FMDFT
          LDM    RDWAL,RDWRF LOAD THE ACCESS LEVEL REQUIRED              FMDFT
          STD    D.T1                                                    FMDFT
          LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       FMDFT
          ZJN    RDW2        IF IT IS A READ                             FMDFT
          LDD    COD         GOT THE CODED WORD                          FMDFT
          ZJN    RDW1        IF NOT CODED                                FMDFT
          LDI    CC          CURRENT CYLINDER                            CODFT
          STM    OB+500B     LOCATION IN BUFFER FOR CODED CYLINDER       CODFT
 RDW1     LDC    0302B       FOR WRITE TYPE OPERATION FLAG               FMDFT
 RDW2     STM    RDW18       AND MODIFY REQUIRED LOCATIONS               FMDFT
          STM    RDW22                                                   FMDFT
          STM    RDW34B                                                  FMDFT
          LDD    COD                                                     FMDFT
          NJN    RDW3                                                    FMDFT
          STM    RDW22                                                   FMDFT
                                                                         FMDFT
 RDW3     LDN    RETRY-SB                                                FMDFT
          STD    D.T2        NUMBER OF WORDS IN SB TO CLEAR              FMDFT
 RDW4     LDN    0                                                       FMDFT
          STM    SB,D.T2     CLEAR THE STATUS BUFFER                     FMDFT
          SOD    D.T2                                                    FMDFT
          PJN    RDW4        IF NOT DONE                                 FMDFT
          LDD    FUN                                                     FMDFT
          LMN    RDCW                                                    FMDFT
          NJN    RDW5        IF NOT READCW                               FMDFT
          LDC    RDW30                                                   FMDFT
          STM    RDW23+1     SET JUMP ADDRESS FOR READCW                 FMDFT
          UJN    RDW7        IGNORE ACCESS LEVEL ON READCW               FMDFT
                                                                         FMDFT
 RDW5     LDD    BD.AL                                                   FMDFT
          SBD    D.T1        TO TEST ACCESS LEVEL                        FMDFT
          PJN    RDW7        IF ACC.LEV. NOT PREALLOCATED AREA.          FMDFT
          ADN    1           TO VERIFY ANY OPERATION OK                  FMDFT
          MJN    RDW6        IF PREALLOCATED OPERATION IS NOT OK         FMDFT
          LDC    MAXCDD-PRECYL   PREALLOCATED CYLINDER - 1
          SBI    CC          CURRENT CYLINDER                            FMDFT
          MJN    RDW7        IF CYL DESIRED IS IN PREALLOCATED AREA      FMDFT
 RDW6     LDC    ER.IAL      ERROR - ACCESS LEVEL TO LOW FOR REQ
          LJM    ERR         ERROR EXIT 
                                                                         FMDFT
 RDW7     RJM    SEEK1       TO SEEK TO DESIRED CYLINDER                 FMDFT
                                                                         FMDFT
**     3. EXECUTE  A  NORMAL EXIT IF THE CONTENTS OF REGISTER V IS       FMDFT
*         ZERO (NO SECTORS TO READ).                                     FMDFT
*                                                                        FMDFT
          LDI    CL          LOAD THE REMAINING SECTOR COUNT             FMDFT
          SHN    -2                                                      FMDFT
          RAD    RT                                                      FMDFT
          LDI    CL                                                      FMDFT
          NJN    RDW11       IF THERE ARE SECTORS TO READ                FMDFT
          LJM    XENT        EXIT TO STACK                               FTENT
                                                                         FMDFT
**     4. ISSUE SELECTED STROBES AND OFFSET OPTIONS IF  THEY  HAVE       FMDFT
*         BEEN DEFINED BY A PREVIOUS MARGINS COMMAND.                    FMDFT
*                                                                        FMDFT
 RDW11    LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       FMDFT
          NJN    RDW12       SKIP MARGINS ON WRITE OPERATIONS            FMDFT
          LDC    **          *** STROBE AND OFFSET SELECTIONS            FMDFT
 MARGINSA EQU    *-1                                                     FMDFT
          ZJN    RDW12                                                   DIMA487
          STD    D.T4        SAVE FOR MARGINS FUNCTION                   FMDFT
          LDN    SSO         LOAD THE FUNCTION                           FMDFT
          RJM    FNO         TO SEND MARGIN FUNCTION                     FMDFT
                                                                         FMDFT
**     5. 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 
 RDW12    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    RDW13       JUMP IF STARTING WITH ODD HALF TRACKS
          LDN    TRL+1       ELSE FOR EVEN ADD ALL ODD TRACK COUNT       FT2TO1 
 RDW13    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    RDW13A      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 
 RDW13A   UJN    RDW17
                                                                         FMDFT
**     6. PASS                                                           FMDFT
*                                                                        FMDFT
**     7. DECREMENT  THE  CONTENTS OF REGISTER V BY ONE (NUMBER OF       FMDFT
*         SECTORS REMAINING TO BE READ). IF THE  RESULT  IS  ZERO,       FMDFT
*         PERFORM A NORMAL COMMAND EXIT.                                 FMDFT
*                                                                        FMDFT
                                                                         FMDFT
**     8. INCREMENT THE CONTENTS OF REGISTERS W,X,Y PER THE              FMDFT
*         1-1 INTERLACE FLOW-CHART. IF WE ARE ABOUT TO WRITE THE         FMDFT
*         LAST SECTOR ON A 7155 CONTROLLER, A WRITE LAST SECTOR          FMDFT
*         FUNCTION IS USED (0036 FOR WRITE, OR 0037 FOR WRITE VERIFY).   FMDFT
*                                                                        FMDFT
 RDW16    UJN    *+3         *** JUMP *+3 IF NO RETRY                    FMDFT
*         DATA   0           *** DATA 0 IF RETRY DONE                    FMDFT
          LJM    ERRSTRY     ERROR - SUCCESSFUL RETRY 
                                                                         FMDFT
 RDW17    LDI    CL          CURRENT LENGTH IN SECTORS
          NJN    RDW18       IF MORE SECTORS TO PROCESS                  FMDFT
          LJM    XENT        IF DONE, EXIT TO STACK                      FTENT
                                                                         FMDFT
 RDW18    UJN    *+2         *** UJN *+2 FOR A WRITE TYPE FUNCTION       FMDFT
*         DATA   0           *** DATA  0 FOR A READ TYPE FUNCTION        FMDFT
          UJN    RDW20       IF READ                                     FMDFT
                                                                         FMDFT
          LMN    1                                                       FMDFT
          NJN    RDW20       JUMP IF NOT THE LAST SECTOR
          LDD    FUN                                                     FMDFT
          SBN    37B                                                     DIMA154
          ZJN    RDW20       IF WRITE PROTECTED SECTOR                   DIMA154
          ADN    37B+30B     CREATE WRITE LAST SECTOR FUNCTION           DIMA154
          UJN    RDW21       TO PERFORM THE FUNCTION                     FMDFT
                                                                         FMDFT
**     9. ISSUE A FUNCTION TO READ, READCW, WRITE VERIFY, WRITE,         FMDFT
*         CONTINUE, WRITE VERIFY LAST SECTOR, OR WRITE LAST SECTOR.      FMDFT
*                                                                        FMDFT
 RDW20    LDD    FUN         LOAD THE FUNCTION                           DEMAFT 
 RDW21    FAN    CH+40B      SEND THE FUNCTION                           DEMAFT 
          STD    LF          SAVE THE FUNCTION                           DEMAFT 
          LDN    0                                                       DEMAFT 
          STD    WT          CLEAR REG. FOR CUM. NO. WORDS TRANSFERRED   DEMAFT 
                                                                         DEMAFT 
 RDW22    UJN    *+2         ** UJN *+2 FOR A CODED TYPE FUNCTION        DEMAFT 
*         DATA   0           *** DATA  0 FOR A NON-CODED TYPE FUNCTION   DEMAFT 
          UJN    RDW23       IF NON-CODED                                DEMAFT 
                                                                         DEMAFT 
**    10. IF THE KEYWORD CODED WAS SPECIFIED IN THE WRITE OR VERIFY      DEMAFT 
*         COMMAND, STORE THE FOLLOWING DATA INTO THE PP OUTPUT BUFFER.   DEMAFT 
*                                                                        DEMAFT 
*           OB(500) = REGISTER W (CYLINDER)                                   FT
*           OB(501) = REGISTER X (TRACK)                                      FT
*           OB(502) = REGISTER Y (SECTOR)                                 DEMAFT
*                                                                        DEMAFT 
          LDI    CT          CURRENT TRACK
          STM    OB+501B     LOCATION IN BUFFER FOR CODED TRACK 
          LDI    CS          CURRENT SECTOR 
          STM    OB+502B     LOCATION IN BUFFER FOR CODED SECTOR
                                                                         DEMAFT 
                                                                         DEMAFT 
 RDW23    IJM    RDW24,CH    IF CHANNEL DEACTIVATED                      DEMAFT 
*         IJM    RDW30,CH    *** IF READCW COMMAND                       DEMAFT 
          ADN    1                                                       DEMAFT 
          NJN    RDW22       LOOP ON CHANNEL ACTIVE                      DEMAFT 
          LJM    ERRNIF      ERROR - NO INACTIVE TO LAST FUNC 
                                                                         DEMAFT 
**    11. INPUT OR OUTPUT THE NUMBER OF WORDS SPECIFIED BY (A) TO/FROM   DEMAFT 
*         THE PP INPUT/OUTPUT BUFFER.  IF THE A REGISTER IS NON ZERO     DEMAFT 
*         AFTER COMPLETION, GO TO STEP 14.                               DEMAFT 
                                                                         DEMAFT 
**     A. ISSUE THE REQUESTED FUNCTION                                   DEMAFT 
 RDW24    LDD    FUN         LOAD FUNCTION CODE                          DEMAFT 
          SBN    RFD         COMPARE IF READ FACTORY DATA                DEMAFT 
          ZJN    RDW24A      JUMP IF RFD                                 DEMAFT 
          SBN    RUM-RFD     COMPARE IF READ UTILITY MAP                 DEMAFT 
          ZJN    RDW24A      JUMP IF RUM                                 DEMAFT 
          SBN    WRP-RUM     COMPARE IF WRITE PROTECTED SECTOR           DEMAFT 
          ZJN    RDW24A      JUMP IF WRP                                 DEMAFT 
          LDN    4           SET LOOP COUNT FOR 5 PP I/O BLOCK TRANSFERS DEMAFT 
 RDW24A   STD    D.T2                                                    DEMAFT 
          ACN    CH+40B      ACTIVATE THE CHANNEL                        DEMAFT 
                                                                         DEMAFT 
**     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    RDW24F      STORE 1ST 12 BITS OF ASSEMBLED INSTRUCTION 
  
**     C. START OF LOOP TO TRANSFER DATA
*         ONE PP I/O BLOCK TRANSFER PER ITERATION 
* 
 RDW24B   LDM    IOBA,RDWRF  LOAD PP I/O BUFFER ADDRESS - OB OR IB
          STM    RDW24G      STORE 2ND 12 BITS OF ASSEMBLED INSTRUCTION 
  
**     D. SELECT CURRENT PP I/O BLOCK TRANSFER SIZE 
* 
 RDW24C   LDM    **,D.T2     CURRENT PP I/O BLOCK TRANSFER SIZE (BTS) 
 RDW24D   EQU    RDW24C+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    RDW24E      JUMP IF NOT BTS = 140B 
          LDC    344B        SELECT IB/OB(344B) AS FWA FOR I/O BUFFER 
          RAM    RDW24G      BIAS 2ND WORD OF PP I/O INSTRUCTION BY 344B
  
**     F. EXECUTE PP I/O BLOCK DATA TRANSFER (OAM OR IAM INSTRUCTION) 
* 
 RDW24E   LDD    D.T3        CURRENT PP I/O BLOCK TRANSFER SIZE (BTS) 
 RDW24F   OAM    **,0        WRITE/READ FROM/TO OUTPUT/INPUT BUFFER 
 RDW24G   EQU    RDW24F+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. DEMAFT 
*                                                                        DEMAFT 
          STD    D.T1        SAVE COUNT OF WORDS NOT WRITTEN             DEMAFT 
          LDD    D.T3        CURRENT PP BLOCK TRANSFER SIZE              DEMAFT 
          SBD    D.T1        COMPUTE NO. WORDS ACTUALLY TRANSFERRED      DEMAFT 
          RAD    WT          UPDATE CUMULATIVE NO. WORDS TRANSFERRED     DEMAFT 
          LDD    D.T1        COUNT OF WORDS NOT WRITTEN                  DEMAFT 
          NJN    RDW28       IF NOT ZERO, EARLY (ERROR) EXIT             DEMAFT 
                                                                         DEMAFT 
**     H. UPDATE LOOP COUNT FOR PP I/O BLOCK TRANSFERS
*                                                                        DEMAFT 
          SOD    D.T2        DECREMENT LOOP COUNT                        DEMAFT 
          PJN    RDW24B      LOOP BACK IF NOT LAST PP BLOCK I/O 
                                                                         DEMAFT 
**     I. COMPLETE I/O OPERATION                                         DEMAFT 
*                                                                        DEMAFT 
          LDD    RDWRF       READ/ WRITE FLAG                            DEMAFT 
          NJN    RDW29       JUMP IF WRITE                               DEMAFT 
 RDW27    IJM    RDW30,CH    JUMP IF CHANNEL DEACTIVATED PROPERLY        DEMAFT 
          ADN    1                                                       DEMAFT 
          PJN    RDW27       JUMP IF NOT TIMED OUT                       DEMAFT 
          LJM    ERRNIDT     ERROR - NO INACTIVE AFTER DATA XFER
 RDW28    LJM    RDW35       ERROR EXIT 
 RDW29    DCN    CH+40B      DEACTIVATE THE CHANNEL                      DEMAFT 
                                                                         FMDFT
**    12. REQUEST  AND  INPUT  GENERAL  STATUS TO DETERMINE IF THE       FMDFT
*         OPERATION COMPLETED SUCCESSFULY. IF  GENERAL  STATUS  IS       FMDFT
*         ZERO (NO ERROR), GO TO STEP 13. EXECUTE THE  ERROR  EXIT       FMDFT
*         SEQUENCE  IF  THE  RETRY  COUNT  IN THE STATUS BUFFER IS       FMDFT
*         NON-ZERO (THE READ OF THIS  SECTOR  HAS  BEEN  COMPLETED       FMDFT
*         SUCCESSFULLY  BUT  A  RETRY WAS REQUIRED, SO CONTROL  IS       FMDFT
*         RETURNED TO THE USER FOR  POSSIBLE  MESSAGE  REPORTING).       FMDFT
*                                                                        FMDFT
 RDW30    FNC    GS,CH       FUNCTION FOR GENERAL STATUS                 FMDFT
                                                                         FMDFT
          RJM    IJM         WAIT CHANNEL INACTIVE                       DIMA534
          NJN    RDW33                                                   DIMA534
          LJM    ERRNIGS     ERROR - NO INACTIVE TO GENERAL STATUS
                                                                         FMDFT
 RDW33    ACN    CH+40B      ACTIVATE THE CHANNEL                        FMDFT
          LCN    0                                                       DIMA353
          IAN    CH+40B      AND INPUT TO A                              FMDFT
          STM    SB          SAVE STATUS                                 FMDFT
          IJM    RDW34B,CH   IF CHANNEL DEACTIVATED                      FMDFT
          LMC    7777B                                                   DIMA353
          ZJN    RDW34       IF NO GENERAL STATUS RECEIVED               DIMA353
 RDW33A   IJM    RDW34B,CH   IF CHANNEL DEACTIVATED                      DIMA353
          ADN    1                                                       DIMA353
          PJN    RDW33A      IF NOT TIMED OUT                            DIMA353
 RDW34    LJM    ERRGSNR     ERROR - GENERAL STATUS NOT RETURNED
                                                                         FMDFT
**    13. IF  THE KEYWORD CODED WAS SPECIFIED IN THE READ COMMAND,       FMDFT
*         COMPARE THE CONTENTS OF THE FOLLOWING_                         FMDFT
*                                                                        FMDFT
*           IB(500B) TO REGISTER W (CYLINDER)                            CODFT
*           IB(501B) TO REGISTER X (TRACK)                               CODFT
*           IB(502B) TO REGISTER Y ( SECTOR)                             CODFT
*                                                                        FMDFT
*         IF A NON-COMPARE IS DETECTED,  EXECUTE  THE  ERROR  EXIT       FMDFT
*          SEQUENCE.                                                     FMDFT
*                                                                        FMDFT
                                                                         FMDFT
 RDW34A   LDD    COD         CODED DATA FLAG
          ZJN    RDW34D      JUMP IF NOT CODED DATA 
          LDM    IB+500B     CHECK FOR CORRECT CODING (CYLINDER)         CODFT
          ADM    IB+501B                               (TRACK)
          ADM    IB+502B                               (SECTOR) 
          SBI    CC          CURRENT CYLINDER                            FMDFT
          SBI    CT          CURRENT TRACK
          SBI    CS          CURRENT SECTOR 
          ZJN    RDW34D      IF NO CODING ERROR                          FMDFT
          RJM    STS         GET GENERAL STATUS FOR CODED ERROR 
          LDC    ER.DCE      ERROR - DATA COMPARE ERROR 
          UJN    RDW36B                                                  DIMA550
 RDW34B   UJN    *+2         *** UJN *+2 FOR A WRITE TYPE FUNCTION       FMDFT
*         DATA   0           *** DATA  0 FOR A READ TYPE FUNCTION        FMDFT
          UJN    RDW34A      READ                                        FMDFT
                                                                         FMDFT
                                                                         FMDFT
 RDW34D   LDM    SB          TEST FOR GENERAL STATUS ERROR
          NJN    RDW39       JUMP IF GENERAL STATUS ERROR 
                                                                         FMDFT
                                                                         FT2TO1 
**        UPDATE SECTOR AND TRACK COUNTS                                 FT2TO1 
*                                                                        FT2TO1 
*         DECREMENT THE CONTENTS OF REGISTER V BY ONE (NUMBER OF SECTORS FT2TO1 
*         REMAINING TO BE PROCESSED).  IF THE RESULT IS ZERO, PERFORM A  FT2TO1 
*         NORMAL COMMAND EXIT.                                           FT2TO1 
*                                                                        FT2TO1 
          SOI    CL          DECREMENT THE SECTORS REMAINING COUNT  (V)  FT2TO1 
          ZJN    RDW34F      EXIT TO STACK IF SECTORS ALL PROCESSED 
                                                                         FT2TO1 
**        INCREMENT THE CONTENTS OF REGISTER X AND Y PER THE 2 TO 1      FT2TO1 
*         INERLACE FLOW CHART.                                           FT2TO1 
*                                                                        FT2TO1 
          LDN    SEI         SECTOR INCREMENT                            FT2TO1 
          RAI    CS          INCREMENT CURRENT SECTOR COUNT              FT2TO1 
          SBN    SEL+1       TEST IF SECTOR COUNT .GT. 37B               FT2TO1 
          MJN    RDW34E      JUMP IF NO, GO PROCESS NEXT SECTOR          FT2TO1 
          STI    CS          SUBTRACT 40B FROM CURRENT SECTOR            FT2TO1 
          AOI    CT          INCREMENT CURRENT TRACK COUNT               FT2TO1 
          SBN    TRL+1       TEST IF TRACK COUNT .GT. 11B                FT2TO1 
          MJN    RDW34E      JUMP IF NO, GO PROCESS NEXT SECTOR          FT2TO1 
          STI    CT          RESET CURRENT TRACK COUNT TO ZERO           FT2TO1 
          LDN    1           SET CURRENT SECTOR COUNT TO 1               FT2TO1 
          STI    CS          SWITCH TO ODD HALF TRACK                    FT2TO1 
 RDW34E   LJM    RDW16       GO PROCESS NEXT SECTOR                      FT2TO1 
                                                                         FT2TO1 
 RDW34F   LJM    XENT        EXIT TO STACK                               FT2TO1 
                                                                         FMDFT
                                                                         FMDFT
**    14. PROCESS FOR READ ABORT BECAUSE THE  A  REGISTER IS NOT EQUAL   FMDFT
*         ZERO. SAVE THE COUNT OF ACTUAL WORDS READ IN LOCATION  WT      FMDFT
*         AND EXIT.                                                      FMDFT
*                                                                        FMDFT
 RDW35    RJM    STS         TO PROVIDE GENERAL STATUS                     DEMAF
 RDW36    LDD    RDWRF       IS IT WRITE (NOT ZERO) OR READ (ZERO)       FMDFT
          NJN    RDW37       IF IT IS A WRITE                            FMDFT
          LDC    ER.IDR      ERROR - INCOMPLETE DATA RETURNED TO PP 
 RDW36B   UJN    RDW38       GET DETAIL STATUS AND ERROR EXIT 
                                                                         FMDFT
 RDW37    LDC    ER.DNA      ERROR - ALL DATA NOT ACCEPTED FROM PP
 RDW38    LJM    ERRDST      GO GET DETAIL STATUS AND ERROR EXIT         FMDFT
                                                                         FMDFT
**    15. REQUEST AND INPUT DETAIL STATUS.  EXECUTE THE ERROR EXIT       FMDFT
*         SEQUENCE IF BIT 2**9 IS SET IN GENERAL STATUS.                 FMDFT
*         (NONRECOVERABLE ERROR).                                        FMDFT
*                                                                        FMDFT
 RDW39    RJM    DST         TO GET DETAILED STATUS                      FMDFT
          LDM    SB          GENERAL STATUS                               FMDFT 
          SHN    17D-UNR                                                 FMDFT
          MJN    RDW41       JUMP IF AN UNRECOVERED ERROR 
                                                                         FMDFT
**    16. IF BIT 2**8 IS CLEAR (NO RECOVERY IN PROGRESS) ENTER THE       FMDFT
*         ERROR EXIT SEQUENCE. (GENERAL STATUS AT  THIS  POINT  IS       FMDFT
*         STRANGE  SINCE  IT  IS NOT ZERO, BUT DOES NOT INDICATE A       FMDFT
*         RECOVERABLE OR NONRECOVERABLE ERROR).                          FMDFT
*                                                                        FMDFT
          SHN    17D-RIP-17D+UNR   TEST IF RECOVERY IN PROGRESS 
          MJN    RDW50       IF RECOVERY IN PROGRESS                     FMDFT
 RDW41    LDC    ER.AGS      ERROR - ABNORMAL GENERAL STATUS
          UJN    RDW44       JUMP TO ERR EXIT                            FMDFT
                                                                         FMDFT
 ERRSTRY  EQU    *                                                       FMDFT
          AOI    CL                                                      FMDFT
          SBN    1                                                       FMDFT
          ZJN    RDW43                                                   FMDFT
          SOI    CS                                                      FMDFT
          PJN    RDW43                                                   FMDFT
          LDN    0                                                       FMDFT
          STI    CS                                                      FMDFT
          SOI    CT                                                      FMDFT
                                                                         FMDFT
 RDW43    LDC    ER.STRY     ERROR - SUCCESSFUL RETRY                       1132
 RDW44    LJM    ERR         ERROR EXIT 
                                                                         FMDFT
**    17. IF BIT 2**8  IS SET (RECOVERY IN PROGRESS), DETERMINE IF       FMDFT
*         THE RETRY COUNT IN THE STATUS BUFFER IS ZERO (FIRST TIME       FMDFT
*         FAILURE).  IF SO, REQUEST AND INPUT  DETAIL  STATUS  AND       FMDFT
*         STORE  IT  AND GENERAL STATUS INTO WORDS 25B THRU 51B OF       FMDFT
*         THE STATUS BUFFER TO CAPTURE THE  ORIGINAL  STATUS  THAT       FMDFT
*         CAUSED  RECOVERY  TO  BE  PERFORMED.   ISSUE  A CONTINUE       FMDFT
*         FUNCTION  (0014), BUMP  THE  RETRY  COUNTER  IN  THE  PP       FMDFT
*         STATUS BUFFER AND GO TO STEP 6 TO PERFORM A RETRY OF THE       FMDFT
*         READ.                                                          FMDFT
*                                                                        FMDFT
 RDW50    LDM    RETRY                                                   FMDFT
          NJN    RDW52       IF NOT THE FIRST ERROR RETRY                FMDFT
          STM    RDW16       INDICATE A RETRY TO CRITICAL TIMING LOOP    FMDFT
          LDN    25B         ELSE MOVE THE INITIAL ERROR TO SBIE         FMDFT
          STD    D.T1                                                    FMDFT
 RDW51    LDM    SB,D.T1     LOAD A WORD                                 FMDFT
          STM    SBIE,D.T1   STORE A WORD                                FMDFT
          SOD    D.T1        DECREMENT THE COUNT                         FMDFT
          PJN    RDW51       IF NOT DONE MOVING WORDS                    FMDFT
 RDW52    AOM    RETRY       INCREMENT THE RETRY COUNT                   FMDFT
          SBN    28D                                                     FMDFT
          PJN    RDW43       IF GT 27D RETRIES                           FMDFT
          LDN    CONT        FOR THE CONTINUE FUNCTION                   FMDFT
          LJM    RDW21       TO INPUT AFTER A CONTINUE                   FMDFT
                                                                         FMDFT
*         THE FOLLOWING FUNCTION TABLE MUST BE KEPT IN ORDER.            FMDFT
                                                                         FMDFT
 RDWAL    VFD    12/ARD      ACCESS LEVEL FOR READ ANYWHERE              FMDFT
          VFD    12/ARW      ACCESS LEVEL FOR WRITE ANYWHERE             FMDFT
                                                                         DEMAFT 
*         BLOCK TRANSFER SIZES, REGULAR I/O COMMANDS                     DEMAFT 
*         (USED IN REVERSE ORDER) 
*                                                                        DEMAFT 
 BTSR     DATA   500B,500B,500B,500B,140B                                DEMAFT 
* 
*         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                                                          FMDFT
 RESET    TITLE  RESET - AUTOLOAD THE BC TO RESTART CONTROLWARE.         FMDFT
**        RESET  - AUTOLOAD THE BC TO RESTART CONTROLWARE AT THE IDLE    FMDFT
*                  LOOP.                                                 FMDFT
*                                                                        FMDFT
*                  RESET, ABT Z                                          FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FTENT
*                                                                        FMDFT
*         EXIT   - NONE                                                  FMDFT
*                                                                        FMDFT
*         USES   - P                                                     FMDFT
*                                                                        FMDFT
*         CALLS  - TCA, FNC                                              FMDFT
*                                                                        FMDFT
                                                                         FMDFT
**     1. VERIFY THAT THE I/O CHANNEL IS ASSIGNED.                       FMDFT
*                                                                        FMDFT
 RESET    RJM    TCA         CHECK CHANNEL ASSIGNED                      FTENT
                                                                         FMDFT
**     2. ISSUE AN AUTOLOAD FUNCTION, ACTIVATE AND DEACTIVATE THE I/O    FMDFT
*         CHANNEL TO CAUSE THE BC TO RE-START EXECUTION.                 FMDFT
*                                                                        FMDFT
          LDC    AUTO                                                    FMDFT
          RJM    FNC         TO FUNCTION AUTOLOAD                        FMDFT
          ACN    CH          ACTIIVATE THE CHANNEL                       FMDFT
          LDN    40B         DELAY A LITTLE                              FMDFT
 RESET1   SBN    1                                                       FMDFT
          NJN    RESET1      IF NOT END OF DELAY                         FMDFT
          DCN    CH+40B      DEACTIVATE THE CHANNEL                      FMDFT
          STM    COCON       SET CONTROLLER CONNECTED FLAG               DIMA599
 RESET2   LJM    XENT        EXIT TO STACK                               FTENT
          EJECT                                                          FMDFT
 RTNADDR  TITLE  RTNADDR- PERFORM A RETURN CYLINDER ADDR FNC.            FMDFT
**        RTNADDR- PERFORM A RETURN CYLINDER ADDRESS FUNCTION.           FMDFT
*                                                                        FMDFT
*                  RTNADDR TO Y, ABT Z                                   FMDFT
*                                                                        FMDFT
*         ENTRY  - (PA) = Y                                              FTENT
*                                                                        FMDFT
*         EXIT   - (PA) = THE ADDRESS RETURNED                           FMDFT
*                                                                        FMDFT
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  FMDFT
*                  ERRNIDT - IF NO INACTIVE AFTER DATA TRANSFER          FMDFT
*                  ERRWC   - IF BUFFER ADDRESS OR WC INCORRECT           FMDFT
*                                                                        FMDFT
*         USES   - (PA), P                                               FMDFT
*                                                                        FMDFT
*         CALLS  - TCO, STS, FNC, FJM, IJM                               FMDFT
*                                                                        FMDFT
                                                                         FMDFT
**     1. VERIFY THAT THE CONTROLLER IS CONNECTED.                       FMDFT
*                                                                        FMDFT
 RTNADDR  RJM    TCO                                                     FMDFT
                                                                         FMDFT
**     2. VERIFY THAT Y IS IN RANGE OF THE INPUT BUFFER.                 FMDFT
*                                                                        FMDFT
          LDN    1                                                       DIMA487
          STD    PA+1        WORD COUNT FOR RTNADDR                      DIMA487
          RJM    BD.TEST     TEST IF ADDRESS WITHIN RANGE                DIMA487
                                                                         DIMA487
                                                                         FMDFT
**     3. REQUEST AND INPUT GENERAL STATUS AND VERIFY THAT IT IS ZERO.   FMDFT
*                                                                        FMDFT
          RJM    STS         TO GET STATUS                               FMDFT
          SHN    17D-BUSY                                                FMDFT
          PJN    RTNADDR3    IF STATUS IS OK                             FMDFT
          LJM    ERRAGS      ELSE ERROR EXIT                             FMDFT
                                                                         FMDFT
**     4. ISSUE A RETURN CYLINDER ADDRESS FUNCTION (0021).               FMDFT
*                                                                        FMDFT
 RTNADDR3 LDN    RCA                                                     FMDFT
          RJM    FNC         TO FUNCTION RETURN CYLINDER ADDRESS         FMDFT
                                                                         FMDFT
**     5. PERFORM A ONE WORD INPUT AND STORE IT INTO THE INPUT BUFFER    FMDFT
*         AT THE ADDRESS SPECIFIED BY Y.                                 FMDFT
*                                                                        FMDFT
          ACN    CH+40B      TO ACTIVATE AND                             FMDFT
          RJM    FJM         WAIT FULL                                   FMDFT
          ZJN    RTNADDR4    IF NO FULL                                  FMDFT
          IAN    CH+40B      INPUT THE WORD                              FMDFT
          STI    PA          SAVE THE WORD                               FMDFT
          RJM    IJM         INSURE THE CHANNEL DEACTIVATES              FMDFT
          NJN    RESET2      EXIT TO STACK IF NOT TIMED OUT              FTENT
                                                                         FMDFT
 ERRNIDT  EQU    *                                                       FMDFT
 RTNADDR4 LDC    ER.NIDT     ELSE ERROR EXIT                             FMDFT
          LJM    ERR                                                     FMDFT
          EJECT                                                          FMDFT
 SCAN     TITLE  SCAN - SEND SCAN FUNCTION.                              DIMA154
**        SCAN - SEND SCAN FUNCTION.                                     DIMA154
*                                                                        DIMA154
*                  SCAN,ABT Z                                            DIMA154
*                                                                        DIMA154
*         ENTRY  - NONE                                                  FTENT
*                                                                        DIMA154
*         EXIT   - NONE.                                                 DIMA154
*                                                                        DIMA154
*         USES   - NONE.                                                 DIMA154
*                                                                        DIMA154
*         CALLS  - TDR     - TEST DRIVE RESERVE.                         DIMA154
*                  FNC     - SEND FUNCTION TO CONTROLLER.                DIMA154
*                                                                        DIMA154
                                                                         DIMA154
**        1. TEST DRIVE CONNECTED.                                       DIMA154
*                                                                        DIMA154
 SCAN     RJM    TDR                                                     DIMA154
                                                                         DIMA154
**        2. SEND SCAN FUNCTION TO FMD CONTROLLER.                       DIMA154
*                                                                        DIMA154
          LDN    FSCAN       SCAN FUNCTION                               DIMA154
          RJM    FNC                                                     DIMA154
                                                                         DIMA154
**        3. RETURN TO CALLER.                                           DIMA154
*                                                                        DIMA154
 SCAN1    LJM    XENT        EXIT TO STACK                               FTENT
          EJECT                                                          DIMA154
 SEEK     TITLE  SEEK - SEEK TO THE ADDRESS SPECIFIED.                   FMDFT
**        SEEK   - SEEK TO THE ADDRESS SPECIFIED.                        FMDFT
*                                                                        FMDFT
*                  SEEK CYL W TRK X SEC Y, ABT Z                         FMDFT
*                                                                        FMDFT
*         ENTRY  - (CC) = W 
*                  (CT) = X                                                   12
*                  (CS) = Y                                                   12
*                                                                        FMDFT
*         EXIT   - SEEK COMPLETED TO NEW ADDRESS                         FMDFT
*                                                                        FMDFT
*                  ERRAGS  - IF ABNORMAL GENERAL STATUS                  FMDFT
*                  ERRCNC  - IF CONTROLLER/DRIVE NOT CONNECTED           FMDFT
*                  ERRFPNA - IF FUNCTION PARAMETERS NOT ACCEPTED         FMDFT
*                  ERRUHB  - IF THE UNIT IF BUSY FOR OVER 200 MSEC       FMDFT
*                                                                        FMDFT
*         USES   - P, SEEKA(0-4), SBIE, D.T1, D.T2                       FMDFT
*                                                                        FMDFT
*         CALLS  - TDR, STS, FNC, DST                                    FMDFT
*                                                                        FMDFT
                                                                         FMDFT
**     1. VERIFY THAT THE DRIVE IS CONNECTED.                            FMDFT
*                                                                        FMDFT
 SEEK     RJM    TDR         INSURE DRIVE CONNECTED                      FTENT
          RJM    SEEK1       TO DO A SEEK                                FMDFT
          UJN    SCAN1       EXIT TO STACK                               FTENT
                                                                         FMDFT
 SEEK1X   LJM    **          SECONDARY ENTRY/EXIT                        FMDFT
 SEEK1    EQU    *-1                                                     FMDFT
          LDN    0           PROVIDES SEEK TIME BIASED BY MINUS ONE      FMDFT
          STD    SEEKA       PRESET CURRENT SEEK TIME                    FMDFT
          RJM    STS         TO GET STATUS                               FMDFT
          SHN    17D-CRES                                                FMDFT
          PJN    SEEK3                                                   FMDFT
          LJM    ERRCNC      ELSE IT IS AN ERROR                         FMDFT
                                                                         FMDFT
                                                                         FMDFT
**     2. PRESET SEEK FUNCTION DATA                                      FMDFT
*                                                                        FMDFT
 SEEK3    LDM    UN          UNIT NUMBER                                 FMDFT
          STD    SEEKA+1                                                 FMDFT
          LDI    CC          CURRENT CYLINDER                            FMDFT
          STD    SEEKA+2                                                 FMDFT
          LDI    CT          CURRENT TRACK                               FMDFT
          STD    SEEKA+3                                                 FMDFT
          LDI    CS          CURRENT SECTOR                              FMDFT
          STD    SEEKA+4                                                 FMDFT
                                                                         FMDFT
**     3. ISSUE A 2 TO 1 SEEK FUNCTION (0002)                            FT2TO1 
*                                                                        FMDFT
          IANN   14B         INPUT THE REAL TIME CLOCK                   FMDFT
          STD    D.T1                                                    FMDFT
 SEEK5    LDN    SEK21       SEEK 2 TO 1 INTERLACE                       FT2TO1 
          RJM    FNC         TO SEND A FUNCTION                          FMDFT
                                                                         FMDFT
**     4. OUTPUT 4 SEEK PARAMETER WORDS AND STORE THE NUMBER OF WORDS    FMDFT
*         ACTUALLY OUTPUT INTO THE WT REGISTER. VERIFY THAT 4 WORDS      FMDFT
*         WERE ACTUALLY TRANSMITTED.                                     FMDFT
*                                                                        FMDFT
          LDN    4           WORD COUNT                                  FMDFT
          ACN    CH+40B      ACTIVATE THE CHANNEL                        FMDFT
          OAM    SEEKA+1,CH  OUTPUT THE SEEK DATA                        FMDFT
          ZJN    SEEK6       IF OUTPUT COMPLETE                          FMDFT
          LJM    ERRFPNA     ELSE ERROR EXIT                             FMDFT
                                                                         FMDFT
 SEEK6    DCN    CH+40B      DEACTIVATE THE CHANNEL                      FMDFT
                                                                         FMDFT
**     5. REQUEST AND INPUT GENERAL STATUS.                              FMDFT
*                                                                        FMDFT
          RJM    STS         TO OBTAIN STATUS                            FMDFT
                                                                         FMDFT
**     6. GO TO STEP 3 IF UNIT IS STILL BUSY AND 200 MSEC HAS NOT        FMDFT
*         ELAPSED (ABORT WHEN TIME ELAPSES).                             FMDFT
*                                                                        FMDFT
          SHN    17D-BUSY    TEST FOR BUSY                               FMDFT
          PJN    SEEK11      IF NOT BUSY JUMP                            FMDFT
          LDC    1000D       WAIT AND TRY AGAIN                          FMDFT
          RAD    D.T1                                                    FMDFT
 SEEK8    IANN   14B         CHECK CLOCK AGAIN                           FMDFT
          STD    D.T2                                                    FMDFT
          LDD    D.T1                                                    FMDFT
          SBD    D.T2                                                    FMDFT
          ZJN    SEEK9       IF TIMING LOOP IS COMPLETE                  FMDFT
          SHN    17D-11D     TO ELIMINATE CLOCK WRAP AROUND               FMDFT 
          PJN    SEEK8       IF NOT TIMED OUT                            FMDFT
 SEEK9    AOD    SEEKA       INCREMENT ITERATION COUNT IF TIMED OUT      FMDFT
          LMC    200000D/1000D COUNT LIMIT FOR BUSY                      FMDFT
          NJN    SEEK5       IF BUSY NOT TIMED OUT                       FMDFT
                                                                         FMDFT
          LDC    ER.UHB      AND ERROR EXIT                              FMDFT
 ERRDST   STD    D.T2                                                    FMDFT
          RJM    DST         GET DETAIL STATUS                           FMDFT
          LDD    D.T2                                                    FMDFT
          LJM    ERR                                                     FMDFT
                                                                         FMDFT
**     7. STORE THE NUMBER OF MILLISECONDS REQUIRED TO COMPLETE THE      FMDFT
*         SEEK INTO SB(60).                                              FMDFT
*                                                                        FMDFT
 SEEK11   LDD    SEEKA       MOVE THE SEEK TIME                          FMDFT
          ZJN    SEEK12      IF READY WITHOUT ANY MOVE                   FMDFT
          SBN    1           ADJUST THE SEEK TIME                        FMDFT
 SEEK12   STM    SEEKTIM     THIS IS MILLISEC. COUNT REQUIRED FOR SEEK   FMDFT
          SHN    -1                                                      FMDFT
          RAD    RT          INCREMENT I/O LIMIT                         FMDFT
                                                                         FMDFT
**     8. IF GENERAL STATUS IS ZERO, EXIT.  OTHERWISE, REQUEST AND       FMDFT
*         INPUT DETAIL STATUS AND EXECUTE THE ERROR EXIT SEQUENCE.       FMDFT
*                                                                        FMDFT
          LDM    SB                                                      FMDFT
          ZJN    SEEK14      IF ZERO AFTER NOT BUSY                      FMDFT
 ERRAGS   LDC    ER.AGS      AND ERROR EXIT                              FMDFT
          UJN    ERRDST                                                  FMDFT
 SEEK14   LJM    SEEK1X      TO EXIT                                     FMDFT
          EJECT                                                          FMDFT
 STATUS   TITLE  STATUS - GET GENERAL OR DETAIL STATUS.                  FMDFT
**        STATUS - GET GENERAL OR DETAIL STATUS.                         FMDFT
*                                                                        FMDFT
*                  STATUS GENERAL, ABT Z                                 FMDFT
*                  STATUS DETAIL, ABT Z                                  FMDFT
*                                                                        FMDFT
*           GENERAL - INPUT 1 WORD OF GENERAL STATUS TO  SB(0).          FMDFT
*           DETAIL  - INPUT 20D WORDS OF DETAIL STATUS TO SB(1)-SB(20D)  FMDFT
*                                                                        FMDFT
*         ENTRY  - (PA) =  CODE         0 = GENERAL                      FTENT
*                                       1 = DETAIL                       FMDFT
*         EXIT   - NONE                                                  FMDFT
*                                                                        FMDFT
*         USES   - LF, P                                                 FMDFT
*                                                                        FMDFT
*         CALLS  - STS, DST                                         FMDFT    143
                                                                         FMDFT
**     1. STORE 7777B INTO THE STATUS BUFFER FOR WORDS ABOUT TO BE READ  FMDFT
*                                                                        FMDFT
*      2. VERIFY THAT THE CONTROLLER IS CONNECTED.                       FMDFT
*                                                                        FMDFT
* 
*      3. ISSUE THE SELECTED STATUS FUNCTION SPECIFIED BY THE KEYWORD    FMDFT
*         GENERAL (0012), DETAIL (0023)                                  FMDFT
*                                                                        FMDFT
*      4. INPUT THE REQUIRED NUMBER OF WORDS TO THE STATUS BUFFER        FMDFT
*         (1 OR 24B).                                                    FMDFT
*                                                                        FMDFT
 STATUS   RJM    TCO         TEST CONTROLLER CONNECTED
          LDD    PA          LOAD CODE
          NJN    STATUS3     IF DETAIL STATUS REQUEST                    FMDFT
          LDN    GS                                                      FMDFT
          STD    LF          SAVE LAST PRIMARY FUNCTION                  FMDFT
          RJM    STS         GET GENERAL STATUS                          FMDFT
          UJN    STATUS4                                                 FMDFT
                                                                         FMDFT
 STATUS3  LDN    EDS                                                     FMDFT
          STD    LF          SAVE LAST PRIMARY FUNCTION                  FMDFT
          RJM    DST         GET DETAIL STATUS                           FMDFT
 STATUS4  LJM    XENT        EXIT TO STACK                               FTENT
          EJECT                                                          FMDFT
 WRPRO    TITLE  WRPRO - PROCESS WRITE PROTECTED SECTOR COMMAND.         DIMA154
**        WRPRO - PROCESS WRITE PROTECTED SECTOR COMMAND.                DIMA154
*                                                                        DIMA154
*                 WRPRO CYL W TRK X SEC Y,ABT Z                          DIMA154
*                                                                        DIMA154
*         ENTRY  - (PA+65) = W.                                          FTENT
*                  (PA+66) = X.                                          DIMA154
*                  (PA+67) = Y.                                          DIMA154
*                                                                        DIMA154
*         EXIT   - RDW0   - COMMON READ WRITE ROUTINE.                   DIMA154
*                                                                        DIMA154
*         USES   - WT, D.T5, RDWRF, COD, CL.                             DIMA154
*                                                                        DIMA154
*         CALLS  - BD.TEST - TEST BUFFER ADDRESS FOR RANGE OF IB-OB.     DIMA154
*                  FNO     - SEND FUNCTION PLUS PARAMETER.               DIMA154
*                  TDR     - TEST DRIVE RESERVE.                         DIMA154
*                                                                        DIMA154
                                                                         DIMA154
**        1. TEST DRIVE CONNECTED.                                       DIMA154
*                                                                        DIMA154
 WRPRO    RJM    TDR         TEST DRIVE CONNECTED.                       DIMA154
                                                                         DIMA154
**        2. SET CODED FLAG TO NOT CODED, SET WRITE FLAG AND STORE       DIMA154
*            SECTOR COUNT TO ONE.                                        DIMA154
*                                                                        DIMA154
          STD    COD         CLEAR CODED FLAG                            DIMA154
          LDN    1                                                       DIMA154
          STD    RDWRF       FLAG WRITE FUNCTION                         DIMA154
          STD    D.T5                                                    DIMA154
          LDN    D.T5                                                    DIMA154
          STD    CL          STORE NUMBER OF SECTORS TO WRITE             DIMA15
          LDC    BTSW        BLOCK TRANSFER SIZE, WRPRO COMMAND          DEMAFT 
          STM    RDW24D                                                  DEMAFT 
                                                                         DIMA154
**        3. SET RETURN ADDRESS TO STACK AND JUMP TO COMMON READ/WRITE   DIMA154
*            ROUTINE.                                                    DIMA154
*                                                                        DIMA154
          LDN    WRP         WRITE PROTECTED SECTOR FUNCTION             DIMA154
          LJM    RDW0        ENTER DISK READ WRITE DRIVER                DIMA154
*                                                                        DEMAFT 
 BTSD     DATA   502B        BLOCK TRANSFER SIZE, DIAGNOSTIC I/O COMMAND
 BTSG     EQU    BTSD        BLOCK TRANSFER SIZE, GET COMMAND 
 BTSW     EQU    BTSD        BLOCK TRANSFER SIZE, WRPRO COMMAND 
          EJECT                                                          DIMA154
 DST      TITLE  UTILITIES USED BY THE DEMA2 OVERLAY.                      DEMA2
**        DST    - OBTAIN DETAIL STATUS.                                 FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FMDFT
*                                                                        FMDFT
*         EXIT   - STATUS BUFFER CONTAINS THE CURRENT DETAIL STATUS.     FMDFT
*                  TO BE USED FOR ERROR CHECKING.                        FMDFT
*                                                                        FMDFT
*                - (A) = (SB+13D)                                        DIMA599
*                                                                        DIMA599
*                  ERRISR  - IF INCOMPLETE STATUS RETURNED               FMDFT
*                  ERRNIDS - IF NO INACTIVE TO DETAIL STATUS             FMDFT
*                                                                        FMDFT
*         USES   - D.T1, SB(1-24B)
*                                                                        FMDFT
*         CALLS  - STATUS1                                               FMDFT
*                                                                        FMDFT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 247+ MICROSEC.     FMDFT
*                                                                        FMDFT
 DST0     LDM    SB+13       DETAIL STATUS WORD 13                       DIMA599
          LJM    **          ENTRY/EXIT                                  FMDFT
 DST      EQU    *-1                                                     FMDFT
                                                                         FMDFT
*         STORE 7777B INTO ALL WORDS                                     FMDFT
                                                                         FMDFT
          LDN    24B                                                     FMDFT
          STD    D.T1                                                    FMDFT
 DST1     LCN    0                                                       FMDFT
          STM    SB,D.T1                                                 FMDFT
          SOD    D.T1                                                    FMDFT
          NJN    DST1        DO ALL WORDS                                FMDFT
          LDN    EDS                                                     FMDFT
          RJM    FNA         ISSUE STATUS FUNCTION                       FMDFT
          NJN    DST3        IF FUNCTION ACCEPTED                        FMDFT
          LDC    ER.NIDS     ERROR IF NO INACTIVE TO DETAIL STATUS       FMDFT
          UJN    DST6                                                    FMDFT
                                                                         FMDFT
 DST3     ACN    CH+40B                                                  FMDFT
          RJM    FJM         WAIT FOR FULL                               FMDFT
          ZJN    ERRISR      IF FULL NOT RECEIVED                        FMDFT
          LDN    24B                                                     FMDFT
          IAM    SB+1,CH                                                 FMDFT
          NJN    ERRISR      IF ALL WORDS NOT INPUT                      FMDFT
          RJM    IJM         VERIFY INACTIVE IS RECEIVED                 FMDFT
          NJN    DST0        IF INACTIVE RECEIVED                        DIMA599
 ERRISR   LDC    ER.ISR      ERROR IF INCOMPLETE STATUS RETURNED         FMDFT
 DST6     LJM    ERR                                                     FMDFT
          SPACE  4,22                                                    FMDFT
**        FJM    - WAIT FOR CHANNEL TO GO FULL.                          FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FMDFT
*                                                                        FMDFT
*         EXIT   - (A) NONZERO IF NOT TIMED OUT WAITING FULL             FMDFT
*                  (A) ZERO IF TIMED OUT                                 FMDFT
*                                                                        FMDFT
*         USES   - D.T1                                                  FMDFT
*                                                                        FMDFT
*         CALLS  - NONE                                                  FMDFT
*                                                                        FMDFT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC.        FMDFT
*                                                                        FMDFT
 FJMX     LJM    **          ENTRY/EXIT                                  FMDFT
 FJM      EQU    *-1                                                     FMDFT
          LDC    TIMFJM*2                                                DIMA215
 FJM1     FJM    FJMX,CH     IF FULL EXIT                                FMDFT
 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                    FMDFT
          UJN    FJMX        ELSE EXIT WITH A EQ. ZERO                   FMDFT
          SPACE  4,21                                                    FMDFT
**        FNC    - ISSUE A FUNCTION ON A CHANNEL AND WAIT INACTIVE.      FMDFT
*                                                                        FMDFT
*         ENTRY  - (A) = FUNCTION TO ISSUE                               FMDFT
*                                                                        FMDFT
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED.                   FMDFT
*                                                                        FMDFT
*                  ERRNIF  - IF NO INACTIVE TO LAST FUNCTION             FMDFT
*                                                                        FMDFT
*         USES   - LF                                                    FMDFT
*                                                                        FMDFT
*         CALLS  - FNA                                                   FMDFT
*                                                                        FMDFT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 22 MICROSEC.       FMDFT
*                                                                        FMDFT
 FNCX     LJM    **          ENTRY/EXIT                                  FMDFT
 FNC      EQU    *-1                                                     FMDFT
          STD    LF          TO SAVE LAST MAJOR FUNCTION                 FMDFT
          RJM    FNA         TO FUNCTION AND WAIT INACTIVE               FMDFT
          NJN    FNCX        IF INACTIVE EXIT                            FMDFT
 ERRNIF   LDC    ER.NIF      ELSE ERROR EXIT                             FMDFT
          UJN    FNO1                                                    FMDFT
          SPACE  4,17                                                    FMDFT
**        FNA    - ISSUE A FUNCTION AND WAIT INACTIVE.                   FMDFT
*                                                                        FMDFT
*         ENTRY  - (A) = FUNCTION TO ISSUE                               FMDFT
*                                                                        FMDFT
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED                    FMDFT
*                                                                        FMDFT
*         USES   - NONE                                                  FMDFT
*                                                                        FMDFT
*         CALLS  - IJM                                                   FMDFT
*                                                                        FMDFT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 14 MICROSEC.       FMDFT
*                                                                        FMDFT
 FNAX     LJM    **          ENTRY/EXIT                                  FMDFT
 FNA      EQU    *-1                                                     FMDFT
          FAN    CH+40B      FUNCTION FROM A                             FMDFT
          RJM    IJM         WAIT FOR INACTIVE                           FMDFT
          UJN    FNAX        EXIT                                        FMDFT
          SPACE  4,30                                                    FMDFT
**        FNO    - ISSUE FUNCTION AND OUTPUT ONE WORD OF DATA.           FMDFT
*                                                                        FMDFT
*         ENTRY  - (A)  = FUNCTION DESIRED                               FMDFT
*                  FNOA = DATA WORD TO OUTPUT                            FMDFT
*                                                                        FMDFT
*         EXIT   - NONE                                                  FMDFT
*                                                                        FMDFT
*                 ERRFPNA - IF FUNCTION PARAMETERS NOT ACCEPTED          FMDFT
*                                                                        FMDFT
*         USES   - NONE                                                  FMDFT
*                                                                        FMDFT
*         CALLS  - FNC, DCN                                              FMDFT
*                                                                        FMDFT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 40 MICROSEC.       FMDFT
*                                                                        FMDFT
 FNOX     LJM    **          ENTRY/EXIT                                  FMDFT
 FNO      EQU    *-1                                                     FMDFT
          RJM    FNC         TO SEND FUNCTION                            FMDFT
          ACN    CH+40B                                                  DIMA487
          LDD    D.T4                                                    DIMA487
          OAN    40B+CH                                                  DIMA487
                                                                         FMDFT
 FNO2     EJM    FNO3,CH                                                 DIMA353
          ADN    1                                                       DIMA353
          PJN    FNO2        LOOP ON CHANNEL EMPTY TEST                  DIMA353
 ERRFPNA  LDC    ER.FPNA                                                 DIMA487
 FNO1     LJM    ERR                                                     DIMA487
                                                                         DIMA353
 FNO3     DCN    CH+40B                                                  DIMA353
          UJN    FNOX        EXIT                                        FMDFT
          SPACE  4,22                                                    FMDFT
**        IJM    - WAIT INACTIVE AND TIME OUT.                           FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FMDFT
*                                                                        FMDFT
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED                    FMDFT
*                        ZERO IF FUNCTION NOT ACCEPTED                   FMDFT
*                                                                        FMDFT
*         USES   - D.T3                                                  FMDFT
*                                                                        FMDFT
*         CALLS  - NONE                                                  FMDFT
*                                                                        FMDFT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC.        FMDFT
*                                                                        FMDFT
 IJMX     LJM    **          ENTRY/EXIT                                  FMDFT
 IJM      EQU    *-1                                                     FMDFT
          LCN    3                                                       DIMA534
 IJM1     IJM    IJMX,CH     IF INACTIVE EXIT                            FMDFT
 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                         FMDFT
          UJN    IJMX        ELSE EXIT W/(A) = ZERO                      FMDFT
          SPACE  4,46                                                    FMDFT
**        OPC    - RELEASE THE CONTROLLER WITH AN OPERATION COMPLETE.    FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FMDFT
*                                                                        FMDFT
*         EXIT   - (A) = ZERO IF CONTROLLER NOT CONNECTED                FMDFT
*                      = NONZERO IF OPERATION COMPLETE ACCEPTED          FMDFT
*                                                                        FMDFT
*         USES   - NONE                                                  FMDFT
*                                                                        FMDFT
*         CALLS  - FNC                                                   FMDFT
*                                                                        FMDFT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 44 MICROSEC.       FMDFT
*                                                                        FMDFT
 OPCX     LJM    **          ENTRY/EXIT                                  FMDFT
 OPC      EQU    *-1                                                     FMDFT
          LDM    BD.CHFG                                                 FMDFT
          ZJN    OPCX        EXIT IF CHANNEL NOT RESERVED                FMDFT
          LDM    COCON                                                   FMDFT
          NJN    OPCX        EXIT IF CONTROLLER NOT RESERVED             FMDFT
          LDN    77B                                                     FMDFT
          STM    COCON       CLEAR THE CONTROLLER CONNECT FLAG           FMDFT
          STM    DRCON       CLEAR THE DRIVE CONNECT FLAG                FMDFT
          LDC    **                                                      FMDFT
 OPC1     EQU    *-1         DETAIL STATUS WORD 13 STORED HERE           FMDFT
          SBN    2                                                       DIMA599
          MJN    OPC3        IF CONTROLLER NOT RESERVED                  DIMA599
          NJN    OPCX        IF CONTROLLER AND UNIT RESERVED             DIMA599
          LDN    DREL                                                    FMDFT
          UJN    OPC4                                                    FMDFT
                                                                         FMDFT
 OPC2     UJN    OPCX        RETURN                                      FMDFT
                                                                         FMDFT
 OPC3     LDN    OC                                                      FMDFT
 OPC4     STD    D.T5        ONLY FOR SPECIAL CALL FROM BASIC DRIVER     FMDFT
          LDM    ERR3        UPPER BITS OF ABT ADDRESS                   FMDFT
          SBN    77B                                                     FMDFT
          NJN    OPC5        IF NORMAL USER CALL                         FMDFT
          LDD    D.T5                                                    FMDFT
          RJM    FNA         ONLY FOR SPECIAL CALL FROM BASIC DRIVER     FMDFT
          NJN    OPC2        IF NOT FUNCTION TIMEOUT                     FMDFT
          DCN    CH+40B      ELSE DO A DISCONNECT                        FMDFT
          UJN    OPC2        AND EXIT                                    FMDFT
                                                                         FMDFT
 OPC5     LDD    D.T5                                                    FMDFT
          RJM    FNC         TO FUNCTION OPERATION COMPLETE              FMDFT
          UJN    OPC2        EXIT                                        FMDFT
          SPACE  4,40                                                    FMDFT
**        STS    - REQUEST AND INPUT GENERAL STATUS.                     FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FMDFT
*                                                                        FMDFT
*         EXIT   - (A) = STATUS                                          FMDFT
*                                                                        FMDFT
*                  ERRGSNR - IF GENERAL STATUS NOT RETURNED              FMDFT
*                  ERRNIGS - IF NO INACTIVE TO GENERAL STATUS            FMDFT
*                                                                        FMDFT
*         USES   - SB                                                    FMDFT
*                                                                        FMDFT
*         CALLS  - STATUS1                                               FMDFT
*                                                                        FMDFT
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 60 MICROSEC.       FMDFT
*                                                                        FMDFT
 STSXX    LDM    SB          LOAD STATUS AND EXIT                        FMDFT
          LJM    **          ENTRY/EXIT                                  FMDFT
 STS      EQU    *-1                                                     FMDFT
          LCN    0                                                       FMDFT
          STM    SB          NEGATIVE ZERO TO SB                         FMDFT
          LDN    GS                                                      FMDFT
          RJM    FNA         ISSUE GENERAL STATUS FUNCTION               FMDFT
          NJN    STS1        IF FUNCTION ACCEPTED                        FMDFT
 ERRNIGS  LDC    ER.NIGS     ERROR IF NO INACTIVE TO GS FUNCTION         FMDFT
          UJN    STS3                                                    FMDFT
                                                                         FMDFT
 STS1     LDN    0                                                       DIMA599
          STM    COCON       SET CONTROLLER CONNECTED                    DIMA599
          ACN    CH+40B                                                  DIMA599
          RJM    FJM         WAIT FOR FULL                               FMDFT
          ZJN    STS2        IF NO FULL RECEIVED                         FMDFT
          LDN    1                                                       FMDFT
          IAM    SB,CH       INPUT GENERAL STATUS                        FMDFT
          NJN    STS2        IF NO STATUS PROVIDED                       FMDFT
          RJM    IJM         WAIT FOR INACTIVE                           FMDFT
          NJN    STSXX       IF INACTIVE RECEIVED                        FMDFT
                                                                         FMDFT
 ERRGSNR  EQU    *                                                       FMDFT
 STS2     LDC    ER.GSNR     ERROR IF NO FULL OR NO INACTIVE             FMDFT
 STS3     UJN    TCA1                                                    FMDFT
          SPACE  4,18                                                    FMDFT
**        TCA    - TEST CHANNEL ASSIGNMENT.                              FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FTENT
*                                                                        FMDFT
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4                   FMDFT
*                                                                        FMDFT
*                  ERRCNA  - IF CHANNEL NOT RESERVED                     FMDFT
*                                                                        FMDFT
*         CALLS  - NONE                                                  FTENT
*                                                                        FMDFT
*         USES   - NONE                                                  FMDFT
*                                                                        FMDFT
 TCAX     LJM    **          ENTRY/EXIT                                  FMDFT
 TCA      EQU    *-1                                                     FMDFT
          LDM    BD.CHFG                                                 FMDFT
          NJN    TCAX        EXIT IF CHANNEL ASSIGNED                    FMDFT
          LDC    ER.CNA      ERROR IF CHANNEL NOT RESERVED               FMDFT
 TCA1     UJN    ERR                                                     FMDFT
          SPACE  4,18                                                    FMDFT
**        TCO    - TEST CONTROLLER CONNECTED.                            FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FTENT
*                                                                        FMDFT
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4                   FMDFT
*                  WC SET TO WRRD                                        FMDFT
*                                                                        FMDFT
*         USES   - WC                                                    FMDFT
*                                                                        FMDFT
*         CALLS  - TCA                                                   FMDFT
*                                                                        FMDFT
 TCOX     LJM    **          ENTRY/EXIT                                  FMDFT
 TCO      EQU    *-1                                                     FMDFT
          RJM    TCA         TO SAVE ABORT ADDRESS, CHECK ACTIVE         FMDFT
          LDC    77B                                                     FMDFT
 COCON    EQU    *-1         *** CONTROLLER CONNECTED FLAG STORED HERE   FMDFT
          ZJN    TCOX        IF CONNECTED                                FMDFT
          UJN    ERRCNC      ELSE ERROR EXIT                             FMDFT
          SPACE  4,17                                                    FMDFT
**        TDR    - TEST DRIVE RESERVED.                                  FMDFT
*                                                                        FMDFT
*         ENTRY  - NONE                                                  FTENT
*                                                                        FMDFT
*         EXIT   - NONE                                                  FMDFT
*                                                                        FMDFT
*         USES   - NONE                                                  FMDFT
*                                                                        FMDFT
*         CALLS  - TCO                                                   FMDFT
*                                                                        FMDFT
 TDRX     LJM    **          ENTRY/EXIT                                  FMDFT
 TDR      EQU    *-1                                                     FMDFT
          RJM    TCO         SAVE ABT ADDRESS,CHECK CTLR. CONNECTED      FMDFT
          LDC    77B                                                     FMDFT
 DRCON    EQU    *-1         *** DRIVE CONNECTED FLAG STORED HERE.       FMDFT
          ZJN    TDRX        IF CONNECTED EXIT                           FMDFT
 ERRCNC   LDC    ER.CNC      ELSE ERROR EXIT                             FMDFT
          EJECT                                                          FMDFT
**        ERR    - ERROR EXIT SUBROUTINE                                 FMDFT
*                                                                        FMDFT
*         ENTRY  - (A) = MESSAGE ADDRESS INDEX                           FMDFT
*                                                                        FMDFT
*         EXIT   - (A) = ABORT ADDRESS FOR AN ABORT                      FMDFT
*                  (A) = LINE NUMBER FOR MODULE TERMINATE                FMDFT
*                                                                        FMDFT
*         USES   - D.Z1, D.Z2, EC, EM, EA                                FMDFT
*                                                                        FMDFT
*         CALLS  - NONE                                                  FMDFT
*                                                                        FMDFT
 ERR      STD    D.Z1        SAVE MESSAGE INDEX AND ERROR NUMBER         FMDFT
          SHN    -12                                                     FMDFT
          STD    D.Z2        SAVE ABORT FLAG                             FMDFT
          LDM    BD.CHFG                                                 FMDFT
          ZJN    ERR2        IF CHANNEL IS NOT ASSIGNED                  FMDFT
          LDD    BD.AL                                                   FMDFT
          SBN    AL21                                                    FMDFT
          ZJN    ERR2        IF ACCESS LEVEL INDICATES NO CHAN CLEANUP   FMDFT
          IJM    ERR2,0      CLEAN UP CHANNEL                            FMDFT
          DCN    40B                                                     FMDFT
 ERR2     LDD    D.Z1                                                    FMDFT
          LPN    77B         MASK ERROR CODE                             FMDFT
          ADC    5600B       ADD IN BIAS FOR DEMA2 PRODUCT OVERLAY       DEMAFT 
          STD    EC          STORE ERROR CODE                            FMDFT
          LDD    D.Z1                                                    FMDFT
          SHN    -6                                                      FMDFT
          ADC    100B        FLAG MESSAGE INDEX AS OVERLAY MESSAGE       FMDFT
          STD    EM          STORE MESSAGE INDEX                         FMDFT
          LDD    P                                                       FMDFT
          STD    EA          STORE LINE NUMBER WHERE ERROR OCCURRED      FMDFT
          LDD    D.Z2                                                    FMDFT
          NJN    ERR5        IF ABORT FLAG SET                           FMDFT
          LDC    **                                                      FMDFT
 ERR3     EQU    *-1         FOR ABORT ADDRESS                           FMDFT
          SHN    12                                                      FMDFT
          LMC    **                                                      FMDFT
 ERR4     EQU    *-1         FOR ABORT ADDRESS                           FMDFT
          LJM    BD.RNI      RNI AT THE REJECT ADDRESS                   FMDFT
                                                                         FMDFT
 ERR5     LJM    BD.ABT      TERMINATE MODULE                            FMDFT
                                                                         FMDFT
 IB       EQU    6500B       INPUT BUFFER                                FMDFT
 LIB      EQU    505B        LENGTH OF INPUT AND OUTPUT BUFFERS          FMDFT
 OB       EQU    IB+LIB      OUTPUT BUFFER                               FMDFT
 SB       EQU    OB+LIB      STATUS BUFFER                               FMDFT
 SBIE     EQU    SB+25B      STATUS THAT DETECTED THE ERROR              FMDFT
 RETRY    EQU    SB+52B      RETRY COUNT                                 FMDFT
 SERNUM1  EQU    SB+56B      FIRST HALF OF PACK SERIAL NUMBER            FMDFT
 SERNUM2  EQU    SB+57B      SECND HALF OF PACK SERIAL NUMBER            FMDFT
 SEEKTIM  EQU    SB+60B      LAST SEEK TIME                              FMDFT
 RESA     EQU    SB+64B                                                  DIMA487
 LSB      EQU    64B         LENGTH OF STATUS BUFFER                     FMDFT
                                                                         FMDFT
          ERRPL  *-IB-1      ERROR IF FMDFT OVERLAY OVERFLOW             FMDFT
          EJECT                                                          FMDFT
 INIT     TITLE  INIT - INITIALIZATION.                                  FMDFT
**        THE INITIALIZATION CODE THAT FOLLOWS IS OVERLAYED BY THE       FMDFT
*         PRODUCT OVERLAY BUFFERS ABOVE.                                 FMDFT
*                                                                        FMDFT
*         TEST EQUIPMENT AND UNIT NUMBER                                 FMDFT
*                                                                        FMDFT
 INIT     LDN    0                                                       FMDFT
          STD    D.Z1        CLEAR COUNTER                               FMDFT
 INIT0    LDN    0                                                       FMDFT
          STM    SB,D.Z1     CLEAR STATUS BUFFER                         FMDFT
          AOD    D.Z1                                                    FMDFT
          SBN    LSB                                                     FMDFT
          NJN    INIT0       IF STATUS BUFFER NOT CLEARED                FMDFT
          LDM    BD.SN                                                   FMDFT
          STM    SERNUM1     SAVE USER SUPPLIED SERIAL NUMBER IN SB      FMDFT
          LDM    BD.SN+1                                                 FMDFT
          STM    SERNUM2                                                 FMDFT
          LDM    BD.EQ                                                   FMDFT
          LPN    77B                                                     FMDFT
          STM    SB+63B      UNIT TO STATUS BUFFER                       FMDFT
          ADC    1000B       SET LARGE SECTOR BIT 
          STM    UN          SET UNIT NUMBER                             FMDFT
          ADC    600B        FORM CODE FOR ADN (16XX) 
          STM    REFU        STORE UNIT IN REFORM MODULE
          LDN    0                                                       FMDFT
          STM    SB+62B      EQUIPMENT NUMBER TO STATUS BUFFER           FMDFT
                                                                         FMDFT
*         SET DELAY TIME BASED ON SPEED OF PPU                           FMDFT
                                                                         FMDFT
          LDC    TSPEED                                                  DIMA215
          STD    D.T0                                                    FMDFT
 INIT2    LDI    D.T0                                                    FMDFT
          ZJN    INIT3       IF END OF TABLE                             FMDFT
          STD    D.T1                                                    FMDFT
          LDI    D.T1                                                    FMDFT
          SCN    77B                                                     DIMA215
          ADM    BD.SPEED                                                DIMA215
          STI    D.T1        SET ADN/SBN VALUE                           DIMA215
          AOD    D.T0                                                    FMDFT
          UJN    INIT2       COMPLETE ALL WORDS                          FMDFT
                                                                         FMDFT
*         STORE I/O CHANNEL INTO COMMANDS                                FMDFT
                                                                         FMDFT
 INIT3    LDM    BD.CHAN                                                 FMDFT
          STD    D.T2                                                    FMDFT
          STM    SB+61B      I/O CHANNEL TO STATUS BUFFER                FMDFT
          LDC    TCHAN                                                   FMDFT
          STD    D.T0        SET FWA OF TABLE CONTAINING ADDRESSES       FMDFT
 INIT4    LDI    D.T0                                                    FMDFT
          ZJN    INIT5       IF END OF TABLE                             FMDFT
          STD    D.T1                                                    FMDFT
          LDI    D.T1                                                    FMDFT
          LPC    7740B                                                   FMDFT
          ADD    D.T2                                                    FMDFT
          STI    D.T1                                                    FMDFT
          AOD    D.T0                                                    FMDFT
          UJN    INIT4       COMPLETE ALL WORDS                          FMDFT
                                                                         FMDFT
*         WRITE PP MESSAGES TO CM                                        FMDFT
                                                                         FMDFT
 INIT5    LDM    BD.MSGA     GET PP MESSAGE AREA ADDRESS                 FMDFT
          STD    D.T6        SAVE IT                                     FMDFT
          ADC    MMSGL.      ADD LENGTH                                  DIMA234
          RJM    BD.TFL      SEE IF IN FL                                FMDFT
          LDN    P.ZERO      CLEAR CELLS, D.Z1=PP MESSAGE ADDRESS        FMDFT
          CRD    D.Z1        D.Z2=D.T0-D.T4 POINTER, D.Z3=CM WD COUNTER  FMDFT
 INIT6    LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD                         FMDFT
          ZJN    INIT8       IF END OF MESSAGE                           FMDFT
 INIT7    STM    D.T0,D.Z2   STORE IN D.T0+                              FMDFT
          AOD    D.Z1        BUMP PP MESSAGE POINTER                     FMDFT
          UJN    INIT9                                                   FMDFT
 INIT8    LDC    2R          MESSAGE END, STORE BLANKS                   FMDFT
          STM    D.T0,D.Z2                                               FMDFT
 INIT9    AOD    D.Z2        BUMP D.T0+ POINTER                          FMDFT
          SBN    5                                                       FMDFT
          NJN    INIT6       IF NOT 5 PP WORDS                           FMDFT
          STD    D.Z2        CLEAR POINTER                               FMDFT
          LDD    D.RA        PUT RA IN A REG                             FMDFT
          SHN    6                                                       FMDFT
          ADD    D.T6        ADD MESSAGE ADDRESS                         FMDFT
          CWD    D.T0        WRITE ONE WORD FROM D.T0                    FMDFT
          AOD    D.T6        UPDATED ADDRESS                             FMDFT
          AOD    D.Z3        BUMP CM WORD COUNTER                        FMDFT
          SBN    BD.MSGML                                                FMDFT
          NJN    INIT6       IF NOT BD.MSGML CM WORDS                    FMDFT
          STD    D.Z3        CLEAR CM WORD COUNTER                       FMDFT
          LDM    PPMSGS,D.Z1                                             FMDFT
          ZJN    INIT10      IF MESSAGE ENDED IN ZERO BYTE               FMDFT
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR                   FMDFT
 INIT10   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE     FMDFT
          LDM    PPMSGS,D.Z1                                             FMDFT
          NJN    INIT7       IF NOT LAST MESSAGE                         FMDFT
                                                                         FMDFT
*         SET DIRECT CELLS                                               FMDFT
                                                                         FMDFT
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER            FMDFT
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER            FMDFT
          LDC    100D        100 MSEC DELAY IN BD.RCH                    DIMA253
          STM    DLYDCH      MODIFY DELAY USED ON RES AND REL CHANNEL    DIMA154
                                                                         FMDFT
*         VERIFY THAT THE ASSIGNED DEVICE CODE IS SUPPORTED              FMDFT
                                                                         FMDFT
          LDD    DC          DEVICE CODE CURRENTLY ASSIGNED              FMDFT
          SBN    DEMA        TEST IF DEVICE CODE = DEMA 
          ZJN    INIT11      JUMP IF LEGAL DEVICE CODE                        FM
          SBN    PFMD-DEMA   TEST IF DEVICE CODE = PFMD 
          ZJN    INIT11      JUMP IF LEGAL DEVICE CODE
          LDC    INIT12      (A) = POINTER TO ERROR MSG IF NO SUPPORT    FMDFT
 INIT11   LJM    START       EXIT WITH (A) = ERROR/NO ERROR FLAG         FMDFT
                                                                         FMDFT
 INIT12   DIS    ,*DC NOT SUPPORTED*                                     DIMA487
                                                                         FMDFT
*         TABLE OF PPU SPEED SWITCHES                                    FMDFT
                                                                         FMDFT
 TSPEED   VFD    12/FJM2                                                 FMDFT
          VFD    12/IJM2                                                 FMDFT
          DATA   0           END OF SPEED SWITCHES TABLE                 FMDFT
          EJECT                                                          FMDFT
 PPMSGS   TITLE  ERROR MESSAGES                                          FMDFT
 PPMSGS   EQU    *           START OF PP MESSAGES                        FMDFT
****                                                                     FMDFT
          MMSG   ER.FLE,EC.FLE,(ADDR OUT OF FL),1                        FMDFT
          MMSG   ER.TL,EC.TL,(I/O TIME OUT ON CH RESERVE),1              FMDFT
          MMSG   ER.SEE,EC.SEE,(SUBR ENTRY/EXIT ERR),1                   FMDFT
          MMSG   ER.WC,EC.WC,(BUFFER INDEX OR WC ERR),1                  FMDFT
          MMSG   ER.RES,EC.RES,(R)                                       FMDFT
          MMSG   ER.RES1,EC.RES1,(R)                                     FMDFT
          MMSG   ER.RES2,EC.RES2,(R)                                     FMDFT
          MMSG   ER.CNA,EC.CNA,(CH NOT ASSIGNED)                         FMDFT
          MMSG   ER.CAS,EC.CAS,(CH ACTIVE ON ENTRY)                      FMDFT
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE TO LAST FUNC)                FMDFT
          MMSG   ER.NIGS,EC.NIGS,(NO INACTIVE TO GENERAL STATUS)         FMDFT
          MMSG   ER.NIDS,EC.NIDS,(NO INACTIVE TO DETAIL STATUS)          FMDFT
          MMSG   ER.GSNR,EC.GSNR,(GENERAL STATUS NOT RETURNED)           FMDFT
          MMSG   ER.ISR,EC.ISR,(INCOMPLETE STATUS RETURNED)              FMDFT
          MMSG   ER.FPNA,EC.FPNA,(FUNC PARAMETERS NOT ACCEPTED)          FMDFT
          MMSG   ER.DNA,EC.DNA,(ALL DATA NOT ACCEPTED FROM PP)           FMDFT
          MMSG   ER.IDR,EC.IDR,(INCOMPLETE DATA RETURNED TO PP)          FMDFT
          MMSG   ER.CNC,EC.CNC,(CONTROLLER/DRIVE NOT CONNECTED)          FMDFT
          MMSG   ER.IAL,EC.IAL,(ACCESS LEVEL TOO LOW FOR REQ)            FMDFT
          MMSG   ER.NRES,EC.NRES,(RESERVE TIMEOUT)                       FMDFT
          MMSG   ER.AGS,EC.AGS,(ABNORMAL GENERAL STATUS)                 FMDFT
          MMSG   ER.ISO,EC.ISO,(ILLEGAL STROBES/OFFSET)                  FMDFT
          MMSG   ER.UHB,EC.UHB,(UNIT HUNG BUSY ON SEEK)                  FMDFT
          MMSG   ER.STRY,EC.STRY,(SUCCESSFUL RETRY)                      FMDFT
          MMSG   ER.DCE,EC.DCE,(DATA COMPARE ERROR)                      FMDFT
          MMSG   ER.DCSM,EC.DCSM,(DEVICE CODE/STATUS MISMATCH)           FMDFT
          MMSG   ER.NIDT,EC.NIDT,(NO INACTIVE AFTER DATA XFER)           FMDFT
 MMSGL.   EQU    MMSGL                                                   DIMA234
          DATA   0                                                       FMDFT
****                                                                     FMDFT
 TCHAN    EQU    *           CREATE CHANNEL TABLE                        FMDFT
          LIST   D                                                       FMDFT
          HERE                                                           FMDFT
          LIST   *                                                       FMDFT
          DATA   0           END OF CHANNEL TABLE                        FMDFT
                                                                         FMDFT
          IFEQ   NOS,1                                                   FMDFT
 .1       SET    POVLA                                                   FMDFT
 .2       SET    10000B                                                  FMDFT
 .3       SET    *-.1+5+4+500B                                           FMDFT
 .4       SET    .2-.1+5-1                                               FMDFT
          ERRNG  .2-.1+5-.3/500B*500B-1  BYTES LEFT AFTER LAST SECTOR    FMDFT
          ERRNG  .3/500B*500B-5-*+.1-5   BYTES LEFT IN LAST SECTOR       FMDFT
          ERRNG  .4/500B*500B-5-*+.1-5   BYTES CAN BE ADDED TO OVERLAY   FMDFT
          ENDIF                                                          FMDFT
                                                                         FMDFT
          IFEQ   NOSBE,1,1                                               FMDFT
          ERRPL  *-7773B     IF OVERFLOW IN DEMA2 PRODUCT OVERLAY        DEMA2
          QUAL   *                                                       FMDFT
