Obsah
2. Přechod od assembleru k vyšším programovacím jazykům
3. Postupná adaptace programovacího jazyka C na herních konzolích
6. Vývojové nástroje pro herní konzoli Sega Saturn
7. Problémy doprovázející vývoj her pro Segu Saturn
8. Vývojové nástroje pro herní konzoli Atari Jaguar
9. Sony PlayStation a její vstřícný přístup k vývojářům
1. Historie vývoje počítačových her (115. část – vývojové nástroje pro herní konzole čtvrté a páté generace)
Modern platforms (including DirectX and OpenGL) often deprecate features, causing your past creations to all of a sudden stop working. Classic consoles do not have this problem; they are already obsolete! This means that the games you develop for them will always work.
Vývojové nástroje určené pro osmibitové herní konzole, s nimiž jsme se seznámili v předchozích částech tohoto seriálu, původně sestávaly převážně z takzvaných cross assemblerů a linkerů. Tyto nástroje se spouštěly na vývojové platformě, která se v naprosté většině případů lišila od platformy, na níž byla postavena daná herní konzole a právě proto se zde objevuje slovo cross (původními vývojovými platformami byly minipočítače, posléze i osobní počítače). V některých případech dokonce nebyl používán ani linker, protože se do paměti herní konzole, resp. přesněji řečeno na její paměťový modul, nahrával přímo výstup z assembleru, který tak musel generovat kód s absolutními adresami.
Obrázek 1: Herní konzole Fairchild Channel F i s několika paměťovými moduly s hrami.
Zajímavé přitom je, že si programátoři s assemblerem vystačili (nebo museli vystačit) po velmi dlouhou dobu trvající v některých případech až dvacet let, konkrétně od roku 1976 (první programovatelná konzole Fairchild Channel F o rok později následovaná Atari 2600) až zhruba do roku 1996 (vydání poslední herní konzole páté generace: Nintenda 64).
Obrázek 2: Herní konzole Atari 2600 vybavená mikroprocesorem MOS 6507, což je varianta původního čipu MOS 6502, ovšem se zmenšeným počtem pinů adresové sběrnice a několika dalšími omezeními.
Na osmibitových herních konzolích se pro tvorbu profesionálních komerčních her prakticky žádný jiný programovací jazyk než assembler v minulosti nepoužíval. Obliba kompilovaných jazyků (popř. interpretrů) i pro tento typ konzolí se začala zvyšovat vlastně až ve chvíli, kdy byly osmibitové herní konzole překonány a staly se platformou pro tvorbu alternativních her tvořených v současnosti na amatérské bázi. To ovšem neznamená, že by se některé z těchto her neprodávaly; rozdělení profesionální–amatérská totiž vůbec nesouvisí s kvalitou her, ale spíše s tím, zda se programátoři touto činností živí nebo tvoří hry pro zábavu (viz též motto na začátku kapitoly).
Obrázek 3: Osmibitová herní konzole Nintendo Entertainment System (NES) je přímým předchůdcem SNESu.
2. Přechod od assembleru k vyšším programovacím jazykům
Ovšem přibližně ve chvíli, kdy se na trhu objevily herní konzole čtvrté generace, které byly vybaveny na svou dobu výkonnými mikroprocesory postavenými na jádru 65C816 a Motorola 68000 a operačními paměťmi o kapacitách v rozmezí 64kB až 1MB, je patrná snaha o postupné nahrazení assemblerů vyššími programovacími jazyky. Tato snaha je samozřejmě pochopitelná, protože o úspěchu či neúspěchu her rozhodovala nejenom jejich technologická kvalita, ale i okamžik, kdy začala být hra prodávána (a není zde řeč jen o extrémech typu Duke Nukem Forever :-). A právě i díky použití vyšších programovacích jazyků bylo možné dosti podstatným způsobem urychlit vývoj, vytvářet složitější hry a v neposlední řadě si ponechat „zadní vrátka“ pro případný přenos hry na jinou platformu (to samozřejmě pouze v případě, že by se jednalo o komerčně úspěšnou hru). Díky možnosti kombinace kódu napsaného ve vyšším programovacím jazyce s assemblerem navíc programátorům stále zůstávala možnost naprogramovat například vykreslovací jádro v optimalizovaném assembleru.
Obrázek 4: Původní case osmibitové herní konzole TurboGrafx-16. Tato herní konzole stojí na hranici mezi zařízeními patřícími do třetí a do čtvrté generace herních konzolí.
Kapacity operačních pamětí a video pamětí herních konzolí čtvrté generace:
# | Konzole | RAM | Video RAM | Další RAM | |
---|---|---|---|---|---|
1 | Sega Mega Drive | 64 kB | 64 kB | 8 kB pro Zilog Z80 | |
2 | Super NES (SNES) | 128 kB | 64 kB | 64 kB (Audio) | |
3 | Neo Geo | 64 kB | 74 kB | 2 kB (Audio) | |
4 | Commodore CDTV | 1024 kB | v RAM | × | |
5 | Philips CD-i | 1024 kB | v RAM | × |
Obrázek 5: Herní konzole SNES ve variantě určené pro připojení k televizorům pracujícím v normě PAL.
Mikroprocesory použité v herních konzolích čtvrté generace:
# | Konzole | Použitý mikroprocesor | Odvozeno z CPU | Frekvence CPU |
---|---|---|---|---|
1 | Sega Mega Drive | MC68HC000 (CMOS) | Motorola 68000 | 7,61 MHz/7,67 MHz |
2 | Super NES (SNES) | 5A22 | 65C816 | 3,58 MHz |
3 | Neo Geo | Motorola 68000 | 12,00 MHz | |
4 | Commodore CDTV | Motorola 68000 | 7,16 MHz | |
5 | Philips CD-i | Philips SCC68070 | Motorola 68000 | 15,5 MHz |
Obrázek 6: Jedna z variant ovladače herní konzole SNES.
3. Postupná adaptace programovacího jazyka C na herních konzolích
Při výběru vyššího programovacího jazyka vhodného pro použití na herních konzolích čtvrté a především pak páté generace měli vývojáři her vcelku jednoduchou volbu. Tou byl výběr programovacího jazyka C. Důvodů, které k tomuto výběru vedly, bylo větší množství: tento programovací jazyk při správném použití umožňuje naprogramovat efektivně i nízkoúrovňové operace, překlad byl a doposud je prováděn přímo do strojového kódu vybraného procesoru a nikoli do bajtkódu (to byl problém například v případě USCD Pascalu s jeho p-kódem, naproti tomu konkurenční Turbo Pascal podporoval jen řadu procesorů 8080/Z80/80×86), mnohé překladače umožňovaly vkládání příkazů v assembleru do céčkových zdrojových kódů a existovalo větší množství firem, které překladač céčka nabízely.
Obrázek 7: Způsob zapojení Sega 32X do Sega Mega Drive/Sega Genesis.
Navíc nesmíme zapomenout ani na postupné zlepšování kvality céčkových překladačů (optimalizace kódu), které navíc dokázaly dobře využít možností RISCových mikroprocesorů, které na herních konzolích páté generace převládaly, což je ostatně patrné i při pohledu na tabulku zobrazenou pod tímto odstavcem:
# | Konzole | Použitý mikroprocesor | Architektura |
---|---|---|---|
1 | PlayStation | R3000A | 32bitový RISC |
2 | Nintendo 64 | R4300i | 64bitový RISC |
3 | Sega Saturn | 2×SH-2 | 32bitový RISC |
4 | 3DO | ARM60 | 32bitový RISC |
5 | Atari Jaguar | Motorola M68000 + 2×RISC | kombinace 16/32 RISC/CISC |
6 | Amiga CD32 | Motorola M68020 | 32bitový CISC |
7 | Apple Bandai Pippin | PowerPC 603 | 32bitový RISC |
8 | Sega 32X | 2×SH-2 | 32bitový RISC |
Obrázek 8: Atari Jaguar.
4. Programovací jazyk C
Samotný programovací jazyk C prošel poměrně dlouhým vývojem, navíc se mnoho zprvu neobvyklých vlastností tohoto jazyka, například indexování polí od nuly (namísto od jedničky, jak tomu bylo například ve Fortranu), použití speciálních ASCII znaků namísto jmen operátorů apod. postupně začalo používat i v modernějších programovacích jazycích (C, C++, Java, JavaScript, částečně i Python, Perl atd.). V případě indexování polí od nuly byla tato vlastnost do jazyka C i do jeho předchůdce jazyka BCPL zahrnuta pro jednodušší implementaci ukazatelové (pointerové) aritmetiky.
Obrázek 9: Počítač PDP-7.
Vznik programovacího jazyka C velmi úzce souvisí s vývojem nového operačního systému UNIX pro minipočítač PDP-7. I přesto, že se jednalo o minipočítač, tj. o stroj na půli cesty mezi mikropočítačem a mainframem, byly jeho technické parametry z dnešního pohledu velmi omezené; například kapacita operační paměti dosahovala pouze 8192 osmnáctibitových slov, tj. osmnácti kilobajtů. Pro nově vytvořený operační systém bylo nutné navrhnout či upravit nějaký systémově orientovaný programovací jazyk. tj. jazyk, ve kterém by bylo možné psát systémové programy a popř. i uživatelské aplikace. Nejprve se sice uvažovalo o využití překladače Fortranu, ovšem tato myšlenka byla vzhledem k výše popsaným omezeným hardwarovým možnostem mikropočítače PDP-7 následně opuštěna.
Obrázek 10: PDP-11 ve variantě PDP-11–70.
Namísto toho Ken Thompson vytvořil nový programovací jazyk nazvaný jednoduše B. Tento jazyk byl založen na existujícím jazyku BCPL (Basic Combined Programming Language), jenž byl vytvořen Martinem Richardsem již v roce 1966. Vzhledem k tomu, že jazyk BCPL byl z hlediska konstrukce překladače poměrně složitý (což je poněkud paradoxní, neboť se jednalo o zjednodušený jazyk CPL ze začátku šedesátých let), nebylo možné, aby se jeho překladač na mikropočítači PDP-7 spouštěl z operačního systému, protože jen pro samotný překlad zdrojových kódů bylo zapotřebí cca 16 kB operační paměti.
Obrázek 11: Řídicí panel počítače PDP-11–70.
Z tohoto důvodu Ken Thompson z původního jazyka BCPL odstranil některé vlastnosti, které nepovažoval za podstatné (například složitější typy programových smyček) a naopak změnil jeho syntaxi tak, aby se zápis programu mohl co nejvíce zkrátit. Právě z této snahy například pochází i způsob zápisu operátorů pomocí speciálních znaků a nikoli klíčových slov (včetně zcela nových operátorů ++ a –), což je zvyk používaný doposud – viz například současné programovací jazyky, jakými jsou C, C++, Java či JavaScript. Taktéž se v jazyku B objevuje použití středníků pro ukončení příkazů.
Obrázek 12: Přebal slavné učebnice céčka (K&R C).
Některé vlastnosti programovacího jazyka B však nebyly vhodné pro systémové programování. Z tohoto důvodu se vývojáři v Bellových laboratořích rozhodli, že v rámci přechodu na počítač PDP-11 vytvořili nový programovací jazyk, který mj. umožnil více odstínit programátora od hardwarové architektury počítače. Tento programovací jazyk – „nový B“ – byl na návrh Kena Thompsona pojmenován C. Jestli se jedná o další písmeno v abecedě (C=B+1) nebo o následující znak v označení předchůdce obou jazyků – jazyka BCPL, je již otázka, kterou tvůrci ponechali nezodpovězenou.
Obrázek 13: Další vydání již popisovalo ANSI C (dodnes používaný dialekt céčka).
5. Aztec C
Jedním z populárních překladačů céčka byl v době největšího rozšíření herních konzolí čtvrté generace překladač nazvaný Aztec C, jenž byl vyvíjený společností Manx Software Systems. O tomto překladači se dnes zmiňuji především z toho důvodu, že různé varianty Aztec C byly dostupné jak pro některé osmibitové mikroprocesory (Zilog Z80 a MOS 6502), tak i pro slavný 16/32bitový mikroprocesor Motorola 68000, který byl použit nejenom na osobních počítačích Atari, Amiga a Macintosh, ale i v herních konzolích čtvrté generace. Překladače Aztec C byly i s dalšími nástroji dostupné například pro počítače Apple II (MOS 6502, později i 65816, zde byl konkurenčním překladačem ORCA/C), Commodore C64, počítače s mikroprocesorem Zilog Z80 a operačním systémem CP/M atd.
Obrázek 14: Logo překladačů Aztec C.
S překladači Aztec C se později mohli programátoři setkat na již zmíněných počítačích vybavených čipem Motorola 68000 (zde byl vážným konkurentem například Lattice C, na herních konzolích čtvrté generace se však s velkou pravděpodobností používal právě Aztec C) a nesmíme zapomenout ani na verzi určenou pro MS-DOS (reálný režim procesorů 80×86), která byla zajímavá především tím, že přímo konkurovala překladači céčka zakoupeného a posléze prodávaného firmou Microsoft, která nakonec tuto už do počátku nerovnou bitvu na poli vývojových nástrojů vyhrála. Seznam v současnosti dostupných variant překladače Aztec C lze nalézt na adrese http://www.aztecmuseum.ca/compilers.htm.
Obrázek 15: Jeden z konkurenčních překladačů k Aztec C byl Lattice C.
V případě konzolí páté generace, které byly vybaveny mikroprocesory s architekturou RISC, se již můžeme setkat s jinými typy překladačů.
6. Vývojové nástroje pro herní konzoli Sega Saturn
Herní konzole Sega Saturn (patřící do páté generace herních konzolí) byla vybavena dvojicí 32bitových RISCových procesorů SH-2. Pro tento typ procesorů existovalo několik překladačů céčka, ovšem oficiální vývojové nástroje dodávala přímo společnost Hitachi, tj. dodavatel mikroprocesorů. Pro vývoj her na konzoli Segu Saturn se většinou používala kombinace několika počítačů, typicky pracovní stanice Sun Sparc, HP9000/700 a popř. i běžného osobního počítače PC s procesorem 80486 (později i Pentium), k němuž se připojovala vypalovací mechanika pro média CD-ROM. Překladač programovacího jazyka C pro mikroprocesory SH-2 se jmenoval SH-2C. Tento překladač, který bylo možné spouštět jak na UNIXu, tak i na PC (DOS, chráněný režim), byl doplněn cross assemblerem, linkerem, debuggerem (s vlastním grafickým uživatelským rozhraním) a navíc i specializovanými nástroji určenými pro práci s DSP, kterým byla konzole Sega Saturn taktéž vybavena. Dnes je SH-2C překladač dodáván pod jménem Renesac SH C.
Obrázek 16: Blokové schéma herní konzole Sega Saturn.
Kromě překladače, assembleru a linkeru se pro vývoj her používalo i zařízení ICE emulující činnost mikroprocesorů SH-2. K tomuto zařízení se přes síť mohl připojit debugger (s GUI) a z druhé strany pak tzv. target box, což byl ekvivalent samotné herní konzole Sega Saturn (pravděpodobně šlo přímo o herní konzoli upravenou tak, aby bylo možné měnit obsah operační paměti). Vývojové nástroje byly doplněny i o další pomocné utility, například pro práci s CD (test zapisování, generování obsahu atd.), assembler pro DSP, emulátor DSP (pro DOS i Unix) a grafické převodníky. Investice do potřebného software a hardware byla poměrně vysoká, což se brzy ukázala být jedna z nevýhod Sega Saturnu, především v porovnání s konkurenční herní konzolí Sony PlayStation.
Obrázek 17: Grafický subsystém herní konzole Sega Saturn.
7. Problémy doprovázející vývoj her pro Segu Saturn
Vývoj her pro herní konzoli Sega Saturn doprovázely zpočátku dosti velké problémy, které byly zapříčiněny především její relativně složitou interní strukturou a taktéž jen malým množstvím kvalitních programových knihoven určených pro ovládání grafického subsystému, který byl v případě Saturnu velmi odlišný od všech dalších herních konzolí a vlastně i od moderních grafických akcelerátorů. Při vývoji prvních her, které pro konzoli Sega Saturn vznikly, tak byli vývojáři nuceni si napsat vlastní grafické enginy, a to většinou přímo v assembleru – podle některých zdrojů byly například vykreslovací rutiny ručně optimalizované v assembleru zhruba dvakrát a v extrémních případech i pětkrát rychlejší v porovnání s kódem napsaným v céčku. Někteří vývojáři dokonce ve snaze o zrychlení a zjednodušení vývoje používali pouze jeden mikroprocesor SH-2 a zcela se tak vzdali možnosti kooperace dvou čipů.
Obrázek 18: Blokové schéma zvukového subsystému herní konzole Sega Saturn.
Společnost Sega později na výtky programátorů reagovala a vydala vylepšené verze grafických knihoven, které měly vývoj pro tuto herní konzoli ulehčit a současně i urychlit. I samotní vývojáři se postupně naučili ovládat složitý hardware, takže hry pro Segu Saturn vydané v pozdějším období jsou většinou po technologické stránce mnohem kvalitnější než první herní tituly, které pro tuto konzoli vznikly v relativně krátkých termínech (protože Sega Saturn musela konkurovat mnoha dalším herním konzolím páté generace).
Obrázek 19: Blokové schéma zdroje signálu pro FM syntézu.
8. Vývojové nástroje pro herní konzoli Atari Jaguar
Z pohledu vývojáře byla nejsložitější herní konzolí páté generace konzole Atari Jaguar, a to především kvůli použití velkého množství různých čipů i způsobu jejich vzájemného propojení a komunikace. Veškeré funkce totiž byly soustředěny do tří čipů, z nichž dva (nazývané „Tom“ a „Jerry“) byly vyvinuty přímo pro potřeby Jaguara, zatímco třetím čipem byl klasický a lety ověřený mikroprocesor Motorola 68000, který však původně v této konzoli měl plnit spíše pomocnou roli (což se však ve skutečnosti nestalo, protože mnozí vývojáři právě na tomto CPU prováděli převážnou část výpočtů – s čímž ovšem v návrhu nebylo počítáno). Čipy Tom a Jerry obsahovaly architektonicky prakticky shodné 32bitové RISCové procesory, které se však využívaly k odlišným operacím: procesor na čipu Tom se staral o zobrazování grafiky, zatímco procesor na čipu Jerry byl využíván pro zvuky a hudbu. Tom navíc obsahoval dva další moduly: 64bitový Objektový procesor (Object Processor) a taktéž 64bitový blitter. Zajímavé je, že jednotlivé čipy používaly odlišný endianess, tj. způsob uložení bajtů v 32bitových a 64bitových slovech.
Obrázek 20: Cybermorph (Atari Jaguar).
Vývoj her byl dosti složitý i z toho důvodu, že se grafické operace či operace prováděné DSP programovaly přímo v assembleru, zatímco logika hry mohla být naprogramována buď v céčku nebo taktéž v assembleru. Pro Motorolu 68000 se mohlo využít velké množství různých překladačů céčka, včetně již zmíněného Aztec C, používaly se však i assemblery, například i známý ASM-One Macro Assembler z Amigy. Mezi další často používané nástroje patří i modernější Orion's GPU/DSP debugger určený přímo pro Jaguara.
Obrázek 21: Iron Soldier (Atari Jaguar).
9. Sony PlayStation a její vstřícný přístup k vývojářům
Z pohledu programátorů byla pro tvorbu nových her nejjednodušší herní konzole Sony PlayStation, a to hned ze dvou důvodů. Především je interní struktura této herní konzole do značné míry podobná běžným osobním počítačům, a to zejména v porovnání s Atari Jaguarem a Sega Saturnem, kde bylo nutné správně naprogramovat koordinaci velkého množství čipů. Poměrně velkou revolucí – opět z hlediska programátorů – byl vývojový systém pro Sony PlayStation. Ten měl být původně určený pro stroje vybavené mikroprocesory MIPS-R4000, ovšem později došlo k přehodnocení celé architektury, takže vývojové nástroje začaly být dostupné pro běžné osobní počítače PC; jinými slovy pro levný „komoditní“ hardware, s nímž byli programátoři dobře seznámeni a většinou si ani nemuseli kupovat žádné přídavné periferní zařízení (což je v porovnání s počáteční investicí nutnou v případě Saturnu dosti podstatná výhoda).
Obrázek 22: Checkered Flag (Atari Jaguar).
Společnost Sony taktéž zakoupila firmu Psygnosis, a to za přibližně 48 milionů dolarů. Tato cena byla podle některých názorů velmi vysoká (přehnaná), na druhou stranu však nově vzniklá divize pojmenovaná Sony Interactive Entertainment velmi pomohla jak ke vzniku nových her (Destruction Derby, WipeOut atd.), tak i k vytvoření snadno ovladatelných vývojových nástrojů založených na GCC (Gnu C Compileru, linkeru, assembleru) a vlastním debuggeru – všechny tyto nástroje bylo samozřejmě možné ovládat přímo z PC. Není tedy divu, že PlayStation je dodnes používána amatérskými programátory pro vývoj nových her mnohem častěji, než je tomu u dalších herních konzolí páté generace.
Obrázek 23: Checkered Flag (Atari Jaguar).
10. Odkazy na Internetu
- GameBoy Hardware
http://fms.komkon.org/GameBoy/Tech/Hardware.html - VGB – GameBoy (GBC) Emulator
https://play.google.com/store/apps/details?id=com.fms.vgb - The GameBoy Development Ring
http://www.webring.org/hub?ring=gameboydev - Gameboy Development Wiki
http://gbdev.gg8.se/wiki/articles/Main_Page - Assemblers for Gameboy
http://gbdev.gg8.se/wiki/articles/Assemblers - Compilers for Gameboy
http://gbdev.gg8.se/wiki/articles/Compilers - Tools for Gameboy Color Development
http://www.rrsd.com/software_development/gameboy_development/ - Emulators for Gameboy
http://gbdev.gg8.se/wiki/articles/Emulators - GB Basic FAQ
http://www.devrs.com/gb/files/gbbasic.html - GB Basic V1.08 Documentation
http://web.textfiles.com/games/gbbasic.txt - Game Boy Development Kit – GBDK
http://gbdev.gg8.se/wiki/articles/GBDK - ASxxxx Cross Assemblers
http://shop-pdp.kent.edu/ashtml/asxxxx.htm - GameBoy Homepage
http://fms.komkon.org/GameBoy/ - Gameboy Development Kit
http://sourceforge.net/projects/gbdk/ - Nintendo GameBoy FREQUENTLY ASKED QUESTIONS
http://fms.komkon.org/stuff/gameboy.faq - GameBoy Developers Kit (GBDK)
http://gbdk.sourceforge.net/ - Virtual GameBoy
http://fms.komkon.org/VGB/ - VGB – GameBoy (GBC) Emulator
https://play.google.com/store/apps/details?id=com.fms.vgb - GameBoy : Using the GameBoy skeleton for serious business
http://fruttenboel.verhoeven272.nl/Gameboy/index.html - Game Boy Devel Info
http://www.reinerziegler.de/readplus.htm - GameBoy : Using the GameBoy skeleton for serious business
http://verhoeven272.nl/cgi-bin/FSgz?fruttenboel%2FGameboy&Fruttenboel+GameBoy&GBtop&pandocs&GBcontent - Assembly Language Programming
http://cratel.wichita.edu/cratel/ECE238Spr08 - Liquid Crystal Display – LCD
http://inventors.about.com/od/lstartinventions/a/LCD.htm - James Fergason
http://www.invent.org/hall_of_fame/57.html - James Fergason invented an improved liquid crystal display
http://invention.smithsonian.org/centerpieces/quartz/inventors/fergason.html - James Fergason
http://en.wikipedia.org/wiki/James_Fergason - History of display technology
http://en.wikipedia.org/wiki/Display_examples - Nocash NES Specs
http://nocash.emubase.de/everynes.htm - Nintendo Entertainment System
http://cs.wikipedia.org/wiki/NES - Nintendo Entertainment System Architecture
http://nesdev.icequake.net/nes.txt - 2A03 technical reference
http://nesdev.parodius.com/2A03%20technical%20reference.txt - NES Dev wiki: 2A03
http://wiki.nesdev.com/w/index.php/2A03 - Ricoh 2A03
http://en.wikipedia.org/wiki/Ricoh_2A03 - 2A03 pinouts
http://nesdev.parodius.com/2A03_pinout.txt - Get Your Hands on an Original NES Software Development Kit
http://kotaku.com/5799768/get-your-hands-on-an-original-nes-software-development-kit - NesDev
http://wiki.nesdev.com/w/index.php/Nesdev - How to make NES music
http://blog.snugsound.com/2008/08/how-to-make-nes-music.html - Nintendo Entertainment System Architecture
http://nesdev.icequake.net/nes.txt - MIDINES
http://www.wayfar.net/0×f00000_overview.php - FamiTracker
http://famitracker.com/ - nerdTracker II
http://nesdev.parodius.com/nt2/ - Nintendo Entertainment System Documentation
http://nesdev.com/NESDoc.pdf - NES programming info
http://nesdev.com/NinTech.txt - Programming that 8-bit beast of power, the NES
http://nesdev.com/NESprgmn.txt - NESICIDE
http://www.nesicide.com/ - Screenshoty NESICIDE
http://www.nesicide.com/?s=media - NES Development Tools
http://bobrost.com/nes/resources.php#devtools - cc65
http://www.cc65.org/ - cc65
http://oliverschmidt.github.io/cc65/ - cc65 Documentation Overview
http://oliverschmidt.github.io/cc65/doc/ - NESPaint
http://www.cs.cmu.edu/~dennisc/nespaint/ - P65
https://hkn.eecs.berkeley.edu/~mcmartin/P65/ - NerdTracker II
http://nesdev.com/nt2/ - NES Emulators
http://wiki.nesdev.com/w/index.php/Emulators - Game Development for the 8-bit NES
http://bobrost.com/nes/ - NES Programming Lectures
http://bobrost.com/nes/lectures.php - nbasic Language Reference Manual
http://bobrost.com/nes/files/nbasic_manual.html - DP Interviews: Bob Whitehead (By Scott Stilphen)
http://www.digitpress.com/library/interviews/interview_bob_whitehead.html - The dasm macro assembler
http://dasm-dillon.sourceforge.net/ - Atari Programming Workshop Chapter links
http://atariage.com/forums/viewtopic.php?t=47479 - Various Development Kits
http://devkits.handheldmuseum.com/ - Classic Console Development
http://sebastianmihai.com/ccd/ - Atari 2600 development – Snappy (batari basic)
http://sebastianmihai.com/main.php?t=47 - Atari VCS (Atari 2600) – fotografie
http://oldcomputers.net/atari-vcs.html - History of Consoles: Atari VCS/2600 (1977)
http://gamester81.com/history-of-consoles-atari-vcs2600–1977/ - Iag Bogost: Racing the Beam
http://www.bogost.com/books/video_computer_system.shtml - Atari 2600 Programming Tutorial
http://www.randomterrain.com/atari-2600-memories-tutorial-andrew-davie-01.html - Atari 2600 Development Cartridge *Super Deluxe*~!
http://jazz-disassemblies.blogspot.cz/2013/09/atari-2600-development-cartridge-super.html - Atari „Alpine“ Devkit (pro Atari Jaguar)
http://justclaws.atari.org/devcats/hardware/ataridev.htm - 6502 compatible assembler and emulator in javascript
http://www.6502asm.com/ - Atari 2600 Programming
http://atariage.com/2600/programming/ - Retrozone – Brand new original homebrew games by current programmers
http://www.retrousb.com/index.php?cPath=30 - NESworld – Homebrew games
http://www.nesworld.com/homebrew.php - Ian Bogost
http://www.bogost.com/ - Ian Bogost
http://en.wikipedia.org/wiki/Ian_Bogost - Wikipedia – Atari 2600 Homebrew Games
http://en.wikipedia.org/wiki/Atari_2600_homebrew - Wikipedia – List of Homebrew Games
http://en.wikipedia.org/wiki/Homebrew_(video_games) - Wikipedia – List of Atari 2600 Homebrew Games
http://en.wikipedia.org/wiki/List_of_Atari_2600_games#Homebrew_games - Wikipedia: 6502:
http://en.wikipedia.org/wiki/6502 - www.6502.org:
http://www.6502.org/ - Atari TIA
http://www.atarihq.com/danb/tia.shtml - TIA Playfield
http://www.atarihq.com/danb/TIA/Playfield.shtml - Atari 2600 FAQ
http://www.atariage.com/2600/faq/index.html - Atari 2600 Consoles and Clones
http://www.atariage.com/2600/archives/consoles.html - Atari 2600 Programming (odkazy)
http://www.atariage.com/2600/programming/index.html - Design case history: the Atari Video Computer System
http://www.atariage.com/2600/archives/design_case.html?SystemID=2600 - Schémata zapojení Atari 2600 (překresleno)
http://www.atariage.com/2600/archives/schematics_pal/index.html - Schémata zapojení Atari 2600 (skeny původních schémat)
http://www.vintagegamingandmore.com/atari-2600-schematics - Adventure for the Atari 2600 Video Game Console by Warren Robinett
http://www.warrenrobinett.com/adventure/index.html - Mapa hry Adventure
http://www.warrenrobinett.com/adventure/adv-map1.gif - Jay Glenn Miner Interview Pasadena, September 1992
http://www.rabayjr.com/jay_miner.htm - Konkurence procesorů s mikroprogramovým řadičem – RISC
http://www.root.cz/clanky/konkurence-procesoru-s-mikroprogramovym-radicem-architektura-risc/ - Mikroprocesory s architekturou RISC I
http://www.root.cz/clanky/mikroprocesory-s-architekturou-risc-i/ - Procesory RISC v pracovních stanicích a serverech
http://www.root.cz/clanky/procesory-s-architekturou-risc-v-pracovnich-stanicich-a-serverech/ - The Development of the C Language
http://cm.bell-labs.com/cm/cs/who/dmr/chist.html - B (programming language)
http://en.wikipedia.org/wiki/B_(programming_language) - Users' Reference to B
http://cm.bell-labs.com/cm/cs/who/dmr/kbman.html - THE PROGRAMMING LANGUAGE B
http://cm.bell-labs.com/cm/cs/who/dmr/bintro.html - BCPL
http://en.wikipedia.org/wiki/BCPL - Ken Thompson
http://en.wikipedia.org/wiki/Ken_Thompson_(computer_programmer) - Dennis Ritchie
http://en.wikipedia.org/wiki/Dennis_Ritchie - Brian Kernighan
http://en.wikipedia.org/wiki/Brian_Kernighan - Sega documentation
http://koti.kapsi.fi/~antime/sega/docs.html - 1995 Programming on the Sega Saturn
http://cowboyprogramming.com/2010/06/03/1995-programming-on-the-sega-saturn/ - Sega Myths-Saturn was the most difficult console to program for of 5th Gen
http://forums.sega.com/showthread.php?313485-Sega-Myths-Saturn-was-the-most-difficult-console-to-program-for-of-5th-Gen - SuperH RISC engine Family
http://www.renesas.com/products/mpumcu/superh/index.jsp - Sega Saturn
http://en.wikipedia.org/wiki/Sega_saturn - MIPS Architecture Overview
http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/mips.html - MIPS Technologies R3000
http://www.cpu-world.com/CPUs/R3000/ - Sony PlayStation (Wikipedia)
http://en.wikipedia.org/wiki/PlayStation_(console) - The Official PlayStation muzeum
http://playstationmuseum.com/playstation-systems/ - CPU-collection: IDT R3010 FPU
http://www.cpu-collection.de/?tn=0&l0=co&l1=IDT&l2=R3010+FPU - The MIPS R2000 Instruction Set
http://suraj.lums.edu.pk/~cs423a05/Reference/MIPSCodeTable.pdf