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:


3. Jak przyspieszyć napisane w BASIC-u programy?

Są dwie podstawowe metody przyspieszanie programów w Basicu:


5. Kompilator "MMG Basic Compiler"

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:
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

Duzo wiecej o BCOM mozna poczytac tutaj:

http://atarionline.pl/forum/comments.php?DiscussionID=1624&page=1#Item_27

Kaz 2012-03-23 17:25:51

Zaktualizowalem spis Basicow o CTH Fast Basic, ktorego pliku zostaly dorzucone tez do archiwum.