Предыдущий раздел УПРАВЛЕНИЕ УСТРОЙСТВАМИ БЕЗ ПРЕРЫВАНИЙ Следующий раздел

20.3.3. Управление курсором

Под термином управление курсором понимается изменение формы курсора и его координат на экране. При этом аппаратно курсор никак не связан с выводом символов на экран. Например, если даже очистить от символов весь экран, курсор все равно останется неподвижным.

Общепринято, что курсор должен указывать на то место экрана, куда будет выведен следующий символ. Если мы используем системные вызовы DOS или BIOS, то их подпрограммы сами устанавливают курсор в нужное положение. Но если мы программируем на уровне портов, то должны сами позаботиться об этом. Так как за отображение курсора на экране отвечает CRT, то для управления курсором необходимо выполнить действия по программированию этого контроллера.

Для того чтобы курсор был виден на экране, его координаты могут меняться в пределах 25 строк (0…24) и 80 столбцов (0…79), то есть в пределах экрана. При этом положение курсора содержится в регистрах 14 и 15 (см.табл.6) как число от 0 до 1999,  что соответствует 2000 (25*80) позициям экрана. Если содержимое регистров 14 и 15 изменить, то положение курсора также изменится. Для этого достаточно выполнить действия:

1) поместить в RI запрос на использование регистра 15;

2) поместить в RD младший байт позиции курсора;

3) поместить в RI запрос на использование регистра 14;

4) поместить в RD старший байт позиции курсора.

После выполнения этих действий курсор будет немедленно перемещен контроллером на заданную позицию экрана.

Форма курсора может меняться – от тонкой линии до максимального размера, отводимого под символ. Это обеспечивается за счет того, что курсор строится из коротких горизонтальных отрезков, верхний из которых называется начальной строкой курсора, а нижний – конечной строкой. В CGA для каждого символа (а, следовательно, и для курсора) отводятся только 8 строк, пронумерованных, начиная сверху, от 0 до 7. Значения начальной и конечной строк содержатся соответственно в управляющих регистрах 10 и 11. Запись в эти регистры выполняется точно так же, как и изложенная выше запись в регистры 14 и 15. (Заметим, что интересный эффект получается при задании начальной строки больше конечной.)

 


Предыдущий раздел В начало Следующий раздел