*COMDECK,ISD
          TITLE  HIGH LEVEL ISD FULL TRACK PRODUCT OVERLAY FOR MALET. 
 5SE      SEGMENT POVLA 
          ORG    POVLA
          QUAL   ISD
*CALL,VERS
          COMMENT ISD PRODUCT OVERLAY FOR MALET "VERS"
          EJECT 
**        THE FOLLOWING COMMANDS ARE  DESIGNED FOR THE  ISD  DISK SUB-
*         SYSTEMS  RUNNING  IN  FULL-TRACK MODE.  5SE IS  THE  PRODUCT
*         OVERLAY THAT EXECUTES THESE COMMANDS  AND  IS  DRIVEN BY THE
*         INSTRUCTION STACK OF THE MALET PP DRIVER.  REQUESTS ARE MADE
*         BY THE DRIVER BY STORING PARAMETERS INTO PP DIRECT CELLS AND
*         PERFORMING A  RETURN-JUMP TO AN OVERLAY SUBROUTINE. ONCE THE
*         REQUEST HAS BEEN COMPLETED, CONTROL IS RETURNED TO THE STACK
*         TO  EXECUTE  THE  NEXT  COMMAND.  THE  DEVICE TYPE FOR THESE
*         COMMANDS IS ISD.
* 
*         THE ISD FULL-TRACK PRODUCT OVERLAY  SUPPORTS  A PROGRAMMABLE
*         INPUT BUFFER (IB) OF 505B PP WORDS, AN OUTPUT BUFFER (OB) OF
*         OF 505B PP WORDS AND A STATUS BUFFER (SB) OF  64B PP WORDS. 
*         DATA IS WRITTEN TO  THE  DISK FROM THE  OUTPUT BUFFER AND IS
*         READ FROM THE DISK TO THE INPUT BUFFER. THE STATUS BUFFER IS
*         USED TO HOLD GENERAL  AND  DETAIL STATUS  FROM THE SUBSYSTEM
*         AND OTHER WORDS DEFINED LATER. SUPPORTED CAPABILITIES ARE AS
*         FOLLOWS.
* 
*            READCD - COPY THE COS OR LEVEL II DIAG FROM DISK TO PP.
*            DEFECT - GENERATE A DRIVE DEFECT MAP.
*            EXECUTE- INVOKE AND RUN AN IN-LINE DIAGNOSTIC. 
*            REALLOC- RE-ALLOCATE A SECTOR. 
*            REFORM - SEND FORMAT FUNCTION. 
*            REL    - RELEASE DRIVE, ADAPTER, CONTROL MODULE AND I/O
*                     CHANNEL.
*            RES    - RESERVE I/O CHANNEL, ADAPTER, CONTROL MODULE AND
*                     DRIVE.
*            WRITECD- WRITE THE ADAPTER CONTROLWARE, COS OR LEV II
*                     DIAGNOSTICS ON DISK.
*            SPIN   - SPIN UP/DOWN THE DRIVE SPINDLE. 
*            STATUS - INPUT GENERAL, PROCESSOR OR DETAIL STATUS TO SB.
* 
*         THIS PRODUCT OVERLAY DOES NOT USE THE WC OR BA  REGISTERS TO
*         CONTROL I/O OPERATIONS.  THESE REGISTERS ARE FREE FOR USE BY
*         THE MODULE PROGRAMMER.  ALL NORMAL READS AND WRITES TRANSFER
*         502B WORDS STARTING AT THE FIRST WORD OF THE BUFFER.
* 
          EJECT 
**        THE FOLLOWING CHART DEFINES THE LAY-OUT OF THE STATUS BUFFER. 
* 
*                   --------------------   ---
*               0   /   GENERAL STATUS /      / 
*                   /------------------/      / 
*               1   /                  /      / 
*               .   /                  /      / 
*               .   /   DETAIL STATUS  /      / THIS IS THE NORMAL-LAST 
*               .   /                  /      / TAKEN STATUS FROM THE 
*               .   /                  /      / SUBSYSTEM 
*               .   /                  /      / 
*               .   /                  /      / 
*               .   /                  /      / 
*              24B  /                  /   ---
*                   /------------------/   ---
*              25B  /   GENERAL STATUS /      / 
*                   /------------------/      / 
*              26B  /                  /      / 
*               .   /                  /      / THIS IS THE FIRST TAKEN 
*               .   /   DETAIL STATUS  /      / STATUS WITHIN SEQUENCES 
*               .   /                  /      / THAT REQUIRED RECOVERY
*               .   /                  /      / TO BE PERFORMED.
*               .   /                  /      / (CONTINUE FUNCTIONS 
*               .   /                  /      / ISSUED) 
*               .   /                  /      / 
*              51B  /                  /   ---
*                   /------------------/   ---
*              52B  /  RETRY COUNT     /      / ERROR CORRECTION DATA 
*                   /------------------/   ---
*              56B  / 1ST BYTE         /      / DISK PACK SERIAL NUMBER 
*              57B  / 2ND BYTE         /      / (FROM ASSIGN DIRECTIVE) 
*                   /------------------/   ---
*              60B  / SEEK TIME        /      / MILLISECONDS TO DO LAST 
*                   /------------------/      / SEEK
*              61B  / CHANNEL          /   ---
*              62B  / EQUIPMENT        /      / 
*              63B  / UNIT             /      / EQUIPMENT UNDER TEST
*                   --------------------   ---
* 
*         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 CURRENT  P  REGISTER
*         CONTENTS (LINE NUMBER) INTO THE  EA  REGISTER.   I-O CHANNEL
*         CLEAN-UP OCCURS  AND  A JUMP IS MADE TO THE STATEMENT NUMBER
*         SPECIFIED BY THE ABT ADDRESS IN THE COMMAND.
* 
          EJECT 
**        THE FOLLOWING TABLE DEFINES THE ERROR CODES AND MESSAGES THAT 
*         MAY BE GENERATED FOR EACH COMMAND.
* 
*                                     A R E R R W S S 
*                                     U E X E E R P T 
*                                     T A E L S I I A 
*                                     O D C . . T N T 
*                                     L C U . . E . U 
*                                     D D T . . C . S 
*                                     . . E . . D . . 
*                                     / . / . / . / . 
* 6104 BUFFER INDEX OR WC ERROR       X X . . . X . . 
*      ------------------------------ - - - - - - - - 
* 6110 CH NOT ASSIGNED                X X X . . X . X 
*      ------------------------------ - - - - - - - - 
* 6111 CH ACTIVE ON ENTRY             . . . . X . . . 
*      ------------------------------ - - - - - - - - 
* 6112 NO INACTIVE TO LAST FUNC       X X X X X X X X 
*      ------------------------------ - - - - - - - - 
* 6113 NO INACTIVE TO GENERAL STATUS  X X X . X X X X 
*      ------------------------------ - - - - - - - - 
* 6114 NO INACTIVE TO DETAIL STATUS   X . X . X X X X 
*      ------------------------------ - - - - - - - - 
* 6115 GENERAL STATUS NOT RETURNED    X X X . X X X X 
*      ------------------------------ - - - - - - - - 
* 6116 INCOMPLETE STATUS RETURNED     X . X . X X X X 
*      ------------------------------ - - - - - - - - 
* 6117 FUNC PARAMETERS NOT ACCEPTED   X X X . X X X . 
*      ------------------------------ - - - - - - - - 
* 6120 ALL DATA NOT ACCEPTED FROM PP  X . X . . X . . 
*      ------------------------------ - - - - - - - - 
* 6121 INCOMPLETE DATA RETURNED TO PP X X X . . X X . 
*      ------------------------------ - - - - - - - - 
* 6122 CONTROL MOD/DRIVE CONNECTED    X X X . . X . X 
*      ------------------------------ - - - - - - - - 
* 6123 ACCESS LEVEL TOO LOW FOR REQ   X X X . . X X . 
*      ------------------------------ - - - - - - - - 
* 6124 RESERVE TIMEOUT                . . . . X . . . 
*      ------------------------------ - - - - - - - - 
* 6125 ABNORMAL GENERAL STATUS        X X X . X X X . 
*      ------------------------------ - - - - - - - - 
* 6126 CH FAILED TO GO EMPTY          X . X . X X X . 
*      ------------------------------ - - - - - - - - 
* 6130 BUSY TIMEOUT ERROR             X . X . . X X . 
*      ------------------------------ - - - - - - - - 
* 6131 DIAGNOSTIC BUSY TIMEOUT        . . X . . . . . 
*      ------------------------------ - - - - - - - - 
* 6132 DEVICE CODE/ STATUS MISMATCH   . . . . X . . . 
*      ------------------------------ - - - - - - - - 
* 6133 NO INACTIVE AFTER DATA XFER    X X . . . . . X 
*      ------------------------------ - - - - - - - - 
* 6134 CH INACTIVE DURING DATA XFER   X X X . . X . . 
*      ------------------------------ - - - - - - - - 
* 6135 ILLEGAL TEST SELECTED          . . X . . . . . 
*      ------------------------------ - - - - - - - - 
* 6136 CHANNEL PE ON INPUT            . X . . . . . X 
*      ------------------------------ - - - - - - - - 
          EJECT 
*         EQUATES FOR ERROR CODES - FIRST 7 ARE FOR BASIC DRIVER. 
  
 EC.FLE   EQU    1           ADDR OUT OF FL 
 EC.TL    EQU    2           I/O TIMEOUT ON CH RESERVE
 EC.SEE   EQU    3           SUBR ENTRY/EXIT ERROR
 EC.WC    EQU    4           BUFFER INDEX OR WC ERR 
 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.CNA   EQU    10B         CH NOT ASSIGNED
 EC.CAS   EQU    11B         CH ACTIVE ON ENTRY 
 EC.NIF   EQU    12B         NO INACTIVE TO LAST FUNC 
 EC.NIGS  EQU    13B         NO INACTIVE TO GENERAL STATUS
 EC.NIDS  EQU    14B         NO INACTIVE TO DETAIL  STATUS
 EC.GSNR  EQU    15B         GENERAL STATUS NOT RETURNED
 EC.ISR   EQU    16B         INCOMPLETE STATUS RETURNED 
 EC.FPNA  EQU    17B         FUNC PARAMETERS NOT ACCEPTED 
 EC.DNA   EQU    20B         ALL DATA NOT ACCEPTED FROM PP
 EC.IDR   EQU    21B         INCOMPLETE DATA RETURNED TO PP 
 EC.CNC   EQU    22B         CONTROL MOD/DRIVE NOT CONNECTED
 EC.IAL   EQU    23B         ACCESS LEVEL TOO LOW FOR REQ 
 EC.NRES  EQU    24B         RESERVE TIMEOUT
 EC.AGS   EQU    25B         ABNORMAL GENERAL STATUS
 EC.CFE   EQU    26B         CHANNEL FAILED TO GO EMPTY 
 EC.UHB   EQU    27B         UNIT HUNG BUSY 
 EC.BTMO  EQU    30B         BUSY TIMEOUT ERROR 
 EC.DER   EQU    31B         DIAGNOSTIC BUSY TIMEOUT
 EC.DCSM  EQU    32B         DEVICE CODE/STATUS MISMATCH
 EC.NIDT  EQU    33B         NO INACTIVE AFTER DATA TRANSFER
 EC.CNAC  EQU    34B         CHANNEL INACTIVE DURING DATA TRANSFER
 EC.ITS   EQU    35B         ILLEGAL TEST SELECTED
 EC.CPE   EQU    36B         CHANNEL PARITY ERROR ON INPUT
  
*         DIRECT CELL EQUATES 
  
 CL       EQU    63B         ADDRESS OF CURRENT (SECTOR) LENGTH  - V
 SC       EQU    64B         SCRATCH CELL USED FOR BUSY TIME
 CC       EQU    65B         ADDRESS OF CURRNET CYLINDER         - W
 CT       EQU    66B         ADDRESS OF CURRENT TRACK            - X
 CS       EQU    67B         ADDRESS OF CURRENT SECTOR           - Y
  
 SEEKA    EQU    D.Z3        SEEK ADDRESS USES D.Z3 THRU D.Z7 
 PA       EQU    D.T0        PARAMETER ADDRESS
  
          EJECT 
*         EQUATES FOR EQUIPMENT FUNCTIONS.
  
 CONN     EQU    0           CONNECT
 SEK11    EQU    1           SEEK 1 TO 1 INTERLACE
 RD       EQU    2           READ SUBFUNCTION FOR SYSRD 
 REW      EQU    3           REWIND SUBFUNCTION FOR SYSREW
 WRTE     EQU    4           WRITE SUBFUNCTION FOR SYSWR
  
  
 OC       EQU    10B         OPERATION COMPLETE 
 GS       EQU    12B         GENERAL STATUS 
 FMT      EQU    16B         FUNCTION CODE FOR FORMAT PACK
 WRCW     EQU    21B         WRITE CONTROLWARE ON DISK
 EDS      EQU    23B         DETAIL STATUS
 DR       EQU    32B         DIAGNOSTIC READ
 GDM      EQU    47B         GENERATE DEFECT MAP FUNCTION 
 RCOS     EQU    50B         READ COS FROM DISK 
 WCOS     EQU    51B         WRITE COS TO DISK
 RDIAG    EQU    52B         READ DIAGNOSTICS FROM DISK 
 WDIAG    EQU    53B         WRITE DIAGNOSTICS TO DISK
 UP       EQU    55B         SPIN UP FUNCTION 
 DN       EQU    56B         SPIN  DOWN FUNCTION
 IPS      EQU    60B         INPUT PROCESSOR STAT FUNCTION
 EAD      EQU    64B         EXECUTE ADAPTER IN-LINE DIAG FUNCTION
 ECMD     EQU    65B         EXECUTE CONTROL MOD DIAG FUNCTION
 DCFB     EQU    66B         DUMP CM FUNCTION BUFFER
 DCM      EQU    70B         DUMP CM DATA BUFFER
 AUTOCM   EQU    71B         AUTOLOAD CM HOST FUNCTION
 AUTODK   EQU    100B        AUTOLOAD FROM DISK FUNCTION
 AUTO     EQU    414B        AUTOLOAD FUNCTION
  
*         GENERAL STATUS BIT EQUATES. 
  
 BUSY     EQU    1           UNIT BUSY
  
*         DEVICE CODES SUPPORTED
  
 ISD1     EQU    110B        ISD1 DEVICE CODE 
 ISD2     EQU    111B        ISD2 DEVICE CODE 
          SPACE   4,20
*         MISCELANOUS EQUATES.
  
 TIMBZ    EQU    72D         ITERATION TIME TO LOOP FOR 30SEC 
 TIMFJM   EQU    50000D/2     INTERATION 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
  
 AL21     EQU    21B         ACCESS LEVEL FOR NO CHANNEL CLEANUP OR ERR 
 CH       EQU    37B         DEFAULT CHANNEL VALUE FOR I/O COMMANDS 
  
          EJECT 
**        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
          EJECT 
 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 OF THIS OVERLAY 
  
**        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 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 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 
  
**        TABLE OF ENTRY POINTS FOR EXECUTING HIGH LEVEL COMMANDS 
* 
 TBLENT   CON    REL         RELEASE EQUIPMENT
          CON    RES         RESERVE ADAPTER, CONTRL MOD, AND DRIVE 
          CON    READCD      COPY COS OR DIAG FROM DISK TO PP 
          CON    EXECUTE     INVOKE AND RUN IN-LINE DIAGN 
          CON    WRITECD     WRITE CNTLWRE,COS OR DIAG ON DISK
          CON    SPIN        SPIN UP/DOWN DRIVE SPINDLE 
          CON    STATUS      GET GENERAL, PROCESSOR OR DETAIL STATUS
          CON    AUTOLD      AUTOLOAD CNTWR, COS OR DIAG TO RAM 
          EJECT 
**        AUTOLD - AUTOLOADS CONTROLWARE AND COS FROM DISK
* 
*                  AUTOLD DISK, ABT Z 
*                  AUTOLD ADHOST, ABT Z 
*                  AUTOLD ADHOST CHAIN, ABT Z 
*                  AUTOLD CMHOST, ABT Z 
*                  AUTOLD CMHOST CHAIN, ABT Z 
* 
*         ENTRY  - (PA) = CODE    0 = DISK
*                                 1 = ADHOST
*                                 2 = CMHOST
* 
*                - (PA+1)         0 = NOT CHAINING
*                                 1 = CHAINING
* 
*         EXIT   - ER.IAL - IF ACCESS LEVEL NOT VALID 
*                - ER.DNA - IF ALL DATA NOT ACCEPTED
*                - ER.AGS - IF ABNORMAL STATUS RETURNED 
*                - ER.CNA - IF CHANNEL NOT ACTIVE DURING OUTPUT 
* 
 AUTOLD   LDC    ** 
 AFUNF1   EQU    *-1
          NJN    AUTLD7      CHAINING 
 AUTLD0   LDN    20B
          STD    D.T3        STORE AL 20 NEEDED 
          LDD    PA          FUNCTION CODE
          NJN    AUTLD1 
          LJM    AUTLD16     IF AUTOLD DISK 
* 
 AUTLD1   SBN    1
          NJN    AUTLD2 
          RJM    TCA         CHECK CHANNEL RESERVED 
          LDC    AUTO        CODE = 414B
          STD    D.T4        SAVE FUNCTION
          UJN    AUTLD3 
* 
 AUTLD2   RJM    TDR         CHECK DRIVE RESERVED 
          LDN    10B
          STM    FACM        SET FLAG FOR AUTOLD CM 
          STD    D.T3        AL = 10B FOR CMHOST
          LDN    AUTOCM      CODE = 71B 
          STD    D.T4 
 AUTLD3   RJM    ALCHK       CHECK ACCESS LEVEL 
* 
 AUTLD6   LDN    0
          STD    WT 
          LDD    D.T4 
          RJM    FNC         ISSUE THE FUNCTION 
          ACN    CH+40B 
 AUTLD7   RJM    OUTD        OUTPUT DATA BLOCK
          LDN    1
          STM    AFUNF1      SET FUNCTION ISSUED FLAG 
          LDD    PA+1 
          STM    BD.CHAIN    SET/CLEAR CHAINING FLAG
          NJN    AUTLD11     IF CHAINING EXIT 
          RJM    EJM         INSURE CHANNEL HAS GONE EMPTY
          DCN    CH+40B 
          LDN    0
          STM    AFUNF1      CLEAR FUNCTION ISSUED FLAG 
          LDD    PA 
          SBN    1
          ZJN    AUTLD11     IF AUTOLD ADHOST DO NOT WAIT BUSY
          LDN    20          SET WAIT FOR 20 SECONDS
 AUTLD8   RJM    WAITBZ 
 AUTLD11  LJM    XENT        RETURN TO STACK
  
* 
 AUTLD16  RJM    TCA         CHECK CHANNEL ASSIGNED 
          RJM    ALCHK       CHECK ACCESS LEVEL 
* 
 AUTLD17  LDC    AUTODK      CODE = 0100
          ADM    UN          ADD SPECIFIED CM AND DRIVE NO. 
          STD    LF          STORE FUNCTION FOR ABORT 
          RJM    FNA         ISSUE THE FUNCTION 
          LDC    250
          STM    CNTR1       SAVE 1 MINUTE TIME LIMIT 
 AUTLD18  RJM    IJM         CHECK FOR CHANNEL INACTIVE 
          NJN    AUTLD11     IF CHANNEL INACTIVE
          SOM    CNTR1
          NJN    AUTLD18     COUNTER NOT ZERO NEW ITERATION 
          LJM    ERRBTMO     ERROR BUSY TIME OUT ON AUTOLD DISK 
          EJECT 
**       READCD  - READS COS OR LEVEL II DIAGNOSTICS FROM DISK. 
* 
*                  READCD COS, ABT Z      READCD COS CHAIN, ABT Z 
*                  READCD DIAG, ABT Z     READCD DIAG CHAIN, ABT Z
* 
*          ENTRY   - PA = FUNCTION CODE   RCOS  = 0 
*                                         RDIAG = 1 
* 
*          EXIT    - ER.IAL - IF ACCESS LEVEL NOT 4 OR GREATER
*                  - ER.IDR - IF ALL DATA NOT RETURNED TO PP
*                  - ER.ISR - IF INCOMPLETE STATUS RETURNED 
*                  - ER.CNA - IF CH INACTIVE AFTER ACN OR WHEN CHAINING 
* 
*          USES    - D.T1,D.T2,D.T3 
* 
*          CALLS   - TDR, ,STS,FNC
* 
*         1.  CHECK TO SEE IF FUNCTION FLAG SET, IF NOT THEN CHECK DRIVE RES
*             AND ACESS LEVEL VALID. IF YES PROCEED WITH DATA INPUT.
* 
 READCD   LDC    ** 
 RFUNFL   EQU    *-1         FUNCTION ISSUED FLAG STORED HERE 
          NJN    RDCD4       IF FUNCTION PREVIOUSLY ISSUED
          RJM    TDR         ELSE CHECK DRIVE RESERVED
          LDN    4           CHECK AL = 4 OR GREATER
          STD    D.T3 
          RJM    ALCHK       CHECK ACCESS LEVEL 
* 
*         2.  INITIALIZE REG, LOAD AND ISSUE CORRECT FUNCTION (READ COS OR
*             READ DIAG). 
* 
 RDCD1    LDN    0
          STD    WT 
          LDD    PA 
          ZJN    RDCD2       IF READ COS REQUEST
          LDN    RDIAG       ELSE LOAD READ DIAG FUNCTION 
          UJN    RDCD3
  
 RDCD2    LDN    RCOS 
 RDCD3    RJM    FNC         ISSUE FUNCTION 
          ACN    CH+40B 
* 
*         3.  INPUT DATA BLOCKS (STORED IN WC) UNTIL ALL DATA READ. 
* 
 RDCD4    IJM    ERRCNAC,CH    IF CH INACTIVE DURING INPUT
          LDD    WC          WORD BLOCK SIZE
          ZJN    ERRWC       ERROR IF NO WORDS TO INPUT 
          IAM    OB,CH       INPUT WORD BLOCK 
          STD    D.Z1        SAVE COUNT OF WORDS NOT READ 
          NJN    ERRIDR      IF ALL WORDS NOT READ
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
          LDN    1
          STM    RFUNFL      SET FUNCTION ISSUED FLAG 
          LDD    WC          WPRD BLOCK SIZE
          SBD    D.Z1 
          STD    WT          SAVE WORDS TRANSFERRED 
          LDD    PA+1 
          STM    BD.CHAIN    SET/CLEAR CHAINING IN PROGRESS FLAG
          NJN    RDCD10      IF CHAINING
 RDCD7    LDN    0
 RDCD8    IJM    RDCD9,CH    IF CHANNEL INACTIVE
          ADN    1
          PJN    RDCD8       JUMP IF NOT TIMED OUT
          DCN    CH+40B      ELSE DEACTIVATE CHANNEL
 RDCD9    LDN    0
          STM    RFUNFL      CLEAR FUNCTION FLAG ON LAST READ 
          RJM    STS         GET GENERAL STATUS 
          NJN    ERRAGS      ABNORMAL GENERAL STATUS
  
 RDCD10   LJM    XENT 
  
 ERRWC    LDC    ER.WC       ERROR WORD COUNT 
          LJM    ERR         ERROR EXIT 
  
 ERRIDR   LDC    ER.IDR      ERROR INCOMPLETE DATA RETURNED TO PP 
 ERRIDR1  STD    D.T2        SAVE ERROR CODE
          LDD    WC 
          SBD    D.Z1 
          STD    WT          SAVE WORDS TRANSMITTED 
          RJM    STS         GET GENERAL STATUS 
          LJM    ERRDST1     GET DETAILED AND EXIT
  
 ERRAGS   LDC    ER.AGS      ABNORMAL GENERAL STATUS
          STD    D.T2 
 ERRDST1  RJM    DST         GET DETAILED STATUS
          LDD    D.T2 
          LJM    ERR         ERROR EXIT 
          EJECT 
**       EXECUTE - EXECUTE ADAPTER OR CONTROL MOD IN-LINE DIAGNOSTICS.
* 
*                 EXECUTE CM V SB W PM X Y, ABT Z 
* 
*                 EXECUTE AD V PM X, ABT Z
* 
*          ENTRY   - PA = CODE   2**0 = 0 IF AD, 1 IF CM
*                                2**1 = 0 IF NOT PM, 1 IF PM
*                                2**2 = 0 IF NOT SB, 1 IF SB
* 
*                  - PA + 1 = V 
*                    PA + 2 = X 
*                    PA + 3 = Y 
*                    PA + 4 = W 
* 
*          EXIT - ER.IAL - IF ACCESS LEVEL NOT VALID
*                 ER.FPNA- IF FUNCTION PARAMETERS NOT ACCEPTED
* 
*          USES - D.T0, D.T1, D.T2, D.T3,D.T4 
* 
*          CALLS - TDR, FNO ,FNC
* 
*         2.  TEST FOR ADAPTER OR CONTROL MOD DIAGNOSTICS.
  
 EXECUTE  LDD    PA 
          LPN    1           TEST BIT 2**0
          NJN    EXEC0       IF CM SPECIFIED
          LJM    EXEC18 
  
  
*        2.  KEYWORDS CM,PM AND SB ARE PRESENT, SO TEST FOR SPECIFIC
*              VALUES OF V AND W,IF FOUND THEN VERIFY ACCESS LEVEL IS 
*              VALID.  IF THE SPECIAL VALUES NOT FOUND THEN GO ON TO
*              NEXT STEP. 
  
 EXEC0    LDD    PA+1 
          STD    D.Z2        SAVE COMMAND CODE FOR OUTPUT 
          LDD    PA+3 
          STD    D.Z3        SAVE REPITION COUNT
          LDD    PA+2 
          ADD    PA+4 
          STD    D.Z4 
          RJM    TDR         VERIFY THE DRIVE IS RESERVED 
          LDD    D.T2        CHECK X NON ZERO 
          NJN    EXEC4       VERIFY ACCESS LEVEL 10 OR GREATER
          LDD    PA+3        CHECK Y NON ZERO 
          NJN    EXEC4       VERIFY AL 10 OR GREATER
          LDD    PA+4        CHECK W EQUAL ZERO 
          ZJN    EXEC4
          LDD    D.T1        PARAMETER V
          LMC    160B 
          ZJN    EXEC1        IF V = 70 (HEX) 
          SBN    11B
          NJN    EXEC3       IF V NE 79 (HEX) 
 EXEC1    LDC    ER.ITS      ERROR ILLEGAL TEST SELECTED
          LJM    ERR         ERROR EXIT 
  
 EXEC3    LDD    D.T1 
          LMC    161B 
          NJN    EXEC5
          LDD    D.T4        IF V= 71 (HEX) 
          SBN    2
          ZJN    EXEC4       IF W=2 THEN AL =10 
          SBN    1
          ZJN    EXEC4       IF W=3 THEN AL =10 
          SBN    1
          ZJN    EXEC4       IF W=4 THEN AL =10 
          UJN    EXEC9       ELSE AL =3 
  
 EXEC4    UJN    EXEC10      VERIFY ACCESS LEVEL
  
 EXEC5    SBN    3
          NJN    EXEC6
          LDD    D.T4        IF V=72
          SBN    6
          ZJN    EXEC4       IF W = 6,AL = 10 
          SBN    1
          ZJN    EXEC4       IF W=7 AL = 10 
          UJN    EXEC9       ELSE AL =3 
  
 EXEC6    SBN    1
          NJN    EXEC7
          LDD    D.T4        IF V = 75
          SBN    3           IF W = 3 THEN AL = 10
          ZJN    EXEC4
          UJN    EXEC9
  
 EXEC7    SBN    5
          NJN    EXEC8
          LDD    D.T4        IF V = 78
          SBN    5
          ZJN    EXEC10      IF W = 5 , AL = 10 
          UJN    EXEC9
  
 EXEC8    SBN    2
          NJN    EXEC9
          LDD    D.T4        IF V = 7A
          SBN    6
          ZJN    EXEC10      IF W=6 THEN AL = 10
 EXEC9    LDN    3
          STD    D.T3 
  
          UJN    EXEC11 
  
*        3.  VERIFY ACCESS LEVEL IS VALUE SPECIFIED OR GREATER.  ISSUE
*              EXECUTE CNTRL MOD DIAG FUNCT AND VERIFY ALL WORDS SENT.
  
 EXEC10   LDN    10B
          STD    D.T3 
 EXEC11   RJM    ALCHK       CHECK ACCESS LEVEL 
          LDN    0
          STD    D.Z5 
          STD    D.Z6 
          STD    D.Z7        ZERO OUT CYL, TRACK, SECT
          LDN    ECMD        ISSUE EXECUTE CM DIAG FUNCTION 
          RJM    FNC
          ACN    CH+40B 
          LDN    6
          STD    WC          SAVE WORD COUNT FOR ERROR
          OAM    D.Z2,CH
          STD    D.Z1 
          ZJN    EXEC12      IF ALL WORDS SENT
          LJM    ERRFPNA     ELSE ERROR EXIT
  
 EXEC12   RJM    EJM         CHECK CHANNEL EMPTY
          DCN    CH+40B 
 EXEC15   LDC    120         SET WAIT FOR 120 SECONDS 
          RJM    WAITBZ      WAIT UNTIL BUSY DROPS
 EXEC17   LJM    XENT        EXIT TO STACK
  
*        4.  IF ADAPT AND PM BOTH SPECIFIED THEN VERIFY ACCESS LEVEL
*              EQUAL 10 OR GREATER BEORE ISSUING FUNCTION.  ELSE ISSUE
*              FUNCTION, OUTPUT PARAMETER WORD AND THEN GO REQUEST STATUS.
* 
 EXEC18   RJM    TCA         TEST CHANNEL ASSIGNED
          LDD    PA+2 
          ZJN    EXEC19      IF PM =0 
          LDN    20B         ELSE AL = 20B OR GREATER 
          STD    D.T3 
          UJN    EXEC20 
  
 EXEC19   LDN    3           AL =3 OR GREATER 
          STD    D.T3 
 EXEC20   RJM    ALCHK       CHECK ACCESS LEVEL 
          LDD    PA+2        STORE V FOR OUTPUT 
          ADD    PA+1 
          STD    D.T4 
          LDN    EAD         ISSUE EXECUTE ADAPTER DIAG FUNCTION
          RJM    FNO         OUTPUT PARAMETER WORD
          LDD    PA+2 
          ZJN    EXEC17      NOT DIAGNOSTIC LOOP
          LDC    ER.DER      ERROR DIAGNOSTIC LOOP BUSY 
          LJM    ERR         IF BUSY TIMEOUT TO OCCUR 
  
          EJECT 
**        REL    - RELEASE EQUIPMENT IF CONNECTED.
* 
*                  REL, ABT Z 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - DEVICE CONNECT HAS BEEN RELEASED IF ASSIGNED AND THE 
*                  CHANNEL IS RELEASED TO THE SYSTEM. 
* 
*         USES   - NONE.
* 
*         CALLS  - OPC- RELEASE EQUIPMENT IF CONNECTED. 
*                - BD.DCH- DROP CH/TALK TO SYSTEM AND EXEC. 
* 
  
**     1. DISCONNECT EQUIPMENT WITH AN OPERATION COMPLETE 
*         FUNCTION IF EITHER IS CONNECTED.
* 
*      2. DROP THE I/O CHANNEL TO THE OPERATING SYSTEM IF ASSIGNED. 
* 
 REL      RJM    OPC         RELEASE THE EQUIPMENT IF CONNECTED 
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC 
          LJM    XENT        EXIT TO STACK
          EJECT 
**        RES    - RESERVE CONTROL MOD/DRIVE. 
* 
*                  RES CONTROL MOD, ABT Z 
*                  RES ADAPT
* 
*         ENTRY  - (PA) = 0 IF RES ADAPT, 1 IF RES COMOD
* 
*         EXIT   - I/O CHANNEL ASSIGNED AND CHANNEL ASSIGNED FLAGS
*                  SET IN ALL THE OTHER SUBROUTINES.
* 
*                  ERRCAS  - IF CHANNEL ACTIVE FROM SYSTEM
*                  ERRNRES - IF NOT RESERVED IN 5 MINUTES 
* 
*         USES   - EC, EA, EM, D.T3, D.T4, RESA, DRCON
* 
*         CALLS  - RES1, OPC, STC, DST, FNA, BD.RCH 
  
**     1. DISCONNECT CONTROL MOD WITH AN OPERATION COMPLETE 
*         FUNCTION IF CONNECTED.
* 
  
**     2. CLEAR ERROR EXIT REGISTERS. 
* 
 RESX     LJM    ** 
 RES      LDN    0
          STD    EC          CLEAR ERROR REGISTERS
          STD    EA 
          STD    EM 
          LDD    PA 
          STM    WAIT10      STORE PA FOR WAIT ROUTINE
          NJN    RES1        IF RES COMOD 
          LJM    RES19       ELSE IF RES ADAPT
  
**     3. DROP/REQUEST I/O CHANNEL FROM THE SYSTEM. 
* 
 RES1     LDN    MAXITT      ITERATION COUNT FOR STATUS 
          STM    RESA        AND PAUSE LOOP 
 RES2     RJM    OPC         TO RELEASE THE CONTROL MOD IF SELECTED 
          LDN    0
          STM    OPC1        SET CONTROL MOD  NOT RESERVED
 RES3     SOM    RESA        DECREMENT THE ITERATION COUNT
          PJN    RES4        IF NOT TIMED OUT 
          LDC    ER.NRES     ELSE ERROR EXIT
          LJM    ERR
  
 RES4     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED
          RJM    IJM         WAIT CHANNEL ACTIVE
          AJM    RES20,CH    ERROR IF CHANNEL ACTIVE FROM SYSTEM
  
*      4. ISSUE CONNECT FUNCTION AND GET STATUS.
  
          LDC    TIMREL 
          STD    D.T3 
 RES5     LDC    **          UNIT NUMBER
 UN       EQU    *-1
          STD    D.T4        SAVE FOR FNO 
          STM    WAIT11      STORE CM AND UNIT IN WAIT ROUTINE
          LPN    4
          NJN    RES6        IF INCORRECT UNIT NUMBER 
          LDN    CONN        LOAD CONNECT FUNCTION
          RJM    FNO         PERFORM FUNCT AND OUTPUT CONTROL WORD
          RJM    STS
  
*       5. IF BIT 2* 3 IS SET, REPEAT STEP 4 UNTIL 500 MSEC HAS 
*          ELASPED.  IF A RESERVE IS NOT SUCESSFUL WITHIN THIS
*          TIME-FRAME, EXECUTE THE  *REL * SEQUENCE TO COMMUNICATE
*          WITH THE SYSTEM.  REPEAT THIS STEP UNTIL A RESERVE IS
*          SUCESSFUL OR 5 MINUTES HAVE ELASPED.  ABORT IF NO
*          RESERVE IN 5 MINUTES.
  
          SHN    14D
          PJN    RES8        IF CONTROL MOD CONNECTED 
          SOD    D.T3        DECREMENT LOOP COUNT 
          PJN    RES5        IF NOT TIMED OUT 
          LJM    RES2        ELSE START ANOTHER ITERATION 
  
 RES6     UJN    RES12       ERROR EXIT 
  
*      6. VERIFY GEN STATUS IS 0000 OR 0002 AND THAT DETAIL 
*         STATUS INDICATES THAT THE UNIT ASSIGNED MATCHES THE 
*         DEVICE CODE ASSIGNED. 
  
 RES8     SHN    4
          SCN    2
          ZJN    RES10       IF NO ERROR STATUS 
          LJM    ERRAGS      GET DETAILED STATUS AND EXIT 
  
 RES10    RJM    DST
          LDM    SB+4        DS WD WITH CTRWARE NO & UNIT NO
          SHN    17-10
          MJN    RES15
  
 RES12    LDC    ER.DCSM     ERROR DEVICE CODE / STATUS MISMATCH
 RES13    LJM    ERR
  
*       7. SET CONTROL MOD/DRIVE CONNECTED. 
  
 RES15    LDN    0
          STM    DRCON       SET DRIVE CONNECTED FLAG 
          LDN    2
          STM    OPC1 
          LDM    RESX+1 
          ZJN    RES18       EXIT NOT CALLED FROM SUBROUTINE
          LJM    RESX        RETURN TO SUBROUTINE 
  
 RES18    LJM    XENT        EXIT TO STACK
  
 RES19    RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED
          RJM    IJM         WAIT CHANNEL INACTIVE
          NJN    RES18       EXIT TO STACK AFTER INACTIVE 
 RES20    LDC    ER.CAS      ERROR CHANNEL ACTIVE FROM SYSTEM 
          UJN    RES13       ERROR EXIT 
          EJECT 
**       WRITECD - WRITE CNTRLWRE, COS OR LEVEL II DIAGN ON THE DISK. 
* 
*                  WRITECD CNTWR,ABT Z   WRITECD CNTWR CHAIN, ABT Z 
*                  WRITECD COS,ABT Z     WRITECD COS CHAIN, ABT Z 
*                  WRITECD DIAG,ABT Z    WRITECD DIAG CHAIN, ABT Z
* 
*          ENTRY   - PA = CODE         WRCW  = 0
*                                      WCOS  = 1
*                                      WDIAG = 2
* 
*                  - PA+1 =  0 NOT CHAINING 
*                            1 IF CHAINING
*          EXIT    - ER.IAL - IF ACCESS LEVEL NOT 4 OR GREATER
*                  - ER.DNA - IF ALL DATA NOT ACCEPTED FROM PP
*                  - ER.ISR - IF INCOMPLETE STATUS RETURNED 
*                  - ER.CNA - IF CHANNEL NOT ACTIVE DURING OUTPUT 
* 
*          USES    - WT.
* 
*          CALLS   - TDR,STS,FNC,EJM,OUTD 
* 
*         1.  CHECK TO SEE IF FUNCTION FLAG SET, IF NOT THEN CHECK
*             DRIVE RES AND VALID ACCESS LEVEL. IF YES PROCEED WITH 
*             DATA OUTPUT.
* 
 WRITECD  LDC    ** 
 WFUNFL   EQU    *-1         FUNCTION ISSUED FLAG STORED HERE 
          NJN    WRCD6       IF FUNCTION PREV ISSUED
          RJM    TDR         ELSE TEST DRIVE RESERVED 
          LDN    4           CHECK AL = 4 OR GREATER
          STD    D.T3 
          RJM    ALCHK       CHECK ACCESS LEVEL 
* 
*         2.  INIT REGISTERS, LOAD AND ISSUE CORRECT FUNCTION (WRITE:COS
*             CONTROLWARE OR DIAGNOSTICS).
* 
 WRCD1    LDN    0
          STD    WT 
          LDD    PA 
          NJN    WRCD2       IF NOT WRITE CONTRLWARE
          LDN    WRCW 
          UJN    WRCD5
  
 WRCD2    SBN    2
          ZJN    WRCD4
          LDN    WCOS        IF WRITE COS 
          UJN    WRCD5
  
 WRCD4    LDN    WDIAG
 WRCD5    RJM    FNC
          ACN    CH+40B 
 WRCD6    RJM    OUTD        OUTPUT DATA BLOCK
          LDN    1
          STM    WFUNFL      SET FUNCTION ISSUED FLAG 
          LDD    PA+1 
          STM    BD.CHAIN    SET/CLEAR CHAINING FLAG
          NJN    WRCD9       IF CHAINING EXIT 
  
 WRCD7    RJM    EJM         INSURE CHANNEL HAS GONE EMPTY
          DCN    CH+40B 
          LDN    0
          STM    WFUNFL      CLEAR FUNCTION ISSUED FLAG 
          LDN    10          SET WAIT FOR 10 SECONDS
          RJM    WAITBZ      WAIT UNTIL BUSY DROPS
 WRCD9    LJM    XENT        EXIT TO STACK
          EJECT 
**         SPIN - POWER UP OR DOWN THE SPECIFIED DRIVES SPINDLE MOTOR.
* 
*                 SPIN UP,  ABT Z 
*                 SPIN DN,  ABT Z 
* 
*          ENTRY  PA = CODE   UP = 0
*                             DN = 1
* 
*          EXIT    - ER.IAL - IF ACESS LEVEL NOT 10 OR GREATER
* 
*          USES   D.T0,D.T1,D.T3,D.T4 
* 
*          CALLS  FNO,STS 
* 
*        1.  IF UP FUNCT THEN ISSUE FUNCT: ACTIVATE CHANNEL, OUTPUT 
*              PARAMETER WORD AND DEACTIVATE CHANNEL.IF DN FUNCT, VERIFY
*              ACCESS LEVEL IS 4 OR GREATER BEFORE ISSUING THE FUNCT. 
  
 SPIN     LDD    PA 
          ZJN    SPIN1       IF A SPIN UP FUNCTION
          LDN    DN          ELSE STORE DOWN FUNCTION 
          STD    D.T0 
          LDN    10B
          STD    D.T3 
          RJM    ALCHK       CHECK ACCESS LEVEL 
          UJN    SPIN3       ISSUE SPIN DOWN FUNCTION 
  
*        2.  ISSUE FUNCTION AND INPUT STATUS. 
  
 SPIN1    LDN    UP          STORE UP FUNCTION
          STD    D.T0 
 SPIN3    LDM    UN          UNIT NUMBER STORED HERE
          STD    D.T4        SAVE FOR FNO 
          LDD    D.T0 
          RJM    FNO         SEND FUNCTION AND OUTPUT WORD
          LDN    60          SET WAIT FOR 60 SECONDS
          RJM    WAITBZ      WAIT BUSY
 SPIN4    UJN    WRCD9       ZERO STATUS EXIT 
          EJECT 
 STATUS   TITLE  STATUS - GET GENERAL, DETAIL OR PROCESSOR STATUS.
**        STATUS - GET GENERAL, DETAIL OR PROCESSOR STATUS. 
* 
*                  STATUS GENERAL, ABT Z
*                  STATUS DETAIL, ABT Z 
*                  STATUS PROCESSOR, ABT Z
* 
*          GENERAL - INPUT 1 WORD OF GENERAL STATUS TO  SB(0).
*          DETAIL  - INPUT 20D WORDS OF DETAIL STATUS TO SB(1)-SB(20D)
*          PROCESSOR - INPUT 82D WORDS OF PROC STAT TO IB(0)-IB(82D)
* 
*         ENTRY  - (PA) = CODE)         0 = GENERAL 
*                                       1 = DETAIL
*                                       2 = PROCESSOR 
* 
*         EXIT   - (A)  = STATUS (IF GENERAL STATUS IS SELECTED)
*                  (SB), OR (SB 0-24) = STATUS OR DETAIL. 
* 
*                  ERRISR - ERROR EXIT IF INCOMPLETE STATUS RETURNED
* 
*         USES   - LF, P, D.T1, SB, WT
* 
*         CALLS  - ERA, TCC, STS, DST, FNC, FJM, IJM
* 
  
**     1. STORE 7777B INTO THE STATUS BUFFER FOR WORDS ABOUT TO BE RE 
* 
**     2. VERIFY THAT THE CONTROL MODULE IS CONNECTED.
* 
 STATUS   RJM    TCC         TEST CONTROL MODULE CONNECTED
          STD    WT          CLEAR WT REGISTER
  
**     3. ISSUE THE SELECTED STATUS FUNCTION SPECIFIED BY THE KEYWORD 
*         GENERAL (0012), DETAIL (0023).
* 
*      4. INPUT THE REQUIRED NUMBER OF WORDS TO THE STATUS BUFFER 
*         (1, OR 24B).
* 
          LDD    PA          LOAD CODE
          NJN    STATUS3     IF DETAIL STATUS REQUEST 
          LDN    GS 
          STD    LF          SAVE LAST PRIMARY FUNCTION 
          RJM    STS         GET GENERAL STATUS 
          UJN    STATUS4
  
 STATUS3  SBN    1
          NJN    STATUS5     IF NOT STATUS DETAIL 
          LDN    EDS         SAVE LAST FUNCTION 
          STD    LF          SAVE LAST PRIMARY FUNCTION 
          RJM    DST         GET DETAIL STATUS
 STATUS4  UJN    SPIN4       EXIT TO STACK
  
*         5.  STORE 7777B INTO ALL WORDS AND ISSUE PROCESSOR STATUS FUNCTION. 
  
 STATUS5  LDC    123B 
          STD    D.T1 
 STATUS6  LCN    0
          STM    IB,D.T1
          SOD    D.T1 
          NJN    STATUS6     DO ALL WORDS 
          LDN    IPS         PROCESSOR STATUS FUNCTION
          RJM    FNC         SEND FUNCTION TO PROCESSOR 
          ACN    CH+40B 
          LDC    83D
          IAM    IB,CH       INPUT PROCESSOR STATUS 
          NJN    STATUS9
          SFM    ERCPE3,CH   CHECK FOR CH PARITY ERROR
          RJM    IJM         WAIT FOR INACTIVE
          NJN    STATUS4     IF OK EXIT TO STACK
 ERRNIDT  LDC    ER.NIDT     ERROR NO INACTIVE AFTER DATA XFER
          UJN    ALCHK1 
  
 STATUS9  LJM    ERRISR      ERROR INCOMPLETE STATUS RETURNED TO PP 
          EJECT 
 ALCHK    TITLE  UTILITIES USED BY ISD PRODUCT OVERLAY. 
**        ALCHK - CHECKS ACCESS LEVEL 
* 
*         ENTRY - (D.T3) = ACCESS LEVEL NEEDED
* 
*         EXIT - ER.IAL - IF ACCESS LEVEL NOT VALID 
*                CALLING ROUTINE IF NO ERROR
* 
 ALCHKX   LJM    ** 
 ALCHK    EQU    *-1
          LDD    AL          GET ACCESS LEVEL FROM ASSIGN 
          SBD    D.T3 
          PJN    ALCHKX      ACCESS LEVEL HIGH ENOUGH EXIT
 ERRIAL   LDC    ER.IAL      ERROR AL NOT VALID 
 ALCHK1   UJN    DST3 
          EJECT 
**        DST    - OBTAIN DETAIL STATUS.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - STATUS BUFFER CONTAINS THE CURRENT DETAIL STATUS.
*                  TO BE USED FOR ERROR CHECKING. 
* 
*                - (A) = (SB+13D) 
* 
*                  ERRISR  - IF INCOMPLETE STATUS RETURNED
*                  ERRNIDS - IF NO INACTIVE TO DETAIL STATUS
* 
*         USES   - D.T1, SB(1-24) 
* 
*         CALLS  - FNA, FJM, IJM
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 247+ MICROSEC.
* 
 DST0     LJM    **          ENTRY/EXIT 
 DST      EQU    *-1
  
**        1.  STORE 7777B INTO ALL WORDS
* 
          LDN    24B
          STD    D.T1 
 DST1     LCN    0
          STM    SB,D.T1
          SOD    D.T1 
          NJN    DST1        DO ALL WORDS 
  
**        2. ISSUE DETAIL EXTENDED STATUS FUNCTION. 
* 
          LDN    EDS
          RJM    FNA         ISSUE STATUS FUNCTION
          NJN    DST5        IF FUNCTION ACCEPTED 
          LDC    ER.NIDS     ERROR IF NO INACTIVE TO DETAIL STATUS
 DST3     UJN    DST7 
  
**        3. INPUT STATUS AND RETURN. 
* 
 DST5     ACN    CH+40B 
          LDN    24B
          IAM    SB+1,CH
          NJN    ERRISR      IF ALL WORDS NOT INPUT 
          SFM    ERCPE3,CH   CHECK FOR CH PARITY ERROR
          RJM    IJM         VERIFY INACTIVE IS RECEIVED
          NJN    DST0        IF INACTIVE RECEIVED 
          LJM    ERRNIDT     ERROR NO INACTIVE AFTER DATA TRANFER 
  
 ERRISR   LDC    ER.ISR      ERROR INCOMPLETE STATUS RETURNED 
 DST7     UJN    EJM2 
          SPACE  4,22 
**        EJM     - WAIT FOR CHANNEL TO GO EMPTY
* 
*          ENTRY   - NONE.
* 
* 
*          EXIT    - ER.CFE - IF CHANNEL FAILED TO GO EMPTY.
* 
*          USES    - NONE.
* 
*          CALLS   - NONE.
  
  
 EJMX     LJM    **          SUBROUTINE ENTRY/EXIT
 EJM      EQU    *-1
 EJM1     EJM    EJMX,CH     JUMP IF CHANNEL EMPTY
          ADN    1           UPDATE LOOP COUNT
          PJN    EJM1        LOOP ON CHANNEL EMPTY TEST 
 ERRCFE   LDC    ER.CFE      ERROR CHANNEL FAILED TO GO EMPTY 
 EJM2     UJN    FNC1        ERROR EXIT 
          SPACE  4,21 
**        FJM    - WAIT FOR CHANNEL TO GO FULL. 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - (A) NONZERO IF NOT TIMED OUT WAITING FULL
*                  (A) ZERO IF TIMED OUT
* 
*         USES   - D.T1 
* 
*         CALLS  - NONE 
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 6 MICROSEC. 
* 
 FJMX     LJM    **          ENTRY/EXIT 
 FJM      EQU    *-1
          LDC    TIMFJM*2    ITERATION TIME 
 FJM1     FJM    FJMX,CH     IF FULL EXIT 
 FJM2     SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    FJM1        IF TIME NOT COUNTED DOWN 
          UJN    FJMX        ELSE EXIT WITH A EQ. ZERO
          SPACE  4,21 
**        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 MICROSEC.
* 
 FNCX     LJM    **          ENTRY/EXIT 
 FNC      EQU    *-1
          STD    LF          TO SAVE LAST MAJOR FUNCTION
          RJM    FNA         TO FUNCTION AND WAIT INACTIVE
          NJN    FNCX        IF INACTIVE EXIT 
          LDC    ER.NIF      ERROR NO INACTIVE TO FUNCTION
 FNC1     LJM    ERR         ERROR EXIT 
          SPACE  4,17 
**        FNA    - ISSUE A FUNCTION 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 MICROSEC.
* 
 FNAX     LJM    **          ENTRY/EXIT 
 FNA      EQU    *-1
          FAN    CH+40B      FUNCTION FROM A
          RJM    IJM         WAIT FOR INACTIVE
          UJN    FNAX        EXIT 
          SPACE  4,29 
**        FNO    - ISSUE FUNCTION AND OUTPUT ONE WORD OF DATA.
* 
*         ENTRY  - (A)  = FUNCTION DESIRED
*                  D.T4 = DATA WORD TO OUTPUT 
* 
*         EXIT   - ERRFPNA - IF FUNCTION PARAMETER NOT ACCEPTED 
* 
*         USES   - NONE 
* 
*         CALLS  - FNC
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 40 MICROSEC.
* 
 FNOX     LJM    **          ENTRY/EXIT 
 FNO      EQU    *-1
          RJM    FNC         TO SEND FUNCTION 
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          LDN    1
          OAM    D.T4,CH
          ZJN    FNO2        IF PARAMETER WAS ACCEPTED
 ERRFPNA  LDC    ER.FPNA     ELSE ERROR EXIT
          LJM    ERRIDR1      GET GENERAL AND DETAILED STATUS 
  
 FNO2     EJM    FNO3,CH
          ADN    1
          PJN    FNO2        LOOP ON CHANNEL EMPTY TEST 
          LJM    ERRCFE      ERROR  EXIT IT CH DIDNT GO EMPTY 
  
 FNO3     DCN    CH+40B 
          UJN    FNOX        EXIT 
          SPACE  4,22 
**        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 MICROSEC. 
* 
 IJMX     LJM    **          ENTRY/EXIT 
 IJM      EQU    *-1
          LCN    3
 IJM1     IJM    IJMX,CH     IF INACTIVE EXIT 
 IJM2     SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    IJM1        IF NOT COUNTED DOWN
          UJN    IJMX        ELSE EXIT W/(A) = ZERO 
          SPACE  4,49 
**        OPC    - RELEASE THE EQUIPMENT WITH AN OPERATION COMPLETE.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - (A) = ZERO IF ADAPTER NOT CONNECTED
*                      = NONZERO IF OPERATION COMPLETE ACCEPTED 
* 
*         USES   - NONE 
* 
*         CALLS  - FNC
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 44 MICROSEC.
* 
 OPCX     LJM    **          ENTRY/EXIT 
 OPC      EQU    *-1
          LDM    BD.CHFG
          ZJN    OPCX        EXIT IF CHANNEL NOT RESERVED 
          LDM    CMCON
          NJN    OPCX        EXIT IF ADAPTER NOT RESERVED 
          AOM    CMCON       CLEAR CONTROL MOD CONN FLAG
          AOM    DRCON       CLEAR DRIVE CONNECT FLAG 
          LDC    ** 
 OPC1     EQU    *-1         CONTROL MOD/DRIVE RES BITS STORED
          SBN    2
          NJN    OPCX        IF CONTROL MOD/DRIVE NOT RESERVED
  
*         THE RELEASE REQUEST CAME FROM THE BASIC DRIVER, SO PROCESS
*         IT WITHOUT CHANGING ANY DATA OR CREATING AN ERROR EXIT. 
  
 OPC3     LDN    OC 
 OPC4     STD    D.T5 
          LDM    ERR3        UPPER BITS OF ABT ADDRESS
          SBN    77B
          NJN    OPC5        IF REQUEST IS FROM THE USER
          LDD    D.T5 
          RJM    FNA         EXECUTE OPERATION COMPLETE FUNCTION
          NJN    OPCX        EXIT IF NOT FUNCTION TIMEOUT 
          DCN    CH+40B      ELSE DO A DISCONNECT 
          UJN    OPCX        AND EXIT 
  
 OPC5     LDD    D.T5 
          RJM    FNC         TO FUNCTION OPERATION COMPLETE 
          UJN    OPCX        EXIT 
          SPACE  4,39 
**        OUTD   - OUTPUT DATA BLOCK
* 
*         ENTRY  - NONE.
* 
*         EXIT   - NONE.
* 
*         USES   - D.T2, WC, WT.
* 
*         CALLS  - NONE.
* 
 OUTDX    LJM    ** 
 OUTD     EQU    *-1
          IJM    ERRCNAC,CH    CHECK CHANNEL ACTIVE 
          LDD    WC          WORD BLOCK SIZE
          ZJN    OUTD3       IF NO WORDS TO OUTPUT
          OAM    IB,CH       OUTPUT WORD BLOCK
          STD    D.T2 
          LDD    WC 
          SBD    D.T2 
          STD    WT          UPDATE WORDS XFERED
          SBD    WC 
          ZJN    OUTDX       WT EQUALS WC EXIT
 OUTD2    LDC    ER.DNA      ERROR ALL DATA NOT ACCEPTED FROM PP
          UJN    STS0        ERROR EXIT 
  
 ERRCNAC  LDC    ER.CNAC
          UJN    STS0 
  
 OUTD3    LJM    ERRWC       ERROR WORD COUNT 
          SPACE  4,29 
**        STS    - REQUEST AND INPUT GENERAL STATUS.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - (A) = STATUS 
* 
*                  ERRGSNR - IF GENERAL STATUS NOT RETURNED 
*                  ERRNIGS - IF NO INACTIVE TO GENERAL STATUS 
* 
*         USES   - SB 
* 
*         CALLS  - FNA, FJM, IJM
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 60 MICROSEC.
* 
 STSXX    LDM    SB          LOAD STATUS AND EXIT 
          LJM    **          ENTRY/EXIT 
 STS      EQU    *-1
          LCN    0
          STM    SB          NEGATIVE ZERO TO SB
          LDN    GS 
          RJM    FNA         ISSUE GENERAL STATUS FUNCTION
          NJN    STS1        IF FUNCTION ACCEPTED 
          LDC    ER.NIGS     ERROR IF NO INACTIVE TO GS FUNCTION
 STS0     UJN    STS3        ERROR EXIT 
  
 STS1     LDN    0
          STM    CMCON       SET CONTROL MODULE CONNECTED 
          ACN    CH+40B 
          LDN    1
          IAM    SB,CH       INPUT GENERAL STATUS 
          NJN    STS2        IF NO STATUS PROVIDED
          SFM    ERCPE2,CH   CHECK FOR CH PARITY ERROR
          RJM    IJM         WAIT FOR INACTIVE
          NJN    STSXX       EXIT IF INACTIVE RECEIVED
          LJM    ERRNIDT     ERROR NO INACTIVE AFTER DATA XFER
  
 STS2     LDC    ER.GSNR     ERROR IF NO FULL OR NO INACTIVE
  
 STS3     UJN    TCA1        JUMP TO ERR
  
          SPACE  4,18 
**        TCA    - TEST CHANNEL ASSIGNMENT. 
* 
*         ENTRY  - BD.CHFG =  1 IF CH NOT ASSIGNED
*                             0 IF CH ASSIGNED
  
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4
* 
*                  ERRCNA  - IF CHANNEL NOT ASSIGNED
* 
*         CALLS  - NONE.
* 
*         USES   - NONE 
* 
 TCAX     LJM    **          ENTRY/EXIT 
 TCA      EQU    *-1
          LDM    BD.CHFG
          NJN    TCAX        EXIT IF CHANNEL ASSIGNED 
          LDC    ER.CNA      ERROR IF CHANNEL NOT RESERVED
 TCA1     LJM    ERR
          SPACE  4,18 
**        TCC    - TEST CONTROL MODULE CONNECTED. 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - ABT ADDRESS STORED IN ERR3 AND ERR4
*                  WC SET TO WRRD 
* 
*         USES   - NONE.
* 
*         CALLS  - TCA
* 
 TCCX     LJM    **          ENTRY/EXIT 
 TCC      EQU    *-1
          RJM    TCA         TEST ADAPTER CONNECTED 
          LDC    ** 
 CMCON    EQU    *-1         *** CONTROL MODULE CONN FLAG STORED HERE 
          ZJN    TCCX        IF CONNECTED 
          UJN    ERRCNC      ELSE ERROR EXIT
          SPACE  4,17 
**        TDR    - TEST DRIVE RESERVED. 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - NONE 
* 
*         USES   - NONE 
* 
*         CALLS  - TCC
* 
 TDRX     LJM    **          ENTRY/EXIT 
 TDR      EQU    *-1
          RJM    TCC         CHECK CONTROL MODULE CONNECTED 
          LDC    ** 
 DRCON    EQU    *-1         *** DRIVE CONNECTED FLAG STORED HERE.
          ZJN    TDRX        IF CONNECTED EXIT
 ERRCNC   LDC    ER.CNC      ELSE ERROR EXIT
          UJN    TCA1        ERROR EXIT 
          EJECT 
**        WAITBZ - WAIT FOR EXECUTE, DEFECT, SPIN , WRITECD OR
*                  AUTOLOAD TO COMPLETE.
* 
*         WAIT UP TO 5 MINUTES FOR REQUESTED CONDITIONS ON DEFECT 
*         EXECUTE, SPIN , WRITECD OR AUTOLOAD FUNCTION. A TEST IS 
*         DONE AND IF NOT EXPECTED STATUS, THE PPU IS DROPPED FOR 
*         1 SECOND.  THIS SEQUENCE IS REPEATED UNTIL THE EXPECTED 
*         STATUS IS RECEIVED OR UNTIL THE SELECTED TIME IS UP.
* 
*         ENTRY - (A) = NUMBER OF SECONDS TO WAIT.
* 
*         EXIT  - EXECUTE, SPIN, DEFECT OR WRITECD OPERATION COMPLETED. 
*                 ERRAGS. 
*                 ERR.
* 
*         USES  - SC, BD.REQP, D.T0, P, ERR3, ERR4. 
* 
*         CALLS - DST, BD.REQ, RES. 
  
 WAITBZX  LJM    **          ENTRY/EXIT 
 WAITBZ   EQU    *-1
          STD    SC          SET COUNTER FOR NUMBER OF SEC
          RJM    STS         GET GENERAL STATUS 
          SHN    17-11
          PJN    WAIT0       IF NOT ABNORMAL GENERAL STATUS 
          LJM    ERRAGS      ELSE ERROR ABNORMAL GENERAL STATUS 
  
 WAIT0    LDM    ERR3        GET ABORT ADDRESS
          ADC    2000B       ADD LDC INSTRUCTION
          STM    WAIT12      SAVE FOR RESERVE 
          LDM    ERR4 
          STM    WAIT12+1    SAVE THE REST FOR RESERVE
 WAIT1    LDC    270
          STM    CNTR1       SET EXECUTE AL 3 TO 4 SECONDS
 WAIT2    LDN    DCFB 
          RJM    FNC         SEND DUMP CM FUNCTION BUFFER 
          ACN    CH+40B      ACTIVATE 
 WAIT3    LDC    100B        NUMBER OF WORDS TO INPUT 
          STD    WC          SAVE WORD COUNT FOR ERROR
          IAM    IB,CH       INPUT STATUS 
          STD    D.Z1 
          SFM    ERCPE3,CH   CHECK FOR CH PARITY ERROR
          ZJN    WAIT4       NOT ALL WORDS ACCEPTED 
          LJM    ERRIDR      ERROR INCOMPLETE DATA RETURNED TO PP 
  
 WAIT4    DCN    CH+40B 
          LDM    FACM        GET FLAG AUTOLD CM 
          SHN    17-3 
          MJN    WAIT6       IF FLAG SET STATUS FROM EXEC BLK 0 
          LDM    UN 
          LPN    7B          MASK UNIT NUMBER 
          SHN    4           POSITION FOR SB ADDRESS
 WAIT6    ADC    IB+17B 
          STM    WAIT7       SAVE IT
          LDM    IB+17B 
 WAIT7    EQU    *-1         ADDRESS OF STATUS FOR CM BUFF
          SHN    17-7 
          PJN    WAIT8       BUSY CHECK ACCESS LEVEL
          LJM    WAIT16      NOT BUSY GET DETAIL STATUS 
  
 WAIT8    LDD    AL 
          SBN    10B
          PJN    WAIT9       ACCESS LEVEL GE 10 DROP THE PPU
          SOM    CNTR1
          ZJN    WAIT14      FIRST COUNTER DOWN CHECK SECONDS COUNTER 
          LJM    WAIT2       DO ANOTHER ITERATION 
  
 WAIT9    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    ** 
 WAIT10   EQU    *-1         LAST SELECTED RES SUBFUNCTION STORED HERE
          STD    PA          INDICATE OPTIONS TO USE
          LDC    ** 
 WAIT11   EQU    *-1         UNIT AND CM STORED HERE
          STM    UN          SAVE UNIT FOR CONNECT
 WAIT12   LDC    **          LDC INSTRUCTION AND ABORT ADDRESS
          STM    ERR4        REPLACE ABORT ADDRESS
          SHN    -12
          STM    ERR3        SAVE OTHER HALF
          RJM    RESX+1      RESERVE CHANNEL AND UNIT 
          LDN    0
          STM    RESX+1      CLEAR RETURN ADDRESS 
 WAIT14   SOD    SC          DECREMENT SECONDS COUNTER
          ZJN    WAIT15      IF TIME HAS ELAPSED
          LJM    WAIT1       IF TIME HAS NOT ELAPSED
  
 WAIT15   LDN    2
          STM    SB          UNIT HUNG BUSY 
 ERRBTMO  LDC    ER.BTMO     BUSY TIMEOUT ERROR 
          LJM    ERR         RETURN TO CALLING ROUTINE
  
 WAIT16   RJM    DST         GET DETAILED STATUS
          LDM    SB+7 
          SHN    17-10
          MJN    WAIT17      ERROR AFTER BUSY DROPPED 
          LDN    0
          STM    SB 
          STM    FACM        CLEAR AUTOLD CM FLAG ON EXIT 
          LJM    WAITBZX     EXIT GS=0000 
  
 WAIT17   LDC    5000B
          STM    SB 
          LJM    ERRAGS      EXIT GS=5000 
  
 CNTR1    DATA   0           TIME COUNTER FOR EXECUTE 
 FACM     DATA   0           FLAG FOR AUTOLD CM FUNCTION
  
 ERCPE1   RJM    STS         TAKE GENERAL STATUS
 ERCPE2   RJM    DST         TAKE DETAILED STATUS 
 ERCPE3   LDC    ER.CPE      CHANNEL PARITY ERROR 
          EJECT 
**        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    ERR2        IF CHANNEL IS NOT ASSIGNED 
          LDD    BD.AL
          SBN    AL21 
          ZJN    ERR2        IF ACCESS LEVEL INDICATES NO CHAN CLEANUP
          IJM    ERR2,0      CLEAN UP CHANNEL 
          DCN    40B
 ERR2     LDD    D.Z1 
          LPN    77B         MASK ERROR CODE
          ADC    6100B       ADD IN BIAS FOR DEMA1 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    505B        LENGTH OF INPUT AND OUTPUT BUFFERS 
 OB       EQU    IB+LIB      OUTPUT BUFFER
 SB       EQU    OB+LIB      STATUS BUFFER
 SBIE     EQU    SB+25B      STATUS THAT DETECTED THE ERROR 
 RETRY    EQU    SB+52B      RETRY COUNT
 RDWAL    EQU    SB+53B      AL REQUIRED FOR READ NON PREALLOCATED
 SERNUM1  EQU    SB+56B      FIRST HALF OF PACK SERIAL NUMBER 
 SERNUM2  EQU    SB+57B      SECND HALF OF PACK SERIAL NUMBER 
 SEEKTIM  EQU    SB+60B      LAST SEEK TIME 
 RESA     EQU    SB+64B      ITERATION COUNT FOR RES COMMAND
 LSB      EQU    64B         LENGTH OF STATUS BUFFER
  
          ERRPL  *-IB-1      ERROR IF ISD 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
 INIT0    LDN    0
          STM    SB,D.Z1     CLEAR STATUS BUFFER
          AOD    D.Z1 
          SBN    LSB
          NJN    INIT0       IF STATUS BUFFER NOT CLEARED 
          LDM    BD.SN
          STM    SERNUM1     SAVE USER SUPPLIED SERIAL NUMBER IN SB 
          LDM    BD.SN+1
          STM    SERNUM2
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS DEFINED
*         AT UPDATE TIME. THIS DEFINITION MEANS THAT THE ASSEMBLY WILL B
*         FOR THE NOSVE ENVIRONMENT.
* 
*         *IF DEF,MVE 
*IF DEF,MVE 
          LDM    BD.EQ
          LPN    70B
          ZJN    INIT1       IF UN ON ASSIGN DIRECTIVE WAS LESS THAN 10B
          LDC    INITB
          LJM    INIT11.1    GO SEND ERROR MESSAGE
 INIT1    LDM    BD.EQ
          LPN    77B
          STM    SB+63B      UNIT TO STATUS BUFFER
          LDM    BD.EQ
          SHN    -6 
          LPN    70B         MASK FOR CONTROL MODULE NUMBER 
          RAM    SB+63B 
 INIT1.1  STM    UN          SET UNIT NUMBER
*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 THE NOSBE ENVIRONMENT. 
* 
*         *IF -DEF,MVE
*IF -DEF,MVE
          LDM    BD.EQ
          LPN    77B
          STM    SB+63B      UNIT TO STATUS BUFFER
          STM    UN 
*ENDIF
*         *ENDIF
**
          LDN    0
          STM    SB+62B      EQUIPMENT NUMBER TO STATUS BUFFER
  
*         SET DELAY TIME BASED ON SPEED OF PPU
  
          LDC    TSPEED 
          STD    D.T0 
 INIT2    LDI    D.T0 
          ZJN    INIT3       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    INIT2       COMPLETE ALL WORDS 
  
*         STORE I/O CHANNEL INTO COMMANDS 
  
 INIT3    LDM    BD.CHAN
          STD    D.T2 
          STM    SB+61B      I/O CHANNEL TO STATUS BUFFER 
          LDC    TCHAN
          STD    D.T0        SET FWA OF TABLE CONTAINING ADDRESSES
 INIT4    LDI    D.T0 
          ZJN    INIT5       IF END OF TABLE
          STD    D.T1 
          LDI    D.T1 
          LPC    7740B
          ADD    D.T2 
          STI    D.T1 
          AOD    D.T0 
          UJN    INIT4       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 
 INIT5    STD    D.T1        CLEAR CELL 
          LDC    MMSGL. 
          STD    D.T0        LENGTH OF PO MSG AREA IN 60 BIT WORDS
 INIT5.1  SBN    3           NUMBER OF 60 BIT WORDS/MESSAGE 
          MJN    INIT5.2     IF NO MESSAGES 
          STD    D.T0        UPDATED LENGTH 
          AOD    D.T1        INCREMENT MESSAGE COUNT
          LDD    D.T0 
          NJN    INIT5.1     IF MORE MESSAGES 
 INIT5.2  LDD    D.T1 
          STM    BD.MSGS     MESSAGE COUNT
**
*         WRITE PP MESSAGES TO CM 
* 
 INIT5.3  LDN    0
          STD    D.Z1 
          STD    D.Z2 
          STD    D.Z3 
          STD    D.Z4 
 INIT6    LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD
 INIT6.1  EQU    *-1         MODIFIED TO FWA OF INITIALIZATION ERROR
          ZJN    INIT8       IF END OF MESSAGE
 INIT7    STM    D.T4,D.Z2   STORE IN D.T4+ 
          AOD    D.Z1        BUMP PP MESSAGE POINTER
          UJN    INIT9
 INIT8    LDC    2R          MESSAGE END, STORE BLANKS
          STM    D.T4,D.Z2
 INIT9    AOD    D.Z2        BUMP D.T4+ POINTER 
          SBN    4
          NJN    INIT6       IF NOT 4 PP WORDS
          STD    D.Z2        CLEAR POINTER
          LDC    BD.MSGA     INDEX INTO CM COMM BUFFER TO PO MSG AREA 
          ADD    D.Z4        BIAS TO WORD WITHIN PO MSG AREA
          STM    BD.IDEX
          LDN    BD.CMB      POINTER TO FWA OF CM COMM BUFFER 
          RJM    BD.SETR
          CWDL   D.T4        WRITE MSG WORD TO CM 
          AOD    D.Z4        INCREMENT BIAS INTO PO MSG AREA
          AOD    D.Z3        BUMP CM WORD COUNTER 
          SBN    BD.MSGML+1  EACH MESSAGE OCCUPIES A 4 WORD CM BLOCK
          NJN    INIT6       IF NOT BD.MSGML CM WORDS 
          STD    D.Z3        CLEAR CM WORD COUNTER
          LDC    0
 INIT9.1  EQU    *-1         MODIFIED TO FWA OF INITIALIZATION ERROR
          ZJN    INIT9.2     IF NOT PO INITIALIZATION ERROR 
          LCN    0
          LJM    INIT12      PO INITIALIZATION ERROR (A) = NEG ZERO 
 INIT9.2  LDM    PPMSGS,D.Z1
          ZJN    INIT10      IF MESSAGE ENDED IN ZERO BYTE
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR
 INIT10   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE
          LDM    PPMSGS,D.Z1
          ZJN    INIT10.1    IF LAST MESSAGE
          LJM    INIT7       GET NEXT MESSAGE 
 INIT10.1 EQU    *
  
*ENDIF
*         *ENDIF
**
  
**
*         THE FOLLOWING CODE IS ASSEMBLES IF THE SYMBOL MVE IS NOT DEFINED
*         AT UPDATE TIME.  THIS MEANS THAT THE ASSEMBLY WILL BE FOR THE NOS 
*         OR THE NOSBE ENVIRONMENT. 
* 
*         *IF -DEF,MVE
*IF -DEF,MVE
*         WRITE PP MESSAGES TO CM 
  
 INIT5    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 
 INIT6    LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD
          ZJN    INIT8       IF END OF MESSAGE
 INIT7    STM    D.T0,D.Z2   STORE IN D.T0+ 
          AOD    D.Z1        BUMP PP MESSAGE POINTER
          UJN    INIT9
  
 INIT8    LDC    2R          MESSAGE END, STORE BLANKS
          STM    D.T0,D.Z2
 INIT9    AOD    D.Z2        BUMP D.T0+ POINTER 
          SBN    5
          NJN    INIT6       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    INIT6       IF NOT BD.MSGML CM WORDS 
          STD    D.Z3        CLEAR CM WORD COUNTER
          LDM    PPMSGS,D.Z1
          ZJN    INIT10      IF MESSAGE ENDED IN ZERO BYTE
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR
 INIT10   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE
          LDM    PPMSGS,D.Z1
          NJN    INIT7       IF NOT LAST MESSAGE
*ENDIF
*         *ENDIF
**
  
*         SET DIRECT CELLS
  
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER 
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER 
**
*         THE FOLLOWING CODE IS ASSEMBLED IF THE SYMBOL 'MVE' IS NOT DEFINED
*         AT UPDATE TIME. THIS MEANS THAT THE ASSEMBLY WILL BE FOR THE NOS
*         OR NOSBE ENVIRONMENT. 
* 
*         *IF -DEF,MVE
*IF -DEF,MVE
          LDC    100D        100 MSEC DELAY IN BD.RCH 
          STM    DLYDCH      MODIFY DELAY USED ON CHANNEL DROP
*ENDIF
*         *ENDIF
**
  
*         VERIFY THAT THE ASSIGNED DEVICE CODE IS SUPPORTED 
  
          LDD    DC          DEVICE CODE CURRENTLY ASSIGNED 
          ADC    -ISD1       TEST IF DEVICE CODE FOR ISD1 (110B)
          ZJN    INIT12 
          SBN    ISD2-ISD1
          ZJN    INIT12      IF ISD2 DEVICE CODE (111B) 
          LDC    INITA       (A) = POINTER TO ERROR MSG IF NO SUPPORT 
**
*         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 
 INIT11.1 STM    INIT6.1
          STM    INIT9.1
          LJM    INIT5.3     PROCESS ERROR MESSAGE
*ENDIF
*         *ENDIF
**
 INIT12   LJM    START       EXIT WITH (A) = ERROR/NO ERROR FLAG
  
 INITA    DIS    ,*DEVICE CODE NOT SUPPORTED* 
*IF DEF,MVE 
 INITB    DIS    ,*UNIT NUMBER INVALID* 
*ENDIF
*         TABLE OF PPU SPEED SWITCHES 
  
 TSPEED   CON    FJM2 
          CON    IJM2 
          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.CNA,EC.CNA,(CH NOT ASSIGNED)
          MMSG   ER.CAS,EC.CAS,(CH ACTIVE ON ENTRY) 
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE TO LAST FUNC) 
          MMSG   ER.NIGS,EC.NIGS,(NO INACTIVE TO GENERAL STATUS)
          MMSG   ER.NIDS,EC.NIDS,(NO INACTIVE TO DETAIL STATUS) 
          MMSG   ER.GSNR,EC.GSNR,(GENERAL STATUS NOT RETURNED)
          MMSG   ER.ISR,EC.ISR,(INCOMPLETE STATUS RETURNED) 
          MMSG   ER.FPNA,EC.FPNA,(FUNC PARAMETERS NOT ACCEPTED) 
          MMSG   ER.DNA,EC.DNA,(ALL DATA NOT ACCEPTED FROM PP)
          MMSG   ER.IDR,EC.IDR,(INCOMPLETE DATA RETURNED TO PP) 
          MMSG   ER.CNC,EC.CNC,(CNTRL MOD/DRIVE NOT CONNECTED)
          MMSG   ER.IAL,EC.IAL,(ACCESS LEVEL TOO LOW FOR REQ) 
          MMSG   ER.NRES,EC.NRES,(RESERVE TIMEOUT)
          MMSG   ER.AGS,EC.AGS,(ABNORMAL GENERAL STATUS)
          MMSG   ER.CFE,EC.CFE,(CH FAILED TO GO EMPTY)
          MMSG   ER.UHB,EC.UHB,(UNIT HUNG BUSY) 
          MMSG   ER.BTMO,EC.BTMO,(BUSY TIMEOUT ERROR) 
          MMSG   ER.DER,EC.DER,(DIAGNOSTIC BUSY TIMEOUT)
          MMSG   ER.DCSM,EC.DCSM,(DEVICE CODE/STATUS MISMATCH)
          MMSG   ER.NIDT,EC.NIDT,(NO INACTIVE AFTER DATA XFER)
          MMSG   ER.CNAC,EC.CNAC,(CH INACTIVE DURING DATA XFER) 
          MMSG   ER.ITS,EC.ITS,(ILLEGAL TEST SELECTED)
          MMSG   ER.CPE,EC.CPE,(CHANNEL PE ON INPUT)
 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 ISD OVERLAY OVERFLOW
*ENDIF
*         *ENDIF
**
  
          IFEQ   NOSBE,1,1
          ERRPL  *-7773B     ERROR IF ISD OVERLAY OVERFLOW
          QUAL   *
