Программирование видеоадаптеров

       

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


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

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

Видеоадаптеры обеспечивают возможность одновременной загрузки в видеопамять нескольких различных таблиц знакогенератора. Видеоадаптер EGA позволяет загрузить четыре таблицы, а видеоадаптеры VGA и SVGA - восемь.

Каждая такая таблица знакогенератора содержит описание 256 символов. Активными могут быть одна или две таблицы знакогенератора. Это дает возможность одновременно отображать на экране до 512 различных символов.

Один бит из байта атрибутов указывает, какая из двух активных таблиц знакогенератора используется при отображении данного символа. Номера активных таблиц знакогенератора определяются регистром выбора знакогенератора. Этот регистр будет описан ниже.

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

PICTURE._FIG_23.PCX;6";4.308";PCX

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

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


Адреса таблиц знакогенератора для видеоадаптеров EGA, VGA и SVGA приведены в следующей таблице:

Первая таблица знакогенератора



Вторая таблица знакогенератора

Символ ASCII 0       0000h-001Fh

Символ ASCII 0      2000h-201Fh

Символ ASCII 1       0020h-003Fh

Символ ASCII 1      2020h-203Fh

Символ ASCII 2       0040h-005Fh

Символ ASCII 2      2040h-205Fh

...            ...       

...           ...       

Символ ASCII 255     1FE0h-1FFFh

Символ ASCII 255    3FE0h-3FFFh

Третья таблица знакогенератора

Четвертая таблица знакогенератора

Символ ASCII 0       4000h-401Fh

Символ ASCII 0      6000h-601Fh

Символ ASCII 1       4020h-403Fh

Символ ASCII 1      6020h-603Fh

Символ ASCII 2       4040h-405Fh

Символ ASCII 2      6040h-605Fh

...            ...       

...           ...       

Символ ASCII 255     5FE0h-1FFFh

Символ ASCII 255    7FE0h-7FFFh

Пятая таблица знакогенератора  (только VGA)

Шестая таблица знакогенератора (только VGA)

Символ ASCII 0       8000h-801Fh

Символ ASCII 0      A000h-A01Fh

Символ ASCII 1       8020h-803Fh

Символ ASCII 1      A020h-A03Fh

Символ ASCII 2       8040h-805Fh

Символ ASCII 2      A040h-A05Fh

...            ...       

...           ...       

Символ ASCII 255     9FE0h-9FFFh

Символ ASCII 255    BFE0h-BFFFh

Седьмая таблица знакогенератора (только VGA)

Восьмая таблица знакогенератора (только VGA)

Символ ASCII 0       C000h-C01Fh

Символ ASCII 0      E000h-E01Fh

Символ ASCII 1       C020h-C03Fh

Символ ASCII 1      E020h-E03Fh

Символ ASCII 2       C040h-C05Fh

Символ ASCII 2      E040h-E05Fh

...            ...       

...           ...       

Символ ASCII 255    DFE0h-DFFFh

Символ ASCII 255   FFE0h-FFFFh

Как видно из этой таблицы, на каждый символ отводится 32 байта. Самый простой способ загрузки собственных таблиц знакогенератора во второй слой видеопамяти заключается в использовании функций BIOS. Мы продемонстрируем его позже в главе "Русификация видеоадаптера".


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