Консультация № 70370
10.01.2007, 21:47
0.00 руб.
0 2 2
Приветствую вас уважаемые эксперты! Извиняюсь за то что раньше называл вас "кодерами", впредь этого не повторится!
Опять у меня вопрос по железу, с клавой я разобрался, а вот с мышью никак, подскажите где можно найти информацию о работе с мышью на уровне потров в/в (in/out), НЕ хочется использовать int 33h, оч. люблю работать на самом низком уровне :D
Огросное спасибо!

Обсуждение

давно
Советник
419
1011
10.01.2007, 21:59
общий
это ответ
Здравствуйте, Code_master!

Мышь на уровне портов - это обычный COM-обработчик.
Узнай адрес com-порта, и подпишись на прерывания аппаратные от него (тоже узнай его номер). При приходе прерывания читай данные. Обычно там идут данные с величинами относительного смещения мыши.

http://eugene-ivanov.narod.ru/rar/mou3.rar (2.5 Kb)

Но я всё же посоветовал не тратить время, а пользоваться готовым обработчиком сидящим внутри int 51, по сути он там ничего и не делает, кроме взятия и поддержки (преобразования) координат из порта. Да ещё и курсор рисует, не придётся тебе изучать видео. :o)

Удачи.
давно
Посетитель
7438
7205
11.01.2007, 12:08
общий
это ответ
Здравствуйте, Code_master!
Согласен с Ивановым, в данном случае это абсолютно не оправдано.
Могут возникнуть куча лишних проблем, например,
кроме рисования курсора, можно назвать возможность
наличия какой-то специфичной мыши (а родной драйвер все ньюансы учитывает!)
Плюс необходимо не нарушить работу родного драйвера мыши
Да мало ли что!
Откопал в архиве свою давнишнюю тестовую программку, которая показывает на экране
принимаемые данные по порту COM2. (Для COM1 поменять вектор на 0ch, порты 2fx на 3fx)

Приложение:
.model tiny .code .startupinit_0bh: mov ax,350bh int 21h mov ax,250bh mov dx,offset int_0bh int 21h stihold_loop: mov ah,1 int 16h jz hold_loop mov ah,0 int 16h cli xor ax,ax mov ds,ax mov [0bh*4],bx mov [0bh*4+2],es sti int 20hint_0bh: sti push ax push dx push cx mov dx,2fdh in al,dx test al,2 jnz overflow test al,1 jz overflow mov dx,2f8h in al,dx mov ah,al mov dx,2fdh in al,dx test al,2 jnz overflow mov al,ahint_ret: call hex mov al,20h out 20h,al pop cx pop dx pop ax iretoverflow: mov dx,2f8h in al,dx xor al,al jmp int_ret;----- Hex value in AL to screenprint proc near add al,90h daa adc al,040h daa mov dl,al mov ah,02 int 21h retprint endphex proc near push ax mov cl,4 shr al,cl call print pop ax and al,0fh call print rethex endp end
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа