Amiga Dergisi sayı 5, sayfa 49

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 49

Merhaba sevgili arkadaşlar, Bundan önceki sayılarda çeşitli programlar verip sizlere bunlar üzerinde açıklamalar yapmış ve bootblock kullanımını sırasıyla sizlere öğretmeye çalışmıştım. Bu sayıda bir program vermek yerine bootblock'un nasıl debug edildiğini ve disk üzerindeki bilginin nasıl depolandığını göreceğiz. Tabi aranızda bootblock neden debug edilsin diye soranlar olabilir. Bunun çeşitli sebepleri olabilir. Şahsen ben bir oyunun başında intro görmekten nefret ediyorum, bir başkası ise oyunun başına introsunu koymak için bu yöntemleri uygulayabilir. Fakat hangi yöntem kullanılırsa kullanılsın değişmeyecek bir şey var o da bunları yaparken edineceğimiz tecrübe. Bazılarınızın şimdiden bildiği gibi diske ulaşımın temel olarak iki yöntemi vardır, bunlar Dos ve Track Disk diye ayrılır. Dos'ta kendi içine OFS (Old File System) ve FFS (Fast File System) diye ikiye ayrılır. Benzer bir ayrım Track Disk için de söz konusudur. Bunlar da Track Disk Device ve direkt hardware erişim olarak ikiye ayrılırlar. Track Disk, adından da anlaşıldığı gibi diskin track track okunmasına dayanır. Burda Track üzerine gitmek gerekir. Track'ler diskin üzerinde gördüğümüz dairelerin oluşturdukları bölümlerdir. Bunlar en dışta 0, en içte 79 olmak üzere içe doğru giderler. Her track'de sector denilen 0'dan 10'a kadar açısal bölgelere bölünmüşlerdir. Bundan başka bir ayrım da drive'ın çift yüzlü olmasıdır bu da Head (0 veya 1) ile ayarlanır. Biz disk üzerine herhangi bir bilgiyi direkt olarak yazacağımız zaman sistemin DOS rutinini TrackDiskDevice eşliğinde kullanırız. Daha önce de anlattığım gibi bu rutin kafayı disk üzerinde belli bir pozisyona getirip buraya bilgiyi yazar veya buradan okur. Track Disk'in ana mantığı bu kadardır. Tabi TrackDisk işin en temel kısmı değil, zira eninde sonunda Track Disk'le sistemin hardware'inin üzerinden işlem gören rutinler. Asıl mesele bu alt rutinlerin kullandığı hardware erişim. Bu olaya şu anda ayrıntılı olarak girmek istemiyorum, zira kullanılan yöntemler, zamanlama ve okuma rutinleri oldukça karışık gelip sizi bu yazıdan soğutabilir. Bunun yerine ben sizlere bu işin ana mantığını anlatacağım. Hardware bazına indiğinizde iş oldukça primitivleşiyor. Şu kadarını söyleyeyim herhangi bir konumda kafanın hangi pozisyonda olduğunu anlamanız için önce onu sıfıra kadar geri sayarak indirmeniz sonra da tekrar eski yerine çıkarmanız gerekmekte. Temel olarak hardware'de diske yazım daha önce gördüğümüz bütün sistemlerden farklı. Eminim hepiniz bir miktar da olsa lamerlik yapmış, veya Smart Disk gibi bir program kullanarak disk üzerindeki bilgileri değiştirmeye çalışmışsınızdır (bu konuda bir sorununuz olursa Volkan'a danışabilirsiniz). Bunu tabi ki disk üzerinde bazı harfler ve sayılar görmüşsünüzdür. Aslında disk üzerinde orda gördüğünüz sayılar yok, sizin gördüğünüz diskin okunduktan sonra decode edilmiş hali. Bunun yapılma sebebi de basit olarak diski belli bir kontrol altında tutabilme. Bunu bir miktar açsam sanırım daha iyi olacak. Eğer biz bu yöntemde olduğu gibi diske bir şey yazarken bu bilgiyi kodlayıp, işlemeden yazsaydık, hemen hiçbir şeyi takip edemezdik. Örneğin bu tür bir işlem olmadan, okuduğumuz track bozuk mu değil mi anlayamazdık. İşte bunu engellemek için checksum ve kodlama vasıtasıyla sağlanan bir kontrol mekanizması vardır. Track Disk Device bütün bu kodlamayı ve checksum'ların ayarlanmasını tamamen üstlenir, fakat biz ille de bu işi hardware vasıtasıyla yapacağız dersek bu sefer bütün bunlara dikkat ederek bilgiyi yazarken kodlayıp, geri alırken de decode edip kullanmamız gerekir. Ana hatlarıyla TrackDisk olayı bundan ibaret, Dos biraz daha farklı bir olay. Yukardaki sistem bir çok okurun da fark etmiş olacağı gibi oldukça zahmetli ve bir miktar mantıktan uzak. En azından directory gibi bir kavramı yok, ve bu yüzden neyin nerde olduğunu bulmak imkansıza yakın. İşte bu yüzden Dos var. Dos'un yaptığı iş, basit olarak TrackDiskDevice kullanarak diskleri belli bir düzen içinde tutmak. Bu da hangi dosya nerde, diskte ne kadar boş yer var, diskin ne gibi bilgileri Root Block denilen yerde ve dosyaların header'larında tutmakla oluyor. Daha öncekinin aksine bir şey save etmek veya yüklemek çok kolay. Siz sadece dosyanın ismini veriyorsunuz, Dos da gidip bu isimdeki dosya hakkında bilgi arıyor. Bu bilgiye ulaştığında, burdan adresini, uzunluğunu ve nerelerde oturduğunu öğrenip peşine düşüyor ve track track okuyup çıkartıyor. Buraya kadar anlatmış olduğum genel Dos sistemiydi. Bunun kendi içinde iki ayrımı var, bunlarda daha önceden söylediğim gibi Old File System ve Fast File System. Bunların temelde birbirlerinden farkı diski okuma yöntemleri. Asıl olarak harddiskler için geliştirilmişte olsa FFS floppy diskler için de uygulanabiliyor. Bu özellikle KickStart 2.0 ve üstü için oldukça kolay. Ne gibi bir avantajı var diye sorarsanız disk başına 40K'ya yakın, daha fazla bilgi depolanabiliyor ve bu bilgilere ulaşım daha hızlı. Diskle bilgi alış veriş yöntemleri çok basit hatları ile böyle. Şimdi gelelim bir bootblock'un bu bilgiler vasıtasıyla debug edilmesine, Piyasada gördüğümüz bir çok oyundan önce bir intro çıkar ve size oyunun kim tarafından kırıldığı gibi bilgiler verir. Eğer disk dos diski ise bunu çıkartmak oldukça kolaydır, sadece startup-sequence'dan söz konusu dosyayı çıkarmak yeterlidir. Fakat eğer disk TrackDisk ise bu iş o kadar da kolay olmaz. Burada yapmamız gereken bootblock'a bakmaktır. Zira bu tür işler genelde bootblock ile yapılır. Cracker programı kırdıktan sonra diski crunch eder ve oluşturduğu boşluğa orjinal bootblock'u yerleştirir. Bundan sonra da yükleyici kısmı bootblock'a yazar. Bu kısmın yaptığı iş, ilk önce introyu, daha sonra da oyunu yüklemek. Genelde uygulanan prosedür bu olduğundan bu tür bir şeyi bulup daha sonra da atlatmak o kadar zor değildir. Fakat burda hem yerimiz hem de yazının teknik kapasitesi el vermediğinden ben sadece TrackDisk Device ile yapılan yolunu anlatacağım. Zira tamamen hardware ile yapılan kısmını hem anlatmak hem de çözmek oldukça güç. Çünkü bunun belli bir kalıbı yok. Aramanız gereken rutin yaklaşık şunun gibi bir şey sonra ister introyu diskten alabilir, isterseniz de tamamen çevreden çıkarabilirsiniz. Bunu yaparken tavsiyem, MasterSaka kullanmanız olacak. RS (read sector) komutu ile diskin ilk iki bloğunu Chip Mem'in bir yerine yükleyip bu adresten oniki sonrasını disassemble ederek başlayabilirsiniz. $40000'e yüklediniz diyelim o zaman "D $4000C" komutunu vereceksiniz. Bunun tersini yapmaya kalkmanızı, yani böyle bir diske kendi intronuzu ne yaptığınızı bilmeden atmaya çalışmanızı tavsiye etmem, zira bu tür bir şey yaptıktan sonra belki oyun çalışabilir, fakat hiç beklemediğiniz bir yerde bir sorunla karşılaşabilirsiniz. Bol bootblocklu günler...

KIVILCIM HİNDİSTAN

Bu basit bir bootloader. Rutini bulduktan

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