Mikroprocesory a mikrořadiče s jádrem SH-2A aneb vítězství superskalární architektury

20. 9. 2016
Doba čtení: 17 minut

Sdílet

Ve třetím článku o architektuře SuperH se budeme věnovat popisu instrukční sady SH-2A. Jedná se o rozšíření původní sady SH-2 o instrukce užitečné zejména v mikrořadičích a taktéž při zpracování signálů.

Obsah

1. Mikroprocesory a mikrořadiče s jádrem SH-2A aneb vítězství superskalární architektury

2. Základní vlastnosti čipů SH-2A

3. Harvardská architektura a externí sběrnice

4. Banky pracovních registrů

5. Rozšíření možností při načítání konstant

6. Instrukce určené pro provádění bitových operací

7. Uložení či načtení většího množství registrů

8. Oříznutí příliš velkých či malých hodnot při zpracování signálu instrukcí CLIPx

9. Nové instrukce pro násobení a dělení

10. Přídavné instrukce pro práci se stavovým bitem T

11. Použití dvanáctibitového offsetu při adresování dat v operační paměti

12. Další nové instrukce

13. Jádro SH2A-FPU

14. Odkazy na Internetu

1. Mikroprocesory a mikrořadiče s jádrem SH-2A aneb vítězství superskalární architektury

Čipy s původní instrukční sadou SH-2, kterou jsme si popsali v předchozích dvou článcích, se sice doposud používají, ale většinou se již setkáme buď s instrukční sadou SH-4 (tou se budeme zabývat příště) nebo s instrukční sadou SH-2A. Mikroprocesory a mikrořadiče SH-2A jsou při použití shodné hodinové frekvence obecně mnohem výkonnější, než původní jádra SH-2. Větší výpočetní rychlost SH-2A je způsobena více faktory; nejdůležitější je však to, že v čipech SH-2A je použita superskalární architektura, takže je možné (samozřejmě v ideálním případě, tj. pokud nedojde ke konfliktům) v jednom taktu dokončit dvě instrukce. Superskalární architektura je dále podporována použitím Harvardského procesoru, kdy je datová sběrnice oddělena od sběrnice použité pro načítání instrukcí (tím se výrazně sníží počet kolizí při přístupu do operační paměti). Navíc je instrukční sada SH-2A doplněna o řadu nových instrukcí, s nimiž se seznámíme v navazujících kapitolách.

2. Základní vlastnosti čipů SH-2A

Čipy SH-2A byly navrženy zejména s ohledem na jejich praktické použití v mikrořadičích a při zpracování signálů. Můžeme zde vidět určitý odklon od čisté RISCové architektury, který je zejména patrný u instrukcí s 32bitovým instrukčním slovem, protože původní instrukce měly konstantní šířku šestnácti bitů (to sice pravděpodobně způsobilo nějaké komplikace v dekodéru instrukcí, ovšem na druhou stranu to vedlo ke zvýšení efektivity kódu). Dále byly přidány takzvané banky registrů, s jejichž využitím bylo možné zrychlit vstup a zahájení běhu přerušovací rutiny na šest cyklů. Přidány byly instrukce určené pro zjednodušení zpracování signálů (clipping), dále pak instrukce pro implementaci Booleovského procesoru (operace s jednotlivými bity), blokové přenosy registrů atd. Volitelně bylo možné čip rozšířit i o matematický koprocesor s vlastní sadou pracovních registrů a instrukcí.

3. Harvardská architektura a externí sběrnice

Původní pipeline s pěti řezy, o níž jsme se zmínili při popisu čipů SH-2, je v případě čipů SH-2A rozšířena takovým způsobem, aby bylo možné zpracovávat současně dvě instrukce. Uvnitř čipů nalezneme dvojici sběrnic pojmenovaných F-bus a M-bus, přičemž první sběrnice slouží pouze pro načítání instrukcí (zápis do paměti instrukcí se neprovádí, u mikrořadičů je to ještě zvýrazněno použitím Flash EEPROM namísto běžné DRAM) a druhá sběrnice slouží pro přenos dat. Díky tomuto poměrně striktnímu oddělení instrukcí od dat bylo možné dosáhnout toho, aby se poslední fáze zpracování instrukce v pipeline (WB – write back) popř. prostřední fáze (MA – memory access) mohla překrývat s první fází jiné instrukce (IF – instruction fetch), a to bez vzniku konfliktu. Toto rozdělení je dále podpořeno i rozdělením cache první úrovně, která má pro instrukce kapacitu 8 kB a pro data taktéž 8 kB.

4. Banky pracovních registrů

Zejména pro rychlé reakce na přerušení (spuštění algoritmu v přerušovací rutině) jsou procesory SH-2A vybaveny takzvanými bankami registrů. V každém banku je uloženo devatenáct 32bitových registrů – patnáct pracovních registrů R0 až R14 (bez R15), řídicí registr GBR, registry MACH a MACL popsané minule (viz operaci multiply and accumulate) a registr PR. Celkově je k dispozici patnáct banků, mezi nimiž je možné se přepínat. Přepnutím je zde myšlena operace, při níž se naplní všech devatenáct zmíněných registrů hodnotami z vybraného banku. Mezi aktuálním bankem a jiným bankem lze přenášet vždy obsah jednoho registru instrukcemi LDBANK a STBANK, viz též následující tabulka instrukcí (zdrojovým a cílovým registrem v aktuálním banku je vždy R0):

# Zkratka Počet cyklů Stručný popis instrukce
1 RESBANK 9 přepnutí banky registrů a tím pádem přepsání všech 19 výše zmíněných registrů
2 STBANK 7 uložení registru R0 do vybrané banky registrů
3 LDBANK 6 načtení registru R0 z vybrané banky registrů

5. Rozšíření možností při načítání konstant

Mnoho typů RISCových procesorů, včetně původních čipů s instrukční sadou SH-2, trpí jedním společným nedostatkem – kvůli použití instrukcí pevné délky, která většinou odpovídá bitové šířce zpracovávaných operandů (typicky 32 bitů) není možné, aby v instrukční sadě existovala instrukce, která dokáže načíst celou 32bitovou konstantu. U původních procesorů SH-2 byla situace ještě o něco horší, protože kvůli 16bitovým slovům byla ve skutečnosti šířka konstant omezena na pouhých osm bitů. Typickým příkladem je instrukce MOV #imm, Rn (nejdříve se zapisuje zdrojový operand, poté operand cílový) s formátem:

15  12    8    4    0
+----+----+----+----+
|1110|dddd|iiii iiii|
+----+----+----+----+

Toto poměrně zásadní omezení bylo u instrukční sady SH-2A odstraněno, protože několik vybraných instrukcí má šířku 32 bitů. To ve skutečnosti nepřináší velká omezení, protože šířka externí sběrnice pro načítání instrukcí je 32bitová, takže se „pouze“ zmenší datový tok u několika instrukcí. U dvou nových instrukcí pojmenovaných MOVI20 a MOVI20S je použita 20bitová hodnota, která je při načítání instrukčního slova znaménkově rozšířena, tj. v praxi lze pracovat s hodnotami od –219 do 219-1. Povšimněte si, že obě nové instrukce trvají pouhý jeden takt:

# Zkratka Počet cyklů Stručný popis instrukce
1 MOVI20 1 přenos konstanty o šířce 20 bitů do registru Rn
2 MOVI20S 1 dtto, ale konstanta je posunuta o osm bitů doleva

Formát instrukce MOVI20 vypadá takto (dddd je index registru Rn a iiii první čtyři bity konstanty):

15  12    8    4    0    15  12    8    4    0
+----+----+----+----+    +----+----+----+----+
|0000|dddd|iiii|0000|    |spodních 16 bitů # |
+----+----+----+----+    +----+----+----+----+

Formát instrukce MOVI20S je prakticky stejný, až na nejnižší bit prvního instrukčního slova:

15  12    8    4    0    15  12    8    4    0
+----+----+----+----+    +----+----+----+----+
|0000|dddd|iiii|0001|    |spodních 16 bitů # |
+----+----+----+----+    +----+----+----+----+

V praxi se tedy můžeme setkat s následujícími způsoby načtení konstanty. U osmibitové konstanty se použije obyčejná instrukce MOV, u konstanty 20bitové instrukce MOVI20, u konstanty s šířkou do 28 bitů můžeme použít kombinaci MOVI20S+OR a konečně pokud je konstanta širší, nezbývá nic jiného, než ji uložit někam za aktuální subrutinu a načíst ji adresováním přes hodnotu registru PC+offset (výběr samozřejmě v případě vyššího programovacího jazyka provádí překladač):

Konstanta Sekvence instrukcí
8 bitů MOV #konstanta, R0
16 bitů MOVI20 #konstanta, R0
20 bitů MOVI20 #konstanta, R0
28 bitů MOVI20S #konstanta, R0
OR #k8, R0
32 bitů MOV @(offset, PC), R0

6. Instrukce určené pro provádění bitových operací

V oblasti mikrořadičů se již od dob slavného (a bohužel dodnes používaného) čipu Intel 8051 (MCS-51) můžeme setkat s implementací takzvaného Booleovského procesoru. Tímto poněkud nadneseným jménem se označuje sada instrukcí, které dokážou pracovat na úrovni jednotlivých bitů a nikoli celých slov, a to (většinou) dokonce takovým způsobem, že i přístup do paměti či do řídicích registrů periferních zařízení je prováděn po jednom bitu (například negace jediného bitu je rozdílná operace od přečtení bajtu/slova do akumulátoru, negace vybraného bitu a zápis celého bajtu/slova zpět). Jen pro zajímavost: na již zmíněném mikrořadiči MCS-51 je implementován úplný Booleovský procesor s jednobitovým akumulátorem (tím je příznak C/carry), 128 bitovou oblastí RAM a 128 bitovou oblastí speciálních řídicích registrů (SFR).

Tento původní Booleovský procesor měl k dispozici devět instrukcí. S podobným konceptem jsme se seznámili i při popisu jader Cortex-M3 a nalezneme ho i u čipů s instrukční sadou SH-2A, kde je k dispozici čtrnáct nových instrukcí. Ty lze rozdělit do čtyř skupin. V první skupině nalezneme instrukce pro vynulování či nastavení vybraného bitu pracovního registru. Tyto instrukce trvají jeden takt. Ve druhé skupině jsou instrukce, které vybraný bit pracovního registru přenesou do příznakového bitu T či naopak. I tyto instrukce trvají jeden takt. Třetí skupinu tvoří instrukce pro nastavení či vynulování bitu v paměti; zde si již ovšem počkáme tři takty. A konečně v poslední skupině jsou instrukce, které zkombinují příznakový bit T s bitem načteným z operační paměti. I tyto instrukce trvají tři takty:

# Zkratka Počet cyklů Stručný popis instrukce
1 BCLR 1 vynulování i-tého bitu registru Rn
2 BSET 1 nastavení i-tého bitu registru Rn (na 1)
       
3 BLD 1 přenos i-tého bitu registru Rn do příznakového bitu T
4 BST 1 přenos příznakového bitu T do i-tého bitu registru Rn
       
5 BCLR.B 3 uložení 0 na i-tý bit na adrese (disp + Rn))
6 BSET.B 3 uložení 1 na i-tý bit na adrese (disp + Rn))
       
7 BLD.B 3 načtení i-tého bitu z adresy (disp + Rn) a uložení do T
8 BLDNOT.B 3 negace předchozího výpočtu
9 BST.B 3 uložení T do i-tého bitu na adrese (disp + Rn)
10 BAND.B 3 (i-tý bit z adresy (disp + Rn)) ∧ T → T
11 BANDNOT.B 3 negace předchozího výpočtu
12 BOR.B 3 (i-tý bit z adresy (disp + Rn)) | T → T
13 BORNOT.B 3 negace předchozího výpočtu
14 BXOR.B 3 (i-tý bit z adresy (disp + Rn)) ⊕ T → T

7. Uložení či načtení většího množství registrů

Zajímavé a přitom užitečné je, že i u mikroprocesorů a mikrořadičů s instrukční sadou SH-2A došlo k přidání instrukcí sloužících pro načtení většího množství registrů z operační paměti či naopak pro uložení většího množství registrů zpět do operační paměti. Podobné instrukce nalezneme například i u mikroprocesorů ARM s instrukcemi LDM a STM (viz též [1]). V instrukční sadě SH-2A sice nemáme možnost si zvolit registry pomocí bitové masky, ale určitá volba zde přece jen existuje – můžeme zvolit rozsah indexů ukládaných či načítaných registrů od 0 do R14 (poslední registr R15 je použit pro adresování). Podívejme se na čtveřici nových instrukcí, která se pro tyto účely používá:

# Zkratka Počet cyklů Stručný popis instrukce
1 MOVML.L Rm,@-R15 1 až 16 zápis registrů R0..Rm do paměti adresované R15
2 MOVML.L @R15+,Rn 1 až 16 přečtení registrů R0..Rn z paměti adresované R15
3 MOVMU.L Rm,@-R15 1 až 16 zápis PR a registrů Rn..R14 do paměti adresované R15
4 MOVMU.L @R15+,Rn 1 až 16 přečtení registrů PR a Rn..R14 z paměti adresované R15

Povšimněte si, že doba trvání těchto instrukcí je proměnná a pochopitelně závisí na počtu ukládaných či načítaných registrů.

8. Oříznutí příliš velkých či malých hodnot při zpracování signálu instrukcí CLIPx

Instrukce popsané v této kapitole jsou velmi užitečné při zpracování signálů. Pro ilustraci si představme zpracování obrázků s osmibitovými hodnotami pixelů:

Obrázek 1: Zdrojový rastrový obrázek (známá fotografie Lenny), který tvoří zdroj pro jednoduchý konvoluční (FIR) filtr, jenž zvyšuje hodnoty pixelů o pevně zadanou konstantu (offset).

Obrázek 2: Pokud je pro přičtení offsetu použita operace součtu se zanedbáním přenosu (carry), tj. když se počítá systémem „modulo N“, dochází při překročení maximální hodnoty pixelu (čistě bílá barva) k jasně viditelným chybám.

Obrázek 3: Při použití operace součtu se saturací sice taktéž dojde ke ztrátě informace (vzniknou oblasti s pixely majícími hodnotu 255), ovšem viditelná chyba je mnohem menší, než na předchozím obrázku.

Aby nebylo nutné po každém sčítání, násobení atd. neustále kontrolovat, zda došlo k přetečení, byla u některých typů procesorů zavedena takzvaná aritmetika se saturací, což zjednodušeně řečeno znamená, že při provádění vybraných aritmetických operací nikdy nedošlo k přetečení či podtečení. U mikroprocesorů s instrukční sadou SH-2A je tomu jinak, protože aritmetické operace zůstaly nezměněny (ani se nijak nerozšířily), ovšem ihned po jejich provedení lze aplikovat jednu z vybraných ořezových operací (pro bajty či 16bitová slova, navíc buď pro hodnoty se znaménkem či bez znaménka):

# Zkratka Počet cyklů Stručný popis instrukce
1 CLIPS.B Rn 1 když Rn > 127, zapiš do Rn 127 a nastav CS
totéž pro podmínku Rn < –128
2 CLIPS.W Rn 1 když Rn > 32767, zapiš do Rn 32767 a nastav CS
totéž pro podmínku Rn < –32768
3 CLIPU.B Rn 1 když Rn > 255, zapiš do Rn 255 a nastav CS
4 CLIPU.W Rn 1 když Rn > 65535, zapiš do Rn 65535 a nastav CS

Poznámka: CS je označení bitu uloženého ve stavovém registru SR.

9. Nové instrukce pro násobení a dělení

Připomeňme si, že mikroprocesory s instrukční sadou SH-2 vlastně nepodporovaly instrukci pro provedení celočíselného dělení, ať již čísel se znaménkem nebo bez znaménka. Namísto toho se používaly tři instrukce nazvané DIV0S, DIV0U a DIV1. První dvě instrukce připravily stavové bity M, Q a T používané při dělení a třetí instrukce vždy provedla jeden krok dělení. Taktéž násobení bylo omezeno, protože výsledek se ukládal do registru MAC, nikoli do běžného pracovního registru. S tímto omezením se již na čipech SH-2A nesetkáme, a to díky trojici nových instrukcí popsaných v následující tabulce:

# Zkratka Počet cyklů Stručný popis instrukce
1 MULR 2 operace Rn × R0 → Rn
       
2 DIVU 36 operace Rn ÷ R0 → Rn (hodnoty bez znaménka)
3 DIVS 34 operace Rn ÷ R0 → Rn (hodnoty se znaménkem)

Poznámka: pozorněji si u posledních dvou řádků prohlédněte sloupec nadepsaný „Počet cyklů“, aby byl jasně patrný rozdíl mezi již popsanými instrukcemi DIV0S, DIV0U a DIV1, které sice trvají pouhý jeden takt, ovšem provedou vždy jen jeden krok dělení (někdy není nutné skutečně dělit celá 32bitová čísla, proto mají tyto instrukce svůj význam).

10. Přídavné instrukce pro práci se stavovým bitem T

Tato kapitola bude v porovnání s ostatními kapitolami velmi krátká, protože si v ní popíšeme pouze dvě nové instrukce, které slouží pro operace se stavovým bitem T (Test). Připomeňme si, že pro přímou manipulaci s tímto bitem existuje už v původních procesorech s instrukční sadou SH-2 trojice instrukcí nazvaných MOVT, CLRT a SETT, viz též následující tabulku:

# Zkratka Počet cyklů Stručný popis instrukce
1 MOVT 1 uložení bitu T do zvoleného registru Rn (nastaví se nejnižší bit registru, ostatní bity se vynulují)
2 CLRT 1 vynulování stavového bitu; 0→T
3 SETT 1 nastavení stavového bitu; 1→T

K těmto třem instrukcím byly přidány další dvě instrukce, z nichž jedna přenáší negovanou hodnotu stavového bitu T do zvoleného registru Rn a druhá instrukce tento bit neguje. Obě tyto nové instrukce jsou podle očekávání dokončeny v jediném taktu:

# Zkratka Počet cyklů Stručný popis instrukce
1 MOVRT 1 přenos negovaného bitu T do vybraného registru Rn
2 NOTT 1 negace stavového bitu; T=~T

11. Použití dvanáctibitového offsetu při adresování dat v operační paměti

Při popisu nových instrukcí MOVI20 a MOVI20S jsme se seznámili s konceptem použití dvojnásobné šířky instrukčního slova, tj. s využitím 32bitového slova namísto slova šestnáctibitového. Podobným způsobem byly rozšířeny i instrukce přenášející data mezi vybraným pracovním registrem a operační pamětí adresovanou s využitím offsetu přičteného k jinému pracovnímu registru. Rozšířené instrukce dokážou pracovat s dvanáctibitovým offsetem, což samozřejmě rozšiřuje možnosti při použití velkých datových struktur atd. Podívejme se, o jaké instrukce se jedná:

# Zkratka Počet cyklů Stručný popis instrukce
1 MOV.B Rm,@(disp12,Rn) 1 zápis bajtu z registru Rm na adresu (disp12+Rn)
2 MOV.W Rm,@(disp12,Rn) 1 zápis 16bitového slova z registru Rm na adresu (disp12+Rn)
3 MOV.L Rm,@(disp12,Rn) 1 zápis 32bitového slova z registru Rm na adresu (disp12+Rn)
4 MOV.B @(disp12,Rm),Rn 1 čtení bajtu z adresy (disp12+Rm) o registru Rn
5 MOV.W @(disp12,Rm),Rn 1 čtení 16bitového slova z adresy (disp12+Rm) o registru Rn
6 MOV.L @(disp12,Rm),Rn 1 čtení 32bitového slova z adresy (disp12+Rm) o registru Rn

Formát všech těchto instrukcí je totožný:

15  12    8    4    0    15  12    8    4    0
+----+----+----+----+    +----+----+----+----+
|0011|dddd|ssss|0001|    |kód | displacement |
+----+----+----+----+    +----+----+----+----+

Kde:

bitcoin_skoleni

  • ssss je index zdrojového pracovního registru (source)
  • dddd je index cílového pracovního registru (destination)
  • kód vybírá konkrétní instrukci
  • displacement je dvanáctibitový offset

12. Další nové instrukce

Mezi další instrukce, které najdeme pouze na čipech SH-2A a nikoli na čipech SH-2, patří zejména tyto instrukce:

# Zkratka Počet cyklů Stručný popis instrukce
1 SHAD 1 aritmetický posun doleva či doprava podle obsahu pracovního registru
2 SHLD 1 bitový posun doleva či doprava podle obsahu pracovního registru
       
3 JSR/N 5 skok do subrutiny (ovšem bez branch delay slotu)
4 RTS/N 3 návrat ze subrutiny (opět bez branch delay slotu)
5 RTV/N 3 uložení vybraného registru do R0 a návrat ze subrutiny (opět bez branch delay slotu)
       
6 PREF 1 cache prefetch

13. Jádro SH2A-FPU

Některé čipy s instrukční sadou SH-2A mohou být doplněny o matematický koprocesor, který je ovládán doplňkovou sadou instrukcí označovaných názvem SH2A-FPU a taktéž má k dispozici vlastní skupinu pracovních registrů. Většina těchto instrukcí, které si podrobněji popíšeme příště, je dokončena v jediném taktu, výjimkou jsou pouze instrukce pro konverzi operandů (dva takty), některé operace s čísly s dvojnásobnou přesností (součet v šesti taktech) a zejména pak instrukce podílu, která je pro hodnoty s jednoduchou přesností dokončena v deseti cyklech a pro hodnoty s dvojnásobnou přesností až v 23 cyklech (zajímavé je, že výpočet druhé odmocniny je se šesti resp. 22 cykly nepatrně rychlejší).

14. Odkazy na Internetu

  1. SH7201 Group User's Manual: Hardware
    https://www.renesas.com/en-us/document/hw-manual?hwLayerShowFlg=tru­e&prdLayerId=2038&layerNa­me=SH7201&coronrService=do­cument-prd-search&hwDocUrl=%2Fen-us%2Fdoc%2Fproducts%2Fmpum­cu%2Fdoc%2Fsuperh%2Fr01uh0026ej_sh7201_h­m.pdf&hashKey=4d1ed116961466bab­f99bc7cf1d2cdec
  2. SH7203 Group User's Manual: Hardware
    https://www.renesas.com/en-us/document/hw-manual?hwLayerShowFlg=tru­e&prdLayerId=2126&layerNa­me=SH7203&coronrService=do­cument-prd-search&hwDocUrl=%2Fen-us%2Fdoc%2Fproducts%2Fmpum­cu%2F001%2Fr01uh0458ej0400_sh7203­.pdf&hashKey=68baf3ad6c52e9e2616e44­024589e8cf
  3. SuperH RISC engine Family Features
    https://www.renesas.com/en-us/products/microcontrollers-microprocessors/superh/superh-features.html
  4. Konkurence procesorů s mikroprogramovým řadičem – RISC
    http://www.root.cz/clanky/konkurence-procesoru-s-mikroprogramovym-radicem-architektura-risc/
  5. Mikroprocesory s architekturou RISC I
    http://www.root.cz/clanky/mi­kroprocesory-s-architekturou-risc-i/
  6. Procesory RISC v pracovních stanicích a serverech
    http://www.root.cz/clanky/procesory-s-architekturou-risc-v-pracovnich-stanicich-a-serverech/
  7. Procesory RISC v pracovních stanicích a serverech – architektura SPARC V8 a
    http://www.root.cz/clanky/procesory-risc-v-pracovnich-stanicich-a-serverech-architektura-sparc-v8-a-v9/
  8. Procesory RISC v pracovních stanicích a serverech – architektura PA-RISC
    http://www.root.cz/clanky/procesory-risc-v-pracovnich-stanicich-a-serverech-architektura-pa-risc/
  9. Rozšíření instrukční sady procesorových jader s otevřenou architekturou RISC-V
    http://www.root.cz/clanky/rozsireni-instrukcni-sady-procesorovych-jader-s-otevrenou-architekturou-risc-v/
  10. Sega documentation
    http://koti.kapsi.fi/~anti­me/sega/docs.html
  11. 1995 Programming on the Sega Saturn
    http://cowboyprogramming.com/2010/06/03/1995-programming-on-the-sega-saturn/
  12. Sega Myths-Saturn was the most difficult console to program for of 5th Gen
    http://forums.sega.com/show­thread.php?313485-Sega-Myths-Saturn-was-the-most-difficult-console-to-program-for-of-5th-Gen
  13. SuperH RISC engine Family
    http://www.renesas.com/pro­ducts/mpumcu/superh/index­.jsp
  14. Sega Saturn
    http://en.wikipedia.org/wi­ki/Sega_saturn
  15. Fourth-Generation Consoles
    http://gaming.wikia.com/wiki/Fourth-Generation_Consoles
  16. Fifth-Generation Consoles
    http://gaming.wikia.com/wiki/Fifth-Generation_Consoles
  17. History of video game consoles (fifth generation)
    http://en.wikipedia.org/wi­ki/History_of_video_game_con­soles_(fifth_generation)
  18. Sega Mega Drive
    http://sega.jp/archive/segahard/md/
  19. Sega Archives
    http://sega.jp/archive/segahard/
  20. Sega Genesis
    http://www.dmoz.org/Games/Vi­deo_Games/Console_Platfor­ms/Sega/Genesis/
  21. The Sega Mega Drive/Genesis
    http://www.captainwilliam­s.co.uk/sega/megadrive/me­gadrive.php
  22. Sega Master System Museum
    http://alexkidd.com/
  23. Jadeite's Sega Master System Museum
    http://rp_gamer.tripod.com/SMS/1.html
  24. Sega Master System (Wikipedia)
    http://en.wikipedia.org/wi­ki/Sega_Master_System
  25. Sega Card (Wikipedia)
    http://en.wikipedia.org/wi­ki/Sega_Card
  26. Sega Master System VDP documentation
    http://www.smspower.org/u­ploads/Development/msvdp-20021112.txt?sid=28c370e1fcac51d­5774319979bf96f4c
  27. The16bit Era Of Console Video Games
    http://tvtropes.org/pmwiki/pmwi­ki.php/Main/The16bitEraOf­ConsoleVideoGames
  28. The Console Wars
    http://www.cracked.com/funny-2590-the-console-wars/
  29. Console Wars
    http://tvtropes.org/pmwiki/pmwi­ki.php/Main/ConsoleWars
  30. Era of the „Bit Wars“
    http://www.gtplanet.net/fo­rum/threads/era-of-the-bit-wars.119796/
  31. Rez Wars: How the Bit Wars never really ended
    http://www.ign.com/blogs/be­astmastertoad/2013/01/31/rez-wars-how-the-bit-wars-never-really-ended
  32. Which system ended the „Bit Wars“?
    http://atariage.com/forum­s/topic/199163-which-system-ended-the-bit-wars/
  33. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  34. Introduction to ARM Thumb
    http://www.embedded.com/electronics-blogs/beginner-s-corner/4024632/Introduction-to-ARM-thumb
  35. Code Size – a comprehensive comparison of microMIPS32 and Thumb code size using many Megabytes of customer code
    https://community.arm.com/grou­ps/processors/blog/2014/04/28/co­de-size-a-comprehensive-comparison-of-micromips32-and-thumb-code-size-using-many-megabytes-of-customer-code
  36. MIPS MCUs Outrun ARM
    http://www.linleygroup.com/new­sletters/newsletter_detail­.php?num=5117
  37. Carry bits, The Architect's Trap
    http://yarchive.net/comp/ca­rry_bit.html
  38. Microprocessor Design/ALU Flags
    https://en.wikibooks.org/wi­ki/Microprocessor_Design/A­LU_Flags
  39. Flags register in an out-of-order processor
    http://cs.stackexchange.com/qu­estions/42095/flags-register-in-an-out-of-order-processor
  40. Berkeley RISC
    http://en.wikipedia.org/wi­ki/Berkeley_RISC
  41. Great moments in microprocessor history
    http://www.ibm.com/develo­perworks/library/pa-microhist.html
  42. RISC vs. CISC
    http://www-cs-faculty.stanford.edu/~ero­berts/courses/soco/projec­ts/2000–01/risc/risccisc/
  43. RISC and CISC definitions:
    http://www.cpushack.com/CPU/cpu­AppendA.html
  44. The Evolution of RISC
    http://www.ibm.com/develo­perworks/library/pa-microhist.html#sidebar1

Autor článku

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