          EJECT
*         CTEXT  CTP$DFT_REWRITE_CM_ERROR
*
*         THIS DECK CONTAINS ROUTINES WHICH REWRITE SINGLE
*         BIT MEMORY ERRORS.
*         IF HCM$ IS DEFINED THEN SPECIAL CODE FOR THE 960 WILL
*         BE ASSEMBLED WHICH WILL NOT REWRITE ERRORS ABOVE MEMORY BOUNDS.
 REW      SPACE  4,10
**        REW - REWRITE SINGLE BIT ERRORS.
*
*         ENTRY  (SBER - SBER+1) = RMA OF ADDRESS TO REWRITE.
*
*         USES   W2, W3, RS - RS+2, T1, T2, T5 - T6.
*
*         CALLS  CLR, SPB, STA.


          ROUTINE REW

          IF     DEF,HCM$
          READMR RDATA,CMCC,MBRG
          LDML   SBER+1
          SHN    -11         STRIP OFF LOWER 9 BITS
          STDL   T1
          LDM    SBER
          LPC    0#1FF
          SHN    7
          LMDL   T1
          STDL   T1          SAVE LOWER VALUE OF ERROR ADDRESS
          LDM    SBER
          SHN    -11
          STD    T2          SAVE UPPER VALUE OF ERROR ADDRESS
          LDM    RDATA+7     LOWER BYTE OF BOUNDS REGISTER
          STD    T3
          LDM    RDATA+6     MIDDLE BYTE OF BOUNDS REGISTER
          SHN    10
          LMDL   T3
          STDL   T3
          LDM    RDATA+5     UPPER BYTE OF BOUNDS REGISTER
          LPN    7
          STD    T4
          LDDL   T2
          SBDL   T4
          ZJN    REW1        IF TO CONTINUE COMPARISON
          PJP    REWX        IF ERROR ADDRESS ABOVE BOUNDS, DO NOT REWRITE
          UJN    REW2        ERROR ADDRESS BELOW BOUNDS, REWRITE

 REW1     LDDL   T1
          SBDL   T3
          PJP    REWX        IF ERROR ADDRESS ABOVE BOUNDS, DO NOT REWRITE
          ENDIF
 REW2     LDML   SBER
          STDL   W2
          LDML   SBER+1      LOWER R
          STDL   W3
          RJM    STA
          STD    RS
          SRD    RS+1
          RJM    SPB         SET OS BOUNDS
          LDN    CM
          RJM    CLR         CLEAR LOCK WORD
          IF    -DEF,HCM$
          RJM    DBC         DISABLE BOUNDS CHECKING
          ENDIF
          LRD    RS+1
          LDD    RS
          ADC    RR
          RDSL   CM          READ AND SET LOCK WITH INTERLOCK WORD
          IF    -DEF,HCM$
          RJM    EBC         ENABLE BOUNDS CHECKING
          ENDIF
          LRD    DP+1
          RJM    SPB         SET PP BOUNDS
          LJM    REWX        RETURN

*         END    CTP$DFT_REWRITE_CM_ERROR
