Иллюстрированный самоучитель по SVGA

Русский текст на экране

Пример загрузки таблицы

Фрагмент программы, приведенный в примере 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.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.