lnxspectrum:hgfx
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verzeNásledující verzeObě strany příští revize | ||
lnxspectrum:hgfx [2020/07/28 12:11] – lanex | lnxspectrum:hgfx [2022/07/18 18:32] – lanex | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | =====HGFX Graphics===== | + | =====HGFX/Q Graphics===== |
+ | |||
+ | Poznámka: **HGFX/Q** je vývojová verze **HGFX**. Je zde spousta odlišností od verze **HGFX** v **eLeMeNt** a **MB03+**. | ||
**HGFX** je alternativní grafický systém, navržený pro ZX Spectrum. Je možné ho zrealizovat pomocí FPGA, a připojit k reálnému ZX Spectrum jako interface. Systém zvyšuje výkonnost celého grafického rozhraní, ale také grafické možnosti celého ZX Spectra. | **HGFX** je alternativní grafický systém, navržený pro ZX Spectrum. Je možné ho zrealizovat pomocí FPGA, a připojit k reálnému ZX Spectrum jako interface. Systém zvyšuje výkonnost celého grafického rozhraní, ale také grafické možnosti celého ZX Spectra. | ||
- | Na rozdíl od **LnxBlitteru** je celkově jednodušší, | + | Na rozdíl od **LnxBlitteru** je celkově jednodušší, |
- | Velikost jednoho Bufferu je tedy 153600 Bajtů. To je pro ZX Spectrum hodně dat, Buffery jsou proto jen **Write Only**. Rozlišení 640x240 je pro případ použití HiRes režimu. Do Bufferů se dá kreslit jak v HiRes režimu, tak v LowRes současně. Systém nemá žádné problémy s Attributy, jako klasická ZX videoram. Co pixel, to barva, ať je kdekoliv. | + | Velikost jednoho Bufferu je tedy 153600 Bajtů. To je pro ZX Spectrum hodně dat, Buffery jsou proto ze strany Z80 jen **Write Only**. Rozlišení 640x240 je pro případ použití HiRes režimu. Do Bufferů se dá kreslit jak v HiRes režimu, tak v LowRes současně. Systém nemá žádné problémy s Attributy, jako klasická ZX videoram. Co pixel, to barva, ať je kdekoliv. |
Defaultně je systém nastavený na rozlišení 256x192. Dá se ale zápisem do registru povolit kreslení i v prostoru Borderu. V takovém případě bude rozlišení 320x240. Nebo i HiRes, pak máme možnost rozlišení 640x240. | Defaultně je systém nastavený na rozlišení 256x192. Dá se ale zápisem do registru povolit kreslení i v prostoru Borderu. V takovém případě bude rozlišení 320x240. Nebo i HiRes, pak máme možnost rozlišení 640x240. | ||
Řádek 23: | Řádek 25: | ||
Druhý je **Ink**. Tam kde je v zapisovaném bajtů logická jednička se do Bufferu zapíše právě vybraná indexová barva. Kde jsou logické nuly, se nic nemění. | Druhý je **Ink**. Tam kde je v zapisovaném bajtů logická jednička se do Bufferu zapíše právě vybraná indexová barva. Kde jsou logické nuly, se nic nemění. | ||
- | Třetí je **Copy**. Je to speciální funkce, díky které je možný například Vertikální Scroll v Basicu, nebo dokonce Horizontální Scroll o libovolný počet pixelů. Funguje to tak, že při čtení z Videoram se sice načte obsah paměti do registru, ale interně se v HGFX vyzvedne do odkládacího prostoru obsah 16 pixlů. ZX při zápisu jednoho bajtu zapíše 8 pixlů naráz. To odpovídá šířce 16 pixlů v HiRes, proto interně HGFX pracuje s 16 pixely. Při opětovném zápisu do Videoram se do Bufferu v HGFX zapíše na nové místo právě těchto 16 pixelů. Tím dojde k překopírování obsahu v Bufferu. Můžu tedy například nastavit ofset na 1, načíst obsah z adresy 16384 a znovu zapsat na adresu 16384. Tím se mi obsah Videoram posune o jeden pixel doleva. Takový zápis proběhne pouze 1x, při dalším zápisu do Videoram se chová | + | Třetí je **Copy**. Je to speciální funkce, díky které je možný například Vertikální Scroll v Basicu, nebo dokonce Horizontální Scroll o libovolný počet pixelů. Funguje to tak, že při čtení z Videoram se sice načte obsah paměti do registru, ale interně se v HGFX vyzvedne do odkládacího prostoru obsah 16 pixlů. ZX při zápisu jednoho bajtu zapíše 8 pixlů naráz. To odpovídá šířce 16 pixlů v HiRes, proto interně HGFX pracuje s 16 pixely. Při opětovném zápisu do Videoram se do Bufferu v HGFX zapíše na nové místo právě těchto 16 pixelů. Tím dojde k překopírování obsahu v Bufferu. Můžu tedy například nastavit ofset na 1, načíst obsah z adresy 16384 a znovu zapsat na adresu 16384. Tím se mi obsah Videoram posune o jeden pixel doleva. Takový zápis proběhne pouze 1x, při dalším zápisu do Videoram se chová |
+ | |||
+ | ===Obsluha celé Videoram=== | ||
+ | |||
+ | Jak obsluhovat celou Videoram, když je jen 6144 B velká? Systém funguje na principu " | ||
+ | |||
+ | -Nejprve inicializace HGFX, Videoram na adresu 16384, linearní režim. | ||
+ | -Nastavíme pozici razítka na 100,100 (v pixelech) | ||
+ | -do videoram na adresu 16384 a 16385 vykreslíme první linku spritu. | ||
+ | -nastavíme znovu pozici razítka, nyní 100,101 | ||
+ | -do videoram na adresu 16384 a 16385 vykreslíme druhou linku spritu. | ||
+ | |||
+ | Nastavování pozice razítka opakujeme pro všechny linky spritu. | ||
+ | Pro kreslení není ze strany Z80 potřeba žádná rotace, to šetří spousta strojového času. Vykreslování funguje na principu nastavení absolutní X,Y pozice na obrazovce, a následné vykreslení do videoram na první pozici, například 16384. Bajt se vykreslí na pozici nastavených X,Y, nikoliv na ZX pozici 0,0. X je 10 bitová hodnota, aby pokryla celý možný rozsah v HiRes, 0-639. Y si vystačí s 8 bity, 0-239. | ||
+ | Pro případ že chceme vykreslovat druhou linku spritu nemusíme nutně měnit Y a vykreslovat na stejnou adresu jako předtím (16384). Videoram má 6144 bajtů. Druhou linku můžeme vykreslovat bez změny Y, na adrese 16416, nebo v případě nelineárního módu na adresu 16640. Stejná adresa jako adresa druhé linky v originální Videoram ZX. Díky tomu bude možné upravit stávající software na používání HGFX enginu, nebo barevné možnosti používat s běžným Basicem. | ||
+ | ===Maskování=== | ||
+ | Maska v systému říká, kterých bitů v indexové videoram se změna týká. Když například bude na prvním pixelu nastavena indexová barva 128, nastavíme masku na hodnotu 3, a zapíšeme novou barvu s indexovou hodnotou 255, nová barva bude indexová barva 131. Změní se jen první 2 bity, ostatní zůstanou původní. | ||
+ | Maska má vliv na všechny režimy, Clear/ | ||
lnxspectrum/hgfx.txt · Poslední úprava: 2022/07/18 18:36 autor: lanex