Tajemnice ATARI

SUPER ZGRYWUS


    W trakcie pisania artykułów do cyklu "Piszemy Demo" zetknęliśmy się kilkakrotnie z programem "Zgrywus" lub też jego odmianą "Zgrywus+". Dzisiaj prezentujemy naszą wersję tego programu, która zrodziła się, gdy straciliśmy cierpliwość do dwóch poprzednich. Co im można zarzucić? Po pierwsze: pracują powoli, ponieważ napisane są w poczciwym Basic'u; po drugie: ciągi liczb szesnastkowych pobierane są z pamięci, z linii DATA, co ogranicza wolne miejsce na kod wynikowy, który umieszczany jest również w pamięci; i wreszcie po trzecie: jeśli chcemy jakiś program przekształcić z Basic'owych linii DATA na kod maszynowy (a do tego służy Zgrywus), to musimy program źródłowy lub samego Zgrywusa mieć zapisanego komendą LIST, aby go dołączyć do programu drugiego i całość uruchomić (czy jest to proste i wygodne?).

    Program SUPER ZGRYWUS jest napisany całkowicie w asemblerze. Może być uruchamiany pod kontrolą dowolnego DOS'a, KOS'a itp. Po uruchomieniu program prosi o wprowadzenie pełnych nazw: źródłowej i docelowej, np. D:PROGRAM.BAS, C: i przystępuje do pracy. W trakcie czytania zbioru źródłowego program dokonuje zamiany par znaków na bajty, które zapisywane są od dolnej granicy pamięci RAM (Memlo) zwiększonej o cztery strony pamięci. Ponieważ SUPER ZGRYWUS rozpoczyna się w pamięci od adresu $8800, to maksymalna długość programu wynikowego jest równa $8800-$0400-Memlo, czyli w większości wypadków przekracza 26 kilobajtów. Oznacza to, że SUPER ZGRYWUS potrafi przetwarzać nawet zbiory zajmujące całą dostępną pamięć dla interpretera Basic'a!

    Zbiór źródłowy może być zapisany instrukcją LIST lub instrukcją SAVE (CSAVE). W pierwszym przypadku w trakcie czytania zbioru na ekranie pojawia się napis "zbiór niestokenizowany". Praca z takim zbiorem polega na wyszukaniu w nim ciągu znaków "DATA", rozpoznaniu i zamianie na bajty znaków po tym ciągu występujących. W przypadku, gdy dwa pierwsze bajty zbioru źródłowego są równe $00 oznacza to, że program ma do czynienia ze stokenizowanym zbiorem Basic'owym (czyli zapisanym instrukcją SAVE), co sygnalizowane jest odpowiednim komunikatem. Przetwarzanie danych zapisanych w takim zbiorze jest trudniejsze: wymaga odczytania tablicy wektorów Basic'a, ominięcia tablicy zmiennych i czytania szeregu bajtów tworzących jedną linię programu w Basic'u. Sposób tokenizowania (czyli ogólnie: zamiany tekstu na kody) programu w Basic'u został dokładnie opisany w książce Wojciecha Zientary "Mapa pamięci Atari XL/XE, Procedury interpretera Basic'a", do której wszystkich zainteresowanych odsyłamy.

    Po wczytaniu całego zbioru SUPER ZGRYWUS gotowy jest do zapisywania programu wynikowego pod nazwą docelową, co sygnalizuje komunikatem. Po naciśnięciu dowolnego klawisza program zostanie zapisany i SUPER ZGRYWUS uruchomi się jeszcze raz od początku, aby umożliwić przetworzenie kolejnego programu.

    Naciśnięcie klawisza ESC w dowolnym momencie pracy programu daje możliwość powrotu do programu nadrzędnego (o ile nie jest wykonywana jakaś operacja wejścia/wyjścia). W przypadku, gdy w trakcie pracy wystąpi błąd, to użytkownik zostanie o tym poinformowany odpowiednim komunikatem zawierającym numer błędu zapisany szestnastkowo. Błędy o numerach większych od $80 oznaczają standardowe błędy operacji wejścia/wyjścia, błąd $03 oznacza nieoczekiwany koniec zbioru źródłowego. Oprócz tego program sygnalizuje użycie niewłaściwej cyfry w liczbie szestnastkowej (np. "g") oraz niewłaściwy token instrukcji Basic'a. Ten ostatni błąd pojawi się w przypadku, gdy w stokenizowanym programie pojawi się instrukcja inna niż DATA, ponieważ SUPER ZGRYWUS potrafi obsługiwać stokenizowane programy składające się TYLKO z ciągów instrukcji DATA. W przypadku zaistnienia jakiegokolwiek błędu program startuje od początku.

    Pisząc SUPER ZGRYWUSA zrezygnowaliśmy z opcji tworzenia samodzielnego boota kasetowego: program NIE POTRAFI zapisać na kasetę odpowiedniego loadera. Nie jest to duży minus, bo każdy użytkownik magnetofonu, który posiada dowolnego KOS'a takiego loadera nie potrzebuje.
1000 REM *-------------------------*
1002 REM | SUPER ZGRYWUS dla TA    |
1004 REM | Autorzy: Tomasz Bielak  |
1006 REM |          Rafal Bielecki |
1008 REM *-------------------------*
1010 DATA ffff0088a38d4ca88ba200a000
1020 DATA bdb889d9e489f006c8c010d0f6
1030 DATA 60989db889e8e002d0e7adb889
1040 DATA 0a0a0a0a186db989a00091f0e6
1050 DATA f0d002e6f1e6f2d002e6f3c860
1060 DATA ade70285f018ade802690585f1
1070 DATA 60d02fa654a4558e9a888c9b88
1080 DATA a658a45986cb84ccaee702ace8
1090 DATA 0286cd84cea203a000b1cb91cd
1100 DATA c8d0f9e6cce6ceca10f260aee7
1110 DATA 02ace80286cb84cca658a45986
1120 DATA cd84ce206788ae9a88ac9b8886
1130 DATA 54845560000018a558691c85cb
1140 DATA a559690185cca200a000bdf489
1150 DATA 91cbe8f012c8c020d0f318a5cb
1160 DATA 692885cb90e8e6ccd0e46018a5
1170 DATA 58691985cda559690285ce86cb
1180 DATA 84cca011b1cb91cd8810f96086
1190 DATA 55845460a9008df002a92020b0
1200 DATA f2a20086cbadfc02c9fff0f929
1210 DATA 3fc927f0f3c93cf0ef2002f3c9
1220 DATA 1bf03cc99bf028c97ef018c921
1230 DATA 90dcc97ab0d8a6cbe00ff0d29d
1240 DATA a38d20b0f2e6cbd0c8a6cbf0c4
1250 DATA c6cb20b0f24cf688a6cb9da38d
1260 DATA e6cba9208df00220b0f2606868
1270 DATA 4c768ca260a90c9d42034c56e4
1280 DATA 86cc84cd85ce204f89a5ce9d4a
1290 DATA 03a9039d4203a5cc9d4403a5cd
1300 DATA 9d4503a9109d4803a9009d4903
1310 DATA a9809d4b034c56e4a260a9079d
1320 DATA 4203a9009d48039d49034c56e4
1330 DATA a260a90b9d4203a5f09d4403a5
1340 DATA f19d4503a5f29d4803a5f39d49
1350 DATA 034c56e40000984829f04a4a4a
1360 DATA 4aaabdd4898d218b68290faabd
1370 DATA d4898d228b6010111213141516
1380 DATA 17181921222324252630313233
1390 DATA 34353637383961626364656651
1400 DATA 52525252525252525252525252
1410 DATA 52525252525252525252525252
1420 DATA 52525252457c00000000000000
1430 DATA 80b3b5b0a5b280baa7b2b9b7b5
1440 DATA b38000000000000000007c7c00
1450 DATA 346f6d61737a002269656c616b
1460 DATA 00326166616c002269656c6563
1470 DATA 6b69007c415252525252525252
1480 DATA 52525252525252525252525252
1490 DATA 525252525252525252447c002e
1500 DATA 617a7761003a72641a00000000
1510 DATA 00000000000000000000000000
1520 DATA 00007c7c002e617a776100246f
1530 DATA 631a0000000000000000000000
1540 DATA 00000000000000007c7c002b6f
1550 DATA 6d756e696b61741a0000000000
1560 DATA 00000000000000000000000000
1570 DATA 007c5a52525252525252525252
1580 DATA 52525252525252525252525252
1590 DATA 5252525252525243306f64616a
1600 DATA 006e617a7765007a726f640e00
1610 DATA 306f64616a006e617a77650064
1620 DATA 6f630e0000226c6164006e7200
1630 DATA 04101000000000000000306c69
1640 DATA 6b0073746f6b656e697a6f7761
1650 DATA 6e79226c61641a007a6c790074
1660 DATA 6f6b656e000000226c61641a00
1670 DATA 7a6c610063796672610000003a
1680 DATA 6170697300706c696b7500646f
1690 DATA 630e00003a617069737977616e
1700 DATA 69650e0e0e000000002b6f6e69
1710 DATA 6563006f70657261636a690000
1720 DATA 00306c696b006e696573746f6b
1730 DATA 656e697a0e00a91b8df00220b0
1740 DATA f2a9008df002204988a90085f2
1750 DATA 85f38db602203b88a9408dbe02
1760 DATA 209c88a2f4a08a20c888a210a0
1770 DATA 0b20e38820e888a6cbbda38d9d
1780 DATA b28dca10f7a206a08b20c888a2
1790 DATA 10a00c20e38820e888a2b2a08d
1800 DATA a904205989c001f01720ba8920
1810 DATA 4f89a218a08b20c8882002f3c9
1820 DATA 1bf05c4cb88b208c8cadb8890d
1830 DATA b989f0034ca68c4cff8ca260a0
1840 DATA 8b20c888a9ff8dfc022002f3c9
1850 DATA 1bd0034cb88ba272a08b20c888
1860 DATA 203b88a908a2a3a08d205989c0
1870 DATA 01d0ab209a89c001d0a4204f89
1880 DATA a284a08b20c8882002f3c91bf0
1890 DATA 034cb88ba201a00120e38820b0
1900 DATA f2a0008cf002c82049886c0a00
1910 DATA 2088898db889c001d00b208889
1920 DATA 8db989c001d0016068684c068c
1930 DATA a296a08b20c888a90085d02088
1940 DATA 89c001f0034c068ca6d0ddfa8c
1950 DATA d0ebe6d0a5d0c905d0e7208889
1960 DATA c003f026c001d0e38db8892088
1970 DATA 89c003f018c001d0d58db989ad
1980 DATA b889c99bf0c0200388c001f0d6
1990 DATA 4c9d8d4c2e8c4441544120a22a
2000 DATA a08b20c888a2058a4820888968
2010 DATA c001f0034c068caaca10ef208c
2020 DATA 8c38adb889e9fc8db889b003ce
2030 DATA b989adb8890db989f017208889
2040 DATA c001d0d9ceb889adb889c9ffd0
2050 DATA e7ceb9894c2a8d208c8cadb989
2060 DATA c980f047208c8cadb889cdb989
2070 DATA d02f38adb889e90685d0208889
2080 DATA c001d0a5c901d01c46d0208c8c
2090 DATA 200388c001d020c6d0a5d0d0f0
2100 DATA 208889c001d0884c498da23ca0
2110 DATA 8b20c8882002f34cb88b4c2e8c
2120 DATA a23ca08bd0ee00e002e1020088


Tomasz Bielak
Rafał Bielecki




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

Pixel 2002