          CTEXT  CTP$UPDATE TIME IN EICB
          SPACE  4,10
 QUAL$    IF     -DEF,QUAL$
          QUAL   CTPUTE
 QUAL$    ENDIF
          BASE   M
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC. 1992
          SPACE  4,10
***       USAGE NOTES FOR THIS COMMON DECK.
*
*         THIS COMMON DECK ASSUMES THAT THERE IS AN UNQUALIFIED
*         ENTRY POINT, *FTE*.  THIS ENTRY POINT WILL BE JUMPED TO
*         TO HANDLE THE CASE OF THE INABILITY TO DESELECT THE
*         TWO PORT MUX AFTER ATTEMPTING TO READ THE WALL CLOCK CHIP.
*
*         IF THE SYMBOL *NPERR* IS DEFINED, THEN THIS DECK WILL
*         USE THAT LOCATION TO COUNT THE NUMBER OF PARITY ERRORS
*         DETECTED ON CH15.  *NPERR* MUST BE INITIALIZED TO ZERO.
          SPACE  4,10
**        VARIABLES GLOBAL TO COMMON DECK.


 DELAY    EQU    1205D/4     MAXIMUM DELAY FOR MUX ACCESS (1.205 SECONDS)
 UTE      SPACE  4,10
**        UTE - UPDATE TIME IN EICB FROM WALL CLOCK CHIP.
*
*         ENTRY  (IB - IB+2) = RFA OF EICB.
*                (IOUM) = IOU MODEL NUMBER.
*
*         EXIT   EICB WALL CLOCK TIME UPDATED.
*
*         USES   T1, T2, T3, T4.
*
*         CALLS  IIB, RWC, SPB.


 UTE20    STD    T0          SAVE RESULT
          LDC    UTEA
          STD    T1          FIRST
          ADN    4           BUFFER LENGTH
          STD    T2          LIMIT
          LDC    177777      COULD NOT ACCESS CHIP VALUE
          STDL   T3
          LDD    T0
          SBN    1
          ZJN    UTE30       IF COULD NOT ACCESS CHIP
          LDN    0           I2 TIMESTAMP VALUE
          STDL   T3
 UTE30    LDDL   T3
          STIL   T1
          AOD    T1
          SBD    T2
          MJN    UTE30       IF BUFFER NOT FULL
 UTE40    LRD    IB+1        GET INTERFACE BLOCK R-POINTER
          RJM    SPB         SET PP BOUNDS
          LDN    D8WT
          RJM    IIB
          CWML   UTEA,ON     WRITE THE VALUE IN THE EICB

 UTE      SUBR               ENTRY/EXIT
          LDN    D7TY        TEST *EICB* LEVEL
          RJM    IIB
          CRDL   T4          READ *D7TY*
          LDD    T7          LOAD 12 BITS
          SHN    -6          EXTRACT EICB REVISION LEVEL
          SBN    4
          MJN    UTEX        IF WALL CLOCK CHIP BUFFER NOT PRESENT
          LDC    UTEA
          RJM    RWC         READ WALL CLOCK CHIP
          NJP    UTE20       IF CLOCK NOT READ PROPERLY

*         PACK TIME DATA AND WRITE TO CM.

          LDC    UTEA
          STD    T2
          STD    T3
          ADN    4
          STD    T4
 UTE10    LDI    T2
          SHN    10
          LMM    1,T2
          STIL   T3
          AOD    T2
          AOD    T2
          AOD    T3
          SBD    T4
          NJN    UTE10       IF PACKING NOT COMPLETE
          UJP    UTE40       WRITE RESULT AND RETURN

 UTEA     BSS    2*4         WALL CLOCK CHIP READ/WRITE BUFFER
 RWC      SPACE  4,15
**        RWC - READ WALL CLOCK CHIP.
*
*         ENTRY  (A) = FWA OF 8 PP WORD RESULT BUFFER.
*                (IOUM) = IOU MODEL NUMBER.
*
*         EXIT   (A) = 0, IF WALL CLOCK CHIP READ OK.
*                (RESULT BUFFER) = CLOCK DATA.
*                (A) = -1, IF MODEL 20 IOU.
*                (A) = 1, IF COULD NOT ACCESS WALL CLOCK CHIP.
*
*         USES   T3, T4.
*
*         CALLS  AMA, CTE, ICT, IFN, RMA.


 RWC100   LCN    1

 RWC      SUBR               ENTRY/EXIT
          STM    RWCA        SAVE FWA OF BUFFER
          STD    T3
          LDM    IOUM
          SBK    0#20
          ZJN    RWC100      IF MODEL 20 IOU
          LDC    LDNI
          STM    RWCB        INITIALIZE TO NO INPUT ERROR
          LDC    100D        SET CHECK COUNTER
          STML   RWCC
          RJM    AMA         ACQUIRE MULTIPLEXOR ACCESS
          NJN    RWCX        IF ACCESS NOT POSSIBLE NOW

*         READ DATA FROM THE WALL CLOCK CHIP.  IF THE DATA DOES NOT
*         APPEAR WITHIN *DELAY* AMOUNT OF TIME, THEN AN ERROR CONDITION
*         WILL BE FLAGGED.

          LDC    MXRW        READ WALL CLOCK
          RJM    IFN         ISSUE FUNCTION
          NJN    RWCX        IF FUNCTION TIMED OUT
          RJM    ICT         INITIALIZE CTE
          ACN    MX
 RWC10    SOML   RWCC        CHECK IF TIME CHECK NEEDED
          NJN    RWC30       IF NOT NEEDED
          LDC    100D        RESET CHECK COUNTER
          STML   RWCC
          RJM    CTE         CHECK FUNCTION TIMEOUT EXPIRED
          PJN    RWC30       IF NOT TIMED OUT
 RWC20    AOM    RWCB        SET ERROR FLAG
          UJN    RWC40       DESELECT

 RWC30    IJM    RWC20,MX    IF INACTIVE
          EJM    RWC10,MX    IF EMPTY
          LDN    10
          IAM    **,MX
 RWCA     EQU    *-1
 RWC40    DCN    MX+40
          SFM    RWC50,MX    IF PARITY ERROR
          ZJN    RWC70       IF ALL BYTES OF WALL CLOCK READ
          UJN    RWC60       SET ERROR FLAG

 RWC50    BSS    0
 .A       IF     DEF,NPERR
          AOML   NPERR
 .A       ENDIF
 RWC60    AOM    RWCB        SET ERROR FLAG
 RWC70    RJM    RMA         RELEASE MULTIPLEXER ACCESS
 RWCB     LDN    0
*         LDN    1           (ERROR ON INPUT)
*         LDN    2           (ERROR ON INPUT)
          NJN    RWC90       IF INPUT ERROR
          LDI    T3
          NJN    RWC90       IF INTEGRITY HAS BEEN LOST
 RWC80    UJP    RWCX        RETURN

 RWC90    LDN    1
          UJN    RWC80       RETURN

 RWCC     BSS    1           CHECK TIME COUNTER
 AMA      SPACE  4,10
**        AMA - ACQUIRE MULTIPLEXER ACCESS.
*
*         EXIT   (A) = 0, IF MULTIPLEXER ACCESS OBTAINED.
*                      1, IF ACCESS NOT OBTAINED.
*
*         CALLS  CTE, ICT, IFN.


 AMA50    LDN    1           ACCESS NOT OBTAINED

 AMA      SUBR               ENTRY/EXIT
          RJM    ICT         INITIALIZE CTE
 AMA10    SCF    AMA30,MR    GET ACCESS TO MAINTENANCE CHANNEL
          SCF    AMA20,MX    GET ACCESS TO TWO-PORT MULTIPLEXER
          CCF    *,MR
          LDC    MXPT        PORT SELECT FUNCTION
          RJM    IFN         SELECT PORT
          ZJN    AMAX        IF PORT SELECT WORKED
          CCF    *,MX
          UJN    AMAX        RETURN

 AMA20    CCF    *,MR        CLEAR MAINTENANCE CHANNEL INTERLOCK
 AMA30    LDN    77          BRIEF DELAY
 AMA40    SBN    1
          PJN    AMA40       IF DELAY NOT COMPLETE
          RJM    CTE         CHECK TIMEOUT EXPIRED
          MJN    AMA50       IF ACCESS NOT OBTAINED
          UJN    AMA10       TRY TO RESERVE PORT AGAIN
 CTE      SPACE  4,10
**        CTE - CHECK TIMEOUT EXPIRED.
*
*         ENTRY  (T0) = TIMEOUT REMAINING IN 4096 MICROSECOND UNITS.
*
*         EXIT   (A) = NEGATIVE IF TIMED OUT.
*                (T0) = UPDATED IF 4096 MICROSECOND ELAPSED.
*
*         USES   T0.


 CTE10    RAM    CTEA        SET NEW CLOCK VALUE

 CTE      SUBR               ENTRY/EXIT
          IAN    14
          LPC    7777
          SBM    CTEA        MICROSECONDS SINCE LAST CHECK
          PJN    CTE10       IF LESS THAN 4096 MICROSECONDS
          RAM    CTEA
          SODL   T0          DECREMENT TIMEOUT COUNT
          UJN    CTEX        RETURN

 CTEA     CON    0           REAL TIME CLOCK STORAGE
 ICT      SPACE  4,10
**        ICT - INITIALIZE CTE.
*
*         EXIT   (T0) = NUMBER OF 4 MILLISECOND CYCLES.
*                (CTEA) = 12 BIT CURRENT CLOCK VALUE.


 ICT      SUBR               ENTRY/EXIT
          LDK    DELAY
          STDL   T0
          IAN    14
          STM    CTEA
          UJN    ICTX        RETURN
 IFN      SPACE  4,20
**        IFN - ISSUE FUNCTION.
*
*         ISSUE CHANNEL FUNCTION TO FUNCTION TWO-PORT MUX HARDWARE.
*         IF THE TWO-PORT MULTIPLEXER FAILS TO REPLY TO THE FUNCTION
*         WITHIN *DELAY* SECONDS, *IFN* EXITS TO THE ERROR PROCESSOR
*         *FTE*.
*
*         ENTRY  (A) = FUNCTION TO BE ISSUED.
*                PORT SELECTED.
*
*         EXIT   (A) = 0, IF FUNCTION DID NOT TIME OUT.
*                      1, IF FUNCTION TIMED OUT.  CH15 RELEASED.
*
*         CALLS  CTE, ICT, RMA.


 IFN50    LDN    0           FUNCTION COMPLETED NORMALLY

 IFN      SUBR               ENTRY/EXIT
          STM    IFNA        SAVE FUNCTION CODE
          DCN    MX+40       INSURE CHANNEL DISCONNECT
          FAN    MX          ISSUE FUNCTION CODE
          RJM    ICT         INITIALIZE CTE

*         WAIT FOR CHANNEL DISCONNECT.

 IFN10    IJM    IFN50,MX    IF FUNCTION COMPLETE
          RJM    CTE         CHECK TIMEOUT EXPIRED
          PJN    IFN10       IF NOT TIMED-OUT
          DCN    MX+40       DISCONNECT CHANNEL
          CFM    IFN20,MX    IF NO PARITY ERROR
 .A       IF     DEF,NPERR
          AOML   NPERR
 .A       ENDIF
 IFN20    LDC    **
 IFNA     EQU    *-1
          STM    IFNC
          LMC    MXPT
          ZJN    IFN30       IF SELECT FUNCTION
          LMC    MXDM&MXPT
          ZJN    IFN40       IF DESELECT FAILED
          LDM    IFN         SAVE RETURN ADDRESS (RMA CALLS IFN)
          STM    IFNB
          RJM    RMA         RELEASE MULTIPLEXER ACCESS
          LDM    IFNB        RESTORE RETURN ADDRESS
          STM    IFN
 IFN30    LDN    1           INDICATE ERROR
          UJP    IFNX        RETURN

 IFN40    LDC    DAWC        616 - WALL CLOCK CHIP READ ERROR
          LJM    FTE         EXIT TO FATAL ERROR PROCESSOR

 IFNB     BSS    1           RETURN ADDRESS
 IFNC     BSS    1           LAST FUNCTION ISSUED WITH ERROR
 RMA      SPACE  4,10
**        RMA - RELEASE MULTIPLEXER ACCESS.
*
*         ENTRY  TWO-PORT MUX IS RESERVED BY THIS PP.
*
*         EXIT   TWO-PORT MUX IS DESELECTED AND CHANNEL IS RELEASED.
*
*         CALLS  IFN.


 RMA      SUBR               ENTRY/EXIT
          LDC    MXDM        DESELECT MULTIPLEXER
          RJM    IFN
          CCF    *,MX        RELEASE CHANNEL INTERLOCK
          UJN    RMAX        RETURN
          SPACE  4,10


          BASE   *
 QUAL$    IF     -DEF,QUAL$
          QUAL   *
 UTE      EQU    /CTPUTE/UTE
 RWC      EQU    /CTPUTE/RWC
 QUAL$    ENDIF
          ENDX
