Obsah
1. Collapse OS – operační systém do světa Falloutu?
2. Podporované procesorové architektury
3. Podpora periferních zařízení
4. Vývoj Collapse OS – od assembleru k programovacímu jazyku Forth
5. Vlastnosti Collapse OS z pohledu uživatele
8. Uložení zdrojového kódu programu do bloků (obrazovek)
9. Organizace bloků Collapse OS
10. Další možný vývoj Collapse OS
11. Vyzkoušení Collapse OS na lokálním systému
12. Vyzkoušení Collapse OS ve webovém prohlížeči
13. Přílohy: vznik a vývoj programovacího jazyka Forth
14. Forth: programovací jazyk, vývojové prostředí či operační systém?
15. Abstraktní dvouzásobníkový procesor
16. Základy programování ve Forthu: zásobník operandů
17. Vytváření nových slov ve Forthu
18. Herní konzole Sega Master System
19. Základní technické parametry herní konzole Sega Master System
1. Collapse OS – operační systém do světa Falloutu?
Na stránkách Roota se poměrně často setkáváme s alternativními a někdy i poměrně obskurními technologiemi. Do této oblasti velmi dobře zapadá i projekt nazvaný Collapse OS. Jméno tohoto projektu naznačuje jeho možné (teoretické) využití – Collapse OS by totiž měl být provozovatelný i na „starém šrotu“, například na osmibitových mikrořadičích a mikroprocesorech s několika kilobajty paměti ROM i RAM sestavenými bez použití leptaného plošného spoje, na starých osmibitových herních konzolích apod. Mnohé z těchto mikroprocesorů či mikrořadičů lze v případě skutečného kolapsu ekonomiky resp. státu (nebo za katastrofických podmínek) provozovat pouze s minimálními dalšími nároky na další pomocné obvody či na napájení s několika přesně specifikovanými úrovněmi napětí (což je v přímém kontrastu s komplexním PC, kde i čip pro připojení pouhé klávesnice svojí komplexností převyšuje zmíněné osmibitové CPU a MCU).
Vraťme se však k Collapse OS. Budeme se přitom soustředit spíše na technologie, na nichž je tento operační systém postaven, protože jeho „plánované“ použití pravděpodobně nenastane – v případě skutečné katastrofy bude asi lidstvo řešit závažnější problémy, než je nedostatek počítačů (resp. jinak – vcelku s velkou pravděpodobností se do skutečného scénáře stejně netrefíme).
2. Podporované procesorové architektury
Současná verze operačního systému Collapse OS je podporována na osmibitových mikroprocesorech Zilog Z80, na taktéž osmibitovém mikroprocesoru Motorola 6809, dále na mikrořadičích AVR (z rodiny megaAVR, ovšem bylo by možné použít i čipy z rodiny tinyAVR, pokud jsou osazeny větší kapacitou RAM) a taktéž na klasických mikroprocesorech Intel 8086 v reálném režimu (což čistě teoreticky zahrnuje i běžná PC). Výběr těchto čipů je přitom dán spíše preferencemi autora Collapse OS (chtěl se například naučit assembler mikroprocesoru Z80) i v té době dostupných zařízení (herní konzole Sega Master System resp. Sega MegaDrive). Ovšem plánuje se portace tohoto operačního systému i na slavné osmibitové mikroprocesory MOS 6502. Oficiální důvod podpory všech těchto dnes již spíše muzeálních čipů je fakt, že (podle mínění autora Collapse OS) bude možné tyto jednoduché čipy relativně snadno vyrábět v továrnách, které se po kolapsu podaří obnovit. To je velmi zajímavá myšlenka, protože například Z80 má pouze 9000 tranzistorů a je tedy skutečně mnohem snadněji replikovatelný než moderní mikroprocesory s o několik řádů vyšší složitostí.
Z čistě praktického hlediska – tedy pokud se zamyslíme nad tím, jaký „šrot“ by bylo možné v případě nějaké katastrofy najít a oživit – by pochopitelně bylo vhodnější se orientovat nikoli na historické mikroprocesory, ale na moderní mikrořadiče, které lze najít prakticky kdekoli (například i v termostatu apod.). Kromě mikrořadičů AVR, což je velmi rozšířená řada mikrořadičů, by se tedy mohla provést portace i na vybrané šestnáctibitové a popř. i 32bitové mikrořadiče. V oblasti šestnáctibitových mikrořadičů se jedná o řadu Freescale (dříve Motorola) 68HC11, čipy od Texas Instruments (například MSP430) či čipy od Infineonu, které by bylo možné získat z automobilů. Zajímavý je i segment 32bitových mikrořadičů, v nichž se kromě MIPS ujaly i čipy s jádrem ARM Cortex-M0 popř. ARM Cortex-M1. Výhodou Collapse OS je fakt, že případná portace na další mikrořadiče a mikroprocesory by měla být relativně snadná, a to dokonce do takové míry, že na všech prozatím podporovaných architekturách lze provést bootstrap (viz též navazující kapitoly).
V předchozích dvou odstavcích jsem se schválně nezmínil o mikrořadičích z rodiny 8051, které jsou i přes značné stáří této architektury (představeny byly již v roce 1980!) stále používány a jejich zapojení je většinou jednoduché a především známé. Problém je, že i moderní mikrořadiče, které jsou nad 8051 postaveny, nabízí pouze omezenou kapacitu RAM (například 256 bajtů), přičemž Collapse OS pro svůj běh vyžaduje spíše kapacitu ve vyšších jednotkách kilobajtů. Totéž lze říci i o některých rodinách mikrořadičů PIC, konkrétně PIC10 až PIC16. Z této oblasti nám tak zbývají například mikrořadiče z rodiny S08 a HC08.
3. Podpora periferních zařízení
Samotný mikroprocesor popř. mikrořadič je pochopitelně nutné doplnit o další potřebná periferní zařízení. Z paměťových zařízení jsou podporovány SD karty, což je ostatně logické, protože protokol pro jejich ovládání je velmi jednoduchý (minimálně v porovnání s dalšími technologiemi, jako je USB mass storage atd.). V některých variantách jsou podporovány i disketové jednotky, tedy dnes již spíše historické paměťové médium. Podporován je i přenos dat po sériové sběrnici (zde ovšem záleží na konkrétním mikroprocesoru resp. v tomto případě spíše na mikrořadiči, které sériové sběrnice či porty podporuje a jaké jsou použité paměťové úrovně) a taktéž klávesnice PS/2 – ostatně i ta používá sériový protokol pro přenos dat (s adaptérem je tedy možné připojit i USB klávesnici). Navíc je na herní konzoli Sega Master System podporován i D-Pad, tedy ovládací prvek, jenž je primárním vstupním zařízením na této konzoli (společně s dalšími tlačítky na ovladači i konzoli).
Mezi zajímavé doplňky patří například podpora pro zobrazení údajů na slavné kalkulačce TI-84+, tedy na grafickém displeji o rozlišení 96×64 pixelů.
4. Vývoj Collapse OS – od assembleru k programovacímu jazyku Forth
Samotný vývoj Collapse OS od prvních verzí až k verzi současné je prakticky ukázkovým „školním“ příkladem nasazení programovacího jazyka Forth. Collapse OS totiž začal zdánlivě logickým krokem – byl totiž prakticky kompletně naprogramován v assembleru. To je zajisté s ohledem na použité mikroprocesory dobrá volba, ovšem naráží na jeden zásadní problém – celý OS by totiž mělo být možné „bootstrapovat“ (tedy přeložit a spustit) přímo na daném systému, tedy například konkrétně na zbastleném počítači s mikroprocesorem Zilog Z80 a řekněme šestnácti kilobajty operační paměti RAM. Jádro problému spočívá v tom, že zatímco operační systém získaný překladem z assembleru je dostatečně rychlý a kompaktní, neplatí to už pro překlad (tedy pro fázi, které se přesněji říká assembly, nikoli compilation). Samotný assembler totiž v žádném případě není jednoduchý program. Typické jednodušší assemblery vyžadují 8kB paměti jen pro svůj vlastní kód, mnohé makroassemblery pak šestnáct kilobajtů. A assemblery určené pro moderní mikroprocesory jsou již z tohoto pohledu až absurdně obrovské a tudíž pro potřeby Collapse OS nepoužitelné:
$ ls -l /usr/bin/as -rwxr-xr-x 1 root root 356952 dub 25 2017 /usr/bin/as
Řešení tohoto problému je staré již čtyřicet let – v assembleru je naprogramováno jen nezbytné množství systému, typicky se jedná o řádově stovky bajtů. Tato assemblerovská část představuje jádro programovacího jazyka Forth (skutečně jen velmi malé jádro, doslova několik základních slov a kód pro práci se slovníkem), zbytek systému je pak dostupný ve formě Forthovského kódu. V případě Collapse OS se preferuje přenositelnost a srozumitelnost (pro příští generace), proto je část v assembleru skutečně velmi malá, a to i za cenu, že Forthovský kód nebude tak rychlý jako jeho případná alternativa napsaná v assembleru.
5. Vlastnosti Collapse OS z pohledu uživatele
Jaké vlastnosti vlastně Collapse OS případným uživatelům nabízí? V první řadě je nutné již na úvod zdůraznit co nenabízí. V žádném případě se nejedná o nějakou plnohodnotnou náhradu za moderní operační systémy – takové ambice ani není možné splnit s ohledem na hardwarová omezení použitých mikroprocesorů a při snaze udržet velikost celého projektu v mezích jednotek či maximálně desítek kilobajtů operační paměti. Taktéž se nejedná o realtime systém, i když k němu má blíže, než například klasické unixové/linuxové jádro (a lze předpokládat, že v případě potřeby může některé realtime aplikace nahradit). Collapse OS je v současnosti možné nastartovat (bez použití BIOSu či jakéhokoli uzavřeného binárního blobu), ovládat ho z klávesnice nebo přes sériovou konzoli s výstupem buď na sériovou konzoli nebo na připojený řádkový resp. grafický displej (zde pouze s omezeními). Collapse OS taktéž dokáže ovládat podporovaná bloková zařízení, což jsou v současnosti již zmíněné SD karty a u některých architektur i disketové jednotky.
Práce s paměťovými zařízeními je skutečně omezena na čtení a zápis dat po jednotlivých blocích; jinými slovy součástí základního systému není ovladač pro souborový systém, i když například podporu FAT by nebylo příliš problematické doprogramovat (ostatně různé DOSy pro osmibitové mikropočítače měly velikost jen několik kilobajtů). Z pohledu Collapse OS je však tato funkcionalita spíše chápána jako uživatelské rozšíření a nikoli součást operačního systému. Totéž platí pro jakoukoli podporu sítí, s výjimkou výše zmíněných sériových sběrnic.
6. Uživatelské nástroje
Součástí Collapse OS jsou i základní utility. V první řadě je k dispozici shell jazyka Forth (jak již víme, ovladatelný z klávesnice nebo ze sériové konzole). To však není vše, protože součástí Collapse OS jsou mj. i tři editory. První z nich je označován jako memory editor, i když se ve skutečnosti jedná o hexa editor, což je speciální forma editorů, jimiž jsme se již na stránkách Roota zabývali. Právě tento typ editorů je pro danou aplikační oblast nejvhodnější. Tento editor se nahrává příkazem ME a spouští se týmž slovem (uživatel tedy může editor nahrát jedenkrát a potom ho může kdykoli vyvolat). Tím, že tento editor pracuje s operační pamětí, není problém do daného místa paměti nahrát blok z paměťového zařízení, ten upravit a potom ho uložit zpět – tento editor tedy částečně nahrazuje i klasický monitor.
┌─────────────────────────────────────────────────────────────────────────────── │A: 0000 C: 0000 S: │:00 0000 0000 2c10 9c04 db12 1c10 0000 0000 ....,.~.�....... │:10 0000 000c 1045 5849 5400 0004 0000 2862 .....EXIT.....(b │:20 7229 1c00 0400 0128 3f62 7229 2500 0500 r).....(?br)%... │:30 0228 6c6f 6f70 292f 0006 0003 2862 293a .(loop)/....(b): │:40 0003 0004 286e 2942 0003 0005 2873 294a ....(n)B....(s)J │:50 0003 0006 3e52 5200 0200 0752 3e59 0002 ....>RR....R>Y.. │:60 0008 323e 5260 0003 0009 3252 3e68 0003 ..2>R`....2R>h.. │:70 000a 4558 4543 5554 4570 0007 000b 524f ..EXECUTEp....RO │:80 547c 0003 000c 4455 5084 0003 000d 3f44 T|....DUP~....?D │:90 5550 8c00 0400 0e44 524f 5095 0004 000f UP~....DROP~.... │:a0 5357 4150 9e00 0400 104f 5645 52a7 0004 SWAP~....OVER�.. │:b0 0011 414e 44b0 0003 0012 4f52 b800 0200 ..AND�....OR�... │:c0 1358 4f52 bf00 0300 144e 4f54 c700 0300 .XOR�....NOT�... │:d0 152b cf00 0100 162d d500 0100 172a db00 .+�....-�....*�. │:e0 0100 182f 4d4f 44e1 0004 0019 21ea 0001 .../MOD�....!�.. │:f0 001a 40f0 0001 001b 4321 f600 0200 1c43 ..@�....C!�....C │:00 40fd 0002 001d 5043 2104 0103 001e 5043 @�....PC!.....PC │:10 400c 0103 001f 4914 0101 0020 4927 1a01 @.....I.... I'.. │:20 0200 214a 2101 0100 2242 5945 2701 0300 ..!J!..."BYE'... │:30 2341 424f 5254 2f01 0500 2451 5549 5439 #ABORT/...$QUIT9 │:40 0104 0025 5b5d 3d42 0103 0026 3d4a 0101 ...%[]=B...&=J.. │:50 0027 3c50 0101 0028 4649 4e44 5601 0400 .'<P...(FINDV... │:60 2931 2b5f 0102 002a 312d 6601 0200 2b54 )1+_.SP fffa (ffe4) RS ff0a (ff28)
Dále existuje tradiční řádkový editor reprezentovaný slovem ED. Ten se ovládá několika příkazy pro výběr řádku, vložení textu, nalezení textu, operaci copy, operaci put atd. Ovšem k dispozici je i (vizuální) textový editor načítaný a spouštěný příkazem VE, jehož ovládání a chování je inspirováno editory Vi a Vim. Ovšem použití tohoto textového editoru je poněkud neobvyklé, protože odráží fakt, že s blokovými zařízeními se skutečně pracuje po blocích, což je ostatně ve světě jazyka Forth obvyklé.
┌─────────────────────────────────────────────────────────────────────────────── │BLK 111 0 0,0 | │I: | │F: | │1 \ VE final: status nums gutter handle VE | │2 : status 0 $20 nspcs 0 0 AT-XY ." BLK" SPC> BLK> . SPC> ACC . | │3 SPC> pos@ . ',' EMIT . xoff IF '>' EMIT THEN SPC> | │4 BLKDTY IF '*' EMIT THEN SPC mode! ; | │5 : nums 17 1 DO 0 2 I + AT-XY I . LOOP ; | │6 : gutter large? IF 19 0 DO '|' I COLS * MAXW + CELL! LOOP THEN ;| │7 : handle ( c -- f ) | │8 DUP '0' '9' =><= IF num 0 EXIT THEN | │9 DUP CMD 1+ C! CMD 2 FIND IF EXECUTE THEN | │10 0 [TO] ACC 'q' = ; | │11 : VE | │12 BLK> 0< IF 0 BLK@ THEN | │13 clrscr 0 [TO] ACC 0 [TO] PREVPOS | │14 nums bufs contents gutter | │15 BEGIN xoff? status setpos KEY handle UNTIL 0 19 AT-XY ; | │16 | │ │ │ │ │ SP fffa (ffe4) RS ff0a (ff28)
7. Assemblery
Součástí Collapse OS jsou i vlastní assemblery pro všechny v současnosti podporované architektury mikroprocesorů. To znamená, že k dispozici je assembler pro Zilog Z80, Motorolu 6809, Intel 8086 (reálný režim) i AVR. Tyto assemblery, které jsou opět naprogramovány ve Forthu (a tím pádem podporují cross překlad – tedy překlad na jiný typ mikroprocesoru), začínají na pevně daných (a zdokumentovaných) blocích a dají se načíst jen v případě potřeby, ostatně stejně jako již výše zmíněné editory. Kromě vlastního Forthu, na kterém je celý Collapse OS postaven, se v současnosti jedná o jediné oficiálně podporované vývojové nástroje, i když pro první verze Collapse OS se počítalo i s využitím nějakého jednoduchého interpretru programovacího jazyka BASIC.
2 LIST 1 \ Common assembler words 2 3 VALUES ORG 0 BIN( 0 BIGEND? 0 3 : PC HERE ORG - BIN( + ; 4 : <<3 << << << ; : <<4 <<3 << ; 5 4 VALUES L1 0 L2 0 L3 0 lblnext 0 6 : |T L|M BIGEND? NOT IF SWAP THEN ; 7 : T! ( n a -- ) SWAP |T ROT C!+ C! ; 8 : T, ( n -- ) |T C, C, ; 9 : T@ C@+ SWAP C@ BIGEND? IF SWAP THEN <<8 OR ; 10 : lblnext? lblnext ?DUP NOT IF ABORT" no lblnext!" THEN ; 11 \ BIN( is in increments of $100 and EXIT is always within $100. 12 : LIVETGT ['] EXIT >>8 <<8 DUP [TO] BIN( DUP [TO] ORG 13 $f + @ [TO] lblnext ; 14 : CODE ENTRY 0 ( native ) C, ; 15 16 ok
8. Uložení zdrojového kódu programu do bloků (obrazovek)
„Who would want to work within the constraint of 64×16 blocks filesystem? Someone who knows the complexity associated with implementing a filesystem and everything that underpins it. When simplicity is valued, such constraints are gladly accepted.“
Již při popisu základních možností a součástí Collapse OS jsem se zmínil o (vizuálním) textovém editoru, který si ovšem zaslouží bližší popis, protože ukazuje, jak se celková architektura tohoto operačního systému projevila i na uživatelských programech a jak je v některých zásadních aspektech odlišná od běžné práce s daty. První rozdíl oproti běžným operačním systémům spočívá v tom, že Collapse OS celý souborový systém chápe jako prostou sekvenci bloků o velikosti 1024 bajtů. Tyto bloky mohou obsahovat libovolná data, která ovšem nejsou organizována do klasických adresářů a souborů. Existuje ovšem relativně jednoduchý mechanismus, jak s těmito bloky pracovat jako s textovým dokumentem rozděleným do takzvaných obrazovek neboli screen(s).
Prakticky stejně je tomu i v tradičních Forthech, v nichž se zdrojový text kódu programu neukládal do textových souborů (jak je tomu dnes), ale taktéž do jednotlivých bloků. V případě práce se zdrojovým textem se ovšem většinou nemluví o blocích, ale o již zmíněných obrazovkách (screens).
Velikost obrazovky je za jakýchkoli podmínek rovna šestnácti řádkům, kde na každém řádku je uloženo šedesát čtyři znaků. Celková velikost obrazovky je tedy rovna 64×16 = 1024 znakům/bytům, což přesně odpovídá velikosti jednoho bloku. Všimněte si, že délka řádku je vždy rovna 64 znakům, nezávisle na aktuálním obsahu řádku. Pokud je řádek „prázdný“, je v bloku jednoduše zapsáno 64 mezer (ASCII znaků s kódem 32), i když některé Forthy rozpoznají i znak pro konec řádku (ovšem opět následovaný nějakou výplní).
Jisté je, že tento způsob zápisu je neúsporný, zejména při zápisu programů „vertikálním“ způsobem. I z tohoto důvodu ostatně někteří zkušení programátoři zapisují definice nových slov „horizontálním“ způsobem, tj. na jeden řádek – slova tak musejí být krátká, což vede k důsledné faktorizaci kódu (ta ostatně není nikdy na škodu, zvláště a zejména ve Forthu).
Pro načtení a zpracování (tj. překlad a interpretaci) celé obrazovky se používá slovo LOAD, jehož zásobníkový diagram je následující: ( u –). Před provedením tohoto slova musí být na zásobník operandů uloženo číslo bloku, který se má načíst a přeložit. Z hlediska operačního systému se jedná o triviální operaci, zcela jistě jednodušší, než používání sofistikovaných souborových systémů.
Pro souvislé načítání bloků/obrazovek je ve Forthu vytvořeno slovo s krásným zápisem --> (tedy pomlčka pomlčka nerovnítko), které načte následující blok z blokového zařízení, tj. po bloku U je načten blok U+1. Pro automatizované načítání sekvence obrazovek je možné využít malého triku: na konci každé obrazovky je uvedeno výše popsané slovo -->, které při interpretaci automaticky způsobí odskok.
Pro výpis obsahu obrazovky na obrazovku :-) (tj. na monitor nebo na sériovou konzoli) lze použít slovo LIST se zásobníkovým diagramem ( U – ), kde u je index požadované obrazovky.
Orientace v číslech obrazovek může být složitá, takže se, především u rozsáhlejších aplikací, na některé z prvních obrazovek uvádějí konstanty, které lze pro indexaci používat. Jednoduchý příklad:
1 constant app-init 90 constant graphics 125 constant sound app-init load graphics load graphics list sound load
Pro tisk obsahu obrazovek na tiskárnu se v klasických Forthech (ovšem ne v Collapse OS) používá slovo TRIAD, které způsobí tisk třech obrazovek (index první z nich je uložen na zásobníku operandů). Proč zrovna tři obrazovky? Na tiskárnách formátu A4 popř. US Letter je možné vytisknout přibližně 60 řádků, což pro čtyři obrazovky nedostačuje (16×4 > 60), ale pro tři obrazovky je tato hodnota ideální (obrazovky mohou být odděleny prázdným řádkem nebo několika řádky). Z tohoto důvodu se mnohdy zdrojový kód organizuje tak, aby důležité části (například začátky modulů) začínaly na začátku tiskové strany.
Při tisku lze také využít slovo INDEX, které vytiskne první řádky získané z šedesáti po sobě jdoucích obrazovek. Pokud tedy obsahuje každá obrazovka stručný popis (samozřejmě v poznámce), je možné velmi jednoduchým způsobem získat „obsah“ programu. Důležitá jsou zejména odsazení prvních řádků tak, aby se při tisku zdůraznila hierarchie. Případnou implementaci slova INDEX ponechám na čtenáři, je totiž poměrně jednoduchá – stačí použít počítaný cyklus, dále slovo TYPE a nezapomenout na uložení délky řetězce na zásobník operandů.
Při zápisu zdrojových textů se často používají dvě slova uvozující poznámku. První slovo se zapisuje \ a značí, že se ignoruje zbytek aktuálního řádku (tj. podobně jako v C-čku znaky //). Druhé slovo, které se zapisuje jako \S, způsobí, že se ignoruje text až do konce aktuální obrazovky. Pokud je tedy toto slovo uvedeno na prvním řádku, je celá obrazovka považována za komentář. Takovým způsobem je ostatně okomentována i značná část samotného Collapse OS.
9. Organizace bloků Collapse OS
Celý Collapse OS je reprezentován několika stovkami kilobajtových bloků dat, přičemž každý blok je určen svým indexem. Indexy některých bloků jsou dnes již standardizovány, takže uživatel či vývojář například ví, že od bloku 100 začínají programy, které je možné načíst po inicializaci (nastartování) systému, od bloku 200 začíná kód assemblerů atd. Tyto pevně zadané adresy sice znamenají, že je Collapse OS méně flexibilní a může zabírat zbytečně velké množství bloků na paměťovém médiu, ovšem jeho používání a další vývoj je poněkud více predikovatelný (což zní optimisticky – ale asi se jedná o jeden ze způsobů, jak vůbec „přežít“ na systému, který nemá skutečný souborový systém). Popis jednotlivých bloků je uveden v takzvaném master indexu, který je umístěn v nultém bloku. Ten si pochopitelně můžeme vypsat příkazem 0 LIST:
1 MASTER INDEX 2 3 002 Common assembler words 005 Z80 assembler 4 020 8086 assembler 030 AVR assembler 5 050 6809 assembler 60-99 unused 6 100 Block editor 115 Memory Editor 7 120 Useful little words 8 130-149 unused 150 Remote Shell 9 160 AVR SPI programmer 165 Sega ROM signer 10 170-199 unused 200 Cross compilation 11 210 Core words 230 BLK subsystem 12 240 Grid subsystem 245 PS/2 keyboard subsystem 13 250 SD Card subsystem 260 Fonts 14 280 Z80 boot code 310 Z80 drivers 15 400 8086 boot code 420 8086 drivers cont. 16
Pokud vás zajímá například první blok/screen s kódem memory editoru, zde je:
115 LIST 1 \ Memory Editor. See doc/me.txt. B115-119 2 CREATE CMD '#' C, 0 C, \ not same prefix as VE 3 CREATE BUF '$' C, 4 ALLOT \ always hex 4 \ POS is relative to ADDR 5 5 VALUES ADDR 0 POS 0 AWIDTH 16 HALT? 0 ASCII? 0 6 LINES 2 - VALUE AHEIGHT 7 AHEIGHT AWIDTH * VALUE PAGE 8 COLS 33 < [IF] 8 TO AWIDTH [THEN] 9 : _ ( n -- c ) DUP 9 > IF [ 'a' 10 - LITN ] ELSE '0' THEN + ; 10 : _p ( c -- n ) '0' - DUP 9 > IF $df AND 'A' '0' - - DUP 6 < IF 11 10 + ELSE DROP $100 THEN THEN ; 12 : SCNT 'S S0 -^ >> ; 13 : addr ADDR POS + ; 14 : hex! ( c pos -- ) 15 OVER 16 / _ OVER CELL! ( c pos ) 1+ SWAP $f AND _ SWAP CELL! ; 16 : bottom 0 LINES 1- AT-XY ; ok
10. Další možný vývoj Collapse OS
V současnosti je možné Collapse OS provozovat pouze na několika mikroprocesorech a podporována jsou pouze základní periferní zařízení. Jak již bylo naznačeno v předchozím textu, bude se s velkou pravděpodobností rozšiřovat jak sada podporovaných mikroprocesorů, tak i různých zařízení, na kterých bude možné Collapse OS spustit. Připravuje se například podpora slavné kalkulačky TI-84 Plus s grafickým displejem a rychlou variantou mikroprocesoru Zilog Z80. Pravděpodobně se taktéž dočkáme nějakého vyššího programovacího jazyka, konkrétně interpretru (ať již to bude nějaká forma BASICu, Lua či s menší pravděpodobností MicroPython). Zajímavá by mohla být podpora dalších (kapesních) herních konzolí, protože například Game Boy je známý tím, že přežije prakticky jakékoli zacházení a přitom má minimální spotřebu a relativně jednoduchý hardware. Na druhou stranu je architektura Collapse OS dosti limitující, takže například nemůžeme čekat složité aplikace či dokonce portaci existujících aplikací a nástrojů z Linuxu.
11. Vyzkoušení Collapse OS na lokálním systému
Collapse OS je možné si přeložit a vyzkoušet i na běžném PC. Postačuje provést tyto kroky:
- Stáhnout poslední obraz zdrojových kódů ze stránky https://collapseos.org/download.html
- Rozbalit ho příkazem tar xvfz collapseos-20210802.tar.gz (či jiná verze)
- Přejít do adresáře cvm
- Spustit příkaz make
Výsledkem překladu je trojice spustitelných souborů stage, cos-grid a cos-serial. První z nich je určen pro speciální použití (zápis obsahu paměti do souboru), druhý spustí Collapse OS v celoobrazovkovém režimu (kde bude fungovat editor VE i ME) a třetí taktéž spustí Collapse OS, ovšem v režimu sériového vstupu/výstupu – tedy ve funkci primitivní konzole. Přitom se využívá blokové zařízení simulované souborem blkfs (ten má nyní 557 bloků).
Příklad použití cos-serial:
$ ./cos-serial Using blkfs /tmp/ramdisk/collapse/cvm/blkfs Collapse OS ok 1 2 + . 3 ok 2 3 7 * * . 42 ok 0 LIST 1 MASTER INDEX 2 3 002 Common assembler words 005 Z80 assembler 4 020 8086 assembler 030 AVR assembler 5 050 6809 assembler 60-99 unused 6 100 Block editor 115 Memory Editor 7 120 Useful little words 8 130-149 unused 150 Remote Shell 9 160 AVR SPI programmer 165 Sega ROM signer 10 170-199 unused 200 Cross compilation 11 210 Core words 230 BLK subsystem 12 240 Grid subsystem 245 PS/2 keyboard subsystem 13 250 SD Card subsystem 260 Fonts 14 280 Z80 boot code 310 Z80 drivers 15 400 8086 boot code 420 8086 drivers cont. 16
Spuštění cos-grid s načtením editoru VE:
┌─────────────────────────────────────────────────────────────────────────────── │Collapse OS ok │VE │100 101 102 103 104 105 106 107 108 109 110 111 ok │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ SP fff8 (ffe4) RS ff10 (ff28)
12. Vyzkoušení Collapse OS ve webovém prohlížeči
Alternativně je možné si Collapse OS vyzkoušet přímo ve webovém prohlížeči, který emuluje jak Forthovský virtuální stroj, tak i základní periferie. Postačuje přejít na stránku https://schierlm.github.io/CollapseOS-Web-Emulator/, zvolit si emulovanou konfiguraci „postkatastrofického“ počítače a spustit jeho emulaci. Při prvních pokusech je vhodné si vybrat druhou konfiguraci, tedy počítač s procesorem Zilog Z80, 16 kB ROM, 48 kB RAM a ovládáním přes sériovou konzoli (tedy hloupý textový terminál).
13. Přílohy: vznik a vývoj programovacího jazyka Forth
Vývoj programovacího jazyka Forth, na kterém je postaven Collapse OS, probíhal velmi zajímavě. Nikdy se totiž nejednalo o čistě „akademický produkt“, který by měl reprezentovat nějakou nosnou revoluční myšlenku (a tím méně o jazyk určený pro výuku programování), ale o programovací jazyk, který vytvořil v podstatě jeden člověk pro svoji osobní potřebu tak, aby přesně splňoval jeho pracovní požadavky. Tento programátor se jmenuje Charles „Chuck“ Moore a dodnes patří mezi zajímavé a současně velmi rozporuplné osobnosti, které se podílely na rozvoji výpočetní techniky, zejména vestavěných (embedded) řídících systémů a systémů běžících v reálném čase. Moore byl prý překvapen, když zjistil, že systém, který vyvinul pro své potřeby, používají i další lidé, kterým v jejich práci vyhovuje více než v té době komerčně prosazovaný Fortran).
Do značně heterogenního prostředí počítačů a operačních systémů sedmdesátých let přišel Moore se svým jazykem (či lépe řečeno celou vývojovou platformou) Forth. Vývojové prostředí Forthu obsahovalo interaktivní editor, interpret jazyka Forth a univerzální vazbu na assembler upravený na právě provozovaný systém (opět – můžeme zde jasně vidět, čím se nechal Collapse OS inspirovat). Toto prostředí umožňovalo spouštět souběžně více procesů a současně mohlo v systému nezávisle pracovat až 64 uživatelů, a to i na platformách, jejichž operační systém nebyl multiuživatelský a dokonce ani multitaskový.
Ve skutečnosti Forth (resp. jeho vývojové prostředí, tyto dva pojmy však většinou splývají) nepotřeboval pro své spuštění žádný operační systém, pracoval totiž přímo s periferními zařízeními – z toho také vyplývá skutečnost, že se zdrojové kódy vytvářených aplikací neukládaly tak jako dnes do textových souborů, ale byly v předkompilované či přímo přeložené podobě uloženy v blocích pevné délky (takzvaných obrazovkách, s nimiž jsme se již setkali), které se podle potřeby nahrávaly do operační paměti počítače. Tyto programové bloky u mnoha systémů odpovídaly velikosti bloků na disku (typická velikost je 512 B a 1 kB), což značně urychlovalo práci s disky, protože se nemusely provádět složité přepočty adres na bloky. Na druhou stranu se nejedná o příliš efektivní způsob uložení a ani násilné rozdělování programů na obrazovky nemusí všem programátorům vyhovovat (zejména v současnosti).
14. Forth: programovací jazyk, vývojové prostředí či operační systém?
Chuck Moore začal vytvářet programovací jazyk Forth docela nevinně – zpočátku se jednalo pouze o jakási makra, která používal při programování aplikací z oblasti astronomie (jednalo se o poměrně složité astronomické výpočty a řízení radioteleskopů). Tato makra se postupným vývojem proměnila v translátor vyšších operací do jazyka symbolických adres (assembleru) a v dalších letech pak do plnohodnotného i když dosti neobvyklého interaktivního programovacího jazyka s vlastním vývojovým prostředím.
Jedná se přitom o jazyk interpretovaný, i když jiným způsobem, než je dnes zvykem, a současně plně a oboustranně interaktivní. Z tohoto důvodu se v něm aplikace vyvíjí a především ihned testují velmi jednoduše, zejména v porovnání s jazyky kompilovanými, jako jsou dnes často používané programovací jazyky C, C++, (polomrtvý) Pascal, C# a v podstatě i Java. Všechny vyjmenované kompilované jazyky potřebují pro vývoj programů mnoho podpůrných prostředků (editor, překladač, linker, debugger), které však mezi sebou nejsou (a ani nemohou být) příliš propojeny – proto je v nich ladění programů poměrně těžkopádné, vyžaduje knihovny s debug symboly atd.
Ve Forthu jsou všechny tyto prostředky sloučeny, ale to v žádném případě neznamená, že by vznikl mnohasetkilobajtový moloch. Naopak, celé vývojové prostředí Forthu zabírá jednotky, maximálně desítky kilobytů (v případe Collapse OS jednotky kilobajtů). Vývojové prostředí Forthu je totiž účelně vytvořeno tak, že obsahuje jen nejnutnější součásti (ostatně Chuck Moore zapřísáhlý minimalista, což je patrné i při pohledu na design čipů, které navrhl).
Výpočetní výkon počítačů v té době nebyl příliš vysoký, k čemuž se dále přidávala poměrně vysoká cena za jednotku strojového času. Programátoři byli nuceni vytvářet programy co nejrychlejší a s co nejmenšími nároky na kapacitu operační paměti (v té době se to vyplatilo, v dnešním světě je v mnoha případech jednodušší programovat resp. „bastlit“ co nejrychleji a ušetřené prostředky investovat do nového hardwaru). Časově kritické úseky aplikací se tedy neustále tvořily v assembleru, k čemuž byl Forth dokonale připraven, neboť existovalo jednoduché programátorské i aplikační rozhraní pro přístup k assembleru.
Také fakt, že Forth využíval vlastní blokový souborový systém (resp. pouze datový systém – soubory vlastně neexistovaly; v dnešních OS se kromě toho používá „proudový“ souborový systém, i když nejmenší adresovatelná jednotka na disku je právě jeden blok), v některých aplikacích značně urychlil práci se soubory. Týká se to zejména databázových aplikací a aplikací pro zpracování obrazu.
15. Abstraktní dvouzásobníkový procesor
Programovací jazyk Forth byl určen zejména pro implementaci na takzvaných zásobníkových procesorech, přesněji řečeno na procesorech s minimálně dvěma zásobníky – zásobníkem operandů (operand stack nebo pouze stack) a zásobníkem návratových adres (return stack). Tyto procesory se od dnes nejpoužívanějších registrových procesorů liší především způsobem provádění aritmetických a logických operací, což mimochodem znamená, že i základní Forthovská slova je nutné interpretovat či přeložit do strojového kódu. Jedná se přesně o ta slova, která tvoří základ Collapse OS, společně se slovy pro ovládání slovníků (tedy seznamu již definovaných slov).
16. Základy programování ve Forthu: zásobník operandů
Forth je mezi programátory znám především jako jazyk, ve kterém se aritmetické a logické výrazy zapisují pomocí RPN – Reverse Polish Notation (obrácené polské notace) označované také jako postfixová notace. Při tomto způsobu zápisu se nejdříve uvádějí operandy a teprve poté operace, která se s těmito operandy může provádět.
Už na základní škole se však každý člověk učí takzvanou infixovou notaci zápisu, ve které se operátory píšou mezi operandy. Vzhledem k prioritě operátorů je však nutné v infixové notaci používat závorky. Rozdíl mezi následujícími dvěma výrazy uvedenými v infixové notaci je snad zřejmý:
a+b*c (a+b)*c
Při použití postfixové notace nejsou závorky zapotřebí, protože se priorita operací vyjadřuje přímo posloupností operátorů. Výše uvedené výrazy lze tedy do postfixové notace přepsat následovně:
a b c * + nebo též b c * a + a b + c * nebo též c a b + *
Všimněte si, že u výrazů napsaných na levé straně se oproti infixové notaci nemění pořadí operátorů.
Pomocí postfixové notace je možné zapisovat všechny operace i funkce, dokonce ani nezáleží na počtu operandů (stírá se rozdíl mezi unárními, binárními, ternárními apod. operacemi). Ve skutečnosti není v postfixové notaci prakticky žádný rozdíl mezi operacemi a funkcemi, takže pro ně není nutné zavádět nějaká zvláštní syntaktická pravidla.
Důsledkem výše uvedených skutečností je fakt, že znaky běžně používané pro operátory je možné použít pro jiné účely, podobně jako například v jazyce Lisp nebo Scheme (což jsou mimochodem jazyky používající pro změnu prefixovou notaci).
Aritmetické operace se ve Forthu zapisují přesně podle infixové notace s tou podmínkou, že jednotlivé operátory od sebe musí být odděleny mezerou, znakem tabelátoru či znakem pro konec řádku. Příklad zápisu některých aritmetických operací a jejich kombinací:
10 20 + 10 20 * 10 20 - 10 20 + 30 * 5 4 3 2 1 * / + -
Význam výše uvedených operací ve Forthu je následující: samotný zápis čísla znamená, že se toto číslo uloží do zásobníku. Zápis operátoru způsobí, že se operandy vyberou ze zásobníku, provede se s nimi operace a výsledek se uloží zpět na zásobník. Vzhledem k tomu, že všechny zmíněné operace jsou binární, vyberou se ze zásobníku dvě hodnoty a zpět se zapíše pouze jediná hodnota, tj. počet položek na zásobníku se o jednu sníží.
S operandy umístěnými na zásobníku operandů lze provádět některé operace, které jsou podporovány naprostou většinou implementací jazyka Forth:
Prohození dvou operandů na zásobníku:
1 2 swap
Duplikace (kopie) operandu na TOS (vrcholu zásobníku):
1 dup
Opak předchozí operace – odstranění operandu z TOS:
1 2 drop
Slovo over se podobá výše popsanému slovu dup, tj. provádí se kopie hodnoty uložené v zásobníku. V tomto případě se však jedná o hodnotu uloženou pod vrcholem zásobníku, nikoli o hodnotu uloženou přímo na vrcholu zásobníku:
1 2 over
Slovo rot manipuluje hned se třemi položkami uloženými na zásobníku. Jak již název tohoto slova napovídá, provádí se rotace položek, a to tak, že datová položka na třetí nejvyšší pozici v zásobníku operandů je vyjmuta a uložena na jeho vrchol:
1 2 3 rot
17. Vytváření nových slov ve Forthu
Forth místo funkcí, operací a řídicích struktur používá pouze slova. Slova se zadávají z klávesnice nebo ze vstupního souboru a jsou určena svým jménem. Jméno je ve Forthu libovolný řetězec znaků, který je oddělen (ukončen) mezerou nebo v novějších verzích libovolným „bílým znakem“. Každé volání funkce je ve forthovském programu nahrazeno jejím jménem bez dalších znaků (závorek apod.), protože veškeré parametry funkce i její návratová hodnota jsou uloženy na zásobníku:
Příkladem slova může být například mocnina. Toto slovo vezme ze zásobníku hodnotu a na zásobník vrátí její druhou mocninu. Slovo může vypadat následovně:
: mocnina dup * ;
Nejdříve se tedy provede duplikace hodnoty na vrcholu zásobníku. Poté se obě (shodné) hodnoty ze zásobníku vyjmou, vynásobí a na zásobník se uloží výsledek operace násobení. Použití tohoto slova je opět velmi jednoduché:
2 mocnina
Poznámka: závěrečný středník na konci slova se překládá do instrukce EXIT.
18. Herní konzole Sega Master System
Collapse OS je možné spustit i na herní konzoli Sega Master System, takže si ve stručnosti připomeňme, o jaký hardware se vlastně jedná. Herní konzole Sega Master System (SMS) byla nejdříve vydána v Japonsku. Ovšem právě v této zemi se nepodařilo vyhrát nad konkurenční konzolí NES, což znamenalo, že SMS byla pro japonský trh vyráběna pouze v období let 1985 až 1989. To je z hlediska morální životnosti konzolí poměrně málo. Poněkud větší úspěch měla SMS v USA a Kanadě, kde se sice taktéž nepodařilo dosáhnout vyšších prodejů, než dosáhla konkurenční NES, přesto se však pro tento trh podařilo prodeje udržet až do roku 1992. Zajímavější však byl vývoj v západní Evropě a taktéž v Brazílii. V západní Evropě se prodeje herní konzole Sega Master System udržely až do roku 1996 a zajímavé je, že v roce 1993, tj. za zhruba osm let od data uvedení SMS, se podařilo prodat více než šest milionů kusů (popravdě řečeno se zde údaje poněkud rozchází – někdo píše o šesti milionech prodaných kusů, jiné zdroje uvádí šest milionů používaných konzolí).
Obrázek 1: Konkurent konzole SMS: slavná herní konzole NES.
Jak jsme si však již řekli v předchozím odstavci, dosáhla konzole SMS největší popularity v Brazílii, kde se vyráběla varianta, která byla konstrukčně odlišná jak od původní japonské verze, tak i od verzí určených pro západní Evropu a severní Ameriku. Nicméně i přes některé odlišnosti budou údaje uvedené v následující kapitole do značné míry platné pro všechny typy konzolí Sega Master System a většinou i pro Sega Mark III (která se navíc dala rozšířit takovým způsobem, aby měla srovnatelné parametry se SMS; někteří lidé se dokonce s menším či větším úspěchem snažili o upgrade původní SG-1000 na Sega Master System).
Obrázek 2: Další konkurent konzole SMS: Atari 7800.
19. Základní technické parametry herní konzole Sega Master System
Ústředním čipem herní konzole Sega Master System byl, stejně jako v případě starší osmibitové konzole SG-1000 od stejné firmy, slavný osmibitový mikroprocesor Zilog Z80. Tento osvědčený čip dokázal přímo obsluhovat adresový prostor o velikosti 64 kB, tj. 0×0000 až 0×ffff. Tento paměťový prostor byl rozdělen na tři oblasti takovým způsobem, jak je to naznačeno v následující tabulce:
Od | Do | Popis |
---|---|---|
0×0000 | 0×bfff | paměť, do níž je adresován paměťový modul se hrou |
0×c000 | 0×dfff | paměť RAM o kapacitě 8 kB |
0×e000 | 0×ffff | zrcadlená paměť RAM (jeden adresový vodič je ignorován) |
První oblast, do níž byl adresován paměťový modul, bylo možné použít jako jeden dále nijak nerozdělený adresový prostor o velikosti 48 kilobajtů, ovšem u paměťových modulů o větší kapacitě bylo prvních 32 kilobajtů mapováno přímo (zde se tedy musel nacházet startovní kód hry) a zbývajících 16 kilobajtů sloužilo pro přístup do vybraného banku. Těch mohlo být čistě teoreticky až 256, v praxi se však používaly paměťové moduly o maximální kapacitě 256 kilobajtů (to se již ovšem jednalo o poměrně rozsáhlé hry).
Obrázek 3: Herní konzole Sega Master System (SMS).
Kromě osmibitového mikroprocesoru Zilog Z80 byly v herní konzoli Sega Master System použity tři další čipy. Jedná se především o grafický řadič VDC, což je upravená varianta původního řadiče Texas Instruments TMS9918, dále pak o zvukový generátor Texas Instruments SN76489 (ten byl sloučen s VDC) a konečně se v herní konzoli SMS objevil i velmi zvláštní čip Yamaha YM2413, který se staral a zvukovou syntézu (jak si řekneme dále, byl tento čip vytvořen jako levnější varianta ke známému čipu Yamaha YM3812, s nímž jsme se již na stránkách Roota setkali například při popisu zvukové karty Adlib či SoundBlaster). Díky použití čipu YM2413 bylo možné ve hrách poměrně jednoduše přehrávat hudbu, aniž by docházelo k přílišné zátěži mikroprocesoru. Navíc má YM2413 specifický zvuk, kterým bylo možné konzoli Sega Master System a taktéž MSX odlišit od dalších výrobků.
Poznámka: MSX jsme se zatím úspěšně vyhýbali, takže jen stručně: jedná se o počítač založený na procesoru Zilog Z80, který měl ambice se stát jakousi obdobou IBM PC, ovšem v oblasti osmibitových počítačů – tedy standardní platformou. S nadsázkou se říkalo, že MSX znamená „MicroSoft eXtended“, a to kvůli angažovanosti Microsoftu na vývoji této platformy.
Obrázek 4: Plošný spoj herní konzole Sega Master System (SMS).
Z pohledu Collapse OS a jeho teoretického nasazení však není důležitý zvuk, ale spíše obrazový výstup. V herní konzoli Sega Master System byl pro generování video signálů použit čip nazvaný VDC. Jednalo se o integrovaný obvod, který byl sice odvozený od původního čipu Texas Instruments TMS9918, ovšem došlo u něj k několika vylepšením, která měla za cíl zvýšit konkurenceschopnost konzole SMS, především v porovnání s Atari 7800, která firmě Sega tehdy konkurovala. Čip Texas Instruments TMS9918 dokázal pracovat s maximálně šestnácti barvami, zatímco Atari 7800 umožňovalo zobrazit (i když s mnoha omezeními) až 128 resp. 256 barev. Taktéž rozlišení v grafických režimech, které bylo nabízeno čipem TMS9918, bylo relativně malé. Z tohoto důvodu došlo při návrhu integrovaného obvodu VDC k několika změnám. Zejména bylo možné pracovat až s 32 barvami rozdělenými do dvou barvových palet – jedna paleta byla vyhrazena pro statickou grafiku (pozadí) a druhá paleta byla vyhrazena pro sprity (ve skutečnosti mohla být použita pro pozadí i sprity stejná paleta).
Obrázek 5: Ukázka možností původního grafického řadiče: hra Castle.
U barvové palety ještě na malou chvíli zůstaneme. Zatímco u TMS9918 byla šestnáctibarevná paleta neměnná, takže všechny hry bez rozdílu námětu používaly stále stejných šestnáct barev, bylo možné u VDC barvovou paletu, přesněji řečeno obě barvové palety měnit, protože čip VDC podporoval takzvanou „color RAM“ obsahující dvě tabulky, každou o délce šestnácti bajtů. Každá barva v paletě byla zadána jedním bajtem: 00RRGGBB, tj. pro každou barvovou složku byly vyhrazeny dva bity a tudíž byl celkový počet kombinací barev roven 64. Možná se to může zdát málo, ovšem například grafická karta EGA, jejíž cena byla v polovině osmdesátých let minulého století srovnatelná s celou konzolí Sega Master System :-) měla prakticky stejná omezení, alespoň co se týče barvové palety.
Obrázek 6: Ukázka možností původního grafického řadiče: hra H.E.R.O.
20. Odkazy na Internetu
- Collapse OS
https://collapseos.org/ - Public Domain Books to Restart Computer Technology
https://blogbyjoshcogliati.blogspot.com/2021/05/public-domain-books-to-restart-computer.html - Understanding Digital Computers
https://archive.org/details/understanding_digital_computers - Collapse OS Web Emulators
https://schierlm.github.io/CollapseOS-Web-Emulator/ - Download: CollapseOS
https://collapseos.org/download.html - Civboot: a civilizational bootstrapper
https://github.com/civboot/civboot - Můžeme věřit překladačům? Projekty řešící schéma „důvěřivé důvěry“
https://www.root.cz/clanky/muzeme-verit-prekladacum-projekty-resici-schema-duverive-duvery/ - ‚Collapse OS‘ Is An Open-Source Operating System For the Post-Apocalypse
https://news.slashdot.org/story/19/10/08/2036204/collapse-os-is-an-open-source-operating-system-for-the-post-apocalypse - LCD 16 × 2 Basics
https://exploreembedded.com/wiki/LCD16_x2_Basics - How To Control an I2C LCD with Arduino
https://www.make-it.ca/i2c-lcd-display-on-arduino/ - SD Standard Overview
https://www.sdcard.org/developers/sd-standard-overview/ - Sega Master System Hardware
http://www.smspower.org/Development/Documents - SMS/GG hardware notes
http://www.smspower.org/uploads/Development/smstech-20021112.txt?sid=28c370e1fcac51d5774319979bf96f4c - Sega Master System Museum
http://alexkidd.com/ - Jadeite's Sega Master System Museum
http://rp_gamer.tripod.com/SMS/1.html - YM2413 FM Operator Type-LL (OPLL) Application Manual
http://www.smspower.org/maxim/Documents/YM2413ApplicationManual?sid=28c370e1fcac51d5774319979bf96f4c - Sega Master System (Wikipedia)
http://en.wikipedia.org/wiki/Sega_Master_System - Sega Card (Wikipedia)
http://en.wikipedia.org/wiki/Sega_Card - Sega Master System VDP documentation
http://www.smspower.org/uploads/Development/msvdp-20021112.txt?sid=28c370e1fcac51d5774319979bf96f4c - Programovací jazyk Forth a zásobníkové procesory
http://www.root.cz/clanky/programovaci-jazyk-forth-a-zasobnikove-procesory/ - Seriál Programovací jazyk Forth
http://www.root.cz/serialy/programovaci-jazyk-forth/ - Programovací jazyk Factor
http://www.root.cz/clanky/programovaci-jazyk-factor/ - Grafický metaformát PostScript
http://www.root.cz/clanky/graficky-metaformat-postscript/