*COMDECK,LCN1 
          EJECT 
 5LC      SEGMENT POVLA 
          ORG    POVLA
          QUAL   LCN
*CALL,VERS
          COMMENT LCN PRODUCT OVERLAY FOR MALET "VERS"
          TITLE  LCN HIGH-LEVEL I/O PRODUCT OVERLAY FOR MALET.
**        LCN HIGH-LEVEL NAD LANGUAGE 
*         ------------------------------------------------------------------
* 
*         THE FOLLOWING COMMANDS ARE FOR NETWORK ACCESS DEVICES  (NADS) 
*         ON  A  LOOSELY COUPLED NETWORK (LCN). THE PRODUCT OVERLAY 5LL 
*         EXECUTES THESE COMMANDS AND  IS  DRIVEN  BY  THE  INSTRUCTION 
*         STACK CREATED BY THE MALET COMPILER.
* 
*         THE  LCN PRODUCT OVERLAY SUPPORTS A PROGRAMMABLE INPUT BUFFER 
*         OF 505 (OCTAL)  12-BIT WORDS, AN OUTPUT BUFFER OF 505 (OCTAL) 
*         12-BIT WORDS AND A STATUS BUFFER OF 52 (OCTAL) 12-BIT  WORDS. 
*         DATA IS WRITTEN TO THE NAD FROM THE OUTPUT BUFFER AND IS READ 
*         FROM  THE  NAD TO THE INPUT BUFFER. THE STATUS BUFFER IS USED 
*         TO HOLD NAD STATUS  WORDS.  TABLE  18-1  LISTS  THE  COMMANDS 
*         SUPPORTED BY THIS PRODUCT OVERLAY.
* 
*         ------------------------------------------------------------- 
*         / COMMAND  AL   DESCRIPTION                                 / 
*         /-----------------------------------------------------------/ 
*         / ABORT    0   SEND ABORT FUNCTION.                         / 
*         / ACCEPT   0   SEND ACCEPT FUNCTION.                        / 
*         / AUTODMP  0   AUTODUMP REMOTE NAD.                         / 
*         / CONNECT  0   CONNECT PATH.                                / 
*         / DISCONN  0   DISCONNECT PATH.                             / 
*         / IMC     5/6  INTERFACE MASTER CLEAR.                      / 
*         / INQUIRE  0   INQUIRE PATH.                                / 
*         / LOAD     5   DOWNLOAD NAD CODE FROM SYSRD FILE.           / 
*         / LOOP     0   LOCAL NAD LOOPBACK.                          / 
*         / MAINT   0/5  MAINTENANCE READ/WRITE/FUNCTION.             / 
*         / MEMORY 0/5/6 MEMORY READ/WRITE.                           / 
*         / PMC     5/6  PROCESSOR MASTER CLEAR.                      / 
*         / PURGE    0   PURGE PATH.                                  / 
*         / READ     0   READ MESSAGE.                                / 
*         / READY    0   SEND READY FUNCTION.                         / 
*         / REJECT   0   SEND REJECT FUNCTION.                        / 
*         / REL      0   RELEASE UNIT AND CHANNEL IF ASSIGNED.        / 
*         / RES      0   RELEASE THE CHANNEL IF ASSIGNED,  PERFORM    / 
*         /              SYSTEM COMMUNICATIONS,AND RESERVE CHANNEL.   / 
*         / RESET    0   RESET I/O POINTERS.                          / 
*         / RESYNC   0   RESYNC TCU.                                  / 
*         / SELECT   0   SELECT PATH.                                 / 
*         / SEND     0   SEND CONTROL MESSAGE.                        / 
*         / SMC     5/6  SOFT MASTER CLEAR.                           / 
*         / START    0   START NAD RUNNING.                           / 
*         / STATUS   0   GET HARDWARE/CONTROLWARE/DETAIL/PATH STATUS. / 
*         / STEP     5   STEP PROCESSOR.                              / 
*         / TRANS    0   SEND TRANSMIT DATA FUNCTION.                 / 
*         / TRUNK    0   TRUNK LOOPBACK FUNCTION.                     / 
*         / WRITE    0   WRITE MESSAGE TO ASSIGNED NAD.               / 
*         /-----------------------------------------------------------/ 
*         TABLE 18-1 LISTS THE COMMANDS SUPPORTED BY PRODUCT OVERLAY. 
          EJECT 
***              ---------------------------------------------- 
*                /  EM      EC            MESSAGES            / 
*                /--------------------------------------------/ 
*                /  103*   6004   WC OR BUFFER INDEX ERROR    / 
*                /  107    6010   CH NOT FULL ON STATUS       / 
*                /  110    6011   CH ACTIVE ON ENTRY          / 
*                /  111    6012   CH INACTIVE AFTER ACN       / 
*                /  112    6013   CH ACTIVE BEFORE FUNCTION   / 
*                /  113    6014   CH NOT RESERVED             / 
*                /  114    6015   NO INACTIVE ON FUNCTION     / 
*                /  115*   6016   ILLEGAL COMMAND FOR DC      / 
*                /  116    6017   ALL DATA NOT ACCEPTED       / 
*                /  117    6020   CH INACTIVE ON ENTRY        / 
*                /  120    6021   ACTIVE AN EMPTY ON INPUT    / 
*                /  121    6022   CONTROLWARE STATUS TIMEOUT  / 
*                /  122    6023   HEADER TABLE ABSENT         / 
*                /  123    6024   EMPTY SYSRD RECORD          / 
*                /  124*   6025   ILLEGAL FUNCTION REQUEST    / 
*                /  125    6026   CHANNEL NOT PRIMED          / 
*                /  126    6027   ABNORMAL HARDWARE STATUS    / 
*                /  127    6030   ACCESS LEVEL TOO LOW        / 
*                /  130    6031   UNEXPECTED CH DISCONNECT    / 
*                /  131    6032   ALL CH DATA NOT RECEIVED    / 
*                /  132    6033   ABNORMAL CONTROLWARE STATUS / 
*                /  133    6034   DATA MISCOMPARE             / 
*                /  134    6035   INVALID BUFFER SIZE         / 
*                /  135    6036   RECEIVED NAK STATUS         / 
*                /  136    6037   NO PATH SELECTED            / 
*                /  137    6040   CH PE ON INPUT              / 
*                ---------------------------------------------
*                TABLE 18-2 ERROR MESSAGES GENERATED FOR ERRORS 
*                           DETECTED BY THE  PRODUCT OVERLAY. 
* 
*                * ABORT ADDRESS NOT TAKEN (HARD ABORT).
          EJECT 
***                               ------------------
*                         SB(00B) /  NAD HARDWARE  /
*                                 /     STATUS     /
*                                 /----------------/
*                                 / NAD CONTROLWARE/
*                         SB(01B) /   STATUS       /
*                                 /----------------/----------------- 
*                         SB(02B) / GENERAL/DETAIL / GENERAL/DETAIL  /
*                            .    / STATUS  LOCAL  / STATUS REMOTE   /
*                         SB(27B) /(26 OCTAL WORDS)/ (26 OCTAL WORDS)/
*                                 /----------------/----------------- 
*                         SB(30B) / P0 2**12-2**15 /
*                                 /----------------/
*                         SB(31B) / P1 2**12-2**15 /
*                                 /----------------/
*                         SB(32B) / P2 2**12-2**15 /
*                                 /----------------/
*                         SB(33B) / P3 2**12-2**15 /
*                                 /----------------/
*                         SB(34B) / P4 2**12-2**15 /
*                                 /----------------/
*                         SB(35B) / P5 2**12-2**15 /
*                                 /----------------/
*                         SB(36B) / P6 2**12-2**15 /
*                                 /----------------/
*                         SB(37B) / P7 2**12-2**15 /
*                                 /----------------/
*                         SB(40B) / P8 2**12-2**15 /
*                                 /----------------/
*                         SB(41B) / P9 2**12-2**15 /
*                                 /----------------/--
*                         SB(42B) / AC 2**8-2**15  / I
*                                 /----------------/ I---ACCESS CODE
*                         SB(43B) / AC 2**0-2**7   / I
*                                 /----------------/--   WORDS
*                         SB(44B) / WT 2**12-2**15 / I---TRANSMITTED
*                                 /----------------/--
*                         SB(45B) / BUFFER SIZE    / I---DEFINED BUFFER 
*                                 /----------------/--   SIZES
*                         SB(46B) / CHANNEL        /
*                                 /----------------/
*                         SB(47B) / EQUIPMENT      /
*                                 /----------------/
*                         SB(50B) / LOGICAL TCU    /
*                                 / ADDRESS        /
*                                 /----------------/
*                         SB(51B) / TCU ENABLES    /
*                                 /----------------/
*               TABLE 18-3 DEFINES THE LAYOUT OF THE STATUS BUFFER. 
          EJECT 
  
*         EQUATES FOR ERROR CODES 
  
 EC.FLE   EQU    1           ADDRESS OUT OF RANGE ERROR 
 EC.TL    EQU    2           TIME LIMIT ERROR 
 EC.SEE   EQU    3           SUBROUTINE ENTRY OR EXIT ERROR 
 EC.WC    EQU    4           BUFFER REFERENCE OR WC ERROR 
 EC.RES   EQU    5           RESERVED FOR BASIC DRIVER
 EC.RES1  EQU    6           RESERVED FOR BASIC DRIVER
 EC.RES2  EQU    7           RESERVED FOR BASIC DRIVER
 EC.NFS   EQU    10B         CH NOT FULL ON STATUS
 EC.AAE   EQU    11B         CH ACTIVE ON ENTRY 
 EC.IAA   EQU    12B         CH INACTIVE AFTER ACTIVATE 
 EC.ABF   EQU    13B         CH ACTIVE BEFORE FUNCTION
 EC.CNR   EQU    14B         CH NOT RESERVED
 EC.NIF   EQU    15B         NO INACTIVE TO FUNCTION
 EC.ILL   EQU    16B         ILLEGAL COMMAND FOR DC 
 EC.DNA   EQU    17B         NO EMPTY TO LAST OUTPUT
 EC.IOE   EQU    20B         CH INACTIVE ON ENTRY 
 EC.AEI   EQU    21B         HUNG ACTIVE AND EMPTY ON INPUT 
 EC.CSNR  EQU    22B         CONTROLWARE STATUS TIMEOUT 
 EC.NHT   EQU    23B         HEADER TABLE ABSENT
 EC.EMT   EQU    24B         EMPTY SYSRD RECORD 
 EC.CNP   EQU    26B         CHANNEL NOT PRIMED 
 EC.AHS   EQU    27B         ABNORMAL HARDWARE STATUS 
 EC.ATL   EQU    30B         ACCESS LEVEL TOO LOW 
 EC.UCD   EQU    31B         UNEXPECTED CH DISCONNECT 
 EC.DNR   EQU    32B         ALL DATA NOT RECEIVED
 EC.ACS   EQU    33B         ABNORMAL CONTROLWARE STATUS
 EC.DMC   EQU    34B         DATA MISCOMPARE
 EC.IBS   EQU    35B         INVALID BUFFER SIZE
 EC.NAK   EQU    36B         RECEIVED NAK STATUS
 EC.NPS   EQU    37B         NO PATH SELECTED 
 EC.CPE   EQU    40B         CHANNEL PARITY ERROR ON INPUT
  
*         DIRECT CELL EQUATES.
  
 PA       EQU    10B         STACK COMMAND PARAMETERS 
 S1       EQU    60B         LOWER 12 BITS OF ABT ADDRESS 
 S2       EQU    61B         UPPER 6 BITS OF ABT ADDRESS
 SC       EQU    62B         LENGTH OF IB/OB PLUS 1 
 IA       EQU    63B         IBFWA
 OA       EQU    64B         OBFWA
 ALR      EQU    65B         SCRATCH (ACCESS LEVEL REQUIRED ON ENTRY) 
 CH       EQU    0           USED TO FLAG CHANNEL INSTRUCTIONS
  
*         FUNCTION EQUATES
  
 WR       EQU    012B        WRITE MEMORY 
 RD       EQU    002B        READ MEMORY
 STATH    EQU    200B        HARDWARE STATUS
 STATC    EQU    201B        CONTROLWARE STATUS 
 SA       EQU    202B        SET ADDRESS AND LENGTH 
 CPE      EQU    204B        CLEAR MEMORY PARITY ERROR
 DIAG     EQU    205B        DIAGNOSTIC LOOP BACK 
 IMC      EQU    210B        INTERFACE MASTER CLEAR 
 STEP     EQU    301B        PROCESSOR STEP 
 GO       EQU    302B        PROCESSOR GO 
 PMC      EQU    304B        PROCESSOR MASTER CLEAR 
  
 SMC      EQU    400B        SOFT MASTER CLEAR
 STAT     EQU    401B        NAD STATUS 
 ABORT    EQU    403B        ABORT
 SCON     EQU    404B        SEND CONTROL MESSAGE 
 COP      EQU    405B        CONNECT PATH 
 APA      EQU    406B        ACTIVE PATH
 SIP      EQU    407B        SELECT INPUT PATH
 RDY      EQU    410B        READY
 ACPT     EQU    411B        ACCEPT 
 REJT     EQU    412B        REJECT 
 ICM      EQU    413B        INQUIRE CONTROL MESSAGE
 ISCM     EQU    414B        INQUIRE SELECTED CONTROL MESSAGE 
 IQP      EQU    415B        INQUIRE PATH 
 IQSP     EQU    416B        INQUIRE SELECTED PATH
 IRCM     EQU    417B        INQUIRE REJECTED CONTROL CONTROL MESSAGE 
 PST      EQU    420B        PATH STATUS
 DCP      EQU    421B        DISCONNECT PATH
 PUPA     EQU    422B        PURGE PATH 
 XMIT     EQU    423B        TRANSMIT DATA
 WD       EQU    424B        WRITE DATA 
 WRC      EQU    425B        WRITE CODE 
 RC       EQU    426B        READ CODE
 RRD      EQU    427B        READ DATA
 XMITM    EQU    433B        TRANSMIT DATA WITH MARK
 SPN      EQU    434B        SELECT PATH BY NAME
 RPST     EQU    435B        READ PATH STATUS TABLE 
 CMP      EQU    440B        CONNECT MAINTENANCE PATH 
 MPF      EQU    441B        FUNCTION FOR REMOTE FUNCTION 
 MPI      EQU    442B        MAINTENANCE INPUT FUNCTION 
 RSC      EQU    443B        READ SHORT CODE
 DFP      EQU    444B        DISCONNECT AND FLUSH PATH
 DNP      EQU    445B        DISCONNECT NAMED PATHS 
 RSR      EQU    446B        REMOTE STATUS REQUEST
 MPIT     EQU    447B        MAINTENANCE INPUT INQUIRE
 RSET     EQU    450B        RESET
 SBIN     EQU    451B        SELECT BINARY MODE 
  
*         REMOTE NAD COMMAND EQUATES
  
 RESYNC   EQU    0           REMOTE RESYNC
 RPMC     EQU    1           REMOTE PAROCESSOR MASTER CLEAR 
 RDATA    EQU    2           REMOTE DATA
 RDIAG    EQU    3           REMOTE TRUNK DIAGNOSTIC
 RAL      EQU    4           REMOTE AUTOLOAD
 RAD      EQU    5           REMOTE AUTODUMP
 RGO      EQU    6           REMOTE GO
 RSTEP    EQU    7           REMOTE STEP
  
*         STATUS EQUATES
  
 ACK      EQU    1           ACKNOWLEDGMENT 
 NAK      EQU    2           NEGATIVE ACKNOWLEDGEMENT 
 DMK      EQU    3           DATA WITH MARK 
 RSA      EQU    5           PATH INPUT DATA IS REMOTE STATUS 
 MFR      EQU    6           MAINTENANCE PATH INPUT DATA
 TNR      EQU    17B         DATA TRANSFER NOT READY
 SALT     EQU    14B         STREAM ALERT 
  
*         ASCII EQUATES FOR PATH NAME 
  
 ASCIID   EQU    104B        (D)
 ASCIIA   EQU    101B        (A)
  
*         EQUATES FOR STATUS RECEIVED 
  
 MASKHS   EQU    735B        MASK FOR BAD HARDWARE STATUS 
 MASKCPE  EQU    10B         MASK FOR CHANNEL PARITY ERROR
          EJECT 
**        ERROR MESSAGES - WRITTEN TO CM DURING INITIALIZATION. 
*         MMSG MARCO. 
* 
*         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 
  
          VFD    12/IB       FWA OF INPUT BUFFER
          VFD    12/OB       FWA OF OUTPUT BUFFER 
          VFD    12/SB       FWA OF STATUS BUFFER 
          VFD    12/LIB      LENGTH OF INPUT BUFFER 
          VFD    12/LIB      LENGTH OF OUTPUT BUFFER
          VFD    12/LSB      LENGTH OF STATUS BUFFER
          VFD    12/BD.VERS  VERSION NUMBER 
  
**         1. IF (A) EQUAL 777776B CONTINUE AT STEP 5.
* 
 XENT     LJM    ** 
          LMC    777776B
          ZJN    ENT2        IF ABT ADDRESS ALREADY STORED
  
**        2. IF (A) EQUAL 777777B SET ENTRY TO REL AND ABT ADDRESS TO 
*            777777B. 
* 
          LMN    1
          NJN    ENT1        IF ENTRY FROM MLD
          STD    PA          SAVE ENTRY POINT 
          STD    ALR
 ENT1     LMC    777777B
  
**        3. SAVE ABORT ADDRESS.
* 
          STD    S1 
          SHN    -12
          STD    S2 
  
**        4. IF ENTRY POINT RES OR REL CONTINUE AT STEP 9.
* 
          LDD    PA 
          SBN    FNOCH
          MJN    ENT6        IF RES OR REL
  
**        5. CLEAR WT REGISTER. 
* 
 ENT2     LDN    0
          STD    WT 
  
**        6. IF ACCESS LEVEL REQUIRED (ALR BITS 2**0-2**4) LESS THAN
*            ACCESS LEVEL ASSIGNED (AL) CONTINUE AT STEP 9. 
* 
          LDD    ALR         GET REQUIRED ACCESS LEVEL
          LPN    17B
          SBD    AL          SUBTRACT ASSIGNED ACCESS LEVEL 
          MJN    ENT3        IF ACCESS LEVEL OK 
          NJN    ERRATL      IF ASSIGNED LESS THAN REQUIRED 
 ENT2A    UJN    ENT3        *** MODIFIED IF DC=301 TO DATA 0 *** 
  
**        7. IF ACCESS LEVEL REQUIRED (ALR BIT 2**4) BIT CLEAR CONTINUE 
*            AT STEP 9. 
* 
          LDD    ALR
          SHN    17-4 
          PJN    ENT3        IF HIGHER ACCESS LEVEL NOT REQUIRED
  
**        8. GENERATE ERROR CODE 6030 AND ABORT.
* 
 ERRATL   LDC    ER.ATL      ACCESS LEVEL TOO LOW 
          UJN    ENT5 
  
**        9. IF DEVICE CODE 301 OCTAL NOT REQUIRED CONTINUE AT STEP 11. 
* 
 ENT3     LDD    ALR
          SHN    17-5 
          MJN    ENT4        IF DEVICE 301 NOT REQUIRED 
  
**        10. IF DC 301 OCTAL NOT ASSIGNED GENERATE ERROR CODE 6016 
*             AND ABORT.
* 
 ENT3A    UJN    ENT4        *** MODIFIED IF DC=300 TO DATA 0 *** 
 ERRILL   LDC    ER.ILL 
          UJN    ENT5 
  
**        11. IF CHANNEL RESERVED CONTINUE AT STEP 12, ELSE GENERATE
*                   ERROR CODE 6014 AND ABORT.
* 
 ENT4     LDM    BD.CHFG
          ZJN    ERRCNR      IF CHANNEL NOT RESERVED
  
**        13. JUMP TO SPECIFIED ENTRY.
* 
 ENT6     LDM    TBLENT,PA
          STD    D.Z1 
          LDD    PA 
          SBN    ENTRJM 
          PJN    ENT7        IF RETURN JUMP ENTRY POINT 
          LJM    0,D.Z1      PROCESS COMMAND
  
 ENT7     LDD    PA+1 
          RJM    0,D.Z1      EXECUTE ROUTINE
          LJM    XENT        RETURN TO STACK
  
 ERRCNR   LDC    ER.CNR 
 ENT5     LJM    ERROR
  
*         LCN HIGH-LEVEL COMMANDS 
  
 TBLENT   VFD    12/REL      RELEASE SUBROUTINE 
          VFD    12/RES      RESERVE SUBROUTINE 
 FNOCH    EQU    *-TBLENT 
          VFD    12/AUTO     AUTODMP SUBROUTINE 
          VFD    12/CONN     CONNECT PATH SUBROUTINE
          VFD    12/DIS      DISCONNECT PATH SUBROUTINE 
          VFD    12/FCOM     PROCESS /ABORT/ACCEPT/IMC/FUNC/
*                            PURGE/READY/REJECT/RESET/SMC/TRANS/PMC 
*                            SELECT PATH/START/STEP/
          VFD    12/INQ      INQUIRE
          VFD    12/LOAD     LOAD LCN NAD SUBROUTINE
          VFD    12/LOOP     LOOP DATA IN NAD 
          VFD    12/MEM      MEMORY READ/WRITE SUBROUTINE 
          VFD    12/READ     READ DATA/CODE/SHORT 
          VFD    12/SEL      SELECT PATH BY NAME
          VFD    12/SEND     SEND CONTROL MESSAGE 
          VFD    12/WRITE    WRITE DATA/CODE/SHORT
  
*         LCN HIGH-LEVEL RETURN JUMP COMMANDS.
  
 ENTRJM   EQU    *-TBLENT 
          VFD    12/HSTAT    STATUS SUBROUTINE
          VFD    12/INBUF    INPUT SUBROUTINE 
          VFD    12/MAINF    MAINTENANCE FUNCTION SUBROUTINE
          VFD    12/OUTBUF   OUTPUT SUBROUTINE
          VFD    12/READY    READY SUBROUTINE 
 LTBL     EQU    *-TBLENT+1 
          EJECT 
 REL      TITLE  REL - RELEASE DEVICE AND I/O CHANNEL TO SYSTEM.
**        REL - RELEASE DEVICE AND I/O CHANNEL TO SYSTEM. 
* 
*         RELEASE DEVICE AND I/O CHANNEL TO  THE  SYSTEM  IF  ASSIGNED. 
*         CALL  BD.DCH  TO FORCE COMMUNICATIONS WITH THE CPU EXECUTIVE. 
*         THIS COULD CAUSE THE PPU DRIVER TO CHECKPOINT AND DROP IF THE 
*         DROP  OR  CHECKPOINT  FLAGS  ARE  ON FROM THE EXEC.  IF ERROR 
*         FLAGS ARE SET AT OUR CONTROL POINT, THE PPU DRIVER IS DROPPED 
*         ALSO. 
* 
* 
*         ENTRY-  (BD.CHFG) = 0 IF CH NOT ASSIGNED. 
*                 (BD.CHFG) = 1 IF CH ASSIGNED. 
*                 (S2)      = 77B IF CALL FROM MLD. 
*         EXIT - (BD.CHFG) = 0. 
*                (REL2)    = 0. 
* 
*         USES   - NONE.
* 
*         CALLS- BD.DCH.
* 
  
**        1.  IF CHANNEL NOT ASSIGNED THEN STEP 5.
* 
 REL      LDM    BD.CHFG
          ZJN    REL2        IF NOT CURRENTLY ASSIGNED
  
**        2.  IF CHANNEL INACTIVE THEN STEP 4.
* 
          IJM    REL1,CH     IF CHANNEL INACTIVE
  
**        3.  IF RELEASE FROM MAIN DRIVER THEN STEP 4 ELSE
*             IF CHANNEL ACTIVE THEN GENERATE ERROR CODE
*             FOR CH ACTIVE ON ENTRY AND ABORT. 
* 
          LDD    S2 
          LMN    77B
          ZJN    REL2        IF REQUEST FROM BASIC DRIVER 
 ERRAAE   LDC    ER.AAE      CHANNEL ACTIVE FOR RELEASE 
          UJN    ENT5        ERROR
  
**        4.  IF PATH IS SELECTED PURGE IT THEN STEP 5. 
* 
 REL1     RJM    DPATH       PURGE PATH IF SELECTED 
  
**        5.  PERFORM RELEASE CHANNEL ROUTINE AND RETURN. 
* 
 REL2     RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC 
          UJN    RES2        EXIT TO CALLER 
          EJECT 
 RES      TITLE  RES - RESERVE I/O CHANNEL. 
**        RES - RESERVE I/O CHANNEL.
* 
*         RELEASE  DEVICE  VIA  DEQP.   DROP  THE  I/O CHANNEL IF BEING 
*         REQUESTED  BY  SYSTEM.  COMMUNICATE  WITH  SYSTEM,  AND  TEST 
*         DROP/CHECKPOINT/ERROR  FLAGS. THE I/O CHANNEL IS THEN REQUES- 
*         TED AND CHANNEL ASSIGNED FLAGS  ARE  SET  IN  ALL  THE  OTHER 
*         SUBROUTINES.
* 
*         ENTRY-  (BD.CHFG) = 0 IF CH NOT ASSIGNED. 
*                 (BD.CHFG) = 1 IF CH ASSIGNED. 
*                 (S2)      = 77B IF CALL FROM MLD. 
* 
*         EXIT - I/O CHANNEL ASSIGNED AND CHANNEL ASSIGNED FLAGS ARE
*                SET IN ALL THE OTHER SUBROUTINES.
* 
*         USES   - EC, EA, EM.
* 
*         CALLS- BD.RCH 
* 
  
**        1.  CLEAR EC, EA, EM REGISTERS. IF CHANNEL NOT RESERVED 
*             THEN STEP 2 ELSE IF CHANNEL ACTIVE ON ENTRY THEN
*             GENERATE CH ACTIVE ON ENTRY ERROR AND ABORT.
* 
 RES      LDN    0
          STD    EC          CLEAR ERROR REGISTERS
          STD    EA 
          STD    EM 
          LDM    BD.CHFG
          ZJN    RES1        IF NOT CURRENTLY ASSIGNED
          AJM    ERRAAE,CH   CHANNEL ACTIVE ON ENTRY
          RJM    DPATH       PURGE PATH IF SELECTED 
  
**        2.  PERFORM RESERVE CHANNEL SEQUENCE THEN RETURN. 
* 
 RES1     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED
  
 RES2     LJM    XENT        RETURN TO STACK
          EJECT 
 AUTO     TITLE  AUTO - AUTODMP REMOTE NAD. 
**        AUTO - AUTODMP REMOTE NAD.
* 
*         ENTRY  - (PA+2) = CYBER 170 WORD COUNT. 
*                  (PA+3) = ADDRESS OF OB.
*                  (PA+4) = NAD MEMORY ADDRESS BITS 2**15-2**8
*                  (PA+5) = NAD MEMORY ADDRESS BITS 2**7-2**0 
*                  (PA+6) = CYBER 170 WORD COUNT. 
*                  (PA+7) = IB ADDRESS TO RECEIVE DATA. 
* 
*         EXIT  - NONE. 
* 
*         CALLS  - MAINF, TSTBF.
* 
*         USES   - OB(10B,15B),PA+1, PA+2, PA+3, PA+5.
* 
  
 AUTO     LDD    IA 
          RJM    TSTBF       TEST IF BUFFER IN RANGE
          LDD    OA 
          STD    PA+3        OB USED FOR MAINT FUNCTION FOR AUTODUMP
          LDN    0
          STM    OB+10B 
          STM    OB+12B 
          LDN    2
          STM    OB+11B      NAD LENGTH 
          RAD    PA+6 
          LDD    PA+4 
          STM    OB+14B      NAD ADDRESS BITS 2**15-2**8
          LDD    PA+5 
          STM    OB+15B      NAD ADDRESS BITS 2**7-2**0 
          LDD    PA+2 
          STD    PA+5        FLAG CHECK WORD COUNT FOR MAINT
          SHN    -1 
          STM    OB+13B 
          LDN    16B
          STD    PA+2        SET WORD COUNT 
          LDN    RAD         REMOTE AUTODUMP
          STD    PA+1        STORE FUNCTION FOR AUTODMP 
          RJM    MAINF       FUNCTION FOR AUTODMP 
 AUT1     UJN    CON2        EXIT TO STACK
          EJECT 
 CONN     TITLE  CONN - CONNECT PATH. 
**        CONN - CONNECT PATH.
* 
*         THIS  COMMAND  IS  USED  TO CONNECT A PATH TO THE REMOTE NAD. 
*         THUS IT IS ONLY VALID IF  A  REMOTE  NAD  IS  ASSIGNED.   THE 
*         COMMAND  REQUESTS  THE  NAD  TO  CREATE A DATA PATH BETWEEN A 
*         SOURCE AND DESTINATION DEVICE.  THE VALUES  FROM  THE  ASSIGN 
*         STATEMENT  ARE  PLACED  BY  THE  DRIVER INTO THE DATA THAT IS 
*         OUTPUT. LTA GOES TO WORD Y, TCU TO WORD Y+1, AND ACCESS  CODE 
*         INTO  Y+2  AND Y+3. THE VALUES FROM THE COMMAND, PATH NAME DA 
*         OR DB IS STORED IN Y+4 AND  Y+5.  THE  VALUE  X  IS  USED  TO 
*         SPECIFY  THE  BUFFER  SIZE TO USE (0=516 BYTES, 1=2064 BYTES, 
*         AND 2=4128 BYTES) AND IS STORED INTO Y+7. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE CONNECT COMMAND. 
* 
*          CONNECT PATH DB BUFFER X 
*          CONNECT PATH DB BUFFER X ABT Z 
*          CONNECT MAINT PATH DA BUFFER X 
*          CONNECT MAINT PATH DA BUFFER X ABT Z 
* 
*             A     B     X     Z 
*           ----- ----- ----- ----- 
*            A-Z   0-9   0-2  0-77B 
*                             0-63D 
* 
*         ENTRY - (PA+1) = CODE 
*                   405B = CONNECT PATH 
*                   440B = CONNECT MAINT PATH 
* 
*                 (PA+4) = PATH NAME (A OR B) 
*                 (PA+6) = BUFFER SIZE 0-2 (X)
* 
*         EXIT  - NONE. 
* 
*         USES   - BFZO.
* 
*         CALLS  - FNCO.
* 
  
**        1.  STORE BUFFER SIZE X INTO HEADER WORD 7. 
* 
**        2.  STORE PATH NAME INTO HEADER TABLE.
* 
 CONN     LDD    PA+6        (PA+6) = BUFFER SIZE 
          STM    BFZO 
          LDD    PA+4        (PA+4) = PATH NAME 
          STM    FPATH+1
          LDN    8
          STD    PA+2        WORD COUNT FOR CONNECT 
          LDC    HEADER 
          STD    PA+3        OUTPUT ADDRESS 
  
**        3.  PERFORM ACKTST SEQUENCE TO SEND THE FUNCTION AND
*             OBTAIN AND TEST THE VALID CONTROLWARE STATUS. 
* 
 CON0     RJM    ACKTST 
  
**        4.  PERFORM FNA TO ISSUE THE WRITE 12/8 FUNCTION. 
* 
**        5.  ACTIVATE THE I/O CHANNEL AND SEND THE 8 WORDS TO
*             CONNECT THE PATH. 
* 
          RJM    FNWR 
  
**        7.  PERFORM READY SEQUENCE TO ISSUE THE READY FUNCTION AND
*             TEST STATUS FOR SPR.
* 
 CON1     RJM    READY       GO ISSUE READY AND CHECK FOR SPR 
 CON2     LJM    XENT        EXIT TO STACK
          EJECT 
 DIS      TITLE  DIS - DISCONNECT PATH. 
**        DIS - DISCONNECT PATH.
* 
*         THIS COMMAND IS USED TO DISCONNECT A PATH TO THE REMOTE  NAD. 
*         THUS IT IS ONLY VALID IF A REMOTE NAD (DEVICE CODE 301 OCTAL) 
*         IS ASSIGNED.  THE COMMAND REQUESTS THE NAD TO DISCONNECT DATA 
*         PATH BETWEEN A SOURCE AND DESTINATION DEVICE. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE DISCONNECT COMMAND.
* 
*          DISCONN PATH 
*          DISCONN PATH ABT Z                  A       Z
*          DISCONN PATH AND FLUSH            -----   -----
*          DISCONN PATH AND FLUSH ABT Z       A-Z    0-77B
*          DISCONN NAMED PATH DA              0-9    0-63D
*          DISCONN NAMED PATH DA ABT Z
* 
*         ENTRY - (PA+1) = CODE FOR TYPE OF DISCONN 
*                  445B  = DISCONNECT NAMED PATH
*                  421B  = DISCONNECT PATH
*                  444B  = DISCONNECT PATH AND FLUSH
* 
*                 (PA+4) = PATH NAME (A)
* 
*         EXIT   -  READY ROUTINE IS ENTERED ON EXIT. 
* 
*         USES   -  NONE. 
* 
*         CALLS  -  ACKTST, READY, SELP.
* 
  
**        1.  PERFORM ACKTST SEQUENCE TO ISSUE FUNCTION AND TO TEST 
*             THE CONTROLWARE STATUS. 
* 
 DIS      LDM    SELPATH
          ZJN    ERRNPS      IF NO PATH SELECTED
  
 DIS0     RJM    ACKTST      ISSUE FUNCTION AND TES STATUS
  
**        2.  IF NOT DISCONN PATH BY NAME CONTINUE AT STEP 5. 
* 
          LDD    PA+1 
          LMC    DNP
          NJN    CON2         IF NOT DISCONN PATH BY NAME 
  
**        3.  PERFORM SELP SEQUENCE TO SEND PATH NAME.
* 
**        4.  EXIT TO CONN  TO PERFORM READY SEQUENCE TO SEND READY.
* 
          STM    SELPATH     CLEAR PATH SELECTED
          RJM    SELP 
  
**        5. RETURN.
* 
 DIS1     UJN    CON2        RETURN TO STACK
          EJECT 
 FCOM     TITLE  FCOM  - COMMON ISSUE FUNCTION AND TEST RESPONSE. 
**        FCOM1 - COMMON ISSUE FUNCTION AND TEST RESPONSE.
* 
*         FCOM IS USED TO PROCESS THE FOLLOWING COMMANDS. 
* 
* 
*         ABORT COMMAND 
*         ------------- 
*         THIS SENDS THE ABT FUNCTION ON THE I/O CHANNEL ASSIGNED, THEN 
*         OBTAINS  CONTROLWARE  STATUS.  IF  RESPONSE  CODE NOT ACK THE 
*         COMMAND EXECUTES THE ERROR EXIT SEQUENCE. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE ABORT COMMAND. 
*                             Z 
*          ABORT            ----- 
*          ABORT ABT Z      0-77B 
*                           0-63D 
* 
*         ACCEPT COMMAND
*         --------------
*         THIS  SENDS  THE  ACPT  FUNCTION ON THE I/O CHANNEL ASSIGNED, 
*         THEN OBTAINS CONTROLWARE STATUS.  IF RESPONSE  CODE  NOT  ACK 
*         THE COMMAND EXECUTES THE ERROR EXIT SEQUENCE. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE ACCEPT COMMAND.
* 
*                             Z 
*          ACCEPT           ----- 
*          ACCEPT ABT Z     0-77B 
*                           0-63D 
* 
*         FUNC COMMAND
*         ------------
*         THIS COMAND SENDS A FUNCTION ON THE ASSIGNED I/O CHANNEL. 
*         ACCESS LEVEL 10 IS REQUIRED TO USE THIS SINCE ALL FUNCTIONS 
*         CAN BE USED.
* 
*         THE FOLLOWING FORMAT IS USED FOR THE FUNC COMMAND.
* 
*                             M         Z 
*          FUNC M          -------    ----- 
*          FUNC M ABT Z     BUF       0-77B 
*                           REG       0-63D 
*                           0-777B
*                           0-512D
* 
* 
*         IMC COMMAND 
*         ----------- 
*         THIS COMMAND SENDS THE INTERFACE MASTER CLEAR (IMC)  FUNCTION 
*         OF 277 OCTAL  ON  THE  I/O  CHANNEL  ASSIGNED,  THEN  OBTAINS 
*         HARDWARE  STATUS.  IF STATUS WHEN MASKED WITH 0735 (OCTAL) IS 
*         NON ZERO THE ERROR  EXIT  SEQUENCE  IS  PERFORMED.   THE  IMC 
*         FUNCTION  CLEARS ALL READ/WRITE OPERATIONAL REGISTERS (EXCEPT 
*         ADDRESS AND LENGTH, PRIMED AND BUS PARITY ERROR STATUS  BITS) 
*         AND ALL CHANNEL CONTROL FLIP/FLOPS. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE IMC COMMAND. 
* 
*                           Z 
*          IMC            ----- 
*          IMC ABT Z      0-77B 
*                         0-63D 
* 
* 
*         PMC COMMAND 
*         ----------- 
*         THIS SENDS THE PROCESSOR MASTER CLEAR (PMC) FUNCTION  ON  THE 
*         I/O  CHANNEL  ASSIGNED,  THEN  OBTAINS  HARDWARE  STATUS.  IF 
*         STATUS WHEN MASKED WITH 0735 (OCTAL) IS NON  ZERO  THE  ERROR 
*         EXIT  SEQUENCE  IS  PERFORMED.  ACCESS LEVEL 5 IS REQUIRED TO 
*         EXECUTE THIS COMMAND. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE PMC COMMAND. 
* 
*                           Z 
*          PMC            ----- 
*          PMC ABT Z      0-77B 
*                         0-63D 
* 
*         PURGE COMMAND 
*         ------------- 
*         THIS SENDS THE PURGE  (PUPA)  FUNCTION  ON  THE  I/O  CHANNEL 
*         ASSIGNED,  THEN  OBTAINS  CONTROLWARE  STATUS. IF CONTROLWARE 
*         STATUS NOT ACK THE ERROR EXIT  SEQUENCE  IS  PERFORMED.   THE 
*         PURGE  COMMAND  IS USED TO PURGE THE ACTIVE PATH AT THE LOCAL 
*         NAD END.  IF A PATH HAS NOT BEEN SELECTED THE ERROR EXIT SEQ- 
*         SEQUENCE IS PERFORMED.
* 
*         THE FOLLOWING FORMAT IS USED FOR THE PURGE COMMAND. 
* 
*                           Z 
*          PURGE          ----- 
*          PURGE ABT Z    0-77B 
*                         0-63D 
* 
*         REJECT COMMAND
*         --------------
*         THIS SENDS THE REJECT  (REJT)  FUNCTION  ON  THE  I/O CHANNEL 
*         ASSIGNED, THEN  OBTAINS  CONTROLWARE  STATUS.  IF CONTROLWARE 
*         STATUS NOT ACK THE ERROR EXIT SEQUENCE IS PERFORMED.
* 
*         THE FOLLOWING FORMAT IS USED FOR THE REJECT COMMAND.
* 
*                           Z 
*          REJECT         ----- 
*          REJECT ABT Z   0-77B 
*                         0-63D 
* 
*         RESET COMMAND 
*         ------------- 
*         THIS  SENDS  THE  RESET  (RESET)  FUNCTION ON THE I/O CHANNEL 
*         ASSIGNED, THEN OBTAINS  CONTROLWARE  STATUS.  IF  CONTROLWARE 
*         STATUS  NOT  ACK  THE  ERROR  EXIT SEQUENCE IS PERFORMED. THE 
*         RESET FUNCTION REQUESTS THE NAD CONTROLWARE TO  BACK  UP  ITS 
*         I/O  POINTERS TO THE BEGINNING OF THE I/O TRANSFER ASSOCIATED 
*         WITH THIS TRANSACTION.
*         THE FOLLOWING FORMAT IS USED FOR THE RESET COMMAND. 
* 
*                           Z 
*          RESET          ----- 
*          RESET ABT Z    0-77B 
*                         0-63D 
* 
* 
*         SMC COMMAND 
*         ----------- 
*         THIS SENDS THE SOFT MASTER CLEAR (SMC) FUNCTION  ON  THE  I/O 
*         CHANNEL   ASSIGNED,   THEN  OBTAINS  CONTROLWARE  STATUS.  IF 
*         CONTROLWARE  STATUS  NOT  ACK  THE  ERROR  EXIT  SEQUENCE  IS 
*         PERFORMED.  ACCESS  LEVEL  5  IS REQUIRED IF THE LOCAL NAD IS 
*         ASSIGNED. ACCESS LEVEL 6 IS REQUIRED IF  THE  REMOTE  NAS  IS 
*         ASSIGNED. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE SMC COMMAND. 
* 
*                           Z 
*          SMC            ----- 
*          SMC ABT Z      0-77B 
*                         0-63D 
* 
*         START COMMAND 
*         ------------- 
*         THIS  COMMAND  SENDS  A  GO  FUNCTION  TO  ASSIGNED NAD. THIS 
*         FUNCTION PLACES THE NAD PROCESSOR IN RUN MODE. NO  EFFECT  IF 
*         THE  PROCESSOR  IS ALREADY RUNNING.  IF DEVICE CODE 300 OCTAL 
*         IS ASSIGNED THE GO FUNCTION 302 OCTAL IS SENT  TO  THE  LOCAL 
*         NAD.  IF DEVICE CODE 301 OCTAL IS ASSIGNED A MAINTENANCE PATH 
*         OF DA IS CONNECTED AND SELECTED, THEN A MAINTENANCE  FUNCTION 
*         OF GO IS SENT TO THE REMOTE NAD.
* 
*         THE FOLLOWING FORMAT IS USED FOR THE START COMMAND. 
* 
*                             Z 
*          START            ----- 
*          START ABT Z      0-77B 
*                           0-63D 
* 
*         STEP COMMAND
*         ------------
* 
*         THIS COMMAND SENDS A PROCESSOR STEP FUNCTION E301 OCTAL TO
*         THE ASSIGNED NAD WHICH WILL STOP THE PROCESSOR EXECUTION. 
*         REPEATED ISSUANCE OF THIS COMMAND, WITHOUT INTERVENING START
*         COMMANDS WILL CAUSE THE PROCESSOR TO EXECUTE ONE INSTRUCTION
*         PER ITERATION. THIS COMMAND DELAYS 10 MICROSECONDS AFTER
*         ISSUING THE FUNCTION THEN OBTAINS THE HARDWARE STATUS. THE
*         COMMAND LOOPS UNTIL THE PROCESSOR IS STOPPED OR 1 SECOND
*         HAS EXPIRED. IF TIME HAS EXPIRED AND THE PROCESSOR HAS NOT
*         STOPPED THE ERROR EXIT SEQUENCE IS PERORMED.
* 
* 
* 
*         TRANS COMMAND 
*         ------------- 
*         THIS SENDS THE TRANSMIT (XMIT)  OR  THE  TRANSMIT  WITH  MARK 
*         (XMITM)  FUNCTION  ON  THE I/O CHANNEL ASSIGNED, THEN OBTAINS 
*         CONTROLWARE STATUS.  IF CONTROLWARE STATUS NOT ACK THE  ERROR 
*         EXIT SEQUENCE IS PERFORMED. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE TRANSMIT COMMAND.
*                                     Z 
*          TRANS                    ----- 
*          TRANS ABT Z              0-77B 
*          TRANS WITH MARK          0-63D 
*          TRANS WITH MARK ABT Z
* 
*         ENTRY - (PA+1) = CFFF WHERE 
* 
*                    FFF = FUNCTION TO ISSUE
* 
*                      C = CONTROLWARE STATUS TEST TO MAKE AS FOLLOWS 
* 
*                      0 = IF CONTROLWARE STATUS NOT ACK (1) GENERATE 
*                          ERROR CODE 6033 AND ABORT. 
* 
*                      1 = IF CONTROLWARE STATUS NAK (2) GENERATE ERROR 
*                          CODE 6036 AND ABORT. 
* 
*                          IF CONTROLWARE STATUS NOT ACK (1) GENERATE 
*                          ERROR CODE 6033 AND ABORT. 
* 
*                      2 = IF CONTROLWARE STATUS NAK (2) GENERATE ERROR 
*                          CODE 6036 AND ABORT. 
* 
*                          IF CONTROLWARE STATUS NOT SPR GENERATE ERROR 
*                          CODE 6033 AND ABORT. 
* 
*                      3 = RETURN WITH CONTROLWARE STATUS.
* 
*                      4 = REMOTE FUNCTION IF DEVICE CODE 301B
*                          GET HARDWARE STATUS ON RETURN. 
* 
*                      6 = RETURN WITH HARDWARE STATUS. 
* 
*                 (PA+5) = REMOTE FUNCTION TO SEND IF APPLICABLE
* 
*         EXIT  - FUNCTION ISSUED AND DATA OUTPUT FROM OB.
* 
*                 ERRACS - ABNORMAL CONTROLWARE STATUS. 
*                 ERRNAK - NAK CONTROLWARE STATUS.
* 
*         USES   - PA+1.
* 
*         CALLS  - HSTAT, MAINF.
* 
  
  
**        1.  IF NOT COMMAND CODE 0-2 CONTINUE AT STEP 4. 
* 
 FCOM     LDD    PA+1 
          SHN    -9 
          SBN    3
          PJN    FCOM1
  
**        2.  PERFORM ACKTST SEQUENCE TO ISSUE FUNCTION AND TEST
*             CONTROLWARE STATUS. 
* 
          LDD    PA+1 
          LMC    PUPA 
          NJN    FCOM0A 
          LDM    SELPATH
          NJN    FCOM0
 ERRNPS   LDC    ER.NPS 
          UJN    FCOM6       ERROR
 FCOM0    LDN    0
          STM    SELPATH
 FCOM0A   RJM    ACKTST 
  
**        3.  CONTINUE AT STEP 12.
  
          UJN    FCOM5
  
**        4.  IF COMMAND CODE 3 CONTINUE AT STEP 8. 
* 
 FCOM1    ZJN    FCOM2       IF COMMAND CODE 3
  
**        5. IF COMMAND CODE 6 CONTINUE AT STEP 8.
* 
          SHN    17-1 
          MJN    FCOM2       IF FUNC COMMAND
  
**        6. IF DEVICE CODE 300B CONTINUE AT STEP 8.
* 
 FCOM1A   UJN    FCOM2       *** MODIFIED IF DC=301 TO DATA 0 *** 
  
**        7. PERFORM MAINF SEQUENCE WITH FUNCTION REQUESTED AND 
*            CONTINUE AT STEP 11. 
* 
          LDD    PA+5 
          STD    PA+1        SAVE FUNCTION FOR MAINF
          RJM    MAINF       ISSUE MAINTENANCE FUNCTION TO REMOTE 
          UJN    FCOM3
  
**        8. PERFROM FNA SEQUENCE WITH REQUESTED FUNCTION.
* 
 FCOM2    LDD    PA+1 
          RJM    FNA         SEND FUNCTION
  
**        9.  IF COMMAND CODE 4 OR 6 CONTINUE AT STEP 11. 
* 
          LDD    PA+1 
          SHN    17-11
          MJN    FCOM5       IF BIT 2**11 SET 
  
**        10. PERFORM HSTAT TO OBTAIN THE VALID CONTROLWARE STATUS. 
*             AND CONTINUE AT STEP 12.
* 
          LDN    1
          UJN    FCOM4
  
**        11. PERFORM HSTAT TO OBTAIN THE HARDWARE STATUS.
* 
 FCOM3    LDN    0
 FCOM4    RJM    HSTAT       GET HARDWARE STATUS
  
**        12. RETURN TO STACK.
* 
 FCOM5    LJM    XENT        RETURN TO STACK
  
 ERCPE1   LDC    ER.CPE 
 FCOM6    UJN    INQ4        ERROR
          EJECT 
 INQ      TITLE  INQ - INQUIRE PATH.
**        INQ - INQUIRE PATH. 
* 
*         IF INQUIRE CONTROL MSG IS SPECIFIED, THE NAD CONTROLWARE WILL 
*         PRESENT THE NEXT CONTROL MESSAGE IN THE QUEUE, PROVIDED THERE 
*         IS  ONE.   IF  THE  CONTROLWARE  RESPONSE IS NAK THE QUEUE IS 
*         EMPTY. IF THE RESPONSE IS ACK THE CONTROLWARE HAS  A  MESSAGE 
*         READY FOR INPUT.
* 
*         IF  INQUIRE SELECTED CONTROL MSG IS SPECIFIED THE PARAMETER X 
*         SPECIFIES AN OB ADDRESS WHERE TO OBTAIN THE TWO  16  BIT  NAD 
*         WORDS NEEDED AS SHOWN BELOW.
* 
*               WORD
*                     ------------------
*                X    I PHYSICAL FROM  I
*                     I----------------I
*                X+1  I     NAME       I
*                     ------------------
* 
*          PHYSICAL FROM
* 
*          BIT   0           7 8     10 11  12           15 
*                -------------------------------------------
*                \   NAD      I        \ I \      D        \
*                -------------------------------------------
* 
*         NAD- PHYSICAL ADDRESS OF THE NAD ORGINATING THE CONTROL 
*              MESSAGE (8 BITS).
* 
*         D  - 4-BIT ORGINATING DEVICE PHYSICAL ADDRESS OR EQUIPMENT
*              SELECT.
* 
*         I  - IGNORE BIT.  WHEN SET, THE NAD CONTROLWARE IGNORES THE 
*              PHYSICAL WORD SELECT AND COMPARES ONLY BY NAME (WORD 1). 
* 
*         NAME
* 
*          THE  16  BIT  LOGICAL  VALUE  PARAMETER  FOUND  IN A CONTROL 
*          MESSAGE. 
* 
*         THE CONTROLWARE WILL PRESENT THE SELECTED CONTROL MESSAGE  IN 
*         THE  QUEUE,  PROVIDED  THERE  IS  ONE.   IF  THE  CONTROLWARE 
*         RESPONSE IS NAK THE QUEUE IS EMPTY. IF THE  RESPONSE  IS  ACK 
*         THE CONTROLWARE HAS A MESSAGE READY FOR INPUT.
* 
*         IF INQUIRE PATH IS SPECIFIED THE NAD CONTROLWARE WILL PRESENT 
*         A NEW CONNECT PATH CONTROL MESSAGE, PROVIDED THERE IS ONE. IF 
*         THE  CONTROLWARE  RESPONSE IS NAK NO NEW PATHS ARE AVALIABLE. 
*         IF THE RESPONSE IS ACK THE CONTROLWARE HAS A CONNECT  MESSAGE 
*         READY FOR INPUT.
* 
*         IF  INQUIRE  SELECTED  PATH  IS  SPECIFIED  THE  PARAMETER  X 
*         SPECIFIES AN OB ADDRESS WHERE TO OBTAIN THE TWO  16  BIT  NAD 
*         WORDS NEEDED AS SHOWN IN INQUIRE SELECTED CONTROL MSG.
* 
*         IF  INQUIRE REJECTED CONTROL MSG IS SPECIFIED THE CONTROLWARE 
*         WILL RETURN A RESPONSE OF ACK  IF  ONE  IS  AVALIABLE  IN THE 
*         QUEUE. A RESPONSE OF NAK IS RETURNED IF NONE ARE AVALIABLE. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE INQUIRE COMMAND. 
* 
*          INQUIRE SELECTED PATH X
*          INQUIRE SELECTED PATH X ABT Z
*          INQUIRE SELECTED CONTROL MSG X TO Y
*          INQUIRE SELECTED CONTROL MSG X TO Y ABT Z
*          INQUIRE CONTROL MSG TO Y 
*          INQUIRE CONTROL MSG TO Y ABT Z 
*          INQUIRE REJECTED CONTROL MSG TO Y
*          INQUIRE REJECTED CONTROL MSG TO Y ABT Z
*          INQUIRE PATH TO Y
*          INQUIRE PATH TO Y ABT Z
* 
*                      X    Y    Z
*                    ---- ---- -----
*                     OB   IB  0-77B
*                              0-63D
* 
*         ENTRY  - (PA+1) = CODE FOR COMMAND. 
*                    413B = INQUIRE CONTROL MSG 
*                    414B = INQUIRE SELECTED CONTROL MSG
*                    415B = INQUIRE PATH
*                    416B = INQUIRE SELECTED PATH 
*                    417B = INQUIRE REJECTED CONTROL MSG
*                  (PA+3) = X  (ADDRESS WITHIN OB)
*                (PA+4) = Y (ADDRESS WITH IB FOR INPUT).
* 
*         EXIT   -  FCOM ROUTINE TO ISSUE READY ON EXIT.
* 
*         USES   - PA+1, PA+2, PA+3.
* 
*         CALLS  - ACKTST, FNA, FNWR, FCOM, INBUF.
* 
  
**        1.  PERFORM ACKTST SEQUENCE TO ISSUE THE FUNCTION AND 
*             TO OBTAIN THE VALID CONTROLWARE STATUS AND TEST IT. 
* 
*              -------------------------------------------------
*              / COMMAND SYNTAX               I OCTAL FUNCTION /
*              /------------------------------+----------------/
*              / INQUIRE CONTROL MSG          I E413    ICM    /
*              / INQUIRE SELECTED CONTROL MSG I E414    ISCM   /
*              / INQUIRE PATH                 I E415    IQP    /
*              / INQUIRE SELECTED PATH        I E416    IQSP   /
*              / INQUIRE REJECTED CONTROL MSG I E417    IRCM   /
*              -------------------------------------------------
*                 COMMAND/FUNCTION TABLE. 
* 
 INQ      RJM    ACKTST      ISSUE FUNCTION AND TEST CONTROLWARE STATUS 
  
**        2.  IF INQUIRE SELECTED PATH CONTINUE AT STEP 7.
* 
**        3.  IF INQUIRE SELECTED CONTROL MSG CONTINUE AT STEP 7. 
* 
**        4.  IF INQUIRE CONTROL MSG CONTINUE AT STEP 9.
* 
**        5.  IF INQUIRE PATH CONTINUE AT STEP 9. 
* 
**        6.  IF INQUIRE REJECTED CONTROL MSG CONTINUE AT STEP 9. 
* 
          LDD    PA+1 
          LPN    1
          NJN    INQ3        IF INQUIRE SELECTED NOT SPECIFED 
  
**        7.  PERFORM FNWR SEQUENCE TO ISSUE WRITE AND OUTPUT.
* 
          LDN    4
          STD    PA+2        SET NUMBER OF WORDS
          RJM    FNWR        FUNCTION FOR WRITE AND OUTPUT DATA 
  
**        8.  PERFORM READY SEQUENCE. 
* 
          RJM    READY       TEST FOR ACK RECEIVED
  
**        9.  PERFORM FNA SEQUENCE WITH READ 8/12 FUNCTION (E002).
* 
 INQ3     LDN    RD 
          RJM    FNA         ISSUE READ 8/12 FUNCTION 
  
**        10. PERFORM INBUF SEQUENCE TO READ 64 DECIMAL WORDS TO Y. 
* 
          LDN    0
          STD    PA+1        CLEAR CHAINING FLAG
          LDC    64 
          STD    PA+2        SET WORD COUNT 
          LDD    PA+4 
          STD    PA+3        SET INPUT ADDRESS
          RJM    INBUF       INPUT 64 WORDS TO Y
  
**        11. RETURN TO STACK.
* 
          UJN    FCOM5       RETURN TO STACK
  
 ERREMT   LDC    ER.EMT 
 INQ4     UJN    LOA3A       ERROR
          EJECT 
 LOAD     TITLE  LOAD - DOWNLOAD NAD FROM SYSFILE.
**        LOAD - DOWNLOAD NAD FROM SYSFILE. 
* 
*         THE LOAD COMMAND IS USED TO DOWNLOAD NAD CODE TO THE ASSIGNED 
*         NAD FROM THE RECORD ACCESSED BY SYSRD/SYSREW/SYSWR  COMMANDS. 
*         IF  DEVICE  CODE  300 OCTAL (LOCAL NAD) IS ASSIGNED THE LOCAL 
*         NAD IS DOWN- LOADED.  IF DEVICE CODE 301 OCTAL  (REMOTE  NAD) 
*         IS  ASSIGNED  THE  REMOTE NAD IS DOWNLOADED USING MAINTENANCE 
*         PATH DA. AN ERROR EXIT SEQUENCE IS PERFORMED IF THE RECORD TO 
*         BE  DOWNLOADED  IS  LESS  THAN  120  OCTAL  WORDS OR DOES NOT 
*         CONTAIN A 7700 OCTAL WITHIN THE FIRST 12 BITS OF  DATA.  THIS 
*         COMMAND DOWNLOADS THE NAD CODE WITHOUT REGARD TO THE 2 SECOND 
*         I/O TIME OUT ON CHANNEL RESERVES.  ONCE  ENTERED  THE  ENTIRE 
*         RECORD  IS  DOWNLOADED  WITHOUT  SHARING THE CHANNEL WITH THE 
*         OPERATING SYSTEM. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE LOAD COMMAND.
* 
*                             Z 
*          LOAD             ----- 
*          LOAD ABT Z       0-77B 
*                           0-63D 
* 
*         ENTRY- (DC) = DEVICE CODE ASSIGNED. 
*                (PA+4)  = 0     LOAD ADDRESS BITS 2**8-2**15 
*                (PA+5)  = 0     LOAD ADDRESS BITS 2**0-2**7
*                (PA+6)  = 377B  LENGTH BITS 2**8-2**15 
*                (PA+7)  = 377B  LENGTH BITS 2**0-2**7
*                (PA+55B)= 0  ACCESS LEVEL REQUIRED.
* 
*         EXIT - ERRNHT - HEADER TABLE ABSENT.
* 
*         USES   - WT,PA+1,PA+2,PA+3,PA+4,PA+5,PA+6,PA+7. 
* 
*         CALLS  - BD.XSYS, FNA, SETADD, RDSYS, FNWR, OUTBUF, MAINF.
* 
* 
  
**        1.  PERFORM SYSRD SEQUENCE TO READ FIRST 500 OCTAL WORD 
**            BLOCK INTO IB.
* 
 LOAD     LDN    2
          STM    BD.CHAIN    SET CHAIN FLAG 
          RJM    BD.XSYS     READ SCRATCH FILE
  
**        3.  IF  LESS  THAN  120  OCTAL  WORDS  RECEIVED  FROM SYSRD 
*             SEQUENCE GENERATE ERROR CODE 6024 AND ABORT.
* 
          ADC    -120B
          MJN    ERREMT      IF WORD COUNT LESS THAN 120B 
 LOA3     STD    SC          INITIALIZE WT BITS 2**0-2**11
          STD    PA+2        SET WORD COUNT 
  
**        4.  IF FIRST WORD OF IB NOT 7700B GENERATE ERROR CODE 6023
*             AND ABORT.
  
          LDI    IA 
          LMC    7700B
          ZJN    LOA3B
 ERRNHT   LDC    ER.NHT      NO HEADER TABLE ON SYSRD 
 LOA3A    LJM    ERROR
  
**        5.  IF DEVICE CODE 301 (OCTAL) IS ASSIGNED CONTINUE AT STEP 
*             15. 
* 
 LOA3B    UJN    LOA4        *** MODIFIED IF DC=301 TO DATA 0 *** 
          LJM    LOA7 
  
**        6.  PERFORM FNA SEQUENCE WITH PROCESSOR MASTER CLEAR FUNCTION 
*             E304 OCTAL).
* 
**        7.  SET LENGTH TO FFFF AND ADDRESS TO ZERO PERFORM SET
*             ADDRESS AND LENGTH SEQUENCE.
* 
 LOA4     LDC    PMC
          RJM    FNA         SEND MASTER CLEAR FUNCTION 
          LDN    0
          STD    PA+4        SET ADDRESS TO 0 BITS 2**15-2**8 
          STD    PA+5        SET ADDRESS TO 0 BITS 2**7-2**0
          STM    BD.CHAIN    CLEAR CHAIN FLAG 
          STM    WTUP        CLEAR WT BITS 2**23-2**12
          LDC    377B 
          STD    PA+6        SET LENGTH TO FF BITS 2**15-2**8 
          STD    PA+7        SET LENGTH TO FF BITS 2**7-2**0
          RJM    SETADD 
  
**        8.  PERFORM FNA SEQUENCE WITH MEMORY WRITE FUNCTION (E012B).
* 
          LDN    WR 
          RJM    FNA         SEND PROCESSOR WRITE FUNCTION
  
**        9.  PERFORM OUTBUF SEQUENCE WITH ACTUAL DATA WORDS READ.
* 
          LDC    IB+120B
 LOA5     STD    PA+3 
          STD    PA+1        SET CHAINING IN PROGRESS 
          LCN    0           FLAG NOT TO TEST FOR RANGE OF OB 
          RJM    OUTBUF 
  
**        10. PERFORM RDSYS SEQUENCE. 
* 
          RJM    RDSYS       READ SYS FILE IN 
  
**        11. UPDATE WORDS TRANSMITTED (WT AND SB(44B)).
* 
**        12. IF WORDS RECEIVED ON SYSRD THEN STEP 9. 
* 
          ZJN    LOA6        IF DONE
          LDD    IA          IB FWA 
          UJN    LOA5        LOOP TO LOAD CONTROLWARE 
  
**        13. DEACTIVATE CHANNEL. 
* 
 LOA6     DCN    40B+CH      TERMINATE OUTPUT 
  
**        14. CONTINUE AT STEP 23.
* 
          UJN    LOA9 
  
**        17. PERFORM FNA SEQUENCE WITH WRITE DATA FUNCTION (E424B) 
* 
 LOA7     LDC    IB+120B
 LOA8     STD    PA+3        SET OUTPUT ADDRESS 
          LDC    WD 
          RJM    FNA         ISSUE WRITE
  
**        19. PERFORM FNWR SEQUENCE TO ISSUE WRITE AND OUTPUT.
* 
          LDN    0
          STM    BD.CHAIN    CLEAR CHAIN FLAG 
          RJM    FNWR        ISSUE WRITE AND OUTPUT 
          LDC    XMIT 
          RJM    FNA         TRANSMIT BLOCK TO REMOTE NAD 
  
**        20. PERFORM RDSYS SEQUENCE. 
* 
          RJM    RDSYS       READ SYS FILE IN 
  
**        21. UPDATE WORDS TRANSMITTED (WT AND SB(44B)) REGISTERS.
* 
**        22. IF WORDS NOT RECEIVED ON SYSRD THEN STEP 23.
* 
          ZJN    LOA9 
          LDD    IA 
          UJN    LOA8        LOOP TO LOAD SCRATCH FILE
  
**        23. PERFORM HSTAT SEQUENCE TO GET HARDWARE STATUS.
* 
 LOA9     LDD    SC          GET WT FROM TEMPORARY STORAGE
          STD    WT 
          LDN    0
          STM    BD.CHAIN    CLEAR CHAINING IN PROGRESS 
          UJN    LOO6        EXIT TO STACK
          EJECT 
 LOOP     TITLE  LOOP - USE DIAGNOSTIC FUNCTION TO LOOP DATA. 
**        LOOP - USE DIAGNOSTIC FUNCTION TO LOOP DATA.
* 
*         THE PURPOSE OF THIS COMMAND IS TO LOOP DATA THROUGH THE LOCAL 
*         NAD. THE DIAGNOSTIC FUNCTION 205 OCTAL IS  SENT  ON  THE  I/O 
*         CHANNEL ASSIGNED, THEN THE VALUE STORED IN X IS OUTPUT AND AN 
*         INPUT TO Y IS DONE.   THE  COMMAND  PERFORMS  TH  ERROR  EXIT 
*         SEQUENCE  IF  THE DATA DOES NOT MATCH, OR THE HARDWARE STATUS 
*         WHEN MASKED WITH 735 OCTAL IS NON ZERO. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE LOOP COMMAND.
* 
*                                      X      Y          Z
*          LOOP BACK X TO Y          ----   -----      -----
*          LOOP BACK X TO Y ABT Z     IB     REG.      0-77B
*                                     OB               0-63D
*                                     REG.
*                                    0-7777B
*                                    0-4095D
* 
*         LOOP DATA USING DIAGNOSTIC FUNCTION.
* 
*         ENTRY  - (PA+1) = VALUE TO OUTPUT.
*                  (PA+2) = ADDRESS TO STORE. 
* 
*         EXIT   - ERRDMC - IF DATA MISCOMPARE
*                  ERRDNA - IF DATA NOT RECEIVED
* 
*         USES   - PA+2.
* 
*         CALLS  - HSTAT. 
* 
  
**        1. PERFORM FNA SEQUENCE TO ISSUE DIAG FUNCTION. 
* 
 LOOP     LDC    DIAG 
          RJM    FNA         SEND DIAGNOSTIC FUNCTION 
          LDD    PA+1 
  
**        2.  ACTIVATE THE CHANNEL. 
* 
          ACN    CH+40B 
  
**        3.  OUTPUT CONTENTS OF X ON THE ASSIGNED I/O CHANNEL (OAN). 
* 
          OAN    CH+40B 
  
**        4.  IF I/O CHANNEL NOT EMPTY WITHIN 524 MSEC GENERATE ERROR 
*             CODE 6017 AND ABORT.
* 
          RJM    TEJM        CHECK CHANNEL EMPTY
  
**        5.  IF I/O CHANNEL NOT INACTIVE WITHIN 524 MSEC GENERATE
*             ERROR CODE 6015 AND ABORT.
* 
          RJM    TIJM        WAIT FOR INACTIVE
  
**        6.  INPUT TO Y ON THE ASSIGNED I/O CHANNEL (IAN). 
* 
          ACN    CH+40B 
          IAN    CH+40B      INPUT DATA 
          STI    PA+2        SAVE DATA PROVIDED 
          LMD    PA+1 
  
**        7.  IF DATA IN X DOES NOT MATCH DATA IN Y GENERATE ERROR CODE 
*             6034 AND ABORT. 
* 
          ZJN    LOO5        IF NO ERROR IN COMPARE 
 ERRDMC   LDC    ER.DMC      DATA MISCOMPARE
 LOO4     LJM    ERROR
  
**        8.  PERFORM STATUS SEQUENCE TO OBTAIN THE HARDWARE STATUS.
* 
 LOO5     DCN    CH+40B      DEACTIVATE THE CHANNEL 
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
 LOO6     LJM    FCOM4       GET STATUS 
          EJECT 
 MEM      TITLE  MEM - MEMORY READ/WRITE PROCESSOR. 
**        MEM - MEMORY READ/WRITE PROCESSOR.
* 
*         THE  MEMORY  COMMAND  IS  USED TO READ OR WRITE THE LOCAL NAD 
*         MEMORY. ACCESS LEVEL 0 IS REQUIRED  FOR  ALL  READS.   ACCESS 
*         LEVEL  5  FOR WRITE IF LOCAL NAD IS ASSIGNED (DEVICE CODE 300 
*         OCTAL). ACCESS LEVEL 6 IS REQUIRED IF REMOTE NAD IS  ASSIGNED 
*         (DEVICE CODE 301 OCTAL) AND COMMAND IS A WRITE. 
* 
*         THE  VARIABLE N IS THE NUMBER OF 12-BIT C170 WORDS TO BE READ 
*         OR WRITTEN. THE VARIABLES T AND U ARE USED TO DETERMINE THE 
*         FUNCTION CODE TO USE FOR DATA (SEE TABLE 18-6).THE VARIABLES R
*         OR S ARE USED FOR  THE NAD ADDRESS  READ  FROM  OR
*         WRITTEN TO. THE NAD ADDRESS CAN BE SUPPLIED IN OCTAL, DECIMAL 
*        OR HEXADECIMAL DEPENDING ON THE POST RADIXUSED, B, D, OR H.
*         ONLY  THE  RIGHT EIGHT BITS ARE USED FOR VARIBLE R AND S. THE 
*         VARIBLE Y OR V IS THE BUFFER ADDRESS TO READ DATA TO  OR  THE 
*         BUFFER ADDRESS TO WRITE DATA FROM.
* 
*         AFTER READ OR WRITE THE HARDWARE STATUS IS OBTAINED.  COMMAND 
*         IS ABORTED IF HARDWARE STATUS NON ZERO WHEN MASKED  WITH  735 
*         OCTAL. THE WORD READ CAN BE ABREVIATED AS RD.  THE WORD WRITE 
*         CAN BE ABREVIATED AS WR. THE WORD WORDS CAN BE ABREVIATED  AS 
*         WDS WITHIN THE COMMAND SYNTAX.
* 
*                         --------------------------- 
*                         /  COMMAND      FUNCTION  / 
*                         /-------------------------/ 
*                         /  READ STRING    E000    / 
*                         /  READ 8/6       E001    / 
*                         /  READ 8/12      E002    / 
*                         /  READ 16/12     E003    / 
*                         /  READ 64/60     E004    / 
*                         /  WRITE STRING   E010    / 
*                         /  WRITE 6/8      E011    / 
*                         /  WRITE 12/8     E012    / 
*                         /  WRITE 12/16    E013    / 
*                         /  WRITE 60/64    E014    / 
*                         --------------------------- 
*                         TABLE 18-6 COMMAND/FUNCTION 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE MEMORY COMMAND.
* 
*          MEMORY READ T N WORDS FROM R TO Y
*          MEMORY READ T N WORDS FROM R/S TO Y
*          MEMORY READ T N WORDS FROM R TO Y ABT Z
*          MEMORY READ T N WORDS FROM R/S TO Y ABT Z
*          MEMORY WRITE U N WORDS TO R FROM V 
*          MEMORY WRITE U N WORDS TO R/S FROM V 
*          MEMORY WRITE U N WORDS TO R FROM V ABT Z 
*          MEMORY WRITE U N WORDS TO R/S FROM V ABT Z 
* 
*             N      R/S     T      U      V   Y    Z 
*           -----  ------  -----  ------  --- --- ----- 
*           1-505B  REG.   STRING  STRING  OB  IB 0-77B 
*           1-325D  BUF.     8/6     6/8          0-63D 
*                   0-377B   8/12   12/8
*                   0-FFH   16/12   12/16 
*                   0-255D  64/60   60/64 
* 
*         ENTRY- (PA+1) = BIT 2**0  0 IF READ 
*                       = BIT 2**0  1 IF WRITE
*                       = BIT 2**7 TO 2**1  FUNCTION USED 
*                (PA+2) = PP WORD COUNT 
*                (PA+3) = BUFFER ADDRESS
*                (PA+4) = NAD MEMORY ADDRESS BITS 2**15-2**8
*                (PA+5) = NAD MEMORY ADDRESS BITS 2**7-2**0 
*                (PA+7) = NAD WORD COUNT. 
* 
*         EXIT - DATA READ/WRITTEN
*                (WT) = NUMBER OF WORDS TRANSMITTED.
* 
*                ERRILL - IF REMOTE NAD ASSIGNED. 
* 
*         USES   - WT.
* 
*         CALLS- FNA, INBUF, OUTBUF, HSTAT. 
  
**        1.  PERFORM SETADD SEQUENCE.
* 
 MEM      LDN    0
          STD    PA+6        CLEAR BITS 2**15-2**8 OF NAD LENGTH
          RJM    SETADD      SET ADDRESS
  
**        2.  PERFORM FNA SEQUENCE WITH FUNCTION FROM TABLE.
* 
*                         --------------------------- 
*                         /  COMMAND      FUNCTION  / 
*                         /-------------------------/ 
*                         /  READ STRING    E000    / 
*                         /  READ 8/6       E001    / 
*                         /  READ 8/12      E002    / 
*                         /  READ 16/12     E003    / 
*                         /  READ 64/60     E004    / 
*                         /  WRITE STRING   E010    / 
*                         /  WRITE 6/8      E011    / 
*                         /  WRITE 12/8     E012    / 
*                         /  WRITE 12/16    E013    / 
*                         /  WRITE 60/64    E014    / 
*                         --------------------------- 
* 
          LDD    PA+1 
          SHN    -1 
          RJM    FNA         FUNCTION FOR TYPE OF XFER
  
**        3.  IF WRITE SPECIFIED, CONTINUE AT STEP 6. 
* 
          LDD    PA+1 
          LPN    1
          NJN    MEM3        IF WRITE 
          STD    PA+1        CLEAR CHAINING IN PROGRESS 
  
**        4.  PERFORM INBUF SEQUENCE WITH N C170 12-BIT WORDS.
* 
          RJM    INBUF       PERFORM MEMORY READ
  
**        5.  CONTINUE AT STEP 7. 
* 
          UJN    MEM4 
  
**        6.  PERFORM OUTBUF SEQUENCE WITH N C170 12-BIT WORDS. 
* 
 MEM3     LDN    0
          STD    PA+1        CLEAR SET CHAINING IN PROGRESS 
          RJM    OUTBUF      PERFORM MEMORY WRITE 
  
**        7.  PERFORM HSTAT SEQUENCE TO OBTAIN HARDWARE HSTAT.
* 
 MEM4     UJN    LOO6       GET HARDWARE STATUS 
          EJECT 
 READ     TITLE  READ - READ DATA/CODE/SHORT. 
**        READ - READ DATA/CODE/SHORT.
* 
*         READ CODE COMMAND REQUESTS THE NAD TO PRESENT THE LOCAL 32 BIT
*         CODE  VALUE (WHICH IS THE CODE TRANSMITTED BY THE OTHER END OF
*         THE PATH). THE INITIAL CODE VALUE IS ALL ONE(S).
* 
*         READ DATA COMMAND INPUTS DATA ON THE SELECTED PATH. 
* 
*         READ SHORT CODE REQUESTS THE NAD TO PRESENT THE LOW ORDER FIVE
*         BITS OF THE 32 BIT PATH CODE VALUE. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE READ COMMAND.
* 
*          READ DATA N WORDS TO Y 
*          READ DATA N WORDS TO Y,ABT Z 
*          READ CODE TO Y 
*          READ CODE TO Y ABT Z 
*          READ SHORT CODE TO Y 
*          READ SHORT CODE TO Y ABT Z 
* 
*            N      Y     X     Z 
*         ------  ----  ----  ----- 
*         1-505B   IB    0-2  0-77B 
*         1-325D              0-63D 
*          REG. 
*          BUF. 
* 
*         ENTRY  -  (PA+1) = REQUEST TYPE  CFFF WHERE C=0 SHORT,
*                            C=1 DATA C=2 CODE AND FFF=FUNCTION.
* 
*                            0443B = SHORT
*                            1427B = DATA 
*                            2426B = CODE 
*                            3426 = MAINT READ
* 
*         EXIT   -
* 
*         USES   -
* 
*         CALLS  -
* 
  
**        1. PERFORM TSTBF SEQUENCE TO SEE IF ADDRESS IN RANGE OF IB. 
* 
 READ     LDD    IA 
          RJM    TSTBF
  
**        2.  IF READ SHORT CODE SPECIFIED, PERFORM FNA SEQUENCE WITH 
*             RSC FUNCTION (E443 OCTAL).
* 
**        3.  IF READ CODE SPECIFIED, PERFORM FNA SEQUENCE WITH 
*             RC FUNCTION (E426 OCTAL). 
* 
**        4.  IF READ DATA SPECIFIED, PERFORM FNA SEQUENCE WITH 
*             RD FUNCTION (E427 OCTAL). 
* 
 REA1     RJM    ACKTST 
  
**        5.  PERFORM  HSTAT SEQUENCE  TO  OBTAIN  THE  CONTROLWARE 
*             STATUS. 
* 
**        6.  IF  READ SHORT CODE SPECIFIED, STORE THE STATUS  INTO Y.
* 
          LDD    PA+1 
          SHN    -9 
          ZJN    MEM4        IF SHORT READ
  
**        7.  IF VALID CONTROLWARE STATUS NOT EQUAL ACK(1) OR RSA(5)
*             GENERATE ERROR CODE 6033 AND ABORT. 
* 
**        8.  PERFORM FNA SEQUENCE WITH READ  8/12  FUNCTION  (E002). 
* 
          LDN    0
          STD    PA+1        CLEAR CHAIN FLAG 
          LDN    RD 
          RJM    FNA         ISSUE WRITE 12/8 FUNCTION ON CHANNEL 
  
**        9.  PERFORM INBUF TO INPUT TO  Y THE REQUESTED NUMBER OF
*             WORDS.
* 
          LCN    0
          RJM    INBUF
  
**        10. PERFORM  HSTAT  SEQUENCE  TO  OBTAIN  THE  CONTROLWARE
*             STATUS. 
* 
          LDN    1
 REA3     UJN    MEM4 
          EJECT 
 READY    TITLE  READY - ISSUE READY AND WAIT FOR ACK.
**        READY - ISSUE READY AND WAIT FOR ACK
* 
*         READY COMMAND 
*         ------------- 
*         THIS SENDS THE  READY  (RDY)  FUNCTION  ON  THE  I/O  CHANNEL 
*         ASSIGNED, THEN OBTAINS CONTROLWARE STATUS.
*         THE FOLLOWING FORMAT IS USED FOR THE READY COMMAND. 
* 
*                           Z 
*          READY          ----- 
*          READY ABT Z    0-77B 
*                         0-63D 
* 
*         ENTRY  - NONE.
* 
*         EXIT   - (SB+1) = CONTROLWARE STATUS. 
* 
*         CALLS  - ACKTST.
* 
*         USES   - PA+1.
* 
  
  
**        1.  PERFORM ACKTST TO ISSUE A READY FUNCTION AND TEST 
*             THE CONTROLWARE STATUS. 
* 
 READYX   LJM    ** 
 READY    EQU    *-1
          LDC    RDY
          STD    PA+1 
          RJM    ACKTST      ISSUE FUNCTION AND WAIT FOR ACK
          UJN    READYX      RETURN TO CALLER 
          EJECT 
 SEL      TITLE  SEL - SELECT PATH. 
**        SEL - SELECT PATH.
* 
*         THE  SELECT INPUT PATH REQUESTS THE NAD CONTROLWARE TO FIND A 
*         PATH  CONTAINING  INPUT  DATA.   A  DIFFERENT  PATH  WILL  BE 
*         SELECTED (PROVIDED MULTIPLE PATHS HAVE INPUT DATA AVALIABLE). 
* 
*         THE SELECT PATH COMMAND IS USED TO ACTIVATE A PATH BY NAME DA 
*         WHERE THE CHARACTER A CAN BE A-Z OR 0-9.
* 
*         THE FOLLOWING FORMAT IS USED FOR THE SELECT COMMAND.
* 
*          SELECT INPUT PATH
*          SELECT INPUT PATH ABT Z
*          SELECT PATH DA 
*          SELECT PATH DA ABT Z 
* 
*             A         Z 
*           ------   -----
*            A-Z     0-77B
*            0-9     0-63D
* 
*         ENTRY  -  (PA+1) = 434B SELECT PATH DA. 
*                   (PA+4) = PATH NAME. 
*                   (PA+5) = 2 IF SELECT PATH DA-DZ 
*                          = 1 IF SELECT PATH D0-D9 
* 
*         EXIT   -  NONE. 
* 
*         USES   -  NONE. 
* 
*         CALLS  -  ACKTST, SELP. 
* 
  
**        1. IF SELECT INPUT PATH SPECIFIED, FCOM SEQUENCE IS ENTERED.
* 
**        2. PERFORM ACKTST SEQUENCE ISSUE FUNCTION AND TEST STATUS.
* 
 SEL      RJM    ACKTST      PERFORM ACKTEST TO ISSUE FUNCTION
  
**        3. PERFORM SELP SEQUENCE TO SELECT PATH BY NAME.
* 
          RJM    SELP        SELECT PATH BY NAME
          LDD    PA+5 
          STM    SELPATH     FLAG PATH SELECTED 
  
**        4. IF  THE  CONTROLWARE  STATUS  NOT  SPR  (SELECTED  PATH
*             RESPONSE) GENERATE ERROR CODE 6033 AND ABORT. 
* 
          LDM    SB+1        GET CONTROLWARE STATUS 
          SHN    17-7        POSITION SPR BIT 
          MJN    WRT1A       IF SPR STATUS
          LJM    ERRACS      ABNORMAL CONTROLWARE STATUS
          EJECT 
 SEND     TITLE  SEND - SEND CONTROL MESSAGE. 
**        SEND - SEND CONTROL MESSAGE.
* 
*         THE  SEND  COMMAND  IS USED TO SEND A CONTROL MESSAGE OF N 12 
*         BIT C170 WORDS FROM Y ON PATH DA.  THE REMOTE NAD DEVICE CODE 
*         301 OCTAL  MUST  BE  ASSIGNED  OR AN ERROR EXIT IS PERFORMED. 
* 
*         THE FOLLOWING FORMAT IS USED FOR THE SEND COMMAND.
* 
*          SEND CONTROL MSG N WORDS FROM Y ON PATH DA 
*          SEND CONTROL MSG N WORDS FROM Y ON PATH DA ABT Z 
* 
*               N       Y        Z
*             ------  ------   -----
*             1-505B    OB     0-77B
*             1-325D           0-63D
* 
*         ENTRY  -  (PA+1) = 404B   SCON FUNCTION.
* 
*         EXIT   - READY ROUTINE IS EXITED TO.
* 
*         USES   -  NONE. 
* 
*         CALLS  -  ACKTST, FNWR, READY, SETHD. 
* 
  
**        1. PERFORM FNA SEQUENCE TO ISSUE SCON FUNCTION ON ASSIGNED
*           I/O CHANNEL.
* 
**        2. PERFORM ACKTST SEQUENCE TO TEST CONTROL STATUS FOR ACK.
* 
**        3. PERFORM FNA SEQUENCE TO ISSUE WRITE 12/8 FUNCTION ON 
*            ASSIGNED I/O CHANNEL.
* 
**        4. PERFORM SETHD SEQUENCE TO PREPARE FOR OUTPUT.
* 
 SEND     EQU    CON0        ENTER COMMON SEQUENCE
          EJECT 
 WRITE    TITLE  WRITE - WRITE DATA/CODE/SHORT
**        WRITE - WRITE DATA/CODE/SHORT 
* 
*         WRITE DATA IS USED TO WRITE DATA ON THE SELECTED PATH.
* 
*         WRITE  DATA  WITH  MARK  IS USED IT IS THE SAME AS WRITE DATA 
*         WITH A MARK APPENDED TO THE END OF THE OUTPUT DATA. 
* 
*         WRITE CODE  IS USED TO WRITE THE 32-BIT CODE BUFFER.
* 
*         WRITE SHORT CODE IS USED TO WRITE THE LEAST SIGNIFICANT  FIVE 
*         BITS TO CODE BUFFER.
* 
*          WRITE DATA N WORDS FROM Y
*          WRITE DATA N WORDS FROM Y ABT Z
*          WRITE CODE FROM Y
*          WRITE CODE FROM Y ABT Z
*          WRITE SHORT CODE FROM Y ABT Z
*          WRITE SHORT CODE FROM Y ABT Z
* 
*            N      Y     X     Z 
*         ------  ----  ----  ----- 
*         1-505B   OB    0-2  0-77B 
*         1-325D              0-63D 
* 
*         ENTRY - (PA+1) = CODE FOR COMMAND.
*                     140B-177B  = WRITE SHORT
*                          424B  = WRITE DATA 
*                          425B  = WRITE CODE 
* 
*                 (PA+2) = NUMBER OF C170 WORDS TO WRITE (N)
*                 (PA+3) = BUFFER ADDRESS FOR DATA (Y)
* 
*         EXIT   -  NONE. 
* 
*         USES   -  NONE. 
* 
*         CALLS  - ACKTST, FNWR.
  
**        1.  IF WRITE SHORT CODE SPECIFIED, PERFORM FCOM SEQUENCE. 
* 
**        2.  IF WRITE CODE SPECIFIED, PERFORM FNA SEQUENCE WITH WC 
*             FUNCTION (E425 OCTAL).
* 
**        3.  IF WRITE DATA SPECIFIED, PERFORM FNA SEQUENCE WITH WD 
*             FUNCTION (E424 OCTAL).
* 
**        4.  PERFORM  ACKTST SEQUENCE TO OBTAIN THE CONTROL STATUS 
*             AND TEST IT.
* 
 WRITE    LDM    SELPATH
          ZJN    WRT2        IF NO PATH SELECTED
          SBN    2
          NJN    WRT1        IF NOT A MAINT PATH
          LDD    AL 
          SBN    5
          PJN    WRT1        IF NOT ACCESS LEVEL GE 5 
 WRT0     LJM    ERRATL      ACCESS LEVEL TOO LOW 
  
 WRT1     RJM    ACKTST 
  
**        5.  PERFORM FNWR SEQUENCE TO ISSUE WRITE AND OUTPUT DATA. 
* 
          RJM    FNWR        ISSUE WRITE AND OUTPUT DATA
 WRT1A    LJM    XENT        RETURN TO STACK
  
 WRT2     LJM    ERRNPS 
          EJECT 
 ACKTST   TITLE  ACKTST - TEST FOR ACK RECEIVED 
**        ACKTST - TEST FOR ACK RECEIVED
* 
*         ENTRY  (PA+1) = FUNCTION TO BE ISSUED.
* 
*         EXIT   - ERRNAK IF NAK RECEIVED.
*                  ERRACS IF NOT ACK RECEIVED 
* 
*         USES   - NONE.
* 
*         CALLS  - HSTAT, FNA.
* 
 ACKTSTX  LJM    ** 
 ACKTST   EQU    *-1
          LDN    77B         ITERATION COUNT
          STD    D.Z1 
 ACK1     LDD    PA+1 
          RJM    FNA         ISSUE FUNCTION ON CHANNEL
          RJM    GCS         GET CONTROLWARE STATUS 
          SHN    17-7 
          MJN    ACKTSTX     IF SPR STAUS 
          SHN    -10
          LPN    37B
          LMN    ACK
          ZJN    ACKTSTX     RETURN ACK RECEIVED
          LMN    DMK-ACK
          ZJN    ACKTSTX     IF DATA WITH MARK
          LMN    1           CHECK FOR NAK
          ZJN    ERRNAK      IF NAK 
          LMN    RSA+NAK
          ZJN    ACKTSTX     RETURN IF RSA RESPONSE 
          LMN    TNR-RSA
          ZJN    ACK2        IF RESPONSE CODE 17B (TNR) 
          LMN    36B
          NJN    ERRACS      IF RESPONSE CODE 21B (CNT) 
 ACK2     LCN    0
 ACK3     RJM    TIME 
          PJN    ACK3        LOOP FOR 1000 USEC 
          SOD    D.Z1 
          NJN    ACK1        LOOP FOR ITERATION COUNT 
  
 ERRACS   LDC    ER.ACS      ABNORMAL CONTROLWARE STATUS
          UJN    ACK5        GO TO ERROR ROUTINE
  
 ERRNAK   LDC    ER.NAK 
 ACK5     LJM    ERROR
          EJECT 
 DPATH    TITLE  DPATH - PURGE PATH IF SELECTED.
**        DPATH  PURGE PATH IF SELECTED.
* 
*         ENTRY  - (SELPATH)   0 = NO PATH SELECTED.
*                              1 = NORMAL PATH SELECTED.
*                              2 = MAINTENANCE PATH SELECTED. 
*         EXIT   - NONE.
* 
*         USES   - PA+1.
* 
*         CALLS  - FNA. 
* 
 DPATHX   LJM    ** 
 DPATH    EQU    *-1
          LDM    SELPATH
          ZJN    DPATH1      NO PATHS SELECTED
          LDM    FPATH+1
          STD    PA+4        SAVE PATH NAME FOR DISCONNCT 
          ZJN    DPATH1      IF NO PATH IS SELECTED 
          LDN    0
          STM    SELPATH     CLEAR PATH SELECTED FLAG 
          LDC    DNP         DISCONNECT NAMED PATH
          STD    PA+1 
          RJM    ACKTST      ISSUE FUNCTION AND WAIT FOR ACK
          RJM    SELP        SEND PATH NAME AND READY 
 DPATH1   UJN    DPATHX     RETURN
          EJECT 
 HSTAT    TITLE  HSTAT - GET REQUESTED STATUS.
**        HSTAT - GET REQUESTED STATUS. 
* 
*         GET REQUESTED STATUS. 
* 
*         ENTRY - (A) = 0 = HARDWARE STATUS ONLY
*                       1 = HARDWARE STATUS AND CONTROL STATUS
*                       2 = HARDWARE STATUS AND GENERAL/DETAIL STATUS 
*                       3 = HARDWARE STATUS AND PATH STATUS 
*                       4 = HARDWARE STATUS AND REMOTE GENERAL/DETAIL 
*                           STATUS
* 
*         EXIT   - SB  = STATUS.
*                  WT  = WORDS TRANSMITTED. 
*                  (A) = CONTROLWARE STATUS.
*                  IB  = PATH STATUS
* 
*                  ERRDNR - ALL DATA NOT RECEIVED.
*                  ERRAHS - ABNORMAL HARDWARE STATUS. 
* 
*         USES   - PA, PA+1, WT, SB(1-42B), D.Z1, D.Z2, D.Z7. 
* 
*         CALLS  - FNA, TFS.
* 
  
**        1.  GET HARDWARE STATUS.
* 
 HSTATX   LJM    ** 
 HSTAT    EQU    *-1
          STD    PA          SAVE FUNCTION TYPE 
          LDD    LF 
          STD    D.Z1 
          LDC    STATH       HARDWARE STATUS FUNCTION 
          RJM    FNA         ISSUE HARDWARE STATUS FUNCTION 
          RJM    TFS         WAIT FOR FULL
          LDN    1
          IAM    SB,CH+40B
          DCN    CH+40B 
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
          LDD    PA 
          NJN    HST1        IF NOT HARDWARE STATUS 
          LJM    HST8        GO PROCESS HARDWARE STATUS 
  
 HST1     LDM    HSTC-1,PA
          STM    HST6        SAVE INPUT ADDRESS 
          STD    D.Z3 
          LDM    HSTB-1,PA
          STD    D.Z2        SAVE WORD COUNT
 HST2     LCN    0
          STI    D.Z3        SET SB TO 7777 TO FLAG NO STATUS RETURNED
          AOD    D.Z3 
          SOD    D.Z2 
          NJN    HST2        LOOP TO CLEAR ALL WORDS
  
          EJECT 
**        2.  PERFORM FNA SEQUENCE WITH FUNCTION FROM TABLE BELOW.
*               ----------------------------------------------- 
*               /  COMMAND         FUNCTION  FIRST WORD  WORD / 
*               /                            FOR STORE   COUNT/ 
*               /---------------------------------------------/ 
*               /  STATUS HARDWARE   E200     SB           1  / 
*               /  STATUS CONTROL    E201     SB(1)        1  / 
*               /  STATUS NAD        E401     SB(2)       22  / 
*               /  STATUS PATH TABLE E435     IB          44  / 
*               /  STATUS REMOTE NAD E446     SB(2)       22  / 
*               ----------------------------------------------- 
* 
          LDM    HSTA-1,PA   GET FUNCTION TO USE
          RJM    FNA         SEND CONTROL STATUS REQUEST
          LDD    LF 
          SHN    17-8 
          PJN    HST5        IF NOT A CONTROLWARE STATUS
          LDD    PA 
          SBN    4
          NJN    HST4        IF NOT REMOTE PATH STATUS
          LDC    3000B+MPI
          STD    PA+1 
          LDN    22 
          STD    PA+2        SAVE WORD COUNT
          LDC    SB+2 
          STD    PA+3        SAVE INPUT ADDRESS 
          LDM    SB+1        GET CONTROLWARE STATUS 
          LPN    37B
          LMN    ACK
          ZJN    HST3        IF ACKNOWLEDGE 
          LJM    ERRACS      ERROR ABNORMAL CONTROLWARE STATUS
  
 HST3     LJM    REA1        GO GET REMOTE DETAIL STATUS
  
 HST4     LDN    RD 
          RJM    FNA         ISSUE READ FUNCTION
  
**        3.  PERFORM TFS SEQUENCE TO WAIT FOR CHANNEL FULL.
* 
 HST5     RJM    TFS         TEST FOR FULL WITH STATUS
  
**        4.  INPUT STATUS WORDS WITH BLOCK INPUT (IAM).
* 
          LDM    HSTB-1,PA   GET NUMBER OF WORDS
          IAM    SB,CH+40B
 HST6     EQU    *-1
  
**        5.  IF ALL WORDS RECEIVED THEN STEP 7.
* 
  
**        6.  GENERATE ERROR CODE 6032 AND ABORT. 
* 
          NJN    ERRDNR      IF NOT ALL WORDS RECEIVED
  
**        7.  IF STATUS CONTROL NOT SPECFIED CONTINUE AT STEP 16. 
* 
 HST7     DCN    CH+40B      DEACTIVATE CHANNEL 
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
  
**        13. IF HARDWARE STATUS WHEN MASKED WITH 735 OCTAL  IS  ZERO 
*             EXIT. 
* 
**        14. IF  HARDWARE  STATUS  WHEN  MASKED  WITH  10 OCTAL ZERO 
*             EXIT. 
* 
**        15. PERFORM FNA SEQUENCE WITH CLEAR CHANNEL PARITY FUNCTION.
* 
 HST8     LDM    SB 
          LPC    MASKHS 
          ZJN    HST9        IF NOT ABNORMAL
          LPN    MASKCPE
          ZJN    ERRAHS      IF NOT MEMORY PARITY 
          LDC    CPE
          RJM    FNA         CLEAR MEMORY PARITY
 ERRAHS   LDC    ER.AHS 
          UJN    HST8A       ERROR
  
**        16. SET LF REGISTER TO LAST FUNCTION ISSUED PRIOR TO HSTAT
*             SEQUENCE. 
* 
 HST9     LDD    D.Z1 
          ZJN    HST10       IF NO FUNCTION WAS PRESENT 
          STD    LF          RESET LF REGISTER TO FUNCTION BEFORE HSTAT 
 HST10    LDM    SB+1        LOAD CONTROLWARE STATUS
          LJM    HSTATX      RETURN 
  
 ERRDNR   LDC    ER.DNR      ERROR STATUS DATA NOT RECEIVED 
 HST8A    UJN    FNA2        ERROR
  
 HSTA     VFD    12/STATC    CONTROLWARE STATUS FUNCTION
          VFD    12/STAT     GENERAL STATUS FUNCTION
          VFD    12/RPST     PATH STATUS TABLE FUNCTION 
          VFD    12/RSR      REMOTE GENERAL STATUS FUNCTION 
  
 HSTB     VFD    12/1        WORD COUNT FOR CONTROLWARE STATUS
          VFD    12/22       WORD COUNT FOR GENERAL/DETAIL STATUS 
          VFD    12/46
          VFD    12/22       WORDS COUNT FOR REMOTE DETAIL STATUS 
  
 HSTC     VFD    12/SB+1     INPUT ADDRESS FOR CONTROLWARE STATUS 
          VFD    12/SB+2     INPUT ADDRESS FOR GENERAL/DETAIL STATUS
          VFD    12/IB       INPUT ADDRESS FOR PATH STATUS
          VFD    12/SB+2     INPUT ADDRESS FOR REMOTE DETAIL STATUS 
          EJECT 
 FNA      TITLE  FNA - SEND FUNCTION. 
**        FNA - SEND FUNCTION.
*         FUNCTION SENT TO EQUIPMENT STATUS TESTED. 
* 
*         ENTRY - (A) = FUNCTION TO SEND. 
* 
*         EXIT  - FUNCTION ISSUED.
*                 (LF) = LAST FUNCTION ISSUED.
* 
*                 ERRABF - IF CH ACTIVE BEFORE FUNCTION.
*                 ERRNIF - IF NO INACTIVE TO FUNCTION.
* 
*         USES   - LF.
* 
*         CALLS  - TIME.
* 
  
**        1. IF CHANNEL ACTIVE ON ENTRY GENERATE ERROR CODE 6013
*            AND ABORT. 
* 
 FNAX     LJM    ** 
 FNA      EQU    *-1
          AJM    ERRABF,CH   ERROR IF ACTIVE BEFORE FUNCTION
  
**        2. MASK FUNCTION FROM (A) WITH 777B ADD EQUIPMENT NUMBER
*            AND STORE INTO LF REGISTER.
  
          STD    LF 
          SHN    -6 
          NJN    FNA4        IF NOT A DATA XFER FUNCTION
          STD    D.Z2        CLEAR COUNTER
 FNA1     RJM    GCS         GET CONTROLWARE STATUS 
          SHN    17-9        POSITION PRIMED BIT
          MJN    FNA4        IF PRIMED
          SOD    D.Z2 
          NJN    FNA1        LOOP UNTIL PRIMED OR COUNT EXPIRED 
  
 ERRCNP   LDC    ER.CNP 
 FNA2     UJN    FNA8        GO TO ERROR ROUTINE
  
 FNA4     LDD    LF 
          LPC    777B        MASK LOWER BITS
          ADC    ** 
 FNA5     EQU    *-1         *** EQUIPMENT NO. STORED HERE IN BITS 9-11 
          STD    LF 
  
**        3. ISSUE FUNCTION ON ASSIGNED I/O CHANNEL.
* 
          FAN    CH+40B 
  
**        4. IF CHANNEL NOT INACTIVE WITHIN 524 MSEC GENERATE 
*            CODE 6015 AND ABORT. 
* 
          RJM    TIJM        WAIT FOR INACTIVE
          LDN    0
          STD    D.Z2        CLEAR ITERATION COUNTER
 FNA6     LDD    LF 
          SHN    17-8 
 FNA7     PJN    FNAX        IF NOT A FUNCTION FOR CONTROLWARE
          RJM    GCS         GET CONTROLWARE STATUS 
          SHN    17-8 
          PJN    FNA7        IF STATUS COMPLETE 
          SOD    D.Z2 
          NJN    FNA6        IF NOT TIME OUT
 ERRCSNR  LDC    ER.CSNR
 FNA8     LJM    ERROR
  
          EJECT 
 FNWR     TITLE  FNWR - FUNCTION FOR WRITE AND OUTPUT.
**        FNWR - FUNCTION FOR WRITE AND OUTPUT. 
* 
*         ENTRY  - NONE.
* 
*         EXIT   - NONE.
* 
*         CALLS  - FNA, OUTBUF. 
* 
*         USES   - NONE.
* 
  
**        1. PERFORM FNA SEQUENCE WITH A WRITE FUNCTION.
* 
 FNWRX    LJM    ** 
 FNWR     EQU    *-1
          LDN    0
          STD    PA+1        CLEAR CHAINING IN PROGRESS 
          LDN    WR 
          RJM    FNA         ISSUE WRITE FUNCTION 
  
**        2. PERFORM OUTBUF SEQUENCE WITHOUT RANGE TEST OF OB.
* 
          LCN    0
          RJM    OUTBUF      OUTPUT DATA
          UJN    FNWRX       RETURN TO CALLER 
          SPACE  3
 GCS      TITLE  GCS - GET CONTROLWARE STATUS.
**        GCS - GET CONTROLWARE STATUS. 
* 
*         ENTRY - NONE. 
* 
*         EXIT  - (A) = CONTROLWARE STATUS. 
* 
*         CALLS - TIJM, TFS.
* 
*         USES  - SB+1. 
* 
  
 GCSX     LJM    ** 
 GCS      EQU    *-1
          LDC    STATC
          ADM    FNA5        ADD EQUIPMENT NUMBER IN
          FAN    CH+40B      ISSUE FUNCTION 
          RJM    TIJM        TEST FOR INACTIVE
          RJM    TFS         ACTIVATE AND TEST FOR FULL 
          IAN    CH+40B 
          STM    SB+1        STORE STATUS 
          DCN    CH+40B 
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
          UJN    GCSX        RETURN 
          EJECT 
 INBUF    TITLE  INBUF - INPUT DATA USING IAM/IAN.
**        INBUF - INPUT DATA USING IAM/IAN. 
* 
*         IF BLOCK IS DEFINED AT ASSEMBLY TIME USE IAM IF NOT 
*         INPUT USING IAN.
* 
*         ENTRY - (PA+1)   = CHANING FLAG.
*                 (PA+2)   = WORDS TO BE INPUT. 
*                 (PA+3)   = ADDRESS TO INPUT TO. 
* 
*         EXIT  - WORDS OUTPUT. 
*                 (BD.CHAIN) = (PA+1) 
*                 (A)        = (PA+1) 
* 
*         USES   - D.Z1, WT, BD.CHAIN.
* 
*         CALLS  - PINOUT, TSTBF, TIME. 
* 
  
**        1. IF BUFFER RANGE NOT TO BE MADE (A) MINUS CONTINUE AT 
*            STEP 3.
* 
 INBUFX   LJM    ** 
 INBUF    EQU    *-1
          MJN    INB1        IF SPECIAL REQUEST 
  
**        2.  PERFORM TSTBF TO CHECK INPUT IN RANGE OF IB.
* 
          LDD    IA 
          RJM    TSTBF       TEST ADDRESS FOR RANGE OF IB 
  
**        3.  PERFORM PINOUT SEQUENCE TO INSURE CH IS ACTIVE. 
* 
 INB1     RJM    PINOUT      INSURE CHANNEL ACTIVE
*IF,-DEF,BLOCK
          STM    INB9        SAVE ADDRESS TO INPUT TO 
  
**        4.  IF CHANNEL NOT FULL WITHIN 128 USEC GENERATE CODE 
*             6021 AND ABORT. 
* 
 INB5     LDN    0           INITIALIZE FOR LONG DELAY
 INB6     FJM    INB8,CH     IF DATA IS AVAILABLE 
          IJM    INB10,CH 
          SBN    1
          NJN    INB6        IF DELAY NOT EXPIRED 
 ERRAEI   LDC    ER.AEI      ACTIVE AND EMPTY ON INPUT
          LJM    ERROR
  
**        5.  INPUT ONE WORD TO SPECIFIED ADDRESS, INCREMENT WT 
*             REGISTER, IF NOT DONE CONTINUE AT STEP 4. 
* 
 INB8     IAN    CH+40B      GET WORD 
          STM    **,WT       STORE IT INTO INPUT BUFFER 
 INB9     EQU    *-1         ADDRESS OF INPUT BUFFER STORED HERE
          AOD    WT          BUMP WORDS TRANSMITTED 
          SBD    PA+2 
          MJN    INB5        IF REQUEST WORD COUNT NOT SATISFIED
  
**        6.  IF CHAINNING IN PROGRESS CONTINUE AT STEP 7, ELSE 
*             IF CHANNEL INACTIVE CONTINUE AT STEP 7, ELSE DEACTIVATE 
*             THE CHANNEL.
* 
 INB10    LDD    PA+1 
          NJN    INB11       IF CHAINING IN PROGRESS
          DCN    CH+40B 
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
  
**        7.  SET/CLEAR CHAIN FLAG AND RETURN.
* 
 INB11    STM    BD.CHAIN    SET/CLEAR CHAINING FLAG
*ENDIF
*IF,DEF,BLOCK 
          STM    INB1        SAVE ADDRESS TO INPUT TO 
  
**        8.  INPUT REQUESTED WORDS WITH BLOCK INPUT (IAM)
*             TO REQUESTED ADDRESS. 
* 
          LDD    PA+2        GET WORDS COUNT
          IAM    **,CH
 INB5     EQU    *-1         *** FWA STORED HERE
  
**        9. UPDATE WT REGISTER WITH NUMBER OF WORDS RECEIVED.
* 
          STD    D.Z1        SAVE REMAINDER 
          LDD    PA+2 
          SBD    D.Z1 
          STD    WT          SET WORDS TRANSMITTED TO WC
  
**        10. SET/CLEAR CHAIN FLAG. 
* 
          LDD    PA+1 
          STM    BD.CHAIN    SET CLEAR CHAIN FLAG 
  
**        11. IF CHAIN REQUESTED RETURN ELSE DISCONNECT THE 
*             CHANNEL IF ACTIVE AND RETURN. 
* 
          NJN    INB99       IF CHAINING ACTIVE 
          DCN    CH+40B 
          SFM    ERCPE1,CH   CHECK FOR CH PARITY ERROR
*ENDIF
 INB99    LJM    INBUFX      RETURN 
          EJECT 
 MAINF    TITLE  MAINF - ISSUE MAINTENANCE FUNCTION TO REMOTE NAD.
**        MAINF - ISSUE MAINTENANCE FUNCTION TO REMOTE NAD. 
* 
*         ENTRY  - (PA+1) = MAINTENANCE FUNCTION TO ISSUE.
*                  (PA+2) = NUMBER OF WORDS TO SEND.
*                  (PA+3) = ADDRESS TO OUTPUT FROM. 
*                  (PA+5) = NON ZERO IF PA+6 VALID. 
*                  (PA+6) = NUMBER OF WORDS TO INPUT. 
*                  (PA+7) = ADDRESS TO INPUT DATA TO. 
*                  (OB(PA+3)-OB((PA+3)+N-1) = FUNCTION DATA TO SEND.
* 
*         EXIT   - (BD.CHAIN) = 0 
*                  (SB)       = HARDWARE STATUS.
*                  (SB+1)     = CONTROLWARE STATUS. 
* 
*         CALLS  - FNA, SETHD, TSTBF. 
* 
*         USES   - OB((PA+3)+3) 
* 
  
**        1.  PERFORM TSTBF TO CHECK IF ADRESSES IN RANGE OF OB.
* 
 MAINFX   LJM    ** 
 MAINF    EQU    *-1
          LDD    OA 
          RJM    TSTBF       TEST IF IN RANGE OF OB 
  
**        2.  STORE MAINTENANCE FUNCTION INTO OUTPUT ADDRESS. 
* 
          LDD    PA+1        GET FUNCTION FOR MAINF 
          STM    3,PA+3      STORE MAINTENANCE FUNCTION 
  
**        3.  PERFORM FNA SEQUENCE TO ISSUE MAINTENANCE FUNCTION ON 
*             THE ASSIGNED I/O CHANNEL. 
* 
          LDC    MPF
          STD    PA+1 
          RJM    ACKTST         ISSUE MAINTENANCE FUNCTION
  
**        4.  PERFORM SETHD SEQUENCE TO ISSUE THE WR FUNCTION,
*             OUTPUT THE DATA AND PERFORM THE READY SEQUENCE. 
* 
          LDM    TCU
          STM    0,PA+3      STORE TCU ENBLES 
          LDM    LTA
          STM    2,PA+3      STORE LOGICAL TCU ADDRESS
          LDM    AC1
          STM    4,PA+3      STORE ACCESS CODE
          LDM    AC2
          STM    5,PA+3      STORE ACCESS CODE
          RJM    FNWR 
          RJM    READY       ISSUE READY
  
**        5.  PERFORM ACKTST TO ISSUE MAINTENANCE INPUT FUNCTION
*             AND TEST FOR ACK RESPONSE.
* 
          LDC    MPI
          STD    PA+1 
          RJM    ACKTST 
  
**        6.  PERFORM FNA SEQUENCE TO ISSUE READ FUNCTION.
* 
          LDN    RD 
          RJM    FNA
  
**        7.  PERFORM INBUF SEQUENCE TO INPUT STATUS RESPONSE TO
*             OB(0)-OB(33B).
* 
          LDN    32B
          STD    PA+2        SET WORD COUNT 
          LDD    OA 
          STD    PA+3        SET INPUT ADDRESS TO OB
          STD    PA+1        FLAG CHAINING IN PROGESS 
          LCN    0
          RJM    INBUF       INPUT STAUS
  
**        8.  IF NO MORE DATA TO INPUT CONTINUE AT STEP 10. 
* 
          LDD    PA+6 
          ZJN    MAI1        IF NO WORDS TO INPUT 
  
**        9.  INPUT REQUESTED WORDS (PA+6) TO ADDRESS SPECIFIED BY
*             (PA+7). IF ALL WORDS NOT RECEIVED GENERATE ERROR CODE 
*             6032 AND ABORT. 
* 
          STD    PA+2        SAVE WORD COUNT
          LDD    PA+7 
          STD    PA+3        SAVE INPUT ADDRESS 
          LDN    0
          STD    PA+1 
          RJM    INBUF       GET REST OF WORDS
          LDD    PA+6 
          SBD    WT 
          ZJN    MAI1        IF WORD COUNT IS CORRECT 
          LDD    PA+5 
          ZJN    MAI1        IF WT NOT TO BE TESTED 
          LJM    ERRDNR 
  
**        10. CLEAR CHAINING IN PROGRESS AND DISCONNECT THE ASSIGNED
*             I/O CHANNEL.
* 
 MAI1     STM    BD.CHAIN 
          DCN    CH+40B 
          LJM    MAINFX      RETURN TO CALLER 
          EJECT 
 OUTBUF   TITLE  OUTBUF - OUTPUT DATA USING OAM/OAN INSTRUCTIONS. 
**        OUTBUF - OUTPUT DATA USING OAM/OAN INSTRUCTIONS.
* 
*         IF BLOCK IS DEFINE DURING UPDATE OUTBUF USES OAM TO OUTPUT
*         DATA.  IF BLOCK IS NOT DEFINED DURING UPDATE OUTBUF USES
*         OAN INSTRUNCTIONS WITH FULL CHANNEL PROTECTION. 
* 
*         ENTRY - (PA+1) = CHANING FLAG.
*                 (PA+2) = WORDS TO BE SEND.
*                 (PA+3) = ADDRESS TO OUTPUT FROM.
*                 BD.CHAIN = CHAINING IN PROGRESS FLAG. 
* 
*         EXIT  - WORDS OUTPUT. 
*                 (A) = PA+1. 
*                 BD.CHAIN = PA+1.
* 
*                 ERRDNA - IF DATA NOT ACCEPTED.
*                 ERRUCD - IF UNEXPECTED CHANNEL DISCONNECT.
* 
*         USES   - D.Z1, BD.CHAIN, WT.
* 
*         CALLS  - TIME.
  
 OUTBUFX  LJM    ** 
 OUTBUF   EQU    *-1
  
**        1.  IF CALLED FROM LOAD CONTINUE AT STEP 3. 
* 
          MJN    OUT1        IF SPECIAL REQUEST 
  
**        2.  PERFORM TSTBF SEQUENCE TO SEE IF IN RANGE OF OB.
* 
          LDD    OA 
          RJM    TSTBF       TEST IF IN RANGE OF OB 
  
**        3.  PERFORM PINOUT SEQUENCE TO INSURE CHANNEL ACTIVE. 
* 
 OUT1     RJM    PINOUT      CHECK CHANNEL CONDITION
*IF,-DEF,BLOCK
          STM    OUT9        SET BUFFER ADDRESS 
  
**        8.  IF CHANNEL NOT ACTIVE AND EMPTY WITHIN 262 MSEC 
*             GENERATE **DATA NOT ACCEPTED** AND ABORT. 
* 
 OUT6     LDN    0
 OUT7     SBN    1
          ZJN    ERRDNA      ERROR IF DATA NOT ACCEPTED 
  
 OUT8     FJM    OUT7,CH
  
**        9.  IF CHANNEL INACTIVE - ERROR UNEXPECTED DISCONNECT 
* 
          IJM    ERRUCD,CH
  
**        10. OUTPUT REQUESTED WORD WITH SINGLE WORD OUTPUT (OAN).
* 
          LDM    **,WT
 OUT9     EQU    *-1
          OAN    CH+40B 
  
**        11. SET WT REGISTER TO NUMBER OF WORDS OUTPUT IF NOT
*             DONE THEN STEP 7. 
* 
          AOD    WT 
          SBD    PA+2 
          MJN    OUT6        IF ALL WORDS NOT OUTPUT
  
**        12. IF CHAIN REQUESTED THEN STEP 13.
* 
          LDD    PA+1 
          NJN    OUT14       IF CHAINING REQUESTED
  
**        13. IF CHANNEL NOT EMPTY WITHIN 128 USEC THEN GENERATE
*                   **NO EMPTY ON LAST OUTPUT** AND ABORT 
* 
          RJM    TEJM        TEST FOR EMPTY 
  
**        14. IF CHANNEL ACTIVE DISCONNECT IT.
* 
          DCN    CH+40B 
  
**        15. SET/CLEAR CHAIN FLAG AND RETURN.
* 
 OUT14    LDD    PA+1        CHAINING FLAG
          STM    BD.CHAIN    SET CLEAR CHAINING IN PROGRESS FLAG
*ENDIF
*IF,DEF,BLOCK 
          STM    OUT6 
          LDD    PA+2 
  
**        6.  OUTPUT THE REQUESTED WORDS FROM SPECIFIED ADDRESS 
*             USING BLOCK OUTPUT (OAM). 
* 
          OAM    **,CH
 OUT6     EQU    *-1         *** FWA STORED HERE
          STD    D.Z1 
  
**        7. IF NO EMPTY WITHIN 524 MSEC THEN GENERATE **DATA 
*            NOT ACCEPTED** AND ABORT.
* 
          RJM    TEJM        GO TEST FOR EMPTY
  
**        8.  IF CHAIN REQUESTED AND CHANNEL INACTIVE GENERATE
*             **UNEXPECTED CH DISCONNECT** AND ABORT. 
* 
**        9.  IF CHAIN NOT REQUESTED AND CHANNEL ACTIVE,
*             DEACTIVATE THE CHANNEL. 
* 
          LDD    PA+1        CHAIN FLAG 
          NJN    OUT7        IF CHAIN REQUESTED 
          DCN    CH+40B 
          UJN    OUT8 
  
 OUT7     IJM    ERRUCD,CH   CHANNEL INACTIVE NOT EXPECTED
 OUT8     LDD    PA+2 
  
**        10. STORE WORDS TRANSMITTED IN WT REGISTER. 
* 
          SBD    D.Z1 
          STD    WT          SET WORDS TRANSMITTED
  
**        11. SET/CLEAR CHAIN FLAG AS REQUESTED AND RETURN. 
* 
          LDD    PA+1 
          STM    BD.CHAIN    SET/CLEAR CHAIN FLAG 
*ENDIF
          UJN    OUTBUFX     RETURN TO CALLER 
  
 ERRUCD   LDC    ER.UCD      ERROR UNEXPECTED DISCONNECT
          UJN    PIN1        ERROR
  
 ERRDNA   LDC    ER.DNA      ERROR DATA NOT ACCEPTED
          UJN    PIN1 
          EJECT 
 PINOUT   TITLE  PINOUT - PREPARE FOR INPUT OUTPUT. 
**        PINOUT - PREPARE FOR INPUT OUTPUT.
* 
*         ENTRY  - NONE.
* 
*         EXIT   - (A)  = (PA+3). 
*                - (WT) = 0 
*                - (BD.CHAIN) = 1 IF CHANNEL SHOULD BE ACTIVE 
*                - (BD.CHAIN) = 0 IF CHANNEL SHOULD BE INACTIVE 
* 
*                - ERRIOE - INACTIVE ON ENTRY 
*                - ERRAAE - CH ACTIVE ON ENTRY
*                - ERRIAA - CH INACTIVE AFTER ACN 
* 
*         CALLS  - NONE.
* 
*         USES   - NONE.
* 
  
**        1.  IF CHAINING FLAG SET AND CHANNEL ACTIVE RETURN. 
* 
*         2.  IF CHAINING FLAG SET  AND  CHANNEL  INACTIVE  THEN
*             GENERATE **CH INACTIVE ON ENTRY** AND ABORT.
* 
 PINOUTX  LJM    ** 
 PINOUT   EQU    *-1
          LDM    BD.CHAIN 
          ZJN    PIN2        IF CHAINING I/O NOT IN PROGRESS
          AJM    PIN3,CH     CHAINING--  OK IF STILL ACTIVE 
 ERRIOE   LDC    ER.IOE 
 PIN1     LJM    ERROR
  
**        3.  IF CHAINING FLAG CLEAR  AND  CHANNEL  ACTIVE  THEN
*             GENERATE **CH ACTIVE ON ENTRY** AND ABORT.
* 
**        4.  IF  CHAINING  FLAG CLEAR AND CHANNEL INACTIVE THEN
*             ACTIVATE CHANNEL. 
* 
**        5.  IF CH INACTIVE THEN GENERATE  **CH  INACTIVE  AFTER 
*             ACN** AND ABORT.
* 
 PIN2     AJM    ERRAAE,CH   ERROR IF CHANNEL ACTIVE AND NOT CHAINING 
          ACN    CH+40B 
          IJM    ERRIAA,CH   ERROR IF CH INACTIVE AFTER ACTIVATE
 PIN3     LDN    0
          STD    WT          CLEAR WT REGISTER
          LDD    PA+3 
          UJN    PINOUTX     RETURN 
          EJECT 
 RDSYS    TITLE  RDSYS - READ IN SYS FILE TO IB.
**        RDSYS - READ IN SYS FILE TO IB. 
* 
*         ENTRY - NONE. 
* 
*         EXIT  - PA+2 = WORDS RECEIVED ON SYSRD. 
* 
*         CALLS - BD.XSYS.
* 
*         USES  - ALR, WTUP, PA, PA+2.
* 
  
 RDSYSX   LJM    ** 
 RDSYS    EQU    *-1
          LDN    D.Z2 
          STD    PA          STATUS TO D.Z2 
          STM    BD.CHAIN 
          RJM    BD.XSYS     GO READ 500B WORDS TO IB 
          LPN    1
          ADD    WT          MAKE WORD COUNT EVEN 
          STD    PA+2 
          RAD    SC          UPDATE WT BITS 2**0-2**11
          SHN    -12
          RAM    WTUP        UPDATE WT BITS 2**12-2**23 
          LDD    PA+2 
          UJN    RDSYSX      RETURN TO CALLER 
          EJECT 
 SELP     TITLE  SELP - SELECT PATH BY NAME 
**        SELP - SELECT PATH BY NAME
* 
*         ENTRY  - (PA+4) = PATH NAME CHARACTER 2 
* 
*         EXIT   - (A) = MINUS IF PATH CONNECTED. 
* 
*         CALLS  - TEJM, FNA. 
* 
*         USES   - NONE.
* 
  
**        1. PERFORM FNA SEQUENCE TO ISSUE WRITE 12/8 FUNCTION. 
* 
 SELPX    LJM    ** 
 SELP     EQU    *-1
          LDN    WR 
          RJM    FNA         ISSUE WRITE FUNCTION 
  
**        2.  ACTIVATE THE ASSIGNED I/O CHANNEL.
* 
**        3.  OUTPUT WORD CONTAINING ALPHA CHARACTER D IN ASCII.
* 
          ACN    CH+40B 
          LDC    ASCIID 
          OAN    CH+40B 
          RJM    TEJM        TEST FOR EMPTY 
  
**        4.  OUTPUT PATH NAME VARIBLE ON THE ASSIGNED I/O CHANNEL. 
* 
**        5.  PERFORM TEJM TO TEST FOR EMPTY. 
* 
          LDD    PA+4 
          OAN    CH+40B 
          RJM    TEJM        TEST FOR EMPTY 
  
**        6. IF THE CHANNEL IS ACTIVE THEN DEACTIVATE IT. 
* 
          DCN    CH+40B 
  
**        7.  PERFORM READY SEQUENCE TO ISSUE READY AND TEST STATUS,
*             THEN RETURN TO CALLER.
* 
          RJM    READY       ISSUE READY
 SELP1    UJN    SELPX       RETURN 
          EJECT 
 SETADD   TITLE  SETADD - FUNCTION AND SET ADDRESS AND LENGTH.
**        SETADD - FUNCTION AND SET ADDRESS AND LENGTH. 
* 
*         COMMON SEQUENCE USED TO SET ADDRESS AND LENGTH. THIS SEQUENCE 
*         PROVIDES THE MEANS BY WHICH ADDRESS AND LENGTH REGISTERS  ARE 
*         LOADED. 
* 
*         ENTRY - (PA+4) = ADDRESS UPPER 8 BITS.
*                 (PA+5) = ADDRESS LOWER 8 BITS.
*                 (PA+6) = LENGTH LOWER 8 BITS. 
*                 (PA+7) = LENGTH LOWER 8 BITS. 
* 
*         EXIT  - SET ADDRESS AND LENGTH FUNCTION COMPLETED.
* 
*                 ERRCNP - CHANNEL NOT PRIMED.
*                 ERRDNA - ALL DATA NOT ACCEPTED. 
*                 ERRUCD - UNEXPECTED CH DISCONNECT.
* 
*         USES  -  NONE.
* 
*         CALLS - NONE. 
* 
  
**        1. PERFORM FNA TO ISSUE SET ADDRESS FUNCTION. 
* 
 SETADDX  LJM    ** 
 SETADD   EQU    *-1
          LDC    SA 
          RJM    FNA         SEND SETADDRESS FUNCTION 
  
**        2.  ACTIVATE THE ASSIGNED I/O CHANNEL.
* 
*         3.  OUTPUT FOUR WORDS CONTAINING THE ADDRESS AND LENGTH.
* 
          ACN    CH+40B 
          LDN    4
          OAM    PA+4,CH+40B OUTPUT SET ADDRESS AND LENGTH DATA 
  
**        4.  IF FOUR WORDS NOT TRANSMITTED GENERATE ERROR CODE 
*             6017 AND ABORT. 
* 
          ZJN    SET1        IF ALL DATA ACCEPTED 
 SET0     LJM    ERRDNA      ERROR DATA NOT ACCEPTED
  
**        5.  PERFORM TEJM SEQUENCE TO TEST FOR EMPTY.
* 
 SET1     RJM    TEJM        TEST FOR EMPTY 
  
**        7.  DISCONNECT THE ASSIGNED I/O CHANNEL.
* 
          DCN    CH+40B 
          UJN    SETADDX     RETURN 
          EJECT 
 TEJM     TITLE  TEJM - TEST FOR CHANNEL EMPTY. 
**        TEJM - TEST FOR CHANNEL EMPTY.
* 
*         ENTRY  - NONE.
* 
*         EXIT   - CHANNEL EMPTY. 
* 
*                - ERRDNA - IF DATA NOT ACCEPTED. 
* 
*         USES   - NONE.
* 
*         CALLS  - TIME.
* 
  
 TEJMX    LJM    ** 
 TEJM     EQU    *-1
  
**        1.  IF CHANNEL NOT EMPTY WITHIN 524 MSEC THEN GENERATE
*             **DATA NOT ACCEPTED** AND ABORT.
* 
          LDN    0
 TEJ1     EJM    TEJMX,CH    RETURN CHANNEL IS EMPTY
          RJM    TIME 
          PJN    TEJ1        IF DELAY NOT EXPIRED 
          UJN    SET0        ERROR DATA NOT ACCEPTED
          EJECT 
 TIJM     TITLE  TIJM - TEST CHANNEL FOR INACTIVE 
**        TIJM - TEST CHANNEL FOR INACTIVE
* 
*         ENTRY  - NONE.
* 
*         EXIT   - IF CHANNEL NOT INACTIVE IN 524 MSEC
* 
*         CALLS  - TIME.
* 
*         USES   NONE.
* 
  
 TIJMX    LJM    ** 
 TIJM     EQU    *-1
          LDN    0
 TIJM1    IJM    TIJMX,CH    IF CH INACTIVE RETURN
          RJM    TIME 
          PJN    TIJM1
 ERRNIF   LDC    ER.NIF 
          UJN    TFS2 
          EJECT 
 TFS      TITLE  TFS - TEST FOR CHANNEL FULL. 
**        TFS - TEST FOR CHANNEL FULL.
* 
*         ENTRY  - STATUS FUNCTION ISSUED.
* 
*         EXIT   - CHANNEL FULL.
* 
*         USES   - NONE.
* 
*         CALLS  - TIME.
* 
  
**        1.  ACTIVATE THE I/O CHANNEL. 
* 
 TFSX     LJM    ** 
 TFS      EQU    *-1
          ACN    CH+40B 
  
**        2.  IF CHANNEL FULL WITHIN 524 MSEC RETURN. 
* 
          LDN    0
 TFS1     FJM    TFSX,CH
          RJM    TIME 
          PJN    TFS1        IF DELAY NOT EXPIRED 
  
**        3.  GENERATE ERROR CODE 6010 AND ABORT. 
* 
 ERRNFS   LDC    ER.NFS      ERROR NOT FULL ON CONTROLWARE STAUS
 TFS2     LJM    ERROR
          EJECT 
 TIME     TITLE  TIME - DELAYS FOR COMMANDS.
**        TIME - SET DELAYS FOR COMMANDS. 
* 
*         ENTRY  - (A) = MINUS IF SET SHORT DELAY 1 MSEC. 
*                  (A) = 0 IF SET LONG DELAY 524 MSEC.
*                  (A) = POSITIVE CHECK TIME. 
* 
*         EXIT   - NONE.
* 
*         USES   - D.Z3, D.Z4, D.Z5, D.Z6.
* 
*         CALLS  - NONE.
* 
  
**        1. IF CHECK TIME ((A) NON ZERO AND POSITIVE) CONTINUE 
*            AT STEP 4. 
* 
 TIME0    LDN    1           FORCE NON ZERO INTO A REGISTER 
 TIMEX    LJM    ** 
 TIME     EQU    *-1
  
**        2. IF SET LONG DELAY INITIALZE FOR 524 MSEC AND 
*            CONTINUE AT STEP 4 
* 
          MJN    TIME1       IF SHORT DELAY 
          NJN    TIME3       IF NOT INITIALIZE
          LDC    177B 
          STD    D.Z4 
          LCN    0
          UJN    TIME2       SET UP FOR LONG DELAY 524 MSEC 
  
**        3. INITIALZE FOR SHORT DELAY 128 USEC THEN STEP 4.
* 
 TIME1    LDN    0
          STD    D.Z4 
          LDC    1000        1000 USEC TIME 
 TIME2    STD    D.Z5 
  
**        4. COMPUTE TIME EXPIRED IF EQUAL DELAY  VALUE  EXPIRED
*            RETURN  WITH  (A)  =  MINUS.  IF NOT EXPIRED RETURN
*            WITH (A) = POSITIVE. 
* 
          IANN   54B         GET CLOCK
          STD    D.Z3 
 TIME3    IANN   54B
          SBD    D.Z3 
          PJN    TIME4       IF NO WRAP AROUND
          ADC    10000B 
 TIME4    STD    D.Z6 
          RAD    D.Z3        UPDATE CLOCK FOR NEXT PASS 
          LDD    D.Z5 
          SBD    D.Z6        SUBTACT DIFFERENCE 
          STD    D.Z5 
 TIME5    PJN    TIME0       IF NOT EXPIRED 
          AOD    D.Z5 
          SOD    D.Z4        DECREMENT UPPER 12-BIT COUNTER 
          PJN    TIME5       IF NOT EXPIRED 
          UJN    TIMEX       TIME EXPIRED RETURN
          EJECT 
 TSTBF    TITLE   TSTBF - TEST IF IN RANGE OF IB/OB.
**        TSTBF - TEST IF IN RANGE OF IB/OB.
* 
*         ENTRY- (PA+2) = WC IF NON ZERO
*                (PA+3) = BUFFER ADDRESS IF (PA+2) NONZERO
*                (A)    = FWA OF BUFFER TO TEST FOR RANGE.
* 
*         EXIT - NONE.
*                (PA+2)  - WORDS TO INPUT.
*                (PA+3)  - FWA TO READ DATA TO. 
* 
*                ERRWC   - IF WORD COUNT ERROR. 
  
**        STEP -01- IF WORD COUNT ZERO OR ADDRESS OUT OF RANGE OF IB
*                   THEN GENERATE **WC OR BUFFER INDEX OUT OF RANGE** 
*                   AND ABORT.
* 
 TSTBFX   LJM    ** 
 TSTBF    EQU    *-1
          STD    D.Z1        SAVE FWA OF BUFFER TO TEST 
          LDD    PA+2 
          ZJN    ERRWC       ERROR IF NO WORDS TO INPUT 
          LDD    PA+3 
          SBD    D.Z1 
          MJN    ERRWC       ERROR IF FWA IS BELOW IB/OB
          ADD    PA+2 
          ADC    -LIB-1 
          MJN    TSTBFX      RETURN IF LWA IS BELOW IB/OB 
  
 ERRWC    LDC    ER.WC       ERROR IF WC OR WC+BA PROBLEM 
 TSTBF1   UJN    ERROR
          EJECT 
 ERROR    TITLE  ERROR - LCN-ERROR PROCESSING ROUTINES. 
  
 ERRABF   LDC    ER.ABF      CH ACTIVE BEFORE FUNCTION
          UJN    ERROR
  
 ERRIAA   LDC    ER.IAA      CHANNEL INACTIVE AFTER AN ACTIVATE 
  
***       COMMON SEQUENCE ABT 
*         ------------------- 
* 
*         COMMON SEQUENCE ABT USED TO PROCESS ABORTS FROM THE  VARIOUS
*         COMMANDS. 
* 
*         THE FOLLOWING STEPS ARE PERFORMED TO PROCESS AN ENTRY TO THE
*         ABORT PROCESSOR.
* 
*         1.  IF CHANNEL RESERVED THEN CONTINUE AT STEP 4.
* 
*         2.  IF CHANNEL INACTIVE THE CONTINUE AT STEP 4. 
* 
*         3.  IF  ACCESS  LEVEL  NOT  EQUAL  21  THEN  DISCONNECT THE 
*             CHANNEL.
* 
*         4.  STORE ERROR CODE IN EC REGISTER, ERROR MESSAGE INDEX IN 
*             EM, AND LINE NUMBER INTO EA REGISTER. 
* 
*         5.  IF HARD ABORT TERMINATE MODULE EXECUTION. 
* 
*         6.  IF  ABORT  ADDRESS  SPECIFIED  ON  COMMAND  THE JUMP TO 
*             STATEMENT SPECIFIED.
* 
*         7.  ABORT  ADDRESS  WAS  NOT  SPECIFIED, TERMINATE   MODULE 
*             EXECUTION.
* 
 ERROR    STD    D.Z1        SAVE MESSAGE INDEX AND ERROR NUMBER
          SHN    -12
          STD    D.Z2        SAVE ABORT FLAG
          LDD    S2 
          LMN    77B
          NJN    ERR0        IF NOT FROM BASIC DRIVER 
          LJM    REL2        RETURN TO RELEASE CHANNEL
  
 ERR0     LDM    BD.CHFG
          ZJN    ERR1        IF CHANNEL IS NOT ASSIGNED 
          IJM    ERR1,CH     IF CHANNEL INACTIVE
          LDD    BD.AL
          SBN    BD.AL21
          ZJN    ERR1        IF AL INDICATES NO CHAN CLEANUP
          DCN    40B
 ERR1     LDD    D.Z1 
          LPN    77B
          ADC    6000B       ADD IN BIAS FOR LCN 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 
          LDN    0
          STM    BD.CHAIN    CLEAR CHAINING IN PROGRESS FLAG
          LDD    D.Z2 
          NJN    ERR3        IF ABORT FLAG SET
          LDD    S2 
          SHN    12 
          LMD    S1 
          ZJN    ERR2        IF NO ABT ADDRESS SPECIFIED
          LJM    BD.RNI      RNI AT THE REJECT ADDRESS
  
 ERR2     LJM    BD.ERR      TERMINATE OR RESTART MODULE BASED ON SE
  
 ERR3     LJM    BD.ABT      TERMINATE MODULE 
          EJECT 
 IB       EQU    6500B       INPUT BUFFER 
 LIB      EQU    505B 
 OB       EQU    IB+LIB      OUTPUT BUFFER
 SB       EQU    OB+LIB      STATUS BUFFER
 AC1      EQU    SB+42B 
 AC2      EQU    SB+43B 
 WTUP     EQU    SB+44B      UPPER 12 BITS OF WORDS TRANSMITTED 
 BFZ      EQU    SB+45B      VALID BUFFER SIZES 
 SBCH     EQU    SB+46B      CHANNEL UNDER TEST 
 EQ       EQU    SB+47B      EQ UNDER TEST
 LTA      EQU    SB+50B      LOGICAL NAD ADDRESS
 TCU      EQU    SB+51B      TCU ENABLES
 HEADER   EQU    SB+52B      START OF CONNECT HEADER
 LTAO     EQU    SB+52B      LOGICAL TCU ADDRESS
 TCUO     EQU    SB+53B      TCU ENABLES IN BITS 2**4-2**7
 AC1O     EQU    SB+54B      ACCESS CODE UPPER 8 BITS 
 AC2O     EQU    SB+55B      ACCESS CODE LOWER 8 BITS 
 FPATH    EQU    SB+56B      PATH NAME
 BFZO     EQU    SB+61B      BUFFER SIZE SELECTED 
 SELPATH  EQU    SB+62B      FLAG FOR PATH WAS SELECTED 
 TNRCNT   EQU    SB+63B      TNR COUNTER FOR TIMEOUTS 
 LSB      EQU    64B
 SBLWA    EQU    SB+LSB 
  
          ERRPL  *-IB-1      ERROR IF LCN PRODUCT OVERLAY OVERFLOW
          EJECT 
 INIT     TITLE  LCN - INITIALIZATION ROUTINES. 
**        LCN - INITIALIZATION ROUTINES.
* 
*         THE INITIALIZATION CODE THAT FOLLOWS IS OVERLAYED BY THE
*         PRODUCT OVERLAY BUFFERS ABOVE.
* 
*         1.  CLEAR STATUS BUFFER WITH ZEROS. 
*         2.  SAVE LOGICAL TCU ADDRESS IN SB(50B).
* 
*         3.  SAVE EQUIPMENT NUMBER FOR FUNCTIONS AND IN SB(47B). 
* 
*         4.  SAVE UPPER 8 BITS OF ACCESS CODE IN SB(42B).
* 
*         5.  SAVE LOWER 8 BITS OF ACCESS CODE IN SB(43B).
* 
*         6.  SAVE TCU ENABLES IN SB(51B) 
* 
*         7.  SAVE VALID BUFFER SIZES IN SB(45B)
* 
*         8.  SAVE  UPPER 4 BITS (2**15-2**12) OF PARAMETER REGISTERS 
*             P0-P9 IN SB(30B) - SB(41B). 
* 
*         9.  SET DELAY TIME BASED ON SPEED OF PPU. 
* 
*         10. STORE I/O CHANNEL INTO COMMANDS.
* 
*         11.  WRITE PP MESSAGES TO CM. 
* 
*         12. INITIALIZE REGISTERS. 
* 
*         13. TEST FOR VALID DEVICE CODES 300 OCTAL  AND  301  OCTAL. 
*             IF  NOT VALID DEVICE CODE POST DAYFILE MESSAGE **DC NOT 
*             SUPPORTED** AND ABORT.
  
  
**        STEP -01- CLEAR STATUS BUFFER WITH ZEROS. 
* 
 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 ALL WORDS NOT CLEARED 
          LDC    104B        ASCII D FOR PATH NAME
          STM    FPATH       SET PATH NAME TO A D 
  
**        STEP -02- SAVE LOGICAL TCU ADDRESS IN SB(50B) 
* 
          LDM    BD.EQ
          LPC    377B 
          STM    LTA         SAVE LOGICAL TCU ADDRESS IN SB(50B)
          STM    LTAO        SAVE LTA IN CONNECT HEADER 
  
**        STEP -03- SAVE EQUIPMENT NUMBER FOR FUNCTIONS AND IN SB(47B)
* 
          LDM    BD.EQ
          LPC    7000B
          STM    FNA5        SAVE EQUIPMENT NUMBER FOR FUNCTIONS
          SHN    -9 
          STM    EQ          SAVE EQUIPMENT NUMBER IN SB(47B) 
  
**        STEP -04- SAVE UPPER 8 BITS OF ACCESS CODE IN SB(42B) 
* 
          LDM    BD.XSYS
          STM    AC1         SAVE ACCESS CODE BITS 2**15-2**10 SB(42B)
          LDM    BD.PAR-2 
          SHN    -10
          RAM    AC1         SAVE ACCESS CODE BITS 2**9-2**8 SB(42B)
          STM    AC1O 
  
**        STEP -05- SAVE LOWER 8 BITS OF ACCESS CODE IN SB(43B) 
* 
          LDM    BD.PAR-2 
          SHN    -2          CLEAR SHARE CH FIELD 
          LPC    377B 
          STM    AC2         SAVE ACCESS CODE BITS 2**7-2**0 SB(43B)
          STM    AC2O 
          LDN    2
          STM    BFZO 
  
**        STEP -06- SAVE TCU ENABLES IN SB(51B) 
* 
          LDM    BD.EQ1 
          SHN    -4 
          LPN    17B
          STM    TCU         SAVE TCU ENABLES IN SB(51B)
          SHN    4
          STM    TCUO        SAVE TCU ENABLES IN CONNECT HEADER 
  
**        STEP -07- SAVE VALID BUFFER SIZES IN SB(45B)
* 
          LDM    BD.EQ1 
          SHN    -8 
          LPN    17B
          STM    BFZ         SAVE VALID BUFFER SIZES SB(45B)
  
**        STEP -08- SAVE UPPER 4 OF PARAMETER REGISTERS P0-P9 IN
*                   SB(30B) - SB(41B) 
* 
          LDM    BD.EQ1 
          LPN    17B
          STM    SB+41B      SAVE UPPER 4 BITS OF P9 IN SB(41B) 
          LDC    SB+40B 
          STD    D.Z2        (D.Z2) = PARAMETER STORE ADDRESS 
          LDC    BD.PAR 
          STD    D.Z1        (D.Z1) = PARAMETER GET ADDRESS 
  
 INIT2    LDI    D.Z1 
          SHN    -8 
          LPN    17B
          STI    D.Z2        SAVE UPPER 4 BITS OF PARAMETER 
          SOD    D.Z2 
          LDI    D.Z1 
          SHN    -4 
          LPN    17B
          STI    D.Z2        SAVE UPPER 4 BITS OF PARAMETER 
          SOD    D.Z2 
          LDI    D.Z1 
          LPN    17B
          STI    D.Z2        SAVE UPPER 4 BITS OF PARAMETER 
          SOD    D.Z2 
          AOD    D.Z1 
          LMC    BD.PAR+3 
          NJN    INIT2       IF NOT DONE
  
**        STEP -10- STORE I/O CHANNEL INTO COMMANDS.
* 
          LDM    BD.CHAN
          STD    PA+3 
          STM    SBCH        SAVE CHANNEL IN SB(46B)
          LDC    TCHAN
          STD    PA+1        SET FWA OF TABLE CONTAINING ADDRESSES
 INIT8    LDI    PA+1 
          ZJN    INIT9       IF END OF TABLE
          STD    PA+2 
          LDI    PA+2 
          LPC    7740B
          ADD    PA+3 
          STI    PA+2 
          AOD    PA+1 
          UJN    INIT8       COMPLETE ALL WORDS 
  
**        STEP -11- WRITE PP MESSAGES TO CM.
* 
 INIT9    LDM    BD.MSGA     GET PP MESSAGE AREA ADDRESS
          STD    S1          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=PA+1-PA+5 POINTER, D.Z3=CM WD COUNTER 
 INIT10   LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD
          ZJN    INIT12      IF END OF MESSAGE
 INIT11   STM    PA+1,D.Z2   STORE IN PA+1
          AOD    D.Z1        BUMP PP MESSAGE POINTER
          UJN    INIT13 
 INIT12   LDC    2R          MESSAGE END, STORE BLANKS
          STM    PA+1,D.Z2
 INIT13   AOD    D.Z2        BUMP PA+1+ POINTER 
          SBN    5
          NJN    INIT10      IF NOT 5 PP WORDS
          STD    D.Z2        CLEAR POINTER
          LDD    D.RA        PUT RA IN A REG
          SHN    6
          ADD    S1          ADD MESSAGE ADDRESS
          CWD    PA+1        WRITE ONE WORD FROM PA+1 
          AOD    S1          UPDATED ADDRESS
          AOD    D.Z3        BUMP CM WORD COUNTER 
          SBN    BD.MSGML 
          NJN    INIT10      IF NOT BD.MSGML CM WORDS 
          STD    D.Z3        CLEAR CM WORD COUNTER
          LDM    PPMSGS,D.Z1
          ZJN    INIT14      IF MESSAGE ENDED IN ZERO BYTE
          AOD    D.Z1        SKIP ZERO BYTE TERMINATOR
 INIT14   AOD    D.Z1        BUMP PP MESSAGE ADDRESS TO NEXT MESSAGE
          LDM    PPMSGS,D.Z1
          NJN    INIT11      IF NOT LAST MESSAGE
  
**        STEP -12- INITIALIZE REGISTERS. 
* 
          LDN    0
          STM    BD.CHAIN    CLEAR CHAINING FLAG
          STD    WC          CLEAR WORD COUNT REGISTER
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER 
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER 
          LDC    IB 
          STD    IA          SET IBFWA
          LDC    OB 
          STD    OA          SET OBFWA
  
**        STEP -13- TEST FOR VALID DEVICE CODES 300B AND 301B.
*                   IF NOT VALID DEVICE CODE POST DAYFILE MESSAGE 
*                   **DC NOT SUPPORTED AND ABORT**
* 
          LDD    DC 
          LMC    300B 
          NJN    INIT15      IF NOT DC=300B 
          LDC    TBL300 
          UJN    INIT15A     ENTER COMMON 
  
 INIT15   LMN    301B-300B
          NJN    INIT15C     IF NOT DC=301B 
          LDC    TBL301 
 INIT15A  RJM    SUB         MODIFY DRIVER FOR ASSIGNED DC
          UJN    INIT16      RETURN 
  
 INIT15C  LDC    INITB
  
 INIT16   LJM    START       RETURN TO BASIC DRIVER WITH (A) = 0
 INITB    DIS    ,*DC NOT SUPPORTED*
  
 SUBX     LJM    ** 
 SUB      EQU    *-1
          STD    D.Z1 
 SUB1     LDI    D.Z1 
          ZJN    SUBX        IF DONE WITH TABLE 
          STD    D.Z2 
          LDN    0
          STI    D.Z2        CLEAR ADDRESS USING TABLE
          AOD    D.Z1 
          UJN    SUB1        LOOP TO END OF TABLE 
  
 TBL300   VFD    12/ENT3A 
          DATA   0
  
 TBL301   VFD    12/ENT2A 
          VFD    12/FCOM1A
          VFD    12/LOA3B 
          DATA   0
          EJECT 
          TITLE  ERROR MESSAGES FOR LCN.
 PPMSGS   EQU    *           START OF PP MESSAGES 
****
          MMSG   ER.FLE,EC.FLE,(FIELD LENGTH ERR),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.NFS,EC.NFS,(CH NOT FULL ON STAT)
          MMSG   ER.AAE,EC.AAE,(CH ACTIVE ON ENTRY) 
          MMSG   ER.IAA,EC.IAA,(CH INACTIVE AFTER ACN)
          MMSG   ER.ABF,EC.ABF,(CH ACTIVE BEFORE FUNC)
          MMSG   ER.CNR,EC.CNR,(CH NOT RESERVED)
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE ON FUNC)
          MMSG   ER.ILL,EC.ILL,(ILLEGAL COMMAND FOR DC),1 
          MMSG   ER.DNA,EC.DNA,(DATA NOT ACCEPTED)
          MMSG   ER.AEI,EC.AEI,(ACTIVE AND EMPTY ON INPUT)
          MMSG   ER.IOE,EC.IOE,(CH INACTIVE ON ENTRY) 
          MMSG   ER.CSNR,EC.CSNR,(CONTROLWARE STATUS TIMEOUT) 
          MMSG   ER.NHT,EC.NHT,(HEADER TABLE ABSENT)
          MMSG   ER.EMT,EC.EMT,(EMPTY SYSRD RECORD) 
          MMSG   ER.CNP,EC.CNP,(CH NOT PRIMED)
          MMSG   ER.AHS,EC.AHS,(ABNORMAL HARDWARE STAT) 
          MMSG   ER.ATL,EC.ATL,(ACCESS LEVEL TOO LOW) 
          MMSG   ER.UCD,EC.UCD,(UNEXPECTED CH DISCONNECT) 
          MMSG   ER.DNR,EC.DNR,(ALL CH DATA NOT RECEIVED) 
          MMSG   ER.ACS,EC.ACS,(ABNORMAL CONTROLWARE STAT)
          MMSG   ER.DMC,EC.DMC,(DATA MISCOMPARE)
          MMSG   ER.NAK,EC.NAK,(RECEIVED NAK STAT)
          MMSG   ER.NPS,EC.NPS,(NO PATH SELECTED) 
          MMSG   ER.CPE,EC.CPE,(CH PE ON INPUT) 
****
 MMSGL    EQU    MMSGL. 
          DATA   0           SET END
  
 TCHAN    EQU    *           CREATE CHANNEL TABLE 
          LIST   D
          HERE
          LIST   *
          DATA   0           END OF CHANNEL TABLE 
  
          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 
  
          IFEQ   NOSBE,1,1
          ERRPL  *-7773B     ERROR IF LCN I/O OVERLAY OVERFLOW
  
          QUAL   *
