Cruncher 4.64

From Atariki

Revision as of 12:48, 6 paź 2015; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

Grafika:Cruncher_4.64a.gif

Cruncher 4.64 był pierwszym z prawdziwego zdarzenia programem kompresującym dla małego Atari. Nie chodzi tu jednak o zastosowany algorytm kompresji a o nowatorskie jak na tamte czasy rozwiązanie przez Magnusa problemów z kompresją „nieprzewidywalnego zachowania” programów w formacie binarnym. Spowodowało to iż był to pierwowzór dla osób tworzących później podobne oprogramowanie.

Ową innowacją był podział kompresji na dwa etapy. W pierwszym etapie program był wczytywany do pamięci i kompresowany, a następnie skompresowane dane były zapisywane na specjalnie przygotowany dysk, natomiast drugim etapem było dołączenie do spakowanych danych procedur dekompresji i zapis wyników pracy na dysk w postaci plikowej. Cruncher 4.64 stosował dość prosty algorytm kompresji nazywany przez niektórych „Char Pack”, a była to specyficzne odmiana algorytmu RLE. Kompresja programu binarnego przez Cruncher 4.64 polegała na wczytaniu do pamięci kompresowanego programu przez bardzo krótki loader, a następnie zawartość całej pamięci (również tej pod ROMem komputera) była kompresowana; dane skompresowane były następnie zapisywane na dyskietce z Cruncherem jako ciąg sektorów. W następnym kroku po ponownym uruchomieniu komputera należało uruchomić linker, który dokonywał połączenia tak skompresowanych danych z procedurami dekompresji.

Jedną z wad takiego działania było to, że oryginalna struktura kompresowanego pliku była bezpowrotnie tracona. Jednak w przypadku dem czy gier nie miało to większego znaczenia. Niemniej gdy oryginalny program przed kompresją zawierał jakąś czołówkę lub obrazek podczas ładowania, po kompresji już jej nie było widać, ponieważ Cruncher, zachowywał stan pamięci tuż sprzed uruchomienia programu. Nie pozwalało to na kompresję programów korzystających z DOSa, ponieważ w trakcie dekompresji obszar zajmowany przez DOS był bezpowrotnie niszczony.

Magnus próbując rozwiązać ten problem umożliwił wybór dolnej granicy pamięci od której następowała kompresja pliku. W normalnym przypadku (czyli kompresja całej pamięci) obszar kompresowany musiał znajdować się w adresach: $0480-$06FF, $0C00-$CFFF, oraz $D800-$FFFF. W przypadku użycia opcji „USE DOS” obszar poddawany kompresji znajdował się w zakresie $0480-$06FF, $1D00-$CFFF oraz $D800-$FFFF. Było to rozwiązanie mało eleganckie ze względu na sztywne ustalenie dolnej granicy kompresowanego pliku, jednak z DOSem, który miałby MEMLO poniżej obszaru $1D00 tak skompresowany program miał szansę na działanie. Niestety pozostałe obszary pamięci, powyżej adresu $1D00 były bezpowrotnie niszczone przy dekompresji.

Jednak kompresja programów dla DOS przez Crunchera 4.64 nie była głównym zamierzeniem autora, a ta możliwość została prawdopodobnie dodana tylko po to, by kompresować programy, które po uruchomieniu używały załadowanego do pamięci DOSa jako systemu umożliwiającego zapis/odczyt plików. Dobrym przykładem tego typu może być Future Composer lub wszelakie programy graficzne, np. XL-Art. Po uruchomieniu takiego programu powrót do DOSa był niemożliwy, a jego funkcje ograniczały się do zapisu wykonanej pracy na dyskietce.

Następcą Crunchera 4.64 był Cruncher 5.0, ten program jeszcze bardziej zrewolucjonizował kompresję plików na Atari, ponieważ jako pierwszy wykorzystywał zaawansowany algorytm kompresji i umożliwiał znaczne skrócenie kompresowanych programów. Możliwość kompresji programów DOSowych w Cruncherze 5.0 została porzucona. Przed Cruncherem 4.64 istniała jeszcze jedna wersja znana wersja programu, a był to Cruncher 2.69.

Zobacz także


Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.

Personal tools