Uživatelské nástroje

Nástroje pro tento web


lnxspectrum:hgfx

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verzeObě strany příští revize
lnxspectrum:hgfx [2020/08/14 19:37] lanexlnxspectrum:hgfx [2020/08/14 19:53] lanex
Řádek 23: Řádek 23:
 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á stejně jako režim **Ink**, dokuď nedojde k dalšímu čtení z Videoram.+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á podobně jako režim **Ink**, dokuď nedojde k dalšímu čtení z Videoram. Jediný rozdíl oproti Ink režimu je že zapisované logické nuly se resetují na indexovou barvu 0. Vynuluje tedy okolní obsah v bajtu. Díky tomu funguje perfekt například běžný Basicovský scroll textu nahoru.
  
 ===Obsluha celé Videoram=== ===Obsluha celé Videoram===
Řádek 29: Řádek 29:
 Jak obsluhovat celou Videoram, když je jen 6144 B velká? Systém funguje na principu "razítek". Díky tomu se dá vykreslovat všude po celé HiRes ploše, ale i rychle vykreslovat větší počet spritů. Jako příklad postupu si popíšeme vykreslení spritu: Jak obsluhovat celou Videoram, když je jen 6144 B velká? Systém funguje na principu "razítek". Díky tomu se dá vykreslovat všude po celé HiRes ploše, ale i rychle vykreslovat větší počet spritů. Jako příklad postupu si popíšeme vykreslení spritu:
  
--Nejprve inicializace HGFX, Videoram na adresu 32768, linearní režim.+-Nejprve inicializace HGFX, Videoram na adresu 16384, linearní režim.
 -Nastavíme pozici razítka na 100,100 (v pixelech) -Nastavíme pozici razítka na 100,100 (v pixelech)
--do videoram na adresu 32768 32769 vykreslíme první linku spritu.+-do videoram na adresu 16384 16385 vykreslíme první linku spritu.
 -nastavíme znovu pozici razítka, nyní 100,101 -nastavíme znovu pozici razítka, nyní 100,101
--do videoram na adresu 32768 32769 vykreslíme druhou linku spritu.+-do videoram na adresu 16384 16385 vykreslíme druhou linku spritu.
  
 Nastavování pozice razítka opakujeme pro všechny linky spritu. Nastavování pozice razítka opakujeme pro všechny linky spritu.
Řádek 39: Řádek 39:
 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 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.
  
  
lnxspectrum/hgfx.txt · Poslední úprava: 2022/07/18 18:36 autor: lanex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki