Bootblock
Retro bilgisayarMerhaba 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