Obsah
3. Příklady jednoduchých programů napsaných v Amiga E
5. Assemblery na mikropočítačích Amiga
7. Esoterické programovací jazyky pro Amigu
1. Historie vývoje počítačových her (51. část – další vývojové nástroje dostupné pro mikropočítače Amiga)
V dnešní části seriálu o historii vývoje výpočetní techniky navážeme na část předchozí, v níž jsme si popsali některé interpretry a překladače programovacího jazyka Basic (GFA Basic, Blitz Basic částečně i AmigaBASIC) i překladače programovacího jazyka C (Aztec C, Lattice C). Dnes se budeme zabývat převážně těmi programovacími jazyky, které vznikly přímo na Amize. Bude se jednat především o populární programovací jazyk Amiga E, který byl vybaven překladačem, dále pak o jazyk AMOS, skriptovací jazyk ARexx (ten měl důležitou roli přímo v operačním systému) a nesmíme zapomenout ani na některý assembler, protože mnoho aplikací, převážně hry a dema, se programovalo v assembleru (jazyku symbolických adres/instrukcí). Na závěr si pro odlehčení řekneme základní informace o některých esoterických programovacích jazycích.
V následující tabulce jsou vypsány již popsané nebo dnes popisované programovací jazyky:
# | Název produktu | Díl seriálu | Kapitola |
---|---|---|---|
1 | Aztec C | 50 | 4 |
2 | Lattice C | 50 | 4 |
3 | GFA BASIC | 50 | 5 |
4 | Blitz BASIC | 50 | 8 |
5 | AmigaBASIC | ||
6 | Amiga E | 51 | 2, 3 |
7 | ASM-One Macro Assembler | 51 | 6 |
8 | ARexx | 51 | 4 |
9 | Brainfuck | 51 | 7 |
10 | FALSE | 51 | 8 |
2. Programovací jazyk Amiga E
Prvním programovacím jazykem, s nímž se dnes seznámíme, je jazyk nazvaný Amiga E. Autorem původní verze tohoto ve své době velmi populárního jazyka je Wouter van Oortmerssen, jenž se vedle vývoje Amiga E mj. zabýval i vývojem esoterického jazyka FALSE popsaného v osmé kapitole. Jedná se o programátora známého i z oblasti herního průmyslu, podílel se například na vývoji Far Cry či engine Cube. Původní varianta programovacího jazyka Amiga E byla vybavena velmi rychlým překladačem naprogramovaným přímo v assembleru mikroprocesoru Motorola 68000, další varianty překladače Amiga E pak začaly podporovat i modernější mikroprocesory řady M68000 (ty jsou sice zpětně kompatibilní, ovšem postupně se na platformě M68000 začaly objevovat nové vlastnosti).
Programovací jazyk Amiga E některé své koncepty převzal z céčka, ovšem mnohé jeho vlastnosti byly inspirovány i dalšími (vysokoúrovňovými) programovacími jazyky (Modula, Pascal, možná i PL/1…). V Amiga E se proto objevuje odlišněji pojatý typový systém, podpora pro tvorbu modulů (ta je v céčku řešena pouze na externí úrovni, nikoli na úrovni jazykové), podpora pro objektově orientované programování a taktéž jazykové konstrukce použitelné pro práci s výjimkami. V současnosti je původní varianta jazyka Amiga E uvolněna jako freeware, a to včetně zdrojových kódů. Z Amiga E se postupně vyvinuly další programovací jazyky, z nichž některé jsou založeny na původních zdrojových kódech a jiné vznikly prakticky kompletním přepisem překladače:
Jazyk | Autor | Poznámka |
---|---|---|
CreativE | Tomasz Wiszkowski | založen na zdrojových kódech Amiga E, podpora pro nové procesory |
PowerD | Martin Kuchinka | podpora pro novější procesory, ne zcela zpětně kompatibilní |
YAEC | Leif Salomonsson | prakticky kompletně přepsáno, používá externí assembler |
ECX | Leif Salomonsson | překladač napsán přímo v E, podpora pro další platformy |
PortablE | Christopher Handley | překladač napsán přímo v E, může přeložit sám sebe (jako C), podpora pro Amiga OS, PPC, MorphOS, Windows |
3. Příklady jednoduchých programů napsaných v Amiga E
V této kapitole si ukážeme několik velmi jednoduchých demonstračních příkladů vytvořených v programovacím jazyce Amiga E. Tyto příklady ukazují způsob zápisu struktury programů, ale například i deklaraci nové třídy, deklarace nové metody pro tuto třídu a deklaraci potomka této třídy.
Jednoduchá procedura/funkce, která sečte hodnoty svých dvou parametrů a vrátí výsledek součtu. Povšimněte si způsobu vrácení výsledku i „beztypovosti“ zápisu (v případě potřeby však lze informace o typech doplnit:
PROC add(x, y) DEF s s:=x+y ENDPROC s
Počítaná smyčka vytvořená cyklem FOR:
PROC main() DEF x FOR x:=1 TO 10 WriteF('\d ', x) ENDFOR WriteF('\n') ENDPROC
Zde smyčka FOR snižuje v každé iteraci počitadlo o jedničku:
PROC main() DEF i FOR i := 10 TO 0 STEP -1 WriteF('\d\n', i) ENDFOR ENDPROC
Dalším typem smyčky je smyčka WHILE, zde asi není zapotřebí dalšího vysvětlování:
PROC main() DEF x x:=1 WHILE x <= 10 WriteF('\d ', x) x:=x+1 ENDWHILE WriteF('\n') ENDPROC
V procedurách/funkcích je možné použít i příkaz RETURN pro předčasné ukončení běhu procedury/funkce:
PROC fact(x) DEF r, y IF x < 2 THEN RETURN 1 r := 1; y := x; FOR x := 2 TO y DO r := r * x ENDPROC r
Deklarace atributů tříd:
OBJECT set elts[100]:ARRAY OF LONG size ENDOBJECT
Deklarace metody patřící k nějaké třídě:
PROC add(x) OF set /* code for add method */ ENDPROC
Deklarace potomka nějaké třídy (opět pouze atributů):
OBJECT d OF b extra_d_data ENDOBJECT
Odkazy na další stránky věnující se programovacímu jazyku Amiga E:
- Amiga E (Wouter's Wiki)
http://strlen.com/amiga-e - Amiga E v3.3a Compiler for The E Language
http://cshandley.co.uk/amigae/ - A Beginner's Guide to Amiga E
http://cshandley.co.uk/JasonHulance/ - Amiga E (Wikipedia)
http://en.wikipedia.org/wiki/Amiga_E - Wouter van Oortmerssen's Wiki
http://strlen.com/ - Wouter van Oortmerssen
http://en.wikipedia.org/wiki/Wouter_van_Oortmerssen
4. Skriptovací jazyk ARexx
O programovacím jazyku ARexx jsme se již krátce zmiňovali v předchozí části tohoto seriálu. Jedná se o variantu programovacího jazyka REXX používaného na mnoha typech počítačů, včetně mainframů (populární byl tento jazyk na mnoha produktech firmy IBM, obsažen byl například i v OS/2 ve funkci podobné, jako ARexx v případě Amigy). ARexx je na počítačích Amiga důležitý především z toho důvodu, že je ho možné využít přímo v operačním systému Amigy pro komunikaci mezi různými programy. Každý program totiž mohl obsahovat rozhraní, přes nějž ho bylo možné ovládat či jen načítat vypočtené hodnoty atd. Podobně jako je tomu v unixech a programech spojovaných přes svůj standardní vstup a výstup, i v případě ARexxu bylo možné vhodným spojením jednoúčelových programů vytvořit i poměrně složitou aplikaci. Podobně jako další skriptovací jazyky je i ARexx do značné míry beztypový, což ale jen usnadňovalo komunikaci mezi aplikacemi.
5. Assemblery na mikropočítačích Amiga
Prozatím jsme se věnovali převážně popisu vyšších programovacích jazyků, tj. takových programovacích jazyků, u nichž pro většinu jazykových konstrukcí neexistuje přímá korespondence s adresou či instrukcí, pomocí níž je tato konstrukce realizována (dobrým příkladem může být podmínka if-then-else, jenž musí být většinou implementována pomocí podmíněných skoků). Ovšem mikropočítače Amiga se, podobně jako například i konkurenční počítače Atari ST, velmi často používaly jako herní stroje a navíc se zde rozvinula i „subkultura“ vývojářů, kteří se zabývali programováním audiovizuálních dem. U těchto typů aplikací bylo velmi důležité, aby bylo například vykreslovací jádro co nejrychlejší, takže se programátoři velmi často uchylovali k použití assembleru. Tímto termínem se poněkud nepřesně označuje jak příslušný jazyk – česky jazyk symbolických adres nebo jazyk symbolických instrukcí, tak i překladač, který zápis v assembleru převede do (binárního) strojového kódu cílového procesoru.
Assemblery byly na počítačích Amiga a Atari ST mezi programátory poměrně populární i díky tomu, že instrukční kód mikroprocesorů Motorola 68000 byl do velké míry ortogonální, obsahoval relativně velké množství registrů (univerzální datové registry D0 až D7 a adresové registry A0 až A7) a navíc bylo možné používat i takové adresovací režimy, které korespondovaly s konstrukcemi používanými ve vyšších programovacích jazycích (přístupy k prvkům polí, přístup k lokálním proměnným umístěných v zásobníkovém rámci, autoinkrementace adresy atd.). Podívejme se na jednoduchý příklad rutiny (originál najdete zde, která sečte všechny prvky (16bitové integery – načítá se vždy jen 16bitové slovo) v poli. V tomto příkladu se používá autoinkrementace adresy při adresování prvků polí a taktéž instrukce DBRA provádí dvě činnosti – snížení hodnoty registru o jedničku a skok v případě, že je výsledek nenulový:
moveq #0, d0 ; potřebujeme vynulovat horních 16 bitů d0 moveq #0, d1 ; mezivýsledek loop: move.w (a0)+, d0 ; horních 16 bitů d0 je pořád nastaveno na 0 add.l d0, d1 dbra d2, loop ; d2 je použit jako počitadlo
6. ASM-One Macro Assembler
Jedním z populárních assemblerů dostupných pro mikropočítače Amiga byl assembler nazvaný ASM-One Macro Assembler. Autorem tohoto assembleru je Rune-Gram Madsen, který tento nástroj v průběhu roku 1990 vytvořil za pouhé čtyři týdny (čistý čas vývoje prý nepřesáhl 700 hodin). Jednalo se o komerčně dostupný nástroj prodávaný společností DMV Verlag (Německo) za přibližně 139 marek. Ovšem počet reálně prodaných kusů tohoto nástroje byl poměrně nízký – prodalo se pouze přibližně 500 kopií první verze; ovšem na tomto místě je nutné poznamenat, že ASM-One nebyl jedinou aplikací, která měla problémy s prodejem. Podobný osud totiž potkal například i mnoho her, což je jeden z důvodů, proč některé softwarové firmy postupně přešly na jiné platformy.
Dnes si většinou pod pojmem „assembler“, představujeme nástroj spouštěný z příkazového řádku, který překládá zdrojové kódy napsané v jazyku symbolických adres do objektového (binárního) kódu, popř. přímo vytváří spustitelné soubory. Ovšem ASM-One Macro Assembler se od tohoto chápání assemblerů liší, protože se jednalo o plnohodnotné integrované vývojové prostředí vybavené textovým editorem, samotným assemblerem, monitorem a taktéž debuggerem. Celé prostředí bylo přitom naprogramované taktéž v assembleru a velikost binárního balíčku nepřesahovala devadesát kilobajtů.
Odkazy na další stránky věnující se assembleru ASM-One:
- 680×0:AsmOne
http://www.amigacoding.com/index.php/680×0:AsmOne - ASM-One Macro Assembler
http://en.wikipedia.org/wiki/ASM-One_Macro_Assembler - ASM-One pages
http://www.theflamearrows.info/documents/asmone.html - Základní informace o ASM-One
http://www.theflamearrows.info/documents/asminfo.html
7. Esoterické programovací jazyky pro Amigu
Pro doplnění tohoto článku možná nebude na škodu se seznámit i s takzvanými esoterickými programovacími jazyky. Na rozdíl od většiny běžných programovacích jazyků, jejichž tvůrci se snaží o návrh snadno použitelných nástrojů, jsou esoterické jazyky většinou navrženy takovým způsobem, aby programy v nich napsané byly co nejméně čitelné. Některé z těchto jazyků, například slavný Brainfuck, jsou navrženy minimalisticky – používají jen naprosto nezbytné minimum příkazů či jazykových konstrukcí. Již zmíněný jazyk Brainfuck z roku 1993, jehož autorem je Urban Müller, používal pouze osm základních příkazů (podobných příkazům použitým u Turingova stroje, které jsou doplněny o dva příkazy pro vstup a výstup jednoho bajtu/ASCII znaku), přičemž každý příkaz byl reprezentován pouze jediným znakem. Pro počítače Amiga existovalo několik interpretrů a dokonce i překladače jazyka Brainfuck, přičemž některé implementace měly binární spustitelný soubor menší než 200 bajtů!
Programy zapisované v Brainfucku nemají pevně danou strukturu a mohou obsahovat prakticky všechny další znaky (včetně mezer a konců řádků), které jsou při interpretaci či kompilaci ignorovány. Rozeznává se pouze osm znaků vypsaných v následující tabulce. Tyto znaky slouží pro posun ukazatele po pásce rozdělené do políček, přičemž na každém políčku je uložena celočíselná hodnota. Páska je většinou reprezentována polem, jehož maximální velikost bývá omezena na 32000 buněk a celočíselné hodnoty ukládané do jednotlivých buněk mohou mít hodnotu v rozsahu 0..255 (některé implementace však mají velikost pásky/pole prakticky neomezenou):
# | Příkaz | Význam |
---|---|---|
1 | > | posun ukazatele na „pásce“ doprava na další políčko |
2 | < | posun ukazatele na „pásce“ doleva na předchozí políčko |
3 | + | zvýšení celočíselné hodnoty uložené v aktuálním políčku o 1 |
4 | – | snížení celočíselné hodnoty uložené v aktuálním políčku o 1 |
5 | . | výpis číselné hodnoty (převedené na ASCII znak) uložené v aktuálním políčku |
6 | , | načtení bajtu (znaku) a uložení jeho číselné hodnoty do aktuálního políčka (opět se většinou předpokládá použití ASCII) |
7 | [ | v případě, že je hodnota v aktuálním políčku nulová, přesune se program na odpovídající ] |
8 | ] | v případě, že je hodnota v aktuálním políčku nenulová, přesune se program na odpovídající [ |
Typickým demonstračním programem je „Hello world“, který v podání Brainfucku vypadá následovně:
++++++++++[>+>+++>++++>+++++++>++++++++>+++++++++>++ ++++++++>+++++++++++>++++++++++++<<<<<<<<<-]>>>>+.>>> >+..<.<++++++++.>>>+.<<+.<<<<++++.<++.>>>+++++++.>>>.+++. <+++++++.--------.<<<<<+.<+++.---.
Dalším podobně nečitelným programem je program pro výpočet faktoriálu:
>++++++++++>>>+>+[>>>+[-[<<<<<[+<<<<<]>>[[-]>[<<+>+>-]<[>+<-]<[>+<-[>+<-[> +<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>>>>+>+<<<<<<-[>+<-]]]]]]]]]]]>[<+>- ]+>>>>>]<<<<<[<<<<<]>>>>>>>[>>>>>]++[-<<<<<]>>>>>>-]+>>>>>]<[>++<-]<<<<[<[ >+<-]<<<<]>>[->[-]++++++[<++++++++>-]>>>>]<<<<<[<[>+>+<<-]>.<<<<<]>.>>>>]
8. Programovací jazyk FALSE
Dalším esoterickým programovacím jazykem, o němž je vhodné se v dnešním článku zmínit, je jazyk s názvem FALSE. Autorem tohoto programovacího jazyka je Wouter van Oortmerssen, o němž jsme se již zmiňovali v souvislosti s vyšším programovacím jazykem Amiga E ve druhé kapitole. Pokud bychom se měli držet chronologie vývoje programovacích jazyků, řadil by se jazyk FALSE před Brainfuck, protože Brainfuck ve skutečnosti vznikl jako reakce na překladač jazyka FALSE, který měl velikost pouhý jeden kilobajt! Zatímco Brainfuck je de facto založen na mírně modifikovaném Turingově stroji doplněném o instrukce vstupu a výstupu, je FALSE založen na zásobníkovém virtuálním stroji, takže se výsledný program tvoří podobným způsobem, jako program v jazyce Forth, i když samotné příkazy (ve Forthu slova) jsou zde zapisovány jediným znakem – každý znak je celým příkazem, podobně jako v případě Brainfucku (i to je ostatně jeden z důvodů jednoduchosti interpretrů a překladačů těchto esoterických jazyků).
Pokud se ve zdrojovém programu vyskytuje číslo, je toto číslo uloženo na zásobník, podobně jako ve Forthu. Posléze lze s hodnotami uloženými na vrcholu zásobníku (popř. těsně pod jeho vrcholem) provádět mnoho operací – aritmetických, logických, atd. S obsahem zásobníku lze různým způsobem manipulovat, například je možné duplikovat hodnotu uloženou na jeho vrcholu atd. Programovací jazyk FALSE taktéž obsahuje podporu pro proměnné, které jsou pro jednoduchost pojmenovány ‚a‘ až ‚z‘. Zajímavá je podpora podprogramů (subrutin), které jsou tvořeny kódem umístěným mezi znaky [ a ]. Pro vyvolání subrutiny (uložené na vrcholu zásobníku) se používá příkaz ! (vykřičník). V následující tabulce jsou pro ilustraci vypsány některé příkazy jazyka FALSE a korespondující příkazy Forthu:
# | FALSE | Forth |
---|---|---|
1 | $ | dup |
2 | % | pop |
3 | \ | swap |
4 | @ | rot |
5 | _ | neg |
6 | + | + |
7 | : | ! (store, uložení hodnoty do proměnné) |
8 | ; | @ (fetch, načtení hodnoty z proměnné) |
Odkazy na stránky s dalšími informacemi o programovacím jazyku FALSE:
- The False Programming Language
http://strlen.com/false-language - The FALSE Programming Language Manual
http://strlen.com/false/false.txt
9. Odkazy na Internetu
- Orthodox File Managers
http://www.softpanorama.org/OFM/index.shtml - File manager
http://en.wikipedia.org/wiki/File_manager - PathMinder
http://en.wikipedia.org/wiki/PathMinder - Commodore CDTV
http://en.wikipedia.org/wiki/Commodore_CDTV - Amiga
http://en.wikipedia.org/wiki/Amiga - Picasso 2
http://www.iol.ie/~ecarroll/picasso2.html - Hold-And-Modify
http://en.wikipedia.org/wiki/Amiga_Hold-And-Modify - Amiga Halfbrite mode
http://en.wikipedia.org/wiki/Amiga_Hold-And-Modify - HAM8 Explained
http://www.amigans.net/modules/AMS/article.php?storyid=22 - Amiga FAQ (Frequently asked questions) (Part 1 of 4)
http://www.faqs.org/faqs/amiga/introduction/part1/ - Amiga FAQ (Frequently asked questions) (Part 2 of 4)
http://www.faqs.org/faqs/amiga/introduction/part2/ - Amiga FAQ (Frequently asked questions) (Part 3 of 4)
http://www.faqs.org/faqs/amiga/introduction/part3/ - Amiga FAQ (Frequently asked questions) (Part 4 of 4)
http://www.faqs.org/faqs/amiga/introduction/part4/ - Amiga Coding Wiki
http://www.amigacoding.com/index.php/Main_Page - Amiga screen
http://amigadev.elowar.com/read/ADCD2.1/Hardware_Manual_guide/node0061.html - Amiga HAM mode
http://amigadev.elowar.com/read/ADCD2.1/Hardware_Manual_guide/node008F.html - Copper WAIT instruction
http://amigadev.elowar.com/read/ADCD2.1/Hardware_Manual_guide/node004B.html - Copper MOVE instruction
http://amigadev.elowar.com/read/ADCD2.1/Hardware_Manual_guide/node004A.html - GalaxSIM: Solutions for Digital Living
http://www.amiga.com/ - Denise Pin Assignment
http://www.ntrautanen.fi/computers/hardware/misc/denise.htm - Custom Chips: Paula
http://www.amiga-hardware.com/showhardware.cgi?HARDID=1460 - Big Book of Amiga Hardware
http://www.amiga-resistance.info/bboahfaq/ - Amiga Hardware Database
http://amiga.resource.cx/ - ExoticA
http://www.exotica.org.uk/wiki/Main_Page - The absolute basics of Amiga audio
http://www.sufo.estates.co.uk/amiga/amimus.html - Wikipedia: Tracker
http://en.wikipedia.org/wiki/Tracker - Wikipedia: Trackers
http://en.wikipedia.org/wiki/Trackers - Ultimate Soundtracker
http://en.wikipedia.org/wiki/Ultimate_Soundtracker - Protracker
http://en.wikipedia.org/wiki/ProTracker - Impulse Tracker
http://en.wikipedia.org/wiki/Impulse_Tracker - Scream Tracker
http://en.wikipedia.org/wiki/ScreamTracker - MikMod for Java
http://jmikmod.berlios.de/ - List of audio trackers
http://en.wikipedia.org/wiki/List_of_audio_trackers - Wikipedia: Module File
http://en.wikipedia.org/wiki/Module_file - Wikipedia: Chiptune
http://en.wikipedia.org/wiki/Chiptune - Amiga Original chipset
http://www.princeton.edu/~achaney/tmve/wiki100k/docs/Amiga_Original_chipset.html - The Final Fantasy
http://www.thefinalfantasy.com/ - Final Fantasy: Mystic Quest
http://www.gamefaqs.com/snes/532476-final-fantasy-mystic-quest - Book:Final Fantasy series
http://en.wikipedia.org/wiki/Book:Final_Fantasy_series - The World of Final Fantasy
http://www.mobygames.com/featured_article/feature,18/section,114/ - Final Fantasy Style
http://www.mobygames.com/featured_article/feature,18/section,116/ - List of Final Fantasy video games
http://en.wikipedia.org/wiki/List_of_Final_Fantasy_video_games - SQUARE ENIX CO.
http://www.square-enix.com/ - Square Enix : Corporate history
http://www.square-enix.com/jp/company/e/history/ - The History of Computer Role-Playing Games Part 1: The Early Years (1980–1983)
http://www.gamasutra.com/features/20070223a/barton01.shtml - The History of Computer Role-Playing Games Part 2: The Golden Age(1985–1993)
http://www.gamasutra.com/features/20070223b/barton_pfv.htm - Dungeon Master – Return To Chaos
Window port of DM - Dungeon Master (video game)
http://en.wikipedia.org/wiki/Dungeon_Master_(video_game) - Dungeon Master Encyclopaedia
http://dmweb.free.fr/ - Dungeon Master Overview
http://dmweb.free.fr/?q=node/247 - Chaos Strikes Back Overview
http://dmweb.free.fr/?q=node/249 - Dungeon Master II Overview
http://dmweb.free.fr/?q=node/250 - Dungeon Master – Return To Chaos
http://www.ragingmole.com/RTC/ - Dungeon Master Speed Run in 20 minutes! Part 1/2
http://www.youtube.com/watch?v=Ho5E05Bi3bU - Dungeon Master Speed Run in 20 minutes! Part 2/2
http://www.youtube.com/watch?v=Fpht4dWOnGE - Dungeon Master CZ
http://dm.zpc.cz/ - Dungeon Master
http://rpg.yin.cz/d/dungeon-master/ - Return to Chaos (CZ info)
http://dm.zpc.cz/?sekce=rtcinfo - Dungeon Master – kouzla (CZ)
http://dm.zpc.cz/?sekce=dmkouzla - Dungeon Master Java (CZ info)
http://dm.zpc.cz/?sekce=dmjavainfo - Dungeon Master Java (CZ novinky a download)
http://dm.zpc.cz/?sekce=dmjavadownload - Best of Old Games: Dungeon Master
http://www.bestoldgames.net/stare-hry/dungeon-master.php - Muzeum: Dungeon Master – klasika všech klasik
http://www.doupe.cz/default.aspx?article=124596 - Návody – Dungeon Master 1
http://www.abcgames.cz/?p=navody_zobraz&id=1307 - Super NES Programming/Initialization Tutorial
http://en.wikibooks.org/wiki/Super_NES_Programming/Initialization_Tutorial - SNES Development sites
http://www.snescentral.com/development.php - Super NES Programming
http://en.wikibooks.org/wiki/Super_NES_Programming - Super Nintendo Development Wiki
http://wiki.superfamicom.org/snes/show/HomePage - 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 - 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 - 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 - Motorola 68008
http://en.wikipedia.org/wiki/Motorola_68008 - Motorola 68020
http://en.wikipedia.org/wiki/Motorola_68020 - Motorola 68030
http://en.wikipedia.org/wiki/Motorola_68030