(Incompleto) MINI CORSO DI ASSEMBLER 8086

(tratto dal sito:http://www.giobe2000.it/HW/Ramvideo/index.htm)

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)
 

80H

81H

82H

83H

84H

85H

86H

87H

88H

89H

8AH

8BH

8CH

8DH

8EH

8FH

90H

91H

92H

93H

94H

95H

96H

97H

98H

99H

9AH

9BH

9CH

9DH

9EH

9FH

0A0H

0A1H

0A2H

0A3H

0A4H

0A5H

0A6H

0A7H

0A8H

0A9H

0AAH

0ABH

0ACH

0ADH

0AEH

0AFH

0B0H

0B1H

0B2H

0B3H

0B4H

0B5H

0B6H

0B7H

0B8H

0B9H

0BAH

0BBH

0BCH

0BDH

0BEH

0BFH

0C0H

0C1H

0C2H

0C3H

0C4H

0C5H

0C6H

0C7H

0C8H

0C9H

0CAH

0CBH

0CCH

0CDH

0CEH

0CFH

0D0H

0D1H

0D2H

0D3H

0D4H

0D5H

0D6H

0D7H

0dottoH

0D9H

0DAH

0DBH

0DCH

0DDH

0DEH

0DFH

0E0H

0E1H

0E2H

0E3H

0E4H

0E5H

0E6H

0E7H

0E8H

0E9H

0EAH

0EBH

0ECH

0EDH

0EEH

0EFH

0F0H

0F1H

0F2H

0F3H

0F4H

0F5H

0F6H

0F7H

0F8H

0F9H

0FAH

0FBH

0FCH

0FDH

0FEH

0FFH

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.