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