Ввод с клавиатуры x86 Assembly без INT

Мне нужно сделать анимацию, которая будет ускоряться, когда пользователь держит нажатой клавишу, и возвращаться к нормальной скорости, когда клавиша будет отпущена. Я не могу «ждать», пока пользователь введет ключ, как это делают большинство прерываний DOS и BIOS, поскольку это остановит анимацию.

Я пробовал использовать опцию 01H INT 16H, которая работает без остановки программы, но и не очищает буфер клавиатуры; таким образом, анимация останется ускоренной, даже если клавиша будет отпущена, так как клавиша остается в буфере.

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


person Hans    schedule 12.11.2009    source источник


Ответы (2)


используйте порт 060h, получите статус нажатия и отпускания клавиши

person Michael Buen    schedule 12.11.2009

Есть несколько проблем с этим. Вы просто не можете сканировать порт 0x60, в основном потому, что тот же порт используется мышью. Для начала нужно просканировать порт 0x64, определить клавиатура это или мышь. И это даже не настройка интерфейса PS/2 и инициализация каждого отдельного драйвера клавиатуры (может и не требуется, но делает процесс более плавным)

Просто используйте биос, если вы не смотрите Инструкции OSDev

person Logan Rios    schedule 02.08.2017