Непосредственный доступ к видеобуферу
Непосредственный вывод в видеобуфер – наиболее быстрый способ вывода текста на экран. Для доступа к видеопамяти используется far-указатель, который позволяет адресоваться в пределах всей видеопамяти.
Пример
В позицию (i, j), где i – строка, j – столбец, выводится символ ‘A’, сопровождаемый атрибутом atr. Вывод подходит для режимов 0, 1, 2, 3 с разрешением 80 х 25 для цветных ВА. Базовый адрес видеобуфера b8000h. Вместо того, чтобы размещать константу 160 в тексте программы, лучше проверить в области данных bios в ячейке 40:4Ah действительное число столбцов отображаемых на экране и уже на основании этого сформировать подходящую константу для вычисления позиции символа и его атрибута в видеобуфере. Рекомендуется, также, на основании информации, размещенной в ячейках 40:4Ah и 40:49h, выяснить используемый режим и вычислить базовый адрес активной страницы.
………………………….
char far * buf = (char far *)0xb8000000;
……………………………
buf += i * 160 + j * 2;
* buf++ = ‘A’;
* buf = atr;
…………………………….
Пример
Использование near-указателя требует предварительной загрузки индексного регистра, например ES.
………………………………
register unsigned _es * work;
_ES = 0xb800; // загрузка базового адреса видеопамяти на регистр ES
………………………………
work = (unsigned _es *)(i * 160 + j * 2);
* work = (unsigned)(atr << 8) | ‘A’; // размещение символа и атрибута в пределах
// 16-разрядного слова и запись
Наиболее надежные программы, выполняющие непосредственный доступ к видеопамяти, определяют для записи те моменты времени, когда адаптер не выполняет обновления изображения на экране [12].
Вопросы для самоконтроля
· Какие типы мониторов различают?
· Какие параметры изменяются при изменении кодов режимов?
· Как выглядят атрибуты символов в видеопамяти и на что они влияют?
· Какие данные располагаются в области данных bios, связанные с управлением монитором?
· Каким образом выполняется расчет координат символа и его атрибута в случае вывода символа непосредственно в видеопамять?
Не нашли, что искали? Воспользуйтесь поиском:
|