Ú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á!