PDA

Просмотр полной версии : Как быстро добраться до мыши?



TomCaT
27.02.2010, 20:01
Вопрос-то пустяковый, но в реале никогда с устройством не работал :) - на Спектре, то есть. А в литературе с ходу как-то не встречается освещение вопроса, даже даташит по ее портам не нахожу. Где можно почитать про опрос мыши?

Да, и, насколько понимаю, порт постоянно опрашивается и постоянно перерисовывается курсор (точность нужна попиксельная). Где можно поискать процедуры обновления курсора?

breeze
27.02.2010, 20:05
http://speccy.info/Kempston_Mouse

null_device
27.02.2010, 20:12
В 20 Spectrofon'e (раздел конструктор) приведена схема и пример драйвера для кемпстон мыши..
----
Хотя, breeze, дал ссылку на более полную информацию ;)


А ещё есть sinclair mouse.

А, также AY, AMX и многие другие.. :)

Rindex
27.02.2010, 20:15
А ещё есть sinclair mouse. И даже Art-studio под неё. Но это я так, о птичках... :v2_rolley

TomCaT
27.02.2010, 20:17
Они несовместимы?

Rindex
27.02.2010, 20:18
Они несовместимы?

Нет.

null_device
27.02.2010, 20:19
Принцип работы и "железоспецификация" у них, безусловно - разные!
----
кемпстон мышь - на просторах бывшего СССР наиболее популярный интерфейс, ставший стандартом (также, как тр-дос).

Rindex
27.02.2010, 20:23
А, также AY

Блин, а она вроде и есть. Чёго-то я попутался. Точно, AY-mouse. Art-studio нужно? Или нет?

null_device
27.02.2010, 20:32
На VT выкладывалась версия арт струдио для работы с мышой подрубаемой к порту кемпстон джойстика (с задествованными неиспользуемыми разрядами). Была, кажется и версия с AY mouse..
----

Да, и, насколько понимаю, порт постоянно опрашивается и постоянно перерисовывается курсор (точность нужна попиксельная).

Поскольку это не клавиатура (или джостик, что по-сути одно и то же), опрашивать можно чуть реже.

Rindex
27.02.2010, 20:39
На VT выкладывалась версия арт струдио для работы с мышой подрубаемой к порту кемпстон джойстика (с задествованными неиспользуемыми разрядами). Была, кажется и версия с AY mouse..

Не вижу. Вижу только одну урезанную, но с kempston mouse - Art Studio v2.3
Вот тут (http://www.zx.pk.ru/showthread.php?t=11274) человек искал нормальную Art-studio 128. Нашёл. :)

null_device
27.02.2010, 20:48
Ну, значит не с VT стянул.. Но точно помню, что запускал на эмуле! Видимо на другом компе лежит. На этом, че-то не нашел. :(

TomCaT
28.02.2010, 13:57
Art-studio нужно? Или нет?

Спасибо. Даташит-информация и примеры по Kempston уже помогли, с нее и начну... По Sinclair-мыши вот информации пока нет, а хорошо бы.

Искать же в ArtStudio конкретную реализацию - с программистской точки зрения - долгонько. А с пользовательской - пока одной версии 2.3 mod Viator/RUSH хватает. Вот если конкретное описание портов...

null_device
28.02.2010, 14:06
Вероятнее всего sinclair мыш - имитация с помощью мыши одноименного джойстика (на кемпстон джой такая фича была - moa mouse, называется!:))


Нет, AY-mouse. Вот для неё в "вложениях" Art-studio. Работает только с мышой. А вот тут описание схемы подключения, саму схему найдете в этом-же журнале, когда его скачаете.

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

Rindex
28.02.2010, 15:30
Вероятнее всего sinclair мыш - имитация с помощью мыши одноименного джойстика (на кемпстон джой такая фича была - moa mouse, называется!:))

Нет, AY-mouse. Вот для неё в "вложениях" Art-studio. Работает только с мышой. А вот тут (http://www.zxpress.ru/article.php?id=2641) описание схемы подключения, саму схему найдете в этом-же журнале, когда его скачаете.

Destr
01.03.2010, 08:36
Вообще-то мышей для спека куча, всякие там amx, ay и т.д.
На наших отечественных просторах стал типа стандарт kempston мыша...
Но и даже тут мы впереди планеты всей.
То, блин, вокнут два триггера в разъём джойстика (который #1f) и кричат что мыша клёвая, то прицепят девайс как надо, зато кнопки перепутают...
В общем мыша на спеке это такой шлак, что нельзя юзать драйвера предлагаемые кем-либо, а нужно писать свой, который учтёт все вариации.
А начать нужно с того, что зайти на zx.press.ru и задать в строке поиска например "mouse".
P.S. И заранее облом! Потому что как ни выёживайся, но полноценного юзанья не получится, обязательно будут косяки ибо всего байт (8 бит) максимальной разрядности.

psb
01.03.2010, 09:24
И заранее облом! Потому что как ни выёживайся, но полноценного юзанья не получится, обязательно будут косяки ибо всего байт (8 бит) максимальной разрядности.
что за облом???
чтобы случился глюк, мышку надо двигать ОЧЕНЬ быстро. реально все работает ок.
и принято было делать драйвер, что первая нажатая кнопка мыши - левая. и еще вносили нелинейность в движение мыши (чтобы быстрее двигалась).

Destr
01.03.2010, 09:28
что за облом???
Очень просто, поставь курсор в край экрана и невзначай возмись за мышу (сдвинув её).
В винде это не приведет ни к чему, разве что курсор децл сместится.
На спеке вполне вероятно (и скорее всего) что он "перепрыгнет" через скрин и вылезет где угодно...
Сие оттого что как было сказано 8 бит у спековой мыши (да и у шины данных).

Насчет кнопок: Это здорово придумано, вместо путалова кнопок - первая нажатая = левая.
Давайте расширим эту гениальную мысль, в автомобиле первая включеная передача считается задней!
Весело?
Это не критиканство, это в общем-то призыв наконец-то стандартизировать все эти дела.

null_device
01.03.2010, 10:02
В нормальных продуктах (например в той же открывашке или ЧВ) мышака настраивается. Ингда даже есть функция выбора левой кнопки.
Разрешение в 256х256 точек, конечно не есть гуд, заставляющий опрашивать мыш быстрее. Чтобы триггер не сделал полный оборот.. Драйвер надо нормальный написать и проблем никаких не будет.
Очень, например огорчает факт отсутствия управления мышью в НЛО-1. Там его очень не хватает!

Vitamin
01.03.2010, 10:10
Очень просто, поставь курсор в край экрана и невзначай возмись за мышу (сдвинув её).
В винде это не приведет ни к чему, разве что курсор децл сместится.
На спеке вполне вероятно (и скорее всего) что он "перепрыгнет" через скрин и вылезет где угодно...
Сие оттого что как было сказано 8 бит у спековой мыши (да и у шины данных).
Вместо того чтобы говорить умные слова "вероятно, скорее всего" найди хотя бы одну серьезную программу, у которой такое поведение.

Скажу по большому секрету- нормальный драйвер мыши не просто считывает данные из портов, он их еще и обрабатывает. И на предмет переполнения счетчиков и на предмет границ экрана/области.

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

psb
01.03.2010, 10:14
На спеке вполне вероятно
вполне НЕвероятно! никто и никогда в здравом уме не использует физические данные счетчиков. при опросе мыша 50Гц довольно сложно сдвинуть его на больше 127 пикселей. а значит никакой проблемы и нет.


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

Destr
01.03.2010, 11:35
Драйвер надо нормальный написать и проблем никаких не будет.
О чём я сразу и сказал.


Очень, например огорчает факт отсутствия управления мышью в НЛО-1. Там его очень не хватает!

+1! +1! +1! +1! +1! +1! +1! +1! +1! +1! +1! +1!


Вместо того чтобы говорить умные слова "вероятно, скорее всего" найди хотя бы одну серьезную программу, у которой такое поведение.
Подавляющая часть zx-журналов где мыша есть.


Единственное влияние 8 бит счетчика- при резких перемещениях, когда увеличение счетчика на большие значения может быть интерпретировано как уменьшение. Но это уже мелочи и не имеют практического влияния.
Вот про это я и говорил, и если ВАС ВСЕХ это не волнут - то я заткнусь, но лично мне этот факт (при переполнении и его интерпритации) сильно досаждает....

---------- Post added at 11:35 ---------- Previous post was at 11:31 ----------


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

С машиной это да, это я специально гротеск навёл чтоб мысль была понятна: Наши умельцы всё паяли как себе вздумается в результате хрень вышла полная! Не было на их головы Билли-жадины который бы хоть как-то навёл порядок, а глубокоуважаемый С.Зонов с этой задачей не справился, да и не хотел наверное...
А уж про достопочтимых немов, канов и других инвалидов zx-фронта я вообще молчу...

Vitamin
01.03.2010, 11:44
Подавляющая часть zx-журналов где мыша есть.
Конкретнее можно? Желательно вышедшие после ~2003-2005 годов, когда уже и эмуляторов было навалом (чтоб протестировать работу) и железок много было.

Destr
01.03.2010, 11:52
Конкретнее можно? Желательно вышедшие после ~2003-2005 годов, когда уже и эмуляторов было навалом (чтоб протестировать работу) и железок много было.
Блин, да возми любой драйвер мыша и потести!
Или zx-format запусти, они ведь гуры, они ведь светоч наш и надежда всея руси!
И то лагают...
В общем я не хочу флейм разводить, хотя с тобой можно (ты ведь вроде курируешь эту тему :) ), я выразился ясно: Универсального драйвера нет и никогда не будет, ибо железо кривое и никто стандарта не задавал. Куда идти за справками я тоже обозначил. Всё, спасибо за внимание!

psb
01.03.2010, 12:57
Или zx-format запусти
запускал 100500 раз! никаких глюков не было!!!
глюки могли быть, если ты настоящую мышку ps/2 юзал, в которой УЖЕ есть ускорение. но это не есть тот к.маус, который был описан изначально.

null_device
01.03.2010, 13:00
Абсолютно в дырочку! :) Оригинальная схема мауса заточена под "пассивную" мышь, а всякие контроллера позволяющие подключать pc\2 мышу напрямую к интерфейсу зачастую работают как бог на душу положит. Интересно с подключением РСшной клавы такие же грабли?! 8о

Destr
01.03.2010, 13:06
Абсолютно в дырочку! Оригинальная схема мауса заточена под "пассивную" мышь, а всякие контроллера позволяющие подключать pc\2 мышу напрямую к интерфейсу зачастую работают как бог на душу положит. Интересно с подключением РСшной клавы такие же грабли?! 8о

Лады, сдаюсь...
Вертите как хотите, аудиторию теряйте...
Вот нету у меня сейчас железа реального, и уже вряд-ли появится...
Что делать?
Убится ап стену?
Или всё-таки будет нормальная поддержка мыша (пусть даже виртуального, ps/2)?

null_device
01.03.2010, 13:14
Ну.. допустим эмулятор - реализация того, чего на самом деле нет. Но там все максимально стабильно. На реале же слишком большой разброс ТТХ и схемных реализация, даже внутри одной модели клонов. Ждать тотальной стандартизации в схемах спектрума и его периферии, то же самое, что прихода светлого будующего в отдельно взятой стране! ;)

Destr
01.03.2010, 13:18
Ждать тотальной стандартизации в схемах спектрума и его периферии, то же самое, что прихода светлого будующего в отдельно взятой стране!
Эх, дружище!
Видать я безнадёжный романтик...
Но ведь как zx-гуры сказали: "Пишите всё под стандарт, суки!"

psb
01.03.2010, 13:31
Интересно с подключением РСшной клавы такие же грабли?!
вообще, при тупой реализации в лоб сразу же вылезает проблема: при нажатии клавиш с шифтом (те же стрелки) шифт не всегда захватывается и вместо стрелки нажимается цифра. правильная реализация требует специальных мер.

Или всё-таки будет нормальная поддержка мыша (пусть даже виртуального, ps/2)?
ну, когда-нить может и будет. точно так же, все можно решить тем более в таком контроллере. просто надо чтобы за 20мс перемещение не было больше 127 пикс. а еще лучше чтобы была настройка на разгон и торможение. но вот кто это будет делать...

"Пишите всё под стандарт, суки!"
:):):)

psb
01.03.2010, 15:54
Проблема железная, экономили (тогда ещё) микрухи и вообще сборку...
ты не понял:) ТЕ, старые мышки НЕ глючили!!! глючить могут конвертеры ps/2 в кемпстон маус, а они уже сделаны в наши дни! так что не надо гнать на саму мышку.

Destr
01.03.2010, 16:03
ты не понял ТЕ, старые мышки НЕ глючили!!! глючить могут конвертеры ps/2 в кемпстон маус, а они уже сделаны в наши дни! так что не надо гнать на саму мышку.
Тогда сорри!
Готов извинится перед теми старыми мышками!
А счас-то что делать?
Как юзать софт, да ещё на эмуле (реального-то железа уже фиг найдёш) писаный под-знает-что?
Я собственно ратую за то, чтоб ЛЮБОЙ ТИП МАНИПУЛЯТОРА однозначно распознавался программой.
То-же самое относится и к памяти, и к накопителю, и даже к тактам(раз уж нашлись такие сволочи которые pentagon придумали)

psb
01.03.2010, 16:34
Я собственно ратую за то, чтоб ЛЮБОЙ ТИП МАНИПУЛЯТОРА однозначно распознавался программой.
программа не должна знать, какая у тебя мышка. и не должна знать, какая клавиатура (пц или оригинальная матричная). это эмуляторы должны правильно эмулить, только и всего. сделают, если просить будете, это дело времени. а если никому не надо - точно никто не сделает.

VELESOFT
01.03.2010, 18:03
http://velesoft.speccy.cz/kempstonmouse-cz.htm

http://velesoft.speccy.cz/othermouse-cz.htm

TomCaT
01.03.2010, 19:46
Ну, ребята, почти оффтопный почти флейм в теме раздела "для начинающих"...
Я просто удивляюсь, но пишите все равно - почти в тему и интересно, а, может, и польза выйдет.

Я-то заглянул про Sinclair Mouse почитать...

Destr
01.03.2010, 21:34
MS_DET LD HL,#27FF
LD E,L
LD BC,#FADF
MT_D0 IN A,(C)
CPL
AND 7
JR Z,MT_D1
LD E,0
MT_D1 DEC HL
LD A,L
OR H
JR NZ,MT_D0
RET

MOUSE LD BC,#FADF:IN A,(C):AND 7:XOR 7
LD (MBUTT),A
LD HL,(MCOOR),B,#FF:IN A,(C)
MOS11 LD D,0,(MOS11+1),A:SUB D
CALL NZ,MOS30:LD B,#FB:IN A,(C)
MOS12 LD D,0,(MOS12+1),A:SUB D
CALL NZ,MOS40:LD (MCOOR),HL:RET
MOS30 JP P,MOS35:XOR #FF:INC A:ADD A,H
LD H,A:CP VMAX+1:RET C
LD H,VMAX:RET
MOS35 LD D,A:LD A,H:SUB D:JP C,MOS37
LD H,A:CP VMIN:RET NC
MOS37 LD H,VMIN:RET
MOS40 JP P,MOS45:XOR #FF:INC A:LD E,A
LD A,L:SUB E:JP C,MOS43
LD L,A:CP HMIN:RET NC
MOS43 LD L,HMIN:RET
MOS45 ADD A,L:JP C,MOS46
LD L,A:CP HMAX:RET C
MOS46 LD L,HMAX:RET
MINIT LD B,250
MINI1 LD A,#FB:IN A,(#DF):XOR #FF
JR NZ,MINI2:DJNZ MINI1
SCF:RET
MINI2 CALL MOUSE
XOR A:LD (MBUTT),A
LD HL,#6080,(MCOOR),HL
RET

---------- Post added at 21:34 ---------- Previous post was at 21:33 ----------

Не правда-ли похоже на репортаж из дурдома?
А ведь тем не менее это рабочий мышкин код!

null_device
01.03.2010, 21:37
На чем написаны листинги? В, смысле, какого ассемблера мнемоники?

Vitamin
01.03.2010, 21:46
Не правда-ли похоже на репортаж из дурдома?
А ведь тем не менее это рабочий мышкин код!
Дык любой код, если так криво сформатирован, похож на бред умалишенного... Это же не obfuscated programming contest в конце концов...

Вот мой древний вариант:


LD HL,(X_C)
LD DE,(X_M)
LD BC,#FBDF

IN A,(C)
LD B,A
SUB E
CP 128
JR NC,TOLEFT
ADD A,L
JR C,ERX
OI1 LD L,A
LD E,B
JR PO_Y
ERX LD A,255
JR OI1
TOLEFT NEG
LD C,A
LD A,L
LD L,C
LD C,#DF
SUB L
JR NC,OI1
XOR A
JR OI1

PO_Y LD B,#FF
IN A,(C)
CPL
LD B,A
SUB D
CP 128
JR NC,TOUP
ADD A,H
CP 192
JR NC,ERY
OI2 LD H,A
LD D,B
JR FIRM
ERY LD A,191
JR OI2
TOUP NEG
LD C,A
LD A,H
LD H,C
LD C,#DF
SUB H
JR NC,OI2
XOR A
JR OI2

FIRM LD B,#FA
IN A,(C)
CPL
LD B,A
AND A
JR Z,NO_KLICK
LD A,(KEYMSK)
AND A
JR NZ,NOT_FIRST
LD A,B
LD (KEYMSK),A
NOT_FIRST
AND B
JR Z,NO_KLICK
LD A,128
NO_KLICK
LD (FIRE),A

COORDS LD (X_C),HL
LD (X_M),DE
RET

TomCaT
01.03.2010, 23:50
Я нашел у Znahar в макросах вариант, который немного оптимизировал:



MOUSEB DB 0 ; состояние кнопок
MOUSOB DB 0 ; прежнее состояние кнопок
MOUSEX DW 0 ; положение курсора
MOUSOX DW 0 ; прежнее положение курсора
MOUSEP DW 0 ; прежнее положение мыши

MOUUPD
; кнопки
LD HL,MOUSEB
LD D,(HL) ; временно текущее состояние кнопок
LD BC,#FADF
IN A,(C) ; считывается новое состояние кнопок
CPL
AND 7
LD (HL),A ; новое состояние - в текущее
INC HL
LD (HL),D ; а бывшее текущее - в старое, лежат подряд
; координаты
LD HL,(MOUSEX) ; текущее положение курсора
LD (MOUSOX),HL ; - в старое положение курсора
LD DE ,(MOUSEP) ; положение мыши - для вычисления движения курсора
; горизонтальная координата X
LD B,#FB
LD A,E ; забирается старая X-коорд. для вычислений
IN E,(C) ; считывается новая X-коорд. мыши
; SLA E ; у Znahar - для удвоения скорости, но при этом точность установки курсора по X - пиксел через пиксел
SUB E ; вычисляется смещение координаты
NEG
JR Z,MOUPD4 ; если мышь ушла на 0 по X - не двигать курсор
JP P,MOUPD1 ; обход, если мышь сдвинулась вправо
ADD A,L ; вычисление X курсора, если влево
JR C,MOUPD3
XOR A ; если вышел за экран влево - координата X остается у левой кромки
JR MOUPD3
MOUPD1 ADD A,L ; вычисление X курсора, если вправо
JR C,MOUPD2
CP 253
JR C,MOUPD3
MOUPD2 LD A,253 ; если почти вышел за экран вправо - не выпускать дальше
MOUPD3 LD L,A ; новая координата X
; вертикальная координата Y - аналогично X, но другие регистры и расстояние 189 до нижней кромки экрана
MOUPD4 LD B,#FF
LD A,D
IN D,(C)
; SLA D
SUB D
JR Z,MOUPD8
JP P,MOUPD5
ADD A,H
JR C,MOUPD7
XOR A
JR MOUPD7
MOUPD5 ADD A,H
JR C,MOUPD6
CP 189
JR C,MOUPD7
MOUPD6 LD A,189
MOUPD7 LD H,A
MOUPD8 LD (MOUSEP),DE ; новое положение мыши
LD (MOUSEX),HL ; новое положение курсора
RET

Destr
02.03.2010, 11:00
В программе Camerton юзается вот такой драйвер:

MOUSE
LD BC,#FADF
IN A,(c)
CPL
AND 7
LD B,A
LD A,(MBUTT)
CP B
LD A,1
JR NZ,MSTRT
XOR A
MSTRT
LD (MSTATUS),A
LD A,B
LD (MBUTT),A
LD HL,(MCOOR)
LD BC,#FBDF
IN A,(C)
MOUS0
LD D,0
LD (MOUS0+1),A
SUB D
LD D,A
LD A,(MSENS)
LD B,A
OR A
JR Z,$+6
SRA D
DJNZ $-2
LD BC,(XMNMX)
LD A,D
RLA
JR NC,MOUS1
LD A,L
ADD A,D
JR NC,$+5
CP B
JR NC,MOUS2
LD A,B
JR MOUS2
MOUS1
LD A,L
ADD A,D
JR C,$+5
CP C
JR C,MOUS2
LD A,C
MOUS2
LD L,A,BC,#FFDF
IN A,(C)
MOUS3
LD D,0,(MOUS3+1),A
SUB D
NEG
LD D,A
LD A,(MSENS)
LD B,A
OR A
JR Z,$+6
SRA D
DJNZ $-2
LD A,D
LD BC,(YMNMX)
RLA
JR NC,MOUS4
LD A,H
ADD A,D
JR NC,$+5
CP B
JR NC,MOUS5
LD A,B
JR MOUS5
MOUS4
LD A,H
ADD A,D
JR C,$+5
CP C
JR C,MOUS5
LD A,C
MOUS5
LD H,A
LD BC,(MCOOR)
LD (MCOOR),HL
OR A
SBC HL,BC
RET Z
LD A,(MSTATUS)
OR 2
LD (MSTATUS),A
RET
MINIT
LD BC,#FADF
LD DE,#F000
MINI1
IN A,(C)
CPL
AND 7
OR E
LD E,A
DEC D
JR NZ,MINI1
LD A,E
OR A
JR Z,MINI2
LD A,201
LD (MOUSE),A
RET
MINI2
CALL MOUSE
XOR A
LD (MBUTT),A
LD HL,#6080
LD (MCOOR),HL
LD A,1
LD (MOUSE),A
MSTATUS DB 0; %01-изм.бат. %10-изм коор. (признак изменения состояния)
MCOOR DW #6080; Координаты мыши
MBUTT DB 0; Кнопочки 00000MRL
MSENS DB 1; Чувствительность 0-max
XMNMX DW #00FE; X-ограничитель
YMNMX DW #00BD; Y-ограничитель

Можно регулировать чувствительность крыса...