Commodore sayı 2, sayfa 20

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 20

Toplam blok uzunluğunu ise 28. ve

29. byte'ların içeriğinden anlayabiliriz. Diyelim ki buralarda 34 ve 1 varsa, © dosya 1*256434-290 blok uzunluğunda demektir. Şu ana kadar disket üzerine yerleşen bilgilerin Track, Sector ve Byte düzeyindeki organizasyonunu gördük. Ancak bunları kullanmanın bir yolu olmasaydı, bunca bilgi hiçbir işe yara- . Mazdı. Eğer bu bilgileri okuyup değiştirebilirsek, çeşitli kullanım alanları bulabiliriz. İşte bu özellik, DOS (DISK OPERATING SYSTEM: - Disk İşletim Sistemi) içine yerleştirilmiş bazı emirleri kullanmakla olmaktadır. Bu emirleri kullanarak istediğimiz bloku okuyup, bu blokun istediğimiz byte'ını değiştirip, tekrar geri yazabiliriz. Şimdi bu komutları ayrıntısıyla görelim.

Komut Kanalı

Disketten bir blok okunduğu zaman, bu blokta bulunan 256 byte'lık bilgi,

VC-15441 içindeki RAM'a yazılır. Bu alanı bir tür depo olarak görebiliriz. Daha sonra da bu deponun içeriğini değiştirip, tekrar disketin üzerine yazabiliriz. Bu nedenle işlemlerimize başlamadan önce, VC-1541'e böyle bir depoya ihtiyacımız olduğunu belirtmemiz gerekir. İşte disketle olan tüm bu ilişkilerimizi, komut kanalı olarak tanımlanan 15. kanaldan gönderdiğimiz komutlarla düzenliyoruz. Bu işlem için ilk önce komut kanalının açılması gerekir: OPEN 1,8,15 Daha sonra da depoyu oluşturmamız gerekir: OPEN Bu son komut, 2 numaralı kanalı (8'den sonra gelen 2) bir depoya bağlar. Artık PRİNT #2 ile yazılacak ve GET #2 ile okunacak her şey bu depodan olacaktır. Artık disketin belli bir blokunu, diyelim ki 18/00'1 okumak istiyoruz. Bunun için komut kanalından, hangi TRACK ve SECTOR numaralı bloku, hangi disk ünitesinden (VC-1541 için 0) ve hangi depoya okumamız gerektiğini bildirmemiz gerekir. Şu komut bu işlemi yapar: PRİNT 20 18 0”

Okuma işlemi anlamına gelir.

e : Depo kanalı a 1 Disk ünitesi numarası 18 TRACK numarası 0 SECTOR numarası

Artık 18/00'ın tüm 256 byte'ı depoya yerleşmiştir. GET# 2 komutu ile bu byte'ları sırayla okuyabiliriz. Bir örnek görelim:

108 OPEN 1,8,15 20 OPEN PRIİINTH1İ,"Ul 2 & 18 40 GETHE,AF,B$

SA PRİNT ASCLAS),ASC (B$)

60 2:CLÜOSE İ

Program çalıştığında, önce komut kanalını açacak, sonra da depoyu oluşturacak (2. kanala bağlı olarak).

Komut kanalına, 18/00'ı 2 numaralı depo kanalına okumak istediğimizi bildirdikten sonra, depodaki ilk iki byte'ı A$ ve B$'e yerleştirecek. En sonunda da bu byte'ları sayıya çevirerek yazacak ve açtığımız kanalları kapatacak. Sonuçta ekrana, 18 ve 0 sayıları yazılacaktır. Bunlar, 18/00'dan sonra gelen bloğun TRACK ve SECTOR numaralarıdır. Hatırlayacağınız gibi, bir bloktaki ilk iki byte, bilginin devam ettiği bir sonraki bloğu göstermekteydi. Eğer depodaki ilk değil de, örneğin 166. byte'ı okumak istersek ne yapacağız. Bunun için de komutu (Buffer pointer, depo göstergeci) kullanılır. Örneğin, PRINT #1,“B-P 2 166” ile, göstergecin iki numaralı kanala bağlı depodaki 166. byte'ı göstermesi sağlanır. Artık GET#2 ile o byte'ı okuyabiliriz. Örneğin, bir disketin 18/00'da olan ve 144. byte'ında başlayıp, maksimum 16 karakter uzunluğa sahip adını okuyup ekrana yazalım.

10 ÖPEN 1,8,15 20 ÜPEN 2,8,2,"#" 30 PRINTH1İ,"UL 2 8 186 O“

40 PRİNTHİ,"B-P 8 144" SA FOR Izi TO 16 BO THEN 88 TG PRINT TI NEKT | 80 CLOSE |

Şimdi de sıra depodaki bilgiyi disketin üzerindeki bir bloğa yazmaya geldi. Ancak bu ve bundan önceki komutları çok dikkatli kullanın. Eğer yanlış yere yanlış bir bilgi yazarsanız, disketinizin üzerindeki dosyalar kullanılmaz hale gelebilir. Okumak için kullanılan komuttaki ile değiştirdiğinizde yazma işlemi gerçekleşir. Yani, PRINT #4 1, “U2 2 0 10 12” komutu ile, 2. kanaldaki depoyu 10/12'ye geri yazmış oluruz. Bu sırada 10/12'de bulunabilecek eski bilgiler silinecektir. İsterseniz, buna örnek olarak, disketin adını nasıl değiştireceğimizi görelim.

18 OPEN 1,8,15 20 OPEN 2,8,2,"H#" 30 PRINTHİ,"U1 2 & 18 O" 40 INPUT "YENİ DİSKET IF LENCAS)<1İ6 THEN GOTÜ 58 PRINTHİ,"B-P 2 144“ TA sö PRINTHİ,"UZ2 2 18 O“ SA PRIİNTHİ,"I" 95 CLÜSE İ

Önce emir kanalını ve depoyu açıyoruz. Sonra yeni disket adını sorup, karakter sayısını CHR$(160) ile 16'ya tamamlıyoruz. Göstergeci 144. byte'a ayarlayıp yeni adı depoya yazıyoruz. Bu sırada, 70. satırdaki noktalı virgüle Diskete bu yöntemle bir şey yazarken daima kullanılmalıdır. Artık depodaki bilgi 18/00'a geri yazılabilir. En sonunda da, yeni adı okuması için emir kanalından "I" (initialize) komutunu gönderiyoruz.

Kullanışlı Bir Program

Artık tüm bu bildiklerimizi güzel bir programda kullanmanın zamanı geldi. Elinde birçok disketi olan VC-1541 sahipleri, hangi diskette ne olduğunu, hangisinde ne kadar boş yer kaldığını hatırlamakta zorluk çekerler. Hele disket sayısı 30'u geçtiğinde bu imkânsızlaşır. Artık tek çözüm, directory'i kâğıda geçirmektir. Bir yazıcıya sahip olanlar bu konuda daha şanslıdır. Ancak yine de birtakım sorunlar beklemektedir kullanıcıyı. Örneğin, her disket için şu iki satırı tekrar etmek gibi:

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