Subject : klavye olaylari Author : pOiSOn Email : poisone@usa.net Irc : irc.ada.net.tr / #scene.tr #manowar #atheist ICQ : 6795916 LastUpdate : 5 subat 98 Note : DOS hicbir zaman olmez! !selam.. hayatin anlamini altavista'da arattim.. o bile buldu ben bulamadim.. neyse bu yazida klavye'yi gelismis olarak nasil kullanacaginizi anlatayim dedim.. fakat bu yaziyi okumadan once portlarin nasil kullanilacagini iyice anlamaniz gerekli.. eksikler varsa portlar.txt'yi okuyun.. 1. ufaktan baslayalim.. klavyeyi neden gelismis olarak kullanmak isteyesiniz once buna bir cevap verelim.. bunun amaclarindan biri yazdiginiz programlarda kontrolun tamamen sizin elinizde olmasini istersiniz heralde ?.. veya programinizda ctrl-alt-del tuslarini kullanmayi iptal etmek isteyebilirsiniz :) veya ayni anda hangi kirk tane tusa basildigini bilmek isteyebilirsiniz.. vesaire... 2. en basit olarak asagidaki gibi bir program dusunun.. void main() { while( inp(0x60) != 1 ) { printf("gokyuzu herkesindir!\n"); while(kbhit()) getch(); } } simdi bazi aciklamalar yapayim.. 0x60 portu klavye icin kullanilir ve bu portta basilan tuslarin basma ve birakma kodlarini okursunuz.. buna gore 0x60 portundan 1 okuyuncaya kadar printf'i cagir dedik.. ikinci while dongusu ise kullanici baska tuslara bastiginda klavye buffer'inin dolmasi (dolayisiyla o cildirtici beep beep seslerinin cikmasini) engeller.. bu yontem aradaki kbhit dongusunu saymaz isek cok hizli calisan bi yontem.. fakat ctrl-alt-del gibi ozel tuslari kapatmaz.. peki esc tusunun 1 oldugunu nerden biliyoruz ? bunu bilmeye gerek yok ufak bir program yazarak herhangi bir tusun hangi koda sahip oldugunu bulabilece- ginizi tahmin edersiniz heralde :).. pekala ctrl-alt-del gibi tuslari nasil kapatirsiniz ? bunu biraz daha iler de anlatacam.. 2.0x60 portu.. bu portun bi ozelligide son basilan tusu ogrenebilirsiniz.. ornek olarak siz A tusuna basili tuttugunuzda bu portun degeri 30'dur.. A tusunu biraktiginizda degeri 158 olur.. aradaki bag ise cok basit.. isin sirri binary olarak bakildiginda cok rahat gozukur.. 30 = 00011110 (basma kodu diyelim) 158 = 10011110 (birakma kodu diyelim) anlasilacagi uzere birakma kodu basma kodunun 7.biti 1 yapilarak elde ediliyor.. ayrica ornegin A tusu basili iken B tusuna basildiginda bu porttan B tusunun basma degerini okursunuz.. ve o B tusu halen basili iken A tusu birakilirsa A tusunun birakilma degerini okursunuz.. buna gore basilan tusun veya birakilan tusun ne oldugunu bulunabilir.. bunun bize faydasi olarak oyun programlarini dusunun... bi cok oyun programinda ayni anda bi kac tusa basildiginda klavye bufferi dolar veya bazi tuslari basildini goremez..(mesela mortal kombat'i iki kisi oynarken :)) ) bunu yapabilmek icin programinizda her tus icin 1 veya 0 icerebilen bir dizi yaratin ve klavye kontrolunu saglayan rutin icerisinde bu basma ve birakma kodlarina bakarak bu dizideki tus degerlerini 1 veya 0 yapin.. ana programda ise A tusunun basili olup olmadigini anlamak icin dizideki A tusunun bulundugu elemanin degerine bakmaniz yeterli.. boylece kullanici 104 tusun hepsini basili tutsa siz 105. tusun basili olmadigini anlayacak teknigi yakalamis olursunuz.. (umarim anlatabildim..biraz ugrasin cok kolay.) 3. klavye kesmesi.. ctrl-alt-del gibi tuslari kapatabilmek icin klavye kontrolunu kendinizin yapmasi gerekiyor.. bunun icinse klavye kesmenize kendi rutinizi koymak gerekli..bunu yapabilmek icin kesmeler konusunda bilginiz olmasi gerekli.. nede olsa bilgisayar satranc oyunu gibidir butun taslarin tam olarak nasil oynanacagini bildikten sonra iyi oynamaya baslarsiniz.. klavye kesmesi icine koydugunuz rutin icinde ister hic bisi yapmadan kesmeden cikar, ana program icinde direkt olarak porttan okuma yaparak ister rutin icinde biraz once anlattigim dizi elemanlarini degistirme icin kullanabilirsiniz.. secim size kalmis ama ben her zaman 2. yontemi secerdim.. bundan sonraki isler artik kesmelerin kullanimida dair..ordan devam..