Uživatelské nástroje

Nástroje pro tento web


lnxspectrum:hgfx

Toto je starší verze dokumentu!


HGFX 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.

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 640×240 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.

Velikost jednoho Bufferu je tedy 153600 Bajtů. To je pro ZX Spectrum hodně dat, Buffery jsou proto jen Write Only. Rozlišení 640×240 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í 256×192. Dá se ale zápisem do registru povolit kreslení i v prostoru Borderu. V takovém případě bude rozlišení 320×240. Nebo i HiRes, pak máme možnost rozlišení 640×240.

Druhá část systému je zápis do Bufferu. Odchytává nastavený prostor pro Videoram v paměti, a její velikost je jen 6144 Bajtů. Může být dokonce nastavena na stejnou adresu jako je videoram v ZX, díky tomu využívají nové možnosti i třeba Printové rutiny z ROM. Systém HGFX nemá žádné paměťové nároky v ZX navíc. Ideální postup kreslení s HGFX je (po nastavení indexových barev) nastavit režim (Clear/Ink/Copy), Masku na 255, vybrat požadovanou indexovou barvu, a zapsat do Videoram data stejně, jako se to děla s videoram v ZX. A nová barva je na světě!

Třetí část je jen pomocná, má jen 3 základní funkce. Jsou to: rychle vymazat vybraný Buffer, rychle překopírovat obsah z Bufferu A do Bufferu B, a třetí je totéž, ale opačně. Jediné čeho se drží je nastavení Masky při jejich aktivaci. Teoretická rychlost by měla být při nulování paměti 2400 taktů, kopírování 4800 taktů. Tyto funkce běží na pozadí, během nich Z80 běží.

Díky Masce se dá s Bufferem pracovat jako s Planes známé z jiných systémů. V takovém případě jich máme 8. Dají se tedy rozdělit například na samostatné 16 barevné pozadí, a samostatné 16 barevné popředí. Možné jsou jakékoliv kombinace.

Režimy zápisu do Bufferu

Režimy jsou 3, všechny se řídí nastavením Masky:

První je Clear. Jakýkoliv zápis do videoram má za následek nastavení všech pixelů na indexovou barvu 0, bez ohledu co se zapisuje.

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.

lnxspectrum/hgfx.1595931101.txt.gz · Poslední úprava: 2020/07/28 12:11 autor: lanex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki