Start | Super Packer | Atari Graphics Studio | Graph2Font | Mads | MadPascal | Atari Zines | YouTube http://madteam.atari8.info  
MEMBERS
PRODUCTIONS
S C E N E
G A M E S
T O O L S
V B X E
GRAPHICS
WORK IN PROGRESS
Bubble Shooter
HARDWARE
Snes2Joy / Pad4Aatari / TOM rev2
Sio2SD / Pajero
Sio2SD / Rocky
Stereo / Pajero
GTIA / Psychol
ANTIC + VBXE test
ARTICLES / MAGAZINES
DEMO EFFECTS
LINKS
   

Marek Turowski
Kurs Turbo Basica XL (1)
Syzygy #2

Drogi użytkowniku atarynki, nie mający zielonego pojęcia o programowaniu w języku assemblera, a znający choć trochę BASIC. Jeśli masz ambicję napisać wspaniały, szybki, wręcz olśniewający program, to zapewne sięgasz po najprostsze rozwiązanie. To znaczy, nie sięgasz po klawisz OPTION przy włączaniu komputera. ATARI BASIC! Jeśli nawet otoczysz się podręcznikami i poradnikami, jedyne co z nich wyczytasz na temat łatwości osiągania wymarzonych efektów, to: ...niestety...bardzo żmudna praca...nie pozwala...nie daje uciekać się do języka maszynowego...szybkość nie jest oszałamiająca...praktyczna przydatność pod znakiem zapytania...zbyt długo...nie można...z powodu...jeszcze jedna wada...znacznie mniejsza szybkość...niezbędna procedura maszynowa... Są to cytaty z "PORADNIKA PROGRAMISTY ATARI" W. Zientary (swoją drogą, bardzo dobrego), wynotowane z rozdziału o grafice i animacji, z kilku zaledwie stron.

Na szczęście, możemy dokonać innego wyboru. Do dyspozycji mamy jeszcze kilka odmian BASIC-a - BASIC XE, MICROSOFT BASIC i napisany w 1985 roku przez Franka Ostrowskiego TURBO BASIC XL, którym zajmiemy się na łamach naszego maga. Dlaczego TURBO BASIC? Na początek mały test. Zaopatrujemy się w kartkę, coś do pisania, zegarek z sekundnikiem i nośnik z zapisanym jakimkolwiek programem, napisanym w ATARI BASIC-u. Odpalamy komputer z włączonym interpreterem BASIC-a. Wykonujemy instrukcję ? FRE(0). Wynik zapisujemy. Następnie prosta pętla FOR I=0 TO 10000:NEXT I, uruchamiamy ją i mierzymy czas wykonania, wynik również zapisujemy. Teraz, funkcją LOAD DOS-u wczytujemy TURBO BASIC i powtarzamy wszystkie czynności. Próbujemy też uruchomić program napisany w ATARI BASICu. Podsumowujemy wyniki, dochodzimy do wniosku, że TURBO-BASIC jest "nieco" szybszy, że pozostawia nam więcej wolnej pamięci i jest "kompatybilny" z ATARI BASIC-em. Jeśli dodać do tego, że ma o ponad 40 instrukcji więcej, a programy pisze się łatwiej, i co też nie bez znaczenia, dużo przyjemniej, to można by sądzić, że jesteśmy już prawie w niebie. Tak dobrze to jednak nie jest. Ma on też i swoje wady. Jest dużo wolniejszy od języka maszynowego, trzeba go wczytywać z urządzenia zewnętrznego, wymaga nieco większej ostrożności przy testowaniu programów, albowiem resetowanie zawieszonego komputera znacznie częściej, niż w ATARI BASIC-u, kończy się bardzo smutno. Ma też swoje chimeryczne zagrywki, kiedy poprawnie napisany program nie przejawia ochoty do pracy. Dlaczego? Jak tego uniknąć? O tym później. Jak wszystko, co nowe wymaga także nauki, pozostaje też kwestia przyzwyczajenia się do niego. Jednak używając go, szybko zapomnimy o istnieniu ATARI BASIC-a. Muszę się przyznać, że bardzo łatwo przyszło mi to napisać, bo mam 192kB RAM-u i 128kB na RAM-CARCIE. Taka konfiguracja, oraz DOS 6.1 plus PROFESSIONAL COPY jako system znacznie ułatwia korzystanie z TURBO-BASIC-a, gorąco polecam! Uruchomienie DOS-u i TURBO BASIC-a trwa około trzech sekund, a więc o niebo krócej, niż korzystając ze stacji. W jeszcze gorszej sytuacji są posiadacze magnetofonów, zwłaszcza bez jakiegokolwiek TURBO, tu stosowanie TURBO-BASIC-a do programowania staje się problematyczne.

Czas na opis. TURBO-BASIC jest jednostronnie zgodny z ATARI BASIC-em, to znaczy, że każdy, kulturalnie napisany program w ATARI BASIC-u będzie działał w TURBO-BASIC-u. Tylko w przypadku programów zapisanych instrukcją LIST wystąpią kłopoty z ich odczytaniem, gdy zawierają słowa kluczowe TURBO-BASIC-a użyte jako nazwy zmiennych. Należy wtedy dokonać zmiany tych nazw. Także programy z zawartymi w nich nierelokowalnymi procedurami maszynowymi mogą źle działać, lub nawet zawiesić komputer, gdyż inny jest obszar pamięci dostępnej dla użytkownika. Takie samo zjawisko wystąpi, jeśli program odwołuje się bezpośrednio do adresów Display Listy (pamięć obrazu jest umieszczana tuż pod RAMTOP-em, a ten jest inny dla obu BASIC-ów). TURBO-BASIC pozostawia dla użytkownika obszar pamięci od adresu 13865 ($3629) do 49151 ($BFFF), przy czym w górnej jego części umieszczana jest jeszcze pamięć obrazu, Wolna pozostaje również szósta strona - 1536 ($0600) do 1791 ($06FF). Instrukcje mogą być wprowadzane w dowolnej formie (w negatywie, małymi literami). Bezpośrednio w programie można stosować liczby szesnastkowe, poprzedzone znakiem $. Nazwy zmiennych muszą się zaczynać od litery i dodatkowo od znaku podkreślenia. Tak, jak w ATARI BASIC-u, interpreter TURBO-BARIC-a odnajduje wiersze przeszukując program od początku. Szybkość wykonywania takiego programu zależy od jego długości i struktury. Można jednak wiersz lub procedurę oznaczyć etykietą (nazwą), wtedy adres takiego wiersza jest umieszczany w tablicy zmiennych. Odwołanie się do etykiety powoduje bezpośredni skok do wiersza lub procedury. W takim przypadku szybkość programu przestaje być zależna od jego długości i położenia w nim wykonywanych wierszy. Etykieta musi być umieszczona na początku wiersza i poprzedzona znakiem #. Z powodu stosowania etykiet tablica zmiennych w TURBO-BASIC-u ma wielkość 256 wpisów (ATARI BASIC - 128). Inny jest sposób pisania programów. Dzięki nowym instrukcjom i funkcjom zbędne jest korzystanie z wielu konstrukcji popularnych w ATARI BASIC-u. Dla utrzymania zgodności z ATARI BASIC-em zachowane zostały instrukcje w zasadzie już zbędne (GOTO, GOSUB, POP).

Oto zestawienie struktur:

ATARI BASIC

TURBO-BASIC

GOTO (numer)

GO# (nazwa)

GOSUB (numer)

EXEC (nazwa)

ON ... GOTO (numery)

ON ... G0# (nazwy)

ON ... GOSUB (numery)

ON ... EXEC (nazwy)

TRAP (numer)

TRAP #(nazwa)

RESTORE (numer)

RESTORE #(nazwa)

POP :GOTO (numer)

EXIT #(nazwa)

FOR I=0 TO X:NEXT I

PAUSE X

Wiersz zaznaczony etykietą:

100 #(nazwa):(instrukcje)

Oprócz pętli FOR/NEXT oraz instrukcji warunkowej IF/THEN TURBO-BASIC posiada kilka innych rodzajów pętli i instrukcję IF/ELSE/ENDIF. Pozwala to na znacznie prostsze budowanie bloków programu. Oto następne zestawienie:

ATARI BASIC

TURBO-BASIC


pętla bez końca

100 ...
...
500 GOTO 100
100 DO:...
...
500 LOOP

pętla z warunkiem na końcu

100 ...
...
500 IF...THEN 100
100 REPEAT:...
...
500 UNTIL...

pętla z warunkiem na początku

100 IF...THEN 510
...
500 GOTO 100
510 ...
100 WHILE
...
500 ...:WEND
510 ...

instrukcja warunkowa z dwoma wariantami

100 IF...THEN 300
...
290 GOTO 510
300 ...
...
500 ...
510 ...
100 IF...
...
290 ELSE
300 ...
...
500 ...:ENDIF
510 ...

opuszczenie pętli warunkowej lub bez końca

100 ...
...
300 IF...THEN 510
...
500 IF...THEN 100
510 ...
100 REPEAT :...
...
300 IF...THEN EXIT
...
500 UNTIL ...
510 ...

opuszczenie pętli FOR/NEXT lub procedury

100 FOR I=0 TO 100
...
300 IF...THEN POP :GOTO 510
...
500 NEXT I
510 ...
100 FOR I=0 TO 100
...
300 IF...THEN EXIT
...
500 NEXT I
510 ...

To tylko niektóre przykłady możliwości TURBO-BASIC-a. Powinno się stosować struktury przeznaczone dla niego zwłaszcza tam, gdzie wymagana jest duża szybkość programu, stosowanie ich znacznie zwiększy przejrzystość programu i bardzo ułatwi pracę. Oczywiście, nic nie stoi na przeszkodzie, by stosować także instrukcje typowe dla ATARI BASICA W tym odcinku naszego kursu pozostałaby jeszcze sprawa współpracy z DOS-em. Tutaj widać znaczną różnicę - w ATARI BASIC-u można przechodzić do DOS-u w każdej chwili bez obaw o utratę programu. Przy TURBO-BASIC-u możemy o tym spokojnie zapomnieć! Przejście do DOS-u powoduje nie tylko utratę BASIC-a, ale i pisanego w nim programu! Po wykonaniu instrukcji DOS doczytywany jest plik DUP.SYS, który niszczy TURBO-BASIC. Są DOS-y, np. II+/D napisany przez S. Dorndorfa, które dają możliwość ponownego uruchomienia TURBO-BASIC-a, należy wykonać komendę RUN 6000, program jednak ulega skasowaniu. Nie polecałbym jednak stosowania tej metody, gdy uda nam się zawiesić komputer a po jego zresetowaniu zgłosi się DOS. Zdarzyło mi się kilka razy tak, że uruchomiony ponownie TURBO-BASIC działał źle, ale ujawniło się to dopiero wtedy, gdy chciałem zapisać na dysk efekty swojej pracy. Aby umożliwić użytkownikowi kontakt z DOS-em TURBO-BASIC został wyposażony w kilka przydatnych instrukcji:

BLOAD np. BLOAD "D:nazwa.ext" (BL.)
Odczytuje z podanego urządzenia plik binarny i umieszcza go w pamięci pod adresem podany w nagłówku pliku, lecz go nie uruchamia.
Odpowiada to funkcji LOAD /N DOS-u.

BRUN np. BRUN "D:nazwa.ext" (BR.)
Odczytuje z podanego urządzenia plik binarny, umieszcza go w pamięci pod adresem podanym w nagłówku i uruchamia go.
Odpowiada to funkcji LOAD DOS-u.

DELETE np. DELETE "D:nazwa.ext" (DEL.)
Usuwa z dysku plik (pliki) podane jako nazwa.
Odpowiada to funkcji DELETE lub ERASE FILE DOS-u.

DIR lub DIR "Dx:*.*", gdy  dotyczy numeru stacji innego niż D1:
Odczytuje katalog dysku.
Odpowiada funkcji DIRECTORY DOS-u.

LOCK np. LOCK "D:nazwa.ext"
Zabezpiecza plik (pliki) podane jako nazwa.
Odpowiada funkcji LOCK FILE DOS-u.

RENAME np. RBNAME "D:stara.ext,nowa.ext" (REN.)
Zmienia nazwę podanego pliku.
Odpowiada funkcji RENAME FILE DOS-u.

UNLOCK np. UNLOCK "D:nazwa.ext" (UNL.)
Odbezpiecza plik (pliki) podane jako nazwa.
Odpowiada funkcji UNLOCK FILE DOS-u.

Wszystkie nazwy podajemy na ogólnie przyjętych zasadach korzystania z DOS-u, można używać również znaków specjalnych (*, ?). Należy jednak bardzo uważać na to, co się robi, gdyż nie będzie żadnych ostrzeżeń typu "ARE YOU SURE?" czy brzęczyków i w jednej chwili możemy stracić zawartość dysku. Podane instrukcje potraktowałem na razie bardzo ogólnie, dokładniej zajmiemy się nimi następnym razem. By zakończyć kwestię DOS-u trzeba jeszcze powiedzieć, że nie każdy DOS poprawnie współpracuje z TURBO-BASIC-em. Zanim zdecydujemy się na pisanie programów musimy dokładnie przetestować DOS. Jak? W następnym odcinku. Najczęstszą dolegliwością jest zła współpraca obu programów przy operacjach WE/WY. Ja osobiście wybrałem DOS II+/D v. 6.4, a później wersję na RAM-CART. Mimo kilku błędów, niezbyt uciążliwych na szczęście, jest to, nie tylko w mojej opinii, najlepszy DOS. Zajmuje mało miejsca na dysku i w pamięci, nie ma pliku DUP.SYS, ma niespotykane w innych DOS-ach możliwości (ciekawostką jest możliwość automatycznego zakładania ramdysku na komputerze bez rozszerzenia pamięci), no i co najważniejsze dla nas, to bezbłędna współpraca z TURBO-BASIC-em, jego kompilatorem, jak i biblioteką procedur.

Na zakończenie chciałbym jeszcze dodać, że jeśli coś z niniejszej lekcji jest niezrozumiałe lub nieznane, to bez obawy, wszystko się wyjaśni w następnych odcinkach. Podam wszystkie instrukcje nieznane w ATARI BASIC-u. Jak już zaznaczyłem na początku, kurs ten jest przeznaczony dla tych, którzy mają już jako takie pojęcie o programowaniu w BASIC-u, zacznie się bowiem od momentu, w którym TURBO-BASIC zaczyna się różnić od ATARI BASIC-a. Oczywiście, jeśli redakcja zostanie zasypana listami z prośbą o lekcje ABC, to równolegle poprowadzimy zajęcia od "zera". Jeszcze w kwestii formalnej - do tego, co będę starał się wam przekazać dochodziłem sam, są to moje doświadczenia. Kurs ten na pewno nie wyczerpuje wszystkich możliwości TURBO-BASICA, języka dającego tak ogromną swobodę programiście, że chyba mało kto mógłby powiedzieć, że wie wszystko, co można za jego pomocą osiągnąć. W swojej edukacji, jak i przy pisaniu tego artykułu posiłkowałem się poradnikiem "Języki Atari XL/XE" cz. l Wojciecha Zientary, wydanym przez SOETO.

Marek Turowski

 

madteam.atari8.info © MadTeam, hosted: www.atari8.info