Home  Articles  Programs 

GEOS'la Programlama

C-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.

GEOS GeoPaint yengeç resmiGeç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 Sistem'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:

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 alt-programlar 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ışılagel-dik 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'de ç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 otomatik olarak başlatılmak istensin. Bunun için, GEOS'un arka planından yönelilen mouse ya da joystick'le cursor 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 ("desktop") 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ü ("JSR $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'de 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ıtlama özellikle engelleyici olmamaktadır.

Bu program tekniğiyle kullanıcının hiç bir eylemi kaybolup gitmemektedir. Her "event" kaydedilmekte ve arada bir tamponda biriktirilmekte-dir. 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 mo-dülerleştirilmesini de gerektirmektedir: Menüler, "DoMenü" ç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ön 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 "Dolcons" rutinine Icon tablosuna gönderme yapan bir işaret

Berkeley Softwork's 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. eklenmiş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 maske-byte'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'aa kadar) verilir. "Frame Rectangle" ile pencere bir de çerçeve kazanır. Doldu-rucu-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 tampon-belleğ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 ö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 olana indirgenmiştir. Her sprite istendiği anda gösterilebilir ("EnableSprite") ya da silinebilir ("DisableSprite") ve "PosSprite" kullanılarak da konum-landı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'ı 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.

GEOS Rutinleri

kaynak: Teleteknik Commodore Dergisi, Sayı 18, Ağustos 1987, Sayfa 24-26

Commodore Dergisi
01.08.1987

Keywords: C64, Commodore, GEOS, Programlama, Yazılım


C64 Projects Twitter Page

İlker Fıçıcılar's CBM Page