1 Ostatnio edytowany przez xxl (2024-05-14 16:21:23)

Może nie najlepszy ale który jest najwydajniejszy bez względu na szbkość dekompresji lub bufory jakich potrzebuje.

Do testów wybrałem zwykły obrazek (w załączniku) rozmiar 7680 bajtów

rle: 2789
huffmunch: 2359
lz4: 2219 --- > decompressor for Atari: https://xxl.atari.pl/lz4-decompressor/
zpaq: 2189 (m -5)
FlashPack 3: 2174
Autogamy: 2148
pp: 2052 (Amiga PowerPacker)
LZSS Beeb: 2051
Bongo: 1891
ARJBETA mode 4: 1841 --- > decompressor for Atari: http://xxl.atari.pl/arj4-decompressor/
LZSS: 1839
lzsa: 1811 (lzsa.exe -f2 -r)
lzfse: 1810
ZX7: 1801 --- > decompressor for Atari: http://xxl.atari.pl/zx7-decompressor/
BitBuster: 1774 --- > decompressor for Atari: https://xxl.atari.pl/bitbuster-decompressor/
bz2: 1736
ARJBETA mode 7: 1657
apl: 1655  --- > decompressor for Atari: https://xxl.atari.pl/aplib-decompressor/
ZX0: 1625  --- > decompressor for Atari: https://xxl.atari.pl/zx0-decompressor/
def: 1,598  --- > decompressor for Atari:  https://github.com/pfusik/zlib6502
PackFire: 1581 (-t tiny) --- > decompressor for Atari: https://xxl.atari.pl/packfire-decompressor/
EXO: 1537 (exomizer raw -E)
Brotli: 1537
ZX5: 1532  --- > decompressor for Atari: https://xxl.atari.pl/zx5-decompressor/
zstandard: 1522
Lzip: 1519 (lzip -9)
LZMA (7z ultra): 1498
7z: 1453 ($ 7z a -t7z -m0=lzma -mx=9 -mfb=64 -mmf=bt4 -mlc=1 -mlp=0 -mpb=0)
PackFire: 1452 (-l large)
Shrinkler: 1412 (Shrinkler -d -p -9) --- > decompressor for Atari: https://xxl.atari.pl/shrinkler-decompressor/
UPKR: 1403 (upkr -9 -b --invert-continue-value-bit --simplified-prob-update) https://github.com/pfusik/upkr6502
paq8px: 1121


jeśli ktoś potrafi to wydajniej spakować np. ustawienia deflatera to proszę podać parametry

===========================
1. Grafika

conan.gfx    : 7680

LZ4          : 2219 
aPLib        : 1655 
ZX0          : 1625  
Deflate      : 1598  
PackFire Tiny: 1581
ZX5          : 1532  
Shrinkler NP : 1412 
UPKR           : 1403 


===========================
2. Binarki:

RiverRaid.ROM: 8192

LZ4          : 7414 
aPLib        : 6366
ZX5          : 6334 
ZX0          : 6313 
PackFire Tiny: 6284 
Deflate      : 6192 
Shrinkler NP : 6020 
UPKR          : 5953

 
Landscape.xex: 30653

LZ4          : 16934
PackFire Tiny: 13823
aPLib        : 13679
ZX0          : 13530
Deflate      : 13486
ZX5          : 13459
Shrinkler NP : 12764
UPKR          : 12473

===========================
3. Muzyka:
Post's attachments

conan.gfx 7.5 kb, liczba pobrań: 23 (od 2021-02-01) 

Landscape.xex 29.93 kb, liczba pobrań: 7 (od 2021-04-05) 

RiverRaid.rom 8 kb, liczba pobrań: 6 (od 2021-04-05) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

2 Ostatnio edytowany przez xxl (2021-02-01 18:35:57)

no i pojawil se nowy krol:

Shrinkler z Amigi.

Pakuje najefektywniej. przebija wszstko co pojawilo sie do tej pory - nawet na pc.


https://www.youtube.com/watch?v=uA0wZtktWv8

http://atari.pl/hsc/ad.php?i=1.

3

Pod Amigą jeszcze dobry był Turbo Imploder, lepiej zgniatał od PP i szybszy dekrancz był - ztcp.

4

ten Shrinkler to dzis chyba pozamiatal... jak narazie nie ma mocniejszego kompresora 7z z LZMA mu ulegl ...

http://atari.pl/hsc/ad.php?i=1.

5

przetestuj na jeszcze kilku innych plikach, aby przekonać się że w każdym przypadku jest lepszy, statystyka

a potem zacznij optymalizację dekompresora

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

6

no wlasnie sprawdzam :-) roznego rodzaju dane, binarki, grafike, tekst, muzyke... wszystko pakuje !!! znacznie !!! lepiej od kokurencji. podejrzana sprawa. jest jeszcze wersja no parity - jeszcze lepiej pakuje...

http://atari.pl/hsc/ad.php?i=1.

7

FlashPack 3: 2174
lzfse: 1810-nagłówki
bz2: 1736-nagłówki
LZMA (7z ultra): 1498

To gdzie ten kod rozpakowujący shrinklera?

https://www.youtube.com/watch?v=jofNR_WkoCE

8

dzieki, zaraz zaktualizuje na AAge


Shrinkler wersja no parity: 1412

dziwna sprawa... dlaczego PC kompresory nie daja rady jakiemus kranczerowi z Amigi?


kod udostepnie tylko troszke pooptmalizuje ;-) jak narazie ok. 350 bajtow ...

http://atari.pl/hsc/ad.php?i=1.

9

Zacząłem już LZFSE, ale z tego, co piszesz, nie warto kończyć. Lepiej Ci pomóc w optymalizacji unshrinklera. Na youtubie jest tak wolno, bo czyta po SIO?

xxl napisał/a:

LZMA (7z ultra): 1498
7z: 1453 ($ 7z a -t7z -m0=lzma -mx=9 -mfb=64 -mmf=bt4 -mlc=1 -mlp=0 -mpb=0)

To jest ten sam format i program. Ja po prostu kliknąłem "ultra" w GUIu, w dodatku mam starego 7-zipa (19.00).

https://www.youtube.com/watch?v=jofNR_WkoCE

10

ok. z $22C ramek mam juz $1F7  - sekunde szybciej ale ciagle wstyd.

niestety tak wolno... czyta z pamieci. duzo mnozenia 16bit x 16bit.

zrodlo dzis pojdzie na maila.

http://atari.pl/hsc/ad.php?i=1.

11

odkopałem paker do RIP-ów (LZSS) z roku 1998

nie ma szału ale 1839 bajtów nie jest źle

Post's attachments

rip_pack.7z 30.98 kb, liczba pobrań: 1 (od 2021-02-02) 

Tylko zalogowani mogą pobierać załączniki.
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

12

To jakieś kodowanie arytmetyczne żę tam są potrzebne mnożenia?

13

sprawdziłem dla bongo crunchera - słabiutko 1891

@swinkamor12: Amiga tak zresztą jak ST jest 32 bitowa bo procesor jest 32 bitowy, int w C jest 32 bitowy, a to po ilu bitach się komunikuje z resztą jest nieistotne.

14

juz jest $1EA ramek :-)

Bongo dodany.

kompresja jest bardzo podobna do... z mala roznica ;-) nie chce sie wyglupic bo delikatna roznica potrafi wszystko zmienic.

http://atari.pl/hsc/ad.php?i=1.

15

$1E8 ramek


Fox napisał/a:

Lepiej Ci pomóc w optymalizacji unshrinklera.

poszlo na maila

http://atari.pl/hsc/ad.php?i=1.

16 Ostatnio edytowany przez seban (2021-02-02 13:25:52)

a ten cały Shrinkler to nie jest zwykłe LZ77 w którym długości sekwencji i offsety są kodowane za pomocą drzewa Huffmana (dynamicznie dobranego podczas kompresji) zamiast prostego kodu prefiksowego (shanon-fanno, elias-gamma, etc.)?

17

no tak, jest podobnny (nie wiem czy lz77 modyfikuje drzewo bo ten tak)

http://atari.pl/hsc/ad.php?i=1.

18 Ostatnio edytowany przez seban (2021-02-03 09:14:45)

LZ77 "sobie", a to jak są kodowane sekwencje to już wymysł autora danego kompresora/formatu spakowanych danych ;-) Każdy może sobie w sumie nazywać to jak chce ;) równie dobrze można to nazwać LZMA czy jakkolwiek inaczej :) Tak z perspektywy czasu patrząc na to wszystko (w sensie wersji i odmian LZ77) i nad zastosowaniem Huffmana do kodowania len,offset zawsze mi wychodziło że miejsce potrzebne na przechowanie drzewa w przypadku Atari jest "zbyt dużym kosztem", i przy jakichś swoich eksperymentach wybierałem prostsze rozwiązania typu proste "kody prefiksowe", bo sądziłem że jest to lepszą drogą (do czego w owym czasie przekonał mnie PuCrunch czy exomizer).

No ale przyszedł Fox i postanowił zaimplementować "deflate" który to aktywnie korzysta z kodowania Huffmana :) (wcześniej Huffman-a zaimplementowanego na JIL widziałem tylko u Jiriego Bernasek-a w Super Packerze).

btw. jak patrzę na to jak Huffmana zaimplementowano w dekompresorze dla Shrinkler-a... muszę powiedzieć że patrząc na kod dla M68K jestem pod wrażeniem "kompaktowości" tegoż kodu :)

EDIT: ^^^ Przyjrzałem się trochę więcej/bardziej źródłom, to nie Huffman... ale wychodzi na to że użyty został Range Coding, czyli taka integer-based wersja kodowania arytmetycznego. Nie sądziłem że da się to dekompresować w sensownym czasie na 8-bit MCU (szczególnie że potrzebne jest mnożenie). Człowiek uczy się przez całe życie! :)

19

gdyby tak 30 lat temu loader file z magnetofonu uzywal takiej dekompresji i zamiast 10 minut gra ladowala by sie 2 minuty na 600 bodach ;-)

http://atari.pl/hsc/ad.php?i=1.

20 Ostatnio edytowany przez seban (2021-02-02 15:34:49)

wtedy królował "Zagęszczacz" Dariusza Rogozińskiego (emitowany w Radiokomputerze) oraz Turbo Copy 3/4 (używany przez piratów "lokalne studia komputerowe" :D O ile Zagęszczacz pozbywał się tylko zer, to Turbo Copy 3/4 używał nawet RLE ;-)

21

no i jest na sieci:

https://xxl.atari.pl/shrinkler-decompressor/

http://atari.pl/hsc/ad.php?i=1.

22 Ostatnio edytowany przez seban (2021-02-03 09:16:22)

Szybka akcja! Dzięki za realizację! Za badania i testy i za wnikanie w temat kompresji i za odnalezienie takich ciekawostek! :)

23

jakbym uzywal makrorozkazow jak ADW czy INW ktore zastepuja po 4 czy 6 linijek assemblera to ten kod bylby bardziej czytelny i dwa razy krotszy.

http://atari.pl/hsc/ad.php?i=1.

24

prawdę mówiąc to wolę taki kod (bez makr typu ADW, INW, etc.) Jest dla mnie bardziej czytelny... wiem że niektórzy się szybko do tego przyzwyczaili... ale ja nigdy nie potrafiłem jakoś z tego typu dobrodziejstw korzystać.

Jeżeli już pisze w ASM 6502 to preferuję tylko normalne mnemoniki bez tych pseudo-makr. Makra oczywiście tak, ale realizujące nieco bardziej złożone zadania, (np. open, close, bload).

Nie wiem skąd u mnie takie a nie inne preferencje, być może wzięły się one z tego, że w czasach gdy klepałem dużo kodu, nie było tego typu "udogodnień" :) ... a jeżeli chce już mieć bardziej zwięzły i kod i mniej "klepania" to wybiorę raczej inny język programowania :-)

25

Spakowałem sobie testowo grafikę, muzykę, fonty, które jak dotychczas najlepiej mi się pakowały apl. Jestem pod wrażeniem, bo wszystko pakuje się o jakieś 10% bardziej, więc oszczędził bym bardzo dużo miejsca w grze, korzystając z tego shrinklera zamiast apultra.

Mam kilka pytań:

1. Jak wygląda szybkość rozpakowania na Atari z jednego miejsca pamięci w drugie w porównaniu do apl? Ta szybkośc jest już dla mnie dość krytyczna, unapl działa mi tak w sam raz, minimalnie wolniej jak będzie to jeszcze przełknę, ale jeśli by to miało się rozpakowywać np. dwa razy wolniej, to już dla mnie nie do przełknięcia.

Nie jestem za szybki w analizowaniu tego kodu assemblerowego, więc czy mógłbym prosić o wyjaśnienia:

2. Czy dało by się zrezygnować przynajmniej częściowo z użycia strony zerowej? Z tego co widzę potrzeba 20 bajtów, chyba tyle nie mam...

3. Czy depaker korzysta z jakiegoś bufora? Widzę na końcu kodu jakieś definicje, ale jak dużo miejsca potrzeba i gdzie się lokuje w pamięci? Ogólnie prosił bym o wyjaśnienie z jakich zasobów pamięci korzysta ten depaker.