Obsah
1. Programovací jazyky a vývojové nástroje pro mikropočítače společnosti Sinclair Research
2. První mikropočítače společnosti Sinclair Research
5. Slavné ZX Spectrum a ZX Spectrum+
6. Základní parametry ZX Spectra
9. Vliv ZX80 a jeho následovníků na další vývoj IT
10. Vývoj programovacího jazyka Sinclair BASIC
11. Specifické vlastnosti Sinclair BASICu
12. Seznam příkazů Sinclair BASICu a odlišnosti mezi jeho jednotlivými verzemi
14. Grafické příkazy, předávání parametrů grafickým příkazům
1. Programovací jazyky a vývojové nástroje pro mikropočítače společnosti Sinclair Research
V dnešním článku se postupně zaměříme na tři témata. Nejprve si alespoň ve stručnosti popíšeme hardwarové a softwarové konfigurace osmibitových domácích mikropočítačů navržených a prodávaných společností Sinclair Research (vynecháme tedy modely prodávané až firmou Amstrad, například ZX Spectrum +2 atd.). Druhým tématem bude programovací jazyk, se kterým se setkal prakticky každý uživatel ZX Spectra a který musel umět alespoň minimálně používat, například pro nahrání her příkazem LOAD (až ZX Spectrum 128 nabídlo načítání aplikací přímo z hlavního menu). Jedná se o Sinclair BASIC, který se postupně vyvíjel tak, aby jeho možnosti odpovídaly příslušnému typu mikropočítače. A konečně třetím tématem dnešního článku jsou další interpretry a překladače programovacího jazyka BASIC určené pro počítače ZX Spectrum 48k i pro jeho pokračovatele (v této části tedy již budeme ignorovat slavné, i když poněkud minimalisticky navržené mikropočítače ZX80 a ZX81).

Obrázek 1: Dobová reklama na počítač ZX80.
Zdroj: https://nosher.net/archives/computers/adve026
Po hardwarové stránce jsou osmibitové domácí mikropočítače ZX80, ZX81 i ZX Spectrum zcela odlišné od mikropočítačů Atari, s jejichž vývojářským software jsme se setkali v článcích [1] [2] a [3]. Ovšem z hlediska vývojářských nástrojů jsou si naopak tyto dvě platformy podobné, což ovšem není překvapující, protože vznikly a byly používány ve stejném časovém období, určeny byly pro podobný trh a měly podobná hardwarová omezení (kapacita RAM, kapacita ROM, dostupné externí paměti). Primárním jazykem tedy byl dialekt programovacího jazyka BASIC, a to na obou platformách v relativně primitivní podobě. K dispozici byly i monitory a více či méně sofistikované assemblery, a to jak s podporou maker, tak i bez této podpory. Kromě toho i na Spectru nalezneme větší množství překladačů vyšších programovacích jazyků, a to včetně Pascalu, céčka (nabízených například firmou HiSoft). S některými vývojovými nástroji, které spadají do této kategorie, se seznámíme v navazujícím článku.

Obrázek 2: Dobová reklama na mikropočítač ZX81, pokračovatele ZX80. Jeho cena (bez periferních zařízení) byla menší než 100 liber, takže se spolu se ZX80 jednalo o nejlevnější skutečně programovatelný počítač na trhu. I přes některé nedostatky se tento mikropočítač stal velmi oblíbený a připravil cestu pro svého slavného nástupce – ZX Spectrum.

Obrázek 3: Některé hry (především ty modernější) dokázaly i přes omezení grafického režimu ZX Spectra vykreslit vícebarevné objekty, i když při jejich překryvu docházelo k nežádoucím změnám barev.
2. První mikropočítače společnosti Sinclair Research
Společnost Sinclair Research v průběhu své existence navrhla a vyráběla různé typy mikropočítačů. Prvním zařízením, které už lze skutečně označit slovem „počítač“, resp. přesněji „mikropočítač“, byl MK14 neboli celým názvem Microcomputer Kit 14. Jednalo se o stroj postavený nad čipem National Semiconductor SC/MP, který obsahoval 256 bajtů RAM (rozšiřitelná na 640 bajtů) a 512 bajtů ROM. Tento mikropočítač bylo nutné po dodání sestavit (dodáván byl skutečně jako kit, jak již ostatně jeho název naznačuje), takže spadal do oblasti zákazníků znalých konstrukce elektronických zařízení. S dalšími mikropočítači společnosti Sinclair však nemá prakticky nic společného (snad jen snahu dodat co nejlepší výkon za co nejmenší náklady).

Obrázek 4: Úvodní obrazovka ZX Spectra 48k s názvem společnosti.

Obrázek 5: Úvodní obrazovka ZX Spectra 128 s názvem společnosti.
3. ZX80
Prvním skutečným domácím počítačem vyráběným firmou Sinclair Research byl osmibitový počítač ZX80, jenž byl na trh uveden v lednu 1980 – odtud je ostatně odvozen i jeho název. Cena počítače v základní výbavě s 1 kB RAM byla rovna 79,95 librám (jednalo se o cenu stavebnice, protože již sestavený počítač překročil svou cenou 99 liber). Po hardwarové stránce se jednalo o velmi jednoduchý systém s pouhými osmnácti čipy, včetně slavného mikroprocesoru Zilog Z80 a pamětí DRAM 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 Basic (viz další kapitoly) a již zmíněným mikroprocesorem Zilog Z80A s hodinovou frekvencí 3,25 MHz (od této frekvence je odvozeno generování video signálu). Program 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 6: Nová folie na klávesnici počítače ZX80.
Osmibitové domácí mikropočítače Sinclair ZX80 a v následující kapitole popsaný Sinclair ZX81 pracovaly pouze v textovém režimu, v němž bylo na jedné textové řádce uloženo maximálně 32 znaků a celkový počet textových řádků byl roven 24 (slovo „maximálně“ jsem použil záměrně, protože se délka jednotlivých řádků mohla lišit, jak si ostatně řekneme v navazujících odstavcích). Vzhledem k tomu, že prvních osm znaků ze speciální znakové sady tohoto počítače obsahovalo čtverce a obdélníky se stranou rovnou jedné polovině šířky znaku a k dispozici byly i inverzní varianty znaků (viz další screenshot), bylo možné z těchto šestnácti znaků poměrně jednoduše sestavit bitmapu o rozlišení 64×48 „čtverečků“ (ve skutečnosti byl každý „čtvereček“ představován maticí o velikosti 4×4 pixely). Potřebná kapacita paměti pro takto vytvořenou „bitmapu“ dosahovala až 768 bajtů, což představuje celé tři čtvrtiny kapacity operační paměti původního mikropočítače ZX80, které bylo, jak jsme si již řekli v předchozím odstavci, ve své základní verzi vybaveno pouhým jedním kilobajtem operační paměti.

Obrázek 7: Znaková sada používaná u počítače Sinclair ZX80. Z prvních osmi znaků a jejich inverzních variant lze vytvářet jednoduché černobílé obrazce s rozlišením 64×48 pixelů.
Programátoři však záhy přišli na způsob, jakým je možné programově ovládat vykreslování a teoreticky tak dosáhnout maximálního hardwarově podporovaného rozlišení na tomto počítači – plných 256×192 pixelů (ovšem zobrazovala se pouze černá a šedá barva, podpora pro barevný výstup byla až doménou slavného ZX Spectra). V následujícím textu si proto ve stručnosti popíšeme jak způsob „standardního“ vytváření obrazu na tomto počítači, tak i různé triky, které je možné se ZX80 provádět. Způsob vykreslování je u počítače ZX80 velmi poměrně nápaditý, neboť se návrhářům tohoto systému podařilo snížit počet nutných integrovaných obvodů na naprosté minimum a navíc je jak pro uložení zobrazovaných dat, tak i vlastního programu (psaného většinou v Sinclair BASICu, resp. přesněji řečeno v jeho první verzi) využito pouze nepatrné množství paměti – a to pouhý jeden kilobajt. 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ů, ve své podstatě jde o předchůdce dnešních bajtkódů).

Obrázek 8: Všechny objekty v této hře jsou vykresleny pomocí semigrafických znaků nabízených mikropočítačem ZX80. Například kola děl jsou vytvořena z inverzních nul, střely jsou představovány čtverečkem o rozměrech 4×4 pixely (viz první znaky ve znakové sadě) apod.
Kódy znaků uložených v řetězcích různé délky (každý řetězec byl od dalšího řádku oddělen znakem NEWLINE) byly ve vykreslovací rutině postupně načítány mikroprocesorem a na základě právě aktuálního vykreslovaného obrazového mikrořádku (znaky byly vysoké přesně osm mikrořádků, termínem mikrořádek je zde myšlena jedna obrazová linka na televizní obrazovce – což není přesné, neboť se vykreslují půlsnímky) byl z paměti ROM načten bajt představující osm pixelů daného znaku. Výpočet adresy s uloženým bitovým vzorkem byl jednoduchý – kód znaku se vynásobil 64 (což lze provést bitovým posunem) a k této hodnotě se přičetlo číslo vykreslovaného mikrořádku modulo 8. Samotné načtení bitů sice inicioval mikroprocesor (vystavil na adresovou sběrnici adresu vypočtenou výše uvedeným způsobem), ovšem skutečný obsah získaný z paměti ROM byl přenesen do pomocných obvodů, které tyto bity zpracovaly. Konkrétně celou osmici bitů převedly na video signál, tj. černou či bílou (šedou barvu). Tímto způsobem se načetly a vykreslily všechny osmice bitů ležících na jednom mikrořádku. Vzhledem k tomu, že na jednom textovém řádku je uloženo 32 znaků, je jeden mikrořádek tvořen 32×8=256 bity (pixely).

Obrázek 9: Další hra využívající originální znakovou sadu počítače ZX80.
Vzhledem ke konstrukci ZX80 sice nebylo možné, aby adresa, ze které se bity představující mikrořádek znaku načítají, ukazovala do paměti RAM (nelze si tedy vytvořit uživatelsky definovanou sadu znaků), ale s využitím šikovné manipulace s registrem I, který ukazoval na tabulku znaků, mohl být každý mikrořádek znaku přečten z jiné oblasti ROM, čehož některé hry využívaly pro zvýšení rozlišení při vykreslování bitmap až na teoretickou hodnotu 256×192 pixelů. Ovšem ne všechny bitové kombinace lze tímto způsobem zobrazit, protože znaková sada obsahuje pouze 64 znaků a jejich inverzních protějšků – na každém mikrořádku lze tedy zvolit pouze jednu ze 128 kombinací, i když pro osm bitů (pixelů) existuje kombinací 256.

Obrázek 10: Většina screenshotů těchto her byla získána pomocí emulátorů ZX81 – viz odkazy uvedené v poslední kapitole.
4. ZX81
Následovníkem výše popsaného domácího počítače ZX80 byl mikropočítač ZX81, který byl na trh uveden počátkem roku 1981 (jméno tedy opět „sedí“). Tento mikropočítač byl obchodně velmi úspěšný, protože jen za prvních deset měsíců se prodalo čtvrt milionu kusů; celkově bylo vyrobeno a prodáno dokonce přes jeden milion těchto systémů (a to na samotném začátku osmdesátých let minulého století, kdy větší část veřejnosti měla jen značně mlhavé představy o tom, co že počítač vlastně je a k čemu by mohl být dobrý). Ve své podstatě se jedná o vylepšení ZX80, protože základní funkcionalita zůstala zachována. Osmnáct samostatných integrovaných obvodů se sloučilo do jediného čipu ULA (Uncomitted Logic Array), kapacita paměti ROM se zdvojnásobila na 8 kB (zejména došlo k přidání rutin pro výpočty v systému pohyblivé řádové čárky – viz další kapitoly) a i kapacita operační paměti dosahovala namísto původního jednoho kilobajtu 16 kB až 64 kB (ovšem adresovatelných bylo maximálně 56 kB, neboť zbylá část adresového prostoru byla vyhrazena pro paměť ROM, která nešla „odklopit“ tak, jak je to možné například na Atari). Taktéž byla vylepšena klávesnice i samotný obal, ve kterém je mikropočítač umístěn. Princip zobrazování sice zůstal stejný, jako v případě ZX80, ale uživatelé se dočkali jednoho poměrně zásadního vylepšení.

Obrázek 11: Domácí osmibitový mikropočítač ZX81.
Tímto vylepšením bylo zavedení takzvaného režimu SLOW. Původní režim zobrazování (FAST) popsaný v předchozí kapitole měl jednu nevýhodu – vzhledem k tomu, že zobrazování řídil samotný mikroprocesor, byla v době běhu programu obrazovka černá, protože celý jeho výpočetní výkon byl spotřebován pro interpretaci a spouštění jednotlivých příkazů. Taktéž stisk klávesy znamenal přerušení vykreslovací rutiny, které se projevilo viditelným poblikáváním. Zavedením 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í).

Obrázek 12: Osazený plošný spoj mikropočítače ZX81. Počet čipů je zde skutečně minimální.
5. Slavné ZX Spectrum a ZX Spectrum+
Pravděpodobně nejslavnějším počítačem navrženým a vyráběným společností Sinclair Research je ZX Spectrum a jeho následovníci, tj. modely ZX Spectrum+ a ZX Spectrum 128 i jejich rozličné varianty. Původní ZX Spectrum („gumák“) bylo nabízeno ve dvou variantách. Levnější varianta, která byla prodávána za 125 liber, obsahovala 16 kB operační paměti, zatímco varianta dražší (nabízená za 175 liber) měla celých 48 kB RAM. Levnější model bylo možné za cca 60 liber upgradovat, tj. rozšířit paměť o 32 kB RAM. Dalším modelem bylo ZX Spectrum+, které bylo vybaveno klávesnicí s kurzorovými tlačítky i Resetem. Udává se, že po uvedení ZX Spectra na trh se každý týden prodalo až 15 tisíc kusů tohoto počítače. Velká popularita mezi uživateli se samozřejmě odrazila i v počtu aplikací – v době největší slávy ZX Spectra bylo vytvořeno více než 10000 her a dalších programů, ovšem aplikace pro něj vznikají i nyní. Především se jedná o nové hry (například existuje i Doom pro Spectrum) a dema.

Obrázek 13: Slavný „gumák“ ZX Spectrum.
6. Základní parametry ZX Spectra
Všechny typy počítačů ZX Spectrum se v několika ohledech lišily od původních ZX80 a ZX81, i když základ, tj. mikroprocesor Zilog Z80, byl použitý ve všech počítačích firmy Sinclair (zde se jeho frekvence zvýšila na 3,5 MHz). Především došlo k rozšíření paměti ROM na 16 kB, takže bylo možné použít vylepšenou verzi Sinclair Basicu, která obsahovala nové příkazy i funkce. Taktéž byl vylepšený způsob záznamu dat na magnetofon. Ale největší novinkou, která velkou měrou přispěla k popularitě ZX Spectra, byla upravená verze čipu ULA, jenž se mimo dalších operací starala i o generování obrazu, které již bylo ve větší míře nezávislé na mikroprocesoru, než tomu bylo u počítačů ZX80 a ZX81. ZX Spectra taktéž začaly používat klasický framebuffer s jeho – pro tento počítač tak typickým – rozdělením na dvě poloviny: bitmapu o rozlišení 256×192 pixelů a atributovou paměť s 32×24 bloky, v nichž bylo možné, nezávisle na ostatních blocích, měnit barvu popředí a pozadí.

Obrázek 14: Obchodní část hry Elite přepsaná do Sinclair BASICu.
Paměťový prostor ZX Spectra, tj. 64 přímo adresovatelných kilobajtů, byl rozdělen na tři části. Na začátku se nacházela oblast paměti ROM o velikosti 16 kB s interpreterem jazyka Sinclair Basic, rutinami pro výpočty s hodnotami reprezentované v pohyblivé řádové čárce apod. Za pamětí ROM bylo 16 kB RAM, do které měl přístup jak mikroprocesor, tak i čip ULA (který zde měl uložený framebuffer) a poslední oblast o kapacitě 32 kB byla dostupná pouze mikroprocesoru. V dalším textu se budeme zabývat pouze šestnáctikilobajtovou oblastí paměti RAM, do které měl přístup jak mikroprocesor, tak i čip ULA. Z hlediska programátora byla tato paměť „pomalejší“ než zbylých 32 kB, což mj. znamenalo, že se do této oblasti neumisťovaly časově náročné rutiny, například podprogramy pro přehrávání zvuků či práci s magnetofonem. Čip ULA si totiž postupně načítal hodnoty jednotlivých pixelů i příslušné barvové atributy těchto pixelů při generování video signálu.

Obrázek 15: Obchodní část hry Elite přepsaná do Sinclair BASICu.
7. ZX Spectrum 128
Následovníkem klasického ZX Spectra 48k a ZX Spectra+ byl model pojmenovaný ZX Spectrum 128. Zatímco vzhledově se tento počítač příliš nelišil od svých předchůdců, zejména ZX Spectra+, celková architektura počítače byla v několika směrech vylepšena. Především byl zvukový systém počítače (tj. jednobitový „beeper“ napojený na reproduktor) rozšířen o hudební čip AY-3–8910, přesněji řečeno o jeho variantu AY-8912, která kromě zvukového výstupu obsahovala i jeden osmibitový port použitý pro připojení MIDI zařízení a externí klávesnice. Dále byla zvýšena kapacita paměti ROM ze 16 kB na 32 kB, což například umožnilo použití vylepšeného interpretru Basicu i jeho editoru, včetně menu zobrazeného po startu počítače. Kapacita paměti RAM je zakódována v samotném názvu počítače – má tedy velikost celých 128 kB.

Obrázek 16: ZX Spectrum +128K.
Částečné vylepšení doznal také grafický subsystém. Největší změnou (spíše rozšířením) bylo to, že se framebuffer mohl nacházet na dvou místech v operační paměti. To znamenalo, že se dal velmi snadno implementovat například takzvaný double buffering, tj. technika, při které se do jednoho (neviditelného) bufferu provádělo vykreslování, zatímco obsah druhého bufferu byl zobrazován (vykreslování tedy nevedlo například k nežádoucímu „sněžení“). Po vykreslení scény se funkce obou bufferů prohodily. Dva buffery bylo možné použít i pro implementaci triku GigaScreen, při kterém se na obrazovce rychle mění dva speciálně upravené obrázky.

Obrázek 17: Další ukázka z BASICové zjednodušené hry Elite.
Dalšího vylepšení grafického subsystému se však programátoři ani uživatelé nedočkali (pravděpodobně kvůli snaze o co největší zpětnou kompatibilitu) – podpora pro skutečný textový režim, sprity či plynulý scrolling obrazovky neexistovala, tyto efekty musely být naprogramovány, na rozdíl od některých jiných osmibitových počítačů, které pro tyto činnosti obsahovaly specializované čipy.

Obrázek 18: U protihráčů ve hře Starquake se objevuje známé „překrývání“ barev u postaviček, které jsou blízko sebe. Viz dva protihráči zobrazení vpravo uprostřed.
8. Grafický režim ZX Spectra
Zobrazovaná bitmapa měla rozlišení 256×192 pixelů, tj. její velikost lze snadno vypočítat: 256×192/8=6144 bajtů. Každý pixel byl v této bitmapě reprezentován jediným bitem, kterým se volilo, zda se jedná o pixel patřící k popředí či k pozadí. Barvy popředí a pozadí nemohly být nastaveny pro každý pixel zvlášť, ale pouze pro celý blok 8×8 pixelů. Pro tento blok se v jednom bajtu zvaném atribut ukládaly jak informace o popředí a pozadí (k dispozici bylo osm základních barev, tj. jejich indexy bylo možné uložit ve třech bitech), tak i intenzita barev (vyšší/nižší) a příznak, zda má celý blok blikat, tj. měnit barvu popředí a pozadí.

Obrázek 19: Na obrázku hry Barbarian je patrné, jakým způsobem je obrazová paměť organizovaná, především omezení daná atributy o velikosti 8×8 pixelů.
Atributů bylo celkem 32×24=768, takže celková kapacita paměti pro uložení celého obrázku byla rovna 6144+768=6912 bajtům, což zhruba odpovídá typické kapacitě framebufferů u domácích osmibitových počítačů (větší framebuffery byly nepraktické, protože zabíraly velkou část drahé operační paměti a taktéž by tehdejší mikroprocesory musely provádět přesuny objemnějších bloků dat při změně obrazu). Frekvence mikroprocesoru Zilog Z80, tj. 3,5 MHz nebyla zvolena náhodně. Přesně totiž odpovídá počtu taktů nutných pro generování video signálu pro televize pracující v normě PAL.

Obrázek 20: Při pečlivé práci je možné omezení představovaná atributy do značné míry obejít, jak dokazuje tato bitmapa pro ZX Spectrum.
9. Vliv ZX80 a jeho následovníků na vývoj IT
Osmibitové domácí mikropočítače firmy Sinclair Research způsobily po svém uvedení na trh poměrně významnou revoluci v chápání výpočetní techniky. Byly to totiž – alespoň v Evropě a posléze (díky klonům) i v Jižní Americe a SSSR – počítače, které si mohl díky své nízké ceně pořídit téměř každý a právě na základě popularity těchto systémů přestali lidé vnímat počítače jako drahé, velké a nepraktické skříně umístěné ve výpočetních centrech. Navíc se po hardwarové stránce jednalo o relativně jednoduché, i když, především co se týče poskytované funkcionality, poměrně sofistikované systémy, takže je bylo velmi snadné „klonovat“ (vyrábět kopie), což sice nebylo ve všech případech legální, ale zcela jistě to zapříčinilo velkou popularitu těchto mikropočítačů i programátorskou podporu prakticky po celém vyspělém světě, a to včetně tehdejšího východního bloku.

Obrázek 21: Klávesnice počítače Didaktik M.
V bývalé ČSSR se vyráběly minimálně tři klony ZX Spectra: Didaktik Gama (s větší kapacitou paměti a originální ULA) a Didaktik M (paměť stejná jako původní Spectrum, ovšem se Sovětským ULA) a Didaktik Kompakt, které byly dokonce oproti originálu vylepšené, například vyšší kapacitou operační paměti, snáze použitelnou klávesnicí či zabudováním disketové jednotky. Dále u nás vzniklo několik dalších variant ZX Spectra, které ovšem nebyly masově vyráběny: Mistrum a Krišpín (čip ULA nahrazen diskrétními integrovanými obvody ze série MH7400).

Obrázek 22: Část plošného spoje počítače Didaktik M.
10. Vývoj programovacího jazyka Sinclair BASIC
Na začátku osmdesátých let minulého století byl v oblasti domácích osmibitových mikropočítačů prakticky vždy nabízen interpret nějakého dialektu programovacího jazyka BASIC; typicky se nacházel přímo v ROM. Počítač ZX80, s nímž jsme se již seznámili v úvodní části dnešního článku, byl i přes své velmi skrovné technologické parametry vybaven takřka plnohodnotným interpretrem BASICu (ovšem omezeným na práci s celými čísly), který byl naprogramován Johnem Grantem ze společnosti 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, 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 (a víme již, že ZX80 nakonec obsahoval pouze 4kB ROM). 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 snižovalo 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 23: Jedna z možností, jak do jisté míry obejít problém s barvovými atributy spočívá ve vytvoření velkých postaviček, takže se překryvné plochy zvětší (ideálně na velikost 8×8 pixelů).
Původní Grantův interpret BASICu, který vznikl již 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 operační 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.

Obrázek 24: Přebal jedné z mnoha knih o Sinclair BASICu.
11. Specifické vlastnosti Sinclair BASICu
Sinclair BASIC je v některých ohledech poměrně specifickým jazykem, který se odlišuje například od již popsaného Atari BASICu, Turbo BASICu XL či Microsoft 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 či symbolech. 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 – které navíc interpret nemusel kontrolovat.

Obrázek 25: Další screenshot ze hry B-ELITE naprogramované v Sinclair BASICU.
Tento způsob editace programů měl ještě jednu přednost, protože 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).
Zatímco interpret BASICu implementovaný na počítači ZX80 umožňoval práci pouze s celými čísly (více funkcionality se prostě do pouhých 4kB ROM nevešlo), 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).

Obrázek 26: Přebal další knihy o Sinclair BASICu.
Mimochodem: 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.

Obrázek 27: R-type ve verzi pro ZX Spectrum.
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 28: Klávesnice počítače ZX80 s popiskami příkazů Sinclair BASICu.
12. Seznam příkazů Sinclair BASICu a odlišnosti mezi jeho 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 | VERIFY | |
DATA | LIST | RANDOMIZE |

Obrázek 29: R-type ve verzi pro ZX Spectrum.
Nové příkazy počítače ZX81 |
---|
FAST |
SLOW |
SCROLL |
UNPLOT |
GOTO |
GOSUB |
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 |
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 |
13. Laser BASIC
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 29: Načítání 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, což jsou v tomto kontextu rastrové obrázky, které se mohou pohybovat po obrazovce a mít průhledné pixely (vše se pochopitelně vykresluje programově).

Obrázek 30: Na to, že se jednalo o vývojářský software, bylo v Laser BASICu použito mnoho multimediálních prvků (na této obrazovce například houká siréna).
Vzhledem k tomu, že nové příkazy nemohly být spouštěny přímo interpretrem původního Sinclair BASICu, 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 31: Hlavní menu Laser BASICu.
14. Grafické příkazy, předávání parametrů grafickým příkazům
Nové příkazy Laser BASICu se zapisovaly s tečkou na začátku, tedy tak, jak je to patrné na dalším screenshotu:

Obrázek 32: Jednoduchý program demonstrující schopnost několika příkazy nastavit část obrazovky na inverzní barvu.
S tímto výsledkem:

Obrázek 33: Výsledek po spuštění předchozího skriptu.
Mezi nové příkazy patří například:
Příkaz | Stručný popis příkazu |
---|---|
.SPRT | vytvoření nového spritu (těch může být teoreticky až 255) |
.ISPR | dtto, ovšem alokace se provádí odlišným způsobem |
.WSPR | vymazání spritu (wipe out?) |
.DSPR | dtto, ovšem dealokace se provádí odlišným způsobem |
.WL1V | posun/scroll obrazovky o jeden pixel doleva |
.WL4V | posun/scroll obrazovky o čtyři pixely doleva |
.SR8V | posun/scroll obrazovky o osm pixelů doprava (+ další možné kombinace) |
.WCRV | vertikální posun obrazovky, s wrappingem nahoře/dole |
.SCRV | vertikální posun obrazovky, bez wrappingu |
.WL1M | posun/scroll spritu o jeden pixel doleva, bez wrappingu |
.SR8M | posun/scroll spritu o osm pixelů doprava, bez wrappingu (+ další možné kombinace) |
.GTBL | přesun části okna do paměti spritu |
.GTOR | dtto, ovšem s operací OR |
.GTXR | dtto, ovšem s operací XOR |
.GTND | dtto, ovšem s operací AND |
.PTBL | přesun spritu na obrazovku (tj. klasická operace typu bitblt) |
.PTOR | dtto, ovšem s operací OR |
.PTXR | dtto, ovšem s operací XOR |
.PTND | dtto, ovšem s operací AND |
Grafické příkazy obecně vyžadují velké množství parametrů. Tento problém byl v Laser BASICu řešen takovým způsobem, že se namísto parametrů používalo 160 specializovaných proměnných, které byly příkazy využívány. Tyto proměnné byly rozděleny do šestnácti skupin po deseti; pro výběr skupiny se používal příkaz .SET:
Proměnná | Stručný popis proměnné |
---|---|
COL | x-ová souřadnice v rozsahu 0–31 (reprezentovaná v násobcích osmi) |
ROW | y-ová souřadnice v rozsahu 0–23 (reprezentovaná jako číslo řádku) |
LEN | šířka okna (1–32) |
HGT | výška okna (1–24) |
SCL | x-ová souřadnice měřená v rámci spritu |
SRW | y-ová souřadnice měřená v rámci spritu |
NPX | použito při vertikálním posunu (scrollingu); nabývá hodnot –128 až 127 |
SPN | číslo spritu v rozsahu 1 až 255 |
SP1 | využito pro určení spritu, který neobsahuje okno (pro některé operace) |
SP2 | využito pro určení spritu, který obsahuje okno (pro některé operace) |
15. Laser Compiler
Samotný překladač (Laser Compiler) 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 přibližně 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. Překlad mohl být proveden na Microdrive nebo na kazetu.

Obrázek 34: Logo Laser BASICu.
16. Editor spritů
Jednou z nejdůležitějších součástí Laser BASICu byl i editor spritů, přesněji řečeno softwarových spritů, protože specializovaný hardware určený pro vykreslování spritů na ZX Spectru neexistoval. Sprity se editovaly ve zvětšené mřížce, která je zobrazena na dalším screenshotu:

Obrázek 35: Důležitá součást Laser BASICu – editor spritů.
Sprite bylo možné uložit na disk (typicky do samostatného souboru) a následně ho využít ve vytvářené aplikaci a vykreslit s využitím příkazů, s nimiž jsme se (alespoň ve stručnosti) seznámili v rámci předchozí kapitoly.
17. Dema
K Laser BASICu bylo na druhé kazetě dodáváno i několik dem, které ukazovaly možnosti nabízené díky použití softwarově vykreslovaných spritů zkombinovaných s horizontálním, popř. vertikálním posunem obrazovky, popř. její části (okna):

Obrázek 36: První demo dodávané s Laser BASICem s pohybujícím se spritem.

Obrázek 37: První demo dodávané s Laser BASICem s pohybujícím se spritem.

Obrázek 38: Druhé demo dodávané s Laser BASICem..
18. Obsah navazujícího článku
Ve druhém článku o vývojových prostředích dostupných pro domácí osmibitové mikropočítače ZX Spectrum nejprve dokončíme téma, kterému jsme se věnovali dnes. Popíšeme si totiž vybrané další interpretry a překladače programovacího jazyka BASIC určené pro tento typ mikropočítačů. Jedná se v první řadě o slavný Beta BASIC. Dále si popíšeme některé známé assemblery, popř. ucelená vývojová prostředí určená pro vývoj aplikací v assembleru mikroprocesoru Zilog Z80. Ve třetím článku se pak budeme zabývat vyššími programovacími jazyky, které byly pro Speccy dostupné.

Obrázek 39: Schéma zapojení počítače ZX81. Povšimněte si, jakým způsobem je propojen mikroprocesor s čipem ULA i paměťmi RAM a ROM. Na sběrnici je napojena i osmice rezistorů, které nahrazují řadič sběrnice – ULA tak může snadno číst kódy znaků z paměti ROM, aniž by bylo zapotřebí procesor fyzicky odpojit od sběrnice.
19. Odkazy na Internetu
- ZX80 – fotka plošného spoje
http://www.nvg.ntnu.no/sinclair/computers/zx80/images/zx80_pcb_jpg.jpg - ZX80 Circuit Diagram (fotografie)
http://woodworths.com/EBay_Auctions/Auction11.htm - ZX80 Circuit Diagram (lepší kvalita než na předchozím odkazu)
http://www.nvg.ntnu.no/sinclair/computers/zx80/images/zx80_circuit.gif - ZX80 Photos
http://www.nvg.ntnu.no/sinclair/computers/zx80/zx80_photos.htm - Emulátor ZX Spectra napsaný v Javě
http://www.zzspectrum.org/ - ZX81/ZX80 Emulator napsaný v Javě
http://www.zx81stuff.org.uk/zx81/jtyone.html - Daves Old Computers – Sinclair ZX80/81 – Timex 1000
http://www.classiccmp.org/dunfield/sinclair/index.htm - New games for ZX81
http://www.armchairarcade.com/neo/taxonomy/term/233 - RetroThing – ZX81
http://www.retrothing.com/2008/04/build-your-ow-2.html - Sinclair ZX81 Chopperdrop 3000
http://www.youtube.com/watch?v=MY6TGQEvvX4 - DOOM game on ZX Spectrum
http://www.youtube.com/watch?v=3v7cFGneuaw&feature=related - Trader ZX81 part 1
http://www.youtube.com/watch?v=FhElddXeLDU&feature=fvsr - ZX81 forever
http://www.zx-team.de/andre/ - ZX81 Caverns – předělávka hry pro ZX81
http://www.martinruffe.co.uk/view.aspx?id=36 - Steven's ZX81 Computer – ukázky programů pro ZX81 a další informace
http://www.geocities.com/CapeCanaveral/Hangar/1969/zx81/ - Sinclair ZX81 FAQ
http://www.honneamise.u-net.com/zx81/zx81faq.html - The ZX BASIC Compiler
https://www.boriel.com/pages/the-zx-basic-compiler.html - boriel / zxbasic
https://github.com/boriel/zxbasic" - Z80 Assembly programming for the ZX Spectrum
https://www.chibiakumas.com/z80/ZXSpectrum.php - Elena, New programming language for the ZX Spectrum Next
https://vintageisthenewold.com/elena-new-programming-language-for-the-zx-spectrum-next/ - Sinclair BASIC
https://worldofspectrum.net/legacy-info/sinclair-basic/ - Grafika na osmibitových počítačích firmy Sinclair
https://www.root.cz/clanky/grafika-na-osmibitovych-pocitacich-firmy-sinclair/ - Grafika na osmibitových počítačích firmy Sinclair II
https://www.root.cz/clanky/grafika-na-osmibitovych-pocitacich-firmy-sinclair-ii/ - HiSoft BASIC
https://worldofspectrum.net/infoseekid.cgi?id=0008249 - YS MegaBasic
https://worldofspectrum.net/infoseekid.cgi?id=0008997 - Beta Basic
https://worldofspectrum.net/infoseekid.cgi?id=0007956 - BASIC+
https://worldofspectrum.net/infoseekid.php?id=0014277 - Spectrum ROM Memory Map
https://skoolkit.ca/disassemblies/rom/maps/all.html - Goto subroutine
https://skoolkit.ca/disassemblies/rom/asm/7783.html - Spectrum Next: The Evolution of the Speccy
https://www.specnext.com/about/ - Programovací jazyky používané na platformě osmibitových domácích mikropočítačů Atari
https://www.root.cz/clanky/programovaci-jazyky-pouzivane-na-platforme-osmibitovych-domacich-mikropocitacu-atari/ - Programovací jazyky používané na platformě osmibitových domácích mikropočítačů Atari (2)
https://www.root.cz/clanky/programovaci-jazyky-pouzivane-na-platforme-osmibitovych-domacich-mikropocitacu-atari-2/ - Sedmdesátiny assemblerů: lidsky čitelný strojový kód
https://www.root.cz/clanky/sedmdesatiny-assembleru-lidsky-citelny-strojovy-kod/ - Programovací jazyk BASIC na osmibitových mikropočítačích
https://www.root.cz/clanky/programovaci-jazyk-basic-na-osmibitovych-mikropocitacich/ - Programovací jazyk BASIC na osmibitových mikropočítačích (2)
https://www.root.cz/clanky/programovaci-jazyk-basic-na-osmibitovych-mikropocitacich-2/#k06 - Programovací jazyk BASIC na osmibitových mikropočítačích (3)
https://www.root.cz/clanky/programovaci-jazyk-basic-na-osmibitovych-mikropocitacich-3/ - Programovací jazyk BASIC na herní konzoli Atari 2600
https://www.root.cz/clanky/programovaci-jazyk-basic-na-herni-konzoli-atari-2600/ - A Tour of 6502 Cross-Assemblers
https://bumbershootsoft.wordpress.com/2016/01/31/a-tour-of-6502-cross-assemblers/ - Which cross assembler/compiler do you use?
https://atariage.com/forums/topic/195253-which-cross-assemblercompiler-do-you-use/ - Stránka magazínu (diskmagu) FLOP
http://flop.atariportal.cz/ - Madass
https://mads.atari8.info/ - MAD-ASSEMBLER 1.9.5
https://mads.atari8.info/mads_eng.html - Action (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Action - Assembler (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Assembler - Basic (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Basic - C (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=C - Forth (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Forth - Fortran (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Fortran - Lisp (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Lisp - Logo (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Logo - Pascal (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Pascal - Pilot (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Pilot - PL65 (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=PL65 - Quick (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=Quick - WSFN (AtariWiki.org)
https://atariwiki.org/wiki/Wiki.jsp?page=WSFN - MAC/65 (Wikipedia)
https://en.wikipedia.org/wiki/MAC/65 - Atari Assembler Editor
https://en.wikipedia.org/wiki/Atari_Assembler_Editor#AMAC - cc65
https://cc65.github.io/ - Grafika na osmibitových počítačích firmy Sinclair
http://www.root.cz/clanky/grafika-na-osmibitovych-pocitacich-firmy-sinclair/ - Stránky RetroFestu
http://retrofest.cz/ - RetroHerna
http://retroherna.cz/ - BASIC
http://cs.wikipedia.org/wiki/BASIC - BASIC
http://en.wikipedia.org/wiki/BASIC - Rosetta Code – Category Basic
http://rosettacode.org/wiki/Category:BASIC - Dartmouth College Computation Center: 1964 – The original Dartmouth BASIC manual
http://www.bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf - The Original BASIC
http://www.truebasic.com/ - BASIC – Beginners All-purpose Symbolic Instruction Code
http://hopl.murdoch.edu.au/showlanguage.prx?exp=176 - Turbo BASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Turbo_BASIC - Sinclair BASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Sinclair_BASIC - Action!
https://atari8bitbot.com/action/ - Atari Logo
https://atari8bitbot.com/atari-logo/ - Atari PILOT & Super PILOT
https://atari8bitbot.com/atari-pilot/ - Turbo-BASIC XL
https://atari8bitbot.com/turbo-basic-xl/ - Atari Assembler/Editor
https://atari8bitbot.com/atari-assembler-editor/ - Strings in Atari BASIC
http://www.cyberroach.com/analog/an11/strings.htm - String Arrays in Atari BASIC
http://www.atarimagazines.com/compute/issue11/52_1_STRING_ARRAYS_IN_ATARI_BASIC.php - An Atari BASIC Tutorial
http://www.cyberroach.com/analog/an25/basictutorial.htm - Atari Logo
https://en.wikipedia.org/wiki/Atari_Logo - Computer art and animation: a user's guide to Atari logo
https://archive.org/details/Computer_Art_and_Animation - Going into Action! with Atari XL/XE – Part 1 – Hello World!
https://vintageisthenewold.com/going-into-action-with-atari-xl-xe-part-1-hello-world/ - Going into Action! with Atari XL/XE – Part 2 – Graphics
https://vintageisthenewold.com/going-into-action-with-atari-xl-xe-part-2-graphics/ - Going into Action! with Atari XL/XE – Part 3 – More Variables, Memory and Pointers (ugh!)
https://vintageisthenewold.com/going-into-action-with-atari-xl-xe-part-3-more-variables-memory-and-pointers-ugh/ - Going into Action! with Atari XL/XE – Part 4 – Using VSCode and Action! with syntax highlighting
https://vintageisthenewold.com/going-into-action-with-atari-xl-xe-part-4-using-vscode-and-action-with-syntax-highlighting/ - Atari800 (emulátor)
https://github.com/atari800/atari800 - Atari MAC/65 Tutorial
https://www.youtube.com/watch?v=RyBsGDJBXD0 - MAC/65 Manual
http://www.mixinc.net/atari/mac65.htm - BASIC 10 Liner Contest 2021
https://atariage.com/forums/topic/316645-basic-10-liner-contest-2021/ - Hexadecimální prohlížeče a editory s textovým uživatelským rozhraním
https://www.root.cz/clanky/hexadecimalni-prohlizece-a-editory-s-textovym-uzivatelskym-rozhranim/ - Deep Blue C
https://en.wikipedia.org/wiki/Deep_Blue_C - Deep Blue C Compiler
https://www.atariarchives.org/APX/showinfo.php?cat=20166 - Historie vývoje počítačových her: simulace a strategické hry naprogramované Chrisem Crawfordem
https://www.root.cz/clanky/historie-vyvoje-pocitacovych-her-simulace-a-strategicke-hry-naprogramovane-chrisem-crawfordem/ - Explore BASIC Programming Languages for the Atari 8-Bit Computers (30–60 mins)
http://atariprojects.org/2020/08/29/explore-different-basic-programming-languages-for-the-atari-8-bit-computers-30–60-mins/ - Learn How to Make a Game in BASIC XE (30–60 mins)
http://atariprojects.org/2019/12/21/learn-how-to-make-a-game-in-basic-xe-30–60-mins/ - Atari BASIC XL (manuál)
http://www.atarimania.com/8bit/files/BASIC%20XL%20%C2%A4%20Second%20Edition.pdf - BASIC XE For Atari XL & XE
https://www.atarimagazines.com/compute/issue67/318_1_Reviews_BASIC_XE_For_Atari_XL_XE.php - BUG/65 (Reference manual)
https://atariwiki.org/wiki/attach/Bug65/BUG-65%20Version%202.0%20manual-final%20with%20errorpage.pdf - Cross compiler
https://en.wikipedia.org/wiki/Cross_compiler - Křížový překladač
https://cs.wikipedia.org/wiki/K%C5%99%C3%AD%C5%BEov%C3%BD_p%C5%99eklada%C4%8D - ATasm
https://atari.miribilist.com/atasm/ - ATasm v1.09 („Global Pandemic Release“)
https://atari.miribilist.com/atasm/atasm.pdf - DOS XL
https://en.wikipedia.org/wiki/DOS_XL - Aztec C online Museum
https://www.clipshop.ca/Aztec/index.htm - Aztec C Compilers
http://aztecmuseum.ca/compilers.htm - Scratchbox
http://scratchbox.org/ - History of PC based C-compilers
https://web.archive.org/web/20071215083657/http://www.itee.uq.edu.au/~csmweb/decompilation/hist-c-pc.html - PAL/NTSC Upgrade
https://www.myatari.com/nirdary.html - How can you measure time using BASIC on Atari XL computers?
https://retrocomputing.stackexchange.com/questions/269/how-can-you-measure-time-using-basic-on-atari-xl-computers - Atari Microsoft Basic manual
http://www.atarimania.com/8bit/files/Atari_Microsoft_Basic.pdf - Assembly Language: Still Relevant Today
http://wilsonminesco.com/AssyDefense/ - Programovani v assembleru na OS Linux
http://www.cs.vsb.cz/grygarek/asm/asmlinux.html - Why Assembly Language Programming? (Why Learning Assembly Language Is Still a Good Idea)
https://wdc65×x.com/markets/education/why-assembly-language-programming/ - Low Fat Computing
http://www.ultratechnology.com/lowfat.htm - Assembly Language
https://www.cleverism.com/skills-and-tools/assembly-language/ - Why do we need assembly language?
https://cs.stackexchange.com/questions/13287/why-do-we-need-assembly-language - Assembly language (Wikipedia)
https://en.wikipedia.org/wiki/Assembly_language#Historical_perspective - Assembly languages
https://curlie.org/Computers/Programming/Languages/Assembly/ - vasm
http://sun.hasenbraten.de/vasm/ - A86/A386 assembler and D86/D386 debugger
http://eji.com/a86/ - FASM
https://en.wikipedia.org/wiki/FASM - NASM
https://www.nasm.us/ - High Level Assembly (home page)
http://plantation-productions.com/Webster/ - High Level Assembly (Wikipedia)
https://en.wikipedia.org/wiki/High_Level_Assembly - A86/A386 Features
http://eji.com/a86/features.htm#FeaturesA86 - Assembly language today
http://beust.com/weblog/2004/06/23/assembly-language-today/ - B-ELITE
https://jsj.itch.io/b-elite - ZX-Spectrum Child
http://www.dotkam.com/2008/11/19/zx-spectrum-child/ - Speccy.cz
http://www.speccy.cz/ - Planet Sinclair
http://www.nvg.ntnu.no/sinclair/ - World of Spectrum
http://www.worldofspectrum.org/ - ZX81 BASIC Programming
http://www.worldofspectrum.org/ZX81BasicProgramming/ - Beta BASIC (Wikipedia EN)
http://en.wikipedia.org/wiki/Beta_BASIC - Beta BASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Beta_BASIC - BETA BASIC NEWSLETTER No 8
http://spectrum128.ru/help/BetaBasicNewsletter8.pdf