Bloky VideoRAM
Číslo bloku Bitplan VideoRAM
0E6h
0E7h
bitplan "R"
0EAh
0EBh
bitplan "G"
0EEh
0EFh
bitplan "B"

Video RAM

PP 01 poskytuje zobrazenie 256 x 256 bodov, kde každý bod môže mať jednu z ôsmych farieb. VideoRAM je rozdelená na 3 bitplany, z ktorých každý reprezentuje jednu farbovú zložku: R, G a B. Jeden bitplan zaberá v pamäti 8 kB (256 x 256 / 8 = 8192 bytov), teda dva bloky pamäte RAM. Celkom teda VideoRAM zaberá 24 kB pamäte RAM.

Organizácia VideoRAM je lineárna, čo znamená, že jednotlivé mikroriadky nasledujú v pamäti sekvenčne za sebou. Jeden mikroriadok tak zaberá 32 bytov. V jednom byte je 8 bodov, kde najvyšší 7. bit je bod v danej osmici najviac vľavo a najnižší 0. bit je najviac vpravo.

Dvojice bánk jednotlivých bitplanov sa v pamäti obvykle umiestňujú bezprostredne za sebou, takže potom offset v danom bitplane je od 0000h-1FFFh. Bázová adresa bitplanu v pamäti závisí od jeho umiestnenia prostredníctvom Organizátora pamäte. Napr. GBASIC umiestňuje bitplan G od adresy 0A000h.

Register farby (port 0C0h)
hodnota zapisovaná na port Význam
7 6 5 4 3 2 1 0
x x x x 0 x x x Režim 0
x x x x 1 C C C Režim 1 : CCC farba:
000 - čierna
001 - červená
010 - zelená
011 - žltá
100 - modrá
101 - fialová
110 - bledomodrá
111 - biela

Zápis do VideoRAM je možný v dvoch režimoch, ktoré sa nastavujú pomocou registra farby (port 0CCh).

  • Prvý režim je aktívny, ak je v registri farby bit D3=0 (na hodnote bitov D2-D0 registra nezáleží). V tomto režime sa všetky 3 bitplany VideoRAM javia ako bežná RAM pre zápis aj čitanie. Pre zápis grafickej informácie v príslušných farbách je tak nutné urobiť zápis osobitne do každého bitplanu.
  • Druhý režim je aktívny, ak je v registri farby bit D3=1. V tomto režime sa zapisuje iba do bitplanu G, ale v skutočnosti sa zápis prevedie do všetkých 3 bitplanov podľa nasledujúceho pravidla:
    • bity D2-D0 registra farby určujú farbu menených bodov: D0=bitplan R, D1=bitplan G a D2=bitplan B
    • zapisovaný byte do bitplanu G určuje, ktoré body v osmici sa zmenia: nulové bity zapisovaného bytu nezmenia žiadny bitplan; jednotkové bity zapisovaného bytu zmenia bitplany podľa hodnôt bitov D2-D0


S VideoRAM je spojený ešte register rolovania obrazovky (port 0C0h). Hodnota 0-255 zapísaná na tento port vlastne určuje, ktorý mikroriadok VideoRAM sa bude zobrazovať ako prvý úplne hore. To umožňuje jednoduché a plynulé rolovanie celej obrazovky.



Nasledujúci príklad kódu ukazuje vykreslenie rovnakého 4-farebného štvorčeka 8 x 8 bodov oboma metódami:

  • zápis iba do bitplanu G - rutina DrawBox1B
  • zápis osobitne do jednotlivých bitplanov - rutina DrawBox3B

Oba prístupy majú svoje pre a proti a tak vždy záleží od samotného návrhu dát, ktoré sa majú zobrazovať. Systém využíva iba režim zápisu iba do bitplanu G, ktorý je v danom prípade vhodnejší.


;------------------------------------------------------------------------------ ; Colorbox - zobrazenie 4-farebného štvorčeka dvoma spôsobmi. ;------------------------------------------------------------------------------ cpu 8080 page 0 ;------------------------------------------------------------------------------ StartAdr equ 4000h InkColor equ 0519h ; systémová premenná - farba popredia ;------------------------------------------------------------------------------ RollReg port 0C0h ; ROLL register ColorReg port 0CCh ; farbový register MemOrgA port 0EAh ; oblasť 0A000h MemOrgB port 0EBh ; oblasť 0B000h ;------------------------------------------------------------------------------ org StartAdr ;------------------------------------------------------------------------------ Start: di xra a ; vynuluj rolovací register out RollReg call DrawBox1B ; zobrazenie cez 1 bitplan call DrawBox3B ; zobrazenie cez 3 bitplany lda InkColor ; vráť pôvodnú farbu out ColorReg ret ;------------------------------------------------------------------------------ ; Vykreslenie štvorčeka cez 1 bitplan. DrawBox1B: lxi b,32 ; offset na ďalší mikroriadok lxi h,0B00Eh ; adresa VRAM push h ; odpamätaj lxi d,0F0h*256+8+1 ; D=0F0h - vzorka vľavo hore, E=červená call DrawBox1Bx ; vykresli mvi e,8+3 ; D=0F0h - vzorka vľavo dole, E=žltá call DrawBox1Bx ; vykresli pop h ; obnov adresu VRAM lxi d,0Fh*256+8+6 ; D=0Fh - vzorka vpravo hore, E=svetlomodrá call DrawBox1Bx ; vykresli mvi e,8+7 ; D=0Fh - vzorka vpravo dole, E=biela DrawBox1Bx: mov a,e ; nastav farbu pre zapis iba do bitplanu G out ColorReg mov m,d ; vykresli vzorku do 4 mikroriadkov dad b ; pod sebou mov m,d dad b mov m,d dad b mov m,d dad b ret ;------------------------------------------------------------------------------ ; Vykreslenie štvorčeka cez 3 bitplany. DrawBox3B: xra a ; režim 0 - zápis do Bitplanov osobitne out ColorReg lxi b,32 ; offset na ďalší mikroriadok lxi h,0B011h ; adresa VRAM push h ; odpamataj mvi a,0E6h ; 1. blok bitplanu R lxi d,0F0h*256+0FFh ; D=0F0h - červená/svetlomodrá ; E=0FFh - žltá/biela call DrawBox3Bx ; vykresli do bitplanu R pop h ; obnov adresu VRAM push h ; a znovu ulož mvi a,0EEh ; 1. blok bitplanu B lxi d,0Fh*256+0Fh ; D=0Fh - červená/svetlomodrá ; E=0Fh - žltá/biela call DrawBox3Bx ; vykresli do bitplanu B pop h ; obnov adresu VRAM mvi a,0EAh ; 1. blok bitplanu G mvi e,0FFh ; D=0Fh - červená/svetlomodrá ; E=0FFh - žltá/biela ; vykresli do bitplanu G DrawBox3Bx: out MemOrgA ; namapuj daný Bitplan od 0A000h inr a out MemOrgB mov m,d ; vykresli prvú vzorku do 4 mikroriadkov dad b ; pod sebou mov m,d dad b mov m,d dad b mov m,d dad b mov m,e ; vykresli druhú vzorku do 4 mikroriadkov dad b ; pod sebou mov m,e dad b mov m,e dad b mov m,e ret ;------------------------------------------------------------------------------ end ;------------------------------------------------------------------------------