Atari BASIC - Atari BASIC

Atari ZÁKLADNÍ
AtariBasicExample.png
Program připraven ke spuštění
Rodina ZÁKLADNÍ
Navrhl Paul Laughton
Kathleen O'Brien
Vývojář Shepardson Microsystems
Poprvé se objevil 1979 ; Před 42 lety ( 1979 )
Stabilní uvolnění
Revize C / 1983 ; Před 38 lety ( 1983 )
Plošina Atari 8bitová rodina
Licence Komerční proprietární software
Ovlivněn
Data General Business Basic
Ovlivněn
BASIC XL , BASIC XE, Turbo-Basic XL

Atari BASIC je interpret pro BASIC programovacího jazyka , který je dodáván s 8-kousl rodinu Atari z 6502 na bázi domácích počítačů . Na rozdíl od většiny ZÁKLADŮ domácí počítačové éry není Atari BASIC derivátem Microsoft BASIC a výrazně se liší. Obsahuje klíčová slova pro funkce specifické pro Atari a postrádá například podporu pro řetězcová pole.

Jazyk byl původně distribuován jako 8  KB ROM kazeta . Počínaje 600XL a 800XL je BASIC integrován do systému, ale lze jej deaktivovat podržením OPTIONpři spouštění. XEGS zakáže BASIC při napájení bez klávesnice připojené.

Navzdory 8bitovým počítačům Atari, které běžely vyšší rychlostí než většina jeho současníků, několik technických rozhodnutí umístilo Atari BASIC blízko dna v benchmarcích výkonu. Původní autoři řešili většinu těchto problémů v BASIC XL a BASIC XE. Objevila se také řada tlumočníků a překladačů třetích stran, jako je Turbo-Basic XL .

Kompletní komentovaný zdrojový kód a specifikace návrhu Atari BASIC byly publikovány jako The Atari BASIC Source Book v roce 1983.

Dějiny

Stroje, které by se staly 8bitovou rodinou Atari, byly původně vyvinuty jako herní konzole druhé generace určené k nahrazení Atari VCS . Ray Kassar , nový prezident společnosti Atari, se rozhodl vyzvat Apple Computer postavením domácího počítače.

To znamenalo, že návrhy potřebné k zahrnutí programovacího jazyka BASIC , standardu pro domácí počítače. Na začátku roku 1978 Atari licencovalo zdrojový kód k verzi MOS 6502 Microsoft BASIC . Byl nabízen ve dvou verzích: jedna používající 32bitový formát s plovoucí desetinnou čárkou, která měla při kompilaci asi 7800 bajtů, a druhá používající rozšířený 40bitový formát, který se blížil 9 kB.

I 32bitová verze se sotva vešla do velikosti 8 kB formátu ROM kazety stroje . Atari také cítilo, že potřebují rozšířit jazyk, aby podporoval hardwarové funkce jejich počítačů, podobně jako to udělal Apple s Applesoft BASIC . Tím se zvětšila verze Atari na přibližně 11 kB; AppleSoft BASIC na Apple II+ byl dlouhý 10 240 bajtů. Po šesti měsících byl kód zredukován tak, aby se téměř vešel do 8 kB ROM, ale Atari čelila lednové lhůtě 1979 na veletrhu spotřební elektroniky (CES), kde budou stroje předvedeny. Rozhodli se požádat o pomoc, aby byla verze BASICu připravena včas na show.

Shepardson Microsystems

8K kazeta Atari BASIC

V září 1978 získala společnost Shepardson Microsystems nabídku na dokončení BASIC a dokončovala Cromemco 16K Structured BASIC pro autobusové stroje Cromemco S -100 na bázi Z80 . Vývojáři Kathleen O'Brien a Paul Laughton použili jako inspiraci pro jejich BASIC Data General Basic, celočíselnou implementaci, vzhledem k Laughtonovým zkušenostem s Data General v systému sdílení času .

To, co se stalo Atari BASIC, je zredukovaná verze Cromemco BASIC přenesená na 6502. To vyžadovalo 10 tis. Kódu. Aby se vešel do 8K kazety Atari, byly některé běžné rutiny přesunuty do ROM operačního systému . To zahrnovalo 1780 bajtů pro podporu s plovoucí desetinnou čárkou, které byly umístěny v samostatné 2K ROM na základní desce.

Atari návrh přijala, a když byly specifikace dokončeny v říjnu 1978, Paul Laughton a Kathleen O'Brien začali pracovat na novém jazyce. Ve smlouvě bylo uvedeno datum dodání 6. dubna 1979 nebo dříve a toto také zahrnovalo systém správce souborů (později známý jako DOS 1.0). Plány Atari byly vzít ranou 8K verzi Microsoft BASIC na 1979 CES, poté přejít na Atari BASIC pro výrobu. Vývoj postupoval rychle, k čemuž mu dopomohla klauzule o bonusu ve smlouvě a Atari místo COS od Microsoftu vzala na CES verzi 8K kazety. Atari Microsoft BASIC byl později k dispozici jako samostatný produkt.

Vydání

Verze, kterou Shepardson dal Atari pro demo CES, neměla být konečnou verzí. V době, kdy doručili demo a konečnou dodávku o několik týdnů později, Shepardson opravil několik chyb v kódu. Atari, neznámý pro Shepardsona, již poslal verzi CES do výroby.

Tato verze byla později známý jako Revize A . Obsahuje hlavní chybu v podprogramu, který kopíruje paměť; odstranění řádků kódu, které byly přesně 256 bajtů, způsobí zablokování. Někdy se tomu říkalo „uzamčení dvou řádků“, protože se nespustilo, dokud nebyl zadán další řádek kódu nebo příkazu. Nelze to opravit stisknutím Resetklávesy.

Revize B se pokusila opravit všechny hlavní chyby v revizi A a byla vydána v roce 1983 jako vestavěná ROM v modelech 600XL a 800XL. Při opravě chyby kopírování paměti si programátor všiml stejného vzoru kódu v části pro vkládání řádků a použil stejnou opravu. Místo toho byla do tohoto kódu vložena původní chyba. Vkládání nových řádků je mnohem běžnější než mazání starých, takže změna dramaticky zvýšila počet pádů. Revize B také obsahuje chybu, která přidává do programu 16 bajtů pokaždé, když je vytvořen SAVEa LOADupraven, což nakonec způsobí, že stroji dojde paměť i pro ty nejmenší programy. Mapování Atari je popsalo jako „úžasné chyby“ a doporučilo majitelům revize B „Nedělejte si srandu; získejte novou ROM, která je k dispozici na kazetě“ od Atari. Kniha poskytuje program pro psaní revizí B až revize C pro ty, kteří nemají kazetu.

Revize C eliminuje úniky paměti v revizi B. Je integrována v novějších verzích 800XL a všech modelech XE včetně XEGS. Revize C byla k dispozici také jako kazeta.

Verzi lze určit zadáním PRINT PEEK(43234)do řádku READY. Výsledkem je 162revize A, 96revize B a 234revize C.

Popis

Editace programu

Chyby syntaxe jsou hlášeny ihned po zadání řádku.

Jako většina domácích počítačových ZÁKLADŮ je Atari BASIC ukotvena kolem svého řádkového editoru . Programové řádky mohou být až tři fyzické řádky obrazovky po 40 znacích, celkem 120 znaků. Kurzor lze libovolně přesouvat, přičemž editor automaticky sleduje, který řádek programu BASIC obsahuje aktuální řádek obrazovky. Pokud je například kurzor aktuálně umístěn v řádku 30 a uživatel použije kurzor nahoru na řádek 20, jakákoli úprava z tohoto bodu bude provedena na řádku 20.

Editor Atari BASIC zachycuje mnoho chyb, kterých by si ve verzích odvozených z MS nevšimli. Pokud je nalezena chyba, editor znovu zobrazí řádek a zvýrazní text v blízkosti chyby v inverzním videu . Chyby se zobrazují jako číselné kódy s popisem vytištěným v příručce. Vzhledem k tomu, jak editor řádků funguje, může uživatel chybu okamžitě opravit. Ve výše uvedeném příkladu (s PRUNT) lze chybu opravit přesunutím kurzoru nad U, zadáním I(editor má pouze režim přepisu) a stisknutím RETURN.

Řádek zadaný s počátečním číslem od 0 do 32767 je vložen do aktuálního programu nebo nahrazuje stávající řádek. Pokud číslo řádku neexistuje, tlumočník mu přiřadí číslo -1 (8000 16 ) a příkazy se provedou okamžitě, v „okamžitém režimu“. RUNPříkaz vykoná uložený program z nejnižšího čísla linky. Atari BASIC umožňuje provádění všech příkazů v obou režimech. LISTMůže být například použito uvnitř programu, zatímco u mnoha tlumočníků by to bylo k dispozici pouze v okamžitém režimu.

Během zadávání lze klíčová slova zkrátit pomocí vzoru nastaveného Palo Alto Tiny BASIC zadáním tečky v libovolném bodě slova. Je tedy L.rozšířen na LIST, jak je LI.. Je nutné zadat pouze tolik písmen, aby byla zkratka jedinečná, což PLOTvyžaduje, PL.protože jedno písmeno P není jedinečné. Chcete -li rozšířit zkratku, tokenizer prohledá seznam vyhrazených slov a najde první, které odpovídá dodávané části. Běžněji používané příkazy se vyskytují nejprve v seznamu vyhrazených slov, přičemž REMna začátku (lze jej zadat jako .). Když je program později LISTvydán, vždy vypíše úplná slova se třemi výjimkami: PRINTmá synonymum ?; GOTOmá synonymum GO TO; a LETmá synonymum který je prázdný řetězec (tak a znamenají totéž). Jedná se o samostatné tokeny, a tak jako takové zůstanou v seznamu programů. MS Základy také povolena jako krátký-forma pro , ale používá stejný token tak rozšířila zpět při ed, zpracováním jako zkratka, ne jako synonymum. 10 LET A = 1010 A = 10?PRINTPRINTLIST

Tokenizer

Když uživatel RETURNpři úpravách stiskne , aktuální řádek se zkopíruje do ZÁKLADNÍ vyrovnávací paměti vstupních řádků v paměti mezi 580 a 5FF 16 . Atari BASIC tokenizer vyhledává v textu, konverze každé klíčové slovo do jednoho byte tokenu (například PRINT20 16 ), každé číslo do šesti bajtů s pohyblivou řádovou čárkou hodnoty, každá proměnná název, index do tabulky, a tak dále, dokud se čára plně nezmění do snadno interpretovatelného formátu. Výsledek je uložen ve výstupní vyrovnávací paměti umístěné na prvních 256 bajtech nejnižší dostupné volné paměti, na kterou ukazuje ukazatel LOMEM uložený na 80, 81 16 . Výstup z tokenizeru se poté přemístí. Program je uložen jako strom analýzy .

Shepardson odkazoval na tento koncept kompletní tokenizace jako na „předkompilovaný tlumočník“. Výsledný tokenizovaný kód eliminuje jakoukoli analýzu během běhu, takže běží rychleji. Má tu nevýhodu, že malé konstanty, jako 0 nebo 1, jsou po šesti bajtech, delší než původní text.

Sada ukazatelů (adres) označuje různá data: názvy proměnných jsou uložena v tabulce názvů proměnných (VNTP - 82, 83 16 ) a jejich hodnoty jsou uloženy v tabulce hodnot proměnných (na kterou se odkazuje na VVTP - 86, 87 16 ). Tímto způsobem přesměrováním názvů proměnných potřebuje odkaz na proměnnou pouze jeden bajt, aby mohl adresovat její vstup do příslušné tabulky. Řetězcové proměnné mají svou vlastní oblast (na kterou ukazuje STARP - 8C, 8D 16 ), stejně jako runtime stack (na RUNSTK - 8E, 8F 16 ) slouží k ukládání čísel řádků smyčkových příkazů ( FOR...NEXT) a podprogramů ( GOSUB...RETURN). Nakonec je konec využití ZÁKLADNÍ paměti indikován adresou uloženou na ukazateli MEMTOP - 90, 91 16 ).

Matematické funkce

Atari BASIC obsahuje tři goniometrické funkce: sinus, kosinus a tangens oblouku. DEGa RADnastavte, zda tyto funkce používají radiány nebo stupně, výchozí hodnoty jsou radiány. Mezi osm dalších funkcí patří zaokrouhlování, logaritmy a druhá odmocnina. Náhodná funkce, RNDgeneruje číslo mezi 0 a 1; parametr není používán.

Zpracování řetězců

Atari BASIC zkopíroval systém zpracování řetězců Hewlett-Packard BASIC , kde je základním datovým typem jeden znak a řetězce jsou pole znaků. Interně je řetězec reprezentován ukazatelem na první znak v řetězci a jeho délkou. Chcete -li řetězec inicializovat, musí být DIMensioned s jeho maximální délkou. Například:

10 DIM A$(20)
20 PRINT "ENTER MESSAGE: ";
30 INPUT A$
40 PRINT A$

V tomto programu je vyhrazen řetězec 20 znaků a všechny znaky přesahující délku řetězce budou zkráceny. Maximální délka řetězce je 32 768 znaků. Neexistuje žádná podpora pro pole řetězců.

K řetězci se přistupuje pomocí funkcí indexování pole nebo krájení . A$(1,10)vrací řetězec prvních 10 znaků A$. Pole jsou indexována 1, takže řetězec o délce 10 začíná na 1 a končí na 10. Funkce krájení jednoduše nastavují ukazatele na počáteční a koncové body v rámci stávající alokované paměti.

Pole nejsou inicializována, takže číselné pole nebo řetězec obsahuje jakákoli data, která byla v paměti při jejich přidělení. Následující trik umožňuje rychlou inicializaci řetězce a je také užitečný pro vymazání velkých oblastí paměti od nežádoucích odpadků. Číselná pole lze vymazat pouze smyčkou FOR ... NEXT:

10 REM Initialize A$ with 1000 characters of X
20 DIM A$(1000)
30 A$="X":A$(1000)=A$:A$(2)=A$

Řetězení řetězců funguje jako v následujícím příkladu. Cílový řetězec musí být dostatečně velký, aby pojal kombinovaný řetězec, jinak dojde k chybě:

10 DIM A$(12),B$(6)
20 A$="Hello ":B$="there!"
30 A$(LEN(A$)+1)=B$
40 PRINT A$

Hodnoty ve výkazech DATA jsou odděleny čárkami a netypovány. Řetězy v příkazech DATA proto nejsou obvykle uzavřeny uvozovkami. V důsledku toho není možné, aby datové položky obsahovaly čárku, ale mohou obsahovat uvozovky. Číselné hodnoty v příkazech DATA se čtou jako řetězce nebo jako čísla podle typu proměnné, do které se čtou. Příkaz READ nelze použít s proměnnými pole.

Vstup výstup

Atari OS obsahuje subsystém pro vstup/výstup periferních zařízení (I/O) známý jako CIO (centrální vstup/výstup). Většina programů může být napsána nezávisle na tom, jaké zařízení by mohly používat, protože všechny odpovídají společnému rozhraní; to bylo v té době na domácích počítačích vzácné. Nové ovladače zařízení by mohly být napsány poměrně snadno, což by bylo automaticky dostupné pro Atari BASIC a jakýkoli jiný program využívající OS Atari a stávající ovladače mohly být nahrazeny nebo rozšířeny o nové. Náhrada E:, například, by mohla přemístit ten v ROM, aby poskytl 80-sloupcový displej, nebo se na něj vrátit, aby generoval kontrolní součet, kdykoli je vrácen řádek (například použitý k ověření výpisu programu zadaného programu).

Atari BASIC podporuje CIO přístup pomocí vyhrazených slov OPEN #, CLOSE #, tisk #, INPUT #, GET #, PUT #, poznámka č BOD # a XIO # . V operačním systému existují rutiny pro jednoduché funkce kreslení grafiky, ale ne všechny jsou k dispozici jako konkrétní ZÁKLADNÍ klíčová slova. PLOT a DRAWTO pro kreslení čar jsou podporovány, zatímco příkaz poskytující vyplnění plochy pro primitivní lineární geometrické tvary není. Funkci výplně lze použít prostřednictvím obecného vstupního bodu CIO, který se nazývá pomocí ZÁKLADNÍHO příkazu XIO .

ZÁKLADNÍ příkaz OPEN # připravuje zařízení pro přístup I/O:

10 REM Opens the cassette device on channel 1 for reading in BASIC
20 OPEN #1,4,0,"C:MYPROG.DAT"

Zde OPEN # znamená „zajistěte, aby kanál 1 byl volný“, zavolejte ovladač C: a připravte zařízení (tím se cívky kazetové pásky napnou a posunou hlavy tak, aby byl přehrávač kazetových kazet „pozastaven“. 4 znamená „číst“ "(ostatní kódy jsou 8 pro zápis a 12 = 8 + 4 pro" čtení a zápis "). Třetí číslo je pomocná informace, v případě potřeby není nastavena na 0. C: MYPROG.DAT je název zařízení a název souboru; název souboru je pro ovladač kazety ignorován. Fyzická zařízení mohou mít čísla (hlavně disky, tiskárny a sériová zařízení), takže „ P1: “ může být plotter a „ P2: “ tiskárna se sedmikráskovým kolečkem nebo „ D1: "může být jedna disková jednotka a" D2: "atd. Pokud není k dispozici, předpokládá se 1.

Příkaz LPRINT odešle řetězec do tiskárny.

A je načteno z PEEK ing paměťových míst udržovaných ovladačem klávesnice nebo otevřením jako soubor (např. ). Ten čeká na stisknutí klávesy. OPEN 1,4,0,"K:":GET #1,A$

Psaní DOSze ZÁKLADNÍCH výstupů do příkazové nabídky Atari DOS . Všechny neuložené programy budou ztraceny, pokud na aktuálním disku není povolena funkce souboru pro výměnu paměti. V rámci BASICu neexistuje žádný příkaz k zobrazení adresáře disku; to musí být provedeno ukončením do DOSu.

Grafika a zvuk

Atari BASIC podporuje zvuk (prostřednictvím příkazu SOUND ), grafiku ( GRAFIKA, SETCOLOR, COLOR, PLOT, DRAWTO ) a ovladače ( STICK, STRIG, PADDLE, PTRIG ). Příkaz SOUND nastavuje jeden ze 4 kanálů hardwaru se čtvercovými vlnami s parametry pro hlasitost, výšku a zkreslení.

Pokročilé možnosti hardwaru, jako je vyšší rozlišení hřiště, filtry s vysokým průchodem, digitalizovaný zvuk a průběhy, grafika pro hráče/rakety ( skřítci ), předefinované sady znaků, rolování a vlastní grafické režimy, nejsou v BASIC podporovány; tyto budou vyžadovat rutiny strojového jazyka nebo příkazy PEEK/POKE. K některým ze 17 základních režimů znaků/grafiky podporovaných hardwarem nelze jednoduše přistupovat z BASIC na Atari 400/800, protože operační paměti ROM je nepodporují. Patří mezi ně některé vícebarevné režimy znaků (ANTIC režimy 4 a 5), ​​režim sestupných znaků (režim ANTIC 3) a režimy s 2 a 4 barvami nejvyššího rozlišení (režimy ANTIC C & E, 160x192 pixelů). Jediný způsob, jak se k nim dostat, je pomocí PEEK/POKE nebo strojového jazyka, ruční nastavení registrů ANTIC a zobrazení seznamu. ROMy OS ROM na XL/XE přidaly podporu pro tyto režimy kromě ANTIC režimu 3, který ke správné funkci vyžaduje sadu znaků předefinovanou v RAM.

Režimy bitmap v BASIC jsou obvykle nastaveny tak, aby textové okno zabíralo poslední čtyři řádky v dolní části obrazovky, takže uživatel může zobrazovat výzvy a zadávat data do programu. Pokud je k číslu režimu vyvolanému pomocí příkazu GRAPHICS přidána číslice 16, bude celá obrazovka v režimu bitmapy (např. GRAPHICS 8+16). Je -li vyvolán režim bitmapy na celé obrazovce, Atari BASIC se po ukončení běhu programu elegantně přepne zpět do textového režimu, čímž se vyhne tomu, že uživateli zůstane nereagující obrazovka, které je nutné uniknout zadáním slepého příkazu nebo resetováním počítače.

Souřadnice bitmap jsou v rozsahu 0 až maximální řádek/sloupec minus jedna, tedy v režimu 6 (160x192) mohou být maximální souřadnice pro pixel 159 a 191. Pokud se Atari BASIC pokusí vykreslit za povolené souřadnice pro režim a dojde k chybě za běhu.

Pokročilé techniky

Popisky řádků

Atari BASIC umožňuje číselné proměnné a výrazy použít k zadávání čísel řádků GOTOa GOSUBpříkazů. Například podprogram, který vyčistí obrazovku, lze zapsat jako GOSUB CLEARSCREEN, což je srozumitelnější než GOSUB 10000.

Řetězce jako způsob manipulace s pamětí

Základní adresy řetězce jsou uloženy v tabulce proměnných. Řetězcové adresy lze přesměrovat tak, aby ukazovaly na libovolné oblasti paměti RAM. To umožňuje, aby rutiny rychlého přesouvání paměti, které jsou základem přiřazení řetězců a podřetězců, mohly být použity ze ZÁKLADNÍ paměti používané pro obrazovku nebo grafiku hráče/rakety. To je zvláště užitečné pro dosažení rychlého vertikálního pohybu snímků hráčů/raket přímo z Atari BASIC.

Náhodný přístup přes DATA/RESTORE

Jako parametr RESTOREpříkazu lze použít číselné proměnné a výrazy , což umožňuje DATAnáhodný přístup k příkazům prostřednictvím kódu, jako je RESTORE ROOMBASE+ROOMNUMBER:READ DESCRIPTION$, TREASURE$, EXITS. To může být také použita k emulaci statické řetězec matice: RESTORE STRBASE+INDEX:READ A$:PRINT A$.

Zpracování chyb s TRAP

Příkaz TRAPpřeskočí na číslo řádku, když dojde k chybě, a to snižuje potřebu ruční kontroly chyb. Například při kreslení grafiky na obrazovku není nutné kontrolovat, zda čáry přesahují hranice obrazovky aktuálního grafického režimu. Tento chybový stav lze zachytit a v případě potřeby chybu zpracovat.

Zahrnuje

ENTERPříkaz čte zdrojový kód ze zařízení a spojuje jej do aktuálního programu, jako kdyby uživatel psali ji. To umožňuje programy, které mají být uloženy v oddílech via LIST, jejich přečtení pomocí ENTERsloučit nebo nahradit stávající kód. Pomocí bloků čísel řádků, které se nepřekrývají, mohou programátoři vytvářet knihovny podprogramů a sloučit je podle potřeby do nových programů.

Samoobslužný kód

Editor lze nastavit tak, aby opakovaně četl vstup z obrazovky, dokud není dosaženo EOF. To umožňuje programu zapsat nový programový kód následovaný CONTpříkazem na obrazovku a umístěním kurzoru obrazovky na začátek nového kódu, STOPspuštěného programu, což způsobí, že se nový kód přečte a poté bude provádění pokračovat CONTpříkazem.

Vestavěný strojový jazyk

Atari BASIC může volat podprogramy strojového kódu uložené v řetězcích nebo POKEzapsané do paměti. K tomuto účelu se často používá oblast 256 bajtů začínající na adrese 1536 10 (600 16 ).

Strojový kód je vyvolán s USRfunkcí. První parametr je adresa podprogramu a následující hodnoty jsou parametry. Pokud je kód uložen v řetězci s názvem ROUTINE$, lze jej volat se dvěma parametry jako . ANSWER=USR(ADR(ROUTINE$),VAR1,VAR2)

Parametry jsou vloženy do zásobníku hardwaru jako 16bitová celá čísla v pořadí uvedeném ve USRvolání v nízkém bajtu, ve vysokém bajtovém pořadí. Je odeslán poslední bajt udávající počet argumentů. Kód strojového jazyka musí tyto hodnoty odstranit, než se vrátí pomocí RTSinstrukce. 16bitovou hodnotu lze vrátit do BASICu umístěním na adresy 212 10 a 213 10 (D4 16 a D5 16 ).

Výkon

Na základě vzoru MS by teoreticky měl Atari BASIC běžet rychleji než současné BASIC. Protože je zdrojový kód při jeho zadání plně tokenizován, jsou celé kroky tokenizace a analýzy již dokončeny. I složité matematické operace jsou připraveny ke spuštění, přičemž všechny číselné konstanty jsou již převedeny na interní 40bitový formát a hodnoty proměnných se vyhledávají spíše podle adresy, než aby se musely hledat. Navzdory těmto teoretickým výhodám je Atari BASIC v praxi pomalejší než většina ostatních BASICů pro domácí počítače , často o velké množství.

Na dvou široce používaných benchmarcích té doby, Sieve of Eratosthenes časopisu Byte a benchmarkovém testu Creative Computing, který napsal David H. Ahl , Atari skončilo z hlediska výkonu blízko konce seznamu a bylo mnohem pomalejší než současný Apple II nebo Commodore PET , navzdory tomu, že mají stejný procesor, ale běží na něm zhruba dvojnásobnou rychlost. Skončil za relativně pomalými stroji jako Sinclair ZX81 a dokonce i za některými programovatelnými kalkulačkami.

Většina pomalosti jazyka pramení ze tří problémů.

První je, že matematické rutiny s plovoucí desetinnou čárkou jsou špatně optimalizované. V benchmarku Ahl byla za většinu špatného zobrazení stroje zodpovědná operace jednoho exponentu, která interně prochází funkcí násobení. Převod mezi plovoucí desetinnou čárkou a 16bitovými celými čísly je obzvláště pomalý. Interně se tato celá čísla používají pro čísla řádků a indexování polí spolu s několika dalšími úkoly, ale čísla v tokenizovaném programu jsou uložena ve formátu binárně kódovaného desetinného čísla (BCD). Kdykoli GOTO 100se vyskytne jeden z nich, například číslo řádku , hodnota BCD se převede na celé číslo, což může trvat až 3 500 mikrosekund.

Dalším problémem je, jak Atari BASIC implementuje pobočky. Chcete -li provést větev v GOTOnebo GOSUB, tlumočník hledá v celém programu odpovídající číslo řádku.

Souvisejícím a vážnějším problémem je implementace FOR... NEXTsmyček. Když je FORpříkaz vykonán, zapamatuje se jeho číslo řádku. Pokaždé, když NEXTje dosaženo, vyhledá v programu daný řádek, přestože je na stejném místě jako naposledy.

Některé nebo všechny tyto problémy řešilo několik ZÁKLADŮ třetích stran. BASIC XL zkrátil čas u benchmarku Byte ze 194 na 58 sekund, což je třikrát rychlejší. Na benchmarku Ahl Atari BASIC vyžadovalo 405 sekund, zatímco přesně stejný kód v Turbo BASIC trval 41,6 sekundy, což je řádové zlepšení.

Rozdíly oproti Microsoft BASIC

  • Syntaxe je zkontrolována a chyby jsou zvýrazněny okamžitě při zadávání řádku.
  • Názvy proměnných mohou mít libovolnou délku a všechny znaky jsou významné.
  • Následující klíčová slova nejsou v Atari BASIC: INKEY$, CLS, DEF FN, SPC, TAB, ELSE.
  • Všechna pole musí být před použitím okótována, zatímco Microsoft BASIC předvolí pole na 10 prvků, pokud není dimenzováno.
  • Řetězcové proměnné jsou považovány za pole znaků a musí být před použitím dimenzovány. MS BASIC ukládá řetězce na hromadu a někdy se pozastaví pro sběr odpadu .
  • Funkce LEFT$, MID$a, RIGHT$jsou nahrazeny indexováním řetězců.
  • Neexistuje operátor pro zřetězení řetězců.
  • Neexistují žádná pole řetězců.
  • Neexistuje žádná podpora celočíselných proměnných.
  • Neexistují žádné bitové operátory.
  • INPUT neumožňuje výzvu.
  • PRINTmůže být zkráceno jako ?v Microsoft BASIC, ale Atari BASIC jej tokenizuje do PRINT. Zůstává to otazník.
  • Cílem GOTOa GOSUBmůže být proměnná nebo výraz.
  • RESTOREmůže mít jako parametr číselnou konstantu, proměnnou nebo výraz, což způsobí, že další READzačne od zadaného čísla řádku
  • FOR..NEXTsmyčky v Atari BASIC musí mít název proměnné odkazovaný NEXTpříkazem, zatímco Microsoft BASIC to nevyžaduje.
  • Několik proměnných není povoleno s NEXTpříkazy, jako jsou v Microsoft BASIC (např. NEXT X,Y).
  • LIST používá místo znaménka minus čárku k oddělení rozsahu.

Klíčová slova

Viz také

Poznámky

Reference

Citace

Bibliografie

externí odkazy