Hlavní navigace

Historie vývoje počítačových her (110. část – herní konzole Nintendo 64)

9. 1. 2014
Doba čtení: 21 minut

Sdílet

V dnešní části seriálu o historii vývoje počítačových her a herního hardware se budeme zabývat popisem další herní konzole páté generace. Prozatím jsme si podrobněji popsali konzole Atari Jaguar, Segu Saturn a Sony PlayStation, ovšem zbývá nám ještě popis čtvrté významné konzole: Nintendo 64.

Obsah

1. Historie vývoje počítačových her (110. část – herní konzole Nintendo 64)

2. Nintendo 64 a konkurenční herní konzole páté generace

3. Design herní konzole Nintendo 64

4. Mikroprocesor R4300i

5. Programátorský model mikroprocesoru R4300i

6. Instrukce mikroprocesoru R4300i

7. Instrukce typu load/store

8. Aritmetické instrukce

9. Instrukce podmíněných a nepodmíněných skoků

10. Instrukce pro vyvolání výjimky (trap)

11. Speciální instrukce

12. Instrukce pro matematický koprocesor

13. Obsah následující části seriálu

14. Odkazy na Internetu

1. Historie vývoje počítačových her (110. část – herní konzole Nintendo 64)

Neoficiálním nástupcem společnosti Atari se v oblasti videoher stala ve druhé polovině osmdesátých let minulého století firma Nintendo se svojí osmibitovou herní konzolí třetí generace nazvanou Nintendo Entertainment System pocházející z roku 1985, která je známá spíše pod zkratkou NES (poněkud odlišná Japonská verze Famicom pochází z roku 1983). Kromě klasických domácích herních konzolí připojovaných k televizoru se firma Nintendo významně podílela i na vývoji kapesních herních konzolí vybavených vlastním displejem (LCD) či dokonce v případě složitějších konzolí dvojicí displejů. Nicméně trh klasických herních konzolí byl (a doposud je) natolik zajímavý, že se společnost Nintendo snažila být i v této oblasti lídrem na trhu. Po velmi úspěšné konzoli NES byla vyvinuta další komerčně úspěšná konzole Super NES (SNES), která se již svými parametry (kapacita operační paměti, použitý CPU, možnosti grafického subsystému) řadila mezi herní konzole čtvrté generace. Zde SNES poměrně úspěšně konkuroval například konzoli Sega Mega Drive/Sega Genesis či TurboGrafx16.

Pro hráče mnohem zajímavější, ale pro společnost Nintendo již nikoli příliš příznivá situace nastala ve chvíli, kdy začaly být vyvíjeny a následně prodávány herní konzole patřící do páté generace. Od těchto konzolí totiž hráči a vlastně i producenti her již očekávali poněkud odlišné parametry než od jednodušších herních konzolí třetí a čtvrté generace – zejména se to týkalo zobrazení trojrozměrné grafiky (včetně použití textur popř. pokročilejších grafických efektů) a taktéž využití možností nabízených vysokokapacitními paměťovými médii, mezi něž v devadesátých letech minulého století patřily především jednotky a paměťová média CD-ROM.

Naproti tomu konzole třetí a čtvrté generace, kde firma Nintendo excelovala nejprve s NESem a později se SNESem, byly orientovány zejména na dvourozměrnou grafiku se sprity, rozdělením grafické paměti na dlaždice a tvary (znaky) i hardwarově podporovaným scrollingem. Nejoblíbenějším paměťovým médiem byly u těchto konzolí cartridge osazené většinou paměťmi (E)PROM, které byly v některých případech doplněny i dalšími čipy (RAM o malé kapacitě zálohovaná baterií používaná pro tabulky s dosaženým skóre i pro ukládání stavů hry, čip pro FM syntézu atd.).

2. Nintendo 64 a konkurenční herní konzole páté generace

Nejúspěšněji byly nové požadavky na konzole páté generace splněny společností Sony, která vyvinula herní konzoli Sony PlayStation, jejíž historii vzniku i základní technické parametry jsme si popsali v minulépředminulé části tohoto seriálu. Nicméně i společnost Nintendo v roce 1996 (tedy poněkud později, než tomu bylo u dalších konzolí) vydala vlastní herní konzoli páté generace, která měla přímo konkurovat nejenom Sony PlayStation, ale i konzolím Sega Saturn, 3DO či Atari Jaguar a v menší míře pak Amiga CD32 (kromě toho existovaly i některé konzole stojící na rozhraní mezi čtvrtou a pátou generací, příkladem může být Sega 32X, což je vlastně rozšiřující modul pro starší konzoli Sega Mega Drive).

Již na tomto místě můžeme prozradit, že nová herní konzole Nintenda, která nesla označení Nintendo 64, sice v žádném případě nebyla komerčním propadákem, ale firmě se již nepodařilo zopakovat fenomenální úspěch NESu, protože Nintendu 64 patřila s přibližně 33 miliony prodaných kusů přibližně jen třetina trhu v porovnání s nepřekonanou konzolí Sony PlayStation, které se prodalo přes 100 milionů. Tabulku s celkovými počty prodaných kusů herních konzolí páté generace jsme si už uvedli ve sto čtvrté části tohoto seriálu. Jedním z důvodů, proč Nintendo 64 nebylo více populární, byl právě jeho pozdní vstup na trh, protože v roce 1996 muselo Nintendo 64 bojovat s PlayStation či Segou Saturn, které byly vydány v roce 1994 a taktéž s konzolí Atari Jaguar vydanou dokonce ještě o rok dříve. Dalším velmi úzce souvisejícím důvodem byl relativní nedostatek her v prvním roce existence Nintenda 64 (zde se firmě Nintendo vymstil způsob kooperace s vývojáři her, který nebyl tak „svobodný“ jako v případě Sony PlayStation – k tomuto důležitému tématu se ještě vrátíme).

3. Design herní konzole Nintendo 64

Poměrně neobvyklý byl způsob vzniku herní konzole Nintendo 64. Vývojem se totiž nezabývali pouze inženýři ze samotné firmy Nintendo, protože návrhem základních modulů této herní konzole byla pověřena známá společnost Silicon Graphics Inc. (SSI). Tato společnost sice neměla žádné předchozí zkušenosti s vývojem herních konzolí, o to větší zkušenosti a know how však měla v oblasti počítačové grafiky, především pak trojrozměrné grafiky zobrazované v reálném čase (možná právě vývoj konzole jinou firmou zapříčinil relativně pozdní příchod na trh). Výsledný design konzole Nintendo 64 se v mnoha ohledech podobá designu již minule a předminule popsané konzole Sony PlayStation až na jednu výjimku: firma Nintendo preferovala použití paměťových cartridgí namísto mechaniky CD-ROM, což s sebou přinášelo některé výhody (ochrana proti kopírování, větší odolnost), ale i nevýhody (menší kapacita a z toho vyplývající omezení pro tvůrce her).

Nintendo 64 bylo založeno na 64bitovém mikroprocesoru R4300i s architekturou RISC nazývaného „Reality Engine“ (jak uvidíme dále, používá se slovo „reality“ i pro popis dalších modulů této herní konzole). Mikroprocesor, který již mimochodem nabízel rozhraní JTAG (které bylo možné v konzoli zneužít), byl doplněn druhým čipem, který v sobě sdružoval jak grafický subsystém (Reality Immersion Processor), tak i subsystém zvukový (Reality Signal Processor).

Důvodem, proč byly tyto dva subsystémy umístěny společně na jednom čipu, byly samozřejmě snahy o snížení výrobních nákladů herní konzole. Konzole byla dále osazena operační pamětí o kapacitě 4 MB, kterou bylo možné rozšířit až na 8 MB. Zajímavé je, že paměťové moduly využívaly technologii firmy Rambus (šířka datové sběrnice 4×9 bitů) a nikoli SDRAM. Důvodem byla opět snaha snížit výrobní náklady (jednodušší obvody pro řízení pamětí) a současně i zrychlit přenosové rychlosti (blokový přenos dat), ovšem na úkor větších latencí při náhodném přístupu k datům uloženým v paměti (to sice nebylo tak kritické pro oblast herních konzolí, ovšem i kvůli této vlastnosti se tyto paměti přestaly používat na desktopech).

4. Mikroprocesor R4300i

V této kapitole si stručně popíšeme vlastnosti mikroprocesoru R4300i „Reality Engine“, který byl ústředním prvkem herní konzole Nintendo 64. Jednalo se o na svou dobu poměrně výkonný 64bitový mikroprocesor s architekturou RISC kompatibilní s řadou R4000 používanou společností SGI v mnoha dalších systémech a pracovních stanicích, jehož hodinová frekvence byla nastavena na 93,75 MHz (maximální frekvence tohoto čipu je 100 MHz). Jen pro porovnání si uveďme, že první (samozřejmě pouze 32bitové) čipy Pentium byly uvedeny na trh v roce 1993 a jejich hodinové frekvence začínaly u nejlevnějších modelů na 60 MHz. Čip R4300i, který byl navržen především s ohledem na celkovou výrobní cenu a nikoli tak, aby nabízel co nejvyšší výpočetní výkon, byl vybaven vyrovnávací pamětí pro data i pro instrukce, jak tomu ostatně je u RISCových mikroprocesorů zvykem. Datová cache měla kapacitu 8kB, zatímco instrukční cache celých 16kB.

Kromě vlastního procesorového jádra se na čipu R4300i nacházela i trojice koprocesorů označovaná CP0CP2. Koprocesor CP0 sloužil pro virtualizaci paměti a pro zpracování výjimek, koprocesor CP1 vykonával operace s plovoucí řádovou čárkou a koprocesor CP2 byl rezervován pro další rozšiřování možností R4300i v budoucnosti. Tento mikroprocesor byl samozřejmě vybaven aritmeticko-logickou jednotkou (ALU) doplněnou o modul pro bitové posuny (shifter) a taktéž o modul násobičky (CSA Multiplier), který byl používaný jak při násobení celých čísel, tak i pro násobení hodnot s plovoucí řádovou čárkou s jednoduchou i dvojitou přesností.

Ostatně i mnohé další operace s plovoucí řádovou čárkou používaly stejné moduly, jaké byly využívány pro celočíselné operace, a to kvůli výše zmíněné snaze o dosažení co nejnižší výrobní ceny a nízké energetické náročnosti při zachování dostatečného výpočetního výkonu. I z tohoto důvodu dokázal matematický koprocesor provádět jen základní aritmetické operace, výpočet odmocniny a několik druhů zaokrouhlení, ovšem například exponenciální, logaritmické či goniometrické operace zde nebyly implementovány. To mj. znamená, že možnosti matematického koprocesoru CP1 se dosti podstatným způsobem odlišovaly například od matematického koprocesoru, který můžeme najít na architektuře x86.

5. Programátorský model mikroprocesoru R4300i

Programátorský model mikroprocesoru R4300i se v mnoha ohledech podobá dalším 64bitovým RISCovým mikroprocesorům, zejména dalším mikroprocesorům založeným na původních čipech MIPS. Základem je sada pracovních registrů rozdělených do dvou skupin. V první skupině se nachází 32 registrů o šířce 64 bitů, které jsou používány pro operace s celými čísly i pro adresování (GPR – General Purpose Registers). Tyto registry se v assembleru pojmenovávají R0 (konstantní nula) až R31 a zajímavé je, že v závislosti na nastaveném režimu se může bitová šířka těchto registrů snížit na 32 bitů (32bitový režim) či může mít celých 64 bitů. Druhá skupina taktéž obsahuje 32 registrů o šířce 64 bitů, ovšem tyto registry jsou používány pro operace s hodnotami uloženými v systému plovoucí řádové čárky – Floating Point General Purpose Registers (FGRs), a to jak v režimu jednoduché přesnosti (single/float), tak i v režimu double. V assembleru jsou těmto registrům přidělena jména FGR0FGR31.

Tato sada univerzálních pracovních registrů je doplněna ještě pěticí registrů se speciálními funkcemi. Mezi tyto registry patří 64bitový instrukční čítač PC, dva registry pro čtení stavu a řízení FPU (resp. přesněji řečeno koprocesoru CP1) a konečně dvojice registrů nazvaných MulHIMulLO, které jsou využívány násobičkou a děličkou. I tyto dva speciální registry mají šířku 64 bitů. Ke speciálním registrům lze zařadit i jednobitový registr (či možná přesněji řečeno jednobitový příznak) LL (Load/Link) používaný například při synchronizaci. Další speciální a řídicí registry jsou součástí koprocesoru CP0, o němž jsme se zmínili v předchozí kapitole (těchto speciálních registrů je celkem třicet dva, každý z nich má odlišnou funkci):

Číslo registru (hexa) Název
0×00 Index
0×01 Random
0×02 EntryLo0
0×03 EntryLo1
0×04 Context
0×05 PageMask
0×06 Wired
0×07 rezervováno
0×08 BadVAddr
0×09 Count
0×0A EntryHi
0×0B Compare
0×0C Status
0×0D Cause
0×0E EPC
0×0F PRevID
0×10 Config
0×11 LLAddr
0×12 WatchLo
0×13 WatchHi
0×14 XContext
0×15 rezervováno
0×16 rezervováno
0×17 rezervováno
0×18 rezervováno
0×19 rezervováno
0×1A PErr
0×1B CacheErr
0×1C TagLo
0×1D TagHi
0×1E ErrorEPC
0×1F rezervováno

6. Instrukce mikroprocesoru R4300i

Již v předchozích částech tohoto seriálu jsme si stručně popsali některé mikroprocesory s architekturou RISC použité v herních konzolích páté generace. Čip R4300i popisovaný dnes se v mnoha ohledech příliš neliší například od čipu R3000A, s nímž jsme se již seznámili v rámci popisu herní konzole Sony PlayStation. Není se ostatně čemu divit, protože oba zmíněné čipy jsou založeny na architektuře MIPS, i když R4300i je o generaci dále než R3000A (navíc se podle nastaveného režimu mohly operace provádět v 64bitovém režimu). Všechny instrukce mikroprocesorů R4300i měly konstantní šířku třicet dva bitů, což mj. taktéž znamenalo, že instrukce byly v operační paměti vždy zarovnány na násobek čtyř bajtů. To mělo význam například u instrukcí skoků, neboť nebylo nutné ukládat spodní dva bity adresy: ty byly vždy nulové.

Podle způsobu rozdělení bitových polí v 32bitovém instrukčním slovu se instrukce dělily pouze do třech kategorií – I-type (Immediate), J-type (Jump)R-Type (register):

  I-Type (immediate)
  ------------------------------------------------------------
  | 31      26 | 25  21 | 20  16 | 15                      0 |
  ------------------------------------------------------------
  | opcode (6) | rs (5) | rt (5) | offset/konstanta (16)     |
  ------------------------------------------------------------
  J-Type (jump)
  ------------------------------------------------------------
  | 31      26 | 25                                        0 |
  ------------------------------------------------------------
  | opcode (6) | adresa (26)                                 |
  ------------------------------------------------------------
  R-Type (register)
  ------------------------------------------------------------
  | 31      26 | 25  21 | 20  16 | 15  11 | 10  6 | 5      0 |
  ------------------------------------------------------------
  | opcode (6) | rs (5) | rt (5) | rd (5) | shift | operace  |
  ------------------------------------------------------------

Instrukce je možné rozdělit i podle jejich funkce do několika kategorií vypsaných v následujících šesti kapitolách.

7. Instrukce typu load/store

Instrukce typu load/store slouží k načítání a ukládání hodnot do operační paměti. Mikroprocesor R4300i programátorům nabízel mnoho typů těchto instrukcí, které se od sebe lišily především typem operandů, popř. i automaticky prováděnými konverzemi. Zajímavé jsou instrukce pro atomické operace typu read-modify-write; vždy se jedná o dvojici instrukcí (například LLSC atd.):

# Load/store Operandy Význam
1 LB rt,offset(base) načtení hodnoty typu byte
2 LBU rt,offset(base) načtení hodnoty typu byte unsigned
3 LD rt,offset(base) načtení hodnoty typu doubleword
4 LDL rt,offset(base) načtení hodnoty typu doubleword (nejvyšší bity)
5 LDR rt,offset(base) načtení hodnoty typu doubleword (nejnižší bity)
6 LH rt,offset(base) načtení hodnoty typu halfword
7 LHU rt,offset(base) načtení hodnoty typu halfword unsigned
8 LL rt,offset(base) načtení hodnoty typu word (pro atomické operace)
9 LLD rt,offset(base) načtení hodnoty typu doubleword (pro atomické operace)
10 LW rt,offset(base) načtení hodnoty typu word
11 LWL rt,offset(base) načtení hodnoty typu word (nejvyšší bity)
12 LWR rt,offset(base) načtení hodnoty typu word (nejnižší bity)
13 LWU rt,offset(base) načtení hodnoty typu word Unsigned
14 SB rt,offset(base) uložení hodnoty typu byte
15 SC rt,offset(base) načtení hodnoty typu word (pro atomické operace)
16 SCD rt,offset(base) načtení hodnoty typu doubleword (pro atomické operace)
17 SD rt,offset(base) uložení hodnoty typu doubleword
18 SDL rt,offset(base) uložení hodnoty typu doubleword (nejvyšší bity)
19 SDR rt,offset(base) uložení hodnoty typu doubleword (nejnižší bity)
20 SH rt,offset(base) uložení hodnoty typu halfword
21 SW rt,offset(base) uložení hodnoty typu word
22 SWL rt,offset(base) uložení hodnoty typu word (nejvyšší bity)
23 SWR rt,offset(base) uložení hodnoty typu word (nejnižší bity)

8. Aritmetické instrukce

Podobně jako je tomu i u mnoha dalších typů mikroprocesorů, tvoří největší skupinu instrukcí instrukce pro aritmetické, logické či bitové operace:

# Aritmetické instrukce Operandy Význam
1 ADD rd,rs,rt součet
1 ADDI rt,rs,immediate součet s konstantou
2 ADDIU rt,rs,immediate součet s konstantou
3 ADDU rd,rs,rt součet
4 AND rd,rs,rt operace AND
5 ANDI rt,rs,immediate operace AND s konstantou
6 DADD rd,rs,rt součet
7 DADDI rt,rs,immediate součet s konstantou
8 DADDIU rt,rs,immediate součet s konstantou
9 DADDU rd,rs,rt součet
10 DDIV rs,rt podíl
11 DDIVU rs,rt podíl
12 DIV rs,rt podíl
13 DIVU rs,rt podíl
14 DMULT rs,rt součin
15 DMULTU rs,rt součin
16 DSLL rd,rt,sa posun doleva
17 DSLL32 rd,rt,sa posun doleva
18 DSLLV rd,rt,rs posun doleva
19 DSRA rd,rt,sa aritmetický posun doprava
20 DSRA32 rd,rt,sa aritmetický posun doprava
21 DSRAV rd,rt,rs aritmetický posun doprava
22 DSRL rd,rt,sa logický posun doprava
23 DSRL32 rd,rt,sa logický posun doprava
24 DSRLV rd,rt,rs logický posun doprava
25 DSUB rd,rs,rt rozdíl
26 DSUBU rd,rs,rt rozdíl
27 LUI rt,immediate speciální formát načtení konstanty (horní bity)
28 MFHI rd přesuny dat z/do registrů násobičky
29 MFLO rd přesuny dat z/do registrů násobičky
30 MTHI rd přesuny dat z/do registrů násobičky
31 MTLO rd přesuny dat z/do registrů násobičky
32 MULT rs,rt součin
33 MULTU rs,rt součin
34 NOR rd,rs,rt operace NOR
35 OR rd,rs,rt operace OR
36 ORI rt,rs,immediate operace OR s konstantou
37 SLL rd,rt,sa logický posun doleva
38 SLLV rd,rt,rs logický posun doleva
39 SLT rd,rs,rt nastavení hodnoty na základě podmínky <
40 SLTI rt,rs,immediate nastavení hodnoty na základě podmínky <
41 SLTIU rt,rs,immediate nastavení hodnoty na základě podmínky <
42 SLTU rd,rs,rt nastavení hodnoty na základě podmínky <
43 SRA rd,rt,sa aritmetický posun doprava
44 SRAV rd,rt,rs aritmetický posun doprava
45 SRL rd,rt,sa logický posun doprava
46 SRLV rd,rt,rs logický posun doprava
47 SUB rd,rs,rt rozdíl
48 SUBU rd,rs,rt rozdíl
49 XOR rd,rs,rt operace XOR
50 XORI rt,rs,immediate operace XOR s konstantou

9. Instrukce podmíněných a nepodmíněných skoků

Instrukce podmíněných a nepodmíněných skoků implementovaných mikroprocesorem R4300i jsou zvláštní tím, že u podmíněných skoků lze typem instrukce určit, zda se má v případě NEprovedení skoku provést i branch delay slot, tj. instrukce uvedená ihned za skokem (písmeno L na konci instrukce je zkratkou slova „likely“, resp. „likely not taken“). Tato technologie měla vést ke zvýšení hustoty kódu se zachováním všech předností branch delay slotů. Povšimněte si taktéž způsobu skoku do subrutiny – namísto uložení návratové hodnoty do zásobníku se používají skoky typu jump-and-link, podobně jako u několika dalších mikroprocesorů s architekturou RISC:

# Skoky Operandy Význam
1 BEQ rs,rt,offset skok při podmínce rs=rt
2 BEQL rs,rt,offset skok při podmínce rs=rt
3 BGEZ rs,offset skok při podmínce rs>=0
4 BGEZAL rs,offset skok do subrutiny při podmínce rs>=0
5 BGEZALL rs,offset skok do subrutiny při podmínce rs>=0
6 BGEZL rs,offset skok při podmínce rs>=0
7 BGTZ rs,offset skok při podmínce rs>0
8 BGTZL rs,offset skok při podmínce rs>0
9 BLEZ rs,offset skok při podmínce rs<=0
10 BLEZL rs,offset skok při podmínce rs<=0
11 BLTZ rs,offset skok při podmínce rs<0
12 BLTZAL rs,offset skok do subrutiny při podmínce rs<0
13 BLTZALL rs,offset skok do subrutiny při podmínce rs<0
14 BLTZL rs,offset skok při podmínce rs<0
15 BNE rs,rt,offset skok při podmínce rs!=rt
16 BNEL rs,rt,offset skok při podmínce rs!=rt
17 J target nepodmíněný skok
18 JAL target skok do subrutiny
19 JALR rs,rd skok do subrutiny (uloží původní adresu do registru)
20 JR rs návrat ze subrutiny (skočí na adresu uloženou v registru)

10. Instrukce pro vyvolání výjimky (trap)

Na základě splnění určité podmínky je možné vyvolat výjimku, k čemuž slouží instrukce typu trap, které tak do jisté míry suplují podmíněné skoky (při vyvolání výjimky lze zjistit návratovou adresu ze speciálního registru EPC):

# Vyvolání výjimky Operandy Význam
1 TEQ rs,rt vyvolání výjimky při splnění podmínky rs=rt
2 TEQI rs,immediate vyvolání výjimky při splnění podmínky rs=konstanta
3 TGE rs,rt vyvolání výjimky při splnění podmínky rs>=rt (signed)
4 TGEI rs,immediate vyvolání výjimky při splnění podmínky rs>=konstanta
5 TGEIU rs,immediate vyvolání výjimky při splnění podmínky rs>=konstanta
6 TGEU rs,rt vyvolání výjimky při splnění podmínky rs>=rt (unsigned)
7 TLT rs,rt vyvolání výjimky při splnění podmínky rs<rt (signed)
8 TLTI rs,immediate vyvolání výjimky při splnění podmínky rs<konstanta
9 TLTIU rs,immediate vyvolání výjimky při splnění podmínky rs<konstanta
10 TLTU rs,rt vyvolání výjimky při splnění podmínky rs<rt (unsigned)
11 TNE rs,rt vyvolání výjimky při splnění podmínky rs!=rt
12 TNEI rs,immediate vyvolání výjimky při splnění podmínky rs!=konstanta

11. Speciální instrukce

Zbývá nám již pouze popis dvou speciálních instrukcí, z nichž jedna slouží pro ladění a druhá pro vyvolání systémové subrutiny:

# Speciální instrukce Operandy Význam
1 BREAK offset breakpoint
2 SYSCALL offset vyvolání systémové rutiny

12. Instrukce pro matematický koprocesor

Jak jsme si již řekli v×předchozích kapitolách, obsahoval mikroprocesor R4300i mj. i koprocesor CP1 sloužící pro provádění operací s registry obsahujícími hodnoty uložené ve formátu plovoucí řádové čárky. Tento matematický koprocesor neobsahoval například podporu pro goniometrické, logaritmické či exponenciální funkce, ale „pouze“ pro základní aritmetické operace (součet, rozdíl, součin, podíl) doplněné o funkce pro zaokrouhlování a o výpočet druhé odmocniny. V porovnání s matematickým koprocesorem 80×87 se sice jedná o mnohem menší počet operací, výhodou CP1 však bylo (kromě menší obsazené plochy čipu) mnohem větší množství pracovních registrů (32 oproti osmi) a tím pádem i širší možnosti při minimalizaci počtu přístupů do operační paměti, předávání operandů volaným funkcím/procedurám atd. Funkce matematického koprocesoru jsou vypsány pod tímto odstavcem. V tabulce s funkcemi se používají následující zkratky:

root_podpora

# Označení Význam
1 fs zdrojový FP registr FGR0FGR31
2 fd cílový FP registr FGR0FGR31
3 ft většinou druhý operand u instrukcí typu FGRz = FGRx op. FGRy
4 rt cíl skoku či zdrojový/cílový celočíselný registr atd. (různý význam)
5 offset šestnáctibitový (relativní) offset
6 fmt formát operandů, zde single/float či double

Následuje již slíbená tabulka s instrukcemi matematického koprocesoru CP1:

# Instrukce Operandy Význam
1 ABS.fmt fd,fs výpočet absolutní hodnoty
2 ADD.fmt fd,fs,ft součet
3 BC1F offset skok při nastavení FP příznaku na false (příznak nastaven instrukcí C.cond.fmt)
4 BC1FL offset skok při nastavení FP příznaku na false (příznak nastaven instrukcí C.cond.fmt)
5 BC1T offset skok při nastavení FP příznaku na true (příznak nastaven instrukcí C.cond.fmt)
6 BC1TL offset skok při nastavení FP příznaku na true (příznak nastaven instrukcí C.cond.fmt)
7 C.cond.fmt fs,ft porovnání obsahu dvou registrů
8 CEIL.L.fmt fd,fs funkce ceil(), zaokrouhlení FP hodnoty směrem k nekonečnu
9 CEIL.W.fmt fd,fs funkce ceil(), zaokrouhlení FP hodnoty směrem k nekonečnu
10 CFC1 rt,fs přesun řídicího slova koprocesoru do celočíselného registru
11 CTC1 rt,fs přesun hodnoty z celočíselného registru do řídicího slova koprocesoru
12 CVT.D.fmt fd,fs konverze na hodnotu typu double
13 CVT.L.fmt fd,fs konverze na hodnotu typu fixed point (long)
14 CVT.S.fmt fd,fs konverze na hodnotu typu single/float
15 CVT.W.fmt fd,fs konverze na hodnotu typu fixed point (int/word)
16 DIV.fmt fd,fs,ft podíl
17 DMFC1 rt,fs přesun hodnoty z FP registru do celočíselného registru
18 DMTC1 rt,fs přesun hodnoty z celočíselného registru do FP registru
19 FLOOR.L.fmt fd,fs funkce floor(), zaokrouhlení FP hodnoty směrem k zápornému nekonečnu
20 FLOOR.W.fmt fd,fs funkce flool(), zaokrouhlení FP hodnoty směrem k zápornému nekonečnu
21 LDC1 ft,offset(base) načtení FP hodnoty z operační paměti
22 LWC1 ft,offset(base) načtení FP hodnoty z operační paměti
23 MFC1 rt,fs přesun z FP registru do celočíselného registru
24 MOV.fmt fd,fs přesun hodnoty mezi dvojicí FP registrů
25 MTC1 rt,fs přesun hodnoty z celočíselného registru do FP registru
26 MUL.fmt fd,fs,ft součin
27 NEG.fmt fd,fs negace (změna znaménka)
28 ROUND.L.fmt fd,fs funkce round(), zaokrouhlení (long)
29 ROUND.W.fmt fd,fs funkce round(), zaokrouhlení (int)
30 SDC1 ft,offset(base) uložení FP hodnoty do operační paměti
31 SQRT.fmt fd,fs druhá odmocnina
32 SUB.fmt fd,fs,ft rozdíl
33 SWC1 ft,offset(base) uložení FP hodnoty do operační paměti
34 TRUNC.L.fmt fd,fs funkce trunc(), oříznutí desetinné části (long)
35 TRUNC.W.fmt fd,fs funkce trunc(), oříznutí desetinné části (int)

13. Obsah následující části seriálu

V následující části tohoto seriálu si popíšeme zejména grafický subsystém herní konzole Nintendo 64, protože právě v možnostech i celkové výkonnosti těchto subsystémů spočívají největší rozdíly mezi herními konzolemi páté generace. Zaměříme se především na možnosti vykreslování polygonů a využívání textur; taktéž si možnosti Nintenda 64 porovnáme s konkurenčními herními konzolemi Sega Saturn a samozřejmě i se Sony PlayStation.

14. Odkazy na Internetu

  1. Don't Blame Rare, Blame Rambus
    http://www.therwp.com/forum­s/showthread.php?t=881
  2. RDRAM
    http://en.wikipedia.org/wiki/RDRAM
  3. MIPS Architecture Overview
    http://tams-www.informatik.uni-hamburg.de/applets/hades/web­demos/mips.html
  4. MIPS Technologies R3000
    http://www.cpu-world.com/CPUs/R3000/
  5. Sony PlayStation (Wikipedia)
    http://en.wikipedia.org/wi­ki/PlayStation_(console)
  6. The Official PlayStation muzeum
    http://playstationmuseum.com/pla­ystation-systems/
  7. CPU-collection: IDT R3010 FPU
    http://www.cpu-collection.de/?tn=0&l0=co&l1=ID­T&l2=R3010+FPU
  8. The MIPS R2000 Instruction Set
    http://suraj.lums.edu.pk/~cs423a05/Re­ference/MIPSCodeTable.pdf
  9. Maska mikroprocesoru RISC 1
    http://www.cs.berkeley.edu/~pat­trsn/Arch/RISC1.jpg
  10. Maska mikroprocesoru RISC 2
    http://www.cs.berkeley.edu/~pat­trsn/Arch/RISC2.jpg
  11. The MIPS Register Usage Conventions
    http://pages.cs.wisc.edu/~cs354–2/beyond354/conventions.html
  12. C.E. Sequin and D.A.Patterson: Design and Implementation of RISC I
    http://www.eecs.berkeley.e­du/Pubs/TechRpts/1982/CSD-82–106.pdf
  13. Berkeley RISC
    http://en.wikipedia.org/wi­ki/Berkeley_RISC
  14. Great moments in microprocessor history
    http://www.ibm.com/develo­perworks/library/pa-microhist.html
  15. Great Microprocessors of the Past and Present
    http://www.cpushack.com/CPU/cpu1.html
  16. Sega documentation
    http://koti.kapsi.fi/~anti­me/sega/docs.html
  17. 1995 Programming on the Sega Saturn
    http://cowboyprogramming.com/2010/06/03/1995-programming-on-the-sega-saturn/
  18. 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
  19. SuperH RISC engine Family
    http://www.renesas.com/pro­ducts/mpumcu/superh/index­.jsp
  20. Sega Saturn
    http://en.wikipedia.org/wi­ki/Sega_saturn
  21. Jaguar Sector – II
    http://www.jaguarsector.com/index.php
  22. Atari Age: Atari Jaguar History
    http://www.atariage.com/Ja­guar/history.html
  23. Jaguar
    http://www.giantbomb.com/jaguar/3045–28/
  24. Consoles that won't die: The Atari Jaguar
    http://venturebeat.com/2013/04/25/con­soles-that-wont-die-atari-jaguar/
  25. Atari Jaguar and Atari Jaguar CD
    http://videogamecritic.com/ja­guarinfo.htm
  26. Atari Jaguar Documentation (Forum)
    http://www.jaguarsector.com/in­dex.php?showforum=65
  27. Atari Jaguar Programming (Forum)
    http://www.jaguarsector.com/in­dex.php?showforum=63
  28. The Jaguar Underground Documentation
    http://justclaws.atari.or­g/devcats/dox/dox.htm
  29. Blitter (Wikipedia CZ)
    http://cs.wikipedia.org/wiki/Blitter
  30. Blitter (Wikipedia EN)
    http://en.wikipedia.org/wiki/Blitter
  31. Bit blit
    http://en.wikipedia.org/wiki/Bit_blit
  32. Disassembler for the portable Jaguar DSP emulator (zdrojový kód s instrukcemi)
    http://mamedev.org/source/src/e­mu/cpu/jaguar/jagdasm.c.html
  33. Fourth-Generation Consoles
    http://gaming.wikia.com/wiki/Fourth-Generation_Consoles
  34. Fifth-Generation Consoles
    http://gaming.wikia.com/wiki/Fifth-Generation_Consoles
  35. History of video game consoles (fifth generation)
    http://en.wikipedia.org/wi­ki/History_of_video_game_con­soles_(fifth_generation)
  36. Atari Jaguar
    http://gaming.wikia.com/wi­ki/Atari_Jaguar
  37. Atari Jaguar Games
    http://gaming.wikia.com/wi­ki/List_of_Atari_Jaguar_ga­mes
  38. MyMedia Games Network Retrospective – Nintendo Super FX chip
    http://psp.mmgn.com/News/MyMedia-Games-Network-Retrospe-G6W
  39. Wikipedia: Super FX
    http://en.wikipedia.org/wiki/Super_FX
  40. IGN: Top 25 Consoles
    http://www.ign.com/top-25-consoles/13.html
  41. Sega Mega Drive
    http://sega.jp/archive/segahard/md/
  42. The16bit Era Of Console Video Games
    http://tvtropes.org/pmwiki/pmwi­ki.php/Main/The16bitEraOf­ConsoleVideoGames
  43. The Console Wars
    http://www.cracked.com/funny-2590-the-console-wars/
  44. Console Wars
    http://tvtropes.org/pmwiki/pmwi­ki.php/Main/ConsoleWars
  45. Era of the „Bit Wars“
    http://www.gtplanet.net/fo­rum/threads/era-of-the-bit-wars.119796/
  46. 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
  47. Which system ended the „Bit Wars“?
    http://atariage.com/forum­s/topic/199163-which-system-ended-the-bit-wars/

Byl pro vás článek přínosný?