Obsah
1. Mikropočítač KIM-1: jeden ze zvěstovatelů „osmibitové revoluce“
2. Přichází legendární čip – MOS 6502
3. Čip MOS 6502 versus konkurenční dobové mikroprocesory
4. Využití mikroprocesoru MOS 6502
5. Mikropočítač KIM-1 se představuje
6. Blokové schéma mikropočítače KIM-1 a schéma zapojení
7. Mapování registrů a paměťových oblastí do adresního prostoru mikroprocesoru
8. Řízení mikropočítače KIM-1 interní klávesnicí
11. Vstupně-výstupní obvody a periferní zařízení
12. Programátorský model mikroprocesoru MOS 6502
13. Registry a příznakové bity
14. Adresovací režimy, využití registrů X a Y
15. Aritmetické a logické instrukce
18. Jiné použití MOS 6502 v minimalistickém zařízení – herní konzole Atari 2600
1. Mikropočítač KIM-1: jeden ze zvěstovatelů „osmibitové revoluce“
Společně se vznikem osmibitových mikroprocesorů začaly být vyvíjeny mikropočítače, v nichž byly tyto nové čipy použity a které tak ukazovaly možnosti, které programovatelné mikroprocesory nabízely oproti dřívějším řešením založeným na logické síti, pamětech a klopných obvodech. První mikropočítače byly realizovány formou zařízení určených především pro otestování možností mikroprocesorové techniky i pro návrh nových zařízení. Schémata těchto mikropočítačů byla mnohdy chápána jako standard v dané oblasti (proto například mnoho vzájemně velmi odlišných strojů mělo namapovány registry obvodu 8255 na stejné adresy atd.). V průběhu sedmdesátých let minulého století vznikly takové mikropočítače pro prakticky všechny významné mikroprocesory:
# | Název | Rok vzniku | Založeno na CPU/MCU |
---|---|---|---|
1 | Intel SIM8–01 | 1972 | Intel 8008 |
2 | MOS Technology KIM-1 | 1975 | MOS 6502 |
3 | Motorola MEK6800D2 | 1976 | Motorola 6800 |
4 | Rockwell AIM-65 | 1976 | MOS 6502 |
5 | Synertek SYM-1 | 1978 | MOS 6502 |
6 | Intel SDK-85 | 1978 | Intel 8085 |

Obrázek 1: Amatérský mikropočítač postavený na základě osmibitového mikrořadiče 8051. Funkce nabízené tímto mikropočítačem jsou v mnoha ohledech podobné funkcím kitu PMI-80 (i když se jedná o zařízení postavená na odlišných čipech a s využitím jiných technologií).
Dnes se budeme zabývat mikropočítačem KIM-1, který vznikl již v roce 1975, tj. téměř současně se vznikem slavného osmibitového mikroprocesoru MOS 6502, jenž tvořil jeho nedílnou součást. Jednalo se o důležitý mikropočítač, protože právě na něm si mohli čip MOS 6502 „osahat“ i inženýři, kteří poté pracovali na vývoji domácích osmibitových mikropočítačů (Atari, Commodore), popř. i osobních mikropočítačů (Apple ][).

Obrázek 2: „1977 Trinity“ aneb mikropočítače Commodore PET 2001–8, Apple II a TRS-80 Model I. První dva počítače jsou založeny na čipu MOS-6502.
Zdroj a licence: https://upload.wikimedia.org/wikipedia/commons/f/ff/Trinity77.jpg
2. Přichází legendární čip – MOS 6502
Srdcem počítače KIM-1, který bude popsán v navazujících kapitolách, je slavný osmibitový mikroprocesor MOS 6502 navržený a vyráběný společností MOS Technologies, který začal být komerčně nabízen v září roku 1975, tj. zhruba rok po uvedení konkurenčních osmibitových mikroprocesorů Intel 8080 a Motorola MC6800 (ovšem rok před uvedením mikroprocesoru RCA-1802 o němž jsme se zmiňovali minule a předminule). Čip MOS 6502 navrhl Chuck Peddle a sedm jeho spolupracovníků (Harry Bawcum, Ray Hirt, Terry Holdt, Mike James, Will Mathis, Bill Mensch – důležitá postava a Rod Orgill), kteří spolu s ním opustili firmu Motorola. Důvodem k tomu, že někteří klíčoví zaměstnanci Motorolu opustili, byla jak tehdejší hospodářská recese v USA (a s tím související nepopulární reorganizace ve firmě), tak i to, že se zaměstnancům nelíbilo stěhování z Phoenixu do nově otevřené pobočky v Austinu (ovšem hlavním důvodem může být i to, že management Motoroly ignoroval Peddleho návrhy levného osmibitového procesoru, který by bylo možné masivně a s malou chybovostí vyrábět).
Nicméně se vraťme k Chucku Peddlemu a firmě MOS Technologies, která byla založena již v roce 1969 a zabývala se mimo jiné i výrobou čipů pro slavný herní automat Pong společnosti Atari. Prvním mikroprocesorem navrženým ve společnosti MOS Technologies byl čip nazvaný jednoduše MOS 6501, který byl pinově kompatibilní s konkurenční Motorolou MC6800 (samotná sada instrukcí i vnitřní stavba mikroprocesoru však byla v mnoha ohledech odlišná). Možnost náhrady mikroprocesoru MC6800 za MOS 6501 v zařízeních připravených původně pro čipy řady 6800 se právníkům Motoroly samozřejmě nelíbila a po žalobě (a následném mezisoudním vyrovnání) Chuck Peddle spolu s Billem Menschem vytvořili čip pojmenovaný MOS 6502, který již nebylo možné nainstalovat do stejné patice jako Motorolu MC6800. Mimochodem: dalším důsledkem mezisoudního vyrovnání bylo to, že firma MOS licencovala ostatní čipy řady 6800, mj. i původní Peddleho čip PIA neboli MC6820 (Chuck Peddle je ostatně podepsán pod šestnácti patenty Motoroly). I přes binární nekompatibilitu s mikroprocesorem MC6800 je však MOS 6502 dodnes legendární čip, který se při svém uvedení na trh proslavil zejména svou velmi nízkou cenou (tehdy pouhých 25 dolarů) umožňující stavbu levných domácích a osobních mikropočítačů a podílel se tak nemalou měrou na „osmibitové revoluci“.

Obrázek 3: Hra Pong ve variantě z roku 1972.
3. Čip MOS 6502 versus konkurenční dobové mikroprocesory
V tomto kontextu se ještě jednou (protože prakticky tutéž tabulku jsme si již uvedli předminule) podívejme 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 mikroprocesoru Intel 8080, který 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č |

Obrázek 4: Základní technické parametry první generace osmibitových mikroprocesorů firem Intel, Motorola a Zilog. V tomto grafu není uveden poslední „velký hráč“ na poli osmibitových CPU – MOS 6502, jehož parametry se podobají právě čipu MC6800.
V předchozí kapitole jsme si řekli, že původní mikroprocesor MOS 6501 byl navržen takovým způsobem, aby ho bylo možné použít ve stejné patici (a tedy i ve stejných výrobcích), které byly určeny pro mikroprocesor Motorola 6800. Až na základě soudního procesu bylo zapojení pinů pozměněno, takže nový čip 6502 již nebyl v tomto ohledu s Motorolou 6800 kompatibilní. Tyto rozdíly jsou shrnuty v následující tabulce, v níž jsou uvedené ty piny, které mají odlišnou funkci:
Pin | Motorola 6800 | MOS 6501 | MOS 6502 | Poznámka |
---|---|---|---|---|
2 | Halt | Ready | Ready | psáno i RDY |
3 | ∅1 (in) | ∅1 (in) | ∅1 (out) | pro složení hodinového signálu |
5 | Valid memory address | Valid memory address | nezapojeno | |
7 | Bus available | Bus available | SYNC | |
36 | Data bus enable | Data bus enable | nezapojeno | |
37 | ∅2 (in) | ∅2 (in) | ∅0 (in) | pro složení hodinového signálu |
38 | nezapojeno | nezapojeno | Set overflow flag | psáno i SO, přímo ovládá příznak O |
39 | režim vysoké impedance | nezapojeno | ∅2 (out) |
4. Využití mikroprocesoru MOS 6502
Osmibitové mikroprocesory MOS 6502 či jeho upravené verze MOS 65C02, popř. později MOS 6510 byly použity v mnoha osobních i domácích počítačích, především v Apple II (jeden z nejprodávanějších počítačů v USA), osmibitových domácích mikropočítačů Atari (viz články na Rootu), Commodore C64 (pravděpodobně není zapotřebí představovat), Acorn Atom apod. Tento čip nalezneme i v herních konzolích. Není divu, že se stále jedná o jeden z nejpopulárnějších mikroprocesorů, které jsou dokonce dodnes vyráběny v šestnáctibitové variantě WD 65816 (pomocí nastavení příznakového bitu se tento mikroprocesor přepne do režimu 6502). Podle posledních výzkumů bude 6502 dokonce použita i v roce 3000 pro řízení ohýbacích robotů :-)

Obrázek 5: Osmibitový domácí počítač Atari 800 XL vybavený mikroprocesorem MOS 6502 a pomocnými koprocesory ANTIC, GTIA a POKEY.

Obrázek 6: Herní konzole NES je založena na variantě MOS 6502 známé pod jménem Ricoh 2A03.

Obrázek 7: Slavný Commodore C64.

Obrázek 8: Apple IIe je nejúspěšnějším osmibitovým osobním mikropočítačem vůbec.
5. Mikropočítač KIM-1 se představuje
Mikropočítač KIM-1 se v mnoha ohledech podobá ostatním dobovým mikropočítačům – obsahuje klávesnici pro zadávání hexadecimálních hodnot, několik funkčních kláves a sedmisegmentový LCD se šesti ciframi. Celý mikropočítač byl osazen na jediném plošném spoji, na jehož okraji se nacházely dva konektory určené pro připojení periferních zařízení. Šest cifer zobrazovaných na LCD bylo rozděleno na část určenou pro zobrazení adresy (0000 až FFFF) a na část určenou pro zobrazení obsahu bajtu (00 až FF), což je více informací, než nabízel například minule popsaný počítač COSMAC ELF. Jednalo se současně o rozšiřitelný stroj, protože ke KIM-1 bylo možné připojit audio magnetofon pro záznam dat (i programů) či dálnopis, popř. tiskárnu používající sériový přenos dat. Kromě toho bylo k dispozici dostatek dalších vstupně-výstupních pinů využitelných prakticky libovolným způsobem.

Obrázek 9: Mikropočítač KIM-1.
Zdroj: Wikipedia, CC
6. Blokové schéma mikropočítače KIM-1 a schéma zapojení
Podívejme se nyní na blokové schéma mikropočítače KIM-1, které jsem překreslil z originálního manuálu:

Obrázek 10: Blokové schéma mikropočítače KIM-1.
Barevné odlišení skupin vodičů:
# | Barva | Význam |
---|---|---|
1 | červená | adresová sběrnice |
2 | modrá | datová sběrnice |
3 | zelená | řídicí signály |
4 | žlutá | vstupní a výstupní signály |
V blokovém schématu jsou zobrazeny všechny čtyři hlavní čipy s vysokou integrací, které tvoří základ mikropočítače KIM-1. Jedná se pochopitelně především o vlastní mikroprocesor MOS 6502, který je doplněn o dvojici čipů MOS 6530 a taktéž o paměť RAM o kapacitě jednoho kilobajtu. Na desce mikropočítače jsou rozvedeny tři sběrnice – adresová (lze rozšířit až do plných 16 bitů), datová (8 bitů) a několik řídicích signálů. Dále zde nalezneme různé vstupní, popř. výstupní signály. Adresová sběrnice, resp. přesněji řečeno generování adres, je v tomto mikropočítači řízeno pouze mikroprocesorem (například u osmibitových Atari však dokáže adresy generovat i čip ANTIC), datová sběrnice je podle očekávání obousměrná. Vstupní a výstupní signály umožňují připojení externí klávesnice, akustického magnetofonu s dosti primitivním záznamem dat a dokonce i dálnopisu (a nepřímo tedy i minipočítačového terminálu).
Podrobnější schéma zapojení zobrazené až na úroveň jednotlivých vodičů a pomocných součástek naleznete na adrese http://www.6502.org/trainers/buildkim/kim.gif.
7. Mapování registrů a paměťových oblastí do adresního prostoru mikroprocesoru
Z pohledu programátora byl adresní rozsah mikroprocesoru (64kB) rozdělen do několika regionů, do nichž byl namapován jak hlavní blok operační paměti (i s nultou stránkou a první stránkou se zásobníkem), tak i dva doplňkové bloky o kapacitě 64 bajtů. Kromě toho je do adresního rozsahu namapována i ROM obou čipů 6530 a taktéž jejich řídicí registy. Adresní prostor tedy vypadal takto:
Od | Do | Obsah |
---|---|---|
$0000 | $03FF | 1024 bajtů RAM |
$0400 | $07FF | volno (lze využít při použití větší RAM) |
$0800 | $0BFF | volno -//- |
$0C00 | $0FFF | volno -//- |
$1000 | $13FF | volno -//- |
$1400 | $16FF | volno -//- |
$1700 | $173F | řídicí registry čipu 6530–003 |
$1740 | $177F | řídicí registry čipu 6530–002 |
$1780 | $17BF | 64 bajtů RAM čipu 6530–003 |
$17C0 | $17FF | 64 bajtů RAM čipu 6530–002 |
$1800 | $1BFF | 1024 bajtů ROM čipu 6530–003 |
$1C00 | $1FFF | 1024 bajtů ROM čipu 6530–002 |
Kvůli tomu, jak jsou adresní vodiče zapojeny na RAM i oba čipy 6530 (horní bity adresy se ignorují) se ve skutečnosti každý region (z pohledu mikroprocesoru) opakoval osmkrát. To je velmi důležité zejména pro poslední region v rozsahu $1C00 až $1FFF. Ten se opakuje osmkrát a je tedy viditelný v rozsazích:
Od | Do |
---|---|
$1C00 | $1FFF |
$3C00 | $3FFF |
$5C00 | $5FFF |
$7C00 | $7FFF |
$9C00 | $9FFF |
$BC00 | $BFFF |
$CC00 | $CFFF |
$FC00 | $FFFF |
Proč je to tak důležité? Posledních šest bajtů adresního prostoru totiž mikroprocesor 6502 používá pro přečtení adres (vektorů), které použije pro skok při třech operacích:
Adresa | Význam |
---|---|
$FFFA/$FFFB | skok po NMI (nemaskovatelné přerušení) |
$FFFC/$FFFD | skok po RESET |
$FFFE/$FFFF | skok po IRQ nebo instrukci BRQ |
Obsah těchto šesti bajtů je tedy uložen v ROM a je využit monitorem.
Některé adresy jsou obsazeny monitorem a jejich jmenovka (label) se používá v assembleru:
Adresa | Blok | Jmenovka | Funkce |
---|---|---|---|
$00EF | oblast monitoru | PCL | dolní bajt PC |
$00F0 | oblast monitoru | PGH | horní bajt PC |
$00F1 | oblast monitoru | P | stavový registr |
$00F2 | oblast monitoru | SF | ukazatel na vrchol zásobníku |
$00F3 | oblast monitoru | A | obsah akumulátoru |
$00F4 | oblast monitoru | Y | obsah registru X |
00F5 | oblast monitoru | X | obsah registru Y |
$1700 | I/O čipu 003 | PAD | 6530–003 A Data Register |
$1701 | I/O čipu 003 | PADD | 6530–003 A Data Direction Register |
$1702 | I/O čipu 003 | PBD | 6530–003 B Data Register |
$1703 | I/O čipu 003 | PBDD | 6530–003 B Data Direction Register |
$1704 | časovač | časovač na čipu 6530–003 | |
$170F | časovač | časovač na čipu 6530–003 | |
$17F5 | rozhraní pro magnetofon | SAL | Starting Address – Low Order Byte |
$17F6 | rozhraní pro magnetofon | SAH | Starting Address – High Order Byte |
$17F7 | rozhraní pro magnetofon | EAL | Ending Address – Low Order Byte |
$17F8 | rozhraní pro magnetofon | EAH | Ending Address – High Order Byte |
$17F9 | rozhraní pro magnetofon | ID | File Identification Number |
$17FA | přerušovací subsystém | NMIL | NMI Vector – Low Order Byte |
$17FB | přerušovací subsystém | NMIH | NMI Vector – High Order Byte |
$17FC | přerušovací subsystém | RSTL | RST Vector – Low Order Byte |
$17FD | přerušovací subsystém | RSTH | RST Vector – High Order Byte |
$17FE | přerušovací subsystém | IRQL | IRQ Vector – Low Order Byte |
$17FF | přerušovací subsystém | IRQH | IRQ Vector – High Order Byte |
$1800 | rozhraní pro magnetofon | DUMPT | Start Address – Audio Tape Dump |
$1873 | rozhraní pro magnetofon | LOADT | Start Address – Audio Tape Load |
$17F7 | rozhraní pro dálnopis | EAL | Ending Address – Low Order Byte |
$17F8 | rozhraní pro dálnopis | EAH | Ending Address – High Order Byte |
8. Řízení mikropočítače KIM-1 interní klávesnicí
Počítač KIM-1 byl primárně řízen primární klávesnicí, která vypadá následovně:

Obrázek 11: Klávesnice počítače KIM-1.
Kromě klasických kláves pro zadávání hexadecimálních číslic obsahovala klávesnice dalších sedm funkčních kláves. Jejich význam je vypsán v následující tabulce:
# | Klávesa | Stručný popis |
---|---|---|
1 | 0-F | zápis hodnoty v režimu zadávání adres nebo zápisu dat |
2 | AD | režim zadávání adresy |
3 | DA | režim zápisu dat |
4 | + | zvýšení adresy beze změny režimu |
5 | PC | zobrazení obsahu programového čítače na displeji |
6 | GO | spuštění programu od adresy zobrazené na displeji (režim AD) |
7 | ST | zastavení programu a návrat do monitoru |
8 | RS | provedení resetu systému |
9. Ukázka programování
Podívejme se nyní na způsob programování počítače KIM-1. Následující příklad byl převzat z originálního manuálu. Jedná se o jednoduchý program, který sečte dvě osmibitové hodnoty uložené v paměťových buňkách VAL1 a VAL2 a výsledek (šestnáct bitů) uloží do buněk umístěných na adresách $FA a $FB. Obsah těchto adres se zobrazí na displeji po skoku na adresu START:
POINTL = $FA POINTH = $FB START = $1C4F 0000 VAL1 0001 VAL2 0002 18 PROG CLC 0003 A5 00 LDA VALl 0005 65 01 ADC VAL2 0007 85 FA STA POINTL 0009 A9 00 LDA #00 000B 85 FB STA POINTH 000D 4C 4F 1C JMP START
Uložení celého programu může vypadat následovně:
Stisknuté klávesy Obsah LCD Číslo kroku Poznámka [AD] xxxx xx 1 režim zápisu adres [0] [0] [0] [2] 0002 xx 2 počáteční adresa (instrukce CLC) [DA] 0002 xx 3 režim zápisu dat [1] [8] 0002 18 4 instrukce CLC [+] [A] [5] 0003 A5 5 instrukce LDA VAL1 [+] [0] [0] 0004 00 6 [+] [6] [5] 0005 65 7 ... [+] [0] [1] 0006 01 8 [+] [8] [5] 0007 85 9 [+] [F] [A] 0008 FA 10 [+] [A] [9] 0009 A9 11 [+] [0] [0] 000A 00 12 [+] [8] [5] 000B 85 13 [+] [F] [B] 000C FB 14 [+] [4] [C] 000D 4C 15 instrukce JMP START [+] [4] [F] 000E 4F 16 [+] [1] [C] 000F 1C 17
Ještě před spuštěním programu změníme hodnoty uložené do proměnných VAL1 a VAL2:
Stisknuté klávesy Obsah LCD Číslo kroku Poznámka [AD] 000F 1C 17A režim zápisu adres [0] [0] [F] [1] 00F1 xx 17B režim dekadické aritmetiky (BCD) [DA] [0] [0] 00F1 00 18 [AD] 00F1 00 19 znovu režim zápisu adres [0] [0] [0] [0] 0000 xx 20 adresa VAL1 [DA] 0000 02 21 uložení hodnoty VAL1 [+] [0] [3] 0001 03 22 uložení hodnoty VAL2 [+] [GO] 0002 18 23 spuštění (jsme přesně na adrese 0002)
10. Funkce čipu MOS 6530
Čip MOS 6530 má v mikropočítači KIM-1 několik specifických funkcí. Tyto čipy jsou v systému dva a každý z nich je nepatrně odlišný (například se liší jejich adresový dekodér). Mezi společné vlastnosti obou čipů 6530 patří paměť ROM s kapacitou jednoho kilobajtu, přídavná paměť RAM s kapacitou 64 bajtů, dvojice osmibitových vstupně-výstupních bran PA a PB a časovač. Samotná existence paměti RAM nemá v případě mikropočítače KIM-1 až tak zásadní význam, protože tento počítač je navíc obsazen plnohodnotným paměťovým čipem s 1 kB RAM, ovšem například dále zmíněná herní konzole Atari 2600 je osazena podobným čipem MOS 6532, který obsahuje paměť 128 bajtů (ovšem žádnou ROM) a současně se jedná o jedinou operační paměť, kterou je tato konzole vybavena – ano, naprostá většina her pro Atari 2600 si vystačí se 128 bajty RAM, do které je mapován i zásobník.
Původně byl tento čip navržen pro počítače obsazené sedmi integrovanými obvody 6530, což by umožnilo konstrukci počítače se 7 kB ROM, 448 bajty RAM a 112 vstupně-výstupními piny. Takto maximalisticky navržený systém by tedy byl vhodný pro řídicí účely, kde 7 kB ROM plně dostačuje pro uložení celého programu a 448 bajtů RAM taktéž může být pro mnoho účelů dostačující. Nicméně s příchodem plnohodnotných mikrořadičů došlo k opuštění podobných koncepcí (i když žádný dobový mikrořadič nenabízel 112 IO pinů).
Kromě nabídky vstupně-výstupních pinů je důležitá a existence časovače vybaveného programovatelnou děličkou frekvence a osmibitovým čítačem. Po dočítání k nule se vygeneroval přerušovací signál IRQ, který mohl být přiveden například na vstup NMI mikroprocesoru. Později se i časovače a čítače staly nedílnou součástí mikrořadičů, počínaje již prvním jednoduchým mikrořadičem Intel 8048.
11. Vstupně-výstupní obvody a periferní zařízení
Přes dvojici čipů MOS 6530 zmíněných v předchozí kapitole bylo možné ovládat jak klávesnici a displej, tak i periferní zařízení. Pro čtení klávesnice a současně i pro ovládání displeje se používaly piny PA0 až PA6 i PB1 až PB4 společně s pomocnými integrovanými obvody 74145. Kromě toho bylo podporováno ukládání dat (a pochopitelně i strojového kódu) na běžnou audio kazetu, popř. na páskový magnetofon. Záznamový signál byl generován programově (nula jako šest pulsů s frekvencí 2415 Hz a jednička jako devět pulsů s frekvencí 3650 Hz – délka záznamu bitu je tedy vždy stejná: 2,46ms) a s využitím RC členů byl výsledný signál vyhlazen a poslán na audio výstup. Pro čtení se používal fázový závěs, který ze vstupního (zkresleného) signálu zrekonstruoval frekvence a tím pádem i sekvenci jedniček a nul. Zajímavá je i podpora pro připojení dálnopisu, který bylo možné využít jako tiskárnu i pro vstup dat (plně duplexní režim).
12. Programátorský model mikroprocesoru MOS 6502
Z programátorského hlediska se MOS 6502 dosti podstatným způsobem odlišuje jak od Intelu 8080, tak i od čipu RCA-1802. Zatímco procesor Intel 8080 obsahoval poměrně rozsáhlou sadu obecně použitelných osmibitových registrů (A, B, C, D, E, H a L), měl 6502 pouze jeden akumulátor (registr A) a dva index-registry X a Y. Oba typy procesorů samozřejmě obsahovaly další speciální registry, jako ukazatel na vrchol zásobníku (SP), programový čítač (PC) a příznakový registr (F).
Na první pohled by se mohlo zdát, že počet registrů mikroprocesoru MOS 6502 je nedostatečný pro provádění většiny aritmetických či logických operací. Ve skutečnosti tomu tak není, protože tento procesor podporuje načtení druhého operandu z operační paměti (rychlost RAM nebyla tak limitujícím faktorem, jako je tomu dnes). U mnoha instrukcí je podporován větší počet adresovacích režimů, celkově je možné operandy strojových instrukcí adresovat třinácti navzájem odlišnými způsoby. Při adresování se často používají oba index-registry, které je možné inkrementovat a dekrementovat – tím je umožněno provádění blokových přenosů dat, mazání souvislé oblasti paměti atd.
Mikroprocesor MOS 6502 také zavádí pojem takzvané nulté stránky paměti. Jedná se o prvních 256 bytů operační paměti, kterou je možné adresovat zjednodušeným způsobem. Adresa libovolné buňky z nulté stránky paměti je totiž uložena na jednom byte v operačním kódu instrukce, takže celá instrukce může být kratší (typicky pouze dva byte). Současně je i provádění instrukcí adresujících nultou stránku paměti rychlejší než při šestnáctibitovém adresování. Z tohoto důvodu se můžeme na nultou stránku paměti dívat jako na pole 256 registrů, resp. alternativně na 128 plnohodnotně využitelných 16bitových ukazatelů (musíme si uvědomit, že operační paměti byly v té době stejně rychlé jako procesor, takže čtení či zápis dat do paměti byla záležitost jednoho či dvou cyklů). Myšlenka nulté stránky paměti byla dále rozšířena v procesoru Motorola 6809, kde se však tato stránka dala v adresovatelné paměti posouvat na libovolné místo.
13. Registry a příznakové bity
V předchozí kapitole jsme si řekli, že MOS 6502 obsahoval pouze minimální, ovšem ještě prakticky použitelný počet registrů. Tyto registry jsou vypsány v následující tabulce:
# | Registr | Šířka | Význam |
---|---|---|---|
1 | A | 8 bitů | akumulátor |
2 | X | 8 bitů | index registr |
3 | Y | 8 bitů | index registr |
4 | SP | 8 bitů | část ukazatele na vrchol zásobníku (+ $0100) |
5 | PC | 16 bitů | čítač instrukcí |
6 | P | 7/8 bitů | příznakový a stavový registr |
Většina aritmetických a logických operací používala jako jeden z operandů akumulátor; druhý operand byl typicky načítán z operační paměti. Přitom se pro adresování často používaly index registry X a Y. Ukazatel na vrchol zásobníku dokázal adresovat zásobník v rozsahu $0100 až $01FF, tedy 256 bajtů. A příznakový registr měl obsazen jen sedm bitů:
Bit | Označení | Význam |
---|---|---|
7 | N | záporný výsledek |
6 | V | přetečení do sedmého bitu |
5 | – | neobsazeno |
4 | B | rozlišení přerušení od instrukce BRK či PHP |
3 | D | režim výpočtů: binární versus BCD |
2 | I | zákaz přerušení |
1 | Z | nulový výsledek |
0 | C | přenos |
14. Adresovací režimy, využití registrů X a Y
Adresovací režimy odlišují MOS 6502 od naprosté většiny ostatních mikroprocesorů a umožňují použít odlišný styl programování založený na efektivním použití nulté stránky paměti a obou index registrů. Existuje třináct adresovacích režimů, ovšem žádná instrukce nevyužívá všechny. Některé adresovací režimy jsou určeny pouze pro skoky, další pro implicitní operandy atd.:
# | Zápis | Název | Assembler | Stručný popis |
---|---|---|---|---|
1 | A | accumulator | INS A | operandem je přímo akumulátor |
2 | abs | absolute | INS $LLHH | za instrukcí následuje šestnáctibitová adresa, na níž je operand uložen |
3 | abs,X | absolute, X-indexed | INS $LLHH,X | za instrukcí následuje šestnáctibitová adresa, která je přičtena k X |
4 | abs,Y | absolute, Y-indexed | INS $LLHH,Y | za instrukcí následuje šestnáctibitová adresa, která je přičtena k Y |
5 | # | immediate | INS #$BB | za instrukcí následuje bajt s konstantou |
6 | impl | implied | INS | operand je odvozen přímo z instrukce, například INX |
7 | ind | indirect | INS ($LLHH) | nepřímá adresace přes adresu uloženou za instrukcí (ta je ukazatelem), nepřímý skok |
8 | X,ind | X-indexed, indirect | INS ($LL,X) | efektivní adresa je spočtena z hodnoty uložené na (LL+X) |
9 | ind,Y | indirect, Y-indexed | INS ($LL),Y | efektivní adresa je spočtena z hodnoty uložené na LL, k výsledku se přičte Y |
10 | rel | relative | INS $BB | použito u relativních skoků; za instrukcí je jeden bajt reprezentující offset se znaménkem |
11 | zpg | zeropage | INS $LL | operand je uložen na nulté stránce na adrese LL |
12 | zpg,X | zeropage, X-indexed | INS $LL,X | operand je uložen na nulté stránce na adrese LL+X |
13 | zpg,Y | zeropage, Y-indexed | INS $LL,Y | operand je uložen na nulté stránce na adrese LL+Y |
15. Aritmetické a logické instrukce
Mikroprocesor MOS 6502 obsahuje pouze 56 instrukcí, přičemž mnoho instrukcí podporuje více adresovacích režimů a tudíž i více variant (i tak však zdaleka není obsazeno všech 256 možných kombinací – ty byly postupně obsazovány v dalších procesorech, popř. na původním MOS 6502 měly sice oficiálně nedokumentovanou, ovšem logickou/očekávanou funkci). Nejprve si popíšeme aritmetické a logické instrukce mikroprocesoru MOS 6502. Většina dále popsaných instrukcí jako svůj první operand akceptuje akumulátor a druhým operandem může být konstanta, popř. hodnota načtená z operační paměti s využitím výše popsaných adresovacích režimů. Výjimkou jsou instrukce s jediným operandem, v nichž nemusí vystupovat akumulátor popř. instrukce, v nichž je přímo operand vyjádřen názvem instrukce (INX atd.):
# | Instrukce | Plné jméno | Popis |
---|---|---|---|
1 | ADC | add with carry | součet hodnoty s akumulátorem (včetně přetečení) |
2 | SBC | subtract with carry | odečtení hodnoty od akumulátoru (včetně výpůjčky) |
3 | AND | and with accumulator | logické AND s akumulátorem |
4 | ORA | or with accumulator | logické OR s akumulátorem |
5 | EOR | exclusive or with accumulator | logické XOR s akumulátorem |
6 | INC | increment | zvýšení hodnoty o 1 (kupodivu nelze s akumulátorem, ovšem s pamětí ano) |
7 | INX | increment X | zvýšení hodnoty index registru X o 1 |
8 | INY | increment Y | zvýšení hodnoty index registru Y o 1 |
9 | DEC | decrement | snížení hodnoty o 1 (opět nelze s akumulátorem) |
10 | DEX | decrement X | snížení hodnoty index registru X o 1 |
11 | DEY | decrement Y | snížení hodnoty index registru Y o 1 |
12 | CMP | compare with accumulator | odečtení hodnoty od akumulátoru bez zápisu výsledku |
13 | CPX | compare with X | odečtení hodnoty od index registru X bez zápisu výsledku |
14 | CPY | compare with Y | odečtení hodnoty od index registru Y bez zápisu výsledku |
15 | BIT | bit test | logické AND bez uložení výsledků (změní se jen příznakové bity) |
16 | ASL | arithmetic shift left | aritmetický posun doleva o jeden bit |
17 | LSR | logical shift right | logický posun doprava o jeden bit |
18 | ROL | rotate left | rotace doleva o jeden bit |
19 | ROR | rotate right | rotace doprava o jeden bit |
16. Skoky a rozvětvení
Následují instrukce skoku, popř. skoku a výskoku ze subrutiny (podprogramu). Skákat je možné v rámci celé adresovatelné RAM, tedy v rozsahu 64kB:
# | Instrukce | Plné jméno | Popis |
---|---|---|---|
20 | JMP | jump | skok (existuje několik adresovacích režimů) |
21 | JSR | jump to subroutine | skok do podprogramu s uložením návratové adresy na zásobník |
22 | RTS | return from subroutine | návrat z podprogramu |
23 | RTI | return from interrupt | návrat z prerušovací rutiny |
Relativní skoky v rámci rozsahu –128 až 127 jsou provedeny na základě vyhodnocení nějaké podmínky, konkrétně testování zvoleného příznakového bitu. Oproti Motorole 6800 byl počet podmíněných skoků snížen na polovinu, takže některé kombinace podmínek neexistují (včetně BRA a BRN):
# | Instrukce | Plné jméno | Popis |
---|---|---|---|
24 | BCC | branch on carry clear | rozvětvení za podmínky C==0 |
25 | BCS | branch on carry set | rozvětvení za podmínky C==1 |
26 | BEQ | branch on equal (zero set) | rozvětvení za podmínky Z==1 |
27 | BMI | branch on minus (negative set) | rozvětvení za podmínky N==1 |
28 | BNE | branch on not equal (zero clear) | rozvětvení za podmínky Z==0 |
29 | BPL | branch on plus (negative clear) | rozvětvení za podmínky N==0 |
30 | BVC | branch on overflow clear | rozvětvení za podmínky O==0 |
31 | BVS | branch on overflow set | rozvětvení za podmínky O==1 |
17. Další instrukce
Další skupinou instrukcí jsou instrukce určené pro přesuny dat mezi operační pamětí a registry, popř. mezi registry navzájem:
# | Instrukce | Plné jméno | Popis |
---|---|---|---|
32 | LDA | load accumulator | načtení bajtu do akumulátoru |
33 | LDX | load X | načtení bajtu do registru X |
34 | LDY | load Y | načtení bajtu do registru Y |
35 | STA | store accumulator | uložení hodnoty akumulátoru |
36 | STX | store X | uložení hodnoty registru X |
37 | STY | store Y | uložení hodnoty registru Y |
38 | TAX | transfer accumulator to X | přesun X=A |
39 | TAY | transfer accumulator to Y | přesun Y=A |
40 | TSX | transfer stack pointer to X | přesun X=SP |
41 | TXA | transfer X to accumulator | přesun A=X |
42 | TXS | transfer X to stack pointer | přesun SP=X |
43 | TYA | transfer Y to accumulator | přesun A=Y |
44 | PHA | push accumulator | uložení akumulátoru na zásobník |
45 | PHP | push processor status (SR) | uložení příznaků na zásobník |
46 | PLA | pull accumulator | obnovení akumulátoru ze zásobníku |
47 | PLP | pull processor status (SR) | obnovení příznaků ze zásobníku |
Několik instrukcí pracuje s příznakovými bity:
# | Instrukce | Plné jméno | Popis |
---|---|---|---|
48 | CLC | clear carry | C=0 |
49 | CLD | clear decimal | D=0 |
50 | CLI | clear interrupt disable | I=0 |
51 | CLV | clear overflow | V=0 |
52 | SEC | set carry | C=1 |
53 | SED | set decimal | D=1 |
54 | SEI | set interrupt disable | I=1 |
Zbývají už jen dvě instrukce nezařazené do žádné výše uvedené skupiny:
# | Instrukce | Plné jméno | Popis |
---|---|---|---|
55 | NOP | no operation | přechod na další instrukci |
56 | BRK | break / interrupt | uložení PC a SR na zásobník, zastavení (návrat do monitoru) |
18. Jiné použití MOS 6502 v minimalistickém zařízení – herní konzole Atari 2600
Zatímco mikropočítač KIM-1 byl určen primárně pro výuku programování (ve strojovém kódu či assembleru) popř. pro jednoduché řídicí účely, byl o přibližně dva roky později vydán zcela odlišný typ stroje založeného na stejném mikroprocesoru MOS 6502 (resp. na jeho zjednodušené variantě). Jednalo se o slavnou herní konzoli Atari 2600 neboli Atari VCS, která byla dokonce realizována ještě s menším počtem čipů s velkou integrací (jeden z čipů byl ovšem zákaznický – TIA). Opět se tedy jednalo o minimalisticky pojatý hardware, ovšem určený pro zcela odlišnou skupinou uživatelů – hráče videoher.

Obrázek 12: Schéma zapojení herní konzole Atari 2600 s osmibitovým mikroprocesorem MOS 6507.
Při návrhu herní konzole Atari 2600 se její konstruktéři snažili o vytvoření co nejjednoduššího hardware, protože (v kontextu doby zcela správně) předpokládali, že většinu funkcionality by mělo zařídit programové vybavení a nikoli složitý a především drahý hardware. Navíc jednodušší hardware samozřejmě znamenal snížení výsledné ceny herní konzole na úroveň dostupnou i pro průměrné americké rodiny, což se ukázalo být velmi důležité. Původní prototypy sice byly zkonstruovány s využitím většího množství čipů o poměrně nízké integraci, ovšem výsledná verze konzole se – kromě přibližně třiceti diskrétních součástek – skládala pouze z trojice čipů s vyšší mírou integrace. Jednalo se především o samotný osmibitový mikroprocesor MOS 6507 s taktovací frekvencí 1,2 MHz, jenž byl umístěný v 28pinovém pouzdru (i díky tomu byla jeho cena nižší, než cena za plnohodnotný čtyřicetipinový MOS 6502, ovšem standardní kapacita EPROM byla kvůli tomu omezena na pouhé čtyři kilobajty). K mikroprocesoru byl připojen čip MOS 6532, jenž v sobě kombinoval operační paměť o kapacitě pouhých 128 bajtů (nikoli kilobajtů a už vůbec ne megabajtů) a taktéž dvojici osmibitových paralelních portů, k nimž byly mj. připojeny i oba digitální joysticky.

Obrázek 13: Herní konzole Atari 2600 vybavená mikroprocesorem MOS 6507, což je varianta původního čipu MOS 6502, ovšem se zmenšeným počtem pinů adresové sběrnice a několika dalšími omezeními.
Třetím čipem, který se velkou mírou podílel na úspěchu herní konzole Atari 2800, byl čip nazvaný TIA, neboli Television Interface Adaptor. Jednalo se o čip navržený Jayem Minerem, který se kromě práce na TIA později proslavil svým podílem na vývoji čipů ANTIC a GTIA určených pro osmibitové domácí počítače Atari a dále pak na vývoji čipové sady pro slavné počítače Amiga. Jay Miner ve svém čipu TIA, který byl postaven na bázi dvou prototypů navržených Joem Decuirem a Ronem Milnerem (jeden z prototypů se nazýval Stella, později se tak začal označovat i čip TIA a dokonce i celá konzole), implementoval jak jednoduchý ale překvapivě výkonný grafický řadič, tak i generátor zvuků. Jedním z typických znaků čipu TIA i některých dalších integrovaných obvodů navržených Jayem Minerem bylo použití polynomických čítačů (založených na posuvném registru se zpětnou vazbou) namísto běžných čítačů binárních. Předností polynomických čítačů je to, že na čipu zaberou přibližně čtvrtinu plochy v porovnání s binárními čítači, nevýhodou pak fakt, že se jejich hodnota nemění o jedničku, ale generuje se pseudonáhodná sekvence čísel. Nicméně pro potřeby generování obrazu i zvuků byly polynomické čítače díky své jednoduchosti výhodnější.
V následující tabulce jsou vypsány základní technické parametry herní konzole Atari 2600:
Mikroprocesor | MOS 6507 |
Grafický řadič | TIA |
Počet barev | 128 NTSC, 104 PAL, pouze 8 SECAM |
Zvuková syntéza | TIA |
Hodinová frekvence | 1,19 MHz |
Adresový rozsah | 8192 bajtů |
Kapacita RAM | 128 bajtů |
Kapacita ROM | 0 bajtů |
Kapacita ROM/EPROM na cartridge | standardně 4 kB, s bankou i 64 kB |
Vstupy | 2× digitální joystick, 2× paddle |
Výstup | televizní signál (úpravou lze získat i kompozitní video) |
19. Od MOS 6502 k čipu 65C816
Další vývoj řady MOS 6502 se ubíral několika směry. Jednou z větví je šestnáctibitový čip s označením 65C816GS. Zajímavé je, že vývoj tohoto mikroprocesoru byl zahájen na základě dohody mezi společností Apple a firmou WDC, v níž byl tento čip následně navržen a vyroben. CEO a současně i zakladatelem firmy WDC byl totiž známý inženýr Bill Mensch, který se v minulosti podílel na návrhu dvou osmibitových mikroprocesorů, které dost významným způsobem ovlivnily vývoj výpočetní techniky na přelomu sedmdesátých a osmdesátých let minulého století. Bill Mensch spolunavrhoval čip Motorola 6800 (proto jsme se o něm již zmiňovali v úvodní části článku) i podpůrné obvody pro tento mikroprocesor a posléze se podílel i na návrhu MOS 6502, takže není divu, že po přechodu do společnosti WDC prosadil, aby byly nové mikroprocesory navrhované, vyráběné a licencované touto firmou postaveny na základech čipu MOS 6502. Prvním z těchto čipů byl WDC 65C02, což byla varianta původního NMOS čipu 6502, která navíc obsahovala opravy některých chyb v původním návrhu tohoto mikroprocesoru (nepřímé skoky na adresy ležící na konci stránek atd.) a rozšíření jeho instrukční sady.

Obrázek 14: Mikropočítač Apple II postavený na čipu MOS 6502.
Odtud už byl vlastně jen docela malý krůček k tomu, aby se osmibitový čip WDC 65C02 rozšířil na šestnáctibitový čip WDC 65c816. Rozklíčovat jméno tohoto mikroprocesoru je při znalosti jeho historie snadné: 65 se odkazuje na řadu 6502, c značí výrobní technologii CMOS (mimochodem: plně statickou – díky malému počtu registrů je bylo možné implementovat formou klopných obvodů, což mj. umožňovalo plynule zmenšovat frekvenci hodinového signálu až na nulu) a dvojice čísel 8–16 znamená, že tento mikroprocesor mohl pracovat v téměř 100% kompatibilním osmibitovém režimu 6502, nebo mohl být naopak přepnutý do režimu 16bitového. Právě tato vlastnost byla vyžadována zástupci společnosti Apple, kteří potřebovali, aby jejich nový počítač Apple II GS mohl být zpětně kompatibilní s úspěšnou řadou osmibitových mikropočítačů Apple ][ (prostá emulace byla vzhledem k relativně nízkému výkonu tehdejších čipů prakticky nemyslitelná).

Obrázek 15: Mikropočítač Apple II GS postavený na čipu WDC 65c816.
20. Odkazy na Internetu
- 6502 PRIMER: Building your own 6502 computer
http://wilsonminesco.com/6502primer/ - KIM-1
https://en.wikipedia.org/wiki/KIM-1 - KIM-1 User Manual
https://kim-1.com/docs/usrman.htm - What is the KIM-1?
http://www.6502.org/trainers/buildkim/kim.htm - Build Your Own KIM-1 with Ruud Baltissen
http://www.6502.org/trainers/buildkim/buildkim.htm - 6502 Instruction Set
https://www.masswerk.at/6502/6502_instruction_set.html - Chip Hall of Fame: MOS Technology 6502 Microprocessor
https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-mos-technology-6502-microprocessor - Single-board computer
https://en.wikipedia.org/wiki/Single-board_computer - Apple II History Home
http://apple2history.org/ - www.6502.org
http://www.6502.org/ - 6502 PRIMER: Building your own 6502 computer – clock generator
http://wilsonminesco.com/6502primer/ClkGen.html - RCA 1802 (Wikipedia)
https://en.wikipedia.org/wiki/RCA_1802 - Great Microprocessors of the Past and Present (V 13.4.0)
http://www.cpushack.com/CPU/cpu.html - Chip Hall of Fame: RCA CDP 1802
https://spectrum.ieee.org/semiconductors/processors/chip-hall-of-fame-rca-cdp-1802 - The CPUs of Spacecraft: Computers in Space
http://cpushack.com/space-craft-cpu.html - Part I: RCA 1802, weirdness at its best (1974)
http://www.cpushack.com/CPU/cpu2.html#Sec2Part1 - Embedded Processor and Microcontroller primer and FAQ
http://www.faqs.org/faqs/microcontroller-faq/primer/ - COSMAC ELF: The CDP1802’s Place in Microcomputing History
http://www.cosmacelf.com/ - Cosmac 1802
http://www.nyx.net/~lturner/public_html/Cosmac.html - CDP1802AC/3: High-Reliability CMOS 8-Bit Microprocessor
https://www.renesas.com/eu/en/www/doc/datasheet/cdp1802ac-3.pdf - A Short Course In Programming
http://www.ittybittycomputers.com/IttyBitty/ShortCor.htm - The 1802 Instruction Set
https://www.atarimagazines.com/computeii/issue3/page52.php - Jak se zrodil procesor?
https://www.root.cz/clanky/jak-se-zrodil-procesor/ - Osmibitové mikroprocesory a mikrořadiče firmy Motorola (1)
https://www.root.cz/clanky/osmibitove-mikroprocesory-a-mikroradice-firmy-motorola-1/ - 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/ - 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/ - Československé osmibitové počítače
https://www.root.cz/clanky/ceskoslovenske-osmibitove-pocitace/ - 25 Microchips That Shook the World
https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world - COSMAC 1802: history of microprocessors in space
https://www.retrotechnology.com/memship/1802_spacecraft.html - COSMAC 1802 on AMSATs running IPS
https://www.retrotechnology.com/memship/amsat.html - Technické informace o sondě Galileo
https://www.retrotechnology.com/memship/galileo.txt - COSMAC “ELF” Microcomputer Trainer User’s Manual:
http://www.cosmacelf.com/publications/books/cosmac-elf-manual.pdf - RCA COSMAC MICROPROCESSOR
http://www.decodesystems.com/cosmac/ - Netronics ELF II
https://oldcomputers.net/netronics-elf.html - Netronics Elf II
http://www.qwkslva.com/Museum/Netronics_Elf/netronics_elf.html - Assorted COSMAC Computers
http://www.cosmacelf.com/gallery/assorted-cosmac-computers.html - RCA 1802 COSMAC (plocha čipu)
http://visual6502.org/images/pages/RCA_1802_die_shots.html - Joseph Weisbecker
https://en.wikipedia.org/wiki/Joseph_Weisbecker - Joe Weisbecker Video Game Collection
https://digital.hagley.org/weisbecker - CDP1802A
https://www.renesas.com/us/en/products/space-harsh-environment/harsh-environment/microprocessors-peripherals/device/CDP1802A.html#overviewInfo - Grafické karty a grafické akcelerátory (7)
https://www.root.cz/clanky/graficke-karty-a-graficke-akceleratory-7/ - Osmibitové mikrořadiče Rabbit: praví dědicové mikroprocesoru Zilog Z80
https://www.root.cz/clanky/osmibitove-mikroradice-rabbit-pravi-dedicove-mikroprocesoru-zilog-z80 - Čtyřicet let existence slavných mikroprocesorů řady Motorola 68000
https://www.root.cz/clanky/ctyricet-let-existence-slavnych-mikroprocesoru-rady-motorola-68000/ - Intel 8008 Instruction Set
https://www.bytecollector.com/archive/mark8/My_Mark-8_Info/Software/8008_ReferenceCard.PDF - Intel 8008 instruction set
https://www.pastraiser.com/cpu/i8008/i8008_opcodes.html - Silicon on sapphire
https://en.wikipedia.org/wiki/Silicon_on_sapphire - COSMAC ELF Lives Again, In FPGA
https://hackaday.com/2020/01/23/cosmac-elf-lives-again-in-fpga/ - verilog1802
https://github.com/jamesbowman/verilog1802 - 1802 FIG FORTH
https://www.retrotechnology.com/memship/figforth_1802.html - SuperElf
http://oldcomputermuseum.com/super_elf.html - COSMAC na Hackaday
https://hackaday.com/tag/cosmac/ - Vintage COSMAC Elf Is Pretty Close To Original
https://hackaday.com/2017/03/06/vintage-cosmac-elf-is-pretty-close-to-original/ - KIM Uno: a DIY clone of the KIM-1
https://obsolescence.wixsite.com/obsolescence/kim-uno-summary-c1uuh - Colorburst
https://en.wikipedia.org/wiki/Colorburst - List of common resolutions
https://en.wikipedia.org/wiki/List_of_common_resolutions - Intel MCS-8 (SIM8–01)
http://oldcomputermuseum.com/mcs-8.html - ATOMIC THEORY AND PRACTICE
http://members.casema.nl/hhaydn/howel/Acorn/Atom/atap/atap.htm - The Acorn Atom review
http://members.casema.nl/hhaydn/index-uk.html - The Acorn Atom
https://fjkraan.home.xs4all.nl/comp/atom/index.html