Gönderen Konu: Baska Interruptlar  (Okunma sayısı 6807 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Morphosis

  • Üye
  • **
  • İleti: 74
Baska Interruptlar
« : 06 Haziran 2008, 12:41:30 ös »
Bu orneklerde dikkat etmisinizdir - her int86() yi cagirisimizda, ilk
parametre olarak 16 yi belirttik. Bu istedigimiz interrupt'un
numarasidir. Daha once soyledigim gibi BIOS un ekran fonksiyonlarinin
hepsi interrupt 16 ile cagirilir. Fakat tabi, programlarimiz bununla
sinirli kalmak zorunda degildir, kullanabilecegimiz daha bircok
interrupt vardir. Dilerseniz, su programa bir bakin:

PRINTSCR.C:
================================================
#include <dos.h>
main()
{
union REGS in; /* buna ihtiyacimiz yok, ama tanimlamamiz lazim */
int86(5,&in,&in); /* print-screen yapalim */

}
=================================================

bu program, gorevi ekrani oldugu gibi yaziciya gondermek olan
interrupt 5 i kullanmaktadir. Artik klavyeden PRINTSCREEN tusuna
bastiginiza, sistemin ne yaptigini biliyorsunuz.

DOS ve ANSI.SYS ile Ekran Duzeni

Umarim simdi size tumuyle degisik bir ekrana erisme metodu gosterirsem
bana kizmassiniz. Bu ikinci metodun birincisi ile neredeyse hicbir
alakasi yok. Bu metod sayesinde, programiniz, modem ile bagli uzak bir
terminalden calisabilir, DOS'un yonlendirme metodlarindan
(TYPE A.TXT > PRN gibi) faydalanabilir. ANSI bir terminali olursa,
herhangi bir Unix sisteminde calisabilir. Nasil mi? Cok kolay -
yaptigimiz, DOS ekrana birsey gonderirken, ekran idarecisinin
anlayabilecegi komutlari kullanmak. Yegane sorun, bu idarecinin siz
yukleyinceye kadar calismaz olmasi. Peki, nasil yukleyebiliriz?
Sistemi actiginiz diskte, CONFIG.SYS isimli bir kutuk olmasi lazim.
Yoksa yaratin, ve icine:

DEVICE=ANSI.SYS

satirini koyun. Bundan sonra, DOS disketinde bulunan ANSI.SYS isimli
kutugun, sistemi actiginiz diskte bulunmasini saglayin. Son olarak da,
ANSI.SYS i yuklemek icin, CTRL-ALT-DEL e basin. Alet acildiginda, size
fark ettirmeden bu idareci yuklenecektir. Bundan sonra, dilerseniz
printf icinde, dilerseniz herhangi baska bir DOS u kullanan rutin ile
ANSI yi kullanabilirsiniz. (Anafikir: printf, ekrana yazmak icin,
diger bircok C fonksiyonu gibi, DOS'u kullanir.)

ANSI ile cursorun yerini degistirmek:

Ilk once, butun ANSI komutlari, bir ESC, yani ASCII 27 ile baslarlar.
Ornegin, cursorun yerini degistirmek icin, gereken komut ESC [#;#h
dir. Ilk # isaretinin yerine satir numarasi, ikincinin yerine de kolon
konur. Bu, bir programda soyle gorunebilir:

printf("x1b[%d;%dh",satir,kolon);

(Ondalik 27 = Hex 1B )

satiri dikkatle incelerseniz, ilk once x1b ile ESC karakterini, daha
sonra [, sonra ilk rakami, sonra ; ve ikinci rakami, ve son olarak da
h isaretini gorebilirsiniz. ANSI nin komut yapisi son derece sabit
oldugundan, araya bosluklar katarsaniz, programiniz calismayabilir.

ANSI ile Ekrani Silmek

Ekrani silmek kolay: ESC [2j yi ekrana yollamaniz yeterli:
printf("x1B[2j");
araya bosluk koymamaya dikkat etmelisiniz. Ayrica kucuk ve buyuk
harfler farklidir.

Ekranin Rengini Ayarlamak

Bunun icin ESC [#;#m komutunu vermeniz gerekiyor. Ilk #, ekrandaki
yazilarin rengi, ikincisi ise arka planin rengidir. Bu renk kodlari
sunlardir:

30 siyah yazilar
31 kirmizi yazilar
32 yesil yazilar
33 sari yazilar
34 mavi yazilar
35 magenta yazilar (kirmizimsi)
36 cyan yazilar (mavimsi)
37 Beyaz yazilar

40 siyah arka plan
41 kirmizi arka plan
42 yesil arka plan
43 sari arka plan
44 mavi arka plan
45 magenta arka plan
46 cyan arka plan
47 beyaz arka plan

Diger ozellikler icin, ESC [#m girmeniz gerekli: # yerine,
0 normal
1 parlak
4 alt cizgi (monokrom da)
5 yanip sonen
7 ters renkler
8 gorunmez


DOS mu, BIOS mu kullansak

DOS, ve ekran idarecisi ANSI.SYS, BIOS a nazaran daha yavas calisir,
fakat bircok ortamda kullanilabileceginden, kalici programlar icin
daha uygun bir cozumdur. Ornegin oyunlar gibi yasam sureleri birkac ay
olan urunler ise, BIOS yada hatta direk erisim metodlarini
kullanabilirler. ANSI nin dezavantaji, kullanicinin ANSI.SYS i
yuklemesinin gerektigidir. Bu da, yeni kullanicilari panige kaptiran
bir durumdur.

Diger Interruptlar

Gordugunuz gibi BIOS ile ilgilenirken, sadece 2 interrupt kullandik.
Ekran fonksiyonlarini saglayan 16. interrupt, ve ekranin kopyasini
yaziciya gonderen 5. interrupt. Bunun gibi daha bircok interrupt
vardir, ve bize cok cesitli servisler sunarlar.

Ayrica, dilersek kendi interruptlarimizi da yazabiliriz. Bos olarak
tanimlanmis bir interrupt vektorunu degistirip, kendi rutinimizin
adresini ona verebiliriz. Yada, ornegin sidekick gibi programlarin
yaptigi gibi klavyenin yarattigi interrupt sonucunda cagirilan rutini
degistirebiliriz, ve diledigimiz baska birseyin yapilmasini
saglayabiliriz. Bu tip programlar ilk olarak basilan tusun kendilerini
harekete gecirecek tus olup olmadigini kontrol ederler, sayet degilse
kontrolu eski interrupt rutinine gecirirler.

--------------------------------------------------------------------------

--exe--