Program Döküm Eki sayı 1, sayfa 16
Sayfanın metni

Sayfa 16

masını söylemekle yetineceğiz. Şu kadarını belirtmek yeter:

1. Karakter tanımlarını içeren ROM bellek, normal olarak bilgisayara gözükmez; sadece VIC tarafından görülür. Bu ROM'daki bilgileri RAM'a taşımak için, önce 01 adresindeki 2 numaralı bit'i sıfırlayıp, karakter ROM'unu bilgisayarca görülebilir hale getirmemiz gerekir.

2. Kendi karakter tanımlarımızı koymak için RAM'daki en uygun bölge olarak, serbest belleğin sonuna yakın bir yer, yani 32768-34815 (onaltılı 8000-87FF) bölgesini seçeceğiz. Önce ROM'daki bilgileri buraya taşıyıp, sonra bunları keyfimizce değiştirebileceğiz.

3. VIC'in ulaşabileceği toplam bellek alanı sadece 16 Kbyte olduğundan, sistem ekran belleğini de 1024-2023'teki normal yerinden, yukarıdakine yakın bir yere, örneğin 34816-35815'e (onaltılı 8800-8BE7) taşımamız gerekecek. Bu taşıma işlemi, VIC'i kontrol eden 53272 no.lu bellek adresine bir-iki POKE'la hallolacak.

PROGRAMIN İŞLEYİŞİ

Program RUN edildiğinde, ilk önce sırasıyla iki karakter vermenizi isteyerek, bunların büyütülmüş şekillerini ekrandaki kutulara getirecek. Bu noktada, sol kutudaki birinci karakteri yeniden çizip değiştirmeniz mümkün.

Değiştirme sırasında, + tuşunu bir nokta eklemek, aralık çubuğu veya [DEL] tuşunu bir nokta silmek, [CRSR] tuşlarını da yer değiştirmek için kullanabilirsiniz.

f tuşu, ikinci kutudaki şekli birinci kutuya taşıyacaktır. Bu işlem, örneğin c yerine ç şeklini oluştururken kolaylık sağlamak için düşünülmüştür.

Çizim sırasında beğenmediğiniz bir şekli ilk durumuna geri döndürmek için [CLR/HOME], yeni bir karakteri seçmek için ise [SHIFT] [CLR/HOME] tuşlarını kullanabilirsiniz.

[RETURN] tuşu, sol kutuda o anda bulunan şekli, sol kutunun yanında görülen karakterin yerine belleğe geçirecektir.

Yaratttığınız yeni karakter setlerini saklamak veya kasetten tekrar yüklemek için s ve l tuşlarını kullanın. Tabii disketten çalışıyorsanız, 270 ve 300'üncü satırlardaki OPEN 2,1,2'yi OPEN 2,8,2 olarak değiştirmeniz gerekiyor.

q tuşu ile programdan çıkmak istediğinizde, normal karakter setine dönmek isteyip istemediğiniz sorulacaktır. Cevabınız hayır ise, programı silseniz bile, yeni karakter setiniz geçerliliğini koruyacak, başka programlarda da kullanılabilecektir.

PROGRAMIN AÇIKLAMASI

Basıc Bölümü

Satır 10; 800-814 satırlarda DATA olarak verilen üç makine dili alt-programı, 49152 ($C000) adresinden başlayarak belleğe POKE ET.

20: SYS komutu, makine dilindeki alt-programlar için GOSUB komutunun eşidir. 49152'deki ilk alt-programın açıklaması için aşağıya bakın. Ondan sonraki iki POKE, ekran rengini bej, yazı rengini siyah yapıyor.

30-50: ekranı sil, 8*8 iki kutu çiz.

60-70: IN değişkeni bir 'flag' olarak kullanılmıştır. IN=0 ise, yeniden tanımlama için iki yeni karakter istenmekte, IN=1 ise doğrudan doğruya menüye geçilmektedir.

80-99: Bir döngü içinde, c$(1) ve c$(2) adında iki karakter alınıyor. ASCII kodları 0-31 ve 128-160 arasında olan karakterler, RETURN, DELETE gibi kontrol karakterleri olduğundan kaale alınmıyor.

95-96: Basılan karakterin POKE kodunu buluyor. CHR$(147), 'CURSOR geri' karakteri. Sonra ç önemli bellek adresi: 648, ekranın bellekteki 256 byte'lık sayfaların kaçıncısından başladığını (normali 4, şimdi ise 136), 214, cursor'un bulunduğu satırı, 211 ise cursor'un bulunduğu sütunu içeriyor. Her sayfa 256, her satır da 40 byte olduğundan, cursor'un yeri = sayfa*256+satır*40+sütun. Bu adrese PEEK ettiğimizde, son bastığımız karakterin POKE değerini buluyoruz.

100-105: Bulunan POKE değerlerini 253 ($FD) adresinde saklayıp, 49269 ($C075)'teki, karakterlerin büyütülmüş şekillerini çizen ikinci makine dili alt-programı çalıştırıyor; karakterlerin normal boyu şekillerini kutuların sol yanına POKE et.

49279'a ($C07F) POKE'lar, doğruca makine dili programın içine müdahale ederek, büyütülmüş şekillerin ekranda nereye çıkacağını belirliyor (ikincisi ilkinden 13 hane sonra).

Burada POKE'un üç ayrı kullanımını görüyoruz. 253 adresi, bellekte boş bir hane. Buraya, makine dili programın kullanması için bir veri yerleştiriyoruz. 49152'den başlayan 257 byte'ı makine dili programımız için kullandık. Buraya bir POKE, doğrudan doğruya m.d. programı değiştirmek demek. 34816'dan başlayan 1000 byte ise ekran belleği; buraya POKE edilenler doğruca ekrana çıkıyor.

110-180: Menü. İlk başta [HOME] ve 10 tane CURSOR aşağı var.

182-188 biraz karışık. GET komutuyla bir tuşa basılmasını beklerken normal cursor kaybolduğundan, burada sahte bir cursor yaratıyoruz.

Önce pozisyon: [HOME], bir aşağı, üç sola.

185'te, 96'dakine benzer bir yöntemle bu pozisyonun adresini hesaplayıp CC değişkenine veriyoruz: 209-210'da, bulunulan satırın başının adresi, 211'de ise cursor sütunu var. Sonra CC'de o anda bulunan karakteri PP'de saklayıp, yerine 42 numaralı karakter olan yıldızı koyuyoruz. Herhangi bir tuşa basıldığında, yıldızın yerine tekrar eskiden o hanede bulunan PP karakteri geliyor.

190-220: Basılan tuş CURSOR aşağı, yukarı, geri, ileri veya space ise aynen bas. [DEL] (karakter no. 20) ise, bir geri, space, bir geri bas. + ise, [RVS ON], space, [RVS OFF], yani siyah bir kutu bas.

230: Basılan tuş CHR$(13), yani [RETURN] ise, ilk verdiğimiz karakterin POKE kodunu 253'te sakla, sol kutudaki büyütülmüş şekli yeni karakter tanımı olarak belleğe geçiren 49330'daki ($C0B2) üçüncü makine dili programa git, yeni baştan iki karakter almak üzere başa dön.

240-250: T'ye basılmışsa, [HOME], önüç kez CURSOR ileri, [DELETE] ve bir CURSOR aşağı bas. Bu işlemi 10 kez tekrarla. Böylece ilk on satırı önüçer hane sola kaydırıp, ikinci kutuyu birincisinin yerine taşı.

260-265: [HOME]'a basılmışsa (karakter 19) verilen karakterleri saklı tutarak, [CLR]'a basılmışsa (karakter 147) yeni iki karakter almak üzere başa dön.

270-320: SAVE ve LOAD. OPEN komutundaki ikinci rakam, teyp için 1, disk için 8 olacaktır. Yapılan 32768-34815 ($8000-87FF) bölgesindeki karakter tanımlarını sırasıyla bir dosyaya saklamak veya sırasıyla dosyadan okumaktır.

330: Basılan tuş, buraya kadar sayılan seçeneklerden hiçbiri değil ve Q da değilse, 185'e dönüp tekrar başka bir tuşa basılmasını bekle. Eğer Q ise, evet/hayır sorusunu sor, cevap evetse 49152'deki ilk m.d. programa gidip, normal karakter setini tekrar ROM'dan okut.

MAKİNE DİLİ BÖLÜMLER

Birinci alt-program: C000-C052

Bu rutin, ROM bellekteki karakter tanımlarını RAM'a taşıyor ve VIC'e, görüntü için gerekli bilgileri ROM'dan değil! RAM'dan almasını bildiriyor.

Klavyeyle gezinmek için ← ve → tuşları.