Amiga Dünyası sayı 25, sayfa 14

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 14

LLER

CENKER ÖZKURT C yolculuğumuz devam ediyor. Bu ay da aynı şekilde yeni örneklerimiz ile yazımızı sürdürüyoruz. Hatırlayacağınız gibi, geçen ay Menudesign adı altında bir örnek program üzerinde çalışmıştık. Bu örnek ile kendi utility program arşivimizi hazırlayabiliyor ve çalıştırabiliyorduk. Bu örneğimizin en büyük faydası, bizlerin de artık kendi utility programlarımızı hazırlayabileceğimizi görmüş olmamız. Yeni örneklerimize geçmeden önce, Compile ve Link işlemleri için kullanabileceğimiz parametre listesini vermek istiyorum. Bu parametreler ile programımızın hafıza modelini, hangi hafıza bölgesinde bulunacağını, assembler listesini isteyip istemediğimizi belirtebiliyoruz. Bu sayede, örneğin programımızın assembler listesini incelememiz mümkün olabiliyor. Dikkat edin; Assembler listesi dedim!! Dikkat!! Dikkat!!.. Buradan da anlaşılacağı gibi, C derleyicimiz aynı zamanda bir assembler derleyicisidir. Yazmış olduğumuz C programı, Compile vasıtasıyla assembler'a çevrilir. Fakat siz bu assembler listesini göremezsiniz. Görebilmeniz için aşağıda vermiş olduğum parametre listesini kullanmanız gerekiyor,

Compiler Parametreleri:

assemble etmeden uzantısı .asm olan dosyayı yarat -c link etmeden uzantısı .o olan dosyayı yarat -s uyarı mesajlarını yazmadan compile et -t C source cümlelerini assembler listesine at -e geniş code'lü hafıza modelini kullan -d geniş data'lı hafıza modelini kullan -i integer ve sabitleri 32 bit'lik long'a çevir

Link Parametreleri:

ihtiyaç olan module'ü name.lib'te ara -l(edb) — code, data ya da bss'leri chip hafızaya yükle -f(edb) — code, data ya da bss'leri fast hafızaya yükle

Compiler ve Linker parametreleri ayrı ayrı verilmiştir. Örneğin bir programımızın assembler listesini görmek istersek, compile sırasında;

cc -a prog.c

yazmalıyız. Bu sayede Compile programı C programının assembler listesini çıkaracaktır. İstersek bu liste üzerinde değişiklik yaparak yeniden compile edebiliriz. Gelecek ay bu konu üzerinde daha geniş olarak duracağız ve C programlarımızda assembler programlarımızı çağırmayı öğreneceğiz. Yukarıdaki parametreler Aztec C Versiyon 3.6 içindir. Elinde versiyon 5.0'ı olanlar bu parametreleri şu şekilde kullana-

a prog.c

Bu konudaki geniş bilgiyi disketinizdeki döküman dosyalarından öğrenebilirsiniz.

Link işlemleri sırasında, programımızı istediğimiz hafıza bölgesine (Chip ya da Fast) atabiliriz. Bu işlem özellikle assembler programları yazdığımızda işimize yarayacaktır. Şimdi bu ayki örneklerimize geçebiliriz. İlk örneğimiz, joystick ya da joystick portlarımızı kontrol için. Programı çalıştırdıktan sonra joystick'imizi hareket ettirerek hangi yönün sağlam ya da bozuk olduğunu öğrenmemiz mümkün. Programımız tamamı aşağıda olduğu gibi:

#define PORT 2

short *joy-Üxdff00842*PORT; char *cia-0xbfe00l;

Amain()

/ while(1) | if(*joy&2) printf("SOL"); printf("SAG"); 1) printf("ASAGI"); primf("YUKARI"); if(1*cia&64*PORT)) printf("ATES"); | )

İlk satırdaki önişlemci komutu ile, PORT macro sabitini belirliyoruz. Burada 2 sayısı 2. portu kullanacağımızı belirtiyor. Aynı şekilde 1. portu da kontrol etmemiz mümkün. Diğer satırda *joy değişkeni short tipinde tanımlanıyor. Aynı zamanda bu değişkeni pointer olarak tanımlayarak joystick portunu görüntülemesini de sağlıyoruz. Portu görmemizi sağlayan adres, hex olarak 0xdff008+2*PORT'dir. short tipindeki değişkenler, 2 byte'lık bir yer kaplamaktadır. Bu adres de aynı şekilde bize 16 bitlik bir sayı ile geri döneceğinden, biz de short olarak tanımladık. Tanımlarken short yerine WORD tipi yazmanız da mümkün. Çünkü short ve WORD tamamen aynı özelliklere sahiptir. Fakat WORD tipi kullanırken, programınızın başına #include <exec/types.h> yazmanız gerekir. WORD bu dosya içerisinde short olarak define edilmektedir. İkinci satırda 'fire' tuşunu kontrol için *cia değişkenini 0xbfe001 adresini görüntüleyecek şekilde tanımlıyoruz. Sonraki satırlarda ana programa girerek *while* komutu ile sonsuz bir döngüye giriyoruz. Döngü içerisinde *if* satırları ile joy değişkeninin bit durumunu kontrol ediyoruz. Örneğin joystick'i sola çekerek 0xdff008+2*PORT adresinin 2. bit'inin '1' olup olmadığını öğrenerek durumu ekrana yazıyoruz. Diğer satırlarda da aynı şekilde bu adreslerin bit durumlarını kontrol ederek döngüye devam ediyoruz. Döngüden çıkmak için klasik hareket *Ctrl-C* yapıyoruz. Bu ayki ikinci örneğimiz günün tarihini ve saati öğrenmemizi sağlayan kısa bir program. Bu iş için iki komut kullanıyoruz. Komutlar Aztec firmasının hazırlamış olduğu kütüphanede mevcut. İlk komut timer'dan zamana karşılık bir değer okuyor. Timer bilgisayarımızın içerisinde devamlı çalışan bir sayıcı olarak çalışıyor. Daha sonra biz bu değeri okuyarak 26 byte'lık bir diziye çeviriyoruz. Diziyi ekrana yazarak sonucu görüyoruz.

main() ( long *tloc; long *clock; P* Timer'dan zamana karsilik bir deger okur */ timeltloc); /* Bu degeri 26 karakterlik ASCTI ye cevirir */

clock); |

Diğer programımız ikinci örneğimizin daha gelişmişi. Program çalıştıktan sonra bir window açarak tarih, saat ve hafıza durumunu görüntülüyor. Ayrıca programı AmigaDos'tan run komutu ile MultiTask olarak çalıştırmak mümkün. Şimdi programımıza bir göz atalım;

Klavyeyle gezinmek için ← ve → tuşları.