Предыдущий раздел УПРАВЛЕНИЕ УСТРОЙСТВАМИ БЕЗ ПРЕРЫВАНИЙ Следующий раздел

20.3.2. Видеопамять

Видеопамять в CGA имеет размер 16 кбайт и начинается по адресу B8000h (соответствующий логический адрес – B800h:0000h). Каждый символ занимает в видеопамяти два байта. В младшем из этих байтов содержится код ASCII символа (информация о том, что выводить), а в старшем байте – атрибуты символа (информация о том, как выводить). Структура байта атрибутов приведена на рис.71. В табл.7 приведены цвета, которые можно получить, задавая комбинации битов красного, зеленого и синего цветов, а также интенсивности.

На экране одновременно могут находиться 2000 символов (80*25). Эти символы занимают 4000 байтов (около 4 кбайт) видеопамяти. Такая область памяти, занимаемая данными для вывода экрана, называется дисплейной  страницей. Нетрудно подсчитать, что в видеопамяти CGA объемом 16Кмогут разместиться 4 дисплейных страницы. При этом данные экрана располагаются в памяти построчно (начиная с верхнего левого угла), а небольшие пустоты между страницами усекаются аппаратно (рис.72).

 

 

Рис. 71. Структура байта атрибутов

 

Аппаратура адаптера периодически считывает содержимое видеопамяти (а точнее – дисплейной страницы) и помещает его на экран. Электронный луч, управляемый системой отклонения, пробегает по экрану строка за строкой слева направо и сверху вниз (развертка). При этом контроллер включает и выключает интенсивность луча, повторяя «узор» битов в видеопамяти. За секунду электронный луч 50 раз пробегает по всему экрану (кадру). Между кадрами луч должен из правого нижнего угла вернуться в левый верхний угол. Это движение называется обратным ходом луча.

 

Т а б л и ц а 7. Генерация цвета

 

Для того чтобы вывести символ с определенными атрибутами в заданную позицию экрана, необходимо выполнить последовательность действий:

1) рассчитать смещение L относительно начала видеопамяти;

2) записать по адресу B800:L код ASCII выводимого символа;

3) записать по адресу B800:L +1 байт атрибутов выводимого символа.

Для расчета L можно воспользоваться формулой

L = (80*YT + XT)*2,

где XT ,YT – текущие координаты (столбец и строка) курсора.

 

 

Рис. 72. Содержимое видеопамяти

 


Предыдущий раздел В начало Следующий раздел