Minulé díly seriálu:
Kapitola 1 - Zpátky do roku 1960Kapitola 1 - ErrataKapitola 2 - Rat RaceMinipočítač TWELVEKapitola 4 - Pomněnkový salátTahle pochoutka měla být lék na zlepšení paměti v jedné staré televizní pohádce, ale asi to moc nefunguje, protože obvyklá praxe zapomnětlivých lidí je dosud, jako už odedávna, vázat si uzel na kapesníku. Takový uzel může být buď zavázaný nebo rozvázaný, což jsou právě dva různé stavy, takže pojme informaci o velikosti jednoho bitu. To není nic moc, a není to ani moc užitečné, ale průměrný kapesník má čtyři rohy, je tedy čtyřbitový. Do toho už by se nějaká ta zpráva zakódovat dala, pokud by někdo chtěl nosit v kapse chuchvalec uzlů.
I počítače si potřebují pamatovat, a je to vlastně to nejdůležitější co musí dělat, aby vůbec mohly něco dělat. Takže tohle byla první věc, kterou jsem začal řešit - jak si v počítači něco zapamatovat. Jenže počítače kapesníky nemívají, zato mívají klopné obvody. Ty se nevážou, ale přepínají mezi jedničkou a nulou, což jsou také dva různé stavy. Jedničkám a nulám totiž počítače rozumějí trochu lépe než uzlování, proto ho radši přenechávají skautíkům a jiným pišišvorům.
"Nestřílejte na pianistu, dělá, co může."To prý žádal nápis nad barem kdysi kdesi ve Skalistých horách. Proto aby bylo předem jasno, na oldcompu je nemálo lidí, kteří tomuhle, co tu popisuji, rozumí mnohem lépe než já, a nebál bych se přímo říci že tomu rozumí. Na rozdíl ode mě. Tak na mě nestřílejte, dělám co můžu, i když vím že by to šlo udělat lépe.
Ale rád si o tom popovídám a někdy si nechám i trochu poradit.
Takže půjdeme rovnou na věc. O pamatování se v TWELVE stará paměťová jednotka -
MEMORY UNIT. Paměť v ní je dvojího druhu - rychlá a pomalá. Ta rychlá jsou registry, se kterými pracuje procesor přímo, pomalá - jinak také operační - je umístěná na magnetickém bubnu. Nebo v jiném podobném médiu, pokud by se případnému (dostatečně šílenému) staviteli nechtělo soustružit několikakilogramový hliníkový kotouč, lisovat do něj ložiska, vyvažovat ho, a polévat feritovým roztokem. O nastavování spousty zápisových a čtecích hlav nemluvě.
Tahle kapitola je věnovaná pouze té rychlé paměti - registrové bance, ve které se mohou vyskytovat pouze právě zpracovávaná data.
Každý bit je uložený v jedné paměťové buňce, složené z několika hradel. Buňky ve TWELVE jsou tří různých druhů:
LATCHNejjednodušší typ paměťové buňky je LATCH - závora, do které se po otevření vstupu
(závora nahoru) něco zapíše, a po jeho zavření
(závora dolů) je to na jejím výstupu pořád, až dokud se tam nezapíše něco jiného. Do takových závor jsou uložené příznaky
C,
D,
E a
F, také se z nich skládá instrukční registr
OPCODE v řadiči a pomocné registry
DATA a
WORK na sběrnici
LOAD.
Na jednu závoru stačí čtyři hradla NAND.
REGISTERProtože univerzálních registrů je víc - osm, ale číst je potřeba vždy jen z jednoho, jsou tyhle buňky o maličko složitější. REGISTER je vlastně závora, která má na výstupu navíc hradlo AND, to otevírá nebo zavírá i ten výstup, a připojuje ho ke sběrnici
LOAD. Skoro jako by byly závory z obou stran.
Z těchhle buněk jsou poskládané registry
R0 až
R6, je jich proto nejvíc.
COUNTERNejkomplikovanější je registr
R7, který má umět úplně stejné věci jako ostatní univerzální registry, ale navíc musí fungovat jako čítač - COUNTER, protože pracuje jako
PROGRAM COUNTER. Dá se do něj libovolně zapisovat, otevřít nebo zavřít výstup, a umí si sám k sobě přičíst jedničku! Přičemž stav čítače se mění se sestupnou hranou signálu STEP, vzestupná ho na to připraví. Mezitím se dá číst jako obyčejný registr, na výstupu zůstává stále původní hodnota. Pokud by během inkrementace došlo k zápisu, nebo naopak, vyhraje ten stav, jehož signál se vypne později, ale takovou rvačku nesmí v tomhle baru šerif - řadič dovolit.
Tady už jsem těch hradel potřeboval trochu víc, dvanáct na každý bit. NAND, AND, OR. Dalo by se to i zjednodušit.
Takhle vypadají zapojení všech tří druhů paměťových buněk:
Pro otestování jejich funkce, a aby je bylo vidět tak trochu v pohybu, jsem si udělal malou "simulaci", rozmístění hradel odpovídá jejich pozici na schématu:
https://www.youtube.com/watch?v=90fg23X2XoUInu, co nedovede legendární
VisiCalc ze sedmdesátých let, to ani dnes prostě nepotřebuješ
"Jako v kampeličce."Co si uložíme, to máme. Později si to můžeme zase vyzvednout a použít, na rozdíl od klientů zkrachovalých kampeliček, ze kterých už nevyzvedne nikdo nic. Dokonce můžeme uložený obsah vybrat víckrát, a on tam pořád je! Zajímavý model pro banky, ale asi by se jim moc nelíbil. Jenže na rozdíl od bank, když si potom uložíme něco jiného, tak to co tam bylo předtím jednoduše zmizí. To už by se bankám líbilo mnohem víc, a v historii bylo dost případů které se o něco podobného pokoušely.
Ve TWELVE můžeme ukládat a vybírat přímo do/z osmi účtů - registrů, pojmenovaných
R0 až
R7. Kromě toho registrová banka obsahuje i všechny čtyři příznaky. Nic dalšího tam není.
Práce s registrovou bankou je jednoduchá. Řadič vyšle jeden z osmi signálů
Rx, který otevře výstup jednoho z osmi registrů. Tím se na jejich společném výstupu z registrové banky výstupu objeví požadovaná data. Pokud je potřeba do otevřeného registru zapsat novou hodnotu, pošle řadič signál pro zápis, a do aktuálně vybraného registru se zapíší data ze vstupu. Současně se zapíší i všechny čtyři příznaky. Jejich stav je na výstupu neustále, ty není potřeba nijak otevírat.
Některé vývody jednotlivých paměťových buněk jsou tu umístěné trochu jinak než na prvním obrázku, takže tady jsou vysvětlivky pro lepší přehlednost:
Popis schématu registrové banky bude celkem stručný:
- Zleva vstupuje šestnáct bitů ze sběrnice STORE, doprava vystupuje šestnáct bitů na sběrnici LOAD a na vstup adresy bubnu. Celkem 12 datových (0..B) a 4 příznaky (C..F).
- Dole jsou linky pro výběr registru řadičem a krokovací signál STEP čítače v R7. Vybraný registr otevře svůj výstup a je možné do něj zapisovat. Signálem STEP se R7 inkrementuje na další adresu v pořadí.
- Vlevo dole jsou dva signály pro zápis. SAVE zapisuje na magnetický buben, STORE do registrů, a každý z nich zapisuje příznaky. Vždy se zapíše všech šestnáct bitů, datové buď do registru nebo na buben.
- Vpravo nahoře vychází signál STOP, vyvolaný přetečením čítače, který zastaví vykonávání programu při přechodu z adresy 4095 na 0 (nebo chcete-li, z FFF na 000). Poslední slovo na bubnu je tedy i posledním slovem programu, není možné pamětí rotovat pořád dokola.
"Sečteno, podtrženo."Jak jsem psal v první kapitole, tak tady jsem si dopřál trochu luxusu a použil osm univerzálních registrů, z nichž každý může fungovat jako akumulátor, nebo ukazatel do paměti, nebo počítadlo, nebo jako obyčejný registr. A to všechno dohromady. Akorát ten
R7 se nesmí měnit úplně libovolně bez rozmyslu, protože je používán jako
PROGRAM COUNTER, a ono by to pak skákalo kdovíkam
Ale je fakt že luxus něco stojí, a jestli dobře počítám, je na tuhle poměrně malou část počítače potřeba 609 hradel, což je ve srovnání s tím zbytkem poměrně dost. Ale na druhou stranu, máme tu k dispozici rovných 100 okamžitě použitelných bitů, což také není úplně málo. Na řízení obyčejné automatické pračky, nebo podobného aparátu, stačí mnohem méně.
Na závěr si ještě vyzkoušíme čítání
R7, zkráceného na čtyři bity, aby se vešel na obrazovku:
https://www.youtube.com/watch?v=A2Lv6y7HFYoK tomu asi není co dodávat, snad jen že po signálu
STOP se dokončí právě rozpracovaná instrukce a další se už nenačte. Kolotoč v řadiči se zastaví a program skončí, stejně jako tahle kapitola.