Регистр сравнения линий (Line Compare Register - LCR) (индекс18h)
Позволяет разделить изображение на две независимые части. При этом одну из них можно свертывать. Содержимое другой части экрана остается на месте.
Регистр LCR используют совместно с регистром начального адреса. Когда счетчик горизонтальных линий сканирования достигает значения, записанного в регистре LCR, происходит сброс счетчика адреса регенерируемой видеопамяти в ноль. В результате экран разбивается на две части. В верхней части экрана отображаются данные, на которые указывает регистр начального адреса, а в нижней - данные, находящиеся в начале видеопамяти. Процесс разделения экрана иллюстрируется рисунком 4.7.
PICTURE._FIG_39.PCX;6";4.308";PCX
Рисунок 4.7 Процесс разделения экрана
Изображение в верхней части экрана можно перемещать, изменяя содержимое регистра начального адреса.
У видеоадаптера EGA регистр сравнения линий имеет 9 разрядов. Девятый бит регистра доступен через дополнительный регистр (OVR) контроллера ЭЛТ. Регистр сравнения линий видеоадаптера VGA имеет 10 разрядов. Десятый бит регистра LCR расположен в регистре MSLR.
При изменении режима работы видеоадаптера, BIOS записывает в регистр сравнения линий значение 0FFh.
Программа, представленная ниже, выводит на экран монитора 25 строк текста, а затем, после нажатия любой клавиши, разделяет изображение на две части.
Листинг 4.9. Файл SCRSPLIT.C
#include <dos.h>
#include <stdio.h>
#include <conio.h>
void __pascal __far Split(unsigned);
void main(void);
// Главная функция
void main(void) {
int i;
for(i = 0; i < 25; i++)
printf("Строка номер %d.\n",i);
getch();
// Разделяем экран по линии 200
Split(200);
// Ожидаем нажатие на клавиши клавиатуры
getch();
// После завершения программы значения регистров не
// восстанавливеются!
}
Для разделения изображения на экране монитора предназначена функция Split. Исходный текст этой функции представлен в листинге 4.10.