*DECK     MVE 
          IDENT  P.MVE
          SYSCOM B1 
          ENTRY  P.MVE
 MVE      SPACE  4,10 
 MVE      TITLE  MVE - MOVE BLOCK OF DATA.
          COMMENT PASCAL 6000 MOVE DATA ROUTINE.
          COMMENT COPYRIGHT (C) UNIVERSITY OF MINNESOTA - 1978. 
 MVE      SPACE  4,10 
***       MVE - MOVE BLOCK OF DATA. 
*         J. J. DRUMMOND.    78/10/01.
* BRING DOCUMENTATION UP TO CODING STANDARDS. 
 MVE      SPACE  4,10 
***       MVE - MOVE BLOCK OF DATA.  MOVES A BLOCK OF DATA FROM ONE 
*         LOCATION TO ANOTHER.  IF THE CMU IS AVAILABLE, IT IS USED 
*         OTHERWISE AN IN-STACK REGISTER MOVE LOOP IS EMPLOYED.  MVE
*         ASSUMES THERE ARE AT LEAST 8 WORDS TO BE MOVED. 
* 
*         ENTRY  (A1) = ADDRESS OF FIRST WORD TO BE MOVED.
*                (B1) = 1.
*                (B2) = ADDRESS OF FIRST WORD TO RECEIVE DATA.
*                (B7) = NUMBER OF WORDS TO BE MOVED (>7). 
*                (X1) = ((A1)). 
* 
*         EXIT   DATA BLOCK MOVED.
* 
*         USES   A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 2, 3, 7. 
*                X - ALL. 
* 
*         CALLS  NONE.
* 
*         MACROS NONE.
  
  
*CALL     COMSPAS 
  
  
  
  
 MVE4     LX1    30 
          SX6    819         MAXIMUM WORD TRANSFER SIZE 
          BX5    X1+X2       ADDRESSES
          SB3    X6 
          SX4    17B         4 BIT MASK 
          LX6    30 
          SX7    B3 
          SB2    MVEB        ADDRESS OF DESCRIPTOR WORD 
          BX7    X6+X7       ADDER
  
*         MOVE NEXT BLOCK OF DATA (CMU).
  
 MVE5     SX3    B7          NUMBER OF WORDS TO TRANSFER
          LE     B7,B3,MVE6  IF LESS THAN 819 WORDS TO MOVE 
          SX3    B3          SET LENGTH OF TRANSFER 
 MVE6     IX6    X3+X3       TIMES 2
          LX3    3           TIMES 8
          IX0    X6+X3       CC := NUMBER OF WORDS * 10 (CHAR COUNT)
          BX1    X4*X0       CC (LOWER) 
          BX0    -X4*X0      CC (UPPER) 
          LX1    26          POSITION CC (LOWER)
          LX0    48-4        POSITION CC (UPPER)
          BX3    X1+X0
          IX6    X3+X5       DESCRIPTOR WORD
          SB7    B7-B3       DECREMENT WORD COUNT 
          IX5    X5+X7       ADVANCE ADDRESSES
          SA6    B2          STORE DESCRIPTOR WORD
          IM     B2          MOVE WORDS 
          LE     B7,B0,P.MVE IF ALL DONE
          EQ     MVE5        CONTINUE 
  
 P.MVE    PS                 ENTRY/EXIT 
          SB3    A1+
          EQ     B2,B3,P.MVE IF ADDRESSES EQUAL - RETURN
 MVEA     SA5    CMUR        CHECK IF CMU AVAILABLE 
          RJ     MVEB        VOID STACK 
  
*MVEA     SA3    B2-B1       PREAMBLE CODE (NO CMU) 
*         SA2    A1+B1       PRE-LOAD 
*         BX7    X3 
*         SA7    A3          INITIALIZE A7
  
*MVEA     SX2    B2          PREAMBLE CODE (CMU)
*         SX1    A1 
*         EQ     MVE4        CONTINUE 
  
*         MOVE DATA WITH REGISTERS. 
  
          SB3    8           NUMBER OF WORDS MOVED IN LOOP
 MVE1     BX6    X1 
          LX7    X2 
          SA6    A7+B1
          SA7    A6+B1
          SA1    A2+B1
          SA2    A1+B1
          BX6    X1 
          LX7    X2 
          SA6    A7+B1
          SA7    A6+B1
          SB7    B7-B3       DECREMENT WORD COUNT 
          SA1    A2+B1
          SA2    A1+B1
          BX6    X1 
          LX7    X2 
          SA6    A7+B1
          SA7    A6+B1
          SA1    A2+B1
          SA2    A1+B1
          BX6    X1 
          LX7    X2 
          SA6    A7+B1
          SA7    A6+B1
          SA1    A2+B1
          SA2    A1+B1
          GE     B7,B3,MVE1  IF AT LEAST 8 MORE WORDS TO MOVE 
  
*         MOVE REMAINING WORDS (IF ANY).
  
 MVE2     ZR     B7,P.MVE    IF ALL DONE
          BX7    X1 
          SA7    A7+B1       STORE WORD 
          SA1    A1+B1       NEXT WORD
          SB7    B7-B1       DECREMENT COUNTER
          EQ     MVE2        CONTINUE 
  
 MVEB     BSS    1           CMU DESCRIPTOR WORD (AND TEMPORARY)
  
 MVE3     SX6    B1+
          LX5    1
          BX0    X6*X5       (0 IF NO CMU, 1 IF CMU)
          SA4    MVEC+X0     LOAD CORRECT PREAMBLE CODE 
          BX6    X4 
          SA6    MVEA 
          EQ     MVEA 
  
 MVEC     BSS    0
  
          LOC    MVEA 
  
 MVEA     SA3    B2-B1
          SA2    A1+B1       PRE-LOAD 
          BX7    X3 
          SA7    A3          INITIALIZE A7
  
          LOC    *O 
  
          LOC    MVEA 
  
 MVEA     SX2    B2          SET ADDRESSES
          SX1    A1 
          EQ     MVE4        CONTINUE 
  
          LOC    *O 
 MVE      SPACE  4
          END 
