COMPMRA 
COMMON
          CTEXT  COMPMRA - MAINTENANCE REGISTER ACCESS ROUTINES.
          SPACE  4,10 
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   COMPMRA
 QUAL$    ENDIF 
          BASE   M
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 MRA      SPACE  4,10 
***       COMPMRA - MAINTENANCE REGISTER ACCESS ROUTINES. 
*         B. R. HANSON       81/01/29.
          SPACE  4,10 
***              COMPMRA DEFINES FOUR ROUTINES USED IN ACCESSING THE
*         CYBER 170-8X5 MAINTENANCE REGISTERS.  THESE ROUTINES ENFORCE
*         THE PROTOCOL DEFINED FOR RESERVING AND RELEASING THE CHANNEL. 
*         THE ROUTINES ARE DESIGNED FOR USE BY THE MACROS DEFINED IN
*         THE COMMON DECK *COMPMRM*.
          SPACE  4,10 
 DCN*     PPOP   4,7500      DEFINE *DCN**
 AMR      SPACE  4,10 
**        AMR - ACCESS MAINTENANCE REGISTER.
* 
*         ENTRY  (A) = FUNCTION TO ACCESS REGISTER. 
*                (RN) = REGISTER NUMBER.
* 
*         EXIT   (A) = 10.
*                MAINTENANCE CHANNEL IS ACTIVE. 
* 
*         CALLS  SMI. 
  
  
 AMR      SUBR               ENTRY/EXIT 
          RJM    SMI         GET MAINTENANCE CHANNEL
          FAN    MR 
          AJM    *,MR        IF CHANNEL ACTIVE
          ACN    MR 
          LDN    0
          OAN    MR 
          LDD    RN 
          OAN    MR 
          FJM    *,MR        WAIT FOR REGISTER NUMBER ACCEPTED
          DCN*   MR+40
          ACN    MR 
          LDN    0           DELAY TO PREVENT 810/830 CONSOLE HANG
          RAD    RN          DELAY TO PREVENT 810/830 CONSOLE HANG
          LDN    10 
          UJN    AMRX        RETURN 
 CLI      SPACE  4,10 
**        CLI - CLEAR LONG TERM INTERLOCK.
* 
*         ENTRY  (LOCK) = 0 IF LONG TERM INTERLOCK IS CLEAR.
*                       = 1 IF LONG TERM INTERLOCK IS SET.
* 
*         EXIT   LONG TERM INTERLOCK ON THE MAINTENANCE CHANNEL 
*                IS CLEARED.
* 
*         MACROS MONITOR. 
  
  
 CLI1     CCF    *,MR        RELEASE CHANNEL
  
 CLI      SUBR               ENTRY/EXIT 
          SOM    LOCK 
          ZJN    CLI1        IF INTERLOCK WAS SET 
          MONITOR  HNGM      HANG IF NOT SET
          UJN    CLIX        RETURN 
 CMI      SPACE  4,10 
**        CMI - CLEAR MAINTENANCE INTERLOCK.
* 
*         ENTRY  (LOCK) = 0 IF LONG TERM INTERLOCK IS CLEAR.
*                       = 1 IF LONG TERM INTERLOCK IS SET.
* 
*         EXIT   MAINTENANCE CHANNEL RELEASED (UNLESS LONG
*                TERM INTERLOCK WAS SET). 
*                TO *RME* TO RETRY IF CHANNEL ERRORS PRESENT. 
  
  
 CMI1     LDM    LOCK 
          NJN    CMI2        IF LONG TERM INTERLOCK SET 
          CCF    *,MR        RELEASE CHANNEL
 CMI2     LDC    **          RESTORE (A)
 CMIA     EQU    *-1
  
 CMI      SUBR               ENTRY/EXIT 
          STM    CMIA 
          DCN*   MR+40       ENSURE MAINTENANCE CHANNEL INACTIVE
          CFM    CMI1,MR     IF ERROR FLAG CLEAR
          UJN    RME         PROCESS RETRY-ABLE MAINTENANCE ERROR 
 CTE      SPACE  4,10 
**        CTE - CHECK TIMEOUT EXPIRED.
* 
*         ENTRY  (T0) = TIMEOUT REMAINING IN 4096 MICRO SECOND UNITS. 
* 
*         EXIT   (A) = NEGATIVE IF TIMED OUT. 
*                (T0) = UPDATED IF 4096 MICRO SECOND ELAPSED. 
* 
*         USES   T0.
  
  
 CTE1     RAM    CTEA        SET NEW CLOCK VALUE
  
 CTE      SUBR               ENTRY/EXIT 
          IAN    14 
          SBM    CTEA        MICROSECONDS SINCE LAST CHECK
          PJN    CTE1        IF LESS THAN 4096 MICROSECONDS 
          RAM    CTEA 
          SOD    T0          DECREMENT TIMEOUT COUNT
          UJN    CTEX        RETURN 
  
  
 CTEA     CON    0           REAL TIME CLOCK STORAGE
 RME      SPACE  4,10 
**        RME  - RETRY MAINTENANCE REGISTER ERROR.
* 
*         ENTRY  (LOCK) = 0 IF LONG TERM INTERLOCK IS SET.
*                       = 1 IF LONG TERM INTERLOCK IS CLEAR.
*                AT *FME* TO FORCE ERROR PROCESSING.
* 
*         EXIT   TO *RTRY* IF OPERATION CAN BE RETRIED. 
*                TO *MRER*, IF OPERATION COULD NOT BE RETRIED.
*                OR IF LONG TERM INTERLOCK IS SET.
  
  
 RME      BSS    0           ENTRY
          SOM    RMEA        DECREMENT RETRY COUNT
          ZJN    FME         IF OPERATION CANNOT BE RETRIED 
          DCN*   MR+40       ENSURE CHANNEL IS INACTIVE 
          UJN    RTRY        RETRY LAST OPERATION 
  
 FME      DCN*   MR+40
          CCF    *,MR 
 FME1     LDN    0           CLEAR LONG TERM INTERLOCK STATUS 
          STM    LOCK 
          LJM    MRER        JUMP TO ERROR HANDLER
 MRED     EQU    *-1         ERROR EXIT ADDRESS 
  
 RMEA     CON    5           RETRY COUNT FOR CHANNEL PARITY ERRORS
 SLI      SPACE  4,10 
**        SLI - SET LONG TERM INTERLOCK.
* 
*         ENTRY  (LOCK) = 0.
* 
*         EXIT   MAINTENANCE CHANNEL FLAG SET.
*                (LOCK) = 1.
* 
*         CALLS  SMI. 
* 
*         MACROS MONITOR. 
  
  
 SLI      SUBR               ENTRY/EXIT 
          RJM    SMI         GET INTERLOCK ON CHANNEL 
          AOM    LOCK 
          SBN    1
          ZJN    SLIX        IF INTERLOCK JUST SET
          CCF    *,MR        RELEASE CHANNEL
          MONITOR  HNGM      HANG IF ALREADY SET
          UJN    SLIX        RETURN 
 SMI      SPACE  4,10 
**        SMI - SET MAINTENANCE INTERLOCK.
* 
*         EXIT   MAINTENANCE CHANNEL OBTAINED.
*                TO *RME* IF CHANNEL ACTIVE WHEN ACQUIRED.
* 
*         CALLS  RME. 
  
  
 SMI1     AJM    RME,MR      IF CHANNEL ACTIVE
          LDC    **          RESTORE FUNCTION 
 SMIA     EQU    *-1
  
 SMI      SUBR               ENTRY/EXIT 
          STM    SMIA 
          LDC    5           SET RETRY COUNT
 MRRC     EQU    *-1
          STM    RMEA 
          LDC    0
 LOCK     EQU    *-1
          NJN    SMI1        IF LONG TERM INTERLOCK SET 
          SCF    *,MR        GET MAINTENANCE CHANNEL
          UJN    SMI1        CHECK CHANNEL STATUS 
  
 RTRY     EQU    SMI1        RETRY ADDRESS
          SPACE  4,10 
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 AMR      EQU    /COMPMRA/AMR 
 CLI      EQU    /COMPMRA/CLI 
 CMI      EQU    /COMPMRA/CMI 
 MRED     EQU    /COMPMRA/MRED
 MRRC     EQU    /COMPMRA/MRRC
 SLI      EQU    /COMPMRA/SLI 
 SMI      EQU    /COMPMRA/SMI 
 QUAL$    ENDIF 
          SPACE  4
          ENDX
