Loading AI tools
Z Wikipedii, wolnej encyklopedii
Atari BASIC – język programowania BASIC dla ośmiobitowych komputerów Atari. Rozprowadzany na cartridge z komputerami Atari 400/800/1200XL lub sprzedawany osobno. Wbudowany w komputery serii XL (oprócz 1200XL), XE i XE Game System. Stworzony w 1978 roku przez firmę Shepardson Microsystems na zamówienie Atari Inc. Nie bazuje jak większość mu współczesnych implementacji na Microsoft BASIC.
Przykładowe użycie Atari Basic | |
Autor | Shepardson Microsystems |
---|---|
Pierwsze wydanie | 1979; 45 lat temu |
Aktualna wersja stabilna | Revision C |
Język programowania | IMP-16 Assembler |
Platforma sprzętowa | Rodzina 8-bitowych Atari |
Rodzaj | język programowania |
Licencja | Zamknięte oprogramowanie |
LIST
użyć L.
lub LI.
lub LIS.
LET
może być pominięte, np. LET A=10
jest równoznaczne A=10
.GOTO
w konstrukcji IF THEN
. IF A=10 THEN GOTO 200
może być zastąpione przez IF A=10 THEN 200
.GOTO
i GO TO
oraz PRINT
i ?
.XIO
.GOTO
przeszukiwany jest cały program, ten sam mechanizm jest używany w przypadku pętli FOR NEXT
.Wydany na cartridge CXL4002[4]. Rozprowadzany wraz z komputerami Atari 400, Atari 800 i Atari 1200XL lub sprzedawany osobno. W późniejszych modelach 600XL, 800XL, serii XE oraz XEGS BASIC był wbudowany w komputer. Po włączeniu zasilania komputer uruchamiał interpreter BASIC. Przytrzymując klawisz OPTION przy starcie można wyłączyć BASIC. Dla konsoli gier XEGS jeśli nie wykryto podłączonej klawiatury, BASIC był wyłączany automatycznie.
Pod koniec lat 70 XX wieku w Stanach Zjednoczonych nastąpił gwałtowny rozwój rynku komputerów osobistych. Jako podstawowy język programowania do nauki jak i tworzenia profesjonalnych aplikacji uważany był w tym czasie BASIC. Stąd też praktycznie dla każdego komputera był on dostępny jako kluczowy komponent istotny dla jego sprzedaży. Najbardziej popularną implementacją BASIC był dialekt stworzony przez Microsoft[5]. Używano go w pierwszych komputerach osobistych takich jak Altair 8800/IMSAI, Apple II, Commodore PET i innych.
W roku 1978 firma Atari Inc. pracowała nad swoim pierwszym komputerem Atari 800 i jego tańszą wersją Atari 400. O ile system operacyjny był tworzony przez inżynierów Atari, to przy BASIC postanowiono użyć gotowego produktu. Zakupiono licencję Microsoft 8k BASIC[uwaga 1] dla procesora MOS 6502. Microsoft miał dostosować BASIC do nowego komputera ale po roku braku postępów Atari zrezygnowało z ich usług[6]. Atari rozpoczęło modyfikację BASIC we własnym zakresie. Kluczowym aspektem był rozmiar wynikowy skompilowanego kodu który miał zmieścić się na 8 KiB cartridge[uwaga 2]. Microsoft BASIC kompilował się do 8 KiB na procesorach Intel 8080 (procesor na który powstała pierwsza wersja BASIC dla komputera Altair 8800) ale na MOS 6502 było to 9 KiB co po dodatkowych modyfikacjach dawało 11 KiB[potrzebny przypis]. Problemy z rozmiarem i presja czasu – nowy komputer miał być zaprezentowany na targach Consumer Electronics Show w styczniu 1979 – skłoniły Atari to poszukiwania zewnętrznej firmy by przyśpieszyć prace.
We wrześniu 1978 roku Atari skontaktowało się z firmą Shepardson Microsystems Inc[7]. Firma ta miała doświadczenie w tworzeniu oprogramowania dla komputerów Apple II (Apple DOS) opartych o ten sam procesor MOS 6502. Ponadto opracowała BASIC dla innego komputera – Cromemco. Po zapoznaniu się z istniejącym kodem źródłowym Microsoft firma stwierdziła, że woli napisać BASIC od nowa. W październiku 1978 po zaakceptowaniu specyfikacji Paul Laughton i Kathleen O’Brien rozpoczęli prace. Zawarta umowa mówiła, że Shepardson Microsystems musi dostarczyć BASIC wraz z systemem zarządzania plików (później znanym jako DOS 1.0) najpóźniej do 6 kwietnia 1978[7]. Atari planowało zaprezentować wczesną wersję Microsoft BASIC na targach Las Vegas Consumer Electronics Show w styczniu 1979, a później rozpowszechniać nowy Atari BASIC[potrzebny przypis]. Prace nad nowym językiem programowania postępowały jednak dość szybko i BASIC był gotowy w grudniu 1978 roku po 2,5 miesiącach prac. Atari zaprezentowało na targach tę wersję a później rozpowszechniało ją na cartridge.
Na początku lat 80 XX wieku prawa autorskie do Atari BASIC zostały odkupione od Shepardson Microsystems przez nowo powstałą firmę Optimized Systems Software (OSS) założoną przez Billa Wilkinsona.
Kod źródłowy wraz z komentarzem twórców został opublikowany w książce „The Atari BASIC Source Book” w roku 1983.
Wersja Microsoft BASIC była później sprzedawana jako Atari Microsoft BASIC, jednak nigdy nie zdobyła popularności.
Wersję można zweryfikować pod adresem pamęci 43234[8]wykonując komendę BASIC:
PRINT PEEK(43234)
Wartość | Wersja |
---|---|
162 | Revision A |
96 | Revision B |
234 | Revision C |
Najpoważniejszym problemem w Revision A jest błąd w procedurze przenoszenia bloków pamięci o długości równej wielokrotności 256 bajtów. Generuje to błędy przy każdej operacji która wymaga przesuwania pamięci o tej długości w szczególności przy usuwaniu linii programu[9]. Revision B usuwa ten błąd, ale wprowadza inny bardzo podobny błąd który powoduje problemy częściej, bo przy dodawaniu linii programu[10]. Ostatecznie rozwiązano to w Revision C.
Revision | Opis | ||
---|---|---|---|
A | B | C | |
✗ | Usunięcie linii programu może zawiesić komputer[11]. | ||
✗ | Instrukcja GET nie inicializuje systemowego wskaźnika do bufora co prowadzi do błędów jeśli wcześniej użyto wyrażenia które zmieniło systemowy wskaźnik do bufora[9], np. GET po READ może zmienić numer linii DATA . | ||
✗ | Przypisanie ciągu które wymaga przesunięcia wielokrotności 256 bajtów powoduje zawieszenie się programu lub utratę części programu[9], np. A$=B$(257,512) . | ||
✗ | Dodanie nowej linii programu może zawiesić komputer[10]. | ||
✗ | ✗ | Użycie CSAVE nawet bez podłączonego magnetofonu generuje dźwięk zapisu który nie znika po pojawieniu się READY [12]. | |
✗ | ✗ | ✗ | Błędne wyniki potęgowania niektórych liczb1^44 to błędnie 2 (Rev. B i C) lub 2^3=7.99999991 (Rev. A). |
✗ | ✗ | ✗ | Zamiast -0 wyświetlany ciąg losowy[9], np.PRINT -0 daje -E-<8 |
✗ | ✗ | ✗ | INPUT , READ [9] i DIM mogą być wprowadzone bez argumentu, np. 10 INPUT . |
✗ | ✗ | ✗ | Użycie NOT może prowadzić do zawieszenia komputera[9], np. PRINT NOT NOT 1 . |
✗ | ✗ | ✗ | Wyrażenie CHR$(A) = CHR$(B) jest zawsze prawdziwe. |
✗ | ✗ | ✗ | Dwukropek jako separator instrukcji może być zastąpiony przez znak Escape (o kodzie 27). |
✗ | ✗ | ✗ | Funkcje OPEN , XIO i POINT akceptują argumenty tylko z zakresu od 0 do 32767. |
✗ | ✗ | ✗ | Funkcja TRAP powoduje zawieszenie programu jeśli linia w której występuje jest taka sama jak jej argument, np. 10 TRAP 10:GET #1,A . |
✗ | ✗ | ✗ | W programie możliwe zadeklarowanie tablicy większej niż dostępna wolna pamięć, np. DIM A(10922) . |
Słowo kluczowe | Opis |
---|---|
ABS | Zwraca wartość bezwzględną liczby. |
ADR | Zwraca adres zmiennej. |
AND | Operator logiczny i. |
ASC | Zwraca kod znaku. |
ATN | Zwraca wartość arcusa tangensa argumentu. |
BYE | Uruchamia Self Test lub Memo Pad w modelach Atari 400/800. |
CHR$ | Zwraca znak o podanym kodzie. |
CLOAD | Wczytuje program z kasety nagrany wcześnie CSAVE. |
CLOG | Zwraca wartość logarytmu dziesiętnego liczby. |
CLOSE | Zamyka kanał wejścia/wyjścia. |
CLR | Czyści wszystkie zmienne. |
COLOR | Określa kolor dla instrukcji graficznych; w trybach znakowych kod znaku. |
COM | To samo co DIM. Nieukończona implementacja COMMON z Microsoft BASIC. |
CONT | Wznawia wykonywanie programu od następnej linii po zatrzymaniu. |
COS | Zwraca wartość cosinusa argumentu. |
CSAVE | Zapisuje program na kasecie. |
DATA | Tworzy listę danych które będą odczytane przez instrukcję READ. |
DEG | Zamienia jednostkę argumentów funkcji trygonometrycznych na stopnie (standardowo radiany). |
DIM | Deklaruje ciąg znakowy lub tablicę liczb. |
DOS | Uruchamia DOS, jeśli go brak działa jak BYE. |
DRAWTO | Rysuje linię prostą do punktu; działa również w trybach tekstowych. |
END | Kończy działanie programu, zamyka kanały wejścia/wyjścia i wyłącza dźwięk. |
ENTER | Wczytuje i dołącza program z urządzenia zewnętrznego; typowo z kasety lub dyskietki. |
EXP | Zwraca wartość stałej e podniesionej do potęgi o wykładniku równym argumentowi. |
FOR | Rozpoczyna pętlę. |
FRE | Zwraca ilość wolnej pamięci w bajtach. |
GET | Odczytuje pojedynczy bajt z kanału wejścia/wyjścia. |
GOSUB | Uruchamia procedurę pod wskazanym numerem linii. |
GOTO i GO TO | Skok do linii o podanym numerze; może być pominięte przy konstrukcji IF THEN |
GRAPHICS | Zmienia tryb graficzny, kasuje ekran. |
IF | Rozpoczyna wyrażenie warunkowe. |
INPUT | Pobiera dane z kanału wejścia, standardowo z klawiatury. |
INT | Zwraca największą liczbę całkowitą nie większą od argumentu. |
LEN | Zwraca długość ciągu znakowego. |
LET | Nadaje wartość zmiennej; może być pominięte. |
LIST | Wyświetla program lub jego część na ekranie lub innym urządzeniu. |
LOAD | Wczytuje program z urządzenia zewnętrznego, typowo z kasety lub dyskietki. |
LOCATE | Odczytuje kolor piksela lub kod znaku o podanych współrzędnych. |
LOG | Zwraca wartość logarytmu naturalnego z podanej liczby. |
LPRINT | Drukuje tekst na drukarce. |
NEW | Kasuje program i wszystkie zmienne; wywoływane automatycznie przed LOAD i CLOAD . |
NEXT | Kończy pętlę rozpoczętą przez FOR . |
NOT | Logiczna negacja. |
NOTE | Zwraca pozycję w kanale wyjścia/wejścia; typowo w pliku. |
ON | Skok warunkowy połączony z GOTO lub GOSUB . |
OPEN | Otwiera kanał wejścia/wyjścia. |
OR | Logiczne lub. |
PADDLE | Zwraca położenie paddle (pokrętła sterującego). |
PEEK | Zwraca zawartość pamięci o podanym adresie. |
PLOT | Rysuje punkt o podanych koordynatach. |
POINT | Ustawia położenie wskaźnika w kanale wejścia/wyjścia. |
POKE | Zmienia zawartość pamięci. |
POP | Ignoruje linię powrotu dla GOSUB . |
POSITION | Ustawia kursor. |
PRINT i ? | Wysyła tekst do kanału wejścia/wyjścia, typowo na ekran. |
PTRIG | Zwraca stan przycisku paddle. |
PUT | Zapisuje jeden bajt to kanału wejścia/wyjścia. |
RAD | Zamienia jednostkę argumentów funkcji trygonometrycznych na radiany. |
READ | Odczytuje dane zapisane w instrukcji DATA . |
REM | Komentarz; można użyć zamiennie kropki. |
RESTORE | Ustawia pozycję od której instrukcja READ czyta dane zapisane przez DATA . |
RETURN | Koniec procedury wywołanej przez GOSUB . |
RND | Zwraca liczbę pseudolosową. |
RUN | Uruchamia program; opcjonalnie wczytuje go z urządzenia zewnętrznego. |
SAVE | Zapisuje program na urządzeniu zewnętrznym; typowo na kasecie lub dyskietce. |
SETCOLOR | Przypisuje kolor wybranemu logicznemu rejestrowi koloru. |
SGN | Zwraca znak argumentu. |
SIN | Zwraca sinus argumentu. |
SOUND | Generuje lub wyłącza dźwięk o podanych parametrach. |
SQR | Zwraca pierwiastek kwadratowy argumentu. |
STATUS | Odczytuje status kanału wejścia/wyjścia. |
STEP | Wskazuje o ile zwiększyć lub zmniejszyć zmienną w pętli FOR . |
STICK | Zwraca pozycję joysticka. |
STOP | Zatrzymuje program. |
STRIG | Zwraca stan przycisku joysticka. |
STR$ | Zamienia liczbę na ciąg znaków. |
THEN | Wskazuje na wyrażenie które ma być wykonane w instrukcji warunkowej IF . |
TO | Wskazuje na wyrażenie ograniczającę pętlę FOR . |
TRAP | Skok do linii programu w przypadku wystąpienia błędu. |
USR | Wywołuje procedurę w kodzie maszynowym z opcjonalnymi parametrami. |
VAL | Zamienia ciąg znaków na liczbę. |
XIO | Ogólna instrukcja wejścia/wyjścia; umożliwia m.in. zmianę nazwy pliku, formatowanie dyskietki. |
Kod | Opis |
---|---|
2 | Brak wolnej pamięci. |
3 | Zła wartość. |
4 | Zbyt dużo zmiennych, maksymalnie 128. |
5 | Zła długość ciągu znakowego. |
6 | Brak danych dla instrukcji READ . |
7 | Liczba większa niż 32767. |
8 | Błąd wprowadzania danych, próba wprowadzenia tekstu do zmiennej numerycznej. |
9 | Błąd deklaracji DIM ; zadeklarowany rozmiar większy niż 32767 lub odwołanie do indeksu spoza zakresu lub zmienna już zadeklarowana. |
10 | Zbyt wiele instrukcji GOSUB lub zbyt duże wyrażenie. |
11 | Dzielenie przez zero lub przekroczono zakres dla liczb zmiennoprzecinkowych. |
12 | Nie istnieje linia prgramu do której odwołuje się GOTO , GOSUB lub THEN . |
14 | Zbyt długa linia programu. |
15 | Użyto NEXT lub RETURN kiedy odpowiadające FOR lub GOSUB zostało usunięte. |
16 | Użyto RETURN bez odpowiadającego GOSUB . |
17 | Próba wykonania niewłaściwego kodu w pamięci. |
18 | Niewłaściwy znak początku zmiennej lub pierwszy znak argumentu VAL nie jest cyfrą. |
19 | Próba załadowania zbyt dużego programu. |
20 | Niewłaściwy numer urządzenia, dozwolone numbery od 1 do 7. |
21 | Próba załadowania programu instrukcją LOAD programu nie zapisanego SAVE . |
128 | Naciśnięty klawisz BREAK podczas operacji wejścia/wyjścia. |
129 | Próba otwarcia już otwartego kanału. |
130 | Próba użycia nieistniejącego urządzenia. |
131 | Próba odczytu kanału tylko do zapisu. |
132 | Nieprawidłowa komenda dla urządzenia. |
133 | Urządzenie lub plik nie zostało otwate. |
134 | Nieprawidłowy numer urządzenia. |
135 | Próba zapisu do kanału tylko do odczytu. |
136 | Koniec pliku. |
137 | Próba odczytu rekordu o długości większej niż 256 znaków. |
138 | Urządzenie nie odpowiada (timeout). |
139 | Błędne dane na porcie szeregowym lub uszkodzona dyskietka. |
140 | Błąd ramki portu szeregowego. |
141 | Kursor poza dozwolonym zakresem. |
142 | Błąd transmisji szeregowej. |
143 | Błąd sumy kontrolnej portu szeregowego. |
144 | Próba zapisu na dyskietce zabezpieczonej przed zapisem. |
145 | Błąd weryfikacji zapisu na dyskietce lub błędny handler ekranu. |
146 | Funkcja nie jest zaimplementowana dla urządzenia. |
147 | Brak pamięci dla operacji w wybranym trybie graficznym. |
160 | Zły numer stacji dysków. |
161 | Zbyt dużo otwartych plików. |
162 | Brak miejsca na dyskietce. |
163 | Błąd wejścia/wyjścia. |
164 | Zła struktura dysku. |
165 | Zła nazwa pliku. |
166 | Argument dla POINT wskazuje nieistniejące miejsce. |
167 | Plik jest zabezpieczony przed zapisem. |
168 | Niewłaściwa komenda. |
169 | Zbyt dużo plików na dyskietce. |
170 | Nie znaleziono pliku. |
171 | Zły argument dla POINT . |
Na 8 bitowe komputery Atari powstało kilka alternatywnych implementacji języka BASIC zarówno interpreterów jak i kompilatorów. Typowo były szybsze i oferujące więcej komend niż Atari BASIC.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.