![]() |
(Incompleto) MINI CORSO DI ASSEMBLER 8086 |
![]() |
LA RAM VIDEO
La Ram Video è una zona
della memoria Convenzionale di Sistema; la sua dimensione è di 128kBytes
(64kb+32Kb+32Kb), a
partire dall’indirizzo fisico A0000H fino all’indirizzo fisico BFFFFH del primo megaByte; la pratica della programmazione a basso livello consente di esprimere
questi indirizzi fisici nei corrispondenti indirizzi logici, da A000:0000 a
B800:7FFF (un indirizzo logico si esprime sempre nella forma Segmento:Offset)
infatti B8000+7FFF=BFFFF.
Questa area di memoria è divisa in 3 parti:
- nella prima (da A000:0000 a A000:FFFF) trovano posto i 64K bytes (FFFF=65535) destinati
alla gestione del video in Modo Grafico. L'unità di informazione è il pixel
(semplificando, ciascun byte (8 bit) di quest'area può rappresentare:
a) un solo
punto grafico (pixel) quando il numero di colori che questo può assumere è 28=256.
b) otto pixel, nel qual caso ciascuno di essi possa assumere solo 2
colori (bianco o nero, cioè acceso o spento).
c) due
punti grafici (pixel) quando il numero di colori che questo può assumere è 24=16.
- nella seconda (da B000:0000 a B000:7FFF) sono disponibili i 32K bytes dedicati
al modo Monocromatico, ora in disuso.
- nell'ultima parte (da B000:8000 a B000:FFFF) sono allocati i 32K bytes
necessari alla gestione del video in Modo Testo. L'unità di informazione è il
carattere (vedremo che per descrivere le caratteristiche di ciascuno di essi
saranno necessari 2 byte di questa area: carattere+colore).
I 32 kBytes della Ram Video destinata al Modo Testo sono divisi in 8 zone uguali, dette Pagine Video, ciascuna di 4 kBytes (4096 bytes). Ciascuna delle 8 Pagine Video, numerate da 0 a 7, copre quindi l'area di memoria Ram corrispondente agli indirizzi:
Numero Pagina |
Primo Address |
Range Indirizzi Fisici |
Pagina 0 |
B800:0000 |
da B8000 a B8FFF |
Pagina 1 |
B800:1000 |
da B9000 a B9FFF |
Pagina 2 |
B800:2000 |
da BA000 a BAFFF |
Pagina 3 |
B800:3000 |
da BB000 a BBFFF |
Pagina 4 |
B800:4000 |
da BC000 a BCFFF |
Pagina 5 |
B800:5000 |
da BD000 a BDFFF |
Pagina 6 |
B800:0600 |
da BE000 a BEFFF |
Pagina 7 |
B800:0700 |
da BF000 a BFFFF |
Solo la Pagina 0 (cioè i primi 4096 bytes di questa area) viene letta continuamente dalla scheda video e il suo contenuto viene interpretato e tradotto direttamente sul monitor. Ogni modifica (scrittura) eseguita sui primi 4000 bytes si traduce in una modifica in tempo reale sull'aspetto del testo mostrato sul monitor. Possiamo dunque concludere: solo quello che viene scritto in Pagina 0 produce effetto a video.
Le
altre 7 pagine alternative ci offrono la
possibilità di "salvare" in esse tutta o in parte la Pagina 0; questa operazione
risulta indispensabile per esempio quando si desidera scrivere un messaggio di
avviso o di errore sull'immagine corrente, senza perdere il testo originale
quando il messaggio viene tolto. E' sufficiente infatti salvare l'area coperta dal messaggio in una Pagina
alternativa prima di stampare il messaggio, per poi recuperarla in Pagina 0 non
appena il messaggio è stato letto.
Rimane
ora da chiarire in che
modo i 4096 bytes di una pagina vengono usati.
In Modo Testo la RamVideo viene utilizzata a livello di byte (piuttosto che a livello di bit,
tipico della gestione grafica). Le informazioni necessarie per colorare i 128
pixel (8*16) punti necessari per "disegnare" sullo schermo un carattere, sono
dunque affidate a 2 bytes:
- uno per il codice Ascii del carattere visualizzato;
- uno per il codice del colore (detto anche attributo) del carattere. Gli otto bit
sono suddivisi in 3 campi, secondo il seguente schema:
bit7 |
bit6 |
bit5 |
bit4 |
bit3 |
bit2 |
bit1 |
bit0 |
flash |
Sfondo |
Primo Piano |
|||||
F |
S2 |
S1 |
S0 |
P3 |
P2 |
P1 |
P0 |
Quindi ecco i 16 colori di primo piano
bit3 |
bit2 |
bit1 |
bit0 |
Primo Piano |
||
0 |
0 |
0 |
0 |
Black |
0 |
Nero |
0 |
0 |
0 |
1 |
Blue |
1 |
Blu |
0 |
0 |
1 |
0 |
Green |
2 |
Verde |
0 |
0 |
1 |
1 |
Cyan |
3 |
Azzurro |
0 |
1 |
0 |
0 |
Red |
4 |
Rosso |
0 |
1 |
0 |
1 |
Magenta |
5 |
Magenta |
0 |
1 |
1 |
0 |
Brown |
6 |
Marrone |
0 |
1 |
1 |
1 |
LightGray |
7 |
Bianco |
1 |
0 |
0 |
0 |
darkGray |
8 |
Grigio |
1 |
0 |
0 |
1 |
LightBlue |
9 |
Blu Elettrico |
1 |
0 |
1 |
0 |
LightGreen |
10 |
Verde Chiaro |
1 |
0 |
1 |
1 |
LightCyan |
11 |
Celeste |
1 |
1 |
0 |
0 |
Ligh3d |
12 |
Rosa |
1 |
1 |
0 |
1 |
LightMagenta |
13 |
Magenta Chiaro |
1 |
1 |
1 |
0 |
Yellow |
14 |
Giallo |
1 |
1 |
1 |
1 |
White |
15 |
Bianco Brillante |
e gli 8 di sfondo
bit6 |
bit5 |
bit4 |
Sfondo |
||
0 |
0 |
0 |
Black |
0 |
Nero |
0 |
0 |
1 |
Blue |
1 |
Blu |
0 |
1 |
0 |
Green |
2 |
Verde |
0 |
1 |
1 |
Cyan |
3 |
Azzurro |
1 |
0 |
0 |
Red |
4 |
Rosso |
1 |
0 |
1 |
Magenta |
5 |
Magenta |
1 |
1 |
0 |
Brown |
6 |
Marrone |
1 |
1 |
1 |
LightGray |
7 |
Bianco |
Il campo più a sinistra è formato dal solo bit7: se esso vale 1 lo sfondo viene fatto lampeggiare, mentre con bit7=0 lo sfondo appare normalmente.
I colori combinati sono mostrati nelle 2 tabelle allegate e mostrano l'aspetto di scritte nei 16 colori di primo piano possibili sugli 8 colori di sfondo possibili, con il codice esadecimale per ottenerlo: I valori esadecimali da 00H a 7FH sono quelli dei codici di colore senza flash (byte d'attributo)
00H |
01H |
02H |
03H |
04H |
05H |
06H |
07H |
08H |
09H |
0AH |
0BH |
0CH |
0DH |
0EH |
0FH |
10H |
11H |
12H |
13H |
14H |
15H |
16H |
17H |
18H |
19H |
1AH |
1BH |
1CH |
1DH |
1EH |
1FH |
20H |
21H |
22H |
23H |
24H |
25H |
26H |
27H |
28H |
29H |
2AH |
2BH |
2CH |
2DH |
2EH |
2FH |
30H |
31H |
32H |
33H |
34H |
35H |
36H |
37H |
38H |
39H |
3AH |
3BH |
3CH |
3DH |
3EH |
3FH |
40H |
41H |
42H |
43H |
44H |
45H |
46H |
47H |
48H |
49H |
4AH |
4BH |
4CH |
4DH |
4EH |
4FH |
50H |
51H |
52H |
53H |
54H |
55H |
56H |
57H |
58H |
59H |
5AH |
5BH |
5CH |
5DH |
5EH |
5FH |
60H |
61H |
62H |
63H |
64H |
65H |
66H |
67H |
68H |
69H |
6AH |
6BH |
6CH |
6DH |
6EH |
6FH |
70H |
71H |
72H |
73H |
74H |
75H |
76H |
77H |
78H |
79H |
7AH |
7BH |
7CH |
7DH |
7EH |
7FH |
I valori esadecimali da 80H a FFH
sono relativi al colore con flash (byte d'attributo)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Naturalmente la simulazione non consente di vedere i codici dei caratteri scritti nello stesso colore dello sfondo, come nero su nero, 00H, blu su blu, 11H, e così via.
E' importante sottolineare che l'azione del processore non produce alcun effetto visivo; questo compito spetta alla scheda video. I 2 dispositivi hanno in comune la Ram Video cosicché mentre la seconda ne "spazzola" il contenuto il primo può cambiarle le carte in tavola.