Глава 4. Вывод на терминал.

Раздел 5. Сдвиг экрана и страницы.

4.5.1 Вертикальный сдвиг текстового экрана.

Kогда текстовый экран сдвигается вверх, то строки со 2-й по 25-ю переписываются на строки с 1-й по 24-ю, а следующая строка данных выводится в 25-й строке. При этом верхняя строка, поверх которой осуществлется вывод теряется, хотя она продолжает существовать в памяти. Сдвиг вниз устроен аналогично.

Средний уровень.

Функция 6 прерывания 10H сдвигает любую часть экрана вверх, а функция 7 - вниз. В обоих случаях AL содержит число строк сдвига, а когда AL = 0, то весь экран чистится, а не сдвигается. CH:CL содержат строку и столбец левого верхнего угла, а DH:DL - содержат координаты правого нижнего угла. Появлящиеся из-за сдвига строки чистые и они выводятся с кодом атрибутов из BH.
;---сдвиг вверх на одну строку
MOV AH,6 ;номер функции сдвига вверх
MOV AL,1 ;число строк сдвига
MOV CH,0 ;строка левого верхнего угла
MOV CL,0 ;столбец левого верхнего угла
MOV DH,24 ;строка правого нижнего угла
MOV DL,79 ;столбец правого нижнего угла
MOV BH,7 ;атрибуты очищаемой строки
INT 10H ;делаем сдвиг

Hизкий уровень.

Вертикальный сдвиг всего экрана это тривиальная задача, поскольку правая граница одной строки в памяти продолжается левой границей следующей строки. Сдвиг всего содержимого видеобуфера на 160 байт вверх по памяти (80 символов в строке * 2 байта на символ) приводит к сдвигу экрана вниз на одну строку. Если Вы пишете свою собственную процедуру сдвига экрана, использующую прямое отображение в память, то не забывайте об интерференции, которая возникает на цветном дисплее и PCjr. Эта проблема обсуждается в {4.3.1}. Обычное решение этой проблемы состоит в проверке статусного байта, ожидая пока он разрешит запись в видеобуфер. Вам придется поэкспериментировать, чтобы определить сколько данных Вы можете записать за один цикл.

Другое решение этой проблемы состоит в выключении экрана на время операции сдвига, а затем в его восстановлении. "Выключение экрана" подразумевает, что вывод содержащихся в видеобуфере данных запрещен, но сам буфер при этом не изменяется. Этот процесс используется функцией сдвига BIOS, использованной выше. Хотя это не очень приятно для глаз, но все-таки не так плохо, как уже упоминавшаяся интерференция.

Для выключения экрана у цветного графического дисплея надо сбросить бит 3 порта с адресом 3D8H. Изменение бита назад на 1 моментально включает экран обратно. Этот адрес порта соответствует регистру выбора режима цветного графического адаптора. Этот однобайтный регистр только для записи, поэтому программа не может просто прочитать его, изменить значение бита 3 и вернуть прочитанный байт. Вместо этого Вам необходимо определить также правильную установку всех остальных битов (перечисленных в {4.1.2}).


<~-Раздел 5. Сдвиг экрана и страницы.
Содержание
4.5.2 Сдвиг текстового экрана горизонтально.-~>

Сайт управляется системой uCoz