Как извлечь 3 или 4-байтовые пакеты мыши из порта 60h после инициализации мыши - PullRequest
0 голосов
/ 30 января 2019

После инициализации мыши она отправляет 3 или 4-байтовые пакеты, чтобы сообщить о движении мыши и событиях нажатия / отпускания кнопки мыши.Эти пакеты отображаются асинхронно как данные на порту ввода-вывода 0x60.

Мой вопрос заключается в том, как извлечь эти 4 или 5-байтовые пакеты

В своем коде сборки я использовал 0xf4 команду мыши, чтобы включить потоковую передачу пакетов

, и я попробовал этокод для извлечения 3 или 4-байтовых пакетов, например:

xor cx, cx
read:
in al, 0x64
test al, 1b
loopnz read

mov cx, 0xa0000 ; waiting 655 360 times
pause:
loop pause

in eax, 60h
mov [packets], eax

;and the values i get here is 250(0xfa) only 


Jmp $ 

Я использую NASM Assembler под Windows 10

1 Ответ

0 голосов
/ 30 января 2019

Современная мышь PS / 2 обычно имеет режим по умолчанию («2 кнопки, без колеса прокрутки»), в котором используется более старый протокол (3 байта на пакет);затем один или несколько лучших режимов («кнопка 5, с колесом прокрутки»), в которых используется другой (4 байта на пакет) протокол.Для переключения режимов есть последовательность существующих команд (а не простая команда «изменить режимы»).

В частности, чтобы перейти из режима по умолчанию в режим «Intellimouse Extensions» (3 кнопки с колесиком прокрутки, 4-байтовый пакет)):

  • Установить частоту дискретизации 200
  • Установить частоту дискретизации 100
  • Установить частоту дискретизации 80

И изменить на "5режим кнопки "(до 5 кнопок с колесиком прокрутки, пакет из 4 байтов):

  • установка частоты дискретизации 200
  • установка частоты дискретизации 200
  • установка частоты дискретизации 80

Для получения дополнительной (лучшей) информации см .: http://www.isdaman.com/alsos/hardware/mouse/ps2interface.htm

Обратите внимание, что вы никогда не должны опрашивать.В частности, если вы не используете IRQ (например, ISA IRQ1 для первого порта PS / 2, ISA IRQ 12 для второго порта PS / 2), невозможно надежно (без условий гонки) определить, с какого порта PS / 2 поступил байт.

В частности, драйвер контроллера PS / 2 должен использовать IRQ и отправлять байты, полученные по «1-му порту PS / 2», тому драйверу, который используется для подключения любого устройства к 1-му порту PS / 2.(клавиатура, мышь, сканер штрих-кода, сенсорная панель, ...);и отправлять байты, полученные по «2-му порту PS / 2», в зависимости от того, какой драйвер используется для любого устройства, подключенного к 2-му порту PS / 2.Драйвер мыши сам получит данные (например, из канала, сообщения или обратного вызова или кто-что знает) и добавит байт в (3 или 4-байтовый) буфер пакетов (при проверке бита «всегда 0», чтобы убедиться, чтоон остается синхронизированным с устройством и обрабатывает специальные коды, такие как «ACK» и «RESEND»).

...