У видеоадаптеров 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.