Hlavní navigace

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

22. 6. 2010
Doba čtení: 21 minut

Sdílet

Dnes dokončíme popis vývoje programovacího jazyka BASIC na zahraničních osmibitových počítačích. Budeme se zabývat především dialekty tohoto jazyka, které byly používány na ZX Spectru a jeho klonech; samozřejmě nezapomeneme ani na pravděpodobně nejlepší BASIC, který pro tyto počítače vznikl – Beta BASIC.

Obsah

1. Historie vzniku programovacího jazyka Sinclair BASIC

2. Vlastnosti Sinclair BASICu

3. Seznam příkazů Sinclair BASICu, odlišnosti mezi jednotlivými verzemi

4. Laser BASIC a Laser Compiler

5. Beta BASIC

6. Strukturované programování v jazyku Beta BASIC

7. Možnosti editoru Beta BASICu

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

9. Odkazy na Internetu

1. Historie vzniku programovacího jazyka Sinclair BASIC

V předchozí části seriálu o architekturách počítačů i o jejich základním programovém vybavení jsme se seznámili s dialekty programovacího jazyka BASIC, které byly dostupné na zahraničních osmibitových mikropočítačích založených na mikroprocesoru MOS 6502. Ovšem v mnoha zahraničních ale i domácích osmibitových mikropočítačích se používal mikroprocesor Zilog Z80, proto se v dnešním článku budeme věnovat popisu těch interpretrů programovacího jazyka BASIC, které lze najít právě na počítačích vybavených mikroprocesorem Z80. V Evropě je nejznámějším zástupcem této skupiny počítačů především slavný ZX Spectrum firmy Sinclair Research, spolu s jeho předchůdci ZX80 a ZX81 i mnoha následovníky a klony. Prvním skutečným počítačem vyráběným firmou Sinclair Research, byl domácí osmibitový počítač ZX80, jenž byl na trh uveden již v lednu roku 1980 – odtud je ostatně odvozen i jeho název.

Obrázek 1: Sinclair ZX80 – právě tento počítač má na „svědomí“ téměř revoluční rozvoj domácích a posléze i osobních počítačů v Evropě.

Cena počítače ZX80 v základní výbavě s 1 kB RAM nepřekročila magickou hranici 100 liber (jednalo se o cenu stavebnice, protože již sestavený počítač překročil svou cenou 100 liber). Po hardwarové stránce šlo o velmi jednoduchý systém s pouhými osmnácti čipy, včetně mikroprocesoru a pamětí RAM i ROM. V základní konfiguraci byl ZX80 vybaven pouhým jedním kilobajtem operační paměti, kterou bylo možné rozšířit až na 16 kB, pamětí ROM o kapacitě 4 kB, jenž obsahovala interpret poměrně jednoduchého jazyka Sinclair BASIC a mikroprocesorem Zilog Z80A s hodinovou frekvencí 3,25 MHz (od této frekvence je odvozeno generování video signálu). Programy bylo možné zaznamenat na kazetu či pásku přes externí magnetofon, podobně jako u dalších osmibitových počítačů (disketové jednotky byly na začátku osmdesátých let minulého století poměrně drahé, nepočítáme-li ovšem slavnou disketovou jednotku pro Apple-II zkonstruovanou Stevem Wozniakem).

Obrázek 2: Příručka k Sinclair BASICu vydaná k původnímu počítači Sinclair ZX80.

Počítač ZX80 byl i přes své velmi skrovné technologické parametry vybaven takřka plnohodnotným interpretrem programovacího jazyka BASIC (ovšem omezeným na práci s celými čísly), který byl naprogramován Johnem Grantem z firmy Nine Tiles. Clive Sinclair nepoužil (na rozdíl od firmy Apple) pro svůj počítač ZX80 interpret MS BASICu licencovaný firmou Microsoft (viz též předchozí část tohoto seriálu), a to hned ze dvou důvodů. Prvním důvodem bylo to, že MS BASIC vyžadoval své uložení do paměti ROM o minimální kapacitě 8 kB, což se zdálo při požadavku na co nejnižší cenu celého počítače poměrně mnoho. Druhý důvod vycházel z toho, že Clive Sinclair nechtěl platil licenční poplatky za každý prodaný počítač, protože by to zvyšovalo jeho cenu a/nebo profit firmy. Z tohoto důvodu zadal vytvoření interpretru jazyka BASIC již zmíněné firmě Nine Tiles, kde se zadaného úkolu zhostil John Grant.

Obrázek 3: Přebal známé příručky Sinclair BASICu.

Původní Grantův interpret BASICu, který vznikl v průběhu června a července roku 1979, měl sice délku okolo pěti kilobajtů, ovšem po cca jednom měsíci věnovaném optimalizacím a ladění se podařilo splnit zadání a vytvořit interpret programovacího jazyka BASIC uloženého v pouhých 4 kB ROM (spolu s editorem a dalšími strojovými rutinami), který pro svoji činnost vyžadoval jen 1 kB paměti RAM. Zajímavé bylo využití operační paměti, protože do již zmíněného jednoho kilobajtu bylo nutné ukládat jak tokenizovaný BASICový program, tak i obrazovou paměť, zásobník pro vyhodnocování výrazů, proměnné operačního systému aj. Myšlenka uložení obrazových dat je poměrně jednoduchá – vzhledem k tomu, že výpis zdrojového kódu BASICového programu většinou nezabere celý textový řádek (32 znaků), jsou jednotlivé řádky uloženy v paměti za sebou jako řetězce o různé délce (samotný BASICový program je dokonce ještě mnohem kratší, neboť v paměti jsou uloženy pouze tokeny jednotlivých příkazů). Spolu s rostoucí velikostí tokenizovaného programu se zmenšuje počet zobrazených řádků. Tento způsob práce s pamětí byl v následující řadě počítačů Sinclair (počínaje slavným ZX Spectrem) opuštěn, protože u větších kapacit operačních pamětí postrádal smysl.

pc6703

Obrázek 4: Znaková sada mikropočítače ZX80 a taktéž i mikropočítače ZX81, která byla uložena v paměti ROM, jejíž celková kapacita dosahovala 4kB resp. 8kB (nejvíce místa zabral interpret jazyka Basic). S využitím znaků z této sady bylo možné vykreslit i poměrně věrohodné obrázky a složité herní scény. Povšimněte si, že tato znaková sada neodpovídá ASCII a navíc obsahuje pouze 64 znaků; dalších 64 znaků jsou jen inverzní varianty.

2. Vlastnosti Sinclair BASICu

Již v původní verzi Sinclair BASICu naprogramované Johnem Grantem byl použit způsob zápisu programu, který byl později použit i v dalších interpretrech BASICu využívaných na počítačích firmy Sinclair Research. Jednotlivé BASICové příkazy a funkce se totiž nevypisovaly znak po znaku (jak je to běžné dnes nebo jak to bylo běžné na dalších osmibitových počítačích), ale vkládaly se do editovaného programu vždy po celých slovech. K tomuto účelu měla každá ze čtyřiceti kláves na klávesnici počítačů Sinclair vždy několik funkcí – většinou tři až pět. V závislosti na právě aktivním režimu kurzoru bylo možné do programu vložit celý vybraný příkaz nebo funkci, což bylo po relativně krátkém zaučení poměrně rychlé a navíc se tím zamezilo vzniku mnoha syntaktických chyb. Tento způsob editace programů měl ještě jednu přednost – uživatelé měli přímo na klávesnici vypsány všechny příkazy dostupné v dané verzi Sinclair BASICu, takže odpadlo zdlouhavé listování v příručkách a navíc prozatím „tajemná“ slova napsaná na klávesnici lákala uživatele, aby si příslušné příkazy vyzkoušeli a naučili se je (poznamenejme jen, že jednotlivé příkazy byly interně ukládány jako osmibitové tokeny s hodnotami ležícími mezi 165 až 255).

Obrázek 5: Klávesnice počítače ZX80 s popiskami příkazů Sinclair BASICu.

Zatímco interpret BASICu implementovaný na počítači ZX80 umožňoval práci pouze s celými čísly, bylo možné ve všech dalších verzích Sinclair BASICu používat i čísla uložená ve formátu plovoucí řádové čárky, sdružovat více hodnot do polí atd. Samozřejmě bylo možné pracovat i s řetězci, ovšem u proměnných uchovávajících řetězce se rozlišoval pouze jeden znak v jejich názvu, takže počet současně zpracovávaných řetězcových proměnných byl roven počtu znaků v abecedě (za jména těchto proměnných se přidávat znak $, ostatně jako snad ve všech dialektech „klasického“ BASICu). Při přístupu k podřetězcům se využíval zápis, který je sémanticky velmi podobný způsobu přístupu k podseznamům v jazyku Python – Sinclair BASIC umožňoval zpracovávat výrazy typu: A$(1 TO 10) (podřetězec s uvedením počátečního i koncového indexu), A$( TO 10) (počáteční index je dosazen automaticky), A$(2 TO ) (koncový index je roven délce řetězce), A$(3) (výběr jednoho znaku) atd., což je podle mého názoru lepší řešení, než použití funkcí LEFT$, RIGHT$ a MID$ využívaných (nejenom) Microsoft BASICem.

pc107

Obrázek 6: Klávesnice československého domácího osmibitového mikropočítače Didaktik M, která taktéž obsahuje jména jednotlivých příkazů Sinclair BASICu.

Další zajímavostí Sinclair BASICu bylo to, že funkce VAL (sloužící pro převod řetězce na odpovídající číselnou hodnotu), dokázala zpracovat a vyčíslit jakýkoli BASICový výraz, takže se ve skutečnosti jednalo o funkci EVAL.  Kromě funkce VAL byly programátorům k dispozici i další tři „klasické“ funkce určené pro převody mezi znaky, řetězci a číselnými hodnotami – ASC (převod znaku na jeho ASCII hodnotu), CHR$ (opak ASC) a STR$ (opak VAL, převod čísla na řetězec). Mezi unikátní příkazy, s nimiž se u jiných typů mikropočítačů nesetkáme, patřily především příkazy sloužící pro práci s obrazovkou a k ní příslušející atributovou pamětí. Jedná se například o příkazy BORDER, BRIGHT, FLASH (skutečně nejde o spuštění Flashové animace), INVERSE, PAPER atd.

Obrázek 7: Detail klávesnice počítače Timex 2068, na němž opět nemohou chybět příkazy Sinclair BASICu.

3. Seznam příkazů Sinclair BASICu, odlišnosti mezi jednotlivými verzemi

Originální Sinclair BASIC obsahoval přes osmdesát různých příkazů (včetně funkcí a logických operátorů), které byly navíc doplněny aritmetickými operátory. V následující tabulce jsou vypsány všechny příkazy společné pro interpretry dostupné na počítačích ZX80, ZX81, ZX Spectrum i na jejich klonech a následovnících. Jedinou výjimkou ve zpětné kompatibilitě jsou dvojslovní příkazy GO TO a GO SUB, které byly v některých interpretrech nahrazeny jednoslovními příkazy GOTO a GOSUB:

ABS DEF FN LLIST READ
ACS DIM LN REM
AND DRAW LOAD RESTORE
ASN ERASE LPRINT RETURN
AT EXP MERGE RND
ATN FLASH MOVE RUN
ATTR FN NEW SAVE
BEEP FOR NEXT SCREEN$
BIN FORMAT NOT SGN
BORDER GO SUB OPEN# SIN
BRIGHT GO TO OR SQR
CAT IF OUT STEP
CHR$ IN OVER STR$
CIRCLE INK PAPER TAB
CLEAR INKEY$ PAUSE TAN
CLOSE# INPUT PEEK THEN
CLS INT PI TO
CODE INVERSE PLOT USR
CONTINUE LEN POINT VAL
COPY LET POKE VAL$
COS LINE PRINT VERIFY
DATA LIST RANDOMIZE  

Obrázek 8: Detail klávesnice sovětského klonu ZX Spectra, na němž je vidět, že se počet významů každé klávesy opět zvýšil (kromě znaků latinky přibyly i znaky azbuky), ovšem příkazy Sinclair BASICu zůstaly zachovány.

Počítač ZX81 nabídl svým uživatelům i programátorům jedno poměrně důležité vylepšení oproti původnímu počítači ZX80. Tímto vylepšením bylo zavedení takzvaného režimu SLOW. Původní režim zobrazování (pro odlišení pojmenovaný FAST) měl jednu nevýhodu – vzhledem k tomu, že zobrazování (tvorbu obrazu) řídil samotný mikroprocesor, byla v době běhu programu obrazovka černá, protože celý výpočetní výkon mikroprocesoru byl spotřebován pro interpretaci a spouštění jednotlivých příkazů. Taktéž stisk libovolné klávesy znamenal přerušení vykreslovací rutiny, které se projevilo viditelným poblikáváním. Zavedením nového režimu SLOW se cca 75% strojového času spotřebovalo na vykreslování obrazu a pouze zbylých 25% bylo možné využít pro běh programu – volné strojové cykly se nacházely pouze v čase vykreslování horního a spodního černého okraje. Mezi režimy FAST a SLOW se bylo možné přepínat, mnoho uživatelů dokonce používalo téměř výhradně režim FAST, a to i v době psaní programu (právě tehdy docházelo k nepříjemnému poblikávání). V interpretru BASICu použitého v počítači ZX81 dále došlo k výše popsané změně příkazů GOTO a GOSUB a zavedení nových příkazů SCROLL a UNPLOT, takže se na tomto stroji můžeme setkat s celkem šesti odlišnostmi oproti předchozí tabulce:

Nové příkazy počítače ZX81
FAST
SLOW
SCROLL
UNPLOT
GOTO
GOSUB

Obrázek 9: Algoritmus pro výpočet největšího společného dělitele (NSD, anglicky GCD) dvou celých kladných čísel implementovaný v Sinclair BASICu.

Počítač Timex 2068, který představoval variantu ZX Spectra prodávanou především v USA, nabízel uživatelům a programátorům používajícím Sinclair BASIC další příkazy, vypsané v následující tabulce. Na tomto místě je však nutné říci, že počítače Timex nebyly vzhledem k úpravám zapojení a modifikacím obsahu paměti ROM zcela kompatibilní se ZX Spectrem, což způsobovalo poměrně velké problémy například při převodu her či komplikovanějších aplikací:

Nové příkazy počítače Timex 2068
DELETE
FREE
ON ERR
RESET
SOUND
STICK

Obrázek 10: Tvorba delšího programu v editoru jazyka Sinclair BASIC. Povšimněte si, že editace probíhá pouze ve spodní části obrazovky (na editačním řádku), zatímco skutečná pozice editovaného programového řádku je označena inverzním znakem >

Mikropočítač ZX Spectrum+ 128k, který byl mj. vybaven i známým zvukovým čipem AY-3–8912, měl Sinclair BASIC rozšířen o dva nové příkazy. První příkaz sloužil pro přehrávání zvuků na čipu AY-3–8912, druhý pro přepnutí BASICu do původního režimu ZX Spectra:

Nové příkazy počítače ZX Spectrum+ 128k
PLAY
SPECTRUM

Obrázek 11: Poněkud nešťastný způsob naprogramování melodie v Sinclair BASICu. Výhodnější by v tomto případě bylo použití příkazu DATA pro zápis parametrů příkazu BEEP.

4. Laser BASIC a Laser Compiler

Na osmibitových domácích mikropočítačích vyráběných firmou Sinclair Research se kromě originálního Sinclair BASICu (uloženého přímo v paměti ROM) samozřejmě používaly i další dialekty programovacího jazyka BASIC. V některých případech se jednalo o interpretry, které zdrojový program nejprve transformovaly do tokenizovaného tvaru (který je obdobou dnešních bajtkódů) s jeho postupnou interpretací, v případech dalších pak o skutečné překladače programů zapsaných v BASICu přímo do strojového kódu mikroprocesoru Z80. Jednou z poměrně známých alternativ k Sinclair BASICu je Laser BASIC vytvořený spolu s Laser Compilerem firmou Oasis Software.

Obrázek 12: Úvodní obrazovka Laser BASICu.

Jedná se o nadstavbu původního Sinclair BASICu, která využívá velké množství rutin obsažených v paměti ROM ZX Spectra, včetně původního textového editoru používaného Sinclair BASICem. Díky tomu Laser BASIC v operační paměti obsadil pouze 8 kB (byl umístěn na nejvyšších adresách paměti) i přesto, že programátorům nabízel 138 nových příkazů (zapisovaných ručně, tj. nikoli pomocí klávesových zkratek). Tyto nové příkazy sloužily k manipulacím s rastrovými obrázky a především pro práci se sprity. Vzhledem k tomu, že nové příkazy nemohly být spouštěny přímo interpretrem, obsahoval Laser BASIC i překladač, který celý program, tj. jak původní BASICové příkazy, tak i příkazy „grafické“ přeložil do strojového kódu a následně připojil k vygenerovanému kódu i runtime knihovnu a data s definicemi spritů.

Obrázek 13: Součást Laser BASICu – editor spritů.

Samotný překladač byl poměrně jednoduchý – prováděl překlad v jednom průchodu bez aplikace větších optimalizací – proto také urychlení běhu programů bylo pouze cca dvojnásobně rychlejší oproti jejich interpretaci (pro ZX Spectrum existovaly mnohem lepší překladače). Ovšem hlavní přednost Laser BASICu tkví především v jeho nabídce „grafických“ příkazů a editoru spritů, takže například tvorba her byla s využitím této utility mnohem snazší než při použití původního Sinclair BASICu.

Obrázek 14: Menu Laser BASICu.

5. Beta BASIC

Jedním z nejlepších a taktéž nejoblíbenějších interpretrů programovacího jazyka BASIC dostupných na osmibitových domácích počítačích ZX Spectrum byl Beta BASIC, jehož autorem je Andy Wright. Andy začal pracovat na Beta BASICu již v roce 1983, tj. cca rok po vydání samotného ZX Spectra (jedná se o Beta BASIC verze 1.0), v roce 1984 představil verzi 1.8, o rok později verzi 3.0 a v roce 1987 vznikla verze 4.0, která však již byla určena pro počítače se 128 kB operační paměti. Andy při vývoji svého Beta BASICu implementoval vlastnosti, které byly používány v interpretru dostupného na počítači TRS80, ale také poměrně pružně reagoval i na přání uživatelů, s nimiž probíhala poměrně intenzivní korespondence (někdy i 3 hodiny denně). Někteří uživatelé Beta BASICu taktéž odebírali Beta BASIC Newsletter, který Andy vydával od roku 1985 (některá vydání jsou ostatně dostupná na internetu a jedná se o velmi zajímavé počtení o historii vývoje jednoho z nejzajímavějších interpretačních jazyků pro osmibitové počítače).

Obrázek 15: Vývojové prostředí Beta BASICu. V horní části obrazovky se nachází program vypsaný menším fontem, zatímco příkaz v editačním řádku používá font standardní (velikost 8×8 pixelů).

V čem však spočívala taková obliba Beta BASICu mezi programátory? Tento interpret obsahoval některé vlastnosti, které se (až na několik výjimek) vymykaly ostatním interpretrům BASICu na domácích osmibitových počítačích. Týkalo se to především podpory pro vytváření uživatelských procedur a funkcí s lokálními proměnnými, což je velmi důležité jak kvůli vazbě proměnných pouze ke kódu, v němž jsou tyto proměnné použity (což by mělo být dobrým programátorským zvykem), tak i například pro implementaci rekurzivních algoritmů. Kromě toho byly v Beta BASICu podporovány různé typy programových smyček, především universální smyčka typu DO-LOOP s podmínkou uvedenou na začátku či konci těla smyčky (bylo možné pomocí ní implementovat jak cyklus typu while, tak i cyklus repeat-until), úplný strukturovaný příkaz IF-THEN-ELSE atd., což programátorům umožnilo psát programový kód bez použití příkazu GOTO (který mohl být využit pouze tam, kde měl skutečně smysl). Spolu s částečnou eliminací příkazu GOTO se vytratila i nutnost číslovat všechny programové řádky.

Obrázek 16: Ruská ruleta ve verzi pro počítače Sinclair Spectrum.

Vzhledem k tomu, že Beta BASIC obsahoval poměrně velké množství nových příkazů (jejich počet se samozřejmě lišil podle jeho verze), bylo nutné implementovat vhodnou metodu pro zápis těchto příkazů při editaci programového kódu, protože původní metoda založená na příkazech mapovaných přímo na jednotlivé klávesy (Sinclair BASIC) by zde již přestávala být efektivní – počet režimů kláves mezi kterými by se muselo přepínat by byl příliš velký (třebaže některé nové příkazy byly namapovány namísto semigrafických znaků) a programátoři by si taktéž museli mapování příkazů na klávesy pamatovat, protože tyto nové příkazy samozřejmě nebyly na klávesnici natištěné. Z tohoto důvodu přidal Andy Wright do Beta BASICu editační režim známý i z jiných osmibitových počítačů – po stlačení klávesy SPACE se editor přepnul do režimu zápisu běžných (velkých či malých) písmen, takže jednotlivé příkazy bylo možné zapsat znak po znaku.

Beta BASIC taktéž podporoval automatické zarovnání zdrojového kódu při jeho výpisu na obrazovku, takže případné chyby (například chybějící ukončovací příkaz smyčky) bylo možné poměrně jednoduše odhalit a opravit. Určitou nevýhodou Beta BASICu byla (na svou) dobu poměrně velká náročnost na operační paměť, protože jeho interpret zabral (opět v závislosti na verzi) cca 10 až 18 kB RAM. Druhou nevýhodou bylo to, že veškeré výpočty byly prováděny s reálnými čísly, nebylo tedy možné používat celočíselný datový typ, takže některé algoritmy byly zbytečně zpomaleny a navíc proměnné (a především pole) mnohdy zabíraly zbytečně velkou kapacitu RAM. Určitou nevýhodou (i když v tomto případě pochopitelnou) byla neexistence překladače Beta BASICu.

6. Strukturované programování v jazyku Beta BASIC

Pravděpodobně největším přínosem Beta BASICu byla v předchozí kapitole zmiňovaná jeho podpora pro vytváření programů odpovídajících idejím strukturovaného programování. Beta BASIC totiž obsahoval jak nové příkazy pro tvorbu „strukturovaných“ programových smyček typu DO-LOOP s podmínkou uvedenou na začátku nebo na konci smyčky, tak i možnost tvorby uživatelských procedur a funkcí s lokálními proměnnými (právě absence možnosti definice a následného použití lokálních proměnných je jedním z největších záporů „klasických“ BASICů). V následujícím příkladu je ukázána jak definice uživatelské procedury s parametry nazvané FD, tak i použití počítané programové smyčky typu FOR-NEXT a smyčky typu DO-LOOP s podmínkou zapsanou za koncem těla smyčky:

10  FOR A=0 TO 359 STEP 6
       PLOT 62,88
       FD 60,A
    NEXT A
20  LET D=16,A=0
    PLOT 135,75
    DO
       FD D,A
       LET A=A+15,D=D-.1
    LOOP UNTIL D<=0
200 DEF PROC FD DIS,ANG
       LET ANG=ANG/180*PI
       DRAW DIS*SINE(ANG),DIS*COSE(ANG)
    END PROC

Obrázek 17: V těchto dvou jednoduchých programech se poměrně intenzivně používá příkaz DATA spolu s příkazy READ a RESTORE.

Další příklad ukazuje použití numerických i řetězcových lokálních proměnných v proceduře nazvané test:

1000 DEF PROC test
        LOCAL x$,a,b,c,e,n,s,t
        LET a=1,b=PEEK 5739l,n=a,s=0,t=b+1
        DO
           LET x$=q$(n TO t)
           DO UNTIL q$(t)=" "
              LET t=t-1
           LOOP
           LET x$=q$(n TO t-1)
           DO
           EXIT IF LEN x$=b
              DO
                 LET a=INSTRING(a,x$," ")
              EXIT IF a
                 LET a=1
              LOOP
              LET x$=x$( TO a)+" "+x$(a+1 TO),a=a+s+2,c=a>b,e=a
              <=b,a=(1 AND c)+(a AND e),s=(s+1 AND c)+(s AND e)
           LOOP UNTIL LEN x$=b
           PRINT x$
           LET a=1,n=t+1,t=t+b+1
        LOOP UNTIL t-1>=LEN q$
        PRINT q$(n TO )
     END PROC

7. Možnosti editoru Beta BASICu

Další se zajímavých a současně také užitečných vlastností Beta BASICu je způsob editace a zobrazení zdrojového kódu, který je v několika ohledech odlišný od Sinclair BASICu. Původní Sinclair BASIC i mnohé další aplikace využívaly pro zobrazení textů znaky, jejichž maska měla rozměry 8×8 pixelů, což v grafickém režimu ZX Spectra s rozlišením 256×192 pixelů znamenalo, že bylo možné zobrazit 24 textových řádků s 32 znaky na každém textovém řádku. Tento způsob „emulace“ textového režimu (plnohodnotný textový režim totiž nebyl na ZX Spectru podporován se všemi přednostmi a zápory používání grafického režimu pro práci s texty) měl jednu nespornou výhodu – rozměry znaků přesně odpovídaly velikostem barvových atributů ZX Spectra (bloky 8×8 pixelů), takže pro každý znak bylo možné, nezávisle na znacích okolních, nastavit barvu popředí a barvu pozadí plus případné blikání znaku (periodické prohazování barvy popředí a barvy pozadí).

Další předností zobrazení textů pomocí znaků o šířce osmi pixelů bylo to, že vykreslení jednoho znaku byla velmi rychlá operace – pro každý mikrořádek se do obrazové paměti zapsal jediný bajt (8 bitů = 8 sousedních pixelů) bez nutnosti provádění bitových posunů, maskování jednotlivých bitů v bajtu atd. Beta BASIC taktéž dokázal zobrazovat zdrojové kódy s využitím znaků velikosti 8×8 pixelů, ovšem kromě toho podporoval i další velikosti znaků (tj. různé fonty). Pro výpisy programů s delšími řádky bylo například možné používat font, jehož znaky měly šířku pouze 4 pixely, takže na jednom řádku mohlo být zobrazeno až 64 znaků.

V případě, že bylo zapotřebí zobrazit ještě delší textové řádky, bylo možné použít font, mezi jehož znaky nebyly jednopixelové mezery, takže při šířce pouhých tří pixelů na znak se dosahovalo zobrazení 85 znaků na jednom textovém řádku (256/3=85, zbytek 1 pixel :-). Právě tento režim bylo možné použít pro portaci aplikací napsaných v BASICu, které původně byly určeny pro systémy s 80 znaky na textovém řádku (což je hodnota, kterou zavedla firma IBM již v dobách děrných štítků a používá se, popř. její násobky, dodnes). Použitý font bylo možné měnit programově, takže se například na první části obrazovky mohly vypisovat čitelné znaky o šířce 8 pixelů, další část mohla obsahovat poněkud méně čitelných 64 znaků na řádek a různé tabelární výpisy mohly být provedeny fontem umožňujícím zobrazení 85 znaků na řádek.

Obrázek 18: Úvodní obrazovka BBC BASICu ve verzi pro ZX Spectrum. Tento programovací jazyk si popíšeme v následující části seriálu.

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í dokončíme popis vývoje programovacího jazyka BASIC na domácích osmibitových mikropočítačích. Budeme se zabývat především dialektem BBC BASIC, který byl implementován na velkém množství osmibitových a později i šestnáctibitových mikropočítačů. Jedním z důvodů poměrně velké oblíbenosti tohoto jazyka mezi programátory byla především podpora pro strukturované programování (různé typy smyček, plný příkaz IF-THEN-ELSE, podprogramy s parametry) a taktéž možnost velmi snadné kooperace mezi BASICovými programy a částmi kódu psaných v assembleru. 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 Zilog Z80 a dalších osmibitových a o několik let později i šestnáctibitových mikroprocesorů.

root_podpora

pc106

Obrázek 19: 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.

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 Wik
    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

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