Wielu czytelników w swoich listach pyta po czym rozpoznać implementację Extended fig FORTH. Nie jest to takie proste, gdyż wiele wersji tej implementacji ma zmieniony nagłówek. Sam nie jestem pewien, czy wersja, którą posiadam, nie została przez kogoś przerobiona. Po wczytaniu implementacji o której wspomniałem, pojawia się napis: fig FORTH 1.1. Mam nadzieję, że nagłówek ten jest autentyczny.
Najczęściej spotykaną wersją na polskim "rynku" jest ATARI VERSION OF ELCOMP-FORTH. Jest to najgorsza implementacja języka FORTH na ATARI jaką znam. Przy pierwszych krokach w nauce języka, wersja ta będzie na pewno lepsza od zwykłej kartki papieru. Implementacja Extended fig Forth została wydana w wersji dyskowej. Na dysku tym znajduj ą się także dwa edytory, dwa assemblery oraz ciekawe słowa języka FORTH - wszystko w wersji źródłowej. Tekst źródłowy zapisany jest w blokach, które nazywamy ekranami. Jeden ekran składa się z 8 sektorów, czyli 1Kb danych. Aby przejrzeć spis treści ekranów, należy użyć słowa INDEX. Przed nim podajemy numer ekranu, od którego rozpoczynamy przeglądanie oraz numer ekranu końcowego. Przykład :
16 36 INDEX RETURN
Spowoduje wyświetlenie nazw ekranów od 16 do 36. Na dyskietce zawierającej język FORTH ekrany z programami źródłowymi zaczynają się od numeru 17, a kończą na 88. Aby przejrzeć zawartość ekranu np. numer 30, piszemy :
30 LIST RETURN
Kompilacja danego ekranu nastąpi po użyciu sekwencji :
30 LOAD RETURN
30 - to oczywiście w dalszym ciągu numer ekranu.
Uwaga : należy uważać, aby rozpoczynać kompilację od pierwszego ekranu mającego taką samą nazwę, jak następne. Dotyczy to bloków ekranów o tej samej nazwie.
Implementację Extended fig-FORTH można oczywiście przenieść z dysku na taśmę, W tym celu wczytujemy FORTH-a z dysku, kompilujemy dowolne ekrany słowem LOAD, a następnie tak rozbudowany język zapisujemy na kasecie słowem CSAVE. Należy jednak pamiętać, że ciągle nie będziemy posiadali możliwości zapisu wersji źródłowej na kasetę.
Wielu czytelników pyta, gdzie można kupić nieokrojoną wersję języka FORTH na kasecie lub dysku. Mam nadzieję, że uda się doprowadzić do rozpowszechnienia w Polsce implementacji Extended Fig-FORTH w sposób legalny. W przypadku zgody producenta tej implementacji, firma AVALON podjęłaby się tego zadania. Byłoby to najlepsze wyjście z sytuacji, przy rosnącym zainteresowaniu tym językiem. Gdy będę wiedział coś więcej na ten temat, poinformuję czytelników "Tajemnic Atari" w jednym z kolejnych odcinków tego cyklu.
ODGAŁĘZIENIA WARUNKOWE
W poprzednim odcinku tego cyklu nie zmieścił się opis słów wykonujących odgałęzienia (skoki) warunkowe. Zacznijmy od :
IF ... ENDIF
Struktura ta wykonuje słowa zawarte między IF a ENDIF tylko wtedy, gdy znacznik logiczny ƒ znajdujący się na szczycie stosu ma wartość prawdy, czyli jest różny od zera. Uwaga : Powyższa struktura musi mieć swój początek (IF) oraz koniec (ENDIF) wewnątrz tego samego słowa. Zamiast ENDIF można użyć słowa THEN. Inną bardziej rozbudowaną odmianą odgałęzienia warunkowego jest ciąg słów :
IF ... ELSE ... ENDIF
Także teraz słowa między IF a ELSE będą wykonywane, gdy znacznik logiczny jest równy prawdzie. W przeciwnym wypadku będą wykonywane słowa zawarte między ELSE a ENDIF.
WYPROWADZANIE ZNAKÓW
Nie poznaliśmy jeszcze żadnego słowa umożliwiającego wyprowadzanie znaków na ekran. Pierwszym z nich będzie słowo EMIT. Umożliwia ono wyświetlenie jednego znaku, którego kod znajduje się na szczycie stosu. Przykład :
65 EMIT RETURN
Na ekranie pojawiła się litera o kodzie 65, czyli A.
Słowo EMIT umożliwia także wykorzystywanie znaków specjalnych sterujących kursorem lub całym ekranem np.
125 EMIT RETURN
Spowoduje wyczyszczenie ekranu.
Aby wyświetlić dłuższy ciąg znaków musimy poznać inne słowa. Podczas programowania często zachodzi potrzeba wpisania ciągu znaków wewnątrz kompilowanego słowa. Funkcję tę spełnia następująca para słów : ." oraz " Najlepiej poznamy ich działanie na przykładzie :
: PISZ ."ALA MA KOTA" ; RETURN
Sprawdźmy teraz działanie nowo zadeklarowanego słowa
PISZ RETURN
Na ekranie pojawiła się napis, który został umieszczony między ." a " Należy pamiętać, aby zawsze zostawiać przynajmniej jedną spację po słowie ." - nie będzie ona wyświetlana, jest jednak niezbędna do oddzielenia tego słowa od tekstu.
Powyższa struktura może istnieć tylko wewnątrz zadeklarowanego słowa.
Standardowy zestaw słów języka FORTH posiada także słowa ułatwiające formatowanie wydruku. Często używanym słowem tego typu jest CR - przenosi ono kursor do początku następnej linii. Istnieją także dwa słowa zostawiające w odpowiednich miejscach spacje. Są to : SPACE i SPACES. Jak łatwo się domyśleć, pierwsze z nich zostawia jedną spację, natomiast w drugim przypadku ilość spacji jest równa liczbie znajdującej się na szczycie stosu. Przykład :
: PISZ2 CR ."ALA" 10 SPACES ."OLA" ; RETURN
i wykonujemy :
PISZ2 RETURN
W języku Arati BASIC istnieje bardzo pożyteczna instrukcja POSITION, nie istnieje niestety jej odpowiednik w języku FORTH. Nie ma jednak z tym żadnych problemów, gdyż, jak wykazałem już nie raz, wszystkie niezbędne słowa może dorobić użytkownik. Piszemy :
: X! 85 ! ; RETURN : Y! 84 C! ; RETURN : POS Y! X! ; RETURN
Stworzyliśmy nowe słowo o nazwie POS, będące wiernym odpowiednikiem instrukcji POSITION z języka BASIC. Nie zadeklarowaliśmy tego słowa od razu, lecz tworząc najpierw oddzielne słowa X! i Y!. Słowa te można wykorzystać do wpisywania pozycji c i y kursora w sposób niezależny. Przykład :
: SUN 125 EMIT 4 10 POS 30 4 DO I X! ." ALA" LOOP ; RETURN
Słowo to wykona następujące czynności: 125 EMIT - czyści ekran, 4 10 POS - ustawi kursor w pozycji x=4 y=10. Słowa zawarte między DO a LOOP będą przesuwały napis ALA w prawo aż do pozycji x=29 y=10. Uwaga : między .", a ciągiem znaków ALA występują dwie spacje. Jeżeli chcemy zmniejszyć tempo przesuwania należy wykorzystać słowo PAUSE, znane nam z poprzedniego odcinka tego cyklu.
Do wyprowadzania ciągu znaków na ekran służy także słowo TYPE. Z jego pomocą można wyświetlić napis znajdujący się w dowolnym miejscu pamięci. Aby tego dokonać, należy wprowadzić na stos adres początku, a następnie liczbę określającą ilość wyświetlanych znaków. Przykład :
7889 15 TYPE RETURN
Po wykonaniu tej sekwencji pojawi się nagłówek, które ukazuje się zawsze po wczytaniu języka do komputera. Nastąpi to oczywiście tylko w przypadku gdy posiadamy wersję Extended Fig-FORTH, gdyż tylko ta implementacja posiada nagłówek pod adresem 7889. Możemy więc użyć tego zapisu do określenia posiadanej wersji.
WPROWADZANIE DANYCH
Aby umożliwić komunikację z użytkownikiem, każdy język posiada instrukcje pozwalające wprowadzać różnorodne dane do programu. Zacznijmy od najczęściej stosowanego urządzenia wprowadzania, jakim jest klawiatura. Najprostszym słowem wykonującym to zadanie jest KEY. Słowo to wprowadza dowolny znak z klawiatury i umieszcza jego kod ATASCII na stosie. Zatrzymuje ono program do momentu, gdy znak zostanie podany. Przykład :
: KLA KEY DUP EMIT SPACE . ; RETURN
Po wywołaniu słowa KLA komputer będzie czekał na podanie znaku z klawiatury; gdy to nastąpi, wyświetli podany znak oraz jego kod.
FORTH oferuje bardzo ciekawe słowo WORD - pełni ono bardzo ważną funkcję w tym języku. Może być także wykorzystanie przez użytkownika do różnych celów. Aby zrozumieć jego działanie posłużymy się przykładem, piszemy :
32 WORD ATARI RETURN
Zauważmy, że w słowniku języka FORTH nie istnieje słowo ATARI, a jednak cała sekwencja została przyjęta bez zarzutu, gdyż pojawił się napis OK. Co się stało ? Słowo WORD powoduje przestawienie interpretacji w taki sposób, że ciąg znaków występujących za tym słowem nie jest uznawany za słowo FORT-a. Nazwa ta jest jednak zapamiętywana i przenoszona do pamięci ustalonej przez zmienną DP. Liczba występująca przed WORD to kod znaku, który jest traktowany jako znacznik kończący nazwę. W naszym przypadku jest nim liczba 32, czyli kod spacji. Istnieje w języku FORTH słowo HERE, które daje wartość zmiennej DP na stos.
HERE COUNT TYPE RETURN
Po wykonaniu tej sekwencji słów na ekranie została wyświetlona nazwa TYPE, Mimo, że nie użyliśmy słowa WORD w sposób jawny. FORTH wykorzystał go do wprowadzenia poszczególnych nazw pod HERE, aby je wykonać. Jako ostatnia została wprowadzona nazwa TYPE, a następnie wyświetlona przez słowo TYPE. Wyjaśnienia wymaga nieznane nam słowo COUNT. Jego zadanie polega na przygotowaniu danych dla TYPE. Nie wspomniałem jeszcze o tym, że słowo WORD zapamiętuje podany ciąg znaków w specyficzny sposób : przed nazwą zapisany zostaje jeden bajt określający jej długość. Aby otrzymać dane dla TYPE nie musimy się troszczyć o podawanie długości. Słowo COUNT zamienia podany przed nim adres na adres pierwszego znaku ciągu i jego długość. Zamiast tego słowa można by napisać następującą sekwencję :
DUP 1 + SWAP C@ RETURN
Należy pamiętać, że słowo WORD czyta ciąg znaków w momencie, gdy jest wykonywane. Czytanie zaczyna się od miejsca, w którym znajduje się w danym momencie kursor czytający. Spróbujmy zadeklarować nowe słowo zawierające WORD.
: PI 32 WORD HERE COUNT CR TYPE CR ; RETURN
Widzimy że podczas deklaracji nie występuje za słowem WORD żadna nowa nazwa. Wykonajmy :
PI ATARI RETURN
Tym razem słowo PI przeczytało napis ATARI i wyświetliło go na ekranie. Stało się tak dlatego, że po odczycie nazwy słowa PI interpreter języka FORTH umieścił swój kursor czytający za tym słowem. Od tego też miejsca rozpoczęło czytanie słowo WORD, umieszczone wewnątrz PI.
Roland Pantoła,
Tajemnice Atari, 05/1992r.