Bu sayfadaki yazılar
Sayfanın metni
Sayfa 29
A7 register'ının gösterdiği adres belirli bilgileri içeren bir yığının başlangıcı. Bu bilgileri istediğimiz gibi değiştirerek istediğimiz işlemleri yaptırabiliriz. Bu adresin $28 byte ilerisinde hafızaya yükleme adresi, $2c ilerisinde yüklenecek bilginin diskette hangi byte'tan başladığı, $24 ilerisinde ise block olarak uzunluğu bulunuyor. Son olarak ta istediğimiz komutu veriyoruz, şu an için $02'nin Read komutu olduğunu bilin yeter. Son olarak ta Jsr -456(a6) komutu ile DOS (Disk Input Output) fonksiyonu çalıştırılıyor. Bundan sonra ise gerekli hafıza alanları ayrılıyor. DOS'un bir yararı daha, normalde DOS ile bir programı yüklerseniz yüklenen hafıza alanı otomatik allocate edilerek (yeri ayrılır ve başka programların bu alanlarda herhangi bir işlem yapması engellenerek) bu iş ayrılan bir listeye yazılır. Amiga hafıza işlemleri yaparken bu listeye bir göz atar eğer söz konusu adres bu listede varsa gerekli fonksiyonu gerçekleştirmez, çünkü bu adresin başka bir programa ait olduğunu bilir. Zaten bütün bu olay Multi Tasking'in ana prensibidir, bu sayede bir çok programı bir arada birbirine karışmadan çalıştırabiliriz. Fakat bizim yaptığımız olayda DOS kullanılmıyor ve dolayısıyla Amiga söz konusu adreslere bir program yüklediğini bilmiyor. Bunun sonucunda bir hafıza işlemi yapması gerektiğinde (Bir disketi tek drive'da kopyalamak gibi) burayı boş görür ve kullanır, dolayısıyla kendini yok eder ve program çakılır. Eh bu da bir bilgisayarı kandırmanın bin bir yolundan bir tanesi idi. Aslında bütün gelişmeler bu tür kandırmacalı yollardan geçer. Böylece bilgisayarın normalde yapamaması birçok şey kısa zamanda haline gelir. Umarım bir Bootblocker olma yolunda size yardımcı olabiliyorumdur. Programlar veya açıklamalar konusunda bir sorun çıkarsa bana yazın. Yeni bir sayıda yeni bir bootblock ile buluşmak üzere, hoşçakalın.
KIVILCIM HİNDİSTAN
Bootblock 2 findresident: — Egu -$60 dolo: Edu -$108
Uzunluğu <512'ye bölerek bulduğunuz sayı> Block=<İşaretlediğiniz ilk blok>
ilk blok>
boot: dc.b 'DOS'0 del O Burası sonradan Seka tarafından del 880 ;Degstirelecek Start: Bist — Beg — XCopy Boot et: lea — dosnamalpc),at ;Klasik boottan Dosa cikis isr fndresicent(a6) dü.a0 moveg #0,d0 Dosname: dc.b — 'dos.library'O XCOPY: Move ;EXECBASE Movel AD- move UZUNLUK move.w #$0002,$001c(a1) ;RFAD isr — -456(a6) lea.l $70000,a1 isr — -204(a6) abs İsr $70000 isr $teoooo Reset
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 28
Bootblocker'ların dünyasına hoş geldiniz. Her şeyden önce birinci sayıyı alamayan birçok yeni okuyucumuza Merhaba demek istiyorum. Sadece Amiga'nın bootblock'u ile ilgili çeşitli uygulamaları ele alacağımız sayısız (!) sürekli köşelerimizden biri. İlk sayımızı alamamanız ise gayet doğal çünkü ben bile zor buldum. Ne diyebilirim ki, beğenenler abone olsun... Gerçekten merak ediyorum Amiga'yı tasarlayanlar acaba BootBlock'un ilerde bir çok değişik şekilde kullanılabileceğini hiç tahmin etmişler miydi? Hiç sanmıyorum. Gerçi nedense Commodore firmasının esnek tasarımı sayesinde bu tür şeyler sık sık oluyor. Her neyse, bildiğiniz gibi geçen sayıda oldukça basit bir program ile bilgisayarınızın PAL açılıp açılmadığını kontrol ettirmiştik. Bu hafta yapacağımız iş ise biraz daha değişik ve karışık. Bu iş için ilk önce disketlere bilgi yüklemeye bir göz atalım isterseniz. Bir bilgisayarınıza takıp boot ettiğinizde karşınıza çıkan, köşesinde 'Amiga' yazan window DOS'un (Disk Operating System) ana ekranıdır. Burada isimlerini yazarak program veya komutlar çalıştırabilir, directory'ler ve dosyalar üzerinde işlemler yapabilirsiniz. İstediğiniz bir dosyayı silip yerine başka bir şeyler kayıt edebilir veya ismini değiştirebilirsiniz. Yaptığınız bütün bu işlemler DOS'un özgü düzeni ve kuralları doğrultusunda olur. Mesela disk üzerindeki boş alandan daha büyük bir dosya kayıt etmeye kalktığınızda DOS bunun için yeterli yer olmadığını belirtir veya bozuk bir dosyayı çalıştırmaya kalktığınızda buna yapmanıza olanak vermez ve sistemin çakılmamasını sağlar. İşte bu ve bunun gibi düzenlemeleri kullanıcıyı bir çok sorunlardan kurtardığı için DOS kullanılır. Öte yandan DOS'un da kendine özgü dezavantajları vardır. Örneğin 880K kapasiteye sahip normal Amiga disketleri DOS'da kullanıldığında bunun (duruma göre)
programın çalı:
100K hatta 200K kadarı harcanmaktadır. Bunun yanında DOS kurallarına uyularak istenen dosyanın directory'lerden aranması, block'lardan izinin takip edilip parça parça yüklenmesi hızı büyük bir ölçüde düşürmektedir. İşte bu ve bunun gibi sebepler yüzünden oyun programcıları kendi disk rutinlerini yazıp oyunlarında bu rutinleri kullanırlar. Bu rutinlerin de kendilerine göre avantaj ve dezavantajları vardır. Öncelikle her disketin 880K'sının tamamı kullanılabilir, ayrıca gerçekten büyük bir hız kazancı vardır ve bu tür kullanım sistemlerinde DOS'unkinden çok daha iyi koruma yapılabilmektedir.
Bu ay, bir DOS Utility disketinde bootblock'tan bir tırılması üzerinde çalışacağız. Bunun için kullanacağımız örnek ise XCOPY PRO, yani bu ayın çalıştırılabilmeniz için bu programa ihtiyacınız olacak. Kullanacağımız yöntem sayesinde yükleme zamanı oldukça kısalacak.
dir. Dezavantajların başında geleni ise bu tür programların Floppy kullanıcıları için ne kadar iyi olurlarsa olsun, Harddisk'lerde kullanılamamasıdır. Harddisk'lerin ve arşivciliğin ne kadar yayıldığını göz önüne alırsak bu gerçekten de büyük bir kayıptır. Ayrıca bu tür disketlerde bir bloğun bile bozulması oyunun gitmesi anlamına gelebilir, zira her oyunda değişik rutinlerin kullanılması bu disklerin tedavisi için standart programların yazılmasını engeller. Son olarak ta bir diskete bu tür bir program attığınızda artık onu DOS disketi olarak kullanamazsınız, zira DOS düzeni bozulmuş olur. Bizim bu ay yapacağımız uygulama ise bu iki yöntemi çıkarlarımıza uygun bir şekil araya getirmek, yani ikisinin de en iyi özelliklerini ortaya çıkartacak bir melezleme yapmak. Yapacağımız iş bir DOS utility disketinin içine X-Copy'yi boot'tan çalışabilir halde yerleştirmek. Piyasayı takip edenler bunu daha önce Help Disk adıyla dolaşan diskette yapıldığını bilirler. Bu diski ilk önce bir iddia üzerine (Tan Kut'un Help Disk'ine gıcık olduğum için) yapmış ve kullanışlıdan piyasaya sunmuştum. Burada ise bu işin nasıl yapıldığını anlatacağım. Bu sefer bootblock yazılmadan önce yapmamız gereken bazı hazırlıklar var. İlk önce bir yerlerden X-Copy Pro bulun. Daha sonra bunu Power Packer veya Multi-Ripper ile Decrunch edin. X-Copy'nin bu halini bir yere kaydedin. Şimdi ise eski utility'lerden biri olan Relokit programını çalıştırıp 'Fix reloc file' seçeneğini seçin. Burada yapılan iş reloc bir programı (yani yüklenir yüklenmez çalışan bir programı) absolute hale (belli bir adrese yüklendiğinde çalışır hale) getirmek. Bunun hiç bir yararı yok gibi görünse de aslında bootblock için şarttır. Çalışacak programın ya PC relative ya da absolute olması gerekmektedir. Zaten bu yüzden programı decrunch ettik, zira piyasadaki çoğu cruncher'lar. çıkan 'Locate File at $' sorusuna 70000 diye cevap verin ve bir yere save edin. Artık X-Copy Absolute oldu. Şimdi Seka'yı yükleyin. Seka'nın içinden ise 'ri' komutu ile adresine yaptığımız X-Copy'yi yükleyin. Program yüklendiğinde Seka size uzunluğunu verecektir. Bu sayıyı 512'ye bölüp 1 ekleyin ve bir yere not edin. İse DiskMonPro ile XCopy'yi atmak disketin BitMap'ine bakın. Eğer bulduğunuz sayı kadar boş blok ardı ardına sıralanıyorsa ne ala, eğer böyle değil ise disketi optimize edip böyle boş bir yer oluşturmaya (bu iş için de bildiğiniz program yoksa B.A.D. adlı programı tavsiye edebilirim). Böyle bir boşluk elde ettiğinizde ise bulduğunuz sayı kadar bloğu BitMap'den işaretleyin. Bu işlemi yapmamızın amacı ise DOS'un X-Copy'yi attığımız yerleri dolu görüp burayla ilgilenmemesi. Bu sayede hem herhangi bir hata mesajı ile karşılaşmıyoruz hem de sonradan diskette yapılan bir değişikliğin programımızı silmesini engelliyoruz. Yalnız her şeyde olduğu gibi bunda da bir istisna var, Optimize ve Validate işlemleri sırasında BitMap yeniden düzenlenir ve bilgisayar bizim dolu dediğimiz yerleri tekrar boşaltır. Eğer şanslıysanız X-Copy hala gitmemiştir ama ilk program kaydında gider. Tek çare yeniden disketi kopyalamaktır. Gerekli yeri ayırdıktan sonra yine Seka'ya yükleyin ve yazıp diske kaydedin. Bundan sonra tek gereken programımızı yazıp diske komutları ile kaydedin. Tabi Block ve Uzunluk değişkenlerini de yerleştirdikten sonra. Bundan sonra o disketten boot ederken sağ mouse tuşuna basarsanız DOS'a çıkmak yerine X-Copy yüklenir. Her ne kadar mümkün olduğu kadar kısa ve açıkça anlatmaya çalıştıysam da bütün bu olay o kadar kolay değil. Fakat yapılamayacak kadar da zor değil. Ayrıca mesele bunu yapmak değil, mesele bunun nasıl yapıldığını öğrenmek, yöntemi öğrendikten sonra kendi fikirlerinizi uygulayarak bootblock'u daha iyi bir şekilde kullanabilirsiniz. Gelelim programın açıklamasına; sizin de fark etmiş olacağınız gibi bu programın ana kısmı disketten bootblock'u okuyan kısım. Bu işi yaparken Track-Disk denilen, sistemin disketle DOS dışında iletişim kurmasını sağlayan sistemi kullanıyoruz. Bu sistemi ilerde size daha ayrıntılı anlatacağım, şimdilik bu programda kullandığımız fonksiyonları açıklayıp geçelim. isimli satırdan itibaren Track-Disk Device programlanıyor. İlk bilmemiz gereken bootblock okunduğu anda 'A7' register'ında TrackDisk Device adresi olduğudur. Bu yüzden tekrar bu device'ı açmaya gerek yoktur. Fakat eğer bu işi boot'tan değil de DOS'tan yapıyor olsaydık bu sefer Track-Disk Device'ı gerekecekti. Bunu da ileride Bootblock'ta açıklayacağım.