*COMDECK,MSSMSC 
          EJECT 
 5CU      SEGMENT POVLA 
          ORG    POVLA
          QUAL   MSC
*CALL,VERS
          COMMENT MSC PRODUCT OVERLAY FOR MALET "VERS"
          TITLE  MSS COUPLER HIGH LEVEL PRODUCT OVERLAY FOR MALET 
  
*CALL,CPYCOM
          SPACE  4,10 
*****     5CU - MALET MSS COUPLER PRODUCT OVERLAY.
*         E. L. HARMON       03/11/77.
* 
*         5CU IS THE OVERLAY CALLED BY THE PP PROGRAM *MLD* TO EXECUTE
*         THE MALET MSS COUPLER HIGH LEVEL COMMANDS.
* 
          SPACE  4,10 
***       5CU IS THE OVERLAY CALLED BY THE PP PROGRAM *MLD* TO EXECUTE
*         THE MALET MSS COUPLER HIGH LEVEL COMMANDS.
  
          SPACE  4,10 
**        THE FOLLOWING MALET COMMANDS WILL BE SUPPORTED BY THE 
*         COUPLER PRODUCT OVERLAY.  ALL COMMANDS MAY BE EXECUTED WITH 
*         AN ACCESS LEVEL OF 00 EXCEPT THE *SENDTAG* COMMAND, WHICH 
*         REQUIRES AN ACCESS LEVEL OF 10 OR HIGHER. 
* 
*             CLEAR   - THE COUPLER IS CLEARED. 
*             EXTEND  - ENABLE OR DISABLE EXTENDED R/W. 
*             INPUT   - READ (WC) WORDS FROM THE COUPLERS MEMORY. 
*             LOOPBK  - A WORD IS TRANSMITTED AND READ BACK.
*             OUTPUT  - WRITE (WC) WORDS TO THE COUPLERS MEMORY.
*             PARITY  - ENABLE THE LOGIC TO GENERATE BAD PARITY.
*             REL     - CLEAR THE COUPLER AND RETURN THE I/O CHANNEL. 
*             RES     - RESERVE I/O CHANNEL AND CONNECT THE COUPLER.
*             SENDTAG - ISSUE AN IMMEDIATE TAG TO THE MSA.
*             SETCTR  - PRESET THE SPECIFIED COUPLER COUNTER. 
*             STATUS  - READ THE SPECIFIED STATUS WORD. 
  
          EJECT 
*         ERROR CODES - FIRST 7 ARE FOR THE BASIC DRIVER (MLD). 
  
 EC.FLE   EQU    1           ADDRESS OUT OF FIELD LENGTH
 EC.TL    EQU    2           TIME LIMIT ERROR FOR COMMUNICATIONS
 EC.SEE   EQU    3           SUBROUTINE ENTRY/EXIT ERROR
 EC.WC    EQU    4           BUFFER REFERENCE OR WC ERROR 
 EC.RES   EQU    5           RESERVED FOR BASIC DRIVER
 EC.RES1  EQU    6           RESERVED FOR BASIC DRIVER
 EC.RES2  EQU    7           RESERVED FOR BASIC DRIVER
  
 EC.NIF   EQU    12B         NO INACTIVE TO LAST FUNCTION 
 EC.ABF   EQU    13B         CHANNEL ACTIVE BEFORE A FUNCTION 
 EC.IAO   EQU    14B         CHANNEL INACTIVE AFTER AN OUTPUT 
 EC.SNR   EQU    15B         STATUS NOT RETURNED
 EC.AAD   EQU    16B         CHANNEL ACTIVE AFTER DEACTIVATE
 EC.FPN   EQU    17B         FUNCTION PARAMETER NOT ACCEPTED
 EC.IDW   EQU    20B         ALL DATA NOT ACCEPTED FROM PP
 EC.IDR   EQU    21B         INCOMPLETE DATA RETURNED TO PP 
 EC.CNC   EQU    22B         COUPLER NOT CONNECTED
 EC.IAL   EQU    23B         ILLEGAL COMMAND FOR ACCESS LEVEL 
 EC.CTO   EQU    24B         ACCESS NOT CONNECTED WITHIN 5 MIN. 
 EC.AAI   EQU    25B         CHANNEL REMAINED ACTIVE AFTER INPUT
 EC.IAI   EQU    26B         CHANNEL INACTIVE AFTER AN INPUT
 EC.FBO   EQU    27B         CHANNEL FULL BEFORE OUTPUT 
 EC.IAA   EQU    30B         CHANNEL INACTIVE AFTER AN ACTIVATE 
 EC.SWE   EQU    31B         SOFTWARE POINTER ERROR, A TABLE INDEX
*                            EXCEEDS THE LENGTH OF THE TABLE. 
*                             THIS ERROR WILL BE REPORTED AS FOLLOWS. 
*                              SB(25) = POINTER VALUE.
*                              SB(26) = LOCATION OF CALLER. 
*                              SB(27) = LOCATION THAT DETECTED THE
*                                       ERROR.
  
          SPACE  4,20 
**        DIRECT CELL EQUATES 
  
 D.SX0  = 60B 
 D.SX1  = D.SX0+1 
 D.SX2  = D.SX0+2 
 D.SX3  = D.SX0+3 
 D.SX4  = D.SX0+4 
 D.SX5  = D.SX0+5 
 D.SX6  = D.SX0+6 
 D.SX7  = D.SX0+7 
  
 PA       EQU    D.T0        SUBROUTINE ENTRY PARAMETERS
 S0       EQU    D.SX0       TEMP STORAGE 
 S1       EQU    D.SX1       LOWER 12 BITS OF ABT ADDRESS 
 S2       EQU    D.SX2       UPPER 6 BITS OF ABT ADDRESS
 S3       EQU    D.SX3       TEMP STORAGE 
 S4       EQU    D.SX4       TEMP STORAGE 
 S5       EQU    D.SX5       TEMP STORAGE 
 S6       EQU    D.SX6       TEMP STORAGE 
 LB       EQU    D.SX7       LENGTH OF IB/OB PLUS 1 
          SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
* 
*         THE TAG NAMES BEGINING WITH *S*, (SXXX) ARE POINTERS
*         WITHIN THE STATUS BUFFER *SB* FOR THE WORD SPECIFIED. 
* 
  
 SCUP     EQU    0           COUPLER STATUS WORD
 SCTL     EQU    SCUP+1      CTL STATUS WORD
 SPE      EQU    SCTL+1      PARITY ERROR STATUS
 SIWC     EQU    SPE+1       INPUT WORD COUNTER STATUS
 SOWC     EQU    SIWC+1      OUTPUT WORD COUNTER STATUS 
 SBWC     EQU    SOWC+1      BUFFER WORD COUNTER STATUS 
 SCON     EQU    SBWC+1      COUPLER CONNECT STATUS 
 SIMT     EQU    SCON+1      IMMEDIATE TAG STATUS 
 SFP      EQU    10B         LAST FUNCTION PARAMETER
 SLB      EQU    20B         STATUS RETURNED FROM A LOOP BACK 
  
 IBL      EQU    500B        LENGTH OF INPUT BUFFER 
 OBL      EQU    IBL         LENGTH OF OUTPUT BUFFER
 SBL      EQU    30B         LENGTH OF STATUS BUFFER
 DUML     EQU    8           LENGTH OF DUMMY BUFFER 
  
****
          SPACE  4,18 
****      COUPLER FUNCTION CODES
  
 FCONN    EQU    1           CONNECT
 FDISC    EQU    2           DISCONNECT 
 FCLR     EQU    3           CLEAR
 FCSTS    EQU    4           COUPLER STATUS WORD
 FCTLS    EQU    24B         CTL STATUS WORD
 FPERS    EQU    104B        PARITY ERROR STATUS WORD 
 FIWCS    EQU    44B         INPUT WORD COUNTER STATUS WORD 
 FOWCS    EQU    64B         OUTPUT WORD COUNTER STATUS WORD
 FBWCS    EQU    124B        BUFFER WORD COUNTER STATUS WORD
 FDSH     EQU    6           DROP SELECT HOLD 
 FSBWC    EQU    10B         SET BUFFER WORD COUNTER
 FDAM     EQU    11B         DISABLE CTL R/W AUTO MODE
 FEAM     EQU    12B         ENABLE CTL R/W AUTO MODE 
 FZPTY    EQU    13B         SET ZERO OR INVERTED PARITY MODE 
 FWTBM    EQU    14B         WRITE DATA TO BUFFER MEMORY
 FRDBM    EQU    15B         READ DATA FROM BUFFER MEMORY 
 FSIWC    EQU    16B         SET INPUT WORD COUNTER 
 FSOWC    EQU    17B         SET OUTPUT WORD COUNTER
 FLBK     EQU    600B        LOOP BACK
  
****
          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/IBL      LENGTH OF INPUT BUFFER 
          VFD    12/IBL      LENGTH OF OUTPUT BUFFER
          VFD    12/SBL      LENGTH OF STATUS BUFFER
          VFD    12/BD.VERS  VERSION NUMBER 
  
*         FIXED ADDRESS TABLE OF SUBROUTINE ENTRY POINTS
  
 XREL     LJM    ** 
          LJM    REL         RELEASE SUBROUTINE 
 XRES     LJM    ** 
          LJM    RES         RESERVE SUBROUTINE 
 XCLEAR   LJM    ** 
          LJM    CLEAR       CLEAR SUBROUTINE 
 XEXRW    LJM    ** 
          LJM    EXRW        SET/CLEAR CTL R/W AUTO MODE SUBROUTINE 
 XINB     LJM    ** 
          LJM    INB         BLOCK INPUT  SUBROUTINE
 XLOBK    LJM    ** 
          LJM    LOBK        LOOP-BACK SUBROUTINE 
 XOUTB    LJM    ** 
          LJM    OUTB        BLOCK OUTPUT SUBROUTINE
 XPTY     LJM    ** 
          LJM    PTY         SET PARITY MODE SUBROUTINE 
 XSTAG    LJM    ** 
          LJM    STAG        SEND A CTL TAG SUBROUTINE
 XSCTR    LJM    ** 
          LJM    SCTR        SET COUPLER COUNTER SUBROUTINE 
 XSTAT    LJM    ** 
          LJM    STAT        REQUEST STATUS WORD SUBROUTINE 
          EJECT 
**        CLEAR - CLEAR THE COUPLER.
* 
*         CLEAR THE COUPLER BY ISSUING A CLEAR FUNCTION.
* 
*         ENTRY  (A) = ABORT ADDRESS. 
* 
*         EXIT   NONE.
* 
*         USES   S1, S2.
* 
*         CALLS  FAN. 
  
 CLEAR    RJM    CCN         CHECK COUPLER CONNECTED FLAG 
          LDN    FCLR 
          RJM    FAN
          LJM    XCLEAR      EXIT TO STACK
          SPACE  4,18 
**        DLY - OUTPUT AND DELAY
* 
*         ENTRY (A) NUMBER OF FUNCTION PARAMETER WORDS
* 
*         EXIT  ERRFPN - IF FUNCTION PARAMETERS NOT ACCEPTED
*               TO THE CALLING ROUTINE IF PARAMETERS ACCEPTED 
  
 DLYX     LJM    *           ENTRY EXIT 
 DLY      EQU    *-1
          OAN    **+40B 
          LDN    4
 DLY1     EJM    DLYX,**     EXIT IF PARAMETERS ACCEPTED
 DLYD1    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    DLY1        WAIT EMPTY 
          LJM    ERRFPN      ERROR IF FTN PARAMS NOT ACCEPTED 
  
  
**        EXRW -  ENABLE/DISABLE EXTENDED READ/WRITE MODE.
* 
*         ISSUE THE COUPLER FUNCTIONS TO ENABLE OR DISABLE THE COUPLERS 
*         EXTENDED READ/WRITE MODE. 
* 
*         ENTRY  (A)  = ABORT ADDRESS.
*                (PA) = 0, IF DISABLE.
*                       1, IF ENABLE. 
* 
*         EXIT   NONE.
* 
*         USES   S1, S2.
* 
*         CALLS  FAN, CCN.
  
 EXRW     RJM    CCN
          LDD    PA 
          ZJN    ERW1 
          LDN    FEAM 
          UJN    ERW2 
  
 ERW1     LDN    FDAM 
 ERW2     RJM    FAN
          LJM    XEXRW       EXIT TO STACK
          SPACE  4,18 
**        INB - INPUT A DATA BLOCK FROM COUPLER MEMORY. 
* 
*         ENTRY  (A)  = ABORT ADDRESS.
*                (WC) = NUMBER OF PP WORDS TO READ. 
* 
*         EXIT   (WT) = ACTUAL NUMBER OF WORDS READ.
*                (SB) = COUPLER STATUS WORD.
* 
*         USES   S1, S2.
* 
*         CALLS  FAN, RSW.
  
 INB      RJM    CCN         CHECK COUPLER CONNECTED FLAG 
          LDN    0
          STD    WT          PRESET WORDS TRANSFERED
          LDD    WC 
          NJN    INB1        IF SOME WORDS TO TRANSFER
          LJM    ERRWC
  
 INB1     LDN    FRDBM       READ BUFFER MEMORY 
          RJM    FAN
          ACN    **+40B 
          IJM    ERRIAA,**   INACTIVE AFTER ACTIVATE
          FJM    ERRFBO,**   SHOULD NOT BE FULL 
          LDD    WC 
          STM    SB+SFP      SAVE FUNCTION PARAMETER
          RJM    DLY         OUTPUT AND DELAY 
  
 INB3     LDN    12          12 USEC
 INB4     FJM    INB5,**     IF DATA AVAILABLE
 INBD1    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    INB4        IF TIME OUT NOT EXPIRED
          IJM    ERRIAO,**   CHANNEL INACTIVE AFTER AN OUTPUT 
          LJM    ERRIDR      INCOMPLETE DATA RETURNED ON A READ 
  
 INB5     LDD    WC 
          ADC    -IBL 
          STD    D.T0        SAVE REMAINING WORDS 
          PJN    INB6        IF .GE. IBL WORDS TO TRANSFER
          LDN    0
          STD    D.T0        CLEAR REMAINING WORDS
          LDD    WC 
          UJN    INB7        INPUT (WC) WORDS 
  
 INB6     LDC    IBL
 INB7     STD    WT          PRESET WORDS TRANSMITTED 
          IAM    IB,**
          NJN    INB10       IF NOT COMPLETE TRANSFER 
 INB8     LDD    D.T0 
          ZJN    INB10       IF NO WORDS REMAINING
          SBN    DUML 
          STD    D.T0        SAVE REMAINING WORDS 
          PJN    INB9        IF .GE. DUML WORDS 
          ADN    DUML 
          STD    D.T0        SAVE NUMBER OF WORDS 
          RAD    WT          UPDATE WORDS TRANSFERED
          LDD    D.T0 
          IAM    DUM,** 
          NJN    INB10       IF INCOMPLETE TRANSFER 
          UJN    INB11       TRANSFER COMPLETE
  
 INB9     LDN    DUML 
          RAD    WT          UPDATE WORDS TRANSFERED
          LDN    DUML 
          IAM    DUM,** 
          ZJN    INB8        IF COMPLETE TRANSFER 
 INB10    STD    D.Z1        SAVE REMAINING WORD COUNT
          LDD    WT 
          SBD    D.Z1        ADJUST WT
          STD    WT 
 INB11    AJM    ERRAAI,**   COUPLER SHOULD DISCONNECT THE CHANNEL
  
 INB12    LDN    1
          RJM    RSW         GET COUPLER STATUS WORD
          STM    SB 
          SHN    6
          LPN    77B
          ZJN    INB13       IF NO ERROR
          LJM    ERP
  
 INB13    LDN    FRDBM       CHANGE (LF) TO INDICATE A READ BUFFER
          STD    LF          MEMORY FUNCTION
          LDD    WC 
          SBD    WT 
          ZJN    INB14       IF COMPLETE TRANSFER 
          LJM    ERRIDR      ERROR-INCOMPLETE DATA RETURNED TO PP 
  
 INB14    LJM    XINB        EXIT TO STACK
          SPACE  4,18 
**        LOBK -  DATA LOOP-BACK. 
* 
*         ENTRY  (A)  = ABORT ADDRESS.
*                (PA) = WORD TO BE TRANSMITTED. 
* 
*         EXIT   SB+20 = WORD RETURNED BY THE COUPLER.
* 
*         CALLS  CCN, FAN.
  
 LOBK     RJM    CCN         CHECK COUPLER CONNECTED FLAG 
          LDC    FLBK        LOOP-BACK
          RJM    FAN
          ACN    **+40B 
          IJM    ERRIAA,**   INACTIVE AFTER ACTIVATE
          FJM    ERRFBO,**   FULL BEFORE OUTPUT 
          LDD    PA 
          STM    SB+SFP      SAVE FUNCTION PARAMETER
          RJM    DLY         OUTPUT AND DELAY 
          LDN    8
 LBK1     FJM    LBK2,**     IF STATUS AVAILABLE
 LBKD1    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          PJN    LBK1        IF TIME-OUT NOT EXPIRED
          LJM    ERRSNR 
  
 LBK2     IAN    **+40B 
          STM    SB+SLB      SAVE THE WORD RETURNED 
          DCN    **+40B 
          AJM    ERRAAD,**   CHANNEL ACTIVE AFTER DISCONNECT
          LJM    XLOBK       EXIT TO STACK
          SPACE  4,18 
**        OUTB - OUTPUT A DATA BLOCK. 
* 
*         WRITE (WC) PP WORDS TO THE COUPLERS MEMORY. 
* 
*         ENTRY  (A)  = ABORT ADDRESS.
*                (WC) = NUMBER OF PP WORDS TO TRANSFER. 
* 
*         EXIT   (WT) = NUMBER OF PP WORDS TRANSFERED.
* 
*         USES   S1, S2, D.T0, D.T4.
* 
*         CALLS  FAN, RSW.
* 
 OUTB     RJM    CCN         CHECK COUPLER CONNECTED FLAG.
          LDD    WC 
          NJN    OUT1        IF SOME WORDS TO TRANSFER
          LJM    ERRWC
  
 OUT1     STD    D.T0        PRESET WORDS REMAINING 
          LDN    0
          STD    D.Z2        CLEAR TERMINATE FLAG 
          STD    WT          CLEAR WORDS TRANSMITTED
          LDC    OBL
          STD    D.T4        PRESET NUMBER OF WORDS TO OUTPUT 
          LDN    FWTBM       WRITE BUFFER MEMORY
          RJM    FAN
          ACN    **+40B 
          IJM    ERRIAA,**   INACTIVE AFTER ACTIVATE
          FJM    ERRFBO,**   FULL BEFORE OUTPUT 
 OUT2     LDD    D.T0 
          ADC    -OBL 
          STD    D.T0 
          PJN    OUT3        IF .GE. OBL WORDS
          ADC    OBL
          STD    D.T0        REMAINING WORDS TO OUTPUT
          STD    D.T4 
          LDD    D.Z2 
          NJN    OUT4        IF DONE
          AOD    D.Z2        SET TERMINATE FLAG 
 OUT3     LDD    D.T4 
          ZJN    OUT4        IF NO WORDS TO OUTPUT
          RAD    WT          UPDATE WORDS TRANSFERED
          LDD    D.T4 
          OAM    OB,**
          ZJN    OUT2        IF COMPLETE TRANSFER 
          STD    D.Z1 
          LDD    WT 
          SBD    D.Z1 
          STD    WT          ACTUAL NUMBER OF WORDS TRANSFERED
 OUT4     IJM    ERRIAO,**   CHANNEL SHOULD BE ACTIVE 
          DCN    **+40B 
          AJM    ERRAAD,**   CHANNEL ACTIVE AFTER DISCONNECT
          LDN    1
          RJM    RSW         GET COUPLER STATUS WORD
          SHN    6
          LPN    77B
          ZJN    OUT5        IF NO ERROR
          LJM    ERP
  
 OUT5     LDN    FWTBM       CHANGE (LF) TO INDICATE A WRITE BUFFER 
          STD    LF          MEMORY FUNCTION
          LDD    WC 
          SBD    WT 
          ZJN    OUT6        IF COMPLETE TRANSFER 
          LJM    ERRIDW      ERROR-INCOMPLETE DATA ACCEPTED FROM PP 
  
 OUT6     LJM    XOUTB       EXIT TO STACK
          SPACE  4,18 
**        PTY  - SET REQUESTED PARITY MODE. 
* 
*         ENTRY  (A)  = ABORT ADDRESS.
*                (PA) = BITS 0-7 DEFINE THE PARITY MODE.
* 
*         EXIT   NONE 
* 
*         USES   S1, S2.
* 
*         CALLS  CCN, FAN.
  
 PTY      RJM    CCN         CHECK COUPLER CONNECTED FLAG 
          LDN    FZPTY
          RJM    FAN
          ACN    **+40B 
          IJM    ERRIAA,**   INACTIVE AFTER ACTIVATE
          FJM    ERRFBO,**   CHAN FULL BEFORE OUTPUT
          LDD    PA 
          LPC    377B 
          STM    SB+SFP      SAVE FUNCTION PARAMETER
          RJM    DLY         OUTPUT AND DELAY 
          IJM    ERRIAO,**   INACTIVE AFTER OUTPUT
          DCN    **+40B 
          AJM    ERRAAD,**   ACTIVE AFTER DISCONNECT
          LJM    XPTY        EXIT TO STACK
          SPACE  4,18 
**        REL -  RELEASE THE I/O CHANNEL. 
* 
*         CLEAR  THE  COUPLER AND RELEASE THE 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  (A) = ABORT ADDRESS. 
* 
*         EXIT   SB+6 = CONNECT STATUS. 
*                CCNF - CLEARED.
* 
*         USES   S1, S2.
* 
*         CALLS  BD.DCH, DEQ. 
  
 REL      STD    S1          SAVE ABT ADDRESS 
          SHN    -12
          STD    S2 
          LDM    BD.CHFG
          ZJN    REL1        IF NOT CURRENTLY ASSIGNED
          RJM    DEQ         DISCONNECT EQUIPMENT 
 REL1     RJM    BD.DCH      DROP CHANNEL/TALK TO SYSTEM AND EXEC 
          LJM    XREL        EXIT TO CALLER 
          SPACE  4,18 
**        RES - RESERVE THE I/O CHANNEL AND CONNECT COUPLER.
* 
*         RELEASE DEVICE VIA DEQ AND 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 REQUEST- 
*         ED, THE COUPLER CONNECTED AND THE COUPLER CONNECTED FLAG IS 
*         SET. IF THE COUPLER CONNECT STATUS INDICATES THE COUPLER IS 
*         NOT CONNECTED, THE ACTIVITY BIT (2**3) IS TESTED AND IF 
*         CLEAR AN ERROR *ER.CTO* REPORTED.  IF THE ACTIVITY BIT IS SET 
*         THE CONNECT FUNCTION IS REISSUED AND IF THE COUPLER IS NOT
*         CONNECTED WITHIN 77B ATTEMPTS AN ERROR *ER.CTO* IS REPORTED.
*         PRIOR TO ISSUING A CONNECT FUNCTION *SB+SCON* (CONNECT STATUS 
*         WORD) IS SET TO 7777B, THE STATUS RETURNED FROM THE CONNECT 
*         IS THEN STORED IN *SB+SCON*.
* 
*         ENTRY  (A) = ABORT ADDRESS. 
* 
*         EXIT   I/O CHANNEL ASSIGNED.
*                CCNF = SET (NON-ZERO) IF COPULER CONNECTED.
*                SB+SCON = SET TO CONNECT STATUS. 
* 
*         USES   S1, S2, S3.
* 
*         CALLS  BD.RCH, DEQ, ERR, FAN. 
  
 RES      STD    S1          SAVE ABT ADDRESS 
          SHN    -12
          STD    S2 
          LDN    0
          STD    EC          CLEAR ERROR REGISTERS
          STD    EA 
          STD    EM 
          STD    S3          INITIALIZE CONNECT TIME-OUT COUNTER
          LDM    BD.CHFG
          ZJN    RES1        IF NOT CURRENTLY ASSIGNED
          RJM    DEQ         CLEAR AND DISCONNECT EQUIPMENT 
          LDN    0
 RES1     STM    CCNF        CLEAR COUPLER CONNECTED FLAG 
          LCN    0
          STM    SB+SCON     SET CONNECT STATUS WORD TO ONES
 RES2     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED
          IJM    RES3,**     ENSURE CHANNEL INACTIVE
          DCN    **+40B 
          AJM    ERRAAD,**   CHANNEL ACTIVE AFTER DISCONNECT
 RES3     LDC    FCONN
          RJM    FAN         CONNECT THE COUPLER
          ACN    **+40B 
          IJM    ERRIAA,**   INACTIVE AFTER ACTIVATE
          LDN    2
 RES4     FJM    RES5,**
 RESD1    SBN    2
*         SBN    1           IF 2X PP 
          NJN    RES4        IF TIME-OUT NOT EXCEEDED 
          LJM    ERRSNR      STATUS NOT RETURNED
  
 RES5     IAN    **+40B      INPUT CONNECT STATUS 
          STM    SB+SCON     SAVE CONNECT STATUS
          IJM    ERRIAI,**   INACTIVE AFTER AN INPUT
          DCN    **+40B 
          AJM    ERRAAD,**   CHANNEL ACTIVE AFTER DISCONNECT
          LPN    1
          NJN    RES8        IF CONNECTED 
          LDM    SB+SCON
          LPN    10B
          ZJN    RES7        IF NO ACTIVITY, ERROR
          AOD    S3 
          SHN    17-6        ALLOW 77B ATTEMPTS 
          MJN    RES7        IF CONNECT TIME-OUT
          LJM    RES1        TRY AGAIN
  
 RES7     LJM    ERRCTO      CONNECT TIME-OUT, ACCESS NOT CONNECTED 
  
 RES8     STM    CCNF        SET COUPLER CONNECTED FLAG 
          LJM    XRES        EXIT TO STACK
          SPACE  4,18 
**        STAG - SEND A CTL TAG.
* 
*         ENTRY  (A)    = ABORT ADDRESS.
*                (PA)   = TAG.
*                (PA+1) = TAG MODIFIER. 
*                (PA+2) = SELECT HOLD FLAG. 
*                         0 = DO NOT SET SELECT HOLD. 
*                         1 = SET SELECT HOLD.
* 
*         EXIT   NONE.
* 
*         USES   S1, S2.
* 
*         CALLS  CCN, FAN.
  
 STAG     RJM    CCN         CHECK COUPLER CONNECTED FLAG AND SAVE ABT A
          LDD    AL          REQUIRES AN ACCESS LEVEL OF 10 OR HIGHER 
          SBN    10B
          PJN    STG1        IF ACCESS LEVEL OK 
          LJM    ERRIAL      ILLEGAL ACCESS LEVEL 
  
 STG1     LDD    PA 
          LPN    77B         SAVE ONLY THE ACTUAL TAG 
          STD    PA 
          LDD    PA+2 
          LPN    1           SAVE SELECT HOLD BIT 
          LMN    2           OR A CTL FUNCTION BIT
          SHN    7-1         AND POSITION TO THE CORRECT BIT
          LMD    PA          OR IN THE TAG BITS 
          RJM    FAN         ISSUE THE TAG
          ACN    **+40B 
          IJM    ERRIAA,**   INACTIVE AFTER ACTIVATE
          FJM    ERRFBO,**   CHAN FULL BEFORE OUTPUT
          LDD    PA+1 
          STM    SB+SFP      SAVE FUNCTION PARAMETER
          RJM    DLY         OUTPUT AND DELAY 
          LDN    4
 STG2     FJM    STG3,**     IF STATUS PRESENT
 STGD1    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    STG2        LOOP 
          LJM    ERRSNR      STATUS NOT RETURNED
  
 STG3     IAN    **+40B 
          STM    SB+SIMT     SAVE IMMEDIATE TAG STATUS
          IJM    ERRIAI,**   CHANNEL INACTIVE AFTER INPUT 
          DCN    **+40B 
          AJM    ERRAAD,**   CHANNEL ACTIVE AFTER DISCONNECT
          LJM    XSTAG       EXIT TO STACK
          SPACE  4,18 
**        SCTR - SET A COUPLER COUNTER. 
* 
*         ENTRY  (A)    = ABORT ADDRESS.
*                (PA)   = CODE INDICATING WHICH COUNTER.
*                          0 = INPUT WORD COUNTER.
*                          1 = OUTPUT WORD COUNTER. 
*                          2 = BUFFER WORD COUNTER. 
*                (PA+1) = VALUE TO SET IN THE COUNTER.
* 
*         EXIT   NONE.
* 
*         USES   S1, S2.
* 
*         CALLS  CCN, FAN.
  
 SCTR     RJM    CCN         CHECK COUPLER CONNECTED FLAG AND SAVE ABT A
          LDD    PA 
          SBN    TCFL 
          MJN    SCR1        IF CODE IS WITHIN RANGE
          LJM    ERRSWE      SOFTWARE ERROR 
  
 SCR1     LDM    TCF,PA 
          RJM    FAN
          ACN    **+40B 
          IJM    ERRIAA,**   INACTIVE AFTER ACTIVATE
          FJM    ERRFBO,**   FULL BEFORE OUTPUT 
          LDD    PA+1 
          STM    SB+SFP      SAVE FUNCTION PARAMETER
          RJM    DLY         OUTPUT AND DELAY 
          IJM    ERRIAO,**   INACTIVE AFTER OUTOUT
          DCN    **+40B 
          AJM    ERRAAD,**   CHANNEL ACTIVE AFTER DISCONNECT
          LJM    XSCTR       EXIT TO STACK
          SPACE  4,10 
**        TCF -  TABLE OF COUNTER FUNCTION CODES. 
* 
*         THE ORDER OF THE FOLLOWING FUNCTION CODES MUST NOT
*         BE CHANGED. 
  
 TCF      VFD    12/FSIWC    INPUT WORD COUNTER 
          VFD    12/FSOWC    OUTPUT WORD COUNTER
          VFD    12/FSBWC    BUFFER WORD COUNTER
 TCFL     EQU    *-TCF       TABLE LENGTH 
          SPACE  4,20 
**        STAT - REQUEST STATUS WORD(S).
* 
*         ENTRY  (A)  = ABORT ADDRESS.
*                (PA) = CODE DEFINING WHICH STATUS WORD TO REQUEST. 
*                        0 = ALL STATUS WORDS.
*                        1 = COUPLER. 
*                        2 = CTL. 
*                        3 = PARITY ERROR.
*                        4 = INPUT WORD COUNTER.
*                        5 = OUTPUT WORD COUNTER. 
*                        6 = BUFFER WORD COUNTER. 
* 
*         EXIT   NONE.
* 
*         USES   S1, S2, S3.
* 
*         CALLS  CCN, RSW.
  
 STAT     RJM    CCN         CHECK COUPLER CONNECTED FLAG 
          LDD    PA 
          ZJN    STA1        IF ALL STATUS WORDS REQUESTED
          RJM    RSW
          SHN    6
          LPN    77B
          ZJN    STA3        IF NO ERROR
          LJM    ERRIAI 
  
 STA1     STD    S3 
 STA2     AOD    S3 
          SBN    TSFL+1 
          PJN    STA3        IF COMPLETED ALL STATUS WORDS
          ADN    TSFL+1 
          RJM    RSW         GET A COUPLER STATUS WORD
          SHN    6
          LPN    77B
          ZJN    STA2        IF NO ERROR
          LJM    ERRIAI 
  
 STA3     LJM    XSTAT       EXIT TO STACK
          SPACE  4,20 
***       COMMON SUBROUTINES. 
* 
          SPACE  4,18 
**        CCN - CHECK COUPLER CONNECTED FLAG. 
* 
*         IF  THE  COUPLER  IS  CONNECTED, (CCNF) NON-ZERO, EXIT TO THE 
*         CALLER. IF THE COUPLER IS NOT CONNECTED EXIT TO *ERR* WITH AN 
*         *EC.CNC* ERROR CODE.
* 
*         ENTRY  (A) = ABORT ADDRESS. 
* 
*         EXIT   S1, S2 = ABORT ADDRESS.
* 
*         USES   S1, S2.
* 
*         CALLS  ERR. 
  
 CCNX     LJM    *           ENTRY/EXIT 
 CCN      EQU    *-1
          STD    S1          SAVE ABT ADDRESS 
          SHN    -12
          STD    S2 
          LDM    CCNF 
          NJN    CCNX        IF COUPLER CONNECTED 
          LJM    ERRCNC 
          SPACE  4,22 
**        DEQ -  DISCONNECT EQUIPMENT.
* 
*         IF THE COUPLER IS NOT CONNECTED, RETURN.  IF CONNECTED, ISSUE 
*         THE CLEAR, DROP SELECT HOLD AND DISCONNECT FUNCTIONS TO CLEAN 
*         UP ANY CONDITIONS SET BY A PREVIOUS COMMAND BEFORE  RELEASING 
*         THE CHANNEL.
* 
*         ENTRY  (CCNF) = NON-ZERO IF COUPLER CONNECTED.
* 
*         EXIT   (CCNF) = CLEARED (ZERO), IF NO ERROR ON THE DISCONNECT 
*                         AND *DEQ* CALLED FROM THE MODULE, IF CALL WAS 
*                         BASIC DRIVER *CCNF* IS ALWAYS CLEARED.
* 
*         USES   NONE.
* 
*         CALLS  FAN, FRE.
  
 DEQX     LJM    *           ENTRY/EXIT 
 DEQ      EQU    *-1
          LDC    **          COUPLER CONNECTED FLAG 
 CCNF     EQU    *-1
          ZJN    DEQX        IF COUPLER NOT CONNECTED 
          LDD    S2          UPPER PORTION OF ABORT ADDRESS 
          LMN    77B
          ZJN    DEQ1        IF CALL FROM BASIC DRIVER
          LDN    FDSH        DROP SELECT HOLD 
          RJM    FAN
          LDN    FDISC       DISCONNECT 
          RJM    FAN
          UJN    DEQ2 
  
 DEQ1     LDN    FDSH        DROP SELECT HOLD 
          RJM    FRE
          LDN    FDISC       DISCONNECT 
          RJM    FRE
 DEQ2     LDN    0
          STM    CCNF        CLEAR COUPLER CONNECTED FLAG 
          UJN    DEQX        RETURN 
          SPACE  4,18 
**        FAN -  ISSUE A FUNCTION ON THE CHANNEL. 
* 
*         ENTRY  (A) = FUNCTION CODE IN BITS 8-0. 
* 
*         EXIT   (LF) = FUNCTION ISSUED.
* 
*         USES   LF.
* 
*         CALLS  ERR. 
  
 FANX     LJM    *
 FAN      EQU    *-1
          LPC    777B        SAVE FUNCTION CODE 
          ADC    **          ADD COUPLER EQUIPMENR CODE 
*         ADC    E000 
 EQFAN    EQU    *-1
          STD    LF          SAVE LAST FUNCTION 
          AJM    ERRABF,**   CHANNEL ACTIVE BEFORE A FUNCTION 
          FAN    **+40B 
          LDN    4
 FAN1     IJM    FANX,**     EXIT IF INACTIVE 
 FAND1    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    FAN1 
          LJM    ERRNIF      IF NO INACTIVE TO THE FUNCTION 
          SPACE  4,20 
**        FRE -  ISSUE A FUNCTION, RETURN ON ERRORS.
* 
*         ENTRY  (A) = FUNCTION IN BITS 8-0.
* 
*         EXIT   (A) = EQUIPMENT CODE PLUS THE FUNCTION.
* 
*         USES   NONE.
* 
*         CALLS  NONE.
  
 FRE2     IJM    FREX,**     ENSURE CHANNEL IS INACTIVE 
          DCN    **+40B 
  
 FREX     LJM    *           ENTRY / EXIT 
 FRE      EQU    *-1
          ADC    **          ADD EQUIPMENT CODE 
*         ADC    E000 
 EQFRE    EQU    *-1
          IJM    FRE1,**     ENSURE CHANNEL IS INACTIVE 
          DCN    **+40B 
 FRE1     FAN    **+40B 
          UJN    FRE2 
          SPACE  4,18 
**        RSW  - REQUEST A COUPLER STATUS WORD. 
* 
*         ENTRY  (A) = CODE DEFINING WHICH STATUS WORD TO REQUEST.
*                        0 = COUPLER. 
*                        1 = COUPLER. 
*                        2 = CTL. 
*                        3 = PARITY ERROR.
*                        4 = INPUT WORD COUNTER.
*                        5 = OUTPUT WORD COUNTER. 
*                        6 = BUFFER WORD COUNTER. 
* 
*         EXIT   (A) = EC/STATUS IN THE FOLLOWING FORMAT. 
*                      VFD   6/EC,12/STATUS 
*                      EC = ZERO IF NO ERROR. 
* 
*         USES   D.Z1.
* 
*         CALLS  FAN. 
  
 RSWEX    ADC    EC.IAI*10000B         ADD ERROR CODE IN BITS 17-12.
 RSWX     LJM    *                     ENTRY/EXIT 
 RSW      EQU    *-1
          STD    D.Z1        SAVE STATUS WORD POINTER 
          NJN    RSW1 
          AOD    D.Z1        MUST BE BETWEEN 1-TSFL INTERNALLY
 RSW1     SBN    TSFL+1 
          PJN    RSW3        IF POINTER OUT OF RANGE
          LCN    0
          STM    SB+SCUP-1,D.Z1        SET CURRENT WORD TO ONES 
          LDM    TSF-1,D.Z1            GET THE FUNCTION CODE
          RJM    FAN
          ACN    **+40B 
          IJM    ERRIAA,**   INACTIVE AFTER ACTIVATE
          LDN    4
 RSW2     FJM    RSW4,**
 RSWD1    SBN    4           *** SBN 4 IF 1X SPEED PPU ***
*         SBN    2           *** SBN 2 IF 2X SPEED PPU ***
*         SBN    1           *** SBN 1 IF 4X SPEED PPU ***
          NJN    RSW2 
          LJM    ERRSNR      STATUS NOT RETURNED
  
 RSW3     LDD    D.Z1        POINTER IN ERROR 
          STM    SB+25
          LDM    RSW
          STM    SB+26       CALLING LOCATION 
          LDC    RSW
          STM    SB+27       ROUTINE THAT DETECTED THE ERROR
          LJM    ERRSWE      REPORT SOFTWARE POINTER ERROR
  
 RSW4     IAN    **+40B 
          STM    SB+SCUP-1,D.Z1        SAVE STATUS WORD 
          IJM    RSWEX,**              RETURN WITH AN ERROR CODE
          DCN    **+40B 
          AJM    ERRAAD,**   CHANNEL ACTIVE AFTER DISCONNECT
          LJM    RSWX        RETURN 
          SPACE  4,18 
**        TSF -  TABLE OF VALID COUPLER STATUS FUNCTIONS. 
* 
*         THE FUNCTION CODES MUST REMAIN IN THE ORDER AS DEFINED BY THE 
*         ENTRY CODES FOR SUBROUTINE *RSW*. 
  
 TSF      VFD    12/FCSTS    COUPLER STATUS 
          VFD    12/FCTLS    CTL STATUS 
          VFD    12/FPERS    PARITY ERROR STATUS
          VFD    12/FIWCS    INPUT WORD COUNTER 
          VFD    12/FOWCS    OUTPUT WORD COUNTER
          VFD    12/FBWCS    BUFFER WORD COUNTER
 TSFL     EQU    *-TSF       TABLE LENGTH 
          SPACE  4,18 
**        ERRXX - ERROR JUMP TABLE. 
* 
*         TO REPORT MOST ERRORS THIS TABLE IS ENTERED AT THE RESPECTIVE 
*         LOCATION FOR THE ERROR, THE A REGISTER IS SET TO THE MESSAGE
*         ORDINAL, *MA*, OF THE MESSAGE  WITHIN THE CM MESSAGE BUFFER 
*         ASSOCIATED WITH THE ERROR CODE, THE ERROR CODE, *EC*, AND THE 
*         FATAL ERROR FLAG, *FEF*, IN THE FOLLOWING FORMAT. 
*                VFD 6/EFE,6/MA,6/EC
* 
*         THE ERROR PROCESSING ROUTINE, *ERP*, WILL BE EXECUTED TO
*         REPORT THE ERROR. 
  
 ERRFLE   LDC    ER.FLE      ADDRESS OUT OF FIELD LENGTH
          UJN    ERR
  
 ERRTL    LDC    ER.TL       TIME LIMIT ERROR FOR COMMUNICATIONS
          UJN    ERR
  
 ERRSEE   LDC    ER.SEE      SUBROUTINE ENTRY/EXIT ERROR
          UJN    ERR
  
 ERRWC    LDC    ER.WC       BUFFER REFERENCE OR WC ERROR 
          UJN    ERR
  
 ERRRES   LDC    ER.RES      RESERVED FOR BASIC DRIVER
          UJN    ERR
  
 ERRRES1  LDC    ER.RES1     RESERVED FOR BASIC DRIVER
          UJN    ERR
  
 ERRRES2  LDC    ER.RES2     RESERVED FOR BASIC DRIVER
          UJN    ERR
  
 ERRNIF   LDC    ER.NIF      NO INACTIVE TO LAST FUNCTION 
          UJN    ERR
  
 ERRSNR   LDC    ER.SNR      NO FULL TO STATUS REQUEST
 ERR      UJN    ERR1 
  
 ERRFPN   LDC    ER.FPN      FUNCTION PARAMETER NOT ACCEPTED
          UJN    ERR1 
  
 ERRIDW   LDC    ER.IDW      ALL DATA NOT ACCEPTED FROM PP
          UJN    ERR1 
  
 ERRIDR   LDC    ER.IDR      INCOMPLETE DATA RETURNED TO PP 
          UJN    ERR1 
  
 ERRCNC   LDC    ER.CNC      COUPLER NOT CONNECTED
          UJN    ERR1 
  
 ERRIAA   LDC    ER.IAA      CHANNEL INACTIVE AFTER ACTIVATE
          UJN    ERR1 
  
 ERRIAL   LDC    ER.IAL      ILLEGAL REQUEST FOR ACCESS LEVEL 
          UJN    ERR1 
  
 ERRCTO   LDC    ER.CTO      ACCESS NOT CONNECTED WITHIN 5 MIN. 
          UJN    ERR1 
  
 ERRAAI   LDC    ER.AAI      CHANNEL REMAINED ACTIVE AFTER INPUT
          UJN    ERR1 
  
 ERRABF   LDC    ER.ABF      CHANNEL ACTIVE BEFORE A FUNCTION 
          UJN    ERR1 
  
 ERRAAD   LDC    ER.AAD      CHANNEL ACTIVE AFTER DEACTIVATE
 ERR1     UJN    ERR2 
  
 ERRIAI   LDC    ER.IAI      CHANNEL INACTIVE AFTER AN INPUT
          UJN    ERR2 
  
 ERRFBO   LDC    ER.FBO      CHANNEL FULL BEFORE OUTPUT 
          UJN    ERR2 
  
 ERRIAO   LDC    ER.IAO      CHANNEL INACTIVE AFTER AN OUTPUT 
          UJN    ERR2 
  
 ERRSWE   LDC    ER.SWE      SOFTWARE POINTER ERROR, A TABLE INDEX
*                            EXCEEDS THE LENGTH OF THE TABLE. 
 ERR2     EQU    *
          SPACE  4,10 
**        ERP -  ERROR PROCESSOR ROUTINE. 
* 
*         PROCESS THE ERROR BASED ON THE FATAL ERROR FLAG  AND  WHETHER 
*         OR  NOT  THE COMMAND HAD AN ABORT ADDRESS. IF THE FATAL ERROR 
*         FLAG IS SET, EXIT IS TO *BD.ABT*, IF  AN  ABORT  ADDRESS  WAS 
*         SPECIFIED  ON  THE COMMAND AND ITS NOT A FATAL ERROR, EXIT TO 
*         *BD.RNI*, ELSE EXIT TO *BD.ERR*.
* 
*         ENTRY  (A) = FATAL ERROR FLAG, MSG ORDINAL AND ERROR CODE.
*                      VFD   6/FEF,6/MESSAGE ORDINAL,6/ERROR CODE.
*                             FEF = NON-ZERO IF FATAL ERROR.
*                 (S1), (S2) = COMMAND ABORT ADDRESS IF NON-ZERO. 
* 
*         EXIT   (EA) = LINE NUMBER OF THE COMMAND BEING EXECUTED.
*                (EC) = ERROR CODE. 
*                (EM) = MESSAGE ORDINAL.
* 
*         USES   D.Z1, D.Z2, EA, EC, EM.
* 
*         CALLS  BD.ABT, BD.ERR, BD.RNI.
  
 ERP      STD    D.Z1        SAVE MESSAGE ORDINAL AND ERROR CODE
          SHN    -12
          STD    D.Z2        SAVE FATAL ERROR FLAG
          LDM    BD.CHFG
          ZJN    ERP1        IF CHANNEL IS NOT ASSIGNED 
          LDD    BD.AL
          SBN    BD.AL21
          ZJN    ERP1        NO CLEAN-UP IF ACCESS LEVEL 21 
          IJM    ERP1,**     CLEAN UP CHANNEL 
          DCN    **+40B 
 ERP1     LDD    D.Z1 
          LPN    77B
          ADC    5400B       ADD PREFIX FOR MSS COUPLER PRODUCT OVERLAY 
          STD    EC          STORE ERROR CODE 
          LDD    D.Z1 
          SHN    -6 
          ADC    100B        FLAG MESSAGE AS AN OVERLAY MESSAGE 
          STD    EM          STORE MESSAGE ORDINAL
          LDD    P
          STD    EA          STORE LINE NUMBER WHERE ERROR OCCURRED 
          LDD    D.Z2 
          NJN    ERP3        IF FATAL ERROR FLAG SET
          LDD    S2 
          SHN    12 
          LMD    S1 
          ZJN    ERP2        IF ABORT ADDRESS WAS NOT SPECIFIED 
          LJM    BD.RNI      RNI AT THE ABORT ADDRESS 
  
 ERP2     LJM    BD.ERR      TERMINATE OR RESTART MODULE BASED ON *SE*
  
 ERP3     LJM    BD.ABT      TERMINATE MODULE 
          SPACE  4,10 
****      BUFFERS.
  
 IB       EQU    6500B       INPUT BUFFER FWA 
 OB       EQU    IB+IBL      OUTPUT BUFFER FWA
 SB       EQU    OB+OBL      STATUS BUFFER FWA
 DUM      EQU    SB+SBL      IB OVERFLOW BUFFER, USED TO DISGARD DATA.
 BLWA     EQU    DUM+DUML    END OF BUFFERS 
  
****
          ERRPL  *-IB        ERROR IF PRODUCT OVERLAY OVERFLOW
  
**        THE INITIALIZATION CODE THAT FOLLOWS IS OVERLAYED BY THE
*         PRODUCT OVERLAY BUFFERS ABOVE.
  
*         STORE EQUIPMENT AND CONNECT CODES 
  
 INIT     LDM    BD.EQ
          LPC    7000B
          STM    EQFAN       SAVE COUPLER EQUIPMENT CODE. 
          STM    EQFRE       SAVE COUPLER EQUIPMENT CODE. 
  
*         SET DELAY TIME BASED ON SPEED OF PPU
  
          LDC    TSPEED 
          STD    D.T0 
 INIT1    LDI    D.T0 
          ZJN    INIT2       IF END OF TABLE
          STD    D.T1 
          LDI    D.T1 
          SCN    77B
          ADM    BD.SPEED 
          STI    D.T1        SET ADN/SBN VALUE
********
          AOD    D.T0 
          UJN    INIT1       COMPLETE ALL WORDS 
  
*         STORE I/O CHANNEL INTO COMMANDS 
  
 INIT2    LDM    BD.CHAN
          STD    D.T2 
          LDC    TCHAN
          STD    D.T0        SET FWA OF TABLE CONTAINING ADDRESSES
 INIT3    LDI    D.T0 
          ZJN    INIT4       IF END OF TABLE
          STD    D.T1 
          LDI    D.T1 
          SCN    37B         CLEAR CHANNEL FIELD
          ADD    D.T2 
          STI    D.T1 
          AOD    D.T0 
          UJN    INIT3       COMPLETE ALL WORDS 
  
*         WRITE PP MESSAGES TO CM 
  
 INIT4    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=D.T0-D.T4 POINTER, D.Z3=CM WD COUNTER 
 INIT10   LDM    PPMSGS,D.Z1 GET PP MESSAGE WORD
          ZJN    INIT12      IF END OF MESSAGE
 INIT11   STM    D.T0,D.Z2   STORE IN D.T0+ 
          AOD    D.Z1        BUMP PP MESSAGE POINTER
          UJN    INIT13 
 INIT12   LDC    2R          MESSAGE END, STORE BLANKS
          STM    D.T0,D.Z2
 INIT13   AOD    D.Z2        BUMP D.T0+ 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    D.T0        WRITE ONE WORD FROM D.T0 
          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
  
*         CLEAR THE STATUS BUFFER 
  
          STD    D.Z1 
 INIT15   LDN    0           CLEAR THE STATUS BUFFER (SB) 
          STM    SB,D.Z1
          AOD    D.Z1 
          SBN    SBL
          MJN    INIT15      IF NOT LAST LOCATION 
  
*         SET DIRECT CELLS
  
          LDN    0
          STD    S1          CLEAR ABT ADDRESS
          STD    S2 
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER 
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER 
          LDC    IBL
          STD    WC          SET DEFAULT VALUE IN WORD COUNT REGISTER 
          LDN    0           EXIT WITH (A) ZERO = NO ERROR
          LJM    START       RETURN TO BASIC DRIVER WITH (A) = 0
          EJECT 
  
  
*         TABLE OF PPU SPEED SWITCHES 
  
 TSPEED   VFD    12/INBD1 
          VFD    12/LBKD1 
          VFD    12/STGD1 
          VFD    12/RSWD1 
          VFD    12/DLYD1 
          VFD    12/FAND1 
          DATA   0           END OF SPEED SWITCHES TABLE
          TITLE  ERROR MESSAGES FOR MSC PRODUCT OVERLAY 
 PPMSGS   EQU    *           START OF PP MESSAGES 
****
          MMSG   ER.FLE,EC.FLE,(ADDR OUT OF FL),1 
          MMSG   ER.TL,EC.TL,(I/O TIME OUT ON CH RESERVE),1 
          MMSG   ER.SEE,EC.SEE,(SUBROUTINE ENTRY/EXIT ERROR),1
          MMSG   ER.WC,EC.WC,(BUFFER INDEX OR WC ERROR),1 
          MMSG   ER.RES,EC.RES,(R)
          MMSG   ER.RES1,EC.RES1,(R)
          MMSG   ER.RES2,EC.RES2,(R)
          MMSG   ER.AAD,EC.AAD,(CH ACTIVE AFTER DCN)
          MMSG   ER.AAI,EC.AAI,(CH REMAINED ACTIVE AFTER INPUT) 
          MMSG   ER.ABF,EC.ABF,(CH ACTIVE BEFORE FUNCTION)
          MMSG   ER.CNC,EC.CNC,(COUPLER NOT CONNECTED),1
          MMSG   ER.CTO,EC.CTO,(COUPLER CONNECT TIME OUT) 
          MMSG   ER.FBO,EC.FBO,(CH FULL BEFORE OUTPUT)
          MMSG   ER.FPN,EC.FPN,(FUNCTION PARAM NOT ACCEPTED)
          MMSG   ER.IAA,EC.IAA,(CH INACTIVE AFTER ACN)
          MMSG   ER.IAI,EC.IAI,(CH INACTIVE AFTER INPUT)
          MMSG   ER.IAL,EC.IAL,(ILLEGAL CMD FOR ACCESS LEVEL),1 
          MMSG   ER.IAO,EC.IAO,(CH INACTIVE AFTER AN OUTPUT)
          MMSG   ER.IDW,EC.IDW,(ALL DATA NOT ACCEPTED FROM PP)
          MMSG   ER.IDR,EC.IDR,(ALL DATA NOT RETURNED TO PP)
          MMSG   ER.NIF,EC.NIF,(NO INACTIVE TO LAST FUNCTION) 
          MMSG   ER.SNR,EC.SNR,(NO FULL ON STATUS)
          MMSG   ER.SWE,EC.SWE,(SOFTWARE POINTER ERROR),1 
 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
 FWA      SET    START-5
 LEN      SET    *-FWA
 SLE      SET    LEN/500B+1 
          ERRNG  7772B-SLE*502B+1-FWA        ERROR IF OVERLAY OVERFLOW
          ENDIF 
  
          IFEQ   NOSBE,1,1
          ERRPL  *-7773B     ERROR IF MSC PRODUCT OVERLAY OVERFLOW
  
          QUAL   *
