Cat Food: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Mono (dyskusja | edycje)
format
Mono (dyskusja | edycje)
m →Trivia: styl.
 
(Nie pokazano 5 pośrednich wersji utworzonych przez tego samego użytkownika)
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 blokami:
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 Assemblerem 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 z 4 lip 2024, 13:09

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.