FAQ o kompilatorach BASIC-a by Kaz 2008-01-17 19:15:32
1. Co to jest Basic?
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)."
sikor 2008-01-18 10:09:08
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=download&id=467) 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). MDW 2008-01-18 12:19:56
Dlaczego ten tekst nie pojawił się w 1990-93 roku? Ozłociłbym... :D MaW 2008-01-18 16:02:56
ile bym dał, żeby był ActionScript-2-8bit compiler... :) pps 2008-11-05 15:59:56
W plikach brak, ale wydaje mi się, że istniał Turbo Basic XL na cartdridge'u... Czy nie...? Kaz 2008-11-05 23:00:11
Istnial, nawet chyba mam gdzies na cartridgeu. pps 2008-11-06 12:07:45
A da radę jakoś go do *.car wcisnąć? Kaz 2008-11-06 21:30:16
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. Kaz 2009-05-25 00:45:43
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. Kaz 2009-05-26 01:51:17
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 Kaz 2009-05-27 00:22:15
Nic nie szkodzi. Milego programowania. Kaz 2009-07-01 22:39:28
Wiele porad dotyczacych programowania w Basicu pojawilo sie przy okazji konkursu "Napisze se": http://atarionline.pl/forum/comments.php?DiscussionID=33&page=1#Item_38 QTZ 2010-10-05 15:44:33
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". Kaz 2012-03-07 12:58:33