Страница 15 из 47
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 ;посылаем номер "конечной строки"
|