Obsah
První příklad
Zkusíme si vytvořit první malý jednoduchý projekt. Vykreslíme v režimu HGFX dva obdelníky, každý jinou barvou, a v místě protnutí také jinou barvou. Ukážeme si v něm, jak se HGFX inicializuje, a jak se provádí základní kreslení. Ano, tyto dva obdelníky lze celkem snadno vykreslit i v klasickém grafickém režimu ZX. Ale proto tu nejsme.
Použití
Než začneme kreslit cokoliv do Videoram, musíme nastavit pár parametrů podle zamýšleného použití.
Kde bude Videoram, tabulka barev a pracovní registry?
Videoram může být kdekoliv. Planar videoram je jen pro zápis, takže může být klidně i v ROM. Jediné omezení je, že její adresa musí být dělitelná 256 beze zbytku. Odvozuje se totiž od High Byte (nn00h). Délku má 6144 B, takže by neměla začínat na adresách E900h a výše.
Tabulka barev může být také kdekoliv, a platí pro ní stejná pravidla jako pro Adresu Videoram. Tabulka obsahuje 256 barevnostních indexů, takže její delka je 768 B. Neměla by teda začínat na adrese FD00h a výše. Může být umístněna i v ROM, ale v takovém případě nebude možné číst hodnoty jednotlivých složek (RGB). Pořadí barevných složek je BB,GG,RR. Hodnota například 0,255,255 nastaví žlutou.
Registry se nastavují obdobně jako videoram a barevné indexy. Délka registru je malá, z důvodu budoucí kompatibility je doporučená délka 32 B.
Chceme barvu Borderu podle ZX, nebo podle Indexové barvy?
Můžeme nastavit, aby barva Borderu byla klasicky podle portu 254 v ZX, nebo zda se má brát v úvahu barva Indexu. Jakého indexu, to nastavíme portem 254 v ZX, v rozsahu 0-7.
Chceme vidět v Indexové barvě 0 originální obraz ZX?
Pokud nastavíme, bude se nám zobrazovat klasická ZX videoram tam, kde je HGFX použita barva Index0. Máme tedy ZX videoram, a nad ní vidíme HGFX vrstvu. Musí se ale počítat s tím, že v tomto režimu je časování ZX zobrazení jiné, než při klasickém zobrazení. HGFX používá jinou synchronizaci obrazu, než ULA. Počítá například i s časováním HDMI signálu (50 MHz).
Chceme používat Videoram v klasickém řazení jako ZX, nebo Lineárně?
Do videoram můžeme zapisovat tak jak jsme zvyklí zapisovat do běžné ZX videoram. Ale můžeme také použít řazení Linearní. Tyto režimy zápisu můžeme i kombinovat. Třeba pro vykreslení písmena je určitě výhodnější použít ZX režim a INC H, než ADD HL,DE kde v DE máme hodnotu 32. ZX režim můžeme použít i na jiné pozici na obrazovce díky nastavení Offsetů, a to po jednotlivých pixelech X i Y. Linearní režim je zase určitě výhodnější třeba pro vertikální Scroll obrazovky, kde nám DMA může rychle scrollovat celou obrazovku klidně jen o 1 pixel. A díky Offsetům to může být klidně o 1 pixel libovolným směrem.
Pokud chceme používat HGFX ve spojení s BASICem ZX, je vhodné ponechat řazení Videoram jako má klasické ZX a Offsety nastavené na 0. Přesto je tam nějaké omezení, které by pomohla řešit úprava (fix) originální ZX ROM.
Budeme používat LowRes nebo HiRes?
HiRes má rozlišení 512×192 (256 Indexovaných barev). Pro aplikace je vhodné použít toto rozlišení, stejně tak pro obrázky ve vysoké kvalitě. Musíme ale počítat s tím, že v HiRes režimu máme přístupný jen jeden Buffer (A).
LowRes má klasické ZX rozlišení 256×192 (256 Indexovaných barev). Tento režim je vhodný pro hry, dema, a jinou rychlou grafiku. S tímto režimem máme k dispozici 2 Buffery (A a B). Je to obrovská výhoda, protože tím končí u ZX tak časté honění se s paprskem. Nemusíme zajistit, aby scéna byla vykreslena dřív, než proletí paprsek. Prostě si jí vklidu vykreslíme do skrytého Bufferu, a až bude scéna hotová, zobrazíme ji.
Inicializace
Nyní si na příkladu zkusíme inicializovat HGFX. Všechny příklady jsou vytvářené v LnxAssembler, který je součástí emulátoru LnxSpectrum. V něm funguje režim HGFX a má spustu podpůrných nástrojů pro programování právě HGFX.
Nastavíme si kde bude HGFX Videoram, paleta barev a pár registrů (cca 32 B). Vše musí začínat na adresách dělitelné 256 protože nastavujeme jen vyšší byte adresy.
Videoram si nastavíme na pozici 16384, tedy do prostoru kde se nachází i klasická ZX videoram. Paletu si nastavíme do prostoru 22528, kde normálně máme ZX Attributy. Registry si dáme na konec našeho programu. Videoram chceme Linearní, s Borderem v barvě indexu (0-7 dle portu 254) a Transparenci nechceme.
V našem prvním příkladu si vykreslíme 2 obdelníky ve dvou barvách. Budeme pracovat zatím jen s jedním Bufferem (A).