Home  Articles  Programs 

GEOS Kursu - 1

C-64 ile programlama konusunda biraz tecrübeniz varsa GEOS'a geçişiniz oldukça kolay olacaktır. Programcılıkta yeniyseniz de üzülmeyin. GEOS programcılığın zor ayrıntılarından bir çoğunu ortadan kaldırarak tasarımınıza konsantre olmanızı kolaylaştırır.

GEOS'u anlatmaya doğallıkla adını açıklayarak başlamak gerek. GEOS Graphic Environment Operating System kelimelerinin kısaltılmasından oluşuyor. Yani Grafik Ortam işletim Sistemi. Amacı daha basit bir kullanıcı arabirimi ve işletim sistemi sağlamak için grafik elementler kullanmak: Bunlar programcılıkta önemli ölçüde zaman tasarrufu sağlamanın yanı sıra uygulamaların kalitesini de arttırıyor. Disk kullanımı, bit-mapped ekran manipülasyonu, menüler, ikonlar, diyalog kutuları ve yazıcı desteği gibi işleri kolaylaştırarak program sürecini daha akıcı hale getirir.

GEOS'un menülerini, pencere ve başka grafik özelliklerini kullanarak program uygulamalarınızın daha kolay kullanılır cinsten olmasını sağlayabilirsiniz. GEOS aynı zamanda C-64 ile yapılabileceklerin alanını da genişletiyor. Disk-turbo sisteminin varlığı daha çok data yoğun programlara olanak sağlıyor. Böylelikle C-64 ile yazılabilecek programların spektrumu genişliyor.


Temel Bilgiler

GEOS aşağıdaki özelliklere sahi ve kursumuzda bu özelliklerini anlatacağız:

İnip çıkan menüler
İkonlar
Oranlı yerleştirilmiş fontlar
Bu fontları kullanan dizgi (string) I/O rutinleri
Diyalog kutuları
Komple grafik kütüphanesi
Komple matematik kütüphanesi
Uygulamalar içinde multi tasking
Hızlı disk ulaşımı
Sayfalı dosya sistemi
Komple yazıcı arabirim seti

GEOS işletim sisteminin merkezi Kernal. Kernal C-64 belleğinde sürekli olarak bulunur ve çalışır. GEOS'un tüm pencere, ikon, menü ve fontlarının desteği Kernal'da bulunur. Diğer yandan deskTop GEOS Kernal'in bir parçası değil geoWrite ve geoPaint gibi bir uygulamadır.

GEOS programcılığı büyük ölçüde menü ve ikonları tanımlamak için masalar oluşturmak ve Kernal'a menü ve ikonlar aktive edildiği zaman çağrılacak rutinleri vermekten oluşmaktadır.

Kullanıcının GEOS Kernal'i ile işleyen bir programa yolladığı her tür girdi (bir menüyü açmak, menüyü aktive etmek, metni girmek, mouse'u hareket ettirmek gibi) event (olay) diye adlandırılır. GEOS Kernal'i eventleri işlemek için destek sağlar. Uygulama, event kullanıcı girdisi ile aktive edildiği zaman kullanılacak servis rutini ve menülerle ikonları tanımlamak için bir tablo sunar. GEOS Kernal bir event olduğunu belirlediği zaman uygun servis rutinini çağırır. (Burada aksi belirtilmediği sürece çağırma bir altrutine atlama, return de altrutine dönüş anlamında kullanılmaktadır). Ondan sonra servis rutinleri GEOS metin, grafik, dik turbo ve başka rutinlerini istenen eylemi gerçekleştirmek için kullanırlar.

Uygulamalar donanım üzerinde hala direkt kontrole sahip olabilir, ama birçok durumda bu destek Kernal'a bırakılabilir.

Örnek vermek gerekirse, "mouse click edildi" gibi bir sinyali uygulamaya aktarmak yerine, Kernal mouse hareketleri ve click'lerinden bir menü eventinin gerçekleştiği, bir menünün indirildiği ve seçimin yapıldığı sonucunu çıkartabilir. Kernal içinde dispatchers (çağırıcılar) denilen rutinler kullanıcının ne yaptığını görüp o işi halledecek uygun servis rutinini çağırırlar. Bu tür etkileşime event güdümlü programcılık denir.

Burada bir event

1. Kullanıcı tarafından başlatılan bir eylem ya da

2. Kullanıcı tarafından tanımlanmış bir süreç anlamlarında kullanılmaktadır.

Sürecin bir örneği bir saati o ana getirmek için her saniye run edilen bir rutin olabilirdi. Uygulama programcısı rutini sağlar ve GEOS Kernal'a onun ne kadar sık run edileceğini söyler. O kadar zamanın geçtiği her sefer de bir event başlatılır. Eğer kullanıcı eylemi söz konusu değilse, yalnızca GEOS Kernal kodu işliyor demektir. Bellek yeri other Press Vektörü (bastırma vektörü) kullanıcı mouse'u herhangi bir menü ya da ikon dışında click ederse, çağrılacak rutinin adresini içerir. Bellek yeri key Vector (tuş vektörü) klavyede bir tuşa basıldığı zaman çağrılacak rutinin adresini içerir. Ondan sonra uygulama tüm tampon bellek (buffered) girdilerini return eden bir rutin çağırabilir. Bir editör gibi uygulama örneğinde, ekran bir sayfanın belli bir kısmını temsil eder. Ekran alanında mouse'un click edilmesi sayfada bir pozisyon seçilmesi anlamına gelir. Bu pozisyon daha sonra metnin girileceği ve grafiklerin çizileceği pozisyon olur.

Kullanıcı mouse'u ekran alanında click ettiği zaman (menü ve ikonların dışında) adresi diğer Press Vektöründe depolanmış bulunan rutin çağrılır. Rutin mouse pozisyonunu belirlemek için MouseX pozisyonu ve MouseY pozisyonu değişkenlerine bakabilir. Bir tuşa ya da birkaç tuşa birden basıldığında. Anahtar Vektördeki rutin çağrılır ve kullanıcının girdiği karakterlere dönmek için getNextChar (sonraki karakteri al) rutinini çağırabilir. Vektörler O noktasına getirilerek çağrılacak hiçbir rutin olmadığı gösterilir. Uygulamanın başlangıç kodu bu vektörleri uygun rutinlerin adreslerine göre ayarlamalı ya da hiç servis rutini yoksa onları 0'da bırakmalıdır.


Press Vektörü ile Çifte Click

Çifte click mouse'u arka arkaya iki kere click etme anlamına gelir. Bu işlemin bir ikon üzerinde yapılmasını ikonlara geldiğimizde göreceğiz. Burada other Press Vektör ile çifte click konusundan söz edeceğiz.

GEOS Kernal'da bir çifte click şu şekilde gerçekleştirilmektedir. Mouse ekran alanı üzerinde ilk defa click edildiğinde other Press Vektörü çağrılır. Servis rutinin bir parçası olarak, dblClickCount değişkeninin değerini kontrol eder ve eğer O ise, CLICK-COUNT sabitiyle yükleriz. Ondan sonra servis rutinimiz, tek bir click ve sonra return için gereken her şeyi yapar.


Başlangıç

Bir uygulamanın GEOS deskTOP ile çalıştırıldığı zaman yapması gereken ilk şey menülerini, ikonlarını tanımlamak ve klavye girdileri ve mouse'a basılacak durumlar için çağrılacak servis rutinlerini göstermektir. Aynı zamanda ekranı temizlemeli ve genel ekran görüntüsünü oluşturmak üzere gerek duyduğu grafik biçimleri çizmelidir.

Bir kullanıcı uygulamanın ikonuna deskTOP'tan click ederse GEOS Kernal sistemi bir default durumuna getirecek, uygulamayı yükleyecek, ve uygulamanın başlangıç rutinine doğru bir altrutine atlama işlemi gerçekleştirecektir. Başlangıç rutininin adresi uygulamanın Dosya Başı bloğunda gösterilmektedir, bunlara daha sonradan ayrıntılı olarak değineceğiz. Başlangıç rutini menüleri, ikonları ve başka eventleri tanımlamak için data tablolarına sahiptir ve tabloları okuyup eventleri gerçekleştirmek için GEOS rutinlerini çağırırlar. İlk ekranı da çizer. Tamamlandıktan sonra, başlangıç rutini GEOS Kernal'a döner. GEOS Kernal'daki ana program döngüsü şimdi çalışmaya başlamış ve menü seçimi, ikonlara basılması ve başka eventleri halletmek için hazır durumda olacaktır.

Herhangi bir event başlatılırsa, GEOS Kernal uygulama tarafından belirlenmiş servis rutinini çağırır. Başlangıç rutinleri gibi, her servis rutini daha sonra GEOS Kernal'a döner.


GEOS Kernal Yapısı

GEOS Kernal içinde çalışan iki düzey kod vardır. Bunları (MainLoop) Ana Döngü ve (InterruptLevel) Interrupt Düzeyidir.


Anadöngü

GEOS Kernal AnaDöngüsü uzun bir döngü kodudur. Eventleri tarayıp uygun uygulama servis rutinini çağırır. Devrini tamamladığı her sefer, AnaDöngü kodu kullanıcı girdilerinin olup olmadığına bakar ve anlamını belirler.

Örneğin bir mouse click edilmesi:

bir ikonun seçilmesi

bir menünün açılması

açık bir menüden bir maddenin seçilmesi

ya da, menü ve ikonların dışında, otherPress Vektörünün aktive edilmesi anlamlarına gelebilir.

Klavye girdisi:

Kullanıcı ya bir metin girdi ya da GEOS Kernal tarafından işlenecek bir diyalog kutusu için metin girildi.

Bir süreç devre arası ise:

bir uygulama servis rutinin çalıştırılması gerektiği anlamına gelir.

Bu girdiler verildikten sonra, AnaKod ne yapacağına karar verir. Örneğin bir menü olması durumunda

1. bir altmenünün indirilmesi gereği olup olmadığına, menü düzenleme seçeneklerinin gösterilip gösterilmeyeceğine ya da,

2. bir servis rutinini tetikleyen bir maddenin seçildiğine ve uygulama servis rutinin çalıştırılması gerektiğine karar verecektir.


InterruptDüzeyi

GEOS Kernal Interrupt (Kesilme) Düzeyi kodu C-64'te bir raster interrupt tarafından saniyede 60 kere tetiklenen 6510 IRQ interrupt ile uğraşır. Saniyenin altmışta birinde, işlemecinin AnaDöngü uygulaması durur, InterruptDüzeyi kodu çalıştırılır. InterruptDüzeyi saniyenin altmışta birinden çok daha çabuk bir sürede tamamlanır. Tüm yaptığı donanımı okumaktır. Böylelikle AnaDöngü saniyenin altmışta birinden daha uzun sürse bile (örneğin çok uzun uygulama servis rutinleri gibi) InterruptDüzeyinin donanımla zamanında etkileşimi sürecektir. Klavyede basılan tuşlar boşa gitmeyecektir.

InterruptDüzeyi makinenin o sıradaki durumunu save eder ve donanımla direkt olarak etkileşimi sürdürür. Eğer mouse düğmesine basılırsa, InterruptDüzeyi Ana Döngü tarafından kontrol edilen bir flag (bayrak) yerleştirir. AnaDöngü mouse'un bir ikon, menü ya da başka bir yerde olmasına göre ne yapılacağına karar verir. Böylece bir event dizisinin ilk kısmı her zaman InterruptDüzeyinde başlar.

C-64 programcıları kendi AnaDöngü ve InterruptDüzeyi kodlarını yazmaya alışıktırlar. Bu işin GEOS Kernal tarafından zaten yapılmış olduğunu kavramak önemlidir. GEOS Kernal programcının üzerine et koyduğu bir iskelet gibidir. GEOS uyumlu program uygulamaları eventleri ve onları halledecek servis rutinlerini tanımlamak için bir dizi tablodan oluşur. Kontrolün akış yapısı Kernal tarafından belirlenir.

Bir servis rutini her zaman AnaDöngüye döner. Her servis rutini ekranı yeniden oluşturabilir, tüm eventleri yeniden başlatabilir, sonra da AnaDöngüye dönebilir. Böylece uygulamanın tüm yeni fonksiyonlarıyla başka bir "ekrana" gitmesini sağlayan bir menü tanımlanabilir. Bu yeni menü ve ikonları başlatabilir. Menü kalemi servis rutini AnaDöngüye döndüğünde, AnaDöngü eventleri kollamaya devam edecektir, ama yalnızca yeni tanımlanmış olanlarını. Daha sonra da genellikle bir ikona basılıp basılmadığına bakılır. Ama bir menü seçildiyse, AnaDöngü ikon kontrolünü atlayacaktır. Çünkü aynı anda bir ikon ve bir menü seçilemez.

GEOS Kernal ayak işlerinin çoğunu yaparak programcının her seferinde Amerika'yı yeniden keşfetmek zorunda kalmasını önleyecektir. geoWrite, geoPaint ve deskTOP gibi kompleks program uygulamaları için bile bu durum geçerlidir. Programlamayı daha da kolaylaştırmak üzere, GEOS Kernal pek çok yardımcı rutinler sağlar (grafik, metin, disk). Bunlar uygulamaların geliştirilmesinde yardımcıdırlar.

Gelecek ay bu GEOS Kernal rutinlerinin nasıl çağrıldığı ve kullanıldığı konusuyla kursumuza devam edeceğiz.

kaynak: Teleteknik Commodore Dergisi, Sayı 49, Mart 1990, Sayfa 19-22

Teleteknik
01.03.1990

Keywords: C64, Commodore, GEOS, Yazılım, İşletim Sistemleri


C64 Projects Twitter Page

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