Bu sayfadaki yazılar
Sayfanın metni
Sayfa 54
RUN/STOP tuşuna basarsanız, directory okunması duracaktır. Başka bir tuşa bastığınızda ise, bir sonraki 20 dosya adı listelenecektir. Diyelim ki bu disketi formatlayıp, deneme disketi olarak kullanmak istediniz. Bu durumda ekrandaki noktanın yanına yazacağınız komut şu olacaktır:
*ON:disket
Bir önceki bölümde de gördüğümüz disket formatlama komutunu OPEN, CLOSE gibi komutlara gerek kalmadan, sadece komutun başına O ekleyerek kullandık. Bu, diğer disket komutları için de geçerli. Diskete göndereceğiniz, Scratch, Rename, Validate, Copy vs. komutlarının hepsini başlarına O karakterini eklemek şartı ile DISKMON içerisinden kullanabilirsiniz. Komutların formatları, son iki bölümümüzde anlattığımız gibidir. Tek dikkat edeceğiniz, O karakterinden sonra boşluk olmaması. Şimdi deneme disketimiz şu veya bu şekilde hazır ise, DISKMON ile disketimize ilk saldırıyı yapalım: Bir blok okuma. Birazdan ayrıntısına gireceğimiz directory, disketimizde 18. TRACK'ın 0. SECTOR'ünde başlar ve 19 blok kaplar. İster misiniz, bu zincirin ilk bloğunda neler olduğuna bir göz atalım? Hemen şu komutu verelim:
12 00
Yani READ (oku) komutu. Yanında gelen iki sayı ise sırasıyla TRACK ve SECTOR numaralarını veriyor. Peki TRACK yerine neden 18 değil de 12 yazdık? Bu disket monitörümüz (DISKMON) sayıları onluk sistemde değil de onaltılık sistemde kabul ediyor. Bu sistemden defalarca söz ettik. Eğer hâlâ bilmiyorsanız, Ayhan Kalaylıoğlu'nun Makine Diline Merhaba yazısına ve benim bazı diğer yazılarıma bir göz atın. Böylece 12'nin, 1*16+2=18 sayısına tekabül ettiğini göreceksiniz. Eğer disketle bu derece yakından ilgilenecek aşamaya gelmişseniz, onaltılık (hexadecimal) sistemi sular seller gibi bilmeniz gerekmekte... Yukarıdaki komutu verdikten sonra disketin kırmızı ışığının kısa bir süre yanıp söndüğünü göreceksiniz. Hemen arkasından da şu komutu verin:
s4
.M
Ekranda bir sürü sayının geçtiğini ve ekranın sağ tarafında da sol tarafta yer alan sayıların karakter karşılıklarının yer aldığını göreceksiniz (Eğer byte'ın değerine karşılık düşen bir harf, rakam veya işaret yok ise, nokta basılacaktır). İşte bu komut (Memory, hafıza), R ile disketten bilgisayara okuduğunuz blok içindeki 256 byte'lık bilgiyi ekrana çıkarır. Gördüğünüz gibi, blokun ortalarında bir yerde, formatlarken verdiğiniz disket adı ve ID'si var. Neyse, buna birazdan geri döneceğiz. Peki, şimdi bir sürprize ne dersiniz? Eğer M komutunu verdikten sonra başka bir şey yapmadıysanız, cursor ekranın en alt satırında yanıp
iskete
yazılan bilgilerin üst üste yazılmaması için bir disket haritası tutulması lazım. Bunu directory yapıyor.
sönüyor olacak. Şimdi HOME tuşu ile cursor'u ekranı silmeden sol üst köşeye getirin. Şimdi de CRSR tuşu ile cursor'u ekranın üst kenarına doğru itmeye çalışın. N'oldu? Sayı listesi, aşağıya doğru kaymaya, ekranın üstünden listenin ilk satırları gelmeye başladı, di mi? Şimdi de, aynı şeyi ekranın alt kenarı ile yapın. Bu sefer listenin yukarıya kaydığını ve alt satırdan listenin geri kalan kısmının satır ekrana yazıldığını göreceksiniz. Güzel mi? Bir ufak komut daha... Hâlâ kaç numaralı TRACK/SECTOR'de olduğumuzu hatırlıyor musunuz? Eğer hatırlamıyorsanız, şöyle bir komutla bilgisayara sorabilirsiniz:
Show (göster) komutu, size o anda hafızada bulunan 256 byte'lık bilginin en son hangi bloktan okunduğunu belirtecektir. Bilgisayarın bu bilgiyi saklamasının bir iyi tarafı da,
R komutunu herhangi bir blok adresi belirtmeden de kullanabilmeniz. Eğer aşağıdaki komutu kullanırsanız, bilgisayar en son okuduğu bloku bir daha okuyacaktır:
.R
Böylece, yazımızın devamında göreceğimiz işlemlerle hafızayı bozarsak tekrar düzeltme imkânımız ortaya çıkıyor. DISKMON'u şimdilik bir köşeye bırakıp, disket yapımıza geri dönelim. Genel kullanım açısından disket üzerindeki bloklar üçe ayrılabilir: Directory'nin 19 blokluk zincirinin önemli sistem bilgilerinin saklandığı ilk bloku, disketteki dosyaların adı, uzunluğu ve diğer bilgilerinin saklandığı geriye kalan 18 blok ve dosyaları oluşturan esas byte'ların saklandığı 664 blok. Disket üzerine herhangi bir bilgi bir dosya adı ile yazılmaya başlandığında (örneğin bir SAVE işlemi veya bir veri dosyasının OPEN ile yazılmaya başlanması), 1541'in işletim sistemi (DOS, Disk Operating System) tarafından sırasıyla şu işlemler yapılır. Önce programın adı, birazdan göreceğimiz kurallara uygun olarak directory zincirindeki ilk boş yere yazılır. Daha sonra da bilgi yazılabilecek en uygun boş blok bulunur. Ancak bir bilgi bir bloktan uzunsa, yani 254 byte'dan (256 değil, ilk iki byte 1541 tarafından kullanılıyor) daha fazla yazılacaksa ne olacak? İşte buna çözüm olarak şöyle bir yöntem geliştirilmiş. Yazılacak bilgi yığının ilk 254 byte'ı bir bloka yazılır ve bu blokun adresi TRACK/SECTOR numarası olarak directory'de bu dosyaya ayrılmış uygun yerde kaydedilir. Sonra disket üzerinde yeni bir uygun ve boş blok bulunur. Bilginin bir sonraki 254 byte'lık kısmı da bu bloka yazılır. Bu arada ilk blok ile ikinci blok arasında bir bağ kurabilmek için, ikinci blokun TRACK ve SECTOR numaraları ilk blokun ilk iki byte'ına yazılır. Şimdi neden bize blok başına 254 byte kaldığını anladınız mı? Bu işlem, üçüncü, dördüncü ve daha sonraki 254'er byte'lık kümeler halinde devam eder. Böylece o dosyanın bilgilerini içeren bir bilgi zinciri oluşur. Bu zincirin en son halkasını oluşturan blokun ilk iki byte'ı ise, arkadan gelen başka bir blok olmadığını göstermek üzere özel değerler alırlar. İlki, sıfır değerini içermektedir. İkinci byte ise, o bloktaki bilginin kaç byte'ının programın son bölümünü oluşturduğunu belirtir. Tüm bu yazılma işlemi yapılırken, üzerlerine bilgi yazılan blokların bir yöntemle korunması gereklidir. Daha sonra diskete yazılacak bilgilerin tekrar bu blokların üzerine yazılmaması lazım. İşte bunun için, directory zincirinin ilk blokunun ilk yarısında bir tür disket haritası tutulmaktadır ve bu haritada hangi blokun o anda boş, hangisinin dolu olduğu açıkça belirtilmektedir. Bu haritanın da ayrıntısına ineceğiz. Dikkatli okuyucuların hemen soracakları bir soru olsa gerek. Yukarıda “uygun ve boş” blok bulmaktan bahsettik. Acaba uygun blok da neyin nesi: Bilginin ilk 254 byte'lık kısmını diyelim ki, 01/00 numaralı (TRACK/SECTOR) bloka yazıldı. Bir sonra gelen 254 byte, 01/01'e yazılmaz. Onun yerine 01/04 tercih edilir. Eğer bu blok daha önce başka bir programın blokları tarafından kullanılmamışsa, ikinci 254 byte oraya yazılır. Peki neden? Bilginin ilk blokunu okuyup COMMODORE 64'e gönderme sırasında disket, merkezi etrafında dönmeye devam eder ve 01/01 numaralı blok okuma/yazma kafasının altından geçer gider. Sıra ikinci bloku okumaya geldiğinde ise, okuma/yazma kafasının altındaki blok 01/04 numaralı blok olacaktır. Diskete kayıt sırasında böylesine atlayarak giden blok sıralamasının en güzel örneğini directory yapısını incelerken göreceğiz. Hatta isterseniz, bu incelemeye hemen başlayalım...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 55
Önce iki konuda anlaşalım. Bir blokta 256 byte vardı. Biz bu byte'ları numaralandırırken 0-255 arası sayılar kullanacağız. Yani bir bloktaki ilk byte sıfır numaralı, son byte da 255 numaralı olacak. Ayrıca, yazı içinde TRACK, SECTOR ve byte numaralarından bahsederken sayıları onluk sayı sistemine göre vereceğim. Ancak bunları DISKMON ile kullanırken onaltılık tabana çevirmemiz gerektiğini unutmayın. Eğer yazımızda onaltılık sistemde bir sayı vermek zorunda kalırsak, başına bir dolar işareti koyacağız. Örneğin 5 yerine $5, 65 yerine $41 örneği gibi. Anlaştıysak devam edelim. Directory dediğimiz bölüm, disketin 18 numaralı TRACK'ını tamamen kaplar. İlk bloku 18/00'dadır. İlk iki byte bir sonraki directory bloku olan 18/01'i gösterir. 18/01'de dosyalarla ilgili bilgiler başlamaktadır. Buna birazdan geleceğiz. Önce 18/00'ı inceleyelim.
DISKMON ile .R 12 00 komutunu kullanarak bu bloku hafızaya yükleyin. Sonra da M komutu ile 256 byte'ı ekrana getirin. Gerçi ilk satırlar ekranın üstünde kaybolacak ve RUN/STOP tuşu ile listeleme işlemini durdurma çabalarınız da bir sonuç vermeyecek (çünkü böyle bir olanak yok, kih kih...), ama daha önce gördüğümüz şekilde cursor'u ekranın üst kenarına doğru iterek o geçip giden satırları tekrar geri getirebilirsiniz. Ama bir başka olanağı da burada belirtelim. M komutu ile bir başlangıç ve bitiş byte numarası verebilirsiniz. Örneğin:
.M 00 OF
dediğinizde, ilk onaltı byte iki satır halinde ekrana basılacak ve listeleme duracaktır. Eğer sadece başlangıç byte numarası verir bitişi vermezseniz, bitiş olarak $FF varsayılacaktır. Önce .M 00 0F vererek ilk satırı görelim. Gerçi 04-07 arası byte'lar da satırı tamamlamak için ekrana çıkacaktır ama işimiz onlarla değil. 00 ve 01 numaralı byte'lar 12/01 değerleri ile bir sonraki directory blokunu göstermektedir. 02 numaralı byte'a gelince, dikkat edelim. Bu byte'ın değeri 65'tir ($41). Eğer ekranın sağ tarafındaki harflere bakarsanız, bunun “A” harfinin kodu olduğunu görürsünüz. Bu, disketin 1541 tarafından formatlandığını anlatmaktadır. Aynı disketi COMMODORE firmasının diğer disket sürücüleri ile de formatlayabilirdiniz. Bu durumda, ikinci byte'ın içeriği daha farklı olacaktır. Örneğin, CBM4040 kullandığınızda, bu sayı harfine karşılık gelen 69 ($45) olur. Bu tür disketleri 1541 ile okuyabilir, ancak üzerine yazamazsınız. Eğer yanlışlıkla disketinizin bu byte'ını ileride göreceğimiz komutlarla değiştirir ve 65'ten farklı bir değere getirirseniz, bu diskete bir daha başka şey yazamazsınız. Gelecek bölümlerimizde göreceğimiz bazı özel rutinler kullanmanız gerekecektir.
C programlama dilinin detaylı incelemesine başlıyoruz. Şunu söylemeliyim ki, bu diziyi daha iyi anlayabilmeniz için en azından bir bilgisayar dilini ve daha iyisi Pascal gibi yapısal bir programlama dilini bilmenizde fayda var. C ile ilgili yazılarımızda bu dilin özellikle Amiga için önemini vurgulamıştık. Bu dizide yer alan örnek ve programlar bu açıdan ele alınmış ve Amiga ile denenmiş programlardır. Kullanılan C derleyicisi Lattice-C'dir. Aslında verilen örnekler Aztec-C ile de kullanılabilir. Yeter ki, gerekli olan işlemler tam olarak yerine getirilsin. Verdiğiniz örnekler C-64'te, First Publish LTD. tarafından piyasaya sürülmüş Süper-C derleyicisi ile denenebilir. Derleyicilerin çoğu (hattâ hemen hemen hepsi) referans olarak B. Kernighan ve Dennis Ritchie tarafından kitaplaştırılmış The C Programming Language adlı yapıtını almışlardır. Biz de bu yazı dizisi boyunca bu kaynağı temel referans olarak alacağız. Yeri geldiğinde de derleyicilerin ekstra özelliklerinden söz edeceğiz. Yazı dizisi genel C bilgisini konu aldığından, PC kullanıcıları da bu yazı dizisinden yararlanabilir.