Страница 14 из 47
4.2.3 Включение и выключение курсора. Курсор генерируется микросхемой 6845. Он функционирует совер- шенно независимо от видеопамяти. Это значит, что при прямой адре- сации в память дисплея [4.3.1] программное обеспечение должно координировать перемещения курсора с вставкой нового символа в буфер. Отметим, что микросхема 6845 не может ни создавать немер- цающий курсор, ни изменить частоту его мерцания. В [4.2.6] пока- зано как сконструировать другие "искусственные" типы курсора.
Высокий уровень. Интерпретатор Бейсика автоматически выключает курсор при за- пуске программы. Курсор появляется, когда используется оператор INPUT, но не в других случаях. Если Вашей программе необходим курсор, скажем для процедуры INKEY$, то он должен быть включен установкой третьего параметра оператора LOCATE в 1 (0 снова вык- лючит его). Напоминаем, что первые два параметра оператора LOCATE устанавливают строку и столбец, в которых должен выводиться кур- сор.
100 LOCATE 15,40,1 ;включить курсор, его позиция 15,40 или 100 LOCATE ,,1 ;включить курсор в текущей позиции и 100 LOCATE ,,0 ;снова выключить курсор
Курсор будет оставаться при последующих появлениях оператора LOCATE без установки каждый раз третьего параметра. Однако надо отметить, что операторы INPUT и INPUT$ выключат его после их выполнения.
Средний уровень. Ассемблерные программы оставляют курсор включенным, до тех пор, пока им не указано обратное. Операционная система не предос- тавляет специальных средств выключения курсора, но это легко сделать. Надо просто позиционировать курсор за пределы экрана, с помощью функции 2 прерывания 10H установить его в первую позицию 26-й строки. Помните, что координаты отсчитываются от нуля, так что этой позиции соответствуют координаты 25,0.
MOV BH,0 ;номер страницы (всегда 0 для монохромного) MOV DH,25 ;строка MOV DL,0 ;столбец MOV AH,2 ;номер функции INT 10H ;устанавливаем курсор за пределы экрана
Низкий уровень. Бит 6 регистра 10 микросхемы 6845 [4.1.1] выключает курсор, когда он установлен в 1, и включает его, когда сброшен в 0. Этот регистр содержит также значение "начальной строки" для курсора, которое вместе со значением "конечной строки" определяет толщину курсора [4.2.4]. Поскольку тип курсора не имеет значения, когда курсор выключен, то надо просто поместить в регистр 10 значение 32, чтобы установить бит 6. Чтобы восстановить курсор Вы должны также вернуть значение "начальной строки" курсора. Для нормаль- ного курсора это значение равно 11. Значение "конечной строки" при этих процедурах не меняется, поскольку оно хранится в другом регистре.
;---выключение курсора MOV DX,3B4H ;номер порта адресного регистра 6845 MOV AL,10 ;выбор регистра 10 OUT DX,AL ;посылаем запрос INC DX ;доступ к регистру через следующий порт MOV AL,32 ;устанавливаем бит 6 для выключения курсора OUT DX,AL ;выключаем курсор ;---обратное включение курсора MOV AL,11 ;значение "начальной строки" OUT DX,AL ;включаем курсор
|