Obsah
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) - 512×192 pixels / 64×48 attributes / Spectrum attributes |
02 | HiResindeXedColour(HRXC) - 512×192 pixels / 64×48 attributes / indeXedColours |
03 | HGFX 1, 256×192 pixels, two buffers, 256 colors, ZX / linear memory layout |
04 | HGFX 2, 512×192 pixels, one buffer, 256 colors, linear memory layout |
05 | HGFX 3, 512×384 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 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