Page 26 - 4875
P. 26
Стандартний обробник клавіатурних переривань, що входять в
BIOS працює так:
- зчитує з порта 60h Scan Code натисненої клавіші.
- записує визначене по Scan Code значення ASCII коду
натисненої клавіші в спеціальний буфер клавіатури, що розміщений в
області даних BIOS.
- здійснює установку 7 біта порту 60h в „1” (дозвіл
паралельної роботи клавіатури) наприклад так:
in al,61h
push ax
or dl,80h
out 61h,al
pop ax
out 61h,al
- повертає цей біт в початковий стан.
- записує в порт 20h значення 20h для правильного
завершення роботи апаратного переривання:
mov al,20h
out 20h,al
Обробник переривання int 09h не просто записує значення
ASCII коду в буфер, а і відслідковує натиск Ctrl + Alt + Del, Print
Screen, а також стан Shift, Caps Lock.
Буфер клавіатури має довжину 32 байти і розміщений за
адресою 0000h:041Еh. У випадку використання порту PS/2 задається
вмістом двох слів пам’яті з адресами:
0000h:0480h – компонент зміщення адресу початку
буфера;
0000h:0482h – компонент зміщення адресу кінця
буфера.
Буфер організований циклічно, тобто при його переповненні
старі значення будуть втрачатися.
Дві комірки пам’яті 0000h:041Аh та 0000h:041Сh містять
відповідно покажчики на початок і кінець буфера при чому, якщо їхні
значення рівні, то буфер пустий. Тобто очистити буфер можна
25