Hlavní navigace

Programovací jazyk BASIC na osmibitových mikropočítačích (dokončení)

29. 6. 2010
Doba čtení: 23 minut

Sdílet

V dnešní části seriálu o architekturách počítačů dokončíme popis dialektů programovacího jazyka BASIC dostupného na zahraničních i tuzemských osmibitových počítačích. Budeme se zabývat především multiplatformním a rozšířeným BBC BASICem a taktéž dialekty BASICu, které byly vyvinuty pro tuzemské počítače.

Obsah

1. Historie programovacího jazyka BBC BASIC

2. Rozšíření BBC BASICu na různé počítačové platformy

3. Základní vlastnosti BBC BASICu

4. Kombinace programů psaných v BBC BASICu a assembleru

5. Programovací jazyk BASIC na československých osmibitových počítačích

6. BASIC na osmibitovém mikropočítači PMD-85

7. Seznam všech příkazů interpretru BASIC-G/V3.0

8. Obsah následující části seriálu

9. Odkazy na Internetu

1. Historie programovacího jazyka BBC BASIC

V předchozí části seriálu o architekturách počítačů i o jejich základním programovém vybavení jsme se mj. seznámili i s programovacím jazykem Beta BASIC určeným pro domácí osmibitové počítače ZX Spectrum i pro jeho různé klony. Tento dialekt BASICu je významný zejména z toho důvodu, že uživatelům umožňoval psát aplikace podle zásad strukturovaného programování, tj. s využitím podprogramů majících pouze jeden vstupní bod, rozhodovacích příkazů typu if-then-else a „strukturovaných“ programových smyček typu while-end (podmínka pro ukončení smyčky je vyhodnocována před provedením vlastního těla smyčky) a repeat-until (podmínka je pro změnu vyhodnocena až po provedení alespoň jedné iterace, tj. na konci smyčky). Oba dva zmíněné typy programových smyček bylo možné zapisovat pomocí příkazů DO, LOOP, WHILE a UNTIL.

Obrázek 1: Vývojové prostředí Beta BASICu spuštěné na ZX Spectru. V horní části obrazovky se nachází program vypsaný menším fontem s maskou velikosti 4×8 pixelů (v této ploše se znaky vypisují do rastru o rozměrech 3×6 pixelů), zatímco příkaz v editačním řádku na spodní straně obrazovky používá font standardní s maskou velikosti 8×8 pixelů.

Využívání těchto programových konstrukcí do značné míry eliminovalo nadměrné použití příkazu GOTO, i když tento příkaz stále měl svoji roli, například při potřebě výskoku ze zanořených smyček, obsluhu některých chybových stavů (zejména v těch případech, kdy nebylo možné použít příkaz TRAP) atd. Ovšem programovací jazyk Beta BASIC nebyl jediným a dokonce ani nejstarším dialektem BASICu, který na osmibitových mikropočítačích podporoval strukturované programování. Dalším dialektem BASICu, který byl velmi úspěšný především v západních zemích (ovšem nikoli v ČSSR, kde panovala, podobně jako v dalších státech RVHP, poněkud jiná situace), je BBC BASIC, jehož původním autorem je Sophie Wilsonová a mezi další autory, kteří například provedli portaci tohoto programovacího jazyka na jiné platformy, patří i známý Richard Russell.

Obrázek 2: Porovnání dvou znakových sad vývojového prostředí jazyka Beta BASIC. V horní části obrázku (zvýrazněno červenou barvou) je text psaný písmem s maskou o velikosti 4×8 pixelů, v dolní části (modrá barva + zelený kurzor) písmo o velikosti 8×8 pixelů.

Tento dialekt programovacího jazyka BASIC má poměrně zajímavou a taktéž dlouhou historii. Za jeho vznikem a vývojem stála, jak již ostatně název tohoto programovacího jazyka napovídá, britská BBC, která na počátku osmdesátých let minulého století chtěla vytvořit počítač (samozřejmě s nezbytným programovým vybavením), který by byl vhodný pro výuku a který by bylo možné masově rozšířit jak mezi školy, tak i na právě vznikající trh s domácími osmibitovými mikropočítači. Ovšem vzápětí se ukázalo, že samotná BBC nemá prostředky na to, aby sama v rozumném čase navrhla a následně masově vyráběla počítač, jenž byl mohl svými parametry i cenou konkurovat domácím osmibitovým počítačům vyráběným specializovanými firmami, které právě začaly poměrně překotným způsobem vznikat (popř. se jednalo o divize již zavedených technologických firem). Z tohoto důvodu BBC vypsala tendr, z něhož vyšla vítězně firma Acorn Computers z Cambridge. Historie BBC BASICu začala…

Obrázek 3: Dobový plakát s počítačem Acorn BBC Micro.

2. Rozšíření BBC BASICu na různé počítačové platformy

Firma Acorn Computers již v době, kdy tendr vypsaný BBC probíhal, konstruovala svoje počítače nazvané Atom vybavené sice poměrně rychlým, zato však omezeným a nekompatibilním dialektem BASICu, který se ukázal být nepříliš vhodný pro počítač určený mj. i pro výuku (jednou z pozitivních vlastností interpretru tohoto BASICu byla možnost zápisu assembleru spolu s BASICovými programy, která se později objevila i v BBC BASICu). Z tohoto důvodu BBC zpočátku uvažovala o tom, že nakoupí licence na dialekt BASICu nabízený firmou Microsoft (viz též předchozí tři části tohoto seriálu), ovšem tento programovací jazyk, přesněji řečeno jeho varianta pro osmibitové mikroprocesory, postrádal některé vlastnosti, které byly vyžadovány k tomu, aby bylo možné tento dialekt použít pro potřeby výuky – týkalo se to například nedostupnosti již zmíněných programových konstrukcí umožňujících strukturované programování, taktéž nemožnosti použití dlouhých názvů proměnných (nikoli pouze jedno- či dvouznakových) atd.

Obrázek 4: Úvodní obrazovka BBC BASICu ve verzi pro ZX Spectrum. Tato verze vznikla později než původní dialekt pro počítače Acorn BBC Micro, mj. i z toho důvodu, že nejdříve musel být tento dialekt BASICu portován na mikroprocesory Intel 8080 a Zilog Z80 (a samozřejmě také proto, že ZX Spectrum začalo být prodáváno později než Acorn BBC Micro).

Z těchto důvodů bylo nakonec od myšlenky licencování Microsoft BASICu odstoupeno a pro nově vznikající platformu nazvanou příhodně Acorn BBC Micro byl vytvořen nový jazyk s názvem BBC BASIC, který byl mj. navržen takovým způsobem, aby nebyl závislý na konkrétní počítačové platformě. Původní verze programovacího jazyka BBC BASIC z roku 1981 byla určena pro počítače vybavené osmibitovými mikroprocesory MOS 6502, ovšem v pozdějších letech došlo k jeho rozšíření i na další mikroprocesory a počítačové platformy, viz též údaje na stránce http://mdfs.net/Sof­tware/BBCBasic/.

Obrázek 5: Osmibitový mikropočítač Acorn BBC Micro.

Ve své době se jednalo o nejrozšířenější multiplatformní dialekt BASICu a současně i o jeden z nejrozšířenějších dialektů nějakého programovacího jazyka vůbec, protože byl portován na minimálně sedm různých mikroprocesorů (kromě původního MOS 6502 i na Intel 8080, Zilog Z80, řadu Motorola M68000, řadu Intel 80×86, ARM atd.) a takřka neuvěřitelných více než 30 různých počítačových platforem, včetně velké části osmibitových mikropočítačů, Amigy, osobních počítačů PC s DOSem a taktéž Microsoft Windows. Původní verze tohoto jazyka byla napsána v assembleru, což samozřejmě znamenalo nutnost přepsání alespoň části interpretru při portaci na nový typ mikroprocesoru, ovšem posléze došlo k přepsání celého interpretru do programovacích jazyků C a C++, což umožnilo provádět portace na nové platformy nepoměrně snadněji než v případě přepisu zdrojových kódů v assembleru (i když tyto zdrojové kódy obsahovaly velké množství maker, takže se samotný zápis interpretru podobal spíše autokódu než assembleru).

Obrázek 6: Programovací jazyk BBC BASIC byl portován dokonce i na osobní počítače PC s nainstalovaným operačním systémem Microsoft Windows.

3. Základní vlastnosti BBC BASICu

V předchozí kapitole jsme si řekli, že BBC BASIC byl portován na více než třicet různých počítačových platforem, což svědčí jak o poměrně velké oblibě tohoto programovacího jazyka, tak i o tom, že jeho vlastnosti umožnily tvorbu takových aplikací, které se skutečně vyplatilo používat na různých platformách, tj. především aplikací udržovatelných (v opačném případě by bylo pravděpodobně efektivnější celou aplikaci přepsat). Pojďme si nyní některé vlastnosti BBC BASICu přiblížit. Na rozdíl od některých jednodušších implementací programovacího jazyka BASIC (z nichž mnohé jsme si již popsali v předchozích částech tohoto seriálu), bylo možné v BBC BASICu tvořit proměnné, jejichž identifikátory neměly (prakticky) omezenou délku, přičemž všechny znaky názvu proměnné měly význam. O této „maličkosti“ se zmiňuji proto, že existovaly dialekty BASICu, kde sice bylo možné používat relativně dlouhé názvy proměnných, ale pouze prvních n znaků (kde n bylo většinou rovno jedné, dvěma, pěti či osmi) bylo skutečně rozeznávaných, takže tyto BASICy například považovaly proměnné nazvané TOTALPROFIT a TOTALLOSS za rovnocenné (zde si můžeme pouze představovat, jakými problémy museli procházet programátoři, kteří portovali aplikace z „vyšší“ verze BASICu do nějaké verze jednodušší).

Obrázek 7: Screenshot obrazovky původního BBC BASICu spuštěného v emulátoru počítače Acorn BBC Micro.

Další vlastností BBC BASICu, která se postupem času rozšířila i na některé další dialekty tohoto programovacího jazyka, byla možnost práce s celočíselnými proměnnými, které byly na většině platforem interně ukládány jako 32bitové hodnoty ve dvojkovém doplňku. Celočíselné proměnné se od proměnných reálných (přesněji řečeno od proměnných uložených ve formátu plovoucí řádové čárky) odlišovaly tím, že se za jejich název přidával znak ‚%‘ (procento), což spolu s existencí řetězcových proměnných znamenalo, že identifikátory TEST, TEST% a TEST$ byly považovány za tři odlišné proměnné (dnes bychom pravděpodobně řekli, že celočíselné, reálné a řetězcové proměnné měly oddělené jmenné prostory). Pro práci s řetězci byly zvoleny stejně pojmenované funkce, jaké můžeme nalézt v interpretrech MS BASICu – LEFT$, RIGHT$ a MID$ (tyto funkce se však daly použít i na levé straně přiřazovacího příkazu jako omezovače podřetězce, který se měl změnit), navíc bylo možné pro nalezení podřetězce v řetězci použít příkaz INSTR.

Obrázek 8: BBC BASIC byl portován i na programovatelné kalkulačky TI-83+/TI-84+ s grafickým displejem. Zde je výsledek běhu programu pro výpočet Mandelbrotovy množiny.

Ovšem největší předností BBC BASICu byla možnost zapisovat programové smyčky pomocí strukturovaných výrazů, nikoli s použitím příkazu GOTO, i když tato možnost zůstala zachována. Spolu s odstraněním nutnosti používat GOTO byla z BBC BASICu odstraněna povinnost číslovat všechny programové řádky. Poněkud paradoxní přitom je, že poslední verze učebnice BBC BASICu (která je mj. dostupná i na Internetu), se o příkazu GOTO a o číslování řádků zmiňuje pouze okrajově, což znamená, že tento příkaz již dávno není zapotřebí ani pro psaní školních ani reálných aplikací. Následující úryvek programu napsaný v BBC BASICu ukazuje typické použití zastaralého příkazu GOTO, ovšem čísla programových řádků jsou zapisována pouze tam, kde je to skutečně zapotřebí – v ukázkovém programu se jedná pouze o jediný řádek představující cíl skoku, pomocí něhož je implementována nekonečná smyčka. Povšimněte si taktéž toho, že příkaz INPUT (čtení dat ze standardního vstupu) může obsahovat zprávu zobrazenou uživateli:

   REM Cisla radku lze pouzit pouze tam,
   REM kde je to nezbytne nutne kvuli
   REM prikazum GOTO a GOSUB.
   REM --------------------------------
   REM Vypocet obvodu kruznice:
20 INPUT "Enter the radius " Radius
   Area=PI*Radius^2
   PRINT "Area of the circle is " ;Area
   GOTO 20
   END

Následující příklad, opět určený pro programovací jazyk BBC BASIC, obsahuje pouze strukturované programové smyčky typu REPEAT-UNTIL s testem provedeným na konci těla smyčky:

REPEAT
    INPUT ' "What number should I stop at", num
    i=0
    REPEAT
        i=i+1
        PRINT i;
    UNTIL i=100 OR i=num
UNTIL num=-1

Další důležitou vlastností BBC BASICu, která umožnila tvorbu i poměrně složitých aplikací, byla možnost deklarace uživatelských procedur a funkcí: BASIC totiž, na rozdíl od céčka či Javy, poměrně striktně rozlišovat mezi procedurou (tj. příkazem spouštěným s parametry, ale nevracejícím žádnou hodnotu) a funkcí vracející vždy nějakou hodnotu, která musela být v programu zpracována (byla vždy součástí výrazu, například výrazu přiřazeného nějaké proměnné či vyčíslovaného v rámci rozhodovací konstrukce IF-THEN). Pomocí procedur a funkcí bylo možné celou aplikaci rozdělit na menší části, které mohly být zpracovány nezávisle na sobě a taktéž nezávisle na sobě testovány. Následuje příklad definice nové uživatelské funkce nazvané FN_Square a použití (zavolání) této funkce z programu. Kromě způsobu definice uživatelské funkce (zejména způsobu výpočtu její návratové hodnoty) si povšimněte, že zdrojový kód tohoto příkladu neobsahuje žádná čísla řádků, na rozdíl od „klasického“ BASICu, kde to bylo striktně vyžadováno:

REM Nova funkce nazvana FN_Square
DEF FN_Square(Num)
=Num^2
REM Pouziti funkce FN_Square pri
REM vypoctu druhe mocniny hodnoty
REM promenne A
INPUT "Enter numeric value" A
B=FN_Square(A)
PRINT A;" squared is ";B
END

4. Kombinace programů psaných v BBC BASICu a assembleru

Mezi další zajímavou (a v tomto případě i poměrně vzácnou a v jiných dialektem BASICu málo viděnou) vlastnost programovacího jazyka BBC BASIC patří možnost kombinace programu zapsaného v BASICu s částmi zapisovanými v assembleru, tj. v nízkoúrov­ňovém jazyku symbolických instrukcí odpovídajícímu (binárním) strojovým instrukcím použitého mikroprocesoru. Tato pro mnohé programátory důležitá vlastnost byla do BBC BASICu přidána ještě v dobách, kdy byl tento jazyk vyvíjen pro osmibitové mikroprocesory MOS 6502, ovšem později, spolu s poměrně rychlým rozšiřováním BBC BASICu na další platformy, byla přidána i podpora pro symbolické instrukce mikroprocesoru Intel 8080, Zilog Z80 a dalších osmibitových a o několik let později i šestnáctibitových a třicetidvoubitových mikroprocesorů, zejména úspěšných mikroprocesorových řad Intel 80×86 a Motorola M68000 používaných v mnoha osobních počítačích.

Obrázek 9: Programovatelná grafická kalkulačka TI 83+, na níž byl taktéž portován BBC BASIC.

Ve fragmentu programu, který je vypsán pod tímto odstavcem je ukázán způsob současného použití BASICu a assembleru osmibitového mikroprocesoru Zilog Z80. Povšimněte si především použití hranatých závorek pro označení části programu napsaného v assembleru i toho, že v assembleru se poznámky i odkazy pro skoky zapisují odlišným způsobem než v BASICu (v assembleru se používají textová navěští – labely, zatímco v BASICu čísla řádků):

100 DIM code 15        :REM Reserve space for 16 bytes of code
110 bdos=5
120 FOR pass=0 TO 1    :REM Implement 2-pass assembly
130 P%=code            :REM Set program counter at start of each pass
140 [OPT pass*3        ;Enter assembler and select listing on pass 2
150 LD D,95:LD E,ASC"!"
160 .loop              ;A label
170 LD C,2             ;Source statements
180 PUSH DE:CALL bdos:POP DE
190 INC E:DEC D:JR NZ,loop
200 RET:]              :REM Exit assembler
210 NEXT pass
220 CALL code          :REM Execute assembly language routine

pc106

Obrázek 10: Známý algoritmus bublinkového řazení (bubble sort) implementovaný v BASICu. Povšimněte si, jakým způsobem se používá proměnná I, která zde slouží pro úschovu příznaku, že bylo v dané iteraci provedeno prohození alespoň jedné dvojice prvků. V některých interpretrech BASICu lze řádek 210 zjednodušit tím, že se neprovede porovnání hodnoty proměnné I s jedničkou, ale přímo hodnota I se považuje za pravdivostní hodnotu.

5. Programovací jazyk BASIC na československých osmibitových počítačích

V předchozích částech tohoto seriálu jsme se mj. seznámili i s několika osmibitovými mikropočítači vyráběnými v bývalém Československu (další z těchto počítačů, především Ondra a SAPI-1, budou popsány v následujících částech). I osmibitové mikropočítače vyráběné v ČSSR byly, podobně jako většina jejich zahraničních protějšků, vybaveny interpretrem programovacího jazyka BASIC. Nejjednodušší byla situace v případě počítačů Didaktik Gama, Didaktik M a Didaktik Kompakt, protože se jedná o klony ZX Spectra, v nichž byla použita paměť ROM analogická (až na několik úprav a oprav) s původním ZX Spectrem, samozřejmě včetně interpretru a editoru Sinclair Basicu. Ovšem většina dalších československých osmibitových mikropočítačů neměla své protějšky v zahraničních strojích a proto pro ně vznikly interpretry, které se v některých ohledech odlišovaly od zahraničních BASICů; zejména se to týká repertoáru příkazů dostupných uživatelům.

pc104

Obrázek 11: Uživatelské rozhraní monitoru počítače PMD-85 (viz další text) je po všech opulentních grafických efektech, kterými se pyšní moderní GUI, příjemně strohé.

Některé původní československé osmibitové mikropočítače se od svých zahraničních protějšků odlišovaly tím, že interpret BASICu neměly umístěný přímo v ROM nainstalované na základní desce – tato ROM o kapacitě většinou 2kB až 4kB mnohdy obsahovala pouze základní rutiny operačního systému a takzvaný monitor s velmi jednoduchým uživatelským rozhraním založeným na zápisu poměrně malého množství příkazů – typicky se jednalo o příkazy umožňující načíst program ze záznamového zařízení (magnetofonu či disketové mechaniky), spustit tento program, vypsat obsah části operační paměti, změnit hodnotu v jednotlivých paměťových buňkách atd. Pro zajímavost – původní monitor použitý v počítači PMD 85.1 byl uložen ve čtyřech kilobajtech paměti EPROM a obsahoval pouze následující příkazy: SUB, JUMP, MEM, DUMP, BASIC, MGLD, MGSV, MGEND a JOB (MG je zkratka slova „magnetofon“).

pc104

Obrázek 12: Výpis obsahu části operační paměti – jedná se o jednu z užitečných vlastností monitoru.

U této skupiny počítačů se interpret programovacího jazyka BASIC buď nahrával ze záznamového zařízení (což bylo zdlouhavé a nepraktické), nebo byl BASIC uložen v zásuvných modulech, které kromě poměrně jednoduché logiky obsahovaly i paměti ROM či EPROM s interpretrem BASICu a jeho editorem. Příkladem těchto počítačů jsou PMD-85 a taktéž IQ-151 – viz též fotografie těchto počítačů a jejich zásuvných modulů (cartridgí). Některé další typy československých osmibitových mikropočítačů, například Didaktik Alfa či MAŤO měly EPROM s interpretrem BASICu nainstalovánu přímo uvnitř počítače, tj. tak, jak tomu bývalo u většiny dalších (zahraničních) osmibitových domácích počítačů. Pojďme si nyní říci, jaké vlastnosti bylo možné očekávat od interpretrů BASICů, které byly pro tyto počítače vyvinuty (na tomto místě je však vhodné upozornit, že se kromě BASICu používaly i další programovací jazyky, například FORTH, LISP či z těch méně exotických Pascal).

pc106_1

Obrázek 13: Československý osmibitový mikropočítač IQ-151, pro nějž existoval interpret programovacího jazyka BASIC umístěný v zásuvném modulu.

Původní interpretry BASICu, které byly pro československé osmibitové mikropočítače dostupné, se svými vlastnostmi příliš nelišily od „klasických“ BASICů osmibitové éry, což mj. znamená, že řízení běhu programů bylo prováděno s využitím příkazů GOTO, ON GOTO, IF-THEN a počítané smyčky FOR, podprogramy volané přes příkaz GOSUB (návrat pomocí RETURN) nemohly mít parametry ani lokální proměnné atd. Kromě skalárních numerických proměnných byla podporována práce s jednorozměrnými i dvourozměrnými poli a řetězci. Většina interpretrů rozpoznávala pouze relativně krátké identifikátory proměnných (většinou dvojznakové); uživatelé mohli používat základní operátory (aritmetické, relační, logické), matematické funkce, generátor pseudonáhodných čísel a u některých interpretrů BASICu i příkazy pro ovládání grafického subsystému (kreslení bodu, úsečky, textu, někdy byl též dostupný příkaz pro blokový přesun části obrazu), zvukového generátoru (klasický příkaz BEEP), tiskárny a datových periferních zařízení (načítání a zápis datových souborů či vlastních programů).

pc10512

Obrázek 14: Pohled na zadní část skříně počítače IQ-151 s trojicí nainstalovaných zásuvných modulů.

6. BASIC na osmibitovém mikropočítači PMD-85

Pro ilustraci vlastností dialektů programovacího jazyka BASIC dostupného na československých osmibitových mikropočítačích si stručně popíšeme programovací jazyk BASIC-G/V3.0 určený pro počítače PMD 85. Jedná se o zástupce „klasického“ BASICu, který byl dodáván na zásuvném paměťovém modulu. Podobně jako další interpretry BASICu, i BASIC-G rozeznával takzvaný „přímý režim“ a „programový režim“: v přímém režimu byly příkazy ihned vykonávány (takže se interpret choval jako poměrně inteligentní kalkulačka), v režimu programovém byly příkazy tokenizovány a ukládány do operační paměti. U názvů proměnných se rozpoznávaly pouze první dva znaky (VYSTUP a VYKON je tedy vyhodnoceno jako stejná proměnná VY), ale taktéž velká a malá písmena, což mnohé jednodušší interpretry BASICu neuměly. Práce s řetězci je podobná jako u výše popsaného BBC BASICu nebo MS BASICu, tj. používají se příkazy LEFT$, RIGHT$ a MID$. Tento interpret podporuje i práci s grafickým subsystémem počítače PMD 85, včetně blokových přesunů dat (čímž se částečně odstraňuje nevýhoda spočívající v neexistenci spritů).

pmd85

Obrázek 15: Osmibitový mikropočítač PMD 85–1.

Podobně jako téměř všechny další dialekty programovacího jazyka BASIC, obsahoval i BASIC-G/V3.0 poměrně velké množství různých operátorů použitelných při zápisu aritmetických a logických výrazů (včetně výrazů s řetězci). Operátory byly rozděleny do devíti kategorií podle své priority – pořadí vyhodnocení. Prioritu lze samozřejmě v případě potřeby měnit pomocí závorek, protože výraz v závorkách je vyhodnocen nejdříve. Povšimněte si, že priorita logického součtu a součinu je stejná, takže se některé logické výrazy, například podmínky mezi příkazy IF a THEN, neobešly bez uzávorkování:

Priorita Operátor Popis
1 () výraz v závorkách
2 sin() volání funkce
3 ^ umocnění
4 +, – unární plus a minus
5 *, / multiplikativní operace
6 +, – aditivní operace
7 =, <>… relační operátory
8 NOT negace
9 AND, OR logický součin a součet
pmd85

Obrázek 16: Pohled na zadní část počítače PMD 85–2 ve chvíli, kdy k němu není připojen žádný paměťový modul.

Při pohledu na fotografii počítače PMD 85 si zajisté povšimnete, že nad numerickými klávesami se nachází další řada barevně odlišených kláves. Tyto klávesy měly různý význam podle toho, v jaké byly použity aplikaci, podobně jako funkční klávesy F1F12 v současnosti. V případě BASICu byly těmto klávesám přiřazeny nejčastěji používané příkazy vypsané v následující tabulce, ovšem v případě potřeby si mohl programátor tyto příkazy změnit:

Klávesa Význam Význam při současném stisku ↑
K0 RUN SCALE_
K1 LIST_ PLOT_
K2 LLIST_ MOVE_
K3 INPUT_ LABEL_
K4 PRINT_ CHR$(
K5 GOTO_ MID$(
K6 GOSUB_ LEFT$(
K7 RETURN RIGHT$(
K8 FOR_ INT(
K9 NEXT_ STR$(
K10 THEN_ DISP_
K11 WINDOW _STEP_
pmd85

Obrázek 17: Dva moduly počítače PMD-85 s paměťmi EPROM, z nichž jeden obsahoval interpret jazyka Basic-G a druhý editor a překladač Pascalu.

7. Seznam všech příkazů interpretru BASIC-G/V3.0

V následující tabulce jsou pro zajímavost vypsány všechny příkazy interpretru programovacího jazyka BASIC-G/V3.0, jehož základní vlastnosti jsme si popsali v předchozí kapitole. Některé příkazy spadající do více kategorií jsou vypsány několikrát. Povšimněte si taktéž rozdílů oproti jiným dialektům BASICu. Zejména se to týká příkazu CLEAR, který zde slouží k inicializaci oblasti paměti s proměnnými (vynulování číselných proměnných a nastavení řetězců na hodnotu ""), zatímco u mnoha dalších interpretrů BASICu tento příkaz slouží k vymazání obrazovky. Na tomto příkladu je tedy vidět, že přenos programů mezi různými dialekty BASICu (a to i na stejné platformě) může být složitý a dobrodružný.

Kategorie příkazů Seznam příkazů
Editace programu NEW, AUTO, LIST, LLIST, REN
Spuštění programu RUN, GOTO, CONT
Zastavení programu STOP, PAUSE, ?, END, WAIT
Poznámka REM
Proměnné LET, CLEAR
Načítání dat uložených s programem READ, DATA, RESTORE
Práce s poli DIM, CLEAR, DSAVE, DLOAD
Větvení GOTO, ON-GOTO, ON-GOSUB, ON-ERR
Podmíněný příkaz IF, THEN
Počítaná smyčka FOR, TO, NEXT, STEP
Skok a návrat z podprogramu GOSUB, RETURN
Definice funkce DEF FNC
Matematické funkce ABS, INT, SGN, RND, SQR
Logaritmické funkce LOG, EXP
Goniometrické funkce SIN, COS, TAN, ATN
Změna jednotek goniometrických funkcí DEG, RAD
Řetězcové funkce CHR$, ASC, STR$, VAL, LEFT$, RIGHT$, MID$, LEN, HEX$
Ostatní funkce FRE, ADR, INKEY, TAB, SPC, AT, INK, INP, BIT, STATUS, POS
Práce s klávesnicí INPUT, INKEY, DISP
Grafické příkazy GCLEAR, GCLEARG, GCLEARA, WINDOWG, WINDOWA, SCALE
Kreslení AXES, MOVE, PLOT, LABEL, FILL, PEN, BMOVE, BPLOT
Ovládání reproduktoru BEEP
Práce s magnetofonem LOAD, DLOAD, CHECK, SAVE, DSAVE
Vstupní příkazy ENTER, INPUT#, INP
Výstupní příkazy PRINT, PRINT#, LIST#, LLIST#, OUTPUT
Ovládání I/O kanálu CONTROL, STATUS, BIT, INP, OUT, WAIT
Práce s pamětí PEEK, POKE, APEEK, APOKE
Volání strojového kódu USR, CODE, ROM
pc104

Obrázek 18: Programovací jazyk Basic na počítačích PMD 85 obsahoval i několik příkazů pro kresbu základních grafických tvarů.

CS24_early

8. Obsah následující části seriálu

V následující části seriálu o architekturách počítačů i o jejich programovém vybavení si řekneme, jakým směrem se programovací jazyk BASIC vyvíjel na šestnáctibitových a třiceti dvoubitových osobních mikropočítačích a pracovních stanicích. Právě v dobách největšího rozmachu osobních počítačů můžeme sledovat opadnutí zájmu o tento programovací jazyk, což je v mnoha ohledech logické a vlastně i očekávatelné, protože tyto počítače disponovaly již takovým výpočetním výkonem i kapacitou operační paměti, že na nich bylo možné používat jak překladače (kompilátory) programovacích jazyků typu C, C++, Pascal atd., tak i interpretry vyšších programovacích jazyků, například LISPu, Scheme či později Pythonu, Perlu, Ruby a dalších. Ovšem to neznamená, že by programovací jazyk BASIC upadl v zapomnění, protože existuje (samozřejmě kromě Visual Basicu a jeho varianty VBA) i několik zajímavých projektů, například Gambas či FreeBASIC.

Obrázek 19: Ve FreeBASICu šířeném pod licencí GPL vzniklo několik zajímavých programů, například tato RPG hra nazvaná The Griffon Legend. Zdrojové kódy této hry jsou dostupné, takže je možné poměrně jednoduše prozkoumat, do jaké míry se programovací jazyk BASIC po více než 45 letech vývoje přiblížil moderním programovacím jazykům. Mimochodem – celý zdrojový kód této hry je uložen v jediném zdrojovém souboru o délce 273 kilobajtů, jenž má téměř deset tisíc řádků (konkrétně 9978). Zbylá část hry je tvořena mnoha datovými soubory, především obrázky – sprity.

9. Odkazy na Internetu

  1. ZX-Spectrum Child
    http://www.dot­kam.com/2008/11­/19/zx-spectrum-child/
  2. Speccy.cz
    http://www.spec­cy.cz/
  3. Planet Sinclair
    http://www.nvg­.ntnu.no/sincla­ir/
  4. World of Spectrum
    http://www.wor­ldofspectrum.or­g/
  5. Sinclair BASIC Reference
    http://www.wor­ldofspectrum.or­g/faq/referen­ce/BASICReferen­ce.htm
  6. ZX Basic Manual
    http://www.wor­ldofspectrum.or­g/ZXBasicManu­al/
  7. ZX81 BASIC Programming
    http://www.wor­ldofspectrum.or­g/ZX81BasicPro­gramming/
  8. Sinclair BASIC History
    http://scratchpad­.wikia.com/wi­ki/Sinclair_BA­SIC_History
  9. Sinclair BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Sin­clair_BASIC
  10. Sinclair BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Sin­clair_BASIC
  11. Beta BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Be­ta_BASIC
  12. Beta BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Be­ta_BASIC
  13. BETA BASIC NEWSLETTER No 8
    http://spectrum128­.ru/help/Beta­BasicNewsletter8­.pdf
  14. R. T. RUSSELL: The home of BBC BASIC
    http://www.rtrus­sell.co.uk/
  15. R. T. RUSSELL: A History of BBC BASIC
    http://www.cix­.co.uk/~rrusse­ll/bbcbasic/his­tory.html
  16. SuperBASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Su­perBASIC
  17. SuperBASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/Su­perBASIC
  18. Laser Basic/Laser Compiler
    http://www.sin­cuser.f9.co.uk/049/la­ser.htm
  19. Laser BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/La­ser_BASIC
  20. BBC BASIC
    http://www.bbcba­sic.co.uk/bbcba­sic.html
  21. BBC BASIC
    http://mdfs.net/Sof­tware/BBCBasic/
  22. BBC BASIC (Z80) for the ZX Spectrum
    http://mdfs.net/Sof­tware/BBCBasic/Spec­trum/
  23. BBC BASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/BBC_BA­SIC
  24. BeebWiki – 8-bit Acorn Computer Wiky
    http://beebwi­ki.jonripley.com/Ma­in_Page
  25. Porovnání osmibitů
    http://porovna­ni8bitu.spaces­.live.com/
  26. Rosetta Code – Main Page
    http://rosetta­code.org/wiki/Ma­in_Page
  27. Rosetta Code – Category Basic
    http://rosetta­code.org/wiki/Ca­tegory:BASIC
  28. Dartmouth College Computation Center. 1964.-The original Dartmouth BASIC manual
    http://www.bit­savers.org/pdf/dar­tmouth/BASIC_Oc­t64.pdf
  29. The Original BASIC
    http://www.tru­ebasic.com/
  30. BASIC – Beginners All-purpose Symbolic Instruction Code
    http://hopl.mur­doch.edu.au/show­language.prx?ex­p=176
  31. FreeBASIC home page
    http://www.fre­ebasic.net/
  32. FreeBASIC Wiki
    http://www.fre­ebasic.net/wi­ki/wikka.php?wak­ka=FBWiki
  33. FreeBASIC Manual
    http://www.fre­ebasic.net/wi­ki/wikka.php?wak­ka=DocToc
  34. FreeBASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Fre­eBASIC
  35. The Griffon Legend
    http://syn9.thin­gie.net/?table=grif­fonlegend
  36. QBasicJedi
    http://www.fre­ewebs.com/qba­sicjedi/
  37. QBasic/QuickBasic Downloads
    http://www.fre­ewebs.com/qba­sicjedi/qbdow­nloads.html
  38. QuickBASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Qu­ickBASIC
  39. QBasic.com
    http://www.qba­sic.com/
  40. QBasic (Wikipedia)
    http://cs.wiki­pedia.org/wiki/QBa­sic
  41. Dialling with QBASIC
    http://www.my­sundial.ca/tsp/qba­sic.html
  42. Visual Basic .NET (česky)
    http://www.vbnet­.cz/
  43. BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/BA­SIC
  44. BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/BA­SIC
  45. Turbo BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Tur­bo_BASIC
  46. More BASIC Computer Games
    http://www.ata­riarchives.or­g/morebasicga­mes/
  47. How to build an interpreter in Java, Part 1: The BASICs
    http://www.ja­vaworld.com/jw-05–1997/jw-05-indepth.html
  48. Apple I
    http://applemu­seum.bott.org/sec­tions/computer­s/a1.html
  49. The Apple 1 history
    http://apple2his­tory.org/histo­ry/ah02.html
  50. The Apple 2 history
    http://apple2his­tory.org/histo­ry/ah03.html
  51. INTEGER BASIC Reference
    http://www.lan­dsnail.com/a2ref2­.htm
  52. APPLESOFT Reference
    http://www.lan­dsnail.com/a2ref­.htm
  53. Apple II Programming
    http://home.swbe­ll.net/rubywan­d/csa2pfaq.html
  54. Applesoft Lite: Applesoft BASIC for the Replica-1
    http://cowgod­.org/replica1/ap­plesoft/
  55. Simons' BASIC
    http://en.wiki­pedia.org/wiki/Si­mons'_BASIC
  56. Simon's Basic
    http://www.le­mon64.com/?ma­inurl=http%3Aw­ww.lemon64.com/mu­seum/list.php%3Fli­neoffset%3D54%26­genre%3Dmanual­misc
  57. BASIC
    <a href=„http:www.c64-wiki.com/index­.php/BASIC“>http://­www.c64-wiki.com/index­.php/BASIC
  58. C64 Wiki: Simons Basic
    http://www.c64-wiki.de/index­.php/Simons_Ba­sic
  59. Simons' Basic (evaluation)
    http://www.ata­rimagazines.com/cre­ative/v9n11/60_­Simons_Basic.php
  60. Bill Gates' Personal Easter Eggs in 8 Bit BASIC http://www.pa­getable.com/?p=43
  61. Kladivo na programy (je tam třeba popsán způsob nahrávání a ochran programů protí kopírování a crackování)
    http://www.gran­djihlava.cz/tmp/kla­divo.pdf
  62. Didaktik Gama návod k obsluze
    http://www.gran­djihlava.cz/tmp/na­vod.pdf
  63. Můj přítel Didaktik Gama
    http://www.gran­djihlava.cz/tmp/pri­teldidaktik.pdf
  64. Tip & trip pro Didaktik
    http://www.gran­djihlava.cz/tmp/tip­trikdidaktik.pdf
  65. Muzeum československých mikropočítačů
    http://cs-pocitace.ic.cz/
  66. Popis modulů a aplikací pro IQ-151
    http://cs.fel­k.cvut.cz/~bi­ly/iq151/
  67. IQ 151
    http://osmi.tar­bik.com/cssr/iq­151.html
  68. „Domácí počítače“ nedávné minulosti
    http://www.fi­.muni.cz/usr/jku­cera/pv109/xkr­ejcir.htm
  69. ZPA: IQ-151
    http://www.ho­mecomputer.de/pa­ges/easteurope_cz­.html#iq151
  70. Zrození IQ-151
    http://www.iq151­.net/index.htm
  71. Stručná historie počítače IQ150/IQ151
    http://www.iq151­.net/history.htm
  72. Old Computers – IQ 151
    http://www.old-computers.com/MU­SEUM/computer­.asp?st=1&c=1045
  73. Wikipedia EN: IQ 151
    http://en.wiki­pedia.org/wiki/IQ151
  74. Wikipedia CZ: IQ 151
    http://cs.wiki­pedia.org/wiki/IQ151

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.