GEOS II
Retro bilgisayarGeçen ay basit bilgilerle başladığımız GEOS kursuna daha derinlere inerek devam ediyoruz. Bu ay program döküm ekinde bulunacağınız THE ULTIMATE GEOS CONVERTER programını yazmanız, bu kurstan yararlanmanız için şarttır. Program her ne kadar uzunsa da, bu, gözünüzü kurkutmasın çünkü GEOS'un size sunduğu kolaylıklardan yararlanmak için bu programa ihtiyacınız var. Program hakkında ayrıntılı bilgi PROGRAM DÖKÜM EKİ'ndeki açıklamalarda bulunmaktadır. Bu aydan itibaren GEOS programlarını SUPER AS-SEMBLER formatında değil, normal bir assembler formatında vereceğiz. Bunun sebebi SUPER ASSEMB-LER'ın yapısının GEOS programlarını yazmaya uygun olmaması Bu ayki yazımızda size bir GEOS application'ı tasatımlamanız için gerekli temel bilgileri vereceğim. Bir application tasarımını üç ana başlığa ayırabilirsiniz: 1. Event'leri (olayları) seçin: Programınızda hangi tip menüler, ikonlar, vb. kullanacağınıza karar verin. (Daha sonraki yazılarımızda bahsedilecek olan ve özel bir event türü olan zaman tabanlı işlemler de buna dahildir.) 2. Event'leri tanımlayın: Event'i tanımlayan tabloları kurun ve vektörleri yükleyin. Örneğin menü yapıları basit tablo yapılarıyla tanımlanırlar.
Bu ayki sayımızda size bir GEOS application'ı tasarlamanız için gerekli temel bilgileri vereceğiz. Ayrıca program döküm ekinde bundan sonra sık sık kullanacağınız bir yardımcı program yer almakta.
3. Rutinleri yazın: Ana döngü tarafından çağırılacak ve sizin event'leriniz tarafından çalıştırılacak olan rutinleri yazın. Bu noktaya kadar, amacımız GEOS'la programlamanın neye benzediğini göstermekti. GEOS, application'ınızın bir prototipini kolaylıkla hazırlamanızı sağlar; çünkü programınızı başa çıkması kolay olan basit tanım tablolarına ve event hizmet rutinlerine ayırır. Event'leri programlamaya başlamadan önce kısa bir şekilde GEOS'un donanımını tartışacağız: kullandığı grafik modu, bellek düzeni ve bank-switch register'larının nasıl ayarlandığı. Aslında GEOS'ta program yazıp da grafik modları veya bank-switch hakkında hiçbir şey bilmemeniz olası, yani bir C64'çüyseniz, şimdiki bölüm size zor gelebilir ama bu sizi üzmesin. Bu sütunlarda sizin, (TELETEKNİK değişikliği silen UNDO komutunun kullanılması için kullanılır. Bu kopyalama özelliğini destekleyen KERNAL rutinleri (adresleri gelecek sayıda vereceğim) RecoverAllMenus, RecoverLine, RecoverMenu ve RecoverRectangle'dır. Bu rutinleri de grafik ve menü bölümlerinde işleyeceğiz. Eğer tampon bölgeye ayrılan 8000 baytı da kullanmak istiyorsanız, ekranın otomatik olarak bu bölgeye kopyalanması GEOS KERNAL tarafından engellenebilir. Bu sayede kullanabileceğiniz bellek 8000 bayt artar. Bu da grafik bölümünde ayrıntılı olarak ele alınacak konulardan biridir.
BELLEK HARİTASI:
GEOS BELLEK HARİTASI tablomuzda GEOS KER-NAL tarafından kullanılan ve sizin kullanımınıza açık olan bölgeleri görebilirsiniz. Bu tabloya göre application'ınız $8400-$5FFF arasında bulunan 22K'lık alanı kullanabilir. Buna tampon bölgede bulunan 8K'lık bölgeyi de eklersek sizin kullanımıza tam 30K bırakılmış demektir. Bu miktar ilk bakışta az görünebilir ama GEOS KER-NAL'ının menü, ikon ve diyolog kutularıyla ilgili tüm işlemleri yüklenmesi sizin yazmanız gereken program miktarını oldukça azaltmaktadır. Bundan ayrı olarak GE-OS'un diske ulaşım hızının yüksek oluşu sayesinde yeni bir dosya türü ile bellek sorununuz tamamen ortadan kalkıyor, Adı VLIR olan bu dosya türü ile çok uzun ve gelişmiş programları yazmanız olanaklı hale geliyor. VLIR dosyaları da daha sonraki bölümlerimizde ayrıntılarıyla anlatacağım konular arasında.
yilerinden elde edebileceğiniz) PROGRAMCININ EL Kİ-TABI adlı kitabı okuduğunuz veya grafik hakkında yeterli bilgiye sahip olduğunuz varsayılmıştır. Sizin GEOS bellek haritasını değiştirmek isteyeceğinizi sanmıyorum ama bazen sevdiğiniz bir C64 KERNAL rutinine veya BASIC ROM'una sıçrayıp sonra GEOS'un normal işletimine dönmek isteyebilirsiniz. Birazdan GEOS'un nor- me get mal işletimine dönmek isteyebilirsiniz. Birazdan GEOS'- un normal işletimine dönmek isteyebilirsiniz. Birazdan b. GEOS'un “fiziksel” bir tanımını yapacağım. Yani programlandığı grafik modu, bellekte nerelere yerleşirildiği, 2 hangi GEOS KERNAL verisyonunun sizde bulunduğu, RR ed donanım kontrol register'inin değeri ve KERNAL ile BA-SIC ROM rutinlerini çağırmak için bunu değiştireceğiniz. I E (0) YÜKSEK ÇÖZÜNÜRLÜK ve BIT-MAP MODU: A Y |
GEOS C64'ün 320 x 200'lük en yüksek çözünürlük mo-
'dunu kullanır. Bu modda 8000 bayt (200 satır çizgisi, çizgi 5,25 TE AC-Extern Disk Drive başına 40 bayt) ekranı görüntülemek için kullanılır. Bu moda yabancıysanız PROGRAMCININ EL — 40) / 80 Booter 450 000 TL nda bulabileceğiniz Grafik modları hakkındaki bölümleri okuyun.
2 MB RAM'ini kolaylaştırmak için bellekte normal ekranın bir kopyasını bulunduran 8000 baytlık bir tampon bölge bulunur. KERNAL'da tampon bölgeyi ekrana ya da tersini yapabilecek hazır rutinler bulunmaktadır. 512 KB RAM 2 TL. *KDV Hariç Bu sayede, bir menü veya konuşma kutusu açıldığında ve application'ınızın ekranının üzerine yazdığında ekran kaybı engellenmiş olur. Yani menü ve konuşma kutuları, tampon bölgeyi ekrana transfer ederek application'ın kendi ekranını yeniden yaratması (ki bu bazen imkânsızdır) gereğini ortadan kaldırmış olur. Bu kopyalama rutinleri application tarafından da kullanılabilir tabii ki. Örneğin geoPAINT bu özelliği son de-
Application kodunun yeri ve RAM GEOS bellek haritası hakkında çoğu programlayıcıya yeterlidir. RAM dört ayrı bölgede bulunmaktadır. Buna applicatin bölgesinden ayıracağınız yerleri de ekleyebilirsiniz tabii. 1. rO-r15 pseudo registerleri. 2. arası. Bu bölge ne C64 ne de GEOS KERNAL'ı tarafından kullanılır ve application'larınız için ideal bölgelerdir. Bundan sonra bunlara a0 ve al pseudo registerleri diyeceğiz. 3. $0070-$007F arası. Bu bilgilere de a2-a9 pseudo registerleri adını vereceğiz. 4. $7F40-$7FFF arası. Her ne kadar zero-pageide değilse de programlarınız için uygun bir değişken saklama alanıdır. Bellek hakkında daha ayrıntılı bilgi istiyorsanız bellek haritasını inceleyin. Bütün giriş/çıkışlar ve interrupt kontrolu GEOS tarafından yapılmaktadır. Kernal rutinleri kullanım açısından çok daha kolaydır ve programınız onları kullansa da kullanmasa da bellekte yer kaplarlar.
GEOS KERNAL VERİSYON BYTE'LARI:
Elinizde GEOS'un hangi verisyonunu buludurduğunuzu anlamanızı sağlayacak birçok byte bulunar GEOS KERNAL 'ında. $c006 adresinde “GEOS BOOT” yazısını görürüz. Bu yazı sayesinde programınızın GEOS tarafından çağırılıp çağırılmadığını öğrenebilirsiniz. Rutinlerinde GEOS KERNAL rutinlerini kullanmayacak olanlar $C000-$CO7F arası dışındaki tüm kernal'ı kullanabilirler. Fakat bu bellek alanı tekrar GE- 49 OS KERNAL'ı yüklemenizi sağlayacağı için buraya dokunmamalısınız. “GEOS BOOT” yazısını verisyon numarasını içeren iki rakam takip eder. GEOS V1.3'den sonra bu byte'- ların arkasına ek olarak yeni bilgiler içeren byte'lar konmuştur. İlk olarak bir dil byte'ı bulunur. Bunun hemen arkasında daha ileride eklemek üzere üç byte'lik boşluk bulunur. Bunların şu anki değeri $00'dır. GEOS verisyon byte'ları hakkında daha ayrıntılı bilgiyi ilgili tabloyu inceleyerek elde edebilirsiniz. Bu verisyon byte'larından programınızın hangi GEÖS verisyonu tarafından yüklendiği öğrenebilir ve bu verisyonla uyumlu olup, olmadığına karar verebilirsiniz.
KERNAL VERİSYON BYTE'LARI:
.psect $c000; kernal programı
$c000'dan başlar BootGEOS:
jmp GEOS'u
yeniden yükler ilerde çıkacak
yeni GEOS verisyonlarında
0-BootGEOS değişse bile
BootGEOS'un yeri değiş-
meyecektir ve c000-c02f
arası korunduğu süre-
ce jmp BootGEOS'-
la GEOS'u boot
edebilirsiniz.
ResetHandle:
vektör;
GEOS Ker-
nal'ı tarafın-
dan kulla-
nılan bir
vektördür.
BootFilename: .byte “GEOS BOOT”; $006'da bulunur. Bu yazı sayesinde programınızın GEOS'tan yüklendiğini anlarsınız. VERSİYON: byte $13; GEOS verisyonunu gösteren byte. Örnekte verisyon — 1.3. YABANCI DİL BYTE'I: > DİLBYTE'I; İNGİLİZCE ; ALMANCA ; FRANSIZCA ; HOLLANDACA ; İTALYANCA ; İSVEÇÇE ; İSPANYOLCA ; PORTEKİZCE
GEOS KERNAL'ı $Bf40 ve yukarısına yerleşmiştir. Bu sayede altında kalan RAM bölgesini kendi amaçları için kullanılmıştır. GEOS'un normal çalışması sırasına tüm ROM'lar ve $DO00-$DFFF kaldırılmış durumdadır. Seçilen bank $0001 adresi tarafından ve kartuş çıkışında bulunan iki pin tarafından kontrol edilir. Bu iki pin'in değerini değiştiremeyeceğinize göre bank değiştirmek için yalnızca $0001 adresini kullanacağız. Eğer programınızda giriş/çıkış bölgesine veya BASIC ve KERNAL ROM'larına GEOS kernal rutinlerinde ayrılarak ulaşmak istiyorsanız. İki GEOS KERNAL rutinini kullanmanız gerekir: InitForlO ve DoneWithlO. GE-OS'a, birinci rutinle giriş/giriş bölgesine ulaşmak istediğinizi. İkincisiyle de giriş/çıkış'la işinizin bittiğini iletirseniz. Bu rutinler ayrıca bellek haritasını değiştirme ve interruptlar ile (gerektiğinde) sprite'lerin yok edilmesi işleriyle de Bank değiştirme ile daha ayrıntılı bilgiyi de PROG-RAMCININ EL KİTABI'nda KERNAL rutinlerini anlatan bölümün hemen öncesinde bulabilirsiniz.
ASSEMBLER KOMUTLARI:
Bundan sonra kullanacağımız assembler'in SUPE-RASS'le uyumlu olmadığını söylemiştim. Ancak burada verilen yerine değerlerini koyarsanız GE-OS rutinleri için SUPER-ASS'i de kullanabilirsiniz. Fakat size tavsiyem daha iyi bir assembler bulmanız. Kullanacağımız assembler'da şu şekilde sınıflandırılacak: *NEWPATTERN” gibi tüm harfler büyük harf olursa bahsedilen tek byte'lık bir GEOS sabitidir. Bunların yerine — $NN kullanabilirsiniz. *mobprior” şeklinde tüm harfler küçük olarak yazılmışsa LABEL iki byte'lık bir c64 sstem vektörüdür ve yerine SNNNN kulanılabilir. *windowTop” gibi ilk kelime küçük, ikinci kelime büyük harfle başlarsa bu bir GEOS sistem vektörüdür ve yerine yine $NNNN kulanılabilir. *BootGeos' gibi bütün kelimeler büyük harfle başlarsa bahsedilen label bir GEOS KERNAL rutindir ve yerine $NNNN kulanılabilir. Yukarıdaki NN'ler bir byte yerine geçmektedir. Assembler'ımızın özel komutları şöyle sıralanabilir: 1) *-$NNNN: Programın başlangıç adresi. 2) .byte $NN, $MM,... : $SNN, SMM değerlerini sırayla belleğe yazar. 3) $NNMM,$KKLL.,,... : SMM, $NN, $LL, $KK değerlerini belleğe yazar.
4) .block $NNNN : $NNNN kadar boş byte bırakır. 5) .if koşul : Koşul doğruysa, .ELSE veya .ENDIF'e kadar olan bölgeyi assemble eder. 6) .else : Belirtilen koşul yanlışsa .ENDIF'e kadar olan bölgeyi assemble eder. 7) .endif : .if ve .else komutlarının sonunu belirtir. Artık bir program yazabilecek tüm temele sahipsiniz. Bu ay Program Doküman Eki'nde yayınlanan ilgili programları yazmanız, daha sonra yayınlayacağımız örnek programları GEOS'ta çalıştırabilmeniz için gereklidir. Bu yüzden programın uzunluğu sizi yıldırmasın. Haydi GEOS'çular, klavye başına. Gelecek ay, programların temelini oluşturan ikon ve menülerin kullanımını öğrenerek devam edeceğiz yazımıza. Şimdilik hoşçakalın.
mam mr
İŞTE OLAY!
TST