Packer v2.2
From Atariki
Spis treści |
Historia
Packer v.2.2 to program do kompresji plików stworzony w 1994 roku przez Adama "SoTe" Bieniasa. SoTe stworzył go po napisaniu swoich cruncherów z serii Code3 Cruncher. Narzędzie powstało z potrzeby chwili, ponieważ na scenie nie było w owym czasie szybkiego i efektywnego narzędzia do kompresji plików "wszelakich". Program był szeroko wykorzystywany przez Slight, np. artykuły oraz wszelakie pliki magazynu dyskowego Barymag były spakowane przy użyciu tego programu. Po wydaniu drugiego numeru magazynu dyskowego Barymag narzędzie zostało upublicznione. Program potrafi kompresować dowolne zbiory, i w dość ograniczonym stopniu potrafi również dokonać kompresji programów w binarnym formacie DOS. W przeciwieństwie do programów typu Super Packer, Packer v2.2 był przeznaczony dla bardziej zaawansowanych użytkowników i wymagał od użytkownika podstawowej znajomości struktury plików binarnych, oraz podstawowej znajomości asemblera w przypadku gdy użytkownik chciał dokonać dekompresji danych spakowanych przy użyciu Packer v2.2 w swoim programie.
Algorytm Kompresji
Algorytm wykorzystany do kompresji danych przez Packer v2.2 to mutacja LZ77/LZSS opracowana przez SoTe, ten algorytm kompresji w tamtych czasach potocznie nazywano implodingiem. Imploding zastosowany w Packer v2.2 ma jedno drzewo "znacznikowe". Drzewo to wybrane doświadczalnie jest trochę podobne do Shannon-Fano i służy do oznaczania długości sekwencji, a do oznaczenia, że dany bajt nie zawiera się w żadnej sekwencji używany jest jeden bit; 0 - sekwencja spakowana, 1 - kolejne 8-bitów to ten właśnie bajt.
Szybkość dekompresji
Większość programów kompresujących w tamtych czasach spakowane dane zapisywało jako ciąg bitów, algorytm kompresji korzystał z procedury "put bits", która dokonywała zapisu określonej ilości bitów do strumienia wyjściowego. Dane po kompresji nie były wyrównane do granicy bajtów i pobranie nawet nieskompresowanej sekwencji bajtów wymagało od procedury dekompresującej skorzystanie z procedury która ze strumienia wejściowego pobierała określoną ilość bitów. Pobieranie w ten sposób setek bajtów było po prostu czasochłonne. W tamtych czasach na takiej zasadzie tak działały procedury dekompresujące np. Cruncher 5.0 czy Code3 Cruncher. SoTe po pewnym czasie od stworzenia Code3 Cruncher-a wpadł na pomysł aby zmienić nieco organizację spakowanych danych, w taki sposób aby wszystkie dane będące bajtami zostały zapisane jako normalne bajty w strumieniu danych skompresowanych, w wszelakie informacje bitowe były trzymane razem i możliwe do pobrania przez procedurę "get bit", takie przeorganizowanie danych spowodowało iż procedura dekompresująca mogła być znacznie przyspieszona.
procedura dekompresująca
Ze względu na dość prosty interface, nietypowe podejście do sposobu kompresji, brak dokumentacji dołączonej do programu (w tym brak źródeł procedury dekompresującej) oraz wymóg sporego doświadczenia u użytkownika, program nie przyjął się i nie używał go nikt poza ludźmi związanymi z grupą Slight. Gdy grupa Slight zaprzestała aktywnej działalności na scenie program zaginął w odmętach zapomnienia. Przyszedł jednak czas w którym Seban musiał się zmierzyć z danymi spakowanymi tym programem. Po latach dzięki pomocy Mikera program został odnaleziony, co prawda tylko sam plik wykonywalny, ale to pozwoliło Sebanowi na deasemblację programu i odtworzenie kodu źródłowego procedury dekompresującej, przy okazji została ona nieco poprawiona i wzbogacona o komentarze. Źródła procedury dekompresującej znajdują się w archiwum razem z programem Packer v2.2.
struktura danych po kompresji
Struktura danych po spakowaniu jest bardzo prosta. Spakowane dane zawierają 5 bajtów nagłówka a następnie następuje ciąg bajtów reprezentujących dane w po kompresji.
offset | długość | opis |
$0000 | $02 | adres dekompresji danych (Low Byte,High Byte) |
$0002 | $02 | długość danych po dekompresji (Low Byte,High Byte) |
$0004 | $01 | offset byte |
$0005 | .... | spakowane dane |
Przykład użycia procedury dekompresującej we własnym programie
...
Przykład wykorzystania programu do kompresji pliku w formacie binarnym
...
Ciekawostki
Obecnie trwają pracę nad pełną rekonstrukcją źródeł programu, oraz nad wersją PC-tową wersją command line, która to umożliwi szybką kompresję plików z linii poleceń na komputerach PC. Po zakończeniu prac, zrekonstruowany kod źródłowy oraz wersja packer-a dla PC zostanie upubliczniona.
Pliki do pobrania
Archiwum zawierające Packer v.2.2 oraz źródła depackera
Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.