Курсовая работа: Низькорівневе програмування контроллера клавіатури
{ ProcessKeyb();
if(IsBIOSActive) SvInt09(); /* не блокировать BIOS? */
else outportb(0x20,0x20); /* ... нужно блокировать */
}
void CloseKeyboard(void); /* предварительное определение */
void OpenKeyboard(int LockBIOS)
{ memset(KeyPressed,0,256); CurKey=0;
SvInt09=getvect(9);
setvect(9,NewInt09);
IsBIOSActive=!LockBIOS;
atexit(CloseKeyboard);
}
void CloseKeyboard(void)
{ if(!SvInt09) return; /* клавиатура не открыта */
setvect(9,SvInt09); SvInt09=NULL;
}
Безумовно, існують і інші можливості по програмуванню контроллера клавіатури (наприклад, включение/выключение її лампочок). Проте ці можливості використовуються вже дуже рідко.
На закінчення можна привести одну корисну інформацію про обробника клавіатури BIOS. Байт пам'яті з адресою 40h:17h містить інформацію про стан спеціальних клавіш клавіатури:
Бит 7 - INSert активний
Бит 6 - CapsLock активний
Бит 5 - NumLock активний
Бит 4 - ScrollLock активний
Бит 3 - Alt натиснутий
Бит 2 - Ctrl натиснутий
Бит 1 - LeftShift натиснутий
Бит 0 - RightShift натиснутий
Висновок
Навіщо може знадобитися низькорівневе програмування клавіатури? Саме, мабуть, головне, це те, що при написанні дуже багатьох програм (в основному, звичайно, ігор) необхідно уміти "уловлювати" одночасне натиснення декількох клавіш (наприклад, одночасне натиснення стрілки вгору і пропуску і т.д). Стандартні засоби BIOS дозволяють це робити, але тільки не з будь-якими клавішами, а з функціональними (такими, як Shift, Alt і др). Насправді, у недосвідченого програміста може скластися враження, що, наприклад, Shift - клавіша особлива, оскільки вона, нібито, змінює значення останніх, тоді як насправді вона з погляду контроллера клавіатури абсолютно нічим не відрізняється від всіх останніх клавіш. Відмінності здійснюються тільки на рівні BIOS.
Інша причина прямого програмування контроллера клавіатури - це небажання програміста вирішувати BIOS обробку клавіш, що натискують, наприклад, з метою блокування роботи комбінацій Ctrl+Break або Ctrl+Alt+Del. Відмова від використання буфера введення - теж вимушена необхідність, оскільки деякі версії BIOS при натисненні на клавішу видають дуже короткий звуковий сигнал, який, звичайно, буде порить власні звуки програми (наприклад фонову музику).