Obsah
1. Instrukční soubor čipů PIC24 a dsPIC
10. Podmíněné i nepodmíněné skoky
11. Podmíněný přeskok následující instrukce
12. Porovnání operandů s případným podmíněným skokem
13. Obsah následující části seriálu
1. Instrukční soubor čipů PIC24 a dsPIC
Na stručný popis šestnáctibitových mikrořadičů PIC24 a dsPIC dnes navážeme, protože se seznámíme s některými instrukcemi z poměrně rozsáhlého instrukčního souboru těchto čipů. Prozatím se zaměříme na „běžné“ instrukce, které se do značné míry podobají instrukcím známým z dalších již popsaných mikrořadičů (až na jednu výjimku – podmíněné instrukce typu skip). Později se seznámíme i s dalšími instrukcemi, které jsou pro řadu PIC24 a především pak dsPIC unikátní. V následující tabulce jsou dnes popsané instrukce rozděleny do běžných kategorií:
Skupina instrukcí | Počet instrukcí ve skupině |
---|---|
Přesuny dat | 16 |
Aritmetické operace | 14 |
Násobení a dělení | 14 |
Logické operace | 6 |
Bitové posuny a rotace | 7 |
Bitové operace | 12 |
Podmíněné i nepodmíněné skoky | 17 |
Podmíněný přeskok následující instrukce | 6 |
Porovnání operandů s případným podmíněným skokem | 11 |
2. Adresovací režimy
Možnosti adresování byly u čipů PIC24/dsPIC oproti osmibitovým PICům značně rozšířeny. Připomeňme si, že tyto čipy mají Harvardskou architekturu, tj. programová paměť je oddělena od datové paměti. Liší se i struktura těchto pamětí, protože programová paměť používá slova o šířce 24 bitů, kdežto z datové paměti je možné číst operandy o šířce osmi bitů či šestnácti bitů. Programová paměť může mít kapacitu až 4M × 24 bitů a pro adresování instrukcí se používá registr PC o šířce 23 bitů. Nejnižší bit PC je vždy nulový, což vlastně znamená, že se PC vždy zvyšuje o krok 2 (u skoků o sudou hodnotu). Jedná se jen o umělé omezení kvůli částečné zpětné kompatibilitě.
Základní kapacita datové paměti je 64kB neboli 32k slov. Některé čipy umožňují horní polovinu adresního prostoru mapovat na jiné fyzické adresy, což je jedna z forem stránkování (paging). Při adresování operandů je možné použít následující adresní režimy:
- Přímý index registru (ty jsou mapovány na adresy 0×0000 až 0×001Ff
- Nepřímé použití registru (adresy 0×0000 až 0×ffff)
- „File register“, přímá adresa (adresy 0×0000 až 0×1fff). Termín „file register“ je převzat z osmibitových PICů a značí operand uložený přímo v paměti.
První dva adresní režimy používají indexy 0×0 až 0×f na určení libovolného pracovního registru. Při nepřímém adresování je obsah registru použit jako adresa operandu:
Index | Registr | Alternativní funkce/jméno |
---|---|---|
0×0 | W0 | WREG |
0×1 | W1 | |
0×2 | W2 | |
0×3 | W3 | |
0×4 | W4 | |
0×5 | W5 | |
0×6 | W6 | |
0×7 | W7 | |
0×8 | W8 | |
0×9 | W9 | |
0×a | W10 | |
0×b | W11 | |
0×c | W12 | |
0×d | W13 | |
0×e | W14 | Frame pointer |
0×f | W15 | Stack pointer |
Pro instrukce určené pro čtení či zápis do tabulek (table read, table write) se při adresování používá speciální registr TBLPAG obsahující nejvyšších osm bitů adresy začátku tabulky. Čipy PIC24E, některé varianty PIC24F a dsPIC33E navíc obsahují i registry nazvané DSRPAG a DSWPAG rozšiřující možnosti adresování až na 16 megabajtů (resp. přesněji 8 Mslov). Tento adresový prostor se označuje zkratkou EDS neboli Extended Data Space. Registr DSRPAG má šířku deset bitů, registr DSWPAG jen devět bitů.
3. Formát instrukčních slov
24bitová instrukční slova jsou rozdělena do několika bitových polí. Některé instrukce mají v instrukční slovu uloženou i konstantu, ať již se jedná o konstantu se znaménkem (podmíněné skoky) či bez znaménka (adresa „file registru“). Podívejme se na několik možností rozdělení 24bitových slov na jednotlivá pole:
Operační kód | Konstanta | Instrukce |
---|---|---|
8 bitů | 16 bitů | relativní skoky BRA |
11 bitů | 13 bitů | aritmetické instrukce WREG ⊕ file register |
11 bitů | 13 bitů | bitové rotace a posuny s file registrem |
4 bity | 16 bitů | načtení 16bitové konstanty do registru (zbylé čtyři bity tvoří index registru) |
5 bitů | 15 bitů | přesun hodnoty mezi file registrem a pracovním registrem |
Několik instrukcí používá dvě instrukční slova. První slovo vždy udává typ instrukce a část adresy, další slovo je pak zakódováno jako instrukce NOP s až šestnáctibitovou konstantou. Příkladem je instrukce CALL pro absolutní skok na libovolnou (sudou) adresu v programové paměti. V prvním slovu je uložen operační kód instrukce a 16 bitů adresy, ve slovu druhém pak instrukce NOP a zbylých sedm bitů adresy.
4. Přesuny dat
Poměrně rozsáhlá je skupina instrukcí určených pro přenosy dat mezi registry, popř. mezi operační pamětí a vybraným pracovním registrem. Patří sem i instrukce určené pro načtení hodnot do speciálních registrů DSRPAG, DSWPAG a TBLPAG. Poslední dvě instrukce prohazují nibbly (4 bity) nebo bajty ve vybraném pracovním registru:
Instrukce | Stručný popis |
---|---|
MOV WREG, f | přesun z registru WREG do paměti (podporuje i přesun jednoho bajtu) |
MOV Wn, f | přesun z registru Wn do paměti |
MOV f, Wn | opak předchozí instrukce |
MOV Wn, #konstanta8 | načtení osmibitové konstanty |
MOV Wn, #konstanta16 | načtení 16bitové konstanty |
MOV Wn, Wm | přesun dat mezi registry |
EXCH Wn, Wm | prohození dat mezi registry |
MOV.D Ws, Wnd | přesun dvou slov (více adresních režimů) |
MOVPAG #konstanta10, DSRPAG | načtení desetibitové konstanty do registru DSRPAG |
MOVPAG #konstanta9, DSWPAG | načtení devítibitové konstanty do registru DSWPAG |
MOVPAG #konstanta8, TBLPAG | načtení osmibitové konstanty do registru TBLPAG |
MOVPAG Wn, DSRPAG | přenos z registru Wn do registru DSRPAG |
MOVPAG Wn, DSWPAG | přenos z registru Wn do registru DSWPAG |
MOVPAG Wn, TBLPAG | přenos z registru Wn do registru TBLPAG |
SWAP.B Wn | prohození nibblů spodních osmi bitů registru |
SWAP.W Wn | prohození bajtů vybraného registru |
5. Aritmetické operace
Všechny aritmetické instrukce se dvěma zdrojovými operandy podporují několik způsobů určení zdrojových operandů i operandu cílového. V následující tabulce jsou tyto způsoby vypsány pro libovolnou binární operaci ⊕ (dosaďte si za ni například ADD). Povšimněte si, že je možné použít i tříadresový kód, což může být výhodné zejména pro překladače vyšších programovacích jazyků. Dva způsoby adresování navíc umožňují přičíst ke zdrojovému operandu desetibitovou či pětibitovou konstantu:
Instrukce/Operandy | Význam |
---|---|
instrukce f,WREG | WREG = f ⊕ WREG (lze použít i modifikátor .B pro operaci s bajty) |
instrukce WREG,f | f = f ⊕ WREG (lze použít i modifikátor .B pro operaci s bajty) |
instrukce #konst10,Wn | Wn = desetibitová konstanta ⊕ Wn |
instrukce Wb,#konst5,Wd | Wd = Wb ⊕ pětibitová konstanta |
instrukce Wb,Ws,Wd | Wd = Wb ⊕ Ws |
V tabulce pod tímto odstavcem jsou vypsány všechny základní aritmetické instrukce i některé pomocné instrukce typu INC2, DEC2, DAW.B atd.. Poslední dvě instrukce SE a ZE dokážou rozšířit vstupní osmibitový operand, a to buď znaménkově (nejvyšší bit operandu se rozkopíruje do vyšších bitů výsledku) nebo bezznaménkově (vyšší bity výsledku jsou nulové):
Instrukce | Stručný popis |
---|---|
ADD | součet |
ADDC | součet s carry |
SUB | rozdíl |
SUBB | rozdíl a navíc odečtení carry |
SUBR | rozdíl s prohozením operandů |
SUBBR | kombinace SUBB a SUBR |
INC | zvýšení operandu o 1 |
INC2 | zvýšení operandu o 2 |
DEC | snížení operandu o 1 |
DEC2 | snížení operandu o 2 |
DAW.B | úprava po součtu při práci v BCD |
NEG | změna znaménka |
SE | znaménkové rozšíření operandu |
ZE | bezznaménkové rozšíření operandu (zleva se doplní nuly) |
6. Násobení a dělení
Samostatnou skupinu tvoří instrukce pro násobení a dělení. Ty lze rozdělit jak podle šířky operandů, tak i podle toho, zda jsou operandy reprezentovány formou hodnot bez znaménka či se znaménkem:
Instrukce | Stručný popis |
---|---|
MUL | vynásobení W3:W2 = f*WREG |
MUL.SS | vynásobení dvou operandů se znaménkem (výsledek je uložen do dvou registrů) |
MUL.SU | vynásobení operandu se znaménkem s operandem bez znaménka |
MUL.US | vynásobení operandu bez znaménka s operandem se znaménkem |
MUL.UU | vynásobení dvou operandů bez znaménka |
MULW.SS | odpovídá instrukci MUL.SS, ale vstupní operandy mají šířku jeden bajt a výsledkem je 16bitová hodnota |
MULW.SU | odpovídá instrukci MUL.SU, ale vstupní operandy mají šířku jeden bajt a výsledkem je 16bitová hodnota |
MULW.US | odpovídá instrukci MUL.US, ale vstupní operandy mají šířku jeden bajt a výsledkem je 16bitová hodnota |
MULW.UU | odpovídá instrukci MUL.UU, ale vstupní operandy mají šířku jeden bajt a výsledkem je 16bitová hodnota |
DIV.S | dělení se znaménkem: 16 bitů/16 bitů |
DIV.SD | dělení se znaménkem: 32 bitů/32 bitů |
DIV.U | dělení bez znaménka: 16 bitů/16 bitů |
DIV.UD | dělení bez znaménka: 32 bitů/32 bitů |
DIVF | dělení se znaménkem 16 bitů/16 bitů (typ fractional) |
Poznámka: instrukce DIVF, DIV.S, DIV.SD, DIV.U a DIV.UD je nutné volat osmnáctkrát, protože výpočet je iterativní. K tomu lze využít instrukci REPEAT popsanou dále. Naproti tomu je násobení provedeno v jediném taktu, podobně jako na mnoha dalších digitálních signálových procesorech.
7. Logické operace
Sada instrukcí provádějících logické operace obsahuje všechny tři základní operace Booleovské logiky (negace, logický součin/konjunkce a logický součet/disjunkce), které jsou doplněny o logickou nonekvivalenci. Kromě toho v této skupině instrukcí najdeme i doplňkovou instrukci určenou pro nastavení všech bitů zvoleného registru či buňky paměti na nulu a taktéž instrukci s opačným významem – nastavením všech bitů na jedničku:
Instrukce | Stručný popis |
---|---|
COM | negace bit po bitu |
AND | logický součin bit po bitu |
IOR | logický součet bit po bitu |
XOR | logická nonekvivalence bit po bitu |
CLR | vynulování registru či buňky paměti |
SETM | registru či buňky paměti na hodnotu 0×ffff |
8. Bitové posuny a rotace
V instrukčním souboru nalezneme všechny používané varianty pro posuny a rotace. Rotace mohou být prováděny přes příznak carry © nebo s jeho vyloučením. Pokud se rotace provádí přes carry, rotuje se pochopitelně sedmnáct bitů a nikoli pouze bitů šestnáct. Mezi posuny počítáme logický posun doprava (do MSb se dosazuje nula), aritmetický posun doprava (MSb se duplikuje) a logický/aritmetický posun doleva (do LSb se dosazuje nula):
Instrukce | Stručný popis |
---|---|
RLC | rotace doleva přes carry |
RLNC | rotace doleva |
RRC | rotace doprava přes carry |
RRNC | rotace doprava |
ASR | aritmetický posun doprava, carry se naplní původním LSb |
LSR | logický posun doprava, carry se naplní původním LSb |
SL | posun doleva (aritmetický i logický), carry se naplní původním MSb |
Poznámka: MSb značí nejvyšší bit ve slově, LSb bit nejnižší.
9. Bitové operace
Do další skupiny instrukcí patří různé bitové operace. Většina těchto instrukcí obsahuje ve svém instrukčním slovu i index bitu, který se má nastavit, vynulovat, znegovat či otestovat. Povšimněte si, že u těch instrukcí, které přenáší hodnoty mezi vybraným bitem a příznakem zero (Z), se ve skutečnosti pracuje s negací tohoto příznaku. Poslední tři instrukce jsou nejkomplikovanější, neboť ve slovu musí hledat zvolený vzorek (buď první změnu nebo první nenulový bit):
Instrukce | Stručný popis |
---|---|
BCLR | vynulování vybraného bitu 0..15 |
BSET | nastavení vybraného bitu 0..15 na jedničku |
BTG | negace (toggle) vybraného bitu 0..15 |
BSW.C | uložení příznaku C (carry) do vybraného bitu |
BSW.Z | uložení negovaného příznaku Z (zero) do vybraného bitu |
BTST.C | otestování hodnoty bitu 0..15 a uložení výsledku do příznaku C (carry) |
BTST.Z | otestování hodnoty bitu 0..15 a uložení negovaného výsledku do příznaku Z (zero) |
BTSTS.C | jako BTST.C + nastavení bitu na jedničku |
BTSTS.Z | jako BTST.Z + nastavení bitu na jedničku |
FBCL | najde první změnu (negaci) v bitovém vzorku (začíná od MSb) |
FF1L | najde první jedničkový bit (začíná od MSb) |
FF1R | najde první jedničkový bit (začíná od LSb) |
10. Podmíněné i nepodmíněné skoky
Skupina skokových instrukcí je poměrně rozsáhlá (na rozdíl od osmibitových PICů), protože v instrukční sadě nalezneme jak klasické nepodmíněné skoky, tak i skoky podmíněné:
Instrukce | Stručný popis |
---|---|
BRA | nepodmíněný skok |
BRA C | skok při Carry=1 |
BRA NC | skok při Carry=0 |
BRA Z | skok při Zero=1 |
BRA NZ | skok při Zero=0 |
BRA N | skok při Negative=1 |
BRA NN | skok při Negative=0 |
BRA OV | skok při Overflow=1 |
BRA NOV | skok při Overflow=0 |
BRA GE | skok při podmínce ≥ (signed) |
BRA GEU | skok při podmínce ≥ (unsigned) |
BRA GT | skok při podmínce > (signed) |
BRA GTU | skok při podmínce > (unsigned) |
BRA LE | skok při podmínce ≤ (signed) |
BRA LEU | skok při podmínce ≤ (unsigned) |
BRA LT | skok při podmínce < (signed) |
BRA LTU | skok při podmínce < (unsigned) |
Poznámka: všechny varianty instrukcí BRA provádí relativní skok, což zde konkrétně znamená, že pokud je podmínka splněna, je k obsahu registru PC přičtena šestnáctibitová konstanta se znaménkem, která je součástí instrukčního slova a která je navíc vynásobena dvěma. Pokud podmínka splněna není, je k registru PC přičtena dvojka. Pro skok na absolutní adresu se používá instrukce GOTO.
Poznámka2: instrukce BRA GEU je aliasem instrukce BRA C. Podobně je instrukce BRA LTU aliasem instrukce BRA NC.
11. Podmíněný přeskok následující instrukce
V prvních verzích osmibitových mikrořadičů PIC se objevila zajímavá vlastnost – zatímco u naprosté většiny ostatních mikroprocesorů i mikrořadičů se v jejich instrukční sadě nachází instrukce umožňující provádění podmíněných skoků, tj. skoků provedených po splnění nějaké podmínky (nulový, kladný či záporný výsledek předchozí aritmetické či logické operace, přetečení předchozí aritmetické operace, atd.), obsahují osmibitové mikrořadiče PIC (kromě nejvyšší řady) pouze instrukci pro provedení nepodmíněného skoku GOTO a několik instrukcí, které po splnění nějaké podmínky změní programový čítač takovým způsobem, že je následující instrukce přeskočena (skip). Podmíněný skok se tedy implementuje pomocí dvojice instrukcí – některé instrukce typu SKIP s opačnou podmínkou následovanou nepodmíněným skokem. Ovšem v některých případech se skok vůbec nemusí provádět, protože ona jediná instrukce nacházející se za SKIP může nahradit celý podmíněný blok (vyslání bitu na externí port, pokud je splněna nějaká podmínka, reset watchdogu atd.). Tato možnost zůstala zachována i u šestnáctibitových PICů:
Instrukce | Stručný popis |
---|---|
BTSC | test vybraného bitu, vynechání následující instrukce pokud je testovaný bit nulový |
BTSS | test vybraného bitu, vynechání následující instrukce pokud je testovaný bit jedničkový |
CPSEQ | porovnání dvou registrů, vynechání následující instrukce při rovnosti obsahu registrů |
CPSGT | porovnání dvou registrů, vynechání následující instrukce pokud je první registr větší |
CPSLT | porovnání dvou registrů, vynechání následující instrukce pokud je první registr menší |
CPSNE | porovnání dvou registrů, vynechání následující instrukce pokud se registry nerovnají |
Jen pro porovnání se podívejme, jaké instrukce typu „skip“ jsou dostupné na osmibitových PICech (navíc je doplněna i binární podoba operačního kódu instrukce pro 12bitová instrukční slova):
Operační kód (bin) | Jméno instrukce | Stručný popis instrukce |
---|---|---|
0010 11d fffff | DECFSZ f,d | d = f – 1, vynechání následující instrukce pokud je výsledek nula |
0011 11d fffff | INCFSZ f,d | d = f + 1, vynechání následující instrukce pokud je výsledek nula |
0110 bbb fffff | BTFSC f,b | Bit test f, vynechání následující instrukce pokud je bit nulový |
0111 bbb fffff | BTFSS f,b | Bit test f, vynechání následující instrukce pokud je bit jedničkový |
12. Porovnání operandů s případným podmíněným skokem
Další skupina instrukcí slouží k porovnání dvou operandů a nastavení příznakových bitů na základě výsledku porovnání. Porovnání si můžeme představit jako instrukci SUB, jejíž výsledek je zahozen. Kromě toho zde nalezneme i instrukci nazvanou CPB, která odpovídá SUBB, tj. od mezivýsledku se navíc odečte příznak carry (ten zde tedy vystupuje ve funkci výpůjčky – borrow). Poslední čtyři instrukce jsou vlastně podmíněnými skoky, které se provedou přímo na základě porovnání obsahu dvou pracovních registrů:
Instrukce | Stručný popis |
---|---|
CP f | porovnání buňky paměti s registrem WREG |
CP W, #lit | porovnání s konstantou |
CP Wb, Ws | porovnání dvou pracovních registrů |
CP0 | porovnání buňky paměti či registru s nulou |
CPB f | porovnání buňky paměti s registrem WREG, navíc se odečte Carry |
CPB W, #lit | porovnání s konstantou, navíc se odečte Carry |
CPB Wb, Ws | porovnání dvou pracovních registrů, navíc se odečte Carry |
CPBEQ | porovnání dvou pracovních registrů a skok při podmínce = |
CPBGT | porovnání dvou pracovních registrů a skok při podmínce > |
CPBLT | porovnání dvou pracovních registrů a skok při podmínce < |
CPBNE | porovnání dvou pracovních registrů a skok při podmínce ≠ |
13. Obsah následující části seriálu
V následující části seriálu o architekturách počítačů a procesorů popis čipů PIC24 a dsPIC dokončíme. Budeme se zabývat především těmi instrukcemi, které slouží pro DSP výpočty. Tyto instrukce většinou své výsledky ukládají do akumulátorů, s nimiž je samozřejmě možné provádět i mnoho dalších operací, včetně porovnání, podmíněných skoků atd. Nezapomeneme ovšem ani na další specifické vlastnosti popisovaných čipů, zejména na možnost opakování instrukcí s využitím REPEAT (tuto možnost jsme již zmínili u instrukcí dělení, které je nutné 18× opakovat).
14. Odkazy na Internetu
- Stránky společnosti Microchip
http://www.microchip.com/ - Mikrořadiče řady PIC10
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1009 - Mikrořadiče řady PIC12
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1001 - Mikrořadiče řady PIC16
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1002 - Mikrořadiče řady PIC18
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1004 - Šestnáctibitové mikrořadiče PIC
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=20 - Microchip's 32-bit MCUs
http://www.microchip.com/design-centers/32-bit - Development Tools (oficiálně dostupné nástroje pro PIC)
http://www.microchip.com/development-tools/ - Vývojové nástroje pro osmibitové mikrořadiče PIC
https://www.root.cz/clanky/vyvojove-nastroje-pro-osmibitove-mikroradice-pic/ - Mikroprocesory s architekturou MIPS
https://www.root.cz/clanky/procesory-s-architekturou-risc-v-pracovnich-stanicich-a-serverech/ - gpsim Home Page
http://gpsim.sourceforge.net/gpsim.html - Gpsim (Wikipedia)
https://en.wikipedia.org/wiki/Gpsim - Digital Signal Processors (stránky TI)
http://www.ti.com/lsds/ti/processors/dsp/overview.page - C674× Low Power DSP (stránky TI)
http://www.ti.com/lsds/ti/processors/dsp/c6000_dsp/c674×/overview.page - TMS320C30 (stránky TI)
http://www.ti.com/product/tms320c30 - TMS320C6722B
http://www.ti.com/product/tms320c6722b/description - Introduction to DSP
http://www.ti.com/lit/wp/spry281/spry281.pdf - The Evolution of TMS (Family of DSPs)
http://www.slideshare.net/moto_modx/theevo1 - ST10 16-bit MCUs
http://www.st.com/en/microcontrollers/st10–16-bit-mcus.html?querycriteria=productId=LN1111 - XC800 family
https://en.wikipedia.org/wiki/XC800_family - C166 (stránky společnosti Infineon)
https://www.infineon.com/cms/en/product/microcontroller/16-bit-c166-microcontroller/channel.html?channel=ff80808112ab681d0112ab6b2eaf0759#ispnTab3 - C166 Family
https://en.wikipedia.org/wiki/C166_family - Zero-power Microcontrollers for Low-power and High-temperature Applications
http://en.wikichip.org/w/images/1/17/Atmel_MARC4_brochure.pdf - MARC4 Micro-Controller (Wikipedia)
https://en.wikipedia.org/wiki/MARC4_Micro-Controller - MARC4 – Atmel
https://en.wikichip.org/wiki/atmel/marc4 - MARC 4bit Microcontrollers Programmer's Guide
https://en.wikichip.org/w/images/4/44/MARC4_4-bit_Microcontrollers_Programmer%27s_Guide.pdf - MARC4 User's Guide qFORTH Compiler
https://en.wikichip.org/w/images/2/25/MARC4_User%27s_Guide_qFORTH_Compiler.pdf - 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/ - PMOS
https://en.wikipedia.org/wiki/PMOS_logic - NMOS
https://en.wikipedia.org/wiki/NMOS_logic - CMOS
https://en.wikipedia.org/wiki/CMOS - Computer History Museum: TMS 1000 4-Bit microcontroller
http://www.computerhistory.org/collections/catalog/102711697 - Texas Instruments TMS1000 microcontroller family
http://www.cpu-world.com/CPUs/TMS1000/ - Invention History of Microcontroller
http://www.circuitstoday.com/microcontroller-invention-history - TMS1000 Series – TI
https://en.wikichip.org/wiki/ti/tms1000 - TMX1795 – TI
https://en.wikichip.org/wiki/ti/tmx1795 - Milton Bradley Microvision (U.S.) (1979, LCD, 9 Volt (1 or 2), Model# 4952)
http://www.handheldmuseum.com/MB/uVUS.htm - 8051 Microcontroller
http://www.circuitstoday.com/8051-microcontroller - 4-bit (computer architectures)
https://en.wikipedia.org/wiki/4-bit - TMS 1000 Data Manual
http://blog.kevtris.org/blogfiles/TMS_1000_Data_Manual.pdf - Considerations for 4-bit processing
http://www.embeddedinsights.com/channels/2010/12/10/considerations-for-4-bit-processing/ - Are you, or would you consider, using a 4-bit microcontroller?
http://www.embeddedinsights.com/channels/2010/11/24/are-you-or-would-you-consider-using-a-4-bit-microcontroller/ - MARC4 Micro-Controller
https://en.wikipedia.org/wiki/MARC4_Micro-Controller - The Texas Instruments TMX 1795: the (almost) first, forgotten microprocessor
http://www.righto.com/2015/05/the-texas-instruments-tmx-1795-first.html - O2 Homepage
http://www.the-nextlevel.com/odyssey2/ - Magnavox Odyssey2 (1978), Philips Videopac G7000 / C52 (1979)
http://www.mess.org/sysinfo:odyssey2 - The Video Game Critic's Odyssey 2 Reviews
http://videogamecritic.net/odd.htm - Computer Closet Collection: Magnavox Odyssey2
http://www.computercloset.org/MagnavoxOdyssey2.htm - PHILIPS Videopac C52
http://old-computers.com/museum/computer.asp?c=1060 - O2 Tech. Manual V.1.1 (PDF dokument)
http://www.atarihq.com/danb/files/o2doc.pdf - Magnavox Odyssey2
http://www.game-machines.com/consoles/odyssey2.php - Magnavox Odyssey2 (Wikipedia EN)
http://en.wikipedia.org/wiki/Odyssey2 - Magnavox Odyssey2 Games (Wikipedia EN)
http://en.wikipedia.org/wiki/List_of_Videopac_games - TI 16-bit and 32-bit microcontrollers
http://www.ti.com/lsds/ti/microcontrollers16-bit32-bit/overview.page - TMS 32010 Assembly Language Programmer's Guide (kniha na Amazonu)
https://www.amazon.com/32010-Assembly-Language-Programmers-Guide/dp/0904047423