Cyklujac najbardziej zagniezczone petle mamy
loopp lda (ptr3),y ;5
sta (ptr2),y ;6
inc ptr3 ;5
inc ptr2 ;5
dex ;2
bne loopp ;3
26 cykli
oraz
rle sta (ptr2),y ;6
inc ptr2 ;5
dex ;2
bne rle ;3
16 cykli.
Dodatkowo zauwazylem, ze w mojej procce jest blad bo zapomnialem, ze iny tez ustawia bit N. Rozwiazaniem jest dodanie np lsr @ czyli
L lda $ffff,y ;4
lsr @ ;2
sta bufor_docelowy,y ;5
iny ;2
bcc L ;3
i mam 16 cykli zamiast 14 i moje obliczenia sredniego czasu zwiekszaja sie do 27 cykli (najmniej 18 cykli najwiecej 29) oczywisice pamietajac zeby dane byly przesuniete w lewo i konczacy znak miał ustawiony najmlodszy bit.
Reasumujac petlę ofsetującą masz bardzo dluga, a RLE jest identyczna. Nie wiem jak ulozy sie srednia, bo jest inna reprezentacja danych, ale chyba na moją korzysc :P
PS.: wydaje mi sie, ze
jest równoważne
wiem ze chciales skoczyc jesli najstarszy bit byl ustawiony ale tak sie nie da. (no i dodatkowo skaczac do rle jest ustawiony bit N i bedzie się krecilo troche dluzej :) ) Ale da sie samym lsr @ jesli bedzie sie inadzej pamietalo ten bajt w buforze.