Atari BASIC

Atari Basic
Ilustracja
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

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.

Charakterystyka[1]

  • Interpreter, dostępne kompilatory firm trzecich.
  • Edytor umożliwia wprowadzanie kodu programu w dowolnym miejscu na ekranie i jego dowolną edycję. Wprowadzenie nowej linii programu wymaga naciśnięcia klawisza Return.
  • Sprawdzanie składni odbywa się natychmiast po wprowadzeniu linii programu.
  • Program przechowywany jest w pamięci w postaci zakodowanej, słowa kluczowe BASIC zamieniane są na 1 bajtowe znaczniki[2].
  • Możliwe jest użycie skrótów przy wpisywaniu wszystkich słów kluczowych. Należy wpisać pierwsze kilka liter i zakończyć je kropką, np. zamiast LIST użyć L. lub LI. lub LIS.
  • Słowa kluczowe i zmienne muszą być zapisane dużymi literami.
  • Zmienne przechowujące ciągi znakowe muszą być zadeklarowane przed użyciem.
  • Nie ma konieczności deklarowania zmiennych numerycznych.
  • Wszystkie liczby przechowywane są jako zmiennoprzecinkowe. Nie ma typu całkowitego.
  • Komenda jest wykonywana natychmiast jeśli nie ma numeru linii.
  • Słowo kluczowe LET może być pominięte, np. LET A=10 jest równoznaczne A=10.
  • Nie ma konieczności użycia GOTO w konstrukcji IF THEN. IF A=10 THEN GOTO 200 może być zastąpione przez IF A=10 THEN 200.
  • Możliwe jest użycie zamiennie: GOTO i GO TO oraz PRINT i ?.
  • Można użyć procedur systemu operacyjnego wywołując instrukcję XIO.
  • Po przełączeniu się w inne tryby graficzne niż standardowy tekstowy 40×24 znaków, w dolnej części dostępne jest okno tekstowe 40×4 które umożliwia wprowadzanie komend.
  • Naciśnięcie klawisza Esc a potem kombinacji innych klawiszy powoduje wstawienie znaku specjalnego, np. kasującego ekran.
  • Atari BASIC jest wolniejszy od innych implementacji na komputery 8 bitowe[3]. Spowodowane jest to następującymi czynnikami: wolna systemowa biblioteka liczb zmiennoprzecinkowych, używanie tylko liczb zmiennoprzecinkowych, w celu znalezienia linii skoku dla GOTO przeszukiwany jest cały program, ten sam mechanizm jest używany w przypadku pętli FOR NEXT.

Rozpowszechnianie

Cartridge z BASIC włożony do slotu Atari 400

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.

Historia

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[a] 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[b]. 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.

Lista osób biorących udział w projekcie[7]

  1. Paul Laughton – lider, główny programista.
  2. Kathleen O’Brien – główny programista.
  3. Bill Wilkinson – specyfikacja, procedury zmiennoprzecinkowe.
  4. Paul Krasno – funkcje matematyczne.
  5. Bob Shepardson – modyfikacja assemblera IMP-16.
  6. Mike Peters – młodszy programista, obsługa kart perforowanych.

Wersje

  1. Revision A – wersja dostarczona przez Shepardson Microsystems w grudniu 1978. Atari rozpoczęło produkcję cartridgy zanim wszystkie błędy zostały znalezione. Rozpowszechniana na cartridge z Atari 400/800 lub sprzedawana oddzielnie.
  2. Revision B – poprawia błędy z Revision A ale wprowadza nowy, bardziej poważny błąd. Dostępna w pierwszej serii Atari 600XL i 800XL. Nigdy nie była dostępna na cartridgu.
  3. Revision C – poprawia błędy Revision B. Wersja ta znalazła się w komputerach późniejszej serii XL i XE oraz w XEGS. Wyprodukowano tylko niewielką ilość cartridgy.

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

Błędy

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 DIMmogą 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łowa kluczowe

Słowa kluczowe Atari BASIC[13]
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.

Kody błędów Basic

Kody błędów Atari BASIC[14]
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.

Alternatywne produkty

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.

Kompatybilne

  • BASIC A+ – rozszerzona wersja Atari BASIC wydana na dyskietce przez firmę Optimized Systems Software.
  • BASIC XL – wariant BASIC A+ wydany na cartridge przez firmę Optimized Systems Software.
  • BASIC XE – rozszerzona wersja BASIC XL wydany przez firmę Optimized Systems Software. Wymaga 64 KiB przez co nie może być uruchomiony na Atari 400/800.
  • Turbo-BASIC XL – wersja BASIC stworzona przez Franka Ostrowskiego. Opublikowana w zachodnioniemieckim czasopiśmie „Happy Computer” w grudniu 1985 roku. Dostępny interpreter i kompilator, wymaga 64 KiB[15].
  • The Basic Compiler – kompilator firmy Datasoft z 1983 roku.
  • MMG Basic Compiler – kompilator wydany przez MMG Micro Software[16] w 1984 roku. Licencjonowana wersja The Basic Compiler.
  • ABC Compiler – kompilator wydany przez Monarch Data Systems w 1982 roku[17].

Niekompatybilne

  • Atari Microsoft BASIC – implementacja bazująca na kodzie zakupionym od Microsoft.
  • Advan BASIC – kompilator BASIC firmy Advan Language Designs z 1986 roku. Rozszerzone komendy w stosunku do Atari BASIC ale z nim niekompatybilny[18].

Uwagi

  1. Jest dostępny oryginalny kod źródłowy BASIC M6502 8K VER 1.1 BY MICRO-SOFT z 1978 który był użyty do zbudowania Microsoft BASIC dla kilku komputerów opartych o procesor MOS 6502, m.in. Commodore PET i Apple II. Brak informacji którą wersję Atari otrzymało od Microsoft.
  2. Był to rozmiar cartridge standardowo obsługiwany przez Atari 800/400. W późniejszym czasie pojawiły się rozwiązania techniczne pozwalające na produkcję cartrige większych niż 8 KiB.

Przypisy

  1. Basic Reference Manual. Atari Inc., 1980. (ang.).
  2. Atari BASIC: A High-Level Language Translator. W: Bill Wilkinson, Kathleen O’Brien, Paul Laughton: The Atari Basic Source Book. COMPUTE! Books, 1983, s. 1. (ang.).
  3. DavidD. Ahl DavidD., Benchmark comparison test, 1983, s. 260  (ang.).
  4. Atari 800/XL/XE/XEGS Cartridge List 2.2. [dostęp 2017-11-23]. (ang.).
  5. Curran i inni, IBM's Estridge, listopad 1983, s. 88–97  (ang.).
  6. David Crane: INTERVIEW David Crane. [dostęp 2017-11-23]. (ang.).
  7. a b c Preface. W: Bill Wilkinson, Kathleen O’Brien, Paul Laughton: The Atari Basic Source Book. COMPUTE! Books, 1983, s. ix. (ang.).
  8. Matthew Ratcliff. Revision C Converter. „ANTIC”. 4 (5), wrzesień 1985. (ang.). 
  9. a b c d e f The Bugs in Atari BASIC. W: Bill Wilkinson, Kathleen O’Brien, Paul Laughton: The Atari Basic Source Book. COMPUTE! Books, 1983, s. 275–278. (ang.).
  10. a b Bill Wilkinson. Analyzing the BASIC bug. „Compute!”. 7, s. 75, czerwiec 1985. (ang.). 
  11. Atari BASIC Bugs. „Compute!”, s. 16, lipiec 1986. (ang.). 
  12. Appendix Thirteen: XL/XE Enhancements And Bugs. W: Ian Chadwick: Mapping the Atari. Greensboro, North Carolina: Compute! Publications, Inc., 1985. ISBN 0-87455-004-1. (ang.).
  13. Atari Inc.: Atari Basic Reference Guide. (ang.).
  14. Appendix B Error Messages. W: Basic Reference Manual. Atari Inc., 1980. (ang.).
  15. Basic, schnell wie der Wind – mit dem Turbo-Basic XL-Interpreter. „Happy Computer”, grudzień 1985. Markt & Technik Verlag. (niem.). 
  16. MMG The Source Of Power For Your Personal Computer, 1984  (ang.).
  17. ABC A BASIC Compiler for Atari Computers. Reference Manual.. Monarch Data Systems. (ang.).
  18. Advan Compiler Basic. „ANTIC”, s. 28, kwiecień 1986. (ang.). 

Bibliografia

  • Atari Basic, praca zbiorowa pod redakcją Wiesław Migut, KAW, 1988.
  • Atari Basic. Język programowania i obsługa mikrokomputera Atari, Krzysztof Bednarek i inni, Naczelna Organizacja Techniczna, Warszawa 1987.
  • Mapa pamięci Atari XL/XE. Procedury interpretera Basica, Wojciech Zientara, SOETO, Warszawa 1988.
  • Basic Reference Manual, Atari Inc., 1980.
  • Atari Basic Reference Guide, Atari Inc.
  • The Atari BASIC Source Book, Bill Wilkinson, Kathleen O’Brien, Paul Laughton, COMPUTE! Books 1983, ISBN 0-942386-15-9.

Linki zewnętrzne

  • The Atari BASIC Source Book – skan książki na archive.org.
  • Basic Reference Manual – skan książki na archive.org.
  • BASIC Compilers For the Atari – porównanie kompilatorów [online] [dostęp 2017-11-24] [zarchiwizowane z adresu 2014-01-05]  (ang.).