давно
Старший Модератор
31795
6196
03.11.2018, 13:22
общий
это ответ
Здравствуйте, Kdsfofwe21!
Чтобы Вам понять логику образования скан-кодов, которые делают BIOS -DOS, Вам нужно понять всю цепочку, как все происходит.
Нажимается клавиша на клавиатуре, контролер сообщает об этом событии, с помощью IRQ1(
int 09h). Получив это прерывание, процессор читает порт клавиатуры(60h), сбрасывает контролер клавиатуры(порт 61h), анализирует, что было нажато, до этого, т.е. CTRL, ALT, SHFT, NumLock и т.д., это все фиксируется BIOS'ом -DOS'ом, в системных переменных 0х0040:0х0017(байт состояния клавиатуры), 0х0040:0х001А(голова очереди буфера клавиатуры) и 0х0040:0х001С(хвост очереди буфера клавиатуры), заносит в хвост буфера клавиатуры скан-код и полученный символ(к примеру: "Ф"-"ф"(ru)-"A"-"a"(en)). Сбрасывает аппаратное прерывание.
Функции ввода BIOS -DOS читают символ и скан-код из буфера клавиатуры и выдают его в качестве результата.
Самым оптимальным вариантом будет - написать свой не большой обработчик клавиатуры, который прочитает код нажатой клавиши, проанализирует старший бит(нажата или отпущена) и запишет нужное значение(0/1) в массив из 128 байт, а потом передаст управление старому обработчику. В программе поиск сочетания клавиш будет в виде:
[code lang=asm]next0: mov al,keyMass[LCtrl]
and al,keyMass[LAlt]
and al,keyMass[D-key]
jz next1
;Left-Control + Left-Alt + D-key(она же В,в,d)[/code]
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.