OSDev http://osdev.su/ |
|
Сканкоды клавиатуры через BIOS int 16h http://osdev.su/viewtopic.php?f=6&t=700 |
Страница 1 из 1 |
Автор: | megafanat [ 28 фев 2013, 05:39 ] |
Заголовок сообщения: | Сканкоды клавиатуры через BIOS int 16h |
Получаю скан-коды клавиатуры через прерывание BIOS int 16h, функцией 0: Код: uint8_t _asciiCode = 0; uint8_t _scanCode = 0; __asm { mov ah, 00h int 16h mov _asciiCode, al mov _scanCode, ah } Экспериментально установлено, что приходят сканкоды из набора 1. Однако выявился ряд странных особенностей:
Это всё по большей части можно пережить, за исключением последнего пункта. Я не могу ловить нажатия сочетаний Alt+символьная клавиша (например Alt-[). Подскажите пожалуйста, как можно решить эту проблему наиболее простым способом? |
Автор: | pavia [ 28 фев 2013, 06:44 ] |
Заголовок сообщения: | Re: Сканкоды клавиатуры через BIOS int 16h |
Написать драйвер для клавиатуры. Это не сложно. Вешаешь на прерывание свой обработчик. Который напрямую общается с контроллёро 8042. Проверяешь что источником прерывания является 8042. Читаешь сканкод и переводишь в удобный тебе формат. Предварительно только надо настроитб 8042. Для совместимости можно ещё старый обработчик вызывать. |
Автор: | phantom-84 [ 28 фев 2013, 10:53 ] |
Заголовок сообщения: | Re: Сканкоды клавиатуры через BIOS int 16h |
megafanat писал(а): Однако выявился ряд странных особенностей... Ничего странного. BIOS транслирует оригинальные сканкоды.Цитата: Это всё по большей части можно пережить, за исключением последнего пункта. Я не могу ловить нажатия сочетаний Alt+символьная клавиша (например Alt-[). Подскажите пожалуйста, как можно решить эту проблему наиболее простым способом? Для большинства сочетаний Alt/Ctrl/Shift+Клавиша BIOS возвращает вполне определенные коды (ищи соотв. таблицы в инете по кл. словам "расширенные коды клавиш"). Вроде если на выходе al=0, то в ah находится расширенный код.
|
Автор: | pavia [ 28 фев 2013, 12:50 ] |
Заголовок сообщения: | Re: Сканкоды клавиатуры через BIOS int 16h |
Можно биос использовать. http://docviewer.yandex.ru/?url=ya-disk ... e&page=140 http://docviewer.yandex.ru/?url=ya-disk ... c9&page=50 |
Автор: | megafanat [ 28 фев 2013, 13:50 ] |
Заголовок сообщения: | Re: Сканкоды клавиатуры через BIOS int 16h |
Как раз проблема в том, что для некоторых сочетаний, например Alt-[ скан-код не приходит. Впрочем, кажется я нашел частичное решение: вместо функций 00h и 02h можно использовать функции 10h и 12h. Они позволяют ловить сочетания вида Alt-[. Но к сожалению, все равно остается ложка дегтя: эти функции не ловят сочетание Alt и клавиши со скан-кодом 0x56(обычно расположена справа от левой клавиши Shift). А это сочетание тоже нужно. |
Автор: | pavia [ 28 фев 2013, 14:57 ] |
Заголовок сообщения: | Re: Сканкоды клавиатуры через BIOS int 16h |
ИХМО самый простой способ - через порты вода вывода. Пишешь драйвер раз и на всегда. Ты сможешь контролировать одновременное нажатия нескольких клавиш. CTRL, SHIFT работают без вопросов, стрелки работают, мультимедийные клавиши тоже работают. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |