Tajemnice ATARI

FORTH - część 5

    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 to 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 bloku ekranów o tej samej nazwie.
   Implementację Extended fig-FORTH można oczywiście przenieść z dysku na taśmę. W tym celu wczytujemy FORTHa 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 rozpowszechniania 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 z tego cyklu nie zmieścił się opis słów wykonujących odgałęzienia (skoki) warunkowe. Zacznijmy od:

f IF ... ENDIF

   Struktura ta wykonuje słowa zawarte między IF a ENDIF tylko wtedy, gdy znacznik logiczny f 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:

f 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 wykorzystanie 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ć mnę 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ł 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 Atari 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 POSITON 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 x 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 na 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óry 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 wykorzystane przez użytkownika do różnych celów. Aby zrozumieć jego działanie posłużmy 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 FORTHa. 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@

   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



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

Pixel 2001