Работа с дисплейным адаптером
Прерывание INT10h выполняет все многочисленные операции по обслуживанию дисплейного адаптера.
При вызове прерывания INT 10h, как и при вызове многих других прерываний, регистр AH содержит номер функции, которую требуется выполнить. Остальные регистры при вызове прерывания содержат операнды.
Программирование дисплейного адаптера - сложная задача. Функции, выполняемые прерыванием INT 10h обширны, полностью они будут описаны во втором томе книги. Приведем краткий обзор функций прерывания INT 10h.
00h - Задание видеорежима.
Эта функция обычно вызывается первой при начале работы с дисплейным адаптером или при необходимости изменить текущий режим адаптера. Что здесь имеется в виду?
Напомним, что дисплейный адаптер может работать либо в текстовом, либо в графическом режиме. На самом деле существует несколько текстовых и несколько графических режимов, различающихся количеством строк и столбцов, способом представления цвета и т.д.
В процессе инициализации BIOS задает начальный режим адаптера исходя из его типа. Если Вашей программе нужен другой режим, отличный от исходного, она должна использовать эту функцию. При этом необходимо учитывать, что дисплейные адаптеры могут поддерживать не все режимы.
01h - Установить характеристики курсора.
С помощью этой функции вы можете установить размер и форму курсора, сделать курсор мигающим или убрать его совсем.
02h - Установить положение курсора.
Эта функция позволяет управлять расположением курсора на экране, в частности, один из способов убрать курсор - расположить его за пределами экрана, например, на несуществующей 26 строке.
03h - Получить положение курсора.
Программа может узнать в любое время, где расположен курсор. Это может потребоваться ей, например, для того, чтобы переместить курсор в следующую позицию (вправо, вверх, вниз, на 10 символов левее текущего положения и т.д.).
04h - Получить положение светового пера.
Световое перо используется относительно редко, однако если оно есть, то функция 04h позволит вам работать с этим устройством.
05h - Выбрать активную страницу дисплейной памяти.
Компьютер хранит, как правило, не один отображаемый образ экрана, а несколько. Для этого видеопамять (память для хранения видеоизображения, находится на плате видеоконтроллера) разбивается на так называемые страницы. Отображается только активная страница видеопамяти.
Используя механизм страниц, программа может заранее подготовить изображение в неактивной странице, затем сделать подготовленную страницу активной. Изображение новой страницы мгновенно появится на экране.
Некоторые отладчики программ используют одну страницу видеопамяти для отлаживаемой программы, другую - для выдачи своих диагностических сообщений.
06h, 07h - Прокрутка (скроллинг) окна вверх/вниз.
С помощью этих функций вы сможете переместить выбранную область окна на заданное число строк вверх или вниз. Освободившееся место будет заполняться пустыми строками. Одно из применений этой функции - полная очистка экрана.
08h, 09h - Прочитать/записать символ и атрибут.
С помощью этих функций можно прочитать или записать символ и его атрибут. При записи символа можно задать число повторений. Функцию записи с повторением удобно использовать для заполнения области экрана каким-либо символом.
Запись/чтение символа начинается с текущего положения курсора.
0Ah - Записать символ.
Эта функция предназначена для записи символа в видеопамять без задания для него индивидуального значения атрибута. Используется текущий атрибут. Можно задавать кратность записи.
0Bh - Выбрать цветовую палитру.
Эта функция позволяет управлять цветом рамки вокруг изображения в текстовом режиме и цветом фона в графическом режиме (для адаптеров EGA, VGA).
0Ch, 0Dh - Записать/прочитать графическую точку.
Можно высветить точку заданного цвета в заданном месте экрана для выбранной дисплейной страницы или прочитать значение цвета любой точки на экране соответственно.
0Eh - Запись символа на экран в стиле TTY.
После записи символа на экран курсор продвигается на следующую позицию, при этом обрабатываются такие управляющие символы, как BEL (подача звукового сигнала), возврат на одну позицию, перевод строки, возврат к началу строки.
0Fh - Прочитать текущий видеорежим.
Если Ваша программа изменяет видеорежим, она может сохранить старый видеорежим, получив его с помощью этой функции.
Кроме того, функция возвращает количество столбцов на экране и номер текущей активной дисплейной страницы.
10h, 11h, 12h - Обслуживание адаптера EGA.
Эти функции работают только при использовании дисплейных адаптеров EGA и VGA. Они позволяют устанавливать свою цветовую палитру, загружать знакогенератор (например, шрифтом для русских букв) и выполнять некоторые другие функции.
13h - Запись строки.
Для машин класса AT и выше при наличии дисплейных адаптеров EGA или VGA эта функция позволяет вывести на экран произвольную строку символов заданной длины, с заданным атрибутом и в заданном месте экрана. Можно также задать номер дисплейной страницы.
Если вы не можете использовать эту функцию (Ваш компьютер - XT или дисплейный адаптер - CGA), единственный способ вывести на экран строку символов с помощью прерывания INT 10h - вызывать в цикле функции 09h, 0Ah или 0Eh для вывода строки по одному символу.