Obsah
1. Historie vývoje počítačových her (44. část – šestnáctibitová herní konzole SNES)
2. Základní technické parametry herní konzole SNES
3. Šestnáctibitový mikroprocesor 65C816 – nástupce slavného čipu MOS 6502
5. Programátorský model čipu 65C816
6. Nové adresní režimy mikroprocesoru 65C816
7. Nové instrukce mikroprocesoru 65C816
8. Zvukový subsystém herní konzole SNES
1. Historie vývoje počítačových her (44. část – šestnáctibitová herní konzole SNES)
V předchozích čtyřech částech seriálu o historii vývoje výpočetní techniky jsme se zabývali popisem šestnáctibitové herní konzole Sega Mega Drive/Sega Genesis, která začala být společností SEGA prodávána již v roce 1988. Tento rok je tak možné z hlediska vývoje herních konzolí i her pro herní konzole považovat za přelomový, protože právě přechod na šestnáctibitové mikroprocesory a modernější grafické a zvukové čipy znamenal pro producenty softwaru možnost vytvářet již dosti složité a graficky náročné hry, které v některých případech mohly směle konkurovat svým automatovým protějškům, popř. verzím her naprogramovaných pro osobní počítače Amiga, Atari ST či IBM PC. Příchod herní konzole Sega Mega Drive/Sega Genesis na trh samozřejmě znamenal postupný útlum vývoje a prodeje her pro starší osmibitové herní konzole, na což museli zareagovat i další výrobci herních konzolí. Nutno dodat, že někteří výrobci již však adekvátním způsobem zareagovat nestačili a na tomto silně konkurenčním trhu se již neprosadili.
Obrázek 1: Osmibitová herní konzole Nintendo Entertainment System (NES) je přímým předchůdcem SNESu.
V nejlepší pozici se nacházela konkurenční společnost Nintendo, protože její starší osmibitová konzole Nintendo Entertainment System (NES) se stále prodávala velmi dobře, a to navzdory tomu, že její technické parametry již byly překonány (u konzolí však má velký význam i dostupnost a kvalita her, nikoli pouze jejich technické parametry). Na další generaci konzole NES prodávanou pod názvem Super Nintendo Entertainment System (SNES) si tak zákazníci museli počkat až do roku 1990, což však ve skutečnosti nebyl až tak pozdní příchod na trh se šestnáctibitovými konzolemi, protože další konkurenční konzole začaly být nabízeny teprve až v roce 1991 (nutno dodat, že doby uvedení na trh se v jednotlivých regionech lišily s přibližně půlročním rozptylem). V následující tabulce je vypsána pětice nejznámějších šestnáctibitových herních konzolí a současně i konzole TurboGrafx-16, která stojí na pomezí mezi osmibitovou konzolí (CPU) a šestnáctibitovou konzolí (video čip):
# | Konzole | Rok | CPU | Odvozeno z CPU | Frekvence | |
---|---|---|---|---|---|---|
1 | TurboGrafx-16 | 1987 | HuC6280A | MOS 6502 | 7,16 MHz | |
2 | Sega Mega Drive | 1988 | MC68HC000 (CMOS) | Motorola 68000 | 7,61 MHz/7,67 MHz | |
3 | Super NES (SNES) | 1990 | 5A22 (Ricoh) | 65C816 | 3,58 MHz | |
4 | Neo Geo | 1991 | Motorola 68000 | 12,00 MHz | ||
5 | Commodore CDTV | 1991 | Motorola 68000 | 7,16 MHz | ||
6 | Philips CD-i | 1991 | Philips SCC68070 | Motorola 68000 | 15,5 MHz |
Obrázek 2: Osmibitový mikroprocesor Ricoh 2A03 použitý v NESu.
2. Základní technické parametry herní konzole SNES
Vzhledem k tomu, že konstruktéři zaměstnaní ve firmě Nintendo nemuseli s vývojem nové konzole příliš spěchat, mohli se věnovat všem detailům návrhu, takže nakonec vznikl velmi zajímavý hardware, v němž souběžně pracovalo větší množství čipů a každý subsystém (CPU, grafika, zvuky) měl přidělenou vlastní RAM (hlavně zvukový čip je možné považovat za zcela samostatně pracující koprocesor). Nová konzole nazvaná SNES byla v roce 1990 vydána nejprve v Japonsku (především z konkurenčních důvodů se stalo zvykem vydávat nové konzole nejprve v Asii), v roce 1991 začala být nabízena verze určená pro severoamerické země (USA a Kanada) a v roce 1992 se SNES začal oficiálně prodávat i v Evropě. Jednotlivé varianty se od sebe lišily způsobem zapojení cartridge, což (teoreticky) znemožňovalo použít hru určenou pro jiný region. Zatímco konstruktéři ve společnosti Sega použili ve své konzoli Sega Mega Drive/Sega Genesis variantu mikroprocesoru Motorola 68000, jenž nebyl v prakticky žádném ohledu kompatibilní s původním Zilog Z80 (Sega Master System), v případě herní konzole SNES byl využit mikroprocesor Ricoh 5A22 postavený na jádře mikroprocesoru WDC 65c816, což je šestnáctibitová varianta slavného čipu MOS 6502.
Obrázek 3: Další pohled na mikroprocesor Ricoh 2A03.
Jak si řekneme v dalších kapitolách, podporoval tento čip režim téměř úplné zpětné kompatibility se starším osmibitovým mikroprocesorem MOS 6502, což mohlo pomoci programátorům her při převodu starších titulů určených pro NES, kde byl použit osmibitový mikroprocesor Ricoh 2A03 založený právě na MOS 6502. Velmi důležitá byla změna grafického řadiče, který podporoval nová rozlišení a větší počet barev. V případě neprokládaných režimů bylo možné použít grafické režimy s rozlišením 256×224(239) pixelů a 512×224(239) pixelů a pokud se použily režimy prokládané, vzrostlo rozlišení dokonce na 512×448(478) pixelů, tj. počet obrazových řádků (scanlines) se zvýšil na dvojnásobek. Oproti starší konzoli NES se zvýšil i počet současně zobrazitelných barev (barevná hloubka 2 až 11 bitů na pixel) a taktéž možnosti zobrazení spritů: 128 spritů, velikost spritů až 64×64 pixelů. O zvukový výstup a o generování hudby se starala dvojice čipů – osmibitový čip Sony SPS700 a 16bitový čip Sony DSP, přičemž byly podporovány šestnáctibitové vzorky/samply, což je oproti starším konzolím další krok kupředu. Podobně jako grafický subsystém měl i zvukový subsystém vyhrazenou vlastní RAM.
3. Šestnáctibitový mikroprocesor 65C816 – nástupce slavného čipu MOS 6502
Jedním z nejdůležitějších čipů každého mikropočítače a v poněkud menší míře i každé herní konzole je mikroprocesor. V předchozí kapitole jsme si řekli, že v herní konzoli SNES byl použit mikroprocesor Ricoh 5A22 založený na jádře čipu (WDC) 65c816. Tento mikroprocesor byl sice zpětně kompatibilní s MOS 6502, mohl však být přepnut do režimu, v němž se šířka akumulátoru A rozšířila na šestnáct bitů, šířka index registrů X a Y byla zvýšena taktéž na šestnáct bitů a navíc se při adresování používal další osmibitový registr, který šířku logické adresy dále rozšiřoval na celých 24 bitů, což teoreticky umožnilo adresaci až 16 MB paměti (ve skutečnosti to však bylo kvůli různým omezením méně). Tento mikroprocesor taktéž podporoval nové instrukce a v neposlední řadě byla jeho hodinová frekvence vyšší, než u původního čipu MOS 6502 a taktéž se změnil počet cyklů u několika instrukcí (například u skoků nedocházelo k penalizaci jednoho hodinového cyklu v případě překročení paměťové stránky).
iObrázek 4: Počítač Apple II GS vybavený čipem WDC 65c816.
Zatímco čip MOS 6502 či jeho různé varianty byl použit v několika desítkách typů úspěšných osmibitových mikropočítačů a herních konzolí, v případě mikroprocesoru 65c816 byl úspěch a rozšíření tohoto čipu poněkud menší a to především z toho důvodu, že mnoho výrobců počítačů/konzolí skokově přešlo na v některých ohledech výkonnější čip Motorola 68000 (ten měl přednost v tom, že se jeho konstruktéři neohlíželi na zpětnou kompatibilitu, takže měli větší svobodu návrhu). Nicméně i 65c816 byl použit v některých zajímavých zařízeních. Jedním z nich je – pokud prozatím vynecháme konzoli SNES – i mikropočítač nazvaný Apple II GS, který se vyráběl od roku 1986 a obsahoval čip 65c816 taktovaný na 2,8MHz. Výpočetní výkon tohoto mikropočítače, jenž byl zpětně kompatibilní se slavnou řadou Apple ][, byl takový, že na něm běžela i upravená verze slavné hry Wolfenstein 3D.
Obrázek 5: Počítač Apple II s disketovou jednotkou a ovladači typu paddle, které se používaly mj. i na osmibitových Atari či Commodore C64.
Dvojice písmen GS v názvu tohoto modelu znamená Graphics and Sound, což mělo naznačit lepší grafické a zvukové možnosti tohoto stroje oproti starším modelům Apple ][. Ty byly skutečně lepší, a to díky čipu nazvanému jednoduše VGC (Video Graphics Chip). Tento čip podporoval jak všechny původní režimy předchozích modelů počítačů, tak i několik režimů nových (souhrnně nazývaných SHR – Super High Resolution). Tyto režimy podporovaly rozlišení 320×200 pixelů s 4bpp a 640×200 pixelů s 2 či 4bpp. Jak je z výše uvedených informací patrné, jednalo se o poměrně výkonný počítač, který se však příliš nerozšířil. Částečně za to mohlo marketingové oddělení firmy Apple (ovlivňované do značné míry Stevem Jobsem), které spíše propagovalo systém Macintosh (z hlediska operačního systému a technologických kvalit zajisté dělalo dobře), svoji úlohu zde však zajisté sehráli i tehdejší konkurenti na trhu, zejména firmy Atari, Commodore a IBM (i když například grafické schopnosti prvních IBM PC s grafickou kartou CGA byly velmi slabé).
Obrázek 6: WordPerfect pro šestnáctibitové mikropočítače Apple II GS (s mikroprocesorem 65C816 zpětně kompatibilním s legendárním MOS 6502) byl vybaven grafickým splash-screenem.
4. Od MOS 6502 k čipu 65C816
Na chvíli se ještě vraťme k šestnáctibitovému mikropočítači Apple II GS. Zajímavé je, že vývoj mikroprocesoru 65c816 byl zahájen právě na základě dohody mezi společností Apple a firmou WDC, v níž byl tento čip následně navržen a vyroben. CEO a současně i zakladatelem firmy WDC byl totiž známý inženýr Bill Mensch, který se v minulosti podílel na návrhu dvou osmibitových mikroprocesorů, které dost významným způsobem ovlivnily vývoj výpočetní techniky na přelomu sedmdesátých a osmdesátých let minulého století. Bill Mensch spolunavrhoval čip Motorola 6800 i podpůrné obvody pro tento mikroprocesor a posléze se podílel i na návrhu slavného mikroprocesoru MOS 6502, takže není divu, že po přechodu do společnosti WDC prosadil, aby byly nové mikroprocesory navrhované, vyráběné a licencované touto firmou postaveny na základech čipu MOS 6502. Prvním z těchto čipů byl WDC 65C02, což byla varianta původního NMOS čipu 6502, která navíc obsahovala opravy některých chyb v původním návrhu tohoto mikroprocesoru (nepřímé skoky na adresy ležící na konci stránek atd.) a rozšíření jeho instrukční sady.
Obrázek 7: Osmibitový mikroprocesor Motorola MC6800 – čipu, na jehož vývoji se podílel Bill Mensch.
Odtud už byl vlastně jen docela malý krůček k tomu, aby se osmibitový čip WDC 65C02 rozšířil na šestnáctibitový čip WDC 65c816. Rozklíčovat jméno tohoto mikroprocesoru je při znalosti jeho historie snadné: 65 se odkazuje na řadu 6502, c značí výrobní technologii CMOS (mimochodem: plně statickou – díky malému počtu registrů je bylo možné implementovat formou klopných obvodů, což mj. umožňovalo plynule zmenšovat frekvenci hodinového signálu až na nulu) a dvojice čísel 8–16 znamená, že tento mikroprocesor mohl pracovat v téměř 100% kompatibilním osmibitovém režimu 6502, nebo mohl být naopak přepnutý do režimu 16bitového. Právě tato vlastnost byla vyžadována zástupci společnosti Apple, kteří potřebovali, aby Apple II GS mohl být zpětně kompatibilní s úspěšnou řadou osmibitových mikropočítačů Apple ][ (prostá emulace byla vzhledem k relativně nízkému výkonu tehdejších čipů prakticky nemyslitelná).
Obrázek 8: Originální mikropočítač Apple II řízený osmibitovým mikroprocesorem MOS 6502.
5. Programátorský model čipu 65C816
Pro zajímavost si alespoň stručně popišme programátorský model šestnáctibitového mikroprocesoru 65c816 a porovnejme ho s programátorským modelem staršího osmibitového mikroprocesoru MOS 6502. Všechny registry dostupné programátorům jsou vypsány v následující tabulce. Zajímavé je, že počet běžných pracovních registrů se příliš nezměnil (stále zde vidíme trojici registrů akumulátor+dva indexové registry), ovšem v šestnáctibitovém režimu došlo k rozšíření šířky některých registrů a současně i ke změnám některých adresovacích režimů (viz další text):
# | Registr | Význam | MOS 6502 | WDC 65c816 |
---|---|---|---|---|
1 | A | Akumulátor | A (8 bitů) | B (8 bitů) + A (8 bitů) = C (16 bitů) |
2 | X | Index registr X | X (8 bitů) | XH (8 bitů) + XL (8 bitů) |
3 | Y | Index registr Y | Y (8 bitů) | YH (8 bitů) + YL (8 bitů) |
4 | PC | Program counter | PC (16 bitů) | PCH (8 bitů) + PCL (8 bitů) |
5 | S | Stack pointer | S (8 bitů) | SH (8 bitů) + SL (8 bitů) |
6 | P | Processor status | P (6 bitů) | P (9 bitů) |
7 | D | Direct register | neexistuje | DH (8 bitů) + DL (8 bitů) |
8 | DBR | Data bank registr | neexistuje | DBR (8 bitů) |
9 | PBR | Program bank registr | neexistuje | PBR (8 bitů) |
Z předchozí tabulky je patrné, že změny postihly mj. i stavový registr P, jenž byl rozšířen ze šesti bitů (=šesti bitových příznaků) na devět bitů (=devět bitových příznaků), ovšem v daném okamžiku bylo možné přistupovat pouze k osmi příznakům. Devátý příznak se musel získat instrukcí XCE, která tento příznak prohodila s příznakem CARRY:
Bit registru P | Označení | Význam |
---|---|---|
8 | N | příznak záporného výsledku |
7 | V | příznak přetečení |
6 | M | 8/16 bitové operace s pamětí |
5 | B/X | 8/16 bitové index registry + příznak BREAK |
4 | D | decimální (BCD)/binární režim ALU |
3 | I | povolení/zákaz přerušení |
2 | Z | příznak nulového výsledku |
1 | C/E | příznak přenosu/režim emulace MOS 6502 |
Odkazy na další informační zdroje:
- 6502.org
http://www.6502.org/ - The 6502/65C02/65C816 Instruction Set Decoded
http://www.llx.com/~nparker/a2/opcodes.html - 6502 Addressing Modes
http://www.obelisk.demon.co.uk/6502/addressing.html - HuC6280 CPU
http://shu.emuunlim.com/download/pcedocs/pce_cpu.html - Hudson Soft HuC6280 (Wikipedia)
http://en.wikipedia.org/wiki/Hudson_Soft_HuC6280
6. Nové adresní režimy mikroprocesoru 65C816
Originální mikroprocesor MOS 6502 byl mezi programátory známý i tím, že používal celkem třináct adresních režimů, ovšem většina aritmetických a logických instrukcí se spokojila s režimy osmi. Zbylé adresní režimy se většinou používaly pouze v instrukcích větvení – branch – a taktéž u instrukcí skoků – jump, poslední režim pak pro adresaci akumulátoru:
# | Režim | Význam |
---|---|---|
1 | Implicit | Operand je součástí instrukce (CLC apod.) |
2 | Immediate | Operandem je osmibitová konstanta (LDA # apod.) |
3 | Accumulator | Operandem je vždy akumulátor (LSR apod.) |
4 | Absolute | Šestnáctibitová adresa |
5 | Absolute,X | Šestnáctibitová adresa+X |
6 | Absolute,Y | Šestnáctibitová adresa+Y |
7 | Zero | Osmibitová adresa (nultá stránka paměti) |
8 | Zero,X | Osmibitová adresa+X (nultá stránka paměti) |
9 | Zero,Y | Osmibitová adresa+Y (nultá stránka paměti) |
10 | (Zero,X) | Na adrese zero+x je uložen ukazatel (nepřímá adresace) |
11 | (Zero),Y | Na adrese zero je uložen ukazatel přičtený k Y (nepřímá adresace s indexem) |
12 | Relative | Osmibitový offset (použito u skoků) |
13 | Indirect | Šestnáctibitová adresa na ukazatel (použito u nepřímého skoku) |
V šestnáctibitovém režimu došlo z hlediska vývojáře ke dvěma důležitým změnám. První změnou byla změna šířky registrů používaných při běžných aritmetických a logických operacích, což se týká především akumulátoru A a taktéž indexových registrů X a Y. Důležitá byla taktéž změna šířky ukazatele na vrchol zásobníku S, protože u původního mikroprocesoru MOS 6502 byl zásobník umístěn v první stránce paměti, tj. na adresách 256 až 511 a mohl mít tedy kapacitu pouze 256 bajtů=128 adres. V šestnáctibitovém režimu bylo možné zásobník přemístit kamkoli v rámci prvních 64 kilobajtů operační paměti a i jeho maximální velikost byla rovna 64 kilobajtům. Dále se při adresaci uplatnily tři nové registry D (Direct register), DBR (Data bank register) a PBR (Program bank register).
Registr DBR se používal při adresaci operandů, protože s využitím 16bitových adres a 16bitových index registrů by bylo možné adresovat maximálně 64 kB paměti. Obsah osmibitového registru DBR se jednoduše posunul o 16 bitů doleva a následně se přidal k vypočtené adrese – jedná se o operaci, které adresu rozšířila přímo na 24 bitů, což je (podle mého názoru) mnohem lepší, než systém použitý v mikroprocesorech Intel 8086 s jejich adresací systémem segment:offset, kde dvojice 16bitových registrů postačovala pouze pro výpočet 20bitové adresy (navíc zde musela být přidána drahá sčítačka). Podobně fungoval i registr PBR, který ovšem rozšiřoval adresu při provádění skoků, které taktéž mohly vést kamkoli v 24 bitovém adresovém rozsahu (16 MB RAM). Registr D měl šířku 16 bitů a kombinoval se s osmibitovou adresou. V podstatě umožňoval, aby staré adresní režimy operující s nultou stránkou paměti mohly být prováděny v adresním rozsahu 64 kB. Díky existenci těchto tří nových registrů a rozšíření instrukční sady bylo namísto původních třinácti režimů podporováno neuvěřitelných 24 adresních režimů.
7. Nové instrukce mikroprocesoru 65C816
V původní instrukční sadě čipu MOS 6502 se používaly osmibitové kódy instrukcí a z 256 možných operačních kódů bylo obsazeno pouze 151 pozic, což znamená, že konstruktéři nových mikroprocesorů odvozených od čipu MOS 6502 mohli navrhnout a implementovat až 105 nových instrukcí a přitom zachovat plnou zpětnou kompatibilitu s existujícími nástroji, assemblery či debuggery. Konstruktéři čipu WDC 65C816 dokázali zaplnit všech zbývajících 105 pozic, a to hned několika novými instrukcemi, popř. již existujícími instrukcemi, k nimž byly přidány nové adresní režimy. Mezi nové instrukce patří například:
# | Kód | Význam |
---|---|---|
1 | BRA | nepodmíněný relativní skok (umožňuje realokaci) |
2 | BRL | nepodmíněný dlouhý relativní skok |
3 | DEC | rozšířeno o možnost snížení hodnoty akumulátoru |
4 | INC | rozšířeno o možnost zvýšení hodnoty akumulátoru |
5 | JML | dlouhý skok (16 MB) |
6 | JSL | dlouhý skok do podprogramu (16 MB) |
7 | MVN | blokový přenos dat |
8 | MVP | blokový přenos dat |
9 | PEA | uložení absolutní adresy na zásobník |
10 | PH* | uložení vybraného registru na zásobník (rozšíření původních možností) |
11 | PL* | získání vybraného registru ze zásobníku (rozšíření původních možností) |
12 | RTL | návrat ze subrutiny volané přes JSL |
13 | STZ | uložení nuly do paměti |
14 | TRB | test and reset bit |
15 | TSB | test na set bit |
16 | T** | přesuny mezi registry (prakticky všechny možné kombinace A, S, X, Y) |
17 | XBA | prohození A a B (osmibitových složek 16bitového akumulátoru) |
8. Zvukový subsystém herní konzole SNES
Popisu grafického subsystému herní konzole SNES se budeme podrobněji věnovat až v následující části tohoto seriálu, dnes si však ještě povíme základní informace o zvukovém subsystému SNESu. Ten byl navržen velmi zajímavým způsobem, protože o generování zvuků se staral samostatný koprocesor SPC700, jemuž byla přidělena vlastní RAM. Tento koprocesor byl plně programovatelný a mohl tak buď obsahovat jednoduchou rutiny pro přehrávání několika obdélníkových signálů, nebo naopak mohl obsahovat složitý program pro zvukovou syntézu. Tento čip byl navíc doplněn jednoduchým DSP, jenž dokázal přehrávat šestnáctibitové vzorky/samply a podporoval až osm stereo kanálů. Z tohoto pohledu byl zvukový subsystém SNESu lepší, než například zvukový systém Amigy, i když v případě Amigy mohli programátoři těžit z větší kapacity RAM a tím pádem i možnosti přehrávání relativně dlouhých nasamplovaných zvuků (viz úspěšné moduly).
Čip SPC700 dokázal adresovat 64 kB RAM, ovšem hlavní procesor neměl k této paměti přímý přístup. Ten pouze mohl ovládat čip SPC700 přes několik osmibitových portů – přes tyto porty se přenášely i programy pro SPC700. Programátorský model SPC700 se v některých ohledech podobal původnímu mikroprocesoru MOS 6502, protože zde můžeme najít osmibitový akumulátor A, osmibitové index registry X a Y, osmibitový ukazatel na vrchol zásobníku a 16bitový programový čítač. Instrukční sada však byla poněkud odlišná.
Zajímavý byl i čip DSP. Ten dokázal přehrávat šestnáctibitové samply, ty ovšem nebyly uloženy systémem 16bitů/vzorek. Namísto toho se používaly bloky o velikosti devět bajtů, přičemž každý blok odpovídal šestnácti šestnáctibitovým samplům. Jak je to možné? Samozřejmě se používala komprimace, která fungovala tak, že v prvním bajtu byly uloženy informace o takzvané granularitě, použitém filtru a dvou příznakových bitech, které označovaly smyčku popř. konec celé nasamplované stopy. Dalších osm bitů již obsahovalo informace o všech šestnácti samplech, přičemž na každý vzorek byly rezervovány pouze čtyři bity, z nichž každý představoval hodnotu v rozsahu –8 až 7. Granularita byla použita pro bitový posun těchto vzorků do rozsahu –32768 až 32767. Využívalo se přitom faktu, že čím větší jsou změny amplitudy signálu, tím větší mohou být i skoky mezi jednotlivými vzorky. Podrobnosti si řekneme příště.
9. Odkazy na Internetu
- William D. Mensch jr.
http://www.computerhalloffame.org/index.php?option=com_content&view=article&id=31&Itemid=4 - Bill Mensch
http://en.wikipedia.org/wiki/Bill_Mensch - SPC 700 Documentation
http://emureview.ztnet.com/developerscorner/SoundCPU/spc.htm - Super NES Programming/SPC700 reference
http://en.wikibooks.org/wiki/Super_NES_Programming/SPC700_reference - Mega lo Mania
http://www.mobygames.com/game/mega-lo-mania - Mega Lo Mania
http://en.wikipedia.org/wiki/Mega_Lo_Mania - Cannon Fodder
http://www.allgame.com/game.php?id=739 - Cannon Fodder [European]
http://www.allgame.com/game.php?id=15717 - Retrospective: Cannon Fodder
http://www.rockpapershotgun.com/2007/11/11/retrospective-cannon-fodder/ - Cannon Fodder
http://en.wikipedia.org/wiki/Cannon_Fodder_(video_game) - BC Racers
http://en.wikipedia.org/wiki/BC_Racers - Desert Strike Advance
http://www.ign.com/articles/2002/06/03/desert-strike-advance - Three Strikes And You're Out
http://www.eurogamer.net/articles/three-strikes-and-youre-out-article - Head 2 Head: Desert Strike – SNES vs MegaDrive
http://www.retrogamescollector.com/head-2-head-desert-strike-snes-vs-megadrive/ - Desert Strike: Return to the Gulf
http://en.wikipedia.org/wiki/Desert_Strike:_Return_to_the_Gulf - The Chaos Engine (Soldiers of Fortune USA)
http://www.bitmap-brothers.co.uk/our-games/past/chaos-engine.htm - The Chaos Engine series
http://www.mobygames.com/game-group/chaos-engine-series - The Chaos Engine
http://en.wikipedia.org/wiki/Chaos_Engine - The Chaos Engine 2
http://www.bitmap-brothers.co.uk/our-games/past/chaos-engine2.htm - The Chaos Engine series
http://www.mobygames.com/game-group/chaos-engine-series - Moby Games: Speedball series
http://www.mobygames.com/game-group/speedball-series - Bitmap Brothers: Speedball (original)
http://www.bitmap-brothers.co.uk/our-games/past/speedball.htm - Bitmap Brothers: Speedball 2: Brutal Deluxe
http://www.bitmap-brothers.co.uk/our-games/past/speedball2.htm - Wikipedia: Speedball (video game)
http://en.wikipedia.org/wiki/Speedball_(video_game) - Golden Axe
http://strategywiki.org/wiki/Golden_Axe - Golden Axe (series)
http://en.wikipedia.org/wiki/Golden_Axe_(series) - Golden Axe II
http://www.gamespot.com/golden-axe-ii/platform/genesis/ - Golden Axe II
http://strategywiki.org/wiki/Golden_Axe_II - Golden Axe III
http://strategywiki.org/wiki/Golden_Axe_III - Game Freaks 365: Sonic the Hedgehog 2
http://gamefreaks365.com/review.php?artid=1631 - Sonic The Hedgehog 2 (GENESIS)
http://web.archive.org/web/20070831062914/http://sonic.neoseeker.com/sonic_the_hedgehog2/GENESIS/pages/release_dates_background3/ - Neoseeker: Sonic the Hedgehog 2 (16-bit)
http://www.neoseeker.com/Games/Products/GENESIS/sonic_the_hedgehog2/ - Wikipedia: Sonic the Hedgehog 2 (16-bit)
http://en.wikipedia.org/wiki/Sonic_the_Hedgehog2_(16-bit) - Gamespot: Disney's Aladdin
http://www.gamespot.com/disneys-aladdin-in-nasiras-revenge/platform/ps/ - Moby Games: Disney's Aladdin
http://www.mobygames.com/game/disneys-aladdin - Internet Movie Database: Aladdin (I) (Video Game 1993)
http://www.imdb.com/title/tt0204798/ - Wikipedia: Disney's Aladdin (video game)
http://en.wikipedia.org/wiki/Disney's_Aladdin_(video_game) - Eric Chahi
http://en.wikipedia.org/wiki/Eric_Chahi - Wikipedia: Another World (video game)
http://en.wikipedia.org/wiki/Another_World_(video_game) - SN76489 sound chip details
http://web.inter.nl.net/users/J.Kortink/home/articles/sn76489/ - SN76464 datasheet
http://www.ic-on-line.cn/view_online.php?id=1106623&file=0054%5Csn76494_409323.pdf - Texas Instruments SN76489 (Wikipedia)
http://en.wikipedia.org/wiki/Texas_Instruments_SN76489 - SN76489
http://www.smspower.org/Development/SN76489?sid=ae16503f2fb18070f3f40f2af56807f1 - YM2413 FM Operator Type-LL (OPLL) Application Manual
http://www.smspower.org/maxim/Documents/YM2413ApplicationManual?sid=28c370e1fcac51d5774319979bf96f4c - Programming the Sega MegaDrive
http://darkdust.net/writings/megadrive - MegaDrive / SegaGenesis docs
http://www.genny4ever.net/index.php?page=docs - IGN: Top 25 Consoles
http://www.ign.com/top-25-consoles/13.html - Sega Mega Drive
http://sega.jp/archive/segahard/md/ - Sega Archives
http://sega.jp/archive/segahard/ - Sega Genesis
http://www.dmoz.org/Games/Video_Games/Console_Platforms/Sega/Genesis/ - The Retro Gen Plays Genesis Games
http://uk.gamespy.com/articles/998/998637p1.html - The Sega Mega Drive/Genesis
http://www.captainwilliams.co.uk/sega/megadrive/megadrive.php - Sega Game Gear 101: A Beginner's Guide
http://www.racketboy.com/retro/sega/gamegear/sega-game-gear-101-a-beginners-guide - SEGA GameGear | Marc's Realm
http://darkdust.net/retrogaming/gamegear - Sega Master System Hardware
http://www.smspower.org/Development/Documents - SMS/GG hardware notes
http://www.smspower.org/uploads/Development/smstech-20021112.txt?sid=28c370e1fcac51d5774319979bf96f4c - Sega Master System Museum
http://alexkidd.com/ - Jadeite's Sega Master System Museum
http://rp_gamer.tripod.com/SMS/1.html - Sega Master System (Wikipedia)
http://en.wikipedia.org/wiki/Sega_Master_System - Sega Card (Wikipedia)
http://en.wikipedia.org/wiki/Sega_Card - Sega Master System VDP documentation
http://www.smspower.org/uploads/Development/msvdp-20021112.txt?sid=28c370e1fcac51d5774319979bf96f4c - bee – The Multi-Console Emulator
http://www.thebeehive.ws/ - TurboGrafx-16 TurboExpress
http://www.allgame.com/platform.php?id=17673 - HuC6280 CPU
http://shu.emuunlim.com/download/pcedocs/pce_cpu.html - Hudson Soft HuC6280 (Wikipedia)
http://en.wikipedia.org/wiki/Hudson_Soft_HuC6280 - TurboGrafx-16 (Wikipedia)
http://en.wikipedia.org/wiki/TurboGrafx-16 - MagicEngine – TurboGrafx-16 emulator
http://www.magicengine.com/ - Motorola 68000 CPU
http://en.wikipedia.org/wiki/68000