*DECK MVBITS
          IDENT  T8.MVB 
          TITLE  ROUTINES MVBITS, STBITS
 MVBITS   TITLE  SUBROUTINE MVBITS - MOVE N BITS                        062560
*                                                                       062570
**    MVBITS - MOVE AN N-BIT FROM A SOURCE AREA TO A DESTINATION
*         AREA                                                          062590
*                                                                       062600
*         INPUT  -  B1 = 1                                              062610
*                   X1 = POINTER TO SOURCE                              062620
*                   X2 = NUMBER OF BITS TO MOVE                         062630
*                   X7 = POINTER TO DESTINATION                         062640
*                   B6 = RETURN ADDRESS                                 062650
*                                                                       062660
*         OUTPUT -  X1 = UPDATED SOURCE POINTER                         062670
*                   X7 = UPDATED DESTINATION POINTER                    062680
*                                                                       062690
*         PRESERVED --, --, --, --, --, --, --, --                      062700
*                   A0, --, A2, --, --, A5, A6, --                      062710
*                       B1, --, --, --, B5, B6, --                      062720
*                                                                       062730
*         TEMPORARY CELLS USED..  T.MPTR                                062740
*                                                                       062750
          SPACE  1
*CALL COM2
          SPACE  4                                                      062770
 MVBITS   SA7    T.MPTR      SAVE DESTINATION                           062780
          SB7    B6          SAVE RETURN ADDRESS                        062790
          BX5    X2          BIT COUNT (R)                              062800
*                                                                       062810
 MVB.1    SX2    60                                                     062820
          SB6    MVB.2                                                  062830
          IX0    X5-X2                                                  062840
          PL     X0,NXBITS   JP  R .GE. 60                              062850
          SX2    X5          USE R IF .LT. 60                           062860
          EQ     NXBITS                                                 062870
*                                                                       062880
 MVB.2    SA1    A7          DESTINATION POINTER                        062890
          ZR     X2,MVB.A    NO MORE SOURCE BITS                        062900
          SA7    A7          SAVE SOURCE POINTER                        062910
          IX5    X5-X2                                                  062920
          SB6    MVB.3                                                  062930
          EQ     STBITS                                                 062940
*                                                                       062950
 MVB.3    SA1    A1 
          ZR     X2,MVB.X    NO MORE DESTINATION FIELD, EXIT
          SA7    A1                                                     062980
          NZ     X5,MVB.1    JP IF MORE TO MOVE                         062990
*                                                                       063000
 MVB.X    SB6    B7          EXIT                                       063010
          JP     B7                                                     063020
*                                                                       063030
 MVB.A    SX2    60          OUT OF SOURCE, FILL DESTINATION WITH 0     063040
          SB6    MVB.5                                                  063050
          SX6    0                                                      063060
*                                                                       063070
 MVB.4    IX0    X5-X2       STORE ZEROES                               063080
          PL     X0,STBITS                                              063090
          SX2    X5                                                     063100
          EQ     STBITS                                                 063110
*                                                                       063120
 MVB.5    ZR     X2,MVB.3    EXIT IF NONE STORED
          IX5    X5-X2
          NZ     X5,MVB.4 
          SA1    A1          EXIT IF COUNT IS ZERO
          EQ     MVB.X
 STBITS   TITLE  SUBROUTINE STBITS - STORE N BITS                       063170
*                                                                       063180
**    STBITS - STORE INTO THE NEXT N BITS OF A DESTINATION AREA 
*         (0 .LE. N .LE. 60)                                            063200
*                                                                       063210
*         INPUT  -  B1 = 1                                              063220
*                   X1 = POINTER TO AREA                                063230
*                   X2 = NUMBER OF BITS TO STORE                        063240
*                   X6 = BITS TO STORE, RIGHT ADJUSTED                  063250
*                   B6 = RETURN ADDRESS                                 063260
*                                                                       063270
*         OUTPUT -  X7 = UPDATED POINTER WORD (ALSO IN X1)              063280
*                   X0 = N-BIT MASK                                     063290
*                                                                       063300
*         PRESERVED --, --, --, --, --, X5, X6, --                      063310
*                   A0, A1, A2 --, --, --, A5, A6, --                   063320
*                       B1, --, --, --, B5, B6, B7                      063330
*                                                                       063340
          SPACE  4                                                      063360
 STBITS   ZR     X2,STB.Z    ZERO BITS CASE                             063370
          SB2    X2-60       -(BITS NEEDED TO LEFT ADJUST X6)           063380
          SA3    X1          FIRST WORD TO STORE INTO                   063390
          AX1    18          USED BIT COUNT                             063400
          SB3    X1                                                     063410
          AX1    18          REMAINING BIT COUNT                        063420
          SB3    -B3         -U                                         063430
          IX4    X1-X2       NEW REMAINING COUNT                        063440
          PL     X4,STB.1                                               063450
          BX2    X1          OVERFLOW, ADJUST TO STORE ONLY             063460
          SX4    B0          RESIDUAL BITS
          NZ     X1,STB.1 
          SX7    -B3         RESIDUAL = 0, EXIT 
          SX1    A3 
          LX7    18                                                     063500
          BX1    X1+X7                                                  063510
 STB.Z    BX7    X1          ZERO BITS CASE JOINS HERE                  063520
          MX0    0                                                      063530
          JP     B6          RETURN                                     063540
*                                                                       063550
 STB.1    AX1    X6,B2       LEFT JUSTIFY DATA                          063560
          SB4    B3+60       60-U = BITS LEFT IN FIRST WORD             063570
          SB2    X2          N (TOTAL)                                  063580
          LE     B2,B4,STB.2                                            063590
          SB2    B4          =MIN(60-U,N) = ALL THAT GOES IN WORD 1     063600
 STB.2    SB2    B2-B1                                                  063610
          MX0    1                                                      063620
          AX3    X3,B3       =LX BY (U) 
          AX0    X0,B2       N1 BIT MASK
          BX3    -X0*X3                                                 063650
          SB2    B2+B1                                                  063660
          BX7    X1*X0                                                  063670
          BX7    X3+X7                                                  TB8   15
          LX7    X7,B4       60-U, RESTORE TO NORMAL ORIENTATION
          SA7    A3          RESTORE WORD TO STORAGE                    063700
          SB4    -B2                                                    063710
          SB2    X2+B4       =N-N1 = BITS TO GO INTO SECOND WORD        063720
          ZR     B2,STB.3    NONE                                       063730
*                                                                       063740
          SA3    A3+B1       DO SECOND WORD                             063750
          AX1    X1,B4       SHIFT DATA (N1) BITS TO LEFT 
          SB2    B2-B1                                                  063770
          MX0    1                                                      063780
          AX0    X0,B2       N2 BIT MASK
          BX3    -X0*X3                                                 063800
          BX1    X0*X1                                                  063810
          BX7    X1+X3                                                  TB8   17
          SA7    A3          STORE SECOND WORD                          063830
*                                                                       063840
 STB.3    SB2    X2          CLEAN UP                                   063850
          SX1    A3          WORD ADDRESS                               063860
          SB3    B2-B3       =N+U = NEW (U) VALUE                       063870
          SB2    B2-B1       N-1 (FOR N-BIT MASK)                       063880
          SB4    B3-60                                                  063890
          LX4    36          RESIDUAL BIT COUNT                         063900
          LT     B4,B0,STB.5  STILL IN FIRST WORD                       063910
          GT     B4,B0,STB.4  INTO SECOND WORD                          063920
          SX1    X1+1        FILLED UP FIRST WORD EXACTLY               063930
 STB.4    SB3    B4          USE U+N-60                                 063940
 STB.5    SX7    B3                                                     063950
          BX1    X1+X4       RESIDUAL + WORD ADDRESS                    063960
          LX7    18          USED BIT COUNT                             063970
          MX0    1                                                      063980
          BX7    X1+X7       NEW POINTER                                063990
          AX0    X0,B2       N-BIT MASK 
          BX1    X7                                                     064010
          JP     B6          EXIT                                       064020
          END 
