Instrukční sada mikroprocesorů SuperH 2 (SH-2)

15. 9. 2016
Doba čtení: 16 minut

Sdílet

Ve druhém článku o SuperH si popíšeme instrukční sadu SH-2, s níž se mohli setkat programátoři her pro Sega Saturn a dnes především vývojáři mikrořadičů pro průmyslové aplikace (včetně automotive).

Obsah

1. Instrukční sada mikroprocesorů SuperH 2 (SH-2)

2. Podporované formáty instrukčních slov

3. Instrukční soubor SH-2

4. Instrukce pro přesuny dat

5. Základní aritmetické instrukce

6. Porovnávání operandů

7. Násobení, dělení a operace typu Multiply Accumulate

8. Bitové posuny, rotace a aritmetické posuny

9. Logické instrukce

10. Práce se stavovým bitem

11. Nepodmíněné skoky

12. Podpora pro volání podprogramů

13. Podmíněné skoky

14. Ostatní instrukce

15. Odkazy na Internetu

1. Instrukční sada mikroprocesorů SuperH 2 (SH-2)

V úvodním článku o mikroprocesorech a mikrořadičích řady SuperH (SH) jsme se nejprve seznámili s historií vzniku této architektury a poté jsme se zabývali popisem základních vlastností těchto čipů. Připomeňme si, že původní a stále používaná řada SH-2 je postavena na konceptu RISCových procesorů, čemuž odpovídá použití relativně dlouhé pipeline s pěti řezy, pevná šířka instrukčních slov i využití takzvaných „branch delay slotů“ u instrukcí pro podmíněné i nepodmíněné skoky. Oproti klasickým RISCovým procesorům, mezi něž řadím například MIPS, PA-RISC, SPARC či dnes již poněkud pozapomenutý AMD 29000, je však architektura SH-2 přece jen orientována více na oblast embedded zařízení. Především je zajímavé použití relativně úzkých instrukčních slov, protože instrukce mají konstantní šířku šestnáct bitů. S tím do značné míry souvisí i zmenšení počtu pracovních registrů na šestnáct, což je pro RISCové procesory poměrně rozumné minimum (na druhé straně spektra stojí architektura SPARC s registrovými okny a řádově stovkami pracovních registrů).

Dnes si popíšeme především způsob kódování instrukcí (tj. uložení vlastního kódu instrukce a indexů operandů do šestnáctibitového instrukčního slova) a poté se budeme zabývat popisem jednotlivých instrukcí podporovaných čipy s architekturou SH-2. O možnostech adresování operandu či operandů jsme si již řekli podrobnější informace v závěru předchozího článku, takže se v dalším textu budu na příslušné dvě kapitoly [12] [13] odkazovat.

Poznámka: u mikroprocesorů SuperH se v assembleru za instrukce nejprve zapisuje zdrojový operand a až poté operand cílový. To například znamená, že přičtení konstanty k registru R0 zajistí instrukce ADD #konstanta, R0. Tento formát bude použit v navazujících kapitolách.

2. Podporované formáty instrukčních slov

Vzhledem k velkému množství adresovacích režimů nás pravděpodobně nepřekvapí, že existuje hned několik různých formátů instrukcí (mnohem více, než například na minimalisticky pojaté architektuře MIPS). Mezi jednotlivými formáty nalezneme mnoho společných vlastností. Především je zajímavé (a také dosti elegantní), že každé šestnáctibitové instrukční slovo je možné rozdělit do čtyř bitových polí, přičemž každé pole má konstantní šířku čtyř bitů. Každé bitové pole obsahuje buď část kódu instrukce (ten má proměnnou šířku 4, 8, 12 či 16 bitů), index zdrojového registru (4 bity), index cílového registru (4 bity), krátkou konstantu (4, 8, 12 bitů) popř. hodnotu chápanou jako posun (displacement) v některých adresovacích režimech. Nyní se na jednotlivé formáty podívejme.

Několik instrukcí nepotřebuje žádný operand a proto je všech šestnáct bitů instrukčního slova rezervováno pro kód instrukce. Formát je proto velmi jednoduchý:

15  12    8    4    0
+----+----+----+----+
|xxxx|xxxx|xxxx|xxxx|
+----+----+----+----+

Další instrukce vyžadují pouze jediný explicitně zadaný cílový operand (registr s indexem dddd, „destination“), přičemž zdrojovým operandem je typicky nějaký systémový registr specifikovaný přímo v kódu instrukce:

15  12    8    4    0
+----+----+----+----+
|xxxx|dddd|xxxx|xxxx|
+----+----+----+----+

Podporované adresovací režimy: Rn, @-Rn (register indirect with pre-decrement).

Prakticky totožný formát je použit u instrukcí vyžadujících pouze jediný zdrojový (nikoli cílový) operand (ssss „source“):

15  12    8    4    0
+----+----+----+----+
|xxxx|ssss|xxxx|xxxx|
+----+----+----+----+

Podporované adresovací režimy: Rn, @Rn+ (register indirect with post-increment).

Mnoho aritmetických a logických instrukcí podporuje specifikaci dvou operandů a tudíž je pro ně nutné rezervovat dvojici bitových polí pro index zdrojového registru ssss i registru cílového dddd:

15  12    8    4    0
+----+----+----+----+
|xxxx|dddd|ssss|xxxx|
+----+----+----+----+

Podporované adresovací režimy: Rn, @Rn+, @-Rn, @Rn atd. (podle typu instrukce).

Několik instrukcí (konkrétně se jedná o instrukce určené pro přenosy dat) podporuje adresovací režim @(disp, Rn), ať již pro zdrojový či cílový operand. Druhým operandem je v tomto případě vždy registr R0, a to z toho prostého důvodu, že se do instrukce musela „vejít“ krátká čtyřbitová konstanta disp(lacement), takže nezbylo místo na index druhého operandu. Formáty instrukcí jsou následující:

15  12    8    4    0
+----+----+----+----+
|xxxx|xxxx|ssss|disp|
+----+----+----+----+
15  12    8    4    0
+----+----+----+----+
|xxxx|xxxx|dddd|disp|
+----+----+----+----+

Výjimkou z předchozího formátu je instrukce MOV.L, která podporuje adresovací režim Rm, @(disp, Rn) a @(disp, Rm), Rn. Zde pro uložení kódu operace zbývají čtyři bity:

15  12    8    4    0
+----+----+----+----+
|xxxx|ssss|dddd|disp|
+----+----+----+----+

U několika typů instrukcí, například u skoků s podmínkou, se používá adresování typu @(disp, PC) spočívající v přičtení osmibitové konstanty k registru PC. Podobně je možné použít i registr GBR popsaný minule atd. V tomto případě je do instrukčního slova vložena osmibitová konstanta displacement následujícím způsobem:

15  12    8    4    0
+----+----+----+----+
|xxxx|xxxx|disp+disp|
+----+----+----+----+

U delších skoků lze využít i dvanáctibitovou konstantu přičtenou k aktuálnímu obsahu registru PC. Na kód prováděné operace nám zbylo pouze jediné čtyřbitové pole:

15  12    8    4    0
+----+----+----+----+
|xxxx|disp+disp+disp|
+----+----+----+----+

Následuje další varianta na podobné téma, tentokrát ovšem u instrukcí typu MOV.L (@disp, PC), Rn. Do instrukčního slova je nutné vložit jak index pracovního registru, tak i osmibitovou konstantu:

15  12    8    4    0
+----+----+----+----+
|xxxx|ssss|disp+disp|
+----+----+----+----+

Existuje několik instrukcí s implicitním operandem (typicky registrem R0) a osmibitovou konstantou. Příkladem může být instrukce ADD #konstanta, R0. Formát těchto instrukcí vypadá následovně (iiii značí immediate):

15  12    8    4    0
+----+----+----+----+
|xxxx|xxxx|iiii+iiii|
+----+----+----+----+

Poslední formát instrukcí je použit v případě, že prvním operandem je pracovní registr a operandem druhým je osmibitová konstanta. Příkladem může být například instrukce ADD #konstanta, Rn atd. V tomto případě je osmibitová konstanta uložena přímo do operačního kódu instrukce:

15  12    8    4    0
+----+----+----+----+
|xxxx|ssss|iiii+iiii|
+----+----+----+----+

Poznámka: větší (resp. přesněji řečeno širší) konstanty je nutno ukládat přímo do programového kódu a adresovat je (například) relativně vůči aktuální hodnotě registru PC. Podobný koncept nalezneme i u mikroprocesorů ARM.

3. Instrukční soubor SH-2

V navazujících jedenácti kapitolách si popíšeme všechny instrukce podporované v mikroprocesorech a mikrořadičích SH-2. Připomeňme si, že celkem existuje pouhých 62 instrukcí a pokud započítáme i různé varianty instrukcí, které se od sebe odlišují použitým adresovacím režimem, dojdeme k číslu 142. Instrukce je možné rozdělit podle různých kritérií; já jsem v dalších kapitolách zvolil kritérium, které se sice v některých ohledech odlišuje od původní dokumentace, ale je podle mého názoru logičtější :-)

4. Instrukce pro přesuny dat

Začneme popisem instrukcí pro přenosy dat. Tato skupina instrukcí je nejrozmanitější, protože mnohé instrukce podporují několik adresovacích režimů, různé typy operandů (bajt, 16bitové slovo, 32bitové slovo), některé instrukce používají speciální registry atd.:

# Zkratka Počet cyklů Stručný popis
1 MOV 1 přesun dat do registru popř. uložení do operační paměti
2 MOVA 1 výpočet adresy disp × 4 + PC s uložením výsledku do R0 (užitečné při načítání 32bitových konstant)
       
3 LDC 1–3 přenos dat mezi pracovním registrem Rs a speciálním registrem SR, GBR či VBR
4 LDS 1 přenos dat mezi pracovním registrem Rs a speciálním registrem PR, MACH či MACL
5 STC 1 přenos dat mezi speciálním registrem SR, GBR či VBR a pracovním registrem Rs
6 STS 1 přenos dat mezi speciálním registrem PR, MACH či MACL a pracovním registrem Rd
       
3 SWAP 1 prohození dvou nejnižších bajtů či dvou 16bitových slov (lze použít dva registry)
4 XTRCT 1 prostředních 32 bitů z registrového páru Rs:Rd se uloží do Rd
       
5 EXTS 1 znaménkové rozšíření bajtu či 16bitového slova na 32bitové slovo
6 EXTU 1 bezznaménkové rozšíření bajtu či 16bitového slova na 32bitové slovo (horních 24/16 bitů se vynuluje)

Poznámka: užitečná je především instrukce MOVA, protože umožňuje, aby se za každým podprogramem nacházely 32bitové konstanty, které lze jednoduše načíst do registru R0 (hodnota disp je osmibitová, takže reálný „dosah“ pro adresování přes PC je téměř 256*4=1024 bajtů, pro zarovnání konstant v assembleru se používá direktiva .align 2). Jiné možnosti,jak do pracovních registrů vložit 32bitovou konstantu totiž nemáme, a to kvůli omezení všech instrukcí na 16 bitů.

5. Základní aritmetické instrukce

Mikroprocesory SH-2 podle očekávání obsahují úplnou sadu základních aritmetických instrukcí. V této kapitole budou uvedeny instrukce určené pro součet dvou operandů, rozdíl dvou operandů a taktéž pro výpočet dvojkového doplňku (pozor na to, že u jiných typů mikroprocesorů může instrukce NEG provádět negaci bitů, tj. výpočet jednotkového doplňku):

# Zkratka Počet cyklů Stručný popis
1 ADD 1 součet registr+registr či registr+konstanta
2 ADDC 1 součet registr+registr+T, přenos (carry) se uloží do T
3 ADDV 1 součet registr+registr, přetečení (overflow) se uloží do T
       
4 SUB 1 rozdíl registr-registr či registr-konstanta
5 SUBC 1 rozdíl registr-registr-T, výpůjčka (borrow) se uloží do T
6 SUBV 1 rozdíl registr-registr, podtečení (underflow) se uloží do T
       
7 NEG 1 rozdíl 0-registr
8 NEGC 1 rozdíl 0-registr-T, výpůjčka (borrow) se uloží do T

Povšimněte si, jak je instrukce ADD (ale i SUB) rozdělena podle toho, zda jsou operandy bezznaménkové či se znaménkem.

6. Porovnávání operandů

U instrukcí určených pro porovnávání operandů se setkáme s první zvláštností mikroprocesorů SH-2. Podmínkové instrukce vždy nastavují jediný příznakový bit T, což je v kontrastu s mnoha ostatními architekturami, kde se nastavuje více příznakových bitů (carry, overflow, sign/negative, zero) a rozlišení, o jakou podmínku se jednalo, se provede až ve chvíli skoku. Řešení nabídnuté procesory SuperH je opět velmi elegantní a umožňuje, aby se u instrukčního slova pro podmíněný skok mohlo co nejvíce bitů „obětovat“ pro relativní adresu skoku. Navíc jsou veškeré zápisy do T explicitní a provádí je jen několik instrukcí, čímž se sníží počet kolizí v pipeline:

# Zkratka Počet cyklů Stručný popis
1 CMP/EQ 1 nastavení 1→T za podmínky Rs=Rd
2 CMP/HS 1 nastavení 1→T za podmínky Rs≥Rd (unsigned)
3 CMP/GE 1 nastavení 1→T za podmínky Rs≥Rd (signed)
4 CMP/HI 1 nastavení 1→T za podmínky Rs>Rd (unsigned)
5 CMP/GT 1 nastavení 1→T za podmínky Rs>Rd (signed)
6 CMP/PZ 1 nastavení 1→T za podmínky Rs≥0
7 CMP/PL 1 nastavení 1→T za podmínky Rs>0
8 CMP/STR 1 nastavení 1→T za podmínky Rs=Rd (jen spodní bajt)
       
9 TAS 4 nastavení 1→T za podmínky (Rs)=0 (buňka v paměti)
10 TST 1 nastavení 1→T za podmínky Rs & Rd == 0
11 DT 1 snížení obsahu registru o 1 a nastavení 1→T pokud Rs==0

Kromě operace TAS pracující s operační pamětí jsou všechny ostatní instrukce provedeny v jediném taktu.

7. Násobení, dělení a operace typu Multiply Accumulate

Klasická aritmeticko-logická jednotka je doplněna o násobičku a děličku, která používá speciální registry MACH a MACL (dohromady MAC=Multiply Accumulate), což je ostatně podobný princip, jaký známe například z architektury MIPS. Dokončení většiny těchto instrukcí trvá více než jeden takt, což je pochopitelně způsobeno jejich (relativní) složitostí:

# Zkratka Počet cyklů Stručný popis
1 MUL 1–5 násobení 16bitových či 32bitových operandů s 32bitovým výsledkem
2 MULS 1–3 násobení 16bitových operandů s 32bitovým výsledkem (signed)
3 MULU 1–3 násobení 16bitových operandů s 32bitovým výsledkem (unsigned)
       
4 MAC 2–5 (Rn)*(Rm)+MAC → MAC, Rn++, Rm++ (posun v poli)
       
5 DMULS 2–5 násobení 32bitových operandů s 64bitovým výsledkem (signed)
6 DMULU 2–5 násobení 32bitových operandů s 64bitovým výsledkem (unsigned)
       
7 DIV1 1 jeden krok dělení Rs/Rd
8 DIV0S 1 příprava na dělení dvou čísel se znaménkem (nastavení bitů M, Q a T)
9 DIV0U 1 příprava na dělení dvou čísel bez znaménka (nastavení bitů M, Q a T)

Povšimněte si, že instrukce MAC je připravena na to, že se bude používat pro implementaci číslicových filtrů, takže se adresují prvky v poli.

Poznámka: při dělení je nutné nejprve provést jednu z instrukcí DIV0S/DIV0U a poté v patřičném počtu kroků opakovat instrukci DIV1.

8. Bitové posuny, rotace a aritmetické posuny

U mikroprocesorů SuperH nalezneme obvyklou (a úplnou) sadu instrukcí určených pro bitové posuny, bitové rotace a taktéž pro aritmetické posuny. Ostatně se stačí podívat na následující tabulku se seznamem těchto instrukcí. Všechny instrukce jsou dokončeny v jednom taktu, ovšem u rotací a posunů existuje omezení, o kolik míst se má operace provést:

# Zkratka Počet cyklů Stručný popis
1 ROTL 1 rotace registru doleva, do T se uloží původní nejvyšší bit
2 ROTR 1 rotace registru doprava, do T se uloží původní nejnižší bit
3 ROTCL 1 rotace registru doleva přes bit T (33 bitů)
4 ROTCR 1 rotace registru doprava přes bit T (33 bitů)
       
5 SHAL 1 aritmetický posun doleva (nasouvá se nula, nejvyšší bit se kopíruje do T)
6 SHAR 1 aritmetický posun doprava (nejvyšší bit se klonuje, nejnižší se přesouvá do T)
       
7 SHLL 1 bitový posun doleva, T se nemění
8 SHLLn 1 bitový posun doleva o 2, 8 či 16 bitů, T se nemění
9 SHLR 1 bitový posun doprava, T se nemění
10 SHLRn 1 bitový posun doprava o 2, 8 či 16 bitů, T se nemění

9. Logické instrukce

Sada logických instrukcí (resp. možná přesněji řečeno logických operací prováděných bit po bitu) je, podobně jako u mnoha dalších typů mikroprocesorů, poměrně krátká, což je ostatně zřejmé po pohledu na následující tabulku:

# Zkratka Počet cyklů Stručný popis
1 AND 1 provedení operace Rs & Rd či Rs & konstanta
2 OR 1 provedení operace Rs | Rd či Rs | konstanta
3 XOR 1 provedení operace Rs ⊕ Rd či Rs ⊕ konstanta
4 NOT 1 negace bitů zdrojového registru Rs

Poznámka: u prvních tří instrukcí lze provést i adresování (R0 + GBR) s výsledkem ukládaným rovněž do paměti adresované registry R0 a GBR. V tomto případě – již jsme opustili doménu RISCových procesorů – instrukce trvají tři takty.

Poznámka 2: žádná z těchto instrukcí neovlivňuje stav bitu T, což mj. znamená, že v pipeline nedochází ke zbytečným kolizím při čtení/zápisu.

10. Práce se stavovým bitem

S jediným stavovým bitem T (test) mikroprocesorů SH-2 jsme se již setkali u mnoha předchozích instrukcí a ještě se s ním setkáme v dalších kapitolách. Zde si pouze popíšeme trojici instrukcí, které pracují výhradně s tímto bitem:

# Zkratka Počet cyklů Stručný popis
1 MOVT 1 uložení bitu T do registru Rn
2 CLRT 1 vynulování bitu 0→T
3 SETT 1 nastavení bitu 1→T

11. Nepodmíněné skoky

V následující tabulce jsou uvedeny nepodmíněné skoky, tj. skoky, které se provedou za všech okolností bez závislosti na nastavení bitu T. Všechny tři skokové instrukce obsahují branch delay slot popsaný minule, takže počet cyklů pro dokončení (2) sice může vypadat hrozivě, ale druhý cyklus lze využít pro dokončení jiné instrukce:

# Zkratka Počet cyklů Stručný popis
1 JMP 2 skok na adresu Rs
2 BRA 2 skok na adresu PC+displacement*2
3 BRAF 2 skok na adresu PC+Rs

Poznámka: u instrukce BRA je použita dvanáctibitová konstanta displacement.

12. Podpora pro volání podprogramů

Další skupina instrukcí slouží pro skok do podprogramů popř. pro návrat z podprogramů. Opět platí, že skokové instrukce obsahují branch delay slot, podobně jako u předchozích třech instrukcí (návrat z podprogramu je taktéž skoková instrukce!):

# Zkratka Počet cyklů Stručný popis
1 JSR 2 uložení PC do registru PR, skok na adresu Rs
2 RTS 2 skok na adresu v PR
3 BSR 2 uložení PC do registru PR, skok na adresu PC+displacement*2
4 BSRF 2 uložení PC do registru PR, skok na adresu PC+Rs

Poznámka: u instrukce BSR je použita dvanáctibitová konstanta displacement.

Poznámka 2: PR=Procedure Register (v podstatě Link Register).

13. Podmíněné skoky

Na rozdíl od mnoha dalších typů mikroprocesorů je skupina podmíněných skoků na architektuře SuperH velmi malá, a to z toho prostého důvodu, že lze testovat jen a pouze příznakový bit T. Důvod jsme si již vysvětlili: namísto jinde obvyklé sekvence instrukcí:

CMP + nastavení Zero, Carry, Sign a Overflow
JMP za podmínky určité konstelace příznakových bitů

se zde setkáme spíše s tímto kódem:

CMP/podmínka + nastavení bitu T
JMP pokud T==1 nebo naopak T==0

Podívejme se nyní na seznam instrukcí pro podmíněné skoky:

ict ve školství 24

# Zkratka Počet cyklů Stručný popis
1 BF 3/1 skok na adresu PC+disp pokud platí T==0
2 BT 3/1 skok na adresu PC+disp pokud platí T==0
3 BF/S 2/1 totéž jako BF, ale bez branch delay slotu
4 BT/S 2/1 totéž jako BF, ale bez branch delay slotu

Poznámka: zápis 3/1 značí: 3 cykly pokud je skok proveden (podmínka splněna), 1 cyklus v opačném případě.

14. Ostatní instrukce

Do této kategorie spadají různé typy instrukcí, od prajednoduché instrukce NOP až po instrukci určenou pro obsluhu výjimky:

# Zkratka Počet cyklů Stručný popis
1 NOP 1 moje oblíbená instrukce, která je zde kupodivu zakódována slovem 0×0009 a nikoli 0×0000
       
2 CLRMAC 1 vynulování registrů MACH a MACL (například před aplikací číslicového filtru)
3 RTE 5 návrat z přerušení atd. (obnovení SR a PC ze zásobníku)
4 SLEEP 4 přepnutí do stavu sleep (pouze u mikrořadičů SH-2)
5 TRAPA 8 příprava zásobníkového rámce, skok na adresu VBR+konstanta

15. Odkazy na Internetu

  1. Konkurence procesorů s mikroprogramovým řadičem – RISC
    http://www.root.cz/clanky/konkurence-procesoru-s-mikroprogramovym-radicem-architektura-risc/
  2. Mikroprocesory s architekturou RISC I
    http://www.root.cz/clanky/mi­kroprocesory-s-architekturou-risc-i/
  3. Procesory RISC v pracovních stanicích a serverech
    http://www.root.cz/clanky/procesory-s-architekturou-risc-v-pracovnich-stanicich-a-serverech/
  4. 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/
  5. 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/
  6. 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/
  7. Sega documentation
    http://koti.kapsi.fi/~anti­me/sega/docs.html
  8. 1995 Programming on the Sega Saturn
    http://cowboyprogramming.com/2010/06/03/1995-programming-on-the-sega-saturn/
  9. 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
  10. SuperH RISC engine Family
    http://www.renesas.com/pro­ducts/mpumcu/superh/index­.jsp
  11. Sega Saturn
    http://en.wikipedia.org/wi­ki/Sega_saturn
  12. Fourth-Generation Consoles
    http://gaming.wikia.com/wiki/Fourth-Generation_Consoles
  13. Fifth-Generation Consoles
    http://gaming.wikia.com/wiki/Fifth-Generation_Consoles
  14. History of video game consoles (fifth generation)
    http://en.wikipedia.org/wi­ki/History_of_video_game_con­soles_(fifth_generation)
  15. Sega Mega Drive
    http://sega.jp/archive/segahard/md/
  16. Sega Archives
    http://sega.jp/archive/segahard/
  17. Sega Genesis
    http://www.dmoz.org/Games/Vi­deo_Games/Console_Platfor­ms/Sega/Genesis/
  18. The Sega Mega Drive/Genesis
    http://www.captainwilliam­s.co.uk/sega/megadrive/me­gadrive.php
  19. Sega Master System Museum
    http://alexkidd.com/
  20. Jadeite's Sega Master System Museum
    http://rp_gamer.tripod.com/SMS/1.html
  21. Sega Master System (Wikipedia)
    http://en.wikipedia.org/wi­ki/Sega_Master_System
  22. Sega Card (Wikipedia)
    http://en.wikipedia.org/wi­ki/Sega_Card
  23. Sega Master System VDP documentation
    http://www.smspower.org/u­ploads/Development/msvdp-20021112.txt?sid=28c370e1fcac51d­5774319979bf96f4c
  24. The16bit Era Of Console Video Games
    http://tvtropes.org/pmwiki/pmwi­ki.php/Main/The16bitEraOf­ConsoleVideoGames
  25. The Console Wars
    http://www.cracked.com/funny-2590-the-console-wars/
  26. Console Wars
    http://tvtropes.org/pmwiki/pmwi­ki.php/Main/ConsoleWars
  27. Era of the „Bit Wars“
    http://www.gtplanet.net/fo­rum/threads/era-of-the-bit-wars.119796/
  28. 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
  29. Which system ended the „Bit Wars“?
    http://atariage.com/forum­s/topic/199163-which-system-ended-the-bit-wars/
  30. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  31. Introduction to ARM Thumb
    http://www.embedded.com/electronics-blogs/beginner-s-corner/4024632/Introduction-to-ARM-thumb
  32. 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
  33. MIPS MCUs Outrun ARM
    http://www.linleygroup.com/new­sletters/newsletter_detail­.php?num=5117
  34. Carry bits, The Architect's Trap
    http://yarchive.net/comp/ca­rry_bit.html
  35. Microprocessor Design/ALU Flags
    https://en.wikibooks.org/wi­ki/Microprocessor_Design/A­LU_Flags
  36. Flags register in an out-of-order processor
    http://cs.stackexchange.com/qu­estions/42095/flags-register-in-an-out-of-order-processor
  37. Berkeley RISC
    http://en.wikipedia.org/wi­ki/Berkeley_RISC
  38. Great moments in microprocessor history
    http://www.ibm.com/develo­perworks/library/pa-microhist.html
  39. RISC vs. CISC
    http://www-cs-faculty.stanford.edu/~ero­berts/courses/soco/projec­ts/2000–01/risc/risccisc/
  40. RISC and CISC definitions:
    http://www.cpushack.com/CPU/cpu­AppendA.html
  41. 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.