Obrázok má 144 kB, celá hra Super Mário, so všetkými levelmi, princeznami, príšerami, ktoré vás spoločne zabavili na dlhé hodiny, má 40 kB. Čo je to dopekla za mágiu? Nedeľník TOUCHIT vážne i nevážne. Nezviazané IT témy na tisíc spôsobov.

Vtesnať do 40 kilobajtov celú hernú grafiku so všetkými textúrami, hudbou, zvukmi skokov a iných prvkov a zároveň aj celou hernú mechaniku, to sa dnes už veru nevidí. Aj keď tento objem tisíckrát vynásobíme na úroveň 40 MB, tak takúto veľkosť dnes očakávame tak možno na súbor licenčných podmienok používania, ktoré odsúhlasujeme pri inštalácii.

Dnešné špičkové hry majú obvykle 30 až 50 GB a prekonanie 100 GB hranice, ktoré zopár krát už nastalo, nám už ani nedvíha obočie. Ak rozrátame tento objem napríklad na 10 až 20 hodín herného času, ktoré väčšina hier dosahuje, tak hra Super Mário pôsobí z hľadiska pomeru bit/zábava neprekonateľne.

Áááách, klasický trik. Dám mladšiemu bratovi druhý ovládač v hre pre jedného a predstieram, že hrá so mnou /Dobová reklama na NES/

To ale nie je kritika moderných hier. Za vizuálnu kvalitu sa platí a mnohé hry za posledných pár rokov boli nielen obrazové, ale aj príbehové skvosty, o ktorých sa nám voľakedy ani nesnívalo. Do herného a technologického obdobia pred dvadsiatimi, tridsiatimi či štyridsiatimi rokmi sa netúži vrátiť zrejme nikto.

Pozastavenie sa nad mechanikou a metódami, ktoré používali vývojári hier v počiatkoch osobných počítačov a herných konzol, je však úctivá poklona histórii. Išlo totiž o ukážku kumštu a vynaliezavosti.

Poďte sa so mnou na pár špecifík pozrieť. Určite vás zaujmú.

PREČO 40KB MUSELO STAČIŤ KAŽDÉMU?

Hra Super Mario Bros, vo svojej klasickej podobe pre konzolu NES (Nintendo Entertainment System), v ktorej ju spoznala drvivá väčšina hráčov na vtedajšom svete, vznikla v roku 1985.

Patrí k najikonickejším a najviac rozpoznávaným hrám v histórii, pričom podobnému povedomiu sa už snáď môže tešiť len Tetris, ktorý je pravdaže z hľadiska komplexnosti o niekoľko rádov nižšie.

Mário bol podobne ako drvivá väčšina ostatných hier pre NES konzolu vytvorený pre 40 kilobajtové ROM cartridge. Šlo o akési „kazety“, ktoré plnili funkciu herného dátového nosiča. V ich vnútri sa nachádzali ROM čipy, z ktorých po zasunutí konzola hru načítala a rovno spustila.

V základe teda šlo o SSD. Ako môžete vidieť, plastová kazeta bola skoro prázdna. Doska vo vnútri obsahovala tri čipy. Veľký čip vpravo mal kapacitu 32 kilobajtov a obsahoval celý zdrojový kód hry a takisto všetku hudbu a zvuky. Rovnako veľký čip uprostred mal kapacitu 8 kilobajtov a obsahoval všetku grafickú informáciu.

Áno, celá grafika Mária, všetkých príšeriek, objektov, hradov, podláh, hríbikov či princeznej, to všetko sa muselo zmestiť do 8 KB. Viac skrátka nebolo k dispozícii.

Posledný malý čip celkom vľavo bol CIC (Checking Integrated Circuit), ktorý plnil funkciu ochrany pred tým, aby na konzole neboli spúšťané hry, ktoré Nintendo neschválilo a pravdaže aj „neskasírovalo“. Takisto bol používaný aj na regionálne blokovanie a bránenie nelegálneho exportu z rôznych inak nacenených trhov.

Prečo bol plastový cartridge taký veľký a teda skoro celý prázdny? Nuž, treba myslieť na to, že šlo o produkt na distribúciu/predaj, podobne ako boli neskôr napríklad optické média. Musel sa naň zmestiť dobre viditeľný obrázok, ktorý hru identifikoval a takisto musel byť cartridge dobre manipulovateľný a pevne zasúvateľný do konzoly aj malými deťmi.

Okrem toho, na jeho veľkosti mal podiel aj nedávny herný krach, spôsobený okrem iného aj záplavou enormne nekvalitných hier. Nintendo tak chcelo vytvoriť kazetu, ktorá pripomínala veľkosťou populárne filmové VHS pásky. Zákazník/rodič tak mal mať pri držaní cartridgu pocit, že kupuje niečo hmatateľné, čo stálo za tie peniaze. Okrem toho, Nintendu táto prázdnota umožnila, že o pár rokov neskôr mohla byť doska zväčšovaná a dopĺňaná o ďalšie čipy, bez toho aby sa menil tvar a veľkosť cartridgu.

Tak tu ležal legendárny Mário /foto: Multimedia Mike/

Veľké množstvo levelov, variability a hlavne zábavy, ktoré sa do 40 kB zmestilo, bolo obdivuhodné. Dôvodom tohto limitu, ktoré mali všetky ranné NES hry až do neskorších upgradov, bola samotná hardvérová architektúra.

Srdcom konzoly bol 8-bitový japonský procesor Ricoh 2A03, čo bola v základe kópia populárneho amerického MOS 6502, doplneného o obvod na spracovávanie zvuku. Ricoh túto kópiu vyrábal priamo pre Nintendo s frekvenciou 1,66 MHz.

Spoločnosť mu robil čip Ricoh RP2C02G, ktorý fungoval ako PPU, teda mechanizmus na spracovávanie obrazu (Picture Processing Unit). Staral sa o prekladanie grafických dát do signálu pre CRT obrazovku televízora. K nim sa pridal tretí hlavný doplnok v podobe dvoch 2 KB čipov RAM (jeden pre CPU, druhý pre PPU).

Procesor mal 16-bitovú adresnú pamäťovú zbernicu, čo inak povedané znamenalo, že dokázal vidieť v základe 216 bitov. To nám po vynásobení osmičkou dáva 65 536 bajtov, teda 64 kB. S týmito 64 kB, ktoré dokázal procesor namapovať pod konkrétnymi číslami adries, muselo byť vykonané všetko.

Prvotných 24 kB vyčerpali adresy, potrebné na fungovanie samotného počítača. Šlo teda o adresy mapujúce bity RAM (2KB + 6 KB jej adresných kópii, čo bol trik vďaka ktorému bolo možné robiť hardvérové skrolovanie, teda obvyklý posun obrazovky napr. zľava doprava v reálnom čase, ktoré z týchto starých hier celkom určite dobre poznáte), potom adresy PPU čipu, zvukovej jednotky, registru prerušení a registru mapovača.

Zostalo nám 40 kB. A tieto adresy bitov, ktoré procesor mohol vidieť, boli vyhradené práve pre čipy v zásuvnom „kartridži“. Vyčerpal ich teda spomenutý 32 kB čip PRG ROM (zdrojový kód hry a zvuk) a vedľa neho sediaci 8 kB čip PRG ROM (grafické dáta).

8 KB GRAFICKÝCH SÚBOROV? VŠAK TO NESTAČÍ ANI NA IKONU SPÚŠŤACIEHO SÚBORU!

Ako si NES hry a predovšetkým očividne komplexný Super Mário dokázali s takýmto obmedzením na objem grafickej informácie poradiť? Nuž, vynaliezavými postupmi a využitím navrhnutej architektúry prakticky naplno.

Pozrime sa najprv na základný fakt, ktorého ste si možno doteraz vôbec neboli vedomí. Všimli ste si, že oblaky a kríky v hre sú ten istý grafický objekt?

Ak sa pozorne zahľadíte, zistíte, že krík je vlastne len vrchná časť oblaku bez spodku, nafarbená na zeleno namiesto bielej. V základe vidíme použitú modrú a bielu farbu pri oblaku, ktorú však Nintendo v rámci grafiky neukladalo. Ukladalo len použiteľnú paletu. Zjednodušene povedané boli farby označené v grafike len ako farba 1 a farba 2 a až pri procese jej vykreslenia kód nakázal, aká farba pre číslo 1 a 2 má byť. To teda umožnilo mať len jeden grafický objekt, ktorý sa podľa príkazu kódu vykreslil v konkrétnej farbe.

To však nie je všetko. Všimnite si takisto, že trojitý veľký krík a trojitý veľký oblak nie sú odlišná dvojica objektov. Stále ide o ten pôvodný jeden oblako-mrak. Je len vykreslený tak, že prvej kópii mraku chýba koniec, strednému začiatok aj koniec a tretiemu chýba začiatok.

Tieto mixáže boli možné vďaka tomu, že grafická informácia bola na NES uložená vo forme samostatných dlaždíc. Tie bolo možné vykresľovať v prakticky ľubovoľnom poradí. Každá dlaždica je zložená z 8 × 8 pixelov a spolu s informáciou o farbách tak 8 kB ROM čip mohol niesť dohromady 512 rôznych dlaždíc.

Boli rozdelené do dvoch tabuliek po 256 dlaždiciach, pričom jedna tabuľka patrila objektom pre pozadia a druhá pre hýbajúce sa objekty v popredí, ktoré sa nazývali „sprajty“ (sprites). A tu ich všetky máme:

Toto je načítaný grafický obsah celej Mário hry. Hore je tabuľka Spritov, medzi ktoré patrí Mário, hríbik, korytnačka a iné objekty, ktoré sa hýbu. Dole je druhá tabuľka s pozadiami, teda nehýbajúcimi sa objektmi, čo sú mraky, kríky, alebo kocky po ktorých chodíte a skáčete.

To čo na týchto obrázkoch vidíte (vľavo) je úplne všetka grafika, ktorú Super Mário používa v celej hre. Nič nie je skryté. Dohromady ide len o týchto 512 dlaždíc. Vpravo je priblíženie na 16 dlaždíc, kde už dobre rozpoznať to, že každá je zložená len zo smiešnych 64 pixelov (8 × 8), v maximálne štyroch rôznych odtieňoch. Dole môžete vidieť, že v dostupnej palete farieb je možné číslom prideliť pixelom konkrétnu farbu, alebo priehľadnosť.

Môžete si to pozrieť aj u seba doma. Snáď sa Nintendo na mňa nenahnevá. Tu je originálny 8 kB súbor stiahnutý z ROM čipu Mária. Môžete si ho otvoriť v tomto programe (pretiahnutím myši), bez nutnosti inštalácie.

Je to tak trochu magické, vidieť všetky dáta Mária takto natvrdo/naholo na vlastné oči, bez akejkoľvek kompresie. Ale tak to skrátka bolo.

Skúsme si teraz spolu tie veci poskladať do vygenerovaného obrázku na TV.

Tento snímok z úplného začiatku hry na TV zobrazuje 800 dlaždíc o rozmere 8 × 8 pixelu. Keby toto malo Nintendo zobraziť tak, že by každá dlaždica bola uložená ako grafika, inštalatér Mário by skončil už tu na prvej obrazovke, bez toho aby sa pohol. Na 8 kB ROM čipe bolo totiž miesto len na 500 dlaždíc grafiky dohromady.

Našťastie, ich správnym skladaním a opakovaním sme mohli dostať obrovskú hru s mnohými levelmi a mnohými hodinami zábavy. Ako je vidieť, rozdelenie objektov na samostatné štvorce grafiky nám otvára možnosť opakovať ich v rozdielnom poradí. Môžeme tak získať rozlične veľké a rozlične tvarované objekty statického pozadia.

Všimnite si napríklad zelený kopec. Je tvorený 30 dlaždicami, ktoré by dohromady vyžadovali uloženie 1920 pixelov / bitov. Kombináciou a opakovaním je ale možné si vystačiť iba so šiestimi uloženými dlaždicami, teda 384 pixelmi / bitmi.

Rovnako sa skladali aj sprajty, teda pohyblivé objekty, ako samotný Mário alebo hríbiky a korytnačky. Tie sa nielenže hýbu po obrazovke, ale vyzerajú aj animovane. To je dosiahnuté tým, že pri ich posune sa vymení niektorá z ich dlaždíc za inú.

Pri behu alebo skoku napríklad Máriovi zostala hlava v podobe dvoch dlaždíc, ale spodné dve s jeho gaťami boli vymenené za iné. Skúsme si ich v tabuľke nájsť. A hľa, tuto sú:

Vidíte tie gate na dlaždiciach vedľa? Spoznávate ich? Jasné, to sú Máriove nohy keď pláva vo vodnom leveli. Tu sa dostávame k zaujímavému problému. Sprajtov, teda pohyblivých grafických objektov bolo v hre síce menej, ako pozadia, ale bolo ich potreba animovať, aby nepôsobili dreveno. A každá zmena si pravdaže vyžiadala novú dlaždicu. Sprajtom tak začalo dochádzať miesto rýchlejšie, ako pozadiam a ich dostupná polovica 256 dlaždíc v 4 kB tabuľke sa rýchlo krátila.

Bolo tak nutné vymyslieť ďalší trik. Ním sa stalo to, že vývojári začali používať dlaždice niekedy aj tak, že povedali PPU čipu, aby ich vykreslil odzadu, teda zrkadlovo. Všimli ste si na predošlom veľkom obrázku, že stojaci Mário bol tvorený zo 4 unikátnych dlaždíc, ale v grafickom súbore sú len tri? To preto že jeho gate na druhej spodnej dlaždici sú totožné, len zrkadlovo prevrátené.

Tento trik používa aj hríbik Goomba, čo je prvý nepriateľ, ktorého v hre stretnete. Tvoria ho štyri unikátne dlaždice. Pri animácii chôdze sa ale spodné dve vymieňajú a zrkadlovo obracajú, čo vyvoláva dojem, že vpredu je vždy iná noha. Zaujímavé je, že jeho oči nájdeme v grafickom súbore v podobe dvoch unikátnych dlaždíc a tu redukcia na jednu so zrkadlovým obrátením použitá nebola (prevrátenie si pravdepodobne vyžiadalo kód navyše a zrejme aj nejaký ten výpočtový výkon). Očividne to teda vývojári využívali len niekedy, keď už miesto na ďalšie dlaždice nezostalo.

Šlo vskutku o zaujímavé a vynachádzavé metódy. Podobne vynaliezavo si vývojári počínali aj pri zvuku. Vedeli ste napríklad, že 40 kB, dostupných pre všetky dáta Super Mária, by stačili len na uloženie cca 2 sekúnd hudby v MP3 formáte?

Nuž, ak odrátame 8 KB uloženej v grafickej ROM, tak tých 32 kB v dátovej ROM takisto nie je žiadne terno. Obzvlášť keď sa tu musí nachádzať celý zdrojový kód hry ako takej a celkový dizajn levelov. Ako teda hudba a zvuky boli spravené?

TRIANGLUJEME MUZIKU DO ŠTVORCA

Ak ste dobu starých konzol zažili, zrejme viete, že prakticky každá mala okrem svojej charakteristickej grafiky aj charakteristický zvuk. Aj keď každá hra na NES mala inú hudbu a zvuky, môžete bez problémom rozpoznať, že sú hrané tým istým „nástrojom“. Napr. konkurenčný Commodore 64 a jeho hry zneli celkom inak.

Zvuk hier nebol uložený podrobne na tvrdo ako pulzne kódová modulácia, popisujúca detailne zvukovú krivku analógového náprotivku. Kdeže, na to nebolo miesto. Mal prakticky formu len zubatého notového zápisu, ktorý konzola syntetizovala. A to ako to zvládala určilo, aké zvuky môžete mať.

K syntéze slúžili tzv. hlasy, či inak povedané pásma či kanály. Muselo byť ich vždy viac, aby počítač dokázal vyprodukovať viac ako jeden tón v rovnakom čase.

Odlišným hlasom bolo možné zároveň dať odlišný prejav zvukovej krivky. Je to rovnaký princíp ako keď hrá hudobník na syntetizátor a stlačením tlačidla zmení priebeh signálu a vyprodukuje inak znejúci nástroj.

Prvé dva hlasy NES produkovali hranaté zvukové vlny, ktoré zneli takto:

Keďže boli dva, mohli hrať dva rôzne tóny v jednom čase, čo otvorilo priestor pre komplexnejšie melódie.

Tretí hlas bol oproti tomu už odlišný a produkoval trojuholníkové vlny, čo sa používalo pre hlboké basové tóny.

Jeho zvuková produkcia znela takto:

Na a napokon štvrtý zvládal produkovať len prerušovaný šum:

Tieto možnosti vás zrejme nenadchli. Lenže čo bolo to bolo. Ak teda spojíme schopností štyroch hlasov NES dohromady, môžeme vyprodukovať napr. hlavnú znelku Super Mária:

NES malo aj piaty hlas, ktorý zvládol prehrávať skutočný PCM zvuk, teda sample (napr. jeden úder bubnu), avšak vzhľadom na nedostatok miesta to používali hry len veľmi zriedka.

Avšak ani syntéza zvuku nie je všeliek a skladby pri svojej dĺžke zaberali v rámci miniatúrneho 32 kB čipu určeného na programový kód značné množstvo miesta. Boli uložené vo forme NSF súborov, priamo hneď vedľa samotného herného strojového kódu. Áno, dobre čítate – strojového kódu. Šlo o 6502 Assembly, ako už architektúra CPU napovedala. Nie nie, žiadny vysoko úrovňový programovací jazyk. Všetko sa písalo pekne takto na tvrdo.

Aj pri zvukoch sa teda muselo šetriť. Napríklad zvukový efekt, ktorý Mário vydá v momente, ako skočíte na nepriateľa, je totožný, ako pri plávaní vo vodnom levele. Takisto zvuk, ktorý sa prehrá v momente, ako Mário dostane ranu od nejakého objektu je totožný, ako keď vojde do trúbky. Zvuk pôsobí inak len vďaka opakovaniu.

Mimochodom. Autorom všetkej hudby a zvukov v hre bol Koji Kondo a treba povedať, že odviedol kus dobrej roboty. Hudba v Super Máriovi je značne emotívna a veľmi dobre napomáha k vyvolaniu rozdielnych pocitov v rámci toho, ako sa v hre postupne mení prostredie (napr. hravá znelka na povrchu a komorná a mierne strašidelná v podzemí). To bol vo svojej dobe značne progresívny a nie príliš používaný prístup.

Nuž, a ak ste sa dočítali až sem, možno vás už poriadne svrbia prsty a zatúžili ste si pôvodného Mária znova zahrať. Takže vám to rozhodne neodopriem, nech sa páči.

Ovládanie: A – doľava, D – doprava, S – dole, K – skok, J – streľba.

Nedeľník TOUCHIT hľadajte na našom webe ako inak než v nedeľu. Ak ste predchádzajúce zmeškali, nájdete ich všetky pod rovnomenným kľúčovým slovom.

František Urban

František Urban
Zameriavam sa najmä na prehľadové a analytické články z oblasti najrôznejších technológií a ich vývoja. Nájdete ma takisto pri diagnostike HW a SW problémov.