Merhaba arkadaşlar... Bu bölümü- müzde önce geçmiş bölümlerimizde çıkan bazı baskı hatalarını giderdik- ten sonra, son iki bölümdür DISK- MON ile kullandığımız Track/Sector komutlarını BASIC ile nasıl kullana- cağımızı göreceğiz. Önce düzeltme- İT u Dizimizin ilk bölümünün yeraldı- ği 17. sayının 47. sayfasında en son çizim olan 1541'in Track Düzeni'ni dikkate almayın. Bir sonraki sayıda doğru çizim basıldı. 18. sayı temiz. Gelelim 19. sayı- ya... 47. sayfada orta kolonun son- larında *Örneğin bu durumda...”” di- ye başlayan cümle bir örnekten bah- sediyor ama örnek ortalıkta yok. Bu örnek LOAD“$:B? —S”',8 olacaktı. Aynı sayıda 48. sayfadaki programın 130. satırında SYS 62957 olması la- zım. 60 numaralı satırda da parante- zin kapatılmasını unutmamak gerek. 19. sayı, hata yönünden biraz zengin. Aynı sayfanın sağ kolonunun başla- rında bir komut listesi var. PRINT, INPUT ve GET komutlarının arka- sında SHIFT-3 ile çıkan diyez (#) işaretinin olması gerekiyordu. Aynı şey, 49. sayfadaki üçüncü paragrafın ilk satırları için de geçerli. Gene 50. sayfada 3. paragrafta sözü edilen ha- ta mesajları tablosunun bir sonraki sayıda çıktığını biliyor olmalısınız. Bu paragrafın biraz aşağısındaki dört satırlık program parçasında A$ ve CLOSE arasında noktalı virgülün ya- nısıra iki nokta üstüste de bulunma- lıydı. Yani doğrusu ...A$;:CLOSE SE.... Son olarak da, aynı bölümün sonlarında SCRATCH ile ilgili ör- neklerden sonra gelen paragrafta *“5i diye geçen örnek, “0S: B" —-P” olmalıydı. Gelelim 20. sayıya... Daha ilk RE- NAME örneğinde RENAME ve DENEME ? arasında iki nokta üstüs- te unutulmuş. Hemen yan kolonda- ki örneklerden ikincisinde ise DENİ - DEN- F yerine DENİ - FF olmalıydı. COPY ile ilgili örnekler- de ikinci ve dördüncüde COPY - DENI,FF yerine COPY:A2— DENI, FF ve C:A2—- DENİ,FF gelmeliydi. 21. sayıda ise pek fazla hata yok. Ama olan da çok önemli. 54. sayfa- nın başlarında disket komutlarını DISKMON'da kullanabilmek için başlarına O harfi eklemek gerektiği yazılıyor. Bu © harfi değil, P ve * tuş- larının arasındaki O karakteri olma- lıydı. Yazının sonlarına doğru gelen .M 00 OF komutunda F'nin solunda- ki karakter ise sıfır rakamı, O harfi değil... 54 Gelelim asıl konumuza. Disket üzerindeki program ve verileri OPEN, PRINT , IİNPUTİ , GET , SAVE, LOAD gibi komut- larla kullanırken disketin blok yapı- sı ile uğraşmamız gerekmiyordu. DOS, bu işi bizim için hallediyordu. Ancak, DOS'un bu yolu kapatmadı- ğını ve bloklara direkt müdahale im- kânını da verdiğini geçen iki bölümü- müzde gördünüz. Ancak bunların kullanımı için DISKMON gerekiyor- du. Bir oturuşta disketin üzerinde iş- lemler yapmak için ideal bir yardım- cı olan DISKMON'u ne yazık ki BA- SIC programlarının içinden kullana- mıyoruz. Örneğin bir BASIC progra- mında disketteki bir bloku okumak istersek veya disketin üzerinde yeri- ni kesinlikle bildiğimiz bir byte'ı de- ğiştirmeye kalkışırsak ne olacak? Ko- numuz bunları olası kılacak yöntem- leri öğrenmek. Disketteki bir bloka direkt girmek için 1541'in içinde bir tampon bölge- iskete bir bloku doğrudan yazabilmek için 1541 üzerinde bir tampona ihtiyacımız var. Buna BUFFER diyoruz. ye (buffer) ihtiyacımız var. Bizim blo- ka yazacağımız bilgiler önce bu tam- pon bölgede toplanır ve tamamlanın- ca diskete yazılır. Veya disketten bir blok okunduğunda önce bu bölgeye okunur ve sonra COMMODORE 64'e gönderilir. 1541'in 0-4 arası nu- maralandırılmış 5 değişik buffer'ı vardır. Bunlar 1541'in içinde yeralan RAM'da bulunurlar ve 256'şar byte uzunluğa sahiptirler. Yani bir bloku tam olarak içerebilirler. Dört numa- ralı buffer, o anda 1541”'in içindeki disketin BAM'inin okunup saklandı- ği bölge olduğu için bizim kullanımı- mıza açık değildir. Üç numaralı buf- fer da, eğer o sırada OPEN ile açıl- mış bir dosya varsa, 1541 tarafından kullanılıyor demektir. Bu buffer'lardan birine, birazdan anlatmaya başlayacağımız komuula- rı kullanmak için, ihtiyacımız var. 1541'in o anda boş olan buffer'lar- dan birini bize ayırması için şu komu- tu göndermeliyiz: OPEN 1,8,2,* #” Böylelikle 8 numaralı aletten (1541'den) 1 numaralı dosya olarak 2 numaralı kanala ait bir buffer iste- miş olduk. Eğer aşağıdaki programı çalıştırırsanız, kaç numaralı buffer'- ın bize verildiğini de görebilirsiniz: 10 OPEN 1, 8 2 EKŞA 2 20GET 1,A 30 PRINT ASC(A$ 4 CHRS$(0)) Gördüğünüz gibi, GET işlemini OPEN'dan hemen sonra yapmamız gerekiyor. Eğer başka işlemlerden sonra böyle bir GET yaparsak, elde edeceğimiz cevap buffer numarası ol- mayabilir. Aslında istediğimiz numaralı buf- fer'ı da çağırabiliriz: OPEN 1,8,2,*443*” Ancak bu durumda o buffer'ın da- ha önceden başka bir kanala gönde- rilmiş olması nedeniyle bize verileme- mesi sorunu ortaya çıkabilir. Bu ne- denle, eğer böyle bir komut kullanır- sanız, hemen arkasından hata kana- lını okuyun. Cevap 70,NO CHAN- NEL,00,00 ise, istediğiniz buffer'ı alamamışsınız demektir. Eğer o anda kullanılan bir başka dosya yoksa, toplam dört adet buf- fer'ı kendinize ayırabilirsiniz ve bun- ların numaralandırılması 3-0 arasın- da olacaktır. Aşağıdaki program ile bunu deneyebilirsiniz: 10 ÖPEN 1,8,15, T” 15 20 OPEN 2,8,2, H ” 25 GOSUB 100 30 OPEN 3,8,3,# ” 35 GOSUB 100 40 OPEN 4,8,4, # ” 45 GOSUB 100 50 OPEN 5,8,5, #” 55 GOSUB 100 60 OPEN 6,8,6, * #” 65 GOSUB 100 70 END 100 GET #K,A 110 PRINT ASC(A$ 4 CHRS(0)) 11I5K-K*4I 120 GET #1,A$ 130 PRINT A$; 140 I1F ST < >64 THEN 120 150 RETURN Sırasıyla 3,2,1,0 buffer'larının gel- diğini ama en sonda da 70,NO CHANNEL,00,00 oluştuğunu göre- ceksiniz. Bu buffer'ların içerikleri GET £ veya IİNPUT # ile okunabilir,