SUPER ZGRYWUSW 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 |