Untitled Document

Grafické módy na C64

Tento clánek jsem kdysi psal pro casopis Splash!, bohužel ale v dobe, kdy už tento casopis koncil a i pres nejaké náznaky obcasného vycházení žádné další císlo nevyšlo. Dnes, s hlubšími znalostmi grafiky C64, píšu tento clánek zcela znovu, jako památku na výše zmínený casopis.

Behem historie C64 na nem vznikla spousta postupu, jak zobrazit grafiku, kterou C64 "neumí", nekteré z tech nejznámejších se zde pokusím popsat.
První nemuže být žádný jiný mód, než FLI. Tuto zkratku je možno chápat v širších souvislostech, zde se ovšem budeme zabývat pouze "obrázkem" FLI. Princip tohoto módu je v podstate jednoduchý, jeho realizace s možnostmi C64 je o neco složitejší. Jeho základní definice zní: "umožnuje na prostoru 8x8 pixelu zobrazit všech 16 barev". Všichni, kdo C64 alespon trochu znají, vedí že obycejný grafický mód multicolor-bitmap zobrazí na jednom znaku (8x8) pixelu 4 barvy. Tyto barvy jsou pozadí ($D021), colorram ($D800) a videoram (napr. $0400). FLI vychází z tohoto základního grafického módu a využívá prostého prepínání videoram na každé raster rádce (adresou $D018), z cehož vyplývá, že na každé raster rádce je jiná videoram, což je presne ten zpusob, jak do prostoru jednoho znaku (8x8 pixelu) dostat 16 barev (nekterí extremisté ješte k tomu mení barvu pozadí, není to ovšem casto užívaný zpusob). Jakkoli tento postup zní jednoduše, není triviální ho realizovat. Problém je v tom, že C64 videoram nacítá jen každý osmý raster rádek, tudíž programátor musí tuto osmou rádku (ve skutecnosti je to první raster rádka textového rádku a ríká se jí badscan line ci badline) nechat nacíst na každé raster rádce. Zároven musí zajistit, že toto prepínání prijde až poté, co predchozí rádka skoncila. A vhodný okamžik prichází nejdríve tesne pred skoncením levého okraje (raster "jede" zleva doprava). Pri manipulaci s badline se v míste, kde je s ním manipulováno, do video ram nactou 3 znaky s hodnotou $FF, což je proste hardwarový fakt, s kterým nikdo nic nenadelá. Když si dva predešlé fakty dáme dohromady, vychází nám, že tesne vlevo obrazovky je nutné prepnout badline a po jejím prepnutí se nactou 3 nežádoucí znaky $FF. A máme z toho fli-bug oblast, tedy duvod, proc fli grafika nepoužívá první tri znaky. Není tak úplne pravda, že jsou nepoužitelné, ale grafika v nich muže nabývat bud barvu pozadí, nebo svetle šedou (prípadne svetle cervenou, tak se zase nacte do colorram). Stejne tak není pravda (jak bylo psáno v casopisech Fun a C64magazin, dej jim pán Buh vecnou slávu), že pri FLI není možné používat sprity. Sprite se svojí šírkou presne hodí do flibug prostoru. Ctyri tam zobrazíte docela v pohode, dá se i pet pri plnohodnotném fli obrázku, pri více už nastávají problémy s casováním, zvetšuje se flibug prostor atd. A to zatím pomíjím fakt, že sprite se pri své výšce 21 pixelu musí neustále presouvat níže, ale tak, aby "nerozhodil" FLI casování (a už úplne pomíjím fakt, že FLI se dá zobrazit pouze se stabilizovaným rasterem). Výsledek je takový, že pridání spritu do fli grafiky není až takový visuální efekt, aby stál za tu práci :-) . Ale existují dema, kde je tento efekt možné videt. Mód IFLI je potom pouze (jak název napovídá) interlace FLI, dva FLI obrázky rychle strídané doplnené o horizontální scrollování o 1 pixel (adresa $D016). Tímto zpusobem dosáhnete ješte lepšího barevného rozlišení.
Jak bylo ze zacátku zmíneno, techniku FLI je možné použít i v dalších prípadech. Napr. AFLI je FLI v hiresové grafice, UFLI je FLI využívající sprity, další techniky jsou BFLI, XFLI, HFLI... Takovýchto zkratek bychom našli vícero, jejich interpretace obcas bývá jasná jen samotnému autorovi nebo ruzní programátori mohou ruzné zkratky chápat jinak.
Další (a mému srdci nejbližší) mód je MLC - multicolor interlace. Už z názvu je patrné, že se jedná o dva prosté multicolor obrázky, strídané stejným zpusobem, jako FLI obrázky v IFLI. Tento mód není omezen v prvních trech znacích, použití spritu je také mnohokrát flexibilnejší a jeho zobrazování je velmi jednoduché (stací proste nekde mimo obrazovku prepínat mezi dvema obrázky). Tento mód má také dve trochu odlišné interpretace. S jednou videoram a s dvema videoram. Ten první zpusob je používanejší, ovšem z programátorského hlediska je ten druhý "výkonejší".
Pomerne casto užívaný je také SH mód, super hires. Jeho šírka je omezena na 96 pixelu a to proto, že jsou to dve rady ctyr hires spritu na sobe, doplnené o hires grafiku v podkladu. Tento mód nemá až tak velké možnosti práce s barvami jako výše popisované, ale zato umožnuje hires o více barvách, než jsou klasické dve. I tento mód má svojí interlace formu - SHI. Tím se jeho barevné možnosti zvyšují a je v nem možné kreslit (konvertovat) velmi hezkou grafiku, ovšem stále širokou "pouze" 96 pixelu. Pokud budete SH používat tak, že nedáte dve rady ctyr spritu na sebe, ale osm do jedné rady, vznikne mód ESH, potažmo ESHI. Tyto umožnují obrázek o šírce 192 bodu, ztrácejí ale možnosti používání barev. U všech techto SH módu je treba rešit problém s vertikálním presouváním spritu, aby byl obrázek velký alespon na délku - obrázek o rozmeru 96x21 urcite nikoho nenadchne. Není zde treba speciálních technik, SH jde zobrazit i bez stabilizovaného rasteru, presto bych jednu fintu zmínil. Krome pozice spritu musíte menit i jejich grafiku - prepisovat místo, odkud se nacítají. Což znamená na velmi malém prostoru prepsat osm adres. To muže být nekdy kámen úrazu. Pomoc je jednoduchá, používáte dve video ram, sprity si definujete už pred místem prepínání grafiky a v kritickém momente prepnete pouze adresu $D018. Stejne jako u FLI, i zde existuje nekolik kombinací a odnoží. Známý mág pres programování grafiky Crossbow udelal editory (krom jiných) SH-FLI a SHI-FLI. Použití spritu a FLI v tomto prípade nekoliduje, protože celá grafika je uprostred obrazovky a ani zvetšený flibug prostor do ní nezasahuje (místo, kde se flibug vyskytuje, je prázdné). Obzvlášte SHI-FLI je velice efektivní mód s velkými barevnými možnosti, ovšem pokud se pamatuji, nebyl použit jinde než v demech, která práve Crossbow osobne programoval.

V druhé polovine clánku bych zmínil nekolik programátorských technik, které v puvodním clánku nebyly, a které se sice používají spíše pro demo efekty, se zde popisovanými tématy ovšem úzce souvisí. Jak již bylo zmíneno, FLI se netýká pouze obrázku, ale je to technika, jak zobrazit na každé rádce jinou videoram. Také samozrejme nemusí nutne používat bitmapu, muže být i ve znakové sade. Z tohoto se potom odvozují ruzné efekty jako FLI scrolltext, FLI plasma atd. Zvláštní technikou je pak 4x4FLI, které prepíná video ram pouze na každém ctvrtém rádku a tím používá jen dve videoram (narozdíl od FLI obrázku, který jich potrebuje osm). Pokud pak máte v bitmape všude zapsán znak delený na pul, aby se v jedné pulce zobrazovala barva dolního nibble videoram a v druhé pulce barva horního nibble videoram, dostáváte docela slušné grafické rozlišení (na možnosti C64), ve kterém je možné programovat vcelku rychlé efekty s dostatecným barevným rozlišením. Touto technikou docílíte totiž toho, že každá "pixela" 4x4 bude mít svojí vlastní barvu. Ale i zde platí, že první tri znaky jsou težko využitelné.
Co by se stalo, kdyby se FLI grafika prepnula dríve, než skoncí predchozí rádka? Odpoved je jednoduchá, predchozí rádka by se nacetla znovu. Respektive nacetla by se ta stejná rádka bitmapy a znovu by se nacetla videoram. Ale co kdybychom zmenili videoram (adresou $D018) ješte predtím, než by se znovu nacetla? Nacetla by se stejná bitmapa, ale už jiná videoram - jiné barvy. Tato technika je známa jako ECI a ikdyž její síla nemusí být pri definici principu zrejmá, docílí se jí velmi zajímavé efekty. Když s tímto casováním zacnete hned na první rádce a obetujete mu celý videobank, máte patnáct ruzných videoram (ten šestnáctý nelze použít, tam musí být definována bitmapa), které mužete menit. Znamená to, že sice máte jen jeden rádek bitmapy, ale zato v patnácti ruzných barvách, navíc ECI je zobrazováno v celé šírce obrazovky (i na prvních trech znacích). Nejznámejším efektem je ECI plasma. Technika FPP využívá na vlas stejného raster casovace, odlišnost je pouze v tom, že nepoužívá bitmapu, ale znaky. A pokud je FPP efektu zase vyhrazen celý videobank, mužeme delat efekty jako FPP plasma nebo FPP logo (pokud rozumne používáme pamet, mužeme operovat s logem 320x48, je možné i používat více videobanku). Navíc použití spritu je také možné - nejznámejší efekt FPP se sprity je Graham plasma (pojmenované po svém autorovi). Z popisu je patrné, že technika FPP (i ECI) operuje na badline, pokud ovšem s casováním nezacnete na první, ale až na sedmé rádce, získáte efekt, který vypadá stejne, ale jste na tom lépe s casováním. Badline má totiž tu nepríjemnou vlastnost, že nactení nové videoram trvá vetšinu casu raster rádky. Tudíž v tuto dobu je plne vytížena pamet grafickým cipem a procesor v tu samou dobu nemuže mít prístup, aby vykonával instrukce. Tento výše zminovaný efekt se jmenuje FPP, je možné ho použít pouze ve znakovém módu a operuje tesne pred badline, máte proto v prerušení více casu na samotný efekt. Tím dostanete možnost napr. otevrít sideborder a zároven udelat spritestretch, nebo máte cas na každém rádku prepisovat grafiku (a udelat tak treba vertical raster bars) a podobné.

Záverem asi toto: nedelám si iluze, že by v dnešní dobe tento clánek oslovil více lidí, než aby se dali spocítat na prstech jedné ruky, nebo že by se snad z nej nekdo dozvedel neco nového a prakticky to dokázal využít. Hlavní duvod, proc tento clánek vznikl je tedy ten, který byl zmínen hned v úvodní vete.

LHS

Uzivatel : neprihlasen

jmeno
heslo  

Top 5 hry

Commando689
Elvira 2419
Turrican347
muzax258
Ace2247

C64 Grafika

Hledat...

v

Obal hry

Odkazy do světa









Novinky ze světa   Archiv novinek   Historie Commodore 64   Projekt Sidwinder   Party a setkání   Diskuzní fórum   Napište...  

PHP / MySQL code by PCH/Unreal