|
|
Untitled Document
Grafické módy na C64
Tento clánek jsem kdysi psal pro casopis Splash!, bohuel 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í nemue být ádný jiný mód,
ne FLI. Tuto zkratku je mono 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 monostmi C64 je o neco sloitejší. Jeho základní
definice zní: "umonuje 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 kadé
raster rádce (adresou $D018), z ceho vyplývá, e
na kadé 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 kadý 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 kadé raster rádce.
Zároven musí zajistit, e toto prepínání
prijde a poté, co predchozí rádka skoncila. A vhodný
okamik 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 nepouitelné,
ale grafika v nich mue 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í moné
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 moné 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 moné
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, pouití 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é monosti práce
s barvami jako výše popisované, ale zato umonuje hires
o více barvách, ne jsou klasické dve. I tento mód
má svojí interlace formu - SHI. Tím se jeho barevné
monosti zvyšují a je v nem moné 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,
potamo ESHI. Tyto umonují obrázek o šírce
192 bodu, ztrácejí ale monosti 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 mue 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. Pouití spritu a FLI v tomto prípade
nekoliduje, protoe 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 monosti, ovšem pokud
se pamatuji, nebyl pouit 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 kadé rádce jinou videoram.
Také samozrejme nemusí nutne pouívat bitmapu, mue
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 kadé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 monosti
C64), ve kterém je moné programovat vcelku rychlé
efekty s dostatecným barevným rozlišením. Touto technikou
docílíte toti toho, e kadá "pixela"
4x4 bude mít svojí vlastní barvu. Ale i zde platí,
e první tri znaky jsou teko vyuitelné.
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é muete 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,
mueme delat efekty jako FPP plasma nebo FPP logo (pokud rozumne pouíváme
pamet, mueme operovat s logem 320x48, je moné i pouívat
více videobanku). Navíc pouití spritu je také
moné - 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 nemue mít prístup, aby vykonával
instrukce. Tento výše zminovaný efekt se jmenuje FPP, je
moné 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 monost napr. otevrít
sideborder a zároven udelat spritestretch, nebo máte cas na kadé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
|
|