*         CTEXT  CTP$DFT_CPU_HANDSHAKER
 CPH      SPACE  4,10
**        CPH - PERFORM CPU/PP HANDSHAKING.
*
*         DETERMINE WHETHER MONITOR IS STILL ALIVE.  SINCE THIS ROUTINE
*         IS CALLED EVERY FIVE SECONDS, TIMEOUT HAS OCCURRED IF THE
*         TIMEOUT FLAG EVER EQUALS SIX (5 * 6 = 30 SECOND TIMEOUT).
*
*         ENTRY  ONCE EVERY FIVE SECONDS FROM *TIM*.
*
*         EXIT   DFT TIME WORD UPDATED.
*                (DFTE) = *LDN 0*.
*
*         USES   T1 - T4, W0 - W7.
*
*         CALLS  DCD, SPB.


          ROUTINE CPH        ENTRY/EXIT
          LDC    LDNI+0      CLEAR HANDSHAKE FLAG
          STM    DFTE
          RJM    DCD         DETERMINE IF CPU/PP COMMUNICATION BLOCK DEFINED
          ZJP    CPHX        IF NO POINTER OR EICB REVISION < 04
          LRD    W4+1
          LDD    W4          READ MONITOR TIME WORD
          ADN    1
          ADC    RR
          CRDL   W0
          ADN    2           READ DFT TIME WORD
          CRDL   T1
          LDM    IOUN        CHECK WHICH DFT IS ACTIVE
          NJN    CPH5        IF DFT-S

*         COMPARE THE MONITOR AND DFT TIME WORDS TO SEE IF MONITOR HAS
*         UPDATED ITS WORD SINCE THE LAST DFT UPDATE.

          LDDL   W0
          SBDL   T1
          NJN    CPH5        IF TIME WORDS DIFFER
          LDDL   W0+1
          SBDL   T1+1
          NJN    CPH5        IF TIME WORDS DIFFER
          LDDL   W0+2
          SBDL   T1+2
          NJN    CPH5        IF TIME WORDS DIFFER
          LDDL   W0+3
          SBDL   T1+3
          ZJN    CPH15       IF TIME WORDS EQUAL

*         MONITOR HAS NOT TIMED OUT.  UPDATE DFT TIME WORD.

 CPH5     RJM    SPB         SET PP BOUNDS
          LDD    W4
          ADN    3
          ADM    IOUN        SELECT DFT/DFT-S WORD
          ADC    RR
          CWDL   W0
          LDN    0           CLEAR FLAG
          STM    CHEF
 CPH10    LJM    CPHX        RETURN

*         TIME WORDS ARE EQUAL.  WHEN THE EQUAL FLAG = 6, MONITOR
*         TIMEOUT HAS OCCURRED.  IF SO, SET FLAG TO ISSUE TIMEOUT
*         MESSAGE.

 CPH15    LDM    CHEF
          SBN    77
          ZJN    CPH10       IF ALREADY ISSUED TIMEOUT
          AOM    CHEF
          SBN    6
          NJN    CPH10       IF NOT TIMEOUT
          AOM    DFTD        SET ISSUE TIMEOUT MESSAGE FLAG
          LDN    77
          STM    CHEF
          LRD    IB+1        SET PP BOUNDS
          RJM    SPB
          UJN    CPH10       RETURN
 DCD      SPACE  4,10
**        DCD - DETERMINE IF CPU/PP COMMUNICATION BLOCK DEFINED.
*
*         CHECKS FOR EICB REVISION LEVEL < 04 AND DETERMINES IF
*         THE POINTER TO THE CPU/PP COMMUNICATION BLOCK IS DEFINED.
*
*         EXIT   (A) = 0, IF EICB REVISION LEVEL < 04 OR NO POINTER.
*                (W4 - W7) = POINTER TO BLOCK, IF DEFINED.
*
*         USES   W0 - W3.
*
*         CALLS  IIB.


 DCD1     LDN    0           RETURN EICB REVISION < 04

 DCD      SUBR               ENTRY/EXIT
          LDN    D7TY        CHECK EICB REVISION LEVEL
          RJM    IIB
          CRDL   W0
          LDD    W3
          SHN    -6
          SBN    4
          MJN    DCD1        IF EICB REVISION < 04
          LDN    D8RLP       READ CPU/PP COMMUNICATION BLOCK POINTER
          RJM    IIB
          CRDL   W4
          LDD    W4+3
          UJN    DCDX        RETURN ZERO IF NO POINTER

*         END    CTP$DFT_CPU_HANDSHAKER
