Jeszcze nie implementowałem powyższej metody, ale wstępne rachunki wyglądają jakoś tak...:
Jest 6 klatek animacji.
Porównanie obecnej metody (ldi tylko gdy trzeba, ale skoki przez ret) z push/pop:
f00 | 2125 | 1842
f01 | 2286 | 2026
f02 | 2236 | 2005
f03 | 2236 | 2064
f04 | 1936 | 1961
f05 | 1207 | 1284
+ koszty setupu: dla pierwszej to ~72, dla drugiej jeszcze nie wiem, ale na pewno mniej.
Gdyby obecnie zastosowaną przeze mnie metodę rozwinąć (bez skoków, więc akurat w tym wypadku bez stosu) to od czasów dla niej trzeba by poodejmować ~160 cykli i wyszłoby takie porównanie:
f00 | 1975 | 1842
f01 | 2136 | 2026
f02 | 2076 | 2005
f03 | 2076 | 2064
f04 | 1786 | 1961
f05 | 1077 | 1284
Wniosek taki (o ile się nie walnąłem w rachunkach), że gdy sprajt jest rzadki to lepiej jest używać ldi, a tak to druga metoda daje pewne oszczędności, jednak wszystko kosztem pamięci... Jednak powinno się zmieścić i wtedy parę linii uda się uratować.
W sumie to okazuje się, że i push/pop można połączyć z tą kompresją ze skokami na ret...
ld sp, hl ; 6
pop bc ; 10
pop de ; 10
pop af ; 10
ld sp, ix ; 10
push af ; 11
push de ; 11
push bc ; 11
ld sp,iy
pop bc
add ix, bc ; 15
pop bc
add hl, bc ; 11
ret
i w sumie dochodzi "tylko" koszt ret...no i w sumie tego ld sp,iy.
Dzięki za kod:)