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í verze
Předchozí verze
Poslední revizeObě strany příští revize
lnxspectrum:hgfx [2020/07/28 12:11] lanexlnxspectrum:hgfx [2022/07/18 18:35] lanex
Řádek 1: Řádek 1:
-=====HGFX Graphics=====+=====HGFX/Q Graphics=====
  
-**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.+Poznámka: **HGFX/Q** je vývojová verze **HGFX**. Je zde spousta odlišností od verze **HGFX** v **eLeMeNt** a **MB03+**.
  
-Na rozdíl od **LnxBlitteru** je celkově jednodušší, a přitom výkonnější.  Skládá se ze 3 částí. První část jsou dva Buffery / Videoram, které jsou nad původní ZX videoramKterá se zobrazuje a do které se zapisuje se dá řídit pomocí registrů. Jejich rozlišení je 640x240 pixelůkaždý pixel může mít 1 barvu z 256 indexových barev. Defaultně je nultý index průhlednost, tam se zobrazuje původní videoram ZX. +**HGFX/Q** 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 interfaceSystém zvyšuje výkonnost celého grafického rozhraníale také grafické možnosti celého ZX Spectra.
  
-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.+Na rozdíl od **LnxBlitteru** je celkově jednodušší, a přitom výkonnější.  Skládá se ze 3 částí. První část jsou dva Buffery / Videoram, které jsou nad původní ZX videoram. Která se zobrazuje a do které se zapisuje se dá řídit pomocí registrů. Jejich rozlišení je 640x240 pixelů, každý pixel může mít 1 barvu z 256 indexových barev. Defaultně je nultý index průhlednost, tam se zobrazuje původní obsah videoram ZX.  
 + 
 +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á 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 perfektně například běžný Basicovský scroll textu nahoru. 
 + 
 +===Obsluha celé Videoram=== 
 + 
 +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 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/Ink/Copy. Dokonce i na nulování a kopírování bufferu. Tam se odchytí hodnota při spuštění, a tato hodnota je stejná pro celý proces. Na pozadí tedy probíhá čištění bufferu, ale s druhým bufferem již můžeme pracovat s jinou maskou.
  
lnxspectrum/hgfx.txt · Poslední úprava: 2022/07/18 18:36 autor: lanex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki