1 Nisan 1986 Tarihli Commodore Gazetesi Sayfa 20

1 Nisan 1986 tarihli Commodore Gazetesi Sayfa 20
Metin içeriği (otomatik olarak oluşturulmuştur)

fızası yetmezse veya İşlem bitmeden elektrik kesilirse. Bu tipteki dosyalar kullanılamaz ve LOAD”$”,8 yaptıktan sonra yanlarında bir **" işareti görü- nür. Eğer soldan ikinci bit 1 ise (diğer bir deyişle, yukarıdaki sayılara 64 top- larsanız; örn. 128 -4 64 — 192 ise), o dos- ya silinmeye karşı korunmuş demek- tir. Bunu da listedeki X işareti ile an- layabilirsiniz. Toplam blok uzunluğunu ise 28. ve 29. byte'ların içeriğinden anlayabili- riz. Diyelim ki buralarda 34 ve 1 var- sa, o 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 ol- masaydı, bunca bilgi hiçbir İişe yara- . Mazdı. Eğer bu bilgileri okuyup değiş- tirebilirsek, çeşitli kullanım alanları bu- labiliriz. İşte bu özellik, DOS (DISK OPERATING SYSTEM: - Disk İşletim Sistemi) içine yer- leştirilmiş bazı emirleri kullanmakla - mümkün olmaktadır. Bu emirleri kulla- narak istediğimiz bloku okuyup, bu blokun istediğimiz byte'ını değiştirip, tekrar geri yazabiliriz. Şimdi bu komut- ları ayrıntısıyla görelim. Komut Kanalı Disketten bir blok okunduğu zaman, bu blokta bulunan 256 byte'lık bilgi, VC-1541 içindeki RAM'a yazılır. Bu ala- nı bir tür depo olarak görebiliriz. Da- ha sonra da bu deponun içeriğini de- ğiştirip, tekrar disketin üzerine yazabi- liriz. Bu nedenle işlemlerimize başla- madan önce, VC-41541'e böyle bir de- poya ihtiyacımız olduğunu belirtme- miz gerekir. İşte disketle olan tüm bu ilişkilerimizi, komut kanalı olarak ta- nımlanan 15. kanaldan gönderdiği- miz komutlarla düzenliyoruz. Bu işlem için ilk önce komut kanalının açılma- sı gerekir: OPEN 1,8,15 Daha sonra da depoyu oluşturma- mız gerekir: OPEN 2,8,2,“# *” Bu son komut, 2 numaralı kanalı (8'den sonra gelen 2) bir depoya bağlar. Artık PRINT #2 ile yazılacak ve GET #2 ile okunacak her şey bu de- podan olacaktır. Artık disketin belli bir blokunu, diye- lim ki 18/00'1 okumak istiyoruz. Bunun için komut kanclından, hangi TRACK ve SECTOR numaralı bloku, hangi disk ünitesinden (VC-1541 için 0) ve han- gi depoya okumamız gerektiğini bil- dirmemiz gerekir. Şu komut bu işlemi yapar: PRINT 3$41.“U1 2 0 18 O” 'U1' £ Okuma işlemi anlamına gelir. g : Depo kanalı a 1 Disk ünitesi numarası 18 : TRACK numarası B : SECTÜR numarası Artık 18/00'ın tüm 256 byte'ı depo- ya yerleşmiştir. GET# 2 komutu ile bu byte'ları sırayla okuyabiliriz. Bir örnek görelim: 108 ÖOPEN 1,8,15 20 OPEN 2,8,2,"#" 3A PRİNTHİ,"U1 2 & 18 all 40 GETHE,AS,B$ 5A PRIİNT ASCLAS),ASC (B$) 6O CLÜSE 2:CLOSE 1 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'1 2 numaralı * depo kanalına okumak istediğimizi bildirdikten sonra, depodaki ilk iki byte'i A$ ve BS$'e yerleştirecek. En so- nunda da bu byfte'ları sayıya çevire- rek yazacak ve açtığımız kanalları ka- patacak. Sonuçta ekrana, 18 ve 1 sa- yıları yazılacaktır. Bunlar, 18/00'dan sonra gelen blokun TRACK ve SECTOR numaralarıdır. Hatırlayacağınız gibi, bir bloktaki ilk iki byte, bilginin devam ettiği bir sonraki bloku göstermektey- ll Eğer depodaki ilk byte'i değil de, örneğin 166. byte'ı okumak istersek ne yapacağız. Bunun için de “B-P” komu- tu (Buffer pointer, -depo göstergeci) kullanılır. Örneğin, PRINT #1,”B-P 2 166" ile, göstergecin iki numaralı ka- nala bağlı depodaki 166. byte'ı gös- termesi sağlanır. Artık GET442 ile o byte'i okuyabiliriz. Örneğin, bir diske- tin 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,13 20 ÖÜPEN 2,8,2,"H#" 3O PRINTH1,"U1 2 & 8 0" 40 PRİNTH1İ,"B-P 8 144" SA FOR I-i TÜ 16 BA GETH2,ASIIF Ad- CHR$SC160) THEN 88 TG PRINT A$: 73 NEKT | 8Ö0 CLOSE 2:CLÜSE 1i 6 Şimdi de sıra depodaki bilgiyi dis- ketin üzerindeki bir bloka yazmaya geldi. Ancak bu ve bundan önceki komutları çok dikkatli kullanın. Eğer yanlış yere yanlış bir bilgi yazarsanız, disketinizin üzerindeki dosyalar kulla- nılmaz hale gelebilir. Okumak için kullanılan komuttaki “U4”İ, “UZ2” ile değiştirdiğinizde yaz- ma işlemi gerçekleşir. Yani, PRİNT # 1, vU2 20 10 12” komutuile, 2. kanaldaki depoyu 10/12'ye geri yazmış oluruz. Bu sırada 10/12'ide bulunabilecek es- ki bilgiler silinecektir. İsterseniz, buna örnek olarak, diske- tin adını nasıl değiştireceğimizi göre- lim. 108 OPEN 1,8,15 20 ÜPEN 2,8,2,"H#" 3A PRINT#İ,"U1 2 & 1838" 40 INPUT "YENİ DİSKET ADI"AF IF LENCAS)<16 THEN ASZASLCKARSEC1SA) 1 GÜT0 Sü BAA PRİNTAH1,"B-P 3 144" 7O PRİNTH2,ASi; 8 PRINTHİ,"U2 2 € 18 (" SA PRINTH#İ,"I” 95 CLÜOSE 8:CLÜOSE İi S ö Ö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 dikkatl!! Diskete bu yöntemle'bir şey yazarken daima kullanılmalıdır. Artık depodaki bilgi 18/00'a geri yazılabi- lir. En sonunda da, VC-1541'in yeni adı okuması için emir kanalından “|" (initialize) komutunu gönderiyoruz. Kullanışlı Bir Program Artık tüm bu bildiklerimizi güzel bir programda kullanmanın zamanı gel- di. 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 im- kâ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. An- cak yine de birtakım sorunlar bekle- mektedir kullanıcıyı. Örneğin, her dis- ket için şu iki satırı tekrar etmek gibi:

Bu sayıdan diğer sayfalar: