Tiny BASIC - Tiny BASIC
Navrhl | Dennis Allison |
---|---|
Poprvé se objevil | 1975 |
Implementační jazyk | IL (interpretační jazyk) |
Licence | Veřejná doména |
Nářečí | |
Denver Tiny BASIC, vylepšený 6800 Tiny BASIC, MINOL, národní průmyslový základní jazyk, Palo Alto Tiny BASIC, 6800 Tiny BASIC, TBI68K, Tiny BASIC Extended | |
Ovlivněn | |
Dartmouth BASIC , 8008 BASIC | |
Ovlivněn | |
Astro BASIC , Atari BASIC , úroveň I BASIC |
Tiny BASIC je rodina dialektů ze základního programovacího jazyka , který se vejde do 4 nebo méně KBS z paměti . Tiny BASIC byl navržen v reakci na otevřený dopis zveřejněný Billem Gatesem, který si stěžoval na uživatele pirátící Altair BASIC , který se prodával za 150 dolarů. Tiny BASIC měl být zcela bezplatnou verzí BASIC, která poběží na stejných raných mikropočítačích .
Tiny BASIC byl vydán jako specifikace, nikoli jako implementace, publikovaná v září 1975 vydání zpravodaje People's Computer Company (PCC). Článek vyzval programátory, aby jej implementovali na svých počítačích a odeslali výslednou implementaci jazyka assembler zpět k zařazení do série tří plánovaných zpravodajů. Dr. Li-Chen Wang , autor knihy Palo Alto Tiny BASIC, vytvořil termín „ copyleft “, aby popsal tento koncept. Reakce komunity byla tak zdrcující, že byl zpravodaj znovu spuštěn jako Dr. Dobb's Journal , první pravidelné periodikum zaměřené na software mikropočítačů. Dr. Dobb's vydržel v tištěné podobě 34 let a poté online až do roku 2014.
Díky malým rozměrům a volnému zdrojovému kódu byly tyto implementace neocenitelné v počátcích mikropočítačů v polovině 70. let, kdy byla RAM drahá a typická velikost paměti byla pouze 4 až 8 KB. Minimální verze Altair BASIC od Microsoftu by běžela také na počítačích o velikosti 4 kB, ale pro programy BASIC zůstalo volných pouze 790 bytů. Více volného místa bylo významnou výhodou Tiny BASIC. Aby byly splněny tyto přísné limity velikosti, drobné dialekty BASIC obecně postrádaly řadu funkcí, které se běžně vyskytují v jiných dialektech, například většina verzí postrádala řetězcové proměnné , postrádala matematiku s pohyblivou řádovou čárkou a umožňovala pouze názvy jednopísmenných proměnných.
Drobné implementace BASIC se používají dodnes, pro programování mikrokontrolérů , jako je Arduino .
Dějiny
Altair ZÁKLADNÍ
Nejčasnější mikropočítače , jako MITS Altair 8800 , obecně neměly žádný vestavěný vstup/výstup (I/O) mimo spínače na předním panelu a LED žárovky. Užitečná práce obecně vyžadovala přidání rozšiřující karty I/O a použití nějaké formy terminálu . V té době byly video terminály velmi drahé, mnohem více než samotný počítač, takže mnoho uživatelů se obrátilo na mechanická zařízení, jako je Teletype Model 33 . Model 33, stejně jako většina dálnopisných tiskáren té doby, obsahoval systém děrných pásek, který měl operátorům umožnit předem nahrát jejich zprávy a poté je přehrát „vysokou rychlostí“, rychleji než psát zprávu naživo. U raných mikropočítačů to poskytovalo pohodlný formát pro ukládání do počítače , který uživatelům umožňoval psát programy na papírové pásky a distribuovat je dalším uživatelům.
Homebrew Computer Club se setkal poprvé v březnu 1975, a její členové brzy využili schůzky swap program na děrné pásky. Na červnovém setkání zmizela kazeta obsahující předběžnou verzi Altair BASIC . Páska byla předána Stevu Dompierovi, který ji předal Danu Sokolovi, který měl přístup k vysokorychlostnímu děrovačce. Na příštím setkání se v papírové krabici objevilo 50 kopií Altair BASIC na papírovém pásku. Když se o tom dozvěděl Ed Roberts , zakladatel MITS, uvedl: „Každý, kdo používá ukradenou kopii MITS BASIC, by se měl identifikovat za to, kým je, zloděj“. Bill Gates to formalizoval, napsal svůj otevřený dopis fandům a stěžoval si, že „Jak si většina fandů musí být vědoma, většina z vás ukradne váš software“.
Drobný ZÁKLAD
Stížnost nebyla dobře přijata. Mezi mnoha odpověďmi Bob Albrecht, další člen Homebrew a zakladatel People's Computer Company (PCC), cítil, že nejlepší odpovědí by bylo vytvořit vlastní BASIC, který by mohl kdokoli používat zcela zdarma. Oslovil Dennise Allisona , člena fakulty informatiky na Stanfordské univerzitě , aby napsal specifikaci pro verzi BASIC, která by se vešla do 2 až 3 kilobajtů paměti. Aby se usnadnilo přenášení , byl návrh založen na intermediálním jazyce (IL), což je tlumočník pro tlumočníka, což znamenalo, že musela být přenesena pouze malá část celkového kódu.
Allisonův původní návrh byl publikován v edici zpravodaje PCC ze září 1975 spolu s verzí IL 80 tlumočníka Intel 8080 . Článek vyzval programátory, aby implementovali návrh na svém počítači a odeslali výslednou jazykovou verzi assembleru zpět do PCC. Uvedli své plány na vydání tří speciálních zpravodajů obsahujících tyto verze odeslané uživateli, spolu s opravami chyb, programy napsanými v novém BASICu a návrhy a vylepšeními. Tento koncept získal další pozornost, když byl znovu publikován v lednu 1976 vydání skupiny ACM Special Interest Group on Programming Languages. Přihlásilo se podání. Mezi pozoruhodné rané verze patřil Tiny BASIC Extended od Dicka Whippleho a Johna Arnolda, který běžel v 3K RAM, přidal smyčky FOR ... NXT a umožňoval jediné číselné pole. Vyhýbali se používání IL a psali ho přímo do strojového kódu pomocí osmičky .
První ze tří plánovaných zpravodajů s názvem „Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light without Overbyte“, byl vydán v lednu 1976. Začíná poznámkou od Albrechta, pod pseudonymem „drak“, naznačil, že tři edice nebudou stačit, a zeptal se čtenářů, zda by chtěli, aby to pokračovalo. Rovněž přetiskl původní článek o Tiny BASIC od PCC, zahrnoval kompletní seznam Extended TB a zahrnoval řadu malých BASIC programů včetně tipů a triků od Allison. Reakce na první vydání byla tak působivá, že v úvodu druhého čísla bylo uvedeno, že se již rozhodli pokračovat ve vydávání nového zpravodaje pod zjednodušeným názvem Dr. Dobb's Journal . Během několika příštích čísel byly publikovány další verze jazyka a podobné články se začaly objevovat v jiných časopisech, jako je Interface Age .
Rozpětí
V polovině roku 1976 byly k dispozici procesory Tiny BASIC pro procesory Intel 8080 , Motorola 6800 a MOS Technology 6502 . Toto byl předchůdce kolaborativního vývoje komunity svobodného softwaru před tím, než internet umožňoval snadný přenos souborů, a byl příkladem projektu svobodného softwaru před pohybem svobodného softwaru . Počítačoví nadšenci by si vyměňovali papírové pásky, kazety nebo dokonce přepisovali soubory z tištěných záznamů.
Jim Warren, redaktor Dr. Dobba , napsal v červenci 1976 zpravodaj ACM Programming Language o motivacích a metodách tohoto úspěšného projektu. Začal tím: „Existuje životaschopná alternativa k problémům, které nastínil Bill Gates ve svém rozzuřeném dopise počítačovým fandům ohledně‚ okrádání ‘softwaru. Když je software zdarma nebo tak levný, že je jednodušší za něj zaplatit než duplikovat pak to nebude 'ukradeno'. " Dopis Billa Gatese byl napsán proto, aby se software stal produktem . Alternativní metodou bylo nechat zkušeného odborníka provést celkový návrh a poté nastínit implementační strategii. Znalí amatéři by implementovali design pro různé počítačové systémy. Warren předpověděl, že tato strategie bude pokračovat a rozšíří se.
Vydání Dr. Dobbse z května 1976 nechalo Palo Alto Tiny BASIC Li-Chena Wanga pro model 8080. Výpis začínal obvyklým názvem, jménem autora a datem, ale měl také „@COPYLEFT ALL WRONGS RESERVED“. Člen Homebrew Computer Club , Roger Rauskolb, upravil a vylepšil program Li-Chen Wanga, což bylo zveřejněno v časopise Interface Age z prosince 1976 . Roger přidal své jméno a zachoval oznámení COPYLEFT.
Popis
Základní pojmy
Tiny BASIC byl navržen tak, aby používal co nejméně paměti, a to se odráží na nedostatku funkcí a podrobnostech jeho systému tlumočníků . Počáteční mikropočítače postrádaly RAM a sekundární úložiště pro kompilátor BASIC , což bylo typičtější pro systémy s časovým sdílením.
Jako většina ZÁKLADŮ té doby, i Tiny Basic byl interaktivní a uživatel zadával příkazy do příkazového řádku. Jelikož mikropočítače té doby byly často používány s dálnopisnými stroji nebo „hloupými“ terminály, přímá úprava stávajícího textu nebyla možná a editor místo toho používal znaky pro vyjmutí, často zpětné lomítko, aby naznačil, kde uživatel zálohu upravoval.
Pokud uživatel zadal příkaz do příkazového řádku, systém jej prozkoumal, aby zjistil, zda začíná číslem. Pokud tomu tak nebylo, linka byla okamžitě analyzována a provozována, což potenciálně generovalo výstup prostřednictvím PRINT
. Toto bylo známé jako „přímý režim“.
Pokud byl řádek zadán s počátečním číslem, bylo číslo převedeno z desítkového formátu, například „50“, a převedeno na 8bitovou hodnotu, v tomto případě 32 hexadecimální . Toto číslo bylo použito jako index do úložné oblasti podobné matici, kde byl zbytek řádku uložen přesně ve formátu, v jakém byl zadán. Když uživatel zadá LIST
do příkazového řádku, systém se smyčkou přes pole převede číslo řádku zpět do desítkového formátu a poté vytiskne zbytek textu v řádku.
Když byl program přítomen v paměti a uživatel zadal RUN
příkaz, systém vstoupil do „nepřímého režimu“. V tomto režimu je ukazatel nastaven tak, aby ukazoval na první řádek programu, například 10 (hex 0 $). Původní text pro tento řádek je poté načten z úložiště a spuštěn, jako by jej uživatel právě zadal v přímém režimu. Ukazatel pak přejde na další řádek a proces pokračuje.
Formální gramatika
Gramatika je uvedena níže ve formě Backus-Naur , téměř přesně tak, jak byla uvedena v poznámce k návrhu. V seznamu hvězdička („ * “) označuje nulu nebo více objektu nalevo - kromě první hvězdičky v definici „ termínu “, což je operátor násobení; objekty skupiny závorek; a epsilon („ ε “) označuje prázdnou množinu. Jak je běžné v zápisu gramatiky počítačového jazyka, svislý pruh (" | ") rozlišuje alternativy, stejně jako jejich uvedení na samostatných řádcích. Symbol „ CR “ označuje návrat na začátek řádku (obvykle generovaný klávesou „Enter“ na klávesnici). PŘERUŠENÍ z konzoly přeruší provádění programu.
line ::= number statement CR | statement CR
statement ::= PRINT expr-list
IF expression relop expression THEN statement
GOTO expression
INPUT var-list
LET var = expression
GOSUB expression
RETURN
CLEAR
LIST
RUN
END
expr-list ::= (string|expression) (, (string|expression) )*
var-list ::= var (, var)*
expression ::= (+|-|ε) term ((+|-) term)*
term ::= factor ((*|/) factor)*
factor ::= var | number | (expression)
var ::= A | B | C ... | Y | Z
number ::= digit digit*
digit ::= 0 | 1 | 2 | 3 | ... | 8 | 9
relop ::= < (>|=|ε) | > (<|=|ε) | =
string ::= " ( |!|#|$ ... -|.|/|digit|: ... @|A|B|C ... |X|Y|Z)* "
Všimněte si, že řetězec nebyl definován v poznámce k návrhu.
Tato syntaxe, tak jednoduché, jak to bylo, přidal jednu inovaci: GOTO
a GOSUB
může trvat výraz, spíše než jen číslo řádku, které poskytují přiřazené GOTO spíše než switch z GOTO/GOSUB ... OF ...
, strukturu pak podporována HP Time-Shared BASIC a předcházet ON ... GOTO
. Syntaxe umožňující IF-THEN statement
(na rozdíl od pouhého čísla řádku, na které se má větvit) nebyla v Dartmouth BASIC jako tentokrát podporována, ale byla zavedena společností Digital a zkopírována společností Microsoft.
Implementace ve virtuálním stroji
Poznámka k návrhu specifikovala virtuální počítač , ve kterém je samotný interpret Tiny BASIC spuštěn na tlumočníku virtuálních počítačů. Myšlenka designéra použít virtuální počítač aplikace sahá do Val Schorre (s META II , 1964) a Glennie (Syntax Machine). Volba přístupu virtuálního stroje šetřila paměťový prostor a implementační úsilí, přestože na něm běžící BASIC programy byly prováděny poněkud pomalu.
Mezi dialekty, které používaly virtuální stroj, patřily Tiny BASIC Extended, Tiny BASIC Toma Pittmana a NIBL. Další dialekty jako Denver Tiny BASIC (DTB) a Palo Alto Tiny BASIC byly přímými tlumočníky. Někteří programátoři, například Fred Greeb s DTB, považovali program IL (Interpretive Language) za pseudokód pro implementaci algoritmu v jazyce sestavení; Denver Tiny BASIC nepoužíval virtuální stroj, ale pečlivě sledoval program IL.
Toto je reprezentativní výňatek ze 120řádkového programu IL:
S1: TST S3,'GO' ;GOTO OR GOSUB?
TST S2,'TO' ;YES...TO, OR...SUB
CALL EXPR ;GET LABEL
DONE ;ERROR IF CR NOT NEXT
XFER ;SET UP AND JUMP
S3: TST S8,'PRINT' ;PRINT.
Běžným vzorem v programu je otestovat klíčové slovo nebo jeho část a poté podle těchto informací jednat. Každý test je tvrzení o tom, co je dále v vyrovnávací paměti řádku. Pokud se tvrzení nezdaří, přejde ovládací prvek na následující štítek (obvykle hledá nové klíčové slovo nebo token). Zde systém posune kurzor vyrovnávací paměti přes mezery a testuje GO, a pokud jej nenajde, přeskočí na řádek S3 . Pokud to najde, provádění pokračuje dalším příkazem IL. V tomto případě systém dále testuje TO , přeskočí na řádek S2, pokud selže (test pro SUB , abyste zjistili, zda je místo toho příkaz GOSUB ). Pokud to projde, kontrola pokračuje; v tomto případě volání podprogramu IL, který začíná na štítku EXPR , který analyzuje výraz. V Tiny BASIC je GOTO X*10+100
(vypočítaný GO TO) stejně legální jako GOTO 100
alternativa k ON-GOTO větších implementací BASIC. Podprogram EXPR posune výsledek výrazu na aritmetický zásobník (v tomto případě číslo řádku). HOTOVO ověří, že za výrazem neodpovídá žádný jiný text, a pokud ano, uvede chybu. XFER vyskladní číslo ze zásobníku a přenese provedení (GOE TO) na odpovídající číslo řádku, pokud existuje.
Následující tabulka uvádí částečný seznam 32 příkazů virtuálního počítače, ve kterém byl napsán první tlumočník Tiny BASIC.
- TST lbl , řetězec
- Pokud se řetězec shoduje se základním řádkem, posuňte kurzor nad řetězec a proveďte další instrukci IL; pokud test selže, proveďte instrukci IL na štítku lbl
- CALL lbl
- Spusťte podprogram IL začínající na lbl ; uložte adresu IL podle CALL na kontrolním zásobníku
- HOTOVO
- Nahlásit chybu syntaxe, pokud po odstranění úvodních mezer kurzor není umístěn tak, aby dosáhl návratu na začátek řádku
- XFER
- Testujte hodnotu v horní části zásobníku AE, aby byla v dosahu. Pokud ne, nahlaste chybu. Pokud ano, zkuste umístit kurzor na tento řádek. Pokud existuje, začněte s interpretací; pokud ne, nahlaste chybu.
- JUMP lbl
- Pokračujte v provádění IL na uvedeném štítku
- RTN
- Vraťte se do umístění IL uvedeného v horní části řídicího zásobníku
- PRS
- Tiskněte znaky ze ZÁKLADNÍHO textu až do, ale bez koncových uvozovek
- PRN
- Vytiskněte číslo získané vysunutím horní části zásobníku výrazů
- SPC
- Vložením mezer přesunete tiskovou hlavu do další zóny
- NLINE
- Výstup CRLF do tiskárny
Tom Pittman, diskutující o IL, říká: „Interpret TINY BASIC byl navržen Dennisem Allisonem jako rekurzivní analyzátor sestupu . Část elegantní jednoduchosti tohoto designu se ztratila přidáním syntaktického cukru do jazyka, ale základní forma zůstává. IL je zvláště vhodný pro analýzu rekurzivního sestupu TINY BASIC kvůli obecné rekurzivní povaze jeho postupů a jednoduchosti tokenů TINY BASIC. Jazyk IL je efektivně optimalizován pro interpretaci TINY. Zkušenosti ukázaly, že obtížnost přidání nové funkce jazyka nejsou v souladu s povahou funkcí. Obvykle je nutné na podporu nových funkcí přidat další podprogramy strojového jazyka. Obtížnost často převažuje nad výhodami. “
Odchylky od návrhu
Pittman při definování Tiny BASIC pro počítačový klub Homebrew napsal: „Tiny BASIC je vlastní podmnožinou Dartmouth BASIC, která se skládá pouze z následujících typů příkazů: LET, PRINT, INPUT, IF, GOTO, GOSUB, RETURN, END, CLEAR, LIST , RUN. Aritmetika je v 16bitových celých číslech pouze s operátory + - * / a vnořenými závorkami. Existuje pouze 26 jednopísmenných názvů proměnných A, B, ... Z a žádné funkce. Neexistují žádné řetězce ani pole. ... Tiny BASIC uvádí čísla řádků menší než 256. " Poté popsal svou implementaci: „Tento jazyk byl rozšířen o funkce RND, USR a PEEK a POKE, což uživateli poskytuje přístup ke všem jeho systémovým komponentám v 6800 z programu BASIC.“
Mnoho implementátorů přineslo do svých návrhů vlastní zkušenosti s HP Time-Shared BASIC nebo DEC BASIC-PLUS a uvolnili formální jazykovou specifikaci Tiny BASIC. Ze sedmi prominentních implementací publikovaných v roce 1977:
- Všichni přidali nějakou funkci náhodných čísel, obvykle RND () . Ačkoli to není zahrnuto ve specifikaci, článek zpravodaje před konstrukční poznámkou pro Tiny BASIC požadoval pouze tuto funkci.
- Všechny povolené LET jsou volitelné a většina výrazů v příkazech obsahuje relační operátory .
- Všichni kromě 6800TB podporují oddělovače příkazů v řádcích, obvykle : ačkoli TBX používá $ a používá PATB ; .
- V příkazech IF všichni kromě MINOL odstranili potřebu výrazů obsahovat relační operátory (např. Bylo platné). Implementace POTOM odstranily POTOM nebo se staly volitelnými nebo podporovaly pouze implicitní GOTO .
IF X THEN LET Y=X
- Mnoho upravených PRINT pro podporu tiskových zón, pomocí
,
pro přechod na další zónu a;
neposunutí kurzoru. - Všichni ale 6800TB a DTB přidal NEW .
- Všichni kromě 6800 TB a MINOL přidali funkci pro vrácení velikosti paměti: TBX měl SZE , DTB a PATB měly SIZE , L1B měl MEM a NIBL měl TOP .
- Čtyři implementace přidaly pole, ať už jedno, nedimenzované pole v PATB a L1B nebo DIM sdružitelná pole v TBX a DTB.
- Čtyři implementace přidaly příkaz REM archa.
- Čtyři implementace přidaly smyčku FOR : PATB, NIBL a L1B nabízely FOR-TO-STEP/NEXT , zatímco TBX nepodporovala
STEP
a používala klíčové slovoNXT
k ukončení smyčky. - Pouze NIBL kývla na strukturované programování s DO/UNTIL , navzdory Allisonovu nářku v čísle 2 o problémech s BASIC.
Alternativou k tokenizaci je úspora paměti RAM, TBX, DTB a MINOL zkrácených klíčových slov: PR pro PRINT , IN pro INPUT , RET pro RETURN . Úplná, tradiční klíčová slova nebyla přijata. Naproti tomu PATB umožňoval přijímat tradiční klíčová slova, ale také umožňoval zkrácení libovolného klíčového slova na jeho minimální jedinečný řetězec s koncovou periodou. Například PRINT by mohl být napsán P. , ačkoli PR. a fungovaly i další variace. Tento systém byl zachován na úrovni I BASIC pro TRS-80 , který používal PATB, a byl také později nalezen v Atari BASIC a BASIC různých Sharp Pocket Computers .
Nářečí
Nejvýraznějšími dialekty Tiny BASIC byly původní Design Note, Tiny BASIC Extended, Palo Alto Tiny BASIC a 6800 Tiny BASIC. Existovalo však mnoho dalších verzí Tiny BASIC.
Seznam prominentních dialektů
Tiny BASIC byl poprvé publikován v odnoži zpravodaje společnosti People's Computer Company , zpravodaje, který se stal Dr. Dobb's Journal , dlouhotrvající počítačový časopis. V časopise bylo publikováno asi deset verzí.
Datum zveřejnění | Problém | Dialekt | Autor | Procesor | Velikost |
---|---|---|---|---|---|
Prosinec 1975 | 1 | Poznámka k designu | Dennis Allison | N/A | N/A |
Února 1976 | 2 | Tiny BASIC Extended (TBX) | Dick Whipple a John Arnold | 8080 | 2,9 tis |
Března 1976 | 3 | Denver Tiny BASIC (DTB) | Fred Greeb | 8080 | 2,75 tis |
Března 1976 | 3 | 6800 Tiny BASIC (6800 TB) | Tom Pittman | 6800 | 2K |
Duben 1976 | 4 | MINOL | Eric T. Mueller | 8080 | 1,75 tis |
Května 1976 | 5 | Palo Alto Tiny BASIC (PATB) | Li-Chen Wang | 8080 | 1,77 tis |
Listopadu 1976 | 10 | National Industrial Basic Language (NIBL) | Mark Alexander a Steve Leininger | SC/MP | 4K |
Říjen 1980 | 49 | Vylepšené 6800 Tiny BASIC | Robert Hudson | 6800 | N/A |
Únor 1985 | 100 | TBI68K | Gordon Brandly | 68 000 | N/A |
Leden 2006 | 351 | Návrat Tiny BASIC | Tom Pittman | N/A ( C ) | N/A |
TBX byl také známý jako Texas Tiny BASIC.
V časopise byly oznámeny jak SCELBAL, tak 6800 Tiny BASIC, ale nezveřejnily svůj zdrojový kód.
Palo Alto Tiny ZÁKLADNÍ
Vývojář | Li Chen Wang |
---|---|
Poprvé se objevil | 1976 |
Licence | Veřejná doména |
Nářečí | |
Základní ovládání 3K | |
Ovlivněn | |
Tiny BASIC Design Note, Tiny BASIC Extended | |
Ovlivněn | |
Astro BASIC , úroveň I BASIC , Sharp PC-1211 BASIC |
Jednou z nejpopulárnějších z mnoha verzí Tiny BASIC byl Palo Alto Tiny BASIC nebo zkráceně PATB od Li-Chen Wang . PATB se poprvé objevil v edici Dr. Dobbs z května 1976 , napsané ve vlastním jazyce assembleru s nestandardními mnemotechnickými pomůckami. To vedlo k dalším portům, které pracovaly s konvenčními assemblery na 8080. První verze interpretu zabírala 1,77 kilobajtů paměti a předpokládala použití Teletype Machine (TTY) pro vstup/výstup uživatele . Erratum k původnímu článku se objevilo v červnovém/červencovém čísle Dr. Dobba (sv. 1, č. 6). Tento článek také zahrnoval informace o přidání dalších I/O zařízení, přičemž příkladem byl kód pro zobrazení videa VDM od Processor Technology .
Wang byl jedním z prvních, kdo používal slovo copyleft . V oznámení o distribuci Palo Alto Tiny BASIC napsal „@COPYLEFT ALL WRONGS RESERVED“. Tiny BASIC nebyl distribuován v žádné formální formě distribučních podmínek copyleft, ale byl prezentován v kontextu, kde byl sdílen a upravován zdrojový kód. Ve skutečnosti Wang dříve přispěl úpravami do Tiny BASIC Extended, než napsal vlastního tlumočníka. Povzbuzoval ostatní, aby přizpůsobili jeho zdrojový kód a zveřejnili jejich adaptace, jako u verze PATB Rogera Rauskolba publikované v Interface Age . Sám vydal třetí verzi v Referenční knize osobních a domácích počítačů od PCC .
Jednou z nejpozoruhodnějších změn v PATB je přidání smyčky FOR ... NEXT . V původním TB bylo možné smyčky implementovat pouze pomocí IF
a GOTO
. Stejně jako v Microsoft BASIC , horní a dolní hranice smyčky byly nastaveny na vstupu smyčky a během smyčky se neměnily, takže pokud jedna z hranic byla založena na výrazu proměnné, změna proměnné nezměnila vazbu. STEP
Modifikátor byl volitelný, jak v čs.
Další významnou změnou byla možnost umístit několik příkazů na jeden řádek. Z důvodů, které nebyly vysvětleny, použil PATB ;
k oddělení příkazů středník , nikoli již běžné dvojtečky :
.
Mezi další změny patří přidání jednoho číselného pole, s názvem proměnné @
, STOP
kromě END
, a použití #
pro ne-rovná ve srovnání, na rozdíl od <>
.
PATB místo slov používal slova pro chybové zprávy. Aby se snížilo množství požadované paměti, existovaly pouze tři zprávy a skládaly se z jednotlivých slov. Systém bude reagovat WHAT?
na chyby syntaxe, chyby HOW?
při běhu, jako jsou GOTO, na neexistující řádek nebo přeplnění čísel a SORRY
problémy s nedostatkem paměti.
Wang také napsal program STARTREK ve svém Tiny BASIC, který se objevil v červencovém vydání zpravodaje People's Computer Company Newsletter .
Později se adaptoval jazyka do 3K Control Basic for Cromemco s tím, názvy proměnných z tvaru písmene-místné (například A0
k Z9
), logické funkce ( AND()
, OR()
, XOR()
), což je CALL
příkaz k vykonání strojového jazyka rutiny, další PRINT
možnosti -formatting, a jiní ( GET()
a PUT()
místo PEEK
a POKE
; funkce I/O portů).
Palo Alto Tiny BASIC byl upraven pro mnoho dalších implementací, včetně úrovně I BASIC (1977), BASIC pro kapesní počítač Sharp PC-1211 (1980) a Astro BASIC (1982, od Jamieho Fentona ).
MINOL
MINOL byla napsána juniorem na střední škole a byla jedinou implementací, která nepodporovala úplnou poznámku k návrhu, postrádala přednost operátora , měla pouze tři přemístění (<, =, #), vynechala GOSUB
a RETURN
. Podporoval pouze nepodepsanou 8bitovou přesnost (na rozdíl od podepsané 16bitové přesnosti pro každou jinou implementaci) a čísla řádků od 0 do 254.
Nebyly povoleny žádné mezery kromě řetězců; !
vrací náhodné číslo, $
než výraz načte řetězec na dané adrese; OS
vrátí do operačního systému. Paměť byla adresovatelná, jako by se jednalo o dvourozměrné pole vysokých a nízkých bytů (např. „(0,0)“ až „(255,255)“); CALL
provede podprogram strojového jazyka.
Různé dialekty
Mnoho dialektů se objevilo v různých jiných publikacích.
Inspirován výzvou PCC pro Tiny BASICs, Robert Uiterwyk napsal MICRO BASIC 1.3 pro SWTPC ( systém 6800 ), který SWTPC publikoval v červnovém čísle zpravodaje SWTPC. Uiterwyk napsal jazyk ručně na právnický tablet. Později rozšířil jazyk na 4K a přidal podporu pro plovoucí desetinnou čárku; tato implementace byla mezi tlumočníky BASIC jedinečná pomocí binárního kódovaného desetinného čísla s přesností 9 číslic s rozsahem až 10 99 a bezplatným vydáním jako příloha časopisu „Floppy ROM“. Verze 8K přidala řetězcové proměnné a funkce trigonometrie . Verze 4K i 8K prodávala společnost SWTPC. V lednu 1978 Uiterwyk prodal práva na zdrojový kód společnosti Motorola .
Thomas F. Waitman napsal v roce 1976 Tiny BASIC pro terminály Hewlett-Packard HP-2640 a HP-2645 (které používaly procesory Intel 8008 a 8080), který byl publikován v časopise Hewlett-Packard Journal .
V prosinci 1976 vyšlo v Interface Age vydání LLL ( Lawrence Livermore Laboratory ) BASIC, jehož první návrh vytvořil Steve Leininger podle specifikace Allison, než Leininger opustil National Semiconductor pro Tandy Corporation . Konečného tlumočníka vyvinuli John Dickenson, Jerry Barber a John Teeter z University of Idaho na základě smlouvy s LLL. S 5K zahrnoval balíček s plovoucí desetinnou čárkou, který vyvinuli David Mead, Hal Brand a Frank Olken. Program byl veřejně dostupný společností LLL, která systém vyvinula pod záštitou amerického úřadu pro výzkum a vývoj energie.
4K ZÁKLADY
Altair BASIC , 4K BASIC, mohl běžet na 4kB RAM stroji, takže pro programový kód zůstalo volných jen asi 790 bytů. Iniciativa Tiny BASIC začala v reakci na poplatek 150 $ za Altair 4K BASIC.
V roce 1975 se Steve Wozniak připojil k nově vytvořenému počítačovému klubu Homebrew , který měl členy Li-Chen Wang (Palo Alto Tiny BASIC) a Toma Pittmana (6800 Tiny BASIC). Wozniak dospěl k závěru, že jeho stroj bude muset mít vlastní BASIC, což by, doufejme, bylo první pro procesor MOS Technology 6502 . Protože jazyk potřeboval 4 kB RAM, vytvořil pro návrh minimální paměť. Integer BASIC byl původně publikován na kompaktní kazetě v roce 1976.
V roce 1977 vydali Radio Shack (jak se tehdy vědělo) svůj první počítač TRS-80 , systém Z80 se základní úrovní I v 4 kB ROM. Zaměstnanec Tandy Steve Leininger napsal první návrh tlumočníka NIBL (National Industrial Basic Language) pro SC/MP, zatímco byl zaměstnán v National Semiconductor . Nelze vzít tento zdrojový kód s sebou, přizpůsobil Palo Alto Tiny BASIC Li-Chena Wanga pro původní prototyp modelu TRS-80 Model I. Rozsáhle revidoval tlumočníka a přidal podporu s plovoucí desetinnou čárkou, jednoduché černé a bílá grafika a READ/DATA/RESTORE
prohlášení.
Původně vyvinut v roce 1979, Sinclair 4K BASIC , napsaný Johnem Grantem, používal jako svou jazykovou definici standard Minimal BASIC Amerického národního normalizačního institutu (ANSI) z roku 1978 , ale sám byl neúplnou implementací 4Kb pouze s celočíselnou aritmetikou.
Mikrokontrolérové dialekty
Malé implementace BASIC byly přizpůsobeny pro řízení procesoru a pro mikrokontroléry , jako je Arduino :
- Stephen A. Ness napsal XYBASIC pro společnost Mark Williams v roce 1977, implementaci 4K celého čísla. Jazyk byl často používán pro aplikace pro řízení procesů.
- Arduino BASIC - Převzato z 68000 Tiny BASIC Gordona Brandlyho, přeneseno do C Mike Fieldem.
- Tiny Basic Plus - převzato z Arduino BASIC od Scotta Lawrencea.
- Half -Byte Tiny Basic - převzato z Arduino BASIC.
- Tiny Basic na Micro: Bit - převzato z Palo Alto Tiny BASIC.
Pozdější implementace
V roce 2002 vydali Emmanuel Chailloux, Pascal Manoury a Bruno Pagano Tiny BASIC (chybí GOSUB
/ RETURN
) v části Vývoj aplikací s Objective Caml jako příkladem aplikace Objective Caml .
V roce 2013 publikoval Alex Yang implementaci v Pythonu .
V roce 2019 vydal Sergej Kuzněcov verzi v Ruby .
Porovnány dialekty
Následující tabulka porovnává jazykové funkce implementací Tiny BASIC s jinými prominentními BASIC, které jim předcházely.
Programátor | Procesor | Typ | VSTUP | NECHAT | TISK | JÍT DO | KDYŽ ... PAK | GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM | PRŮHLEDNÁ | NOVÝ | REM | PRO DALŠÍ | ČTĚTE/DATA/OBNOVTE | Přidány ZÁKLADNÍ příkazy | Přizpůsobení | Výrazy | převrhnout | Funkce | RND | Funkce paměti | Čísla řádků | Oddělovač prohlášení | Chyby | Přesnost | Aritmetický | Proměnné | Pole | Řetězce |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
(Studenti Dartmouthu) | GE-225 | Kompilace a cesta | N/A [!] | LET var = výraz | TISKNOUT seznam expr {, /; /} | PŘEJÍT na číslo | IF expression relop expression THEN řádek-číslo | Číslo GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM-start | - | NOVINKA [výzvy k zadání názvu programu] | REM | PRO/DO/KROK/DALŠÍ | ČTĚTE, DATA | STOP | N/A | přednost, ^ | <<= => => <> | INT, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FN | RND (0) 0..1 | - | 1 až 99999 | Žádný | 22 definováno | 9 číslic | ± 999 999 999; E notační základna 2 -256 až +255 (E ± 76). | AZ, A0-Z9 | DIM (jedno písmeno, dvě dimenze); pokud je vynechán, předpokládá se, že jde od 0 do 10; až 1500 prvků ve všech polích | Žádný |
(Zaměstnanci DEC) | PDP-8 | Kompilace a cesta | INPUT var-list | LET var = výraz | TISKNOUT seznam expr {, /; /} | PŘEJÍT na číslo | IF expression relop expression [THEN/GO TO] číslo řádku | Číslo GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM (první (, poslední)) | - | NOVINKA [výzvy k zadání názvu programu] | REM | PRO/DO/KROK/DALŠÍ | ČTĚTE, DATA, OBNOVUJTE | STOP, STARÝ, ULOŽIT, NEULOŽIT | DELETE (první (, poslední)), BYE | přednost, ^ | <<= => => <> | INT, SGN, SIN, COS, TAN, ATN, EXP, LOG, ABS, SQR, DEF FN | RND (0) 0..1 | - | 1 až 2045 | Žádný | 23 definováno | ? | ± 134 217 727; 14E-38 <N <1,7E38 | AZ, AA-Z9 | DIM (jedno písmeno, dvě dimenze) | Žádný |
Alfred Weaver, Michael Tindall, Ronald Danielson | 8008 | Tlumočník | VSTUP <proměnná> {, <proměnná>}* | LET var = vzorec | TISK <řetězec> / <vzorec> {, <řetězec> / <vzorec>}* | PŘEJÍT na číslo | IF výraz POTOM číslo řádku | Číslo GOSUB | VRÁTIT SE | KONEC | BĚH | není zdokumentováno | není zdokumentováno | není zdokumentováno | REM | PRO/DO/KROK/DALŠÍ | - | DEF FN, STOP | N/A | přednost, ^ | <<= => => # A NEBO NE | FNA..Z, SIN, COS, LOG, SQR, EXP, ATN | - | - | 0 až 999 | Žádný | není zdokumentováno | 4bajtová mantisa a 1bytový exponent [aritmetický balíček Datapoint 2200 s pohyblivou řádovou čárkou] | není zdokumentováno | AZ, A0-Z9 | DIM (jedno písmeno, tři rozměry) | Žádný |
Bill Gates, Paul Allen, Monte Davidoff | 8080 | Tlumočník | INPUT ("řetězec",) var-list | (LET) var = výraz | TISKNOUT seznam expr {, /; } | GOTO číslo | IF výraz POTOM číslo řádku/příkaz | Číslo GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM (začátek) | - | NOVÝ | REM | PRO/DO/KROK/DALŠÍ | ČTĚTE, DATA, OBNOVUJTE | STOP | - | přednost | <<= => => <> | ABS, INT, SGN, SQR, TAB, USR | RND (X) <0, nové s použitím X jako osiva; = 0, opakovat; > 0, další | - | 1 až 65535 | : | 12 definováno | 40bitový operand plovoucí | ? | ? | DIM (jedna dimenze) | Žádný |
Dennis Allison | N/A | Tlumočník | INPUT var-list | LET var = výraz | PRINT expr-list | GOTO výraz | IF expression relop expression THEN prohlášení | Výraz GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM | [ekv. do NOVÉHO] | - | - | - | - | - | - | přednost | <<= => => <>> < | Žádný | Žádný | - | 1 až 255 | Žádný | 8 definováno | 16 bitů | ± 32767 | AZ | Žádný | Žádný |
Dick Whipple a John Arnold | 8080 | Tlumočník | V | (LET) var = výraz | ;} | JÍT DO | IF výraz [NO THEN] prohlášení | PŘEJÍT SUB | RET | KONEC | BĚH | LST (první (, poslední)) | - | NOVÝ | - | FOR-NXT (bez KROKU) | DTA (pole LET) | - | - | přednost | <<= => => <>> < | Mezery TB () v tisku | RN (náhodně 0-10000) | SZE | 1 až 65535 | $ | 14 definováno | 16 bitů | ± 32767 | AZ | DIM, 1- nebo 2-dimenze, 255x255 max | Žádný |
Fred Greeb | 8080 | Tlumočník | V | (LET) var = výraz | ;} | JÍT DO | IF výraz [NO THEN] prohlášení | GOSUB | RET | KONEC | BĚH | SEZNAM (první poslední) | [ekv. do NOVÉHO] | - | - | - | - | PÁSKA [ULOŽIT], Načíst | CLRS [CLS] | přednost | <<= => => <>> < | RND (0), RND (1) | VELIKOST | 2 až 255 | : | Definováno 20 | 16 bitů | ± 32767 | AZ, A1 až A6 až Z6 | DIM, 1 rozměr | Žádný | |
Tom Pittman | 6800 | Tlumočník | INPUT (výraz) var-list | LET var = výraz | TISKNOUT seznam expr {, /; } | GOTO výraz | IF expression relop expression THEN prohlášení | Výraz GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM (první poslední) | [ekv. do NOVÉHO] | - | REM | - | - | - | - | přednost | <<= => => <>> < | USR () | RND () | - | 1 až 65535 | Žádný | Definováno 53 | 16 bitů | ± 32767 | AZ | Žádný | Žádný |
Eric T. Mueller | 8080 | Tlumočník | V | (LET) var = výraz | PR expr-list {;} | [GOTO 0 skočí zpět na začátek přímého příkazu] | IF výraz relop výraz; tvrzení | N/A | N/A | KONEC | BĚH | SEZNAM | VYMAZAT [pouze proměnné] | NOVÝ | - | - | - | - | Nejsou povolena žádná místa kromě řetězců | Žádná priorita operátora | <= # | $ [CHR $] | ! [RND] | - | 1 až 254 | : | 6 definováno | 8 bitů | 0 až 255 | AZ | (H, L) umístění paměti | jeden znak |
Li-Chen Wang | 8080 | Tlumočník | INPUT [(výraz) var]* | (LET) var = výraz | PRINT expr-list | GOTO výraz | IF výraz [NO THEN] prohlášení | Výraz GOSUB | VRÁTIT SE | STOP | BĚH | SEZNAM (začátek) | - | NOVÝ | REM | PRO/DO/KROK/DALŠÍ | - | STOP | - | přednost | <<= => => # | BŘIŠNÍ SVALY() | RND () | VELIKOST | 1 až 32767 | ; | 3 definováno | 16 bitů | ± 32767 | AZ | @(1 pole 1 dimenze) | Žádný |
Mark Alexander a Steve Leininger | SC/MP | Tlumočník | VSTUP ($) var | (LET) var = výraz | PR/PRINT expr-list | GOTO výraz | IF výraz (THEN) prohlášení | Výraz GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM (začátek) | VYMAZAT [proměnné a zásobník] | NOVÝ | REM | PRO/DO/KROK/DALŠÍ | - | DO/DO | Adresování paměti (@ [PEEK/POKE], STAT, PAGE) | přednost | <<= => => <> | MOD (), A NEBO NE | RND (A, Z) | HORNÍ | 0 až 32767 | : | 13 definováno se čtyřmi znaky | 16 bitů | ± 32767 | AZ | adresování paměti | VSTUP $, TISK $, $ exp = exp |
Steve Leininger | Z80 | Tlumočník | VSTUP (#digit) [(výraz) var]* | (LET) var = výraz | PRINT (#digit) expr-list | GOTO číslo | IF výraz THEN prohlášení | Číslo GOSUB | VRÁTIT SE | KONEC | RUN (start) | SEZNAM (začátek) | - | NOVÝ | REM | PRO/DO/KROK/DALŠÍ | ČTĚTE, DATA, OBNOVUJTE | STOP, CONT, ON-GOTO/GOSUB | CLOAD, CSAVE, CLS, SET, RESET, | přednost | <<= => => <>> < | ABS (), INT (), MEM, POINT (X, Y) | RND () | MEM | 1 až 32767 | : | 3 definováno | 16 bitů | ± 32767 | AZ | A (1 pole 1 dimenze) | A $, B $ |
Robert Uiterwyk | 6800 | Tlumočník | INPUT var-list | (LET) var = výraz | TISKNOUT seznam expr {, /; } | GOTO výraz | IF expression relop expression THEN prohlášení | Výraz GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM (první (, poslední)) | - | NOVÝ | - | PRO/DO/DALŠÍ (bez KROKU) | - | TAB () | - | přednost | <<= => => <>> < | RND, VELIKOST | RND [vrátí 1-32762] | SIZE (prohlášení, které tiskne použité a volné bajty) | 1 až 65535 | Žádný | 17 definováno | 16 bitů [později BCD!] | ± 32767 | AZ | DIM (dva rozměry, maximální velikost 255) | Žádný |
Mark Arnold a Nat Wadsworth | 8008 | Tlumočník | INPUT var-list | (LET) var = výraz | TISKNOUT seznam expr {, /; /} | GOTO číslo | POTOM prohlášení | Číslo GOSUB | VRÁTIT SE | KONEC | BĚH | SEZNAM | - | Poškrábat] | REM | PRO/DO/KROK/DALŠÍ | - | ULOŽIT, ZATÍŽIT | UDF [USR] | přednost, ^ | <<= => => <> | INT, SGN, ABS, SQR, CHR [použitelné pouze v TISKU], TAB | RND (0) 0..1 | - | 1 až 999999 | Žádný | 18 definováno | 32bitový operand s pohyblivým nebo pevným bodem | ± 134 217 727; 14E-38 <N <1,7E38 | ? | DIM (jedno písmeno, jedna dimenze; až 4 pole, celkem až 64 záznamů) | Žádný |
Steve Wozniak | 6502 | Tlumočník | INPUT ("řetězec",) var-list | (LET) var = výraz | TISKNOUT seznam expr {, /; } | GOTO výraz | IF expression relop expression THEN řádek-číslo/příkaz | Výraz GOSUB | VRÁTIT SE | KONEC | RUN (start) | SEZNAM (první (, poslední)) | - | SCR | REM | PRO/DO/KROK/DALŠÍ | - | AUTO, DEL, POKE | TAB (příkaz), CALL | přednost | <<= => => <> # A NEBO NE MOD | SGN, ABS, PEEK (), LEN () | RND (X) 0..X (nebo X..0!) | HIMEM, LOMEM | 1 až 32767 | Žádný [dřívější verze:] | 16 definováno | 16 bitů | ± 32767 | AZ následovaný libovolným počtem alfanumerických | DIM (jedna dimenze) | dimenzováno |
(Zaměstnanci University of Idaho) | 8080 | Tlumočník | INPUT var-list | (LET) var = výraz | TISKNOUT seznam expr {, /;} | PŘEJÍT na číslo | IF výraz relop expression (THEN) prohlášení | GO SUB číslo | VRÁTIT SE | KONEC | BĚH | SEZNAM | - | SCR | REM | PRO/DO/DALŠÍ (bez KROKU) | - | STOP | CALL, GET (), PUT () | přednost | <<= => => <>> < | Žádné RND? | - | 0 až 32767 | : | 14 definováno | 32bitový operand s plovoucí desetinnou čárkou | ? | AZ, A0-Z9 | DIM (pouze celá čísla, jedno písmeno, jedna dimenze, maximální velikost 255) | Žádný |
Viz také
Poznámky
Reference
Citace
Bibliografie
- „List s kódem TB“ . Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light without Overbyte . 1 odst. Prosinec 1975.
- Mánes, Stephen ; Andrews, Paul (1994). Gates: Jak Microsoft Mogul znovu objevil průmysl a udělal ze sebe nejbohatšího muže v Americe . New York: Touchstone, Simon a Schuster. ISBN 0-671-88074-8.
externí odkazy
- Tiny Basic User Manual and Experimenter's Kit - od Toma Pittmana
- Robert Uiterwyk's BASIC a Robert Uiterwyk's Micro Basic - A MC6800 tiny BASIC později prodávaný s počítačem SWTPC 6800
- MINOL - MINOL Erika Muellera - Tiny BASIC se strunami pro Intel 8080
- Tiny BASIC - Verze pro knihovnu zpracování obrazovky obrazovky kletby
- tinyBasic - implementace napsaná v iziBasic
- Tiny BASIC - Živá webová verze přenesená na Run BASIC z iziBasic
- Palo Alto BASIC méně než v 500 řádcích - příklad BASIC interpret napsaný v Ruby.
- TinyBasic - Port Toma Pittmana TinyBasic C tlumočníka do Javy , C# a Adobe Flex . Zahrnuje živé webové verze.
- TinyBASIC Windows - Windows verze TinyBASIC