*COMDECK,DESM 
          TITLE  HIGH LEVEL ESM PRODUCT OVERLAY FOR MALET.
 5EM      SEGMENT POVLA 
          ORG    POVLA
          QUAL   DESM 
*CALL,VERS
          COMMENT ESM PRODUCT OVERLAY FOR MALET "VERS"
          EJECT 
  
**      THE FOLLOWING COMMANDS ARE DESIGNED FOR  THE  STORNET  SUBSYSTEM
*       AND  ESM  II  SUBSYSTEM  THROUGH THE LOW SPEED PORT AND THE SIDE
*       DOOR PORT.  DIRECT  MEMORY  ADDRESS IS SUPPORTED THROUGH THE LOW
*       SPEED PORT ONLY.  5EM IS THE PRODUCT OVERLAY THAT EXECUTES THESE
*       COMMANDS AND IS  DRIVEN BY THE INSTRUCTION STACK OF THE MALET PP
*       DRIVER. FOR THESE SUBSYSTEMS THE MALET PP DRIVER EXECUTES OUT OF
*       A  12  OR  16 BIT  2X OR 4X SPEED PP UTILIZING A 12 BIT CHANNEL.
*       REQUESTS ARE MADE BY THE DRIVER BY  STORING  PARAMETERS INTO  PP
*       DIRECT  CELLS  AND  PERFORMING  A  RETURN-JUMP  TO  THE  OVERLAY
*       SUBROUTINE.  THE  OVERLAY  SUBROUTINE ALSO USES PARAMETERS WHICH
*       HAVE  BEEN  COMPILED  INTO THE INSTRUCTION STACK AREA. ONCE  THE
*       REQUEST HAS BEEN COMPLETED, CONTROL  IS RETURNED TO THE STACK TO
*       EXECUTE  THE  NEXT  COMMAND.  THE  LANGUAGE FOR PERFORMING THESE
*       COMMANDS IS DESM. 
* 
*       THIS  PRODUCT  OVERLAY SUPPORTS A PROGRAMMABLE INPUT BUFFER (IB)
*       OF  505B  PP  WORDS,  AN  OUTPUT BUFFER (OB) OF 505B PP WORDS, A
*       SUBSYSTEM STATUS BUFFER (SB) OF 21B PP WORDS AND A CM  BUFFER OF
*       64D WORDS. DATA IS WRITTEN TO THE SUBSYSTEM  FROM  THE PP OUTPUT
*       BUFFER OR THE CM BUFFER AND IS READ FROM THE ESM TO THE PP INPUT
*       BUFFER OR THE CM BUFFER.  THE  STATUS  BUFFER  IS  USED  TO HOLD
*       SUBSYSTEM,  ERROR,  OPERATIONAL,  AND SIDE DOOR PORT STATUS FROM
*       THE SUBSYSTEM AND 170 DMA CHANNEL.
*       SUPPORTED  CAPABILITIES ARE AS FOLLOWS: 
* 
*       READ                  - ESM ADDRESS B(X),B(Y) INTO PPU (IB).
*       READ ONE RECORD       - ESM ADDRESS B(X),B(Y) INTO PPU (IB).
*       READ TO CMDMA         - ESM ADDRESS B(X),B(Y) VIA CENTRAL MEMORY
*                               IN DMA MODE INTO PPU (IB) . 
*       READ FAST TO CMDMA    - ESM ADDRESS B(X),B(Y) VIA CENTRAL MEMORY
*                               IN FAST DMA MODE INTO PPU (IB). 
*       READPB                - READ WC WORDS FROM PORT BUFFER TO PP(IB). 
*       WRITE                 - ESM ADDRESS B(X),B(Y) FROM PPU (OB).
*       WRITE FROM CMDMA      - ESM ADDRESS B(X),B(Y) FROM PPU (OB) VIA 
*                               CENTRAL MEMORY IN DMA MODE. 
*       WRITE FAST FROM CMDMA - ESM ADDRESS B(X),B(Y) FROM PPU(OB) VIA
*                               CENTRAL MEMORY IN FAST DMA  MODE. 
*       WRITEPB               - WRITE 120B WORDS FROM PP(OB) TO PORT
*                               BUFFER. 
*       REL                   - RELEASE I/O CHANNEL AND CLEAR LOW SPEED 
*                               PORT IF CONNECTED.
*       RES LSP               - RESERVE I/O CHANNEL AND CONNECT LOW 
*                               SPEED PORT. 
*       RES SDP               - RESERVE I/O CHANNEL AND CONNECT SIDE
*                               DOOR PORT.
*       STATUS                - INPUT ESM, ERROR(DMA), OPERATIONAL(DMA) 
*                               OR SDP STATUS TO PP (SB). 
*       FLAG REGISTER         - OUTPUT FLAG REGISTER FUNCTION AND FLAG
*                               WORD TO ESM.
*       SDP MAINT FUNC        - FUNCTION THE SIDE DOOR PORT WITH THE
*                               SELECTED MAINTENANCE FUNCTIONS. 
*       SET SIDE DOOR         - FUNCTION AND OUTPUT MARGINS TO SIDE DOOR
*                               PORT. 
*       ERRLOG                - ERROR LOG FUNCTIONS TO THE SIDE DOOR
*                               PORT. 
*       SIDE DOOR             - SIDE DOOR CLEAR AND FLAG REGISTER READS.
* 
 STATUS   TITLE  STATUS BUFFER FOR SUBSYSTEM,OPERATIONAL AND ERROR STATUS 
**                  FORMAT OF STATUS BUFFER 
* 
* 
*           /----     /------------------/ ---/ 
*           /SIDE  0  / SUBSYSTEM STATUS /    / SUBSYSTEM STATUS BITS 00-11.
*           /DOOR     /------------------/ ---/ 
*           /PORT  1  / OPERATION STATUS /    / OPER STATUS BITS 12-15. 
*           /STATUS2  / OPERATION STATUS /    / OPER STATUS BITS 00-11. 
*           /  4      /------------------/ ---/ 
*           /WORDS 3  / ERROR STATUS     /    / ERR STATUS BITS 12-15.
*           /----  4  / ERROR STATUS     /    / ERR STATUS BITS 00-11.
*           /----     /------------------/ ---/ 
*                  5  /     RESA         /    / PA FOR RESERVE COMMAND
*           /----     /------------------/ ---/ 
*                  6  /     OPTYP        /    / OPERATION BEING EXECUTED
*           /----     /------------------/ ---/ 
*                  7  /     TREG         /    / T REGISTER CONTENTS 
*           /----     /------------------/ ---/ 
*                 10B /     CHAN         /    / CHANNEL NUMBER
*           /----     /------------------/ ---/ 
*                 11B /     EQNU         /    / EQUIPMENT NUMBER
*           /----     /------------------/ ---/ 
*                 12B /     UNNU         /    / UNIT NUMBER 
*           /----     /------------------/ ---/ 
*                 13B /     ESMA         /    / ESM ADDRESS FOR READ/WRITES 
*           /----     /------------------/ ---/ 
*                 14B /     ESMB         /    / ESM ADDRESS FOR READ/WRITES 
*           /----     /------------------/ ---/ 
*                 15B /     FLCIO        /    / CIO PP FLAG 
*           /----     /------------------/ ---/ 
*                 16B /     ADDUU        /    / CM RMA FOR DMA READ/WRITES
*           /----     /------------------/ ---/ 
*                 17B /     ADDU         /    / CM RMA FOR DMA READ/WRITES
*           /----     /------------------/ ---/ 
*                 20B /     ADDL         /    / CM RMA FOR DMA READ/WRITES
*           /----     /------------------/ ---/ 
*                 21B /     LSF          /    / LAST STATUS FUNCTION ISSUED 
*           /----     /------------------/ ---/ 
* 
*       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  CURRENT  P REGISTER
*       CONTENTS (LINE NUMBER) INTO  THE  EA  REGISTER.   I/O  CHANNEL
*       CLEANUP  OCCURS  AND  A  JUMP  IS MADE TO THE STATEMENT NUMBER
*       SPECIFIED BY THE ABT ADDRESS IN THE COMMAND.
  
 ERRMSG   TITLE  ERROR MESSAGE TABLE
**        THE FOLLOWING TABLE DEFINES THE ERROR CODES AND MESSAGES THAT 
*         MAY BE GENERATED FOR EACH COMMAND.
* 
*                                     E F R R R R R S S S S S S S W W W 
*                                     R L E E E E E D E I T T T T R R R 
*                                     R A A A A L S P T D A A A A I I I 
*                                     L G D D D . . . . E T T T T T T T 
*                                     O . . . P . . M . . U U U U E E E 
*                                     G R . C B . . A . D S S S S . . P 
*                                     . E . M . . . I . O . . . . . C B 
*                                     . G . D . . . N . O E E O S . M . 
*                                     . I . M . . . T . R R S P D . D . 
*                                     . S . A . . . . . . R M E P . M . 
*                                     . T . . . . . F . . O . R . . A . 
*                                     . E . . . . . U . . R . A . . . . 
*                                     . R . . . . . N . . . . T . . . . 
*                                     . . . . . . . C . . . . I . . . . 
*                                     . . . . . . . . . . . . O . . . . 
*                                     . . . . . . . . . . . . N . . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7310 CH NOT ASSIGNED                X X X X X . . X X X X X X X X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7311 CH ACTIVE ON ENTRY             . . . . . . X . . . . . . . . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7312 NO INACTIVE TO LAST FUNC       X X X X X X X X X X . . . . X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7313 NO INACTIVE TO ESM STATUS      . X X X X . X . . . . X . . X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7314 ESM STATUS NOT RETURNED        . X X X X . X . . . . X . . X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7315 OPERATIONAL STATUS ERROR       . . X X . . . . . . . . . . X X . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7316 ALL DATA NOT TAKEN FROM PP/CM  X . . . . . . . . . . . . . X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7317 INCOMPLETE DATA RETURNED PP/CM X . X X X . . . . X . . . . . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7320 ACCESS LEVEL TOO LOW FOR REQ   . . X X . . . . . . . . . . X X . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7321 ABNORMAL SUBSYSTEM STATUS      . . X X . . X . . . . . . . X X . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7322 CHANNEL FAILED TO GO EMPTY     X X X X X X . . X X . . . . X X X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7323 NO INACTIVE TO SDP STATUS      . . . . . . X . . . . . . X . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7324 NO INACTIVE AFTER DATA XFER    X X X . X X X . . X X X X X . . X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7325 CHANNEL PE ON ESM INPUT        X . X . X . X . . X . X . X . . X 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7326 NO INACTIVE TO DMA STATUS      . . . X . . X . . . X . X . . X . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7327 DMA CHANNEL PARITY ERROR       . . . X . X X . . . X . X . . X . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7330 DMA ERROR STATUS SET           . . X X . . X . . . . . . . X X . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
* 7331 INCOMPLETE SDP STATUS RETURNED . . . . . . . . . . . . . X . . . 
*      ------------------------------ - - - - - - - - - - - - - - - - - 
  
 EQUATE   TITLE  TABLE OF EQUATES 
*         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         CHANNEL NOT ASSIGNED 
 EC.CAS   EQU    11B         CHANNEL ACTIVE ON ENTRY
 EC.NIF   EQU    12B         NO INACTIVE TO LAST FUNCTION 
 EC.NIES  EQU    13B         NO INACTIVE TO ESM STATUS
 EC.ESNR  EQU    14B         ESM STATUS NOT RETURNED
 EC.OSE   EQU    15B         OPERATIONAL STATUS ERROR 
 EC.DNA   EQU    16B         ALL DATA NOT TAKEN FROM PP/CM
 EC.IDR   EQU    17B         INCOMPLETE DATA RETURNED TO PP/CM
 EC.IAL   EQU    20B         ACCESS LEVEL TOO LOW FOR REQUEST 
 EC.AES   EQU    21B         ABNORMAL SUBSYSTEM STATUS
 EC.CFE   EQU    22B         CHANNEL FAILED TO GO EMPTY 
 EC.NISS  EQU    23B         NO INACTIVE TO SDP STATUS
 EC.NIDT  EQU    24B         NO INACTIVE AFTER DATA TRANSFER
 EC.CPE   EQU    25B         CHANNEL PARITY ERROR ON ESM INPUT
 EC.NIDS  EQU    26B         NO INACTIVE TO DMA STATUS
 EC.DCPE  EQU    27B         DMA CHANNEL PARITY ERROR 
 EC.DESS  EQU    30B         DMA ERROR STATUS SET 
 EC.ISSR  EQU    31B         INCOMPLETE SDP STATUS RETURNED 
  
*         DIRECT CELL EQUATES 
  
 PA       EQU    D.T0        PARAMETER ADDRESS
 RDWRF    EQU    60B         READ/WRITE FLAG
 FUN      EQU    62B         FUNCTION FOR READ/WRITE
 ADDR1    EQU    65B         TEMPORARY ADDRESS FROM COMPILER
 ADDR2    EQU    66B         TEMPORARY ADDRESS FROM COMPILER
 ADDR3    EQU    67B         TEMPORARY ADDRESS FOR FLAG REGISTER OPERATIONS 
  
*         EQUATES FOR PSEUDO-FLAG FUNCTIONS.
  
 RD       EQU    1           PPU READ FROM ESM
 WR       EQU    2           PPU WRITE TO ESM 
 CMRD     EQU    11B         CENTRAL MEMORY READ FROM ESM 
 CMWR     EQU    12B         CENTRAL MEMORY WRITE TO ESM
 CMFRD    EQU    21B         CENTRAL MEMORY FAST READ FROM ESM
 CMFWR    EQU    22B         CENTRAL MEMORY FAST WRITE TO ESM 
 RPB      EQU    21B         READ PORT BUFFER 
 WPB      EQU    22B         WRITE PORT BUFFER
 EQUATE   EJECT 
*         ESM LOW SPEED PORT FUNCTIONS
  
 ESMRD    EQU    5001B       READ AND GLOBAL REGISTER 
*                            (BIT 23 IS FOR FLAG FUNCTIONS) 
 ESMWRT   EQU    5002B       WRITE FUNCTION 
 ESMSTAT  EQU    5004B       READ STATUS BITS 
 ESMPMC   EQU    5010B       PORT MASTER CLEAR
 ESMMRD   EQU    5021B       MAINTENANCE MODE READ
 ESMMWRT  EQU    5022B       MAINTENANCE MODE WRITE 
 ESMGFLG  EQU    5040B       GLOBAL FLAG REGISTER FUNCTION
*                            (EXTENDED ADDRESSING, 26 BIT ADDRESSING) 
 ESM1RD   EQU    5041B       READ ONE RECORD
 ESMUUBM  EQU    5401B       USE UPPER HALF OF BUFFER MEMORY
 ESMULBM  EQU    5601B       USE LOWER HALF OF BUFFER MEMORY
 ESME100  EQU    5402B       ENABLE HIGH SPEED TRANSFER 
 ESMD100  EQU    5602B       DISABLE HIGH SPEED TRANSFER
 ESMEXDA  EQU    5404B       USE EXTENDED (26 BIT) ADDRESSING 
 ESMSADR  EQU    5604B       USE 24 BIT ADDRESSING
  
*         ESM STATUS BIT DESCRIPTIONS 
  
 ESMABT   EQU    0001B       ABORT
 ESMACPT  EQU    0002B       ACCEPT 
 ESMDERE  EQU    0004B       DOUBLE ERROR 
 ESMWRTS  EQU    0010B       WRITE
 ESMCHPE  EQU    0020B       CHANNEL PARITY ERROR 
 ESMUPBM  EQU    1000B       UPPER HALF OF BUFFER MEMORY ENABLED
 ESM100D  EQU    2000B       HIGH SPEED DATA TRANSFER ENABLED 
 ESMSXAD  EQU    4000B       EXTENDED (26 BIT) ADDRESS FORMAT ENABLED 
  
*         ESM SIDE DOOR PORT FUNCTIONS
  
 SDPRFG   EQU    1002B       READ FLAG REGISTER 
 SDPREL   EQU    1010B       READ ERROR LOG 
 SDPRSEL  EQU    1011B       RESET ERROR LOG
 SDPSPEL  EQU    1012B       SET PROGRAMMABLE ERROR LOG COUNTER 
 SDPSTAT  EQU    1040B       READ STATUS BITS REGISTER
 SDPGBAF  EQU    1110B       GBA FORCE
 SDPWVEF  EQU    1111B       WRITE VALID ERROR FORCE
 SDPDSEC  EQU    1112B       DISABLE SEC/DED
 SDPWCB   EQU    1113B       WRITE CHECK BITS 
 SDPRCB   EQU    1114B       READ CHECK BITS
 SDPRSB   EQU    1115B       READ SYNDROME BITS 
 SDPRZCB  EQU    1124B       READ ZERO CHECK BITS 
 SDPCMF   EQU    1141B       CLEAR MAINTENANCE FUNCTIONS
 SDPSCTM  EQU    1200B       SET CLOCK TIMING MARGIN
 SDPSFT   EQU    1201B       SET REFRESH TIME 
 SDPSSL   EQU    1202B       SCANNER LOCK 
 SDPCLR   EQU    1203B       PORT, CONTROL, AND MASTER CLEAR
 SDPSMA   EQU    1204B       SET MAXIMUM ADDRESS
 SDPSESB  EQU    1205B       SET ENVIRONMENTAL STATUS BITS
  
*         ESM SIDE DOOR PORT STATUS BIT DESCRIPTIONS
*         WORD 1 OF 4 
  
 SDPESEF  EQU    0001B       ERROR LOG - SINGLE ERROR FULL
 SDPEDEF  EQU    0002B       ERROR LOG - DOUBLE ERROR FULL
 SDPESEC  EQU    0004B       ERROR LOG - SINGLE ERROR COUNTER FULL
 SDPDEEF  EQU    0010B       DETECTED ERROR - ERROR LOG FAULT 
 SDPEWL   EQU    0400B       ENVIRONMENTAL - WARNING LEVEL
 SDPESL   EQU    1000B       ENVIRONMENTAL - SHUTDOWN LEVEL 
 SDPDECP  EQU    2000B       DETECTED ERROR - SIDE DOOR CHANNEL PARITY
 SDPDBAP  EQU    4000B       DETECTED ERROR - BANK ADDRESS PARITY 
  
*         WORD 2 OF 4 
  
*         BITS 0 - 10 - NOT USED
 SDPDMWV  EQU    4000B       DETECTED ERROR - MULTIPLE WRITE VALID
  
*         WORD 3 OF 4 
  
*         BITS 0 - 6  - MAXIMUM ADDRESS 
*         BITS 7 - 9  - CLOCK MARGIN
  
*         WORD 4 OF 4 
  
*         BITS 0 - 11 - REFRESH TIME
  
*         EQUATES FOR DMA FUNCTIONS.
  
 MC       EQU    100B        MASTER CLEAR 
 CLTR     EQU    101B        CLEAR T REGISTER 
 DMAI     EQU    102002B     START DMA INPUT
 DMAO     EQU    103002B     START DMA OUTPUT 
 CLDMA    EQU    104B        CLEAR DMA MODE 
 CLTM     EQU    106B        CLEAR TEST MODE
 SETM     EQU    107B        SET TEST MODE
 RCR      EQU    110B        READ CONTROL REGISTER
 WCR      EQU    111B        WRITE CONTROL REGISTER 
 RESR     EQU    112B        READ ERROR STATUS REGISTER 
 ROSR     EQU    114B        READ OPERATION STATUS REGISTER 
 RTR      EQU    116B        READ T REGISTER
 WTR      EQU    117B        WRITE T REGISTER 
 DMAIF    EQU    102402B     START DMA FAST INPUT 
 DMAOF    EQU    103402B     START DMA FAST OUTPUT
  
*         EQUATES FOR DMA FUNCTIONS.
  
 S60B     EQU    20000B      SELECT FOR 60 BIT CM WORDS 
 D170EF   EQU    100400B     DISABLE 170 MODE ERROR FLAG+INVALIDATE CACHE 
  
  
*         DEVICE CODES SUPPORTED
  
*IF DEF,MVE,2 
 ESM2SD   EQU    212B        ESM2 SIDE DOOR PORT DEVICE CODE
 SNETSD   EQU    213B        STORNET SIDE DOOR PORT DEVICE CODE 
 ESM2     EQU    171B        ESM II DEVICE CODE 
 SNSS     EQU    211B        STORNET SUBSYSTEM DEVICE CODE
  
*         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 
 BPB      EQU    80D         PORT BUFFER MEMORY LENGTH
 CMLGTH   EQU    64D         CENTRAL MEMORY BUFFER LENGTH 
  
 WRRD     EQU    500B        I/O WORD COUNT 
 WRRD64   EQU    454B        I/O WORD COUNT 
 DMABC60  EQU    1000B       T REGISTER BYTE COUNT 60 BIT MODE
 DMABC64  EQU    740B        T REGISTER BYTE COUNT 64 BIT MODE
 PREALL   EQU    2000B       LOWER ESM ADDRESS FOR PREALLOCATED AREA
*IF -DEF,MVE,3
 SYSWRCM  EQU    6B          SYS WRITE CM FUNCTION
 SYSRDCM  EQU    7B          SYS READ CM FUNCTION 
 SYSRWCM  EQU    10B         SYS REWIND CM FUNCTION 
*IF DEF,MVE,3 
 SYSWRCM  EQU    14B         SYS WRITE CM FUNCTION
 SYSRDCM  EQU    12B         SYS READ CM FUNCTION 
 SYSRWCM  EQU    13B         SYS REWIND CM FUNCTION 
 AL10     EQU    10B         ACCESS LEVEL FOR DEDICATED ESM 
 AL21     EQU    21B         ACCESS LEVEL FOR NO CHANNEL CLEANUP ON ERROR 
 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 OF THIS OVERLAY 
  
 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   - DMA INTERFACE CLEARED AND RELEASE COMMAND EXECUTED 
* 
*         USES   - ERR3, ERR4 
* 
*         CALLS  - CLRDMA, 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      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 SDP OR LSP 
          CON    RDWR        WRITE/READ ESM ADDRESS 
          CON    STATUS      GET ESM, ERROR, OPERATIONAL OR SDP STATUS
          CON    RDWRPB      WRITE/READ PORT BUFFER 
          CON    FLGREG      FLAG REGISTER COMMANDS 
          CON    SDPMF       SIDE DOOR PORT MAINTENANCE FUNCTIONS 
          CON    SDPSET      SET SIDE DOOR PORT FUNCTIONS AND SDP CLEAR 
          CON    ERRLOG      ERROR LOG FUNCTIONS AND SDP READ FLAG REG
  
 REL      TITLE  REL - RELEASE EQUIPMENT. 
**        REL    - RELEASE EQUIPMENT IF CONNECTED.
* 
*                  REL, ABT Z 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - LSP CONNECT CLEARED, THE CHANNEL IS RELEASED TO
*                  THE SYSTEM, THE DMA INTERFACE IS CLEARED IF CIO
*                  PP AND THE LSP IS CLEARED IF THE LSP WAS CONNECTED.
* 
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRCFE - IF CHANNEL FAILED TO GO EMPTY.
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRDCPE- IF DMA CHANNEL PARITY ERROR.
* 
*         USES   - NONE.
* 
*         CALLS  - CLRDMA, OPC, BD.DCH
* 
  
**     1. CLEAR THE DMA INTERFACE IF CIO PP.
* 
**     2. DISCONNECT EQUIPMENT WITH PORT MASTER CLEAR FUNCTION
*         IF CHANNEL ASSIGNED AND LSP CONNECTED.
* 
**     3. DROP THE I/O CHANNEL TO THE OPERATING SYSTEM IF ASSIGNED. 
* 
 REL      LDM    FLCIO       CHECK IF DMA PRESENT 
          ZJN    REL1        IF NO DMA
          RJM    CLRDMA      CLEAR THE DMA INTERFACE
 REL1     RJM    OPC         RELEASE THE EQUIPMENT IF CONNECTED 
          RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC 
  
          LJM    XENT        EXIT TO STACK
  
 RES      TITLE  RES - RESERVE CHANNEL/ESM. 
**        RES    - RESERVE CHANNEL/ESM. 
* 
*                  RES LSP, ABT Z 
*                  RES SDP, ABT Z 
* 
*         ENTRY  - (PA) = 2 = RES LSP 
*                         0 = RES SDP 
* 
*         EXIT   - I/O CHANNEL ASSIGNED, CHANNEL ASSIGNED FLAGS 
*                  SET IN ALL THE OTHER SUBROUTINES AND DMA 
*                  INTERFACE CLEARED. 
* 
*                - ERRCAS - IF CHANNEL ACTIVE ON ENTRY. 
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRNIES- IF NO INACTIVE TO ESM STATUS FUNCTION.
*                - ERRESNR- IF ESM STATUS NOT RETURNED. 
*                - ERRAES - IF ABNORMAL ESM STATUS. 
*                - ERRNISS- IF NO INACTIVE TO SDP STATUS. 
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON ESM INPUT. 
*                - ERRNIDS- IF NO INACTIVE TO DMA STATUS. 
*                - ERRDCPE- IF DMA CHANNEL PARITY ERROR.
*                - ERRDESS- IF DMA ERROR STATUS SET.
*                - ERRISSR- IF INCOMPLETE SDP STATUS RETURNED.
* 
*         USES   - EC, EA, EM, D.T2, D.T3, D.T6, RESA, OPC1 
* 
*         CALLS  - OPC, STS, DSTS, BD.RCH, CLRDMA, IJM
  
**     1. CLEAR  ERROR REGISTERS
* 
 RES      LDN    0           CLEAR ERROR REGISTERS
          STD    EC          INTERNAL ERROR CODE
          STD    EA          CURRENT P REG. (LINE NUMBER) 
          STD    EM          ERROR MESSAGE INDEX
  
**     2. DROP/REQUEST I/O CHANNEL FROM THE SYSTEM. 
* 
 RES1     LDD    PA          GET PA 
          STM    RESA        AND PAUSE LOOP 
 RES2     RJM    OPC         CLEAR PORT IF LSP IS SELECTED
          LDN    0
          STM    OPC1        SET LSP NOT CONNECTED
 RES4     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED
          RJM    IJM         WAIT CHANNEL ACTIVE
          AJM    RES19,CH    ERROR IF CHANNEL ACTIVE FROM SYSTEM
  
**     3. GET STATUS. 
* 
          LDM    RESA        GET RESERVE FUNCTION 
          STD    PA          SAVE BACK IN PA
          LDC    TIMREL 
          STD    D.T3 
          LDM    FLCIO       CHECK CIO FLAG 
          ZJN    RES7        CIO FLAG NOT SET 
          RJM    CLRDMA      CLEAR THE DMA AND CHECK ERR STAT 
          LDC    RESR        GET DMA ERROR STATUS 
          RJM    DSTS 
          LDM    ERRSTL      CHECK ERROR STATUS REG 
          NJN    ERRDESS     EXIT DMA ERROR STATUS SET
          LDM    ERRSTU      CHECK ERROR STATUS LOWER 
          ZJN    RES7        JUMP IF NO ERROR 
 ERRDESS  LDC    ER.DESS     DMA ERROR STATUS SET 
          UJN    RES8A       ERROR EXIT 
  
 RES7     LDD    PA 
          NJN    RES8        IF RES LSP 
          RJM    STSDP       GET SDP STATUS 
          UJN    RES9        CONTINUE 
 RES8     RJM    STS         GET ESM STATUS 
          LPN    65B         CHECK ANY ERROR TYPE CONDITION 
          ZJN    RES9        IF NO ERROR STATUS 
 ERRAES   LDC    ER.AES      ABNORMAL ESM STATUS ERROR
 RES8A    LJM    ERR         ERROR EXIT 
  
 RES19    LDC    ER.CAS      ERROR CHANNEL ACTIVE FROM SYSTEM 
          UJN    RES8A       ERROR EXIT 
  
 RES9     LDM    FLCIO       CHECK CIO FLAG 
          ZJN    RES11       CIO FLAG NOT SET 
          LDC    ROSR        LOAD OPERATIONAL STATUS CONSTANT 
          RJM    DSTS        GET OPERATIONAL STATUS 
  
**     4. GET REAL MEMORY ADDRESS FOR SYSCM COMMANDS IN P. O. 
* 
*IF DEF,MVE 
 RES11    LDM    BD.DMAL     LOWER 16 BITS OF DMA WORD ADDRESS
          SHN    3
          STM    ADDL        DMA BYTE ADDRESS LOWER 12
          LDML   BD.DMAL
          SHN    -9 
          STM    ADDU 
          LDML   BD.DMAU     UPPER 16 BITS OF DMA WORD ADDRESS
          LPN    37B
          SHN    7
          RAM    ADDU        DMA BYTE ADDRESS MIDDLE 12 
          LDML   BD.DMAU
          SHN    -5 
          STM    ADDUU       DMA BYTE ADDRESS UPPER 12
          LDN    10B
          RAM    ADDL        BIAS PAST WORD 1 OF DMA BUFFER 
          SHN    -12
          ZJN    RES12       IF NO CARRY TO MIDDLE WORD 
          AOM    ADDU 
          SHN    -12
          ZJN    RES12       IF NO CARRY TO UPPER WORD
          AOM    ADDUU
 RES12    EQU    *
*ENDIF
*IF -DEF,MVE
 RES11    SRD    D.T6        GET R REGISTER CONTENTS
          LDD    D.RA 
          LPC    3777B       MASK R REG BIT 
          ADD    D.T7        ADD R REG
          STM    ADDL        SAVE TEMPORARILY 
          SHN    -12
          RAD    D.T6        SAVE OVERFLOW BIT
          LDM    ADDL        RESET THE A REG
          SHN    -6          MASK OFF LOWER 
          SHN    3           ADD 3 BITS OF ZEROS FOR BYTE ADDRESS 
          STM    ADDU        SAVE TEMPORARILY 
          LDM    ADDL 
          LPN    77B         RESET A REGISTER FOR ADDRESS 
          SHN    6           MULTIPLY TIMES 100 
          ADM    BD.CMB      ADD IN CM BUFFER ADDRESS 
          SHN    3           ADD 3 BITS OF ZEROS FOR BYTE ADDRESS 
          STM    ADDL        STORE LOWER 12 BITS OF ADDRESS 
          SHN    -12
          RAM    ADDU        ADD OVERFLOW TO UPPER ADDRESS
          LDD    D.T6 
          SHN    -6          MASK OFF LOWER 
          SHN    3
          STM    ADDUU       SAVE TEMPORARILY 
          LDD    D.T6 
          LPN    77B         MASK OFF LOWER 
          SHN    9
          ADM    ADDU        ADD TO UPPER 12 BITS OF ADDRESS
          STM    ADDU        STORE NEXT 12 BITS OF ADDRESS
          SHN    -12
          RAM    ADDUU       SAVE LAST 12 BITS
*ENDIF
**      5. SET LSP OR SDP CONNECTED.
* 
 RES15    LDD    PA 
          STM    OPC1        SET LSP OR SDP CONNECTED 
 RES18    LJM    XENT        EXIT TO STACK
  
 ALCHK    TITLE  ALCHK - CHECKS ACCESS LEVEL
**        ALCHK - CHECKS ACCESS LEVEL 
* 
*         ENTRY - NONE
* 
*         EXIT - ERRIAL - IF ACCESS LEVEL TOO LOW FOR REQUEST 
* 
 ALCHKX   LJM    **          ENTRY EXIT 
 ALCHK    EQU    *-1
*IF DEF,MVE,3 
          LDD    BD.ALA      GET ACCESS LEVEL ATTRIBUTES
          LPN    BD.DTE      TEST DEDICATED ACCESS
          NJN    ALCHKX      IF DEDICATED ACCESS LEVEL
*IF -DEF,MVE,3
          LDD    AL          GET ACCESS LEVEL FROM ASSIGN 
          SBN    AL10        TEST AGAINST DEDICATED ESM 
          PJN    ALCHKX      IF ACCESS LEVEL EQUAL TO OR GREATER THAN 10B 
          LJM    ERRIAL      ACCESS LEVEL TOO LOW FOR REQUEST 
  
 CLRDMA   TITLE  CLRDMA - CLEAR THE DMA INTERFACE.
**        CLRDMA - CLR THE DMA INTERFACE. 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - DMA INTERFACE CLEARED. 
* 
*         CALLS  - FNC, DMAP
* 
* 
 CLRDMAX  LJM    **          ENTRY/EXIT 
 CLRDMA   EQU    *-1
  
          LDM    BD.CHFG     GET THE CHANNEL FLAG 
          ZJN    CLRDMAX     EXIT IF CHANNEL FLAG NOT SET 
          LDN    0
          STM    BD.CHAIN    CLEAR THE CHAINING FLAG
          LDC    CLDMA       LOAD CLEAR DMA FUNCTION
          RJM    FNC         CLEAR DMA INTERFACE
          LDC    CLTR        LOAD CLEAR T REGISTER FUNCTION 
          RJM    FNC         CLEAR T REGISTER 
  
          LDC    WCR         WRITE CONTROL REGISTER FUNCTION
          RJM    FNC         EXECUTE FUNCTION 
  
          LDN    0
  
**        OUTPUT CONTROL REGISTER WORD
* 
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          RJM    DMAP        OUTPUT THE CONTROL WORD
          DCN    CH+40B      DEACTIVATE THE CHANNEL 
          LDD    PA          GET OPERATION TYPE 
          LPN    20B         CHECK FOR FAST MODE
          ZJN    CLRDMAX     EXIT, NOT FAST MODE
          LDC    ESMD100     LOAD DISABLE FAST TRANSFER MODE
          RJM    FNC         CLEAR FAST TRANSFER MODE 
          LJM    CLRDMAX     EXIT 
  
 DMAOP    TITLE  DMAOP - OPERATION IN FAST MODE ON ESM
**        DMAOP - OPERATION IN FAST MODE ON ESM 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - FAST MODE ENABLED. 
* 
*         CALLS  - FNC
* 
* 
 DMAOPX   LJM    ** 
 DMAOP    EQU    *-1
  
          LDC    ESME100     ENABLE ESM FAST MODE 
          RJM    FNC         FUNCTION ESM 
          UJN    DMAOPX      EXIT DMA 
  
 DRW      TITLE  DRW - FUNCTION DMA FOR READ OR WRITE.
**        DRW   - FUNCTION DMA FOR READ OR WRITE. 
* 
* 
*         ENTRY  - (A) = CODE FOR DMA SEQUENCE
*                  (0) = READ TO CM (DMA INPUT) 
*                  (1) = WRITE FROM CM (DMA OUTPUT) 
* 
*         EXIT   - DATA READ TO CM AND TRANSFERED TO IB, OR DATA
*                  TRANSFERED FROM OB TO CM AND WRITTEN FROM CM.
* 
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERROSE - IF OPERATIONAL STATUS ERROR.
*                - ERRDCPE- IF DMA CHANNEL PARITY ERROR.
* 
*         USES     D.T1, D.T2, RDWRF, D.T5, D.T6, WC, WT
* 
*         CALLS -  FNC, DMAP, FNA, DSTS, RDW33, BD.SYS, EJM, CLRDMA,
*                  SYSM 
  
**     1. SET UP FOR DMA I/O. 
* 
 DRWX     LJM    *           ENTRY/EXIT POINT 
 DRW      EQU    *-1
  
          LPN    1           MASK FOR READ OR WRITE 
          STD    RDWRF       SAVE DMA READ/WRITE FLAG 
          NJN    DRW1        SET UP DMA REGISTERS FOR I/O 
          LDN    SYSRWCM     SYS REWIND CM FUNCTION 
          RJM    BD.XSYS     REWIND 
*IF DEF,MVE,1 
          RJM    SYSM+1      SET 60 BIT CM OPERATION
          LDN    SYSWRCM     SYS WRITE CM FUNCTION
          RJM    BD.XSYS     WRITE OB TO CM 
*IF DEF,MVE,1 
          RJM    SYSM+1      SET 64 BIT CM OPERATION
  
 DRW1     LDC    WCR         WRITE CONTROL REGISTER FUNCTION
          RJM    FNC         FUNCTION DMA 
  
  
          LDM    P4          LOAD 64/60 PARAMETER WORD
          NJN    DRW2        JUMP IF 64 BIT MODE SELECTED 
  
**        SET THE CONTROL REGISTER FOR A 60 BIT CENTRAL MEMORY WORD 
*         AND SET THE DISABLE ERROR FLAG BIT. 
* 
**
          LDC    S60B+D170EF   SELECT 60 BIT CM WORD AND
          UJN    DRW3          DISABLE 170 ERRFLG 
  
  
 DRW2     LDC    D170EF        SELECT DISABLE 170 ERRFLG
  
**        OUTPUT CONTROL REG WORD 
* 
 DRW3     ACN    CH+40B      ACTIVATE CHANNEL 
          RJM    DMAP        OUTPUT CONTROL REG WORD
          DCN    CH+40B      DEACTIVATE CHANNEL 
  
**        OUTPUT BYTE COUNT AND CM ADDRESS TO DMA ADAPTER 
* 
          LDC    WTR         WRITE T REGISTERS FUNCTION 
          RJM    FNC         FUNCTION DMA 
          LDM    P4          LOAD 64/60 PARAMETER WORD
          ZJN    DRW4        JUMP 60 BIT MODE 
          LDC    DMABC64     LOAD 64 BIT MODE BYTE COUNT
          UJN    DRW5 
 DRW4     LDC    DMABC60     LOAD BYTE COUNT
 DRW5     STM    TREG        SET WORD COUNT INTO T REGISTER 
          ACN    CH+40B      ACTIVATE CHANNEL 
          RJM    DMAP        OUTPUT BYTE COUNT TO DMA 
          LDM    ADDU        LOAD CM ADDRESS BITS 12-23 
          LPC    7760B       MASK OFF BITS 12-15
          SHN    6
          ADM    ADDUU       ADD UPPER CM BITS
          SHN    8           SHIFT TO CM ADDRESS BITS 24-29 
          RJM    DMAP        OUTPUT UPPER CM ADDRESS BITS 12-23 
          LDM    ADDU        LOAD CM ADDRESS BITS 12-23 
          LPN    17B         MASK OFF BITS 12-23
          SHN    12 
          ADM    ADDL        ADD CM BITS 0-11 
          RJM    DMAP        OUTPUT LOWER CM ADDRESS BITS 0-11
          DCN    CH+40B      DEACTIVATE CHANNEL 
          LDD    WC          LOAD THE WORD COUNT
          STD    WT          PRESET WT, ASSUME GOOD READ/WRITE
          LDN    0
          STD    D.T1        PRE-CLEAR COUNTER
          LDD    FUN         LOAD THE ESM FUNCTION
          RJM    FNA         OUTPUT THE FUNCTION
          LDM    OPTYP       LOAD OPERATION TYPE
          LPN    20B         LOOK FOR FAST BIAS BIT 
          ZJN    DRW6        NOT FAST TRANSFER MODE 
          LJM    DRW26       SETUP DMA CHANNEL FOR FAST TRANSFER MODE 
  
 DRW6     LDD    RDWRF       LOAD READ/WRITE FLAG 
          ZJN    DRW8        DMA OUTPUT 
  
**        DMA INPUT 
* 
          LDC    DMAI        LOAD DMA INPUT FUNCTION
          UJN    DRW9 
  
**        DMA OUTPUT
* 
 DRW8     LDC    DMAO        LOAD DMA OUTPUT FUNCTION 
 DRW9     SHN    12          SHIFT INSTRUCTION FOR STORAGE
          STD    LF          SAVE LAST FUNCTION 
          SHN    6           SET UP FUNCTION CODE 
  
          RJM    FNA         FUNCTION DMA 
          NJN    DRW11       FUNCTION ACCEPTED
          LJM    ERRNIF      ERROR NO INACTIVE TO FUNCTION
  
 DRW11    ACN    CH          ACTIVATE THE CHANNEL 
          LDN    2           LOAD ADDRESS CONSTANT
          OAM    ESMA,CH     OUTPUT ESM ADDRESS 
          RJM    EJM         CHECK EMPTY AFTER ADDRESS
          DCN    CH+40B 
  
 DRW12    LDC    RTR         LOAD DMA READ T REG FUNCTION 
          RJM    FNC         FUNCTION DMA 
  
**        READ T REG (BYTE COUNT) 
* 
          ACN    CH+40B      ACTIVATE CHANNEL 
          LDN    1           SET A REGISTER 
          IAN    CH          INPUT T REGISTER (BYTE COUNT)
          STD    D.T2        SAVE 
          DCN    CH+40B      DEACTIVATE CHANNEL 
          ZJN    DRW15       THE T REGISTR IS CLEAR 
          LDD    D.T1        GET OLD T REG COUNT
          SBD    D.T2        SUBTRACT THE NEW T REG COUNT 
          ZJN    DRW13       T REG NOT DECREMENTING ERROR 
          LDD    D.T2        GET NEW T REG COUNT
          STD    D.T1        SAVE IT FOR NEXT PASS
          UJN    DRW12       T REG DECREMENTING CONTINUE UNTIL IT STOPS 
  
**        T REGISTER ERROR
* 
 DRW13    LDM    TREG        GET OLD CONTENTS OF T REGISTER 
          SBD    D.T2        SUBTRACT NEW COUNT 
          STM    TREG        ACTUAL BYTE COUNT
          RJM    CLRDMA      CLEAR DMA INTERFACE
          LDD    RDWRF       LOAD WRITE/READ FLAG 
          NJN    DRW14       READ FLAG SET
          LJM    RDW33       ERROR NOT ALL DATA TAKEN FROM CM 
  
 DRW14    LJM    RDW25       ERROR ON READ TO CM
  
 DRW15    LDC    ROSR        READ OPERATIONAL STATUS
          RJM    DSTS        GET OPERATIONAL STATUS 
          LDC    CLDMA       CLEAR DMA MODE 
          RJM    FNC         EXECUTE FUNCTION 
          LDM    OPTYP       LOAD OPERATION TYPE
          LPN    20B         MASK FOR FAST TRANSFER MODE
          ZJN    DRW16       JUMP, NOT FAST MODE
          LDC    ESMD100     DISABLE FAST XFER MODE 
          RJM    FNC         EXECUTE FUNCTION 
 DRW16    LDM    OPERSTL     GET THE LOWER STATUS 
          LPN    1           MASK FOR TRANSFER IN PROGRESS
          NJN    DRW22       JUMP IF TRANSFER IS NOT FINISHED 
          LDD    RDWRF       GET OPERATION TYPE 
          NJN    DRW24       JUMP IF READ 
 DRW18    LJM    DRWX        EXIT, FINISHED 
  
 DRW20    SFM    DMAP3,CH    TEST CHANNEL ERROR FLAG SET
          LDN    0
          STD    D.T6        PRESET COUNTER FOR POSSIBLE WT ERROR 
          UJN    DRW18       EXIT TO STACK
  
 DRW22    LJM    ERROSE      EXIT ON OPERATIONAL STATUS ERROR 
  
**        SYSREAD ROUTINE 
* 
 DRW24    LDN    SYSRWCM     SYS REWIND CM FUNCTION 
          RJM    BD.XSYS     REWIND 
*IF DEF,MVE,1 
          RJM    SYSM+1      SET 60 BIT CM OPERATION
          LDN    D.T0 
          STD    D.T0        REGISTER FOR STATUS ON SYSRD 
          LDN    SYSRDCM     SYS READ CM FUNCTION 
          RJM    BD.XSYS     READ CM TO IB
*IF DEF,MVE,1 
          RJM    SYSM+1      SET 64 BIT CM OPERATION
          UJN    DRW20       TEST CHANNEL ERROR 
  
**        WT  ERROR ROUTINE 
* 
 DRW26    LDD    RDWRF       GET TRANSFER TYPE
          NJN    DRW28       JUMP FOR READ OPERATION
          LDC    DMAOF       LOAD DMA FAST OUTPUT FUNCTION
          UJN    DRW30       GO TO FAST FUNCTIONS 
  
 DRW28    LDC    DMAIF       LOAD DMA FAST INPUT FUNCTION 
 DRW30    LJM    DRW9        STORE FUNCTION IN LAST FUNCTION
*IF DEF,MVE 
 SYSMODE  TITLE  SYSM - TOGGLE BETWEEN 60/64 BIT SYS OPERATIONS 
  
**        SYSM   -  TOGGLES CM INSTRUCTIONS FROM 60 TO 64 BIT OR
*                   FROM 64 TO 60 BIT DEPENDING ON CURRENT STATE
*                   OF THE INSTRUCTION WHEN THIS ROUTINE IS EXECUTED
* 
*         ENTRY  - (A) = N/A
* 
*         EXIT   - BD.SYSWR MODIFIED
*                  BD.SYSRD MODIFIED
* 
*         USES   - BD.SYSRD, BD.SYSWR 
* 
*         CALLS  - NODE 
* 
* 
 SYSM     LJM    *           ENTRY/EXIT 
          LDML   BD.SYSRD 
          ADC    100000B     TOGGLE LONG BIT IN INSTRUCTION 
          STML   BD.SYSRD 
          LDML   BD.SYSWR 
          ADC    100000B     TOGGLE LONG BIT IN INSTRUCTION 
          STML   BD.SYSWR 
          LDM    BD.DIV 
          LMN    1           TOGGLE BIT 0 
          STM    BD.DIV 
          UJN    SYSM        EXIT 
*ENDIF
 DMAP     TITLE  DMAP - ISSUE PARAMETER WORDS FOR WRITE T FUNCTION. 
**        DMAP   - ISSUE PARAMETER WORDS FOR SELECTED FUNCTION. 
* 
*         ENTRY  - (A) = DATA WORD TO OUTPUT
* 
*         EXIT   - ERRCFE - IF CHANNEL FAILED TO GO EMPTY.
*                - ERRDCPE- IF DMA CHANNEL PARITY ERROR.
* 
*         USES   - NONE 
* 
*         CALLS  - DSTS, EJM
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 40 MICROSEC.
* 
 DMAPX    LJM    **          ENTRY/EXIT 
 DMAP     EQU    *-1
  
          OAN    CH 
 DMAP1    RJM    EJM         CHECK FOR CHANNEL EMPTY
 DMAP2    SFM    DMAP3,CH    TEST CHANNEL ERROR FLAG SET
          UJN    DMAPX       EXIT 
 DMAP3    LDC    RESR        GET ERROR STATUS 
          RJM    DSTS        READ DMA ERROR/OPERATION STATUS
          LDC    ROSR        GET OPERATIONAL STATUS 
          RJM    DSTS        GET ERROR/OPERATIONAL STATUS 
          LJM    ERRDCPE     IF DMA CHANNEL PARITY ERROR
  
 DSTS     TITLE  DSTS - REQ AND INP DMA STATUS. 
**        DSTS    - REQUEST AND INPUT DMA STATUS. 
* 
*         ENTRY  - (A) STATUS FUNCTION TO PERFORM.
* 
*         EXIT   - DMA ERROR OR OPER STATUS IN SB.
* 
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON ESM INPUT. 
*                - ERRNIDS- IF NO INACTIVE TO DMA STATUS. 
* 
*         USES   - SB(2-5), D.T6, D.T7
* 
*         CALLS  - FNA, IJM 
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 60 MICROSEC.
* 
 DSTSX    LJM    **          ENTRY/EXIT 
 DSTS     EQU    *-1
  
          STM    LSF         SAVE STATUS FUNCTION 
          SHN    9
          RJM    FNA         ISSUE STATUS FUNCTION
          NJN    DSTS2       IF FUNCTION ACCEPTED 
          LDC    ER.NIDS     ERROR IF NO INACTIVE TO FUNCTION 
          UJN    DSTS2A      ERROR EXIT 
  
 DSTS2    ACN    CH+40B 
          IAN    CH          INPUT DMA STATUS 
          STD    D.T7        SAVE TEMPORARILY 
          SHN    -14B        SHIFT FOR UPPER BIT STORAGE
          STD    D.T6        SAVE TEMPORARILY 
  
          DCN    CH+40B      DEACTIVATE CHANNEL 
  
          LDM    LSF         LOAD FUNCTION
          ADC    -114B
          ZJN    DSTS3       OPR STATUS 
  
          LDD    D.T7        LOAD LOWER 12 ERROR STATUS 
          STM    ERRSTL      STORE LOWER 12 BITS
          LDD    D.T6        LOAD UPPER 4 ERROR STATUS
          STM    ERRSTU      STORE UPPER 4 BITS 
          UJN    DSTS4
  
 ERRNIDT  LDC    ER.NIDT     ERROR NO INACTIVE AFTER DATA XFER
 DSTS2A   UJN    DSTS5
  
 DSTS3    LDD    D.T7        LOAD LOWER 12 ERROR STATUS 
          STM    OPERSTL     STORE LOWER 12 BITS
          LDD    D.T6        LOAD UPPER 4 ERROR STATUS
          STM    OPERSTU     STORE UPPER 4 BITS 
  
 DSTS4    RJM    IJM         WAIT FOR INACTIVE
          ZJN    ERRNIDT     IF INACTIVE NOT RECEIVED 
          SFM    ERRDCPE,CH  DMA CHANNEL PARITY ERROR 
          LJM    DSTSX       IF OK EXIT 
  
 ERRDCPE  LDC    ER.DCPE     DMA CHANNEL PARITY ERROR ON STATUS INPUT 
 DSTS5    LJM    ERR
  
 EJM      TITLE  EJM - WAIT FOR CHANNEL TO GO EMPTY.
**        EJM     - WAIT FOR CHANNEL TO GO EMPTY
* 
*          ENTRY - NONE.
* 
*          EXIT  - CHANNEL EMPTY. 
* 
*                - ERRCFE - 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 
          UJN    DSTS5       ERROR EXIT 
  
 ERRLOG   TITLE  ERRLOG- SIDE DOOR PORT ERROR LOG COMMANDS
**        ERRLOG - SIDE DOOR PORT ERROR LOG COMMANDS. 
* 
*                  ERRLOG READ, ABT Z 
*                  ERRLOG RESET, ABT Z
*                  ERRLOG SET PROGRAM COUNTER, ABT Z
*                  SIDE DOOR READ FLAG REGISTER, ABT Z
* 
*         ENTRY  - (PA) = PSEUDO FUNCTION CODE FOR ERROR LOG FUNCTIONS. 
* 
*         EXIT   - ERRCNA - IF CHANNEL NOT ASSIGNED.
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRDNA - IF ALL DATA NOT TAKEN FROM PP/CM. 
*                - ERRIDR - IF INCOMPLETE DATA RETURNED TO FROM PP/CM.
*                - ERRCFE - IF CHANNEL FAILED TO GO EMPTY.
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON ESM INPUT. 
*                - ERRIAL - IF ACCESS LEVEL TOO LOW FOR REQUEST.
* 
*         USES   - WC, WT, IB(0-123), D.T1
* 
*         CALLS  - TCA, FNC, IJM, EJM, STS, ALCHK 
  
**     1. VERIFY THAT THE CHANNEL IS ASSIGNED.
* 
 ERRLOG   RJM    TCA         TEST CHANNEL ASSIGNED
          LDD    PA          GET THE FUNCTION PARAMETER 
          SBN    12B         CHECK IF READ/RESET ERROR LOG
          MJN    ERRLOG0     IF READ ERROR LOG SKIP AL CHECK
          RJM    ALCHK       TEST ACCESS LEVEL ASSIGNED 
 ERRLOG0  LDD    PA          GET THE FUNCTION PARAMETER 
          ADC    1000B
          RJM    FNC         PERFORM THE FUNCTION 
          LDD    PA 
          SBN    11B         CHECK FOR RESET ERROR LOG
          ZJN    ERRLOG4     IF RESET ERROR LOG 
          SBN    1
          ZJN    ERRLOG7     IF SET PROGRAMMABLE ERROR LOG
 ERRLOG1  LDD    WC 
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          IAM    IB,CH       INPUT THE WORDS TO IB
          NJN    ERRLOG5     IF ALL WORDS NOT INPUTTED
          LDD    PA 
          SBN    10B
          ZJN    ERRLOG2     IF ERRLOG READ THE CHANNEL SHOULD BE INACTIVE
          DCN    CH+40B      DISCONNECT THE CHANNEL 
 ERRLOG2  RJM    IJM         CHECK CHANNEL INACTIVE 
          NJN    ERRLOG3     IF CHANNEL DEACTIVATED PROPERLY
          LJM    ERRNIDT     PROCESS ERROR
  
 ERRLOG3  SFM    ERCPE3,CH   IF CHANNEL PARITY ERROR
 ERRLOG4  UJN    ERRLOG8     EXIT TO STACK
  
 ERRLOG5  STD    D.T1        SAVE REMAINING WORD COUNT
          LDC    ER.IDR      ERROR INCOMPLETE DATA RETURNED TO PP 
 ERRLOG6  STD    D.T2        SAVE IT FOR COMMON ERROR ROUTINE 
          LDD    WC          LOAD EXPECTED WORD COUNT 
          SBD    D.T1 
          STD    WT          STORE WORDS ACTUALLY TRANSFERRED 
          LDD    D.T2        ERROR IDR OR DNA 
          LJM    ERR
  
 ERRLOG7  LDN    4
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          OAM    OB,CH       OUTPUT THE WORDS 
          NJN    ERRLOG9     IF ALL WORDS NOT TAKEN 
          RJM    EJM         CHECK EMPTY
          DCN    CH+40B      DEACTIVATE THE CHANNEL 
 ERRLOG8  LJM    XENT        EXIT TO STACK
  
 ERRLOG9  STD    D.T1        SAVE WORDS REMAINING 
          LDC    ER.DNA      ALL DATA NOT ACCEPTED
          UJN    ERRLOG6     PROCESS ERROR
  
 FLGREG   TITLE  FLGREG- GLOBAL FLAG REGISTER OPERATIONS
**        FLGREG - GLOBAL FLAG REGISTER OPERATIONS. 
* 
*                  FLAG REGISTER 18BIT RDYSEL BX BY, ABT Z
*                  FLAG REGISTER 18BIT SELSET BX BY, ABT Z
*                  FLAG REGISTER 18BIT STATUS BX BY, ABT Z
*                  FLAG REGISTER 18BIT SELCLR BX BY, ABT Z
*                  FLAG REGISTER 4BIT RDYSEL BX BY, ABT Z 
*                  FLAG REGISTER 4BIT SELSET BX BY, ABT Z 
*                  FLAG REGISTER 4BIT STATUS BX BY, ABT Z 
*                  FLAG REGISTER 4BIT SELCLR BX BY, ABT Z 
*                  FLAG REGISTER 4BIT ZERSEL BX BY, ABT Z 
*                  FLAG REGISTER 4BIT EQUSTA BX BY, ABT Z 
*                  FLAG REGISTER SDP DETERR BX BY, ABT Z
* 
*         ENTRY  - (PA) = PSEUDO FUNCTION CODE FOR GLOBAL FLAG REGISTER 
*                         OPERATIONS. 
* 
*         EXIT   - ERRCNA - IF CHANNEL NOT ASSIGNED 
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRNIES- IF NO INACTIVE TO ESM STATUS FUNCTION.
*                - ERRESNR- IF ESM STATUS NOT RETURNED. 
*                - ERRCFE - IF CHANNEL FAILED TO GO EMPTY.
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRIAL - IF ACCESS LEVEL TOO LOW FOR REQUEST.
* 
*         USES   - WT,
* 
*         CALLS  - TCA, FNC, EJM, STS, ALCHK
  
**     1. VERIFY THAT THE CHANNEL IS ASSIGNED AND AL.GE.10B.
* 
 FLGREG   RJM    TCA         TEST CHANNEL ASSIGNED
          RJM    ALCHK       TEST ACCESS LEVEL ASSIGNED 
  
**     2. ADD FLAG REGISTER FUNCTION TO ADDRESS ACCORDING TO PA.
* 
          LDD    PA          GET THE FLAG REGISTER FUNCTION 
          ADN    40B         ADD BIT 23 TO ADDRESS FOR FLAG FUNCTION
          SHN    6           MOVE IT TO UPPER 6 BITS
          STD    ADDR3       SAVE THE FUNCTION
          LDI    ADDR1       GET UPPER 6 BITS OF 18 BIT ADDRESS 
          LPN    77B         MASK OFF UNWANTED BITS OF THE B REG
          ADD    ADDR3       ADD IN THE FLAG REGISTER FUNCTION
          STM    OB          SAVE IT IN THE OUTPUT BUFFER 
          LDI    ADDR2       GET LOWER 12 BITS
          STM    OB+1        SAVE IT AT OB + 1
          LDC    ESMRD       GET THE FLAG REGISTER FUNCTION 
          RJM    FNC         PERFORM THE FUNCTION 
  
**     3. OUTPUT 2 WORDS OF FUNCTION, ADDRESS AND FLAG WORD THEN
*         GET ESM STATUS. 
* 
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          LDN    2           ADDRESS SIZE, FLAG REGISTER COMMAND
          OAM    OB,CH       WRITE FROM THE OUTPUT BUFFER 
          RJM    EJM         CHECK CHANNEL EMPTY AFTER ADDRESS
          DCN    CH+40B      DEACTIVATE THE CHANNEL 
          RJM    STS         GET ESM STATUS 
          LJM    XENT        EXIT TO STACK
  
 FJM      TITLE  FJM - WAIT FOR CHANNEL TO GO FULL. 
**        FJM    - WAIT FOR CHANNEL TO GO FULL. 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - (A) NONZERO IF NOT TIMED OUT WAITING FULL
*                  (A) ZERO IF TIMED OUT
* 
*         USES   - NONE 
* 
*         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    1           *** SBN 1 IF 4X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
          NJN    FJM1        IF TIME NOT COUNTED DOWN 
          UJN    FJMX        ELSE EXIT WITH  A  REGISTER EQUAL ZERO 
  
 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 MICROSEC. 
* 
 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 INAC. 
**        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
          SHN    11-3 
          MJN    FNC1        NOT A DMA FUNCTION 
          SHN    3
          MJN    FNC3        DMA FUNCTION 
 FNC1     LDD    LF          LOAD FUNCTION
 FNC2     RJM    FNA         OUTPUT FUNCTION AND WAIT INACTIVE
          NJN    FNCX        IF INACTIVE EXIT 
 ERRNIF   LDC    ER.NIF      ERROR NO INACTIVE TO FUNCTION
          LJM    ERR         ERROR EXIT 
  
 FNC3     LDD    LF          LOAD FUNCTION
          SHN    9           SHIFT FOR DMA USE
          UJN    FNC2 
  
 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 MICROSEC. 
* 
 IJMX     LJM    **          ENTRY/EXIT 
 IJM      EQU    *-1
  
          LCN    3
 IJM1     IJM    IJMX,CH     IF INACTIVE EXIT 
 IJM2     SBN    1           *** SBN 1 IF 4X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
          NJN    IJM1        IF NOT COUNTED DOWN
          UJN    IJMX        ELSE EXIT W/(A) = ZERO 
  
 OPC      TITLE  OPC - RELEASE EQUIP. 
**        OPC    - RELEASE THE EQUIPMENT. 
* 
*         ENTRY  - NONE 
* 
*         EXIT   - PORT CLEARED IF CHANNEL AND LSP CONNECTED. 
* 
*         USES   - D.T5 
* 
*         CALLS  - FNA
* 
*         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 
          LDC    ** 
 OPC1     EQU    *-1         2 IF LSP CONNECTED 
          SBN    2
          NJN    OPCX        IF LSP NOT CONNECTED 
  
*         THE RELEASE REQUEST CAME FROM THE BASIC DRIVER, SO PROCESS
*         IT WITHOUT CHANGING ANY DATA OR CREATING AN ERROR EXIT. 
  
 OPC3     LDC    ESMPMC      CLEAR THE PORT 
 OPC4     STD    D.T5 
          RJM    FNA         EXECUTE FUNCTION 
          NJN    OPCX        EXIT IF NOT FUNCTION TIMEOUT 
          DCN    CH+40B      ELSE DO A DISCONNECT 
          UJN    OPCX        AND EXIT 
  
 RDWR     TITLE  RDWR - I/O AT THE REQUESTED ESM ADDRESS. 
**        RDWR   - I/O AT THE REQUESTED ESM ADDRESS.
* 
*           READ FROM ESM ADDRESS X Y, ABT Z
*           READ TO CMDMA FROM ESM ADDRESS X Y, ABT Z 
*           READ TO CMDMA ESM ADDRESS X Y, ABT Z
*           READ FAST TO CMDMA FROM ESM ADDRESS X Y, ABT Z
*           READ FAST TO CMDMA ESM ADDRESS X Y, ABT Z 
*           WRITE TO ESM ADDRESS X Y, ABT Z 
*           WRITE FROM CMDMA TO ESM ADDRESS X Y, ABT Z
*           WRITE CMDMA TO ESM ADDRESS X Y, ABT Z 
*           WRITE FAST FROM CMDMA TO ESM ADDRESS X Y, ABT Z 
*           WRITE FAST CMDMA TO ESM ADDRESS X Y, ABT Z
* 
*         ENTRY  - (PA)     PSEUDO FUNCTION CODES FROM COMPILER.
*                           = 0001 = READ FROM ESM TO PP. 
*                           = 0002 = WRITE FROM PP TO ESM.
*                           = 0011 = READ FROM ESM TO CMDMA.
*                           = 0012 = WRITE FROM CMDMA TO ESM. 
*                           = 0021 = READ FAST FROM ESM TO CMDMA. 
*                           = 0022 = WRITE FAST FROM CMDMA TO ESM.
*                           = 0041 = READ ONE RECORD FROM ESM.
* 
* 
*         EXIT   - ERRCNA - IF CHANNEL NOT ASSIGNED.
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRNIES- IF NO INACTIVE TO ESM STATUS FUNCTION.
*                - ERRESNR- IF ESM STATUS NOT RETURNED. 
*                - ERROSE - IF OPERATIONAL STATUS ERROR.
*                - ERRDNA - IF ALL DATA NOT TAKEN FROM PP/CM. 
*                - ERRIDR - IF INCOMPLETE DATA RETURNED TO FROM PP/CM.
*                - ERRIAL - IF ACCESS LEVEL TOO LOW FOR REQUEST.
*                - ERRAES - IF ABNORMAL ESM STATUS. 
*                - ERRCFE - IF CHANNEL FAILED TO GO EMPTY.
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON ESM INPUT. 
*                - ERRNIDS- IF NO INACTIVE TO DMA STATUS. 
*                - ERRDCPE- IF DMA CHANNEL PARITY ERROR.
*                - ERRDESS- IF DMA ERROR STATUS SET.
* 
*         USES   - RDWRF,  FUN,  D.T1, D.T2, SB(0-4), WT, WC
*                  IB(0-477),  OB(0-477), ADDR1, ADDR2, ESMA
*                  ESMA+1, BD.CHAIN 
* 
* 
*         CALLS  - DRW, STS, DSTS, DMAOP, FNA, EJM, IJM, TCA
* 
  
 RDWR     RJM    TCA         CHECK CHANNEL ASSIGNED 
          LDD    PA 
          STM    OPTYP       SAVE OPERATION TYPE
          LPN    1           SAVE READ/WRITE BIT
          STD    RDWRF       SET/CLEAR READ/WRITE FLAG
          ZJN    RDW1        WRITE FUNCTION 
          LDD    PA          GET PSEUDO CODE
          SBN    41B
          NJN    RDW0        IF NOT READ ONE RECORD 
          LDC    ESM1RD      READ ONE RECORD FUNCTION 
          UJN    RDW2        STORE
 RDW0     LDC    ESMRD       READ FUNCTION
          UJN    RDW2        STORE
 RDW1     LDC    ESMWRT      WRITE FUNCTION 
  
 RDW2     STD    FUN         SAVE THE FUNCTION
*IF DEF,MVE,3 
          LDD    BD.ALA      GET ACCESS LEVEL ATTRIBUTES
          LPN    BD.DTE      TEST FOR DEDICATED ACCESS
          NJN    RDW4        IF DEDICATED ACCESS LEVEL
*IF -DEF,MVE,3
          LDD    AL          LOAD THE ACCESS LEVEL
          SBN    AL10        MINIMUM ACCESS LEVEL FOR THIS TEST 
          PJN    RDW4        ACCESS LEVEL OK TO PROCEED 
          LDM    ESMA        GET UPPER 12 OF ESM ADDRESS
          ADM    ESMA+1 
          NJN    RDW5        IF NOT ZERO
 ERRIAL   LDC    ER.IAL      LOAD ACCESS LEVEL ERROR CODE 
          LJM    ERR         JUMP TO ERROR PROCESS ROUTINE
  
 RDW4     LDI    ADDR1       LOAD UPPER ESM ADDRESS 
          STM    ESMA 
          LDI    ADDR2       GET REMAINING ADDRESS
          STM    ESMA+1 
 RDW5     LDD    PA 
          LPN    30B         CHECK FOR DMA OPERATION
          ZJN    RDW9        PPU TRANSFER ONLY
          LPN    10B         SLOW DMA OPERATION 
          NJN    RDW7        DMA TRANSFER 
          RJM    DMAOP       SET FAST MODE TRANSFER 
  
 RDW7     LDD    PA 
          STM    BD.CHAIN    SET CHAINING FLAG
          RJM    DRW         EXECUTE DMA TRANSFER 
          LJM    RDW19       EXIT SLOW DMA TRANSFER 
  
 RDW9     LDD    FUN         LOAD FUNCTION
          STD    LF          SAVE LAST FUNCTION IF ERROR
          RJM    FNA         SEND FUNCTION FOR PPU OPERATION
          NJN    RDW11       JUMP FUNCTION ACCEPTED 
          LJM    ERRNIF      EXIT NO INACTIVE TO FUNCTION 
  
**     5. INPUT OR OUTPUT THE NUMBER OF WORDS SPECIFIED BY WC TO/FROM 
*         THE PP INPUT/OUTPUT BUFFER. IF THE A REGISTER IS NON ZERO 
*         AFTER COMPLETION, GO TO STEP 7. 
  
 RDW11    ACN    CH          ACTIVATE THE CHANNEL 
          LDN    2           ADDRESS WORD COUNT 
          OAM    ESMA,CH     OUTPUT ESM ADDRESS 
  
          LDD    WC          LOAD THE WORD COUNT
          STD    WT          PRESET WT ASSUME GOOD READ OR WRITE
          LDD    RDWRF       LOAD READ FLAG 
          LPN    1           CHECK OPERATION TYPE 
          NJN    RDW13       JUMP TO PPU READ ROUTINE 
  
          LDD    WC          LOAD THE WORD COUNT
          OAM    OB,CH       OUTPUT THE DATA
          NJN    RDW17       IF WRITE ABORT 
          DCN    CH+40B      DISCONNECT THE CHANNEL 
          UJN    RDW15       TO STATUS
  
 RDW13    LDD    WC          LOAD THE WORD COUNT
          IAM    IB,CH       INPUT THE DATA 
          NJN    RDW17       IF READ UNSUCCESSFUL 
          DCN    CH+40B      DISCONNECT THE CHANNEL 
 RDW15    RJM    IJM         IF CHANNEL DEACTIVATED PROPERLY
          NJN    RDW19
          LJM    ERRNIDT     ELSE ERROR EXIT
  
 RDW17    UJN    RDW23       TO PROCESS THE ERROR 
  
 RDW19    SFM    ERCPE1,CH   CHECK FOR CHANNEL PARITY ERROR 
          LDM    FLCIO
          ZJN    RDW21       IF NOT CIO DO NOT GET DMA STATUS 
          LDC    RESR        READ ERROR STATUS REGISTER 
          RJM    DSTS        GET ERROR STATUS 
          LDM    ERRSTU      LOAD UPPER ERROR STATUS
          LPN    17B         CHECK FOR ERROR
          ADM    ERRSTL      LOAD LOWER ERROR STATUS
          NJN    RDW29       EXIT TO ERROR ROUTINE
          LDC    ROSR        READ OPERATIONAL STATUS REGISTER 
          RJM    DSTS        GET OPERATIONAL STATUS 
          LDM    OPERSTL     GET LOWER STATUS 
          LPC    7505B       LOOK FOR BAD STATUS
          NJN    ERROSE      EXIT TO ERROR ROUTINE
 RDW21    RJM    STS         GET ESM STATUS 
          LPN    65B         CHECK FOR ABNORMAL ESM STATUS
          ZJN    RDW27       EXIT FROM GOOD TRANSFER
          LJM    ERRAES      IF ABNORMAL ESM STATUS 
  
**     7. PROCESS FOR READ, WRITE ABORT BECAUSE THE A REGISTER IS NOT 
*         ZERO.  SAVE THE COUNT OF ACTUAL WORDS READ IN LOCATION WT 
*         AND EXIT. 
* 
 RDW23    STD    D.T1        SAVE THE REMAINING WORD COUNT
          LDD    WC          LOAD THE WORD COUNT
          SBD    D.T1        SUBTRACT THE REMAINDER 
          STD    WT          SAVE IT
          RJM    STS         TO PROVIDE ERROR STATUS
          LDD    RDWRF       IS IT WRITE (ZERO) OR READ (NOT ZERO)
          ZJN    RDW33       IF IT IS A WRITE 
 RDW25    LDC    ER.IDR      ELSE ERROR EXIT
          UJN    RDW37
  
 RDW27    LJM    XENT        EXIT TO STACK
  
 RDW29    LJM    ERRDESS     ERROR STATUS SET 
  
 ERROSE   LDC    ER.OSE      OPERATIONAL STATUS ERROR 
 RDW31    LJM    ERR         EXIT TO ERROR ROUTINE
  
 RDW33    LDC    ER.DNA      ERROR EXIT 
 RDW37    STD    D.T2 
          LDM    FLCIO
          ZJN    RDW39       IF NOT CIO DO NOT GET DMA STATUS 
          LDC    RESR        GET ERROR STATUS 
          RJM    DSTS        READ DMA ERROR/OPERATION STATUS
          LDC    ROSR        GET OPERATIONAL STATUS 
          RJM    DSTS        GET ERROR STATUS 
          RJM    STS         UPDATE ESM STATUS AND ERROR EXIT 
 RDW39    LDD    D.T2 
          UJN    RDW31       ERROR EXIT 
  
 RDWRPB   TITLE  RDWRPB- READ WRITE MAINTENANCE MODE. 
**        RDWRPB - READ PORT BUFFER TO INPUT BUFFER.
*                  WRITE OUTPUT BUFFER TO PORT BUFFER.
* 
*                  READPB, ABT Z
*                  WRITEPB, ABT Z 
* 
*         ENTRY  - (PA) = PSEUDO FUNCTION CODE FOR READ WRITE MAINTENANCE MODE
*                         (READPB OR WRITEPB).
* 
*         EXIT   - ERR    - IF INCOMPLETE DATA RETURNED TO PP(VIA RDW23)
*                         - IF ALL DATA NOT ACCEPTED FROM PP (VIA RDW23)
*                - ERRCNA - IF CHANNEL NOT ASSIGNED.
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRNIES- IF NO INACTIVE TO ESM STATUS FUNCTION.
*                - ERRESNR- IF ESM STATUS NOT RETURNED. 
*                - ERRDNA - IF ALL DATA NOT TAKEN FROM PP/CM. 
*                - ERRIDR - IF INCOMPLETE DATA RETURNED TO FROM PP/CM.
*                - ERRCFE - IF CHANNEL FAILED TO GO EMPTY.
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON ESM INPUT. 
* 
*         USES   - WC, WT, RDWRF, IB(0-120), OB(0-120), D.T1
* 
*         CALLS  - TCA, FNC, IJM, EJM, STS
  
**     1. VERIFY THAT THE CHANNEL IS ASSIGNED.
* 
 RDWRPB   RJM    TCA         TEST CHANNEL ASSIGNED
          LDD    PA          GET THE FUNCTION PARAMETER 
          LPN    1
 RDWPB1   STD    RDWRF       SET THE READ WRITE FLAG
  
**     2. ISSUE ONE OF THE FOLLOWING READ WRITE MAINTENANCE FUNCTIONS-
*         READPB(5021), WRITEPB(5022).
* 
          LDD    WC          GET THE WORD COUNT 
          ADC    -121B
          MJN    RDWPB2      IF NOT GREATER THAN 120B WORDS 
          LDC    120B 
          STD    WC          SET WORD COUNT TO 120B 
 RDWPB2   LDD    PA          GET THE FUNCTION 
          ADC    5000B
          RJM    FNC         PERFORM THE FUNCTION 
  
**     3. OUTPUT 2B WORDS FOR THE BUFFER ADDRESS. 
* 
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          LDN    2           ADDRESS SIZE, PORT BUFFER COMMAND
          OAM    ESMA,CH     WRITE ADDRESS
  
**     4. INPUT WC WORDS FROM THE SUBSYSTEM MEMORY TO THE INPUT 
*         BUFFER IF A READPB. 
* 
          LDD    RDWRF       IS IT WRITE (ZERO) OR READ (NOT ZERO)
          ZJN    RDWPB3      IF IT IS A WRITE 
          LDD    WC          WORD COUNT, PORT BUFFER COMMAND
          IAM    IB,CH       READ TO INPUT BUFFER 
          UJN    RDWPB4 
  
**     5. OUTPUT WC WORDS FROM THE OUTPUT BUFFER TO THE SUBSYSTEM 
*         IF A WRITEPB. 
* 
 RDWPB3   RJM    EJM         CHECK CHANNEL EMPTY AFTER ADDRESS
          LDD    WC          WORD COUNT, PORT BUFFER COMMAND
          OAM    OB,CH       WRITE FROM THE OUTPUT BUFFER 
  
**     6. VERIFY THAT WC WORDS WERE ACTUALLY INPUT. 
* 
 RDWPB4   STD    D.T1        SAVE COUNT OF WORDS NOT WRITTEN
          LDD    WC          LOAD THE EXPECTED WORD COUNT 
          SBD    D.T1 
          STD    WT          STORE THE WORDS ACTUALLY TRANSFERRED 
          RJM    IJM         INSURE CHANNEL IS INACTIVE 
          NJN    RDWPB5      JUMP IF CHANNEL INACTIVE 
          DCN    CH+40B      DEACTIVATE THE CHANNEL 
 RDWPB5   LDD    D.T1 
          ZJN    RDWPB6      IF ALL WORDS TRANSFERRED, EXIT TO STACK
          LJM    RDW23       ERROR - ALL WORDS NOT TRANSFERRED
 RDWPB6   SFM    ERCPE3,CH   CHECK CHANNEL PARITY ERROR 
          RJM    STS         GET ESM STATUS 
 RDWPB8   LJM    XENT        EXIT TO STACK
  
  
 SDPMF    TITLE  SDPMF - SIDE DOOR PORT CHECKOUT AND DIAGNOSTIC FUNCTIONS.
**        SDPMF  - SIDE DOOR PORT MAINTENANCE FUNCTIONS.
* 
*                  SDP MAINT FUNC GBA FORCE, ABT Z
*                  SDP MAINT FUNC WRITE VALID ERROR FORCE, ABT Z
*                  SDP MAINT FUNC DISABLE SECDED, ABT Z 
*                  SDP MAINT FUNC WRITE CHECK BITS, ABT Z 
*                  SDP MAINT FUNC READ CHECK BITS, ABT Z
*                  SDP MAINT FUNC READ SYNDROME BITS, ABT Z 
*                  SDP MAINT FUNC READ ZERO CHECK BITS, ABT Z 
*                  SDP MAINT FUNC CLEAR MAINT FUNCTIONS, ABT Z
* 
*         ENTRY  - (PA) = PSEUDO FUNCTION CODE FOR GLOBAL FLAG REGISTER 
*                         OPERATIONS. 
* 
*         EXIT   - ERRCNA - IF CHANNEL NOT ASSIGNED.
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRIAL - IF ACCESS LEVEL TOO LOW FOR REQUEST.
* 
*         USES   - NONE 
* 
*         CALLS  - TCA, FNC, ALCHK
  
**     1. VERIFY THAT THE CHANNEL IS ASSIGNED.
* 
 SDPMF    RJM    TCA         TEST CHANNEL ASSIGNED
          RJM    ALCHK       TEST ACCESS LEVEL ASSIGNED 
          LDD    PA          GET THE FUNCTION PARAMETER 
          ADC    1110B
          RJM    FNC         PERFORM THE FUNCTION 
 SDPMF2   UJN    RDWPB8      EXIT TO STACK
  
 SDPSET   TITLE  SDPSET- SIDE DOOR PORT SET FUNCTIONS.
**        SDPSET - SIDE DOOR PORT SET FUNCTIONS.
* 
*                  SET CLOCK TIMING X, ABT Z
*                  SET REFRESH TIME X, ABT Z
*                  SET SCANNER LOCK, ABT Z
*                  SIDE DOOR CLEAR X, ABT Z 
*                  SET MAXIMUM ADDRESS X, ABT Z 
*                  SET ENVIRON STATUS BITS X, ABT Z 
* 
*         ENTRY  - (PA) = PSEUDO FUNCTION CODE FOR SIDE DOOR SET
*                         FUNCTIONS.
* 
*         EXIT   - ERRCNA - IF CHANNEL NOT ASSIGNED.
*                - ERRNIF - IF NO INACTIVE TO LAST FUNCTION.
*                - ERRCFE - IF CHANNEL FAILED TO GO EMPTY.
*                - ERRIAL - IF ACCESS LEVEL TOO LOW FOR REQUEST.
* 
*         USES   - NONE 
* 
*         CALLS  - TCA, FNC, EJM, ALCHK 
  
**     1. VERIFY THAT THE CHANNEL IS ASSIGNED.
* 
 SDPSET   RJM    TCA         TEST CHANNEL ASSIGNED
          RJM    ALCHK       TEST ACCESS LEVEL ASSIGNED 
          LDD    PA          GET THE FUNCTION PARAMETER 
          ADC    1200B
          RJM    FNC         PERFORM THE FUNCTION 
          LDD    PA 
          SBN    2           CHECK FOR SCANNER LOCK 
          ZJN    SDPSET4     IF SCANNER LOCK
  
 SDPSET1  LDI    ADDR1
          ACN    CH+40B      ACTIVATE THE CHANNEL 
          OAN    CH+40B      OUTPUT THE WORD
 SDPSET2  RJM    EJM         CHECK CHANNEL EMPTY
          DCN    CH+40B      DEACTIVATE THE CHANNEL 
 SDPSET4  UJN    SDPMF2      EXIT TO STACK
  
 STATUS   TITLE  STATUS - GET ESM, ERROR OPERATIONAL OR SDP STATUS. 
**        STATUS - GET ESM, ERROR OPERATIONAL OR SDP STATUS.
* 
*                  STATUS ESM, ABT Z
*                  STATUS ERROR, ABT Z
*                  STATUS OPERATION, ABT Z
* 
*          ESM       - INPUT 1 WORD OF ESM STATUS TO SB(0). 
*          ERROR     - INPUT 2 WORDS OF ERROR STATUS TO SB(1-2B). 
*          OPERATION - INPUT 2 WORDS OF OPERATION STATUS TO SB(3-4B). 
*          SDP       - INPUT 4 WORDS OF SIDE DOOR STATUS TO SB(0-3B). 
* 
* 
*         ENTRY  - (PA) = CODE)         0 = ESM 
*                                       1 = ERROR 
*                                       2 = OPERATION 
*                                       3 = SDP 
* 
*         EXIT   - (A)  = ESM STATUS (IF ESM STATUS IS SELECTED)
*                - (SB) = ESM STATUS
*                - (SB(1,2)) = DMA ERROR STATUS IF SELECTED.
*                - (SB(3,4)) = DMA OPERATION STATUS IF SELECTED.
*                - (SB(0-3)) = SIDE DOOR PORT STATUS IF SELECTED. 
* 
*                - ERRCNA - IF CHANNEL NOT ASSIGNED.
*                - ERRNIES- IF NO INACTIVE TO ESM STATUS FUNCTION.
*                - ERRESNR- IF ESM STATUS NOT RETURNED. 
*                - ERRNISS- IF NO INACTIVE TO SDP STATUS. 
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON ESM INPUT. 
*                - ERRNIDS- IF NO INACTIVE TO DMA STATUS. 
*                - ERRDCPE- IF DMA CHANNEL PARITY ERROR.
*                - ERRISSR- IF INCOMPLETE SDP STATUS RETURNED.
* 
*         USES   - NONE 
* 
*         CALLS  - TCA, STS, DSTS, STSDP
* 
  
**     1. VERIFY THAT THE CHANNEL IS ASSIGNED.
* 
 STATUS   RJM    TCA         TEST CHANNEL ASSIGNED
  
**     2. DETERMINE SELECTED STATUS FUNCTION SPECIFIED BY THE KEYWORD 
*         AND GO TO THE CORRECT ROUTINE 
* 
          LDD    PA          LOAD CODE
          NJN    STATUS1     IF NOT ESM STATUS REQUEST
          RJM    STS         GET ESM STATUS 
          UJN    STATUS7
  
 STATUS1  SBN    2
          MJN    STATUS3     IF STATUS ERROR
          ZJN    STATUS4     IF STATUS OPERATION
          RJM    STSDP       GET SDP STATUS 
          UJN    STATUS7
  
*         3.  GET ERROR OR OPERATION STATUS.
  
 STATUS3  LCN    0
          STM    ERRSTU      NEG ZERO TO SB 
          STM    ERRSTL      NEG ZERO TO SB 
          LDC    RESR        GET ERROR STATUS 
          UJN    STATUS5     JUMP TO INPUT STATUS 
  
 STATUS4  LCN    0
          STM    OPERSTU     NEG ZERO TO SB 
          STM    OPERSTL     NEG ZERO TO SB 
          LDC    ROSR        READ OPERATION STATUS FUNCTION 
 STATUS5  RJM    DSTS        GET ERROR STATUS 
  
 STATUS7  LJM    XENT        EXIT TO STACK
  
 STS      TITLE  STS - REQUEST AND INPUT ESM STATUS.
**        STS    - REQUEST AND INPUT ESM STATUS.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - (A) = STATUS 
* 
*                - ERRNIES- IF NO INACTIVE TO ESM STATUS FUNCTION.
*                - ERRESNR- IF ESM STATUS NOT RETURNED. 
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON ESM INPUT. 
* 
*         USES   - SB, LSF
* 
*         CALLS  - FNA, 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
          LDC    ESMSTAT     LOAD ESM STATUS FUNCTION 
          STM    LSF         SAVE STATUS FUNCTION 
          RJM    FNA         ISSUE ESM STATUS FUNCTION
          NJN    STS1        IF FUNCTION ACCEPTED 
          LDC    ER.NIES     ERROR IF NO INACTIVE TO ESM STAT FUNCTION
          UJN    STS5        ERROR EXIT 
  
 STS1     ACN    CH+40B 
          IAN    CH          INPUT ESM STATUS 
          STM    SB          SAVE EQUIPMENT STATUS
          DCN    CH+40B      DE-ACTIVATE CHANNEL AFTER STATUS INPUT 
          MJN    ERRESNR     IF NO STATUS PROVIDED
          RJM    IJM         WAIT FOR INACTIVE
          ZJN    STS3        IF INACTIVE NOT RECEIVED 
          SFM    ERCPE2,CH   CHECK FOR CHANNEL PARITY ERROR 
          UJN    STSXX       IF OK EXIT 
 STS3     LJM    ERRNIDT     ERROR NO INACTIVE AFTER DATA XFER
  
 ERRESNR  LDC    ER.ESNR     ERROR IF ESM STATUS NOT RETURNED 
 STS5     UJN    STSD1A      JUMP TO ERROR
  
 STSDP    TITLE  STSDP - REQUEST AND INPUT SDP  STATUS. 
**        STSDP  - REQUEST AND INPUT SDP STATUS.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - ERRNISS- IF NO INACTIVE TO SDP STATUS. 
*                - ERRNIDT- IF NO INACTIVE AFTER DATA TRANSFER. 
*                - ERRCPE - IF CHANNEL PARITY ERROR ON ESM INPUT. 
*                - ERRISSR- IF INCOMPLETE SDP STATUS RETURNED.
* 
* 
*         USES   - SB(0-4), D.T1, LSF 
* 
*         CALLS  - FNA, IJM 
* 
*         TIME   - MINIMUM 1X SPEED EXECUTION TIME IS 60 MICROSEC.
* 
 STSDPX   LJM    **          ENTRY/EXIT 
 STSDP    EQU    *-1
  
          LDN    4
          STD    D.T1        NUMBER OF WORDS TO CLEAR 
 STSD1    LCN    0
          STM    SB,D.T1     NEGATIVE ZERO TO SB
          SOD    D.T1 
          PJN    STSD1
          LDC    SDPSTAT     LOAD SDP STATUS FUNCTION 
          STM    LSF         SAVE STATUS FUNCTION 
          RJM    FNA         ISSUE SDP STATUS FUNCTION
          NJN    STSD2       IF FUNCTION ACCEPTED 
          LDC    ER.NISS     ERROR IF NO INACTIVE TO SDP STAT FUNCTION
 STSD1A   UJN    STSD4       JUMP TO ERROR
  
 STSD2    ACN    CH+40B 
          LDN    4B 
          IAM    SB,CH       INPUT SDP STATUS 
          NJN    ERRISSR     ERROR IF ALL WORDS NOT INPUTTED
          DCN    CH+40B      DE-ACTIVATE CHANNEL AFTER STATUS INPUT 
          RJM    IJM         WAIT FOR INACTIVE
          ZJN    STSD3       IF INACTIVE NOT RECEIVED 
          SFM    ERCPE3,CH   CHECK FOR CHANNEL PARITY ERROR 
          UJN    STSDPX      IF OK EXIT 
 STSD3    LJM    ERRNIDT     ERROR NO INACTIVE AFTER DATA XFER
  
 ERRISSR  LDC    ER.ISSR     NOT ALL WORDS INPUTTED ON SDP STATUS 
 STSD4    UJN    ERCPE4      JUMP TO ERROR
  
 ERCPE    TITLE  ERCPE - CHANNEL PARITY ERROR ROUTINE.
**        ERCPE  - CHANNEL PARITY ERROR ROUTINE.
* 
*         ENTRY  - NONE 
* 
*         EXIT   - ERRCPE  - IF CHANNEL PARITY ERROR ON INPUT 
* 
*         USES   - NONE 
* 
*         CALLS  - STS, DSTS
* 
 ERCPE1   RJM    STS         TAKE ESM STATUS
 ERCPE2   LDM    FLCIO       CHECK IF DMA PRESENT 
          ZJN    ERCPE3      IF DMA NOT PRESENT 
          LDC    RESR        GET ERROR STATUS 
          RJM    DSTS        READ DMA ERROR/OPERATION STATUS
          LDC    ROSR        GET OPERATIONAL STATUS 
          RJM    DSTS        TAKE CHANNEL STATUS
 ERCPE3   LDC    ER.CPE      CHANNEL PARITY ERROR 
 ERCPE4   UJN    ERR         JUMP TO ERROR
  
 TCA      TITLE  TCA - TEST CHANNEL ASSIGNMENT. 
**        TCA    - TEST CHANNEL ASSIGNMENT. 
* 
*         ENTRY  - BD.CHFG =  1  IF CHANNEL NOT ASSIGNED
*                             0  IF CHANNEL ASSIGNED
* 
*         EXIT   - 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
  
 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  - CLRDMA 
* 
 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 
*IF DEF,MVE,3 
          LDD    BD.ALA      GET ACCESS LEVEL ATTRIBUTES
          LPN    BD.NCC      NO CHANNEL CLEANUP 
          NJN    ERR2        IF NO CHANNEL CLEANUP
*IF -DEF,MVE,3
          LDD    BD.AL
          SBN    AL21 
          ZJN    ERR2        ACCESS LEVEL CHECK 
          IJM    ERR2,CH     CLEAN UP CHANNEL 
          DCN    CH+40B 
 ERR2     LDD    D.Z1 
          LPN    77B         MASK ERROR CODE
          ADC    7300B       ADD IN BIAS FOR PESMD 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    6520B       INPUT BUFFER 
 LIB      EQU    505B        LENGTH OF INPUT AND OUTPUT BUFFERS 
 OB       EQU    IB+LIB      OUTPUT BUFFER
 SB       EQU    OB+LIB      STATUS BUFFER
 OPERSTU  EQU    SB+1B       DMA OPERATION STATUS BITS 12-15
 OPERSTL  EQU    SB+2B       DMA OPERATION STATUS BITS 0-11 
 ERRSTU   EQU    SB+3B       DMA ERROR STATUS BITS 12-15
 ERRSTL   EQU    SB+4B       DMA ERROR STATUS BITS 0-11 
 RESA     EQU    SB+5B       ITERATION COUNT FOR RESERVE COMMAND
 OPTYP    EQU    SB+6B       CURRENT OPERATION BEING EXECUTED 
 TREG     EQU    SB+7B       T REGISTER CONTENTS
 CHAN     EQU    SB+10B      CHANNEL NUMBER 
 EQNU     EQU    SB+11B      EQUIPMENT NUMBER 
 UNNU     EQU    SB+12B      UNIT NUMBER
 ESMA     EQU    SB+13B      ESM ADDRESS FOR WRITE/READS
 ESMB     EQU    SB+14B      ESM ADDRESS FOR WRITE/READS
 FLCIO    EQU    SB+15B      FLAG FOR CIO PP/CHANNEL
 ADDUU    EQU    SB+16B      CM ADDRESS FOR DMA WRITE/READS 
 ADDU     EQU    SB+17B      CM ADDRESS FOR DMA WRITE/READS 
 ADDL     EQU    SB+20B      CM ADDRESS FOR DMA WRITE/READS 
 LSF      EQU    SB+21B      LAST STATUS FUNCTION ISSUED
 LSB      EQU    22B         LENGTH OF STATUS BUFFER
  
          ERRPL  *-IB-1      ERROR IF PESMD PRODUCT OVERLAY OVERFLOW
 INITIAL  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
*IF DEF,MVE 
          LDM    BD.IOU 
          NJN    INIT.1      IF NOT I0
          LDC    INITB       (A)=ERROR ADDRESS FOR IOU ERROR
          LJM    INIT11.1    GO PROCESS ERROR 
 INIT.1   LDM    BD.IOU 
          LPN    40B
          ZJN    INIT0       IF NIO CHANNEL 
          LDM    BD.DMA 
          NJN    INIT0       IF DMA BUFFER ASSIGNED 
          LDC    INITC
          LJM    INIT11.1    GO PROCESS ERROR 
*ENDIF
 INIT0    LDN    0
          STM    SB,D.Z1     CLEAR STATUS BUFFER
          AOD    D.Z1 
          SBN    LSB
          NJN    INIT0       IF STATUS BUFFER NOT CLEARED 
          LDM    BD.EQ
*IF DEF,MVE 
          SHN    -6 
          LPN    70B
          STM    UNNU 
          LDM    BD.EQ
          LPN    7
          RAM    UNNU 
*ENDIF
*IF -DEF,MVE
          LPN    77B
          STM    UNNU        UNIT TO STATUS BUFFER
*ENDIF
          LDN    0
          STM    EQNU        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 
*IF DEF,MVE,1 
 INIT3    LDM    BD.IOU 
*IF -DEF,MVE,1
 INIT3    LDM    BD.CHAN
          LPN    40B         REMOVE CHANNEL NUMBER
          STM    FLCIO       SAVE WHETHER CIO CHANNEL 
          ADM    BD.CHAN
          STM    CHAN        I/O  CHANNEL TO STATUS BUFFER
          LPN    37B         REMOVE CHANNEL BIAS
          STD    D.T2 
          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 
*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
*IF -DEF,MVE
*         WRITE PPU MESSAGES TO CM
  
 INIT5    LDM    BD.MSGA     GET  PPU  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  PPU  WORDS
          STD    D.Z2        CLEAR POINTER
          LDD    D.RA        PUT  RA  IN  A  REGISTER 
          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
  
*         SET DIRECT CELLS
  
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER 
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER 
*IF -DEF,MVE,2
          LDC    100D        100  MSEC DELAY IN BD.RCH
          STM    DLYDCH      MODIFY DELAY USED ON REL AND RES CHANNEL 
*IF DEF,MVE 
          LDN    BD.ESM      INDEX INTO CM COMM BUFF FOR ESM ADRS 
          STM    BD.IDEX
          LDN    BD.CMB 
          RJM    BD.SETR     SETUP THE R REGISTER 
          CRDL   D.Z7        READ ESM ADDRESS FROM CM 
*ENDIF
*IF -DEF,MVE
          LDD    D.RA        GET MALETS RELATIVE ADDRESS
          SHN    6           RA*100 
          ADM    P.MB        GET MESSAGE BUFFER ADDRESS 
          ADN    4           FOURTH WORD OF MESSAGE BUFFER
          CRD    D.T0        READ TO ADDRESS 10 
*ENDIF
          LDD    D.T1        GET UPPER 12 BITS
          STM    ESMA        SAVE AWAY FOR READ/WRITE 
          LDD    D.T2        GET LOWER 12 BITS
          STM    ESMB 
  
*         VERIFY THAT THE ASSIGNED DEVICE CODE IS SUPPORTED 
  
          LDD    DC          DEVICE CODE CURRENTLY ASSIGNED 
          ADC    -ESM2       TEST IF DEVICE CODE FOR ESM II 
          ZJN    INIT12 
          SBN    SNSS-ESM2   TEST IF DEVICE CODE FOR STORNET
          ZJN    INIT12 
*IF DEF,MVE 
          SBN    1           TEST IF DEVICE CODE FOR ESM2 SDP 
          ZJN    INIT12 
          SBN    1           TEST IF DEVICE CODE FOR STORNET SDP
          ZJN    INIT12 
*ENDIF
          LDC    INITA       (A) = POINTER TO ERROR MSG IF NO SUPPORT 
*IF DEF,MVE 
 INIT11.1 STM    INIT6.1
          STM    INIT9.1
          LJM    INIT5.3     PROCESS ERROR MESSAGE
*ENDIF
 INIT12   LJM    START       EXIT WITH (A) = ERROR/NO ERROR FLAG
  
 INITA    DIS    ,*  DC NOT SUPPORTED*
*IF DEF,MVE,2 
 INITB    DIS    ,*PO NOT SUPPORTED BY IOU* 
 INITC    DIS    ,*DMA BUFFER NOT ASSIGNED* 
  
*         TABLE OF PPU SPEED SWITCHES 
  
 TSPEED   CON    FJM2 
          CON    IJM2 
          DATA   0           END OF SPEED SWITCHES TABLE
  
 PPMSGS   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.NIES,EC.NIES,(NO INACTIVE TO ESM STATUS)
          MMSG   ER.ESNR,EC.ESNR,(ESM STATUS NOT RETURNED)
          MMSG   ER.OSE,EC.OSE,(OPERATIONAL STATUS ERROR) 
          MMSG   ER.DNA,EC.DNA,(ALL DATA NOT TAKEN FROM PP/CM)
          MMSG   ER.IDR,EC.IDR,(INCOMPLETE DATA TO PP OR CM)
          MMSG   ER.IAL,EC.IAL,(ACCESS LEVEL TOO LOW FOR REQ) 
          MMSG   ER.AES,EC.AES,(ABNORMAL ESM STATUS)
          MMSG   ER.CFE,EC.CFE,(CH FAILED TO GO EMPTY)
          MMSG   ER.NISS,EC.NISS,(NO INACTIVE TO SDP STATUS)
          MMSG   ER.NIDT,EC.NIDT,(NO INACTIVE AFTER DATA XFER)
          MMSG   ER.CPE,EC.CPE,(CHANNEL PE ON ESM INPUT)
          MMSG   ER.NIDS,EC.NIDS,(NO INACTIVE TO DMA STATUS)
          MMSG   ER.DCPE,EC.DCPE,(DMA CHANNEL PARITY ERROR) 
          MMSG   ER.DESS,EC.DESS,(DMA ERROR STATUS SET) 
          MMSG   ER.ISSR,EC.ISSR,(INCOMPLETE SDP STATUS RETURNED) 
 MMSGL.   EQU    MMSGL
          DATA   0
****
 TCHAN    EQU    *           CREATE CHANNEL TABLE 
          LIST   D
          HERE
          LIST   *
          DATA   0           END OF CHANNEL TABLE 
*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
*IF DEF,MVE 
          ERRPL  *-SB-1      ERROR IF PESMD OVERLAY OVERFLOW
*ENDIF
*IF -DEF,MVE
          IFEQ   NOSBE,1,1
          ERRPL  *-7773B     ERROR IF PESMD OVERLAY OVERFLOW
*ENDIF
          QUAL   *
