у меня сейчас "драйвер" клавиатуры - это обработчик прерывания в ядре. не гоже будет ему всю эту рутину выполнять. тогда можно, наверное, так сделать: в обработчик прерывания клавиатуры (который в ядре) засунуть код, который только будет принимать скан-коды клавишь, сам драйвер вынести в отдельный модуль, который будет работать на уровне ядра, но выполняться как процесс. т.е. примерно так:
Код:
keyboard_handler:
in al, 60h
mov [keyboard_driver_kye_scancode], al
in al, 61h
mov ah, al
or al, 80h
out 61h, al
mov al, ah
out 61h, al
iretd
keyboard_driver:
cmp [keyboard_driver_kye_scancode], 0
je keyboard_driver
;тут преобразование сканкода в аски код и посыл его всем процессам
mov [keyboard_driver_kye_scancode], 0
jmp keyboard_driver