Basic to najpopularniejszy w latach 80-tych język programowania, a to z tego względu, że większość producentów komputerów, w tym firma Atari, zdecydowała się umieszczać go w zestawie z komputerem - wbudowany w komputer (Atari XL/XE), na cartridgu (Atari 400/800) lub na firmowej dyskietce (Atari ST/STE). Jest stosunkowo łatwy do nauki, ale krytykowany za wyrabianie nawyku niestrukturalnego programowania oraz za powolność działania. W latach 90-tych wyparty przez języki strukturalne, takie jak Pascal i C oraz ich następców.
2. Jakie wersje BASIC-a mamy dla Atari?
"Atari BASIC" jest podstawową wersją języka Basic dla 8-bitowych komputerów Atari, bo firmowaną przez Atari, ale nie jedyną. Wielu producentów oprogramowania stworzyło swoje wersje tego języka, przeważnie znacznie lepsze niż "Atari BASIC". Oto lista implementacji języka Basic dla naszego komputera:
W numerze 8 "Komputera" z 1986 roku pojawił się krótki opis kompilatora MMG Basic Compiler autorstwa tajemniczego jr w artykule pod tytułem "Kompilator MMG". Oto treść tego artykułu (cytuję za Światem Owoców):
Jedną z wad programów napisanych w BASICu jest ich powolność. Jest jednak na to rada: przekształcenie w program w języku maszynowym.
Posiadacze wszystkich komputerów Atari opartych na mikroprocesorze 6502, między innymi 800 XL i 130 XE, są pod tym względem w korzystnej sytuacji. Mogą skorzystać z łatwego w obsłudze i skutecznego w działaniu kompilatora MMG rozpowszechnianego przez firmę Microsoft, a dostępnego również na naszym rynku.
MMG współdziała z DOS 2.OS lub DOS 2.5. Jego dwie główne części — to kompilator CMP.OBJ i asembler ASM.OBJ. Kompilator wykonuje pierwszy przebieg zamieniając program w języku Basic w bloki asemblera, które zapisuje na dyskietkę. W następnych dwóch przejściach bloki te przekształcane są w kod maszynowy, który także zostaje zapisany na dyskietkę i może być odtąd uruchamiany za pośrednictwem DOS lub nazwany AUTORUN.SYS, co spowoduje jego automatyczne uruchomienie po włączeniu komputera. Dla oszczędności miejsca MMG automatycznie kasuje bloki asemblera, chyba że na końcu programu dopiszemy: 32767 LIST.
Tworzona jest ponadto mapa odniesienia linii programu w BASICu do adresów w kodzie maszynowym, co ułatwia ewentualne modyfikacje. Ponieważ wszystkie te bloki pomocnicze zajmują miejsce na dyskietce, najdłuższy program, który możemy skompilować, nie powinien przekraczać około 120 sektorów, czyli 15 KB. MMG nakłada na treść programów nieznaczne wymagania, z reguły łatwe do uwzględnienia. Po komendach GOTO, GOSUB i RESTORE numer linii musi być wyrażony liczbą, a nie zmienną. Nie powinno być w programie komend CONT, CLOAD, CSAVE, ENTER, LOAD, NEW, SAVE. Gdy z jednego programu wywoływany jest inny, instrukcję DIM należy zastąpić równoważną — COM.
Praca z MMG pozwala zauważyć jak należy pisać programy, które potem w kodzie maszynowym będą bardziej zwarte. Na przykład zastępowanie GOTO przez GOSUB (z ewentualnym POP) znacznie zmniejsza objętość programu.
MMG pozwala na stosowanie liczb zmiennoprzecinkowych, czyli takich jak w BASICu, lub całkowitych w granicach od -32768 do 32767 z możliwością stosowania większych adresów przy instrukcjach PEEK i POKE. Pierwsza wersja powoduje mniej więcej trzykrotne przyspieszenie wykonywania programu, warto jednak pokusić się o więcej. Ograniczenie się do dwubajtowych liczb całkowitych ze znakiem nie jest bynajmniej trudne. Niemal wszystkie gry napisane w języku maszynowym pracują w takim zakresie liczb.
W MMG istnieje ważne ułatwienie w stosowaniu liczb losowych. Zamiast na przykład RND(0)*18 wpisujemy do programu RND(18) i daje to taki sam efekt. A co zrobić z wyrażeniem INT(RND(0)*1.8)? I na to jest rada: RND(180)/100."
6. Kompilator "BCOM"
"BCOM" to skrót od rozszerzeń BAS i COM - program przekształca te pierwsze w te drugie. Program autorstwa Radka "Raster" Sterba nie posiada instrukcji, ale kolega Andreas "Charlie Chaplin" podzielił się swoją wiedzą w zakresie obsługi tego programu (po angielsku, a tłumaczenie moje):
"Po uruchomieniu programu:
podaj nazwę programu w Basicu, na przykład: D1:TEST.BAS,
wpisz nazwę pliku wynikowego, na przykład: D2:TEST.COM. Uwaga, jeżeli używasz tylko jednej dyskietki, upewnij się, że masz na niej wystarczająco dużo miejsca, zarówno na pliki BAS, jak i COM.
Następnie naciśnij klawisz "RETURN" i pojawi się menu po czsku. Nie przejmuj się jednak ;), oto co należy zrobić:
naciśnij "1" jeżeli program w Basicu jest stokenizowany (zapisany komendą SAVE),
naciśnij "2" - jeżeli program w Basicu jest listingiem (zapisany komendą LIST).
Program załaduje wtedy plik BAS i skonwertuje go do pliku typu COM. Po zakończeniu operacji program zapyta, czy wyjść do DOS-a czy konwertować kolejny plik.
naciśnij klawisz "A", jeżeli chcesz skompilować kolejny program,
naciśnij dowolny inny klawisz, jeżeli chcesz przejść do DOS-a.
Uwaga! Program działa tylko na plikach BAS krótszych niż 28 KB. Wszystkie wytworzone przez program pliki COM mogą być załadowane z DOS-a, ale po ich uruchomieniu DOS jest usuwany z pamięci. Dlatego nie kompiluj plików wymagających DOS-a albo programów wieloplikowych. W praktyce około 20-30% programów BAS skompilowanych do plików COM działa. Reszta przeważnie nie, ze względu na zbyt małą dostępną pamięć, ale można tu użyć pewnego tricku. Załaduj program z taśmy (obojętnie czy to zapis normalny albo turbo), wtedy nie będziesz potrzebował DOS-a, a z tego co wiem więcej pamięci będzie dostępne (niższy lo-mem)."
7. Jak sobie ułatwić pisanie programów w Atari Basic w emulatorze?
Jeżeli program w Atari Basic mamy na obrazie dyskietki, na przykład w formacie ATR, to po podpięciu do emulatora i wystartowaniu Atari Basic ładujemy z obrazu dyskietki program, na przykład o nazwie PRZYKLAD.BAS, komendą:
LOAD "D:PRZYKLAD.BAS"
Potem nie musimy ciągle zapisywać go obrazie dyskietki, co bywa powolne i kłopotliwe, ale możemy też na twardym dysku. Ponieważ taki emulowany twardy dysk jest po prostu wybranym wcześniej w emulatorze zwykłym folderem na komputerze PC, mamy więc jednocześnie dostęp do tego pliku z poziomu emulatora Atari i z poziomu komputera PC - co często jest bardzo przydatne i szybsze, gdy nie tylko korzystamy z edytora Atari Basic na Atari, ale również przetwarzamy program w Basicu na PC, na przykład drukujemy na współczesnej drukarce, edytujemy w ulubionym edytorze programisty, etc. Zapis naszego programu jako listingu na twardym dysku, którego emulację włączamy w emulatorze, dokonuje się przez komendę:
LIST "H6:PRZYKLAD.LST"
co nam skonwertuje program do pliku tekstowego z normalnymi dla PC końcami wiersza, innymi niż na Atari. Potem możemy sobie edytować go na PC, a następnie wczytujemy do emulatora:
ENTER "H6:PRZYKLAD.LST"
co z powrotem przekształci kody końca wiersza z pecetowskich na atarowskie. Potem, jeżeli znowu potrzebujemy zapisać program na obrazie dyskietki, na przykład na koniec pracy nad nim, wykorzystujemy komendę:
SAVE "D:PRZYKLAD.BAS"
Należy pamiętać, że w różnych emulatorach nieco inaczej ustawia się twardy dysk. W najpopularniejszych Atari800 i Altirra przyporządkowany do twardego dysku jest napęd oznakowany literą H i numerem. Numery od 1 do 4 (czyli przy wpisywaniu komend - od H1 do H4) to różne katalogi zamontowane z zapisem danych bez żadnych konwersji, a od 6 do 9 (od H6 do H9 z konwersją końca linii między systemem PC a Atari - tak jak w przykładach powyżej.
8. O kompilacji w Advan Basic (autor: Łukasz "LukLab" Labuda)
Advan Basic to w istocie kompilator, a nie interpreter Basica. Każdy program, przed jego uruchomieniem, jest kompilowany. Istnieją dwie podstawowe metody kompilacji:
1) po wprowadzeniu programu, wydajemy polecenie RUN, które powoduje skompilowanie programu i jego uruchomienie. Po zakończeniu działania programu, powracamy do edytora. Ta metoda działa tylko przy stosunkowo krótkich programach, a to z uwagi na ograniczenia w dostępnie do pamięci. Można też zastosować komendę RUN 1, która spowoduje usunięcie z pamięci skompilowanego kodu w Basicu, co umożliwi uruchomienie większego programu, ale z tym skutkiem, że po jego zakończeniu z poziomu edytora nie będziemy mieli już do niego dostępu. Konieczne jest więc wcześniejsze nagranie na dysk.
2) drugą metodą jest wcześniejsze nagranie programu na dysk komendą SAVE, np.
SAVE D1:TEST.BAS
a następnie jego skompilowanie z poziomu edytora komendą COMPILE z podaniem ścieżki i nazwy, np.
COMPILE D1:TEST.BAS/D1:TEST.001
następnie wystarczy uruchomić tak skompilowany program komendą EXEC, np.
EXEC D1:TEST.COD
Dodam, że kompilując program Advan Basic automatycznie nada mu rozszerzenie .COD, dlatego też nie możemy posługiwać się nim wpisując go w komendzie COMPILE (jednocześnie plik z rozszerzeniem jak u nas .001 zostanie skasowany z dysku zaraz po kompilacji, jako typowy plik tymczasowy). Przy większych programach można na końcu komendy COMPILE dodać cyfrę 2, np.
COMPILE D1:TEST.BAS/D1:TEST.001 2
co spowoduje przy uruchamianiu skompilowanego programu usunięcie z pamięci Advan Basica, a w konsekwencji umożliwi uruchamianie jeszcze większych objętościowo programów.
To tylko główne opcje kompilacji. Szerzej można przeczytać o powyższym w AtariWiki.
A o uruchamianiu i samouruchamianiu programów w Basicu można poczytać w tym artykule.
Warty zauważenia jest fakt, że zarówno pod MMG Basic Compilerem, jak i pod ABC Basic Compilerem występują po kompilacji błędy liczb zmiennopozycyjnych, które... Nie wpływaja potem na działanie skompilowanego programu. Oczywiście piszę tutaj o kompilacji kodu programu zapisanego spod standardowego Atari Basica. Co do samej szybkości działania - popełniłem kiedyś taka produkcje na Atari 600XL (snake - na Real 16K Game Compo zaproponowane przeze mnie), gdzie przed kompilacją (program z uwagi na ograniczenie pamieci napisałem w czystym Atari Basicu, można pobrać stąd: http://atariarea.krap.pl/pliki.php?sec=d...) gra się w miarę normalnie, a po kompilacji - jest za szybko ;) Uwaga!!! Rozpoczynając grę - należy od razu ustawić kierunek ruchu!!! (brak miejsca w 600XL - już po dodaniu pojedyńczej instrukcji było przepełnienie pamięci, a założenie było takie - że musi chodzić na oryginalnym 600XL).
Ja nie umiem tego zrobic, nawet nie mam odpowiednich narzedzi (zdaje sie, ze Qmeg cos takiego potrafi?).
maki mak @2009-05-23 22:46:02
być może lamerskie pytanie, ale jak w basicu uzyskać działanie "strzałek" klawiatury, tak aby przejść do wyższych linii kodu, jak na atari CTRL + klawisze strzałek.
Troche niejasne pytanie. Chodzi Ci o to, jak w Basicu sterowac kursorem czy jakimi klawiszami kierowac kursorem podczas edycji programu w Basicu?
Jezeli to chodzi o to drugie, to podejrzewam, ze problem bierze sie stad, ze uzywasz emulatora i nie wiesz, jaki jest odpowiednik kombinacji CTRL+klawisze strzalek.
Jezeli to emulator Atari800Win to w opcji "Input" masz ustawianie "Arrow keys". Ustawisz "Control + Arrows" i klawisze strzalek peceta dzialac beda jak kombinacja Control + strzalka na Atari. Ja preferuje jednak ustawienie "Arrows only", bo wtedy strzalki dzialaja tak jak na Atari - wyswietlaja odpowiednie znaczki. A dopiero uzycie ich z pecetowskim Controlem daje odpowiednik atarowskiego Control + strzalka. Tak jest naturalniej.
maki mak @2009-05-25 13:41:39
tak, chodzi o to, ustawienia znalazłem, problem w tym, że nic nie dają, kuros się nie przemieszcza, znalazłem kombinacje "Ctrl+_" i "Ctrl+'+'", ale to tylko w górę i w dół działa, kombinacja na w prawo i w lewo nie znalazłem. Mam emulator Atari800Win Plus 4.0.
A to nie masz klawiatury pecetowskiej ze strzalkami kursora? Bo to te klawisze z Control dzialaja jako odpowiedniki atrarowskich strzalek.
PONADTO dzialaja kombinacje podane przez Ciebie (czyli z pecetowskimi plusami i minusami, bo te znaki sa na klawiszach Atari tam gdzie znaki strzalek). A "brakujace" w prawo i w lewo znajdziesz w menu "Help", patrz "Keyboard Layout".
maki mak @2009-05-26 11:56:31
mam strzałki ale nie działają, ale skoro wszystkim działa, a tylko mi nie, to problem musi być po mojej stronie. coś wymyślę ;-)
maki mak @2009-05-26 12:11:57
odinstalowałem emulator i jeszcze raz zainstalowałem i wszystko działa ;-) przepraszam za zamieszanie
BCOM nie jest kompilatorem. Dodaje do programu w basic'u procedurę, która włącza basic i uruchamia program w standardowym interpreterze. Świetny do tworzenia plików typu "autostart".