          CTEXT  DSI$MAINTENANCE REGISTER MACROS.
          SPACE  4,10
*         COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992
 MRM      SPACE  4,10
***       DSI$MAINTENANCE REGISTER MACROS.
*         B. R. HANSON       81/01/29.
          SPACE  4,10
***              DEFINES SEVERAL MACROS WHICH ARE USED IN THE
*         PACKAGES THAT NEED TO ACCESS THE MAINTENANCE CHANNEL.
*         THE USE OF THESE MACROS REQUIRES THE PRESENCE OF THE
*         COMMON DECK *DSI$MAINTENANCE_REGISTER_ACCESS* AND TAGS
*         *RN*, *MRER*, AND OPTIONALLY *EC*.  *RN* IS A DIRECT CELL
*         USED TO PASS THE REGISTER NUMBER TO *AMR*.  *MRER* IS
*         THE ENTRY ADDRESS INTO AN ERROR PROCESSOR FOR FATAL
*         MAINTENANCE CHANNEL ERRORS.  *EC* IS THE DIRECT CELL
*         USED BY THE MACROS TO OBTAIN THE DEFAULT PORT ACCESS CODE.
 EXITMR   SPACE  4,10
**        EXITMR - SET MAINTENANCE REGISTER EXIT ADDRESS.
*
*         EXITMR ADDR
*
*         ENTRY  *ADDR* = ADDRESS TO CALL IF A CHANNEL ERROR
*                         OCCURS TOO MANY TIMES ON A READ.
*
*         NOTE   WHEN EXECUTION RESUMES AT *ADDR* FOR ERRORS ON
*                A READ, THE LONG TERM INTERLOCK WILL HAVE BEEN
*                CLEARED.


          PURGMAC EXITMR

 EXITMR   MACRO  ADDR
          MACREF EXITMR
          LDC    ADDR
          STM    MRFA
 EXITMR   ENDM
 FATALMR  SPACE  4,10
**        FATALMR - SET FATAL MAINTENANCE REGISTER EXIT ADDRESS.
*
*         FATALMR ADDR
*
*         ENTRY  *ADDR* = ADDRESS TO CALL IF A FATAL ERROR OCCURS.
*
*         NOTE   WHEN EXECUTION RESUMES AT *ADDR* FOR A FATAL ERROR,
*                FURTHER USE OF CH17 MAY NOT BE POSSIBLE.


          PURGMAC FATALMR

 FATALMR  MACRO  ADDR
          MACREF FATALMR
          LDC    ADDR
          STM    MRFN
 FATALMR  ENDM
 FUNCMR   SPACE  4,10
**        FUNCMR - FUNCTION MAINTENANCE CHANNEL.
*
*         FUNCMR PAC,FUNCTION
*
*         ENTRY  *PAC* = ADDRESS OF PORT ACCESS CODE FOR DESIRED
*                   ELEMENT.  *EC* IS ASSUMED IF NO PARAMETER IS GIVEN.
*                *FUNCTION* = FUNCTION TO SEND TO ELEMENT.
*
*         CALLS  CMI, SMI.


          PURGMAC FUNCMR

 FUNCMR   MACRO  PAC,FN
          MACREF FUNCMR
          LDK    FN
 .P       IFC    NE,$PAC$$
          LMM    PAC
 .P       ELSE
          LMD    EC
 .P       ENDIF
          RJM    SMI
          FAN    MR
          AJM    *,MR        WAIT FOR FUNCTION TO TAKE
          RJM    CMI
 FUNCMR   ENDM
 LOCKMR   SPACE  4,10
**        LOCKMR - SET OR CLEAR A LONG TERM INTERLOCK ON THE
*                MAINTENANCE CHANNEL.
*
*         LOCKMR OP,ADDR
*
*         ENTRY  *OP* = *SET* TO SET THE LONG TERM INTERLOCK.
*                *OP* = *CLEAR* TO CLEAR THE LONG TERM INTERLOCK.
*                *ADDR* = OPTIONAL ERROR EXIT ADDRESS.
*
*         CALLS  CLI, SLI.


          PURGMAC LOCKMR

 LOCKMR   MACRO  OP,ADDR
          MACREF LOCKMR
 .A       IFC    NE,$ADDR$$
          EXITMR ADDR
 .A       ENDIF
 .L       IFC    EQ,$OP$SET$
          RJM    SLI         SET LONG TERM INTERLOCK
 .L       ELSE
          IFC    NE,$OP$CLEAR$,1
          ERR                ILLEGAL OPTION ON *LOCKMR*
          RJM    CLI         CLEAR LONG TERM INTERLOCK
 .L       ENDIF
 LOCKMR   ENDM
 READMR   SPACE  4,15
**        READMR - READ MAINTENANCE REGISTER.
*
*         READMR A,PAC,REG,S
*
*         ENTRY  *A* = ADDRESS OF BUFFER FOR REGISTER DATA.
*                *PAC* = ADDRESS OF PORT ACCESS CODE FOR DESIRED
*                   ELEMENT.  *EC* IS USED IF PARAMETER OMITTED.
*                *REG* = REGISTER NUMBER.  IF OMITTED, THE REGISTER
*                   NUMBER IS OBTAINED FROM DIRECT CELL *RN*.
*                *S* = SIZE OF REGISTER IN WORDS.  ASSUMED TO BE 10.
*
*         EXIT   (A - A+S-1) = REGISTER DATA.
*                (RN) = REGISTER NUMBER.
*
*         CALLS  AMR, CMI.


          PURGMAC READMR

 READMR   MACRO  A,PAC,R,S
          MACREF  READMR
 .R       IFC    NE,$R$$
          LDK    R
          STD    RN
 .R       ENDIF
 .P       IFC    EQ,$PAC$$
          LDD    EC
 .P       ELSE
          LDM    PAC
 .P       ENDIF
          LMC    MRRD
          RJM    AMR
 .S       IFC    NE,$S$$
          LDN    S
 .S       ENDIF
          IAM    A,MR
          RJM    CMI         CLEAR INTERLOCK
 READMR   ENDM
 WRITMR   SPACE  4,15
**        WRITMR - WRITE MAINTENANCE REGISTER.
*
*         WRITMR A,PAC,REG,S
*
*         ENTRY  *A* = ADDRESS OF BUFFER OF REGISTER DATA.
*                *PAC* = ADDRESS OF PORT ACCESS CODE FOR DESIRED
*                   ELEMENT.  *EC* IS USED IF PARAMETER OMITTED.
*                *REG* = REGISTER NUMBER.  ASSUMED TO BE 10.
*                   NUMBER IS OBTAINED FROM DIRECT CELL *RN*.
*                *S* = SIZE OF REGISTER IN WORDS.  ASSUMED TO BE 10.
*
*         EXIT   DATA FROM (A - A+S-1) WRITTEN TO REGISTER.
*                (RN) = REGISTER NUMBER.
*
*         CALLS  AMR, CMI.


          PURGMAC WRITMR

 WRITMR   MACRO  A,PAC,R,S
          MACREF WRITMR
 .R       IFC    NE,$R$$
          LDK    R
          STD    RN
 .R       ENDIF
 .P       IFC    NE,$PAC$$
          LDM    PAC
 .P       ELSE
          LDD    EC
 .P       ENDIF
          LMC    MRWT
          RJM    AMR
 .S       IFC    NE,$S$$
          LDN    S
 .S       ENDIF
          OAM    A,MR
          RJM    WCC         WAIT FOR COMPLETE AND CHECK *SS* (FOR S0)
 WRITMR   ENDM
          SPACE  4
          ENDX
