======Porty HGFX====== **HGFX** používá několik portů, víceméně se zde režim jen zapíná, a více se na porty nesahá. Pro rychlejší ovládání **HGFX** se používají Registry. Porty najdeme v **General** sadě **ZXI**. ====gZxi_01h - Extra graphics modes==== *Na tomto portu se zapínají různé grafické režimy, které **HGFX** podporuje. ^Hodnota^Popis^ |00|Classic ZX | |01|HiResColour(HRC) - 512x192 pixels / 64x48 attributes / Spectrum attributes | |02|HiResindeXedColour(HRXC) - 512x192 pixels / 64x48 attributes / indeXedColours | |03|**HGFX 1**, 256x192 pixels, two buffers, 256 colors, ZX / linear memory layout | |04|**HGFX 2**, 512x192 pixels, one buffer, 256 colors, linear memory layout | |05|**HGFX 3**, 512x384 pixels, one buffer, 16 colors, linear memory layout | ====gZxi_20h - General settings==== *Nastavuje hlavní parametry. ^bit^Popis^ |b0|memory layout: 0 - standard ZX; 1 - linear| |b1|border colour: 0 - standard ZX; 1 - indexed (index 0-7)| |b2|ZX transparency: 0 - enable; 1 - disable| ====gZxi_21h - high byte of Videoram area==== *Ukazatel na adresu Videoram 6144 B. |40h - default| ====gZxi_22h - high byte of Registers area==== *Ukazatel na adresu kde se nacházejí Registry. |5Bh - default| ====gZxi_23h - high byte of Indexed colour table area==== *Ukazatel na adresu kde se nachází Indexovaná paleta barev, 256 barev v pořadí BGR, 768 B. |5Ch - default| ====gZxi_2Fh - status==== *Zde se čte status HGFX při spuštěné funkci FastErase nebo FastCopy. ^bit^Popis^ |b0|0 - ready; 1 - busy| ======Registry HGFX====== Pro ovládání rychlejších funkcí **HGFX** jsou použity registry. Je to malý blok v paměti, do kterého se dají zapisovat hodnoty rychleji pomocí //LD (REG),A//, //LD (HL),A// nebo dokonce //LD (REG),HL//. Pokud jsou registry umístěny v RAM, je možné jejich hodnoty i číst a použít tak třeba //INC (HL)//. Podtržené názvy jsou zkrácené verze pro používání v ASM. ====00 - Video parameters==== ***__VParam__**, nastavuje který Buffer (A nebo B) je viditelný, aktivní pro čtení, aktivní pro zápis. Pokud používáme režim HiRes (//gZxi_01h - Extra graphics modes// = 04), bude přístupný vždy pouze Buffer A. ^bity^Popis^ |b0|0 - Zobrazovat Buffer A; 1 - Zobrazovat buffer B| |b1|0 - Zapisovat do Bufferu A; 1 - Zapisovat do Bufferu B| |b2|0 - Číst z Bufferu A; 1 - Číst z Bufferu B| ====01h - Planar Mode==== ***__PMode__**, zde se nastaví pracovní režim pro zápis do Bufferů. ^Hodnota^Jméno^Popis^ |00|INK Mode|Tento režim zapíše barvu pouze tam, kde se do videoram zapisuje z pohledu Z80 bitová 1. Jaká barva, to zaleží na nastavení **SColor** a **PMask**. Kde se zapisuje bitová 0, se nic nemění.| |01|COPY Mode|Pokud nepředcházelo čtení z Bufferu (nazveme to //**cInk**//), chová se podobně jako INK. Ale tam kde se zapisuje z pohledu Z80 do videoram bitová 0 se nastaví Indexovaná barva dle registru 0Eh Paper Color Index. Pokud ale předcházelo čtení z Bufferu, uloží se do interní Cache hodnoty 8 pixlů, jednotlivé Indexy barev, které je možné při příštím zápisu opět do Bufferu zapsat. Čtená hodnota (z pohledu Z80) musí být stejná jako zapisovaná, jinak se provede pouze //**cInk**//.| |02|ATTR Mode|Tento režim zapíše podobně jako režim **INK Mode** barvu **SColor** a **PMask** tam, kde se do videoram zapisuje z pohledu Z80 bitová 1. Kde se zapisuje bitová 0, se nastaví barva definovaná pomocí **SPColor**. a **PMask**.| ====02h - Advance Commands==== ***__ACom__**, Spouští interní CopyAll nebo EraseAll. Během provádění těchto úkolů procesor Z80 nadále běží a program normálně pokračuje. Není však možné používat jakýmkoliv způsobem Buffery HGFX. Při takovém pokusu budou zapisované hodnoty ignorovány. Proto je někdy nutné vyčkat na dokončení. Jestli je nebo není hotov zjistíme na portu **[[hgfx:porty_registry#gzxi_2fh_-_hgfx_status|Status]]**. ^Hodnota^Název^Popis^ |00|NOP|| |01|COPY_ALL|Zkopíruje velice rychle celý obsah zdrojového Bufferu do cílového Buferru.| |02|ERASE_ALL|Smaže velice rychle celý cílový Buffer.| ====03h - Ink Color Index==== ***__SColor__**, v tomto registru se nastavuje kterou Indexovanou barvou se bude pracovat. Hodnota může být v rozsahu 0-255. Zápis této barvy do Bufferu je ovlivněn nastavením registru PMask. ====04h - Planar Mask==== ***__PMask__**, v tomto registru nastavujeme se kterými vrstvami (Planar) budeme pracovat. Indexová barva v Bufferu se skládá z 8 bitů. Je tedy možná hodnota 0-255. Každý bit se nachází v jedné Vrstvě (0-7). Každá vrstva je zastoupena jedním bitem v registru PMask. Nastavíme-li 255, budeme měnit hodnoty ve všech vrstvách. Pokud nastavíme na 3, můžeme měnit hodnoty jen v prvních dvou vrstvách. Ostatní zůstanou nedotčeny. Pokud bude PMask = 3 a budeme zapisovat dle SColor barvu 255, ovlivní se pouze první 2 vrstvy (binárně 00000011). ====0Dh Advanced Graphics Feature==== ***__AGF__**, v tomto registru si můžeme zapnout speciální zobrazovací metody FILL a HAM Mode. ^Hodnota^Jméno^Popis^ |00|Standartní Režim|Klasický režim 256 indexovaných barev| |01|FILL Režim|Režim pro podporu vektorů| |02|HAM Režim|Režim pro vícebarevné zobrazení| ====0Eh Paper Color Index==== ***__SPColor__**, zde nastavujeme jaká indexová barva bude použíta pro PAPER při vykreslování v režimu **COPY Mode** a **ATTR mode** (viz. 01h - Planar Mode). ====0Fh Fill Planar Mask==== ***__FPMask__** určuje, kterých vrstev se bude týkat režim FILL. Ostatní se budou chovat normálním způsobem. =====Offsety===== Následujicí registry jsou Offsety. Všechny jsou 16 bitové a dovolují i záporné hodnoty (Signed). Je možné tedy nastavit i takové hodnoty jako třeba -6 nebo -32768. Jednotky jsou v Pixlech, Offsety určují jaká je poloha naší videoram v Bufferu X a Y. Pokud bude Videoram nastavená na adresu 16384, následně nastavíme D_OffsetX na 128 a D_OffsetY na 96, potom zápis na adresu 16384 bude zobrazen přesně uprostřed obrazovky. Offsety máme dva, jeden pro zápis a druhý pro čtení z Bufferu. ====05h - Destination OffsetX==== ***__D_OffX__**, cílový offset X, -32768 až 32767 ====07h - Destination OffsetY==== ***__D_OffY__**, cílový offset Y, -32768 až 32767 ====09h - Source OffsetX==== ***__S_OffX__**, zdrojový offset X, -32768 až 32767 ====0Bh - Source OffsetY==== ***__S_OffY__**, zdrojový offset Y, -32768 až 32767