Amikor adatlapot írok mindig megnézem és leírom, hogy milyen grafikus üzemmódot támogat az adott gép. Azt sajnos nehéz egy táblázatban átadni, hogy a 16 színt milyen megkötésekkel lehet használni. Most sem tudom leírni az összes megoldást amit kitaláltak a hardvereket tervező mérnökök, de megpróbálom ami tőlem telik és legalább pár ismertebbet bemutatok. Ha valahol hibáznék, akkor szóljatok, hogy ki tudjam javítani. A módok nagyjából fejlődési sorrendben követik egymást. Természetesen több is létezett egyszerre, sőt ugyanaz a számítógép többet is támogathatott.
Karakter alapú grafika
A legegyszerűbb gépeknél nem volt igazi grafikus, csak karakteres megjelenítés. Az okos mérnökök több megoldást is kitaláltak, hogy egyszerű grafikát meg lehessen jeleníteni. Ez jól jött nem csak az egyszerű játékokhoz, de mondjuk egy táblázatkezelőhöz (Visicalc) vagy a PC-n népszerű Norton Commanderhez is. Nézzünk 3 példát az egyszerűtől a kifinomultig:
A Commodore PET-nél a karakterkészlet előre definiált. Leonard Tramiel segítségével a ROM-ba került karakterkészletet, amit PETCSII-nek is hívnak, úgy állították össze, hogy több ábra is szerepeljen benne. Többek között a francia kártya jelei is.
A TRS-80 kicsit okosabb a PET-nél. Grafikus módban a 64×16 karaktert 128×48 pixeles képként jeleníti meg. Ez akkor történik, ha a karakterek legmagasabb bitje 1-re van állítva. Ilyenkor minden karakter 2×3 képpontnak felel meg. Bitműveletekkel minden képpont külön címezhető, de a felbontás nagyon gyenge. Persze színek még itt sincsenek és az igazi karakterkészlet feleződött, mert csak 7 bitre korlátozódott. A HT-1080Z is ezt a módot örökölte a Video Genie I-en keresztül.
A Commodore VIC-20 is karakterekből rakta össze a képet, de még fejlettebb, mint az előző kettő. Az első nagy eltérés, hogy a készletet szabadon definiálhatta a programozó. 8×8-as karaktereket használva karakterenként egy színt tudott a VIC-20 használni, de a képernyőn már 16 színt ismert. Ahogy látható ezzel ha egyenként nem is lehetett a pixeleket címezni, de a felbontása nagyobb, mit a TRS-nek. Ráadásul színes és kevesebb memóriát is fogyaszt. További trükkökkel élve, mint mondjuk sorvisszafutás közben karakterek, szín megváltoztatása elég sok dolgot ki lehet hozni belőle.
bitmap grafika
Bitmap grafikánál már minden képpontot külön lehet címezni. Ez nagyon egyszerűen hangzik mégis több megoldás is született rá. Ennek az oka ár, a RAM méret és sebesség korlát volt, de itt is többet mond el pár példa.
A Primo csak grafikus megjelenítést tud. Ötletes módon szöveges módban a karakterek „képét” másolja a grafikus memóriába. 256×192-as felbontást tud alapból és egy bit egy képpontnak felelt meg. Ezért aztán színeket vagy szürke árnyalatokat nem ismer. PC vonalon a Hercules kártyák rendelkeztek hasonló üzemmóddal, persze nagyobb felbontással.
A Commodore 64 320×200-as felbontást tud megjeleníteni 16 szín mellett. Ez jól hangzik, de nehhez elvileg 320x200x4=256000 bitre, vagyis 32kbájt memóriára van szükségünk, ami a C64 memóriájának rögtön a felét jelentené. A 80-as években drága volt a memória, ezért spórolni kellett vele, ráadásul a grafika mozgatásához kevés lett volna a gép teljesítménye. Két trükköt is bevetettek, hogy kevesebb memória is elég legyen:
- A sprite-ok önálló kis grafikák, amelyek egymástól függetlenül programozhatóak. A C64 videó áramköre (VIC II) 8 darabot kezel és képes érzékelni, ha ezek egymással vagy a háttérrel ütköznek. Gyakorlatilag a VIC ezeket a kis figurákat képes függetlenül mozgatni a háttértől és egymástól is.
- Szín attribútumokat használ a teljesen független 16 színű képernyő helyett. Ez azt jelenti, hogy a 320×200-as felbontású kép monokróm, ezért csak 8000 báj méretű. A képernyőt 8×8-as blokkokra osztják és a blokkokhoz tartozó fekete és fehér helyett a megjelenítendő színeket egy 1kbyt méretű szín RAM tárolta. A spórolás azt is jelenteti, hogy a blokkok mérete limitálja a grafikát. A blokkok határainál a színek összefolyhatnak, ez az attribute clash. A kép egy MSX-1-ről jön, de a C64 vagy Spektrum is hasonlót produkál.
A C64 ennél persze többet tud, de nagyjából az eddig leírtakon alapulta többi 8 bites gép. A Spektrum és a CPC nem kezel sprite-okat, de színattribútumokat használ. A TI-99 és az Atari 800 már mind a kettőt használta. Mondhatni variációk egy témára: kevés memória, limitált teljesítmény.
Ami közös az Amiga, az Atari és az EGA kártyában az a bitplane. 16 színhez 4 bitre van szükségünk. Ezek lehetnek egymás után, de lehet 4 különböző színű képünk is amiket egymásra rakunk. Egy pixelhez tehát minden bitplanen tartozik egy bit. A planek számának növelésével a megjeleníthető színek száma is nő. Szín helyett használhatunk fényerőt is, vagy ábrázolhatjuk YUV módban a képet. Az Amiga EHB módja például 6 ilyen bitplane-t használ. Ebből egy a világosság, a maradék 5 pedig 32 színt tud leírni. Ráadásul ezek a színek egy nagyobb, 4096 színű, palettából válogathatóak össze. Bonyolultan hangzik? Az is, ha csak 1-1 pixelt akarunk megváltoztatni. Mégis van egy előnye. A színeket okosan összeválogatva egyszerre egy plane-t írva lehet animációt készíteni. Mondjuk 2 plane-en vannak a mozgó figurák, a maradékon pedig a háttér. Így sokkal kevesebb adatot kell mozgatni. Lehetséges csak a palettát változtatva elkészíteni egy animációt, természetesen ez a felhasználható színek számának a rovására megy. Pontos időzítéssel, menet közben változtatva a palettát a megjelenített színek száma is növelhető. Az Amiga és az Atari STE is rendelkezik blitterrel a képmozgatás gyorsításához.
A VGA kártyák 13h módjában minden pixelhez 1 bájt tartozik, ami egyszerre 256 színt jelent. Ehhez 320×200-as felbontásnál majdnem 64kB-ra van szükség. Programozni egyszerű, de teljes képernyős animációnál ez elég sok adat mozgatását jelenti, amit nem gyorsítanak az alap ISA-s kártyák. Ezért volt az, hogy egy 66 MHz-es 486 DX2 hiába számított erőműnek 1993 végén, de egy átlag ISA-s kártyával mégsem tudta megfutni a stabil 30 fps-t Doom alatt. A VGA érdekessége, hogy a többi üzemmódja bitplanar és a kompatibilitás miatt sima text-et is támogat.
Összefoglalás
Sok mindenre nem tértem ki. Nem volt szó az Amiga HAM módjáról, vagy a 8 biteseknél a további funkciókra. Mindegyik megérne több oldalt, de most csak pár linket osztok még meg veletek. A képek egy részét is innen, pontosabban a hozzá kapcsolódó wikimedia oldalról vettem át:
Views: 650