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

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

Модератор: Andy

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

26 апр 2008, 20:10

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

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

26 апр 2008, 23:15

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

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

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

27 апр 2008, 14:55

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

27 апр 2008, 21:32

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

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


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

27 апр 2008, 23:41

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

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

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

28 апр 2008, 09:12

&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
Сообщения: 416
Зарегистрирован: 02 ноя 2007, 10:31

28 апр 2008, 11:48

Вот, пример, под DOSBox работает.
Прога и драйвер мыши.
В NDD.EXE и FFORMAT.COM помоему другой принцип, курсор явно не текстовый, движется не по символам, а по пикселям
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

28 апр 2008, 13:11

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

28 апр 2008, 13:17

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

29 апр 2008, 13:01

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