Программирование видеоадаптеров CGA, EGA и VGA

       

Знакогенератор


У видеоадаптеров MDA, CGA и Hercules, таблицы знакогенератора находятся в ПЗУ, которое расположено вне адресного пространства процессора. Программы не имеют возможности изменить или даже считать информацию из этих таблиц. Таким образом, в текстовых режимах программы не могут изменить набор символов, используемых видеоадаптерами MDA, CGA и Hercules.

Для "русификации" (использования символов кирилицы) или изменения шрифтов, используемых в текстовых режимах видеоадаптеров MDA, CGA и Hercules, необходимо перепрограммировать микросхему ПЗУ знакогенератора, расположенную на плате видеоадаптера. Это не относится к использованию символов кирилицы в графических режимах видеоадаптера CGA.


При установке текстовых режимов работы видеоадаптеров EGA и VGA, BIOS загружает таблицы знакогенератора из ПЗУ во второй цветовой слой видеопамяти. Впоследствии эти таблицы используются при отображении символов на экране.

Благодаря этому, можно легко заменить стандартную таблицу знакогенератора своей собственной. Эта особенность EGA и VGA, в частности, широко применяется при "русификации" компьютеров. В CGA, где знакогенератор находится в ПЗУ, отображать русские буквы можно только в графическом режиме.

EGA и VGA обеспечивают возможность одновременной загрузки соответственно четырех и восьми таблиц знакогенератора в видеопамять. Каждая таблица содержит описание 256 символов. Одновременно активными могут быть одна или две таблицы знакогенератора. Это дает возможность одновременно отображать на экране до 512 различных символов. При этом один бит из байта атрибутов указывает, какая из двух активных таблиц знакогенератора используется при отображении данного символа. Номера активных таблиц знакогенератора определяются регистром выбора знакогенератора.

Следующий рисунок иллюстрирует использование двух таблиц знакогенератора. В верхней части рисунка символ, имеющий ASCII-код 31h, отображается на экране при помощи первой таблицы знакогенератора. В нижней части рисунка символ с тем же кодом ASCII отображается при помощи третей таблицы знакогенератора, и имеет уже другую форму.

Рисунок 6.6 Активные таблицы знакогенераторов.

EGA поддерживает два размера для матриц символов: стандартный - 8 пикселов в ширину и 8 пикселов в высоту, а также улучшенный - 8 пикселов в ширину и 14 пикселов в высоту. Один из этих наборов символов автоматически загружается BIOS в видеопамять при выборе текстового режима. Так как VGA имеет большую разрешающую способность, то его набор символов имеет в ширину 9 пикселов, а в высоту - 16.

Адреса таблиц знакогенератора для EGA и VGA приведены в таблице 6.1. Как видно из этой таблицы, на каждый символ отводится 32 байта.



Первая таблица знакогенератора Вторая таблица знакогенератора
cимвол 0 0000h-001Fh символ 0 2000h-201Fh
символ 1 0020h-003Fh символ 1 2020h-203Fh
символ 2 0040h-005Fh символ 2 2040h-205Fh
... ... ... ...
символ 255 1FE0h-1FFFh символ 255 3FE0h-3FFFh
Третья таблица знакогенератора Четвертая таблица знакогенератора
cимвол 0 4000h-401Fh символ 0 6000h-601Fh
символ 1 4020h-403Fh символ 1 6020h-603Fh
символ 2 4040h-405Fh символ 2 6040h-605Fh
... ... ... ...
символ 255 5FE0h-1FFFh символ 255 7FE0h-7FFFh
Пятая таблица знакогенератора (только VGA) Шестая таблица знакогенератора (только VGA)
cимвол 0 8000h-801Fh символ 0 A000h-A01Fh
символ 1 8020h-803Fh символ 1 A020h-A03Fh
символ 2 8040h-805Fh символ 2 A040h-A05Fh
... ... ... ...
символ 255 9FE0h-9FFFh символ 255 BFE0h-BFFFh
Седьмая таблица знакогенератора (только VGA) Восьмая таблица знакогенератора (только VGA)
cимвол 0 C000h-C01Fh символ 0 E000h-E01Fh
символ 1 C020h-C03Fh символ 1 E020h-E03Fh
символ 2 C040h-C05Fh символ 2 E040h-E05Fh
... ... ... ...
символ 255 DFE0h-DFFFh символ 255 FFE0h-FFFFh

Таблица 6.1 Размещение таблиц знакогенератра в видеопамяти.

Наиболее простой способ загрузки своих таблиц знакогенератора во второй слой видеопамяти заключается в использовании функций BIOS.



Содержание раздела