GEOS III

Merhaba, GEOS yazımız bu ay da tüm hızıyla devam ediyor. Ama geçen ay can sıkıcı temelleri bitirmiş olduğumuz için bu ay GEOS rutinlerine ve kullanılış şekillerine geçeceğiz. Her şeyden önce ilk bölümde adı geçen pseudo register kelimesinin manasını açıklamak istiyorum. Pseudo register'lar hem GEOS Kernal'ı hem de sizin programlarınız (uygulamalar ve benzerleri) tarafından kullanılan register'lara verilen addır. Yazıda bahsedilen kısımlardan anlayamadığınız bir şeyler olursa dergiye yazmaktan çekinmeyin. Bu sayede daha sağlıklı bir şekilde GEOS kullanımını öğrenebilirsiniz. Evet, gelelim bu ayın konusu olan ikonlar ve menülere. İkonlar GEOS işletim sisteminin temelini oluşturan aktif grafik elemanlarıdır ve genelde sprite boyutlarındadır. Ekranda bulunan ikonlar Kernal ana döngüsüne her girişte kontrol edilirler ve eğer üzerinde ateş tuşuna iki kere basılırsa sizin önceden belirttiğiniz belli bir rutine sıçrama yapılır. Bu rutinden geri dönmek için ise her zamanki gibi RTS komutunu kullanırsınız. Peki bu ikon denen grafik türünü kullanmanın ne yararı var? Bu ikonları bir kez sprite gibi tanımladıktan sonra aktive ederseniz daha sonra gereken her şeyi GEOS'unuza bırakabilirsiniz. Yani bundan sonra o ikonun koyduğunuz yerde aktif durumda kalacağından emin olabilirsiniz. Bu sayede programınız daha gerekli işlemlerle uğraşabilir. İkonları her tür GEOS programında görmeniz mümkündür. En basitinden DESKTOP programını da diskteki programları gösteren grafik blokları ve sağ üst köşedeki disk resmi birer ikondur. DİKKAT!!! GEOS her türlü uygulamanın en az bir ikonu olduğunu farz-

VEDAT HALLAÇ eder. Bu yüzden programınız ikon kullanmasa bile bir boş grafik bloğunu ekranın gereksiz bir yerine koyarsanız hem programınızın çalışmasını sağlarsınız, hem de yanlışlıkla ikonun çağırılması tehlikesinden kurtulursunuz.

İkonlar genelde uygulamanızın hazırlık ve düzenlenme rutinleri safhasında düzenlenir ve aktive edilir. Daha sonra kontrol tekrar GEOS kernal'a bırakılır. Hazırlık ve düzenlenme rutinlerinin adresi Header block'taki BAŞLANGIÇ ADRESİ byte'larında saklanır. Bizim burada göstereceğimiz örnek program önce ekranı temizlemek için JSR Rectangle komutunu kullanır (örneği ilk bölümde verilmişti), daha sonra da ikonları aktive eden Dolcons rutinine sıçrar ve kontrolü tekrar GEOS Kernal'ıma bırakır.

Yani programınız;

lda 2 ; sistem moti-
fini Yo 50 ka-
reli olarak
jsr SetPattern ; düzenle
jsri Rectangle  ; ekranı temiz-
le
. byte 0
byte 199
. word 0
. word 319
Ida testicons ; ikon datala-
rının saklan-
dığı
sta ; adresleri TO
pseudo-
register'ine
Ida testicons ; yerleştir
sta r0
jsr Dolcons ; ikonları akti-
ve et
rts ; Kernal'a dön

Evet, ana programınız bu uzunlukta. Fakat asıl zor olanı ikonların işlemlerini ayarlayan rutinleri yazmak. Deminki örnek programdaki testicons, ikonların datalarının saklandığı bellek alanının label'ıdır. Sizin ikonları aktive etmeniz için yapmanız gereken şey şimdi açıklayacağım özellikte bir ikon tablosu hazırlayarak bu tablonun başlangıç adresini GEOS Kernal'a bildirmektir. Bu yolla birden fazla ikonu tek komutla ekrana çıkartabilir ve al edeblirsiniz. Bu işi de Dolcons rutinine tablonun adresini r0 registerine koyduktan sonra sıçrayarak yapabilirsiniz.

İKON TABLOSUNUN DÜZENLENMESİ

İkon tablosunun en başındaki dört byte'ta kaç tane ikon tanımlanacağı ve ikonlar gösterildikten sonra imleç'in (GEOS'ta seçimlerinizi yapmanızı sağlayan, joystikle hareket ettirebildiğiniz ok işareti) hangi (x,y) koordinatlarında gösterileceği hakkında bilgi bulunur. Bundan sonra her ikon için sekiz byte olmak üzere ikonlar tanımlanır. Bu byte'lar sırasıyla şu bilgileri verir: 1. ve 2. byte: İkonun grafik datasının saklandığı alanın adresi. Burada adresin saklanması; C-64'ün standardı olan önce alçak (low) sonra yüksek (high) değerlikli byte'ların sıralanması şeklinde yapılır. Bu sayede aynı grafik datasını birden fazla ikon için de kullanabi iz. 3. byte: İkonun byte değeri olarak

X pozisyonu. İkonunuzun X koordinatı 0-319 arasında sadece belli X koordinatlarında bulunabilir. Yani ancak 0,8,16,... koordinatlı X pozi: yonlarında ikon bulundurabilirsiniz. Bu byte pozisyonunu bulmak için kı ordinatı sekize bölmeniz yeterlidir. Bu tür bir sistemin kullanılmasının her X koordinatını vermek için iki byte kullanmayı ve dolayısıyla bellek israfını önlemek. Buna karşılık Y koordinatı 0-199 arasında her değeri alabilir. koordinatı. Bu koordi- -199 arasında olabilir. 5. byte: İkonun X genişliği. Bu değer de X koordinatı gibi byte olarak verilmesi gerekir. X boyutunun kaç piksel olduğunu bulmak için bu değeri sekizle çarpmak gerekiyor. 6. byte: İkonun Y uzunluğu. Bu değer de Y koordinatı gibi kaç piksel uzunluğunda bir ikonunuz olacağını kontrol eder. 7. ve 8. byte'lar: İkon ateş tuşu ile aktive edildikten sonra sıçranacak rutinin adresi. Bu da C-64 standart sistemi ile saklanır. (Alçak byte önce, yüksek byte sonra.) (Tablo 1) 7. ve 8. byte'larda gösterilen rutinde istediğiniz her türlü işlemi yapabilirsiniz. İsterseniz tüm sistemi yeniden başlatabilirsiniz. (Desktop'u yeniden yükleyerek programınızın sona ermesini sağlamak ve benzeri amaçlarla.) Bu rutinlerde ikonunuzun üzerinde ateş tuşuna bir kez mi yoksa iki

TEST İKONLARI :

award JustForFunData ©

byte 3 e

ikonun sol üst köşesi y piksel pozisyonu servis rutini adet ikon data girişi daha ikonun negatifi görünür. Daha sonra bir menüden seçtiğiniz bir işlemle (mesela dosya hakkında bilgi alma - get info-) seçilen ikon üzerinde işlem yapabilirsiniz. GeoPAINT'de de herhangi bir işlemi seçtiğinizde o işlemin ikonu negatif olarak kalır. Yeni bir ikon seçildiğinde ise ilki normale döner ve ikincisinin negatifi gösterilir. Peki ikon-menü ve ikon-ikon arasındaki bu ilişkiler nasıl düzenleniyor? GEOS Kernel'ında iconSelFlag ($84B5 adresinde) adı verilen bir değişken bulunur. Bu değişkenin 6. ve 7. bitleri ikon seçiminde neler yapılacağını kontrol eder. Eğer bit 7 set edildiyse, aktive edildiği zaman ikon önce negatif, sonra normal olarak görünerek seçildiğini belli eder. Bu modu seçmek için $84B5 adresine vereceğiniz değeri $80 değeriyle OR'lamanız gerekmektedir. İkonlar aktive edildiği zaman ne kadar uzun süre negatif olarak kalacakları selectionFlash ($84B3) adresiyle ayarlanmaktadır. Bu adresin orijinal değeri 10'dur. Eğer bit 7 reset ve bit 6 set durumunda ise ikon seçildikten sonra devamlı olarak negatif olarak kalacaktır.

STADIUM

Boalt

Bowditch kez mi basıldığını kolaylıkla anlaya-

ili showCaseData :
iy” Bu
— |
yerini gösteren vektör) rutinleriyle söyle
kolaylaştırılmıştır. GEOS Kernal roH |
değeriyle bir Şer değe | $02,SFF,S9C,S87,S01,S8D,S81,$9E,SCI,SBB,S61,SAD,SB1,$B6,S99
dresinde $ byte
riyle de iki kez ateş tuşuna basıldığı- byte $19,$02,$FF

nı belirtir. rOL adresindeyse de kaç numaralı ikonun aktive edildiğini öğrenebilirsiniz. (Birinci ikonun değeri 0O'dır.) Bu özelliği tüm ikonlar için aynı rutini kullanan fakat değişki ikon seçimlerinde hafif farklı tepki- — | grafik sıralanışı :

ler gösteren programlarda kullanabi- 1. byte— ikonun byte olarak x genişliği (1.byte-3 olarak kabul edersek). lirsiniz. Rutininiz rOL adresindeki ikon numarasını kontrol ederek bu- x-1 x-2 Xx-3 na göre davranabilir. Bunlardan sonra da ikon grafik 2.byte 3.byte 4.byte tabloları hazırlanır. (Tablo 2) İkon grafikleri bit-map grafikler- S.byte ? 6.byte 7.byte dir. Bizim verdiğimiz örnektekiler 2 byte eninde (16 piksel) ve 16 piksel boyundadır. Grafik datasının hazır- Bizim örneğimizde (tablo-2) lanması ise şöyle yapılır:

; geri kalan 6 ik fik datalı geri kalan yarka ataları TABLO2

İlk byte'ınız ikonunuzun kaç byte eninde olduğunu belirtir. Grafik ta- xl Xx-2 nımını ise Tablo-3'te gösterildiği şe- 2.byte 3.byte kilde yapmanız gerekiyor. 4.byte 5.byte Burada bahsedilmeye değecek bir A metod DESKTOP ve GeoPAINT tarafından kullanılmaktadır. Eğer DESKTOP'ta bir ikonun üzerine ge- TABLO 3.

lip bir kez ateş tuşuna basarsanız, 46 tır (GeoPAİNT'teki gibi). Bunun için de $8B45 adresini $40 ile OR'lamanız gerekmektedir. Bu durumda ikon koordinatları, numarası veya gerekli herhangi bir bilgiyi saklamak rutininizin görevidir. Bu amaçla GEOS Kernal tarafından hiçbir işlem yapılmaz! Eğer $8B45 adresinde bit 7 ve bit 6 reset ise ikon aktive edildiğinde ikon üzerinde hiçbir değişiklik gözlenemez. GEOS Kernal'ında bizi ilgilendiren bir tek ikon rutini vardır. O da ikonları ekrana çıkararak hazır duruma getiren Dolcons'dır. Dolcons: Adres: $CI1S5a Fonksiyon: İkonları çizer ve aktive edilmeye hazır duruma getirir. Gerekli hazırlık: rO-ikon tablosunun adresi. Değiştirilen registerler: a,x,y,rO-r11 Açıklama: Dolcons ile ikon tablosunda düzenlenen ikonlar ekrana çıkartılır ve aktive edilir. Bu aşamadan sonra üzerinde ateş tuşuna basarak herhangi bir ikon seçilebilir. Bu durumda ikon tablosunda gösterilen servis rutinine sıçrama yapılır. Bir ikonu yok etmek için grafik data pointer'ını $00,00 yapmak gereklidir. Eğer ikon önceden aktive edilmişse ikonu ekrandan silmeniz de gerekmektedir. Eğer grafik pointer'leri baştan sıfırlanırsa, hiçbir zaman ekranda görünmezler. Fakat bir ikonu güvenilir olarak yok etmek istiyorsanız en iyi yol ekranı silip gerekli ikonları yeniden göstermektir. (Gereksiz ikonların grafik adreslerini 0000 yapmayı unutmayın.) GEOS Kernal, rutininize, rOH adresiyle ikonun üzerinde kaç kez ateş tuşuna basıldığını ve rOL adresiyle de kaç numaralı ikonun seçildiğini gönderir. Rutininizin başında bu adreslerin değerlerini kontrol ederek ikonla ilgili tüm bilgileri elde edebilirsiniz. Bu aylık da bu kadar. Gelecek ay GEOS'un en önemli iletişim araçlarından olan MENÜ'leri öğreneceğiz, hoşçakalın.

GEOS BELLEK HARİTASI BAYTSAYISI | ADRES SINIRLARI TARIMLAMA (Desimal) (Hexadesimal) ı 0000 6510 Data yön 2 0001 6510 no Geos ve application tarafından kullanılan zero-page 16 0070-007F Application için zero-page, 22-29 123 0080-00FA Kemal ve Basic için zero-page O0FC-DOFE Application için zero-page, 20-2) registerları 1 ROM ve Basic rutinleri tarafından kullanılır 256 6510 stack (yığın) 0200-03FF C64 Kumal ROM rutinleri tarafından kullanılan RAM 23552 Application program ve dataları 8000 6000-7F3F Arka plan ekran 192 Application RAM'ı 2560 BODO-BYEF GEOS ve değişken RAM'ı 512 Sprite resim dataları 1000 16 8 BFFR-BEFF Sprite göstergeleri 4096 9000-9FFF GEOS programı 8000 A000-BF3F Ön plan ekran RAM'ı veya BASICROM'u 192 BE40-BEFF GEOS tabloları 4288 Ak GEOS Kernal programı, sürekli bulunur 4096 DO00-DFFF Ak GEOS Kernal'ı veya 4k C64 VO alanı 7808 E000-FET4 8k GEOS Kernal'ı veya 8k C64 Kernal ROM'u 378 driver'i 6 FFFA-FFFE İRO ve RESET vektörleri

E 2 JOYSTICK

DİKKAT!

Bir önceki geos yazısında yeralan GEOS BELLEK HARİ-TASI elimizde olmayan sebeplerden dolayı yayınlanamamıştır, bu sayımızda yayınlıyoruz. (üst köşede) Özür diliyoruz.

Tabii ki 9?

TST

PHENOKTAS E