DİSK ADI VE ID'Sİ
İkinci sayımızı alan ve özellikle disket konusuyla ilgili okurlarımız, disketin TRACK ve SECTOR'leri ile ilgili yayınladığımız yazıyı hatırlayacaklardır. O yazımızda, disket üstündeki bilgileri nasıl okuyup, nasıl değiştirebildiğimiz hakkında da bazı açıklamalar yapmıştık. Ve örnek bir program vermiştik. Bu program disket DIRECTORY'lerini okuyup düzenli bir şekilde kâğıda geçiriyordu. Bu sayımızda da, hem okuyan, hem de değişiklikler yapabilen bir program geliştireceğiz. Amacımız, disketimizin adını ve ID kodunu okuyup değiştirmek ve bu arada disketimizdeki dosyalara zarar vermemek. —
Tuna ERTEMALP birkaç noktayı hatırlayalım... Disketimizin adı, TRACK 18 ve SECTOR 00 ile adreslenen blok üzerinde bulunmaktadır. Bu blokun 144. ve 161. byte'ları arasında kalan 16 byte'lık bölümde bulunur. Eğer isim 16 karakterden kısa ise, SHIFT-SPACE karşılığı olan 160 kodu ile 16 karaktere tamamlanır. Aynı TRACK ve SECTOR üzerinde, 162. ve 163. byte'larda da iki karakterlik ID kodu yer alır. Disketin üzerindeki herhangi bir yeri okuyup, değiştirip, tekrar geri yazmak için de bazı komutlar olduğunu görmüştük. Önce diskete bir depo kanalı açmasını söylüyor (OPEN 2,8,2,“#”), sonra da emir kanalından gönderdiğimiz disk sürücüsü komutları ile istediğimiz bloku bu depoya okuyup (PRINT#15,“B-P”;2;0), istediğimiz byte'ını değiştirip (PRINT#15,“B-P”;2;BYTE), o bloku tekrar geri yazıyorduk (PRINT#15,“U2”;2;0;TRACK;SECTOR). Bu kısa hatırlatmadan sonra programımıza gelelim. Oldukça kısa olan programımızda izleyeceğimiz yöntem, önce disketin isim ve ID'sini okuyup bunu ekranda göstermek, eğer değişiklik gerekiyorsa yeni isim ve ID almak, bunu disket üzerine yazmak ve kontrol amacıyla yeniden okuyup ekrana basmak olacak. Şimdi satır satır açıklamaları yapalım: SATIR 10: Önce 100. satırdan başlayan, disket üzerinden isim ve ID'yi okuyacak ve ekrana basacak olan altprogram çağırılıyor. Sonra da 235 numaralı satırdan itibaren program çalışmaya devam ediyor. SATIR 400: VC-1541'in emir kanalı
© PERİYODİK
-16
© SÜREKLİ FORM açılıyor ve yeni komutu gönderiliyor. Böylece VC-1541 içindeki diskete ait bazı önemli bilgileri kendi içine yerleştiriyor. Buna, VC-1541'in içindeki disketi 'farketmesi' de diyebiliriz. Daha sonra ikinci kanala bağlı depo açılıyor ve TRACK 18/SECTOR 00 depoya okunuyor. Son olarak da depo göstergeci, 144. byte'ın üzerine gelecek şekilde ayarlanıyor. SATIR 160-200: Önce DN$'in içi temizleniyor ve depo göstergecinin gösterdiği 144. byte'dan itibaren 16 byte okunarak DN$'in içine yerleştiriliyor. Artık disketimizin adı, DN$'in içinde hazır. SATIR 210: Bu sefer depo göstergecini 162. byte üzerine yerleştiriyoruz. Daha sonra da, önceden içini temizlediğimiz ID$'in içine iki karakterlik disket ID'sini okuyoruz. SATIR 220: Açtığımız emir ve depo kanallarını kapatıyoruz. Bunu VC-1541'in kırmızı ışığının sönmesinden de anlayabilirsiniz. SATIR 230: Artık okuduğumuz isim ve ID'yi ekrana yazıp, altprogramın çağrıldığı yere geri dönebiliriz. SATIR 235-245: DN$'i, disketimizin yeni adını saklamak için kullanacağız. Ancak eğer disketimizin adını değiştirmek istemezsek ne olacak? İşte bunun için DN$'in içine önceden sola bakan ok karakterini yüklüyoruz. Bir sonraki INPUT komutunda herhangi bir isim verilmeden doğrudan doğruya RETURN tuşuna basılırsa, program 245 numaralı satırda bitecektir. Bu arada SP$'in içinde 16 karakter uzunluğunda ve 160 numaralı karakter kodundan oluşan bir dizi hazırlanıyor. INPUT komutunda birbirinden virgül ile ayrılmış iki isim vermelisiniz. Birincisi en fazla 16 karakter uzunluğundaki disket ismi olacak. İkincisi ise iki karakterlik disket ID'si... (Örnek: deneme,di) SATIR 250: DN$, 16 karaktere tamamlanırken, ID$ de iki karakter uzunluğa getiriliyor. SATIR 260-290: Yeniden 15 numaralı emir kanalı açılarak “I” komutu gönderiliyor. Komutun “I0” olmasının nedeni, VC-1541'in normalde 0 numaralı sürücü olmasından kaynaklanıyor. Daha sonra depo kanalı açılarak, TRACK 18/SECTOR 00 depoya okunuyor. Depo göstergeci 144 numaralı byte'a ayarlanıp DN$ depoya yazılıyor. Daha sonra depo göstergeci 162 numaralı byte üzerine getirilip ID$ yerleştiriliyor. En sonda da depodaki değişmiş bilgi, TRACK 18/SECTOR 00'a geri yazılıp depo ve emir kanalları kapatılıyor. SATIR 300: Yeni yazılan isim ve ID tekrar okunarak ekranda gösteriliyor ve böylece bir kontrol imkanı sağlanıyor.
Eğer disketin üzerinde yeni bir isim yazamıyorsanız, ya disketinizin kenarındaki koruyucu bölge kapalıdır ya da disketiniz üretici firma tarafından yazılmaya karşı korunmuştur. SATIR 305-310: Kullanıcıya seçim hakkı tanınıyor. Eğer sola bakan ok tuşuna basılırsa program durur. Diğer tüm tuşlarda yeniden çalışmaya başlar. Bu sırada VC-1541'in içinde yeni bir disket olması gerekir. Yoksa bilgisayar daha demin değiştirdiğiniz disket adını yeniden değiştirmenizi isteyecektir. Ancak tuşu ile programı bitirip, yeni bir disket takıp ve yeniden RUN komutunu vererek bu durumdan kurtulabilirsiniz.
PROGRAM ADI : DİSK ADI
GÜSÜUÜR 235
birkaç söz daha... Aslında sizin değiştirdiğiniz isim ve ID, sadece Directory'i yüklediğinizde gördüğünüz isim ve ID olacak. VC-1541, bir disketi formatladığınız zaman o sırada verdiğiniz ID'yi her blokun başına sadece kendisinin okuyabileceği bir şekilde yerleştirir (Block-header). Bu ID'yi değiştirmek için disketi yeniden formatlamak gerekir. Ancak bu işlemi yapmadan önce disketinizdeki dosyalarla son bir kez vedalaşsanız iyi olur...D
& ID'SI
<144>
88100 OPEN 2,8,2,"H#":FR
Izi TO 16:GET #2,A$
<151>
<2ö1>
<812>
TO 2:GET #2,X$:
CLOSE 82:CLOSE iİ5
B0230 PRİNT ADI:
*"ON$S,,"
gAaz35 ON4-”e”
<143>
00240 INPUT
TO
20245 IF THEN END
<247>
<175>
DN$E-LEFTE<CDNE*SP$,16) 3
<208>
20262 OPEN 15,8,15,"18”":0PEN
72:144
80276
20288
90285 2 O 18
80298 CLÜSE 2:CLOSE 15
00308 GÜSUB 1088
<2045>
<165>
<246>
PRİNT "<2D00LN><ERİGHT><RYSON><ESPAC
E>BIR TUSA > '*
' ILE BİTİRİN
00312 POKE 198,1:GET
>"-* THEN RUN
<205;
Seyfettin ÇANKAYA
5 Bu yazıda birçok editörün programı çalışmaz duruma getiren, böylece makine dilinde İsmail'in deyimiyle “düştü” denilen durumu yaratan KASKIRANPO ya da KAKTÜS programı veriyoruz. Bundan önceki yazılarda Basic pointer'lar ve Basic bölgesindeki belleklerle oynanarak programların kopyalanmasına ait örnekler verilmişti. O yazıları incelediyseniz bu programın farkını anlayabilirsiniz. Program BASIC INPUT BUFFER denilen ve $0200'den başlayarak $0258'e uzanan bölge dışındaki herhangi bir alanı Basic yorumlayıcıya almaz. Bunu daha açık görmek için aşağıdaki programa bakalım. 79 numaralı satırda LDA $0206 ilginç bir kullanıma sahiptir. Parametreleri $7A ve $7B satırlardaki INC $7A ve INC $7B ile değişmektedir. ($7A ve $7B, $79. satırın bellek adresleri) Aşağıdaki bölüm ise LDA $0200'den alınan karakterlerin tanınması gibi görevleri yapmaktadır.
0073 E6 TA INC
6075 DÜ BNE
0077 EB INC $7B
ga7zg AD A6 A2 LDA
BA7c C9 SA CMP #$3A
BO BCS
paso cg CMP
gös2 Fd EF BEG $0073
0484 38 SEC
0085 E9 3ü SBC
0487 38 SEC
2088 E9 DA 5BC
gasAa RTS
Eğer Basic program çalışacaksa LDA $0206 komutunun parametreleri LDA $0800 olacaktır. Bu da programı çalıştırmak için yeterlidir. Bunu görmek için aşağıdaki programa bakalım. Bu program RUN için Basic ROM'da yer alan back up text pointer rutinidir.
A68E 18 CLC
A68F A5 2B LDA $2B
63 FF ADC
85 FA STA $#YA
A695 A5 820 LDA
A6937 693 FF ADC #$FF
A6993 85 7B STA
Gü RTS
Aşağıdaki programa baktığınızda $7A değişken olmanın yanında $7B sabit programın çalışmasını engellemekte sadece keyboard'dan girilen komutlar çalışmaktadır.
0073 E&6 YA INC
9075 A3 LDA #$02
85 7B STA
Şimdi gelelim Kaskiranpo'ya: Aşağıdaki dataları belirtilen bellek aralığına giriniz ve programı kaydediniz. Ayrıca monitör programı olmayanlar için Basic program aşağıdadır. Kaskiranpo'nun kullanılması: Mod 1. Kaskiranpo'nun aktif duruma gelmesi için SYS 303 kullanın. Kaskiranpo'nun pasif olması için SYS 294 kullanın, bu durumda $7A ve $7B normal konumlarına gelir, RUN komutu çalışır. SAVE için SYS 312 “isim” komutu kullanın, bu komutla sadece basic alan diskete kaydedilir. Basic pointer'ları değiştirerek istediğiniz bölgeyi kaydedebilirsiniz. Ayrıca 202 blok veya daha uzun programları kaydedebilirsiniz. Mod 2. Bu modun özelliği aktif konumda bütün belleği $FF ile doldurmakla basic düzenlemeyle programın uzunluğunu bulmakta ve SYS 402 “program ismi” ile kaydetmektedir. Makina kodu programları için bu mod uygundur. Disk driver'ı olmayanlar önce ESRA-TURBO'yu yüklesinler, Mod 1 ile çalışsınlar, program düştüğünde SYS 32458 yapıp TURBOSAVE “isim” ile kaydetsinler.
1
2 KASKIRANPO 11 SEYFİ 13865
3 PRİNT" KASKIRANPO AKTIF SYS 303
4 KASKIRAMNPO PASİF 294
5S PRINT"A SAVE İCİN SYS
6 MOD
7 PRINT" KASKIRANPO AKTIF. SYS 38iİ
8 PRINT"MW SYS 294
9 PRINT"A SAVE İCİN SYS
18 BASIC DÜZENLEME SY5 4i6
15 FOR TO 425
28 READ
30 GÖTÜ 38
40 303": NELİ
32000
32001
32002
32003 DATA32,186,2535,234,i66,45,1564,46,1693,43,32,216,255,163,55,133,1İ,76,134
32004
320065
32806
32807
Konumuz, Türkçe kelimeleri hatta cümleleri hecelerine ayırmak, örneğin programınız aşağıdaki sonuçları verebilmeli:
BU so-ğa-nı sa-rım-sak-la-sak-da mı sak-la-sak, sa-rım-sak-la-ma-sak-da mı sak-la-sak? Siz bizim Çe-kos-lo-vak-ya-lı-laş-tı-ra-bi-le-me-dik-le-ri-miz-den mi-siniz? Tram-vay ve tro-ley-büs ar-tık ta-ri-he ka-rış-tı.
Dikkat edeceğiniz noktalardan biri, programın sadece kelimeleri işleme tabi tutması; yani noktalama işaretlerini ve rakamları olduğu gibi bırakması. Ayrıca vereceğiniz cümle içinde, büyük ve küçük harfler
Sevgili okurlarımız,
Futboldan bıkan okurlarımız için bu sayımızda bambaşka bir yarışma konusu sunuyoruz. Hem bilgisayar hem de Türkçe bilginizi kullanmanız gerekecek.
olabilmeli. Örneğin Tramvay, TrAmvay veya TRAMvay arasında program açısından fark olmamalı. Programın sonuçlarını ekrana veya printer'e yazabilmesi, bunun seçimini kullanıcıya bırakması, istendiğinde bir önceki cümleyi INPUT yapmaya gerek duymadan tekrar hecelerine ayırabilmesi ve bunun gibi konforlara sahip olması size puan kazandıracaktır. Bir diğer konu da, INPUT yaptığınız cümlenin içinde virgül veya iki nokta üstüste karakterlerinin olmasının 2 EXTRA IGNORED hatasına yol açmaması. Artık buna bir çözüm bulabilmenizi bekliyoruz. Son olarak, Türkçe hece yapısı hakkında birkaç söz söyleyelim.
Türkçe'de yedi tür hece vardır:
sesli (A-rı) sesli-sessiz (AB-la) sessiz-sesli (BA-lık)
sessiz-sesli-sessiz (BARdak) SESSİZ-sesSİZ-sesli-sessiz (TRAM-vay) sessiz-sessiz-sesli (TROley-büs)
(FONK-si-yon)
Artık, verilen cümle içinde bu kalıpları bulmak ve doğru değerlendirmek size kalıyor. Normal C64'ü olan okuyucularımız U harflerini sesli harf olarak kabul etmek zorunda. Tabii Türkçe klavye C64'ü olanlar tüm sesli harfleri kullanabilirler.
Yarışma Sonuçları
1. sayımızdaki yarışmanın sorusunu gönderen okuyucularımız arasında çekilen kurada oyun kaseti kazananlar:
Bekir Kıraç Kaan Ketenci Ruşen Topallı Hilmi Göktürk Murat Beşer Ahmet Fevzi Ateş Armağan Seçkin Osman Keçeci Yakup Ergil Hakan Kantaş
.
1. sayımızdaki yarışmanın 2. sorusunu ÇÖZÜP gönderenler arasında çekilen kurada disket paketi ödülünü kazananlar: Oral Draman Bülent Yücel Alp Kaan Akal Selçuk Birol & Selim Derman Emin Gün Sirer O. Selahattin Bektaş Burak Kiper Ferit Fındık
Hakan Aydın Taner Kerman
2. sayımızdaki yarışma sorusunun doğru cevabını göndererek Magic Voice kazanan okurlarımız şunlar: Ayhan Kay Hasan Ateş Mete Kesen Noyan Kınayman Mustafa Akalp
Tüm başarılı ve şanslı okurlarımızın armağanları adreslerine çıkacaktır.
EĞİN | hin | den iş | En azından kahvelerde ya da cafelerde sosyal ilişkilerini geliştirirken arkadaşları, Cem giderek daha fazla uyumsuz bir kişiliğe bürünüyordu. Uyumsuz bir günün akşamıydı.
BUNU GERİ GÖTÜRECEKSİN / *
Çevresindekiler için, alışılagelen bir öge başkalarıyla ilişki neredeyse kayboluyordu onun yaşamında. Bilgisayarların suçluluğu ise çoktan benimsenmişti bu konuda. BAHADIR LER Belki ilk kez bir şeye uyum sağlıyordu oysa...
“İDA SANKİ BİZİ İZLİYOR..”