Kód RPP – 16

Úvod

Keď som ľahkovážne sľúbil, že napíšem niečo o návrhu strojového kódu pre RPP-16, som nevedel na akú ťažkú úlohu som sa podujal. Navrhovať strojový kód v rokoch 1962 – 1965 bolo niečo úplne iné, ako písať o tom v roku 2016. Za tých 50 rokov som aj veľa zabudol, Mali sme už nejaké vzory, ale vtedy to bola relatívne tvorivá inžinierska práca. Vedelo sa, že sa na návrhu sa  prakticky nedá veľa pokaziť. Človek by musel mať dosť veľkú smolu, aby bez úmyslu navrhol kód, v ktorom sa nedá niečo naprogramovať. Kód sa navrhoval pre programovanie v jazyku symbolických adries.

Dnes nás zaujíma programovanie vo vyšších jazykoch a kompatibilita s predošlými modelmi, aby nebolo nutné znovu vyvíjať programové vybavenie.

Nebudem podrobne popisovať všetky inštrukcie. Radšej sa pokúsim priblížiť dobu, moje aktivity ktoré súviseli s návrhom RPP. Mnohé veci nám vtedy neboli jasné (aspoň mne) a až čas ich plne osvetlil.

Prečo RPP 16?

Bola to taká doba. Politickým rozhodnutím strany a vlády počítače mohol vyvíjať len VÚMS Praha. Keď sme chceli niečo robiť nesmel to byť počítač. Akademik Plander vymyslel RPP – skratka pre rýchly programový procesor (riadiaci počítač). Vtipne sme ju preložili „ručné posuvné počítadlo“.  Šestnástka má tiež svoju históriu. Pôvodne malo ísť o 24 bitový riadiaci počítač. Najprv sme robili návrh strojového kódu pre 24 bitový počítač. Predpokladal som 4 bity pre kód inštrukcie, 4 bity pre modifikáciu adresy a 16 bitov pre adresu.  Akademikovi sa však nakoniec podarilo zohnať 16 bitovú pamäť (pamäte boli v tej dobe vzácne a drahé) 4096 šestnásť bitových slov to bol hotový luxus. Tak sme už začatý návrh prerobili na 16 bitový počítač.

Prvý prototyp zostrojil náš mechanik Emil Weishammer. Zavesil na niekoľko drôtikov 16 vypálených tranzistorov a ručné posuvné počítadlo bolo na svete. Dlho sme ho mali na stole.

Základná koncepcia akademika Plandera bola kopírovať. Vraj základný výskum je drahý a môžu si ho dovoliť len bohaté štáty. Dnes sa takýto prístup ľahko kritizuje, ale keď nebolo nič, možno bol užitočný. Kopírovaním sme sa aj učili. Hoci sme mali na slovenské pomery dostatok vzorov, nie všetko bolo tak dôkladne popísané, aby sa to dalo jednoducho okopírovať. Navyše, boli sme mladí a dosť arogantní na to, aby sme vlastné riešenie považovali za lepšie ako vzor.

V tejto súvislosti si spomínam na stretnutie s profesorom Antonínom Svobodom (IBM, VUMS). Stretli sme sa pri príležitosti nejakého zápasu československej šachovej ligy v Dobříši. Pomerne rýchlo sme sa zhodli. Hlavne na zápornom postoji k vtedajšiemu režimu. Prezentoval som aj niektoré idei RPP. „Áa Plander. Dělat binární paralelní počítač – to je pro blbé.“ Našťastie, starý pán sa mýlil. Už po desiatich rokoch počítač, ktorý nebol binárny paralelný, bol exotická výnimka.

Team realizátorov: Adka Chudá, Ivan Kočiš a ja.

Inšpiračné vzory: RC 4000 (návrh), PDP 8, Varian, ZRA-1, Gier.

Základné princípy

Adresovateľnosť všetkých hardvérových registrov. Lineárna pamäť registre, prerušovací systém, operačná pamäť, všetko bolo očíslované od 0 ( PC-register inštrukcii), po koniec operačnej pamäti. Registre sa dali adresovať aj ako bunky pamäti. Inštrukcie sme popisovali v GIER Algole 4. Inšpirovali sme sa príručkou jazyka symbolických adries (asembler) pre počítač GIER.  Pán Christian Gram tu ďaleko predstihol dobu popisom inštrukcii v Algole. Približne v tom čase vymysleli niekoľko jazykov na popis hardware, ale neujali sa. Začiatkom sedemdesiatych rokov Pér Brinch Hansen a Nico Haberman navrhli použitie Wirthovho jazyka Pascal. Zvolili sme používanú verziu programovacieho jazyka, čo umožnilo simuláciu RPP-16 a ladenie programov na počítači GIER, skôr ako bol vyrobený nejaký kus hardware. Spolu s Dušanom Ondrušom sme napísali simulačný program. Mal dve úrovne jednu relatívne podrobnú, ktorá umožňovala sledovať časovanie inštrukcií druhú zameranú len na simuláciu stavu (výsledku inštrukcií). Dôvodom bolo, že prvá úroveň bola príliš pomalá na simuláciu reálnych programov. Krátky príspevok o simulácii vyšiel v zborníku: Stroje na zpracování informací, vydávanom ČSAV.

Architektúra

Pôvodne sme chceli robiť 24 bitový paralelný riadiaci počítač. Mnou preferovaný vzor RC 4000 bol tiež 24 bitový. Pér Brinch Hansen mal seriózne argumenty pre 24 bitové slovo a 12 bitový byte. Kdesi som čítal, alebo som si vsugeroval, že dĺžka počítačového slova má byť tvaru (2 pow n)(3 pow m) Páčili sa mi dĺžky, ktoré majú veľa deliteľov (12, 24, 48, 72). Tak sme architektúru a inštrukcie navrhovali pre 24 bitový počítač. Bity sme číslovali ako rády v čísle z prava do ľava. Bity 0-11 mali byť venované adrese. Priama adresovateľnosť 4096 slov bola na tú dobu prijateľná. Bity 12-23 boli určené postupne pre adresnú modifikáciu, operačný register a kód inštrukcie. Keďže RPP mal mať 8 operačných registrov použiteľných pre aritmetiku aj indexáciu, zostávalo na kód inštrukcii málo priestoru (4 alebo 5 bitov). Nerobili sme si z toho ťažkú hlavu, Minského stroj (jeden z teoretických modelov počítača) vystačil s tromi inštrukciami.  Dnes vieme, že aj jediná inštrukcia stačí. Nešli sme do extrémnej minimalizácie, chceli sme, aby sa pohodlne písali programy aj v asembleri.

Základné inštrukcie:

Prenos medzi registrami a pamäťou: LD prines do registra, ST zapamätaj register.

Aritmetika:     +, -, *, /

Bitové operácie (bit-fiddling):

Logické po bitoch:      EOR (plus mod 2), AND (&)

            Posuny:                       obyčajný, cyklický, normalizačný

           Vetvenie:         if 0, if < 0, nepárne, pretečenie (overflow)

Vstup – výstup –  prerušenia (interrupts)

Schéma RPP:

 

Obr.1: Blokový diagram architektúry počítača RPP16

Škaredý názov jednotka medzistyku sme neskôr zmenili na jednotka styku s prostredím (JSP). Riadiaca jednotka okrem synchronizácie a dekódovania inštrukcií obsluhovala aj prerušovací systém.

Chceli sme autonómne (múdre) periférie. Ovplyvnil ma čítač papierovej pásky od Regnencentralen. Podobné zariadenie od Facit, či našej výroby pracovalo v cykle: posuň pásku o jeden znak, zastav, prečítaj znak. Urobiť 1 000 cyklov za minútu som považoval za technický zázrak. Navyše každá operácia cyklu vyžadovala aspoň jeden príkaz počítača. Rozhodli sme sa, že vstupno-výstupné inštrukcie nastavia v JSP nejaké registre a spustia nezávislú operáciu a eventuálne realizujú prerušenie.

Vetvenie bola z pohľadu inštrukčného kódu jediná inštrukcia. RPP mal register indikácii. Indikácie sa generovali automaticky po každej inštrukcii. Inštrukcia vetvenia adresovala príslušný bit, ak mal požadovanú hodnotu obskočila sa nasledujúca inštrukcia.

Obr.2: Indikácie výnimočných stavov vykonávania inštrukcií

Logické operácie po bitoch sa robili cez maskovací register. Doporučil to Ivan Kočiš.

            A:= A˄ Mask op Cell[address]

Asi to nemá veľký význam, ale je to všeobecnejšia operácia. Kto, to nepoužíva môže mať maskovací register nastavený trvale na samé jednotky.

Hoci sme z počiatku nepočítali s aritmetikou v pohyblivej čiarke, zaviedli sme normalizačný posun pre dva po sebe idúce registre (dvojnej dĺžky) s tým, že uľahčí programovú realizáciu aritmetiky v pohyblivej čiarke.

Aritmetika s delenými prenosmi

Keď už maskovací register používame, prečo ho nevyužiť na blokovanie prenosov v aritmetických operáciach. Cez bity, kde je v maske 1 prenos do vyšších rádov neprechádza. Čo je to za hlúpy nápad a prečo? V tých časoch mnoho počítačov používalo 6-bitový byte – číslice, veľké písmena latinskej abecedy a zopár znakov nám stačia. IBM presadzovalo 8-bitový byte, Brinch-Hansen navrhoval 12‑bitový byte. Počítač s 24‑bitovým slovom môže pracovať paralelne s dvomi 12‑bitovými, tromi 8‑bitovými a štyrmi 6‑bitovými bytmi. Zovšeobecnenie na iné delenie slova asi málo využiteľný bonus. Miro Grečný prototyp sumátora (16‑bitového) s delenými prenosmi aj realizoval. Pravdepodobne bol použitý vo funkčnej vzorke RPP-16.

Boli sme amatéri a pri práci sme sa bavili. Bohužiaľ, nebol medzi nami žiaden „Bill Gates“, ktorý by v tomto momente bežal na patentový úrad. Keby bol, možno by sme dnes brali tantiemivo výške slovenského štátneho rozpočtu. Motivácia bola slabá, pri krátkom 16‑bitovom slove delenie prenosov nemalo praktický význam. Bola to jedna z prvých vecí, čo pri uvedení do výroby bola odstránená. Nápad za milióny dolárov prišiel predčasne a v nevhodnom prostredí. Neskôr si ho nechal patentovať Intel, ako MMX inštrukcie. Funguje im iba delenie 128‑bitového slova na 64, 32, 16 a 8 bitové časti.

Dodatočné inštrukcie

Mali sme aj skok do podprogramu JS a návrat JR. Mali sme už určité znalosti o kompilátoroch a nevyužiteľnosti podobných inštrukcii pri rekurzívnom programovaní. Snažil som sa ich vylepšiť. Predpokladám, že sa to nepodarilo a vznikli dve komplikované a málo využiteľné inštrukcie.

Inštrukcie sa delili na „šité“ (mikroprogramované) a interpretované. Interpretované inštrukcie, nemajú veľký význam, nahradí ich makroprocesor (inline makrá), alebo knižnica inštrukčných podprogramov. Zvyšuje to pohodlie pri manuálnom programovaní v jazyku symbolických adries a vývojári programového vybavenia sa nemusia starať, akú verziu hardware majú k dispozícii.

Pýtali sa ma, či som v čase návrhu RPP už vedel niečo o architektúre RISC (Reduced Instruction Set Computer). Samozrejme nie. Tú navrhli v Berkeley University až začiatkom osemdesiatych rokov. Architektúra RPP nebola typu RISC napriek malému počtu inštrukcii.

Základný inštrukčný cyklus bol veľmi komplexný, modifikácie adresy, relatívne adresy, rekurzívna nepriama adresácia to je hrubé porušenie princípu jednoduchosti RISC architektúry. Navyše RISC inštrukcie boli optimalizované pre programovanie v jazyku C a implemetáciu operačného systému Unix. My sme viac uvažovali o programovaní v jazyku symbolických adries a vyšších jazykoch Fortran (Edo Kostolanský a Janko Chovanec) a Algol 60. Bol som silne orientovaný na Algol 60, bol to vplyv pobytu v Regnencentralen, počítača Gier a mojej prvej informatickej knihy „Введение в кибернетику“. Okrem matematických základov informatiky v nej bol popísaný jazyk Algol 60.

Prekvapenie na záver

Akademik Plander zohnal pamäť. Plessey 4096 18 bitových slov. Chvíľu som si to myslel, že 18 bitov sa bude dať použiť. Stále som vedel ešte uchovať 5 bitov na kód inštrukcie. Skutočnosť bola 2 osem bitové byty a dva bity na kontrolu parity. Výsledok bol moderný počítač, 16 bitové slovo a osem bitový byte. Vznikol RPP-16.

Menšie zlo bolo, že sme museli všetky úvahy a zdôvodnenia prepracovať, že je to najlepšie riešenie pre riadiaci procesor.

To horšie bolo, že zostalo málo priestoru pre inštrukcie.  Vznikli tak inštrukcie jednoslovné medzi registrové a dvojslovné pre operácie s pamäťou a dokonca aj troj-slovné (dvoj-adresové). Tým pádom sa muselo zaviesť zložitejšie kódovanie inštrukcii. Podľa spoločnej časti kódu sa rozoznalo aká to bude inštrukcia a každý typ mal iné kódovanie. Naraz bolo v inštrukčnom slove priestoru dosť. Inštrukcie sa rozmnožili. Potrebovali sme inštrukciu vetvenia, ktorá preskočí nasledujúce slovo aj inštrukciu vetvenia, ktorá preskočí dve a tri nasledujúce slová.

Logické operácie po bitoch som navrhol pôvodne EOR a AND s tým, že je to úplný súbor booleovských operácii a ľahko sa ich pomocou simuluje sumátor. Programátori však boli zvyknutí na klasické OR, AND, NOT. Tak sme OR pridali.

Najväčšiu aktivitu v pridávaní inštrukcií prejavil Ivan Kočiš. Vždy prišiel. „Hodila by sa táto inštrukcia. Karol Richter povedal, že sa ľahko urobí. Keď sa. čo len raz použije pri programovaní operačného systému bude to veľký prínos.“ Adka Chudá a ja sme väčšinou nenamietali. Pamätám si len jeden prípad, kedy som jeho návrh odmietol. Bol to algoritmus pre zrýchlenie inštrukcii násobenie a delenia. Aby sa dal realizovať, bolo treba spomaliť základný takt počítača. Pomohla mi Adka. ZRA mala kvalitné podprogramy a štatistiky o použití inštrukcií v programoch.

Súčasne s návrhom kódu Dušan Ondruš programoval prekladač jazyka symbolických adries ( asembler).  Ja som naprogramoval „primitívny zavádzací program“. Program, ktorý dokázal načítať zavádzací program (loader). Zadával s z ovládacieho panelu a stačilo zadať 15 inštrukcii. Tento program najprv vylepšil Janko Chovanec a oveľa neskôr Palo Lamačka.

Ostatné aktivity

Návrh architektúry a inštrukčného kódu bola moja hlavná činnosť v období 1965 – 1970 na ÚTK.  V súvislosti s RPP som sa istý čas zaoberal spoľahlivosťou aritmeticko-logickej jednotky. Navštevoval som semináre z teórie kódovania na ÚTIA Praha.

Keď sme sa priblížili k realizácii funkčnej vzorky RPP-16, inžinieri potrebovali, minimalizovať prepojenia medzi jednotlivými doskami počítača (trávu). Tak sme s Dušanom Ondrušom a Jarkou Melotovou vyrobili program na tento účel.

Spoľahlivosť ALU

V časoch minulých neboli počítače veľmi spoľahlivé často sa vyskytovali náhodné chyby. Akademik Plander ma orientoval na výskum kódov pre rozpoznanie chýb a opravu samotná aritmetika nerobila problémy. Brownové kódy už boli známe. Horšie to bolo s logickými operáciami po bitoch. Nedarilo sa mi nič rozumné vymyslieť. Nakoniec som sa, kdesi v ruskej literatúre, dohrabal k matematickému dôkazu, že sa to nedá robiť lepšie ako zopakovaním alebo zdvojením celej operácie. Približne v tom čase navštívil náš ústav profesor David Edwards z Manchesteru. Na moju prezentáciu reagoval krátko a výstižne: „That will be no computer, it will be checker.“ Navyše technológia pokročila, tranzistory a feritové jadrá boli oveľa spoľahlivejšie ako elektrónkové počítače. Objavili sa integrované obvody. Tak nakoniec, žiadne detekčné a opravné kódy okrem kontroly parity v pamäti v RPP neboli.

Tráva

Minimalizácia prepojenia medzi n bodmi je problém Steinerovho stromu. Problém bol známy, ale algoritmus na jeho riešenie sme nepoznali. (Je to NP-ťažký problém). Po dohode s Ivanom Kočišom a Karolom Richterom sme sa rozhodli pre minimálnu kostru grafu. S Dušanom Ondrušom a Jarkou Melotovou sme naprogramovali naívnym spôsobom (bez prioritnej fronty) Dijkstra-Kruskalov algoritmus. Aj tak to bol na tú dobu úspech. O zložitých dátových štrukturách sa vtedy ešte veľa nevedelo. Algoritmus som prezentoval na konferencii v Budapesti.

Záver

Vonkajšie okolnosti, normalizačný proces v roku 1970, spôsobili, že som ukončil prácu na ÚTK‑SAV. Človek, ktorý robil DrSc. v Moskve uveril, že Československo prepadlo Sovietsky zväz a naháňal kontrarevolucionárov na ústave. Môj názor, že kontrarevolucionár je ten, čo má v pivnici zbrane a na slová treba odpovedať slovami nikdy neuznal. Odmietol som, čokoľvek odvolať. Na koniec  to za mňa urobila Jarka Gábelová. Asi to neplatilo. Sovietov som od roku 1968 považoval za okupantov a komunistickú stranu za zločineckú organizáciu.

Prácu na kóde RPP-16 a jeho zdokumentovanie dokončila skupina pod vedením Marušky Postulkovej.

Ján ŠTURC, Júl 2017

Komentáre sú uzavreté.