1

Temat: inflate

Zoptymalizowałem procedurę dekompresji inflate. Teraz zajmuje ona niecałe dwie strony pamięci (poprzednio prawie trzy) i wykonuje się nieco szybciej.

Można pobrać ze strony:
http://atariarea.krap.pl/x-asm/inflate.html

Po pysznym deserze siadam przy asemblerze.

2

Odp: inflate

Polecam, bardzo ładna, zgrabna, i kolorrrrowa smile

Fox, to nowsze niż to co mi podsyłałeś?

Aha, jeśli się komuś przyda, mini programik do kompresji danych do rozpakowywania procką Foxa: http://eru.nutki.com/a8/zipper.c.
Kompilujemy z -lz ofkorz (linux/cygwin/mac).

Ostatnio edytowany przez eru (2007-06-18 16:32:51)

: 404. Stopka not found

3

Odp: inflate

Szacuneczek smile

ps. ja tylko dodam ze pakowac mozna na uniksoidach zwyklym gzipem (opcje -9n), po czym odciąć 10 bajtów z przodu pliku i 8 z konca smile

np takim skrypcikiem:

#!/bin/sh

# zipper.sh 
# usage: zipper.sh input_filename output_filename

set -e

if [ $# -eq 2 ]; then

TEMPFILE=$(mktemp /tmp/zipper.XXXXXXXXXX)

 gzip -c9n $1 | dd of=$TEMPFILE bs=1 skip=10
 dd if=$TEMPFILE of=$2 bs=1 count=$(expr $(stat -c %s $TEMPFILE) - 8)
 exit 0

fi

echo "zipper.sh input_filename output_filename"

exit 1

Pewnie niespecjalnie przenośny jest, ale działa na linuxach smile
Chętni sobie przerobią na bsd czy cotam....

Ostatnio edytowany przez mikey (2007-06-18 21:32:10)

4

Odp: inflate

Eru: tylko dwa bajty krótsze, poza tym to samo. Programik do kompresji jest dołączony, działa identycznie jak Twój.

Po pysznym deserze siadam przy asemblerze.

5

Odp: inflate

jakie parametry kompresji należy ustawić dla 7z aby można było to dekompresować przez INFLATE ?

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

6

Odp: inflate

mój przerobiony zipper.sh Mikeya:

#!/bin/sh
# zipper.sh 
# usage: zipper.sh input_filename output_filename

_7Z=/sw/bin/7z

set -e

if [ $# -eq 2 ]; then

TEMPFILE=$(mktemp /tmp/zipper.XXXXXXXXXXXX).gz
 cat $1 | $_7Z a -tgzip -mx=9 -si $TEMPFILE
 dd if=$TEMPFILE of=$2 bs=1 skip=10 count=$(expr $(stat -f "%z" $TEMPFILE) - 18)
 exit 0
fi

echo "zipper.sh input_filename output_filename"
exit 1

7z -tgzip robi gzipa, ale trzeba to robić przez pipe ('|') bo inaczej ponoć są dołączane nazwy plików, a tego nie chcemy.
haczyk polega na tym co robi to 'dd' - wycina pierwsze 10 i ostatnie 8 bajtów.

: 404. Stopka not found

7

Odp: inflate

moje wcześniejsze posty dotyczące problemów z najnowszym INFLATE należy uznać za nie byłe, podejrzałem w końcu jakie nagłówki znajdują się w pliku i zrozumiałem gdzie leży problem, umieszczałem spakowany plik tuż za INFLATE.ASM, który rezerwuje sobie pamięć dla INFLATE_DATA przez ORG*+ i w ten sposób spakowane dane wczytywane były w obszar $c000,$d000 co niespecjalnie się udawało wink

w ramach zadośćuczynienia popełnie nakładke na 7z aby wypluwał pliki spakowane GZIP-em z metodą DEFLATE 7z (dla Windows-a)

proponuje zastąpić ORG *+ przez EQU, wtedy można łączyć INFLATE z jakimkolwiek programem bez potrzeby ponownego ustawiania ORG-a

; Data for building trees

literalSymbolCodeLength        equ inflate_data
controlSymbolCodeLength        equ literalSymbolCodeLength+256

; Huffman trees

nBitCode_clearFrom        equ controlSymbolCodeLength+CONTROL_SYMBOLS
nBitCode_totalCount        equ nBitCode_clearFrom
nBitCode_literalCount        equ nBitCode_totalCount+2*TREE_SIZE
nBitCode_controlCount        equ nBitCode_literalCount+TREE_SIZE
nBitCode_literalOffset        equ nBitCode_controlCount+2*TREE_SIZE
nBitCode_controlOffset        equ nBitCode_literalOffset+TREE_SIZE
codeToLiteralSymbol        equ nBitCode_controlOffset+2*TREE_SIZE
codeToControlSymbol        equ codeToLiteralSymbol+256
inflate_data_end        equ codeToControlSymbol+CONTROL_SYMBOLS

Ostatnio edytowany przez tebe (2007-12-22 10:09:52)

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

8

Odp: inflate

http://madteam.atari8.info/uzytki/def7z.7z

Autonomiczna nakładka na program 7-Zip realizująca kompresję plików do formatu GZIP z użyciem nowej wydajniejszej wersji algorytmu DEFLATE (dodatkowo z pliku wynikowego usuwane są nadmiarowe bajty). Dekompresji dokonujemy procedurą INFLATE.ASM

Autonomiczna tzn. że nie potrzebuje być uruchamiana w towarzystwie jakichkolwiek innych programów, kompresor 7z.exe zaszyty jest w środku programu, na czas kompresji jest on zapisywany do katalogu z którego uruchomiono def7z.exe, wykonywany jest odpowiednio spreparowany BAT

p.s.
uaktualniłem plik DEF7Z.EXE, teraz nie wystąpią problemy związane z użyciem pliku przez inny proces, można kompresować z poziomu BAT-a wiele plików do nowego formatu DEFLATE, nie wystąpią też żadne nadmiarowe komunikaty związane z dokonywanym procesem kompresji i kasowaniem plików pomocniczych

Ostatnio edytowany przez tebe (2007-12-23 16:59:19)

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

9

Odp: inflate

tebe: Rozumiem, że def7z.exe wykonuje skrypt eru pod windowsem? (tak pytam, bo nie wiem czy beszczelnie używać tego co napisał eru czy męczyć Ciebie o składnie polecenia której użyłes w tym generowanym bat)

10

Odp: inflate

tokugawa napisał/a:

tebe: Rozumiem, że def7z.exe wykonuje skrypt eru pod windowsem? (tak pytam, bo nie wiem czy beszczelnie używać tego co napisał eru czy męczyć Ciebie o składnie polecenia której użyłes w tym generowanym bat)

tak, ogólnie DEF7Z wywołuje taki BAT

7z.exe a -tgzip -mx9 output_archive input_file

potem usuwane są nadmiarowe bajty z początku i końca archiwum 7z i tak powstaje plik gotowy do użycia z INFLATE Fox-a

Ostatnio edytowany przez tebe (2008-03-23 22:33:27)

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

11

Odp: inflate

Po 10 latach przerwy dzisiaj parę ulepszeń:
- procedura skrócona z 509 do 501 bajtów
- zainicjalizowane dane są teraz stałe, łatwiej jest więc umieścić procedurę w ROMie

Do pobrania: https://github.com/pfusik/zlib6502

Wersja w cc65 została uszkodzona pół roku temu. Zgłosiłem i jest już poprawiona. Planuję zaktualizować procedurę w cc65.

Po pysznym deserze siadam przy asemblerze.

12

Odp: inflate

Przyda się! Dziękuję!

hex, code and ror'n'rol!
"mężczyzna wydoił wielbłąda żoną"
"wcześniej miał na imię Heidi i był niemiecką kulomiotką"

13

Odp: inflate

Dzięki! smile

life is complex, it has both real and imaginary components.

14

Odp: inflate

Dzisiaj:
- urwałem jeszcze dwa bajty
- zaktualizowałem procedurę w cc65
- znalazłem narzędzie "Zopfli", które przy pobieżnych testach daje stopień kompresji wyższy niż 7-Zip i KZIP, a w dodatku potrafi zapisać goły strumień DEFLATE - szczegóły na https://github.com/pfusik/zlib6502

Po pysznym deserze siadam przy asemblerze.

15

Odp: inflate

az milo czytac. kawal porzadnie napisanego softu przy okacji przydatnego :-)

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

16

Odp: inflate

Dzisiaj zgłoszono pierwszy błąd w 17-letniej historii tego kodu. Błąd ujawnia się tylko w przypadku szczególnych danych. Wydaje mi się mało prawdopodobne, żebyście natrafili na takie dane przypadkiem. Błąd poprawiłem, przy okazji skracając kod o 7 bajtów. Ale nie za darmo: poprawiony kod jest trochę wolniejszy - zmierzyłem 3% na GPL v3 skompresowanej zopfli.

Polecam aktualizację: https://github.com/pfusik/zlib6502

Po pysznym deserze siadam przy asemblerze.

17

Odp: inflate

Czy ta procedura wchodzi w skład xunzipa? Można liczyć na uaktualnienie?

KMK
? HEX$(6670358)

18

Odp: inflate

Tak, ta procedura jest podstawą xunzipa. O uaktualnienie trzeba pytać Epiego.

Dzisiaj poprawiłem drugi błąd, też mało prawdopodobny. Ta poprawka kosztowała 16 bajtów kodu, 1 bajt niezainicjalizowanych danych i 8% szybkości.

Po pysznym deserze siadam przy asemblerze.

19

Odp: inflate

Mam pewne wątpliwości co do pogarszania sprawności dekompresora, aby mógł poradzić sobie ze strumieniami, których nikt przez 17-lat jego istnienia nie napotkał.
Czy byłaby szansa, aby wyróżnić w kodzie zbiór ficzerów pozwalających na warunkową kompilację włączającą lub wyłączającą wsparcie dla tych egzotycznych danych wejściowych? Może nawet dałoby się napisać narzędzie, które analizując skompresowany strumień generowałoby odpowiednie makra, coś jak optymalizacja RMT.

laoo/ng

20

Odp: inflate

To tylko 11% wolniej. Gdzie Ci się spieszy? W Numenie było jeszcze wolniej i jakoś nie wiało nudą między efektami.

Po pysznym deserze siadam przy asemblerze.

21

Odp: inflate

Między efektami nie... ;-)

22

Odp: inflate

w sumie to można wyobrazić sobie taki ficzer który skróci dekompresor i uprości go ekstremalnie na podstawie danych jakie ma dekompresować wink

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