Gameduino: pekelná grafická karta pro Arduino

Martin Malý 23. 6. 2011

Arduino už ze stránek Roota znáte poměrně důvěrně. Ukázali jsme si, jak si s ním hrát, jak jeho prostřednictvím dělat i některé serióznější aplikace, nebo naopak hračičky. Dnešní článek potěší spíš ty hračičky – i když jsem osobně přesvědčen o tom, že nadšení budou i milovníci šikovného hardware.

V jednom z minulých článků jsme si představovali způsob, jak lze s Arduinem vygenerovat černobílý televizní signál v normě PAL. Přiznejme si – představený způsob byl už téměř na hraně možností čistě softwarového generování obrazu s 16MHz jednočipem ATMega328 v Arduinu.

Pokud chceme z Arduina získat lepší obrazový výstup, musíme sáhnout po rozšiřujících kartách – shieldech. V nabídkách prodejců jsou běžně k vidění například shieldy s textovými displeji (LCD moduly) či s barevnými displeji z mobilních telefonů (např. Color LCD shield).

Displeje z mobilních telefonů jsou v domácích elektronických konstrukcích poměrně populární – umožňují zobrazit jemnou barevnou grafiku a jejich připojení je snadné – většinou stačí napájení a 2–4 datové signály pro sériovou komunikaci s procesorem. Displeje pak mají definovaný protokol (proprietární, liší se podle výrobců / modelu / použitého řadiče), který nabízí možnost jak zobrazit bod s určitou barvou na určité souřadnici a další funkce.

Takové displeje jsou stále většinou prosté „zobrazovací jednotky“ s minimem vlastní „inteligence“. Zobrazí body, ale veškerou další práci musí odvést samotný procesor.

Spartanský design

Pokud chceme s Arduinem dělat složitější věci, nevyhneme se nutnosti jej podepřít externími obvody. Jednou z možností je použít třeba FPGA.

Programovatelná logická pole (FPGA) dovolují realizovat v jednom čipu komplexní funkce a celé složité obvody. Lze si v nich navrhnout vlastní mikroprocesor nebo použít např. existující jádra osmibitových procesorů, vytvořit periferie, navzájem je propojit atd.

A tím se dostáváme ke shieldu Gameduino. Tento rozšiřující modul usnadňuje vytváření realtime videa a zvuku a funguje jako svého druhu grafická karta.

Srdcem Gameduina je FPGA Xilinx Spartan XC3S200A, tedy poměrně trpaslík v rodině moderních FPGA, ale přesto velmi schopný. Obsahuje 200 tisíc hradel, což odpovídá více než  čtyřem tisícovkám logických bloků. Informace o konfiguraci je v externí sériové EEPROM, takže lze funkci celého Gameduina od základu změnit (pod podmínkou respektování obsazených vývodů). Pro HW hackery je vhodné dodat, že Gameduino má vyvedené signály pro Xilinx JTAG.

Gameduino v plné kráse. Uprostřed FPGA Spartan, vpravo dole konfigurační EEPROM, vlevo konektor pro VGA a audio.

Co Gameduino umí?

Začněme suchým výčtem schopností: Umí zobrazit 400×300 pixelů na SVGA monitoru (používá rozlišení 800×600 @ 72Hz). Interně pracuje s grafikou v rozlišení 512×512 bodů – lze určit výřez, který bude zobrazen, snadno tak můžeme obraz scrollovat. Umí zobrazit 512 barev (interně se pracuje s paletou AR5G5B5 – tedy pět bitů pro každou složku + průhlednost).

Zobrazuje grafiku nikoli jako čistou bitmapu, ale jako pozadí + sprity. Pozadí obrazu je kresleno jako matice znaků. Tyto znaky (8×8, lze jich použít až 256) mají každý vlastní čtyřbarevnou paletu. Na virtuální kreslicí plochu se tedy vejde 64×64 těchto znaků (ale zobrazuje se jen výřez, viz výše).

Nad tímto pozadím se pohybuje až 256 nezávislých spritů. Jejich velikost je 16×16 pixelů (s možností nastavit pro každý pixel individuálně průhlednost. Každý sprite může používat paletu 4, 16 nebo 256 barev, může být otočen (0°, 90°, 180°, 270°) či překlopen. Pro všechny tyto sprity funguje pixel-perfect detekce kolizí. Aby šlo snáze rozpoznat, jestli se „hráč“ střetl s „nepřítelem“ nebo s „neškodným spritem“, lze detekci kolizí přepnout do JK módu, kdy jsou sprity rozděleny do dvou kategorií J, K a kolize se hlásí pouze v případě, že se potkají dva sprity s různými kategoriemi.

Gameduino nabízí i zvukový stereofonní výstup. Obsahuje dvanáctibitový syntezátor, který dokáže hrát až 64 hlasů (10–8000 Hz), každý z nich může přehrávat sinusovku nebo šum a mohou se vzájemně modulovat.Kromě toho má i kanál pro přehrávání samplů.

A aby toho nebylo málo, tak je v Gameduinu, resp. v jeho FPGA, vytvořen i speciální 16bitový zásobníkový koprocesor, založený na jádru J1. Tento jednoduchý FORTHovský procesor (viz seriál o FORTHu od Pavla Tišnovského) běží nezávisle na řídicím procesoru a může manipulovat s obrazovými i zvukovými daty za nás. Je omezený prostorem 256 bajtů, takže program může obsahovat pouhých 128 šestnáctibitových instrukcí, což ale pro jednoduché operace postačí.

Dole Arduino UNO, nad ním Gameduino, nad ním Joystick Shield. Bohužel Gameduino moc „nesedí“, protože mu překáží napájecí konektor a USB konektor u samotného Arduina. Pomohly by delší konektory nebo o dva milimetry kratší shield.

Co chudák programátor?

Z hlediska programátora se Gameduino jeví jako 32kB adresního prostoru, v němž je namapována obrazová paměť, informace o spritech a řídící registry. Přistupuje se k němu pomocí sériové komunikace po sběrnici SPI (hodiny, data in, data out, chip select). Protokol i podrobný popis paměti je součástí dokumentace, nic vám tedy nebrání připojit Gameduino k jinému procesoru, dokonce si z něj udělat úplně jiné zařízení.

Součástí Gameduino SDK je jednak vlastní knihovna pro Arduino, která nabízí základní funkce pro komunikaci s Gameduinem, jednak utility v Pythonu pro převod obrázků na matici znaků, pro tvoření spritů či pro překlad programu ve FORTHu do bytekódu pro koprocesor J1. Obsahuje i simulátor Gameduina pro PC a utilitu pro vzdálený přístup k paměti Gameduina (přes USB a připojené Arduino).

Úkol „namaluj kruh a oblouk“ s Gameduinem není zrovna triviální, nezapomínejme, že se nejedná o čistě bitmapový displej, kde bychom měli přístup ke každému pixelu (pro 512×512 pixelů s 15bitovou barvou by bylo potřeba půlmega paměti, což už je mimo možnosti použitého FPGA). Gameduino je vhodné pro textový výstup (použijeme pouze znaky na pozadí), nebo pro grafiku typu „pozadí + sprity“.

Souhrn

Gameduino představuje zajímavou možnost jak rozšířit Arduino (UNO, Mega256 a další) o VGA a audio výstup, a jak už název naznačuje, je vhodné především na psaní her. Nemusíte ho ale používat jen s Arduinem, můžete ho připojit ke svému oblíbenému kitu; můžete si jej dokonce kompletně přeprogramovat a vytvořit si z něj vlastní konstrukci. Tedy eldorádo pro kutily.

Gameduino lze zakoupit přímo u autora (e-shop) nebo u distributorů. Čeští distributoři jej v nabídce zatím nemají, ale věřím, že pokud bude zájem, tak by jej do nabídky mohli zařadit a byli schopni dodávat.

S distribucí souvisí ještě jedna zajímavost: autor Gameduina James Bowman si vytvořil Gameduino jako prototyp. Pak oslovil zájemce přes server Kickstarter (o principu Kickstarteru jsme psali na Zdrojáku). Zájemci měli možnost přislíbit finanční podporu, s tím, že sejde-li se příslib alespoň 3333 USD, pustí se autor do výroby a přispěvatele „odmění Gameduinem“. Nakonec bylo přislíbeno přes 38 tisíc USD (byli jsme jedni z přispěvatelů) a výroba se od prvního dubna rozjela.

Desky Arduino Uno a Arduino Mega 2560 redakci zapůjčil obchod HW Kitchen, Arduino a Ethernet Shield obchod Czechduino. Děkujeme za laskavé zapůjčení.

Našli jste v článku chybu?
120na80.cz: Bonbon si schovejte na přistání

Bonbon si schovejte na přistání

DigiZone.cz: Kauza technik: oficiální vyjádření Novy

Kauza technik: oficiální vyjádření Novy

Vitalia.cz: Bio vejce nepoznají ani veterináři

Bio vejce nepoznají ani veterináři

Vitalia.cz: Speciality z konce světa: Cornwall

Speciality z konce světa: Cornwall

Měšec.cz: Udali ho na nelegální software a přišla Policie

Udali ho na nelegální software a přišla Policie

Lupa.cz: Japonská invaze. Proč SoftBank kupuje ARM?

Japonská invaze. Proč SoftBank kupuje ARM?

Vitalia.cz: Sobotní masakr žrádla, chlastu a zábavy

Sobotní masakr žrádla, chlastu a zábavy

Lupa.cz: eIDAS: Nepřehnali jsme to s výjimkami?

eIDAS: Nepřehnali jsme to s výjimkami?

Měšec.cz: Do ostravské MHD bez jízdenky. Stačí vaše karta

Do ostravské MHD bez jízdenky. Stačí vaše karta

Měšec.cz: Zelená karta – kde neplatí povinné ručení?

Zelená karta – kde neplatí povinné ručení?

DigiZone.cz: Skylink: výpadek Šlágru byl dočasný

Skylink: výpadek Šlágru byl dočasný

DigiZone.cz: Hra o trůny: natáčení 7. řady posunuto

Hra o trůny: natáčení 7. řady posunuto

DigiZone.cz: Loewe Subwoofer 300 pro televizory

Loewe Subwoofer 300 pro televizory

Lupa.cz: Největší torrentový web KickassTorrents padl

Největší torrentový web KickassTorrents padl

Podnikatel.cz: Přiznal prodej padělků. Pokuta ho nemine

Přiznal prodej padělků. Pokuta ho nemine

Podnikatel.cz: Daň z nemovitosti? Změny budou v říjnu

Daň z nemovitosti? Změny budou v říjnu

Lupa.cz: V Praze se otevřel první podnik s virtuální realitou

V Praze se otevřel první podnik s virtuální realitou

Podnikatel.cz: Místa, kde hází podnikání klacky pod nohy

Místa, kde hází podnikání klacky pod nohy

Vitalia.cz: Jak na domácí zmrzlinu?

Jak na domácí zmrzlinu?

Lupa.cz: EU začala prověřovat bezpečnost open-source

EU začala prověřovat bezpečnost open-source