*COMDECK,LCN2 
          EJECT 
 5L2      SEGMENT POVLA 
          ORG    POVLA
          QUAL   LCN2 
*CALL,VERS
          COMMENT LCN PRODUCT OVERLAY FOR MALET "VERS"
          TITLE  LCN2 HIGH-LEVEL I/O PRODUCT OVERLAY FOR MALET. 
**        LCN2 HIGH-LEVEL NAD LANGUAGE
*         ------------------------------------------------------------------
* 
*         THE FOLLOWING COMMANDS ARE FOR NETWORK ACCESS DEVICES  (NADS) 
*         ON  A  LOOSELY COUPLED NETWORK (LCN). THIS PRODUCT OVERLAY IS 
*         IS USED EXCLUSIVELY FOR MONITOR MODS. THE PRODUCT OVERLAY 5L2 
*         EXECUTES THESE COMMANDS AND  IS  DRIVEN  BY  THE  INSTRUCTION 
*         STACK CREATED BY THE MALET COMPILER.
* 
*         THE LCN2 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                                 / 
*         /-----------------------------------------------------------/ 
*         / AUTODMP  0   AUTODUMP REMOTE NAD.                         / 
*         / MAINT   0/5  MAINTENANCE READ/WRITE/FUNCTION.             / 
*         / MEMORY 0/5/6 MEMORY READ/WRITE.                           / 
*         / REL      0   RELEASE UNIT AND CHANNEL IF ASSIGNED.        / 
*         / RES      0   RELEASE THE CHANNEL IF ASSIGNED,  PERFORM    / 
*         /              SYSTEM COMMUNICATIONS,AND RESERVE CHANNEL.   / 
*         / STATUS   0   GET HARDWARE/CONTROLWARE/DETAIL/PATH STATUS. / 
*         / STEP     5   STEP PROCESSOR.                              / 
*         /-----------------------------------------------------------/ 
*         TABLE 18-1 LISTS THE COMMANDS SUPPORTED BY PRODUCT OVERLAY. 
          EJECT 
***              ---------------------------------------------- 
*                /  EM      EC            MESSAGES            / 
*                /--------------------------------------------/ 
*                /  103*   6304   WC OR BUFFER INDEX ERROR    / 
*                /  107    6310   CH NOT FULL ON STATUS       / 
*                /  110    6311   CH ACTIVE ON ENTRY          / 
*                /  111    6312   CH INACTIVE AFTER ACN       / 
*                /  112    6313   CH ACTIVE BEFORE FUNCTION   / 
*                /  113    6314   CH NOT RESERVED             / 
*                /  114    6315   NO INACTIVE ON FUNCTION     / 
*                /  115*   6316   ILLEGAL COMMAND FOR DC      / 
*                /  116    6317   ALL DATA NOT ACCEPTED       / 
*                /  120    6320   CH INACTIVE ON ENTRY        / 
*                /  117    6321   ACTIVE AN EMPTY ON INPUT    / 
*                /  121    6322   CONTROLWARE STATUS TIMEOUT  / 
*                /  122    6323   CHANNEL NOT PRIMED          / 
*                /  123    6324   ABNORMAL HARDWARE STATUS    / 
*                /  124    6325   ACCESS LEVEL TOO LOW        / 
*                /  125    6326   UNEXPECTED CH DISCONNECT    / 
*                /  126    6327   ALL CH DATA NOT RECEIVED    / 
*                /  127    6330   ABNORMAL CONTROLWARE STATUS / 
*                /  132    6331   RECEIVED NAK STATUS         / 
*                /  130    6332   NO PATH SELECTED            / 
*                /  131    6333   UNABLE TO CONNECT TCI       / 
*                ---------------------------------------------
*                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.CNP   EQU    23B         CHANNEL NOT PRIMED 
 EC.AHS   EQU    24B         ABNORMAL HARDWARE STATUS 
 EC.ATL   EQU    25B         ACCESS LEVEL TOO LOW 
 EC.UCD   EQU    26B         UNEXPECTED CH DISCONNECT 
 EC.DNR   EQU    27B         ALL DATA NOT RECEIVED
 EC.ACS   EQU    30B         ABNORMAL CONTROLWARE STATUS
 EC.NAK   EQU    31B         RECEIVED NAK STATUS
 EC.NPS   EQU    32B         NO PATH SELECTED 
 EC.NTI   EQU    33B         UNABLE TO CONNECT TCI
 EC.CPE   EQU    34B         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 6325 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 6316 
*             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 6314 AND ABORT.
* 
 ENT4     LDM    BD.CHFG
          NJN    ENT6        IF CHANNEL RESERVED
 ERRCNR   LDC    ER.CNR 
 ENT5     LJM    ERROR
  
**        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
  
*         LCN2 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/FCOM     PROCESS /ABORT/ACCEPT/IMC/FUNC/
*                            PURGE/READY/REJECT/RESET/SMC/TRANS/PMC 
*                            SELECT PATH/START/STEP/
          VFD    12/MEM      MEMORY READ/WRITE SUBROUTINE 
  
*         LCN2 HIGH-LEVEL RETURN JUMP COMMANDS. 
  
 ENTRJM   EQU    *-TBLENT 
          VFD    12/HSTAT    STATUS SUBROUTINE
          VFD    12/MAINF    MAINTENANCE FUNCTION 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 
          LJM    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 
          STD    D.Z7        RESET RETRY COUNT (TCI CONNECTED)
          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 
 FCOM     TITLE  FCOM  - COMMON ISSUE FUNCTION AND TEST RESPONSE. 
**        FCOM1 - COMMON ISSUE FUNCTION AND TEST RESPONSE.
* 
*         FCOM IS USED TO PROCESS THE STEP COMMAND. 
* 
* 
*         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.
* 
* 
* 
  
**        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 
          LJM    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
          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 RADIX USED, 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     LJM    FCOM4      GET HARDWARE STATUS 
          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 
 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 
          MJN    HST21
          LJM    HST5        IF NOT A CONTROL WARE STATUS 
 HST21    LDD    PA 
          SBN    4
          ZJN    HST22
          LJM    HST4        IF NOT REMOTE PATH STATUS
 HST22    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     RJM    ACKTST      GO GET REMOTE DETAIL STATUS
          LDD    PA+1 
          SHN    -9 
          ZJN    HST33       IF SHORT READ
          LDN    0
          STD    PA+1        CLEAR CHAIN FLAG 
          LDN    RD 
          RJM    FNA         ISSUE WRITE 12/8 FUNCTION(E002). 
          LCN    0
          RJM    INBUF       INPUT TO Y THE REQUESTED NUMBER OF WORDS 
          LDN    1
 HST33    LJM    FCOM4       GET HARDWARE 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.
* 
          ZJN    HST7        IF ALL WORDS RECEIVED
  
**        6.  GENERATE ERROR CODE 6327 AND ABORT. 
* 
 ERRDNR   LDC    ER.DNR      ERROR STATUS DATA NOT RECEIVED 
          LJM    ERROR
  
**        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 
          LJM    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 
  
 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 6313
*            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 
          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 6322 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 
*             6321 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.  STORE CURRENT TCU, LTA, AND ACCESS CODES IN 
*             OUTPUT BUFFER.  SAVE THE CONTENTS OF THE OUTPUT 
*             BUFFER, PA+2(WORD COUNT), AND PA+3(OUTPUT ADDRESS)
*             TO ENABLE A RETRY IF THE TCI WAS NOT CONNECTED. 
* 
          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
          LDC    REBUF       LOAD ADDRESS OF RETRY BUFFER 
          STD    D.Z5 
          ADN    20B
          STD    D.Z4        SET FINAL ADDRESS
          LDD    PA+2        LOAD WORD COUNT
          STI    D.Z5        STORE IN RETRY BUFFER
          AOD    D.Z5 
          LDD    PA+3        LOAD ADDR OF FUNCTION INFO 
          STI    D.Z5 
          STD    D.Z6 
          AOD    D.Z5 
 MAINF1   LDI    D.Z6        LOAD FUNCTION WORD 
          STI    D.Z5        STORE IN RETRY BUFFER
          AOD    D.Z6        INCR FUNC WORD ADDRESS 
          AOD    D.Z5        INCR RETRY BUFFER ADDR 
          SBD    D.Z4 
          NJN    MAINF1      LOOP FOR 16 WORDS
  
**        4.  PERFORM FNA SEQUENCE TO ISSUE MAINTENANCE FUNCTION ON 
*             THE ASSIGNED I/O CHANNEL,  ISSUE THE WR FUNCTION, OUT-
*             PUT THE DATA AND PERFORM THE READY FUNCTION.
* 
 MAINF2   LDC    MPF
          STD    PA+1 
          RJM    ACKTST         ISSUE MAINTENANCE FUNCTION
          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 STATUS 
  
**        8.  EXAMINE THE MAINTENACE FUNCTION RESPONSE AND TEST 
*             FOR TCI NOT CONNECTED.  IF NOT, RESTORE THE MAIN- 
*             TENANCE FUNCTION DATA IN THE ADDRESS (PA+3), AND
*             RETRY THE MAINTENANCE FUNCTION. 
* 
          LDD    OA          GET ADDRESS OF MAINTENANCE RESPONSE
          ADN    25B         ADD OFFSET TO PARAMETER WORD 
          STD    D.Z5 
          LDI    D.Z5        GET STATUS 
          LPC    0200B       CHECK FOR TCI CONNECTED
          NJN    MAINF3 
          LJM    MAINF6      CONTINUE, TCI IS CONNECTED 
 MAINF3   AOD    D.Z7        INCREMENT RETRY COUNTER
          ADC    -3000B 
          NJN    MAINF4      CONTINUE, RETRY COUNT NOT ZERO.
          LDC    ER.NTI      LOAD TCI RETRY EXCEEDED ERROR
          LJM    ERROR       JUMP TO PROCESS ERROR
 MAINF4   DCN    CH+40B      RELEASE CHANNEL
          LDN    0
          STM    BD.CHAIN    CLEAR CHAINING FLAG
          LDC    0403B       LOAD ABORT FUNCTION CODE 
          STD    PA+1 
          RJM    ACKTST      ISSUE ABORT
          LDC    REBUF       LOAD POINTER TO RETRY COUNTER
          STD    D.Z5 
          LDI    D.Z5        LOAD WORD COUNT
          STD    PA+2 
          AOD    D.Z5 
          LDI    D.Z5        LOAD MAINTENANCE FUNC BUFFER POINTER 
          STD    PA+3 
          STD    D.Z6 
          ADN    20B
          STD    D.Z4        SET FINAL ADDRESS
          AOD    D.Z5 
 MAINF5   LDI    D.Z5        LOAD WORD TO RESTORE 
          STI    D.Z6        STORE IN FUNCTION BUFFER 
          AOD    D.Z5 
          AOD    D.Z6        INCR FUNC WORD ADDRESS 
          SBD    D.Z4 
          NJN    MAINF5      LOOP FOR 20 WORDS
          LJM    MAINF2      RETRY MAINT FUNCTION 
  
**        9.  IF NO MORE DATA TO INPUT CONTINUE AT STEP 10. 
* 
 MAINF6   LDD    PA+6 
          ZJN    MAI1        IF NO WORDS TO INPUT 
  
**        10. INPUT REQUESTED WORDS (PA+6) TO ADDRESS SPECIFIED BY
*             (PA+7). IF ALL WORDS NOT RECEIVED GENERATE ERROR CODE 
*             6327 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 
  
**        11. CLEAR CHAINING IN PROGRESS AND DISCONNECT THE ASSIGNED
*             I/O CHANNEL.
* 
 MAI1     STM    BD.CHAIN 
          DCN    CH+40B 
          LJM    MAINFX      RETURN TO CALLER 
 REBUF    EQU    *           TEMP STORAGE OF FUNC DATA FOR RETRY
          BSSZ   25B
          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 
 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 
*             6317 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 6310 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
  
 ERCPE1   LDC    ER.CPE 
          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    6300B       ADD IN BIAS FOR LCN2 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 LCN2 PRODUCT OVERLAY OVERFLOW 
          EJECT 
 INIT     TITLE  LCN2 - INITIALIZATION ROUTINES.
**        LCN2 - 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
          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 STATUS)
          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 FUNCTION)
          MMSG   ER.CNR,EC.CNR,(CH NOT RESERVED)
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE ON FUNCTION)
          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.CNP,EC.CNP,(CHANNEL NOT PRIMED) 
          MMSG   ER.AHS,EC.AHS,(ABNORMAL HARDWARE STATUS) 
          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 STATUS)
          MMSG   ER.NAK,EC.NAK,(RECEIVED NAK STATUS)
          MMSG   ER.NPS,EC.NPS,(NO PATH SELECTED) 
          MMSG   ER.NTI,EC.NTI,(UNABLE TO CONNECT TCI)
          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 LCN2 I/O OVERLAY OVERFLOW 
  
          QUAL   *
