Функції AH=06 і 07 переривання 10h BIOS здійснюють так називаний скролінг (прокручування) вікна екрана. При виконанні скорллинга на один рядок нагору вся інформація у вікні переміщається на рядок нагору. Унизу вікна з'являється чистий рядок. При виконанні скролінга на один рядок униз уміст вікна зрушується на рядок вниз і угорі вікна додається чистий рядок. Значення регістра AL задає число рядків, на яке виконується скролінг. Якщо AL=0, виконується  очищення вікна. Значення в CH і CL визначають  рядок і стовпець лівого верхнього кута вікна, у  DH і DL – рядок і стовпець правого нижнього кута. Рядки і стовпці нумеруються від 0. Значення в регістрі ВH задає атрибут чистого рядка, що додається.

Приведемо приклад Сі-функції, що виконує вертикальний скролінг вікна екрана, заданого рядком і стовпцем лівого верхніх (1_row, l_col) і рядком і стовпцем правого нижніх (r_row, r_col) кутів вікна. Якщо перемінна direction дорівнює UP, відбувається скролінг на один рядок нагору, якщо вона дорівнює DOWN – скролінг на один рядок униз, якщо ENTIRE – виконується очищення вікна. Додається рядок з атрибутом attr.

/*L9_5.C*/

#include<dos.h>

#include“screen.h”

void scroll( int direction, char l_row, char l_col,

                 char r_row, char r_col, char attr )

{ union REGS r;

 if (direction)

 { r.h.al=1; r.h ah=direction; }

 else

 { r.h.al=0; r.h.=6 }

 r.h.ch=l_row; r.h.cl=l_col; r.h.dh=r_row;

 r.h.dl=r_col; r.h.bh=attr; int86(0x10, &r, &r);

}

Якщо вікно займає весь екран і задається direction=ENTIRE, відбувається фактичне очищення всього екрана і його “заливання” кольором, що задається атрибутом чистого рядка (attr). Наприклад, для очищення екрана в режим з 25 рядками і 80 стовпцями

scroll (ENTIRE, 0, 0, 24, 79, 0x07);

Для одержання кольорової рамки по периметрі всього екрана можна виконати два звертання:

scroll(ENTIRE, 0, 0, 24, 79, color);

scroll(ENTIRE, 1, 1, 23, 78, 0x07);

Тут значення color – атрибут. Колір рамки буде збігатися з кольором тла символу, тому що символ є пробіл.

Скролінг вікна засобами BIOS можливий як у текстових, так і в графічних режимах роботи видеоадаптора. Скролінг у графічних CGA – режимах має деякі особливості, що докладно розглянуті в 9.7.

Одним з цікавих застосувань скролінга є побудова “” вікон, щовибухають, (exploding windows). Такі вікна “виростають” на екрані з визначеного місця (середини, одного з кутів, спочатку заповнюється середня горизонталь, а потім вікно розсовується нагору і т.п.). Секрет побудови “” вікон, щовибухають, простий. Починаючи з визначеного місця вікна (наприклад, його центра), виконується очищення першого, самого маленького вікна. Після цього по периметрі цього вікна малюється рамка. Потім координати лівого верхнього і правого нижнього кутів модифікуються, і усе повторюється: очиска старої рамки скролінгом, висновок нової, більшого розміру,модифікація координат кутів і так далі доти, пір, поки вікно не “виросте” до нормальних розмірів.

Вибір початкової крапки і закону розсовування кутів проміжних вікон визначають напрямок “вибуху”. Нижче приведений приклад функції expl_win (), що виводить “” вікно, щовибухає, заданими координатами лівого верхнього і правого нижнього кутів. У результаті її роботи вікно “росте” з центральної ечейки вікна, проходячи 10 фаз і розширюючи одночасно як по горизонталі, так і по вертикалі. Зміст параметрів style, s0, c0, s1,c1, atr збігається з параметрами функції border (). Якщо style = NULL, рамка під час “вибуху” не виводиться. Параметр color задає колір “заливання” вікна при виконанні скролінга. Використовується активна відеосторінка адаптера. У випадку успіху функція повертає константу ОК; якщо вікно не може бути побудовано, “вибух” не відбувається і повертається константа BAD_PARAM.

/*L9_6.C*/

#define HOR_STEP     2/*крок по вертикалі*/

#define VERT_STEP   1/*крок по горизонталі*/

#define TIME              5/*затримка між фазами*/

#include <dos.h>

#include “screen.h”

int expl_win (char s0, char c0, char s1, char c1,

                    char color, cha style[], char atr)

{ register char max_stolb, max_string;

 register int cur_s0, cur_c0,cur_s1, cur_c1;

 max_stolb=*(char far*) MK_FP(0x40, 0x4a);

 max_string=*(char far*) MK_FP(0x40, 0x84);

 /*Контроль того, чи можна побудувати вікно.*/

 if (s0>=0&&s0<s1&&c0>=0&&c0<c1&&

    s1<=max_string&&c1<max_stolb)

 {/*Установка початкових координат вікна*/

 cur_s0=(s1+s0)>>1; cur_c0=(c0+c1)>>1;

 cur_s1=cur_s0; cur_c1=cur_c0;

 /*Цикл стирання і висновку рамки вікна.*/

 while (cur_c0||cur_s0>s0||cur_c1<c1||cur_s1<s1)

 { scroll(ENTIRE, cur_s0, cur_c0, cur_s1, cur_c1, color);

  if (style!-NULL)

   border (cur_s0, cur_c0, cur_s1, cur_c1,

               NULL, atr, stule, atr);

  /*модифікація координат вікна.*/

  cur_c0-=HOR_STEP; cur_c1+=HOR_STEP;

  cur_s0-=VERT_STEP; cur_s1+=VERT_STEP;

  cur_c0=(cur_c0<c0)? c0: cur_c0;

  cur_c1=(cur_c1>c1)? c1: cur_c1;

  cur_s0=(cur_s0<s0)? s0: cur_s0;

  cur_s1=(cur_s1>s1)? S1: cur_s1;

  delay(TIME); }

 /*Остання остаточна фаза вікна.*/

 scroll(ENTIRE, cur_s0, cur_c0, cur_s1, cur_c1, color);

 if (style!=NULL)

 border(cur_s0, cur_c0, cur_s1, cur_c1,

            NULL, atr, style, atr);

 return OK;

 }

else return BAD_PARAM;

}

Відзначимо, що для комп'ютерів з високою тактовою частотою для одержання видимого ефекту приходиться спеціально встановлювати затримку між фазами вікна.