Русский текст на экране
Пример загрузки таблицы
Фрагмент программы, приведенный в примере 5.1, составлен с учетом того, что адрес таблицы указан в переменной RsFntie, а размер символов таблицы составляет 8x16 точек.
Пример 5.1. Загрузка таблицы символов 8x16 в знакогенератор.
push es сохранение содержимого es les bp, dword ptr RsFntl6; es:bp = адрес начала таблицы mov ex, 256 количество символов в таблице xor dx, dx смещение первого символа в таблице mov bh, 16 количество байтов на символ хог Ы, Ы номер таблицы в знакогенераторе mov ax, llOOh код запроса "загрузить таблицу" int 10h выполнение запроса pop es восстановление содержимого es
В приведенном примере таблица загружается полностью, что, вообще говоря, делать не обязательно. Первая половина любой таблицы содержит латинский алфавит, цифры, знаки препинания и пр., она является стандартной и уже находится в знакогенераторе. Поэтому можно хранить (в файле или в памяти) и загружать в знакогенератор только вторую половину таблицы, содержащую русские буквы, символы псевдографики и несколько специальных символов. Для загрузки второй половины таблицы в примере 5.1 в регистры сх и dx надо помещать значение 128.
Использование таблиц русификатора
Собственная таблица делает выполнение задачи независимым от наличия русификатора на компьютере. Отсутствие русификатора не такая уж редкость, если пользователи не работают в среде DOS, то он просто не нужен.
Если же русификатор установлен, то можно "заставить" его загружать свои таблицы. Русификатор контролирует все запросы, имеющие отношение к таблицам символов. В частности, при попытке загрузить одну из таблиц ROM Bios, он загружает свою (хранящуюся в ОЗУ) таблицу с русскими шрифтами. BIOS позволяет загрузить из ROM три таблицы со шрифтами следующих размеров:
- запрос HOlh "Load ROM 8x14 Character Font";
- запрос 1102h "Load ROM 8x8 Character Font";
- запрос 1104h "Load ROM 8x16 Character Font".
Перед изданием этих запросов заполняется только регистр, содержащий номер таблицы в знакогенераторе (обычно нуль), все остальные величины функция BIOS формирует самостоятельно. В примере 5.2 приведен фрагмент программы, загружающий таблицу шрифтов 8x16 из ROM.
Пример 5.2. Загрузка таблицы символов 8x16 точек из ROM BIOS.
хог bl, bl; номер таблицы в знакогенераторе mov ax, 1104h; запрос "загрузка таблицы ROM 8x16" int 10h; выполнение запроса
Данный пример проще примера 5.1 и исключает необходимость хранения таблицы в теле задачи, но при отсутствии установленного русификатора в знакогенераторе окажется англоязычная таблица из ROM BIOS.