Приветствую Вас Гость | RSS


Главная страница » Кемпстон маус драйвер с переменной скоростью курсора - ZX-Форум » Регистрация » ВходПонедельник
2024-10-07
02:49:21
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Кемпстон маус драйвер с переменной скоростью курсора
CAMAHACYKEДата: Вторник, 2010-02-09, 00:13:15 | Сообщение # 1
Креветко
Группа: Человеки
Сообщений: 320
Репутация: 3
Статус: Offline
Кто-нибудь сабж делал? Что-то третий день фантазия буксует, не асилел придумать простой алгоритм что б можно было по условию замедлять курсор в 2 раза, 4 раза и т.п.
Все что придумалось, так это счетчик делать двух-байтный и ротировать регистровую пару через флаг С, и уже от нее вычислять дельту перемещения. Ну млин, громоздко получается... Никто не встречал уже готового?
 
breezeДата: Вторник, 2010-02-09, 13:02:43 | Сообщение # 2
Участник
Группа: Человеки
Сообщений: 68
Репутация: 1
Статус: Offline
ооо… когда-то давным давно, когда деревья были большие, а Tom Hial писал smile у нас был чудо дрижер для мышки, но сие кануло где-то в коробах с кучей дискет и разгрести это… wacko

fishbone crew
 
lvdДата: Вторник, 2010-02-09, 18:16:40 | Сообщение # 3
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Репутация: 13
Статус: Offline
ниасилел, что хочет автор топика. Возможно, если он не будет писать свои мысли в АлКо-стайле, его поймут и ему ответят :-))

Многого нет здесь: http://lvd.nedopc.com
 
CAMAHACYKEДата: Вторник, 2010-02-09, 19:32:02 | Сообщение # 4
Креветко
Группа: Человеки
Сообщений: 320
Репутация: 3
Статус: Offline
Сори.
Начну по порядку. Есть мышь. Есть некоторая программа эту мышь поддерживающая. Использован драйвер опубликованный в Спектрофоне 20, слегка переделанный. Драйвер производит перемещение курсора на экране при каждом приращении счетчиков координат мыши 1:1, на один шаг счетчика один пиксел экрана. Возникла необходимость при некоторых условиях снизить скорость курсора для более точного позиционирования. Хотелось сделать возможность переключения между тремя скоростями - нормальная, замедленная в два раза и замедленная в четыре раза.
Алгоритм драйвера мыши предельно простой. В DE загружаются предыдущие чтения из мыши, в HL координаты курсора, BC - адрес порта.
Читаем из порта в А, отнимаем Е (предыдущее состояние счетчика мыши) получаем разность (дельту) в виде BCD-арифметики. По флагу знака переход на свою обработку перемещения (лево/право) и там уже эта дельта прибавляется к предыдущей координате курсора с проверкой на краевые условия.
Перебрал несколько вариантов, пока остановился на таком: для замедления использую логическое деление дельты перед прибавлением к координате курсора, но предварительно сохраняю в ячейке памяти те биты, которые были выдвинуты операцией SRL A, что бы при следующем прерывании добавить их непосредственно перед логическим сдвигом. Иначе возникает ситуация когда при очень медленном движении мышью курсор остается на месте. Ну в общем имхо громоздко получилось.
А теперь вопрос, страдал ли еще кто-нибудь подобной фигней и с каким результатом? Ну и как вариант не встречал ли кто-нибудь готовой процедуры с описанным эффектом, и если да, то где?


Сообщение отредактировал CAMAHACYKE - Вторник, 2010-02-09, 22:04:56
 
нолькаДата: Вторник, 2010-02-09, 20:00:19 | Сообщение # 5
рОвный
Группа: Человеки
Сообщений: 712
Репутация: 5
Статус: Offline
посмотри как меняется скорость курсора в этой проге:
http://trd.speccy.cz/system/DBS07.ZIP


я проснулся среди ночи и понял, что всё...
всё идет по плану
 
lvdДата: Вторник, 2010-02-09, 20:14:58 | Сообщение # 6
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Репутация: 13
Статус: Offline
Ниасилил, причём тут BCD - или ты имел в виду знаковую арифметику?
Можно в вычисленном смещении (-128..+127), расширить знак до 16бит и добавлять это в аккумулятор координаты, тоже 16битный (чтоб потом эту координату можно было бы склиппировать). Соотвно после такого понижение чуйкости делается оч. просто - величины клиппирования увеличиваются вдвое, а когда нужно координату достать - делается sra h:rr l и в l имеем координату экранную, и младший бит не проипывается.


Многого нет здесь: http://lvd.nedopc.com
 
CAMAHACYKEДата: Вторник, 2010-02-09, 21:45:28 | Сообщение # 7
Креветко
Группа: Человеки
Сообщений: 320
Репутация: 3
Статус: Offline
Quote (lvd)
причём тут BCD - или ты имел в виду знаковую арифметику?

О, да. Лоханулся. Я всего лишь средней тупости связист посягнувший на таинства асемблера. Ты прав, то что я считал ВСД - это и правда знаковая арифметика.
По существу твоего предложения - первое неудобство в том что для каждой координаты приходится учитывать двухбайтное число, соответственно все операции тоже нужно делать регистровыми парами, а также при чтении из мыши однобайтного числа нужно учитывать момент переход через ноль с учетом знака.... в общем гемор, я лично асилел когда создал два промежуточных счетчика; второе неудобство в том что в момент перехода чувствительности курсор отпрыгивает, т.е. нужно еще и этот момент рассмотреть и скорректировать. За предложение спасибо, но мой вариант с сохранением сдвигаемых битов получается короче. Ну или я тебя не так понял (тоже Алко-стайл biggrin ).

Quote (нолька)
посмотри как меняется скорость курсора в этой проге:
http://trd.speccy.cz/system/DBS07.ZIP

Да, спасибо, посмотрел. Там с адреса 6A48 лежит драйвер мыши. Досконально не разбирал, есть там кое-что непонятное, но в целом видно что драйвер работает в два этапа - сначала как обычно вычисляет новые координаты,сохраняет, а потом уже берет какие-то предыдущие значения и преобразовывает. В целом получается очень длинно и не вкурил конечного результата. Как нибудь может на досуге погоняю процедуру в STS что бы понять нюансы, но в целом имхо громоздко.
Спасибо всем кто откликнулся.

Сообщение отредактировал CAMAHACYKE - Вторник, 2010-02-09, 21:58:13
 
нолькаДата: Вторник, 2010-02-09, 22:04:02 | Сообщение # 8
рОвный
Группа: Человеки
Сообщений: 712
Репутация: 5
Статус: Offline
да не. я не про код, а про то как стрелка двигается. а код можно в журнале взять (щас сходу не скажу в каком)

я проснулся среди ночи и понял, что всё...
всё идет по плану
 
CAMAHACYKEДата: Вторник, 2010-02-09, 22:30:02 | Сообщение # 9
Креветко
Группа: Человеки
Сообщений: 320
Репутация: 3
Статус: Offline
Quote (нолька)
да не. я не про код, а про то как стрелка двигается. а код можно в журнале взять (щас сходу не скажу в каком)

Ну имхо в начале движения курсор слишком резвый, я пытаюсь добиться большего замедления на малых перемещениях. С другой стороны еще фик его знает как оно реализованное себя поведет, может это у меня в воображении все клево, а когда сделаю ... В общем надо мне сначала доделать и поюзать, а потом уже говорить.

 
lvdДата: Вторник, 2010-02-09, 23:14:51 | Сообщение # 10
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Репутация: 13
Статус: Offline
Quote (CAMAHACYKE)
По существу твоего предложения - первое неудобство в том что для каждой координаты приходится учитывать двухбайтное число, соответственно все операции тоже нужно делать регистровыми парами,

это, конечно, меганеудобство, зато как удобно + и - отдельными ветвями кода обрабатывать...

Quote (CAMAHACYKE)
а также при чтении из мыши однобайтного числа нужно учитывать момент переход через ноль с учетом знака....

Чоо? Расширить знак байта до 16 бит ты ниасилил как? Подсказываю: rla:sbc a,a

Quote (CAMAHACYKE)
второе неудобство в том что в момент перехода чувствительности курсор отпрыгивает,

Значит в момент перехода надо патчить 16битный аккумулятор - очевидно же.

Quote (CAMAHACYKE)
За предложение спасибо, но мой вариант с сохранением сдвигаемых битов получается короче.

Ага, еще не забудь сохранить старшие биты для экрана 320х. А ещё, кстати out (fd),a короче чем ld bc,7ffd, out©,a. Тоже учти - короче получится! tongue


Многого нет здесь: http://lvd.nedopc.com
 
CAMAHACYKEДата: Вторник, 2010-02-09, 23:30:13 | Сообщение # 11
Креветко
Группа: Человеки
Сообщений: 320
Репутация: 3
Статус: Offline
Quote (lvd)
Чоо? Расширить знак байта до 16 бит ты ниасилил как? Подсказываю: rla:sbc a,a

Нифига се, вот это надо покурить! Не знал.

Quote (lvd)
Ага, еще не забудь сохранить старшие биты для экрана 320х. А ещё, кстати out (fd),a короче чем ld bc,7ffd, out©,a. Тоже учти - короче получится!

Надо же какой ты прошаренный, если решишь поменять пол, то так и быть - женюсь на тебе tongue

 
lvdДата: Среда, 2010-02-10, 00:35:01 | Сообщение # 12
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Репутация: 13
Статус: Offline
Quote (CAMAHACYKE)
Надо же какой ты прошаренный, если решишь поменять пол, то так и быть - женюсь на тебе

Пол поменять кстати надо, дощечки вон выпадают отдельные после потопа, а давно ли вы пытаетесь жениться на мужыках? У вас с ориентацией всё в порядке?


Многого нет здесь: http://lvd.nedopc.com
 
CAMAHACYKEДата: Среда, 2010-02-10, 01:31:58 | Сообщение # 13
Креветко
Группа: Человеки
Сообщений: 320
Репутация: 3
Статус: Offline
Шютко. Забей.
Длина твоего шворца недосягаемо-заоблачная и сомнениям не подлежит.
Позвольте пошутить над Вами, дядя LVD? shock
 
BudderДата: Среда, 2010-02-10, 01:44:54 | Сообщение # 14
Креветко
Группа: Человеки
Сообщений: 261
Репутация: 14
Статус: Offline
В приложении к DejaVu#0A есть исходник драйвера мыши со всякими настройками...

P.S. опросы мышек делал последний раз в 2002м, посему уже особо не в теме. happy


MGN Group
 
lvdДата: Среда, 2010-02-10, 16:57:52 | Сообщение # 15
Retry, Abort, Ignore?
Группа: Человеки
Сообщений: 2528
Репутация: 13
Статус: Offline
Quote (CAMAHACYKE)
Длина твоего шворца недосягаемо-заоблачная и сомнениям не подлежит.

Дядя <непроизносимый_по-русски_ник>, это ты сейчас о чём сказал? Я такого слова не знаю. Кстати что за софты ваяешь, с мышкой-то?


Многого нет здесь: http://lvd.nedopc.com
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

the DLCorp © 2006