Dklab, articole, programare tastatură

De ce poate aveți nevoie de o programare tastatură de nivel scăzut? Poate cel mai important lucru, este că atunci când scrie atât de multe programe (cea mai mare parte, desigur, jocuri) ar trebui să poată să „pick up“ combinație de taste (de exemplu, apăsând simultan săgeata în sus și bara de spațiu, și așa mai departe). instrumente standard BIOS vă permit să facă acest lucru, dar nu orice chei și funcționale (cum ar fi Shift, Alt, etc.). De fapt, programator neexperimentat poate avea impresia că, de exemplu, Shift - cheie este specială, deoarece se presupune că modifică valoarea celuilalt, în timp ce de fapt este din punctul de vedere al controlerului tastaturii nu este diferită de restul chei. Distincțiile sunt realizate numai la nivelul BIOS.






Un alt motiv pentru tastatura directă de programare controler - refuzul de a permite intrarile de la tastatura de procesare programator BIOS, de exemplu, pentru a bloca activitatea combinațiilor Ctrl + Break sau Ctrl + Alt + Del. Neutilizarea bufferul de intrare - de asemenea, forțat necesitate, ca o versiune a BIOS-ului prin apăsarea o problemă-cheie este foarte scurt sunet, care, desigur, va porit sunete proprii ale programului (cum ar fi muzica de fundal).

2. Principiul controlerului tastaturii și interfața sa cu BIOS-ul

Controlerul de tastatură funcționează după cum urmează: apăsarea sau eliberarea orice bytes cheie generată (numite cod de scanare), dintre care primele 7 biți conțin numărul de serie de chei, iar ultimul a șaptea bit, este eliminat în cazul în care o tastă a fost apăsat și a stabilit, dacă este eliberat. Acest cod de scanare poate fi citit prin portul 60h (de fapt, există un anumit coduri de scanare rândul său, în interiorul controlerului de tastatură și 60h portul afișează doar codul de sus, dar nu se poate ști despre el). Și altul. Odată ce tasta este apăsată sau eliberată, numită întrerupere nouă (IRQ 1).






Dar nu întotdeauna, apăsarea sau eliberarea butonului generează un cod de scanare. De exemplu, apăsând butonul Pauză cauzează imediat generarea de 5-coduri. Apăsând cauze sus alb cod săgeată de scanare 72, și o săgeată neagră - o dată codul 2: 224 și 72. Și pentru fiecare dintre aceste coduri de scanare numite nouă întrerupere.
Astfel, procedura de procesare a tastaturii BIOS, „stând“ pe întrerupere a 9, pur și simplu analizează valoarea port 60h lea și modifică în mod corespunzător memoria tampon de intrare. Toate BIOS etc. nu funcționează cu valoarea curentă a portului, și cu tampon de intrare, care permite introducerea înainte, adică, chiar și atunci când sistemul este ocupat.

3. Tastatura de programare

Atunci când se confruntă cu nevoia de lucru direct cu tastatura, utilizați următoarea metodă: să-și întrerupă nouă este setat să „plătească“, care este primul lucru care se ocupă de starea de port, și apoi, dacă se dorește, trece de control la vechiul handler tastatură BIOS. În cazul în care BIOS-ul nu controlează este transferat, nu trebuie să uitați 20h valorile de comandă de ieșire și portul 20h pentru a permite următoarea întrerupere de la tastatură.
Acum, ia în considerare ceea ce este tratamentul portului tastaturii. Este necesar să se prevadă un mecanism în care programul ar fi capabil de a afla ce taste sunt apăsate în prezent, este faptul că, pentru a avea informații cu privire la starea fiecărei taste. Presupunem că va fi o serie de 256 de elemente, și, câte unul pentru fiecare cheie, în cazul în care o valoare de zero indică faptul că cheia corespunzătoare este eliberată, și un non-zero, care este apăsat. În cazul în care procedura de obținere a tratamentului nouă întrerupere de cod de scanare a stabilit al 7-lea bit, acest lucru înseamnă că cheia este eliberată, care este, trebuie să resetați elementul corespunzător de matrice, și în cazul în care a scăzut - atribuiți elementul corespunzător din 1. Tastele gri și alb (de exemplu, , săgeți) sunt considerate diferite. De exemplu, codul de sus gri săgeată va fi (128 + 72) ca un alb - 72.
Luați în considerare exemplele tastaturii în diferite limbaje de programare. Programul principal pentru „descoperirea“ a tastaturii ar trebui să fie numit OpenKeyboard cu un parametru care spune dacă este sau nu pentru a bloca handler BIOS-ul este necesar.

Acum, în orice (!) Site-ului de program pot fi analizate prin KeyPressed în masă, fără să mă gândesc despre modul în care este actualizat. De exemplu: