Управление выводом на терминал
Все видеосистемы используют буфера, в которые отображаются данные для изображения на экране. Экран периодически обновляется сканированием этих данных. Размер и расположение этих буферов меняется с системой, режимом экрана, а также количеством заранее отведенной памяти. Когда в буфере хранится несколько образов экрана, то каждый отдельный образ называют дисплейной страницей.
В текстовых режимах буфера начинаются с данных для верхней строки экрана, начиная с левого угла. Дальнейшие данные переносятся с правого конца одной строки на левый конец следующей, как будто экран представляется одной большой строкой - и с точки зрения видеобуфера так оно и есть. Однако в графических режимах буфер может быть разделен на 2 или 4 части.
При выводе текста различные видеосистемы работают одинаково. Для экрана отводится 4000 байтов, так что на каждую из 2000 позиций экрана приходится 2 байта (25 строк * 80 символов). Первый байт содержит код ASCII. Аппаратура дисплея преобразует номер кода ASCII в связанный с ним символ и посылает его на экран. Второй байт (байт атрибутов) содержит информацию о том, как должен быть выведен данный символ. Для монохромного дисплея он устанавливает будет ли данный символ подчеркнут, выделен яркостью или негативом, или использует комбинацию этих атрибутов. В цветовых системах байт атрибутов устанавливает основной и фоновый цвета символа. В любом случае Ваша программа может писать данные прямо в буфер терминала, что значительно повышает скорость вывода на экран. Все системы, кроме монохромной, предоставляют набор цветных графических режимов, которые отличаются как разрешением, так и числом одновременно выводимых цветов. При использовании 16 цветов каждая точка экрана требует четырех бит памяти, поскольку 4 бита могут хранить числа от 0 до 15. По аналогии, четырехцветная графика требует только 2 бита на точку. Двухцветная графика может упаковать представление восьми точек в один байт видеобуфера. Количество памяти, требуемое для данного режима экрана может быть легко вычислено, если известно количество выводимых в этом режиме точек и количество бит, необходимое для описания одной точки. Текст легко комбинируется с графикой (BIOS рисует символы на графическом экране) и Вы можете создавать свои специальные символы.
Режим управления курсором
Курсор служит двум целям. Во-первых, он служит указателем места на экране, в которое операторы программы посылают свой вывод. Во-вторых, он обеспечивает видимую точку отсчета на экране для пользователя программы. Курсор генерируется микросхемой контроллера дисплея 6845. Эта микросхема имеет регистры, устанавливающие размер и положение курсора. Микросхема 6845 делает только мерцающий курсор, хотя имеются программные способы создания немерцающего курсора .Частота мерцания курсора не может быть изменена. В графических режимах курсор не выводится, хотя символы позиционируются на экране теми же самыми процедурами установки курсора, что и в текстовых режимах.
Когда видеосистема работает в режиме, допускающем несколько дисплейных страниц, то каждая страница имеет свой собственный курсор и при переключении между страницами восстанавливается позиция курсора, которую он занимал, когда было последнее обращение к восстанавливаемой странице. Некоторые режимы дисплея позволяют иметь до 8 дисплейных страниц и соответствующие им позиции курсора хранятся в наборе восьми 2-байтных переменных в области данных BIOS, начиная с адреса 0040:0050H. В каждой переменной младший байт содержит номер столбца, отсчитывая от 0, а старший байт содержит номер строки, также отсчитывая от 0. Когда используется меньше чем 8 страниц, то используются переменные, расположенные в более младших адресах памяти.
Вывод точечной графики на дисплей.
Работа с VGA-режимами
Функция 00 прерывания BIOS 10h позволяет переключаться не только в текстовые режимы, но и в некоторые графические. Эти видеорежимы стандартны и поддерживаются всеми видеоадаптерами (начиная с VGA), см. табл. 19.
Таблица 19. Основные графические режимы VGA
Номер режима | Разрешение | Число цветов |
11h | 640x480 | |
12h | 640x480 | |
13h | 320x200 |
Существуют еще несколько видеорежимов, использовавшихся более старыми видеоадаптерами CGA и EGA (с номерами от 4 до 10h); их список приведен в приложении 2.
BIOS также предоставляет видеофункции чтения и записи точки на экране в графических режимах, но эти функции настолько медленно исполняются, что никогда не используются в реальных программах.
INТ 10h АН = 0Ch — Вывести точку на экран
Ввод: | АН = 0Ch ВН = номер видеостраницы (игнорируется для режима 13h, поддерживающего только одну страницу) DX = номер строки СХ = номер столбца AL = номер цвета (для режимов 10h и llh, если старший бит 1, номер цвета точки на экране будет результатом операции «исключающее ИЛИ») |
Вывод: | Никакого |
INТ 10h AH = 0Dh — Считать точку с экрана