Úvod do HGFX - ZX-Planar 2. díl =============================================================== Nakreslení barevného pixelu --------------------------- Už víme, že k záchazení s planarovou paměti a ke kreslení pixelů nemusíme obsluhovat jednotlivě každý bitplane. To za nás udělá HGFX, s jednoduchým nastavením: 1. Nastavíme si barvu, kterou se budou pixely kreslit. HGFX umí najednou zobrazit 256 barev. Určíme číslo barvy v indexu barev, od 0 do 255. Index barev je tabulka v paměti ZX Spectra, délka tabulky je 768 bajtů a obsahuje 256 pozic. Barva je vždy dána třemi bajty, protože je nastavována z rozsahu palety TrueColour, tj. 16777216 barev (stejně jako v grafickém režimu HRXC, HiResindeXedColour). 2. Dále nastavíme hodnotu PlanarMask, číslo, které udává, jakých bitplanů se bude operace vykreslení pixelů týkat. Aktivní (nastavené) bity čísla PlanarMask udávají, se kterými bitplany se bude pracovat a které bitplany jsou pro aktuální tisk pixelu "vypnuté". Jde tedy o masku, přes kterou se budou do jednotlivých bitplánů "nalévat" příslušné bity barvy. PlanarMask vlastně určuje hloubku použití barvy. 8 bitů z 8 bitplanů se promítne do jediného pixelu na obrazovce. Je to třetí rozměr grafiky, jakási osa Z. Příklady: Pixel s barvou (IndexColour) číslo 233 nakreslíme tak, že v PlanarMask nastavíme hodnotu 255 (binárně 11111111). Číslo 233 vlastně v HGFX binárně ANDujeme s číslem 255. Všechny aktivní bity masky způsobí, že se hodnota barvy promítne do všech bitplánů. Složitější příklad, v němž změnou hodnoty masky nafiltrujeme hodnotu barvy jen do vybraných bitplanů: v níže uvedeném příkladu chceme zapsat hodnotu jen do prvních čtyř (bitplane 4 to 7) a posledního (bitplane no. 0). Stará barva: (bitplany před změnou) 145 dec, 10010001 bin Nová barva: 233 dec, 11101001 bin Maska: 143 dec, 10001111 bin New Planar Bitplanes Bitplanes Colour Mask before after b0 1 -----> 1 ------change------> 1 b1 0 -----> 1 ------change------> 0 b2 0 -----> 1 ------change------> 0 b3 1 -----> 1 ------change------> 1 b4 0 ---X-- 0 1 -----> 1 b5 1 ---X-- 0 0 -----> 0 b6 1 ---X-- 0 0 -----> 0 b7 1 -----> 1 -----change------> 1 (zkratky b0..b7 znamenají jak bit, tak bitplane) Binárně vyjádřeno: Nová barva: 11101001 Maska: 10001111 ------------------------- Stará barva: 10010001 ========================= Výsledek 10011001 3. A teď nakreslíme pixel. Velmi prostě, barvu (IndexColour) a propis do bitplanů (PlanarMask) už máme nastaveny, takže nám zbývá HGFX říci, aby se pixel "aktivoval". K tomu nám poslouží videoram HGFX o rozsahu 6144 bajtů. Její obsah se neliší od toho, co již známe, pokud na ZX Spectru programujeme. Představme si ji jako klasický zx-screen, matrici 256*192 pixelů, tedy 32*192 bajtů, kde každý jednotlivý bit znamená jeden pixel. Zapisováním do videoram, změnou jednotlivých bitů, sdělujeme HGFX, se kterými pixely má operovat. U ZX-screenu příkaz POKE 16384,15 způsobí, že se v levém horním rohu obrazovky rozsvítí řada 4 bodů (v barvách zx-atributů). Pokud zapneme HGFX, způsobí takový příkaz vykreslení 4 bodů v plných 256 barvách. Shoda se ZX-screenem je důležitá. Veškeré zápisy do klasických videoram zx48 i zx128, každé vykreslení pixelu v zx-basicu i ve strojovém kódu jde totiž s pomocí HGFX snadno obarvit jednou z 256 unikátních barev nebo doplnit jiným efektem. A to pouhou změnou bitu ve videoram. HGFX však umí také zajistit, aby se nová grafika s původním ZX-screenem jen prolínala. Adresu umístění HGFX videoram lze kdykoliv změnit a posunout na jiné místo v paměti, třeba na adresu 0, pokud máte na místě ROM zapnut all-ram režim. (stejně tak můžeme posunovat tabulku barev.) V tomto díle jsme si pro zjednodušení nakreslili jen barevný pixel, jistě vás napadá, že planarová maska je vhodná i pro jiné, složitější operace. O tom někdy příště.