Иллюстрированный самоучитель по SVGA

Предварительные действия

Выполнение настройки

Способ выполнения всех описанных действий иллюстрирует пример 6.9. Приведенный в нем фрагмент программы должен выполняться в процессе подготовительных действий, но только после установки видеорежима и получения его характеристик.

Пример 6.9. Настройка драйвера, задачи и первый вывод курсора.

mouse 0 инициализация драйвера
;!! здесь желательно проверить содержимое регистров АХ и ВХ!!
хоr сх, сх СХ = Xmin = Ymin = 0
rnov ax, horsize DX = Xmax = horsize
mouse 7 установка границ по горизонтали
mov dx, versize DX = Ymax = versize
mouse 8 установка границ по вертикали
mov сх, horsize СХ = horsize
shr ex, 01 центр экрана по горизонтали
shr dx, 01 центр экрана по вертикали
mouse 4 установка значений счетчика драйвера
mov Xpointer, сх Xpointer = 0.5 * horsize
mov Ypointer, dx Ypointer = 0.5 * versize
mov ax, versize AX = versize
inc ax AX = versize + i
mul ex DX:AX = (versize + 1) * horsize / 2
; В режимах direct color результат надо умножить на размер кода точки
mov Offspnt, ax сохраняем смещение рисунка курсора
mov ax, GrUnit AX = единица измерения размера окна
mul dl AX = DL * GrUnit (номер видеоокна)
add ax, Base_Win!! учитываем значение базового окна
mov Winpnt, ax сохраняем значение окна видеопамяти
call Showpnt первое построение рисунка курсора

При вычислении адреса видеопамяти по номеру строки и столбца надо учитывать размер кода точки. Пример 6.9 предназначен для выполнения в режимах PPG, когда код точки занимает 1 байт. Если ваша задача работает с режимами direct color, то результат, вычисленный командой mul, надо дополнительно умножить на размер кода точки. Подробнее об этом будет сказано при описании примера 6.13.

Важно
Команда add ax, Base_win нужна только в том случае, если задача поддерживает работу со страницами видеопамяти, в остальных случаях ее надо исключить из текста примера
.

В зависимости от способа построения изображения курсора в последней команде примера 6.9 должна вызываться подпрограмма showpnt (см. пример 6.5) или Tgipntr (см. пример 6.4).

Чувствительность курсора и мыши

При установке драйвера по умолчанию выбирается режим работы, при котором перемещение мыши на 1 дюйм по горизонтали или вертикали вызывает перемещение курсора на 640 столбцов. или на 320 строк. Рассмотрим, как драйвер увязывает перемещения мыши и курсора.

Во внутреннем буфере драйвера имеются четыре счетчика, содержащих количество перемещений по вертикали и горизонтали. Два из них связаны с курсором, а два с мышью. Условимся обозначать их как СПК (счетчик перемещений курсора) и СПМ (счетчик перемещений мыши). Прикладные задачи могут изменять значения СПК с помощью команды Mouse 4, но значения СПМ они могут только считывать.

Драйвер пересчитывает значения СПМ в значения СПК, используя для этого специальные коэффициенты. При установке драйвера по умолчанию выбираются такие значения коэффициентов, которые вызывают изменение содержимого СПМ и СПК на 1 при каждом перемещении мыши в горизонтальном направлении, и изменение значений СПМ на 1, а СПК – на 2 при каждом перемещении мыши в вертикальном направлении. Прикладная задача или операционная система могут изменить значения коэффициентов.

Функция Mouse 1A устанавливает, a Mouse 1B считывает значение коэффициента, задающего чувствительность СПМ к перемещениям мыши.

Значения коэффициентов указываются или возвращаются драйвером в регистрах bх (горизонтальное направление) и сх (вертикальное направление). Содержимое bх и сх может изменяться от 0 до 100 и интерпретируется как проценты. При задании больших значений они принудительно уменьшаются до 100 (64П).

За единицу принято 50% (код 32h), при котором содержимое СПМ изменяется на 1 при каждом перемещении мыши. Значение 100% вызывает изменение содержимого СПМ на 2 при каждом перемещении мыши. А при коэффициенте 25% оно будет изменяться на 1 при двух перемещениях мыши.

Перемещение мыши принято измерять в mickey. Перевод этого термина автору не известен, но, по сути, это величина обратная количеству точек на дюйм (Dot Per inch или DPI). У современных манипуляторов DPI = 400, соответственно 1 mickey = 1/400 дюйма или примерно 0.06 миллиметра.

Функция Mouse OF устанавливает чувствительность СПК к изменениям СПМ. Перед обращением к драйверу в регистрах сх и dx указываются значения коэффициентов для горизонтального (сх) и вертикального (dx) направлений. Эти коэффициенты указывают, на сколько единиц должно измениться значение СПМ для того, чтобы значение СПК изменилось на 8 единиц. При установке драйвера (по умолчанию) коэффициенты равны 8 для горизонтального и 16 для вертикального направлений. В результате при движении по горизонтали СПМ и СПК изменяются синхронно, а при движении по вертикали СПК изменяется в два раза медленнее, чем СПМ.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.