Obsah
1. Dokončení popisu čtyřbitových mikrořadičů: hi-end řada Epson S1C63
2. Interní architektura jader S1C63
3. Konfigurace čtyřbitových mikrořadičů s jádry S1C63
4. Vstupní a výstupní piny, specializované vývody pro ovládání LCD
7. Programátorský model jader S1C63
8. Instrukční sada jader S1C63
12. Bitové rotace a logické posuny
13. Operace nad jednotlivými bity
14. Instrukce pro práci se zásobníkem
15. Instrukce typu Load & Store
16. Podmíněné a nepodmíněné skoky
1. Dokončení popisu čtyřbitových mikrořadičů: hi-end řada Epson S1C63
Čtyřbitové mikrořadiče řady Epson S1C60, s nimiž jsme se seznámili minule, jsou určeny pouze do těch nejjednodušších zařízení vybavených LCD s několika jednotkami maximálně desítkami segmentů. Příkladem použití těchto čipů mohou být hodiny, teploměry a termostaty. Ovšem ve chvíli, kdy je nutné ovládat displeje s více segmenty popř. dokonce maticové displeje, je nutné sáhnout po přece jen výkonnějších mikrořadičích. A právě v této oblasti můžeme nalézt čipy S1C63, které sice částečně vychází z řady S1C60, ovšem v mnoha ohledech došlo k jejich vylepšení, která se týkají již zmíněných komplexnějších LCD, vyšších taktovacích frekvencí, rozšířené instrukční sady a v neposlední řadě také toho, že se unifikoval a zjednodušil systém adresování s použitím dvojice šestnáctibitových index registrů.
2. Interní architektura jader S1C63
Interní architektura mikrořadičů s jádry S1C63 je poměrně jednoduchá. Ústředním prvkem je čtyřbitová aritmeticko-logická jednotka, která na vstupu vybírá operandy z dvojice akumulátorů nazvaných A a B, popř. z konstanty načtené z paměti ROM nebo lze operand získat z datové paměti RAM. Výsledek provedené aritmetické operace, logické operace či bitové rotace se ukládá zpět do vybraného akumulátoru a navíc se ještě většinou nastavují příznakové bity Carry a Zero uložené v registru F. Kromě plnohodnotné aritmeticko-logické jednotky je v mikrořadičovém jádru implementována i šestnáctibitová sčítačka použitá při generování adres, zvyšování hodnoty programového čítače PC, relativních skocích, autoinkrementaci/dekrementaci indexových registrů X a Y apod. Čip je řízen mikroinstrukcemi čtenými z instrukčního dekodéru, přičemž se každá instrukce podle své složitosti provede v jednom, dvou či třech strojových cyklech (jeden strojový cyklus přitom odpovídá dvěma taktům hodinového signálu).
3. Konfigurace čtyřbitových mikrořadičů s jádry S1C63
Čtyřbitová mikrořadičová jádra S1C63 jsou v současnosti použita v několika typech mikrořadičů, které se od sebe odlišují zejména maximální povolenou taktovací frekvencí (minimální frekvence je vždy 32,768 kHz, takže lze použít běžné krystaly používané například v digitálkách), kapacitou paměti programu (ROM), kapacitou datové paměti a taktéž typem paměti ROM. K dispozici jsou totiž jak čipy určené pro aplikace (výrobky) citlivé na cenu, kde je použita paměť ROM programovaná maskou při výrobě, tak i několik čipů vybavených pamětí Flash. Základní parametry všech mikrořadičů založených na jádrech S1C63 jsou vypsány v následující tabulce:
Typ | Frekvence (max) | Frekvence (min) | ROM | Typ ROM | RAM |
---|---|---|---|---|---|
S1C63003 | 550 kHz | 32768 Hz | 4096×13 bitů | ROM | 256×4 bity |
S1C63004 | 1 MHz | 32768 Hz | 4096×13 bitů | ROM | 512×4 bity |
S1C63008 | 1–4 MHz | 32768 Hz | 8192×13 bitů | ROM | 1024×4 bity |
S1C63016 | 1–4 MHz | 32768 Hz | 16384×13 bitů | ROM | 2048×4 bity |
S1C6F016 | 4,2 MHz | 32768 Hz | 16384×13 bitů | Flash | 2048×4 bity |
S1C63158 | 4 MHz | 32768 Hz | 8192×13 bitů | ROM | 512×4 bity |
S1C63408 | 4 MHz | 32768 Hz | 8192×13 bitů | ROM | 1024×4 bity |
S1C63567 | 3,58 MHz | 32768 Hz | 16384×13 bitů | ROM | 512×4 bity |
S1C63654 | 4 MHz | 32768 Hz | 4096×13 bitů | ROM | 512×4 bity |
S1C63656 | 4 MHz | 32768 Hz | 6144×13 bitů | ROM | 1024×4 bity |
S1C63658 | 4 MHz | 32768 Hz | 8192×13 bitů | ROM | 1024×4 bity |
S1C63666 | 4 MHz | 32768 Hz | 16384×13 bitů | ROM | 5120×4 bity |
S1C63616 | 4 MHz | 32768 Hz | 16384×13 bitů | ROM | 2048×4 bity |
S1C63632 | 4 MHz | 32768 Hz | 31744×13 bitů | ROM | 8192×4 bity |
S1C6F632 | 4 MHz | 32768 Hz | 31744×13 bitů | Flash | 8192×4 bity |
S1C63709 | 4 MHz | 32768 Hz | 12288×13 bitů | ROM | 2048×4 bity |
4. Vstupní a výstupní piny, specializované vývody pro ovládání LCD
Podobně, jako tomu bylo i u minule popsaných jader S1C60, jsou i mikrořadiče s jádry S1C63 vybaveny relativně velkým množstvím vstupních, výstupních či vstupně-výstupních pinů a navíc většina čipů obsahuje i piny, přes které je možné ovládat LCD. Typické konfigurace jsou opět přehledně vypsány v tabulce pod tímto odstavcem, kde se ve sloupci „Vstupy“ nachází počet čistě vstupních pinů, ve sloupci „Výstupy“ počet výstupních pinů, sloupec „I/O“ obsahuje konfigurovatelné piny a v posledním sloupci jsou informace o maximální možné složitosti LCD, který se k čipům může připojit. Povšimněte si, že některé mikrořadiče dokážou ovládat displeje se segmenty (ty mají velké množství vstupů pro zapnutí či vypnutí segmentů a jen několik vstupů pro výběr skupin segmentů), zatímco další mikrořadiče lze připojit k maticovým (rastrovým) LCD:
Typ | Vstupy | Výstupy | I/O | Displej |
---|---|---|---|---|
S1C63003 | 0 | 0 | 16 | 22×5 segmentů |
S1C63004 | 0 | 0 | 20 | 36×8 segmentů |
S1C63008 | 0 | 0 | 24 | 50×8 segmentů |
S1C63016 | 0 | 0 | 24 | 56×8 segmentů |
S1C6F016 | 0 | 0 | 24 | 56×8 segmentů |
S1C63158 | 9 | 12 | 20 | × |
S1C63408 | 4 | 4 | 4 | 60×17 segmentů |
S1C63567 | 8 | 12 | 16 | 60×17 segmentů |
S1C63654 | 8 | 4 | 8 | 32×6 segmentů |
S1C63656 | 8 | 4 | 8 | 38×4 segmenty |
S1C63658 | 8 | 8 | 8 | 56×8 segmentů |
S1C63666 | 8 | 8 | 8 | 64×8 segmentů |
S1C63616 | 0 | 0 | 16 | 56×16 pixelů |
S1C63632 | 0 | 0 | 24 | 64×16 pixelů |
S1C6F632 | 0 | 0 | 24 | 64×16 pixelů |
S1C63709 | 13 | 0 | 18 | 64×8 segmentů |
5. Programová paměť (ROM)
Programová paměť typu ROM či Flash má poměrně neobvyklou strukturu, protože šířka adresovatelných slov je třináct bitů a maximální teoretická adresovatelná kapacita tohoto typu paměti je 64k×13 bitů. Ve skutečnosti jsme si však již ve třetí kapitole ukázali, že žádný čip nemá větší kapacitu ROM/Flash než 31744×13 bitů, přičemž poněkud zvláštní hodnota 31744 odpovídá 215-210. Činnost ROM/Flash je zřejmá – jsou v ní uloženy instrukce a popř. taktéž konstantní data (převodní tabulky, překódování numerických hodnot na indexy segmentů, bitové masky znaků pro maticové LCD apod.). Všechna instrukční slova mají konstantní šířku 13 bitů, adresa zpracovávané instrukce je přitom uložena v jediném registru PC. Kromě ROM/Flash, které jsou přímo součástí čipu s mikrořadičem, lze k S1C63 připojit další EPROM (či EEROM) se sériovým rozhraním. Tím lze částečně obejít nutnost programování masky ROM pro každý typ zařízení zvlášť.
6. Datová paměť (RAM)
Datové paměti (tedy klasické RAM) mají u všech dnes popisovaných čipů šířku slov pouhé čtyři bity (tj. jedná se o nibbly). Ovšem počet slov je již u některých variant mikrořadičů poměrně vysoký. Základní kapacita je 256×4 bity, maximální pak 8192×4 bity (čistě teoreticky se může jednat o 65536×4 bity, ovšem část adresního rozsahu je obsazena „video“ pamětí určenou pro práci s LCD). Na rozdíl od řady S1C60 není nutné u čipů S1C63 používat stránkování, protože oba index registry byly rozšířeny na šestnáct bitů. Samozřejmě opět platí, že část RAM je obsazena zásobníkem, na který je možné ukládat čtyřbitové, osmibitové i šestnáctibitové hodnoty (viz též druhou část článku s popisem instrukčního souboru).
7. Programátorský model jader S1C63
Programátorský model mikrořadičů S1C63 je sice odvozen on programátorského modelu již minule popsaných mikrořadičů S1C60, ovšem nalezneme zde určitá zjednodušení způsobená tím, že se šířky některých registrů rozšířily (tím odpadla nutnost používat stránkové registry). Nejdříve si tedy zopakujme, jak vypadal programátorský model S1C60:
Registr | Šířka | Rozdělen na | Celé jméno |
---|---|---|---|
PCS | 8 | × | Program counter step |
PCP | 4 | × | Program counter page |
NPP | 4 | × | New page pointer |
SP | 8 | SPH+SPL | Stack pointer |
IX | 12 | XP+XH+XL | Index register X |
IY | 12 | YP+YH+YL | Index register Y |
RP | 4 | × | Register pointer |
A | 4 | × | General register A |
B | 4 | × | General register B |
U čtyřbitových jader S1C63 naproti tomu nalezneme tyto registry:
Registr | Šířka | Rozdělen na | Celé jméno |
---|---|---|---|
PC | 16 | × | Program counter |
SP1 | 8 | Stack pointer, posunutý o dva bity doleva | |
SP2 | 8 | Stack pointer | |
X | 16 | XH+XL | Index register X |
Y | 16 | YH+YL | Index register Y |
A | 4 | × | General register A |
B | 4 | × | General register B |
EXT | 8 | × | Extension register |
Důležité je především rozšíření registru PC na celých šestnáct bitů, čímž odpadla nutnost používat dvojici PCS+NPP. Kvůli rozšíření možností adresování byl přidán registr EXT, jehož činnost si popíšeme níže. Rozšířeny byly taktéž index registry X a Y, takže vlastně jedinými skutečně čtyřbitovými registry zůstaly oba akumulátory A a B.
8. Instrukční sada jader S1C63
V instrukční sadě dnes popisovaných čtyřbitových mikrořadičů najdeme pouze 39 základních instrukcí, ovšem mnohé z těchto instrukcí existuje v několika variantách, které se od sebe odlišují především použitým adresovacím režimem. Připomeňme si, že každé instrukční slovo má šířku třinácti bitů, což mj. znamená, že se kromě operačního kódu instrukce do tohoto slova mohou uložit i konstanty, relativní adresy skoků atd. Ostatně podívejme se na následující tabulku, v níž jsou některé možnosti konstant uložených v instrukčních slovech shrnuty:
Šířka konstanty | Rozsah | Význam |
---|---|---|
2 bity | 0–3 | index bitu v bitových operacích |
4 bity | 0–15 | konstanta vystupující v ALU operacích atd. |
6 bitů | 0–63 | index vektoru přerušení |
8 bitů | –128..127 | konstanta pro osmibitové registry, relativní adresa |
4 bity | 1–16 | radix použitý u některých základních ALU instrukcí |
Seznam instrukcí:
9. Podporované adresní režimy
Na instrukční sadě čipů S1C63 jsou nejzajímavější především adresní režimy, které do značné míry používají „plnohodnotné“ šestnáctibitové registry PC, X a Y doplněné o registr EXT. Registry X a Y jsou použity pro uložení adresy, takže je například možné provést instrukci:
LD [X], [Y]
pro přesun čtyřbitového operandu z adresy uložené v registru Y na adresu uloženou v registru X. Taktéž je možné provést autoinkrementaci registru po provedení operace, což nám umožňuje relativně snadno implementovat blokové přenosy dat:
LD [X]+, [Y]+
U mnoha instrukcí se taktéž v instrukčním slovu používá šestibitová adresa (konstanta) specifikující adresu operandu v rozsahu 0×0000 až 0×003F a 0×FFC0 až 0×FFFF, tedy na začátku či naopak na konci paměti:
INC [adresa]
Pokud je zapotřebí pracovat se šestnáctibitovými konstantami, používá se pro tento účel registr EXT do něhož se načte horních osm bitů konstanty. Ihned po nastavení tohoto registru se změní význam další instrukce, protože příznak o modifikaci EXT je uložen v příznakovém registru F. Například:
LDB EXT, 0x12 LDB XL, 0x34
odpovídá pseudoinstrukci:
LD X, 0x01234
Nebo (mnohem zajímavější varianta):
LDB EXT, 0xAB ADD XL, 0xCD
odpovídá pseudoinstrukci:
ADD X, 0xABCD
10. Aritmetické instrukce
Sada aritmetických a logických instrukcí obsahuje prakticky všechny očekávatelné instrukce. U součtů a rozdílů mohou být zdrojovými operandy registr/akumulátor A, B, buňka adresovaná index registrem X, Y či čtyřbitová konstanta. Cílové operandy jsou prakticky totožné, samozřejmě až na zmíněnou konstantu. Instrukce CMP je shodná s instrukcí SUB, ovšem cílový operand se nezmění, pouze se nastaví bitové příznaky. Instrukce INC a DEC mohou pracovat s buňkou paměti. U prvních šesti instrukcí je dokonce možné zvolit radix 1–16, což je nejenom v oblasti čtyřbitových mikrořadičů nepochybně zajímavá možnost:
# | Instrukce | Stručný popis |
---|---|---|
1 | ADD | součet + nastavení příznaků |
2 | ADC | součet s připočtením Carry + nastavení příznaků |
3 | SUB | rozdíl + nastavení příznaků |
4 | SBC | rozdíl s připočtením Carry + nastavení příznaků |
5 | INC | zvýšení buňky paměti o jedničku |
6 | DEC | snížení buňky paměti o jedničku |
7 | CMP | obdoba instrukce SUB, ovšem bez uložení výsledku rozdílu |
11. Logické instrukce
Logické instrukce mohou mít shodné typy operandů jako výše popsané aritmetické instrukce ADD/ADC/SUB/SBB. Ovšem navíc všechny tři zmíněné instrukce podporují provedení zvolené logické operace mezi obsahem příznakového registru F a čtyřbitovou konstantou. To mj. znamená, že je možné nastavit libovolnou kombinaci příznaků na jedničku instrukcí OR, vynulovat libovolnou kombinaci příznaků instrukcí AND či příznaky znegovat instrukcí XOR, což je podle mého názoru elegantní řešení:
# | Instrukce | Stručný popis |
---|---|---|
1 | AND | logický součin prováděný bit po bitu |
2 | OR | logický součet prováděný bit po bitu |
3 | XOR | logická nonekvivalence prováděná bit po bitu |
4 | BIT | logické AND vybraného registru se čtyřbitovou konstantou a nastavení příznaků |
Poznámka: poslední instrukce nazvaná BIT je prakticky totožná s instrukcí AND, ovšem výsledek se nikam neukládá. Pouze se změní stav příznaku Zero na základě výsledku operace. U jiných procesorů se tato instrukce většinou jmenuje TEST a u minule popsaného procesoru se jmenovala FAN.
12. Bitové rotace a logické posuny
V instrukčním souboru existují dvě instrukce pro bitové rotace a dvě instrukce pro logické posuny. Všechny čtyři instrukce vždy pracují i s příznakem Carry. Rotovat je možné pracovní registr A, B, popř. paměť adresovanou přes index registry X či Y (s případnou autoinkrementací adresy):
# | Instrukce | Stručný popis |
---|---|---|
1 | RR | bitová rotace doprava přes Carry |
2 | RL | bitová rotace doleva přes Carry |
4 | SRL | logický posun doprava; nejnižší bit se přesune do Carry |
3 | SLL | logický posun doleva; nejvyšší bit se přesune do Carry |
Poznámka: aritmetickou rotaci doprava je nutné implementovat programově nastavením příznaku Carry před provedením SRL.
13. Operace nad jednotlivými bity
Tři nové instrukce slouží pro operace prováděné nad jednotlivými bity získanými z paměťové buňky ležící na adresách 0×0000 až 0×003F popř. na adresách 0×FFC0 až 0×FFFF, tedy na úplném začátku či naopak na úplném konci adresovatelného rozsahu. Součástí instrukčního slova je jak šestibitová adresa, tak i bitové pole obsahující index bitu, který se má nastavit, vynulovat či otestovat:
# | Instrukce | Stručný popis |
---|---|---|
2 | CLR | vynulování bitu 0..3 na zvolené adrese + nastavení příznaku Zero |
3 | SET | nastavení bitu 0..3 na zvolené adrese + nastavení příznaku Zero |
4 | TST | otestování bitu 0..3 na zvolené adrese: nastavení příznaku Zero na hodnotu přečteného bitu |
14. Instrukce pro práci se zásobníkem
Dvojice instrukcí PUSH a POP slouží pro uložení vybraného registru na zásobník popř. naopak pro obnovení obsahu registru ze zásobníku. Pokud se na zásobník ukládají registry A a B či příznakový registr F, používá se jeden prvek zásobníku, u registrů X a Y pak čtyři prvky (tyto registry jsou šestnáctibitové):
# | Instrukce | Stručný popis |
---|---|---|
1 | PUSH | uložení vybraného registru na zásobník |
2 | POP | obnovení vybraného registru ze zásobníku |
15. Instrukce typu Load & Store
Další skupina instrukcí slouží pro načtení či naopak uložení operandů do operační paměti. Při adresování operandů se používají index registry X a Y s případnou autoinkrementací adresy. Samozřejmě je též možné načíst konstantu do vybraného registru A či B, popř. provést převod dat mezi pracovním registrem a registrem příznaků. Instrukce LDB pracuje s operandy dvojnásobné šířky, tedy s jednotlivými bajty:
# | Instrukce | Stručný popis |
---|---|---|
1 | LD | načtení či uložení čtyřbitového operandu z/do registru |
2 | LDB | načtení celého bajtu (nikoli nibblu) |
3 | EX | prohození obsahu registru a buňky paměti |
Některé varianty „čtyřbitové“ instrukce LD:
LD A, B LD A, F LD A, #konstanta LD A, [X] LD A, [X]+
Některé varianty „osmibitové“ instrukce LD:
LDB XH,BA LDB XL,BA LDB BA, YH LDB BA, YL LDB BA, #konstanta LDB BA, [X]+ LDB BA, [Y]+ LDB EXT, BA LDB EXT, #konstanta LDB SP1, BA
Všechny varianty „čtyřbitové“ instrukce EX:
EX A, B EX A, [X] EX A, [X]+ EX A, [Y] EX A, [Y]+ EX B, [X] EX B, [X]+ EX B, [Y] EX B, [Y]+
16. Podmíněné a nepodmíněné skoky
Instrukce provádějící skoky můžeme rozdělit do několika kategorií. Nalezneme zde především nepodmíněný skok JR, nepodmíněný skok na adresu uloženou v index registru Y, dále čtveřici podmíněných skoků provedených či neprovedených na základě testu příznakových bitů Carry a Zero, skoky do podprogramu a návraty z podprogramů. Poslední instrukce provede návrat z podprogramu a současně ještě uloží konstantu na adresu umístěnou v registru Y:
# | Instrukce | Stručný popis |
---|---|---|
1 | JR | nepodmíněný skok |
2 | JP | nepodmíněný skok na adresu uloženou v registru Y |
3 | JRC | podmíněný skok pokud Carry=1 |
4 | JRNC | podmíněný skok pokud Carry=0 |
5 | JRZ | podmíněný skok pokud Zero=1 |
6 | JRNZ | podmíněný skok pokud Zero=0 |
7 | CALZ | skok do podprogramu na nulté stránce |
8 | CALR | relativní skok do podprogramu |
9 | RET | návrat z podprogramu |
10 | RETS | dtto, ale navíc zvýšení PC a 1 (přeskočí se další instrukce ve volajícím kódu) |
11 | RETI | návrat z přerušovací subrutiny |
12 | RETD | návrat z podprogramu s výsledkem uloženým do paměti adresované X |
17. Ostatní instrukce
Zbývá nám popsat si čtyři instrukce, které nelze zařadit do žádné jiné skupiny. Jedná se o instrukci INT určenou pro vyvolání SW přerušení, klasickou instrukci NOP a dále o dvojici instrukcí HALT a SLP, které dokážou přepnout režim mikrořadiče do módu uspání či zastavení (potom mikrořadič reaguje pouze na přerušení):
# | Instrukce | Stručný popis |
---|---|---|
1 | INT | uložení příznakového registru a návratové adresy na zásobník + vyvolání přerušení |
2 | NOP | pouze zvýšení hodnoty čítače instrukcí o 1 |
3 | HALT | přechod celého čipu do režimu HALT |
4 | SLP | přechod celého čipu do režimu SLEEP |
18. Odkazy na Internetu
- 4-bit architecture
https://en.wikichip.org/wiki/4-bit_architecture - S1C60 – Epson
https://en.wikichip.org/wiki/epson/s1c60 - S1C63 – Epson
https://en.wikichip.org/wiki/epson/s1c63 - 4-bit to 32-bit low power microcontrollers (Epson)
http://global.epson.com/products_and_drivers/semicon/products/micro_controller/ - 4-bit microcontrollers (Epson)
http://global.epson.com/products_and_drivers/semicon/products/micro_controller/4bit/ - High Performance 4bit (Epson)
http://global.epson.com/products_and_drivers/semicon/products/micro_controller/high4bit/ - S1C60 Family Products overview (PDF)
http://global.epson.com/products_and_drivers/semicon/products/micro_controller/pdf/spec_mcu_4bit.pdf - 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 - Accumulator
https://en.wikipedia.org/wiki/Accumulator_%28computing%29 - Index register
https://en.wikipedia.org/wiki/Index_register - Control/Status register
https://en.wikipedia.org/wiki/Control/Status_Register - 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/ - Grafický metaformát PostScript
http://www.root.cz/clanky/graficky-metaformat-postscript/ - PMOS
https://en.wikipedia.org/wiki/PMOS_logic - NMOS
https://en.wikipedia.org/wiki/NMOS_logic - CMOS
https://en.wikipedia.org/wiki/CMOS - Vacuum Fluorescent Display
https://en.wikipedia.org/wiki/Vacuum_fluorescent_display - 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