Графические устройства


Пример 5 18 Аргументы программного знакогенератора



Пример 5.18. Аргументы программного знакогенератора

ftaddr dd 00 ; полный адрес таблицы символов
hsymb dw 16 ; высота символа (размер заготовки в байтах)
augment dw 00 ; ! ! константа переадресации строк рисунка символа
grndcol db OFFh ; !! код цвета точек фона, окружающего символ
symbcol db 00 ; !! код цвета точек контура символа

Если адрес таблицы известен при составлении программы, то его значение указывается в исходном тексте вместо нулей. Если используется одна из таблиц русификатора, то ее адрес можно определить так, как это показано в примере 5.17.

Высота символов обычно известна заранее и указывается в исходном тексте программы. Напомним, что стандартные таблицы содержат символы высотой 8, 14 или 16 строк. В тех случаях, когда планируется работа с символами разной высоты, вам придется предусмотреть запись ее значения в переменную hsymb.

Переменная augment содержит величину, которая добавляется к текущему адресу видеопамяти для перехода в начало следующей строки рисунка символа. Напомним, что в режимах PPG она выражается в точках и вычисляется как разность между шириной рабочего поля экрана и шириной рисунка. Если установлен режим с разрешением 640x480 точек, то при ширине символа В 8 точек значение augment = horsize - 8 = 640 - 8 = 632.

В примере 5.18 значения переменных grndcol и symbcol выбраны исходя из предположения, что символы изображаются черным цветом на белом фоне и что коды черного и белого цветов находятся в DAC-регистрах видеокарты с номерами 00 и 0FFh. Например, именно их используют Windows и ее приложения при работе с текстом. В общем же случае значения указанных переменных зависят от того, в каких регистрах видеокарты расположены коды нужных вам цветов.

Подпрограмма знакогенератора. Текст подпрограммы знакогенератора приведен в примере 5.19. Перед обращением к ней код ASCII выводимого на экран символа помещается в регистр ai. В di записывается адрес видеопамяти для размещения кода точки левого верхнего угла изображения символа. Переменная cur_win содержит окно видеопамяти, которому принадлежит адрес, указанный в di. Предварительная установка окна не требуется. Как обычно при работе с графикой, в регистре ез должен находиться сегмент видеобуфера (значение переменной vbuff). Остальные параметры задаются неявно, это переменные примера 5.18. После выполнения подпрограммы регистр di содержит адрес начала следующего символа, а переменная cur_win — окно, к которому относится этот адрес.









Начало  Назад  Вперед


Книжный магазин