Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

Вывод на экран средствами BIOS

Рассмотрим теперь средства вывода на экран, реализуемые драйвером BIOS, программное обращение к которому осущест­вляется с помощью прерывания Int 10h. При работе в тексто­вом режиме обычно используются следующие функции драйве­ра:

02h - установить позицию курсора;

03h - получить позицию курсора;

05h - установить видеостраницу;

06h - инициализировать или прокрутить вверх окно;

07h - инициализировать или прокрутить вниз окно;

08h - прочитать символ и атрибут в позиции курсора;

09h - вывести символ и атрибут в позицию курсора;

0Ah - вывести символ в позицию курсора;

0Eh - вывести символ в режиме телетайпа;

10h, подфункция 03h - переключить бит мерцание/яркость;

13h - вывести строку в режиме телетайпа.

Функция 02h позволяет позиционировать текстовый курсор, задавая его местоположение в виде номера строки (0...24) и номера столбца (0...79). Видео драйвер поддерживает 8 независи­мых курсоров - по одному на каждую страницу, причем фун­кция 02h позиционирует курсор независимо от того, какая страница является активной.

Функция 03h позволяет получить и сохранить текущее по­ложение курсора. Это дает возможность перейти временно в другое место экрана, сформировать там изображение, а затем вернуться на старое место.

Функция 05h переключает видеостраницы дисплея. Если дисплей находится в текстовом режиме, то переключаются текстовые страницы (0...7), если установлен графический ре­жим, то переключаются графические страницы (0...1).

Большая часть описываемых ниже функций вывода на экран (кроме подфункции переключения мерцания/яркости и фун­кции вывода строки в режиме телетайпа) позволяют формиро­вать изображение на любой видеостранице, как активной в на­стоящей момент, так и скрытой. Это дает возможность либо подготовить заранее несколько страниц и по мере необходимос­ти быстро их переключать, либо, пока одна страница выво­диться на экран, готовить изображение на следующей.

С помощью функций 06h и 07h в заданном месте экрана дисплея создаются цветные прямоугольные окна заданного раз­мера. Если в созданные ранее окна выведен какой-либо текст то с помощью этих же функций можно прокручивать текст вверх или вниз. При этом текст, уходящий за край окна, про­падает, а из-под противоположного края появляются пустые строки с заданными атрибутами цвета. Для заполнения появля­ющихся строк текстом следует использовать подходящие функ­ции DOS или BIOS, причем контроль местоположения, длины и цвета строк возлагается на программиста. Драйвер только прокручивает заданную прямоугольную область экрана (вместе с текстом в ней).

Функции 09h, 0Ah, 0Eh и 13h служат для вывода на экран отдельных символов и символьных строк (в цикле), функции 09h и 0Ah не выполняют фильтрации управляющих символов, поэтому с их помощью можно выводить все символы кодовой страницы. Предусмотрен вывод одного и того же символа за­данное число раз, что можно использовать при создании рамок и других орнаментов. Вывод символа не перемещает курсор поэтому каждый раз перед применением функций 09h или 0Ah следует позиционировать курсор с помощью функции 02h. Раз­личие функций 09h и 0Ah заключается в том, что первая поз­воляет вывести символ с любым атрибутом, а вторая использу­ет прежний атрибут той позиции, куда выводится символ.

Функция 0Eh фильтрует управляющие коды 07h (звуковой сигнал), 08h (возврат на шаг), 10h (перевод строки) и 13h (возврат каретки), выполняя соответствующие им действия. Курсор перемещается после вывода каждого символа, что дает возможность выводить целые строки. Однако атрибут символа установить нельзя, выводимый символ приобретает прежний атрибут той позиции, куда он выводится. При необходимости вывода символа с новым атрибутом следует сначала вывести в заданную позицию символ пробела с требуемым атрибутом (функцией 09h), а затем туда же послать символ с помощью функции 0Eh.

Важным свойством функции 0Eh является автоматический переход на следующую строку после завершения предыдущей, а также прокрутка экрана вверх на одну строку после заполне­ния самой нижней строки.

Функция 13h предназначена для вывода строк с указанием атрибутов как каждого символа в отдельности, так и всей строки. Функция может выполняться в четырех вариантах в зависимости от кода режима, указываемого в регистре AL. В режимах 0 и 1 атрибут символов указывается сразу для всей строки в регистре BL, причем в режиме 0 курсор не смещает­ся в процессе вывода, а в режиме 1 - смещается на длину строки. В режимах 2 и 3 атрибуты символов включаются в выводимую строку, в которой, таким образом, чередуются коды атрибутов и коды символов, что усложняет формат строки, но позволяет устанавливать атрибуты для каждого символа незави­симо. Режим 2 отличается от режима 3 тем, что в первом случае курсор не смещается, а во втором смещается на длину строки.

При вызове функции 13h в регистре DX задаются координа­ты начала выводимой строки (в DH - строка экрана и в DL -столбец), а в регистре СХ - длина выводимой строки, которая в режимах 2 и 3 оказывается за счет байтов с атрибутом в два раза больше длины строки, реально появляющейся на экра­не. Несколько необычно указывается адрес выводимой строки. Она должен быть помещен в регистры ES:BP (ES- сегментный адрес и ВР - смещение в пределах сегмента).

Функция 13h выводит не все символы, так как коды 07h, 08h, 0Ah и 0Dh рассматриваются ею, как управляющие.

При выводе на экран средствами драйвера BIOS необходимо иметь в виду, что ввод с клавиатуры <Ctrl>/C не приводит к завершению программы. Следует опасаться бесконечных циклов вывода на экран - выход из них возможен только путем пере­загрузки компьютера.

Подфункция 03h функции 10h (прерывание 10h), в отличие от описанных выше функций вывода символов и строк, воздей­ствует сразу на весь экран, влияя на отображение тех симво­лов, у которых установлен старший бит атрибута фона. Функ­ция позволяет либо приписать этот бит яркости фона, давая тем самым возможность выводить на экран 16 цветов фона, либо назначить его атрибуту мерцания символа. В последнем случае цвет фона может принимать только 8 значений.