*COMDECK,MSSCSU 
          EJECT 
 5SU      SEGMENT POVLA 
          ORG    POVLA
          QUAL   CSU
*CALL,VERS
          COMMENT CSU PRODUCT OVERLAY FOR MALET "VERS"
          TITLE  HIGH LEVEL CSU PRODUCT OVERLAY FOR MALET.
*****     5SU -  MSF CSU HIGH LEVEL LANGUAGE OVERLAY DRIVER FOR MALET.
* 
*         AUTHOR  E. L. HARMON 6/16/77. 
*                 ENGINEERING SERVICES. 
*                 MAINTENANCE SOFTWARE ENGINEERING. 
* 
*         "OVL" IS THE OVERLAY CALLED BY THE PP PROGRAM *MLD* TO EXECUTE
*         THE MALET MSF CARTRIDGE STORAGE UNIT(CSU) HIGH LEVEL COMMANDS.
  
*CALL,CPYCOM
          SPACE  4,10 
***       5SU IS THE OVERLAY CALLED BY THE PP PROGRAM *MLD* TO EXECUTE
*         THE MALET MSF CARTRIDGE STORAGE UNIT(CSU) HIGH LEVEL COMMANDS.
* 
*         THE *CSU* PRODUCT OVERLAY REQUIRES AN ADDITIONAL OVERLAY TO 
*         SUPPORT THE *CSU* AND SOME *MST* COMMANDS.  THE MAIN OVERLAY
*         IS LOADED, THE INITIALIZATION PERFORMED AND THEN THE INITIAL- 
*         IZATION CODE IS OVERLAYED WITH THE SECOND OVERLAY.
* 
          SPACE  4,10 
**        THE FOLLOWING MALET COMMANDS ARE SUPPORTED BY THE *CSU* 
*         PRODUCT OVERLAY.  ALL COMMANDS MAY BE EXECUTED WITH AN ACCESS 
*         LEVEL OF 00.
* 
*          MOUNT          - PICK A CARTRIDGE, MOVE TO MST AND PUT.
*          MOVE XY        - PICK A CARTRIDGE, MOVE TO XY AND PUT. 
*          PREPARE DEV    - ISSUE A PREPARE COMMAND TO THE CSU/MST. 
*          RECAL          - RECALIBRATE THE SELECTOR. 
*          SEEK MST       - MOVE EMPTY SELECTOR TO THE ASSIGNED MST.
*          SEEK XY        - MOVE EMPTY SELECTOR SPECIFIED XY POSITION.
*          SENSE DEV      - REQUEST MSA AND  MST/CSU SENSE INFORMATION. 
*          STATUS         - REQUEST ALL COUPLER STATUS WORDS. 
          SPACE  4,10 
**        DEFINE THE OVERLAY NAME.
  
 OVL      MICRO  1,,*5SV*    OVERLAY LOADED AFTER INITIALIZATION. 
  
          TITLE  ASSEMBLY CONSTANTS.
**        ASSEMBLY CONSTANTS. 
  
 SHNI     EQU    1000B       SHIFT INSTRUCTION USED AS A CONSTANT 
  
 IBL      EQU    100B        LENGTH OF INPUT BUFFER 
 OBL      EQU    100B        LENGTH OF OUTPUT BUFFER
 SBL      EQU    100B        LENGTH OF STATUS BUFFER
 DLU      EQU    12          DATA LENGTH UPPER  IN *IB/OB*
 DLL      EQU    DLU+1       DATA LENGTH LOWER  IN *IB/OB*
 HACRL    EQU    14          LENGTH OF THE HA AND COUNT FIELDS (READ) 
 HACWL    EQU    HACRL+2     LENGTH OF THE HA AND COUNT FIELDS (WRITE)
 NSBY     EQU    40          NUMBER OF 8-BIT SENSE BYTES
 OBDL     EQU    OBL-HACWL   LENGTH OF DATA FIELD IN *OB* 
 OBD24L   EQU    OBDL/2      LENGTH OF DATA FIELD IN 24-BIT WORDS 
 ROC      EQU    6           BEGINING OF RO COUNT FIELD IN *IB/OB*
 RODR     EQU    HACRL       BEGINING OF RO DATA FIELD IN *IB* (READ) 
 RODW     EQU    HACWL       BEGINING OF RO DATA FIELD IN *OB* (WRITE)
 SNS      EQU    26B         BEGINING OF SENSE DATA IN *SB* 
 SNSL     EQU    NSBY+2*8/12 LENGTH OF SENSE DATA FIELD IN 12-BIT BYTES 
*         -      -           INCLUDING *DL LOWER* AND *ID* BYTES
 SNSTL    EQU    SNSL+HACRL  TOTAL LENGTH OF SENSE (HA, COUNT, DATA)
  
 HH40     EQU    4000B       FLAG APPENDED TO *CC* WHEN *HH* = 40 HEX 
 DEV      EQU    7           DEFAULT DEVICE ADDRESS 
 MSA      EQU    6           DEFAULT MSA ADDRESS
 CC       EQU    222B        DEFAULT CYLINDER ADDRESS = NOOP
 HH       EQU    100B        DEFAULT HEAD ADDRESS     = NOOP
  
**        MSF SEQUENCE CODES. 
* 
*         THIS CODE IS STORED IN *SEQN* UPON INITIAL ENTRY IN A MSF 
*         SEQUENCE TO DEFINE THE SEQUENCE BEING EXECUTED IN THE EVENT 
*         OF AN ERROR.  IF AN ERROR IS DETECTED, THIS CODE IS ADD ADDED 
*         TO THE ERROR CODE.
*               ERROR CODE (EC) BITS- 
*                            11--6 = SEQUENCE CODE. 
*                            05--0 = ERROR CODE.
  
 SQCIS    EQU    1           CPU INITIATED SELECTION SEQUENCE 
 SQERS    EQU    2           ERROR SEQUENCE 
 SQIPS    EQU    3           IDLE POLL SEQUENCE 
 SQRDS    EQU    4           READ SEQUENCE
 SQSEK    EQU    5           SEEK SEQUENCE
 SQSIS    EQU    6           SUBSYSTEM SELECTION SEQUENCE 
 SQSRS    EQU    7           SYSTEM RESET SEQUENCE
 SQUES    EQU    8           IDLE POLL SEQUENCE 
 SQWTS    EQU    9           WRITE SEQUENCE 
 SQRSN    EQU    10          READ SENSE SEQUENCE
          SPACE  4,12 
**        ERROR CODES - FIRST 7 ARE FOR BASIC DRIVER. 
  
 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.AAD   EQU    10B         CHANNEL ACTIVE AFTER DEACTIVATE
 EC.AAF   EQU    11B         CHANNEL ACTIVE AFTER A FUNCTION
 EC.ABF   EQU    12B         CHANNEL ACTIVE BEFORE A FUNCTION 
 EC.CNC   EQU    13B         COUPLER NOT CONNECTED
 EC.FBO   EQU    14B         CHANNEL FULL BEFORE OUTPUT 
 EC.FPN   EQU    15B         FUNCTION PARAMETER NOT ACCEPTED
 EC.IAA   EQU    16B         CHANNEL INACTIVE AFTER AN ACTIVATE 
 EC.IAI   EQU    17B         CHANNEL INACTIVE AFTER AN INPUT
 EC.IDX   EQU    20B         INCOMPLETE DATA TRANSFER 
 EC.NFI   EQU    21B         NO FULL ON AN INPUT
 EC.MRE   EQU    22B         MSA RESET DID NOT CLEAR SA1
 EC.COV   EQU    23B         PRS-CONSTANT OVERFLOW (BA)=ADR 
  
 EC.BSY   EQU    30B         MSA BUSY 
 EC.TRE   EQU    31B         TAG RESPONCE ERROR 
 EC.CK2   EQU    32B         CHECK 2 ERROR
 EC.DSE   EQU    33B         DEVICE STATUS ERROR
 EC.NDI   EQU    34B         NO DEVICE INTERRUPT
 EC.BAI   EQU    35B         MSA/DEV BSY AFTER INT
 EC.HIF   EQU    36B         CK2 OR HOT INTERFACE 
 EC.ICH   EQU    37B         INVALID CC OR HH 
 EC.ITO   EQU    40B         INDEX TIME-OUT 
 EC.IXD   EQU    41B         INDEX DID NOT DROP 
 EC.I36   EQU    42B         INVALID 3 OF 6 CODE
 EC.XLE   EQU    43B         XFER LENGTH ERROR
 EC.SA1   EQU    44B         SELECT ALERT 1 
 EC.WTO   EQU    45B         WRITE TIME-OUT 
 EC.WER   EQU    46B         WRITE ERROR
 EC.FSI   EQU    47B         FIRST SYNC IN T/O
 EC.NCL   EQU    50B         NE+CK2+LAST SYNC IN T/O
 EC.STE   EQU    51B         STATUS ERROR 
 EC.BPX   EQU    52B         BUFFER TO PP XFER ERROR
 EC.PBX   EQU    53B         PP TO BUFFER XFER ERROR
  
 EC.NMT   EQU    70B         NO MST ASSIGNED
 EC.IXY   EQU    71B         ILLEGAL XY COORDINATE
          SPACE  4,20 
**        DIRECT CELL EQUATES.
  
          IFEQ   NOS,1
 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 
          ENDIF 
  
 PA       EQU    D.T0        SUBROUTINE ENTRY PARAMETERS
 SEQN     EQU    D.SX0       CODE DEFINING THE SEQUENCES, *SQX EQU  X * 
 ABTL     EQU    D.SX1       LOWER 12 BITS OF ABT ADDRESS 
 ABTU     EQU    D.SX2       UPPER 6 BITS OF ABT ADDRESS
 S3       EQU    D.SX3       TEMP STORAGE 
 S4       EQU    D.SX4       TEMP STORAGE 
 LTST     EQU    D.SX5       LAST TAG STATUS
 EDI      EQU    D.SX6       EXPECTED DEVICE INTERRUPT FLAG 
 RIF      EQU    D.SX7       RESET INTERRUPT FLAG 
          SPACE  4,20 
****      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
  
****
          SPACE  4,20 
**        COUPLER STATUS. 
  
 FPE      EQU    4000B       FORCED PARITY ERROR
 DMTO     EQU    2000B       DEAD MAN TIME OUT
 DL0      EQU    1000B       DATA LENGTH EQUAL ZERO 
 BUR      EQU    0400B       BUFFER UNDERRUN
 BOR      EQU    0200B       BUFFER OVERRUN 
 PTYER    EQU    0100B       PARITY ERROR 
 SELH     EQU    0040B       SELECT HOLD
 DINB     EQU    0004B       DATA IN BUFFER 
 RWIP     EQU    0001B       READ/WRITE IN PROGRESS 
  
**        COUPLERS CTL STATUS.
  
 SELA     EQU    4000B       SELECTIVE ACTIVE 
 TM       EQU    2000B       TAPE MARK
 SYNCI    EQU    1000B       SYNC-IN
 HOTIF    EQU    0400B       HOT INTERFACE
 CK2      EQU    0200B       CHECK 2
 SA1      EQU    0100B       SELECT ALERT 1 
 USA2     EQU    0040B       UNLATCHED SELECT ALERT 2 
 LSA2     EQU    0020B       LATCHED SELECT ALERT 2 
 LSIET    EQU    0010B       LAST SYNC-IN TO NORMAL END TIMEOUT 
 FSYIN    EQU    0004B       FIRST SYNC-IN
 TV       EQU    0002B       TAG VALID
 NE       EQU    0001B       NORMAL END NOT 
  
**        MSF TAG RESPONCE STATUS BITS. 
  
 TSNE     EQU    4000B       TAG STATUS NORMAL END
 TSSA1    EQU    2000B       TAG STATUS SELECT ALERT 1
 TSSA2    EQU    1000B       TAG STATUS SELECT ALERT 2
 TSTV     EQU    0400B       TAG STATUS TAG VALID 
  
**        MSF STATUS BITS.
  
 ATTN     EQU    0004B       ATTENTION
 DEVCK    EQU    0040B       DEVICE CHECK 
 DBSY     EQU    0002B       DEVICE BUSY
 DRTI     EQU    0040B       DEVICE RESERVED THIS INTERFACE 
 DROI     EQU    0010B       DEVICE RESERVED OTHER INTERFACE
 LBSY     EQU    0020B       LONG BUSY (PARTIAL CONNECTION) 
 ONLN     EQU    0010B       ON LINE
 PINT     EQU    0200B       PRIMED INTERRUPT 
 PKCHI    EQU    0100B       PACK CHANGE INTERRUPT
 RWVLD    EQU    0010B       READ/WRITE VALID 
 SBSY     EQU    TSSA2       SHORT BUSY (SAME AS *TSSA2*) 
 SKC      EQU    0020B       SEEK COMPLETE
          SPACE  4,20 
**        TAG RESPONCE COMPARE BITS.
* 
*         THESE FLAG BITS ARE APPENDED TO THE TAG WORD. 
*         SUBROUTINE *STG* WILL MASK THE TAG RESPONCE WITH THESE BITS 
*         AND REPORT A *TAG RESPONCE ERROR* IF THE RESULT OF THE MASK 
*         IS NON-ZERO.
  
 CE       EQU    TSNE 
 C1       EQU    TSSA1
 C2       EQU    TSSA2
 CV       EQU    TSTV 
          SPACE  4,10 
**        TAG MODIFIER FLAG BITS. 
* 
*         THE FOLLOWING FLAG BITS MAY BE APPENDED TO THE TAG MODIFIER.
*         THESE FLAG BITS WILL BE INTERPRETED BY SUBROUTINE *STG*.
  
 NRC      EQU    4000B       DO NOT CHECK TAG RESPONCE FLAG 
 SBI      EQU    2000B       STORE BUS IN FLAG
 LNK      EQU    1000B       TAG LINKED FLAG
 ND       EQU    0400B       DO NOT DCN THE CHANNEL AFTER ISSUING A TAG 
          SPACE  4,12 
**        MSF IMMEDIATE TAGS AND TAG MODIFIERS. 
*         THE *TXXXX* SYMBOLS DEFINE THE TAGS AND THE *MXXXX* SYMBOLS 
*         DEFINE THE VALID TAG MODIFIERS FOR THE PRECEEDING TAG.  WHEN
*         A MODIFIER REQUIRES A MSA AND/OR DEVICE ADDRESS THE TAG IS
*         FOLLOWED BY A *VFD* INDICATING WHICH BITS THE ADDRESS IS
*         PLUGED INTO.
  
 TERBY    EQU    304B        TAG 04 - ERROR BYTES 
 MCK19    EQU    004B        MSA CHECK 19 
 MDVAD    EQU    020B        DEVICE ADDRESS 
  
 TSWCL    EQU    306B        TAG 06 - STRING SWITCH CONTROL 
*         VFD    4/0,3,TM,2/0,3/DEV    TM =ONE OF THE FOLLOWING *MXXXX* 
                                       DEV=DEVICE ADDRESS 
 MSRDV    EQU    300B        SET   RESERVE DEVICE 
 MCRDV    EQU    100B        CLEAR RESERVE DEVICE 
 MSDEI    EQU    240B        SET   PRIME DEVICE END INTERRUPT 
 MCDEI    EQU    040B        CLEAR PRIME DEVICE END INTERRUPT 
 MSTAT    EQU    000B        REQUEST STRING SWITCH STATUS 
  
 TSTSW    EQU    307B        TAG 07 - STRING SWITCH 
 MRLCN    EQU    120B        RESET LONG CONNECTION, ENB/DISABLE LATCH 
 MSLCN    EQU    120B        SET   LONG CONNECTION, ENB/DISABLE LATCH 
  
 TXTCL    EQU    311B        TAG 09 - TRANSMIT CONTROL
 MMSAR    EQU    200B        MSA RESET
 MRCHK    EQU    100B        RESET CHECK
 MSPLO    EQU    002B        START PLO LOCK IN
 MEPLO    EQU    001B        END   PLO LOCK IN
  
 TODWN    EQU    313B        TAG 0B - OPERATE DOWN
 MNSQL    EQU    040B        NOT SQUELCH
 MHSEL    EQU    020B        HEAD SELECT
 MRSEL    EQU    002B        READ SELECT
  
 TPOLL    EQU    242B        TAG 82 - POLL DEVICE 
*         VFD    4/0,3/MSA,2/0,3/MPOLD MSA = MSA ADDRESS
 MPOLD    EQU    001B        POLL DEVICE
  
 TSELD    EQU    343B        TAG 83 - SELECT DEVICE 
*         VFD    4/0,3/MSA,2/0,3/DEV   MSA = MSA ADDRESS
*                                      DEV = DEVICE ADDRESS 
  
 TDVST    EQU    344B        TAG 84 - REQUEST DEVICE STATUS 
  
 TRQAD    EQU    345B        TAG 85 - REQUEST ADDRESS (CC/HH) 
 MRDHH    EQU    010B        REQUEST HEAD ADDRESS (HH)
 MRDCC    EQU    004B        REQUEST CYLINDER ADDRESS (CC)
  
 TXTCC    EQU    346B        TAG 86 - TRANSMIT CYLINDER ADDRESS (CC)
*         VFD    4/0,8/CC    CC = CYLINDER ADDRESS
  
 TXTHH    EQU    347B        TAG 87 - TRANSMIT HEAD ADDRESS (HH)
*         VFD    4/0,8/HH    HH = HEAD ADDRESS
  
 TXCL1    EQU    351B        TAG 89 - TRANSMIT CONTROL 1
 MSTSK    EQU    020B        START SEEK 
 MRINT    EQU    001B        RESET INTERRUPT
  
 TOPUP    EQU    353B        TAG 8B - OPERATE UP
*         MODIFIERS ARE THE SAME AS FOR *TODWN* TAG 
  
 TDPDR    EQU    356B        TAG 8E - DUAL PATH DEVICE RESERVE
 MRESD    EQU    200B        RESERVE DEVICE 
 MRELD    EQU    100B        RELEASE DEVICE 
          SPACE  4,12 
**        MSF EXTENDED TAGS AND TAG MODIFIERS.
  
 TREAD    EQU    316B        TAG 0E - READ
 MHA      EQU    107B        HOME ADDRESS FIELD 
 MROC     EQU    002B        RO COUNT FIELD 
 MROD     EQU    003B        RO DATA FIELD
  
 TWRIT    EQU    317B        TAG 0F - WRITE 
*         MODIFIERS ARE THE SAME AS FOR *TREAD* TAG 
          SPACE  4,20 
**        STATUS BUFFER (SB) POINTERS.
  
 CSW      EQU    0           COUPLER STATUS WORD
 CTLSW    EQU    1           COUPLERS CTL STATUS WORD 
 PESW     EQU    2           COUPLERS PARITY ERROR STATUS WORD
 IWC      EQU    3           COUPLERS INPUT WORD COUNTER
 OWC      EQU    4           COUPLERS OUTPUT WORD COUNTER 
 BWC      EQU    5           COUPLERS BUFFER WORD COUNTER 
 CON      EQU    6           COUPLERS CONNECT STATUS
  
 MSTAD    EQU    7           MST PHYSICAL AND LOGICAL ADDRESS 
*                             5-3=PHYSICAL, 2-0=LOGICAL 
 LT       EQU    10B         LAST TAG ISSUED TO THE MSA 
 LTM      EQU    LT+1        LAST TAG MODIFIER
 LTS      EQU    LT+2        LAST TAG STATUS (BUS IN) 
 LDS      EQU    LT+3        LAST DEVICE STATUS 
 LCCXT    EQU    LT+4        LAST CC TRANSMITTED
 LCCBI    EQU    LT+5        LAST CC BUS IN 
 LCCRD    EQU    LT+6        LAST CC READ (85 TAG)
 LHHXT    EQU    LT+7        LAST HH TRANSMITTED
 LHHBI    EQU    LT+10B      LAST HH BUS IN 
 LHHRD    EQU    LT+11B      LAST HH READ (85 TAG)
 CK19     EQU    LT+12B      MSA CHECK 19 
 ERCC     EQU    LT+13B      CC READ IN ERROR SEQUENCE
 ERHH     EQU    LT+14B      HH READ IN ERROR SEQUENCE
  
 SENS     EQU    SNS         BEGINING OF THE SENSE DATA 
 MSAS     EQU    SNS+2       BEGINING OF THE MSA SENSE
 DEVS     EQU    MSAS+20     BEGINING OF THE DEVICE SENSE 
 XADR     EQU    DEVS+5      X ADDRESS SENSE BYTE 
 YADR     EQU    DEVS+6      Y ADDRESS SENSE BYTE 
          SPACE  4,5
**        DEVICE CODES SUPPORTED. 
  
 TCSU     EQU    101B        CARTRIDGE STORAGE UNIT (CSU) 
 TMST     EQU    100B        CSU AND TRANSPORT (MST)
          TITLE  LOCAL MACROS.
**        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
          TITLE  CSU PRODUCT OVERLAY. 
 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/OBL      LENGTH OF OUTPUT BUFFER
          VFD    12/SBL      LENGTH OF STATUS BUFFER
          VFD    12/BD.VERS  VERSION NUMBER 
          SPACE  4,20 
**        FIXED ADDRESS TABLE OF SUBROUTINE ENTRY POINTS. 
*         THIS TABLE MUST REMAIN IN THE SAME SEQUENCE AS THE COMMANDS 
*         ARE DEFINED WITHIN THE *MALET* COMPILER.  THE COMPILER
*         COMPILES RETURN JUMPS TO THE COMMAND VIA THIS TABLE.
  
 XREL     LJM    *
          LJM    REL         RELEASE SUBROUTINE 
 XRES     LJM    *
          LJM    RES         RESERVE SUBROUTINE 
 XADV     LJM    *
          LJM    ADV         ADVANCE COMMAND
 XMOUNT   LJM    *
          LJM    MOUNT       MOUNT COMMAND
 XMOVE    LJM    *
          LJM    MOVE        MOVE COMMAND 
 XPREP    LJM    *
          LJM    PREP        PREPARE COMMAND
 XRECAL   LJM    *
          LJM    RECAL       RECALIBRATE COMMAND
 XRESET   LJM    *
          LJM    RESET       SUBSYSTEM RESET
 XSEEK    LJM    *
          LJM    SEEK        SEEK X/Y, MST SUBROUTINE 
 XSENSE   LJM    *
          LJM    SENSE       READ SENSE SUBROUTINE
 XSTATUS  LJM    *
          LJM    STATUS      INPUT ALL EQUIPMENT STATUS SUBROUTINE
          SPACE  4,20 
**        ADV  - ADVANCE COMMAND. 
* 
*         RELEASE THE CARTRIDGE IN THE ASSIGNED MST-S ISD STATION *C*.
* 
*         ENTRY  (PA) = DEVICE CODE (ZERO=CSU, NON-ZERO=MST). 
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  CCN, SEK.
  
 ADV      RJM    CCN         SAVE ABORT ADDRESS, CHECK COUPLER
*                            CONNECTED FLAG, INCREMENT (P) AND
*                            PRESET THE DEVICE ADDRESS. 
          RJM    SEK
          CON    0#88+HH40   CC/HH FOR THE ADVANCE COMMAND
          LJM    XADV        RETURN TO THE STACK
          SPACE  4,20 
**        MOUNT- CSU MOUNT COMMAND. 
* 
*         ENTRY  (PA) = DEVICE CODE (ZERO=CSU, NON-ZERO=MST). 
*                (PHMOV) MUST BE PERSET TO THE PHYSICAL TRANSPORT 
*                        POSITION.
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  CCN, SEK.
  
 MOUNT    RJM    CCN         SAVE ABORT ADDRESS, CHECK COUPLER
*                            CONNECTED FLAG, INCREMENT (P) AND
*                            PRESET THE DEVICE ADDRESS. 
          RJM    VXY         VALIDATE CURRENT X/Y CO-ORD
          RJM    SEK
          CON    0#01 
 PHMOU    CON    **          MST PHYSICAL ADDRESS 
          LJM    XMOUNT      RETURN TO THE STACK
          SPACE  4,20 
**        SEEK - SEEK XY OR SEEK MST COMMAND. 
* 
* 
*         ENTRY  (PA) = DEVICE CODE (ZERO=CSU, NON-ZERO=MST). 
*                (PA+3) = COMMAND CODE. 
*                         ZERO     = SEEK XY
*                         NON-ZERO = SEEK MST 
*                (PHSEE) PRESET TO MST-S PHYSICAL POSITION
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  CCN, SEK.
  
 SEEK     RJM    CCN         SAVE ABORT ADDRESS, CHECK COUPLER
*                            CONNECTED FLAG, INCREMENT (P) AND
*                            PRESET THE DEVICE ADDRESS. 
          LDD    PA+3 
          ZJN    SEE1        IF SEEK XY 
          RJM    SEK
          CON    0#0
 PHSEE    CON    **          MST PHYSICAL ADDRESS 
          UJN    SEE2 
  
 SEE1     RJM    FCH         FORM CC AND HH ADDRESS 
          STM    SEEHH
          LDD    D.Z6 
          STM    SEECC
          RJM    SEK
 SEECC    CON    ** 
 SEEHH    CON    ** 
 SEE2     LJM    XSEEK       RETURN TO THE STACK
          TITLE  MSF SEQUENCES. 
**        CIS -  CPU INITIATED SELECTION SEQUENCE.
* 
*         PERFORMS THE INITIAL MSA/DEVICE SELECTION.
* 
*         ENTRY  NONE.
* 
*         EXIT   DEVICE SELECTED. 
* 
*         USES   D.T0, RIF. 
* 
*         CALLS  CTS, IPS, SEL, STG, UES, VTS.
* 
 CISX     LJM    *           ENTRY / EXIT 
 CIS      EQU    *-1
 CISE1    LDN    SQCIS
          STD    SEQN        SET THE SEQUENCE CODE
          LDN    0
          STD    D.T0        PRESET SHORT BUSY TIME OUT 
 CIS01    RJM    SEL         SELECT THE DEVICE
          SHN    17-9 
          PJN    CIS02       IF NOT SHORT BUSY
 DLCIS    LDN    4           *** LDN 4 IF 1X SPEED PPU ***
*         LDN    2           *** LDN 2 IF 2X SPEED PPU ***
*         LDN    1           *** LDN 1 IF 4X SPEED PPU ***
          RAD    D.T0 
          ADC    -126 
          MJN    CIS01       IF NOT SHORT BUSY TIME OUT 
 ERRBSY   LDC    ER.BSY      SHORT BUSY TIME-OUT
          LJM    ERP
  
 CIS02    SHN    17-4-17+9   CHECK LONG BUSY
          PJN    CIS04       IF MSA NOT BUSY
          LDD    EDI
          NJN    CIS03       IF EDI SET AND MSA BUSY
          RJM    STG
          CON    TSWCL+CV+C1+C2+CE
 DVCIS1   VFD    4/0,8/MSDEI+DEV       SET PRIME DEVICE INTERRUPT 
 CIS03    AOD    EDI         SET EXPECTED DEVICE INTERRUPT
          RJM    IPS         WAIT FOR THE INTERRUPT 
          UJN    CISE1       TRY AGAIN
  
 CIS04    LDD    LTST 
          LPC    TSTV+TSNE
          ZJN    CIS06       IF TAG VALID AND NORMAL END
          RJM    CTS         GET CTL STATUS 
          SHN    17-7 
          MJN    CIS05       IF CHECK 2 ERROR 
          LJM    ERRTRE      TAG RESPONCE ERROR 
  
 CIS05    LJM    ERRCK2      CHECK 2 ERROR
  
 CIS06    RJM    VTS         VALIDATE 3 OF 6 CODE $ GET DEVICE STATUS 
          LPN    DBSY 
          NJN    CIS03       IF DEVICE BUSY 
 CIS08    LDD    EDI
          NJN    CIS09       IF EXPECTED DEVICE INTERRUPT 
          LDD    LTST 
          LPN    SKC+DBSY+ONLN+ATTN 
          LMN    ONLN 
          ZJN    CIS10       IF ON LINE ONLY
          LMN    ONLN 
          LPN    ONLN 
          NJN    CIS09       IF DEVICE IS ON-LINE 
          LJM    ERRDSE      DEVICE STATUS ERROR
  
 CIS09    AOD    RIF         SET RESET INTERRUPT FLAG 
          RJM    UES
          LJM    CISE1       TRY AGAIN
  
 CIS10    RJM    STG
          CON    TSWCL+CV+C1+C2+CE
 DVCIS2   VFD    9/0,3/DEV   DEVICE ADDRESS 
          SHN    17-7 
          MJN    CIS09       IF PRIMED INTERRUPT
          RJM    CTS         GET CTL STATUS 
          SHN    17-7 
          PJN    CIS11       IF NO  CHECK 2 ERROR 
          LJM    ERRCK2      CHECK 2 ERROR
  
 CIS11    LJM    CISX        RETURN 
          SPACE  4,20 
**        IPS -  IDLE POLL SEQUENCE.
* 
*         WAIT FOR A DEVICE INTERRUPT AND RESELECT THE DEVICE WHEN THE
*         INTERRUPT OCCURS.  IF NO INTERRUPT IS RECEIVED WITHIN 4096*7
*         LOOPS AN ERROR *EC.NDI* IS ISSUED.
* 
*         ENTRY  NONE.
* 
*         EXIT   TO SUBSYSTEM INITIATED SEQUENCE(SIS).
* 
*         USES   S3.
* 
*         CALLS  BD.RCH, CEQ, DEQ, FTN, STG, SIS. 
  
 IPSX     LJM    *           ENTRY / EXIT 
 IPS      EQU    *-1
 IPSE1    LDN    SQIPS
          STD    SEQN        SET THE SEQUENCE CODE
          LDN    FDSH 
          RJM    FTN         DROP SELECT HOLD 
          LDN    0
          STM    IPSTO       CLEAR INTERRUPT TIME-OUT COUNTER 
          LDN    28          SET UP FOR 15 SEC DELAY
          STD    S3          SET NUMBER OF TIMES TO LOOP
 IPS1     RJM    STG
          CON    TPOLL+CV+C1+C2+CE
 MSIPS    VFD    4/0,3/**,5/MPOLD 
          LPC    **          BIT SIGNIFICANT DEVICE ADDRESS (BSDA)
 DIIPS    EQU    *-1
          NJN    SIS1        IF DEVICE INTERRUPT
          SOM    IPSTO       DECREMENT TIME-OUT COUNTER 
          NJN    IPS2 
 DCIPS    LCN    4           *** LCN 4 IF 1X SPEED PPU ***
*         LCN    2           *** LCN 2 IF 2X SPEED PPU ***
*         LCN    1           *** LCN 1 IF 4X SPEED PPU ***
          RAD    S3 
          ZJN    IPS3        IF INTERRUPT TIME-OUT
 IPS2     LDM    WTSQF
          LMN    1
          ZJN    IPS1        IF *ERP* OR *LOOPBACK*, CANNOT DROP CHAN 
          RJM    DEQ         DISCONNECT EQUIPMENT 
          RJM    BD.RCH      RESERVE CHANNEL
          RJM    CEQ         CONNECT EQUIPMENT
          UJN    IPS1        TRY AGAIN
  
 ERRNDI   EQU    *
 IPS3     LDC    ER.NDI      NO DEVICE INTERRUPT
          LJM    ERP         PROCESS THE ERROR
  
  
 IPSTO    CON    0           INTERRUPT TIME-OUT COUNTER 
  
 WTSQF    CON    0           TYPE OF WRITE
  
  
**        SIS -  SUBSYSTEM INITIATED SELECT SEQUENCE. 
* 
*         RESELECT THE MSA/DEVICE FOLLOWING AN INTERRUPT. 
* 
*         ENTRY  NONE.
* 
*         EXIT   RIF = SET (NON-ZERO).
* 
*         USES   RIF. 
* 
*         CALLS  IPSE1, SEL, STG, UES, VTS. 
  
 SIS1     LDN    SQSIS
          STD    SEQN        SET THE SEQUENCE CODE
          RJM    SEL         SELECT THE MSA AND DEVICE
          LPC    SBSY+LBSY
          ZJN    SIS2        IF MSA NOT BUSY
          LJM    IPSE1       MSA BUSY, TRY AGAIN
  
 SIS2     LDD    LTST 
          LPC    TSTV+TSNE
          ZJN    SIS3        IF NOT BUSY AND TAG RESPONCE OK
          LJM    ERRTRE      TAG RESPONCE ERROR 
  
 SIS3     RJM    VTS         VALIDATE 3 OF 6 CODE $ GET DEVICE STATUS 
          SHN    17-10
          PJN    SIS4        IF NOT SELECT ALERT 1
          LJM    ERRSA1 
  
 SIS4     SHN    17-1-17+10 
          PJN    SIS5        IF DEVICE NOT BUSY 
 ERBAI    EQU    *
          LDC    ER.BAI      DEVICE BUSY AFTER AN INTERRUPT 
          LJM    ERP         PROCESS THE ERROR
  
 SIS5     AOD    RIF         SET THE RESET INTERRUPT FLAG 
          RJM    UES
          LJM    IPSX        RETURN 
          SPACE  4,20 
**        SRS -  SYBSYSTEM RESET SEQUENCE.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   D.T0.
* 
*         CALLS  FTN, STG.
  
 SRSX     LJM    *           ENTRY / EXIT 
 SRS      EQU    *-1
          LDN    SQSRS
          STD    SEQN        SET THE SEQUENCE CODE
          LDN    28          SET LOOP COUNT 
          STD    D.T0 
 SRS1     RJM    STG
          CON    TSELD                 TAG - SELECT 
 MDSRS    CON    MSA*16+DEV+NRC        MSA/DEVICE ADDRESS 
*         VFD    4/NRC,3/MSA,2/0,3/DEV
          SHN    17-9 
          PJN    SRS2        IF NOT SHORT BUSY
 DCSRS    LCN    4           *** LCN 4 IF 1X SPEED PPU ***
*         LCN    2           *** LCN 2 IF 2X SPEED PPU ***
*         LCN    1           *** LCN 1 IF 4X SPEED PPU ***
          RAD    D.T0 
          NJN    SRS1        IF TIME OUT HAS NOT EXPIRED
          LJM    ERRBSY      MSA BUSY 
  
 SRS2     RJM    STG
          CON    TXCL1+CV+C2+CE        TAG - TRANSMIT CONTROL 1 
          CON    MRINT+LNK+NRC               RESET INTERRUPT
          CON    TXTCL+CV+C2+CE        TAG - TRANSMIT CONTROL 
          CON    MMSAR+LNK+NRC               MSA RESET
          CON    TSWCL+CV+C1+C2+CE     TAG - STRING SWITCH CONTROL
 DVSRS    VFD    12/MCRDV+MCDEI+DEV+LNK      CLEAR RESERVE DEVICE AND 
*                                            PRIME DEVICE END INTERRUPT 
          CON    TSTSW+CV+C1+C2+CE     TAG - STRING SWITCH
          CON    MRLCN                       RESET LONG CONNECTION
  
          LDN    FDSH 
          RJM    FTN         DROP SELECT HOLD 
          LJM    SRSX        RETURN 
          SPACE  4,20 
**        UES -  UNTIMED ENDING SEQUENCE. 
* 
*         RESET INTERRUPT.
* 
*         ENTRY  (RIF) NONZERO IF INTERRUPT IS TO BE RESET. 
* 
*         EXIT   (RIF) AND (EDI) CLEARED. 
* 
*         USES   EDI, RIF.
* 
*         CALLS  STG. 
  
 UESX     LJM    *           ENTRY / EXIT 
 UES      EQU    *-1
          LDN    SQUES
          STD    SEQN        SET THE SEQUENCE CODE
          LDD    RIF
          ZJN    UES2        IF NO INTERRUPTS TO RESET
          RJM    STG
          CON    TSWCL+CV+C1+C2+CE     TAG - STRING SWITCH CONTROL
 DVUES1   VFD    9/0,3/DEV                   RESET DEVICE INTERRUPT 
          LPC    PINT 
          ZJN    UES1        IF NO PRIMED INTERRUPT 
          RJM    STG
          CON    TSWCL+CV+C1+C2+CE     TAG - STRING SWITCH CONTROL
 DVUES2   CON    MCDEI+DEV                   RESET PRIMED INTERRUPT 
*         VFD    9/MCDEI,3/DEV
          UJN    UES2 
  
 UES1     RJM    STG
          CON    TXCL1+CV+C1+C2+CE     TAG - TRANSMIT CONTROL 1 
          CON    MRINT                       RESET INTERRUPT AND CHECK
*                                            FOR CHECK-2 ERROR
 UES2     LDN    0
          STD    EDI         CLEAR EXPECTED DEVICE INTERRUPT FLAG 
          STD    RIF         CLEAR RESET INTERRUPT FLAG 
          LDN    FDSH 
          RJM    FTN         DROP SELECT HOLD 
          UJN    UESX        RETURN 
          SPACE  4,20 
**        ERS -  ERROR SEQUENCE.
* 
*         EXECUTE THE MSF ERROR SEQUENCE. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (SB+CK19) = MSA CHECK 19 BYTE. 
*                (SB+ERCC) = CYL ADDRESS READ.
*                (SB+ERHH) = HEAD ADDRESS READ. 
* 
*         USES   SB+CK19, SB+ERCC, SB+ERHH. 
* 
*         CALLS  STG. 
  
 ERSX     LJM    *           ENTRY / EXIT 
 ERS      EQU    *-1
          LDN    SQERS
          STD    SEQN        SET THE SEQUENCE CODE
          LDM    SVSB+LT
          LMC    TREAD
          ZJN    ERS01       IF LAST TAG WAS A READ 
          LMN    TWRIT-TREAD
          NJN    ERS03       IF LAST TAG NOT A WRITE
 ERS01    LDC    30000/48 
*         LDC    30000/48*2  IF 2X PP 
 DCERS1   EQU    *-1
          STD    D.T7 
 ERS02    RJM    CTS         GET CTL STATUS 
          LPC    SA1+LSA2 
          NJN    ERS03       IF SELECT ALERT 1 OR 2 WAS RECEIVED
          SOD    D.T7 
          NJN    ERS02       IF NOT TIME-OUT
 ERS03    LDM    SVSB+CTLSW            CTL STATUS 
          SHN    17-7 
          PJN    ERS1        IF NOT A CHECK 2 ERROR 
          RJM    STG
          CON    TXCL1                 TAG - TRANSMIT CONTROL 1 
          CON    MRINT+NRC                   RESET INTERRUPT
 ERS1     RJM    STG
          CON    TERBY                 TAG - ERROR BYTE 
          CON    MCK19+NRC+LNK+SBI           INPUT MSA CHECK 19 BYTE
          CON    SVSB+CK19                   SAVE MSA CHECK 19 BYTE 
          CON    TXTCL                 TAG - TRANSMIT CONTROL 
          CON    MMSAR+NRC+LNK               MSA RESET
          CON    TRQAD+CV+C1+C2+CE     TAG - REQUEST ADDRESS (CC/HH)
          CON    MRDCC+LNK+SBI               READ CYLINDER ADDRESS
          CON    SVSB+ERCC                   SAVE CC
          CON    TRQAD+CV+C1+C2+CE     TAG - REQUEST ADDRESS (CC/HH)
          CON    MRDHH+SBI                   READ HEAD ADDRESS
          CON    SVSB+ERHH                   SAVE HH
          LJM    ERSX        RETURN 
          SPACE  4,20 
**        RDS -  READ SEQUENCE. 
* 
*         SELECTS THE MSA AND DEVICE VIA CPU INITIATED SELECT *CIS* AND 
*         PERFORMS A MSF READ SEQUENCE TO READ ONE TAPE BLOCK INTO
*         THE COUPLERS MEMORY.  THE DATA IS THEN TRANSFERED FROM THE
*         COUPLERS MEMORY TO THE INPUT BUFFER (IB), A MAXIMUM OF *IBL*
*         PP WORDS ARE TRANSFERED TO *IB*.
* 
*         ENTRY  (EQFTN) = COUPLER EQUIPMENT NUMBER (E000). 
* 
*         EXIT   (WT) = NUMBER OF WORDS READ FROM THE COUPLERS MEMORY.
* 
*         USES   D.T6, D.T7, SEQN.
* 
*         CALLS  CIS, FIN, FTN, GST, OFP, PRS, RDC, STG.
  
 RDSX     LJM    *           ENTRY / EXIT 
 RDS      EQU    *-1
          RJM    CIS         SELECT MSA AND DEVICE
          LDN    SQRDS
          STD    SEQN        SET THE SEQUENCE CODE
          LDN    FCLR 
          RJM    FTN         CLEAR THE COUPLER
          LDN    2
          STD    D.T7        EXPECTED INPUT WORD COUNTER
          RJM    STG
          CON    TXTCL+CV+C1+C2+CE     TAG - TRANSMIT CONTROL 
          CON    MSPLO+LNK                   START PLO LOCK 
          CON    TOPUP+CV+C1+C2+CE     TAG - OPERATE UP 
          CON    MNSQL+MHSEL+MRSEL+LNK       NOT SQUELCH, HEAD SELECT 
*                                            AND READ SELECT
          CON    TXTCL+CV+C1+C2+CE     TAG - TRANSMIT CONTROL 
          CON    MEPLO+LNK                   END PLO LOCK 
          CON    TREAD                 TAG - READ 
          CON    MHA+NRC+ND                  HOME ADDRESS FIELD 
          RJM    RDC
          LDN    FIWCS
          RJM    FIN         GET THE INPUT WORD COUNTER STATUS
          SBD    D.T7 
          ZJN    RDS1        IF 3 24-BIT WORDS TRANSFERED 
          LJM    ERRXLE      TRANSFER LENGTH ERROR
  
 RDS1     RJM    STG
          CON    TREAD                 TAG - READ 
          CON    MROC+NRC+ND                 RO COUNT FIELD 
          RJM    RDC
  
  
**        THE *READ RO DATA* TAG MUST BE ISSUED WITHIN 30 USEC
*         FOLLOWING NOMAL END OF THE *READ RO COUNT* TAG. 
*         ISSUING THIS TAG VIA *STG* WOULD EXCEED THE 30 USEC.
  
          LDC    TREAD
*         LDC    EQ+TREAD 
 EQRDS    EQU    *-1
          FAN    **+40B 
          LDN    4
 RDS1A    IJM    RDS1B,** 
 DLRDS    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    RDS1A       WAIT INACTIVE
          LJM    ERRAAF      CHANNEL ACTIVE AFTER FUNCTION
 RDS1B    ACN    **+40B 
          FJM    ERRFBO,**   ERROR - FULL BEFORE OUTPUT 
          LDN    MROD 
          OAN    **+40B 
          STM    SB+LTM      SAVE TAG MODIFIER
          LDN    4
 RDS2     EJM    RDS3,**     IF TAG MODIFIER WAS ACCEPTED 
 DCRDS1   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    RDS2 
          LJM    ERRFPN      FUNCTION PARAMETER NOT ACCEPTED
  
 RDS3     LDM    SB+LTS 
          LPC    TM 
          STD    D.T6        SAVE FOR TM CHECK FOLLOWING READ DATA
          ZJN    RDS4        IF NOT A TAPE MARK (TM)
          RJM    DCN
          UJN    RDS5 
  
 RDS4     RJM    RDC
 RDS5     RJM    STG
          CON    TODWN+CV+C1+C2+CE     TAG - OPERATE DOWN 
          CON    MHSEL                       DROP HEAD SELECT 
          RJM    RBM         READ BUFFER MEMORY INTO INPUT BUFFER (IB)
          LDD    D.T6 
          NJN    RDS6        IF TAPE MARK 
          LDM    SB+CSW 
          SHN    17-9 
          PJN    RDS6        IF DATA LENGTH OK
 ERRXLE   LDC    ER.XLE      TRANSFER LENGTH ERROR
          LJM    ERP
  
 RDS6     RJM    UES         DROP SELECT HOLD 
          LJM    RDSX        RETURN 
          SPACE  4,20 
**        RDC -  READ CHECK.
* 
*         VERIFY THE MSA(S) RESPONCE TO A READ TAG. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = INPUT WORD COUNTER 
* 
*         USES   D.T0.
* 
*         CALLS  FIN, ISW, DCN. 
  
 RDCX     LJM    *
 RDC      EQU    *-1
          RJM    ISW         INPUT TAG RESPONCE (CTL STATUS)
          STM    SB+LTS 
          LPN    TV 
          NJN    RDC1        IF TAG VALID 
          LJM    ERRTRE      TAG RESPONCE ERROR 
  
 RDC1     LDN    250/27*4 
          STD    D.T0 
 RDC2     RJM    ISW         GET TAG STATUS (CTL STATUS WORD) 
          STM    SB+LTS 
          SHN    17-2 
          MJN    RDC3        IF 1ST SYNC IN 
 DCRDC1   LCN    4           *** LCN 4 IF 1X SPEED PPU ***
*         LCN    2           *** LCN 2 IF 2X SPEED PPU ***
*         LCN    1           *** LCN 1 IF 4X SPEED PPU ***
          RAD    D.T0 
          NJN    RDC2        IF TIME OUT HAS NOT EXPIRED
 ERRFSI   LDC    ER.FSI      FIRST SYNC IN TIME-OUT 
          LJM    ERP
  
 RDC3     SHN    17-6-17+2
          PJN    RDC4        IF NOT SELECT ALERT 1
 ERRSA1   LDC    ER.SA1      ERROR - SELECT ALERT 1 
          LJM    ERP
  
 RDC4     LDC    35000/10    35 MSEC
          STD    D.T0 
 RDC5     EJM    ERRNFI,**   IF STATUS NOT AVAILABLE
          IAN    **+40B 
          STM    SB+LTS 
          LPC    NE+CK2+LSIET 
          ZJN    RDC6        IF NORMAL END, NO CK2 AND NOT LAST 
*                            SYNC IN TO NORMAL END TIME OUT 
          LDN    48          DELAY 23 MICROSECONDS
 DLRDC    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    DLRDC       DELAY
 DCRDC2   LCN    4           *** LCN 4 IF 1X SPEED PPU ***
*         LCN    2           *** LCN 2 IF 2X SPEED PPU ***
*         LCN    1           *** LCN 1 IF 4X SPEED PPU ***
          RAD    D.T0 
          NJN    RDC5        IF TIME OUT HAS NOT EXPIRED
 ERRNCL   LDC    ER.NCL      NE+CK2+LAST SYNC IN TIME-OUT 
          LJM    ERP
  
 RDC6     DCN    **+40B 
          LJM    RDCX        RETURN 
          SPACE  4,20 
**        RBM -  READ BUFFER MEMORY.
* 
*         READ THE NUMBER OF WORDS SPECIFIED BY THE COUPLERS WORD 
*         COUNTER INTO THE INPUT BUFFER (IB).  IF THE WORD COUNTER
*         INDICATES MORE WORDS THAN THE LENGTH OF IB, ONLY *IBL*
*         WORDS ARE ACTUALLY TRANSFERED INTO IB.  THE *WT* REGISTER 
*         WILL BE SET TO THE VALUE OF THE COUPLERS WORD COUNTER TIMES 2 
*         OR TO THE ACTUAL NUMBER OF 12-BIT WORDS TRANSFERED TO IB. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (WT) = NUMBER OF 12-BIT WORDS TRANSFERED.
* 
*         USES   D.Z1, D.Z4, WT.
* 
*         CALLS  DCN, FIN, FTN, GST, OFP, WAF.
  
 RBMX     LJM    *
 RBM      EQU    *-1
          LDC    IBL
          STD    D.Z4        PRESET THE NUMBER OF WORDS TO READ 
          RJM    GST         GET COUPLER STATUS 
          LDM    SB+BWC      BUFFER WORD COUNTER
          SHN    1           (BWC)*2
          STD    WT          (WT) = NUMBER OF 12 BIT WORDS
          ZJN    RBMX        IF BUFFER MEMORY EMPTY 
          SBD    D.Z4 
          PJN    RBM1        IF NO. WORDS .GE. IB 
          LDD    WT 
          STD    D.Z4        NO. 12-BIT WORDS TO INPUT
 RBM1     LDN    FRDBM
          RJM    FTN         ISSUE BUFFER TO PP TRANSFER FUNCTION 
          LDD    D.Z4 
          RJM    OFP         OUTPUT THE NUMBER OF WORDS 
          RJM    WAF         WAIT FOR FULL
 RBM3     LDD    D.Z4 
          IAM    IB,**
          ZJN    RBM4        IF COMPLETE TRANSFER 
          STD    D.Z1        SAVE WORDS REMAINING 
          LDD    D.Z4 
          SBD    D.Z1 
          STD    WT          ACTUAL NO. 12-BIT WORDS READ 
          RJM    GST
          UJN    ERRBPX      BUFFER TO PP XFER ERROR
  
 RBM4     RJM    DCN
          RJM    GST
          LDM    SB+CSW 
          LPC    DMTO+BUR+BOR+PTYER 
          ZJN    RBM5 
 ERRBPX   LDC    ER.BPX      BUFFER TO PP XFER ERROR
          LJM    ERP
  
 RBM5     LJM    RBMX        RETURN 
          TITLE  COMMON SUBROUTINES.
**        COMMON SUBROUTINES. 
          SPACE  4,20 
**        ACN -  ACTIVATE THE CHANNEL.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  NONE.
  
 ACNX     LJM    *           ENTRY / EXIT 
 ACN      EQU    *-1
          AJM    ACNX,**     IF CHANNEL IS ACTIVE 
          ACN    **+40B 
          IJM    ERRIAA,**   IF INACTIVE AFTER AN ACN 
          UJN    ACNX        RETURN 
          SPACE  4,20 
**        CTS -  COPY CTL STATUS. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = CTL STATUS WORD. 
*                (SB+CTLSW) = CTL STATUS WORD.
* 
*         USES   SB+CTLSW 
* 
*         CALLS  FIN. 
  
 CTSX     LJM    *           ENTRY / EXIT 
 CTS      EQU    *-1
          LDN    FCTLS
          RJM    FIN
          STM    SB+CTLSW 
          UJN    CTSX        RETURN 
  
          SPACE  4,20 
**        DCN -  DISCONNECT THE CHANNEL.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  NONE.
  
 DCNX     LJM    *           ENTRY / EXIT 
 DCN      EQU    *-1
          IJM    DCNX,**     IF CHANNEL IS INACTIVE 
          DCN    **+40B 
          AJM    ERRAAD,**   IF ACTIVE AFTER A DCN
          UJN    DCNX        RETURN 
          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 
*                         FROM BASIC DRIVER *CCNF* IS ALWAYS CLEARED. 
* 
*         USES   NONE.
* 
*         CALLS  FRE, FTN.
  
 DEQX     LJM    *           ENTRY/EXIT 
 DEQ      EQU    *-1
          LDC    **          COUPLER CONNECTED FLAG 
 CCNF     EQU    *-1
          ZJN    DEQX        IF COUPLER NOT CONNECTED 
          LDD    ABTU 
          LMN    77B
          ZJN    DEQ1        IF CALL FROM BASIC DRIVER
          LDN    FDSH        DROP SELECT HOLD 
          RJM    FTN
          LDN    FDISC       DISCONNECT 
          RJM    FTN
          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,20 
**        FIN -  FUNCTION AND INPUT ONE WORD. 
* 
*         ENTRY  (A)=FUNCTION 
* 
*         EXIT   (A)=FUNCTION STATUS
* 
*         USES   NONE.
* 
*         CALLS  FTN, ISW.
  
 FINX     LJM    *           ENTRY / EXIT 
 FIN      EQU    *-1
          RJM    FTN         ISSUE THE FUNCTION 
          RJM    ACN         ACTIVATE THE CHANNEL 
          RJM    ISW         INPUT STATUS WORD
          RJM    DCN         DISCONNECT THE CHANNEL 
          UJN    FINX        RETURN 
          SPACE  4,20 
**        FTN -  ISSUE A FUNCTION.
* 
*         ENTRY  (A)=FUNCTION IN BITS 8-0.
* 
*         EXIT   (A)=EQUIPMENT CODE PLUS THE FUNCTION.
*                LF =FUNCTION ISSUES. 
* 
*         USES   LF.
* 
*         CALLS  NONE.
  
 FTNX     LJM    *           ENTRY / EXIT 
 FTN      EQU    *-1
          LPC    377B 
          ADC    **          ADD EQUIPMENT CODE 
*         ADC    E000 
 EQFTN    EQU    *-1
          AJM    ERRABF,**   CHANNEL ACTIVE BEFORE A FUNCTION 
          STD    LF 
          FAN    **+40B 
          LDN    4
 FTN1     IJM    FTNX,**
 DLFTN    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    FTN1        WAIT INACTIVE
          LJM    ERRAAF      CHANNEL ACTIVE AFTER 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,20 
**        ISW -  INPUT STATUS WORD. 
* 
*         ENTRY  CHANNEL AND EQUIPMENT CONDITIONED FOR INPUT. 
* 
*         EXIT   CHANNEL ACTIVE.
*                (A)   =STATUS. 
* 
*         USES   NONE.
* 
*         CALLS  WAF. 
  
 ISWX     LJM    *           ENTRY / EXIT 
 ISW      EQU    *-1
          RJM    WAF         WAIT FOR FULL
          IAN    **+40B 
          IJM    ERRIAI,**   CHANNEL INACTIVE AFTER INPUT 
          UJN    ISWX        RETURN 
          SPACE  4,20 
**        OFP -  OUTPUT FUNCTION PARAMETER. 
* 
*         ENTRY  (A)=FUNCTION PARAMETER.
* 
*         EXIT   CHANNEL ACTIVE AND EMPTY.
* 
*         USES   NONE.
* 
*         CALLS  NONE.
  
 OFPX     LJM    *           ENTRY / EXIT 
 OFP      EQU    *-1
          RJM    ACN         ACTIVATE THE CHANNEL 
          FJM    ERRFBO,**   CHANNEL FULL BEFORE OUTPUT 
          OAN    **+40B 
          LDN    4
 OFP1     EJM    OFPX,**     RETURN 
 DLOFP    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    OFP1 
 ERRFPN   LDC    ER.FPN      FUNCTION PARAMETER NOT ACCEPTED
          LJM    ERP         REPORT THE ERROR 
          SPACE  4,20 
**        SEL -  SELECT THE MSA AND DEVICE. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A)=SELECT TAG RESPONCE. 
* 
*         USES   NONE.
* 
*         CALLS  FIN, STG.
  
 SELX     LJM    *           ENTRY / EXIT 
 SEL      EQU    *-1
          RJM    CTS         GET CTL STATUS 
          LPC    SELA+HOTIF+USA2
          ZJN    SEL1        IF NOT SELECT ACTIVE, HOT I/F OR SA-2
          SHN    17-11
          MJN    SEL1        IF SELECT ACTIVE 
 ERRHIF   LDC    ER.HIF      HOT INTERFACE OR SELECT ALERT 2
          LJM    ERP
  
 SEL1     RJM    STG         ISSUE SELECT DEVICE TAG
          CON    TSELD                 TAG - SELECT DEVICE
 MDSEL    CON    MSA*16+DEV+NRC              MSA/DEVICE ADDRESS 
*         VFD    4/NRC,3/MSA,2/0,3/DEV
          UJN    SELX        RETURN 
          SPACE  4,20 
**        VTS -  VALIDATE 3 OF 6 CODE AND INPUT DEVICE STATUS.
* 
*         ENTRY  (LTST)=LAST TAG STATUS.
* 
*         EXIT   (A)=DEVICE BUSY BIT. 
* 
*         USES   NONE.
* 
*         CALLS  STG. 
  
 VTSX     LJM    *           ENTRY / EXIT 
 VTS      EQU    *-1
          LDD    LTST 
          LPC    377B 
          LMC    ** 
 M36VTS   EQU    *-1         MSA 3 OF 6 CODE
          ZJN    VTS1        IF CORRECT 3 OF 6 CODE 
 ERRI36   LDC    ER.I36      INVALID THREE OF SIX CODE
          LJM    ERP
  
 VTS1     RJM    STG         GET DEVICE STATUS
          CON    TDVST+CV+C2+CE        TAG - REQUEST DEVICE STATUS
          CON    0+SBI+NRC
          CON    SB+LDS      SAVE DEVICE STATUS 
          UJN    VTSX        RETURN 
          SPACE  4,20 
**        WAF -  WAIT FOR THE CHANNEL TO GO FULL. 
* 
*         THE CHANNEL IS TESTED FOR A *FULL* STATE, IF THE
*         CHANNEL GOES FULL WITHIN 10 USEC, RETURN, ELSE EXIT 
*         TO *ERRNFI*.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  ERRNFI.
  
 WAFX     LJM    *           ENTRY / EXIT 
 WAF      EQU    *-1
  
          LDN    12          12 USEC (DIV BY 4) 
 WAF1     FJM    WAFX,**     IF THE CHANNEL IS FULL 
 DLWAF    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    WAF1 
 ERRNFI   LDC    ER.NFI      NO FULL ON AN INPUT
          LJM    ERP
          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
  
 ERRAAD   LDC    ER.AAD      CHANNEL ACTIVE AFTER DEACTIVATE
          UJN    ERR
  
 ERRAAF   LDC    ER.AAF      CHANNEL ACTIVE AFTER A FUNCTION
 ERR      UJN    ERR1 
  
 ERRABF   LDC    ER.ABF      CHANNEL ACTIVE BEFORE A FUNCTION 
          UJN    ERR1 
  
 ERRFBO   LDC    ER.FBO      CHANNEL FULL BEFORE OUTPUT 
          UJN    ERR1 
  
 ERRIAA   LDC    ER.IAA      CHANNEL INACTIVE AFTER ACTIVATE
          UJN    ERR1 
  
 ERRIAI   LDC    ER.IAI      CHANNEL INACTIVE AFTER AN INPUT
  
 ERR1     EQU    *
          SPACE  4,10 
**        ERP -  ERROR PROCESSOR ROUTINE. 
* 
*         PROCESS THE ERROR BASED ON THE FATAL ERROR FLAG. IF THE FATAL 
*         ERROR FLAG IS SET, EXIT IS TO *BD.ABT*. WHEN THE FATAL ERROR
*         FLAG IS NOT SET AN  ATTEMPT IS MADE TO OBTAIN THE SENSE DATA. 
*         TO MAINTAIN THE CURRENT ERROR CONDITIONS THE LOWER PORTION OF 
*         THE STATUS BUFFER (SB THRU SB+SNS) IS COPIED TO A TEMP BUFFER 
*         (SVSB) PRIOR TO REQUESTING SENSE  VIA  THE  *SEN*  AND  *RDS* 
*         ROUTINES. AFTER THE SENSE HAS BEEN READ OR THERE WAS AN ERROR 
*         WHILE READING  SENSE,  THE  STATUS  BUFFER  IS  RESTORED  AND 
*         CONTROL TRANSFERED TO *BD.RNI*. 
* 
*         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.
*                 (ABTL), (ABTU) = 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.RNI.
  
 ERP      STD    D.Z1        SAVE MESSAGE ORDINAL AND ERROR CODE
          SHN    -12
          STD    D.Z2        SAVE FATAL ERROR FLAG
          AOM    ERPF        SET ERROP PROCESSING FLAG
          SCN    1
          ZJN    ERP01       IF NOT AN ERROR WHILE PROCESSING AN ERROR
          LJM    ERP07
  
 ERP01    LDD    D.Z1 
          LPN    77B
          STD    EC          SAVE THE ERROR CODE
          LDD    SEQN 
          SHN    11-5 
          RAD    EC          ADD THE MSF SEQ. CODE TO THE 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 
          ZJN    ERP02       IF NOT FATAL ERROR 
          LJM    BD.ABT      TERMINATE MODULE 
  
*         SAVE THE STATUS BUFFER (SB THRU SB+SNS) AND SET (SB+SNS THRU
*         SB+SNS+SNSL) TO ALL ONES (7777).
  
 ERP02    STD    D.T0 
 ERP03    LCN    0
          STM    SB+SNS,D.T0 SET SENSE BUFFER TO ALL ONES 
          AOD    D.T0 
          SBN    SNSTL-SNS
          MJN    ERP03
          LDM    BD.CHFG
          NJN    ERP04       IF CHANNEL ASSIGNED
          LJM    ERP09
  
 ERP04    LDD    BD.AL
          SBN    BD.AL21
          ZJN    ERP05       NO CLEAN-UP IF ACCESS LEVEL 21 
          IJM    ERP05,** 
          DCN    **+40B 
 ERP05    LDD    LF 
          STM    SVLF        SAVE LAST FUNCTION 
          RJM    GST         COPY ALL COUPLER STATUS
          LDN    0
          STD    D.T0 
 ERP06    LDM    SB,D.T0     SAVE THE STATUS BUFFER 
          STM    SVSB,D.T0
          AOD    D.T0 
          SBN    SNS
          MJN    ERP06       IF NOT DONE
          AOM    SBMF        SET STATUS BUFFER MOVED FLAG 
          RJM    ERS         EXECUTE THE MSF ERROR SEQUENCE 
          RJM    SEN         GO GET THE SENSE 
  
*         RESTORE THE STATUS BUFFER.
  
 ERP07    LDM    SVLF 
          STD    LF          RESTORE LAST FUNCTION
          LDM    SBMF 
          ZJN    ERP09       IF STATUS BUFFER NOT MOVED 
          LDN    0           SAVE STATUS BUFFER 
          STD    D.T0 
 ERP08    LDM    SVSB,D.T0
          STD    D.T1        SAVE IT
          LDM    SB,D.T0
          STM    SVSB,D.T0
          LDD    D.T1 
          STM    SB,D.T0
          AOD    D.T0 
          SBN    SNS
          MJN    ERP08       IF NOT DONE
 ERP09    LDN    0
          STM    SBMF        CLEAR STATUS BUFFER MOVED FLAG 
          STM    ERPF        CLEAR ERROR PROCESSING FLAG
          LDM    RESA 
          ZJN    ERP10       IF ABT NOT DUE TO SEEK RES SEEK REL
          STD    D.Z1 
          LJM    0,D.Z1      RETURN SEEK REL OR SEEK RES ABORT
 ERP10    LDD    ABTU 
          SHN    12 
          LMD    ABTL 
          LJM    BD.RNI      RNI AT THE ABORT ADDRESS 
  
 ERPF     CON    0           ERROR PROCESSING FLAG (NONZERO IF PROCES-
*                            SING AN ERROR) 
 SBMF     CON    0           STATUS BUFFER MOVE FLAG (0=SB NOT MOVED) 
          EJECT 
          TITLE  INIT - INITIALIZE THE PROGRAM. 
**        THE INITIALIZATION CODE THAT FOLLOWS IS OVERLAYED BY THE
*         REST OF THE PRODUCT OVERLAY AND BUFFERS.
  
*         STORE EQUIPMENT AND CONNECT CODES 
  
 INIT     LDM    BD.EQ
          STD    D.T6        SAVE 
          LPC    7000B
          STM    EQFTN       SAVE COUPLER EQUIPMENT CODE
          STM    EQFRE
          RAM    EQRDS
          LDM    BD.EQ1 
          SHN    -3 
          LPN    7
          STM    PHMOU       MST PHYSICAL ADDRESS 
          STM    PHSEE
  
*         SET THE MSA ADDRESS.
  
          LDD    D.T6 
          LPN    70B
          SHN    -3 
          STD    D.T7        SAVE FOR 3 OF 6 CODE 
          SHN    7-2         POSITION TO MSA ADDRESS BITS 
          STD    D.T2 
          LDC    TMSAAD 
          RJM    SMA         SET THE MSA ADDRESS
          LDD    D.T7 
          LMN    7           COMPLIMENT MSA ADDRESS 
          RAM    M36VTS      FORM THE MSA 3 OF 6 CODE 
  
*         SET DELAY TIME BASED ON SPEED OF PPU
  
          LDC    TSPEDL 
          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    LDC    TCHAN
          RJM    PRS         PRESET CHANNEL AND DELAY CONSTANTS 
  
*         WRITE PP MESSAGES TO CM 
  
 INIT4    LDM    BD.MSGA     GET PP MESSAGE AREA ADDRESS
          STD    ABTL        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    ABTL        ADD MESSAGE ADDRESS
          CWD    D.T0        WRITE ONE WORD FROM D.T0 
          AOD    ABTL        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 
          ADC    -SBL 
          MJN    INIT15      IF NOT LAST LOCATION 
          LDM    BD.EQ1 
          STM    SB+MSTAD    FOR MODULE REFERENCE 
*         SET DIRECT CELLS
  
          LDC    OBD24L 
          STD    WC          SET DEFAULT VALUE IN WORD COUNT REGISTER 
          LDN    0
          STD    ABTL        CLEAR ABT ADDRESS
          STD    ABTU 
          STD    BA          CLEAR BEGINNING ADDRESS REGISTER 
          STD    WT          CLEAR WORDS TRANSMITTED REGISTER 
          STD    RIF         CLEAR RESET INTERRUPT FLAG 
          STD    EDI         CLEAR EXPECTED DEVICE INTERRUPT FLAG 
          STD    SEQN        CLEAR MSF SEQUENCE CODE WORD 
          LDD    DC          ENSURE VALID DEVICE CODE 
          LMC    TMST 
          ZJN    INIT16      IF CSU AND MST ASSIGNED
          LMN    TCSU-TMST
          ZJN    INIT16      IF CSU ASSIGNED
          LDC    INITDCE
          LJM    START       RETURN WITH ERROR
  
 INIT16   LDC    3R"OVL"
 NOSBE    IFEQ   NOSBE+SCOPE,1
          SHN    17-5        POSITION OVERLAY NAME FOR NOSBE
          STD    D.T6        STORE FIRST 2 CHARACTERS OF OVL NAME 
          SHN    -6 
          SCN    77B
          STD    D.T7        STORE THIRD CHARACTER
          LDC    OVLFW
          STM    R.OVL
          LDC    OVLFW-5
          LJM    R.OVL+1
          LJM    OVLFW+1     EXECUTE THE OVERLAY
 NOSBE    ENDIF 
 NOS      IFEQ   NOS+KRONOS,1,1 
          RJM    EXR         LOAD AND EXECUTE THE OVERLAY 
  
  
 INITDCE  DIS    ,*  DC NOT SUPPORTED*
          SPACE  4,20 
**        PRS -  PRESET PROGRAM.
* 
*         ENTRY  (A) = CHANNEL TABLE ADDRESS. 
*                (BD.CHAN) = CHANNEL. 
* 
*         EXIT   NONE.
* 
*         USES   D.T0, D.T1.
* 
*         CALLS  NONE.
  
 PRSX     LJM    *           ENTRY / EXIT 
 PRS      EQU    *-1
          STD    D.T0        SET FWA OF CHANNEL TABLE 
 PRS1     LDI    D.T0 
          ZJN    PRS2        IF END OF TABLE
          STD    D.T1 
          LDI    D.T1 
          SCN    37B         CLEAR CHANNEL FIELD
          LMM    BD.CHAN     OR IN THE CHANNEL
          STI    D.T1 
          AOD    D.T0 
          UJN    PRS1        COMPLETE ALL WORDS 
  
 PRS2     EQU    *
 PRS3     AOD    D.T0 
          LDI    D.T0 
          ZJN    PRSX        IF END OF DELAY CONSTANT TABLE 
          STD    D.T1 
          LDI    D.T1 
          SCN    77B
          ADM    BD.SPEED 
          STI    D.T1 
          UJN    PRS3        LOOP 
          SPACE  4,20 
**        SMA -  SET MSA ADDRESS. 
* 
*         THE WORD(S) DEFINED BY THE TABLE ADDRESS ARE MASKED WITH
*         7407B AND, THE RESULT OR-ED WITH (D.T2) AND STORED BACK 
*         INTO THE SAME LOCATION.  A ZERO TABLE ENTRY TERMINATES. 
* 
*         ENTRY  (D.T2) = BITS TO BE OR-ED AFTER THE MASK.
* 
*         EXIT   NONE.
* 
*         USES   D.T0, D.T1.
* 
*         CALLS  NONE.
  
 SMAX     LJM    *           ENTRY / EXIT 
 SMA      EQU    *-1
          STD    D.T0        TABLE POINTER
 SMA1     LDI    D.T0 
          ZJN    SMAX        IF END OF TABLE
          STD    D.T1 
          LDI    D.T1 
          LPC    7407B       MASK OUT THE MSA ADDRESS BITS
          LMD    D.T2 
          STI    D.T1        RESTORE
          AOD    D.T0 
          UJN    SMA1        LOOP 
          TITLE  CSU ERROR MESSAGES.
 PPMSGS   EQU    *           START OF PP MESSAGES 
****
          MMSG   ER.FLE,EC.FLE,(ADDR OUT OF FL),1 
          MMSG   ER.TL,EC.TL,(I/O TIME OUT ON CH RESERVE),1 
          MMSG   ER.SEE,EC.SEE,(SUBR ENTRY/EXIT ERR),1
          MMSG   ER.WC,EC.WC,(BUFFER INDEX OR WC ERR),1 
          MMSG   ER.RES,EC.RES,(R)
          MMSG   ER.RES1,EC.RES1,(R)
          MMSG   ER.RES2,EC.RES2,(R)
          MMSG   ER.AAD,EC.AAD,(CH ACTIVE AFTER DCN)
          MMSG   ER.AAF,EC.AAF,(CH ACTIVE AFTER FTN)
          MMSG   ER.ABF,EC.ABF,(CH ACTIVE BEFORE FTN) 
          MMSG   ER.BAI,EC.BAI,(MSA/DEV BUSY AFTER INT) 
          MMSG   ER.BPX,EC.BPX,(BUFFER TO PP XFER ERROR)
          MMSG   ER.BSY,EC.BSY,(MSA BUSY) 
          MMSG   ER.CK2,EC.CK2,(CHECK 2 ERROR)
          MMSG   ER.CNC,EC.CNC,(COUPLER NOT CONNECTED)
          MMSG   ER.COV,EC.COV,(PRS-DLY C. OVERFLOW (BA)=ADR),1 
          MMSG   ER.DSE,EC.DSE,(DEVICE STATUS ERROR)
          MMSG   ER.FBO,EC.FBO,(CH FULL BEFORE OUTPUT)
          MMSG   ER.FPN,EC.FPN,(FTN PARAM NOT ACCEPTED) 
          MMSG   ER.FSI,EC.FSI,(FIRST SYNC IN T/O)
          MMSG   ER.HIF,EC.HIF,(CK-2 OR HOT INTERFACE)
          MMSG   ER.ICH,EC.ICH,(INVALID CC OR HH) 
          MMSG   ER.ITO,EC.ITO,(INDEX TIME-OUT) 
          MMSG   ER.IXD,EC.IXD,(INDEX DID NOT DROP) 
          MMSG   ER.I36,EC.I36,(INVALID 3 OF 6 CODE)
          MMSG   ER.IAA,EC.IAA,(CH INACTIVE AFTER ACN)
          MMSG   ER.IAI,EC.IAI,(CH INACTIVE AFTER IAN)
          MMSG   ER.IDX,EC.IDX,(INCOMPLETE DATA XFER) 
          MMSG   ER.IXY,EC.IXY,(SELECTOR IS WITHIN USER AREA) 
          MMSG   ER.MRE,EC.MRE,(MSA RESET DID NOT CLEAR SA1)
          MMSG   ER.NCL,EC.NCL,(NE+CK2+LAST SYNC IN T/O)
          MMSG   ER.NDI,EC.NDI,(NO DEVICE INTERRUPT)
          MMSG   ER.NFI,EC.NFI,(NO FULL ON AN INPUT)
          MMSG   ER.NMT,EC.NMT,(NO MST ASSIGNED)
          MMSG   ER.PBX,EC.PBX,(PP TO BUFFER XFER ERROR)
          MMSG   ER.SA1,EC.SA1,(SELECT ALERT 1) 
          MMSG   ER.TRE,EC.TRE,(TAG RESPONCE ERROR) 
          MMSG   ER.WTO,EC.WTO,(WRITE TIME-OUT) 
          MMSG   ER.WER,EC.WER,(WRITE ERROR)
          MMSG   ER.XLE,EC.XLE,(XFER LENGTH ERROR)
 MMSGL.   EQU    MMSGL
          DATA   0
****
          TITLE  CHANNEL AND DELAY CONSTANTS TABLES.
**        TCHAN - TABLE OF CHANNEL INSTRUCTIONS.
  
 TCHAN    EQU    *           CREATE CHANNEL TABLE 
          LIST   D
          HERE
          LIST   *
          CON    0           END OF CHANNEL TABLE 
  
**        TDLYC - INSTRUCTIONS MODIFIED FOR PPU SPEED 
* 
*         THIS TABLE MUST FOLLOW THE CHANNEL TABLE TERMINATOR AND 
*         REQUIRES AT LEAST A ZERO TERMINATOR ENTRY.
  
 TDLYC    EQU    *
          VFD    12/DCIPS 
          VFD    12/DCRDC1
          VFD    12/DCRDC2
          VFD    12/DCRDS1
          VFD    12/DCSRS 
          CON    0           END OF DELAY CONSTANTS TABLE 
          SPACE  4,20 
**        TSPEDL - TABLE OF PP SPEED SWITCHES.
* 
*         THE FOLLOWING TABLE CONTAINS THE ADDRESS OF INSTRUCTIONS
*         *ADN 2 / SBN 2* THAT ARE CHANGED TO *ADN 1 / SBN 1* WHEN
*         EXECUTING ON A 2X PP. 
  
 TSPEDL   VFD    12/DLCIS 
          VFD    12/DLOFP 
          VFD    12/DLWAF 
          VFD    12/DLFTN 
          VFD    12/DLRDS 
          VFD    12/DLRDC 
          CON    0           END OF SPEED SWITCHES TABLE
          SPACE  4,20 
**        TMSAAD - LOCATIONS THAT REQUIRE A MSA ADDRESS.
  
 TMSAAD   VFD    12/MSIPS 
          VFD    12/MDSEL 
          VFD    12/MDSRS 
          VFD    12/M36VTS
          CON    0           TABLE TERMINATOR 
          SPACE  4,20 
**        CHECK FOR ASSEMBLY OVERFLOW.
  
          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 66X OVERLAY OVERFLOW
  
  
 OVLFW    EQU    INIT+5      FWA OF THE OVERLAY 
  
  
          TITLE  "OVL"  OVERLAY.
 "OVL"    SEGMENT OVLFW 
*CALL,VERS
          COMMENT OVERLAY FOR CSU PRODUCT OVERLAY "VERS"
          ORG     OVLFW 
          TITLE  CSU PRODUCT OVERLAY COMMANDS.
  
          LJM    *           DUMMY ENTRY / EXIT 
          LDN    0
          LJM    START       RETURN TO BASIC DRIVER WITH (A) = 0
          SPACE  4,20 
**        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   ABTL, ABTU.
* 
*         CALLS  BD.DCH, DEQ. 
  
 REL      STD    ABTL        SAVE ABT ADDRESS 
          SHN    -12
          STD    ABTU 
          LDM    BD.CHFG
          NJN    REL1        IF CH ASSIGNED 
          LJM    REL4 
 REL1     LDC    REL2        SET ABT ADDRESS FOR SEEK RELEASE CSU 
          STM    RESA 
          LDD    DC 
          LMC    TMST 
          NJN    REL2        IF ONLY CSU ASSIGNED 
          LDM    BD.EQ1 
          LPN    7
          RJM    SDA
          RJM    SEK
          CON    0#96+HH40
 REL2     LDC    REL3        SET ABT ADDRESS FOR DEQ CODE 
          STM    RESA 
          LDM    BD.EQ
          LPN    7
          RJM    SDA
          RJM    SEK
          CON    0#96+HH40
 REL3     LDN    0
          STM    RESA 
          RJM    DEQ
 REL4     RJM    BD.DCH      DROP CHANNEL TALK TO SYSTEM
          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 IS NOT CONNECTED AFTER 10 ATTEMPTS AN 
*         ERROR IS ISSUED.
* 
*         ENTRY  (A) = ABORT ADDRESS. 
* 
*         EXIT   I/O CHANNEL ASSIGNED.
*                CCNF - SET, NON-ZERO.
* 
*         USES   ABTL, ABTU.
* 
*         CALLS  CEQ, ICM.
  
 RES      RJM    ICM         INITIALIZE COMMAND 
          RJM    CEQ         CONNECT EQUIPMENT
          LDC    RES0        SET ABT ADDRESS FOR SEEK RESERVE CSU 
          STM    RESA 
          LDD    DC 
          LMC    TMST 
          NJN    RES0        IF MST NOT ASSIGNED
          LDM    BD.EQ1 
          LPN    7
          RJM    SDA
          RJM    SEK
          CON    0#98+HH40
 RES0     LDC    XRES        SET ABT ADDRESS FOR EXIT COMMAND 
          STM    RESA 
          LDM    BD.EQ
          LPN    7
          RJM    SDA
          RJM    SEK
          CON    0#98+HH40
          LJM    XRES        EXIT TO STACK
 RESA     DATA   0
          SPACE  4,18 
**        CEQ - CONNECT EQUIPMENT (COUPLER).
* 
*         ISSUE A CONNECT FUNCTION TO THE COUPLER AND STORE THE 
*         CONNECT STATUS IN SB+CON, IF THE STATUS DOES NOT INDICATE 
*         THE COUPLER IS CONNECTED (2**0=0) THE CONNECT FUNCTION WILL 
*         RETRIED A MAXIMUM OF TEN TIMES BEFORE AN ERROR IS REPORTED. 
*         ONCE THE COUPLER IS CONNECTED THE COUPLER CONNECT FLAG IS 
*         SET NON-ZERO AND THE COUPLER CLEAR FUNCTION ISSUED TO 
*         INITIALIZE THE LOGIC. 
* 
*         ENTRY  NONE.
* 
*         EXIT   I/O CHANNEL ASSIGNED.
*                (CCNF)   - SET, NON-ZERO.
*                (SB+CON) - SET TO THE CONNECT STATUS.
* 
*         USES   S3, SB+CON.
* 
*         CALLS  BD.RCH, DCN, DEQ, FIN, FTN.
  
 CEQX     LJM    *           ENTRY/EXIT 
 CEQ      EQU    *-1
          LDN    0
          STD    S4          INITIALIZE CONNECT TIME-OUT COUNTER
          LDM    BD.CHFG
          ZJN    CEQ1        IF NOT CURRENTLY ASSIGNED
          RJM    DEQ         CLEAR AND DISCONNECT EQUIPMENT 
 CEQ1     RJM    BD.RCH      DROP/REQUEST CHANNEL AS REQUESTED
          RJM    DCN         ENSURE CHANNEL INACTIVE
 CEQ2     LDN    FCONN
          RJM    FIN         CONNECT THE COUPLER
          STM    SB+CON      SAVE CONNECT STATUS
          LPN    1
          NJN    CEQ3        IF CONNECTED 
          AOD    S4 
          SBN    10 
          MJN    CEQ2        IF NOT CONNECT TIME-OUT, TRY AGAIN 
          LJM    ERRCNC      COUPLER NOT CONNECTED
  
 CEQ3     STM    CCNF        SET COUPLER CONNECTED FLAG 
          LDN    FCLR 
          RJM    FTN         CLEAR THE COUPLER
          UJN    CEQX        RETURN 
          SPACE  4,20 
**        RESET - SUBSYSTEM RESET COMMAND.
* 
*         THE *MSF* SUBSYSTEM RESET SEQUENCE IS PERFORMED ON THE DEVICE 
*         SPECIFIED BY (PA).
* 
*         ENTRY  (PA) = DEVICE CODE (ZERO=CSU, NON-ZERO=MST). 
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  CCN, SRS.
  
 RESET    RJM    CCN         SAVE ABORT ADDRESS, CHECK COUPLER
*                            CONNECTED FLAG AND INCREMENT (P).
          RJM    SRS         EXEXUTE THE SUBSYSTEM RESET SEQUENCE 
          LJM    XRESET      RETURN TO THE STACK
          SPACE  4,20 
**        MOVE - CSU MOVE COMMAND.
* 
*         PICK A CARTRIDGE FROM THE CURRENT SELECTORS POSITION, MOVE
*         THE SELECTOR TO THE REQUESTED XY POSITION AND PUT THE 
*         CARTRIDGE IN THAT MATRIX SLOT.  IF THE SELECTOR IS WITHIN 
*         THE USERS AREA THIS COMMAND IS ABORTED, SEE *VXY*.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  CCN, FCH, SEK, VXY.
  
 MOVE     RJM    CCN         SAVE ABORT ADDRESS, CHECK COUPLER
*                            CONNECTED FLAG AND INCREMENT (P).
          RJM    FCH         FORM CC AND HH ADDRESS 
          STM    MOVHH
          LDD    D.Z6 
          ADC    100B        ADD THE MOVE BIT 
          STM    MOVCC
          RJM    VXY         VALIDATE THE SELECTORS CURRENT POSITION
          RJM    SEK
 MOVCC    CON    ** 
 MOVHH    CON    ** 
          LJM    XMOVE       RETURN TO THE STACK
          SPACE  4,20 
**        PREP - PREPARE COMMAND. 
* 
*         A PREPARE COMMAND IS ISSUED TO THE DEVICE SPECIFIED BY (PA).
*         IF A NORMAL END IS RECEIVED FOR FOR THE PREPARE COMMAND 
*         CONTROL IS RETURNED TO (P+1), ELSE THE COMMAND IS ABORTED.
* 
*         ENTRY  (PA) = DEVICE CODE (ZERO=CSU, NON-ZERO=MST). 
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  CCN, SEK.
  
 PREP     RJM    CCN         SAVE ABORT ADDRESS, CHECK COUPLER
*                            CONNECTED FLAG, INCREMENT (P) AND
*                            PRESET DEVICE ADDRESS. 
          RJM    SEK
          CON    0#93+HH40
          LJM    XPREP       RETURN TO THE STACK
          SPACE  4,20 
**        RECAL- CSU RECALIBRATE COMMAND. 
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  CCN, SEK.
  
 RECAL    RJM    CCN         SAVE ABORT ADDRESS, CHECK COUPLER
*                            CONNECTED FLAG, INCREMENT (P) AND
*                            PRESET DEVICE ADDRESS. 
          RJM    SEK
          CON    0#97+HH40
          LJM    XRECAL      RETURN TO THE STACK
          SPACE  4,20 
**        SENSE- SENSE COMMAND. 
* 
*         ENTRY  (PA) = DEVICE CODE (ZERO=CSU, NON-ZERO=MST). 
* 
*         EXIT   BITS 11-0 OF DATA LENGTH, THE DATA FIELD ID BYTE AND 
*                SENSE DATA ARE COPIED FROM THE MSA AND STORED IN THE 
*                STATUS BUFFER AT *SB+SNS THRU SB+SNS+41D*. ALL SENSE 
*                BYTES ARE UNPACKED AND STORED 8-BITS PER 12-BIT WORD.
* 
*         USES   NONE.
* 
*         CALLS  CCN, SEN.
  
 SENSE    RJM    CCN         SAVE ABORT ADDRESS, CHECK COUPLER
*                            CONNECTED FLAG, INCREMENT (P) AND
*                            PRESET DEVICE ADDRESS. 
          RJM    SEN
          LJM    XSENSE      RETURN TO THE STACK
          SPACE  4,20 
**        STATUS - REQUEST COUPLER STATUS.
* 
*         COPY ALL SIX WORDS OF COUPLER STATUS INTO THE STATUS
*         BUFFER (SB) AT SB+CSW--SB+CSW+5 
* 
*         ENTRY  (A)  = ABORT ADDRESS.
* 
*         EXIT   STATUS STORED AS FOLLOWS-
*                SB+CSW+0 = COUPLER.
*                SB+CSW+1 = CTL.
*                SB+CSW+2 = PARITY ERROR. 
*                SB+CSW+3 = INPUT WORD COUNTER. 
*                SB+CSW+4 = OUTPUT WORD COUNTER.
*                SB+CSW+5 = BUFFER WORD COUNTER.
* 
*         USES   NONE.
* 
*         CALLS  ICM, GST.
  
 STATUS   RJM    ICM         INITIALIZE COMMAND 
          LDM    CCNF 
          NJN    STA1        IF COUPLER IS CONNECTED
          LJM    ERRCNC 
  
 STA1     RJM    GST
          LJM    XSTATUS     RETURN TO THE STACK
          EJECT 
          TITLE  COMMON SUBROUTINES.
          SPACE  4,20 
**        GST -  GET ALL COUPLER STATUS WORDS.
* 
*         COPY ALL SIX WORDS OF COUPLER STATUS INTO THE STATUS
*         BUFFER (SB) AT SB+CSW--SB+CSW+5 
* 
*         ENTRY  (A)  = ABORT ADDRESS.
* 
*         EXIT   STATUS STORED AS FOLLOWS-
*                SB+CSW+0 = COUPLER.
*                SB+CSW+1 = CTL.
*                SB+CSW+2 = PARITY ERROR. 
*                SB+CSW+3 = INPUT WORD COUNTER. 
*                SB+CSW+4 = OUTPUT WORD COUNTER.
*                SB+CSW+5 = BUFFER WORD COUNTER.
* 
*         USES   S3.
* 
*         CALLS  FIN. 
  
 GSTX     LJM    *           ENTRY / EXIT.
 GST      EQU    *-1
          LDN    0
          STD    S3 
 GST1     LDM    TSF,S3 
          ZJN    GSTX        IF END OF TABLE
          RJM    FIN         GET THE NEXT STATUS WORD 
          STM    SB+CSW,S3
          AOD    S3 
          UJN    GST1        LOOP FOR ALL STATUS WORDS
          SPACE  4,18 
**        TSF -  TABLE OF VALID COUPLER STATUS FUNCTIONS. 
* 
*         THE FUNCTION CODES MUST REMAIN IN THE ORDER IN WHICH THE
*         STATUS WORDS ARE TO BE STORED.  A ZERO WORD TERMINATES
*         THE FUNCTION TABLE. 
  
 TSF      EQU    *
          LOC    0
          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
          CON    0           TABLE TERMINATOR 
          LOC    *O 
 TSFL     EQU    *-TSF       TABLE LENGTH 
          SPACE  4,20 
**        SEK -  SEEK SEQUENCE. 
* 
*         SELECT THE MSA/DEVICE VIA *CIS* AND ISSUE THE COMMAND (CC/HH) 
*         BY EXECUTING A MSF SEEK SEQUENCE.  *IPS* IS CALLED AFTER
*         ISSUING THE COMMAND TO WAIT FOR THE INTERRUPT.
* 
*         ENTRY  CALL LOC+1=CYL ADDRESS (CC), IF CC HAS 2**11 SET THE 
*                           HEAD ADDRESS IS 40HEX.
*                CALL LOC+2=HEAD ADDRESS (HH), IF 2**11 OF CC IS CLEAR. 
* 
*         EXIT   SB+LCCXT = CYLINDER ADDRESS TRANSMITTED. 
*                SB+LHHXT = HEAD ADDRESS TRANSMITTED. 
*                SB+LCCBI = BUS IN RESPONCE TO XMIT CC. 
*                SB+LHHBI = BUS IN RESPONCE TO XMIT HH. 
*                SB+LCCRD = BUS IN RESPONCE TO READ CC. 
*                SB+LHHRD = BUS IN RESPONCE TO READ HH. 
*                EDI      = NONZERO.
* 
*         USES   D.T0, EDI. 
* 
*         CALLS  CIS, IPS, STG. 
  
 SEKX     LJM    *           ENTRY / EXIT 
 SEK      EQU    *-1
          RJM    CIS         SELECT MSA AND DEVICE
          LDN    SQSEK
          STD    SEQN        SET THE SEQUENCE CODE
          LDM    SEK
          STD    D.T0 
          LDI    D.T0 
          LPC    377B 
          STM    SB+LCCXT 
          ADC    LNK+SBI     ADD THE LINKING AND STORE BI FLAGS 
          STM    SEKCC
          LDI    D.T0 
          SHN    17-11
          PJN    SEK1        IF CALL LOC+2 = HH ADDRESS 
          LDC    0#40+LNK+SBI          ELSE HH = 40 HEX 
          UJN    SEK2 
  
 SEK1     AOD    D.T0 
          AOM    SEK         INCREMENT RETURN ADDRESS 
          LDI    D.T0 
 SEK2     LPC    377B 
          STM    SB+LHHXT 
          ADC    LNK+SBI     ADD THE LINKING AND STORE BI FLAGS 
          STM    SEKHH
          RJM    STG
          CON    TXTCC+CV+C1+C2+CE     TAG - TRANSMIT CYLINDER ADDRESS
 SEKCC    CON    **+SBI+LNK                  CYLINDER ADDRESS 
          CON    SB+LCCBI 
          CON    TXTHH+CV+C1+C2+CE     TAG - TRANSMIT HEAD ADDRESS
 SEKHH    CON    **+SBI+LNK                  HEAD ADDRESS 
          CON    SB+LHHBI 
          CON    TRQAD+CV+C1+C2+CE     TAG - REQUEST ADDRESS (CC/HH)
          CON    MRDCC+SBI+LNK               REQUEST CC 
          CON    SB+LCCRD 
          CON    TRQAD+CV+C1+C2+CE     TAG - REQUEST ADDRESS (CC/HH)
          CON    MRDHH+SBI                   REQUEST HH 
          CON    SB+LHHRD 
          LMM    SB+LHHXT 
          NJN    SEK3        IF HH READ .NE. HH TRANSMITTED 
          LDM    SB+LCCRD 
          LMM    SB+LCCXT 
          ZJN    SEK4        IF CC READ .EQ. CC TRANSMITTED 
 SEK3     RJM    STG
          CON    TXCL1+CV+C1+C2+CE     TAG - TRANSMIT CONTROL 1 
          CON    MRINT+NRC                   RESET INTERRUPT
 ERRICH   LDC    ER.ICH      INVALID CC OR HH 
          LJM    ERP         PROCESS THE ERROR
  
 SEK4     RJM    STG
          CON    TXCL1+CV+C1+C2+CE     TAG - TRANSMIT CONTROL 1 
          CON    MSTSK                       START SEEK 
          LPN    DBSY 
          NJN    SEK5        IF DEVICE BUSY FOLLOWING A START SEEK
 ERRDSE   LDC    ER.DSE      DEVCE STATUS ERROR 
          LJM    ERP         PROCESS THE ERROR
  
 SEK5     STD    EDI         SET EXPECTED DEVICE INTERRUPT FLAG 
          RJM    CTS         GET CTL STATUS 
          SHN    17-7 
          PJN    SEK6        IF NO CHECK 2 ERROR
 ERRCK2   LDC    ER.CK2      CHECK 2 ERROR
          LJM    ERP         PROCESS THE ERROR
  
 SEK6     RJM    IPS         WAIT FOR THE DEVICE TO INTERRUPT 
          AOM    SEK
          LJM    SEKX        RETURN 
          SPACE  4,20 
**        SEN -  READ THE SENSE DATA. 
* 
*         READ THE SENSE INTO THE INPUT BUFFER (IB) VIA THE *SEK* AND 
*         *RDS* ROUTINES. THE SENSE IS THEN UNPACKED FROM *IB* (8-BIT 
*         SENSE BYTE PER 12-BIT WORD) INTO THE STATUS BUFFER BEGINING 
*         AT (SB+SNS) AS INDICATED BELOW. 
* 
*                SB+SNS+0  - BITS 11-0 OF RO COUNT DATA LENGTH (DLL). 
*                      +1  - DATA FIELD ID BYTE (19 HEX / 31 OCT).
*                      +2  - MSA SENSE BYTE 0.
*                      +3  - MSA SENSE BYTE 1.
*                      ..         ..
*                      ..         ..
*                      +19 - MSA SENSE BYTE 17. 
*                      +20 - MSA SENSE BYTE 18. 
*                      +21 - MSA SENSE BYTE 19. 
* 
*                SB+SNS+22 - DEV SENSE BYTE 0/20. 
*                      +23 - DEV SENSE BYTE 1/21. 
*                      ..         ..
*                      ..         ..
*                      +39 - DEV SENSE BYTE 17/37.
*                      +40 - DEV SENSE BYTE 18/38.
*                      +41 - DEV SENSE BYTE 19/39.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   D.T0, D.T1, D.T2, SB+SNS THRU SB+SNS+41. 
* 
*         CALLS  SEK, RDS.
  
 SENX     LJM    *           ENTRY / EXIT 
 SEN      EQU    *-1
          RJM    SEK
          CON    0#90+HH40
          RJM    RDS         READ SENSE DATA
  
*         UNPACK THE SENSE. 
  
          LDC    IB+HACRL-1  LWA OF RO COUNT DATA LENGTH WORD IN *SBB*
          STD    D.T0 
          LDC    SB+SNS      FWA TO STORE SENSE (1ST WORD = DLL)
          STD    D.T1 
          ADN    NSBY+2      NO. 8-BIT BYTES TO UNPACK
          STD    D.T2        LWA+1 OF SENSE DATA IN *SB*
          LDI    D.T0 
          STI    D.T1        STORE THE DATA LENGTH WORD (BITS 11-0) 
          AOD    D.T1 
          AOD    D.T0 
 SEN1     LDI    D.T0 
          SHN    -4 
          STI    D.T1 
          AOD    D.T1 
          LDI    D.T0        UPPER 4-BITS OF NEXT SENSE WORD
          LPN    17B
          SHN    4
          STI    D.T1 
          AOD    D.T0 
          LDI    D.T0        LOWER 4-BITS OF NEXT SENSE WORD
          SHN    -8 
          RAI    D.T1 
          AOD    D.T1 
          SBD    D.T2 
          MJN    SEN2        IF ALL SENSE BYTES NOT UNPACKED
          LJM    SENX        IF DONE, RETURN
 SEN2     LDI    D.T0 
          LPC    377B 
          STI    D.T1 
          AOD    D.T0 
          AOD    D.T1 
          UJN    SEN1        LOOP FOR ALL SENSE WORDS 
          SPACE  4,18 
**        CCN - CHECK COUPLER CONNECTED FLAG. 
* 
*         CHECK THE COUPLER CONNECTED FLAG AND SET THE CORRECT DEVICE 
*         ADDRESS ACCORDING TO THE FLAG IN (PA).
* 
*         ENTRY  (A)      = ABORT ADDRESS.
*                (CCNF)   = COUPLER CONNECTED FLAG. 
*                (BD.AL)  = ACCESS LEVEL. 
*                (BD.EQ)  = CSU DEVICE ADDRESS IN BITS 2-0. 
*                (BD.EQ1) = MST DEVICE ADDRESS IN BITS 2-0. 
*                (PA)     = DEVICE CODE.
*                             ZERO     = CSU
*                             NON-ZERO = MST
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  ERP, ICM, SDA. 
  
 CCNX     LJM    *           ENTRY / EXIT 
 CCN      EQU    *-1
          RJM    ICM         INITIALIZE COMMAND 
          LDM    CCNF 
          NJN    CCN1        IF COUPLER CONNECTED 
 ERRCNC   LDC    ER.CNC 
          LJM    ERP         ISSUE COUPLER NOT CONNECTED ERROR
  
 CCN1     LDD    PA 
          ZJN    CCN3        IF CSU COMMAND 
  
          LDD    DC          GET THE DEVICE CODE
          LMC    TMST 
          ZJN    CCN2        IF MST IS ASSIGNED 
          LDC    ER.NMT      ERROR - NO MST ASSIGNED
          LJM    ERP
  
 CCN2     LDM    BD.EQ1 
          UJN    CCN4 
  
 CCN3     LDM    BD.EQ
 CCN4     LPN    7
          RJM    SDA         GO SET THE DEVICE ADDRESS
          LJM    CCNX        RETURN 
  
          SPACE  4,20 
**        ICM -  INITIALIZE COMMAND.
* 
*         ENTRY  (A) = ABORT ADDRESS. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   ABTL, ABTU, P, EA, EC, EM. 
* 
*         CALLS  NONE.
  
 ICMX     LJM    *           ENTRY / EXIT 
 ICM      EQU    *-1
          STD    ABTL        SAVE ABT ADDRESS 
          SHN    -12
          STD    ABTU 
          LDN    0
          STD    EC          CLEAR ERROR REGISTERS
          STD    EM 
          STD    SEQN        CLEAR SEQUENCE CODE
          STD    EC 
          STM    RESA 
          LDM    SB+7        SAVE MST/MSTPH 
          STD    EA 
 ICM1     LCN    0
          STM    SB,EC       SET STATUS BUFFER TO ALL ONES
          AOD    EC 
          LMC    SBL
          NJN    ICM1        IF NOT DONE
          STD    EC 
          LDD    EA 
          STM    SB+7        RESTORE MST/MSTPH
          UJN    ICMX        RETURN 
          SPACE  4,20 
**        SDA -  SET DEVICE ADDRESS.
* 
*         SET THE DEVICE ADDRESS INTO BITS 2--0 OF EACH LOCATION
*         SPECIFIED BY THE TABLE *TDVAD*.  A ZERO WORD TERMINATES 
*         THE TABLE.
* 
*         ENTRY  (A) = DEVICE ADDRESS IN BITS 2-0.
* 
*         EXIT   NONE.
* 
*         USES   D.Z1, D.Z2, D.Z3.
* 
*         CALLS  NONE.
  
 SDAX     LJM    *           ENTRY / EXIT 
 SDA      EQU    *-1
          STD    D.Z3        SAVE DEVICE ADDRESS
          LDN    0
          STD    D.Z1 
 SDA1     LDM    TDVAD,D.Z1 
          ZJN    SDA2        IF END OF DEVICE ADDRESS TABLE 
          STD    D.Z2 
          LDI    D.Z2 
          SCN    7
          LMD    D.Z3        OR IN THE DEVICE ADDRESS 
          STI    D.Z2 
          AOD    D.Z1 
          UJN    SDA1        LOOP 
  
 SDA2     LDD    D.Z3        NOW GET THE *BSDA* (DEV INTERRUPT BIT) 
          LMN    7
          ADC    SHNI        FORM SHIFT INSTRUCTION 
          STM    SDA3 
          LDN    1
 SDA3     SHN    ** 
          STM    DIIPS       SAVE OUR DEVICE INTERRUPT BIT
          UJN    SDAX        RETURN 
          SPACE  4,20 
**        STG -  SEND TAG.
* 
*         SEND A TAG AND TAG MODIFIER TO THE MSA.  WHEN THE *LNK* FLAG
*         BIT OF THE MODIFIER WORD IS SET, THIS TAG IS FOLLOWED BY
*         ANOTHER TAG. BUS IN RESPONCE IS STORED IN THE ADDRESS 
*         SPECIFIED BY THE CALL LOC+3 WHEN *SBI* FLAG IS SET IN THE 
*         MODIFIER WORD.
* 
*         ENTRY  CALL LOC+1=TAG 
*                CALL LOC+2=TAG MODIFIER (BITS 7-0), FLAGS (BIT 11-9).
*                 FLAG BITS.
*                  11(NRC)= DO NOT CHECK TAG RESPONCE 
*                  10(SBI)= STORE TAG RESPONCE IN THE ADDRESS 
*                           SPECIFIED IN CALL LOC+3.
*                   9(LNK)= TAGS ARE LINKED, ISSUE THE NEXT TAG 
*                           BEFORE RETURNING. 
*                   8(ND) = DO NOT DEACTIVATE THE CHANNEL AFTER READING 
*                           THE TAG STATUS (USED FOR EXTENDED TAGS).
*                        -NOTE- 
*                           BIT 9(LNK) SHOULD NOT BE SET WHEN BIT 8(DC) 
*                           IS SET, AS THIS WILL CAUSE AN *ER.ABF*
*                           ERROR WHEN THE NEXT TAG IS ISSUED.
* 
*                CALL LOC+3=ADDRESS TO STORE THE TAG RESPONCE (BI) IF 
*                           BIT 10 IS SET.
* 
*         EXIT   EXIT CONDITIONS APPLY TO THE LAST TAG ISSUED.
*                (A)    =TAG STATUS.
*                LTST   =TAG STATUS.
*                SB(LT) =TAG. 
*                SB(LTM)=TAG MODIFIER.
*                SB(LTS)=TAG STATUS (BUS IN). 
* 
*         USES   S4, D.Z1, D.Z2, LTST, SB(LT), SB(LTM), SB(LTS).
* 
*         CALLS  CTS, FTN, ISW, OFP.
  
 STG      CON    **          ENTRY
          LDM    STG
          STD    S4 
 STG1     LDI    S4          GET THE TAG
          LPC    7400B       SAVE TAG RESPONCE BITS TO CHECK
          STM    STG4 
          LDI    S4 
          LPC    377B        SAVE THE TAG ONLY
          RJM    FTN         ISSUE THE TAG
          STM    SB+LT
          AOD    S4 
          LDI    S4          GET THE TAG MODIFIER 
          STD    D.Z1        SAVE FLAG BITS (MODIFIER WORD) 
          LPC    377B        MASK TAG MODIFIER
          STM    SB+LTM 
          RJM    OFP         OUTPUT THE TAG MODIFIER
          RJM    ISW         GET THE TAG STATUS 
          STD    LTST 
          STM    SB+LTS 
          LDD    D.Z1 
          SHN    17-8 
          MJN    STG2        IF NO DISCONNECT 
          RJM    DCN         DISCONNECT THE CHANNEL 
 STG2     LDD    D.Z1 
          SHN    17-10
          PJN    STG3        IF NO STORE TAG RESPONCE (BI)
          AOD    S4 
          LDI    S4          GET THE ADDRESS TO STORE BUS IN
          STD    D.Z2 
          LDD    LTST 
          STI    D.Z2        STORE BUS IN 
 STG3     LDD    LTST 
          LPC    **          TSTV+TSSA1+TSSA2+TSNE
 STG4     EQU    *-1
          ZJN    STG5        IF VALID TAG RESPONCE
 ERRTRE   LDC    ER.TRE      TAG RESPONCE ERROR 
          LJM    ERP
  
 STG5     LDD    D.Z1 
          SHN    17-11
          MJN    STG6        IF DO NOT CHECK TAG RESPONCE 
          RJM    CTS
          SHN    17-7 
          PJN    STG6        IF NO CHECK 2 ERROR
          LJM    ERRCK2 
  
 STG6     LDD    D.Z1 
          SHN    17-9 
          PJN    STG7        IF TAGS NOT LINKED 
          AOD    S4          INCREMENT TAG POINTER
          LJM    STG1        LOOP TO ISSUE THE NEXT TAG 
  
 STG7     LDD    LTST        GET LAST TAG STATUS
          LJM    1,S4        RETURN 
          SPACE  4,20 
**        FCH -  FORM CYLINDER (CC) AND HEAD (HH) ADDRESS.
* 
*         CONVERT THE X AND Y COORDINATES INTO A CYLINDER 
*         AND HEAD ADDRESS. 
* 
*         ENTRY  (D.T1) = X COORDINATE. 
*                (D.T2) = Y COORDINATE. 
* 
*         EXIT   (D.Z6) = CYLINDER ADDRESS (CC).
*                (D.Z7) = HEAD ADDRESS (HH).
*                (A)    = HEAD ADDRESS (HH).
* 
*         USES   D.Z6, D.Z7.
* 
*         CALLS  NONE.
  
 FCHX     LJM    *           ENTRY / EXIT 
 FCH      EQU    *-1
          LDD    D.T1 
          ADN    2           X+2
          LPN    77B
          STD    D.Z6 
          LDD    D.T2 
          LPN    1S4         SAVE BIT 4 OF Y
          SHN    7-4
          RAD    D.Z6        ADD Y BIT 4 TO X 
          LDD    D.T2 
          LPN    17B         SAVE BITS 3-0 OF Y 
          STD    D.Z7 
          LDD    D.T2 
          LPN    1S5         SAVE BIT 5 OF Y
          SHN    6-5         MOVE BIT 5 OF Y TO BIT 6 
          RAD    D.Z7 
          UJN    FCHX        RETURN 
          SPACE  4,20 
**        VXY -  VALIDATE THE X AND Y COORDINATES.
* 
*         VALIDATE THAT THE SELECTORS POSITION IS NOT WITHIN THE USERS
*         AREA OF THE MATRIX.  THIS IS DONE PRIOR TO A MOUNT OR MOVE
*         COMMAND TO PREVENT PICKING A USERS CARTRIDGE.  THE FOLLOWING
*         MATRIX  LOCATIONS ARE CONSIDERED AS THE USERS AREA. 
* 
*           Y=0; X=27 THRU X=29 AND X=31 THRU X=56
*           Y=01 THRU Y=17; X=0 THRU X=29 AND X=31 THRU X=57
*           Y=19 THRU Y=35; X=0 THRU X=29 AND X=31 THRU X=57
*           Y=36; X=1 THRU X=29 AND X=31 THRU X=56
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   D.T0, D.T1.. 
* 
*         CALLS  ERRIXY, SEN. 
  
 VXYX     LJM    *           ENTRY / EXIT 
 VXY      EQU    *-1
          RJM    SEN         GET CURRENT SELECTOR POSITION
          LDM    SB+XADR
          SHN    -2          SHIFT OFF THE FRACTIONAL PORTION 
          STD    D.T0 
          LDM    SB+YADR
          SHN    -2          SHIFT OFF THE FRACTIONAL PORTION 
          STD    D.T1 
          NJN    VXY1        IF(Y.NE.0) 
          LDD    D.T0        Y=0, X CANNOT BE 27-29 OR 31-56
          SBN    27 
          MJN    VXYX        IF(X.LT.27), RETURN
          UJN    VXY2 
  
 VXY1     SBN    18 
          ZJN    VXYX        IF(Y.EQ.18), ANY X IS VALID, RETURN
          SBN    37-18
          PJN    VXYX        IF(Y.GE.37), ANY X IS VALID, RETURN
          ADN    37-36
          NJN    VXY3        IF(Y.NE.36)
          LDD    D.T0        Y=36, X CANNOT BE 1-29 OR 31-35
          ZJN    VXYX        IF(X.EQ.0), RETURN 
 VXY2     LDD    D.T0 
          SBN    57 
          PJN    VXYX        IF(X.GT.56), RETURN
          UJN    VXY4 
  
 VXY3     LDD    D.T0 
          SBN    58 
          PJN    VXYX        IF(X.GT.57), RETURN
  
 VXY4     LDD    D.T0 
          SBN    30 
          NJN    ERRIXY      IF(X.NE.30), ERROR 
          LJM    VXYX        RETURN 
  
 ERRIXY   LDC    ER.IXY      ILLEGAL XY COORDINATE
          LJM    ERP
          SPACE  4,20 
**        TDVAD  - LOCATIONS THAT REQUIRE A DEVICE ADDRESS. 
  
 TDVAD    VFD    12/DVCIS1
          VFD    12/DVCIS2
          VFD    12/DVSRS 
          VFD    12/DVUES1
          VFD    12/DVUES2
          VFD    12/DVSRS 
          VFD    12/MDSEL 
          VFD    12/MDSRS 
          CON    0           TABLE TERMINATOR 
          SPACE  4,20 
**        SVSB - SAVE STATUS BUFFER.
* 
*         WHILE PROCESSING AN ERROR, THE STATUS BUFFER IS COPIED TO 
*         THIS BUFFER PRIOR TO REQUESTING SENSE.  THIS MUST BE DONE 
*         TO MAINTAIN THE ORIGINAL ERROR CONDITION AS THE SENS READ 
*         IS ACCOMPLISHED VIA COMMON ROUTINES (*SEN* AND *RDS*).
  
 SVLF     EQU    *           SAVE LAST FUNCTION 
 SVSB     EQU    SVLF+1      SAVE STATUS BUFFER 
 SVSBE    EQU    SVSB+SNS  LWA OF SAVE BUFFER 
          ERRNG  IB-SVSBE    ERROR IF *SVSB* OVERFLOWS INTO *IB*
          SPACE  4,10 
****      BUFFERS.
  
 IB       EQU    7476B       INPUT BUFFER FWA 
 OB       EQU    IB+IBL      OUTPUT BUFFER FWA
 OBD      EQU    OB+HACWL    FWA OF THE DATA FIELD WITHIN *OB*
 SB       EQU    OB+OBL      STATUS BUFFER FWA
 BLWA     EQU    SB+SBL      END OF BUFFERS 
  
****
          SPACE  4,20 
**        CHECK FOR ASSEMBLY OVERFLOW.
  
          IFEQ   NOS,1
 .1       SET    OVLFW
 .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 66X OVERLAY OVERFLOW
  
          QUAL   *
