*COMDECK  COMCRSR            RESTORE REGISTERS.                          COMCRSR
 RSR      CTEXT  COMCRSR - RESTORE REGISTERS.                            COMCRSR
 RSR      SPACE  4,10                                                    COMCRSR
          IF     -DEF,QUAL$,1                                            COMCRSR
          QUAL   COMCRSR                                                 COMCRSR
          BASE   D                                                       COMCRSR
*         COMMENT COPYRIGHT CONTROL DATA CORPORATION. 1978.              COMCRSR
 RSR      SPACE  4,10                                                    COMCRSR
***       RSR - RESTORE ALL REGISTERS.                                   COMCRSR
*                                                                        COMCRSR
*         AUTHOR UNKNOWN.    CIRCA 1971.                                 CPSA104
*         P. C. TAM          77/07/05.                                   COMCRSR
* 
*         ******************************************************* 
*         * THIS COMMON DECK IS PART OF THE COMMON COMMON DECKS * 
*         * RESIDING ON THE COMPASS PROGRAM LIBRARY, AND BEING  * 
*         * MAINTAINED BY THE COMPASS PROJECT.  ANY CHANGES     * 
*         * REQUIRED SHOULD BE DIRECTED TO THE COMPASS PROJECT  * 
*         * THROUGH THE PROPER PROCEDURE.                       * 
*         ******************************************************* 
* 
*                                                                        COMCRSR
*         RSR RESTORES B, A, AND X REGISTERS FROM A SAVE AREA.           COMCRSR
 RSR      SPACE  4,10                                                    COMCRSR
***       RSR RESTORES B, A, AND X REGISTERS FROM A SPECIFIED REGISTER   COMCRSR
*         SAVE AREA. THE FORMAT OF THE REGISTERS IN THE SAVE AREA IS -   COMCRSR
*         B0, B1, ..., B7, A0, A1, ..., A7, X0, X1, ..., X7.             COMCRSR
*         EACH REGISTER OCCUPIES A FULL WORD WITH B AND A REGISTER       COMCRSR
*         VALUES IN BITS 17-0.                                           COMCRSR
*                                                                        COMCRSR
*         ENTRY  (X1) = ADDRESS OF REGISTER SAVE AREA.                   COMCRSR
*                                                                        COMCRSR
*         EXIT   ALL REGISTERS SET TO THE CONTENT OF THE REGISTER        COMCRSR
*                SAVE AREA.                                              COMCRSR
*                                                                        COMCRSR
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.                             COMCRSR
*                B - 1, 2, 3, 4, 5, 6, 7.                                COMCRSR
*                A - 0, 1, 2, 3, 4, 5, 6, 7.                             COMCRSR
*                                                                        COMCRSR
*         CALLS  NONE.                                                   COMCRSR
                                                                         COMCRSR
                                                                         COMCRSR
 SAVEB    EQU    0                                                       COMCRSR
 SAVEA    EQU    8                                                       COMCRSR
 SAVEX    EQU    16                                                      COMCRSR
 RSR      SPACE  4,10                                                    COMCRSR
 RSR      SUBR               ENTRY/EXIT                                  COMCRSR
          IF     -DEF,B1=1,1                                             COMCRSR
          SB1    1                                                       COMCRSR
                                                                         COMCRSR
*         SET UP FINAL -B- REGISTERS RESTORE AT (RSR4) ET SEQ.           COMCRSR
                                                                         COMCRSR
          SB7    X1+         (B7) = FWA OF REGISTER SAVE AREA            COMCRSR
          MX4    -18                                                     COMCRSR
          SA1    B7+SAVEB+7  (X1) = SAVED (B7)                           COMCRSR
          BX5    X4                                                      COMCRSR
          LX4    30                                                      COMCRSR
          SB4    4                                                       COMCRSR
          BX0    X4*X5       (X0) = 77770000007777000000B                COMCRSR
                                                                         COMCRSR
*         SET UP RESTORE B REGISTER INSTRUCTIONS.                        COMCRSR
                                                                         COMCRSR
 RSR2     SA2    A1-B1       (X2) = SAVED (B.N-1)                        COMCRSR
          SA3    RSR4+B4-1                                               COMCRSR
          BX1    -X5*X1                                                  COMCRSR
          SB4    B4-B1                                                   COMCRSR
          BX2    -X5*X2                                                  COMCRSR
          LX1    30                                                      COMCRSR
          BX3    X0*X3                                                   COMCRSR
          IX6    X1+X2                                                   COMCRSR
          BX7    X6+X3       (X7) = 30/SB.N B6+K, 30/SB.N-1 B6+K         COMCRSR
          SA7    A3                                                      COMCRSR
          SA1    A2-B1       (X1) = SAVED (B.N)                          COMCRSR
          NZ     B4,RSR2     IF STILL MORE B REGISTERS TO GO             COMCRSR
                                                                         COMCRSR
*         THE MOST LIKELY CANDIDATE FOR THE DANGER DISCUSSED IN THE      COMCRSR
*         NEXT PARAGRAPH IS THE SYSTEM COMMUNICATION CELL (RA.MTR).      COMCRSR
*         ACCORDINGLY, WE WAIT FOR IT TO CLEAR BEFORE PROCEEDING.        COMCRSR
                                                                         COMCRSR
          SA2    B7+SAVEA+6  (X2) = SAVED (A6)                           COMCRSR
 RSR3     SA1    RA.MTR                                                  COMCRSR
          NZ     X1,RSR3     IF (RA.MTR) NOT CLEAR                       COMCRSR
                                                                         COMCRSR
*         A BIT OF CARE IS SPENT ON RESTORATION OF (A6) AND (A7).        COMCRSR
*         WE WISH TO AVOID HAVING THE CONTENTS OF THE WORD THAT THE      COMCRSR
*         STORE REGISTER IS POINTING TO GET CHANGED (I.E. BY A PP)       COMCRSR
*         WHILE WE ARE RESTORING (A6) OR (A7). ABOUT THE ONLY THING      COMCRSR
*         THAT CAN BE DONE TO MINIMIZE THIS POSSIBILITY IS TO GET THE    COMCRSR
*         LOAD AND THE STORE AS CLOSE TOGETHER AS POSSIBLE. BY KEEPING   COMCRSR
*         THEM IN THE SAME WORD, WE HAVE AT LEAST ENSURED THAT WE WILL   COMCRSR
*         NOT BE EXCHANGED AFTER THE LOAD BUT BEFORE THE STORE.          COMCRSR
*         BARRING DELAYS IN THE HOPPER, THIS SHOULD REDUCE THE DANGER    COMCRSR
*         PERIOD TO A FEW MINOR CYCLES.                                  COMCRSR
                                                                         COMCRSR
          SA3    A2+B1       (X3) = SAVED (A7)                           COMCRSR
          RJ     *+1         VOID INSTRUCTION STACK 
          CON    0
 +        SA4    X2-0                                                    COMCRSR
          BX6    X4                                                      COMCRSR
          SA6    A4-B0       RESTORE (A6)                                COMCRSR
 +        SA5    X3-0                                                    COMCRSR
          BX7    X5                                                      COMCRSR
          SA7    A5-B0       RESTORE (A7)                                COMCRSR
                                                                         COMCRSR
*         RESTORE (X6), (X7).                                            COMCRSR
                                                                         COMCRSR
          SA1    B7+SAVEX+6                                              COMCRSR
          SA4    A1+B1                                                   COMCRSR
          BX6    X1          RESTORE (X6)                                COMCRSR
          LX7    X4          RESTORE (X7)                                COMCRSR
          BX0    -X0-X0                                                  COMCRSR
          SB6    X0-0        (B6) = -0                                   COMCRSR
                                                                         COMCRSR
*         RESTORE (A0),(X0).                                             COMCRSR
                                                                         COMCRSR
          SA4    B7+SAVEA+0                                              COMCRSR
          SA5    B7+SAVEX+0                                              COMCRSR
          SA0    X4+B6                                                   COMCRSR
          BX0    X5                                                      COMCRSR
                                                                         COMCRSR
*         RESTORE (A) - 1,2,3,4.                                         COMCRSR
*                 (X) - 1,2,3,4.                                         COMCRSR
                                                                         COMCRSR
          ECHO   4,N=(1,2,3,4)                                           COMCRSR
          SA4    A4+B1       (X4) = SAVED (A.N)                          COMCRSR
          SA5    A5+B1       (X5) = SAVED (X.N)                          COMCRSR
          SA.N   X4+B6                                                   COMCRSR
          BX.N   X5                                                      COMCRSR
                                                                         COMCRSR
*         RESTORE (A5),(X5)-- THE ORIGINAL (X5) ARE BROKEN APART INTO    COMCRSR
*         (B1) THRU (B5) AS DISPLAYED BELOW. THIS ALLOWS US TO RESTORE   COMCRSR
*         (A5).                                                          COMCRSR
*         DISASSEMBLY IS FROM LEFT TO RIGHT, TOP TO BOTTOM.              COMCRSR
*         REASSEMBLY IS FROM RIGHT TO LEFT, BOTTOM TO TOP.               COMCRSR
*         5          4          3          2          1               55 COMCRSR
*         9          8          7          6          5              098 COMCRSR
*         .............................................................. COMCRSR
*         ++++++++++++                                                   COMCRSR
*             (B1)   ++++++++++++                                        COMCRSR
*                        (B2)   ++++++++++++                             COMCRSR
*                                   (B3)   ++++++++++++                  COMCRSR
*                                              (B4)   ++++++++++++++++++ COMCRSR
*         ++                                                 (B5)        COMCRSR
                                                                         COMCRSR
          SA5    A5+B1       (X5) = SAVED (X5)                           COMCRSR
          ECHO   2,N=(1,2,3)                                             COMCRSR
          UX5,B.N X5                                                     COMCRSR
          LX5    11                                                      COMCRSR
          UX5,B4 X5                                                      COMCRSR
          LX5    11+18                                                   COMCRSR
          SB5    X5+B6                                                   COMCRSR
          SA5    B7+SAVEA+5  (X5) = SAVED (A5)                           COMCRSR
          SA5    X5+B6       RESTORE (A5)                                COMCRSR
                                                                         COMCRSR
*         REASSEMBLE (X5).                                               COMCRSR
                                                                         COMCRSR
          SX5    B5+B6                                                   COMCRSR
          LX5    60-11-18                                                COMCRSR
          PX5    X5,B4                                                   COMCRSR
          ECHO   2,N=(3,2,1)                                             COMCRSR
          LX5    -11                                                     COMCRSR
          PX5    X5,B.N                                                  COMCRSR
                                                                         COMCRSR
*         RESTORE (B) - 0,1,2,3,4,5,6,7.                                 COMCRSR
                                                                         COMCRSR
 RSR4     BSS    0                                                       COMCRSR
          ECHO   2,U=(1,3,5,7),L=(0,2,4,6)                               COMCRSR
          SB.U   B6+*                                                    COMCRSR
          SB.L   B6+*                                                    COMCRSR
          EQ     RSRX        RETURN                                      COMCRSR
 RSR      SPACE  4,10                                                    COMCRSR
          BASE   *                                                       COMCRSR
 QUAL$    IF     -DEF,QUAL$                                              COMCRSR
          QUAL   *                                                       COMCRSR
 RSR      EQU    /COMCRSR/RSR                                            COMCRSR
 RSR=     EQU    /COMCRSR/RSR 
 QUAL$    ENDIF                                                          COMCRSR
 RSR      ENDX                                                           COMCRSR
          SPACE  4                                                       COMCRSR
