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 tedy 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ě?
Zápis do Videoram můžeme používat ve dvou režimech. Buďto klasické řazení jako to má videoram ZX Spectrum, a nebo lineárně seřazené. 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. Nelinearní režim můžeme použít kdekoliv 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 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?
HGFX1 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 nemusíme řešit kde se zrovna nachází vykreslovací paprsek. Prostě si scénu v klidu vykreslíme do skrytého Bufferu, a až bude scéna hotová, zobrazíme ji.
HGFX2 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).
HGFX3 SuperHiRes má rozlišené 512×384 (16 Indexovaných barev). Skvělé pro texty a obrázky ve vysokém rozlšení. V SuperHiRes ale máme také jen jeden Buffer. Také je potřeba si uvědomit že 512×384 vyžaduje 4x víc dat pro překreslování, než v HGFX1 LowRes.
HGFX4 UltraHiRes má rozlišení 720×546 (4 Indexové barvy). Tento režim je skvělý pro texty, je ale bohužel přístupný pouze přes Chunky paměť. To ho hodně omezuje, není vhodný pro grafické dema ani hry.
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).