Bu sayfadaki yazılar
Sayfanın metni
Sayfa 49
194-223 7. dosya 224-225 Kullanılmaz 226-255 8. dosya
18/04'te ise aynı byte'lar 9-16 arası dosyaları gösterecektir ve ilk iki byte da 18/07'yi gösterecektir. İsterseniz önce .M 02 1F diyerek ilk dosyaya ait bilgileri içeren dört satırı ekrana getirelim. Bu 30 byte'ı kolaylık olsun diye 0-29 arası numaralandıralım ve buna göre her bir byte'ın anlamının ne olduğunu görelim. Eğer bu bilgileri, diyelim ki 7. dosya için kullanmak isterseniz, bu 0-29 arası byte numarasını 7. dosyaya ait bilgilerin başladığı 194'e ekleyerek blok üstündeki gerçek byte numarasını bulabilirsiniz.
0 numaralı ilk byte, o dosyanın türünü belirlemektedir. Bildiğiniz gibi dosya türleri PRG, SEQ, REL, DEL ve USR'dir. Bu dosya türlerini sırasıyla 130, 129, 132, 128 ve 131 ($82, $81, $84, $80, $83) kodları temsil eder. Eğer o dosya disketten Scratch ile silinmişse, burası 00 olur ve $ ile directory'e baktığınızda o dosya görünmez. Bu byte'ların bazı başka özellikleri de vardır. Eğer ikilik ve onaltılık sistemde işlem yapmaya alışkınsanız, yukarıdaki sayıların üst bit'lerinin 1 olduğunu görürsünüz. Bu, o dosyanın diskete başarılı bir şekilde yazıldığını ve gerektiğinde rahatça okunabileceğini gösterir. Ancak dosyayı diskete yazarken CLOSE kullanmamışsanız veya disketin hafızası dolduğu için kayıt işlemi yarıda kesilmişse, bu değerler 128 eksik, yani sırasıyla 2, 1, 4, 0, 3 olacaktır. Directory'i $ ile yüklediğinizde ise isimlerinin yanlarında bir çarpı işareti görünecektir. Ayrıca 6 numaralı bit'in de bir önemi vardır. Bunun için demin verdiğimiz bilgilere 64 toplamanız yeterli olacaktır ($C2, $C1, $C4, $C0, $C3). Eğer dosya tipi bunlardan biri ise, o dosya silinemez veya üzerine yeni bilgi yazılamaz demektir. Yani bir tür koruma. Bu tür dosyaların directory aldığınızda yanlarında bir “<” (küçüktür) işareti ile yazıldığını göreceksiniz. Gelelim iki ve üç numaralı byte'lara. Daha önce dosyaların birer blok zinciri halinde diskete kaydedildiğini anlatmıştık. İşte bu iki byte, blok zincirinin ilk halkasının adresini belirtir. İlk dosya için bu genellikle 17/00 ($11/$00) blokudur. Şimdi .R 11 00 ile bu bloku okuyup .M ile listeleyelim. N komutu ile bir sonraki bloka geçebiliriz. Dosyanın sonuna kadar bunu tekrarlayıp dosyanızın disket üzerinde nasıl yayıldığını gözleyebilirsiniz. Bu arada S ve B komutlarını da daha iyi bir inceleme için kullanabilirsiniz.
Şimdi 18/01'e geri dönelim (R 12 01 ile). 3-18 arası 16 byte'da dosyanın adı saklıdır ve tıpkı disket adında olduğu gibi, ismi 16 karaktere tamamlamak için 160 değeri kullanılır. $ ile directory aldığınızda dosya isimlerinin tırnak işareti ile başlayıp bittiğini görürsünüz. DOS, bu tırnak işaretini dosya okumadan önce ve ilk 160 değerine rastladığında yaratır. Burada küçük bir numara yapabiliriz. Dosya adından sonraki ilk (160) değerini orda bırakıp diğerlerini başka karakter kodları ile değiştirin. Bunu nasıl yapacağınızı biliyor olmalısınız artık. Doğrudan o byte'ların üzerine karakter kodlarını onaltılık sistemde yazıp RETURN tuşuna basın. Sonra da W ile 18/01'i diskete geri yazın. Tekrar directory aldığınızda, son tırnak işareti ile dosya tipi arasında sizin yazdığınız karakterler görünecektir.
19-21 arası byte'lar relatif (REL) dosya türlerinde kullanılır. Buna daha ileriki bir bölümümüzde değineceğiz. 22-25 arası byte'lar kullanılmaz. 26-27 arası olanlar ise (@ işareti kullanarak SAVE yaptığınızda, yani aynı isimle bir dosyanın üzerine yazmaya çalıştığınızda kullanılır. Böyle bir SAVE işlemi yaptığınızda, 1541 önce yeni bir boş blok bulur ve yeni dosyayı o bloktan başlamak üzere bir blok zinciri halinde diskete yazar. O ilk blokun adresi de bu iki byte'a yazılır. Dikkat ederseniz, bu aşamaya kadar programın disketteki ilk durumu bozulmadı. Eğer bu SAVE işlemi başarıyla biterse, yani arada elektrik kesilmemişse, diskette yeterli yer varsa veya biterse, bir WRITE ERROR oluşmamışsa (eğer bunlardan biri olmuşsa, programın eski hali hâlâ sağlam duruyor olacaktır), DOS bu iki byte'ın içeriğini 1-2 numaralı byte'lara yazacak ve bu byte'ların daha önce gösterdiği blok zincirinin halkalarını BAM'da boş olarak işaretleyecektir. İşte bu aşamada ufak bir sorun var. DOS kimi zaman 26-27'den 1-2'ye yaptığı transferi doğru yapmıyor ve bunun sonucunda dosyanızın hem eski hem de yeni halini kaybediyorsunuz. Bu nedenle, bu tür bir SAVE işlemi tavsiye edilmeye layık değil... 30 byte'lık grubun son ikisi olan 28-29 numaralı byte'lar dosyanın blok olarak uzunluğunu saklarlar. Ancak bu sayı onaltılık sistemde LOW/HIGH denen bir formatta saklıdır. Bilmeyenlere anlatalım, onluk sistemde blok uzunluğunu bulmak için ilk byte'ın değerine ikinci byte'ın değerini 256 ile çarparak eklemek gerekir. Örneğin, buradaki sayılar $28, $01 ise blok sayısı olarak dosyamızın uzunluğu, (1*256 + 40) = 296 olacaktır. Artık disketimizin her tarafını mıncıklamış olduk. DISKMON'un şu ana kadar görmediğimiz komutlarını da görerek bu ayki beraberliğimizi nihayete erdirelim. Şimdiye kadar, R, W, N, @, -, S, M, C, $, B, A, F, X komutlarını gördük. Daha profesyonel kullanımlar için bir iki komut daha var. Diyelim ki, o anda hafızada olan en son okuduğunuz bloka ait bilgileri COMMODORE 64'ün belleğinde bir başka yere daha kopyalamak istiyorsunuz (örneğin, makine dili bir programınızda kullanmak veya birden fazla bloka ait bilgiyi hafızada tutmak için). Ve diyelim ki kopyalayacağınız adres $3500. Bu durumda şu komutu kullanacaksınız:
.P $ASAF
Put (koy) komutu ile kullanabileceğiniz adresler $0000-$0800 ve $C000-$DFFF arası dışındaki herhangi bir adres olabilir. Bu adreslerde ya işletim sistemi ile ilgili hayati bilgiler ya da DISKMON'un kendisi var. Adresin onaltılık sistemde olması gerektiği çok belli, di mi? Bu işlemin tersini, yani hafızadaki 256 byte'lık bir bilgiyi DISKMON'un deposuna kopyalamak isterseniz:
.G adres
Get (al) komutunu kullanacaksınız. P için geçerli tüm kurallar G için de geçerli. C (Copy, kopyala) ile, en son okunmuş bloka ait bilgilerin hafızadan yazıcıya çıkarılması sağlanır. En son komutumuz, bir tür tarama. Herhangi bir TRACK'daki SECTOR'lerin ilk sekizer byte'larını bir arada görebilmek, kimi durumlarda faydalı olacaktır. Diyelim ki, 18. TRACK'ın, yani directory'nin tüm SECTOR'lerinin başlarını görmek istediniz. Vereceğiniz komut: T18
Görüşmek üzere.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 48
MON yardımı ile nasil bilgi yazabileceğimizi görelim. Önce .R 12 00 ile 18/00'1ı yükleyin. Tabii disketin kenarındaki korumayı kaldırın (hata yaparsanız, sorumluluk size ait!..). Sonra da, .M A2 A6 komutunu vererek ID ve 2A yazısını içeren byte'- ları ekrana getirin. Satırın en solundaki değer A2 olacaktır ve bu bir tür satır numarasıdır; o satırdaki byte'- ların $A2 adresinden itibaren olan byte'lara ait olduğunu gösterir. Şimdi cursor ile A2'nin yanındaki beş byte'- lık bilginin üstüne 414141 41 41 yazın. Sonra da RETURN tuşuna basın. Sağ taraftaki karakterlerin AA-AAA olduğunu göreceksiniz. Sıra geldi blokun yeni halini diskete yazmaya. Aşağıdaki komutu kullanın:
W
Write (yaz) komutu blokun hafızadaki yeni halini diskete yazacaktır. Şimdi de disketi bir kendine getirelim, yani initialize komutunu gönde-
Sonra da $ ile directory'e bir göz atın. Nasıl, ID bölümü biraz değişmiş, değil mi? Artık bu beş byte'a yazacağınız değerlerle oynamak sizin işiniz. Bu arada W komutunu biraz daha açalım. Yukarıdaki işlemi .W 12 00 olarak da yapabilirdik. Ancak, en son okuduğumuz blok 18/00 olduğu için ve DISKMON da bu bilgiyi sakladığından, gerek görmedik. Ancak 18/00'dan okuduğumuz bilgiyi bir başka bloka yazmak istersek (neden isteyelim ki?..) o zaman W”'yi tam biçimiyle kullanıp hangi TRACK'ın hangi SECTOR'üne yazılacağını beirtmemiz gerekir.
Directory'nin 167-170 arası b arı 160 değeri ile ve geriye kalan 171-255 ar. lar da sıfırlanmıştır. Da genelde böyledir. Kimi değişiktir ve kimi di arası byte'ların “İÇE isterseniz buralara imza dilediğiniz yazıyı yerleştirel Gerek duyacağınız karakter k
18/00'la olan ilgimiz bu kadar.
Şimdi zincirin bir sonraki halkasına geçelim, yani 18/01'e. DISKMON'dan bunu iki türlü yazabiliriz. Birincisi .R 12 01 ile. Ancak directory'nin bir bloklar zinciri olduğunu ve bu zinciri takip edebilmek için bir yöntemin olması gerektiği, kullanıcı kolaylığını sağlamak açısından aşikâr. Demek ki, ikinci bir yöntem daha var. Bildiğiniz gibi, 18/00'ın ilk iki byte'ında zincirin bir sonraki halkasının adresi yer alıyordu. Buraya ulaşmak için: .N
Next (sonraki) komutunu kullanabiliriz. DISKMON otomatik olarak o anda hafızadaki blokun ilk iki byte'ının gösterdiği adresteki bloku okuyacaktır. Bunu S ile kontrol edebilirsiniz. Eğer hafızadaki blok başka bir bloku göstermiyorsa, yani ilk byte'ı sıfır ise “End of file” (dosya sonu) mesajı çıkacaktır ve zincirin son halkası hafızada durmaya devam edecektir. Gördüğünüz gibi, N komutu ile
ISKMON'u
tam anlamıyla öğrenip, kullanmak göründüğünden zor, fakat sonuç bu
çabayı haklı çıkaracak nitelikte.
*mantıksal' olarak bir sonraki bloka gidiyorsunuz. Bunun her zaman 'fiziksel' konuya blok olmadığını görmüştük. Örneğin disketinizde 8'den fazla dosya varsa, directory'nin üçüncü halkası 18/02 değil 18/04 olacaktır. Buraya kolaylıkla N komutu ile gidebiliriz. Peki ya gerçekten fiziksel bir sonraki bloku okumak istersek ne yapacağız? O zaman N yerine .R 12 02 işaretini verin. DISKMON 18/02'yi okuyacaktır. Eğer 18/02'de de bir şey yoksa, 18/03'ü tekrar deneyeceksiniz. Yani bloka fiziksel sıraya göre de gitme imkânınız var. Eğer disketinizde 8'den fazla hazır dosya yok ise, 18/01'den itibaren incelememize devam etmeden, önce bir şey daha yapmanız lazım. Önce .X (exit, çıkış) komutu ile DISKMON'dan çıkın. Ekranın sol üst köşesine çıkacak olan şeyleri şimdilik boşverin. Başka bir disketinizden 3-5 blokluk
(daha da uzun olabilir ama zaman alır) bir program (varsa, BASIC programlardan biri) yük yapınca devamında DMON yazıp
Aynı şeyi S$ dedik. Eğer SET tuşu
18/01'i hafızaya alıp verdiğinizde, ekrana çıkacak dökümünün sağ tarafında dosya isimlerini göreceksiniz. Şimdi bu byte'ları da birer birer inceleyelim...
0 ve 1 numaralı byte'lar, her zaman olduğu gibi, bir sonraki blokun adresini gösteriyor. 8'den fazla kayıtlı dosyanız varsa, burası 18/04'ü (12 04) gösterir. Ondan sonra gelen byte'lar 30'arlık gruplar halinde disket üzerindeki dosyalar ile ilgili bilgileri içerir. Yani ilk 30 byte'lık grup (2-31,$02-$1F numaralı byte'lar) diskete ilk SAVE edilen dosya ile, bir sonraki grup ise ikinci dosya ile ilgili bilgileri saklar ve bu böylece disketeki tüm dosyalara ait bilgiler direcory'e yazılıncaya adar devam eder. Acaba bunun mıştır ve kull, na 8 tane 30'lı tory'da de 18/0 gilerini saklama mışsa, 8*18 — 144 dosya ile ilgili bilgi saklayabiliriz demektir. İşte sınır bu... İsterseniz 18/01'in yapısını tablo olarak görelim:
BYTE ANLAMI 0-1 Sonraki blok 2-31 1. dosya 32-33 Kullanılmaz 34-63 2. dosya 64-65 Kullanılmaz 66-95 3. dosya 96-97 Kullanılmaz 98-127 4. dosya 128-129 Kullanılmaz 130-159 5. dosya 160-161 Kullanılmaz 162-191 6. dosya 192-193 Kullanılmaz