Tentokrát si dáme zase jednu exkurzi do historie – za výtvorem společnosti RCA, který rozhodně není zapomenutý.

RCA, neboli Radio Corporation of America, byla americká společnost, která vyráběla elektroniku od roku 1919 až do roku 1985, kdy ji převzala zpět společnost General Electric (která ji kdysi na začátku 20. století spoluzakládala). Její historie je velmi zajímavá, dovolte tedy drobnou odbočku.

RCA koupila například v roce 1929 společnost Victor Talking Machine Company, výrobce fonografů a, mimo jiné, většinového vlastníka společnosti Victor Company of Japan (JVC). S touto společností přešla na RCA práva k užívání loga s Nipperem.

Že nevíte, kdo byl Nipper? To je možné, ale tenhle obrázek určitě znáte.

<figcaption id="figcaption\_attachment\_541" class="wp-caption-text">Nipper sleduje fonograf, Francis Barraud, 1895</figcaption>

Nipper je samozřejmě ten pes. Victor Talking Machine použila podobný obrázek, jen místo fonografu dali gramofon, ve své reklamě i se sloganem „His Master’s Voice“. Ale zpět k RCA.

Tato firma stojí i za dalším ikonickým obrázkem:

Ano, první „monoskop“ (televizní testovací obrazec). V roce 1939 totiž RCA na Světové výstavě představila první elektronický televizní systém a začala prodávat první televizory.

V laboratořích RCA vznikla spousta dalších významných inovací – barevná televize, technologie CMOS, LCD, videorekordér, … RCA později (do roku 1971) vyráběla například i počítače (Spectra 70). Svou výrobu domácích spotřebičů prodala Whirlpoolu, znát můžeme nahrávací společnost RCA/Ariola, později RCA Records. Zkrátka, není toho málo.

RCA CDP1802

V roce 1976 uvedla RCA na trh mikroprocesor CDP1802. Byl vyrobený technologií CMOS, vyvinutou právě v RCA pod názvem COS-MOS (COmplementary Silicon / Metal-Oxid-Semiconductor). 1802 byl známý taky pod názvem COSMAC. Prý „Complementary Symmetry Monolithic Array Computer“, ale spíš bych si tipl, že se tam odráží ta technologie COS-MOS.

V letech 1970-1971 vyvinul Joseph Weisbecker vlastní architekturu mikroprocesoru. RCA vytvořila nejprve (v roce 1975) dva čipy 1801R a 1801U, a později je sloučila do jednoho obvodu 1802.

CDP1802 má několik vlastností, které jej výrazně odlišují od hlavních konkurentů té doby (6800, 6502, 8080, Z80). Například jádro CDP1802 je statické – znamená to tedy, že je možné zpomalit hodiny na minimum, dokonce je i zastavit, a procesor neztratí data z vnitřních registrů.

CDP1802 adresuje, podobně jako ostatní mikroprocesory té doby, 64 kB paměti. Uvnitř obsahuje šestnáct šestnáctibitových registrů (R0-R15), které jsou, až na dvě výjimky, plně ortogonální. Akumulátor, v němž se provádějí aritmetické operace, je osmibitový a je označený D. Procesor obsahuje i dva čtyřbitové registry P a X. Registr X udává, který z registrů R0-R15 funguje jako indexový registr pro přístup k datům, registr P pak říká, který z registrů R0-R15 funguje jako programový čítač. Ano, CDP1802 nemá dedikovaný registr PC (Program Counter), místo něj používá vždy jeden z registrů R0-R15.

Je to celé trošku divoké, a zvyknout si na to dá člověku, zvyklému na architekturu 8080/6800 a odvozené, trochu práce. Tak například procesor nemá zásobník. Na co taky, když nemá instrukci CALL. Zato má hned dvě instrukce RET – jedna při návratu povolí přerušení, druhá ho zakáže. Jak se volá podprogram? No, do nějakého registru si dáte jeho adresu, a pak řeknete: Ty teď budeš program counter! A na konci řeknete: Program counter je zase ten původní…

Samozřejmě, existují instrukce, které uloží „něco jako stav“ – tedy registry P a X – na „něco jako zásobník“, tedy do paměti, adresované buď registrem RX (tedy registrem, jehož číslo je v registru X), nebo registrem R2. Tohle je právě ta výjimka z ortogonality, spolu s tím, že registr R0 je používán pro přenos DMA, registr R1 je program counter při přerušení a jediná instrukce, kterou by šlo považovat za jakous-takous instrukci pracujíc se zásobníkem, používá k adresování R2.

Procesor CDP1802 má i jeden datový výstup (Q) a čtyři datové vstupy (EF1-EF4). Instrukční sada obsahuje instrukce Set Q (SEQ) a Reset Q (REQ). Pro testování vstupů pak jsou podmíněné skoky B1, B2, B3, B4, BN1, BN2, BN3, BN4 – skáče se, pokud je vstup = 1, resp. pokud je roven 0 (u varianty BN).

Skoky jsou osmibitové, ale nikoli relativní. Pouze se vezme osmibitová adresa a vloží se do nižšího byte registru PC (= registru R, jehož číslo je v registru P… Zvykejte si!) Hranici 256 byte normálním (krátkým) skokem nepřeskočíte. Naštěstí existují i instrukce dlouhého skoku s absolutní adresou.

Ke skokům připočtěme i instrukce „přeskoků“, včetně podmíněných – totiž instrukce, které umožňují přeskočit následující jeden nebo dva byty.

Když píšu „podmíněné“, tak si nepředstavujte nějakou podmínkovou bonanzu. Kdepak. Podmínky jsou buď podle datových vstupů EF, podle stavu výstupu Q, nebo podle toho, jestli je registr D roven nule. Jediný podmínkový příznak je DF, a ten odpovídá příznaku přenosu (CY). Testovat můžete stav příznaku povoleného přerušení (IE), a to instrukcí LSIE. Pokud je IE=1, přeskočí se následující dva bajty.

Existují instrukce pro přesun dat mezi pamětí a registrem D, adresované buď konkrétním registrem, nebo registrem, jehož číslo je v X. Jsou i varianty s postinkrementací a postdekrementací. Na druhou stranu nejsou instrukce pro přímou práci s registry R – pokud chcete do registru uložit nějakou hodnotu, musíte ji ukládat nadvakrát přes registr D. Instrukce PLO, PHI (Put Low / High) a GLO, GHI (Get Low / High) přenesou data mezi registrem D a dolní, resp. horní polovinou vybraného registru.

Procesor má navíc možnost přímo adresovat sedm vstupně / výstupních portů (instrukcemi INP 1 – INP 7 a OUT 1 – OUT 7), kdy probíhá přenos z / do paměti na adrese, která je v RX. Kromě toho oplývá i zabudovaným řadičem DMA: po spuštění přenáší byty z / do paměti, adresované registrem R0.

<figcaption id="figcaption\_attachment\_544" class="wp-caption-text">CDP1802D (Autor: ZyMOS, Wikimedia)</figcaption>

 

Použití

Říkáte si „Kdo by něco takového, proboha, použil?“ Inu, tehdy ještě nebyla v lidech zafixovaná architektura 8080/6800, tak měli možná otevřenější přístup. Snad. Doufám. Po výše uvedeném popisu vás jistě nepřekvapí, že první vyšší programovací jazyk pro tento procesor byl FORTH. Na druhou stranu má CDP1802 některé výhody, především pak možnost zastavit hodiny procesoru a snížit tak jeho odběr na naprosté minimum. Jeho instrukční sada má, i přes všechny podivnosti, několik zajímavých rysů: Naprostá většina instrukcí trvá dva strojové cykly (každý 8 taktů hodin), až na vzácné výjimky, které trvají 3 cykly. Počítání času je tedy velmi jednoduché. No a navíc instrukční soubor obsahuje instrukci SEX.

Minimální odběr oceníte, když děláte třeba, hmmm… vesmírnou sondu. V mnoha sondách právě tento procesor je. Ostatně, od Intersilu si jej můžete objednat ve variantě se zvýšenou odolností proti radiaci. Jen se připravte na to, že to není nejlevnější špás…

CDP1802 byl použit v legendárních počítačích COSMAC ELF a COSMAC VIP, v herní konzoli RCA System II, a využívaly ho i jugoslávské počítače Pecom 32 a Pecom 64.

RCA vyráběla vylepšenou variantu CDP1804 – tento procesor uměl víc instrukcí (třeba i CALL), obsahoval i časovač a měl integrovanou RAM a ROM. Verze CDP1805 byla bez ROM, verze CDP1806 i bez RAM.

Jo a do ASM80.com jsem přidal podporu pro tento procesor. Můžete teď překládat zdrojové kódy a můžete je i debuggovat. Přípona souboru je .a18