Функции BIOS
Дополнение к программе визуализации
В качестве примера приведем дополнение к примеру 4.1, позволяющее увидеть на экране эффект от изменения содержимого регистров палитры. Оно приведено в примере 4.5 и должно быть включено в текст примера 4.1 между командами int 2lh и mov ax, 03.
Напомним, что программа примера 4.1 заполняет экран разноцветными вертикальными линиями, ждет ввод любого символа и прекращает свою работу. После указанных изменений вместо прекращения работы будет выполняться группа команд из примера 4.5, которая записывает в регистры палитры значения, противоположные исходным (OFh, ОЕb,…, i, о). В результате картинка на экране окажется повернутой вокруг вертикальной оси. Например, если в исходном варианте палитра сел располагалась в первых 16-ти столбцах на экране, то теперь она будет находиться в столбцах с номерами 240-255, а расположение цветов в этих столбцах будет противоположно исходному.
После выполнения этих действий программа вновь ждет нажатия на одну из клавиш. Это сделано для того, чтобы оператор мог рассмотреть изменения, произошедшие на экране. После нажатия на клавишу выполнение программы будет закончено и произойдет возврат в DOS.
Пример 4.5. Дополнение (вставка) к программе примера 4.1.
mov сх, 16; количество изменяемых регистров mov bx, 0F00h; код для записи в нулевой регистр ip_3: mov ax,1000h код запрашиваемой функции B10s int lOh установка регистра палитры inc bi номер следующего регистра dec bh код для следующего регистра looj з lp_3 управление повторами цикла mov ax, 0C0lh код функции DOS int 21h ждет нажатия на клавишу
В примере 4.5 использован запрос 1000h, который производит запись в регистр палитры. Перед его вызовом заполняется регистр bx. В старший байт bb записывается номер группы регистров цвета, а в младший bl – номер регистра палитры.
Содержимое регистра палитры можно прочитать с помощью запроса 1007h. Номер читаемого регистра палитры указывается в ы, а его содержимое после выполнения запроса будет помещено в bh.
В состав группы 10h входят два запроса, которые позволяют прочитать (код 1009h) или записать (код I002h) сразу все регистры палитры. Кроме того, они считывают или записывают еще один специальный регистр, который называется overscan или Border. О назначении этого регистра следует поговорить особо.
Регистр Overscan
При работе в любом видеорежиме на экране существует небольшое свободное пространство, расположенное за "пределами рабочей области. Окраска этого пространства зависит от содержимого регистра цвета, номер которого хранится в регистре overscan. Обычно не используемое пространство окрашено в черный цвет, а поскольку код черного цвета находится в нулевом регистре, то Overscan просто очищен.
Некоторые,программы, например русификатор Keyrus, изменяют содержимое Overscan для окрашивания неиспользуемого пространства экрана в разные цвета. Это позволяет различать режимы работы программы, например ввод русских или латинских букв, не используя рабочую область экрана. Существуют два запроса – 1001h и 1008h, выполняющие запись и чтение регистра Overscan.
Замечание
В заключение еще раз подчеркнем, что в видеорежимах SVGA деление на страницы действует только при работе с палитрой 16 цветов. При работе с палитрой 256 цветов регистры палитры не используются.