*COMDECK,DCART
          EJECT 
 5CT      SEGMENT POVLA 
          ORG    POVLA
          QUAL   DCART
*CALL,VERS
          COMMENT DCART PRODUCT OVERLAY FOR MALET "VERS"
          TITLE  HIGH LEVEL DCART PRODUCT OVERLAY FOR MALET.
**        THIS PRODUCT OVERLAY SUPPORTS AND A PROGRAMMABLE INPUT BUFFER 
*         (IB) OF 500B PP WORDS, AN OUTPUT BUFFER (OB) OF 500B PP WORDS 
*         AND  A  STATUS  BUFFER (SB) OF 43B PP WORDS.  DATA IS WRITTEN 
*         TO TAPE FROM THE OUTPUT BUFFER AND IS READ FROM TAPE  TO  THE 
*         INPUT BUFFER. THE STATUS BUFFER IS USED TO HOLD THE FOLLOWING 
*         WORDS.
* 
*           WORD  0     = LAST FUNCTION ISSUED IN STATUS ROUTINE
*           WORD  1     = GENERAL STATUS (FIRST WORD) 
*           WORD  2     = GENERAL STATUS (SECOND WORD)
*           WORDS 3-34B = SENSE STATUS
*           WORD 35B    = GENERAL STATUS SAVED IF COMMAND RETRY 
*           WORD 36B    = GENERAL STATUS SAVED IF COMMAND RETRY 
*           WORD 37B    = I/O CHANNEL UNDER TEST (RIGHT JUSTIFIED)
*           WORD 40B    = EQUIPMENT NUMBER (ALWAYS 0) 
*           WORD 41B    = UNIT NUMBER UNDER TEST (RIGHT JUSTIFIED)
*           WORD 42B    = UPPER 12 BITS OF WORDS TRANSMITTED REGISTER 
*           WORD 43B    = RETRY COUNT IN WRITE OR READ ROUTINE
*           WORDS 44B-53B = BLOCK IDS 
*           WORD 54B    = LAST MAJOR FUNCTION ISSUED
*           WORD 55B    = LAST MAJOR STATUS FUNCTION ISSUED 
* 
*         THE FOLLOWING COMMANDS ARE SUPPORTED BY THIS PRODUCT OVERLAY. 
* 
*           BKSP   - BACKSPACE ONE RECORD ON TAPE.
*           ENDFILE- WRITE A FILE MARK/TAPE MARK. 
*           ERASE  - ERASE APPROXIMATELY 4 INCHES ON TAPE.
*           FSPACE - MOVE FORWARD ONE RECORD. 
*           LOCATE BLOCK - LOCATE BLOCK ON TAPE VIA 3 WORD OUTPUT.
*           READ   - READ A RECORD FROM TAPE TO INPUT BUFFER. 
*           READ BLOCK ID - TRANSFER THE BLOCK ID INFORMATION TO THE
*                           STATUS BUFFER.
*           READ BUFFERED LOG - TRANSFER THE BUFFERED LOG FROM THE
*                               CONTROLLER TO THE INPUT BUFFER. 
*           REL    - RELEASE UNIT, CONTROLLER AND I/O CHANNEL.
*           RES    - RESERVE I/O CHANNEL, CONTROLLER AND UNIT.
*           RESET  - MASTER CLEAR CONTROLLER TO IDLE LOOP.
*           REWIND - REWIND TAPE. 
*           SEARCH FM - SEARCH FM/TM FORWARD OR BACKWARD. 
*           STATUS - INPUT GENERAL AND/OR SENSE STATUS TO SB. 
*           SYNCHRO - ALLOWS SYNCHRONIZATION BETWEEN UNIT AND HOST. 
*           UNLOAD - UNLOAD TAPE. 
*           WRITE  - WRITE ONE RECORD FROM THE OUTPUT BUFFER. 
* 
* 
          EJECT 
**        IT  IS  THE USERS RESPONSIBILITY TO TEST GENERAL STATUS AFTER 
*         EACH I/O OPERATION TO DETERMINE IF THE OPERATION COMPLETED AS 
*         EXPECTED. 
* 
*         ALL SUBROUTINES IN THIS PRODUCT OVERLAY USE  A  COMMON  ERROR 
*         EXIT SEQUENCE WHEN AN ERROR IS DETECTED. THIS SEQUENCE STORES 
*         AN INTERNAL ERROR CODE INTO THE EC REGISTER, AN ERROR MESSAGE 
*         INDEX INTO THE EM REGISTER, AND THE P REGISTER CONTENTS (LINE 
*         NUMBER) INTO THE EA REGISTER.  A CHECK IS THEN MADE TO SEE IF 
*         AN  ABT ADDRESS WAS SPECIFIED BY THE USER ON THE COMMAND THAT 
*         JUST FAILED. IF IT WAS, A JUMP IS MADE TO  THIS  ADDRESS  VIA 
*         THE  RNI ROUTINE IN THE PP DRIVER.  IF AN ABT ADDRESS WAS NOT 
*         SPECIFIED, THE ABORT ROUTINE IN THE PP DRIVER IS  ENTERED  TO 
*         REPORT THE ERROR AND DROP THE PP. 
* 
* 
          EJECT 
***       THE FOLLOWING TABLE DEFINES THE ERROR CODES AND MESSAGES THAT 
*         MAY BE GENERATED FOR EACH COMMAND FOR DCART.
* 
*                                       WRITE-----------------------. 
*                                     UNLOAD----------------------. . 
*                                   SYNCHRO---------------------. . . 
*                                 STATUS----------------------. . . . 
*                               SEARCH FM-------------------. . . . . 
*                             REWIND----------------------. . . . . . 
*                           RESET-----------------------. . . . . . . 
*                         RES-------------------------. . . . . . . . 
*                       REL-------------------------. . . . . . . . . 
*                     READ BUFFERED LOG-----------. . . . . . . . . . 
*                   READ BLOCK ID---------------. . . . . . . . . . . 
*                 READ------------------------. . . . . . . . . . . . 
*               LOCATE BLOCK----------------. . . . . . . . . . . . . 
*             FSPACE----------------------. . . . . . . . . . . . . . 
*           ERASE-----------------------. . . . . . . . . . . . . . . 
*         ENDFILE---------------------. . . . . . . . . . . . . . . . 
*       BKSP------------------------. . . . . . . . . . . . . . . . . 
*                                   . . . . . . . . . . . . . . . . . 
* CODE     MESSAGE                  . . . . . . . . . . . . . . . . . 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 04 WC OR BUFFER INDEX ERROR       . . . . . X . . . . . . . . . . X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 10 CH NOT ASSIGNED                X X X X X X X X . . X X X X X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 11 CH ACTIVE ON ENTRY             . . . . . . . . X X . . . . . . . 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 12 NO INACTIVE TO LAST FUNC       X X X X X X X X X X X X X . X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 13 NO INACTIVE TO STATUS FUNC     X X X X X X X X . X X X X X X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 14 NO STATUS RETURNED             X X X X X X X X . X X X X X X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 15 INCOMPLETE STATUS RETURNED     X X X X X X X X . X X X X X X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 16 ALL DATA NOT ACCEPTED FROM PP  . . . . X . . . . . . . . . . . X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 17 INCOMPLETE DATA RETURNED TO PP . . . . . X . . . . . . . . . . . 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 20 UNIT NOT CONNECTED             X X X X X X X X . . . X X . X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 21 ABNORMAL GENERAL STATUS        . . . . . . . . . . . X . . . X . 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 22 UNIT HUNG BUSY                 . . . . . . . . . . . X . . . X . 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 23 NO END OF OPERATION            X X X X X X X X . . X X X . X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 24 CH PE ON INPUT                 X X X X X X X X . X X X X X X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 25 RETRY LIMIT DURING ONE OPER    X X X X X X X X . . . X X . X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 26 ACCESS LEVEL TOO LOW FOR REQ   . . . . . . . . . . . . X . . . . 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 27 CONTROL UNIT/UNIT BUSY ON CONN . . . . . . . . . X . . . . . . . 
*    ---------------------------------------------------------------- 
* 30 TIMEOUT WHILE RETRY IN PROCESS X X X X X X X X . . . X X . X X X 
*    ------------------------------ - - - - - - - - - - - - - - - - - 
* 
           EJECT
*         EQUATES FOR ERROR CODES - FIRST 7 ARE FOR BASIC DRIVER. 
  
 EC.FLE   EQU    1           ADDRESS OUT OF FIELD LENGTH
 EC.TL    EQU    2           TIME LIMIT ERROR FOR COMMUNICATIONS
 EC.SEE   EQU    3           SUBROUTINE ENTRY/EXIT ERROR
 EC.WC    EQU    4           BUFFER REFERENCE OR WC ERROR 
 EC.RES   EQU    5           RESERVED FOR BASIC DRIVER
 EC.RES1  EQU    6           RESERVED FOR BASIC DRIVER
 EC.RES2  EQU    7           RESERVED FOR BASIC DRIVER
  
 EC.CNR   EQU    10B         CHANNEL NOT RESERVED 
 EC.CAS   EQU    11B         CHANNEL ACTIVE FROM SYSTEM 
 EC.NIF   EQU    12B         NO INACTIVE TO FUNCTION
 EC.NISF  EQU    13B         NO INACTIVE TO STATUS FUNCTION 
 EC.NSR   EQU    14B         NO STATUS RETURNED 
 EC.ISR   EQU    15B         INCOMPLETE STATUS RETURNED 
 EC.DNA   EQU    16B         ALL DATA NOT ACCEPTED FROM PP
 EC.IDR   EQU    17B         INCOMPLETE DATA RETURNED TO PP 
 EC.UNC   EQU    20B         UNIT NOT CONNECTED 
 EC.AGS   EQU    21B         ABNORMAL GENERAL STATUS
 EC.UHB   EQU    22B         UNIT HUNG BUSY 
 EC.NEOP  EQU    23B         NO END OF OPERATION
 EC.CPE   EQU    24B         CHANNEL PARITY ERROR ON INPUT
 EC.MTRY  EQU    25B         RETRY LIMIT DURING ONE OPERATION 
 EC.IAL   EQU    26B         ACCESS LEVEL TOO LOW FOR REQUEST 
 EC.CUB   EQU    27B         CONTROL UNIT/UNIT BUSY ON CONNECT
 EC.TRIP  EQU    30B         TIMEOUT WHILE RETRY IN PROCESS 
  
*         DIRECT CELL EQUATES 
  
 PA       EQU    D.T0        PARAMETER ADDRESS
 CONNECT  EQU    60B         CONNECT FLAG 
 FUN      EQU    61B         FUNCTION FOR READ/WRITE
 BL       EQU    62B         LENGTH OF IB/OB
 WL       EQU    63B         WRITE LOOP COUNT ON LAST WRITE COMMAND 
 SC       EQU    64B         SCRATCH DIRECT CELL FOR USE BY SUBROUTINES 
 ADDR1    EQU    65B         TEMPORARY ADDRESS FROM COMPILER
 ADDR2    EQU    66B         TEMPORARY ADDRESS FROM COMPILER
 ADDR3    EQU    67B         TEMPORARY ADDRESS FROM COMPILER
  
*         EQUATES FOR EQUIPMENT FUNCTIONS.
  
 BACKSP   EQU    113B        NORMAL BACKSPACE 
 CLEAR    EQU    0           CLEAR TAPE UNIT
 CONN     EQU    20B         CONNECT UNIT 
 CONT     EQU    2B          CONTINUE 
 DSERASE  EQU    252B        DATA SECURITY ERASE
 EOF      EQU    51B         WRITE END-OF-FILE
 ERASER   EQU    52B         ERASE 6 INCHES OF TAPE 
 EXECROM  EQU    70B         EXECUTE CCC ROM BASED DIAGNOSTICS
 FORESP   EQU    13B         FORESPACE ONE RECORD 
 GS       EQU    12B         GENERAL STATUS 
 LOCATE   EQU    16B         LOCATE BLOCK 
 MC       EQU    414B        MASTER CLEAR 
 MR       EQU    11B         MASTER RESET 
 RDIDF    EQU    212B        READ BLOCK ID
 RDBLF    EQU    312B        READ BUFFERED LOG
 READF    EQU    40B         READ FORWARD 
 RELEASE  EQU    1           RELEASE UNIT 
 REW      EQU    10B         REWIND 
 SFMF     EQU    15B         SEARCH FILE MARK FORWARD 
 SFMR     EQU    115B        SEARCH FILE MARK REVERSE 
 SSB      EQU    112B        SENSE STATUS 
 SYNCH    EQU    3           SYNCHRONIZE
 UNL      EQU    110B        UNLOAD 
 WRITER   EQU    50B         WRITE
  
*         GENERAL STATUS BIT EQUATES. 
  
 BUSY     EQU    2           UNIT BUSY
 LP       EQU    4           LOAD POINT 
 RDY      EQU    1           UNIT READY 
 RIPC     EQU    6           RETRY IN PROCESS BIT 
 CRETRY   EQU    10D         COMMAND RETRY BIT
 ALERT    EQU    11D         ALERT BIT
  
*         DEVICE CODES SUPPORTED. 
  
 TCART    EQU    47B         CARTRIDGE TAPE 
 TCART1   EQU    46B         CARTRIDGE TAPE SILO
          EJECT 
  
*         MISCELLANEOUS EQUATES.
  
 TIMBZ    EQU    72D         ITERATION TIME TO LOOP FOR 30 SEC
 TIMFJM   EQU    50000D/2    ITERATION TIME TO WAIT FOR FULL 50 MSEC
 TIMREL   EQU    400000D/100D  INTERVAL FOR CHANNEL RELEASE-
 MAXITT   EQU    12D         ITERATION COUNT FOR ABOUT A 5 SEC. DELAY 
 CMLGTH   EQU    64D         CENTRAL MEMORY BUFFER LENGTH 
  
 BLWC     EQU    100B        BUFFERED LOG WORD COUNT
 IDWC     EQU    10B         BLOCK ID WORD COUNT
 WRRD     EQU    500B        I/O WORD COUNT 
 AL10     EQU    10B         ACCESS LEVEL FOR DEDICATED CONTROLLER
 AL21     EQU    21B         ACCESS LEVEL FOR NO CHANNEL CLEANUP ON ERR 
 CH       EQU    37B         DEFAULT CHANNEL VALUE FOR I/O COMMANDS 
  
 ERRMCRO  TITLE  ERROR MESSAGES MACRO 
**        ERROR MESSAGES - WRITTEN TO CM DURING INITIALIZATION. 
* 
*         MMSG MACRO. 
* 
*         MMSG  MACRO  NAME,ECODE,MSG,FABT
* 
*         NAME = 6/FABT,6/MESSAGE ORDINAL,6/ECODE.
* 
*         ECODE = ERROR CODE TO BE ASSIGNED (6 BITS). 
* 
*         MSG = ERROR MESSAGE (40 CHARACTERS).
* 
*         FABT = FORCE ABORT (UPPER 6 BITS OF NAME. 
* 
          PURGMAC MMSG
 MMSG     MACRO  NAME,ECODE,MSG,FABT
          IF     -DEF,MMSGORD,1 
 MMSGORD  SET    0                        INITIALIZE ORDINAL
          IFC    EQ,$FABT$$,2             TEST FOR NO FORCE ABORT 
 NAME     EQU    MMSGORD*100B+ECODE 
          ELSE   1
 NAME     EQU    FABT*10000B+MMSGORD*100B+ECODE 
 MMSGBGN  SET    *                        SAVE CURRENT ADDRESS
          IFC    EQ,$MSG$$,2              TEST NULL MESSAGE 
          DATA   1H                       INSURE DATA ITEM
          ELSE   1
          DATA   H$MSG$                   STORE MESSAGE 
          DATA   0                        SET END OF MESSAGE
          IFGT   *-MMSGBGN,BD.MSGML*5+1,1 TEST MESSAGE TOO LONG 
 P        ERR    MESSAGE TOO LONG 
 MMSGORD  SET    MMSGORD+1                BUMP ORDINAL
          IFGT   MMSGORD,BD.MSGMN,1       TEST TOO MANY MESSAGES
 P        ERR    TOO MANY MESSAGES
 MMSGL    SET    MMSGORD*BD.MSGML         SET CM WORD COUNT 
          ENDM
  
 INITIAL  TITLE  INITIALIZATION ROUTINE 
 START    LJM    **          ENTRY POINT FOR OVERLAY INITIALIZATION 
  
          LJM    INIT 
  
          CON    IB          FWA OF INPUT BUFFER
          CON    OB          FWA OF OUTPUT BUFFER 
          CON    SB          FWA OF STATUS BUFFER 
          CON    LIB         LENGTH OF INPUT BUFFER 
          CON    LIB         LENGTH OF OUTPUT BUFFER
          CON    LSB         LENGTH OF STATUS BUFFER
          CON    BD.VERS     VERSION NUMBER 
  
 RFM      TITLE  RFM - RELEASE FROM MLD 
**        RFM    - RELEASE FROM MLD (FIXED LOCATION ENTRY POINT)
*                  RELEASE CALLED FROM MAINTENANCE LANGUAGE DRIVER
*                  RELEASE EQUIPMENT IF CONNECTED 
* 
*                  REL, ABT Z 
* 
*         ENTRY  - (A) = ABORT ADDRESS (777777B)
* 
*         EXIT   - RELEASE COMMAND EXECUTED 
* 
*         USES   - ERR3, ERR4 
* 
*         CALLS  - DEQP, BD.DCH 
* 
 XRFM     LJM    **          EXIT TO MLD
 RFM      EQU    *-1
  
          STM    ERR4        SAVE ABORT ADDRESS (777777B) 
          SHN    -12D 
          STM    ERR3 
          RJM    DEQP        RELEASE THE EQUIPMENT IF CONNECTED 
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC 
          UJN    XRFM        EXIT TO MLD
  
 ENT      TITLE  ENT  ROUTINE FOR STACK 
**        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 I
* 
*         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 
 ENT      SPACE  4
**        TABLE OF ENTRY POINTS FOR EXECUTING HIGH LEVEL COMMANDS 
* 
 TBLENT   CON    REL         RELEASE EQUIPMENT
          CON    RES         RESERVE I/O CHANNEL AND DRIVE
          CON    FUNC        REWIND, UNLOAD, ENDFILE, BKSP, FSPACE, SYNC
          CON    READ        READ TAPE
          CON    READID      READ BUFFERED LOG, READ BLOCK ID 
          CON    RESET       RESET MASTER CLEAR THE CONTROLLER
          CON    STATUS      GET GENERAL, OR SENSE STATUS 
          CON    WRITE       WRITE TAPE, WRITE LONG, WRITE DOUBLE LONG
  
 REL      TITLE  REL - RELEASE EQUIPMENT. 
**        REL    - RELEASE
* 
*         RELEASE UNIT, CONTROLLER AND CHANNEL
* 
*                  REL, ABT Z 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - DEVICE AND CHANNEL RELEASED. 
* 
* 
*         USES   - NONE.
* 
*         CALLS  - DEQP, BD.DCH 
* 
* 
**     1. ISSUE A RELEASE FUNCTION TO RELEASE THE UNIT. 
* 
**     2. DROP THE I/O CHANNEL TO THE OPERATING SYSTEM IF ASSIGNED. 
* 
* 
* 
 REL      RJM    DEQP        DISCONNECT EQUIPMENT IF CONNECTED
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC 
  
          LJM    XENT        EXIT TO STACK
  
 RES      TITLE  RES - RESERVE CHANNEL, CONTROLLER AND UNIT.
**        RES    - RESERVE
* 
*         RESERVE CHANNEL, CONTROLLER AND UNIT
* 
*                  RES U, ABT Z 
* 
*         ENTRY  - (PA)   = VALUE OF U
* 
*         EXIT   - I/O CHANNEL ASSIGNED, CHANNEL ASSIGNED FLAGS 
*                  SET IN ALL THE OTHER SUBROUTINES.
* 
*                - ERRCAS - IF CHANNEL ACTIVE ON ENTRY. 
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRNIES- IF NO INACTIVE TO STATUS FUNCTION.
*                - ERRESNR- IF STATUS NOT RETURNED. 
*                - ERRAES - IF ABNORMAL STATUS. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON INPUT. 
*                - ERRCUB - CONTROL UNIT/UNIT BUSY ON CONNECT.
* 
*         USES   - EC, EA, EM, D.T2, D.T3, D.T6, RESCTR 
* 
*         CALLS  - DEQP, FNC, GETS, DSTS, BD.RCH, IJM 
  
**     1. EXECUTE THE REL SEQUENCE IF THE I/O CHANNEL IS ASSIGNED.
* 
 RESX     LJM    ** 
 RESX1    EQU    *-1
  
          UJN    RES3        DO NOT CLEAR RETURN JUMP 
  
 RES      LDN    0           CLEAR RETURN JUMP ADDRESS IF RES COMMAND 
          STM    RESX1
 RES3     RJM    DEQP        DISCONNECT EQUIPMENT IF CONNECTED
  
**     2. CLEAR ERROR EXIT REGISTERS AND OBTAIN THE I/O CHANNEL FROM
*         THE SYSTEM. 
  
          LCN    3
          STM    RESCTR      STORE COUNT FOR RESERVE RETRIES
 RES5     LDN    0
          STD    EC          CLEAR ERROR REGISTERS
          STD    EA 
          STD    EM 
          LDD    PA          GET RESERVE PARAMETERS 
          LPC    7100B       MASK FOR ERROR RECOVERY DISABLE
          ADM    UNNU 
          STM    WAI7        STORE LAST SELECTED OPTIONS FOR WAIT SUBR. 
  
**     3. DROP/REQUEST I/O CHANNEL FROM THE SYSTEM. 
* 
  
 RES7     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED
  
**     4. VERIFY THAT THE I/O CHANNEL IS NOT ACTIVE.
  
          AJM    ERRCAS      ERROR IF CHANNEL ACTIVE FROM SYSTEM
  
**     5. ISSUE A CONNECT UNIT FUNCTION (EX2U). 
  
 RES9     LDN    CONN 
          ADM    WAI7        LOAD SELECTED OPTIONS
          RJM    FNC         CONNECT UNIT 
  
**     6. REQUEST AND INPUT ALL STATUS TO THE STATUS BUFFER.
  
          LDN    0
          RJM    GETS        GET ALL STATUS 
          LDM    SB+2        GET SECOND WORD OF GS
          LPC    177B        MASK LOWER 7 BITS
          SBN    33B         CHECK IF CU BUSY ON CONNECT
          ZJN    RES10       IF CU BUSY 
          SBN    1           CHECK IF UNIT BUSY ON CONNECT
          NJN    RES11       IF NOT BUSY
 RES10    LDM    RESX1       CHECK RETURN JUMP
          NJN    RES11       NOT ENTERED FROM STACK TIMEOUT NOT APPLICABLE
          SOM    RESCTR      DECREMENT RES COUNTER
          NJN    RES9        TRY TO CONNECT 7774B TIMES 
          LDC    ER.CUB      CONTROL UNIT/UNIT BUSY ON CONNECT
          LJM    ERR         EXIT ERROR CU/UNIT BUSY
  
 RES11    LDN    1
          STD    CONNECT     INDICATE UNIT CONNECTED
  
**     7. BUMP LINE NUMBER AND EXIT.
  
 RES13    LDM    RESX1       CHECK RETURN JUMP
          ZJN    RES15       IF ENTERED FROM STACK
          LJM    RESX        ELSE RETURN TO CALLING ROUTINE 
  
 RES15    LDM    SB+34B      EXIT TO STACK
          SHN    -11         MASK CW TYPE FLAG
          STM    CWTYP       SAVE CW TYPE FLAG
          LJM    XENT        EXIT TO STACK
  
 RESCTR   BSSZ   1           RESERVE COUNTER
  
 CRIPC    TITLE  CRIPC - CHECK RECOVERY IN PROCESS. 
**        CRIPC   - CHECK RECOVERY IN PROCESS 
* 
*         CHECK RECOVERY IN PROCESS AS REQUESTED BY CALLING ROUTINE.
* 
*         ENTRY  - (A) = TIME IN MILLE-SECONDS TO WAIT EOP. 
* 
*         EXIT   - (A) = GENERAL STATUS WORD 1 SHIFTED LEFT 7 PLACES. 
* 
* 
*         USES   - NONE 
* 
*         CALLS  - WEOP 
* 
 CRIPCX   LJM    **          ENTRY/EXIT 
 CRIPC    EQU    *-1
  
          STM    CRIPOP      SAVE NUMBER OF MILLE-SECONDS TO WAIT 
          LCN    0           SET COUNTER TO ALL 7S
          STM    CRIPCT      SAVE COUNT LOWER 
          STM    CRIPCT1     SAVE COUNT UPPER 
 CRIP1    LDM    CRIPOP      GET MILLE-SECONDS TO WAIT
          RJM    WEOP        WAIT END OF OPERATION
          SHN    17D-RIPC    CHECK IF RETRY IN PROCESS
          MJN    CRIP2       IF IN PROCESS WAIT FOR RETRY BIT 
          LDM    SB+1        GET STATUS 
          SHN    17D-CRETRY  CHECK IF COMMAND RETRY IS SET
          UJN    CRIPCX      EXIT 
  
 CRIP2    SOM    CRIPCT      DECREMENT THE RETRY IN PROCESS COUNT 
          NJN    CRIP1       IF NOT GREATER THAN MAX RETRIES
          SOM    CRIPCT1     DECREMENT THE RETRY IN PROCESS COUNT 
          NJN    CRIP1       IF NOT GREATER THAN MAX RETRIES
          LDC    ER.TRIP     TIMEOUT WHILE RETRY IN PROCESS 
          LJM    ERR         ERROR EXIT 
  
 CRIPOP   BSSZ   1           NUMBER OF MILLE-SECONDS TO WAIT
 CRIPCT   BSSZ   1           COUNT FOR NUMBER OF RETRIES IN PROCESS 
 CRIPCT1  BSSZ   1           COUNT FOR NUMBER OF RETRIES IN PROCESS 
  
 CRTRY    TITLE  CRTRY - CHECK IF RETRIES ARE EXHAUSTED.
**        CRTRY   - CHECK IF RETRIES ARE EXHAUSTED. 
* 
*         CHECK IF RETRIES ARE EXHAUSTED BY CALLING ROUTINE.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - IF GREATER THAN 100 RETRIES ERROR EXIT.
* 
*         USES   - NONE 
* 
*         CALLS  - NONE 
* 
 CRTRYX   LJM    **          ENTRY/EXIT 
 CRTRY    EQU    *-1
  
 CRTRY1   LDM    RETRY
          NJN    CRTRY5      IF NOT THE FIRST ERROR RETRY 
 CRTRY3   LDM    SB+1        GET A WORD FROM SB GS WORD 
          STM    SBIE        SAVE IT IN SBIE
          LDM    SB+2        GET THE SECOND WORD
          STM    SBIE+1      SAVE THE SECOND WORD 
 CRTRY5   AOM    RETRY       INCREMENT THE RETRY COUNT
          ADC    -100        MAX RETRIES
          MJN    CRTRYX      IF NOT GREATER THAN 100 RETRIES
 ERRMTRY  LDC    ER.MTRY     INDICATE MULTIPLE RETRY ERROR
          LJM    ERR         ERROR EXIT 
  
 DEQP     TITLE  DEQP - DROP EQUIPMENT. 
**        DEQP   - DROP EQUIPMENT 
* 
*         RELEASE THE CONNECT ON THE UNIT ASSIGNED. 
*         A RELEASE FUNCTION IS ISSUED TO RELEASE THE UNIT. 
* 
*         ENTRY  - NONE.
* 
*         EXIT   - DEVICE RELEASED AND CONNECT CLEARED. 
* 
*                  ERRCAS - IF CHANNEL ACTIVE ON ENTRY. 
* 
*         USES   - CONNECT. 
* 
*         CALLS  - FNC, IJM 
* 
 DEQPX    LJM    ** 
 DEQP     EQU    *-1
  
          LDM    BD.CHFG
          ZJN    DEQPX       EXIT IF CHANNEL IS NOT ASSIGNED
          LDD    CONNECT
          ZJN    DEQPX       EXIT IF UNIT NOT CONNECTED 
          LDM    ERR3 
          SBN    77B
          ZJN    DEQ3        IF RELEASE REQUEST FROM BASIC DRIVER 
          AJM    ERRCAS      ERROR IF CH ACTIVE 
          LDN    0           CLEAR CONNECTED FLAG 
          STD    CONNECT     INDICATE UNIT NOT CONNECTED
          LDN    RELEASE
          RJM    FNC         ISSUE RELEASE FUNCTION 
 DEQ1     UJN    DEQPX       EXIT TO CALLER 
  
 DEQ3     STD    CONNECT     INDICATE UNIT NOT CONNECTED
          LDD    BD.AL
          SBN    BD.AL21
          ZJN    DEQ1        EXIT IF ACCESS LEVEL TO BYPASS CLEANUP 
          IJM    DEQ5        IF CH INACTIVE 
          DCN    CH+40B 
          UJN    DEQ1        EXIT 
  
 DEQ5     LDN    RELEASE     RELEASE UNIT FUNCTION CODE 
          FAN    CH+40B      ISSUE RELEASE FUNCTION 
          RJM    IJM         WAIT FOR INACTIVE
          IJM    DEQPX       EXIT IF INACTIVE RECEIVED
          DCN    CH+40B 
          UJN    DEQ1        EXIT 
  
 FNA      TITLE  FNA    - ISSUE FUNCTION FROM A REG. AND WAIT INACTIVE. 
**        FNA    - ISSUE FUNCTION FROM A REG. AND WAIT INACTIVE.
*         ENTRY  - (A) = FUNCTION TO ISSUE
* 
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED 
* 
*         USES   - NONE 
* 
*         CALLS  - IJM
* 
*         TIME   - MINIMUM 1X  SPEED EXECUTION TIME IS 14 MICROSECONDS. 
* 
 FNAX     LJM    **          ENTRY/EXIT 
 FNA      EQU    *-1
  
          FAN    CH+40B      FUNCTION FROM A REGISTER 
          RJM    IJM         WAIT FOR INACTIVE
          UJN    FNAX        EXIT 
  
 FNC      TITLE  FNC - ISSUE A FUNCTION ON A CHANNEL AND WAIT INACTIVE. 
**        FNC    - ISSUE A FUNCTION ON A CHANNEL AND WAIT INACTIVE. 
* 
*         ENTRY  - (A) = FUNCTION TO ISSUE
* 
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED.
* 
*                  ERRNIF  - IF NO INACTIVE TO FUNCTION 
* 
*         USES   - LF 
* 
*         CALLS  - FNA
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 22 MICROSECONDS.
* 
 FNCX     LJM    **          ENTRY/EXIT 
 FNC      EQU    *-1
  
          STD    LF          TO SAVE LAST FUNCTION
          SBN    CONT        CHECK IF CONTINUE FUNCTION 
          ZJN    FNC1        IF CONTINUE
          ADN    CONT        ADD IN CONTINUE
          STM    LMF         TO SAVE LAST MAJOR FUNCTION
          UJN    FNC3        IF NOT CONTINUE
 FNC1     ADN    CONT        ADD IN CONTINUE
 FNC3     RJM    FNA         OUTPUT FUNCTION AND WAIT INACTIVE
          NJN    FNCX        IF INACTIVE EXIT 
 ERRNIF   LDC    ER.NIF      ERROR NO INACTIVE TO FUNCTION
 FNC5     LJM    ERR         ERROR EXIT 
  
 FUNC     TITLE  FUNC - FUNCTION THE CONTROLLER.
**        FUNC   - FUNCTION THE CONTROLLER. 
* 
*         PERFORM AN ENDFILE, ERASE, FSPACE OR OPERATION BASED
*         ON THE REQUEST. 
* 
*         ENTRY  - (D.T0) = INDEX TO OPERATION
*                           0 = BKSP
*                           1 = ENDFILE 
*                           2 = ERASE 
*                           3 = FSPACE
*                           4 = LOCATE BLOCK
*                           5 = SYNCHRO 
*                           6 = UNLOAD
*                           7 = REWIND
*                          10 = SEARCH FM FWD 
*                          11 = SEARCH FM REV 
*                          12 = EXECUTE CCC ROM BASED DIAGNOSTICS 
* 
*         EXIT   - THE OPERATION IS COMPLETED AND RESULTS STORED. 
* 
*                  ERRCNR  - IF CHANNEL NOT RESERVED. 
*                  ERRIAL  - ACCESS LEVEL TOO LOW FOR REQUEST 
*                  ERRUNC  - IF UNIT NOT CONNECTED. 
*                  ERRNOEP - IF EOP NOT RECEIVED IN 4 SECONDS.
* 
*         USES   - P. 
* 
*         CALLS  - TCA, FNC, WEOP 
  
**     1. VERIFY THAT THE UNIT IS CONNECTED.
* 
  
 FUNC     RJM    TCA         TEST CHANNEL/CONTROLLER ASSIGNMENT 
          LDD    PA          CHECK FUNCTION CODE
          SBN    10B         PSEUDO FUNCTION CODE SEARCH FILE FORWARD 
          MJN    FUN0        NOT SEARCH FILE MARKS
          SBN    2           PSEUDO FUNCTION CODE DATA SECURITY ERASE 
          ZJN    FUN0        DATA SECURITY ERASE
          LDD    AL          GET ACCESS LEVEL 
          SBN    AL10        CHECK AGAINST 10 
          PJN    FUN0        IF AL 10 OR GREATER
 ERRIAL   LDC    ER.IAL      ACCESS LEVEL TOO LOW FOR REQUEST 
          UJN    FNC5        ERROR EXIT 
  
 FUN0     LDN    0
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER 
          STM    WTA
          STM    RETRY       CLEAR RETRY COUNTER
          STM    SBIE        CLEAR RESIDUAL STATUS
          STM    SBIE+1      CLEAR RESIDUAL STATUS
  
**     2. ISSUE THE REQUESTED FUNCTION. 
  
          LDM    TFUN,D.T0   LOAD FUNCTION
 FUN1     RJM    FNC         PERFORM THE FUNCTION 
          LDD    D.T0 
          SBN    TFUNLOC
          NJN    FUN11       IF NOT LOCATE FUNCTION 
  
**     3. OUTPUT DATA IF LOCATE FUNCTION
  
          LDD    LF          TO GET LAST FUNCTION 
          SBN    CONT        CHECK IF CONTINUE FUNCTION 
          ZJN    FUN11       IF CONTINUE DO NOT RE-OUTPUT BLOCK ID
          LDN    3
          STD    WT          PRESET FOR OUTPUT
          STD    D.Z3        SET ERROR/NO ERROR FLAG
          ACN    CH+40B      START OUTPUT 
          OAM    OB 
          STD    SC 
          LCN    3           MULT OF 4 FOR SBN 4
 FUN3     EJM    FUN7 
 FUN5     SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    FUN3 
          STD    D.Z3        INDICATE ALL WORDS NOT TAKEN 
 FUN7     DCN    CH+40B      TERMINATE OUTPUT 
          LDD    D.Z3        CHECK ERROR FLAG 
          ZJN    FUN9        ERROR IF DATA NOT ACCEPTED 
          LDD    WT          LOAD WORD COUNT
          SBD    SC          SUBTRACT WORDS LEFT TO TRANSMIT
          STD    WT          STORE WORDS TRANSMITTED
          LDD    SC          LOAD WORD LEFT TO DO 
          ZJN    FUN11       ALL WORDS TRANSMITTED
 FUN9     LJM    ERRDNA      ERROR IF DATA NOT ACCEPTED 
  
**     4. WAIT UP TO 4 SECONDS FOR END-OF-OPERATION.
* 
*      5. REQUEST AND INPUT GENERAL STATUS TO THE STATUS  BUFFER. 
* 
*      6. IF ALERT IS ON IN GENERAL STATUS INPUT ALL STATUS TO SB.
  
 FUN11    LDC    4000 
          RJM    CRIPC       WAIT EOP AND CHECK RECOVERY IN PROGRESS
          MJN    FUN21
  
 FUN13    LDM    SB+1        GET STATUS 
          SHN    17D-ALERT
          PJN    FUN15       IF ALERT NOT SET 
          LDN    2           GET SENSE STATUS 
          RJM    GETS        GET STATUS 
 FUN15    LDD    D.T0 
          SBN    TFUNUNL
          ZJN    FUN17       IF UNLOAD FUNCTION 
          SBN    TFUNREW-TFUNUNL
          ZJN    FUN16       IF REWIND FUNCTION 
          UJN    FUN19       IF NOT REWIND OR UNLOAD
 FUN16    LDN    RDY+LP      EXPECTED STATUS IN A 
 FUN17    RJM    WAIT        WAIT FOR OPERATION TO COMPLETE 
 FUN19    LJM    XENT        EXIT TO STACK
  
**     7. IF RETRY IS SET ISSUE A CONTINUE FUNCTION.
  
 FUN21    RJM    CRTRY       CHECK RETRY COUNTER
 FUN27    LDN    CONT        GET THE CONTINUE FUNCTION
          LJM    FUN1        CONTINUE 
  
*         TABLE OF FUNCTIONS - MUST BE KEPT IN ORDER
  
 TFUN     CON    BACKSP      BACKSPACE FUNCTION 
          CON    EOF         ENDFILE FUNCTION 
          CON    ERASER      ERASE FUNCTION 
          CON    FORESP      FORESPACE FUNCTION 
 TFUNLOC  EQU    *-TFUN      INDEX CODE FOR LOCATE
          CON    LOCATE      LOCATE BLOCK FUNCTION
          CON    SYNCH       SYNCHRONIZE FUNCTION 
 TFUNUNL  EQU    *-TFUN      INDEX CODE FOR UNLOAD
          CON    UNL         UNLOAD FUNCTION
 TFUNREW  EQU    *-TFUN      INDEX CODE FOR REWIND
          CON    REW         REWIND FUNCTION
          CON    SFMF        SEARCH FILE MARK FORWARD FUNCTION
          CON    SFMR        SEARCH FILE MARK REVERSE FUNCTION
          CON    EXECROM     EXECUTE CCC ROM BASED DIAGNOSTICS
  
 GETS     TITLE  GETS - GET STATUS. 
**        GETS   - GET STATUS 
* 
*         GET STATUS AS REQUESTED IN THE A REGISTER.
* 
*         ENTRY  - (A) = CODE FOR STATUS TO GET. 0 = GENERAL AND SENSE
*                                                1 = GENERAL
*                                                2 = SENSE
*                                                3 = READ BLOCK ID
*                                                4 = READ BUFFERED LOG
* 
*         EXIT   - STATUS STORED IN SB.  LAST STATUS FUNCTION STORED
*                  IN STATUS BUFFER.
* 
*                  ERRNISF - IF NO INACTIVE TO STATUS FUNCTION. 
*                  ERRNSR  - IF NO STATUS RETURNED. 
*                  ERRISR  - IF INCOMPLETE STATUS RETURNED. 
* 
*         USES   - D.Z0, D.Z3, D.Z5, SB 
* 
*         CALLS  - IJM
* 
 GETSX    LJM    **          ENTRY/EXIT 
 GETS     EQU    *-1
  
 GET1     STM    GETP        SAVE CODE IN THE CASE OF A RETRY 
          LPN    7B          MASK OFF BIT IF COMING FROM READ OR WRITE
          STD    D.Z5        SAVE CODE FOR STATUS REQUESTED 
          LDM    GETC,D.Z5   FUNCTION CODE TO ISSUE 
 GET2     STM    GETF        FUNCTION CODE TO ISSUE 
          LDM    GETW,D.Z5   GET NUMBER OF WORDS OF STATUS TO INPUT 
          STD    D.Z0 
          LDM    GETA,D.Z5   GET ADDRESS TO READ STATUS INTO
          STM    GET15       SAVE ADDRESS 
          STD    D.Z3 
 GET3     LCN    0
          STI    D.Z3        SET STATUS WORDS TO NEGATIVE ZERO
          AOD    D.Z3        BUMP ADDRESS 
          SOD    D.Z0 
          NJN    GET3        IF ALL WORDS NOT DONE
          LDM    GETF        FUNCTION CODE TO ISSUE 
          STM    LSF         SAVE LAST STATUS FUNCTION
          SBN    CONT        CHECK IF CONTINUE FUNCTION 
          ZJN    GET4        IF CONTINUE
          ADN    CONT        ADD IN CONTINUE
          STM    LMSF        TO SAVE LAST MAJOR STATUS FUNCTION 
          UJN    GET5        IF NOT CONTINUE
 GET4     ADN    CONT        ADD IN CONTINUE
 GET5     FAN    CH+40B      ISSUE STATUS REQUEST 
          RJM    IJM         WAIT FOR INACTIVE
          NJN    GET7        IF FUNCTION ACCEPTED 
          LDC    ER.NISF     NO INACTIVE TO STATUS FUNCTION 
 GET6     LJM    ERR
  
 GET7     ACN    CH+40B 
          LDC    100
 GET9     FJM    GET13       IF STATUS IS READY 
 GET11    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          PJN    GET9        IF TIME IS NOT UP
          LDC    ER.NSR      NO STATUS RETURNED 
          UJN    GET6 
  
 GET13    LDM    GETW,D.Z5   WORDS TO INPUT 
          IAM    ** 
 GET15    EQU    *-1         *** ADDRESS TO READ STATUS IS STORED HERE
          SFM    ERCPE3,CH   CHECK FOR CH PARITY ERROR
          NJN    GET23       IF ALL WORDS NOT PROVIDED
 GET17    IJM    GET19       IF INACTIVE
          DCN    CH+40B      DEACTIVATE CHANNEL 
 GET19    LDD    D.Z5        CHECK WHETHER GET ALL OR JUST GENERAL
 GET20    NJN    GET21       IF JUST GENERAL OR JUST SENSE
          LDN    2           IF ALL GET SENSE 
          LJM    GET1        MAKE ANOTHER PASS FOR SENSE
  
 GET21    LDM    SB+1 
          LJM    GETSX       EXIT TO CALLER 
  
*      2. IF INCOMPLETE STATUS RETURNED CHECK FOR READ BLOCK ID OR
*         READ BUFFERED LOG COMMAND.
* 
*      3. IF RETRY IN PROCESS IS SET WAIT FOR COMMAND RETRY BIT THEN
*         ISSUE CONTINUE FUNCTION.
* 
*      4. IF ALERT IS ON IN GENERAL STATUS INPUT ALL STATUS TO SB.
  
 GET23    LDD    D.Z5        CHECK TYPE OF STATUS 
          SBN    3           IF BLOCK ID OR BUFFERED
          PJN    GET25       IF NOT GENERAL OR SENSE DONT SEND CONTINUE 
 GET24    LJM    ERRISR      ERROR IF INCOMPLETE STATUS RETURNED
  
 GET25    LDC    5
          RJM    CRIPC       WAIT EOP AND CHECK RECOVERY IN PROGRESS
          MJN    GET29       IF RETRY SET 
          LDM    SB+1        GET STATUS 
          SHN    17D-ALERT
          PJN    GET24       IF ALERT NOT SET INCOMPLETE STATUS RETURNED
          LDM    GETP        GET THE PSEUDO FUNCTION
          LPN    10B         CHECK BIT IF COMING FROM READ OR WRITE 
          UJN    GET20       IF COMING FORM READ OR WRITE DONT GET SENSE
  
 GET29    RJM    CRTRY       CHECK RETRY COUNTER
 GET35    LDM    GETP        GET THE PSEUDO FUNCTION
          LPN    7B          MASK OFF BIT IF COMING FROM READ OR WRITE
          STD    D.Z5        SAVE IT IN DIRECT CELL FOR ADDRESSING
          LDN    CONT        GET THE CONTINUE FUNCTION
          LJM    GET2        TO INPUT AFTER THE CONTINUE FUNCTION 
  
*         NUMBER OF WORDS TO READ FOR EACH STATUS TYPE
  
 GETW     DATA   2           GENERAL STATUS 
          DATA   2           GENERAL STATUS 
          DATA   26          SENSE STATUS 
          DATA   8           READ BLOCK ID
          DATA   32          READ BUFFERED LOG
  
*         PSEUDO FUNCTION SAVED UPON ENTRY
  
 GETP     DATA   0           CURRENT PSEUDO FUNCTION
  
*         STATUS FUNCTION SAVED UPON ENTRY
  
 GETF     DATA   0           CURRENT FUNCTION 
  
*         STATUS FUNCTION CODES FOR EACH STATUS TYPE
  
 GETC     CON    GS          GENERAL STATUS 
          CON    GS          GENERAL STATUS 
          CON    SSB         SENSE BYTE STATUS
          CON    RDIDF       READ BLOCK ID
          CON    RDBLF       READ BUFFERED LOG
  
*         ADDRESS TO INPUT DATA FOR EACH STATUS TYPE
  
 GETA     CON    SB+1        ALL STATUS 
          CON    SB+1        GENERAL STATUS 
          CON    SB+3        SENSE STATUS 
          CON    SB+44B      BLOCK ID WORDS 
          CON    IB          LOG DATA TO IB 
  
 IJM      TITLE  IJM - WAIT INACTIVE AND TIME OUT.
**        IJM    - WAIT INACTIVE AND TIME OUT.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - (A) = NONZERO IF FUNCTION ACCEPTED 
*                        ZERO IF FUNCTION NOT ACCEPTED
* 
*         USES   - NONE 
* 
*         CALLS  - NONE 
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSECONDS. 
* 
 IJMX     LJM    **          ENTRY/EXIT 
 IJM      EQU    *-1
  
          LDN    16          SET FOR 16 LOOPS 
          STM    IJMW        WHICH EQUALS 4 SECONDS 
 IJM1     LCN    3
 IJM3     IJM    IJMX,CH     IF INACTIVE EXIT 
 IJM5     SBN    4           *** SBN 1 IF 4X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    IJM3        IF NOT COUNTED DOWN
          SOM    IJMW        SUBTRACT 1 FROM LOOP COUNT 
          NJN    IJM1        IF NOT COUNTED DOWN
          UJN    IJMX        ELSE EXIT W/(A) = ZERO 
  
 IJMW     BSSZ   1           LOOP COUNTER FOR 2 SECONDS 
  
 READ     TITLE  READ - READ A RECORD.
**        READ   - READ A RECORD. 
* 
*         READ ONE RECORD TO THE INPUT BUFFER.  SAVE  THE 
*         NUMBER OF WORDS REQUESTED IN THE WC REGISTER OR 
*         THE FIRST 500B WORDS AND CONTINUE READING UNTIL 
*         END-OF-RECORD.
* 
*         ENTRY - (D.T0) = OPERATION CODE.  1 = READ TAPE FORWARD.
* 
*                 (WC)   = NUMBER OF WORDS TO TRANSFER TO IB. 
* 
*         EXIT  - OPERATION COMPLETE AND DATA IS IN INPUT BUFFER. 
* 
*                 ERRCNR  - IF CHANNEL NOT ASSIGNED.
*                 ERRUNC  - IF UNIT NOT CONNECTED ON READ FWD OR REV. 
* 
*         USES  - D.T1, D.T2, D.T3, D.T4, SC, WC, WT, WTA, P. 
* 
*         CALLS - TCA, FNC, WEOP. 
  
**     1. VERIFY THAT THE CHANNEL IS ASSIGNED.
  
 READ     RJM    TCA         TEST CHANNEL/CONTROLLER ASSIGNMENT 
          LDN    0
          STM    RETRY       CLEAR RETRY COUNTER
          STM    SBIE        CLEAR RESIDUAL STATUS
          STM    SBIE+1      CLEAR RESIDUAL STATUS
          LDN    READF
          STD    FUN         SAVE READ FUNCTION 
 RD0      LDN    0
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER 
          STM    WTA
          LDD    WC 
          STD    SC          SET WORDS TO READ TO IB
          SBD    BL 
          MJN    RD1         IF WC IS LESS THAN BUFFER SIZE 
          LDD    BL 
          STD    SC          SET IT TO BUFFER SIZE IF LARGER
  
**     2. VERIFY THAT THE UNIT IS CONNECTED.
  
 RD1      LDD    CONNECT
          NJN    RD3         IF CONNECTED 
          LJM    ERRUNC      ERROR IF UNIT NOT CONNECTED
  
 RD3      LDN    0
          STD    D.T1        CLEAR LOOP COUNT 
  
  
**     3. ISSUE  A  READ  (E040)  OR  (E002)  CONTINUE FUNCTION.
* 
  
 RD7      LDD    FUN         GET READ OR CONTINUE 
 RD9      RJM    FNC         ISSUE FUNCTION 
  
**     4. INPUT ONE RECORD. STORE (WC) WORDS INTO THE INPUT BUFFER
*         AND THE NUMBER OF TOTAL BYTES READ INTO THE WT  REGISTER
*         AND SB (42B). NOTE THAT IF THE WC REGISTER CONTAINS ZERO
*         A RECORD IS READ, BUT NO DATA IS TRANSMITTED TO  THE  PP
*         INPUT BUFFER. 
  
 RD11     ACN    CH+40B      START TAPE MOTION
          LDD    BL 
          SBD    SC 
          STD    D.T3        REMAINING WC TO GET TO 500B WORD BOUNDARY
          LDD    SC 
          ZJN    RD13        IF NO WORDS REQUESTED - SKIP RECORD
          IAM    IB          READ DATA TO INPUT BUFFER
          NJN    RD21        IF END OF RECORD 
 RD13     LDD    D.T3 
          ZJN    RD15        IF NO WORDS TO GET TO 500B WORD BOUNDARY 
          IAM    OB          READ 
          NJN    RD23        IF END OF RECORD 
 RD15     LDD    BL 
 RD17     IAM    OB          READ ANOTHER BLOCK INTO THE OUTPUT BUFFER
          NJN    RD25        IF END OF RECORD 
          AOD    D.T1        BUMP LOOP COUNTER
          UJN    RD15        CONTINUE THE READ
  
 RD21     STD    D.T2        SAVE REMAINDER 
          LDD    SC          WORDS REQUESTED TO BE READ 
          UJN    RD27        GO CALCULATE TOTAL WORDS READ
  
 RD23     STD    D.T2        SAVE REMAINDER 
          LDD    D.T3 
          ADD    SC          WORDS TO DO THUS FAR 
          UJN    RD27 
  
 RD25     STD    D.T2 
          LDD    BL 
          ADD    BL          WORDS TO DO THUS FAR 
 RD27     SBD    D.T2 
          STD    WT 
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
 RD29     SOD    D.T1        DECREMENT LOOP COUNT 
          MJN    RD31        IF NO MORE LOOPS MADE
          LDD    BL 
          RAD    WT 
          SHN    -12
          RAM    WTA
          UJN    RD29 
  
**     5. WAIT  UP TO  2  SECONDS  FOR  END-OF-OPERATION  AND  STORE
*         GENERAL STATUS INTO THE STATUS BUFFER.
* 
*      6. IF RETRY IN PROCESS IS SET WAIT FOR COMMAND RETRY BIT THEN
*         ISSUE CONTINUE FUNCTION.
* 
*      7. IF ALERT IS ON IN GENERAL STATUS INPUT ALL STATUS TO SB.
  
 RD31     LDC    2000        SET FOR 2 SECONDS
          RJM    CRIPC       WAIT EOP AND CHECK RECOVERY IN PROGRESS
          MJN    RD39 
  
 RD33     LDM    SB+1        GET STATUS 
          SHN    17D-ALERT
          PJN    RD35        IF ALERT NOT SET 
          LDN    2           GET SENSE STATUS 
          RJM    GETS        GET STATUS 
          LDN    13B         GET BLOCK ID 
          RJM    GETS        GET STATUS 
 RD35     LJM    XENT        EXIT TO STACK
  
 RD39     RJM    CRTRY       CHECK RETRY COUNTER
 RD45     LDN    CONT        GET THE CONTINUE FUNCTION
          STD    FUN         SAVE THE CONTINUE FUNCTION 
          LJM    RD0         TO INPUT AFTER THE CONTINUE FUNCTION 
  
 ERRIDR   LDC    ER.IDR      INCOMPLETE DATA RETURNED TO PP 
          LJM    ERR         ERROR EXIT 
  
  
 READID   TITLE  READID - READ BLOCK ID OR BUFFERED LOG.
**        READID - READ BLOCK ID OR BUFFERED LOG. 
* 
*         READ  BLOCK  ID OR BUFFERED LOG INTO THE INPUT BUFFER.
*         SAVE THE NUMBER OF WORDS REQUESTED IN THE WC REGISTER.
* 
*         ENTRY - (D.T0) = OPERATION CODE. 3 = READ BLOCK ID
*                                          4 = READ BUFFERED LOG
* 
*         EXIT  - OPERATION COMPLETE AND DATA IS IN SB(44) OR IB. 
* 
*                 ERRCNR  - IF CHANNEL NOT ASSIGNED.
* 
*         USES  - P.
* 
*         CALLS - TCA, GETS.
  
**     1. VERIFY THAT THE CHANNEL IS ASSIGNED.
  
 READID   RJM    TCA         TEST CHANNEL/CONTROLLER ASSIGNMENT 
          UJN    STATUS1     GET REQUESTED STATUS AND EXIT
 RESET    TITLE  RESET - MASTER CLEAR THE CONTROLLER. 
**        RESET  - MASTER CLEAR.
* 
*         MASTER CLEAR THE CONTROLLER AND WAIT FOR MICRO-DIAGNOSTICS TO 
*         RUN.
* 
*         ENTRY  - NONE.
* 
*         EXIT   - THE MASTER CLEAR IS COMPLETE, MICRO-DIAGNOSTICS HAVE 
*                  TERMINATED AND END OF OPERATION DETECTED.
* 
*                  ERRCNR - IF CHANNEL NOT ASSIGNED.
*                  ERRNIF - IF NO INACTIVE TO FUNCTION. 
*                  ERRNEOP- IF NO EOP WITHIN 1 SECOND.
* 
*         USES   - CONNECT, P.
* 
*         CALLS  - TCHA, FNC, WEOP
  
**     1. INSURE THE I/O CHANNEL IS ASSIGNED. 
  
 RESET    RJM    TCHA        TEST CHANNEL ASSIGNMENT
  
**     2. ISSUE A MASTER CLEAR FUNCTION (E414). 
  
          LDC    MC 
          RJM    FNC         ISSUE MASTER CLEAR FUNCTION
  
*      4. WAIT UP TO 1 SECOND FOR MICRO-DIAGNOSTICS TO EXECUTE. 
* 
*      5. REQUEST AND INPUT GENERAL STATUS. IF ALERT IS SET IN GENERAL
*         STATUS, INPUT ALL STATUS. 
  
          LDN    0
          STD    CONNECT     INDICATE UNIT NOT CONNECTED
          LDC    1000D
          RJM    WEOP        WAIT END OF OPERATION
  
**     6. BUMP P AND EXIT.
  
          LJM    XENT        EXIT TO STACK
  
 STATUS   TITLE  STATUS - REQUEST AND INPUT STATUS. 
**        STATUS - REQUEST AND INPUT STATUS.
* 
*         INPUT REQUESTED STATUS FROM THE CONTROLLER TO THE STATUS
*         BUFFER. 
* 
*         ENTRY  - (D.T0) = STATUS CODE.  0 = GET ALL STATUS
*                                         1 = GET GENERAL STATUS
*                                         2 = GET SENSE STATUS
* 
*         EXIT   - REQUESTED STATUS IS STORED IN SB.
* 
*         USES   - D.T0.
* 
*         CALLS  - TCHA, GETS.
* 
 STATUS   RJM    TCHA        TEST CHANNEL ASSIGNMENT
 STATUS1  LDD    D.T0 
          LPN    7
          RJM    GETS        GET REQUESTED STATUS 
          LJM    XENT        EXIT TO STACK
  
 TCA      TITLE  TCA - TEST CONTROLLER ASSIGNMENT.
**        TCA    - TEST CONTROLLER ASSIGNMENT 
* 
*         SAVE ABT ADDRESS AND TEST CHANNEL/CONTROLLER ASSIGNMENT.
* 
*         ENTRY  - NONE.
* 
*         EXIT   - ERRCNR - IF CHANNEL NOT ASSIGNED.
*                  ERRUNC - IF UNIT NOT CONNECTED.
*                  ERRCAS - IF CHANNEL ACTIVE ON ENTRY. 
* 
* 
*         CALLS  - NONE.
* 
 TCAX     LJM    **          ENTRY/EXIT 
 TCA      EQU    *-1
  
          LDM    BD.CHFG
          NJN    TCA1        IF CHANNEL ASSIGNED
          UJN    ERRCNR      ERROR IF CHANNEL NOT RESERVED
  
 TCA1     LDD    CONNECT
          NJN    TCA3        IF CONNECTED 
 ERRUNC   LDC    ER.UNC      UNIT NOT CONNECTED 
 ERRUNC1  UJN    ERRCAS1     ERROR EXIT 
  
 TCA3     IJM    TCAX        EXIT IF CHANNEL INACTIVE 
          UJN    ERRCAS      ERROR IF CHANNEL ACTIVE
  
 TCHA     TITLE  TCHA - TEST CHANNEL ASSIGNMENT.
**        TCHA - TEST CHANNEL ASSIGNMENT
* 
*         SAVE ABT ADDRESS AND TEST CHANNEL ASSIGNMENT. 
* 
*         ENTRY - NONE. 
* 
*         EXIT  - CHANNEL VERIFIED TO BE ASSIGNED AND INACTIVE. 
* 
*                 ERRCNR - IF CHANNEL NOT RESERVED. 
*                 ERRCAS - IF CHANNEL ACTIVE ON ENTRY.
* 
* 
*         CALLS - NONE. 
* 
 TCHAX    LJM    **          ENTRY/EXIT 
 TCHA     EQU    *-1
  
          LDM    BD.CHFG
          NJN    TCHA1       IF CHANNEL ASSIGNED
 ERRCNR   LDC    ER.CNR      CHANNEL NOT RESERVED 
          UJN    ERRCAS1     ERROR EXIT 
  
 TCHA1    IJM    TCHAX       EXIT IF CHANNEL INACTIVE 
 ERRCAS   LDC    ER.CAS      CHANNEL ACTIVE ON ENTRY
 ERRCAS1  LJM    ERR         ERROR EXIT 
  
 WRITE    TITLE  WRITE - WRITE A RECORD.
**        WRITE  - WRITE A RECORD.
* 
*         WRITE A RECORD ON TAPE. 
* 
*         ENTRY  - (D.T0) 0 = WRITE 
*                        10 = SHORT WRITE FLAG
*                        12 = SHORT WRITE WITH DELAY FLAG 
*                        20 = LONG WRITE FLAG 
*                        22 = LONG WRITE WITH DELAY FLAG
*                        24 = SHORT WRITE PLUS WITH DELAY FLAG
*                        21 = QUAD LONG WRITE FLAG
*                        30 = DOUBLE LONG WRITE FLAG
*                        31 = QUAD DOUBLE LONG WRITE FLAG 
*                  (WC)     = NUMBER OF WORDS TO WRITE (THIS VALUE IS 
*                             MULTIPLIED BY 32 IF LONG WRITE. 
*                             MULTIPLIED BY 64 IF DOUBLE LONG WRITE.
* 
*         EXIT   - RECORD IS WRITTEN TO TAPE. 
*                  (WC) AND (WTA) = NUMBER OF WORDS TRANSMITTED.
* 
*                  ERRWC  - IF (WC) IS ZERO.
*                  ERRDNA - IF ALL WORDS NOT ACCEPTED ON THE WRITE. 
* 
*         USES   - WT, WTA, WL, SC, D.Z3, D.T1, D.T2, D.T4, P.
* 
*         CALLS  - TCA, FNC,
  
**     1. VERIFY UNIT IS CONNECTED. 
  
 WRITE    RJM    TCA         TEST CHANNEL/CONTROLLER ASSIGNMENT 
  
**     2. VERIFY WC REGISTER IS NOT ZERO. 
  
          LDN    0
          STM    RETRY       CLEAR RETRY COUNTER
          STM    SBIE        CLEAR RESIDUAL STATUS
          STM    SBIE+1      CLEAR RESIDUAL STATUS
          LDD    D.T0        GET PSEUDO FUNCTION CODE 
          LPN    6
          ZJN    WRT0        IF NOT WRITE WITH DELAY SET DELAY TO 0 
          LDI    ADDR2       GET DELAY COUNT
          LPC    777B        MASK FOR MAX 
 WRT0     STM    WRT24       SET DELAY COUNTER
          LDD    WC 
          NJN    WRT1        IF LEGAL WC
 ERRWC    LDC    ER.WC       BUFFER REFERENCE OR WC ERROR 
          LJM    ERRCAS1     ERROR EXIT 
  
**     3. ISSUE A WRITE (0050), LONG WRITE(0150), SHORT WRITE(250)
*         FUNCTION BASED TYPE OF PSEUDO FUNCTION OR  ON THE NUMBER
*         OF CHARACTERS BEING WRITTEN.
  
 WRT1     LDD    D.T0        GET PSEUDO FUNCTION
          LPN    31B         MASK OFF DELAY FLAGS 
          ZJN    WRT1A       SKIP 150/350 FUNCTIONS IF NORMAL WRITE 
          SBN    10B         IF SHORT WRITE 
          NJN    WRT2        SKIP 150/350 FUNCTIONS IF SHORT WRITE
          LDC    200B        LOAD SHORT WRITE FUNCTION
 WRT1A    UJN    WRT6        ADD IN WRITE 
 WRT2     SBN    20B         CHECK IF DOUBLE LONG 
          PJN    WRT2B       IF LONG WRITE
          ADN    10B         ADD BACK IN FUNCTION 
          UJN    WRT3        SAVE COUNT AND CHECK CONTROLWARE TYPE
 WRT2B    ADN    2           SET MODIFIER 
 WRT3     STD    D.T1        SAVE MODIFIER
          LDM    CWTYP       GET STREAM/BLOCK MUX FLAG
          NJN    WRT5        IF BLOCK MUX 
          LDM    WRTC,D.T1   GET VALUE TO SAVE
          STM    WRT3A       SAVE FOR CHECK 
          LDD    WC 
          ADC    -896        SUBTRACT MAX WC FOR LONG WRITE 
 WRT3A    EQU    *-1         VALUE TO SUBTRACT TO CHECK WC
          MJN    WRT5        IF NOT LONG WRITE FUNCTION 
          LDD    D.T0        GET PSEUDO FUNCTION
          SBN    24B
          NJN    WRT4        IF NOT WRITE SHORT PLUS WITH DELAY 
          LDC    300B        WRITE SHORT LONG FUNCTION
          UJN    WRT6        ADD WRITE FUNCTION 
 WRT4     LDC    100B        LONG WRITE FUNCTION
          UJN    WRT6        ADD IN WRITE FUNCTION
 WRT5     LDN    0
 WRT6     ADN    WRITER 
 WRT7     STD    FUN         SAVE WRITE FUNCTION
          LDN    0
          STD    WT          CLEAR WT REGISTER
          STM    WTA
          STD    WL          CLEAR WRITE LOOP COUNTER 
          LDD    WC 
          STD    D.T1        SET WORDS TO WRITE 
  
**     4. OUTPUT THE REQUESTED NUMBER OF  WORDS  FROM  THE  OUTPUT
*         BUFFER AND STORE THE NUMBER OF WORDS ACTUALLY WRITTEN IN
*         THE WT REGISTER AND WORD 42B OF THE STATUS BUFFER.
  
          LDD    BL 
          STD    SC 
          STD    D.Z3        SET ERROR/NO ERROR FLAG
          LDD    D.T0 
          LPN    31B         MASK OFF DELAY FLAGS 
          ZJN    WRT9        IF NOT LONG WRITE
          SBN    10B         CHECK IF SHORT WRITE 
          ZJN    WRT9        IF NOT LONG WRITE
          SBN    20B         CHECK IF LONG WRITE
          MJN    WRT8        IF LONG WRITE
          LDD    BL 
          SHN    -6          DIVIDE BL BY 64 FOR DOUBLE LONG WRITE
          STD    SC 
          LDC    1006B       SHN 6 FOR DOUBLE LONG WRITE
          UJN    WRT9        CONTINUE 
  
 WRT8     LDD    BL 
          SHN    -5          DIVIDE BL BY 32 FOR LONG WRITE 
          STD    SC 
          LDC    1005B       SHN  5 FOR LONG WRITE
 WRT9     STM    WRT15
          STM    WRT43
 WRT11    LDD    D.T1 
          SBD    SC          CALCULATE NUMBER OF LOOPS REQUIRED 
          MJN    WRT13       IF UNDERFLOW 
          STD    D.T1 
          AOD    WL          BUMP LOOP COUNT
          UJN    WRT11       CONTINUE THE DIVIDE
  
 WRT13    ADD    SC          TAKE CARE OF UNDERFLOW 
 WRT15    SHN    5           *** SHN 5 IF LONG WRITE
*         SHN    6           *** SHN 6 IF DOUBLE LONG WRITE 
*         DATA   0           *** DATA 0 IF NOT LONG WRITE 
          STD    D.T2        SAVE REMAINDER 
  
          LDD    D.T0 
          SBN    24B
          NJN    WRT150      IF NOT WRITE SHORT PLUS
          LDI    ADDR1       GET PLUS COUNT 
          LPN    37B         MASK LESS THAN 40B WHICH IS MULTIPLIER 
          RAD    D.T2        ADD TO REMAINDER COUNT 
 WRT150   LDD    D.T0 
          LPN    1           CHECK IF QUAD DOUBLE LONG WRITE
          ZJN    WRT16       IF NOT QUAD DOUBLE LONG WRITE
          LDD    WL          GET WRITE LOOPS
          SHN    2           MULTIPLY BY FOUR 
          STD    WL          REPLACE MULTIPLIED COUNT 
          LDD    D.T2 
          SHN    2           MULTIPLY BY 4
          STD    D.T2 
 WRT15A   LDD    D.T2 
          SBD    BL          CALCULATE NUMBER OF LOOPS REQUIRED 
          MJN    WRT16       IF UNDERFLOW 
          STD    D.T2 
          AOD    WL          BUMP LOOP COUNT
          UJN    WRT15A      CONTINUE THE DIVIDE
  
 WRT16    LDD    FUN         GET THE WRITE FUNCTION 
          RJM    FNC         ISSUE THE FUNCTION 
          ACN    CH+40B      START THE WRITE
          LDD    WL 
          STD    D.Z1        SET LOOP COUNT 
          ZJN    WRT33       IF WORD COUNT IS LESS THAN BUFFER SIZE 
          LDD    BL 
          UJN    WRT27       ENTER WRITE LOOP 
  
 WRT17    EJM    WRT23
          LCN    3           MULT OF 4 FOR SBN 4
 WRT19    EJM    WRT23
 WRT21    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    WRT19
          UJN    WRT29       ERROR IF ALL DATA NOT ACCEPTED 
  
 WRT23    LDC    0           DELAY COUNT BETWEEN BLOCKS 
 WRT24    EQU    *-1
          ZJN    WRT26       IF ZERO NO DELAY 
 WRT25    SBN    1
          NJN    WRT25       IF NOT TIMED OUT 
 WRT26    LDD    BL 
 WRT27    OAM    OB          OUTPUT 
          ZJN    WRT31       IF ALL DATA ACCEPTED 
 WRT29    LJM    WRT53
  
 WRT31    SOD    D.Z1        DECREMENT LOOP COUNTER 
          NJN    WRT17       IF ALL BLOCKS NOT WRITTEN
 WRT33    LDD    D.T2 
          ZJN    WRT35       IF NO REMAINING WORDS TO OUTPUT
          OAM    OB 
          ZJN    WRT35       IF ALL WORDS ACCEPTED
          LJM    WRT55       IF ALL WORDS NOT ACCEPTED
  
 WRT35    EJM    WRT41       IF LAST BYTE ACCEPTED
          LCN    3           MULT OF 4 FOR SBN 4
 WRT37    EJM    WRT41
 WRT39    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    WRT37
          STD    D.Z3        INDICATE ALL DATA NOT ACCEPTED 
 WRT41    LDN    20          DELAY 10 USECS ON ODD BYTE 
 WRT42    SBN    1
          NJN    WRT42
          DCN    CH+40B      TERMINATE OUTPUT 
  
          LDD    WC 
 WRT43    SHN    5           *** SHN 5 IF LONG WRITE
*         SHN    6           *** SHN 6 IF DOUBLE LONG WRITE 
*         DATA   0           *** DATA 0 IF NOT LONG WRITE 
          STD    WT          SAVE WORDS TRANSMITTED 
          SHN    -12
          STM    WTA
          LDD    D.T0 
          SBN    24B
          NJN    WRT44       IF NOT WRITE SHORT PLUS
          LDD    ADDR1       GET PLUS COUNT 
          LPN    37B         MASK LESS THAN 40B WHICH IS MULTIPLIER 
          RAD    WT          ADD TO WORDS TRANSMITTED 
 WRT44    LDD    D.T0 
          LPN    1           CHECK IF QUAD WRITE
          ZJN    WRT45       IF NOT QUAD WRITE
          LDM    WTA         GET UPPER BITS OF WT 
          SHN    2           MULTIPLY BY FOUR 
          STM    WTA         REPLACE MULTIPLIED COUNT 
          LDD    WT          GET WORD COUNT 
          SHN    -10         GET UPPER 2 BITS FOR WTA 
          RAM    WTA         ADD THEM TO WTA
          LDD    WT          GET WT AGAIN 
          SHN    2           MULTIPLY BY 4
          STD    WT          SAVE FOR QUAD WRITE
  
**     5. WAIT UP TO 4 SECONDS FOR END-OF-OPERATION.
* 
*      6. VERIFY  THAT  ALL WORDS WERE ACTUALLY TRANSMITTED DURING
*         THE WRITE.
* 
*      7. REQUEST AND INPUT ALL STATUS TO THE STATUS  BUFFER. 
  
 WRT45    LDC    4090        SET WAIT OF 4 SECONDS
          RJM    CRIPC       WAIT EOP AND CHECK RECOVERY IN PROGRESS
          PJN    WRT47       IF COMMAND RETRY BIT NOT SET 
          RJM    CRTRY       CHECK RETRY COUNTER
          LDN    CONT        GET THE CONTINUE FUNCTION
          LJM    WRT7        TO OUTPUT AFTER THE CONTINUE FUNCTION
  
 WRT47    LDM    SB+1        GET STATUS 
          SHN    17D-ALERT
          PJN    WRT49       IF ALERT NOT SET 
          LDN    2           GET SENSE STATUS 
          RJM    GETS        GET STATUS 
          LDN    13B         GET BLOCK ID 
          RJM    GETS        GET STATUS 
 WRT49    LDD    D.Z3 
          NJN    WRT51       IF LAST WORD TAKEN (TIME DID NOT EXPIRE) 
 ERRDNA   LDC    ER.DNA      ERROR IF DATA NOT ACCEPTED 
          LJM    ERR         ERROR IF LAST OUTPUT IS LOST 
  
 WRT51    LJM    XENT        EXIT TO STACK
  
 WRT53    STD    D.Z2        SAVE WORDS NOT TAKEN IN FIRST LOOP 
          LDD    BL 
          UJN    WRT57
  
 WRT55    STD    D.Z2 
          LDD    D.T2 
 WRT57    SBD    D.Z2 
          STD    WT          SET WORDS TRANSMITTED
          LDN    0
          STD    D.Z3        INDICATE ALL WORDS NOT ACCEPTED
 WRT59    AOD    D.Z1 
          SBD    WL 
          MJN    WRT61       IF NUMBER OF WORDS IN REPEAT LOOP NOT ADDED
          LJM    WRT45       IF NUMBER OF WORDS IN REPEAT LOOP ADDED
  
 WRT61    LDD    BL 
          RAD    WT          BUMP TOTAL WORDS TRANSMITTED 
          SHN    -12
          RAM    WTA
          UJN    WRT59
  
 CWTYP    BSSZ   1           CONTROLWARE TYPE STORED HERE 
  
 WRTC     CON    -896        MAX WC WITH 50B FUNCTION LONG WRITE
          CON    -448        MAX WC WITH 50B FUNCTION DOUBLE LONG 
          CON    -224        MAX WC WITH 50B FUNCTION QUAD LONG 
          CON    -112        MAX WC WITH 50B FUNCTION QUAD DOUBLE 
  
 WEOP     TITLE  WEOP - WAIT END OF OP. 
**        WEOP- WAIT END OF OP
* 
*         REQUEST STATUS AND WAIT FOR END OF OPERATION. 
* 
*         ENTRY - (A) = NUMBER OF MSEC TO WAIT FOR EOP. 
* 
*         EXIT  - EOP RECEIVED AND STATUS STORED IN SB. 
* 
*                 ERRNEOP - IF NO EOP IN ALLOTTED TIME. 
*                 ERRISR  - IF INCOMPLETE STATUS RETURNED.
* 
*         USES  - D.Z5, D.Z6, D.Z7, SB. 
* 
*         CALLS - NONE. 
* 
 WEOPX    LJM    **          ENTRY/EXIT 
 WEOP     EQU    *-1
  
          STD    D.Z7        SAVE WAIT TIME 
          STD    D.Z0        CLEAR OUTSIDE LOOP COUNTER 
          LDN    77B
          STD    D.Z5 
 WEO1     LDN    GS 
          STM    LSF         SAVE LAST STATUS FUNCTION
          FAN    CH+40B      SELECT GENERAL STATUS
 WEO3     LDC    1000 
 WEO5     IJM    WEO11       IF INACTIVE TO GS FUNCTION 
 WEO7     SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    WEO5        WAIT 
          SOD    D.Z7        DECREMENT MSEC TO GO 
          PJN    WEO3        IF TIME REMAINS
 WEO9     LDC    ER.NEOP     ERROR IF NO EOP IN ALLOTED TIME
          UJN    WEO19       ERROR EXIT 
  
 WEO11    ACN    CH+40B      FUNCTION ACCEPTED, TRY TO READ STATUS
          LDN    12 
 WEO13    FJM    WEO17       IF STATUS IS READY 
 WEO15    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    WEO13       WAIT 11 USEC 
          DCN    CH+40B 
          SOD    D.Z0 
          NJN    WEO1        IF NOT TIME UP 
          SOD    D.Z5 
          ZJN    WEO9        IF EOP TIME IS UP
          UJN    WEO1 
  
 WEO17    LDN    2
          IAM    SB+1        READ GS
          NJN    ERRISR      IF ALL WORDS NOT RECEIVED
          SFM    ERCPE3,CH   CHECK FOR CH PARITY ERROR
          LDM    SB+1 
          IJM    WEOPX       IF INACTIVE RECEIVED 
          DCN    CH+40B 
          LJM    WEOPX
  
 ERRISR   LDC    ER.ISR      ERROR IF INCOMPLETE STATUS RETURNED
 WEO19    UJN    ERRAG1      ERROR EXIT 
  
 WAIT     TITLE  WAIT - WAIT FOR REWIND OR UNLOAD TO COMPLETE.
**        WAIT - WAIT FOR REWIND OR UNLOAD TO COMPLETE. 
* 
*         WAIT UP TO 104 SECONDS FOR REQUESTED CONDITIONS 
*         ON A REWIND OR UNLOAD FUNCTION.  A TEST IS DONE AND 
*         IF NOT REQUIRED STATUS, THE PPU IS DROPPED FOR 1
*         SECOND.  THIS SEQUENCE IS REPEATED UNTIL THE EXPECTED 
*         STATUS IS RECEIVED OR UNTIL 104 SECONDS IS UP.
* 
*         ENTRY - (A) = EXPECTED STATUS AT END OF OPERATION.
* 
*         EXIT  - REWIND OR UNLOAD OPERATION COMPLETED AND STATUS 
*                 IS IN STATUS BUFFER.
* 
*                 ERRUHB  - IF REWIND OR UNLOAD NOT COMPLETE IN 
*                           104 SECONDS.
*                 ERRAGS  - IF READY/LP STATUS IS NOT CORRECT ONCE
*                           BUSY DROPS. 
* 
*         USES  - SC, BD.REQP, D.T0, P. 
* 
*         CALLS - GETS, BD.REQ, RES.
  
 WAITX    LJM    **          ENTRY/EXIT 
 WAIT     EQU    *-1
  
          STM    WAI3        SAVE EXPECTED STATUS 
          LDC    104
          STD    SC          SET COUNTER FOR 104 SECONDS
          LDM    ERR3        SAVE CURRENT ABT ADDRESS 
          ADC    2000B
          STM    WAI9 
          LDM    ERR4 
          STM    WAI9+1 
 WAI1     LDN    0
          RJM    GETS        GET ALL STATUS 
          SHN    17-1        POSITION BUSY BIT
          MJN    WAI5        IF STILL BUSY
          SHN    18-16
          LPN    LP+RDY 
          LMC    ** 
 WAI3     EQU    *-1         *** EXPECTED LP AND RDY STATUS STORED HERE 
          ZJN    WAITX       EXIT IF ACTUAL EQUALS EXPECTED 
 ERRAGS   LDC    ER.AGS      ABNORMAL GENERAL STATUS
 ERRAG1   LJM    ERR         ERROR EXIT 
  
 WAI5     LDN    1
*IF DEF,MVE 
          STM    BD.REQP+3   SET DROP TIME
*ENDIF
*IF -DEF,MVE
          STM    BD.REQP+4   SET DROP TIME
*ENDIF
  
          LDN    BD.DREQ
          RJM    BD.REQ      REQUEST A DROP FOR 1 SECOND
  
*         CONTROL RETURNS AFTER A 1 SECOND DROP OF THE PPU
  
          LDC    ** 
 WAI7     EQU    *-1         *** LAST SELECTED RES OPTIONS STORED HERE
          STD    PA          INDICATE RES OPTIONS TO USE
 WAI9     LDC    **          *** LOAD INSTRUCTION STORED HERE- ABT ADDR 
          STM    ERR4        RESTORE ABORT ADDRESS
          SHN    -12
          STM    ERR3        RESTORE ABORT ADDRESS
          RJM    RESX1       RESERVE CHANNEL AND UNIT 
          LDN    0
          STM    RESX1       CLEAR RETURN ADDRESS FOR NEXT PASS 
          SOD    SC          DECREMENT SECONDS COUNTER
          ZJN    ERRUHB      IF 104 SECONDS HAS ELAPSED 
          LJM    WAI1        IF 104 SECONDS HAS NOT ELAPSED 
  
 ERRUHB   LDC    ER.UHB      UNIT HUNG BUSY 
          UJN    ERR         ERROR EXIT 
  
 ERCPE1   LDN    0           GET ALL STATUS 
 ERCPE2   RJM    GETS 
 ERCPE3   LDC    ER.CPE      CHANNEL PARITY ERROR 
  
 ERR      TITLE  ERR - ERROR EXIT.
**        ERR    - ERROR EXIT SUBROUTINE
* 
*         ENTRY  - (A) = MESSAGE ADDRESS INDEX
* 
*         EXIT   - (A) = ABORT ADDRESS FOR AN ABORT 
*                  (A) = LINE NUMBER FOR MODULE TERMINATE 
* 
*         USES   - D.Z1, D.Z2, EC, EM, EA 
* 
*         CALLS  - NONE 
* 
 ERR      STD    D.Z1        SAVE MESSAGE INDEX AND ERROR NUMBER
          SHN    -12
          STD    D.Z2        SAVE ABORT FLAG
          LDM    BD.CHFG
          ZJN    ERR1        IF CHANNEL IS NOT ASSIGNED 
*IF DEF,MVE,3 
          LDD    BD.ALA      GET ACCESS LEVEL ATTRIBUTES
          LPN    BD.NCC      NO CHANNEL CLEANUP 
          NJN    ERR1        IF NO CHANNEL CLEANUP
*IF -DEF,MVE,3
          LDD    BD.AL
          SBN    AL21 
          ZJN    ERR1        ACCESS LEVEL CHECK 
          IJM    ERR1,CH     CLEAN UP CHANNEL 
          DCN    CH+40B 
 ERR1     LDD    D.Z1 
          LPN    77B         MASK ERROR CODE
          ADC    7500B       ADD IN BIAS FOR DCART PRODUCT OVERLAY
          STD    EC          STORE ERROR CODE 
          LDD    D.Z1 
          SHN    -6 
          ADC    100B        FLAG MESSAGE INDEX AS OVERLAY MESSAGE
          STD    EM          STORE MESSAGE INDEX
          LDD    P
          STD    EA          STORE LINE NUMBER WHERE ERROR OCCURRED 
          LDD    D.Z2 
          NJN    ERR5        IF ABORT FLAG SET
          LDC    ** 
 ERR3     EQU    *-1         FOR ABORT ADDRESS
          SHN    12 
          LMC    ** 
 ERR4     EQU    *-1         FOR ABORT ADDRESS
          LJM    BD.RNI      RNI AT THE REJECT ADDRESS
  
 ERR5     LJM    BD.ABT      TERMINATE MODULE 
  
  
 IB       EQU    6500B       INPUT BUFFER 
 LIB      EQU    500B        LENGTH OF INPUT AND OUTPUT BUFFERS 
 OB       EQU    IB+LIB      OUTPUT BUFFER
 SB       EQU    OB+LIB      STATUS BUFFER
 LSF      EQU    SB          LAST STATUS FUNCTION 
 SBIE     EQU    SB+35B      INITIAL GENERAL STATUS IF RETRY DETECTED 
 CHNU     EQU    SB+37B      CHANNEL UNDER TEST 
 EQNU     EQU    SB+40B      EQUIPMENT UNDER TEST (ALWAYS 0)
 UNNU     EQU    SB+41B      UNIT UNDER TEST
 WTA      EQU    SB+42B      UPPER BITS OF WORDS TRANSMITTED REG. 
 RETRY    EQU    SB+43B      RETRY COUNTER FOR WRITES AND READS 
 BIDST    EQU    SB+44B      BLOCK ID STATUS INFORMATION
 LMF      EQU    SB+54B      LAST FUNCTION ISSUED 
 LMSF     EQU    SB+55B      LAST STATUS FUNCTION ISSUED
 LSB      EQU    56B         LENGTH OF STATUS BUFFER
 SBLWA    EQU    SB+LSB      STATUS BUFFER LWA+1
  
          ERRPL  *-IB-1      ERROR IF DCART PRODUCT OVERLAY OVERFLOW
          EJECT 
 INIT     TITLE  INIT - INITIALIZATION. 
**        THE INITIALIZATION CODE THAT FOLLOWS IS OVERLAYED BY THE
*         PRODUCT OVERLAY BUFFERS ABOVE.
* 
*         TEST EQUIPMENT AND UNIT NUMBER
* 
 INIT     LDN    0
          STD    D.Z1        CLEAR COUNTER
 INIT3    LDN    0
          STM    SB,D.Z1     CLEAR STATUS BUFFER
          AOD    D.Z1 
          SBN    LSB
          NJN    INIT3       IF STATUS BUFFER NOT CLEARED 
          LDN    0
          STM    EQNU        EQUIPMENT NUMBER TO STATUS BUFFER
          LDM    BD.EQ
          LPN    77B
          STM    UNNU        UNIT TO STATUS BUFFER
  
*         SET DELAY TIME BASED ON SPEED OF PPU
  
 INIT5    LDC    TSPEED 
          STD    D.T0 
 INIT7    LDI    D.T0 
          ZJN    INIT9       IF END OF TABLE
          STD    D.T1 
          LDI    D.T1 
          SCN    77B
          ADM    BD.SPEED 
          STI    D.T1        SET ADN/SBN VALUE
          AOD    D.T0 
          UJN    INIT7       COMPLETE ALL WORDS 
  
*         STORE I/O CHANNEL INTO COMMANDS 
  
 INIT9    LDM    BD.CHAN
          STM    CHAN        I/O  CHANNEL TO STATUS BUFFER
          LPN    37B         REMOVE CHANNEL BIAS
          STM    CHNU        SAVE IN SB FOR MODULE PROGRAMMER 
          STD    D.T2 
          LDC    TCHAN
          STD    D.T0        SET FWA OF TABLE CONTAINING ADDRESSES
 INIT11   LDI    D.T0 
          ZJN    INIT13      IF END OF TABLE
          STD    D.T1 
          LDI    D.T1 
          LPC    7740B
          ADD    D.T2 
          STI    D.T1 
          AOD    D.T0 
          UJN    INIT11      COMPLETE ALL WORDS 
  
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS DEFINED
*         AT UPDATE TIME.  THIS  DEFINITION MEANS THAT THE ASSEMBLY WILL
*         BE FOR THE NOSVE ENVIRONMENT. 
* 
*         *IF DEF,MVE 
*IF DEF,MVE 
 INIT13   STD    D.T1        CLEAR CELL 
          LDC    MMSGL. 
          STD    D.T0        LENGTH OF PO MSG AREA IN 60 BIT WORDS
 INIT15   SBN    3           NUMBER OF 60 BIT WORDS/MESSAGE 
          MJN    INIT17      IF NO MESSAGES 
          STD    D.T0        UPDATED LENGTH 
          AOD    D.T1        INCREMENT MESSAGE COUNT
          LDD    D.T0 
          NJN    INIT15      IF MORE MESSAGES 
 INIT17   LDD    D.T1 
          STM    BD.MSGS     MESSAGE COUNT
**
*         WRITE PP MESSAGES TO CM 
* 
 INIT19   LDN    0
          STD    D.Z1 
          STD    D.Z2 
          STD    D.Z3 
          STD    D.Z4 
 INIT21   LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD
 INIT23   EQU    *-1         MODIFIED TO FWA OF INITIALIZATION ERROR
          ZJN    INIT27      IF END OF MESSAGE
 INIT25   STM    D.T4,D.Z2   STORE IN D.T4+ 
          AOD    D.Z1        BUMP PP MESSAGE POINTER
          UJN    INIT29 
  
 INIT27   LDC    2R          MESSAGE END, STORE BLANKS
          STM    D.T4,D.Z2
 INIT29   AOD    D.Z2        BUMP D.T4+ POINTER 
          SBN    4
          NJN    INIT21      IF NOT 4 PP WORDS
          STD    D.Z2        CLEAR POINTER
          LDC    BD.MSGA     INDEX INTO CM COMMON BUFFER TO PO MSG AREA 
          ADD    D.Z4        BIAS TO WORD WITHIN PO MSG AREA
          STM    BD.IDEX
          LDN    BD.CMB      POINTER TO FWA OF CM COMMON BUFFER 
          RJM    BD.SETR
          CWDL   D.T4        WRITE MSG WORD TO CM 
          AOD    D.Z4        INCREMENT BIAS INTO PO MSG AREA
          AOD    D.Z3        BUMP CM WORD COUNTER 
          SBN    BD.MSGML+1  EACH MESSAGE OCCUPIES A 4 WORD CM BLOCK
          NJN    INIT21      IF NOT BD.MSGML CM WORDS 
          STD    D.Z3        CLEAR CM WORD COUNTER
          LDC    0
 INIT31   EQU    *-1         MODIFIED TO FWA OF INITIALIZATION ERROR
          ZJN    INIT33      IF NOT PO INITIALIZATION ERROR 
          LCN    0
          LJM    INIT43      PO INITIALIZATION ERROR (A) = NEG ZERO 
  
 INIT33   LDM    PPMSGS,D.Z1
          ZJN    INIT35      IF MESSAGE ENDED IN ZERO BYTE
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR
 INIT35   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE
          LDM    PPMSGS,D.Z1
          ZJN    INIT37      IF LAST MESSAGE
          LJM    INIT25      GET NEXT MESSAGE 
  
 INIT37   EQU    *
  
*ENDIF
*         *ENDIF
**
  
**
*         THE  FOLLOWING CODE  IS  ASSEMBLED  IF THE SYMBOL 'MVE' IS NOT
*         DEFINED  AT UPDATE TIME.  THIS MEANS THAT THE ASSEMBLY WILL BE
*         FOR THE NOS OR NOSBE ENVIRONMENT. 
* 
*         *IF -DEF,MVE
*IF -DEF,MVE
*         WRITE PP MESSAGES TO CM 
  
 INIT13   LDM    BD.MSGA     GET PP MESSAGE AREA ADDRESS
          STD    D.T6        SAVE IT
          ADC    MMSGL.      ADD LENGTH 
          RJM    BD.TFL      SEE IF IN FL 
          LDN    P.ZERO      CLEAR CELLS, D.Z1=PP MESSAGE ADDRESS 
          CRD    D.Z1        D.Z2=D.T0-D.T4 POINTER, D.Z3=CM WD COUNTER 
 INIT21   LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD
          ZJN    INIT27      IF END OF MESSAGE
 INIT25   STM    D.T0,D.Z2   STORE IN D.T0+ 
          AOD    D.Z1        BUMP PP MESSAGE POINTER
          UJN    INIT29 
  
 INIT27   LDC    2R          MESSAGE END, STORE BLANKS
          STM    D.T0,D.Z2
 INIT29   AOD    D.Z2        BUMP D.T0+ POINTER 
          SBN    5
          NJN    INIT21      IF NOT 5 PP WORDS
          STD    D.Z2        CLEAR POINTER
          LDD    D.RA        PUT RA IN A REG
          SHN    6
          ADD    D.T6        ADD MESSAGE ADDRESS
          CWD    D.T0        WRITE ONE WORD FROM D.T0 
          AOD    D.T6        UPDATED ADDRESS
          AOD    D.Z3        BUMP CM WORD COUNTER 
          SBN    BD.MSGML 
          NJN    INIT21      IF NOT BD.MSGML CM WORDS 
          STD    D.Z3        CLEAR CM WORD COUNTER
          LDM    PPMSGS,D.Z1
          ZJN    INIT35      IF MESSAGE ENDED IN ZERO BYTE
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR
 INIT35   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE
          LDM    PPMSGS,D.Z1
          NJN    INIT25      IF NOT LAST MESSAGE
*ENDIF
*         *ENDIF
**
  
* 
*         SET DIRECT CELLS
  
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER 
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER 
          STD    WL          CLEAR WRITE LOOP COUNT FOR LAST WRITE
*IF -DEF,MVE,2
          LDC    100D        100  MSEC DELAY IN BD.RCH
          STM    DLYDCH      MODIFY DELAY USED ON REL AND RES CHANNEL 
  
          LDC    LIB
          STD    BL          SET LENGTH OF IB AND OB
          LDC    5000B
          STD    WC          SET DEFAULT VALUE IN WORD COUNT REGISTER 
  
*         VERIFY THAT THE ASSIGNED DEVICE CODE IS SUPPORTED 
  
          LDD    DC 
*IF DEF,MVE,2 
          ADC    -TCART 
          ZJN    INIT43      INDICATE NO ERRORS DETECTED BY INIT
*IF -DEF,MVE
          ADC    -TCART1
          ZJN    INIT43      INDICATE NO ERRORS DETECTED BY INIT
          SBN    TCART-TCART1 
          ZJN    INIT43      INDICATE NO ERRORS DETECTED BY INIT
*ENDIF
  
 INIT39   LDC    INITA
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS DEFINED
*         AT UPDATE TIME.  THIS  DEFINITION MEANS THAT THE ASSEMBLY WILL
*         BE FOR THE NOSVE ENVIRONMENT. 
* 
*         *IF DEF,MVE 
*IF DEF,MVE 
 INIT41   STM    INIT23 
          STM    INIT31 
          LJM    INIT19      PROCESS ERROR MESSAGE
*ENDIF
*         *ENDIF
**
 INIT43   LJM    START       RETURN TO BASIC DRIVER ( A=MSG OR ZERO ) 
  
 INITA    DIS    ,*  DC NOT SUPPORTED*
  
*         TABLE OF PPU SPEED SWITCHES 
  
 TSPEED   CON    GET11
          CON    FUN5 
          CON    IJM5 
          CON    WRT21
          CON    WRT39
          CON    WEO7 
          CON    WEO15
          DATA   0           END OF SPEED SWITCHES TABLE
          EJECT 
          TITLE  ERROR MESSAGES 
  
 PPMSGS   EQU    *           START OF PP MESSAGES 
****
          MMSG   ER.FLE,EC.FLE,(ADDR OUT OF FL),1 
          MMSG   ER.TL,EC.TL,(I/O TIME OUT ON CH RESERVE),1 
          MMSG   ER.SEE,EC.SEE,(SUBR ENTRY/EXIT ERR),1
          MMSG   ER.WC,EC.WC,(BUFFER INDEX OR WC ERR),1 
          MMSG   ER.RES,EC.RES,(R)
          MMSG   ER.RES1,EC.RES1,(R)
          MMSG   ER.RES2,EC.RES2,(R)
          MMSG   ER.CNR,EC.CNR,(CH NOT RESERVED)
          MMSG   ER.CAS,EC.CAS,(CH ACTIVE ON ENTRY) 
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE TO FUNC)
          MMSG   ER.NISF,EC.NISF,(NO INACTIVE TO STATUS FUNC) 
          MMSG   ER.NSR,EC.NSR,(NO STATUS RETURNED) 
          MMSG   ER.ISR,EC.ISR,(INCOMPLETE STATUS RETURNED) 
          MMSG   ER.DNA,EC.DNA,(ALL DATA NOT ACCEPTED FROM PP)
          MMSG   ER.IDR,EC.IDR,(ALL DATA NOT RETURNED TO PP)
          MMSG   ER.UNC,EC.UNC,(UNIT NOT CONNECTED) 
          MMSG   ER.AGS,EC.AGS,(ABNORMAL GENERAL STATUS)
          MMSG   ER.UHB,EC.UHB,(UNIT HUNG BUSY) 
          MMSG   ER.NEOP,EC.NEOP,(NO EOP) 
          MMSG   ER.CPE,EC.CPE,(CH PE ON INPUT) 
          MMSG   ER.MTRY,EC.MTRY,(RETRY LIMIT DURING ONE OPER)
          MMSG   ER.IAL,EC.IAL,(ACCESS LEVEL TOO LOW FOR REQ) 
          MMSG   ER.CUB,EC.CUB,(CONTROL UNIT/UNIT BUSY ON CON)
          MMSG   ER.TRIP,EC.TRIP,(TIMEOUT WHILE RETRY IN PROC)
 MMSGL.   EQU    MMSGL
          DATA   0
****
 TCHAN    EQU    *           CREATE CHANNEL TABLE 
          LIST   D
          HERE
          LIST   *
          DATA   0           END OF CHANNEL TABLE 
  
**
*         THE  FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS NOT 
*         DEFINED AT UPDATE TIME. THIS MEANS THAT THE ASSEMBLY IS NOT 
*         FOR THE NOSVE ENVIRONMENT.
* 
*         *IF -DEF,MVE
*IF -DEF,MVE
          IFEQ   NOS,1
 .1       SET    POVLA
 .2       SET    10000B 
 .3       SET    *-.1+5+4+500B
 .4       SET    .2-.1+5-1
          ERRNG  .2-.1+5-.3/500B*500B-1  BYTES LEFT AFTER LAST SECTOR 
          ERRNG  .3/500B*500B-5-*+.1-5   BYTES LEFT IN LAST SECTOR
          ERRNG  .4/500B*500B-5-*+.1-5   BYTES CAN BE ADDED TO OVERLAY
          ENDIF 
*ENDIF
*         *ENDIF
**
  
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS DEFINED
*         AT UPDATE TIME. THIS MEANS THAT THE ASSEMBLY IS BEING MADE FOR
*         THE NOSVE ENVIRONMENT.
* 
*         *IF DEF,MVE 
*IF DEF,MVE 
          ERRPL  *-7773B     ERROR IF DCART OVERLAY OVERFLOW
*ENDIF
*         *ENDIF
**
  
          IFEQ   NOSBE,1,1
          ERRPL  *-7773B     ERROR IF DCART OVERLAY OVERFLOW
  
          QUAL   *
