Текстовый режим

Чтобы изображение символа появилось на экране, необходимо занести в видеопамять код и атрибут символа. В текстовом режиме под каждый символ отводится 2 байта.

код цвета символа
ASCII – код

Левый байт содержит ASCII–код символа. Каждому символу соответствует свое изображение, состоящее из определенного набора пикселей, которое называется символьной матрицей. В соответствии с ASCII–кодом выбирается соответствующая символьная матрица.

 

 

Пример символьной матрицы размером 9 х 16 пикселей.

                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 

Цвет пикселей определяется согласно информации, записанной в атрибутном байте.

Правый байт - атрибутный байт содержит IRGB-код, где I – определяет наличие интенсивности цвета (I = 1 – есть интенсивность, I = 0 нет интенсивности) 7 6 5 4 3 2 1 0
I R G B I R G B

код цвета фона код цвета символа

I = 1 при задании цвета фона (7 бит – бит мерцания) означает мерцание символа.

Существуют специальные языковые средства для задания атрибутного байта. Например, в Паскале определены

- байтовая переменная TextAttr,

- процедуры TextColor(C:byte). Переменная C может принимать значения от 0 до 15 и 128 (Blink);

- TextBackGround(C:byte). Переменная C может принимать значения от 0 до 7,

которые активизируются при подключении модуля CRT (uses CRT).

 

Пример задания атрибутов символа.

 

1) ярко-красный на зеленом фоне

7 6 5 4 3 2 1 0

зеленый ярко-красный

 

В Паскале это определяется одним из следующих способом:

 

a) TextAttr:=LightRed + 16*Green;

b) TextAttr:=12+16*2;

c) TextAttr:=48;

d) TextColor:= LightRed; TextBackGround:= Green;

Write(A); {печать красного символа А на зеленом фоне}

 

 

2) зеленый, мерцающий на фиолетовом фоне

7 6 5 4 3 2 1 0

фиолетовый зеленый

 

a) TextAttr:=Green + 16*Magenta + Blink;

b) TextAttr:=2+16*5+128;

c) TextAttr:=210;

d) TextColor:= Green + Blink; TextBackGround:= Magenta;

 

3) ярко-зеленый, мерцающий на фиолетовом фоне

7 6 5 4 3 2 1 0

фиолетовый ярко-зеленый

 

a) TextAttr:=LightGreen + 16*Magenta + Blink;

b) TextAttr:=10+16*5+128;

c) TextAttr:=218;

d) TextColor:= LighGreen + Blink; TextBackGround:= Magenta;

Можно решить и обратную задачу: по числовому значению переменной TextAttr определить атрибуты символа. Например, пусть TextAttr = 207.

a) Так как 207>128, то выделим мерцание

207 - 128 = 79,

b) выделим цвет фона:

79 div 16 = 4;

c) выделим цвет символа:

79 mod 16 = 15.

Ответ: белый мерцающий на красном фоне.