Tajemnice ATARI

LZW

Kompresor

    Weźmy pod uwagę ciąg danych wejściowych, którego elementami są symbole A, B, C, i D. Zbudujemy tablicę, która będzie reprezentować grupy takich symboli. Za każdym razem, kiedy znajdziemy nową grupę, przydzielimy jej nowy kod i podzielimy ją na przedrostek i przyrostek. Symbole \ oraz --- reprezentują przedrostek, zaś / reprezentuje przyrostek.

    Pierwsze cztery elementy tablicy zawierają symbole podstawowe, którym przydzielono kody od 0 do 3. Następne dwa kody (4 i 5) oznaczają odpowiednio zerowanie tablicy i koniec danych. Pierwszym wolnym elementem tablicy jest więc 6, od niego też zaczniemy. Za każdym razem, gdy znajdziemy nową grupę, wyślemy jej przedrostek do ciągu wyjściowego.
A B A B A B A B B B A B A B A  A  C  D A
\/\/---/-----/\/---/-------/\/ \/ \ /\/
6 7   8     9 10 11      12 13 14 15 16  Kod
    6    8      10    8                  Przedrostek
    Tablica jest budowana z danych wejściowych tak, że każdy element rozpoczyna się od przyrostka ostatniego kodu.
Symbol   Kod   Przedr.    Przyr.    Ciąg     Wyjście
 A       0                          -
 B       l                          -
 C       2                          -    
 D       3                          -
Zeruj    4                          -
Koniec   5                          -
 A \            A         A
 B /  \  6      A         B         AB       A
 A |  /  7      B         A         BA       B
 B |
 A /  |  8      6         A         ABA      6
 B    |
 A    | 
 B \  /  9      8         B         ABAB     8
 B /  |  10     B         B         BB       B
 B    | 
 A |  /  11     10        A         BBA      10
 B |
 A |
 B |
 A /  \  12     9         A         ABABA    9
 A \  /  13     A         A         AA       A
 C /  \  14     A         C         AC       A
 D \  /  15     C         D         CD       C
 A /  |  16     D         A         DA       D
    Otrzymujemy więc ciąg:
A B 6 8 B 10 9 A A C D ...
    Kompresor rozpoczyna pracę z długością kodu 2+1=3 bitów dla czterech elementów, więc kiedy kod osiągnie 8, długość musi się zwiększyć do 4 bitów. Podobnie, kiedy kod osiągnie 16, należy zwiększyć długość do 5 bitów. Po osiągnięciu długości 13 bitów wysyłany jest kod zerowania tablicy i wszystko zaczyna się od początku.

Dekompresor

    W danym przykładzie otrzymaliśmy ciąg wyjściowy:
A B 6 8 B 10 9 A A C D ...
    Dane z tego ciągu są pobierane parami, a każdej z nich przypisujemy nowy kod. Przedrostek jest lewym elementem pary, przyrostek jest symbolem, który otrzymujemy dzięki tablicy dekompresji. Aby tego dokonać, należy odczytać przyrostek kodu, a następnie użyć przedrostka jako nowego kodu. Proces powtarza się do momentu, gdy przedrostek zostanie pojedynczym symbolem.

    Pierwszą parą jest (A,B), więc przedrostkiem kodu 6 jest A, zaś przyrostkiem B. Symbol 6 reprezentuje ciąg AB, dekodowany jest symbol A.

    Druga para to (B,6), więc przedrostkiem kodu 7 jest B, zaś przyrostkiem jest ostatni symbol kodu 6. Kod 6 to AB, więc kod 7 to BA z przyrostkiem A. Dekodujemy symbol B.

    Cały proces powtarzamy aż do odczytania wszystkich danych. Na podstawie pliku tekstowego autorstwa B. Montgomery


(hed)


    Od redakcji: zdajemy sobie sprawę, że powyższy tekst jest trudny. Tym, którzy nie potrafią wykorzystać teorii LZW we własnych programach polecamy gotowy kompresor, który drukujemy na następnych stronach.

LZWarch

Jak zacząć?

    Przed załadowaniem programu należy spełnić dwa ważne warunki, konieczne do jego uruchomienia:

  • granica memlo zawarta w stówie $2e7 musi być mniejsza od $2400 (można to sprawdzić komendą MEM Command Procesora);
  • Interpreter BASIC-a powinien być wyłączony.
    Po uruchomieniu, w prawym górnym rogu ekranu zostanie wyświetlone okno, w którego dolnej części widnieją trzy komendy. Aby uaktywnić jedną z komend, należy ją podświetlić, a następnie wcisnąć RETURN. Wyboru dokonać można klawiszami + i *.

Encode - archiwizacja danych.

1. W nowo otworzonym oknie na ekranie widnieje cyfra oznaczająca ilość bitów wejściowych. Można ją zmieniać klawiszami + i * w zakresie od 2 do 8. Potwierdzenia wybory dokonuje się klawiszem RETURN. Najkorzystniejsze rezultaty archiwizacji uzyskuje się przy: 2 - dla długich obrazków oraz niektórych fontów w grafice 4 trybu ANTIC-a, 4 - dla fontów, 8 - dla tekstów i programów. Pozostałe możliwości są bardzo rzadko wykorzystywane.

2. Nazwa pliku do zapisu.

3. Nazwa pliku do archiwizacji. W przypadku podania w nazwie znaku gwiazdki, ATARI po odnalezieniu pliku zapyta o nazwę, pod jaką plik będzie rozarchiwizowany w przyszłości (Name to archive). W przypadku opuszczenia okna klawiszem ESC przyjęta zostanie nazwa niezmieniona.

4. Po prawej stronie ekranu możemy śledzić orientacyjnie wyniki pakowania. Licznik aktualizowany jest po odnalezieniu powtarzającego się ciągu, nie należy więc zwracać uwagi na różnice kilku bajtów w stosunku do rzeczywistej długości pliku.

5. Zakończenie procesu sygnalizowane jest przez pojawienie się okna z punktu 3. Naciśnięcie klawisza ESC zamyka plik i kończy archiwizację. Wpisanie nowej nazwy powoduje archiwizację nowego pliku.

Decode - rozarchiwizowywanie danych.

1. Nazwa pliku do odczytu (rozpakowywania).

2. Zostaną rozpakowane kolejne zbiory, przy czyni przed rozpoczęciem zapisu ATARI zapyta o nazwę, pod jaką ma zostać zapisany zbiór. W przypadku niedokonywania zmian w nazwie, wybór należy potwierdzić klawiszem RETURN. ESC kończy rozpakowywanie.

Quit - opuszczenie programu.

    Normalne zakończenie pracy i powrót do programu nadrzędnego (DOS lub COS). Program można uruchomić powtórnie przy pomocy komendy RUN.

Uwagi.

1. Program wykorzystuje metodę LZW kompresji danych.

2. Do poprawnej pracy programu należy dysponować urządzeniami zewnętrznymi, które mogą otworzyć dwa zbiory jednocześnie, np. RAMdysk założony pod ROM-em oraz magnetofon.
1000 REM *--------------------------*
1002 REM : LZW arch 3.0             :
1004 REM :  autor: MATHNOID'93      :
1006 REM : (c) 1993 Tajemnice ATARI :
1008 REM *--------------------------*
1010 DATA ffff00806680a420b91a038d5c
1020 DATA 2fa5211869308d5d2fa93a8d5e
1030 DATA 2fa99b8d5f2fa99b20b0f22033
1040 DATA 80a20da92d9d4780ca10faade8
1050 DATA 02c924b007a247a0804c42c6a2
1060 DATA 56a0802042c6a2ff9a6c0a004c
1070 DATA 5a57206172636820762e332e30
1080 DATA 9b536f727279206e6f20726f6f
1090 DATA 6d2021fd9be202e30200800024
1100 DATA fb2ea203bd5c2f9d802f9d702f
1110 DATA ca10f4a9008d723020502da2fe
1120 DATA 9a20262d20fdf288d0fac92bd0
1130 DATA 034c4a24c92ad0034c5524c91b
1140 DATA d0034cbd2bc99bd0e1ad7230d0
1150 DATA 034c1026c901d0ed4c6224ad72
1160 DATA 30f0cdce72304c1624ad7230c9
1170 DATA 02f0c0ee72304c162420cb2b18
1180 DATA 20a12a90034c1624a90420502d
1190 DATA 20b32ba210a90420542b20742a
1200 DATA 48290f8d84308d8230684a4a4a
1210 DATA 4a8d85308d813020f42ba002b9
1220 DATA 702fc93af0108810f6a202bd5c
1230 DATA 2f9d702fca10f7a002c88cbd24
1240 DATA 20742aae87303065a2009d702f
1250 DATA eebd24c99bd0ec3820a12a900b
1260 DATA a90420af2d20b32b4c1624a220
1270 DATA a90820542b203c2a206429203c
1280 DATA 2aac87303033cd7d30d00eec7e
1290 DATA 30d009ee843020f42b4ce624cd
1300 DATA 7930d026ec7a30d021204c29ad
1310 DATA 6529d0f8201928a22020e82c20
1320 DATA cb2b4c972420b32ba90420af2d
1330 DATA 4c1624cd7b30d022ec7c30d01d
1340 DATA 204c29ad6529d0f8207327ad82
1350 DATA 308d8430ad81308d853020f42b
1360 DATA 4ce024ad9630cd7b30ad9730ed
1370 DATA 7c30907dad963038ed77308d8e
1380 DATA 30ad9730ed78308d8f30209e29
1390 DATA a5d185d7a5d285d8ee8e30d003
1400 DATA ee8f30ad8e30cd8c30d013ad8f
1410 DATA 30cd8d30d00ba5cb85d9a5cc85
1420 DATA da4cad25209e29a5d185d9a5d2
1430 DATA 85daa000b1d720f125204c29ad
1440 DATA 6529c901d0f6ce6529a000b1d7
1450 DATA 206429e6d7d002e6d8a5d7c5d9
1460 DATA a5d8e5da90eb2019284ce624ad
1470 DATA 963020f125204c29ad6529c901
1480 DATA d0f64ce624206429207829a900
1490 DATA 8dfd25a200bd9e60206d29eefd
1500 DATA 25adfd25cd6529d0ed60a90120
1510 DATA 502da9088d8430ad8430186910
1520 DATA 8d1dbd20fdf288d0fac92bd003
1530 DATA 4c0028c92ad0034c0d28c91bd0
1540 DATA 08a90120af2d4c1624c99bd0dc
1550 DATA a90120af2dae84308e8230e002
1560 DATA d001e8e88e85308e8130206e2c
1570 DATA 3820a12a90034c1624a9042050
1580 DATA 2d20b32ba220a90820542b20cb
1590 DATA 2bad84300a0a0a0a0d8530201f
1600 DATA 2a20cb2b2019281820a12a900b
1610 DATA a90420af2d20b32b4c1624a210
1620 DATA 20e82ca90420542ba200bd802f
1630 DATA 3021c92ad018a90220502da20e
1640 DATA bd292e9dc4bcca10f7206e2790
1650 DATA e04cd226e8e00ed0daa200a002
1660 DATA b9802fc93af0058810f6300398
1670 DATA aae88ee926a200bd802f48201f
1680 DATA 2a68eee926c99bd0ef20cb2b20
1690 DATA 3c2aae873010034c9f28206429
1700 DATA ad8d30c918f006a5ccc9bbd031
1710 DATA ad6529f008204c29ad6529d0f8
1720 DATA ad7b308d9830ad7c308d993020
1730 DATA cf29207327ad81308d8530ad82
1740 DATA 308d8430206e2c4cfc26ad8c30
1750 DATA cd7530ad8d30ed76309028ad7d
1760 DATA 308d9830ad7e308d993020cf29
1770 DATA ee8530206e2c4c0a2718084cd8
1780 DATA 2aa9008d8c308d8d304ceb2b20
1790 DATA 3c2aae873010034c9f28206429
1800 DATA 1820ce28b01e207829a200bd9e
1810 DATA 60206d29e8ec6529d0f4204c29
1820 DATA ad6529c902b0f64c0a27203c2a
1830 DATA ae873010034c9f282064293820
1840 DATA ce28b0ec207829a200bd9e6020
1850 DATA 6d29e8ec6529d0f4ad9830186d
1860 DATA 77308d9830ad99306d78308d99
1870 DATA 3020cf29ae6529cabd9e608d9e
1880 DATA 60a9018d65292019284c0a27ad
1890 DATA 8430c902f003ce84304c1a26ad
1900 DATA 8430c908f0f6ee8430d0f1a9d3
1910 DATA 85d3a9bc85d4a000ad8830ae89
1920 DATA 30203728a006ad8a30ae8b304c
1930 DATA 37288e93308d9230a910a22720
1940 DATA 5f28a9e8a203205f28a964a200
1950 DATA 205f28a90aa200205f28ae9230
1960 DATA 4c95288d94308e9530a2ffe8ad
1970 DATA 923038ed94308d9230ad9330ed
1980 DATA 95308d9330ad9330c9c090e5ad
1990 DATA 9230186d94308d9230ad93306d
2000 DATA 95308d93308a186910098091d3
2010 DATA c860204c29ad6529d0f8ad7930
2020 DATA 8d9830ad7a308d993020cf29ad
2030 DATA 102ac908f00b3820092aad102a
2040 DATA c908d0f52019284c8f2608ad8d
2050 DATA 300d8c30d00328186028b064a9
2060 DATA 008d8e308d8f30ee8e30d003ee
2070 DATA 8f30ad8e30cd8c30ad8f30ed8d
2080 DATA 30b0dd209e29a5d18d9030a5d2
2090 DATA 8d9130ad8e3038e9018d8e30b0
2100 DATA 03ce8f30209e29ad903038e5d1
2110 DATA cd6529d01da000b1d1d99e60d0
2120 DATA 14c8cc6529d0f3ad8e308d9830
2130 DATA ad8f308d99303860ee8e30d003
2140 DATA ee8f304ce528ad9e6020c729ce
2150 DATA 6529a000b99f60999e60c8cc65
2160 DATA 29d0f460a2009d9e60ee652960
2170 DATA a00091cbe6cbd002e6cc60ad8c
2180 DATA 308d8e30ad8d308d8f30209029
2190 DATA ee8c30d003ee8d3060209e29a0
2200 DATA 00a5cb91cda5cc91cf60ad8e30
2210 DATA 18699c85cdad8f30693085cead
2220 DATA 8e3018699d85cfad8f30694885
2230 DATA d0a000b1cd85d1b1cf85d2608d
2240 DATA 9830a2008e993020ec29ad7f30
2250 DATA 8dd929a900d001602e9a302e9b
2260 DATA 3020092aced9294cd829ad9830
2270 DATA 8d9a30ad99308d9b30a91038ed
2280 DATA 7f30a82e9a302e9b3088d0f760
2290 DATA 2e152ace102aa908f00160a900
2300 DATA 201f2aa9088d102a6048a220a9
2310 DATA 0b9d4203a9009d48039d490368
2320 DATA 20662bee8a30d003ee8b3060a9
2330 DATA 008d96308d9730ad80308d8330
2340 DATA a900d00b20742a8d8630a9088d
2350 DATA 4b2a2e86302e96302e9730ce4b
2360 DATA 2ace8330f0034c4a2aad9630ae
2370 DATA 973060a210a9079d4203a9009d
2380 DATA 48039d49032056e4ee8830d003
2390 DATA ee893020692bc088f00160ad87
2400 DATA 3009808d8730a9006008a90220
2410 DATA 502da2032808b017bd382e9da7
2420 DATA bcca10f7a20fbd802f9d602fca
2430 DATA 10f74cd82abd3c2e9da7bcca10
2440 DATA f7a20fbd702f9d602fca10f720
2450 DATA ff2c20fdf288d0fa48a200a99b
2460 DATA dd602ff005e8e00fd0f668c91b
2470 DATA d020a90220af2da20f28b00bbd
2480 DATA 602f9d802fca10f73860bd602f
2490 DATA 9d702fca10f73860c97ed00aca
2500 DATA 30bfa99b9d602fd0b5c99bd008
2510 DATA a90220af2d4c392be00ff0a89d
2520 DATA 602fe8d0e3a20f28b00bbd602f
2530 DATA 9d802fca10f71860bd602f9d70
2540 DATA 2fca10f718609d4a03a9039d42
2550 DATA 03a9609d4403a92f9d45032056
2560 DATA e4c080b00160c088d001608c92
2570 DATA 30a9008d9330a90420af2da903
2580 DATA 20502da20fbd192e9d96bca900
2590 DATA 9dbebcca10f2a085a94085d3a9
2600 DATA bc85d4204b2820fdf288d0faa9
2610 DATA 0320af2d20b32b4c1624a21020
2620 DATA e82ca2204ce82c20b32ba90020
2630 DATA af2da2ff9a6c0a00a9008d8730
2640 DATA a2019d88309d8a309d8c30ca10
2650 DATA f4a9088d102aa9008d4b2a8d65
2660 DATA 29a91e85cba96285cc60a9008d
2670 DATA 7c30ac85308c7f30382a88d0fb
2680 DATA 1869018d7b309003ee7c30ad7b
2690 DATA 301869018d7d30ad7c3069008d
2700 DATA 7e30ad7d301869018d7930ad7e
2710 DATA 3069008d7a30ad79301869018d
2720 DATA 7730ad7a3069008d7830a9008d
2730 DATA 75308d7630ac84308c8030382e
2740 DATA 75302e763088d0f6ad753038ed
2750 DATA 77308d7530ad7630ed78308d76
2760 DATA 3060a9008d7c30ac84308c8030
2770 DATA 382a88d0fb1869018d7b309003
2780 DATA ee7c30ad7b301869018d7d30ad
2790 DATA 7c3069008d7e30ad7d30186901
2800 DATA 8d7930ad7e3069008d7a30ad79
2810 DATA 301869018d7730ad7a3069008d
2820 DATA 7830a9008d75308d7630ac8530
2830 DATA 8c7f30382e75302e763088d0f6
2840 DATA ad753038ed77308d7530ad7630
2850 DATA ed78308d763060a90c9d42034c
2860 DATA 56e40a08c9c0b006e93fb00269
2870 DATA c0286a60a200bd602fc99bf00b
2880 DATA 20f02c9decbce8e00fd0eea980
2890 DATA 9decbca900e00fd00160e89dec
2900 DATA bc4c1a2da013b9a2bc297f99a2
2910 DATA bc8810f5ae7230bd4a2da8b9a2
2920 DATA bc098099a2bcc898dd4d2dd0f1
2930 DATA 6000070e080f140aaabd5e2e8d
2940 DATA 7430bd5f2e8d7330bd542e85cd
2950 DATA bd552e85cebd4a2e85cf85d1bd
2960 DATA 4b2e85d085d2bd402e85d3bd41
2970 DATA 2e85d4a200a000b1cf91cdc8cc
2980 DATA 7430d0f620e92de8ec7330d0eb
2990 DATA a200a000b1d391d1c8cc7430d0
3000 DATA f620012ee8ec7330d0eb600aaa
3010 DATA bd5e2e8d7430bd5f2e8d7330bd
3020 DATA 542e85cdbd552e85cebd4a2e85
3030 DATA cfbd4b2e85d0a200a000b1cd91
3040 DATA cfc8cc7430d0f620e92de8ec73
3050 DATA 30d0eb60a5cf18692885cf9002
3060 DATA e6d0a5cd186d743085cd9002e6
3070 DATA ce60a5d118692885d19002e6d2
3080 DATA a5d3186d743085d39002e6d460
3090 DATA 00000000290f2f006572726f72
3100 DATA 0000002e616d6500746f006172
3110 DATA 6368697665ecefe1e4f3e1f6e5
3120 DATA 682ec02ed42ed42e202f51bccb
3130 DATA bc9abc6dbc81bc902fe92fe92f
3140 DATA e92f353016040504130413040f
3150 DATA 04495555555555555555555555
3160 DATA 5555555555555555554fd9002c
3170 DATA 3a370061726368006279002d34
3180 DATA 280719130059d900256e636f64
3190 DATA 65002465636f64650031756974
3200 DATA 00594bd5d5d5d5d5d5d5d5d5d5
3210 DATA d5d5d5d5d5d5d5d5d5d54c4955
3220 DATA 55554fd9e2e9f459d900000059
3230 DATA 4bd5d5d54c4955555555555555
3240 DATA 555555555555555555554fd900
3250 DATA 33701a26696c656e616d650e25
3260 DATA 78740059d9000b2f5b2f00594b
3270 DATA d5d5d5d5d5d5d5d5d5d5d5d5d5
3280 DATA d5d5d5d54c4955555555555555
3290 DATA 5555555555554fd980e9ee80f0
3300 DATA f2efe7f2e5f3f38059d9808080
3310 DATA 808080df808080808080594bd5
3320 DATA d5d5d5d5d5d5d5d5d5d5d5d54c
3330 DATA e002e1020024


MATHNOID'93



Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2002