RCA 1802: poslední mohykán osmibitové éry mikroprocesorů

15. 9. 2020
Doba čtení: 21 minut

Sdílet

Na stránkách Roota jsme si již popsali prakticky všechny významné osmibitové mikroprocesory první i druhé generace. Zatím jen okrajově jsme zmínili čip RCA 1802, který je významný i tím, že byl použit v několika kosmických projektech.

Obsah

1. RCA 1802: poslední mohykán osmibitové éry mikroprocesorů

2. Od čipů 1801U a 1801R k mikroprocesoru 1802

3. Mikroprocesor RCA 1802 a jeho konkurenti

4. Rozhraní čipu RCA 1802

5. Architektura čipu RCA 1802

6. Sada registrů

7. Adresovací režimy

8. Instrukční sada čipu RCA 1802

9. Podrobnější pohled na instrukční sadu

10. Operace s registry (přesuny dat)

11. Práce s operační pamětí

12. Aritmetické operace

13. Logické operace

14. Krátké skoky

15. Dlouhé skoky

16. Vstupně-výstupní operace

17. Mikroprocesor RCA 1802 v současnosti

18. Obsah druhé části článku

19. Literatura

20. Odkazy na Internetu

1. RCA 1802: poslední mohykán osmibitové éry mikroprocesorů

Na stránkách Roota jsme si již popsali většinu slavných osmibitových mikroprocesorů první generace (Intel 8008, Intel 8080, Motorola 6800, MOS 6502) i druhé generace (Zilog Z80, Motorola 6809). Taktéž jsme se zabývali vývojem osmibitových mikrořadičů (Intel 8048, Intel 8051, Motorola 68HC05, 68HC08, PIC…). Ovšem prozatím jsme se jen velmi okrajově zmínili o dalším důležitém osmibitovém čipu, který byl používán jak ve funkci mikroprocesoru, tak i mikrořadiče. Jedná se o čip nazvaný RCA 1802 a jeho význam tkví mj. i v tom, že byl použit hned v několika kosmických projektech.

Obrázek 1: Slavná sonda Galileo.

Pravděpodobně nejznámější je jeho využití v planetární sondě Galileo (použito bylo celkem šest čipů RCA 1802) nebo v raketoplánech (Space Shuttle), kde byl později nahrazen výkonnějším čipem 80386 (s velkou pravděpodobností ve variantě 80386EX). Nalézt jsme ho mohli i ve slavných letadlech Boeing 737 (těch poctivých bez přílepky MAX), v Hubbleově teleskopu, v sondě Magellan atd.

Obrázek 2: Satelity SATCOM vyrobené a provozované společností RCA.

Poznámka: mimochodem – použití RCA 1802, resp. 80386, tedy obecně dostupných čipů (pro kosmické programy ovšem vyrobené jinou technologií), je v kosmických programech spíše výjimečné, protože se zde můžeme setkat se specializovanými čipy 1750A nebo RAD6000 (což jsou však později navržené a vyrobené mikroprocesory).

RCA 1802, resp. mikroprocesory se stejnou architekturou, jsou stále komerčně dostupné (a to za dosti nehorázné ceny), takže se jedná o 44 let starou technologii, která stále nachází své využití. A zapomenout nesmíme ani na relativně rozsáhlou základnu fanoušků tohoto čipu, což do značné míry souvisí s počítačem ELF zmíněným v dalším textu. Na druhou stranu se RCA 1802 z několika důvodů nepodařilo použít v komerčně úspěšných herních konzolích nebo domácích mikropočítačích, takže v tomto ohledu můžeme tento čip považovat za poněkud neúspěšný.

Obrázek 3: Raketoplán discovery původně vybavený čipy RCA 1802 (a samozřejmě i stovkami dalších integrovaných obvodů).

2. Od čipů 1801U a 1801R k mikroprocesoru 1802

„This microprocessor is so good that even RCA is not really aware of how good it is.“

Vznik čipu, který je dnes známý pod označením RCA 1802, datujeme už na začátek sedmdesátých let minulého století. Tehdy totiž vznikla koncepce mikroprocesoru, která byla poprvé na komerční bázi realizována čipem Intel 4004 (i když RCA byla tomuto cíli taktéž velmi blízko). Již v roce 1975 vyvinul Joseph Weisbecker (ještě se o něm několikrát zmíníme v dalším textu, protože se jedná o klíčovou postavu celého projektu) osmibitovou architekturu založenou na dvou čipech označovaných 1801U a 1801R. V roce 1976 tým vedený Jerry Herzogem tyto čipy spojil do jediného integrovaného obvodu, který nesl název 1802. Jednalo se o čip postavený na technologii CMOS, což se ukázalo být velmi užitečné a důležité, protože se 1802 používal i jako mikrořadič, který bez problémů „přežil“ i snížení hodinové frekvence na 0 Hz (tedy zastavení hodin) s opětovným rozběhnutím (jinými slovy – všechny registry musely být statické).

Poznámka: někdy se v souvislosti s 1802 setkáme se zkratkou COSMAC, která znamená „Complementary Symmetry Monolithic Array Computer“.

Obrázek 4: Čip RCA 1802.

3. Mikroprocesor RCA 1802 a jeho konkurenti

Nový typ mikroprocesoru, jehož plné jméno je RCA CDP1802 (dnes již jen RCA 1802 nebo mezi znalci „eighteen oh two“), začal být na trh dodáván v roce 1976. V tomto kontextu je dobré se podívat i na mikroprocesory a mikrořadiče, které vznikly v první polovině sedmdesátých let minulého století (pro úplnost jsem přidal i čipy ze druhé generace, tj. především Zilog Z80 a Intel 8085, oba tyto čipy stavěly na Intel 8080, kterou vylepšovaly, popř. „jen“ zmenšovaly počet nutných pomocných obvodů a počet napájecích napětí):

# Čip Vznik Typ čipu
1 Intel 4004 1971 čtyřbitový mikroprocesor
2 Intel 8008 1972 osmibitový mikroprocesor
3 Intel 8080 1974 osmibitový mikroprocesor
4 Motorola 6800 1974 osmibitový mikroprocesor
5 MOS 6502 1975 osmibitový mikroprocesor
     
6 RCA 1802 1976 osmibitový mikroprocesor
     
7 Zilog Z80 1976 osmibitový mikroprocesor
8 Intel 8085 1976 osmibitový mikroprocesor
9 Intel 8048 1976 osmibitový mikrořadič
Poznámka: můžeme vidět, že se RCA 1802 ocitl ve velmi dobré společnosti :-)

RCA 1802 byl postupně dodáván v několika variantách, které se odlišovaly například maximálním hodinovým cyklem a rozsahem napájecího napětí:

# Označení Maximální frekvence Rozsah napájecího napětí
1 CDP1802C 2.5 MHz ( 5V) 4 – 6.5V
2 CDP1802 5.0 MHz (10V) 4 – 10.5V
3 CDP1802AC 3.2 MHz ( 5V) 4 – 6.5V
4 CDP1802A 6.4 MHz (10V) 4 – 10.5V
5 CDP1802BC 5.0 MHz ( 5V) 4 – 6.5V
Poznámka: čip RCA 1802 vyžadoval pouze jedno napájecí napětí ve značně velkém rozsahu (viz tabulku). To bylo velmi užitečné a současně se jednalo o velký kontrast například s čipem Intel 8080, který vyžadoval hned tři napájecí napětí (+12V, +5V, –5V), které navíc nesmělo příliš kolísat. Navíc – i když se jednalo o použití mimo meze udávané výrobcem – bylo možné čip provozovat i na 12V (a takových zdrojů bylo dostupných poměrně hodně, ostatně RCA 1802 se používal mj. i pro řízení zapalování v některých automobilech).

4. Rozhraní čipu RCA 1802

V této kapitole se zaměříme na popis rozhraní mikroprocesoru RCA 1802, tedy především vstupních a výstupních pinů určených pro připojení pamětí, popř. dalších periferních zařízení. Klasická verze RCA 1802 byla dodávána v DIP pouzdru se čtyřiceti piny, podobně jako naprostá většina tehdejších mikroprocesorů a mikrořadičů. Zapojení těchto čtyřiceti pinů je ukázáno na následujícím obrázku:

Obrázek 5: Piny mikroprocesoru RCA 1802.

Vcc, Vss a Vdd jsou určeny pro napájení. Připomeňme si, že čip byl vyráběn v technologii CMOS a jeho napájecí napětí mohlo být zvoleno v širokém rozhraní od 4V do 10,5V (ovšem bez problémů i 12V).

Na obrázku vidíme i piny pro osmibitovou jednosměrnou adresovou sběrnici. Čip sice používal šestnáctibitové adresy, ovšem adresa byla posílána po osmi bitech (vyšší bajt následovaný bajtem nižším). To – společně s piny pro řízení sběrnice – umožňovalo snadno připojit i paměti s osmibitovou adresou, paměti vybavené záchytným registrem (latch) pro polovinu adresy atd.

Dále čip obsahoval osm obousměrných pinů představujících datovou sběrnici. Zajímavý je pin označený Q. Jedná se o jednobitový výstup. To se může zdát málo (a pochopitelně v porovnání s mikrořadiči to i málo je), ovšem pro mnoho amatérských výrobků byl i jednobitový výstup – který nepotřeboval žádné další podpůrné obvody typu 8255 – užitečný. Je ovšem možné použít ještě další tři výstupy N0, N1 a N2 ovládané instrukcí OUT – za předpokladu, že tyto piny nejsou využity pro řízení periferních zařízení.

Poznámka: podobné piny najdeme i u mikrořadiče Intel 8048, který začal být na trh dodáván ve stejné době.

Důležité jsou i piny určené pro DMA, tedy přímý přístup do paměti. Tyto piny umožňovaly programování počítače ELF, o němž se zmíníme později. Řadič DMA, kterým je RCA 1802 vybaven, totiž umožňuje načítat programy do paměti bez jakéhokoli obslužného SW. To umožňuje vytvořit mikropočítače založené na RCA 1802, které mají jen minimum komponent – pouze několik přepínačů, tlačítek a pomocných logických integrovaných obvodů.

Poznámka: jedná se o takzvaný „load mode“ řízený signály CLEAR a WAIT.

5. Architektura čipu RCA 1802

Čip RCA 1802 používal architekturu, která je značně odlišná od všech tehdy existujících osmibitových čipů. Odlišnost spočívá především ve způsobu využití pracovních registrů, které sloužily i pro adresování operandů v operační paměti (což není novinka, v tomto exceluje například MOS 6502), ovšem u RCA 1802 se jedná o jediný způsob, jak přistupovat k operační paměti. Čip byl navíc velmi ortogonální, například neobsahoval čítač instrukcí – tím mohl být libovolný pracovní registr. Podobným způsobem bylo možné vybrat index registr. Tyto rozdíly – nemožnost přímé adresace paměti, volba registru pro čítač instrukcí, neexistence zásobníku atd. – znamenaly, že se RCA 1802 programoval dosti odlišným způsobem, než všechny tehdejší mikroprocesory.

Obrázek 6: Blokový diagram čipu RCA 1802.

Poznámka: toto řešení je sice velmi flexibilní, ale samotný čip byl ve zpracování instrukcí velmi pomalý v porovnání s konkurencí. Většina instrukcí byla provedena v šestnácti hodinových cyklech, ovšem některé až ve 24 cyklech. Naproti tomu MOS 6502, i když býval provozován na nižších frekvencích, dokázal nejrychlejší instrukce zpracovat ve dvou cyklech a nesložitější instrukce (nepřímé adresování s registrem Y) byly provedeny v sedmi cyklech. Právě pomalé zpracování instrukcí byl jeden z důvodů, proč nebyl RCA 1802 použit v domácích mikropočítačích.

6. Sada registrů

Celá sada registrů čipu RCA 1802 (neboli programátorský model) je vypsána v následující tabulce:

# Označení Počet bitů Stručný popis
1 D 8 akumulátor (zde nazývaný data register)
2 R0-RF 16 pracovní registry (scratch-pad) používané pro adresování
3 P 4 výběr jednoho z registrů R0-RF, který bude sloužit jako čítač instrukcí
4 X 4 výběr jednoho z registrů R0-RF, který bude sloužit jako index registr
5 N 4 registr nastavovaný podle dolních čtyř bitů instrukce (typicky obsahuje index registru R0-RF)
6 I 4 registr nastavovaný podle horních čtyř bitů instrukce (typicky obsahuje operační kód, viz další text)
7 T 8 dočasný registr (temporary) používaný několika instrukcemi
8 A 16 interně používaný pro adresování
9 DF 1 příznakový registr DF používaný instrukcemi ADD a SHIFT pro registraci přetečení
10 Q 1 jednobitový registr Q řídicí výstup označený taktéž Q
Poznámka: takto velká sada statických registrů zvyšovala potřebný počet tranzistorů a tím i velikost a cenu čipu. Naproti tomu konkurenční MOS 6502, který byl používán právě pro svoji nízkou cenu, měl jen minimální počet registrů: osmibitový akumulátor, dva indexové registry, osmibitový ukazatel na vrchol zásobníku, 16bitový čítač instrukcí a sedmibitový příznakový registr.

7. Adresovací režimy

Čip RCA 1802 používá v instrukcích tři základní adresovací režimy:

  1. Register: číslo (index) registru, s nímž se má operace provést, je uložen ve spodních čtyřech bitech instrukčního slova. Příkladem mohou být instrukce DEC a GET LOW (GLO).
  2. Register-Indirect: ve spodních bitech instrukce je uloženo číslo (index) registru, který obsahuje adresu operandu. Podobné adresování nalezneme v MOS 6502 nebo u 8048 (omezeno na @R0 a @R1).
  3. Immediate: operand (data) jsou uloženy v dalším bajtu za načtenou instrukcí. Konkrétně se jedná o adresu uloženou v R(P), tedy v takovém pracovním registru, jehož číslo (index) je uložen v registru P.
Poznámka: zajímavé je porovnání adresování s konkurenčním čipem MOS 6502, který používá celkem třináct adresovacích režimů, které jsou navíc rozděleny podle typů instrukcí (skoky, aritmeticko-logické instrukce, načtení konstanty atd.). Většina aritmeticko-logických instrukcí existuje v osmi variantách, které se od sebe odlišují právě způsobem adresování. Mnoho adresovacích režimů používá registry X a Y, které jsou ovšem osmibitové, takže je jejich využití někdy omezené (o to však rychlejší).

8. Instrukční sada čipu RCA 1802

V předchozích kapitolách jsme si řekli, že samotná architektura čipu RCA 1802 se dosti podstatným způsobem odlišovala od dalších osmibitových mikroprocesorů, které vznikly v první polovině sedmdesátých let minulého století. Týká se to i instrukční sady, která je ovšem na druhou stranu navržena takovým způsobem, aby byla co nejvíce regulární a navíc i snadno zapamatovatelná při použití hexadecimálních kódů instrukcí. Jednobajtový operační kód instrukce je totiž rozdělen na dvě čtyřbitové části, které jsou při načtení instrukce uloženy do čtyřbitových registrů I a N. U mnoha typů instrukcí obsahuje registr N číslo (index) pracovního registru, se kterým se operace provádí (druhým registrem je většinou implicitně akumulátor D). Podívejme se nejprve na tabulku zobrazující skupiny instrukcí pro všechny možné kombinace dvou hexadecimálních číslic:

Obrázek 7: Skupiny instrukcí v instrukční sadě RCA 1802.

Z tabulky je patrné, že instrukce jsou podle obsahu prvních čtyř bitů (I) rozděleny do šestnácti skupin, které si ve stručnosti popíšeme v navazující kapitole.

Poznámka: dalším mikroprocesorem pocházejícím ze stejného období, který má do značné míry pravidelnou instrukční sadu, která se dala snadno naučit nazpaměť, byl čip Intel 8008, jenž se používal například pro řízení semaforů (v USA). Ovšem zatímco u RCA 1802 je instrukční bajt rozdělen na dva čtyřbitové nibbly (a tedy dvojici hexadecimálních číslic), je u Intel 8008 použito rozdělení na tři části: 2 bity + 3 bity + 3 bity, takže je kód instrukce lepší zapisovat v osmičkové soustavě, aby se ukázala její pravidelnost. Viz například tabulku dostupnou na adrese https://www.bytecollector­.com/archive/mark8/My_Mark-8_Info/Software/8008_Refe­renceCard.PDF. Čtvrtina instrukcí je typu ALU s akumulátorem a pracovním registrem (zcela pravidelná tabulka), další čtvrtina pak přesun mezi dvěma registry (s výjimkou paměť:paměť).

9. Podrobnější pohled na instrukční sadu

Pojďme se nyní do větších podrobností podívat na instrukční sadu mikroprocesoru RCA 1802 podrobněji. Víme již, že instrukce jsou rozděleny do šestnácti skupin, které si postupně popíšeme. Každá skupina je jednoznačně identifikována hodnotou prvního nibblu instrukčního slova, který je při načítání instrukce ukládán do registru I. Podle typu instrukce rozpoznáváme tyto typy:

  1. Operace s registry (přesuny dat)
  2. Práce s operační pamětí
  3. Aritmetické operace
  4. Logické operace
  5. Skoky
  6. Přeskočení (vynechání) instrukce
  7. Řízení (přerušení atd.)
  8. Vstupně-výstupní operace (jednobitový výstup, čtyřbitové vstupy atd.)

Z toho důvodu, že skupina instrukce je určena nejvyššími čtyřmi bity instrukčního slova, budou v dalších tabulkách hodnoty těchto čtyř bitů zapsány do sloupce I (protože se tato hodnota vždy do registru I ukládala).

Poznámka: obsazeno je 255 z 256 možných operačních kódů instrukcí, ovšem některé kombinace operace a operandů nejsou prakticky používané.

10. Operace s registry (přesuny dat)

Celá čtvrtina operačních kódů, tedy 64 kombinací, je vyhrazena pro přesuny dat mezi registry, konkrétně vždy mezi akumulátorem D a vybraným pracovním registrem Rn. Existují celkem čtyři instrukce, které začínají písmenem G (Get) nebo P (Put), za kterým následuje HI, pokud se používá horní bajt registru Rn nebo LO, pokud je čtení/zápis proveden do spodního bajtu:

# I Instrukce Stručný popis
1 8 GLO přesun nižšího bajtu registru Rn do akumulátoru D
2 9 GHI přesun vyššího bajtu registru Rn do akumulátoru D
3 A PLO přesun hodnoty akumulátoru D do dolního bajtu registru Rn
4 B PHI přesun hodnoty akumulátoru D do horního bajtu registru Rn
       
5 D SEP zápis čtyř bitů do registru P (volba čítače instrukcí)
6 E SEX zápis čtyř bitů do registru X (volba index registru)
       
7 E LDI načtení osmibitové konstanty do akumulátoru
Poznámka: povšimněte si, že neexistuje možnost přímého přesunu dat mezi dvěma registry Rn a Rm. To do značné míry komplikovalo vývoj programů; ostatně se stejným problémem se potýkali i programátoři používající původní mikrořadiče Intel 8048 a Intel 8051 (až další polooficiální rozšíření instrukční sady tyto instrukce přidalo).

11. Práce s operační pamětí

Mikroprocesor RCA 1802 obsahoval i instrukce umožňující čtení operandů z operační paměti, popř. zápis operandů do paměti. Tato operace byla vždy prováděna mezi pamětí a akumulátorem, ovšem s tím, že adresa pro čtení/zápis byla uložena v některém pracovním registru Rn – adresa tedy nebyla součástí instrukčního slova, což dosti podstatným způsobem komplikovalo (resp. přesněji řečeno prodlužovalo) algoritmy typu „přesuň bajt z adresy X na adresu Y“):

# I Instrukce Stručný popis
1 0 LDN načtení obsahu paměti z adresy uložené v registru Rn a uložení hodnoty do akumulátoru D
2 4 LDA jako instrukce LDN, ovšem obsah registru Rn se zvýší o jedničku
3 5 STR uložení obsahu akumulátoru na adresu uloženou v registru Rn
       
4 F LDX přečtení dat z adresy uložené v registru R(X) (zvolený index registr)
5 7 LDXA přečtení dat z adresy uložené v registru R(X) (zvolený index registr); zvýšení obsahu index registru
6 7 STXD zápis dat na adresu uloženou v registru R(X) (zvolený index registr); snížení obsahu index registru
Poznámka: díky existenci instrukce LDA bylo například možné zpracovávat pole, a to jednodušeji, než u konkurenčních čipů (LDA = Load Advance).

12. Aritmetické operace

Další poměrně velkou skupinu instrukcí představují aritmetické operace. Celou šestnáctinu operačních kódů zabírá instrukce INC, která slouží pro zvýšení obsahu vybraného registru Rn o jedničku, a to bez detekce přetečení. Podobně v instrukčním kód nalezneme instrukci DEC, která obsah vybraného registru Rn snižuje. Existuje i možnost zvýšit obsah registru, jehož index je uložen v registru X. Další aritmetické instrukce vždy používají jako jeden ze svých operandů akumulátor D:

# I Instrukce Stručný popis
1 1 INC zvýšení obsahu registru Rn o jedničku
2 2 DEC snížení obsahu registru Rn o jedničku
       
3 6 IRX zvýšení obsahu registru, jehož číslo je uloženo v X
       
4 F ADD součet D s obsahem buňky adresované R(X)
5 7 ADC součet D s obsahem buňky adresované R(X) (s přenosem)
6 F SD rozdíl D od obsahu buňky adresované R(X)
7 7 SDB rozdíl D od obsahu buňky adresované R(X) (s výpůjčkou)
6 F SM rozdíl D od obsahu buňky adresované R(X)
8 7 SMB jako SDB, ovšem s otočením operandů
       
9 F ADI součet D a bajtu uloženého za instrukcí
10 F SDI rozdíl D a bajtu uloženého za instrukcí
11 F SMI jako SDBI, ovšem s otočením operandů
       
12 7 ADCI součet D a bajtu uloženého za instrukcí (s přenosem)
13 7 SDBI rozdíl D a bajtu uloženého za instrukcí (s přenosem)
14 7 SMBI jako SDBI, ovšem s otočením operandů (s přenosem)

13. Logické operace

Následují instrukce určené pro logické operace a bitové rotace:

# I Instrukce Stručný popis
1 F SHR aritmetický posun doprava (posun osmi bitů)
2 F SHL aritmetický posun doleva (posun osmi bitů)
3 7 SHRC bitová rotace doprava přes příznak DF (rotace devíti bitů)
4 7 SHLC bitová rotace doleva přes příznak DF (rotace devíti bitů)
       
5 F OR operace OR mezi akumulátorem D a buňkou R(X)
6 F AND operace AND mezi akumulátorem D a buňkou R(X)
7 F XOR operace XOR mezi akumulátorem D a buňkou R(X)
       
8 F ORI operace OR mezi akumulátorem D a osmibitovou konstantou
9 F ANI operace AND mezi akumulátorem D a osmibitovou konstantou
10 F XRI operace XOR mezi akumulátorem D a osmibitovou konstantou

14. Krátké skoky a přeskočení bajtu

Pro řízení běhu programu se používají nepodmíněné a podmíněné skoky. Za operačním kódem instrukce následuje další bajt představující dolních osm bitů cílové adresy (horních osm bitů je uloženo v registru R(P)). Povšimněte si zde velkého rozdílu oproti dalším typům mikroprocesorů – instrukce nahradí dolní bajt cílové adresy, nejedná se tedy o relativní skok ve smyslu, že lze skákat například v rozsahu –128 až 127 adres (relativní skoky jsou výhodnější v tom, že instrukce skoku může být umístěna kdekoli v operační paměti):

# I Instrukce Stručný popis
1 3 BR krátký nepodmíněný skok
       
2 3 BQ krátký podmíněný skok podle obsahu jednobitového registru Q (musí být nulový)
3 3 BNQ krátký podmíněný skok podle obsahu jednobitového registru Q (musí být nastaven na 1)
4 3 BZ krátký podmíněný skok v závislosti na tom, zda je akumulátor D nulový
5 3 BNZ krátký podmíněný skok v závislosti na tom, zda je akumulátor D nenulový
       
6 3 BDF krátký podmíněný skok podle obsahu jednobitového registru DF (příznak přenosu je nenulový)
7 3 BPZ alias pro předchozí instrukci (plus or zero)
8 3 BGE alias pro předchozí instrukci (greater or equal)
9 3 BNF krátký podmíněný skok podle obsahu jednobitového registru DF (příznak přenosu je nulový)
10 3 BM alias pro předchozí instrukci (minus)
11 3 BL alias pro předchozí instrukci (less)
       
12 3 B1 krátký podmíněný skok podle stavu pinu EF1 (nastaven na jedničku)
13 3 B2 krátký podmíněný skok podle stavu pinu EF2 (nastaven na jedničku)
14 3 B3 krátký podmíněný skok podle stavu pinu EF3 (nastaven na jedničku)
15 3 B4 krátký podmíněný skok podle stavu pinu EF4 (nastaven na jedničku)
       
16 3 BN1 krátký podmíněný skok podle stavu pinu EF1 (nastaven na nulu)
17 3 BN2 krátký podmíněný skok podle stavu pinu EF2 (nastaven na nulu)
18 3 BN3 krátký podmíněný skok podle stavu pinu EF3 (nastaven na nulu)
19 3 BN4 krátký podmíněný skok podle stavu pinu EF4 (nastaven na nulu)
       
20 3 SKP další bajt je ignorován (tedy jakoby se jedná o skok, jehož podmínka není nikdy splněna, opak BR)
Poznámka: zde se ukazují „mikrořadičové“ vlastnosti RCA 1802 – podmínky ve skocích přímo obsahovaly test na hodnotu jednoho ze čtyř vstupních pinů. Taktéž stojí za povšimnutí přímý test na nulovost, resp. nenulovost akumulátoru bez nutnosti existence příznakového bitu Z.

15. Dlouhé skoky a instrukce pro podmíněné přeskočení dvou bajtů

Jedná se o jediné instrukce, které modifikují celých šestnáct bitů čítače instrukcí, tedy registru R(P). Adresa je v tomto případě uložena ve dvou bajtech za instrukcí (kromě instrukce RET):

# I Instrukce Stručný popis
1 7 RET skok na adresu uloženou na adrese R(X)
       
2 C LBR dlouhý nepodmíněný skok
       
3 C LBQ dlouhý podmíněný skok podle obsahu jednobitového registru Q (musí být nulový)
4 C LBNQ dlouhý podmíněný skok podle obsahu jednobitového registru Q (musí být nastaven na 1)
5 C LBZ dlouhý podmíněný skok v závislosti na tom, zda je akumulátor D nulový
6 C LBNZ dlouhý podmíněný skok v závislosti na tom, zda je akumulátor D nenulový
       
7 C LBDF dlouhý podmíněný skok podle obsahu jednobitového registru DF (příznak přenosu je nenulový)
8 C LBNF dlouhý podmíněný skok podle obsahu jednobitového registru DF (příznak přenosu je nulový)

Následují instrukce, které při platné podmínce přeskočí následující dva bajty (bez ohledu na jejich obsah):

# I Instrukce Stručný popis
1 C LSQ přeskok při Q==1
2 C LSNQ přeskok při Q==0
3 C LSZ přeskok při D==0 (akumulátor)
4 C LSNZ přeskok při D!=0
5 C LSDF přeskok při DF==1 (příznak přetečení)
6 C LSNF přeskok při DF==0
7 C LSIE přeskok při IE=1 (Interrupt Enable)
8 C LSKP přeskok za jakýchkoli okolností

16. Vstupně-výstupní operace

Poslední skupina instrukcí zahrnuje především různé vstupně-výstupní operace:

# I Instrukce Stručný popis
1 0 IDL čekání na I/O operaci (DMA-IN, DMA-OUT, INT), ve skutečnosti se instrukce IDL provádí v cyklu stále dokola (procesor není zastaven)
       
2 6 OUT výstup bajtu adresovaného pomocí R(X) je poslán na datovou sběrnici + ovládání výstupů N0, N1 nebo N2
3 6 INP přečtení vstupu z datové sběrnice a uložení na R(X)
       
4 7 REQ vynulování jednobitového registru Q a tím pádem i pinu Q
5 7 SEQ nastavené (na jedničku) jednobitového registru Q a tím pádem i pinu Q
6 7 DIS zákaz přerušení

17. Mikroprocesor RCA 1802 v současnosti

RCA 1802 má stále – neuvěřitelných 44 let po svém vzniku – velmi věrnou skupinu uživatelů a fanoušků (což lze ostatně říci o všech výše jmenovaných osmibitových čipech, snad s výjimkou Intelu 4004 a 8008), ovšem z hlediska „globální popularity“ měl tak trochu smůlu, protože nebyl použit v žádném úspěšném domácím mikropočítači a i jeho použití v herní konzoli bylo prakticky stoprocentně zastíněno fenomenálně úspěšnou herní konzolí Atari 2600 (založené na zjednodušené variantě čipu MOS 6502). Dnes se RCA 1802 využívá v amatérských konstrukcích, v nichž se typicky instalují původní čipy RCA (ne ty nově vyrobené – ty jsou příliš drahé). RCA 1802 byl převeden i na FPGA, a to například v projektu používajícím SpinalHDL, popř. existuje i alternativní verze ve Verilogu.

Poznámka: skutečně je patrný rozdíl mezi fanoušky čipu RCA 1802, kteří jsou více zaměřeni na elektroniku a například fanoušky čipů MOS 6502 či Zilog Z80, u nichž převažuje orientace na použití těchto slavných mikroprocesorů v domácích osmibitových mikropočítačích.

18. Obsah druhé části článku

Již v úvodní kapitole jsme si řekli, že čip RCA 1802 je známý mj. i tím, že byl použit – a to dokonce několikrát – v kosmickém programu, v letadlech a s velkou pravděpodobností i v armádních projektech. Existovalo totiž několik technologicky odlišných variant tohoto čipu, z nichž nejzajímavější je varianta používající technologii SOS neboli silicon on sapphire. Tato technologie umožňuje produkovat čipy s větší odolností proti záření, včetně (samozřejmě jen do určité míry) záření ionizujícímu. A právě tato zvýšená odolnost je vyžadována v kosmickém prostoru i pro vojenské aplikace.

Obrázek 8: Mikropočítač ELF (autor: Paul Schmidt).

bitcoin školení listopad 24

Druhou oblastí, v níž se mikroprocesor RCA 1802 rozšířil, bylo zcela odlišné spektrum uživatelů. Jednalo se (a vlastně se i stále jedná) o elektroniky, kteří si sestavovali vlastní mikropočítače. A jeden z absolutně nejjednodušších mikropočítačů vůbec je založen právě na dnes popisovaném mikroprocesoru. Tento mikropočítač, který je programován zadáváním obsahu jednotlivých bajtů ukládaných do operační paměti pomocí osmi přepínačů, se nazývá COSMAC ELF a jeho popisem se budeme zabývat příště.

Obrázek 9: Mikropočítač Netronic ELF.

19. Literatura

  1. A Radiation-Hardened Bulk Si-Gate Microprocessor Family, R.E. Stricker, A.G.F. Dingwall, S. Cohen, J.R. Adams, and W.C. Slemmer
    IEEE Conference on Nuclear and Space Radiation Effects,
    Santa Cruz, CA, July 17–20, 1979
  2. Rapid Annealing Response of the Hardened 1802 Bulk CMOS Microprocessor, John Scarpulla, Robert Mozulay, Christine Ausnit, Edward W. Hogan, and Richard H. Casey
    IEEE Transactions on Nuclear Science, Vol. NS-27, No. 6 December 1980
  3. U.S Shah,
    Microprocessor and its applications

20. Odkazy na Internetu

  1. RCA 1802 (Wikipedia)
    https://en.wikipedia.org/wi­ki/RCA_1802
  2. Great Microprocessors of the Past and Present (V 13.4.0)
    http://www.cpushack.com/CPU/cpu.html
  3. Chip Hall of Fame: RCA CDP 1802
    https://spectrum.ieee.org/se­miconductors/processors/chip-hall-of-fame-rca-cdp-1802
  4. The CPUs of Spacecraft: Computers in Space
    http://cpushack.com/space-craft-cpu.html
  5. Part I: RCA 1802, weirdness at its best (1974)
    http://www.cpushack.com/CPU/cpu2­.html#Sec2Part1
  6. Embedded Processor and Microcontroller primer and FAQ
    http://www.faqs.org/faqs/mi­crocontroller-faq/primer/
  7. COSMAC ELF: The CDP1802’s Place in Microcomputing History
    http://www.cosmacelf.com/
  8. Cosmac 1802
    http://www.nyx.net/~lturner/pu­blic_html/Cosmac.html
  9. CDP1802AC/3: High-Reliability CMOS 8-Bit Microprocessor
    https://www.renesas.com/e­u/en/www/doc/datasheet/cdp1802ac-3.pdf
  10. A Short Course In Programming
    http://www.ittybittycompu­ters.com/IttyBitty/ShortCor­.htm
  11. The 1802 Instruction Set
    https://www.atarimagazines­.com/computeii/issue3/page52­.php
  12. Jak se zrodil procesor?
    https://www.root.cz/clanky/jak-se-zrodil-procesor/
  13. Osmibitové mikroprocesory a mikrořadiče firmy Motorola (1)
    https://www.root.cz/clanky/osmibitove-mikroprocesory-a-mikroradice-firmy-motorola-1/
  14. Mikrořadiče a jejich použití v jednoduchých mikropočítačích
    https://www.root.cz/clanky/mikroradice-a-jejich-pouziti-v-jednoduchych-mikropocitacich/
  15. Mikrořadiče a jejich aplikace v jednoduchých mikropočítačích (2)
    https://www.root.cz/clanky/mikroradice-a-jejich-aplikace-v-jednoduchych-mikropocitacich-2/
  16. Československé osmibitové počítače
    https://www.root.cz/clanky/ces­koslovenske-osmibitove-pocitace/
  17. 25 Microchips That Shook the World
    https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world
  18. COSMAC 1802: history of microprocessors in space
    https://www.retrotechnolo­gy.com/memship/1802_space­craft.html
  19. COSMAC 1802 on AMSATs running IPS
    https://www.retrotechnolo­gy.com/memship/amsat.html
  20. Technické informace o sondě Galileo
    https://www.retrotechnolo­gy.com/memship/galileo.txt
  21. COSMAC “ELF” Microcomputer Trainer User’s Manual:
    http://www.cosmacelf.com/pu­blications/books/cosmac-elf-manual.pdf
  22. RCA COSMAC MICROPROCESSOR
    http://www.decodesystems.com/cosmac/
  23. Netronics ELF II
    https://oldcomputers.net/netronics-elf.html
  24. Netronics Elf II
    http://www.qwkslva.com/Mu­seum/Netronics_Elf/netronic­s_elf.html
  25. Assorted COSMAC Computers
    http://www.cosmacelf.com/ga­llery/assorted-cosmac-computers.html
  26. RCA 1802 COSMAC (plocha čipu)
    http://visual6502.org/ima­ges/pages/RCA_1802_die_shot­s.html
  27. Joseph Weisbecker
    https://en.wikipedia.org/wi­ki/Joseph_Weisbecker
  28. Joe Weisbecker Video Game Collection
    https://digital.hagley.org/weisbecker
  29. CDP1802A
    https://www.renesas.com/us/en/pro­ducts/space-harsh-environment/harsh-environment/microprocessors-peripherals/device/CDP1802A­.html#overviewInfo
  30. Grafické karty a grafické akcelerátory (7)
    https://www.root.cz/clanky/graficke-karty-a-graficke-akceleratory-7/
  31. Osmibitové mikrořadiče Rabbit: praví dědicové mikroprocesoru Zilog Z80
    https://www.root.cz/clanky/osmibitove-mikroradice-rabbit-pravi-dedicove-mikroprocesoru-zilog-z80
  32. Čtyřicet let existence slavných mikroprocesorů řady Motorola 68000
    https://www.root.cz/clanky/ctyricet-let-existence-slavnych-mikroprocesoru-rady-motorola-68000/
  33. Intel 8008 Instruction Set
    https://www.bytecollector­.com/archive/mark8/My_Mark-8_Info/Software/8008_ReferenceCard.PDF
  34. Intel 8008 instruction set
    https://www.pastraiser.com/cpu/i8008/i8008_op­codes.html
  35. Silicon on sapphire
    https://en.wikipedia.org/wi­ki/Silicon_on_sapphire
  36. COSMAC ELF Lives Again, In FPGA
    https://hackaday.com/2020/01/23/cosmac-elf-lives-again-in-fpga/
  37. verilog1802
    https://github.com/jamesbow­man/verilog1802
  38. 1802 FIG FORTH
    https://www.retrotechnolo­gy.com/memship/figforth_1802­.html

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.