Bu sayfadaki yazılar
Sayfanın metni
Sayfa 52
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 53
Merhaba arkadaşlar... Bu bölümümüzde önce geçmiş bölümlerimizde çıkan bazı baskı hatalarını giderdikten sonra, son iki bölümdür DISK-MON ile kullandığımız Track/Sector komutlarını BASIC ile nasıl kullanacağımızı göreceğiz. Önce düzeltme- Dizimizin ilk bölümünün yeraldığı 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 sonlarında “Örneğin bu durumda...” diye başlayan cümle bir örnekten bahsediyor 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ı lazım. 60 numaralı satırda da parantezin kapatılmasını unutmamak gerek. 19. sayı, hata yönünden biraz zengin. Aynı sayfanın sağ kolonunun başlarında bir komut listesi var. PRINT, INPUT ve GET komutlarının arkası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 hata 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 yanısıra iki nokta üstüste de bulunmalıydı. Yani doğrusu ...A$;:CLOSE SE.... Son olarak da, aynı bölümün sonlarında SCRATCH ile ilgili örneklerden sonra gelen paragrafta diye geçen örnek, “S:B? — P” olmalıydı. Gelelim 20. sayıya... Daha ilk RE-NAME örneğinde RENAME ve arasında iki nokta üstüste unutulmuş. Hemen yan kolondaki örneklerden ikincisinde ise DENİ - DEN- F yerine DENIİ FF olmalıydı. COPY ile ilgili örneklerde ikinci ve dördüncüde COPY - DENİ,FF yerine COPY:A2 - DENI, FF ve C:A2—DENİI,FF gelmeliydi. 21. sayıda ise pek fazla hata yok. Ama olan da çok önemli. 54. sayfanin 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 olmalıydı. Yazının sonlarına doğru gelen .M 00 OF komutunda F'nin solundaki karakter ise sıfır rakamı, O harfi değil...
Gelelim asıl konumuza. Disket üzerindeki program ve verileri OPEN, PRINT , INPUT , GET , SAVE, LOAD gibi komutlarla 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 imkâ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 gerekiyordu. Bir oturuşta disketin üzerinde işlemler yapmak için ideal bir yardımcı olan DISKMON'u ne yazık ki BA-SIC programlarının içinden kullanamıyoruz. Örneğin bir BASIC programında disketteki bir bloku okumak istersek veya disketin üzerinde yerini kesinlikle bildiğimiz bir byte'ı değiştirmeye kalkışırsak ne olacak? Konumuz bunları olası kılacak yöntemleri öğ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 bloka yazacağımız bilgiler önce bu tampon bölgede toplanır ve tamamlanınca 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ı numaralandı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 numaralı buffer, o anda 1541'in içindeki disketin BAM 'inin okunup saklandığı bölge olduğu için bizim kullanımımıza açık değildir. Üç numaralı buffer da, eğer o sırada OPEN ile açılmış bir dosya varsa, 1541 tarafından kullanılıyor demektir.
Bu buffer'lardan birine, birazdan anlatmaya başlayacağımız komuuları kullanmak için, ihtiyacımız var. 1541'in o anda boş olan buffer'lardan birini bize ayırması için şu komutu göndermeliyiz: OPEN #4”
Böylelikle 8 numaralı aletten (1541'den) 1 numaralı dosya olarak 2 numaralı kanala ait bir buffer istemiş 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,“*#” 20 GET 1,A$ 30 PRINT ASC(A$+CHR$(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ı olmayabilir. Aslında istediğimiz numaralı buffer'ı da çağırabiliriz:
OPEN
Ancak bu durumda o buffer'ın daha önceden başka bir kanala gönderilmiş olması nedeniyle bize verilememesi sorunu ortaya çıkabilir. Bu nedenle, eğer böyle bir komut kullanırsanız, hemen arkasından hata kanalını okuyun. Cevap 70,NO CHANNEL,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 buffer'ı kendinize ayırabilirsiniz ve bunların numaralandırılması 3-0 arasında olacaktır. Aşağıdaki program ile bunu deneyebilirsiniz:
10 OPEN 1,8,15,“1” 15 K-2 20 OPEN 2,8,2,“#” 25 GOSUB 100 30 OPEN ” 35 GOSUB 100 40 OPEN 45 GOSUB 100 50 OPEN 55 GOSUB 100 60 OPEN 6,8,6, 4” 65 GOSUB 100 70 END 100 GET #K,A$ 110 PRİNT ASC(A$ 4 CHRS(0)) 115 120 GET #1,A$ 130 PRINT A$; 140 ITF ST < >64 THEN 120 150 RETURN
Sırasıyla 3,2,1,0 buffer'larının geldiğini ama en sonda da 70,NO CHANNEL,00,00 oluştuğunu göreceksiniz. Bu buffer'ların içerikleri GET # veya INPUT # ile okunabilir,