Amiga Dergisi sayı 3, sayfa 21

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 21

Merhaba arkadaşlar, Bootblock'lar üzerine olan bu yazı dizimizin üçüncü bölümüne sağ salim gelmiş bulunuyoruz. Umarız yaptığımız uygulamalar size ağır gelmiyordur, fakat ağır bile gelseler bir iki tekrardan sonra kolaylıkla üstesinden geleceğinizden eminim, eğer bu da olmazsa lütfen sorunlarınızı bize yazın. Geçen iki bölümde ilk olarak ana boot rutinini ve bootblock'tan Track-Disk denilen bir device yardımıyla bilgi okumayı öğrenmiştik. Genel olarak piyasadaki bootblock'lar bu iki ana yöntemi kullanırlar. Mesela bir bootblock veya bir korumasını ele alalım. Bu iki uygulama da 700-800 byte yer tutan rutinlerden oluşmaktadırlar ve bootblock'a rahatlıkla sığarlar. Bu rutinlerin arkasına boot rutinini de koyarsanız bir bootblock hazırlamış olursunuz. Diğer tür de BootLoader diye tabir edebileceğimiz bootblock'lardır. Dergimizi takip eden okurlar bilir, geçen sayıda böyle bir rutin vermiştik. Bunların da ana amacı genel olarak ilk önce bir introyu daha sonra da oyunu yüklemektir. Verdiğimiz bu iki örnekte de bootblock öncelikli bir program gibi çalışıp, görevini bitirdikten sonra da silinip gider. Bu temel olarak boot programının yapısından ileri gelmektedir. Bu rutin çalıştığı anda bootblock'un aktifliği sona erer, yani boot kendisinden sonra bir olaya (mesela Dos veya System-Configuration'a) müdahale edemez. Tabii ki bu olay biz kullanıcıları bağlamaz, hele ki C-64 gibi numaralarla dolu bir makineyi programlama şansına (veya şanssızlığına) erişmiş eski topraklar için bu hiç de sorun değildir. Bakın bu işi nasıl beceriyoruz; bilindiği üzere disk takıldığında ilk önce Bootblock adıyla bildiğimiz ilk iki block okunur. Daha sonra burada bulunan program harekete geçirilir, eğer bu programın sonunda Boot rutini varsa sistem Dos'a çıkmak için harekete geçer. Sistem ilk önce Dos'u açar, daha sonra diskten system-configuration'ı yükler ve CLI'ı buna göre açar. Bundan sonra Startup-Sequence denilen dosyayı yükler ve buradaki programları işleme koyar. Son olarak ta 1> promptunu çıkararak kullanıcının bir giriş yapmasını bekler, madem bootblock aktif kalamıyor öyleyse biz de yapacağı işi bir başka task'i değiştirerek yaptırırız. Yani olay şu; bootblock çalışacak, kendisinden sonra işleme konulacak bir komutu değiştirip istediğimiz işin daha sonra bu komut tarafından yapılmasını sağlayacak, bu işlemden sonra da komutu eski haline döndürecek. Bu aynı zamanda de temel mantık ama bu tamamıyla ayrı bir konu. Dilerseniz programın açıklamasına geçelim; İlk önce program Main rutinine dallanarak bazı ana değişiklikleri gerçekleştiriyor. Bu ilki programı hafızada belli bir adrese yerleştirmek. Daha önceki sayılarımızı takip edenler bilirler, bootblock chip mem içinde herhangi bir adrese yüklenir, bunun genel olarak bir zararı yok ama bizim yapacağımız işte fonksiyonu sabit bir adrese yerleştirmemiz gerekmekte. Bu yüzden biz de programı TRANS rutini sayesinde hafızanın pek fazla kullanılmayan bir yeri olan $7F000'a yolluyoruz. Daha sonra da Intuition'ı açıyoruz. BACKUP rutini ile OpenWindow komutunun asıl adresi olan değeri alıp ileride kullanmak üzere saklıyoruz. Bunun ardından ise NEWSTRT rutini içinde kullandığımız SetFunction komutu ile bilgisayarın her OpenWindow komutu ile bizim programımıza dallanmasını sağlıyoruz. Bu iş de bittikten sonra yani kendimizi sisteme yerleştirdikten sonra klasik boot rutinini çalıştırıp sistemden çıkıyoruz. Görünüşe göre boot burada bitiyor, peki ya geri kalan kısımlar ne? İşin aslı şimdiye kadar yaptıklarımız sadece sistemin içine bir casus yollamaktı, asıl olay yani casusun rolü bundan sonra başlıyor. Sistem hiçbir şey yokmuş gibi yoluna devam ediyor. Güzel güzel system-configuration'ı yüklüyor ve bir window açmaya karar veriyor. İşte bu noktada devreye casusumuz giriyor. NEWFUN isimli rutin OpenWindow komutu ile çalıştırılıyor. İlk yaptığı iş bu olay devamlı tekrarlanmasın diye OpenWindow komutunu eski haline getirmek, eğer bu yapılmazsa her OpenWindow komutunda bilgisayar window ismi olarak bizim yazdıklarımızı alır. Bundan sonraki kısım ise EXEC adındaki rutin. Bu rutin OpenWindow komutunun bazı parametrelerini düzenler. Orta düzeyde bir assembler bilgisi ile bu parametreleri kolaylıkla anlayabilirsiniz. Burada yapılan iş window'un 256 yükseklikte açılması ve başlığında TITLE sonra gelen yazının bulunması. Bu da yapıldıktan sonra Rts komutu ile programdan çıkılır. Her türlü soru ve eleştirilerinizi bekliyorum, bana yazın. Gelecek Bootblock'ta yepyeni bir uygulama ile sizlerle olmak üzere, KIVILCIM HİNDİSTAN

BOOT DCb

del del START

880

BSALMAN

60: MOVEL LEA JSR MOVEL MOVEL MOVEO ARTS MAİN:

aç -$0060(A6) DOAO SOOTELAO)AO 4800.00

BSR.s TRANS

JMP SONRA:

BSR.s CPENNT BSR.s BACKUP BSR.s

Ris TRANS: LEA LEA MOVEW DONGU: MOVEL RTS BACKUP: MOVEL MOVEL ARTS NEWSTR1 MOVEL MOVEL MOVEL MOVEL JSR ARTS ÖPENİNT.

TURLU D7,DONGU

Tintbasa-boctl#DEST.AO -$O0CA(AO), [funbase-boot]+ DEST

A

Set Functior

(POJAT -$0198(A6)

MOVEL JSR MOVEL RTS NEWFUN:

— DEST

MOVEML HAT)

BSR.s BSR.s

NEWSTR2 EKC

MOVEML.

MOVEL RTS NEWSTR2 MOVEL MOVEL MOVEL MOVEL MOVEL JSR MOVEL RIS EXC: MOVEW MOVEL Window Başlığ

(AT)

— Öpen Window Functlor “SOTAMASI A0

;SetFunctior

V #fitel

Başlığı

ARTS FUNBASE İNTBASE DOS: TITEL:

bikb

DCB

12000

DC10 800 “dosllbrary 500 “Amiga Dergisi

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