Commodore sayı 76, sayfa 17

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 17

Tüm Commodore kullanıcılarına merhaba. Bildiğiniz gibi bu köşenin asıl hedefi, makine dili kullanıcılarına yeni bir şeyler öğretmek, bu arada BASIC kullanıcılarına da bir şeyler verebilmek için bu öğrettiklerimizi BASIC'in yetersiz kaldığı alanlarda kullanmalarını sağlamaktı. Bu ay dengeyi biraz bozup makine dili kullanıcıları tarafına ağırlık vermek istiyorum. Aslında benim BASIC kullanıcılarına tavsiyem, gelecek ay başlatacağım makine dili kursunu olabildiğince iyi takip etmeleri.

Çünkü bu kursu makine dili hakkında hiçbir şey bilmeyen arkadaşlara yönelik olarak hazırlayacağım. Kısaca Commodore'un yetersiz kalan BASIC'inden kurtulmak için son şansınız bu olabilir. Reklamları izlediniz. İki ay önce, BASIC'çilerin kullanması için bir küçük grafik paketi hazırladığımızı hatırlarsınız. Geçen ay makine dili kullanıcılarına bu paketin hangi formülleri ne şekilde kullandığını anlatmıştım. Bu ay (BASIC kullanıcıları kızmasınlar) gene makine dili kullanıcılarına yönelik bir konuyu ele almak istiyorum: BASIC'e komut eklemek. Bu komutlar Commodore'un izin verdiği en basit sistemle eklenecekler BASIC'inize. Yani normal bir BASIC komutu gibi, kaç harften oluşursa oluşsun bir bayt olarak gösterilmeyecekler. Artık yavaş yavaş orijinal fikirler de tükendiği için bu komutları gene iki ay önce anlattığım grafik paketçiğine ekleyeceğim. Aslında yapacağım tek iş, SYS komutlarını kendi seçeceğim bazı komutlarla değiştirmek olacak. Aslında Commodore çoğu bilgisayara göre esnek bir BASIC'e sahiptir. Hangi adreste neyin bulunduğunu bilirseniz, BASIC'e eklemeler yapmak çok kolaylaştırılmıştır. BASIC'i geliştirmenin tabii ki çok yöntemi var. Mesela hatanın verilmesinden hemen önce olaya müdahale edip, sizin istediğiniz komuttan dolayı oluşmuş bir hata varsa bu hatayı iptal edip işlemenizi yaptırabilirsiniz.

Vedat Hallaç rabilirsiniz. Ya da komutların yorumlandığı rutinin öncesine kısa bir casus rutin koyup, sizin komutunuz geldiği zaman kontrolü bilgisayardan alabilirsiniz. $0073'ü bile değiştirmeniz mümkün. Tabii ki bu hiç de iyi bir fikir sayılmaz. Kontrol ettiğiniz komutun (mesela (9XS) bir PRINT'in parametresi olup olmadığını, bir değişkene verilen değer olup olmadığını ya da benzeri binlerce şeyi kontrol etmeniz gerekeceğinden, sağ kulağınızı sol ayağınızla göstermek olur bu. Benim size önereceğim, komut eklemenin en basite indirgenmiş şekli: $0308-$0309'da size RETURN'e basar basmaz girilen satırı yorumlayan (ya da duruma göre BASIC satırını alıp onu yorumlayan) ROM rutininin adresi bulunur. Eğer bu adresi bir yere not eder, daha sonra $0308-$0309'u bizim rutinimizi gösterecek şekilde değiştirirsek, bilgisayara girilen satır hakkında fikrini belirtmeye çalışmadan önce bizim rutinimiz ön kontrol yapma hakkına sahip olur. Eğer bizim rutinimizden çıkarken her şeyi bir sonraki komutu gösterecek şekilde ayarlarsak ve kontrolü ROM rutinine bırakırsak tüm komutlar olduğu gibi işleyecek, sadece gerekli durumda fazladan bazı komutlar işleme sokulacaktır. İsterseniz yaptığınız işi basit bir örnekle pekiştirelim: Biliyorsunuz bankamatikler kartı alır almaz şifreyi girmenizi beklerler. siz şifreyi girdikten sonra (yani “giriş” tuşuna bastıktan sonra) kart üzerinde ya da merkezde yazılı olan şifreyle sizin girdiğiniz şifreyi karşılaştırırlar. Eğer şifre doğru dedi olayı biraz çarpıtalım: Diyelim ki siz bu niz, ya da programa dışarıdan müdahale etmek yetkiniz var. Tekrar farzedelim ki, şifrenin doğru olup olmadığını kontrol eden runıyor (yeterince komik oldu mu, devam edeyim mi?). Bu adresi bir yere not edip, kendi program adresinizi buraya girerseniz, şifreler kontrol edilmeden önce çalışacak bir programınız olur. Bu programda, girilen şifrenin “1234” olup olmadığını kolaylıkla kontrol edebilirsiniz. Eğer girilen şifre bundan farklıysa demin bir kağıda not ettiğiniz adrese sıçrarsınız ve bütün işlemler normal olarak yerine getirilir. Ama girilen şifre “1234” se şifre kontrol rutinine hiç sıçramadan ana programa sıçrarsınız. Böylece bankamatiğe bir “komut” eklemiş olursunuz. Bu eklenen komut, “şifre olarak 1234 girildiyse, doğru olup olmadığına bakma” diye bir işlem yapmaktadır. Bu sayede gidip istediğiniz kartı alıp, bankamatiğe “1234” şifresini girerek şifre korumasını atlayabilirsiniz. Başka şifre girenler ise böyle bir hilenin mümkün olduğunu bile bilmeden işlemlerini normal olarak sürdürecektir. Bizim Commodore BASIC'e yaptıracağımız işlem de tam anlamıyla budur. Bir komut girilir girilmez bilgisayara “Dur bir dakika!” diyerek araya girecek, gelen komutun bizimki olup olmadığına bakacak, bizimki gelmediyse kontrolü bilgisayara devredeceğiz. Komut bize aitse bilgisayara “Bu iş seni ilgilendirmiyor. Sen gidebilirsin” dedikten sonra istediğimiz işlemi yapacağız. Gelen komutla ilgili tüm kanıtları yok ettikten sonra da her şeyden habersiz olan bilgisayara hiç bir şey olmamış gibi yoluna devam etmesini söyleyeceğiz. Bu şekilde söyleyince kolay olacakmış gibi görünüyor, ama aslında hiç de kolay değil. Bütün bu işleri yapabilmek için bilgisayarın komutları ne şekilde işlediğini öğrenmeliyiz. $0308-$0309 adreslerini incelediğimizde burada $ATE4 değerini buluruz. $A7E4'ün en başında ise

Klavyeyle gezinmek için ← ve → tuşları.