MEMMOVE
         PLA
         STA   RETADR
         PLA
         STA   RETADR+1
         PLA
         STA   :MVELEN
         PLA
         STA   :MVELEN+1
         PLA
         STA   ADDR2      
         PLA
         STA   ADDR2+1
         PLA
         STA   ADDR1
         PLA
         STA   ADDR1+1
         LDA   ADDR2      ;CALC DEST-SRC
         SEC
         SBC   ADDR1
         TAX
         LDA   ADDR2+1
         SBC   ADDR1+1    
                          
         TAY
         TXA   
         CMP   :MVELEN
         TYA
         SBC   :MVELEN+1
         BCS   :DOLEFT    
         JSR   :MVERHT
         JMP   :EXIT
:DOLEFT
         JSR   :MVELEFT
:EXIT
         JMP   :MREXIT
:MVELEFT
         LDY   #0         
         LDX   :MVELEN+1  
         BEQ   :MLPART    
:MLPAGE
         LDA   (ADDR1),Y
         STA   (ADDR2),Y  ;MOVE ONE BYTE
         INY              
         BNE   :MLPAGE    
         INC   ADDR1+1    
         INC   ADDR2+1    
         DEX              
         BNE   :MLPAGE    
                          
:MLPART
         LDX   :MVELEN    
         BEQ   :MLEXIT    
                          
                          
:MLLAST
         LDA   (ADDR1),Y
         STA   (ADDR2),Y  
         INY              
         DEX              
         BNE   :MLLAST    
:MLEXIT
         JMP   :MREXIT
:MVERHT
         LDA   :MVELEN+1
         CLC
         ADC   ADDR1+1
         STA   ADDR1+1    ;POINT TO LAST P OF SRC
         LDA   :MVELEN+1
         CLC
         ADC   ADDR2+1
         STA   ADDR2+1    
         LDY   :MVELEN    ;GET LENGTH OF LAST PAGE
         BEQ   :MRPAGE    
:MR0
         DEY              
         LDA   (ADDR1),Y
         STA   (ADDR2),Y  
         CPY   #0
         BNE   :MR0       
:MRPAGE
         LDX   :MVELEN+1  
         BEQ   :MREXIT    
:MR1
         DEC   ADDR1+1    
         DEC   ADDR2+1    
:MR2
         DEY              
         LDA   (ADDR1),Y
         STA   (ADDR2),Y  
         CPY   #0
         BNE   :MR2       
         DEX
         BNE   :MR1       
:MREXIT
         LDA   RETADR+1
         PHA
         LDA   RETADR
         PHA
         RTS
:MVELEN  DS    2
