Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_лаб_ПЗСУ.doc
Скачиваний:
11
Добавлен:
07.02.2016
Размер:
483.84 Кб
Скачать

1.3. Системна підтримка клавіатури

Клавіатура має двосторонню підтримку з боку BIOS: коди, прийняті від клавіатури, по апаратному перериванню IRQ1 (вектор 09h) обробляються, і результат обробки поміщається в буфер, з якого по програмному перериванню цей результат для подальшої обробки може бути витягнутий значно пізніше.

BIOS INT 9h обробляє переривання, викликані приходом кодів натискання і відпускання клавіш, аналізуючи прийнятий скан-код з урахуванням стану прапорів і комбінації клавіш альтерації SHIFT, CTRL, ALT, CAPSLOCK, NUMLOCK. Результат обробки (ASCII-символ і скан-код) міститься в клавіатурний буфер, розташований в ОЗУ. У випадку переповнення буфера чергове слово не записується і подається звуковий сигнал.

Крім звичайного способу (натискання однієї клавіші), будь-який символ можна ввести в буфер за допомогою Alt-набору. Для цього його код у десятковій системі набирається на цифровій клавіатурі при натиснутій клавіші ALT, результат заноситься в буфер по відпусканні ALT. При такому способі в буфер буде занесений нульовий скан-код, що відрізняє Alt-набір від звичайного введення.

Використовувані осередки BIOS DATA AREA:

0:0417, 0:418 − прапори клавіатури;

0:0419 − акумулятор коду Alt-набору;

0:041А − покажчик голови буфера (Buffer Head), 2 байти;

0:041С − покажчик хвоста буфера (Buffer Tail), 2 байти;

0:041Е − область кільцевого буфера (16 слів).

Перехоплення оброблювача INT 9h звичайно використовується для русифікації клавіатури.

Переривання BIOS INT 16h, що викликається програмно являе собою інтерфейс прикладного рівня для клавіатури. Його основне призначення − витяг слів із клавіатурного буфера. Функція задається в регістрі АН при виклику:

− АН = 00h - читання (з чеканням готовності) і вибірка слова з буфера;

− АН = 01h - перевірка готовності, читання без вибірки;

− АН = 02h - читання стану прапорів;

− АН = 03h - установка затримки і швидкості автоповтора;

− АН = 05h - запис слова в буфер.

Функції з АН = 10h, 11h, 12h аналогічні 00h, 01h, 02h, але призначені спеціально для 101/102-клавішних клавіатур. Для ряду клавіш, відсутніх у клавіатурі АТ-84, ці функції дадуть результати, що відрізняються від викликів 00h, 01h і 02h. Більш детальний опис цих функцій наведено у додатку З.

Молодший байт зчитаного слова містить ASCII-символ, старший - скан-код. Символи, отримані нестандартним способом (у російському регістрі або Alt-набором), супроводжуються нульовим скан-кодом. При нульовому молодшому байті старший містить розширений ASCII-код (Extended ASCII Keystroke). Додаткові клавіші 101/102 клавіатур при використанні функцій 10h-12h генерують код E0h у молодшому байті і скан-код, що відповідає аналогічним керуючим клавішам 83/84-клавішних клавіатур.

Функція запису (05h), трохи несподівана для клавіатури, дозволяє легко імітувати роботу оператора для різних демонстраційних програм. Якщо прикладна програма не перехоплює обслуговування клавіатури на рівні апаратного переривання (INT 9h), то резидентна програма може їй "підкидати" слова в буфер, що будуть сприйматися як натискання клавіш.

Для одержання скан-кода натиснутої клавіші зручно користуватися функцією 0 переривання 16h (BIOS), що очікує натискання клавіші і після натискання повертає в регістрі al символ у форматі ASCII і в регістрі ah – скан код.