Atari BASIC - Atari BASIC
Rodina | ZÁKLADNÍ |
---|---|
Navrhl | Paul Laughton Kathleen O'Brien |
Vývojář | Shepardson Microsystems |
Poprvé se objevil | 1979 |
Stabilní uvolnění | Revize C / 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 OPTION
př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
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 SAVE
a LOAD
upraven, 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 162
revize A, 96
revize B a 234
revize C.
Popis
Editace programu
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“. RUN
Pří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. LIST
Můž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ž PLOT
vyž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ž REM
na začátku (lze jej zadat jako .
). Když je program později LIST
vydán, vždy vypíše úplná slova se třemi výjimkami: PRINT
má synonymum ?
; GOTO
má synonymum GO TO
; a LET
má 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 = 10
10 A = 10
?
PRINT
PRINT
LIST
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 PRINT
20 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. DEG
a RAD
nastavte, 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, RND
generuje čí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ů GOTO
a GOSUB
pří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 RESTORE
příkazu lze použít číselné proměnné a výrazy , což umožňuje DATA
ná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 TRAP
př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
ENTER
Pří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í ENTER
slouč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ý CONT
příkazem na obrazovku a umístěním kurzoru obrazovky na začátek nového kódu, STOP
spuštěného programu, což způsobí, že se nový kód přečte a poté bude provádění pokračovat CONT
příkazem.
Vestavěný strojový jazyk
Atari BASIC může volat podprogramy strojového kódu uložené v řetězcích nebo POKE
zapsané 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 USR
funkcí. 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 USR
volá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í RTS
instrukce. 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 100
se 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 GOTO
nebo 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
... NEXT
smyček. Když je FOR
příkaz vykonán, zapamatuje se jeho číslo řádku. Pokaždé, když NEXT
je 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. -
PRINT
může být zkráceno jako?
v Microsoft BASIC, ale Atari BASIC jej tokenizuje doPRINT
. Zůstává to otazník. - Cílem
GOTO
aGOSUB
může být proměnná nebo výraz. -
RESTORE
může mít jako parametr číselnou konstantu, proměnnou nebo výraz, což způsobí, že dalšíREAD
začne od zadaného čísla řádku -
FOR..NEXT
smyčky v Atari BASIC musí mít název proměnné odkazovanýNEXT
příkazem, zatímco Microsoft BASIC to nevyžaduje. - Několik proměnných není povoleno s
NEXT
pří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
Klíčové slovo | Popis |
---|---|
břišní svaly | Vrátí absolutní hodnotu čísla |
ADR | Vrátí adresu v paměti proměnné (většinou se používá pro rutiny strojového kódu uložené v proměnných) |
A | Logická konjunkce |
ASC | Vrátí hodnotu ATASCII znaku |
ATN | Vrátí arktangens čísla |
SBOHEM | Přenáší ovládání do interního programu „Self Test“ („Memo Pad“ u starších modelů) |
CHR $ | Vrátí znak s hodnotou ATASCII |
OBLIČEJ | Náklad z kazeta s tokenized programu, který byl uložen s CSAVE |
DŘEVÁK | Vrátí běžný logaritmus čísla |
ZAVŘÍT | Ukončí čekající přenosy (flush) a zavře I/O kanál |
CLR | Vyčistí paměť proměnných a zásobník programů |
BARVA | Vybírá logickou barvu, do které se má kreslit |
KOM | Implementace běžného produktu MS Basic byla zrušena. Rozpoznáno, ale místo toho se spustí kód pro DIM |
CONT | Obnoví spuštění programu po STOP na čísle dalšího řádku (viz STOP) |
COS | Vrátí kosinus čísla |
CSAVE | Uloží do kazetu programu v tokenized podobě (viz Cload) |
DATA | Ukládá data do seznamů číselných nebo řetězcových hodnot |
DEG | Přepíná goniometrické funkce pro výpočet ve stupních ( radiány je výchozí režim) (viz RAD) |
ZTLUMIT | Definuje velikost řetězce nebo pole (viz COM) |
DOS | Přenáší ovládání do operačního systému Disk (DOS); pokud nebyl načten DOS, stejný jako BYE |
DRAWTO | Nakreslí čáru na zadané souřadnice |
KONEC | Dokončí provádění programu, zavře otevřené I/O kanály a zastaví jakýkoli zvuk |
ENTER | Načte a sloučí do paměti prostý textový program z externího zařízení, obvykle z kazety nebo disku (viz SEZNAM) |
EXP | Exponenciální funkce |
PRO | Spustí smyčku for |
FRE | Vrátí množství volné paměti v bajtech |
DOSTAT | Přečte jeden bajt z I/O kanálu (viz PUT) |
GOSUB | Skočí na podprogram na daném řádku v programu a umístí zpáteční adresu do zásobníku (viz POP a RETURN) |
GOTO a Jděte na | Skočí na daný řádek v programu. GOTO lze vynechat v "KDYŽ ... PAK GOTO ..." |
GRAFIKA | Nastavuje grafický režim |
LI | Spustí kód v závislosti na tom, zda je podmínka pravdivá nebo ne |
VSTUP | Načte proud textu z I/O kanálu; obvykle data z klávesnice (výchozí), kazety nebo disku |
INT | Vrátí spodní část čísla |
LEN | Vrátí délku řetězce |
NECHAT | Přiřadí hodnotu proměnné. LET lze vynechat |
SEZNAM | Seznam (celého nebo části) programu na obrazovku (výchozí), tiskárnu, disk, kazetu nebo jakékoli jiné externí zařízení (viz ENTER) |
ZATÍŽENÍ | Načte tokenizovaný program z externího zařízení; obvykle kazeta nebo disk (viz ULOŽIT) |
LOKALIZOVAT | Uloží logickou barvu nebo znak ATASCII na zadané souřadnice |
LOG | Vrátí přirozený logaritmus čísla |
TISK | Vytiskne text na zařízení tiskárny (stejného výsledku lze dosáhnout příkazy OPEN, PRINT a CLOSE) |
NOVÝ | Vymaže program a všechny proměnné z paměti; automaticky spuštěno před LOAD nebo CLOAD |
DALŠÍ | Pokračuje v další iteraci smyčky FOR |
NE | Logická negace |
POZNÁMKA | Vrátí aktuální pozici na I/O kanálu |
NA | Vypočítaný GOTO nebo GOSUB - provádí skokem založené na hodnotě výrazu |
OTEVŘENO | Inicializuje I/O kanál |
NEBO | Logická disjunkce |
PÁDLO | Vrátí polohu pádlového ovladače |
PEEK | Vrátí hodnotu na adrese v paměti |
SPIKNUTÍ | Nakreslí bod na zadaných souřadnicích |
SMĚŘOVAT | Nastavuje aktuální pozici na I/O kanálu |
STRČIT | Nastaví hodnotu na adrese v paměti |
POP | Odebere návratovou adresu podprogramu ze zásobníku (viz GOSUB a RETURN) |
POZICE | Nastavuje pozici grafického kurzoru |
TISKNOUT a? | Zapisuje text na I/O kanál; obvykle na obrazovku (výchozí), tiskárnu, kazetu nebo disk (viz LPRINT a INPUT) |
PTRIG | Udává, zda je stisknuta spoušť pádla nebo ne |
DÁT | Zapíše jeden bajt do I/O kanálu (viz ZÍSKAT) |
RAD | Přepíná goniometrické funkce pro výpočet v radiánech (viz DEG) |
ČÍST | Čte data z příkazu DATA |
REM | Označí komentář v programu |
OBNOVIT | Nastavuje pozici, kde se mají číst data z příkazu DATA |
VRÁTIT SE | Ukončí podprogram, efektivně se rozvětvující na linku bezprostředně po „volání“ GOSUB (viz GOSUB a POP) |
RND | Vrátí pseudonáhodné číslo |
BĚH | Spustí spuštění programu, volitelně jeho načtení z externího zařízení (viz Načíst) |
ULOŽIT | Zapíše tokenizovaný program na externí zařízení; obvykle kazeta nebo disk (viz LOAD) |
SETCOLOR | Mapuje logickou barvu na fyzickou |
SGN | Vrátí signum čísla |
HŘÍCH | Vrátí sinus čísla |
ZVUK | Spustí nebo zastaví přehrávání tónu na zvukovém kanálu (viz KONEC) |
SQR | Vrátí druhou odmocninu čísla |
POSTAVENÍ | Vrátí stav I/O kanálu |
KROK | Udává přírůstek použitý ve smyčce FOR |
LEPIT | Vrátí polohu joysticku |
STOP | Zastaví program a umožní pozdější obnovení (viz CONT) |
STRIG | Udává, zda je stisknuta spoušť joysticku nebo ne |
STR $ | Převede číslo na řetězcovou formu |
PAK | Označuje příkazy, které se mají provést, pokud je podmínka v příkazu IF pravdivá |
NA | Udává omezující podmínku v příkazu FOR |
PAST | Nastaví přeskočení na daný řádek programu, pokud dojde k chybě (TRAP 40000 zruší tuto objednávku) |
USR | Volá rutinu strojového kódu, volitelně s parametry |
VAL | Vrátí číselnou hodnotu řetězce |
XIO | Obecná rutina I/O (od pokynů „Vyplnit obrazovku“ po „Přejmenovat soubor“ na „Formátovat disk“) |
Viz také
- BASIC A+ , BASIC XL, BASIC XE od Software Optimized Systems
- Turbo-Basic XL , tlumočník a překladač
Poznámky
Reference
Citace
Bibliografie
- Referenční příručka ATARI BASIC . Atari Inc. 1980. Archivováno z originálu 1. května 2005.
- Chadwick, Ian (1985). Mapování Atari . Vypočítat! Publikace. ISBN 0-87455-004-1.
- Crawford, Chris (1982). De Re Atari . Výměna programu Atari.
- Cromemco 16K Extended BASIC (PDF) . Cromemco. 1978.
- Wilkinson, Bill (1982). Uvnitř Atari DOS . Optimized Systems Software, Inc. ISBN 0-942386-02-7. Citováno 2009-04-04 .
- Decuir, Joe (30. prosince 2004). 3 generace architektury herních strojů (řeč). Classic Gaming Expo 2004. San Jose Convention Center.
- Wilkinson, Bill; O'Brien, Kathleen; Laughton, Paul (1983). Základní kniha Atari BASIC . Vypočítat! Knihy. ISBN 0-942386-15-9.
- Wilkinson, Bill (únor 1985). „INSIGHT: Atari“ . Kreativní výpočetní technika . s. 139–140.
externí odkazy
- Atari BASIC, Hodný, Zlý a Ošklivý
- Albrecht, Bob; Finkel, LeRoy; Brown, Jerald R. (1979). Atari Basic - samoučící průvodce . Citováno 29. června 2013 .
- Albrecht, Bob; Finkel, LeRoy; Brown, Jerald R. (1985). Atari Basic - XL Edition . Citováno 29. června 2013 .