Uživatelské nástroje

Nástroje pro tento web


hgfx:prvnigrafika

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).

hgfx/prvnigrafika.txt · Poslední úprava: 2022/09/13 13:59 autor: lanex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki