Вид курсора мыши

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Здравствуйте, уважаемые участники форума!

Не знает и кто-нибудь из вас, как менять вид текстового курсора мыши (скажем, изобразить какую-либо фигурку) ? :confused:
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Задать форму курсора в текстовом режиме
С помощью функции 0Ah программа может изменять форму курсора мыши в текстовом режиме.

Регистры на входе:
AX = 000Ah
BX = тип курсора:
0 - определяемый программно;
1 - определяемый аппаратно;
CX = маска экрана (для BX=0) или начальная строка курсора (для BX=1);
DX = маска курсора (для BX=0) или конечная строка курсора (для BX=1)
Регистры на выходе:
Регистры не используются

В зависимости от содержимого регистра BX драйвер мыши использует курсор, определяемый аппаратными средствами, либо курсор, определяемый программно. По умолчанию используется “программный курсор”, который отображается в виде символа с инвертированным значением атрибута. Курсор, сформированный аппаратными средствами, выглядит аналогично обычному текстовому курсору, его форма - прямоугольник. Размер этого прямоугольника можно задавать при помощи регистров CX и DX.
Для курсора, определяемого программно, вначале выполняется операция логического “И” над содержимым видеопамяти в том месте, куда указывает курсор, и маской экрана. Затем выполняется операция “Исключающее ИЛИ” с маской курсора.
Младший байт масок соответствует коду ASCII символа, старший - это байт атрибута символа.
А.В. Фролов, Г.В. Фролов, 1997 Аппаратное обеспечение персонального компьютера Часть 1
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Что-то у меня не получается. Вроде и делаю все правильно, а курсор не меняется.
Может быть предоставете небольшой примерчик?
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Alex_Burn писал(а):Что-то у меня не получается. Вроде и делаю все правильно, а курсор не меняется.
Может быть предоставете небольшой примерчик?

ой... опять всё это непросто.
в виндузовском окне работать НЕ БУДЕТ!
Переводите консоль в полноэкранный режим (ALT-ENTER), обязательно запускайте какое-нибудь DOS приложение, поддерживающее мышь (например, TurboPascal) и там уже смотрите! (ну, или грузите комп с дискетки с DOS'ом)


о вложении.
Вот, в давние-давние времена,
в те времена, когда некоторых нонешных программеров ещё и на свете не было,
был такой комьютерный (софтовый - т.е. исключительно в виде файлов)
киевский журнальчик "Софтпанорама"...
Вот, оттуда я взял сейчас DOS драйвер мышки.
"V-Lab Alpha-Graphics Mouse Driver v.1.04".
с исходниками на ASM.
Вложения
AGM104.zip
(13.63 КБ) 54 скачивания
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

Serge_Bliznykov,
При попытке запустить выложенный вами *.asm файл с помощью AsmConstructor'а у меня появилось 102 ошибки!!
Serge_Bliznykov писал(а): Переводите консоль в полноэкранный режим (ALT-ENTER), обязательно запускайте какое-нибудь DOS приложение, поддерживающее мышь (например, TurboPascal) и там уже смотрите! (ну, или грузите комп с дискетки с DOS'ом)
Нельзя ли по-подробней?

Например, в проге, которую я пытаюсь написать, в Виндоуз графический курсор выводится нормально, а текстовый - в виде прямоугольника, а с дискетки не выводится ни текстовый, ни графический.

З. Ы. Везет мне с заданиями, правда?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):а с дискетки не выводится ни текстовый, ни графический.
Это потому что не загружен драйвер мыши.
Вообще такие вещи всегда делались вручную, никто никакие функции не использовал. Например, люди создавали графический курсор (стрелку) в текстовом режиме. Добивались этого путем программирования знакогенератора - т.е. битовых строк, которые определяют каждый текстовый символ, через порты видеоадаптера.
Причем предполагалось что общее количество различных символов на экране всегда меньше 256-4 (252). Вид тех самых 4 символов, на которых стоял указатель мыши заменялся на битовые изображения этих символов с наложением курсора (стрелки). Только коды этих символов менялись на диапазон с 252-255, чтобы остальные символы на экране не попортились новым изображением. Для примера можно посмотреть NDD.EXE или FFORMAT.COM в которых именно такая реализация.
Примерно по такой же схеме рисовались графические формы поверх текстовых и все в то время удивлялись как люди совмещали графический и текстовый режимы.
It's a long way to the top if you wanna rock'n'roll
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Вот, пример, под DOSBox работает.
Прога и драйвер мыши.
В NDD.EXE и FFORMAT.COM помоему другой принцип, курсор явно не текстовый, движется не по символам, а по пикселям
Вложения
Mouse.zip
(16.52 КБ) 54 скачивания
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):В NDD.EXE и FFORMAT.COM помоему другой принцип, курсор явно не текстовый, движется не по символам, а по пикселям
Курсор движется по символам, просто перепрограммируется внешний вид символов, я об этом уже писал - и, сказать больше, сам писал такие резидентные курсоры.
It's a long way to the top if you wanna rock'n'roll
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

Получается нужно максимально 4 символа постоянно перепрограммировать? Да прикольно вспомнить как все начиналось :)
Аватара пользователя
Alex_Burn
Сообщения: 147
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

airyashov, спасибо большое за пример и прогу!
Только вот в проге с комментариями проблемы, отображаются плохо. С каким шрифтом это необходимо читать?
Ответить