Kód:
Úvod do HGFX - ZX-Planar 6. díl
===============================================================
Dnes ukončíme začátečnické lekce o HGFX. Pro ostřílenou část ZX
komunity to bylo netradiční a zdlouhavé, jak se šlo klikatou
metodou od obecného k náročnému. Proto nyní končíme u dvou věcí
z hlediska HGFX velmi podstatných, které obvykle najdete
v technické dokumentaci na předních místech.
Metody zápisů a čtení mohou být v ZX-planaru velmi kreativní.
Už chápeme, jak vyčistit celý bajt nebo změnit jen pixely
nastavené na 1. K tomu si teď ukážeme něco složitějšího, jak
uchovat načtený obsah v interním bufferu, aby šel později
vrátit na jiné místo. Máme pro to v HGFX různé módy a režimy
práce.
Operační mód HGFX - Ink Mode
----------------------------
Dosavadní popisy uvažovaly především tenhle mód. Mód Ink
znamená, že tam, kde je v zapisované hodnotě logická jednička,
se zapíše do aktivního (nastaveného) videobufferu bit z právě
vybrané indexové barvy. Kde jsou logické nuly, tam se nic
nemění.
Operační mód HGFX - Copy Mode
-----------------------------
Copy Mode je složitější než Ink. Mód Copy umí dva režimy:
První režim je čistě zápisový. Tam, kde se do videopaměti
zapisuje (nastavuje) bit 1, se pixel obarví stejně jako v módu
Ink. A kde je 0, tam se vše vynuluje. Jinak řečeno, při zápisu
dat dává do míst, kde se (v kombinaci s PlanarMask) do videoram
barva nezapisuje, barvu s index. číslem 0.
Druhý režim nastává automaticky vždy, když se nejprve čte
z videoram. V takovém případě příští zápis zapíše obsah, který
byl načten při posledním čtení. Ale pozor! Hodnota načtená musí
být stejná s hodnotou následně zapisovanou. Pokud se neshodují,
provede se jen zápis v prvním režimu módu Copy.
Platí tedy:
1. Pokud v módu Copy zápisu do videoram předchází čtení
z videoram a čtená hodnota je stejná jako zapisovaná, dojde ke
kopírování barev u celé řady 8 pixelů.
2. Pokud se v módu Copy nejprve čte z prostoru videoram,
předmětem příštího zápisu bude obsah videoram z pozice, kde se
četlo.
Je jedno, zda jsou zapisovány 0 nebo 1, zkopíruje se 8 pixelů.
Ukázkovým příkladem jednoduchosti zdánlivě složitého módu Copy
je scrollování výpisu na obrazovce, jak to známe ze spectráckého
basicu. Když ROM scrolluje nahoru, načte z videoram bajt
- teď, pozor, tady se přepíná mód Copy do druhého režimu! -
a zapisuje jej o 8 pixelů výše. A pořád dokola, pokud dodržíme
pořadí čtení/zápis.
Také v Copy mode se uplatňuje offset, čtení i zápis mají své
vlastní offsety. Každá zápisová nebo čtecí operace může být
z jiného místa. Dokonce i z jiného bufferu, u Copy módu lze
nastavit, ze kterého a do kterého bufferu chceme kopírovat
(pozn.: v případě rozlišení 512*192 máme jen jeden buffer).
Chunky grafika
--------------
Chunky můžememe považovat za formát (upořádání) dat nebo za
mód zobrazení. Je to megablok paměti, uspořádaný tak, že každý
pixel je obarvitelný jednou z 256 barev a zabírá v paměti celý
jeden bajt. Chunky sebou nese problém obrovské videoram, která
má v případě rozlišení 256*192 bodů velikost 48 KB. Starší
procesor typu Z80, bez specializovaných DMA a dalších obvodů má
co dělat, aby v ní něco plynule provedl, kupř. při scrollingu
musí obětovat všechen svůj strojový čas na přenos bajtů.
256 coloured pixel chunky graphics
256*192 = 49152 pixels (48 KBytes)
1st 2nd 3rd 49152.
pixel pixel pixel pixel
|--------|--------|--------|... ... ...|-------|
byte 0 byte 1 byte 2 byte 49151
HGFX umí kromě planarové grafiky vystavit svá grafická data
také v chunky. Upřímně: interní buffery jsou v HGFX vedeny
v chunky formátu a můžeme do nich přistupovat přes planar
anebo přes chunky režim.
Planar je nepochybně vhodný pro skromnější počítače (zejména
v osmibitových poměrech), chunky režim pro silnější hardvér.
Vzhledem k rozdílnému přístupu do videopaměti poskytuje
chunky efekty, které jdou v planaru jen obtížně realizovat
(a naopak).
V HGFX chunky řeší jednu základní věc, a to čtení z bufferů,
což v planaru není možné. V paměťovém módu Ultimate (hardvéru
eLeMeNt ZX/MB) si jej může zobrazit v okně 8 KB anebo 16 KB.
Chunky paměť se však nestránkuje! Rychlé osmibitové stránkovací
registry našich elementů či mbéček nemají pro HGFX význam.
Musíme na to jít jinak: Počátek oblasti, kterou chceme
zpřístupnit, nastavujeme offsetem Y. Tak je možné, abychom od
adresy 0 měli data pixelů třeba z linky 120.
Příklad tisku v Chunky módu - nakreslení pixelu na souřadnice
128,96 barvou 158
chunky RAM nastavit do osmiKB prostoru od 8192 do 16383
OffsetY = 96
POKE 8192+128,158
Aby byl chunky režim přece jen více použitelný, respektuje
některá systémová nastavení HGFX z planaru. V chunky režimu
kromě offsetů využijeme PlanarMask a nastavovací bity HGFX
registru č. 0 (video parameters).
PlanarMask se chová, překvapivě, stejně jako v planaru :-)
Prostě když zapisujete bajt, zpracuje se skrze PlanarMask.
Tedy i v případě chunky platí, že se přepíšou jen aktivní bity,
ostatní data (na místě nul v PlanarMask) se nemění, se
uchovají v předchozí hodnotě.
Zjednodušeně: v planaru jsou bity nastojato nad sebou, v chunky
jsou naležato, ale maska na ně vždy sedne stejně, když se do
pamětí zapisuje. Rozdíl tu ale každopádně je, ve prospěch
planaru: Zápisem jednoho bajtu obsloužíme v planaru 8 (chunky)
různých pixelů současně, v chunky režimu ale jen jeden jediný
chunky pixel.
Další pořádná věc, co nám práci v chunky režimu usnadní, je
možnost přepínat buffery a nastavit různé buffery pro různé
operace. Můžeme tak bez přepínání číst z jiného bufferu, než
do kterého zapisujeme.
Na závěr
--------
Seriál o HGFX tímto dílem končí. Ještě přibude dodatek s tématy
z nezodpovězených diskusních otázek a s příklady programování,
nastaveními, zejména v basicu. Tím plynule přejdeme do
praktického kursu "HGFX pro pokročilé" :-)
Přeji Vám s HGFX hodně spokojenosti a radosti při dalším
objevování, ať už si zapnete emulátor LnxSpectrum nebo grafárnu
HGFX budete prohánět na reálných strojích typu eLeMeNt ZX a
MB03+ Ultimate.
Poděkovat chci: Lanexovi, LMN128 a Hoodovi,
za velkou pomoc s tímto seriálem.
A taky za bratrství, díky němuž jsme mohli ZX Spectrum naladit
pro 21. století. Přitom se podařilo sloučit různé přístupy
(klony, periferie), západní i východní spectristické styly.
Osvědčené staré věci nevylučovat a nové a dobré více spojovat.
Přehled vývoje několika minulých let najdete na www.128land.com
Dále děkuji za podporu všem, kteří přispěli rukou a hlavou,
radou nebo jinou podporou, prostě dali šanci novému hardvéru
z rodiny eLeMeNt ZX/MB:
pvym, Zoom, Busy, lordcoxis,
nihirash, NEO SPECTRUMAN, Tchunass,
Velesoft, Martin8bity, dakidski a další
+ aplaus patří komunitě vývojářů pro esxDOS, bez nich by naše
snaha nebyla úspěšná!