For moving sprite memory around - 79 bytes (0.4%)


§1. Used when copying sprite data.

 Copy tempStoreDE/DF bytes from tempStoreDC/DD to tempStoreDA/DB
 This works if the blocks overlap, but only if DA/DB >= DC/DD
.blockCopyMemoryIncrementing = $8d83
    LDY #0                                              
.loopCopyBytesInc = $8d85
    LDA (.vduTempStoreDC),Y                             }
    STA (.vduTempStoreDA),Y                             } copy byte
    JSR .incTempStoreDADB                               
    JSR .incTempStoreDCDD                               

    LDA .vduTempStoreDE                                 }
    BNE +                                               }
    DEC .vduTempStoreDF                                 } DE/DF -= 1
+                                                       }
    DEC .vduTempStoreDE                                 }

    LDA .vduTempStoreDE                                 
    ORA .vduTempStoreDF                                 
    BNE .loopCopyBytesInc                               if (DE/DF != 0) then branch

    RTS                                                 

§2. Used when copying sprite data.

 Copy tempStoreDE/DF bytes from tempStoreDC/DD to tempStoreDA/DB
 This works if the blocks overlap, but only if DA/DB <= DC/DD
.blockCopyMemoryDecrementing = $8d9e
    CLC                                                 }
    LDA .vduTempStoreDE                                 }
    ADC .vduTempStoreDA                                 }
    STA .vduTempStoreDA                                 } DA/DB += DE/DF
    LDA .vduTempStoreDF                                 }
    ADC .vduTempStoreDB                                 }
    STA .vduTempStoreDB                                 }

    LDA .vduTempStoreDE                                 }
    ADC .vduTempStoreDC                                 }
    STA .vduTempStoreDC                                 } DC/DD += DE/DF
    LDA .vduTempStoreDF                                 }
    ADC .vduTempStoreDD                                 }
    STA .vduTempStoreDD                                 }

    LDY #0                                              
.loopCopyBytesDec = $8db9
    JSR .decTempStoreDADB                               
    JSR .decTempStoreDCDD                               

    LDA (.vduTempStoreDC),Y                             }
    STA (.vduTempStoreDA),Y                             } copy byte

    LDA .vduTempStoreDE                                 }
    BNE +                                               }
    DEC .vduTempStoreDF                                 } DE/DF -= 1
+                                                       }
    DEC .vduTempStoreDE                                 }

    LDA .vduTempStoreDE                                 
    ORA .vduTempStoreDF                                 
    BNE .loopCopyBytesDec                               if (DE/DF != 0) then branch (loop
                                                        back)
    RTS