czyli małe code compo :)
poniższa procedura dekompresujaca RLE zajmuje 56 bajtów, uważam że krócej już nie można (nie chodzi o szybkość), ktoś jest innego zdania, czy moge już ogłosić sie mastahem ;)
dane ktory dekompresujemy skladaja sie z bajtow, a poszczegolne bity oznaczaja: bit7 = 0 oznacza dane nieskompresowane, pozostale bity (0..6) to liczba nieskompresowanych elementow +1 ktore wystepuja zaraz po tym bajcie, bit7 = 1 oznacza dane powtarzajace sie, bity 0..6 to liczba powtorzen +1 nastepnego bajtu
czyli cos w stylu Koali, proste jak drut
loop
jsr _src
cmp #0
bpl _stored
_rle
cmp #$ff
beq stop
ldy #($100-(_bpl-_lp1+2))&$FF
sty _bpl+1
_stored
and #$7f
tay
_lp0
jsr _src
_lp1
_dst sta $FFFF
inw _dst+1
dey
_bpl
bpl _lp0
ldy #($100-(_bpl-_lp0+2))&$FF
sty _bpl+1
jmp loop
_src lda $FFFF
inw _src+1
stop
rts
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C