Cat Food: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Mono (dyskusja | edycje)
specyfikacja pliku
Mono (dyskusja | edycje)
m →Trivia: styl.
 
(Nie pokazano 6 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. Pliki podlegają kompresji w czasie zapisu na urządzenie F: a dekompresja następuje automatycznie przy wczytywaniu z urządzenia F: W specyfikacji pliku po nazwie urządzenia F: należy podać specyfikację pliku np. F:D8:DOWOL.TXT będzie odwoływać się do pliku DOWOL.TXT umieszczonego w ramdysku. Deinstalacja sterownika następuje po powtórnym wczytaniu.
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.
 
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 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.