Tiny BASIC - Tiny BASIC

Drobný ZÁKLAD
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Í

Papírová páska obsahující rozšířenou 8k verzi Micro-Soft BASIC.

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í

Monospaced font s nápisem „Tiny basic for Intel 8080, version 2.0 by Li-Chen Wang, modified and translation to Intel mnemonics by Roger Rausklob, 10 October 1976. @ Copyleft, All Wrongs Reserved.“
Použití „Copyleft; All Wrongs Reserved“ v roce 1976

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

Viz ZÁKLADNÍ tlumočníci

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á LISTdo 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 RUNpří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: GOTOa GOSUBmůž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 100alternativa 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 STEPa používala klíčové slovo NXTk 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í.

Prominent Dialects of Tiny BASIC (v Dr. Dobb's Journal)
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Í

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í IFa 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. STEPModifiká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é @, STOPkromě 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 SORRYproblé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 A0k Z9), logické funkce ( AND(), OR(), XOR()), což je CALLpříkaz k vykonání strojového jazyka rutiny, další PRINTmožnosti -formatting, a jiní ( GET()a PUT()místo PEEKa 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 GOSUBa 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; OSvrá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)“); CALLprovede podprogram strojového jazyka.

Různé dialekty

Mnoho dialektů se objevilo v různých jiných publikacích.

Problém z května 1977 představoval disketu ROM obsahující MICRO-BASIC.

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/RESTOREprohláš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.

Porovnání BASIC implementací - Tiny BASIC a dalších BASIC
Datum
zveřejnění
Dialekt
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
Říjen
1964
DTSS Dartmouth BASIC
(verze 2)
(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ý
Únor
1970
DEC BASIC-8
(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ý
Června
1974
UIUC ZÁKLADNÍ
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ý
1975
Altair 4K ZÁKLADNÍ
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ý
Prosinec
1975
Poznámka k designu
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ý
Února
1976
Tiny BASIC Extended
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ý
Března
1976
Denver Tiny ZÁKLADNÍ
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ý
Března
1976
6800 Tiny ZÁKLADNÍ
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ý
Duben
1976
MINOL
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
Května
1976
Palo Alto Tiny ZÁKLADNÍ
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ý
Listopadu
1976
NIBL
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
Srpna
1977
Úroveň I ZÁKLADNÍ
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 $
Června
1976
MICRO ZÁKLADNÍ 1.3
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ý
Června
1976
SCientific ELementary
BAsic Language
(SCELBAL)
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ý
Říjen
1976
Apple I ZÁKLADNÍ
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
Prosinec
1976
LLL ZÁKLADNÍ
(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

externí odkazy