Регистры контроллера ЭЛТ управляют сигналами синхронизации, необходимыми для формирования растра, определяют формат данных на экране, форму курсора, а также для видеоадаптеров CGA и EGA управляют световым пером.
Большинство из этих регистров не предсталяют интереса для их непосредственного программирования. Более того, их неправильное использоване может послужить причиной физического разрушения дисплея. Поэтому мы подробно рассмотрим лишь наиболее полезные и безопасные регистры контроллера.
Назначение и формат ряда регистров контроллера ЭЛТ различаются для видеоадаптеров EGA, VGA и для видеоадаптеров MDA, Hercules и CGA. Кроме того, они могут различаться и для видеоадаптерв одного типа, но разных фирм-производителей. В результате могут возникнуть проблем совместимости на компьютерах, оснащенных другим видеоадаптером. Если вы все-таки решитесь их перепрограммировать, то обращайтесь к описанию вашего адаптера.
Регистры контроллера ЭЛТ составляют самую многочисленную группу регистров видеоадаптеров. Для видеоадаптеров EGA и VGA группа содержит 24 регистра.
В таблице 8.9 приведен список всех регистров контроллера ЭЛТ и их индексы, используемые для доступа к ним.
Индекс | Регистр контроллера ЭЛТ |
0 | общая длина линии горизонтальной развертки (Horizontal Total Register - HTR) |
1 | длина отображаемой части горизонтальной развертки (Horizontal Display Enable End Register - HDER) |
2 | начало импульса гашения луча горизонтальной развертки (Start Horizontal Blank Register - SHBR) |
3 | конец импульса гашения луча горизонтальной развертки (End Horizontal Blank Register - EHBR) |
4 | начало импульса горизонтального обратного хода луча (Start Horizontal Retrace Register - SHRR) |
5 | конец импульса горизонтального обратного хода луча (End Horizontal Retrace Register - EHRR) |
6 | число горизонтальных линий растра (Vertical Total Register - VTR) |
7 | дополнительный регистр (Overflow Register - OVR) |
8 | предварительная установка горизонтальной развертки (Preset Row Scan Register - PRSR) |
9 | высота символов текста (Max Scan Line Register - MSLR) |
0Ah | начальная линия курсора (Cursor Start Register - CSR) |
0Bh | конечная линия курсора (Cursor End Register - CER) |
0Ch | старший байт начального адреса (Start Address Register - SAR, high byte) |
0Dh | младший байт начального адреса (Start address Register - SAR, low byte) |
0Eh | старший байт позиции курсора (Cursor Location Register - CLR, high byte) |
0Fh | младший байт позиции курсора (Cursor Location Register - CLR, low byte) |
10h | начало обратного вертикального хода луча (Vertical Retrace Start Register - VRSR) |
11h | конец обратного вертикального хода луча (Vertical Retrace End Register - VRER) |
10h | старший байт адреса светового пера (Light Pen Address Register - LPAR, high byte) |
11h | младший байт адреса светового пера (Light Pen Address Register - LPAR, low byte) |
12h | начало гашения вертикальной развертки (Vertical Display End Register - VDER) |
13h | логическая ширина экрана (Offset Register - OFR) |
14h | положение подчеркивания символа (Underline Location Register - ULR) |
15h | начало импульса гашения вертикальной развертки (Start Vertical Blank Register - SVBR) |
16h | конец импульса гашения вертикальной развертки (End Vertical Blank Register - EVBR) |
17h | управление режимом (Mode Control Register - MCR) |
18h | регистр сравнения линий (Line Compare Register - LCR) |
Таблица 8.9 Регистры EGA и VGA контроллера ЭЛТ.
В отличие от внешних регистров, адресация к регистрам контроллера ЭЛТ происходит через два порта. В первый порт (индексный) записывается индекс регистра, к которому осуществляетя доступ, а через второй порт (порт данных) можно производить обмен данными (запись или чтение). Заметим, что у видеоадаптера EGA большинство регистров контроллера ЭЛТ доступны только для записи.
У видеоадаптеров MDA и Hercules индексный порт имеет адрес 3B4h, а порт данных - адрес 3B5h. Для CGA адреса портов другие. Индексный порт имеет адрес 3D4h, а порт данных - адрес 3D5h. Адреса портов контроллера ЭЛТ для видеоадаптеров EGA и VGA зависят от режима работы видеоадаптера (монохромный или цветной). В монохромном режиме адрес порта индексного регистра равен 3B4h, а регистра данных - 3B5h. В цветном режиме адреса соответственно равны 3D4h и 3D5h:
Тип адаптера | Адрес порта индексного регистра | Адрес порта регистра данных |
MDA и Hercules | 3B4h | 3B5h |
CGA | 3D4h | 3D5h |
EGA и VGA (монохромный режим) | 3B4h | 3B5h |
EGA и VGA (цветной режим) | 3D4h | 3D5h |
Таблица 8.10 Адреса портов индексного регистра и регистра данных.
Использование видеоадаптерами различного адресного пространства для портов контроллера ЭЛТ необходимо, чтобы создать возможность одновременного подключения к компьютеру двух видеоадаптеров.
Адрес порта индексного регистра записан в области переменных видеофункций BIOS, по адресу 0000:0463. Приведем фрагмент программы, определяющей адрес индексного порта контроллера ЭЛТ: ; устанавливаем es на нулевой сегмент xor ax,ax mov es,ax ; записываем в dx адрес порта индексного регистра контроллера ЭЛТ mov dx,es:[463]
Так как адреса портов индексного регистра и регистра данных контроллера ЭЛТ является смежными, то адрес порта регистра данных можно получить, прибавив единицу к адресу порта индексного регистра.