Графические режимы. Таблицы символов.
Основные особенности графических режимов, имеющие непосредственное отношение к работе с текстом, заключаются в следующем:
- видеобуфер располагается в сегменте ДОООЬ (а не B800h);
- в видеопамяти находятся коды цветов точек, а не символов;
- выключен знакогенератор, преобразующий коды символов в рисунки;
- выключена аппаратная поддержка работы с текстовым курсором.
Из этого перечня следует, что после установки графических режимов (как VESA, так и IBM) изображения символов и курсора на экране должны рисовать специальные подпрограммы. При работе с текстом в графических режимах IBM можно использовать поддержку BIOS, но в режимах VESA задача должна самостоятельно выполнять все необходимые действия.
Для вывода текста на экран нужен набор заготовок рисунков всех используемых символов. Обычно эти заготовки хранятся в специальных таблицах символов. Структура стандартных таблиц не зависит от режима, в котором они будут использоваться. При описании текстовых видеорежимов нас не интересовала структура таблиц, поскольку изображения символов рисовал видеоконтроллер. В данном случае нам необходимо знать способ хранения данных в таблицах символов, для того чтобы составить подпрограмму, выполняющую функции знакогенератора.
Структура стандартных таблиц
В стандартных таблицах ширина символа составляет восемь точек, т. е. код одной строки (линии) рисунка символа занимает один байт. В зависимости от высоты символа (количества строк в знакоместе) заготовка полного рисунка занимает 8, 14 или 16 байтов, расположенных последовательно друг за другом. Полная таблица содержит 256 заготовок символов и занимает в оперативной памяти пространство 256x8=2048, 256x14=3584 или 256x16=4096 байтов.
Заготовка строки кодируется следующим образом. Старший бит (разряд) байта соответствует крайней левой позиции в строке, а младший бит – крайней правой позиции. Если текущая позиция содержит одну из точек рисунка символа, то соответствующий ей бит установлен (содержит 1), в противном случае он очищен (содержит 0).
На рис. 5.1 схематически изображено расположение русской буквы Б в стандартном прямоугольнике (знакоместе) размером 8x16 точек. Первый столбец рисунка содержит коды байтов каждой строки. В остальных восьми столбцах расположен рисунок буквы Б.
Если клетка содержит точку изображения символа, то в ней записана буква Х, пустые клетки соответствуют фону, окружающему изображение символа.
00 | ||||||||
00 | ||||||||
FE | X | X | X | X | X | X | X | |
62 | X | X | X | |||||
62 | X | X | X | |||||
60 | X | X | ||||||
7С | X | X | X | X | X | |||
66 | X | X | X | X | ||||
66 | X | X | X | X | ||||
66 | X | X | X | X | ||||
66 | X | X | X | X | ||||
FC | X | X | X | X | X | X | ||
00 | ||||||||
00 | ||||||||
00 | ||||||||
00 |
Рис. 5.1. Буква Б из таблицы символов размером 8x16