Одной из важных возможностей программы BIOS фирмы IBM является
способность показывать на экране текст даже тогда, когда цветной
графический адаптер работает в графическом режиме. Это
осуществляется с помощью таблицы образов символов по адресу
0FFFFH:0FA6EH. Эта таблица содержит образы символов для первых 128
символов. Если нужно, пользователь может загрузить в вектор
прерывания 01FH указатель на таблицу образов оставшихся 128
символов.
Как видно в листинге BIOS, когда цветная графическая плата
находится в графическом режиме, программа записи символа переходит
к специальной части под названием GRAPHICS_WRITE. Эта часть
программы извлекает образ символа из таблицы в ПЗУ или из таблицы
пользователя и помещает точки в соответствующие места памяти
дисплея. В этой программе есть несколько интересных мест. В режиме
среднего разрешения программа BIOS расширяет 8-битовый по ширине
образ символа в 16-битовый. Подпрограмма S21 (EXPAND_BYTE) помещает
в регистр AL строку образа символа и расширяет ее до полного
слова, возвращаемого в регистре AX.
Программа записи символов должна также учитывать адресацию
четных и нечетных полей графической платы. В подпрограмме
GRAPHICS_WRITE происходит запись различных строк образов в байты,
расположенные на расстоянии 2000H друг от друга. Это лучше всего
видно в подпрограмме записи для режима с высоким разрешением. В
этом режиме BIOS может записывать символы со строками образа прямо
в буфер дисплея. Но вместо использования команды REP MOVSB для
пересылки восьми байт используется цикл для обслуживания четных и
нечетных полей. Сначала BIOS записывает четное поле с помощью
команды STOSB. Затем записывается нечетное поле с помощью команды
MOV по адресу [DI+2000H-1].
Другая возможность программ записи символов - запись символов
на экран с помощью функции "исключающее или". Это обычный способ
выдачи на экран символов, которые затем надо удалить. Когда
программа BIOS записывает символ на дисплей при включенном бите
XOR, он берет функцию "исключающее или" от содержимого буфера и
образа символа. Обычно это дает символ в читабельной форме, но его
фактический вид зависит от фона, на котором он записывается. Но
когда программа BIOS снова записывает символ на то же место, опять
используя функцию XOR, символ исчезает, и экран возвращается к
своему первоначальному виду. Этот метод предпочтительнее того, при
котором записывается символ, а затем поверх него выдается пробел.
Запись пробела не восстановит экран к виду, который он имел до
записи символа. Вы можете очень эффективно использовать эту
возможность записи со стиранием в случаях, когда вам надо выдать
временное сообщение на экран.
Программа чтения символа работает аналогично, когда дисплей
находится в графическом режиме; BIOS извлекает образ символа из
дисплейного буфера, а затем сравнивает этот образ с образами
таблицы символов. Когда она находит символ, это отвечает, что по
данному адресу находится найденный символ. Эта программа работает
только в случае точного соответствия, так что если часть другой
графической картинки вторгнется в позицию символа, BIOS не сможет
распознать символ. Более того, эта программа позволяет программисту
считать графический режим идентичным текстовому режиму. Пока
программа использует для взаимодействия с дисплеем BIOS, она может
работать с текстом независимо от режима работы дисплея.
Вспомним теперь, что и программы сдвига изображения тоже имеют
специальные части для обслуживания графических режимов. Если вы
вернетесь к соответствующей части BIOS, то обнаружите, что она
определяет окна сдвига в графическом дисплее и выполняет сдвиг
способом, который идентичен сдвигу в текстовом режиме. Сдвиг в
графических режимах происходит несколько медленне, чем в текстовом
режиме, в первую очередь из-за того, что программа должна переслать
все 16000 байт, а не 2000 или 4000 байт, нужных в текстовом режиме.
Это дает 4- - 8-кратное увеличение времени сдвига, и оно становится
заметно больше.
Способность BIOS обрабатывать символы в графических режимах
дает большие возможности. Становится достаточно простым нарисовать
график или картинку, а затем использовать символы для пометки
отдельных частей рисунка. Кроме того, вы можете отвести часть
экрана под графическое изображение, а другое окно использовать для
текста. В это окно вы можете заносить обычный текст с помощью
программ символьного вывода, а также сдвигать его. В других случаях
вы можете записывать символы на дисплей, не обращая внимания на его
текущий режим. BIOS сама определит, в каком режиме находится
дисплей, и правильно запишет символы.