Bu sayfadaki yazılar
Sayfanın metni
Sayfa 24
Eğer C-64 kullanıcısıysanız, hele bir de disk drive'ınız varsa mutlaka GEOS (Graphic Environment Operating System — Grafik Ortam İşletim Sistemi) adını duymuşsunuzdur. Bu yazı dizimizde size GEOS'un kullanımını ve GEOS tarafından çalıştırılabilecek programların (Application — uygulama) nasıl yazılabileceğini anlatacağım. Eğer sürekli Commodore Dergisi okuruysanız daha önce de bu konuya değindiğimizi hatırlarsınız. Fakat konumuz açısından hayati önem taşıdığı için bu yazıların kısa bir özetiyle başlayacağım dizimize. (Daha ayrıntılı bilgi için Commodore Dergisi sayı 49'u gözden geçirin.)
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 25
Bildiğiniz gibi GEOS, bit-mapped ekran üzerinde menüler, ikonlar, diyalog kutuları gibi yüksek düzeyde kullanım rahatlığı getiren işleri kullanmakta ve programlarında oldukça rahatlık sağlamaktadır. Eğer sizin programlarınızda da bu rahatlığa sahip olmak isterseniz, GEOS'u kullanmanız size büyük bir avantaj ve rahatlık sağlayacaktır. Peki ama bütün bu rahatlığı sağlayan GEOS nedir? GEOS, tıpkı C-64'ünüzün sahip olduğu kernal gibi kendi kernal'ına sahip, bu kernal'da pull-down menu, ikon, normalin dört katı hızlı bir disket işletim sistemi, string I/O rutinleri gibi, program yazarken en çok ihtiyaç duyacağınız rutinleri saklayan bir işletim sistemidir. (49. sayıda kernal daha ayrıntılı biçimde işlenmiştir.) Aslında Desk-Top, yani GEOS'u çalıştırdığınızda karşınıza çıkan ve dosyaları ikon ve menüler yardımıyla kullanmanızı sağlayan program GEOS'a dahil değildir, yalnızca ilerde sizin de yazmayı öğreneceğiniz türden bir uygulama'dır. GEOS yalnızca bu tür uygulama'ları destekleyen bir işletim sistemidir. GEOS kernal'ının içinde iki düzeyde kod çalışmaktadır. Bunlar ana döngü (Main loop) ve interrupt düzeyidir (Interrupt level). Ana döngü, event'leri tarayarak gerekli rutinleri çağıran ve bu arada sizin uygulamalarınızı çalıştıran uzun bir koddur. Interrupt düzeyi kodu ise saniyede 60 kere main kodu keserek donanımı okur. Bu sayede, ana döngü ne ile uğraşırsa uğraşsın, sizin bastığınız tuşun veya oynattığınız joystick'in hatasız olarak okunabilmesi sağlanır. Bunun yanında eğer programınızda interrupt düzeyini kullanmak istiyorsanız yalnızca GEOS'a kendi interrupt düzeyinin arkasına sizinkini eklemesini istediğinizi söylemeniz yeterlidir. Gördüğünüz gibi GEOS gerekli olan bütün yükü kendi üstüne almıştır. Eğer makine dili biliyorsanız, GEOS'la program yazmaktan daha kolay bir iş olmadığını göreceksiniz. Tabii bu arada belirtmem gerekir ki bu iş de dünyanın en kolay işi değil. Özellikle GEOS dosyalarının standartlardan farklı olması yüzünden bazı zorluklar çıkıyor karşımıza. Fakat gelecek ayki yazımızla vereceğimiz “THE ULTIMATE GEOS CONVERTER” programı ile bu problemi halledeceğiz. Bu kadar özetten sonra daha ciddi konulara, yani GEOS kernal rutinlerinin kullanılmasına gelelim: GEOS yaratıcıları her şeyden önce zero page'de kendilerine bazı bölgeler ayırmışlar. Bunun sebebi ise 6502 komutlarının zero page kullanımında daha az yer tutması ve daha az zaman alması. Bununla birlikte, bu bölgeler yardımıyla değerlerin kernal rutinlerine yollanması ve rutinlerin bu bölgelerde hesap yaparak sonuçlarını yine aynı bölgeler yardımıyla göndermesi, programcının belleğin hangi kısmının kullanıldığını hatırlatması konusunda büyük kolaylık sağlar. Bunun sonucunda GEOS'un programcıları $02'den başlayan 30 baytlık bir bölgeyi pseudoregister olarak ayırmışlar. Bu bölge 15 adet çift baytlık değişkenden oluşur. Bu değişkenlerin isimleri, r0, r1, r2, ..., r15'tir. Yazımızda bu pseudoregisterlerin low-baytları veya rNL olarak adlandırılacaklar. (Burada N, register numarasıdır: r0, r0L.. gibi). High baytlar ise rNH olarak isimlendirilecekler.
Bu pseudoregisterler yardımıyla GEOS Kernal rutinleriyle haberleşmeniz mümkün olacağı için bu bölgelere yazımızda sık sık değineceğim. Bu bölgeler GEOS kernal'ının işlem yaptığı tek bölgedir. Bu sayede hiç korkmadan belleğin bize ayrılan kısmını rahatlıkla kullanabiliriz. GEOS Kernal rutinlerine değer yollamanın tek yolu bu pseudoregisterler değildir. Hız gerektiği zamanlar A, X, Y ve hatta carry flag kullanılabilir. Fakat bunlar arasında özellikle sık çağrılan rutinlerde kullanılan in-line çağırımlar en kullanışlısıdır. In-line çağırımlarda rutine gönderilecek değerler doğrudan doğruya jsr komutunun ar-
Ep | A | O m en m a ii O BU |