символа и их атрибутов в видеобуфере, что приводит к практически мгновенному обновлению
содержимого экрана.
При желании можно считать весь буфер "виртуальным экраном", содержащим, например,
для емкости видеобуфера 16 Кбайт 102 текстовые строки. Когда видеобуфер полностью заполнен
текстом, можно почти мгновенно вывести на экран любые 25 смежных строк.
В адаптере MDA видеобуфер занимает адресное пространство от B000:0000h до
B000:0FFFh и его нельзя изменить. Видеобуфер адаптера CGA занимает адресное пространство от
B800:0000h до B800:3FFFh и также не допускает изменения адреса. Видеобуферы адаптеров EGS
и VGA допускают отображение на четыре области адресного пространства в зависимости от
состояния вспомогательного регистра контроллера: A000:0000h – B000:FFFFh; A000:0000h –
A000:FFFFh; B000:0000h – B000:7FFFh и B800:0000h – 7FFFh. Видеобуфер 64 Кбайт адаптера
MCGA занимает область адресов от A000:0000h до A000:FFFFh. Второй видеобуфер емкостью 32
Кбайт по начальному адресу отображается на адресный диапазон B800:0000h – B800:7FFFh
видеобуфера адаптера CGA.
При работе с постраничной организацией видеобуфера необходимо помнить о
существовании в области данных дисплея по адресу 0040:0062h переменной ACT_РAGE, значение
которой является номером текущей активной страницы, а также по адресу 0040:004Eh переменной
CRT_START, значение которой задает смещение начала выводимой области видеобуфера в
байтах. Поэтому при изменении содержимого регистров начального адреса видеобуфера
(регистры 0Ch и 00h), необходимо одновременно модифицировать обе переменные ACT_РAGE и
CRT_START.
Адресное пространство рассматриваемых видеобуферов является составной частью
адресного пространства компьютера. Поэтому к видеобуферу постоянно обращаются как схемы
регенерации адаптера в режиме считывания, так и прикладные программы (т.е. процессор) в
режиме записи/считывания. Очевидно, что при обращении к видеобуферу одновременно в
режимах записи и считывания изображение на экране монитора подвергается кратковременным
искажениям в виде “снега”. Чтобы избежать появления снега, процессор должен обращаться к
видеобуферу в те интервалы времени, когда схемы регенерации не выполняют операций
считывания, т.е. когда электронный луч либо находится за кадром, либо выполняет операции
обратного хода.
Фиксация этих временных интервалов осуществляется схемами CRTC и отображается на
содержимом битов разрешения ввода/вывода программно доступного регистра состояния
контроллера. В конце каждой строки развертки ввод/вывод разрешен в течение 7 мкс, а по
окончании последней строки развертки в кадре – в течение около 4 мкс. Этого времени достаточно
для пересылки примерно 1200 байт информации в пределах одного кадра при частоте
синхронизации 4.77 мгц, что используется на практике для подавления “снега”.
Вместе с уже рассмотренной функцией контроллера CRTC по организации
многостраничного режима работы видеосистем и подавления помех типа “снега”, в текстовых
режимах данный контроллер обеспечивает управление формой и позицией аппаратного курсора на
экране. Форму курсора определяет содержимое двух регистров контроллера, задающее верхнюю и
нижнюю строки развертки в символьной позиции, нумерация которых выполняется с нуля сверху
вниз. При достижении нижней строки происходит “наворачивание курсора” на верхнюю строку.
Позиция курсора задается также с помощью двух регистров контроллера в которых находится
смещение относительно базового видеобуфера (см. выражение [2.1]).
Во всех видеосистемах фирмы IBM формой курсора управляют регистры 0Ah и 0Bh
контроллера CRTC, в которых младшие биты определяют верхнюю и нижнюю строки развертки
формируемого курсора (рис. 2.12 б)). Таким образом, для задания формы курсора или его
изменения достаточно запрограммировать оба регистра. На рис. 2.12 а) приведены примеры
возможных форм курсора на символьной матрице размерами 8∗8.
На рис. 2.12 а) приведены примеры возможных форм курсора на символьной матрице 8∗8,
а на рис. 2.12 б) – формат этих регистров.
Содержимое битов 5, 6 регистра 0Ah служит для управления курсором и имеет следующий
смысл:
00 – режим немерцающего курсора;
01 – вывод курсора запрещен;