Před pár týdny jsem na webu objevil AVR TV Game – jednoduchou TV herní konzoli pro hraní her (založenou na mikropočítači ATMEGA168), jejímž autorem je Ben Ryves.

Rozhodl jsem se, že si taky zahraju Tetris nebo hada na vlastnoručně postavené konzoli, a pustil jsem se do stavby HW. Na pájivém poli to bylo zbastlené za chvilku, protože součástek tam moc není, a celé to fungovalo překvapivě dobře.

Teoreticky by se to celé dalo umístit dovnitř nějakého starého gamepadu, aby to udělalo trochu více parády než protoboard. Na druhou stranu je tam vše, co je třeba, včetně 3V baterie (použitý čip oproti tvrzení v datasheetu dokáže pracovat při tomto napětí i na frekvenci 20 MHz), a rozdíl mezi 5V a 3V se neprojevil ani na kvalitě zobrazení na televizi (možná jen je obraz trošku šedší, což není úplně na závadu, a dalo by se to korigovat hodnotami odporového děliče). Výstup je realizován jako kompozitní video signál (konektor CINCH).

Po nějaké době mě hraní tetrisu a hada očekávaně přestalo bavit, takže jsem se rozhodl, že se pokusím nějak upravit program. Nejprve mě napadlo do her dodělat zvuk, ale nakonec jsem se rozhodl, že napíšu vlastní hru. Po chvíli přemýšlení padlo rozhodnutí na hru Sokoban, jejíž princip je relativně jednoduchý, ale mnohé levely jsou docela složité, takže hra vydrží na dlouho.

Vývoj probíhal v jazyce C, v prostředí AVR Eclipse Pluginu, a musím říct, že to byla mnohem lehčí práce, než pachtění se v Assembleru (v AVR assembleru se mi podařilo naprogramovat bicí automat a syntetizér, o kterém možná napíšu někdy později). Protože jsem chtěl ve firmwaru zachovat původní dvě hry a konfigurační utilitu, a zároveň přidat co nejvíce levelů do Sokobana, bojoval jsem o každý bajt z 16KB programové paměti. Část místa se dala ušetřit nastavením kompilátoru (avr-gcc), ale nějaké optimalizace jsem musel vymyslet sám. Nakonec jsem se do přísného limitu vešel.

Za zmínku stojí hlavně vlastní algoritmus na kompresi dat levelů. Funguje na principu podobném RLE, dosahuje zhruba 80% úspory místa, a dekomprese je velice jednoduchá, takže ji zvládne i jednoduchý mikropočítač.

Dále jsem naprogramoval herní logiku, a nakreslil grafiku (jedná se o tile-based engine, kde každý tile má rozměr 8x8px, a 1b barevnou hloubku – obraz je černobílý). Levely jsem nevymýšlel sám, na to nemám nervy ani představivost, ale použil jsem Microban - knihovny sokobaních levelů, které vytvořil David W. Skinner.

Jak hra vypadá se můžete podívat na tomto videu:

Přiznám se, že je pro mě mnohem větší zábava tu hru programovat než hrát, a levely jsou těžší, než jsem čekal, takže jsem ji ještě nedohrál. Nicméně další hry pro toto zařízení ode mně asi nemůžete čekat, už se tím zabývat nebudu, protože už delší dobu mám v merku Uzebox, který má podle mého názoru mnohem větší potenciál, a už pro něj plánuji předělávku jedné herní klasiky.

Pro jistotu ještě přikládám zdrojové kódy, a zkompilovaný hex soubor, kdyby měl někdo zájem zahrát si sokobana, tetris nebo hada.

« »