Структура резидентних програм. Обробка переривань від клавіатури, страница 4

Якщо комп'ютер виконує яку-небудь програму, що веде діалог з оператором, то, як вже наголошувалося, введення даних з клавіатури (а точніше з кільцевого буфера введення) і висновок їх на екран з метою ехоконтроля організує ця програма, звертаючись безпосередньо до драйвера BIOS (int 16h) або до відповідної функції DOS (int 21h). Може трапитися, проте, що виконуваній програмі не потрібне введення з клавіатури, а оператор натиснув якісь клавіші. В цьому випадку символи, що вводяться, накопичуються (за допомогою програми int09h) у кільцевому буфері введення і, природно, не відображаються на екрані. Так можна ввести до 15 символів. Коли програма завершиться, управління буде передане COMMAND.COM, який відразу ж виявить наявність символів в кільцевому буфері, витягне їх звідти і відобразить на екрані. Таке введення з клавіатури називають введенням з попередженням.

Дотепер йшлося про символи і коди ASCII, яким відповідають певні клавіші терміналу і які можна відобразити на екрані. Це букви (прописні і рядкові), цифри, розділові знаки і спеціальні знаки, використовувані в програмах і командних рядках, наприклад [, $, # і ін. Проте є ряд клавіш, яким не призначені символи, що відображаються на екрані. Це, наприклад, функціональні клавіші <F1>, <F2>...<F10>; клавіші управління курсором <Home>, <End>, <PgUp>, <PgDn>, <Стрілка вправо> <Стрілка вниз> і ін. При натисненні цих клавіш в кільцевий буфер введення засилає розширений код ASCII, в якому молодший байт рівний нулю, а старший є скан-кодом натиснутої клавіші. Розширений коди ASCII поступають в буфер введення і у разі натиснення комбінацій клавіш, що управляють і функціональних, наприклад <Shift>/<Fl>, <Ctrl>/<Home> (на додатковій цифровій клавіатурі), <Alt>/<Insert> і ін. В цьому випадку в старший байт розширеного коду ASCII поміщається вже не скан-код клавіші, а деякий код, спеціально призначений цій комбінації клавіш. Природно, цього коду немає серед "звичайних" скан-кодів.

Отже, переривання, що виникає при натисненні (або відпуску) будь-якої клавіші, обробляється по відносно складному алгоритму системним обробником, що міститься в системі BIOS.


3. Обробка переривань від клавіатури з підключенням

після системного обробника.

У багатьох випадках прикладна обробка переривання (апаратного або програмного) повинна виконуватися як доповнення до системної. Така постановка завдання типова, наприклад, для русифікаторів клавіатури. Системна програма BIOS обробки переривань від клавіатури, основне призначення якої - перетворення скан-кодів, що поступають з клавіатури, в коди ASCII латинських і міжнародних символів, виконує, окрім цього основного завдання, масу додаткових операцій: стежить за покажчиками кільцевого буфера клавіатури і модифікує їх; відстежує натиснення поєднання <Ctrl> / <Break> і виконує при його введенні специфічні дії; дозволяє вводити в кільцевий буфер коди безпосередньо в цифровому вигляді за допомогою натиснення клавіші <Alt> і цифр на цифровій клавіатурі і т.д. При установці на комп'ютері русифікатора можна, звичайно, повністю відмовитися від використання системної програми обслуговування клавіатури, включивши всі згадані функції в русифікатора, проте це помітно збільшить його розмір і ускладнить відладку. Більш продуктивно виконати програму русифікатора, як доповнення до системного обробника, поклавши на нього лише коректування кодів ASCII в кільцевому буфері, якщо включений режим кирилиці. В цьому випадку русифікатор повинен підключатися до виходу системного обробника.