AMIGA DOS

Diğer bilgisayarlarda kullanılan DOS sistemleriyle karşılaştırıldığında, AmigaDOS oldukça esnek bir işletim sistemi olarak görülebilir. DOS komutlarının sistemin ROM'unda saklanmamaları, bunun yerine Workbench disketinin c directory'si içinde yer almaları, bu komutların istenen herhangi bir dilde daha hızlı ve kısa yazılmalarına imkan tanır. Ayrıca, bu şekilde çok sayıda değişik komuta sahip olabilirsiniz. Burada tek sınırlama disketinizin saklama kapasitesidir.

CLI komutlarının en belirgin özelliği, diğer programlara göre oldukça kısa ve hızlı yüklenebilir olmalarıdır. Komutun kısa olması için komutun yazıldığı dil önemlidir. En kısa ve kompakt komutlar doğal olarak assembly dilinde yazılabilirler. Bugün bazı özel Workbench versiyonları (örneğin ARP 1.3.5 gibi), assembly diliyle yazılmış komutlarla çalışmaktadırlar. Assembly diline alternatif olabilecek bir başka dil de, C dilidir. Amiga'nın önemli sistem rutinlerinin çoğu bu dilde yazılmıştır. Compile edildiğinde meydana gelen komut assembler kadar kısa olmasa da C dili, bu dili iyi bilenlerin elinde çok güçlü programlama dili haline geliyor. Bununla birlikte Workbench 2.0 dışındaki versiyonlarda dos komutları BCPL denen ve artık pek kullanılmayan bir dilde yazılmışlardır. C dili de BCPL'in geliştirilmesiyle ortaya çıkmıştır.

CLI komutlarının ortak özelliklerine gelince şu noktalar göze çarpmakta:

1 - Bütün CLI komutları bağımsız çalışırlar, yani bir komut çalıştırıldıktan sonra kullanıcıdan başka bir bilgi girişi beklemez. Gerekli bilgiler komut parametreleri olarak başta belirtilir.

2 - Komutlar genellikle çalıştırıldıkları CLI/SHELL penceresine çıkış verirler. Çıkış için başka bir pencere açılmaz.

3 - Standart CLI komutlarında ayrıca, komut ? şeklinde çağırılabilen bir komut şablonu bulunur. Eğer komutu yanlış kullanırsanız doğru parametreleri gösteren bir şablon otomatik olarak gösterilir.

AmigaDOS CLI komutlarını yükleyebilmek için, önce içinde bulunduğunuz directory'ye bakılır. Eğer komut bu directory içinde değilse, bilgisayar açıldığında otomatik olarak assign edilen c directory'sine bakılır.

Herhangi bir komut verdiğinizde, bu komutun disketten yüklenmesi için izlenen sıra şöyledir. Önce DOS komutu arar. Komut bulununca kullanmakta olduğunuz

Can ÖZTÜRK filesystem (oldfilesystem veya fastfilesystem) handler'ı devreye girer. Dosya veya directory ile ilgili bilgiler incelenir ve sistem tamponuna (buffer) alınmaya hazırlanır. Bu noktada trackdisk.device devreye girerek track ve sectorlerden ilgili dosyayı disket sürücüyü çalıştırarak okur. Bir track okunduğunda track buffer'ı ve doğru sektörlerin yüklenip yüklenmediği kontrol edilir. Son olarak da track buffer'ının içeriği filesystem buffer'ına dosya halinde kopyalanır. Hardware seviyesine en yakın çalışan trackdisk.device formatlama vb. işlemleri de yapan handler'dır.

Görüldüğü gibi dosya yükleme ve diğer DOS işlemleri birçok işlem yapılarak gerçekleşmektedir. AmigaDOS bu yüzden diğer DOS'larla karşılaştırıldığında biraz yavaş kalmakta. Bunu daha yakından görmek için DOS disketten okuma işlemini nasıl yaptığına bakalım:

En başta, Kickstart ROM'da yer alan DOS.library adlı kütüphane çağırılır. Bu kütüphaneyi açarken iki parametreyi belirtmemiz gereklidir. Bu parametreler dosya adı ve erişim tipidir (okuma/yazma). Bundan sonra DOS yukarıda anlattığımız biçimde dosyayı arar ve açmaya çalışır. Burada bazı özel durumlar söz konusu:

- Dosya adı * ise DOS giriş ve çıkış işlemleri CLI penceresine yapılır. Eğer * işaretini, giriş ve çıkış işlemlerinin ayrı olarak yapıldığı bir komutla kullanıyorsanız (ör: copy * to ram:), bu işaret CON handler'ı yani bu örnekte klavye ve CLI penceresi kullanılarak yapılan girişi belirtir.

- Dosya adı NIL ise okuma ve yazma esnasında hiçbir şey gösterilmez.

- Dosya adında : işareti kullanılmışsa bu işaretten önce yazılan adın araç adı listesinde yer alıp yer almadığına bakılır. Eğer böyle bir araç adı mevcutsa öncelikle bu aracın handler'ı yüklenir ve çalıştırılır. Bu işaretten önce disket adını da kullanabilirsiniz. Bundan sonraki işlem dosyayı okuma işlemidir ve bu noktada filesystem devreye girer. Filesystem buffer'ını addbuffers komutuyla genişleterek daha az yükleme yapmasını sağlayabiliriz.

Öte yanda RAD ve RAM için yukarıda anlattığımız işlem sırası biraz farklıdır. RAM diskte hem handler hem de device aynı anda çalışır. Fakat formatlama, diskdoctor gibi işlemler yapılamaz. Workbench 1.3'te kullanılan RAD disk ile bu kısıtlamalar ortadan kaldırılmıştır. RAD, trackdisk.device'ı değil ramdrive.device adlı başka bir device kullanmaktadır. Bahsettiğimiz device'lar Workbench disketinin devs directory'sinde, handler'lar da 1 directory'sinde yer alırlar.

AmigaDOS ile ilgili başka bir ilginç özellik bellek yönetimidir. Amiga'nın işletim sisteminin multitasking olarak çalıştığından daha önce birçok kez bahsetmiştik. Bir program belleğe yüklenirken, yükleneceği adres bellekteki diğer programlara göre ayarlanır. AmigaDOS önce programın sığabileceği büyüklükte boş bir bellek parçası arar. Bellek parçası dedik, çünkü Amiga'nın belleği tek bir parça (segment) olarak düzenlenmemiştir. Örneğin bilgisayar 200K boş bellek olduğunu gösterirken, en büyük bellek parçası 50-60K'yı geçmeyebilir. Bu durumda 100K'lık bir segment gerektiren bir program 200K'lık boşluğa rağmen yüklenemez. DOS komutlarından avail komutunu kullanarak en büyük segment'i largest başlığı altında görebilirsiniz. Programın segment yapısı compile işlemi sırasında belirlenir.

Şimdi de bir arkadaşımın içinde shell bulunan özel bir çalışma disketi hazırlarken karşılaştığı bir zorluktan söz edeceğim. Arkadaşım Shell-Seg dosyasını ve Shell ikonunu kopyalayıp Workbench'in startup-sequence dosyasında yer alan komutları aynen kullanmıştı. Buna rağmen Shell'i bir türlü başlatamıyordu. Bu sorunu bana anlattığında problemin çok basit bir şekilde çözülebileceğini söyledim. Burada unuttuğu nokta Shell-Segment dosyasının Shell'i çalıştırmak için yeterli olmadığı ve aynı diskete CLI programının da kopyalanması gerektiğiydi. Bundan sonra Shell'in project ikonunun info'sunu alıp default tool'u SYS:SYSTEM/CLI yaptıktan sonra her şey yoluna girmişti.

Hazır laf CLI programından açılmışken, bu programın C diliyle yazılmış basit bir program olduğunu biliyor muydunuz? Programı çalıştırdığınızda ilk yaptığı iş nereden yüklendiğini (workbench/CLI) kontrol etmektir. Daha sonra bir CLI penceresinin açık olup olmadığına bakılır. Eğer açık değilse 10K bellek ayrılır, %N mesajı hazırlanır ve directory SYS: olarak seçilir. Bu arada CON:0/50/640/80/newcli adında bir pencere açılır.

Aslında CLI'dan verdiğiniz komutları çalıştırırken asıl işi Run komutu yapar. Önce ROM'dan execute fonksiyonu çağrılır. Bu fonksiyon, bir CLI komutu olan Run'ı yükler ve çalıştırır. CON penceresine yapılan giriş CIS (giriş sistemi) ve COS (çıkış sistemi) tarafından analiz edilir ve Run komutuyla çalıştırılarak sonuç aynı CLI penceresine yazılır. Görüldüğü gibi burada en önemli işlem Run komutu sayesinde yapılmaktadır. İşin ilginç yanı CLI programının Workbench disketinin c directory'sinde Run komutu olmadan çalışamaması.

Son olarak bu ay sizlere kısa bir DOS komutunun listesini veriyoruz. Bu program mouse hareketini preferences ile mümkün olandan daha hızlı hale getiriyor. Böylece artık mouse seçimlerinizi daha kolay yapabilirsiniz. Programı AmigaBASIC'ten yazın ve kaydedin. RUN komutuyla programı çalıştırdığınızda DATA satırları kontrollü bir şekilde okunarak RAM diskte bir komut dosyası haline gelecektir. Bundan sonra RAM:fastmouse diyerek mouse'unuzun hareketini hızlandırabilirsiniz. Eğer bu hızı da beğenmezseniz aynı komutu tekrar yazın ve pointer'ın hızının daha da arttığını görün. Komutu diskete kaydetmek için

1> copy ram:fastmouse to df0: komutunu kullanabilirsiniz.

DATA 0,0,3,243,0,0,0,0,0,0,0,1,0,0,0,0 
DATA 0,0,0,0,0,0,0,66,0,0,3,233,0,0,0,66 
DATA 78,85,255,170,44,120,0,4,43,110,1 
DATA 20,255,170,69,237 
DATA 255,174,97,0,0,122,67,237,255,208 
DATA 32,73,112,48,97,0 
DATA 0,210,35,74,0,14,65,250,0,210,112 
DATA 0,114,0,78,174 
DATA 254,68,112,58,114,1,78,174,255 
DATA 58,36,64,32,74,112,22 
DATA 97,0,0,176,37,74,0,14,66,106 
DATA 0,22,65,234,0,24 
DATA 37,72,0,18,114^4,67,250,0 
DATA 120,48,217,85,65,102,250
DATA 21,124,0,51,0,9,67,237,255,208 
DATA 51,124,0,9,0,28 
DATA 35,74,0,40,78,174,254,56,67,237 
DATA 255,208,78,174,254,62 
DATA 69,237,255,174,97,0,0,66,78 
DATA 93,112,0,78,117,32,74 
DATA 112,34,97,0,0,94,112,255,78 
DATA 174,254,182,66,170,0,10 
DATA 66,42,0,9,21,124,0,4,0,8 
DATA 21,124,0,0,0,14 
DATA 21,64,0,15,37,109,255,170 
DATA 0,16,36,138,88,146,66,170 
DATA 0,4^3,74,0,8,78,117,16,42 
DATA 0,15,78,238,254,176 
DATA 32,8,12,40,0,2,0,4,102,16 
DATA 12,104,0,255,0,6 
DATA 102,8,225,232,0,10,225,232 
DATA 0,12,32,80^4,8,102,226 
DATA 78,117,66,24,83,64,102,250 
DATA 78,117,105,110,112,117,116,46 
DATA 100,101,118,105,99,101,0,0,0,0,3,242
p = 300:b = 0 
PRINT "DOSYA YAZILIYOR" 
OPEN "ram:fastmouse" FOR OUTPUT AS #1 
FORj=l TO p 
READ a: b = b + a 
PRINT #l,CHR$(a); 
NEXT j 
CLOSE 1 
IF b<> 23117 THEN 
PRINT "DATA SATIRLARI HATALI!" 
PRINT "LÜTFEN TEKRAR KONTROL EDIN.":STOP 
END IF 
PRINT "DOSYA TAMAM" 
END