Программы сдвига перемещают текстовую информацию либо вверх, либо
вниз, в зависимости от вызванной функции. Программы сдвига также
обеспечивают некоторые средства организации окон (фрагментов
экрана) на экране дисплея - т.е. BIOS может сдвигать только часть
содержимого экрана. Входные параметры программы сдвига определяют
прямоугольник, расположенный на экране. Он задает верхний левый и
правый нижний углы области сдвига. Видеопрограмма BIOS сдвигает
данные только в этой области. Остальная часть экрана не меняется.
Мы уже видели пользу сдвига окон при изучении операционной
системы и языка Бейсик, которые использовали для сдвига BIOS. Если
работает 80-символьный дисплей, DOS устанавливает верхний левый
угол окна сдвига равным (0, 0), а нижний правый угол (24, 79). Так
сдвигается весь экран. Но Бейсик использует двадцать пятую строку
для индикации состояния дисплея, и только 24 строки отводит под
изображение программы. Когда Бейсик сдвигает экран с помощью
базовой системы ввода-вывода, он устанавливает верхний левый угол в
точке (0, 0), а правый нижний угол - в точке (23, 79). Из-за того,
что последняя строка остается за пределами сдвига, она не
перемещается во время сдвига. В следующей главе приведен пример
сдвига окна, вызываемого из программы на Бейсике.
Видеопрограмма BIOS выполняет сдвиги с помощью переноса
символов и атрибутов в дисплейном буфере. Программа сдвига не
меняет стартового адреса дисплейного буфера; такой метод сдвига был
бы быстрее, но не позволяет прикладной программе определять, куда
должны попасть отдельные символы. Способ сдвига, реализуемый в
BIOS, подходит для обычной работы экрана. Заметим также, что
программа сдвигает изображение при необходимости более чем на одну
строку. Обычно программа сдвигает изображение на одну строку.
Функция сдвига видеопрограммы BIOS позволяет сдвинуть содержимое
экрана на несколько строк. Если же количество строк сдвига равно
нулю, программа BIOS очищает экран. Это - быстрый способ очистки
всего экрана или его части.
Когда программа работает в 80-символьном режиме на цветном
графическом адаптере, она не может записывать или читать его текст
в произвольные моменты времени. Если программа будет модифицировать
буфер не в строго определенные моменты времени, на экране появятся
помехи. Так как программа сдвига читает и записывает большие
количества данных, она должна быть написана с учетом проблемы
помех. Если посмотреть текст программы обслуживания операции
сдвига, то можно увидеть, что BIOS обслуживает режим 80*25 цветной
платы (переменная CRT_MODE равна 2 или 3), как специальный случай.
В случае операций сдвига эта подпрограмма BIOS ждет до тех пор,
пока не возникнет вертикальный обратный ход луча дисплея. Это
означает, что аппаратура адаптера выдала на экран все содержимое
буфера и готова начать новый кадр. (Аппаратура адаптера повторяет
этот процесс регенерации экрана 60 раз в секунду). При появлении
вертикального обратного хода программа BIOS выключает дисплей и
выполняет сдвиг. Когда программа сдвига переместит все символы, она
снова включает дисплей. Это вызывает короткое мигание дисплея. Если
вы внимательно посмотрите на экран во время сдвига, то заметите,
что верхние его шесть строк несколько темнее остальных. Это
происходит из-за того, что операция сдвига занимает несколько
большее время, чем один период регенерации экрана. Поэтому верхние
шесть строк выключаются на два интервала регенерации, а весь
остальной экран - только на один интервал. Метод, допускающий
появление помех на экране, настолько непригляден, что описанный
метод предпочтительнее. Вы можете написать несколько программ,
чтобы попробовать другие методы.
Когда экран находится в графическом режиме, начинает работать
другая часть программы сдвига. Хотя это и существенная часть
программы BIOS, ее обсуждение отложим до тех пор, пока не
рассмотрим чтение и запись символов на экран.