Dklab, статии, програмиране клавиатура

Защо може да се наложи програмиране клавиатура ниско ниво? Може би най-важното нещо е, че когато пишете толкова много програми (най-вече, разбира се, игри), следва да бъдат в състояние да "вдигне" комбинация от клавиши (например, едновременно натиснете стрелката нагоре и пространството лента, и така нататък). Стандартните инструменти BIOS позволяват да направите това, но не всички ключове и функционално (като Shift, Alt и др.) В действителност, неопитен програмист може да остане с впечатлението, че, например, Shift - ключ е специален, защото тя предполага, че се променя стойността на другия, докато в действителност това е от гледна точка на контролера на клавиатурата не се различава от останалите ключове. Отличия се извършват само на ниво BIOS.






Друга причина за директен клавиатура програмиране контролер - нежелание да се позволи на клавишни комбинации за обработка на програмист на BIOS, например, за да блокират работата на комбинациите Ctrl + Break или Ctrl + Alt + Del. Ако не използвате входния буфер - също принуден необходимост, тъй като някои версия на BIOS чрез натискане ключов въпрос е много кратък звук, който, разбира се, ще porit собствени звуци на програмата (като фонова музика).

2. Принцип на контролера на клавиатура и неговото взаимодействие с BIOS

Контролерът на клавиатура работи, както следва: натискане или освобождаване на всички ключови генерирани байта (наречен код за сканиране), първият от които 7 бита съдържат серийния номер на ключове, а последната, седма малко се изчиства, ако ключов е бил натиснат и да зададете, ако бъде освободен. Това сканиране код може да се прочете през порт 60h (в действителност е налице известно кодове своя страна проверява в контролера на клавиатура и 60h порт показва само най-горния код, но не можете да знаете за него). И още един. След натискане на клавиша или освободен, наречен деветия прекъсване (IRQ 1).






Но не винаги, натискане или отпускане на бутона генерира код за сканиране. Например, натиснете бутона Pause веднага предизвиква генерирането на 5-кодове. Натискането причини код нагоре бяла стрелка сканиране 72 и черна стрелка - кода, след 2: 224 и 72. И за всеки един от тези кодове за сканиране, наречени деветото прекъсване.
По този начин, процедурата за обработка на BIOS клавиатура, "седи" на 9-ти прекъсването, просто анализира стойността на 60h-ти порт и съответно променя входния буфер. Всички BIOS и т.н. не работят с текущата стойност на пристанището, както и с входния буфер, който позволява въвеждане напред, това е, дори когато системата е заета.

3. Клавиатура Програмиране

Когато се сблъскват с необходимостта от директна работа с клавиатурата, използвайте следния метод: в деветата прекъсване е настроен на "заплати", което е първото нещо, което се занимава порт статус, и след това, ако е необходимо, предава управлението на стария BIOS клавиатура манипулатор. Ако BIOS не контролира се прехвърля, не трябва да забравяме, изходните стойности команда 20h и 20h порта да се даде възможност на следващото прекъсване от клавиатурата.
Сега си представете какво е лечението на клавиатура пристанище. Необходимо е да се осигури механизъм, по който програмата ще бъде в състояние да разберете какво ключове в момента са притиснати, е, че, за да получите информация за състоянието на всеки клавиш. Предполагаме, че ще бъде масив от 256 елемента, както и по един за всяка ключ, където на стойност, равна на нула показва, че съответния клавиш се освобождава, както и различен от нула, че е натиснат. Ако процедурата за получаване на лечение девети код сканиране прекъсването на е поставил 7-ми малко, това означава, че ключът е освободен, което означава, че трябва да зададете съответния елемент на масива, а ако падна - след това се определи, след елемент в 1. сиви и бели клавиши (например , стрелки) се считат за различни. Например, сиво код стрелка нагоре ще бъде (128 + 72) като бяло - 72.
Да разгледаме примери на клавиатурата в различни програмни езици. Основната програма за "откритието" на клавиатурата трябва да се нарича OpenKeyboard с параметър, който казва дали да блокират манипулатор BIOS е необходимо.

Сега във всеки (!) От сайта на програмата може да се анализира чрез масова KeyPressed, без да се замисля за това как тя се актуализира. Например: