Предыдущий раздел | УПРАВЛЕНИЕ УСТРОЙСТВАМИ БЕЗ ПРЕРЫВАНИЙ | Следующий раздел |
Видеопамять в 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. Содержимое видеопамяти
Предыдущий раздел | В начало | Следующий раздел |