Herní konzole Uzebox s osmibitovým mikrořadičem ATmega644

22. 3. 2011
Doba čtení: 19 minut

Sdílet

V dnešní části seriálu o architekturách počítačů se budeme zabývat jednou poněkud neobvyklou aplikací osmibitových mikrořadičů Atmel. Jedná se o herní konzoli nazvanou Uzebox, jejíž nejzajímavější součástí je subsystém určený pro generování obrazu bez použití klasického framebufferu (obrazové paměti).

Obsah

1. Herní konzole Uzebox s osmibitovým mikrořadičem ATmega644

2. Základní moduly herní konzole Uzebox: video systém

3. Připojení herních ovladačů, rozhraní MIDI a rozhraní pro paměťové karty (Micro)SD

4. Generování video signálu na herní konzoli Uzebox

5. Rastrové obrázky bez použití framebufferu?

6. Základní grafický režim herní konzole Uzebox

7. Další podporované grafické režimy herní konzole Uzebox

8. Podpora pro zobrazení spritů

9. Odkazy na Internetu

1. Herní konzole Uzebox s osmibitovým mikrořadičem ATmega644

V předchozí části seriálu o architekturách počítačů jsme si řekli základní informace o osmibitových mikrořadičích ATtiny 4, ATtiny 5, ATtiny 9 a ATtiny 10 firmy Atmel a taktéž o v mnoha ohledech výkonnějším osmibitovém mikrořadiči ATmega644. Tento mikrořadič jsem si jako (do značné míry typického) zástupce celé řady ATmega nevybral náhodou, protože právě tento čip tvoří ústřední část zajímavé herní konzole nazvané Uzebox, jejímuž popisu budou věnovány následující odstavce. V této herní konzoli jsou uplatněny některé principy a postupy známé z doby největší slávy osmibitových mikropočítačů a taktéž herních konzolí první a druhé generace. Jedná se například o podporu několika grafických režimů s různým rozlišením a počtem současně zobrazitelných barev, podporu zobrazení spritů (pohybujících se objektů na obrazovce vykreslovaných nezávisle na pozadí), idea počítače/konzole zkonstruované s minimálním počtem elektronických součástek atd.

Obrázek 1: Herní konzole Uzebox obsahující osmibitový mikrořadič AVR řady ATmega, konkrétně typ ATmega644. Na základní desce můžeme vidět dvojici konektorů určených pro připojení ovladačů SNES, konektor pro výstup kompozitního videa i patici pro připojení menšího plošného spoje s vlastním mikrořadičem.

Autoři herní konzole Uzebox se v úplných počátcích své práce inspirovali projektem Rickarda Guneeyho, který navrhl a zkonstruoval hardwarový emulátor známé a z historického hlediska velmi důležité hry Pong (právě tato hra totiž pomohla odstartovat éru komerčních hracích automatů následovanou érou herních konzolí). Hardwarový emulátor hry Pong byl zkonstruován pomocí osmibitového mikrořadiče PIC a několika rezistorů, tedy s minimem elektronických součástek. Mikrořadič PIC se staral jak o vytváření zvuků, tak i o generování monochromatického video signálu se všemi důležitými synchronizačními pulsy, takže hru bylo možné zobrazit pomocí běžného televizoru nebo monitoru. Myšlenka hardwarového emulátoru herních konzolí postavených na moderních osmibitových mikrořadičích nakonec vedla ke vzniku herní konzole Uzebox založené na již o odstavec výše zmíněném mikrořadiči ATmega644, jehož základní charakteristiky jsme si popsali v předchozí části tohoto seriálu.

pc6608

Obrázek 2: Automatová hra Pong ve variantě z  roku 1972.

2. Základní moduly herní konzole Uzebox: video systém

Herní konzole Uzebox je navržena takovým způsobem, aby ji bylo možné jednoduše postavit i v domácích podmínkách, v extrémním případě dokonce i bez nutnosti použití plošného spoje – konzoli lze sestavit i na nepájivém kontaktním poli. Z tohoto důvodu obsahuje Uzebox pouze malé množství součástek, což je možné i z toho důvodu, že prakticky veškerá činnost je programově řízena osmibitovým mikrořadičem. Kromě mikrořadiče ATmega644 tvořícího ústřední část konzole můžeme na schématu najít digitálně-analogový převodník realizovaný pomocí sady rezistorů, který slouží k vytvoření trojice analogových signálů reprezentujících úrovně červené, zelené a modré barvové složky (za D/A převodníkem jsou zařazeny kondenzátory sloužící pro filtraci stejnosměrné složky). Výsledná trojice barvonosných signálů RGB je doplněna dvojicí signálů – horizontálním synchronizačním signálem a hodinovým signálem, který má v případě výstupu na televizory pracující v normě NTSC frekvenci 14.31818 MHz.

Obrázek 3: Moduly osmibitového mikrořadiče AVR ATmega 644.

Barvonosné signály RGB jsou spolu se synchronizačním signálem a hodinovým signálem přiváděny do druhého čipu – jedná se o obvod AD725 firmy Analog Devices, který slouží pro generování kompozitního videa a S-videa. Tento čip dokáže vytvářet výstup jak pro normu NTSC, tak i pro naši normu PAL, i když v tomto případě je nutné nepatrně upravit jak hodinovou frekvenci, tak i některé rutiny pro generování grafiky (to však není nic nového, protože se stejnou problematikou se museli vypořádat i konstruktéři osmibitových mikropočítačů). Pokud je herní konzole Uzebox připojena k monitoru, nemusí se čip AD725 použít, pouze se musí z mikrořadiče vyvést i vertikální synchronizační signál a v případě některých monitorů i upravit zapojení digitálně-analogových převodníků takovým způsobem, aby se amplituda barvonosných signálů zvýšila na jeden volt namísto 0,7 V (zde je ovšem situace závislá na typu monitoru, navíc některé moderní monitory nedokáží korektně pracovat s relativně nízkou frekvencí obrazu, kterou nelze zvýšit kvůli nedostatečnému výkonu mikrořadiče – viz též další text). Navíc je možné pro televizory s konektorem SCART (ovšem podporujících RGB režim!) zcela vynechat čip AD725 a použít přímo výstup z D/A převodníků.

Obrázek 4: Zapojení pinů čipu AD725.
(Zdroj: dokumentace výrobce čipu AD725)

3. Připojení herních ovladačů, rozhraní MIDI a rozhraní pro paměťové karty (Micro)SD

Kromě sady rezistorů a čipu AD725 zmíněného v předchozí kapitole je herní konzole Uzebox vybavena i rozhraním pro připojení dvojice ovladačů určených původně pro herní konzoli SNES (Super NES). V prvních návrzích Uzeboxu se sice uvažovalo (a stále pro to existuje podpora) o použití ovladačů určených původně pro NES, ovšem dnes je snazší zakoupit spíše ovladače pro SNES, nehledě na to, že tyto ovladače mají větší množství tlačítek využitelných ve složitějších hrách. Způsob čtení informací z ovladačů pro NES a SNES je poměrně jednoduchý, protože stav jednotlivých tlačítek (včetně malého „joysticku“ či křížového tlačítka na levé straně ovladače) je na základě signálu přijatého z herní konzole ukládán do posuvného registru o šířce 8 bitů (NES) popř. 16 bitů (SNES). Obsah tohoto registru lze přečíst takovým způsobem, že mikrořadič vygeneruje 8 nebo 16 hodinových pulsů a na druhém pinu ovladače se při každém pulsu objeví další bit vysunutý z posuvného registru.

Obrázek 5: Funkční diagram čipu AD725.
(Zdroj: dokumentace výrobce čipu AD725)

Vzhledem k tomu, že pro dva ovladače typu NES/SNES stačí pouze čtyři I/O piny mikrořadiče osmibitového portu, je možné zbývající čtyři piny využít pro připojení jiných typů ovladačů, například starodávného Paddle firmy Atari, kde postačuje vytvořit jednoduchý RC článek provádějící převod odporu potenciometru na čas nabití kondenzátoru atd. (navíc je volný celý port A umožňující připojení dalších typů ovladačů). Další součásti herní konzole jsou sice z uživatelského hlediska velmi zajímavé a užitečné, ale z konstrukčního hlediska jednoduché, protože veškerou práci obstarává samotný mikrořadič – jedná se o rozhraní MIDI, které jsme si již v tomto seriálu popsali (v podstatě je implementováno jako sériový port s hodinovou frekvencí vysílače 31250 Hz) a taktéž o rozhraní pro paměťové karty SD a MicroSD, které lze připojit k mikrořadiči pouze s pomocí několika rezistorů. To je ze základních součástí herní konzole Uzebox všechno, ovšem díky podpoře komunity vznikly i další pomocné moduly, například modul pro Ethernet atd. (naproti tomu existuje i jednodušší verze Uzeboxu bez čipu AD725, která však podporuje pouze zobrazení ve stupních šedi).

Obrázek 6: Vnitřní uspořádání herního ovladače SNES.

4. Generování video signálu na herní konzoli Uzebox

Z předchozího popisu herní konzole Uzebox je zřejmé, že naprostá většina funkčnosti konzole je soustředěna v osmibitovém mikrořadiči ATmega644. Ten musí nejenom umět načítat data z paměťových karet typu Micro SD či SD (což je funkcionalita vyřešená především programově, tj. nikoli na úrovni hardware), zjišťovat aktuální stavy tlačítek jednoho či dvou ovladačů typu NES/SNES či komunikovat s MIDI zařízením, ale především generovat obrazový signál, který je buď přímo přivedený na monitor s analogovým rozhraním DVI či na konektor typu SCART, nebo je nejprve zpracován čipem AD725, jenž zajišťuje generování color-burstu a popř. smíchání barvonosného signálu se synchronizačními signály, což je práce, kterou by nebylo možné přímo mikrořadičem provést, a to zejména z důvodu jeho nedostatečného výpočetního výkonu (ostatně i v osmibitových mikropočítačích se o generování video signálu staraly specializované čipy, například ULA v případě ZX Spectra či dvojice čipů ANTIC+GTIA(CTIA) u osmibitových počítačů Atari).

Obrázek 7: Průběh televizního signálu při zobrazení jednoho barevného obrazového řádku na televizoru pracujícího v normě NTSC (pro PAL a SECAM se mírně odlišují časové údaje zobrazené pod signálem). Oblast signálu pojmenovanou „color burst“ generuje čip AD725 zcela automaticky.

Pojďme si nyní popsat, jak je vlastně obrazový signál mikrořadičem ATmega644 vytvářen. Cílem autorů této herní konzole byla podpora grafických režimů s 256 barvami, což bylo skutečně splněno – při pohledu na schéma zapojení Uzeboxu vidíme, že zelená a červená barvová složka je přiváděna do digitálně-analogového převodníku na třech vodičích a modrá barvová složka je do převodníku přiváděna na vodičích dvou (pro výstup barev je tedy použit pouze jeden osmibitový I/O port). Díky této konstrukci je celkem rozeznáváno osm úrovní zelené i červené barvové složky a čtyři úrovně složky modré, což dohromady představuje 8×8×4=256 fixních barev. Mohlo by se tedy zdát, že je celá situace vlastně velmi jednoduchá: v datové paměti se vytvoří oblast pro framebuffer (obrazovou paměť) o vhodné velikosti, například 256×192 pixelů s osmi bity na pixel, a při generování obrazu se budou posílat hodnoty jednotlivých pixelů přečtené z framebufferu na I/O port C, z něhož budou digitálně zakódované barvové složky putovat do D/A převodníku a dále pak do čipu AD725, který se postará o vytvoření korektního kompozitního videa či S-videa (oba dva typy výstupu jsou čipem AD725 podporovány).

Obrázek 8: Průběh televizního signálu při zobrazení jednoho monochromatického obrazového řádku na televizoru pracujícího v normě PAL či SECAM.

5. Rastrové obrázky bez použití framebufferu?

Ve skutečnosti však situace s generováním video signálu není jednoduše řešitelná takovým způsobem, jaký byl popsán v předchozí kapitole, a to z jednoho prostého důvodu – osmibitový mikrořadič ATmega644 má totiž pouze čtyři kilobajty RAM, což pro alokaci framebufferu s nějakým užitečným rozlišením nedostačuje. Ostatně i u většiny domácích osmibitových mikropočítačů se velikost framebufferu pohybovala v hodnotách zhruba od šesti do šestnácti kilobajtů, a to se navíc většinou jednalo o grafické režimy s poměrně malým rozlišením a/nebo menším počtem barev než 256 (většinou bylo současně zobrazitelných osm nebo šestnáct barev, i když se počet barev dal díky různým trikům zvyšovat).

pc7007

Obrázek 9: Grafický režim multicolor osmibitových domácích mikropočítačů Commodore C64 je téměř ideální pro tvorbu statických obrázků.

Pro připomenutí jsou v následující tabulce vypsány grafické režimy vybraných osmibitových počítačů, s nimiž jsme se již seznámili v některém z předchozích dílů tohoto seriálu. Kvůli stručnosti nejsou v tabulce uvedeny všechny vlastnosti jednotlivých grafických režimů, například způsob použití barvových atributů (ZX Spectrum), zvýšení počtu barev s využitím FLI (C64), použití horizontálního přerušení (Atari XL/XE), spritů atd.:

Typ počítače Šířka Výška Počet barev Framebuffer Poznámka
ZX Spectrum 256 192 8(16) 6912 B 6144 B bitmapa+768 B atributy
Atari XL/XE 320 192 2 7680 B GR.8+16 („hi-res“)
Atari XL/XE 160 192 4 7680 B GR.15+16
Atari XL/XE 80 192 16 7680 B režim čipu GTIA
Commodore C64 320 200 16 9000 B 8000 B bitmapa+1000 B atributy
Commodore C64 160 200 16 9500 B 8000 B bitmapa+1000 B atributy+500 B Color RAM
PMD-85 (ČSSR) 288 256 3(5) 12288 B barva specifikována pro šestice pixelů
IQ-151 (ČSSR) 64 64 2 BW 2048 B modul VIDEO 64 – pseudografika
IQ-151 (ČSSR) 512 256 2 BW 16384 B modul GRAFIK
pc6907

Obrázek 10: Kombinace několika grafických režimů ve hře International Karate na domácím osmibitovém mikropočítači Atari XL či Atari XE.

6. Základní grafický režim herní konzole Uzebox

Vzhledem k tomu, že kapacita operační (datové) paměti osmibitového mikrořadiče ATmega644 skutečně nedostačovala pro alokaci dostatečně velké paměťové oblasti pro framebuffer, museli konstruktéři herní konzole Uzebox přijít s jiným řešením. Nakonec zvolili řešení, které je sice z dnešního pohledu poměrně neobvyklé, ale v žádném případě ne nové – pravděpodobně poprvé se s podobnou technologií mohli běžní uživatelé seznámit u slavné herní konzole Atari 2600, kterou jsme si již v tomto seriálu taktéž popsali. V čem toto řešení spočívá? Namísto toho, aby mikrořadič při generování video signálu, tj. při posílání osmibitových vzorků na port C, jednoduše četl barvy jednotlivých pixelů z framebufferu, jsou tyto barvy průběžně dopočítávány. Mikrořadič však ve většině situací nemá dostatečný výpočetní výkon na to, aby dokázal pro každý pixel provést nějaký složitý výpočet, ovšem v těch několika taktech, které jsou pro zobrazení každého pixelu k dispozici, stihne přečíst několik bajtů z paměti dat (SRAM) a/nebo paměti Flash.

pc6607

Obrázek 11: Hra Frogger ve verzi pro herní konzoli Atari 2600 vypadá – s ohledem na schopnosti této konzole – velmi pěkně.

A právě na kombinaci čtení informací z datové paměti (o kapacitě 4 kB) a paměti Flash (o kapacitě plných 64 kB) spočívá princip činnosti prakticky všech grafických režimů, které herní konzole Uzebox podporuje. Nejlépe si činnost mikrořadiče při generování videa vysvětlíme na původním grafickém režimu, který se dnes nazývá Mode 1. V tomto grafickém režimu je možné zobrazit rastrový obrázek o rozlišení 240×224 pixelů v 256 barvách, což teoreticky představuje velikost framebufferu 240×224=52 kB. Ve skutečnosti je však pro tento grafický režim v paměti dat vyhrazena oblast o kapacitě pouze 40×28×2=2240 bajtů. V této oblasti však nejsou uloženy přímo barvové informace o jednotlivých pixelech, ale ukazatele do oblasti paměti Flash (popř. i do oblasti datové paměti), v nichž jsou uloženy bitmapy „dlaždic“ (tile(s)), přičemž každá dlaždice má rozlišení 6×8 pixelů (což odpovídá 48 bajtům). Vzhledem k tomu, že v paměti dat jsou uloženy ukazatele na 40×28 dlaždic o rozlišení 6×8 pixelů, je výsledné rozlišení celého obrázku skutečně rovno 40×6=240 pixelům na šířku a 28×8=224 pixelům na výšku obrazu. Předností tohoto grafického režimu je snadná manipulace s obrázkem – postačuje měnit hodnoty oněch zmíněných 2240 bajtů, což je snadné a rychlé, nevýhodou pak relativně vysoké zatížení mikrořadiče při generování obrazu (další nevýhoda je zřejmá – je poměrně složité měnit hodnoty jednotlivých pixelů, což však paradoxně u většiny retro her není na škodu).

Obrázek 12: Pro porovnání s předchozím screenshotem – implementace hry Frogger na herní konzoli Uzebox.

7. Další podporované grafické režimy herní konzole Uzebox

Kromě původního grafického režimu Mode 1 byly postupem času navrženy a implementovány i další grafické režimy, které se od sebe odlišují jak rozlišením výsledného rastrového obrázku, tak i velikostí jednotlivých dlaždic, kapacitou alokované datové paměti, podporou scrollingu (žádný, vertikální, horizontální, oběma směry) a v neposlední řadě i podporou spritů. Většina grafických režimů je založena na principu dlaždic, podobně jako tomu bylo u původního grafického režimu (Mode 1), protože právě tento způsob zobrazení grafiky efektivně využívá jak možností SRAM (malá kapacita, ovšem s možností dynamické změny obsahu), tak i pamětí Flash (relativně velká kapacita, zatímco obsah je předprogramovaný při vzniku hry). Jednou z výjimek je Mode 8, což je klasický bitmapový grafický režim s rozlišením 120×96 pixelů. Ovšem vzhledem k omezené velikosti paměti SRAM bylo v tomto režimu nutné snížit počet barev na 4, což znamená, že jeden pixel je uložen ve dvou bitech. Celková kapacita alokované datové paměti v tomto režimu se vypočte snadno: 120×96×2/8=28­80 bajtů.

Obrázek 13: Hra Tetris ve verzi pro herní konzoli Uzebox využívá vlastností režimu 1 (Mode 1).

Velmi často se při implementaci her na konzoli Uzebox používá grafický režim Mode 3, který nabízí stejné rozlišení jako Mode 1 (240×224 pixelů), ovšem jeho interní struktura je poněkud odlišná. První odlišnost spočívá v tom, že v paměti dat (SRAM) je umístěna oblast o velikosti pouze 32×32=1024 bajtů. Na rozdíl od režimu 1 však v této oblasti nejsou uloženy přímé ukazatele na bitmapy dlaždic, ale „pouze“ osmibitové indexy dlaždic, kterých tak může být až 256, což je při dané kapacitě paměti Flash více než dostatečné. Každá dlaždice má v tomto režimu rozlišení 8×8 pixelů, takže teoretické rozlišení výsledného obrázku je 256×256 pixelů. Ve skutečnosti se však z matice 32×32 dlaždic využívá pouze submatice o rozměrech 30×28, takže výsledné rozlišení je 240×224 pixelů (proč jsou dlaždice uloženy ve větší matici je pravděpodobně zřejmé – pro co největší urychlení výpočtů při generování videa). Ovšem režim Mode 3 navíc nabízí i tři další vlastnosti: scrolling celé obrazovky, scrolling části obrazovky (ve zbylé části může být například zobrazeno skóre a/nebo počet zbývajících životů) a především podporu spritů.

Obrázek 14: Úvodní obrazovka hry Space Invaders používá grafický režim 3 (Mode 3).

8. Podpora pro zobrazení spritů

O významu termínu sprite jsme se již zmínili při popisu grafického subsystému osmibitových domácích mikropočítačů Atari XL/XE a Commodore C64. Jednalo se o bitmapy s poměrně malým rozlišením (24×21 pixelů na C64, 8×256 pixelů na osmibitových Atari) a většinou omezeným počtem barev, které mohly být zobrazeny na libovolném místě obrazovky nezávisle na zobrazeném pozadí, které se pro odlišení nazývalo playfield. Pokud bylo zapotřebí spritem po obrazovce pohybovat, postačovalo změnit obsah některého řídicího registru, nebylo tedy nutné zdlouhavě přesouvat data ve framebufferu. Mezi další přednosti spritů patřila možnost definice jejich priority (tj. efektu, který nastane v případě, že jsou sprity zobrazeny na stejném místě obrazovky) a taktéž možnost detekce kolize spritů mezi sebou navzájem nebo kolize spritu s některou barvou pozadí (playfieldu). Informace o kolizi se většinou zapisovala do takzvaných kolizních registrů.

Obrázek 15: Původní verze hry Moon Patrol pro herní konzoli Atari 2600.

ict ve školství 24

Zatímco na osmibitových domácích mikropočítačích byly sprity implementovány v některém specializovaném čipu (GTIA u osmibitových počítačů Atari a VIC-IICommodore C64), musí být sprity na herní konzoli Uzebox realizovány programově. V případě grafického režimu Mode 3 mají sprity rozlišení 8×8 pixelů a mohou být umístěny kdekoli na obrazovce, tj. neplatí pro ně omezení stejná jako pro dlaždice tvořící pevnou matici. Sprity jsou zobrazovány takovým způsobem, že kernel herní konzole Uzebox nejdříve na základě aktuální souřadnice spritů zjistí, kolik dlaždic sprite ve skutečnosti překrývá (může se jednat o jednu, dvě či čtyři dlaždice podle toho, jestli je některá souřadnice spritu dělitelná osmi). Posléze kernel v paměti SRAM vytvoří datovou strukturu, do níž je sprite vykreslen oproti správnému pozadí (původnímu obsahu dlaždic). Kernel taktéž dokáže správně rozpoznat situaci, kdy se více spritů překresluje přes sebe, ovšem spotřeba paměti SRAM v tomto případě roste. Pro většinu her, které samy nespotřebují větší množství SRAM (kam se ukládá dosažené skóre, počet zbývajících životů, pozice hráče ale i zásobník), je možné tímto způsobem na jednu obrazovku vykreslit cca 20 spritů.

Obrázek 16: Hra Moon Patrol ve verzi pro herní konzoli Uzebox.

9. Odkazy na Internetu

  1. Uzebox pages: introduction
    http://belogic­.com/uzebox/ho­witsmade.htm
  2. Uzebox pages: hardware description
    http://belogic­.com/uzebox/har­dware.htm
  3. Uzebox pages: Video primer
    http://belogic­.com/uzebox/vi­deo_primer.htm
  4. Uzebox pages: schemas
    http://belogic­.com/uzebox/dow­nloads.htm
  5. AVRFreaks Wiki
    http://www.avrfre­aks.net/wiki/in­dex.php/Main_Pa­ge
  6. Atmel AVR 8– and 32-bit
    http://www.at­mel.com/produc­ts/avr/
  7. tinyAVR
    http://www.at­mel.com/dyn/pro­ducts/devices­.asp?category_id=163&fa­mily_id=607&sub­family_id=791
  8. AT-Mini
    http://www.mi­kroe.com/eng/pro­ducts/view/649/at-mini-board/
  9. Arduino
    http://www.ar­duino.cc/
  10. AVR Microcontroller
    http://www.en­gineersgarage­.com/articles/a­vr-microcontroller
  11. Atmel AVR – Wikipedia
    http://en.wiki­pedia.org/wiki/At­mel_AVR
  12. AVR instruction set
    http://avr.hw­.cz/architektu­ra/instukce.html
  13. Porovnání jednotlivých procesorů AVR
    http://avr.hw­.cz/architektu­ra/porovnani.html
  14. 68HC11 Instruction Set
    http://www.cs­.uaf.edu/2007/fa­ll/cs441/proj1no­tes/sawyer/in­st.html
  15. 68HC11 OpCode Map
    http://home.e­arthlink.net/~tdic­kens/68hc11/68h­c11_opcode_map­.html
  16. A Simple Robot Using the 68HC11 Processor
    http://home.e­arthlink.net/~tdic­kens/68hc11/trp­2/trp2.html
  17. 68HC11 C-Compiler (Imagecraft)
    http://microcon­trollershop.com/pro­duct_info.php?pro­ducts_id=188
  18. GNU Development Chain for 68HC11&68HC12
    http://www.gnu­.org/software/m68hc11/
  19. GNU C for 68HC11 – documentation
    http://www.gnu­.org/software/m68hc11/m­68hc11_doc.html
  20. The P-Brain tm Microcontroller Kit
    http://www.fu­turebots.com/bra­in.htm
  21. Wikipedia: Motorola 68HC05
    http://en.wiki­pedia.org/wiki/Mo­torola_68HC05
  22. Wikipedia: Freescale 68HC08
    http://en.wiki­pedia.org/wiki/68HC08
  23. Wikipedia: Freescale 68HC11
    http://en.wiki­pedia.org/wiki/68HC11
  24. Wikipedia: Freescale 68HC12
    http://en.wiki­pedia.org/wiki/Fre­escale_68HC12
  25. HC05 Processor Families
    http://www.fre­escale.com/we­bapp/sps/site/o­verview.jsp?no­deId=016246844­98633
  26. HC08 Processor Families
    http://www.fre­escale.com/we­bapp/sps/site/o­verview.jsp?no­deId=016246844­97663
  27. Digital Core Design 68HC08 – HDL IP Core
    http://www.dcd­.pl/acore.php?id­core=82
  28. Freescale 68HC11
    http://www.fre­escale.com/we­bapp/sps/site/ta­xonomy.jsp?no­deId=016246844­98635
  29. Lifecycle of a CPU:
    http://www.cpushac­k.net/life-cycle-of-cpu.html
  30. Most wanted CPU of the world:
    http://www.cpu-galaxy.at/CPU/In­tel%20CPU/3002–8008/4004%20G­rey.jpg
  31. Wikipedia: 6502:
    http://en.wiki­pedia.org/wiki/6502
  32. The Western Design Center, Inc.:
    http://www.wes­terndesigncen­ter.com/
  33. Apple II History Home:
    http://apple2his­tory.org/
  34. www.6502.org:
    http://www.6502­.org/
  35. Stránky firmy Microchip Technology
    http://www.mi­crochip.com/
  36. Výběr z různých modelů (osmibitových) mikrořadičů PIC
    http://www.mi­crochip.com/ste­llent/idcplg?Id­cService=SS_GET_PA­GE&nodeId=2661
  37. Řada (rodina) osmibitových mikrořadičů PIC 10
    http://www.mi­crochip.com/Pa­ramChartSearch/char­t.aspx?branchID=1009&mi­d=10&lang=en&pa­geId=74
  38. Řada (rodina) osmibitových mikrořadičů PIC 12
    http://www.mi­crochip.com/Pa­ramChartSearch/char­t.aspx?branchID=1001&mi­d=10&lang=en&pa­geId=74
  39. Řada (rodina) osmibitových mikrořadičů PIC 14
    http://www.mi­crochip.com/Pa­ramChartSearch/char­t.aspx?branchID=1008&mi­d=10&lang=en&pa­geId=74
  40. Řada (rodina) osmibitových mikrořadičů PIC 16
    http://www.mi­crochip.com/Pa­ramChartSearch/char­t.aspx?branchID=1002&mi­d=10&lang=en&pa­geId=74
  41. Další výběr z různých modelů mikrořadičů PIC
    http://www.mi­crochip.com/map­s/microcontro­ller.aspx
  42. PIC microcontroller (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/PIC_mi­crocontroller
  43. Mikrokontrolér PIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Mi­krokontrolér_PIC
  44. FLASHFORTH for the PIC18F and the dsPIC30F
    http://flashf­orth.sourcefor­ge.net/
  45. FlashForth
    http://www.sou­rceforge.net/pro­jects/flashfor­th
  46. Free Pic software tools
    http://softwa­repic.50webs.com/fre­esoft.html
  47. What is Amicus?
    http://www.pic­basic.org/pro­ton_lite.php
  48. Amicus FAQ
    http://www.my­amicus.co.uk/faq­.php?s=2e8d12e7f4c23e775­776f4916876354b&
  49. Microcontrollers development tools
    http://www.gnu­pic.dds.nl/
  50. gpsim (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Gpsim
  51. gpsim home page
    http://gpsim.sou­rceforge.net/gpsim­.html
  52. The FreeRTOS Project
    http://www.fre­ertos.org/
  53. FreeRTOS (Wikipedia)
    http://en.wiki­pedia.org/wiki/Fre­eRTOS
  54. Serial EEPROM (93C46 / 93CS46) Routines
    http://www.pjrc­.com/tech/8051/se­rial-eeprom.html
  55. Great Microprocessors of the Past and Present (V 13.4.0)
    http://jbayko­.sasktelwebsi­te.net/cpu.html
  56. SPI interface tutorial
    http://www.best-microcontroller-projects.com/spi-interface.html
  57. Serial Peripheral Interface Bus
    http://en.wiki­pedia.org/wiki/Se­rial_Peripheral_In­terface_Bus
  58. EUSB to SPI bus Kit
    http://www.ei­dusa.com/Elec­tronics_Kits_E­USB_To_SPI_BUS­.htm
  59. SPI Block Guide V03.06, Freescale Semiconductor
    http://www.fre­escale.com/fi­les/microcontro­llers/doc/ref_ma­nual/S12SPIV3­.pdf
  60. What is SPI?
    http://www.fpga4fun­.com/SPI1.html
  61. SPI – A simple implementation
    http://www.fpga4fun­.com/SPI2.html
  62. Bit-banging
    http://en.wiki­pedia.org/wiki/Bit-banging
  63. Joint Test Action Group
    http://en.wiki­pedia.org/wiki/JTAG
  64. I2C
    http://en.wiki­pedia.org/wiki/I2C
  65. Seriál o programovacím jazyce Forth:
    seriál o programovacím jazyce Forth
  66. Display Data Channel
    http://en.wiki­pedia.org/wiki/Dis­play_Data_Chan­nel
  67. I2 Background
    http://www.mi­croport.tw/blog­new.php?blog_no­=7#theory
  68. PIC16F87X, 28/40-pin 8-Bit CMOS FLASH Microcontrollers
    Microchip Technology Inc.
    http://www.mi­crochip.com

Autor článku

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