Запись напрямую в видеопамять
Альтернативным
способом вывода информации на экран
может быть использование видеобуфера.
Таким образом, мы можем записать символ
напрямую в видео память. Довольно просто
доступ осуществляется при работе в
4,5,6 или 13 режиме (это уже отмечалось
ранее). При работе в данных режимах прямо
из программы можно обратится к видеопамяти.
Начальный адрес видеопамяти для режимов
4,5,6 – b800:0000h, для режима 13h – a000:0000h, и все
эти режимы поддерживают одну страницу
видеопамяти.
Для примера
осуществим вывод пиксела на экран для
режима 13h.
Пример:
……
offset
= 320*y + x;
_ES
= 0xA000;
*offset
= color;
…..
Переопределение
таблицы знакогенератора.
Для вывода на экран
любого изображения в графическом режиме
работы видеоадаптера необходимо
заставить светиться группу пикселов,
которые будут составлять контур
изображения на экране. Такой же метод
необходимо применять и при выводе
символов на экран. Обычно контур символа
представлен матрицей m x n, где m и n –
соответственно количество строк и
столбцов, отводимых под формирование
одного символа. Как уже упоминалось
выше для вывода символа на экран можно
воспользоваться функцией AH = 09h прерывания
10h.
Число строк и
столбцов текстовой информации для
каждого из графических режимов различно.
При выводе текстовой информации в
графическом режиме необходимо помнить
о некоторых особенностях:
1. При работе с
графическими режимами младше 13h при
выводе символа функцией AH = 09h дополнительно
учитывается значение бита 7 кода цвета.
Если он равен 0 то пикселы, которые
образуют контур символа, будут иметь
код цвета заданный битами 0-6 BL. Остальные
пикселы в пределах знакоместа (пикселы
фона) будут иметь код цвета 0 (цвет фона).
Если он равен 1 то цвет пикселов символа
определяется операцией XOR текущего кода
цвета пиксела с кодом цвета в битах 0 –
6 BL.
2. При выводе текста
в графическом режиме через BIOS используется
таблица знакогенератора. В данной
таблице хранятся контуры используемых
символов в системе.