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

         

Схема выполнения операции хоr



Таблица 5.1. Схема выполнения операции хоr



Состояние бита источника 0 0 1 1
Состояние бита приемника 0 1 0 1
Состояние бита результата 0 1 1 0

Oбратите внимание на последний столбец таблицы. Если состояние всех разрядов у приемника и источника одинаково, то в результате получится нуль, т. е. приемник будет очищен. Это свойство команды хоr мы неоднократно использовали в примерах для очистки регистров. Здесь нас интересует ее другое свойство.

Если у источника установлены все разряды, то установленные разряды приемника будут очищены, а очищенные — установлены, т. е. код приемника будет инвертирован. При повторной инверсии произойдет восстановление исходного кода приемника. Таким образом, хоr позволяет инвертировать код приемника, а затем вернуть его первоначальное значение.

Использовать это свойство для построения текстового курсора можно только при определенных ограничениях. Напомним, что в режимах PPG код точки является номером регистра цвета видеокарты. Поэтому, инвертируя код точки, мы изменяем номер регистра видеокарты, а получаемый при этом цвет зависит от того, что записано в этом регистре, т. е. от установленной палитры цветов. При описании системной палитры в разделе мы рекомендовали размещать код черного цвета в регистре 0, а белого — в регистре OFFh. В таком случае при инверсии кода точки будет инвертирован и ее цвет.

Точки изображения символа имеют черный цвет, если рисунок курсора затрагивает эти точки, то они станут белыми. Для уменьшения наложения рисунку курсора придают форму узкой вертикальной черты, расположенной в начале или в конце знакоместа. Например, у редактора Microsoft Word ширина курсора составляет 2 точки. Первая из них расположена в конце одного знакоместа, а вторая — в начале следующего, в которое будет помещен введенный с клавиатуры символ. При таком расположении курсор не закрывает основной рисунок символа.

Подпрограмма TglCrsr. В примере 5.24 приведен текст подпрограммы, изменяющей состояние курсора на противоположное. При первом обращении изображение курсора появляется на экране, а при втором — удаляется с экрана. Оно имеет форму вертикальной линии, расположенной в двух левых столбцах знакоместа. Высота линии равна высоте символа, а ширина составляет две точки.

Подпрограмма рассчитана на то, что для вывода символов на экран используется знакогенератор из примера 5.19. Поэтому адрес видеопамяти, соответствующий верхнему левому углу рисунка курсора, выбирается из регистра di, а код цвета фона и высоту символов задают переменные grndcoi и hsymb (см. пример 5.18). При коррекции адреса видеопамяти используется переменная bperiine, описанная в примере 2.11, она равна значению Horsize, умноженному на размер кода точки в байтах (1—4).



Содержание раздела