GEOS'LA PROGRAMLAMA
Retro bilgisayarC-64'ün yeni versiyonunda Geos adlı bir de grafik kullanım sistemi var. Bu sistem, çekici programların geliştirilmesinde kullanılacak rafine yardımcı araçlar sunuyor. Geçen yaz, yeni C-64 piyasaya tanıtıldı. Bu alette yeni olan, aslında sadece, kısaca Geos diye anılan Graphic Environment Operating System'li bir disketti. O zaman da anlatıldığı gibi, Geos, C-64 için yeni, yüksek performanslı bir kullanım imkanı oluşturmakta; tıpkı Digital Research'ün GEM'i gibi. Sistem kullanıcının hizmetine kullanıma dayalı bir ekran yönetimi için bir dizi süratli ve konforlu assembler rutini sunuyor. Aplikasyon diye adlandırılan uygulama programları, böylelikle, kullanım itibarıyla son derece kolaylaşıyorlar ve 8-bit'lik bir bilgisayardan kimsenin bekleyemeyeceği birtakım özellikler kazanıyorlar:
• Pull-down menüleri ve desktop rutinleri, • Resim sembolleri (Icon'lar), • Oranlı karakter setleri, • Bu karakter setleriyle oran modunda çalışmak için fonksiyonlar, • Diyalog penceresi, • Konforlu grafik ve matematik kütüphaneleri, • Multitasking-benzeri melekeler, • Kendine ait hızlı yükleyici sayesinde hızlı bir disketten yararlanma imkanı, • Tüm bildik tipler için evrensel printer kullanımı.
Bütün bu hazır Geos rutinleri profesyonel software geliştiricilerine çekici ve yüksek performanslı programların hazırlanmasında yararlı olsun ve böylelikle C-64 software pazarına yeni bir atılım kazandırılsın diye düşünülüyor. Geos kullanımında, bizzat altprogramlar yazmaktansa, hazır bulunan oranlı karakter setlerine başvuruluyor. Ve de Icon'lar, pull-down menüleri ve diyalog penceresi, uygulamacıya üniform bir kullanıcı arabirimi sağlıyor. Böylece alışılageldik programlarda karşımıza çıkan komut dizilerini öğrenmek için yırtınma gereği de kalkmış oluyor: Bir Geos aplikasyonunun kullanımını öğrenen kişi, prensip olarak, tüm programları kullanabilir hale gelmiş demektir. Geos'un süratli disket rutinleri sayesinde, artık C-64'te çok sayıda datanın disketten büyük hızla okunması ya da diskete büyük hızla yazılması gereken programların (örneğin Data Management) akla uygun bir kullanımı da mümkün olmakta; bu iş eskiden floppy disklerin yavaşlığı nedeniyle bir sabır sınavı haline gelirdi. Sistem disketinin yüklenmesinden sonra Geos, C-64'ün belleğinde kalıyor ve ROM'daki alışıldık işletim sistemine paralel çalışıyor. Uygulamacının programları için rezerve edilmiş 23 KByte'lık (konfordan edilen birtakım fedakarlıklarla hattâ 32 KByte'lık) bir bellek parçası hizmete hazır bulunuyor. Aplikasyonun Geos'la birlikte sistemin belleğinde bulunması, kütüphane rutinlerinin de el altında olması anlamına geliyor. Bu sırada Geos, programa giriş-çıkışların kontrolünü üstleniyor ve kullanıcının yaptıklarını yönetiyor. Bu bağlamda anahtar kelime, aplikasyonların dışsal olaylarla yönetildiği anlamına gelen “event-driven” kelimesi. “Dışsal olay”'dan da, örneğin, Mouse-cursor'ın hareketi, ateş tuşunun kullanıma sokulması ya da klavyeye dokunulması anlaşılmakta. Bunu somut bir durumu ele alıp açıklayalım: Diyelim ki, disket fihristinden bir program yüklenmek ve sonra ekranda gezdirilip arzulanan aplikasyon-Icon'unun üstüne getirilir ve ateş tuşuna basılır (çıt ettirilir). Geos özel değişken belleğinde, ekrandaki mevcut gösterimin fiili örgütlenişi hakkındaki tüm bilgilere (“desk”) sahip bulunmaktadır. Böylelikle, hem tek tek her Icon'un ve hem de cursor'ın ekrandaki koordinatlarını bilmektedir. Aplikasyon Icon'u çıt ettirildiğinde, cursor'ın koordinatlarına göre Icon tablosunda bir Geos servis rutini belirir ve seçilen programı yükler. Bunun ardından Geos kontrolü ($400'ün uygulanmasıyla) uygulamacının programına devreder. Bu karmaşık uygulamaların hakkından gelebilmek için, Geos, birbirlerinden farklı oldukları kadar temel niteliklere de sahip olan iki program yapısı kullanmakta: temel program döngüsü (“main loop'') ve interrupt düzeyi (“interrupt level''). “Main loop” tek ve büyük bir program döngüsü ve büyük “event''-leri kontrol ediyor. Interrupt düzeyi, sınırlı bir çerçevede, birden fazla sürecin eş-zamanlı olarak işleme sokulmasını olanaklı kılıyor. Bunun için de C-64'te her 1/64 saniyede bir gönderilen kesme sinyalinden (interrupt!) yararlanılıyor. Bu demektir ki, bir sürecin gerçekleştirilmesi 1/60 saniyeyi aşamaz. Ancak, “interrupt level” kullanılmakta olan donanımın (klavye, joystick, mouse, vb.) türüne duyarlı olduğundan, bu zamansal kısıtlamalar özellikle engelleyici olmamaktadır. Bu program tekniğiyle kullanıcının hiçbir eylemi kaybolup gitmemektedir. Her “event” kaydedilmekte ve arada bir tamponda biriktirilmektedir. Kişi, kendi programına, servis rutinlerinin yardımıyla programdan beklediği işlevleri tasarlayarak başlayabilir. Ve tasarladığı bu çatıyı ayrıntılı bir biçimde sınayabilir. Bu modüler program anlayışı tabii Geos kütüphanelerinin belirli bir modülerleştirilmesini de gerektirmektedir: Menüler, “DoMenu” çağrısıyla kurulurlar. Bu onların ekranda hem dikey hem de yatay olarak görüntülenebilmesini sağlar. Bunun için menü kutusunun dört köşesinin koordinatları ve menünün metni alt-programa verilir. Geos, bunun üstüne, ekrana datalara uygun bir menü dörtgeni çizer ve bu dörtgene, birer çizgiyle ayırarak, tek tek menü metinlerini yazar. Oranlı karakter seti kullanıldığından, menünün sağ kenarına ilişkin datanın bulunması için bir parça deneme yapmak gerekiyor. En iyisi 319'la başlamak ve bu değeri, dörtgen dolana dek küçültmektir. Ayrıca bu tablodan çeşitli alt-menülerin de listesini okumak mümkündür. Bu tür tablolarla kullanıcı tarafından tanımlanmış Icon'ların oluşturulması da mümkün hale gelmektedir. Bunun için “DoIcons” rutinine Icon tablosuna gönderme yapan bir işaret otomatik olarak başlatılmak istensin. Bunun için, Geos'un arka planından yönetilen mouse ya da joystick'le sürüklenmiştir. Bu işaretin gösterdiği rutin, sadece bir Icon'u harekete geçirmekle kalmamakta, aynı zamanda da artık gerekmeyen sembollerin silinmesini de üstlenmektedir. Window'ların yönetimi işi de Geos'ta kurnazca ve yerden son derece tasarruflu bir biçimde çözülmüştür. Çalışma düzlemi önce bir maskebyte'la (iki bit'ten biri konmuş olarak) satır satır geriye boyanır. “Rectangle” rutini kullanılarak tercihe tabi bir doldurucu desenle ekranda bir window açmak mümkündür artık. Dört window köşesinin x-koordinatları (0'dan 199'a kadar) ve y-koordinatları (0'dan 319'a kadar) verilir. “Frame Rectangle” ile pencere bir de çerçeve kazanır. Doldurucu-desen için “SetPattern”'le ayarlanan 0'la 33 arasında bir değer verilebilir. Menülerle diyalog penceresi, çalışma sırasında yazıyla doldurdukları için, Geos, ekranda görünmez hale gelmiş resim parçalarını kurtarmak üzere 8000 Byte'lık bir tamponbelleği de hazırda bulunmaktadır. “Recover Rectangle”, sonradan, tampona atılmış grafik detayı basitçe kopya ederek, resmin hasar görmüş kısımlarını yeniler. Ayrıca GeoPaint, aynı mekanizmayı, “Undo” fonksiyonu için de kullanmakta. Tampon bellek, RAM olarak aplikasyonların hizmetine de girebilir, ancak bu durumda, üstüne yazı yazılmış grafiklerin yeniden imali imkansızlaşır. Bu durumdan kurtulmanın bir yolu, resmin yeniden çizimi; tabii bu yol daha fazla zamana ihtiyaç gösterir. Ama bu amaçla kullanılmak üzere, “Graphic String” rutini geliştirilmiş bulunuyor: Bu rutin, bir grafiği alıp ara-depolama için bir metin stringine dönüştürür. Yenileme için artık gereken yegâne iş, bu metin stringini window-açıcıya geri vermektir. Bu açıcı, başlangıçtaki resmi, temel yapı taşları olan daire, dikdörtgen, çizgi ve doldurucu-desenlerle yeniden kurar. Oranlı metinlerin çeşitli karakter setleriyle ekrana yazılması da aynı derecede basittir. “LoadCharSet”, Geos'un sistem disketinden bir karakter setini yükler ve “PutString” arzulanan metni seçilen yazı tipiyle ekrana yazar. Geos, girilen datanın işlenmesi için
Berkeley Softworks tarafından gerçekleştirilen GEOS işletim sistemi grafik uygulamalar açısından da kullanıcıya büyük kolaylıklar sağlıyor. İkonlar yardımı ile programcılar, daha kolay ve daha insani çalışma olanağına sahip oluyorlar.
GEOS RUTİNLERİ
Desktop Rutinleri Grafik Rutinleri Hires-metni Mouse Yönetimi Sprite Yönetimi
Süreç Organizasyonu IEC-Bus ve Disk Yönetimi VLIR File'ları Matematik Kütüphaneleri Genel Kütüphane Rutinleri Dialog Box'ları Printer-sürücüler özel sürücü rutinler kullanıyor. Standart olarak bir joystick sürücü bulunuyor. Bunun kapasitesi 380 Byte ve $FE80-$FFF9 adres alanında yer almakta. Eğer başka bir giriş aracı (örneğin bir grafik tableti) kullanılacaksa, bu noktada “Call-Routine” ile harekete geçirilen, mütekabil bir program kullanılabilir. Sprite yönetimi de en gerekli ola-
na indirgenmiştir. Her sprite istendiği anda gösterilebilir (“EnableSprite”) ya da silinebilir (“DisableSprite”) ve “PosSprite” kullanılarak da konumlandırılabilir. Başlangıçta GEOS'un Multitasking melekelerinden söz etmiştik. Sistemin bu amaca yönelik bir de “süreç yönetimi” var. Böylelikle “Main Loop” ve “Interrupt Level” program parçalarına uygulama programlarında bir üçüncüsü eklenmekte: süreç. Dolayısıyla herhangi bir aplikasyonda, kendi flag-byte'ına sahip bir süreç modülü kurmak mümkün. Interrupt kullanılarak bu sayaç her 1/60 saniyede bir “Interrupt Level” tarafından bir eksiltilir. 0'a vardı mı, flag-byte'da bir hazırlık biti çıkar; bu da “main loop”'a sürecin tekrar çalıştırılabileceği sinyalini verir. Bu sayede, bu metodlar, az çok eş-zamanlı olarak, CPU zamanını flag-byte'ın hazırlık biti sayesinde paylaşan birden fazla küçük programı, hafızada çalıştırmak mümkün. Sayaçlar, burada, süreç önceliklerinin düzenlenmesinin ilkel bir biçimini oluşturuyor: Bir multitasking işletim sisteminde yüksek öncelikli süreçler alçak öncelikli diğer süreçlerden daha yüksek bir sıklıkla ele alınmakta ve böylelikle de, daha süratli işlenmekteler. GEOS'ta bir sürecin daha hızlı işlenmesini mümkün kılmak üzere, gösterge değeri düşürülmekte.