Сразу после установки видеорежима на экране отображается содержимое младшей части памяти. Будем называть ее рабочей или отображаемой областью. Размер рабочей области зависит от характеристик режима и равен произведению размера строки в байтах на количество строк, помещающихся на экране.
В процессе выполнения задачи может возникнуть необходимость перемещения рабочей области в другой участок видеопамяти. Например, для просмотра отдельных частей большого рисунка или текста, который полностью не помещается на экране. В англоязычной литературе в таких случаях используется специальный термин scrolling — прокрутка, перемещение, просмотр. Механизм прокрутки используют многие приложения для Windows, oн реализуется в виде горизонтального и вертикального лифтов.
Для реализации механизма прокрутки, в первую очередь должна существовать возможность размещения в видеопамяти большого изображения. Высота изображения (количество строк) может быть произвольной, лишь бы хватило видеопамяти. Но ширина ограничена величиной, которая в документации называется logical scan line. В процессе отображения видеопамяти контроллер, отсчитав указанное в ней количество байтов, начинает выводить следующую строку на экране. Если ширина рисунка больше чем scan line, то продолжение текущей строки окажется на экране в следующей строке и изображение будет искажено. Чтобы это не произошло, надо установить значение scan line равным ширине рисунка.
В табл. 1.2 значение scan line расположено в поле 10h, оно равно произведению количества точек в строке (поле I2h табл. 1.2) на размер кода точки в байтах. В поле I9h табл. 1.2 указано количество разрядов в коде точки. Количество байтов определяется делением количества разрядов на 8.
Функция 4F06h Get/Set Logical Scan Line Length позволяет прочитать или
изменить логический размер строки, т. е. определить или изменить адрес видеопамяти, начиная с которого контроллер выводит новую строку на экран.
Перед обращением к BIOS в регистр ы помещается код подфункции: 0 для установки (записи) и 1 для чтения логического размера строки, который указывается или возвращается в регистре сх в виде количества точек.
В обоих случаях после исполнения функции в регистрах находятся следующие величины: bx — количество байтов в строке, сх — количество точек в строке, dx — максимально возможное количество строк указанного размера. Процедура BIOS вычисляет содержимое dx путем деления объема памяти, установленной на видеокарте, на размер строки в байтах. На практике содержимое dx используется крайне редко.
Начиная с VBE 2.0, введены еще два варианта запроса функции 4F06h. Код 2 в регистре ы отличается от кода 0 только тем, что в регистре сх указывается размер строки в байтах, а не в точках. Код 3 позволяет определить максимально возможный логический размер строки для установленного видеорежима. Процедура BIOS вычисляет его исходя из характеристик режима и установленного на видеокарте объема памяти.
Проверка трех видеокарт, соответствующих VBE 2.0, показала, что BIOS видеокарты VIRGE /DX /GX содержит ошибку и при указании кода 3 в регистре ы функция 4F06h выдает совершенную чушь. При кодах 0, 1 и 2 функция выполняется правильно.
Предположим, что при работе в видеорежиме с разрешением 640x480 точек установлен логический размер строки 736 точек. В таком случае при обработке каждой строки видеоконтроллер выводит на экран первые 640 точек, а остальные 96 просто пропускает. На экране будет видна левая верхняя часть изображения размером 640x480 точек. Для того чтобы увидеть его остальную часть, надо переместить рабочую область видеопамяти.
функция 4F07h Get/Set Display start устанавливает или читает координаты левого верхнего угла видимой области видеопамяти, выраженные в виде номеров строки и столбца.
Перед обращением к BIOS в регистре bl указывается 0 для установки новых значений координат или 1 -- для чтения ранее установленных (текущих) координат. Для установки в регистре сх указывается номер столбца, а в регистре dx — номер строки (номера строк и столбцов начинаются с нуля).
При чтении в сх и dx возвращаются текущие значения указанных величин.
Начиная с VBE 2.0, появилась возможность синхронизировать установку новых значений координат рабочей области с моментом обратного хода луча. Для этого в регистре ы указывается код 80h.
Таким образом, функция 4F06h позволяет создать условия для прокрутки в горизонтальном направлении, а функция 4F07h выполняет указанную прокрутку.