Vývojové nástroje používané v dobách osmibitových mikropočítačů

Pavel Tišnovský 19. 6. 2015

Jedna z přednášek na RetroFestu 2015 byla věnována popisu vývojových nástrojů používaných v dobách kralování osmibitových domácích mikropočítačů. V dnešním článku je tato přednáška stručně převyprávěna s použitím původních slajdů. Vítejte do světa opravdových programátorů…

Obsah

1. Vývojové nástroje používané v dobách osmibitových mikropočítačů

2. Monitory

3. Programování na úrovni strojového kódu

4. Assemblery

5. Interpretry BASICu

6. Překladače vyšších programovacích jazyků

7. Pascal

8. Action!

9. Odkazy na Internetu

1. Vývojové nástroje používané v dobách osmibitových mikropočítačů

Vznik osmibitových domácích mikropočítačů znamenal poměrně významný přelom v používání výpočetní techniky, protože se ukázalo, že výpočetní technika nemusí být provozována pouze ve výpočetních centrech a současně byly tyto mikropočítače dostatečně výkonné na to, aby na nich bylo možné používat i vyšší programovací jazyky. To ovšem neznamená, že by se – zejména na začátku osmdesátých let minulého století – jednalo o počítače široce dostupné jak ve školách, tak i v domácnostech (prvním skutečně lidovým počítačem se stalo legendární ZX80 následované modelem ZX81). Z tohoto důvodu se začaly vyrábět i neelektronické pomůcky, jejichž úkolem bylo seznámit uživatele s výpočetní technikou, aniž by bylo nutné investovat peníze do tehdy ještě dosti drahé „hračky“.

Obrázek 1: Papírový počítač CARDIAC neboli CARDboard Illustrative Aid to Computation.

Někteří čtenáři Roota si určitě pamatují na papírový počítač nazvaný poněkud honosně Computer Game System, který byl vydaný Mladou frontou (VTM) v roce 1982 v magazínu „Logika v kostce“, nebo na podobnou pomůcku vydanou v roce 1986 časopisem ABC. Ovšem papírové počítače jsou ve skutečnosti mnohem starší. Mezi nejznámější pomůcku tohoto typu patří CARDIAC, neboli plným názvem CARDboard Illustrative Aid to Computation. Jedná se o papírovou obdobu procesorové jednotky s jedním akumulátorem a připojenou pamětí navrženou již v letech 1966 až 1968 Davidem Hagelbargerem a Saulem Fingermanem pro společnost Bell Telephone Laboratories. Účelem této pomůcky byla především výuka algoritmizace s využitím jazyka symbolických instrukcí (assembleru), popř. též přímo strojového jazyka. Překlad z assembleru do strojového jazyka byl v tomto případě prováděn ručně, jednalo se však o jednoduchou mechanickou činnost.

Obrázek 2: Slavný Computer Game System.

2. Monitory

Na skutečných osmibitových mikropočítačích měli ti uživatelé, kteří se chtěli zabývat programováním, na výběr z relativně velkého množství různých vývojových nástrojů a pomůcek. Některé mikropočítače byly vybaveny pouze velmi jednoduchým operačním systémem zajišťujícím základní vstupně/výstupní operace (čtení klávesnice, zápis znaku na obrazovku, rutiny pro čtení a zápis dat na magnetofon). Poměrně často byl operační systém doplněn o takzvaný monitor, což byl (a někde doposud je) program umožňující manipulaci s daty v operační paměti, tj. zápis dat do paměti, čtení (zobrazení) vybraného bloku, přesun bloku, vyplnění určité oblasti konstantou, čtení a zápis dat na externí paměťové médium (typicky magnetofon) a některé pokročilejší monitory byly vybaveny i disassemblerem umožňujícím transformaci sekvence bajtů na symbolické instrukce. Mimochodem – při výpisu obsahu operační paměti se v monitorech většinou používal stejný formát, jaký najdeme u mnoha moderních programátorských hexa editorů.

Obrázek 3: Celoobrazovkové uživatelské rozhraní monitoru pro mikropočítače Apple II.

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 následující příkazy: SUB, JUMP, MEM, DUMP, BASIC, MGLD, MGSV, MGEND a JOB.

Obrázek 4: Monitor pro slavné osmibitové počítače Commodore C64.

Obrázek 5: Strohé uživatelské rozhraní monitoru pro československé mikropočítače PMD-85. Kdo říká, že minimalismus je „in“ až v současnosti?

3. Programování na úrovni strojového kódu

Některé typy osmibitových mikropočítačů byly vybaveny tak spartánsky, že se musely programovat přímo ve strojovém kódu (vlastně se nejedná o skutečné domácí mikropočítače, ovšem i tak byla jejich uživatelská základna poměrně velká). Způsobem programování těchto strojů, jejichž zástupcem je například československý mikropočítač PMI-80, vlastně došlo k návratu ke způsobu programování prvních mainframů vybavených řídicími panely. PMI-80 se používal mj. i na školách. Při praktických cvičeních programování se tedy postupovalo tím způsobem, že se požadovaný algoritmus nejprve napsal na papír v assembleru mikroprocesoru 8080 a posléze se tento program ručně přeložil do strojového kódu, tj. do posloupnosti hexadecimálních čísel představujících osmibitové kódy instrukcí i hodnoty jejich operandů (studenti tedy prováděli stejnou činnost jako assembler, včetně výpočtů adres relativních skoků atd.).

Obrázek 6: Školní mikropočítač PMI-80 sice nebyl vybaven plnohodnotnou klávesnicí ani výstupem na televizi, ovšem způsob jeho ovládání připomínal klasické monitory. Vlevo nahoře (zelený soket) můžeme vidět mikroprocesor MHB 8080A i další podpůrné obvody (včetně pamětí), vpravo je klávesnice a nad ní (červený pruh) devítimístný sedmisegmentový displej. Počítač zobrazený na tomto snímku byl upravený – LED na spodní části plošného spoje ani dvojice tlačítek „0“ a „D“ nejsou v originálním PMI-80 použity.

Následně bylo nutné sled hexadecimálních čísel přes klávesnici zapsat do vhodného místa operační paměti PMI-80, poté program spustit a při jeho pádu (pokud program neskončil v nekonečné smyčce ukončené přerušením vyvolaným přes klávesnici) doufat, že se nepřepsala operační paměť a nebude nutné celý program zapisovat znovu (ovšem pokud bylo zapotřebí nějakou instrukci přidat doprostřed programu, přepisům alespoň jeho části se student stejně nevyhnul).

Obrázek 7: Někteří programátoři dokázali i v primitivním monitoru naprogramovat rozsáhlé aplikace, a to včetně her. V takovém případě se pro ruční převod assembleru do strojového kódu používaly takovéto tabulky (i když osobně znám člověka, který si dokázal zapamatovat kódy všech strojových instrukcí i jejich variant).

V některých případech se ruční překlad programu napsaného (na papíře) v assembleru do strojového kódu prováděl i na výkonnějších mikropočítačích. Strojové podprogramy (subrutiny) totiž bylo možné volat i z vyšších programovacích jazyků, typicky z BASICu. V tomto případě ovšem bylo nutné strojový program reprezentovat daty (hodnotami jednotlivých bajtů) a právě zde se mnohdy programátoři nevyhnuli ručnímu překladu, což je ukázáno na následujícím obrázku.

Obrázek 8: Ruční překlad programu napsaného v assembleru (levá horní část tohoto skenu) na jednotlivé bajty, které jsou zapsány ve formě dat v BASICovém programu (pravá dolní část skenu).

4. Assemblery

Programování na úrovni strojového kódu je samozřejmě velmi pracné, zejména ve chvíli, kdy je nutné existující program modifikovat a tím pádem měnit cílové adresy skoků, adresy globálních proměnných atd. Mnohem civilizovanější způsob představovalo použití takzvaných assemblerů, což byly nástroje schopné překládat programy zapsané v jazyku symbolických adres/instrukcí do strojového kódu. Na osmibitových domácích mikropočítačích se používaly dva typy assemblerů.

Obrázek 9: Takto vypadá úryvek programu napsaný v assembleru mikroprocesoru MOS 6502.

Prvním typem byly assemblery interaktivní, které uživateli nabízely poměrně komfortní vývojové prostředí, v němž bylo možné zapisovat jednotlivé instrukce, spouštět programy, krokovat je, vypisovat obsahy registrů atd. Výhodou byla nezávislost těchto assemblerů na rychlém externím paměťovém médiu. Druhý typ assemblerů je používán dodnes – jedná se vlastně o běžné překladače, kterým se na vstupu předloží zdrojový kód (uložený na kazetě či disketě) a po překladu se výsledný nativní kód taktéž uloží na paměťové médium (odkud ho lze spustit). Tyto assemblery byly mnohdy vybaveny více či méně dokonalým systémem maker (odtud název macroassembler).

Obrázek 10: Assembler na mikropočítači Commodore C64.

Obrázek 11: Obal na kazetu se Zeus Assemblerem pro ZX Spectrum.

Obrázek 12: Vývojové prostředí Zeus Assembleru.

Obrázek 13: Jak se programovalo v assembleru si můžete vyzkoušet na stránce http://6502asm.com. Zde je implementován assembler i emulátor počítače založeného na osmibitovém mikroprocesoru MOS 6502.

Obrázek 14: Úvodní obrazovka Atari Macro Assembleru.

Obrázek 15: Vývojové prostředí Atari Macro Assembleru.

Obrázek 16: Vývojové prostředí Atari Macro Assembleru (výpis obsahu pracovních registrů mikroprocesoru).

5. Interpretry BASICu

Popis vývojových nástrojů a programovacích jazyků pro osmibitové mikropočítače by samozřejmě nebyl úplný, pokud by nebyl zmíněn BASIC, jehož více či méně kvalitní dialekty existovaly prakticky pro všechny typy domácích (ale i profesionálních) osmibitových počítačů. Jedná se samozřejmě o jazyk BASIC (Beginner's All-purpose Symbolic Instruction Code), jehož syntaxe a především sémantika pozitivně, ale i negativně ovlivnily celou jednu generaci programátorů (včetně autora tohoto článku :-). Ovšem tento programovací jazyk je z historického hlediska zajímavý i proto, že se v souvislosti s jeho vývojem poprvé objevují jména Bill Gates a Paul Allen spolu s jejich společností původně nazývanou Micro-Soft.

Obrázek 17: Manuál k původnímu BASICu.

Programovací jazyk BASIC byl vyvinut v roce 1964 J. G. Kemenym a T. E. Kurtzem na universitě v Dartmouthu. Kemeny a Kurtz tento jazyk navrhli s ohledem na to, aby umožnili rychlé osvojení ovládání počítačů i jejich programování pracovníkům a studentům, kteří nejsou (a ani nechtějí být) specialisty na programování, ale potřebují problémy řešené v jejich praxi vhodným způsobem algoritmizovat a následně vhodným způsobem zapsat tak, aby počítač mohl zapsané algoritmy skutečně provést. Důraz na co největší jednoduchost jazyka se projevil například omezením počtu proměnných na 26, automatickou deklarací a inicializací proměnných (což je u větších programů velmi záludná vlastnost), existencí (původně) pouze jednoho datového typu atd.

Obrázek 18: Modul s BASICem pro IQ-151.

Syntaxe původního programovacího jazyka BASIC byla částečně založena na FORTRANU II a ALGOLU 60. Není se ostatně čemu divit – oba autoři jazyka BASIC totiž předpokládali, že někteří studenti po zvládnutí BASICu postupně přejdou na FORTRAN, který byl ve druhé polovině šedesátých let minulého století stále považován za lingua francu programátorů. Původní BASIC byl orientován především na programování matematicky zaměřených úloh – podporoval „přirozený“ zápis aritmetických výrazů včetně korektního vyhodnocování priorit operátorů a dokonce i práci s maticemi (některé pozdější interprety tohoto jazyka práci s maticemi nepodporovaly).

Obrázek 19: BASIC pro mikropočítače Apple-II.

Vzhledem k tomu, že délka jmen proměnných byla omezena na jeden znak anglické abecedy (tj. na 26 písmen) a jazyk nepodporoval tvorbu uživatelských funkcí ani procedur, byl zápis složitějších programů poměrně problematický. Navíc jazyk zpočátku nepodporoval ani práci s řetězci; tato velmi důležitá funkcionalita byla přidána až o rok později, tj. v roce 1965. Zajímavé bylo, že první dvě verze BASICu byly implementovány jako překladač, nikoli interpret a navíc byl překlad BASICových programů rychlejší, než překlad obdobných programů napsaných ve FORTRANu a ALGOLu.

Obrázek 20: Nechvalně známý Microsoft BASIC pro počítače Commodore C64.

Zatímco na mainframech a minipočítačích byl BASIC pouze jedním z mnoha dostupných programovacích jazyků, byla situace v oblasti osmibitových mikropočítačů v mnoha ohledech odlišná – zde se totiž jazyk BASIC stal všeobecně uznávaným a hojně používaným vyšším programovacím jazykem, který byl u mnoha osmibitových mikropočítačů přítomen přímo v paměti ROM, takže ho nebylo nutné zdlouhavě nahrávat z kazety či diskety. Toto téměř výsadní postavení BASICu má několik důvodů. Jedním z těchto důvodů byla omezená velikost pamětí ROM i RAM u prvních typů mikropočítačů, takže snahou výrobců bylo používat takový programovací jazyk, který by paměť využíval co nejefektivnějším způsobem. Pro tuto oblast se nabízel právě BASIC, přesněji řečeno jeho interpret (překladače BASICu většinou vyžadují větší množství paměti), který byl doplněn interaktivním textovým editorem, v němž se program současně zapisoval, spouštěl i ladil. Tento editor byl buď řádkový nebo celoobrazovkový.

Obrázek 21: Konkurenční Atari BASIC.

Jednodušší verze BASICu si vystačily již se čtyřmi kilobajty paměti ROM, v níž byl uložen jak interpret, tak i poměrně jednoduchý textový editor umožňující interaktivní práci s interpretrem, a s pouhým jedním kilobajtem operační paměti, jejíž část byla navíc použita jako obrazová paměť. Mezi osmibitovými domácími počítači byly nejrozšířenější verze jazyka BASIC uložené v paměti ROM o kapacitě 8 až 16 kB. Díky použití takto velké kapacity ROM mohly tyto interpretry obsahovat větší množství příkazů (například pro práci s grafikou či zvuky), podporovaly výpočty s čísly uloženými ve formátu plovoucí řádové čárky atd. Jedním z důvodů poměrně malých nároků na kapacitu operační paměti bylo to, že interpretry BASICu každý programový řádek zadaný uživatelem ihned zpracovaly – klíčová slova se převedla na takzvané tokeny (většinou jednobajtové), jména proměnných na jednobajtové indexy do tabulky proměnných atd.

Obrázek 22: Toto je zajímavé: kdysi byl (na některých počítačích) význam znaků 0 a O prohozen.

Zdrojový kód programu zadaný uživatelem se tak ve skutečnosti ihned po jeho převodu na tokeny (tj. po provedení takzvané „tokenizace“) vymazal, protože ho interpret mohl kdykoli později, například při požadavku na jeho výpis či tisk, zrekonstruovat, a to dokonce v upravené podobě – zkratky příkazů se nahradily jejich plným zněním, odstranily se přebytečné mezery, program se seřadil podle čísel řádků atd. V pozdější době začaly být pro osmibitové mikropočítače nabízeny takzvané „diskové BASICy“, což byly interpretry či překladače jazyka BASIC uložené většinou na disketách nebo zásuvných modulech (na rozdíl od původních interpretrů uložených v ROM). Součástí těchto jazyků byly mnohdy i poměrně rozsáhlé knihovny, které mohli programátoři při vývoji využít. „Diskové BASICy“ navíc mnohdy obsahovaly takové programové konstrukce, které umožňovaly plnohodnotné strukturované programování; jednalo se například o plný (víceřádkový) příkaz typu IF-THEN-ELSE, různé typy programových smyček, možnost definice vlastních funkcí atd.

Obrázek 23: BASIC na slavném mikropočítači ZX Spectrum.

Obrázek 24: Interpretrem BASICu bylo vybaveno i mnoho československých osmibitových mikropočítačů.

Obrázek 25: Další BASIC pro Apple-II.

Obrázek 26: Výpočet Mandelbrotovy množiny v Atari BASICu, doba trvání výpočtu tohoto obrázku přesáhla osm hodin.

Obrázek 27: Manuál ke známému Simon's BASICu.

Obrázek 28: Poměrně oblíbený byl zápis příkazů pomocí klávesových zkratek (a nejedná se jen o ZX Spectrum).

Obrázek 29: Editace programu na ZX Spectru v řádkovém editoru.

Obrázek 30: Laser BASIC nabízí dosti neobvyklé uživatelské prostředí.

Obrázek 31: Laser BASIC nabízí dosti neobvyklé uživatelské prostředí.

Obrázek 32: Speciálně upravená znaková sada (horní okraj obrazovky).

Obrázek 33: BBC BASIC je pravděpodobně nejrozšířenějším BASICem vůbec.

Obrázek 34: Rarita: vstupní ovladač pro BASIC pro herní konzoli Atari 2600.

Obrázek 35: Prostředí BASICu pro herní konzoli Atari 2600 (už samotný výpis znaků je zde problematický).

Obrázek 36: Prostředí BASICu pro herní konzoli Atari 2600.

Obrázek 37: Prostředí BASICu pro herní konzoli Atari 2600.

Obrázek 38: Prostředí BASICu pro herní konzoli Atari 2600: grafický výstup (canvas).

Obrázek 39: Paměťový modul s BASICem pro Atari 2600.

6. Překladače vyšších programovacích jazyků

Mezi nejpoužívanější jazyky populární v dobách osmibitových domácích mikropočítačů skutečně patřily zejména assemblery a interpretry BASICu, tj. jazyky zmíněné v předchozích kapitolách. To ovšem neznamená, že by nabídka programovacích jazyků byla takto omezená. Ve skutečnosti bylo na osmibitové mikropočítače portováno velké množství překladačů vyšších programovacích jazyků, zejména jazyků podporujících procedurální paradigma, tj. skládání programů z procedur (subrutin), v nichž se používají strukturované konstrukce pro tvorbu rozeskoků a programových smyček.

Obrázek 40: Logo překladačů Aztec C.

Z těchto jazyků byl populární především Pascal, a to díky tomu, že tento jazyk byl navržen takovým způsobem, aby byl překlad programů proveden jednoprůchodově a tudíž velmi rychle v porovnání s víceprůchodovými překladači. Ovšem existovaly i další jazyky, například i populární céčko. Zde je nutné zmínit především známý překladač Aztec C portovaný na velké množství různých typů mikropočítačů, zapomenout nesmíme ani na Deep Blue C pro počítače Atari (zde se autoři museli vyrovnat s faktem, že znaková sada neobsahovala složené závorky).

Obrázek 41: Jeden z konkurenčních překladačů k Aztec C byl Lattice C (ovšem až v pozdější době).

7. Pascal

O programovacím jazyku Pascal jsme se již zmínili v předchozí kapitole, takže se zde seznámíme s některými technickými zajímavostmi. Překladače Pascalu se typicky používaly na počítačích vybavených buď disketovou jednotkou nebo alespoň paměťovým modulem (s Pascalem) a kazetovým magnetofonem. Disketová jednotka umožňovala relativně rychlé přepínání mezi editorem, překladačem (a linkerem) a spuštěním vytvářené aplikace, tj. vlastně ten styl práce, který se v mnoha případech používá dodnes. Alternativní způsob založený na použití paměťového modulu s ROM či EPROM obsahující editor, překladač i linker, kladlo větší omezení na velikost vytvářené aplikace, protože v jedné chvíli byl (alespoň většinou) v operační paměti uložen jak zdrojový text, tak i přeložená binární aplikace.

Obrázek 42: Manuál k Pascalu pro mikropočítače Commodore C64.

Zajímavá je jedna z verzí Pascalu pro československé mikropočítače PMD-85, která se vyznačovala tím, že prakticky všechny texty, kromě samotných klíčových slov jazyka, byly vypisovány česky či slovensky (autor článku se setkal jen s SK verzí). To samozřejmě usnadňovalo použití tohoto jazyka například na školách, protože znalosti a výuka angličtiny nebyla před rokem 1989 z pochopitelných důvodů tou oblastí, na něž by se tehdejší školství zaměřovalo (dokonce existovaly varianty Pascalu s přeloženými klíčovými slovy, screenshot však nemám k dispozici).

Obrázek 43: Paměťový modul s Pascalem pro PMD-85.

Pravděpodobně nejlepší implementací programovacího jazyka Pascal pro PMD byl TOM Pascal Patera Tomcsányiho dodávaný na modulu obsahujícím 32 kB paměti EPROM. Vzhledem k tomu, že standardní paměťové moduly mohly mít pouze 16 kB ROM/EPROM (což souvisí s mapou paměti počítače PMD 85), musel se adresový rozsah modulů s větší kapacitou paměti rozdělit do menších částí (paměťových banků), z nichž pouze jeden byl v danou chvíli vybraný. V případě programovacího jazyka Pascal bylo rozdělení na paměťové banky poměrně přímočaré, protože se program nejprve editoval a teprve poté (v samostatně vyvolaném kroku) překládal.

Obrázek 44: Poměrně komfortní uživatelské rozhraní Pascalu na PMD-85.

Obrázek 45: Poměrně komfortní uživatelské rozhraní Pascalu na PMD-85.

Obrázek 46: Moduly pro IQ-151, včetně modulu s Pascalem.

Obrázek 47: Turbo Pascal začal být populární zejména na IBM PC (což však již nejsou čistě osmibitové stroje).

widgety

8. Action!

Velmi zajímavým vyšším programovacím jazykem, který byl optimalizován pro použití na osmibitových mikropočítačích, byl jazyk nazvaný Action!. Tento jazyk byl určen pro osmibitové mikropočítače Atari a od ostatních (obecnějších) jazyků se odlišoval zejména tím, že jeho možnosti odrážely schopnosti těchto mikropočítačů (datové typy omezeny na bajt, 16bitový integer se znaménkem a bez znaménka atd.). Syntaxe jazyka Action! je odvozena od Algolu (resp. od Algolské větve jazyků, kam spadá i Pascal), což se týká zejména způsobu zápisu programových smyček a podmínek (IF-FI, DO-OD). Action! podporoval strukturované programování, uživatelé mohli vytvářet lokální proměnné, ovšem ne na zásobníku, jehož velikost i možnosti adresování byly na MOS 6502 omezeny. Zajímavě bylo vyřešeno rozhraní jazyka Action!, protože uživatelé měli k dispozici plnohodnotný textový editor, jednoprůchodový (a tedy rychlý) překladač a monitor, v němž bylo možné provádět i ladění vyvíjené aplikace. Zdrojový text mohl být neustále uložen v operační paměti současně s přeloženou (nativní) aplikací, což bylo umožněno tím, že samotný Action! byl umístěn na přídavném paměťovém modulu.

Obrázek 48: Zdrojový kód části programu napsaného v jazyce Action!

9. Odkazy na Internetu

  1. Papírový počítač CGS – Root.cz
    http://www.root.cz/clanky/papirovy-pocitac-cgs/
  2. Computer Game System
    http://mmm.webz.cz/pocitadla/cgs.html
  3. CARDIAC paper computer emulator
    http://boingboing.net/2009/06/03/car­diac-paper-comput-1.html
  4. cardiac
    http://www.porticus.org/be­ll/belllabs_kits_cardiac.html
  5. CARDboard Illustrative Aid to Computation (Wikipedia)
    http://en.wikipedia.org/wi­ki/CARDboard_Illustrative_A­id_to_Computation
  6. cinc – CARDIAC computer naprogramovaný v Javě
    http://sourceforge.net/projects/cinc/
  7. CARDIAC computer – recreation
    http://www.kylem.net/pages/pro­jects/cardiac.html
  8. Grafika na osmibitových počítačích firmy Sinclair
    http://www.root.cz/clanky/grafika-na-osmibitovych-pocitacich-firmy-sinclair/
  9. Stránky RetroFestu
    http://retrofest.cz/
  10. RetroHerna
    http://retroherna.cz/
  11. Martin Schotek a PMD 85
    http://www.schotek.cz/pmd/index.htm
  12. Scanované informace o PMD 85
    http://www.schotek.cz/pmd/scan.htm
  13. Czechoslovakian Home-Computers
    http://www.homecomputer.de/pa­ges/easteurope_cz.html
  14. Minimalism (computing)
    http://en.wikipedia.org/wi­ki/Minimalism_(computing)
  15. PMD 85 (Personal Microcomputer with Display) emulator
    http://pmd85.djb-studios.com/wiki/PMD85&setlang=en
  16. PMD 85 Emulator – Screenshots
    http://pmd85.djb-studios.com/wiki/Emulator/Screenshots
  17. PMD-85
    http://www.old-computers.com/museum/compu­ter.asp?c=730&st=1
  18. Peripherals of PMD-85 and compatibles
    http://pmd85.djb-studios.com/wiki/Peripherals
  19. BASIC
    http://cs.wikipedia.org/wiki/BASIC
  20. BASIC
    http://en.wikipedia.org/wiki/BASIC
  21. IQ-151
    http://www.old-computers.com/MUSEUM/compu­ter.asp?st=1&c=1045
  22. IQ-151
    http://osmi.tarbik.com/cssr/iq151­.html
  23. PMD 85
    http://osmi.tarbik.com/cssr/pmd85­.html
  24. Tesla PMI-80
    http://osmi.tarbik.com/cssr/pmi80­.html
  25. PMI-80
    http://en.wikipedia.org/wiki/PMI-80
  26. PMI-80
    http://www.old-computers.com/MUSEUM/compu­ter.asp?st=1&c=1016
  27. Assembly Language Programming
    http://cratel.wichita.edu/cra­tel/ECE238Spr08
  28. Rosetta Code – Main Page
    http://rosettacode.org/wiki/Main_Page
  29. Rosetta Code – Category Basic
    http://rosettacode.org/wi­ki/Category:BASIC
  30. Dartmouth College Computation Center: 1964 – The original Dartmouth BASIC manual
    http://www.bitsavers.org/pdf/dar­tmouth/BASIC_Oct64.pdf
  31. The Original BASIC
    http://www.truebasic.com/
  32. BASIC – Beginners All-purpose Symbolic Instruction Code
    http://hopl.murdoch.edu.au­/showlanguage.prx?exp=176
  33. FreeBASIC home page
    http://www.freebasic.net/
  34. FreeBASIC Wiki
    http://www.freebasic.net/wi­ki/wikka.php?wakka=FBWiki
  35. FreeBASIC Manual
    http://www.freebasic.net/wi­ki/wikka.php?wakka=DocToc
  36. FreeBASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/FreeBASIC
  37. The Griffon Legend
    http://syn9.thingie.net/?ta­ble=griffonlegend
  38. QBasicJedi
    http://www.freewebs.com/qbasicjedi/
  39. QBasic/QuickBasic Downloads
    http://www.freewebs.com/qba­sicjedi/qbdownloads.html
  40. QuickBASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/QuickBASIC
  41. QBasic.com
    http://www.qbasic.com/
  42. QBasic (Wikipedia)
    http://cs.wikipedia.org/wiki/QBasic
  43. Dialling with QBASIC
    http://www.mysundial.ca/tsp/qba­sic.html
  44. Visual Basic .NET (česky)
    http://www.vbnet.cz/
  45. BASIC (Wikipedia EN)
    http://en.wikipedia.org/wiki/BASIC
  46. BASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wiki/BASIC
  47. Turbo BASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Turbo_BASIC
  48. Sinclair BASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Sinclair_BASIC
  49. More BASIC Computer Games
    http://www.atariarchives.or­g/morebasicgames/
Našli jste v článku chybu?
Root.cz: Hořící telefon Samsung Note 7 zapálil auto

Hořící telefon Samsung Note 7 zapálil auto

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

DigiZone.cz: Ultra HD v praxi a v Portugalsku

Ultra HD v praxi a v Portugalsku

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Podnikatel.cz: Nemá dluhy? Zjistíte to na poště

Nemá dluhy? Zjistíte to na poště

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

120na80.cz: Nejsilnější alergeny jsou pryč

Nejsilnější alergeny jsou pryč

Podnikatel.cz: „Lex Babiš“ Babišovi paradoxně pomůže

„Lex Babiš“ Babišovi paradoxně pomůže