Cat Food
From Atariki
Wersja z dnia 14:27, 2 lip 2024 Mono (Dyskusja | wkład) (styl + link) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→Trivia - styl.) |
||
Linia 1: | Linia 1: | ||
- | Opublikowany w [[Tajemnice Atari|Tajemnicach Atari]] nr [http://tajemnice.atari8.info/6-7_93/6-7_93.html 7/1993] sterownik (handler) obsługujący w locie kompresję i dekompresję plików. Pracuje pod kontrolą [[DOS 2.5]] z [[CP]] relokując się i ustawiając odpowiednio wskaźnik MEMLO. | + | Opublikowany w [[Tajemnice Atari|Tajemnicach Atari]] nr [http://tajemnice.atari8.info/6-7_93/6-7_93.html 7/1993] sterownik (handler) obsługujący w locie kompresję i dekompresję plików. Pracuje pod kontrolą [[DOS 2.5]] z [[CP]] relokując się na dół pamięci i ustawiając odpowiednio wskaźnik MEMLO. |
- | Pliki podlegają kompresji w czasie zapisu na urządzenie F: a dekompresja następuje automatycznie przy wczytywaniu z niego. | + | Pliki podlegają kompresji w czasie zapisu na urządzenie F:, a dekompresja następuje automatycznie przy wczytywaniu z niego. |
- | Jako nazwę pliku po nazwie urządzenia F: należy podać specyfikację pliku np. "F:D8:DOWOL.TXT", kiedy to 'CatFood' będzie odwoływał się do pliku "DOWOL.TXT" w ramdysku. | + | Jako nazwę pliku należy po nazwie urządzenia "F:" podać specyfikację pliku docelowego np. "F:D8:DOWOL.TXT", kiedy to ''CatFood'' będzie odwoływał się do pliku "DOWOL.TXT" w ramdysku. |
Deinstalacja sterownika następuje po powtórnym wczytaniu. | Deinstalacja sterownika następuje po powtórnym wczytaniu. | ||
- | Kompresor rozpoznaje powtórzenia bajtów i zastępuje je blokiem: | + | == Algorytm i format == |
+ | |||
+ | Kompresor rozpoznaje powtórzenia minimum 3 bajtów i zastępuje je blokiem: | ||
* $E0 byte count - powtórzenia dowolnego bajtu | * $E0 byte count - powtórzenia dowolnego bajtu | ||
- | * $FB count - powtórzenia spacji ($20 ATASCII) | + | * $FB count - powtórzenia spacji (kod $20 [[ATASCII]]) |
- | natomiast pozostałe bajty są do pliku wypisywane jak leci. Wyjątkiem są bajty markerów bloków $E0 i $FB zastępowane odpowiednio przez: | + | W przypadku mniejszej liczby bądź braku powtórzeń dane w niezmienionej postaci są wypisywane do pliku jak leci. |
+ | Wyjątkiem są bajty $E0 i $FB używane jako markery bloków a zastępowane odpowiednio przez: | ||
* $E0 $E0 count | * $E0 $E0 count | ||
* $E0 $FB count | * $E0 $FB count | ||
- | Liczność 'count' zawsze jest niezerowa, co pozwala w jednym bloku zapisać maksymalnie 255 powtórzeń. Wartość 0 w tym miejscu spowoduje zignorowanie bloku, aczkolwiek kompresor nigdy takiej sekwencji nie generuje. | + | gdzie ''count'' może być też mniejsze niż 3. |
+ | |||
+ | Liczność ''count'' zawsze jest niezerowa, co pozwala jednym blokiem zastąpić maksymalnie 255 powtórzeń. Wartość 0 w tym miejscu spowoduje zignorowanie bloku, aczkolwiek kompresor nigdy takiej sekwencji nie generuje. | ||
+ | |||
+ | Nie generuje również: | ||
+ | |||
+ | * $FB $01 | ||
+ | * $FB $02 | ||
+ | |||
+ | oraz: | ||
+ | |||
+ | * $E0 byte $01 | ||
+ | * $E0 byte $02 | ||
+ | |||
+ | z wyłączeniem opisanych wyżej markerów $E0 i $FB, co daje pole do ewentualnych rozszerzeń. | ||
+ | |||
+ | == Trivia == | ||
- | Specjalny blok powtórzeń spacji zapewne predestynował sterownik do współpracy z [[Quick Assembler]]em pozwalając na nieco optymalniejszy zapis plików źródłowych [[ASM]]. | + | * Specjalny blok powtórzeń spacji zapewne predestynował sterownik do współpracy z [[Quick Assembler]]em pozwalając na bardziej optymalny zapis plików źródłowych [[ASM]]. |
+ | * Kompresor niestety ma błąd polegający na tym, że gdy bajty $E0 lub $FB pojawią się na końcu pliku w liczbie nie przekraczającej 2, wtedy są one przepisywane na wyjście jak leci bez opakowania ich w blok, co powoduje że dekompresor się gubi. | ||
[[Kategoria:Oprogramowanie Atari 8-bit]] | [[Kategoria:Oprogramowanie Atari 8-bit]] |
Aktualna wersja
Opublikowany w Tajemnicach Atari nr 7/1993 sterownik (handler) obsługujący w locie kompresję i dekompresję plików. Pracuje pod kontrolą DOS 2.5 z CP relokując się na dół pamięci i ustawiając odpowiednio wskaźnik MEMLO.
Pliki podlegają kompresji w czasie zapisu na urządzenie F:, a dekompresja następuje automatycznie przy wczytywaniu z niego.
Jako nazwę pliku należy po nazwie urządzenia "F:" podać specyfikację pliku docelowego np. "F:D8:DOWOL.TXT", kiedy to CatFood będzie odwoływał się do pliku "DOWOL.TXT" w ramdysku.
Deinstalacja sterownika następuje po powtórnym wczytaniu.
Algorytm i format
Kompresor rozpoznaje powtórzenia minimum 3 bajtów i zastępuje je blokiem:
- $E0 byte count - powtórzenia dowolnego bajtu
- $FB count - powtórzenia spacji (kod $20 ATASCII)
W przypadku mniejszej liczby bądź braku powtórzeń dane w niezmienionej postaci są wypisywane do pliku jak leci. Wyjątkiem są bajty $E0 i $FB używane jako markery bloków a zastępowane odpowiednio przez:
- $E0 $E0 count
- $E0 $FB count
gdzie count może być też mniejsze niż 3.
Liczność count zawsze jest niezerowa, co pozwala jednym blokiem zastąpić maksymalnie 255 powtórzeń. Wartość 0 w tym miejscu spowoduje zignorowanie bloku, aczkolwiek kompresor nigdy takiej sekwencji nie generuje.
Nie generuje również:
- $FB $01
- $FB $02
oraz:
- $E0 byte $01
- $E0 byte $02
z wyłączeniem opisanych wyżej markerów $E0 i $FB, co daje pole do ewentualnych rozszerzeń.
Trivia
- Specjalny blok powtórzeń spacji zapewne predestynował sterownik do współpracy z Quick Assemblerem pozwalając na bardziej optymalny zapis plików źródłowych ASM.
- Kompresor niestety ma błąd polegający na tym, że gdy bajty $E0 lub $FB pojawią się na końcu pliku w liczbie nie przekraczającej 2, wtedy są one przepisywane na wyjście jak leci bez opakowania ich w blok, co powoduje że dekompresor się gubi.