Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал - Изменение формы курсора

ОГЛАВЛЕНИЕ

     4.2.4 Изменение формы курсора.


   Курсор может меняться по толщине от тонкой линии до максималь-
ного размера, отводимого  под  символ.   Он  строится из коротких
горизонтальных отрезков, верхний из которых называется "начальной
строкой" курсора, а нижний - "конечной строкой". Для монохромного
дисплея  под каждый символ отводится 14 строк, пронумерованных от
0 до 13, начиная сверху. Промежутки между символами обеспечивают-
ся двумя верхними строками и тремя нижними.  Большинство символов
распологаются в строках  2-10,  хотя  хвостики некоторых символов
достигают  линий  12 и 13, в то время как подчеркивание  занимает
одну двенадцатую строку.
   На 200-строчном цветном дисплее для каждого символа  отводится
только 8 строк, а символ  рисуется  в верхних семи строках. Эти 8
строк  пронумерованы от 0 до 7, начиная сверху, и нормальный кур-
сор формируется одной строкой 7. (Отметим, что на цветном дисплее
нет  подчеркивания,  поскольку  использование  для  подчеркивания
строки 7 привело бы к тому, что  символы  сливались бы с располо-
женными под ними.) Цветной дисплей высокого разрешения использует
14-строчный монохромный вариант, когда он работает в режиме высо-
кого разрешения, а когда он работает в одном из цветных графичес-
ких режимов, то он использует 8-строчный режим.
   Курсор может быть сформирован  любой  комбинацией  прилегающих
отрезков. Для монохромного дисплея он занимает все отведенное под
символ место, когда "начальная строка" равна 0, а "конечная стро-
ка" равна 13 (для графического дисплея надо использовать значение
"конечной строки" равное 7).  Если значения "начальной" и "конеч-
ной"  строки совпадают, то возникает однострочный  курсор.   Если
номер "конечной строки" меньше  чем "начальной" то возникает кур-
сор, состоящий из двух частей, так как происходит перенос в верх-
ние строки. Например, если "начальная строка" равна 12, а "конеч-
ная"  - 1, то сначала заполняется строка 12, затем 13, затем 0 и,
наконец, 1.  Курсор при  этом  принимает  форму двух параллельных
линий,  указывающих  верхнюю  и нижнюю границы ряда,  который  он
занимает.
   BIOS хранит 2-байтную переменную  по адресу 0040:0060, которая
содержит текущие значения "начальной" и "конечной" строк.  Первый
байт содержит значение "конечной строки", а второй - "начальной".

   Высокий уровень.


   В Бейсике  оператор  LOCATE  может  не  только позиционировать
курсор  и включать или выключать его, но и управлять его  формой.
Парметры, устанавливающие  "начальную"  и "конечную" строки - это
4-е  и  5-е число, следующие за словом LOCATE.  Другие  параметры
могут быть опущены,  если  присутствуют  разделяющие  их запятые.
Таким образом, чтобы создать толстый курсор, занимающий строки со
2 по 12, надо записать LOCATE ,,,2,12. Отметим, что Бейсик обычно
выключает курсор, когда начинает выполнение программы.  Как вклю-
чить его обратно см. в [4.2.3].

   Средний уровень.


   Функция 1 прерывания  BIOS  10H  устанавливает  "начальную"  и
"конечную" строки курсора.  В CH должна быть указана "начальная",
а в CL - "конечная" строка.

;---установка "начальной" и "конечной" строк курсора
   MOV  AH,1      ;номер функции
   MOV  CH,0      ;начать курсор в верхней строке
   MOV  CL,7      ;окончить курсор в восьмой строке
   INT  10H       ;

   Низкий уровень.


   Регистры 10 и 11  контроллера  дисплея  6845 содержат значения
"начальной" и "конечной" строки, соответственно.  Доступ к  обоим
регистрам осуществляется через порт 3B5H для монохромного адапто-
ра  и 3D5H - для цветного алаптора и PCjr.   Предварительно  надо
послать номер  требуемого  регистра  в  адресный регистр, имеющий
адрес порта 3B4H (см.  [4.1.1]).  Значения занимают младший конец
каждого регистра.  Однако регистр "начальной" строки (#10) битами
5  и 6 индицирует также должен ли выводиться  курсор.   Поскольку
курсор выводится, когда  оба  этих  бита  сброшены в 0, то просто
поместив в регистр номер "начальной" строки мы установим эти биты
в 0. Остальные биты этого регистра не используются.

;---установка "начальной" строки
   MOV  DX,3B4H     ;доступ к адресному регистру 6845
   MOV  AL,10       ;выбор регистра 6845
   OUT  DX,AL       ;посылка запроса
   MOV  AL,0        ;номер "начальной строки" 0
   INC  DX          ;переходим к управляющему регистру
   OUT  DX,AL       ;посылаем номер "начальной строки"
;---установка "конечной строки"
   MOV  AL,11       ;выбираем регистр 11
   DEC  DX          ;возвращаемся к адресному регистру
   OUT  DX,AL       ;посылаем запрос
   MOV  AL,7        ;номер "конечной строки" 7
   INC  DX          ;переходим к управляющему регистру
   OUT  DX,AL       ;посылаем номер "конечной строки"