Dklab, cikkek, billentyűzet programozás

Miért lehet szükség egy alacsony szintű programozási billentyűzet? Talán a legfontosabb dolog az, hogy ha írsz annyi programok (többnyire persze, játékok) képesnek kell lennie arra, hogy „pick up” billentyűkombináció (például egyszerre nyomja a felfelé mutató nyilat, és a szóköz, és így tovább). Normál BIOS eszközök lehetővé teszik, hogy ezt, de nem olyan kulcsokat, és a funkcionális (például a Shift, Alt, stb.) Tény, hogy a tapasztalatlan programozó a benyomásom, hogy például a Shift - kulcs speciális, mert állítólag értékét megváltoztatja a másik, míg valójában ez a szempontból a billentyűzet vezérlő nem különbözik a többi kulcsokat. Különbséget kell tenni csak szinten BIOS.
A másik ok a közvetlen billentyűzet vezérlő programozás - nem hajlandó, hogy a programozó BIOS feldolgozás karakternél, például, hogy blokkolja a munkát a Ctrl + szünet vagy a Ctrl + Alt + Del. Ha nem a bemeneti puffer - is kénytelen szükségességét, mivel néhány változata a BIOS egy gomb megnyomásával a kérdés nagyon rövid hang, amely, persze, majd porit saját hangokat a program (például a háttérzenét).

2. A módszer elve a billentyűzet vezérlő és a felület a BIOS

A billentyűzet vezérlő a következőképpen működik: a sajtolás vagy felszabadító bármely gomb generált bájt (az úgynevezett szkennelés kód), az első ebből 7 bit tartalmazza a sorszámát kulcs, és az utolsó, hetedik bitet töröljük, ha a gomb megnyomása és állítsa, ha megjelent. Ez a vizsgálat kód olvasható a 60h (valójában van egy bizonyos fordulat leolvasó kódok belsejében billentyűzet vezérlő és a 60h csak akkor jelenik meg a felső kódot, de nem lehet tudni róla). És még egy. Ha a gomb megnyomása illetve megjelent, úgynevezett 9. megszakítás (IRQ 1).
De nem mindig, vagy a gomb megnyomásával a gomb elengedése generál egy leolvasó kódot. Ha például lenyomva a Pause gombot azonnal létrehozását eredményezi 5-kódokat. Megnyomása okok felfelé nyíl fehér szkennelés kód 72, és egy fekete nyíl - a kód egyszer 2: 224 és 72. És minden egyes ilyen leolvasó kódok úgynevezett 9. megszakítás.
Így a BIOS billentyűzet feldolgozási eljárás, „ül” a 9. megszakítás egyszerűen elemzések értéke 60h-adik port, és ennek megfelelően módosítja a bemeneti puffer. Minden BIOS stb nem működnek együtt az aktuális érték a port, és a bemeneti puffer, amely során előre, hogy van, akkor is, ha a rendszer foglalt.

3. kezelő programozás

Amikor szembesül azzal, hogy szükség közvetlen munka a billentyűzet, az alábbi módszerrel: a 9. megszakítás beállítása „fizetni”, amely az első dolog kezeli port állapotát, majd ha szükséges, átadja a vezérlést a régi BIOS billentyűzet kezelő. Ha a BIOS nem ellenőrzi átadásra, akkor nem szabad elfelejteni, a kimeneti parancs értékek 20h és 20h port lehetővé teszi a következő megszakítás a billentyűzet segítségével.
Most úgy vélik, mi a kezelés a billentyűzet port. Szükség van egy olyan mechanizmus, amely a program képes lenne, hogy megtudja, melyik gombot jelenleg nyomva, azaz, hogy információnk a status minden kulcsot. Feltesszük lesz egy sor 256 elem, és egy-egy kulcsot, ha a nulla érték azt mutatja, hogy a megfelelő gombot elengedi, és nem nulla, hogy le van nyomva. Ha a megszerzésére irányuló eljárás a kezelés 9. szkennelés kód megszakítás tűzte a 7. bit, ez azt jelenti, hogy a gomb elengedésekor, azaz meg kell állítani a megfelelő elem a tömb, és ha leesett - majd hozzárendelni a megfelelő elemet a 1. A szürke és fehér billentyűk (pl , nyilak) minősülnek különböző. Például, Gray-kód fel nyíl lesz (128 + 72) fehér, - 72.
Tekintsük a példát a billentyűzet különböző programozási nyelveken. A fő program a „felfedezés” a billentyűzet kell hívni OpenKeyboard egy paraméter, amely azt mondja-e vagy sem, hogy blokkolja a BIOS felvezető szükséges.

Most minden (!) A program oldalon lehet elemezni tömeg keyPressed, gondolkodás nélkül, hogyan frissítik. Például: