*COMDECK  COMCMVE            MOVE BLOCK OF DATA.                         COMCMVE
 MVE      CTEXT  COMCMVE - MOVE BLOCK OF DATA.                           COMCMVE
 MVE      SPACE  4,10                                                    COMCMVE
          IF     -DEF,QUAL$,1                                            COMCMVE
          QUAL   COMCMVE                                                 COMCMVE
          BASE   D                                                       COMCMVE
*         COMMENT COPYRIGHT CONTROL DATA CORPORATION. 1970, 1978.        COMCMVE
 MVE      SPACE  4,10                                                    COMCMVE
***       MVE - MOVE BLOCK OF DATA.                                      COMCMVE
*                                                                        COMCMVE
*         G. R. MANSFIELD.   70/10/09.                                   COMCMVE
*         R. E. TATE.        73/11/04.                                   COMCMVE
* 
*         ******************************************************* 
*         * 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.                       * 
*         ******************************************************* 
* 
*                                                                        COMCMVE
*         MVE MOVES A SPECIFIED BLOCK OF DATA TO A SPECIFIED             COMCMVE
*         LOCATION.                                                      COMCMVE
 MVE      SPACE  4,10                                                    COMCMVE
***       MVE - MOVES A BLOCK OF DATA. GIVEN A SOURCE                    COMCMVE
*         ADDRESS, WORD COUNT, AND DESTINATION ADDRESS, MVE MOVES        COMCMVE
*         THE DATA FROM SOURCE ADDRESS THROUGH (SOURCE ADDRESS +         COMCMVE
*         WORD COUNT - 1) TO DESTINATION ADDRESS THROUGH                 COMCMVE
*         (DESTINATION ADDRESS + WORD COUNT - 1).  THE MOVE MAY          COMCMVE
*         BE IN EITHER DIRECTION.                                        COMCMVE
*                                                                        COMCMVE
*         NOTE-  UPWARD MOVE MEANS TOWARD RA.                            COMCMVE
*                                                                        COMCMVE
*         ENTRY  (X1) = WORD COUNT.                                      COMCMVE
*                (X2) = SOURCE ADDRESS.                                  COMCMVE
*                (X3) = DESTINATION ADDRESS.                             COMCMVE
*                (B1) = 1.                                               COMCMVE
*                                                                        COMCMVE
*         EXIT   NONE.                                                   COMCMVE
*                                                                        COMCMVE
*         USES   X - 1, 2, 3, 4, 6, 7.                                   COMCMVE
*                B - 7.                                                  COMCMVE
*                A - 2, 4, 6, 7.                                         COMCMVE
*                                                                        COMCMVE
*         CALLS  NONE.                                                   COMCMVE
                                                                         COMCMVE
                                                                         COMCMVE
*         COMPARE MOVE UNIT BUFFER AREA/PRESET.                          COMCMVE
*         MVEB IS READ UP AND THEN RETURN JUMPED TO IN ORDER TO VOID     COMCMVE
*         THE INSTRUCTION STACK.  LATER MVEB IS USED FOR THE CMU         COMCMVE
*         DESCRIPTOR WORD.                                               COMCMVE
                                                                         COMCMVE
 MVE11    BSS    0           ENTRY FOR PRESET                            COMCMVE
 MVEB     IX4    X2-X3       CHECK DIRECTION OF MOVE  (NO CMU)           COMCMVE
          MX7    59                                                      COMCMVE
          EQ     MVE13                                                   COMCMVE
                                                                         COMCMVE
 MVEC     BX7    X2          CHECK IF CMU AVAILABLE (BUFFER AREA FWA)    COMCMVE
          SA2    RA.CMU                                                  COMCMVE
          PL     X2,MVE12    IF NO CMU                                   COMCMVE
          SA4    MVED                                                    COMCMVE
 MVE12    BX6    X4                                                      COMCMVE
          LX2    X7          RESTORE X2                                  COMCMVE
          SA6    MVEA                                                    COMCMVE
          RJ     *           VOID INSTRUCTION STACK.
          EQ     MVE1        RESTART LOOP                                COMCMVE
                                                                         COMCMVE
 MVED     IX4    X2-X3       CHECK DIRECTION OF MOVE (CMU)               COMCMVE
          BX7    X1          SET WORD COUNT                              COMCMVE
          BX1    X0          SAVE X0                                     COMCMVE
          LX2    30                                                      COMCMVE
                                                                         COMCMVE
*         DETERMINE MOVE DIRECTION.                                      COMCMVE
                                                                         COMCMVE
 MVE13    BX6    -X7*X1                                                  COMCMVE
          IX1    X1-X6       REDUCE WORD COUNT TO EVEN NUMBER            COMCMVE
          PL     X4,MVE15    IF MOVE UP                                  COMCMVE
                                                                         COMCMVE
*         BEGIN DOWNWARD MOVE.                                           COMCMVE
                                                                         COMCMVE
          ZR     X6,MVE14    IF WORD COUNT EVEN                          COMCMVE
          SB7    X1                                                      COMCMVE
          SA4    X2+B7       MOVE INITIAL WORD                           COMCMVE
          BX6    X4                                                      COMCMVE
          SA6    X3+B7                                                   COMCMVE
 MVE14    IX2    X2+X1                                                   COMCMVE
          IX3    X3+X1                                                   COMCMVE
          SB7    -2                                                      COMCMVE
          EQ     MVE16                                                   COMCMVE
                                                                         COMCMVE
*         BEGIN UPWARD MOVE.                                             COMCMVE
                                                                         COMCMVE
 MVE15    SB7    -2          UPWARD MOVE                                 COMCMVE
          SX2    X2+B7                                                   COMCMVE
          SX3    X3+B7                                                   COMCMVE
          SB7    B1+B1                                                   COMCMVE
          ZR     X6,MVE16    IF WORD COUNT EVEN                          COMCMVE
          SA4    X2+B7       MOVE INITIAL WORD                           COMCMVE
          IX2    X2+X6                                                   COMCMVE
          BX7    X4                                                      COMCMVE
          SA7    X3+B7                                                   COMCMVE
          IX3    X3+X6                                                   COMCMVE
                                                                         COMCMVE
*         INITIALIZE MOVE LOOP.                                          COMCMVE
                                                                         COMCMVE
 MVE16    ZR     X1,MVE=     IF MOVE COMPLETE, RETURN                    CPSA104
          SA2    X2+B7       MOVE FIRST 2 WORDS                          COMCMVE
          SA4    A2+B1                                                   COMCMVE
          BX6    X2                                                      COMCMVE
          LX7    X4                                                      COMCMVE
          SA6    X3+B7                                                   COMCMVE
          SA7    A6+B1                                                   COMCMVE
          SX3    B1+B1                                                   COMCMVE
          IX1    X1-X3                                                   COMCMVE
          ZR     X1,MVE=     IF MOVE COMPLETE, RETURN                    CPSA104
          SA2    A2+B7       NEXT 2 WORDS                                COMCMVE
          SA4    A4+B7                                                   COMCMVE
                                                                         COMCMVE
*         MOVE LOOP.                                                     COMCMVE
                                                                         COMCMVE
 MVE17    BX6    X2                                                      COMCMVE
          SA2    A2+B7                                                   COMCMVE
          LX7    X4                                                      COMCMVE
          SA4    A4+B7                                                   COMCMVE
          IX1    X1-X3                                                   COMCMVE
          NO                                                             COMCMVE
          SA6    A6+B7                                                   COMCMVE
          SA7    A7+B7                                                   COMCMVE
          NZ     X1,MVE17                                                COMCMVE
                                                                         COMCMVE
 MVEE     BSS    0           END OF CMU BUFFER AREA                      COMCMVE
 MVELL    EQU    MVEE-MVEC   NUMBER OF WORDS IN BUFFER                   COMCMVE
                                                                         COMCMVE
 MVE=     SUBR               ENTRY/EXIT                                  COMCMVE
 MVEA     BSS    0                                                       COMCMVE
 MVE1     SA4    MVEB        INITIALIZE FOR CMU                          COMCMVE
          RJ     MVE11                                                   COMCMVE
*         IX4    X2-X3       CHECK DIRECTION OF MOVE (NO CMU)            COMCMVE
*         MX7    59          (NO CMU)                                    COMCMVE
*         EQ     MVE13       (NO CMU)                                    COMCMVE
*                                                                        COMCMVE
*         IX4    X2-X3       CHECK DIRECTION OF MOVE (CMU)               COMCMVE
*         BX7    X1          (CMU)                                       COMCMVE
*         BX1    X0          SAVE X0 (CMU)                               COMCMVE
*         LX2    30          (CMU)                                       COMCMVE
                                                                         COMCMVE
*         MOVE DATA WITH CMU.                                            COMCMVE
                                                                         COMCMVE
          ZR     X7,MVE=     IF NO DATA TO MOVE, RETURN                  CPSA104
          SX6    X7-819                                                  COMCMVE
          BX0    X4                                                      COMCMVE
          NG     X4,MVE2     IF MOVE DOWNWARD                            COMCMVE
          BX0    -X4                                                     COMCMVE
 MVE2     IX0    X0+X7                                                   COMCMVE
          BX6    X0*X6                                                   COMCMVE
          PL     X6,MVE3     IF BLOCK TOO LONG FOR 1 MOVE OR BLOCKS LAP  COMCMVE
          BX0    X7          SET UP FOR 1 MOVE                           COMCMVE
          BX2    X2+X3                                                   COMCMVE
          BX7    X7-X7       SET TO FORCE EXIT                           COMCMVE
          MX4    -4                                                      COMCMVE
          SB7    MVE9                                                    COMCMVE
          EQ     MVE10                                                   COMCMVE
                                                                         COMCMVE
 MVE3     SX6    MVEC        SET INTERMEDIATE BUFFER ADDRESS             COMCMVE
          NG     X4,MVE6     IF MOVE DOWNWARD                            COMCMVE
                                                                         COMCMVE
*         MOVE UPWARD.                                                   COMCMVE
                                                                         COMCMVE
          BX2    X2+X6                                                   COMCMVE
          LX6    30                                                      COMCMVE
          BX3    X3+X6                                                   COMCMVE
 MVE4     BX0    X7                                                      COMCMVE
          SX7    X7-MVELL    DECREMENT WORD COUNT                        COMCMVE
          MX4    -4                                                      COMCMVE
          NG     X7,MVE5     IF LAST BLOCK TO MOVE                       COMCMVE
          SX0    MVELL                                                   COMCMVE
 MVE5     SB7    *+1         SET TO RETURN HERE                          COMCMVE
          EQ     MVE10                                                   COMCMVE
          IM     MVEB                                                    COMCMVE
          SB7    X7                                                      COMCMVE
          BX0    X1          RESTORE X0                                  COMCMVE
          LT     B7,B1,MVE=  IF MOVE COMPLETE, RETURN                    CPSA104
          SX4    -MVELL      UPDATE ADDRESSES                            COMCMVE
          IX3    X3-X4                                                   COMCMVE
          LX4    30                                                      COMCMVE
          IX2    X2-X4                                                   COMCMVE
          EQ     MVE4                                                    COMCMVE
                                                                         COMCMVE
*         MOVE DOWNWARD.                                                 COMCMVE
                                                                         COMCMVE
 MVE6     LX6    30          SET LAST WORD ADDRESSES OF DATA AREAS       COMCMVE
          BX6    X7+X6                                                   COMCMVE
          IX3    X3+X6                                                   COMCMVE
          LX6    30                                                      COMCMVE
          IX2    X2+X6                                                   COMCMVE
 MVE7     SX6    MVELL                                                   COMCMVE
          SX0    X7                                                      COMCMVE
          IX7    X7-X6                                                   COMCMVE
          MX4    -4                                                      COMCMVE
          NG     X7,MVE8     IF LAST BLOCK TO MOVE                       COMCMVE
          BX0    X6                                                      COMCMVE
 MVE8     BX6    X0          ADJUST DESTINATION AND SOURCE ADDRESSES     COMCMVE
          IX3    X3-X0                                                   COMCMVE
          LX6    30                                                      COMCMVE
          IX2    X2-X6                                                   COMCMVE
          SB7    *+1         SET TO RETURN HERE                          COMCMVE
          EQ     MVE10                                                   COMCMVE
          IM     MVEB        MOVE DATA TO DESTINATION BUFFER             COMCMVE
 MVE9     SB7    X7                                                      COMCMVE
          BX0    X1          RESTORE X0                                  COMCMVE
          LT     B7,B1,MVE=  IF MOVE COMPLETE, RETURN                    CPSA104
          EQ     MVE7        LOOP                                        COMCMVE
                                                                         COMCMVE
*         SETUP MOVE WORD.                                               COMCMVE
*         (X0) = NUMBER OF WORDS TO MOVE.                                COMCMVE
*         (X4) = 56 BIT MASK.                                            COMCMVE
                                                                         COMCMVE
 MVE10    LX6    X0,B1       10 * WORD COUNT = CHARACTER COUNT           COMCMVE
          LX0    3                                                       COMCMVE
          IX6    X0+X6                                                   COMCMVE
          BX0    -X4*X6      EXTRACT LOWER PORTION                       COMCMVE
          BX4    X4*X6       EXTRACT UPPER PORTION                       COMCMVE
          LX0    26                                                      COMCMVE
          LX4    48-4                                                    COMCMVE
          BX0    X4+X0                                                   COMCMVE
          BX6    X2+X0                                                   COMCMVE
          SA6    MVEB        STORE FIRST DESCRIPTOR WORD                 COMCMVE
          BX6    X3+X0                                                   COMCMVE
          IM     MVEB        MOVE DATA TO INTERMEDIATE BUFFER            COMCMVE
          SA6    A6          STORE SECOND DESCRIPTOR WORD                COMCMVE
          JP     B7                                                      COMCMVE
 MVE      SPACE  4,10                                                    COMCMVE
          BASE   *                                                       COMCMVE
 QUAL$    IF     -DEF,QUAL$                                              COMCMVE
          QUAL   *                                                       COMCMVE
 MVE=     EQU    /COMCMVE/MVE=                                           COMCMVE
 QUAL$    ENDIF                                                          COMCMVE
 MVE      ENDX                                                           COMCMVE
