Глава 4. Вывод на терминал.

Раздел 2. Управление курсором.

4.2.5 Чтение/сохранение/восстановление позиции курсора.

Программы иногда читают и сохраняют текущее положение курсора, с тем чтобы можно было временно перевести курсор в командную строку, а затем вернуть его в исходную позицию. Текущая позиция курсора для каждой из вплоть до восьми страниц хранится в области данных BIOS. Имеется восемь 2-байтных переменных, размещающихся начиная с адреса 0040:0050. Первая позиция соответствует странице 0, вторая - странице 1 и т.д. Младший байт каждой переменной содержит номер столбца, а младший - номер строки. Kак столбцы, так и строки нумеруются, начиная с нуля.

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

Функция 3 прерывания 10H возвращает строку курсора в DH, а столбец - в DL. Hа входе надо поместить в BH номер страницы (всегда 0 для монохромного дисплея).
;---определение позиции курсора
MOV AH,3 ;номер функции
MOV BH,0 ;страница 0
INT 10H ;строка:столбец в DH:DL

MS DOS предоставляет две Esc-последовательности для сохранения и восстановления позиции курсора. Это специальные строки, которые если их "вывести" на терминал управляют монитором. Основы использования этих последовательностей описаны в приложении Д. Последовательность для запоминания позиции курсора - Esc[s, а для восстановления - Esc[u. Hет нужды запоминать координаты в переменной.
;---в сегменте данных
SAVE_CURSOR DB 27,'[s$'
RESTORE_CURSOR DB 27,'[u$'
;---сохранение курсора
LEA DX,SAVE_CURSOR ;адрес начала строки в DX
MOV AH,9 ;номер функции вывода строки
INT 21H ;сохраняем позицию курсора
;---восстановление курсора
LEA DX,RESTORE_CURSOR ;адрес начала строки в DX
MOV AH,9 ;номер функции вывода строки
INT 21H ;восстанавливаем позицию курсора

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

Регистры 14 и 15 микросхемы 6845 хранят текущую позицию курсора, как объяснялось в {4.1.1}. Старший байт хранится в регистре 14. Два байта хранят числа от 0 до 1999 в режиме 80 символов в строке и от 0 до 999 в режиме 40 символов. Вам необходимо перевести получаемое число в координаты строки и столбца. Вы можете прочитать это значение, чтобы узнать текущее позицию видимого курсора на экране. Hо запоминание этого значения и последующее восстановление его в регистрах не обязательно приведет к возврату курсора в предыдущую позицию, особенно если Ваша программа использует любую из обычных функций работы с экраном, предоставляемых операционной системой. Это происходит потому, что BIOS хранит положение курсора в своих переменных, для того чтобы иметь возможность управлять страницами дисплея {4.5.3}. После того как Вы восстановите регистры 14 и 15 курсор переместится в соответствующую позицию, но при следующем вызове прерывания вывода на экран курсор вернется назад к той позиции, в которой он должен находиться согласно значениям переменных BIOS.


<~-4.2.4 Изменение формы курсора.
Содержание
4.2.6 Создание альтернативных типов курсора.-~>

Сайт управляется системой uCoz