Úvod do HGFX - ZX-Planar 4. díl =============================================================== 4. Umístění videopaměti HGFX Videopaměť v systému HGFX se skládá ze 3 oblastí: 1. Vlastní videopaměť HGFX o velikosti 6144 bajtů. 2. Konfigurační paměťové registry. 3. Barvové registry (index 256 barev) o velikosti 768 bajtů. HGFX VideoRAM, ConfigRAM i ColourRAM můžou být umístěny v paměťovém prostoru ZX Spectra od adresy 0 kdekoliv, po násobcích 256 bajtů. Nastavuje se pomocí tří HGFX portů. g_zxi_021 high byte of VideoRAM area g_zxi_022 high byte of Registers area g_zxi_023 high byte of Indexed colour table area Počátek obrazové paměti je při zapnutí HGFX nastaven do původní zx-bitmapy, na 16384 (40h * 100h = 4000h = 16384 dec). Nastránkovat lze také do oblasti ROM (i tady zápisy do HGFX pamětí fungují). Poznámky: Hardware EleMeNt ZX/MB umisťuje nová rozšíření na již předem plánované ZXi porty. Žádný z HGFX portů tak nikdy nebude kolidovat s dosavadními, korektně naprojektovanými ZX-periferiemi. Porty a registry HGFX najdete sepsané v Programátorské referenční přiručce na stránce 128land.com v sekci Dokumenty. Stávající verze HGFX má celkem 7 řídících portů a 7 paměťových registrů, z toho čtyři registry jsou 16bitové. Outy na HGFX porty se obvykle použijí jen jednou, k zapnutí a nastavení systému (kde je videoram, kde barvy, a kde registry). Pak se na ně už nemusí sahat. Další ovládání probíhá zápisem do HGFX registrů, které jsou uloženy normálně v paměti a dají se obsluhovat, např. inkrementovat, rychleji než porty. V příručce ProgRef si povšimnete, jak paměťové registry HGFX pracují se dvěma videobuffery. Při práci s planarem žádné buffery ve videoram nenajdete, neboť se jedná o interní záležitost HGFX systému, o dvě vnitřní pracovní obrazovky zahrnující vždy data všech bitplanů. Skrze registry HGFX je však lze ovládat dokonale, mnohem lépe, než jsme zvyklí z přepínání dvou klasických zx-videoramek. 5. HiRes - "jemné" rozlišení 512*192 bodů Jsem Vám ještě neprozradil, že HGFX umí jemnou grafiku? Dokonce s barvami a na rozdíl od grafických módů HRC (HiResColour) bez jakýchkoliv atributových kompromisů. I v HiResu, stejně jako v rozlišení 256*192 platí, že co pixel, to jiná barva. HGFX je prvním systémem, co na ZX Spectru zobrazí (s malým trikem) v 6144 bajtech 256 barev v jemné grafice, s 512 pixely na řádek. Jedna linka (bod 0 až 511) zabírá v HiRes 64 bajtů (v původním rozlišení ZX Spectra 256*192 bodů, které nyní můžeme nazvat LowRes, ať už bylo nelineární nebo lineární, to je vždy 32 bajtů). HGFX HiRes linear video memory 1st line ... byte 0 to 63 2nd line ... byte 64 to 127 3rd line ... byte 128 to 191 ... Dvojnásobné rozlišení znamená, že paměťový prostor 6144 bajtů vystačí pouze pro polovinu obrazovky HiRes. K tomu, abychom ovládali celý prostor najednou, a sice vždy stejným jednoduchým způsobem, si vypomůžeme offsetem. --------------------------------------------------------------- | X,Y: 0,0 X,Y: 511,0 | | adr. 16384 512 pixels, 64 bytes adr. 16447 | | Offset Y=0 per line | | | ... ... | 96 lines | | X,Y: 0,95 96*64 = 6144 bytes X,Y: 511,95| | adr. 22464 adr. 22527 | | Offset Y=0 | --------------------------------------------------------------- | X,Y: 0,96 X,Y: 511,96| | adr. 16384 512 pixels, 64 bytes adr. 16447 | | Offset Y=96 per line | | | ... ... | 96 lines | | X,Y: 0,191 96*64 = 6144 bytes X,Y:511,191| | adr. 22464 adr. 22527 | | Offset Y=96 | --------------------------------------------------------------- Také HiRes lze kombinovat se ZX screenem a tak kupř. atributovou grafiku obohatit jemným písmem... 6. Formát indexových barev, border Barva je vyjádřena 24bitovou (3 bytes) RGB hodnotu uloženou do paměti tak, že jako první je ukládán nejnižší byte, barevná složka (B)lue. Podobně, jako to dělá Z80 CPU, když ukládá 16bitová čísla, např. číslo #4000 uloží v pořadí #00, #40. Příklad: adr - hodnota blue adr+1 - hodnota green adr+2 - hodnota red Můžeme také mluvit o ukládání v pořadí BGR(0-255,0-255,0-255). Originální paletu ZX Spectra nadefinujeme v HGFX takto: Colour Binary B-G-R Colour number value storage name ---------------------------------------------------- 0 0000 #000000 black 1 0001 #B60000 blue (BRIGHT 0) 2 0010 #0000B6 red 3 0011 #B600B6 magenta 4 0100 #00B600 green 5 0101 #B6B600 cyan 6 0110 #00B6B6 yellow 7 0111 #B6B6B6 white 8 1000 #000000 black 9 1001 #FF0000 blue (BRIGHT 1) 10 1010 #0000FF red 11 1011 #FF00FF magenta 12 1100 #00FF00 green 13 1101 #FFFF00 cyan 14 1110 #00FFFF yellow 15 1111 #FFFFFF white Uložení v paměti: DATA 0,0,0 ; black DATA 182,0,0 ; blue (no bright) DATA 0,0,182 ; red (no bright) DATA 182... ; magenta (no bright) Port 254 standardně slouží k výběru barvy okraje obrazovky ze základních 8 barev (bez brightu). Pokud se v HGFX zapne "indexová barva v borderu", port 254 určuje, která barva uložená v některém z prvních osmi barevných indexů bude barvou borderu. Příště - a asi už naposledy pro úplné HGFX začátečníky - začneme o tom nejlepším... o kouzlením s HGFX pomocí funkcí (žádný složitý blitter ani dma to ale nebude).