Bu sayfadaki yazılar
Sayfanın metni
Sayfa 26
Disketteki Programların Silinmeye Karşı Korunması:
Mecmuamızın 11. sayısındaki "DİSKET-KURTARAN-SB" isimli programımı okumuş olanlar, SCRATCH komutu ile disketten yanlışlıkla silinen programların nasıl kurtarılabildiğini görmüşlerdir.
Peki, programları silinmeye karşı korumanın bir yolu yok mudur?
Gerçi silinen bir programı artık nasıl kurtarıp ortaya çıkarabileceğimizi biliyoruz, fakat işi baştan sağlam tutup istediğimiz programları silinemez hale getirmek daha yerinde olacaktır. İşte aşağıdaki programımız bu işi başarı ile yapmaktadır.
TRACK: 18/SECTOR: 1
Gerek silinmiş bir programın nasıl kurtarıldığını, gerekse kilitleme işleminin nasıl yapıldığını anlamak için disketteki BANT: 18/SEKTÖR: 1'i yakından incelememiz gerekmektedir.
Bilindiği gibi, 1541 Disk Sürücüsü ile 4040 tipinde formatlanmış bir diskette 35 Bant (Track) bulunmaktadır.
Bu Bantlardan 18 no.lu olanı özellikle çok önemlidir. Bu bantta meydana gelecek bir hasar disketin bir kısmının veya tamamının kullanılamaz hale gelmesine neden olabilir.
Diskette bulunan programlarla ilgili bütün veriler (bu programların adları, disket üzerinde nerede başlayıp nerede bittikleri, hangi tip oldukları, silinmiş veya kilitli olup olmadıkları gibi) bu bantta kayıtlıdır.
18. Bantta toplam 19 adet sektör vardır ve her bir sektör 256 bayttan oluşur. İlk, yani 0 no.lu sektörde BAM, Disket Adı, ID no.su, format tipi gibi temel veriler vardır.
Geri kalan 18 adet sektörde ise disketteki programlarla ilgili veriler vardır, şöyle ki:
Bayt | No:Bulunan Veriler 0 ve 1 | Bir sonraki sektörün Blok ve Sektör no.su, 2 ila 31 | Directory'deki 1. dosyaya ait veriler, 34 ila 63 | Directory'deki 2. dosyaya ait veriler, 66 ila 95 | Directory'deki 3. dosyaya ait veriler, ... 226 ila 255 | Directory'deki 8. dosyaya ait veriler.
Geri kalan sektörlerde de aynı sayıda programa ait veriler kayıtlı olduğundan toplam 18 X 8 = 144 eder, yani bir diskete en fazla 144 adet dosya kaydedilebilir, tabii bunların toplam uzunluğu da en fazla 664 blok olabilir.
Şimdi de örnek olarak 2 ila 31 no.lu baytlar arasında yer alan (Directory'deki 1. programa ait) verilere göz atalım:
Bayt | No:Bulunan Veriler 0 | Dosya tipi 1 ve 2 | Bu dosyaya ait ilk veri (data) blokunun Bant ve Sektör no.su 3 ila 18 | Dosya adı 19 ila 21 | Yalnız Relatif dosyaya ait bazı veriler 22 ila 25 | (kullanılmaz)
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 27
26 ve 27 | OPEN @ için, değiştirilen dosyanın Bant ve Sektör no.su. 28 ve 29 | Dosyanın blok adedi, Alt Bayt (LB) ve Üst Bayt (HB) olarak.
Diğer dosyalara ait veriler de aynı düzen içinde sıralandığından 2 ila 31 no.lu baytlar 0 ila 29 olarak yazılmıştır.
Şimdi gelelim işin püf noktasına!
Silinmiş bir programın kurtarılması da, bir programın silinmeye karşı kilitlenmesi de, hep dosya tipini belirleyen baytın değiştirilmesi ile sağlanmaktadır. Bant: 18 / Sektör: 1'de bulunabilecek 8 dosya için bu baytlar: 2, 34, 66, 96, 130, 162, 194 ve 226 no.lu baytlardır.
Bu baytların normal değerleri ile dosya silindiği veya kilitlendiği zamanki değerleri şöyledir:
Dosya tipi | Normal değer SEQ (Sıralısal) | 129 PRG (Program) | 130 USR (Kullanıcı) | 131 REL (Relatif) | 132
Silinince | Kilitlenince 128 | 193 128 | 194 128 | 195 128 | 196
Diyelim ki, yeni formatlanmış bir diskete bir Program Dosyası SAVE ettiniz. Bant: 18/ Sektör: 1'de bu dosyaya ait veriler 2 ila 31 no.lu baytlar arasında yer alacaktır. PRG tipi dosya olduğuna göre 2 no.lu baytın değeri 130'dur.
Şimdi, kanal açıp SCRATCH komutu ile bu dosyayı silersek bu baytın değeri 128'e döner ve BAM'da bu dosyaya ait blokların yerleri boş olarak görünmeye başlar, yani gerçekte dosya silinmiş olmaz. DİSKET-KURTARANSB, bu baytın değerini 130'a çevirir, BAM'ı da düzeltir. Böylece, silinmiş bir dosya da kurtarılmış olur.
PROGRAM-KİLİDİ-SB de benzer şekilde çalışmaktadır. 2 no.lu baytın normalde 130 olan değerini 194'e çevirirsek bu dosya kilitlenmiş olur ve artık SCRATCH komutu ile silinemez hale gelir.
Bir dosyanın kilitlenmesinin veya silinmiş bir dosyanın kurtarılmasının prensip yönünden çok basit olduğu görülüyor. Ancak pratikte kurtarmak veya kilitlemek istediğiniz programın dosya tipini gösteren baytı bulup değiştirmeniz o kadar kolay değildir. Eğer elinizde "Disk Doctor" veya "Disk Monitor" gibi programlar varsa anlattığımız işlemleri bunlar yardımı ile kolayca yapabilirsiniz. Ancak bu tür programlar disketlerin Bant ve Sektör düzenlerinin, ASCII kodlarının ve Hekzadesimal sistemin iyi bilinmesini gerektirir. Halbuki, DİSKET-KURTARAN-SB ve PROGRAM-KİLİDİ-SB'yi kullanmak için bunların hiçbirini bilmenize gerek yoktur. Yükleyip RUN edin yeter.
Nasıl Çalışıyor?
Programı RUN ettiğinizde karşınıza önce bir Menü çıkacaktır.
F1 MENÜ F3 PROGRAM KİLİTLEME (LOCK) F5 KİLİT AÇMA (UNLOCK) F7 DİRECTORY ← SON
Buna göre, F1 Menüye geri dönmenizi, F7 Directory'yi görmenizi sağlamaktadır. ←ile ise programa son verip BASIC'e dönebilirsiniz. İçinde kilitlemek istediğiniz programların bulunduğu disketi yerleştirip F3'e basarsanız size kilitleyeceğiniz programın adını soracaktır. Hatırlayamazsanız F7'ye basarak Directory'i görebilir veya F1'e basarsanız vazgeçip Menü'ye geri dönebilirsiniz. Programın adını doğru ve tam olarak yazıp RETURN'e basarsanız program kilitlenmiş olur. F7'ye basıp Directory'i listelerseniz bu programın adının hizasında en sağda bir < işareti göreceksiniz. Bu işaret programın kilitlenmiş olduğunu gösteren standart bir semboldür.
Eğer programın silinmeye karşı kilitlendiğine inanmıyorsanız, F1 ile Menü'ye geçip ← ile BASIC'e döndükten sonra (veya doğrudan doğruya bilgisayarı açıp kapadıktan sonra) bu programı silmeyi deneyelim. Programın adı da QWERTY olsun.
OPEN 15, 6, 15, "S: QWERTY" CLOSE 15 yazıp RETURN'e basalım. Normal olarak bu komut QWERTY isimli programı siler, daha doğrusu BANT: 18'de bu programın dosya tipini gösteren baytı 126 yapar. Ancak siz LOAD "S" ve LIST komutları ile Directory'i listelerseniz QWERTY isimli programın hâlâ yerinde olduğunu göreceksiniz. Çünkü artık silinmeye karşı "kilitlenmiş" durumdadır.
Şimdi biz açıklamalarımıza devam edelim. Eğer programın adını doğru yazmazsanız veya "wild card" kullanırsanız (yani programın adının ilk birkaç harfini yazıp sonuna koyarsanız) programı kilitleyemezsiniz. Ayrıca disketin yanındaki çentiğin üzeri bantla kapatılmışsa kilitleme işlemi gerçekleşmez ve bir uyarı ibaresi çıkar. Keza kilitlenmiş bir programı tekrar kilitlemek isterseniz "ZATEN KİLİT ALTINDA" ibaresi çıkacaktır.
Kilitli bir programı silmek isterseniz önce kilidi açmanız gerekir.
Bunun için Menü çıktığında F5'e basınız ve kilidini açmak istediğiniz programın adını yazınız. Daha sonra F7'ye basarak Directory'e baktığınızda programın adının hizasında en sağda bulunan işaretinin ortadan kalktığını göreceksiniz, artık bu programı isterseniz silebilirsiniz. Yanlışlıkla silerseniz ne mi olur, DİSKET-KURTARAN-SB programınızı kurtarır.
Bu program (daha doğrusu hiçbir program) yardımı ile disketinizdeki değerli programları FORMATLAMA yolu ile silinmeye karşı koruyamazsınız. Çünkü ID no.su. belirlenerek yapılan formatlama disketin üzerinde ne var ne yoksa siler ve geriye tertemiz bir disket kalır. Bu yüzden, kullanılmış bir disketi formatlamadan önce üzerinde değerli bir program olup olmadığını kontrol etmekte büyük fayda vardır.
Diğer bir tehlike kaynağı da, bir disketin tamamının kopyesini çıkaran BACKUP programlarıdır. Bunlar arka arkaya dolu disket ("master" veya "source" disket) ile boş disket ("destination" veya "target" disket) birkaç defa disk sürücüye takıp çıkarmakla dolu disketin tam bir kopyesini boş diskete aktarır. İşte bu sırada yapacağınız bir sıra hatası dolu disketinizin kısmen veya tamamen silinmesine yol açabilir. Çaresi, dolu disketin yanındaki çentiği önceden bantla kapatmaktır.
Program İle İlgili Açıklamalar
Şimdi biraz da BASIC ile yazılmış programımızın nasıl çalıştığını inceleyelim:
Satır 116: Program ilk iş olarak GOSUB 290 ile, 290 ila 390 no.lu satırlar arasındaki iki makine kodu bölümünü okumaktadır. Bunları sona koymanın amacı, buradaki DATA rakamlarını bellekteki yerlerine POKE etmeye yalnız bir kere ihtiyaç oluşudur.
Satır 290-294: Bellekte 828 ila 1006 arasına 304 ila 346 no.lu satırlardaki DATA'ları yerleştiren bu bölüm, sizin kilitlemek veya kilidini açmak üzere adını yazacağınız dosyanın BANT: 18'de nerede olduğunu bulmakta, dosya tipini belirten baytın yerini P=PEEK (255) ile bulmanızı sağlamakta ve dosyanın durumunu A=PEEK (252) ile görmenizi sağlamaktadır. Bu işleri yapmak için 160 ve 192 no.lu satırlardaki SYS 828 komutu verilmektedir.
Satır 296-298: Bu bölüm ise bellekte 50000 ila 50124 no.lu adreslere, bellekte bulunan programı silmeden Directory okumayı sağlayan ve 360 ila 390 no.lu satırlarda görülen DATA'lardan oluşan makine kodunu POKE etmektedir. Ne zaman F7'ye basılsa SYS 50000 komutu ile ekrana Directory gelmektedir.