Программирование видеоадаптеров CGA,EGA и VGA


8.7. Свертка текстового окна вверх - функция 06h


Свернуть активное окно экрана вверх (при работе в текстовом режиме) можно при помощи функции 06h. Окно задается координатми верхнего левого и нижнего правого углов. При свертке окна снизу появляются новые пустые строки (строки, заполненые пробелами), а верхние строки исчезают. Область экрана вне окна не изменяется. На входе: AH = 06h - свертка окна вверх; AL = число прокручиваемх линий, если оно равно нулю, то окно прокручивается целиком; BH = атрибут, используемый для строк, возникающих снизу окна; CH = номер строки верхнего левого угла окна; CL = номер колонки верхнего левого угла окна; DH = номер строки нижнего правого угла окна; DL = номер колонки нижнего правого угла окна. На выходе: Не используются.

Тот факт, что при свертке в нижней части окна возникают чистые строки, впоследствии заполняющие все окно, можно использовать для быстрой очистки экрана. Для этого достаточно задать размеры окна, равные размерам экрана и прокрутить его вверх на 25 или 0 строк. Приведем фрагмент программы на языке ассемблера, который можно использовать для очистки экрана дисплея: push es ; сохраняем содержимое регистра es xor ax,ax ; устанавливаем регистр es на нулевой mov es,ax ; сегмент памяти mov ah,6 ; функция свертки экрана вверх mov al,0 ; очищаем все окно mov bh,7 ; устанавливаем нормальный атрибут xor cx,cx ; устанавливаем левый верхний угол окна в (0,0) ; Для определения размеров экрана испльзуется содержимое переменных ; видеофункций BIOS. Ячейка памяти, расположенная по адресу 0000:0484 ; содержит число, на единицу меньшее, чем количество строк на экране. ; По адресу 0000:044A находится переменная, определяющая число символов ; в строке. Более подробно переменные видеофункциий BIOS будут ; рассмотрены позже. mov dh,es:[484h] ; определяем число строк в данном режиме mov dl,es:[44Ah] ; определяем число символов в строке dec dl int 10h ; вызываем свертку экрана вверх pop es ; восстанавливаем регистр es









Начало  Назад  Вперед