HOME

TV hry s Arduinem

emulujícím AY 3-8500



Když jsem po několika letech od stavby TV her s obvody AY-3-8500 a AY-3-8610 chystal jejich popisy na web, vzpomněl jsem si, že jsem někde na netu viděl realizaci her s procesorem Atmega. Našel jsem to hned. Je to na stránkách populárního Granta Searla a jedná se v podstatě o emulátor legendárního AY-3-8500 v procesoru Atmega 328. Software je napsán ve vývojovém prostředí Arduina a tudíž lze použít i standardní Arduino s Atmegou 328 (UNO, Nano, Pro Mini) na 16MHz. A protože je zapojení her opravdu minimalistické, rozhodl jsem se to vyzkoušet.


Arduino emulátor AY-3-8500
TV hry Arduino (emulátor AY-3-8500)
Arduino emulátor AY-3-8500
TV hry Arduino (emulátor AY-3-8500)


Jelikož mám možnost přímého srovnání s hrami s originálním AY-3-8500, tak musím uznat, že emulace Arduinem (Atmegou) je opravdu dokonalá. Fakt se to Grantovi povedlo a mohu to jen doporučit. Lze přepínat mezi emulací verze AY z roku 1976 (širší hřiště) a pozdější 1977 (užší hřiště). Generované video může být v normě PAL či NTSC. Emulují se pouze 4 hry ovládané potenciometry: Tenis, Fotbal a pinkání do zdi pro jednoho (Practise) či dva (Squash) hráče. Dvě střelecké hry vyžadující fotopistoli nejsou implementovány. Na rozdíl od originálního AY se hry přepínají sekvenčně jedním tlačítkem, ale v originálním software je i (zakomentovaná) možnost přepínání sadou 4 tlačítek, nebo třeba otočným přepínačem, jako u originálu. Po zapnutí je standardně předvolena hra Tenis, ale úpravou příslušné konstanty v programu lze pochopitelně předvolit i jinou hru (neplatí pro volbu aretovaným přepínačem).

Poslední změnou je servis míče, který je zde pouze automatický. Standardně se servíruje zleva doprava, ale lze to v programu změnit. Myslím pochopitelně úvodní podání. Během hry se podává ze strany hráče, jež zaznamenal bod. Ruční servis není implementován, ale v podstatě to asi nikdo u originálního AY stejně nepoužíval. Bylo to docela nepraktické. Jinak lze říci, že program je napsán velmi přehledně a lze ho tak snadno modifikovat. Originál programu je ke stažení na Grantových stránkách projektu, a to jak ve verzi pro IDE Arduino, tak rovnou HEX soubor pro samotnou Atmegu. Vzhledem k velikosti programu, lze použít jak Atmegu 168 (16KB Flash), tak 328 (32KB Flash). Podmínkou je jen použitý krystal 16 MHz. Do Atmegy 168 se program sice vejde, ale ona nemá jen poloviční Flash, ale také RAM (1KB) a i EEPROM. A právě poloviční RAM je problém, který znemožňuje použít tento procesor. Je nutná Atmega 328!

Pochopitelně je věrně emulován i zvuk. Zapojení předpokládá přivedení signálu na audio vstup televize, ale lze použít i vlastní reproduktor, či piezoměnič. Není to však ono. Zvuk by měl vycházet ze hříště, tedy z televize a nikoliv z DPS na stole před vámi.



Použití Arduina Pro Mini 328

Od začátku jsem chtěl použít standardní Arduino Pro Mini a proto jsem trochu upravil Grantův software. Jde především o rozložení použitých pinů tak, aby se zapojení na DPS, nebo nepájivém poli maximálně zjednodušilo a přizpůsobilo pinoutu Pro Mini Arduina. Doplnil jsem také Single Player mód, kdy je možné oba hráče ovládat společně pravým ovladačem. No a nakonec jsem přidal i nějaké ty LED kontrolky, protože světýlka já rád:-) Jelikož je k zobrazování využito jádro známé knihovny TVOut, rozhodl jsem se hry doplnit i o možnost inverze obrazu (černí hráči na bílém pozadí) tak, jak jsem to řešil už u herní konzolky Hackvision, taktéž na bázi Arduina a TVOut. Zapojení invertoru videa vyžaduje jeden obvod CMOS 4011 a pár dalších součástek. Program jsem ještě upravil tak, aby při nezapojených (neuzeměných) konfiguračních vstupech byl nastaven nejsnadnější režim hry (velcí hráči, malá rychlost, malý úhel odrazu). Dále je nastaven mód pro dva hráče, PAL video a verze 1977 obvodu AY-3-8500. Pro jednoduchý "líný tenis" tedy stačí připojit pouze tlačítko pro nulování skóre. Níže předkládám jak minimalistickou verzi her s opravdu minimem součástek, tak "maximalistickou" verzi se světýlky a invertorem videa. Software je společný pro obě verze.


Arduino AY-3-8500 software



Minimalistická verze

Základní minimalistická verze obsahuje pouze Arduino Pro Mini a pár pasivních součástek. Zobrazení je klasické: bílé ohraničení hřiště a hráči na černém pozadí. Používám trochu modifikované zapojení videoslučovače s diodami. To klasické, doporučované ke knihovně TVOut, sestávající jen z odporů 470R a 1K se mi neosvědčilo. Na některých (CRT) televizorech to hází "duchy". Zapojení s diodami je bezproblémové. V minimalistickém zapojení chybí možnost přepínání na NTSC režim a na starou veri AYčka 1976. Není problém to dozapojit. Software to umí, ale myslím to není třeba. K napájení stačí nestabilizovaný zdroj dodávající cca 9V (7,5-12V), neboť Arduino Pro Mini má vlastní stabilizátor na 5V. Ale pozor! Nepřekračovat 12V na vstupu! Vyšším napětím se stabilík Arduina spolehlivě odpráskne. Pak je nutné (pokud se neodhodláme k jeho výměně) napájet Arduino stabilizovaným napětím 5V. Budeme-li Arduino napájet z externího stabilizátoru +5V a ten původní na desce je stále funkční, tak je vhodné spojit vstupy VCC a RAW, nebo ještě lépe je překlenout diodou (anoda na VCC a katoda na RAW). Zapojení jsem odzkoušel na nepájivém poli v Single player režimu s jedním potenciometrem a finálně pak postavil "maximalistickou verzi".


Arduino emulátor AY-3-8500
Minimalistická verze (1. pokus, OK)
Arduino emulátor AY-3-8500
Zapojení minimalistické verze



Maximalistická verze

Maximalistickou verzi jsem postavil (jak jinak) na vrtané (čínské) univerzálce 9x7cm. Arduino se zasouvá do standardní široké patice DIL24. Zapojení využívá všechny funkce programu. Nastavení obtížnosti hraní, přepínání Dual/Single režimu a verze AYčka 76/77 je možné pomocí malého DIP spínače. Přepínání videonormy PAL/NTSC jsem realizoval jumperem (neosazený jumper = PAL). Dvě indikační LED svitem indikují Single player mode (žlutá) a verzi 1976 (červená). Využita je také standardní LED na pinu 13 Arduina. Ta svým svitem indikuje NTSC režim videa.


Arduino emulátor AY-3-8500
Maximalistická verze
Arduino emulátor AY-3-8500
Zapojení maximalistické verze


Realizoval jsem také možnost inverze videovýstupu, kdy ohraničení hriště, skóre a hráči jsou černí a pozadí bílé. Použil jsem stejný princip, jako u svých her s originálním AY-3-8500 i u konzole Hackvision s Arduinem a TVOut knihovnou. Sestupná hrana synchronizačního pulsu překlápí monostabilní klopný obvod (MKO), který generuje zatemňovací signál Back-Porch (BP). Ten je pak diodovým ANDem přidružen k normálnímu, resp. invertovanému výstupu videa. Přepínání mezi klasickým a invertovaným zobrazením je jumperem. MKO je nutné "naladit". Namísto pevného odporu se připojí trimr 10K nastavený na polovinu. Poté se v režimu invertovaného videa naleznou dvě krajní hodnoty odporu. Při malém odporu (krátký BP) se bílá barva pozadí začne měnit v šedou (a obraz se může začít i rozpadat). Při velké hodnotě odporu (dlouhý BP) začne z levého kraje obrazovky vystupovat černá barva. Trimr pak nastavíme cca doprostřed mezi tyto nalezené pozice. Buď ho tam necháme a nebo (raději) změřime nastavený odpor a nahradíme ho pevným odporem, či kombinací více pevných odporů. Videoslučovač s jedním tranzistorem jsem převzal z katalogového zapojení her s AY-3-8610. Inverzi je možné řešit i softwarově, ale v době realizace jsem s knihovnou TVOut neměl ještě tolik zkušeností. A ani by mě to nebavilo. Potřeboval jsem si k tomu nějaký přídavný hárdvér prostě postavit:-)


Arduino emulátor AY-3-8500
TV hry Arduino (emulátor AY-3-8500)
Arduino emulátor AY-3-8500
TV hry Arduino (emulátor AY-3-8500)


Na desce je i stabilizátor s klasicky zapojenou 7805. Díky souosému napájecímu konektoru 5,5/2,1 mm lze k napájení využít běžný adaptér (ideálně 9V). Jde pochopitelně využít i stabilizátor na Arduinu, ale mám jich pár odprásklých, tak jsem to vyřešil takto. Budeme-li Arduino napájet z externího stabilizátoru +5V a ten původní na desce je stále funkční, tak je vhodné spojit vstupy VCC a RAW, nebo ještě lépe je překlenout diodou (anoda na VCC a katoda na RAW). Diodu jsem do schématu přidal.



Konstrukce ovladačů

Ovladače her jsou velmi primitivní. Sestávají pouze z běžných lineárních potenciometrů. Ty mohou mít hodnotu v rozsahu cca 10k - 100K. Já používám 25K a je to super. Potenciometry jsem vestavěl do plastových dóziček od čehosi. Vyhoví třeba i tuba od šumivých vitamínů, či cokoliv podobného. Důležité je mít poměrně velký knoflík na potenciometru, aby ovládání bylo pohodlné. Stejně jako u svých her s opravdovým AY-3-8500 jsem k připojení ovladačů využil přepůlený koupený stereo kabel osazený 3,5 mm Jacky. Kabel má dvě žíly a stínění, což plně postačuje. Přímo na vývody potenciometru mezi +5V a GND jsem ještě připájel keramický kondík 100nF. Na desce her jsou pak osazeny příslušné stereo Jack zásuvky 3,5 mm určené pro montáž do DPS.


Arduino emulátor AY-3-8500
Ovladače ke hrám
Arduino emulátor AY-3-8500
Detail ovladačů



Ukázky her

Pro mladší generaci, jež nezná původní hry s originálním AY-3-8500: skóre se u všech her počítá od 0 do 15 (že by 4-bitový čítač? :-)). Dosáhne-li jeden z hráčů 15 bodů, hra sice běží dál, ale míč se od hráčů neodráží a prochází jimi! Také počitadlo skóre se zastaví. Pro novou hru je nutné stisknou tlačítko nulování. Tím se skóre vynuluje a hraje se znovu.


Arduino emulátor AY-3-8500: tenis
Tenis (normálně)
Arduino emulátor AY-3-8500: tenis
Tenis (inverzně)


Arduino emulátor AY-3-8500: fotbal
Fotbal (normálně)
Arduino emulátor AY-3-8500: fotbal
Fotbal (inverzně)

Pokud je při fotbale nastřelen útočník zezadu ("tečuje"), vychyluje se dráha míče!


Arduino emulátor AY-3-8500: squash
Squash (normálně)
Arduino emulátor AY-3-8500: squash
Squash (inverzně)


Arduino emulátor AY-3-8500: practise
Practise (normálně)
Arduino emulátor AY-3-8500: practise
Practise (inverzně)


Hra Practise je určena pro jednoho hráče a ovládá se pravým ovladačem. Pokud sepnete spínač Single Player mode, dají se i všechny ostatní hry hrát jedním, taktéž pravým, ovladačem



Závěr

Přestože se jedná principiálně o velmi stařičké hry, jsou velmi zábavné. Už jen tím, že jsou určeny především pro dva hráče. V takovém případě velmi stoupá soutěživost hráčů a ti jsou schopni se do hraní opravdu "položit" :-) To se týká zejména dětí. TV hry s Arduinem pro ně můžete díky jejich jednoduchosti vytvořit i ve formě stavebnice, nebo je to nechat zadrátovat na nepájivém poli. Zábava zaručena:-)

Update: doplnil jsem do článku informaci o nemožnosti použít procesor Atmega 168. Program sám by se do flash vešel, ale problém je nedostatek RAM. Dále jsem upravil software tak, aby první podání po vynulování skóre probíhalo vždy malou rychlostí. Teprve po odpalu hráčem se rychlost zvýší (a to i po tečování podávajícím hráčem). Tedy za předpokladu, že máme nastavenou vyšší rychlost míče. První podání vysokou rychlostí totiž velmi často prošvihneme, zejména, když si sami nulujeme skóre. Takhle je to lepší.

Update II: doplnil jsem do článku informaci o tom, jak ochránit vestavěný 5V stabilizátor Arduina při napájení z externího stabilizátoru. Já původně používal Arduino s odprásknutým stabilíkem, a tak to nebylo nutné:-)



Herní SUPER režim

Další změnu jsem provedl v softwaru. Ale tuto verzi bohužel nemám 100% otestovanou a nemohu ji publikovat, ale zatím jsem na žádný problém nenarazil. Jde o to, že jsem přidal režim pro "největší borce":-) V tomto režimu dojde po každém odpalu hráčem ke změně jednoho z těchto parametrů: velikost hráčů, rychlost míče, úhel odrazu. Ke změně dojde vždy po odpalu jedním hráčem, aby ten druhý měl dostatek času se se změnou vyrovnat. Který parametr se po odpalu změní, je určováno generátorem pseudonáhodných čísel. Hraní dostává úplně nové grády:-)


Publikováno: 5/2020    
Update: 6/2020    
Update II: 11/2022    



« RET          ↑ TOP ↑          HOME