Bu sayfadaki yazılar
Sayfanın metni
Sayfa 59
RAM'ı okuyup ona yazacaktır. Eğer karakter ROM'unu okumak ve diğer ROM'a yazmak istersek, 11. sayımızda da belirttiğimiz gibi, 1 numaralı adres ile oynayıp bilgisayarımızın RAM konfigürasyonunu değiştirmemiz gerekiyor. Fakat bunu yaptığımızda da, makine dili programlarının daha iyi bileceği interrupt işleminin oluşmaması gerekiyor. Dolayısıyla, önce bilgisayara interrupt'ları durdurmasını, sonra da konfigürasyonu değiştirmesini söylemeliyiz. İşte bu satırda, belirttiğimiz iki işlem, iki POKE komutu ile yapılıyor. Ancak bu komutu verdikten sonra, bilgisayarı hiçbir şekilde rahatsız edemeyiz. Ne klavyeden bir şey girebiliriz, ne de programdan ekrana bir şey yazdırabiliriz. RUN/STOP da bir işe yaramayacaktır. Bu POKE işlemlerinden sonra, bir sonraki satırdaki döngüyü hızlandırmak için, kopyalanacak bölgenin başlangıç ve bitiş adreslerini birer değişkene yüklüyoruz.
70: İşte burada da, aynı adreslerde üst üste bulunan karakter ROM'undaki bilgi okunup, hemen altındaki RAM'a yazılıyor. Bu işlemin yürüyüşünü ekranda izlemek isterseniz, BANK SWITCH programını çalıştırmadan önce LIST edin.
80: 60. satırdaki POKE komutlarıyla kilitlediğimiz bilgisayarımızı bu satırda tam tersi işlemi yaparak normale döndürüyoruz. Gerek 60. satırda, gerekse bu satırdaki POKE komutları devamlı kullanılan ve kalıp halinde bilinmesi yeterli olan komutlardır.
Artık, yeni BANK'ınız emrinize hazırdır. Tepe tepe kullanın. RUN-STOP/RESTORE ve ekran editörü hakkında söylediklerimizi de unutmayın. Ayrıca, sprite göstergeçleri de videoram ile birlikte kaymış durumdadır; dikkatinizi çekeriz. Şimdi sıra geldi, KARAKTER EDİTÖRÜ programına. Bu program ile, 512 karakterlik karakter setinin, her elemanını değiştirme imkânına sahipsiniz. Kullanımını BANK 0 ile sınırladık. Bu nedenle karakter setinizi ancak 0-16384 adresleri arasında konumlayabilirsiniz. Hattâ bu iş pratikte 8192-16384 arası oluyor, çünkü geri kalan kısmı ya Commodore 64, ya da programımız kullanıyor. Ancak bu pek büyük bir sorun değil. Eğer bir başka BANK kullanmak istiyorsanız, programımız yardımıyla biçimlendireceğiniz yeni karakterleri makine dili monitörü (11. sayıya bakın) yardımıyla veya FOR...NEXT döngüsü içinde gerçek yerine kaydırabilirsiniz. Programımız, belirttiğimiz gibi 8192-16384 arasında uygun bir adreste (2048'e bölünebilen, 2K'lık adımları hatırlayın) başladığı belirtilen karakter setinin değiştirilmesini yapıyor. Bu işlem sırasında, karakterleri sağa, sola, yukarı, aşağı kaydırmak; saat yönünde ve ters yönde döndürmek; negatif veya normal hale getirmek; X veya Y düzlemine göre simetriğini almak; bir karakterin tanımlamasından yararlanıp bir başka karakter tanımlamak; karakter setlerinizi kaydedip geri yüklemek; ROM'daki orijinal karakterlerin bir kopyasını çalışma alanınıza çıkarmak; yeni karakterlerinizi ekranda görebilmek gibi olanaklardan yararlanabileceksiniz. Tüm bu işlemler ekrandaki bir menüde size gösterilecektir. Tüm işlemler, bir tuşa basmakla hazır olacaktır. Şimdi işlemleri sırasıyla açıklayalım:
Programı ilk başlattığınızda, size karakter setinin başlangıç adresi sorulacaktır. Ya o anda karakter setinizin olduğu adresi veya ilerde oluşturacağınız setin başlamasını istediğiniz adresi yazın. Eğer adresiniz 8192-16384 arasında değilse veya 2048'e tam bölünmüyorsa, soru tekrarlanacaktır. Soruyu cevaplayınca, çalışma ekranı karşınıza çıkacaktır. Sol üst köşede 0 numaralı karakteri oluşturan noktalar büyütülmüş şekilde görünecektir. Sağ tarafta da menü görünecektir. F1 tuşu ile 0-511 arasında belirleyeceğiniz herhangi bir karakterin tanımlaması çalışma alanına taşınacaktır. F7 tuşu ile bu dizayn üzerinde değişiklik yapabilirsiniz. Ekranda da göreceğiniz gibi, nokta olması gereken yerlere çarpı işareti koyarken, boş kalması gereken yerlere de boşluk koymanız gerekiyor. Dizayn işlemi bitince RETURN tuşuna basın. Ancak bu işlem, hafızadaki karakter tanımlamasını değiştirmeyecektir. Bunu yapmak için, F2 tuşuna basıp ekranda görünen dizaynı hangi karaktere vereceğinizi, kodunu vererek belirtmeniz gerekiyor. O an üzerinde çalıştığınız karakterin kodu, ekranda devamlı görünecektir. Eğer o kodu verirseniz, şeklini değiştirdiğiniz karakterin, RAM'daki tanımını da değiştirmiş olursunuz. Ancak burada başka bir karakter kodu verirseniz, ekranda gördüğünüz dizayn, kodunu verdiğiniz karakterin tanımlamasına çevrilecektir. Bu yöntemle, örneğin C harfinin tanımından faydalanarak, başka bir karakter kodunun tanımını Ç harfi haline getirebilirsiniz. F3, F4, F5, F6 veya X, Y, * tuşları ile dizaynı yaptığınız karakterlerin döndürülmesi ve simetriğinin alınmasını sağlarsınız. Bu işlemi, F7'ye basmadan veya RETURN ile buradan çıktıktan sonra yapmanız gerekir. Unutmayın, F2 ile kaydetmediğiniz sürece hafızadaki gerçek tanımlama değişmeyecektir. Böylece, emin olmadan karakterleri değiştirme tehlikesi ortadan kalkıyor. F8 ile, karakter dizaynımızı negatif hale getirebiliyoruz. Böylece, dizaynını yapıp RAM'a kaydettiğimiz bir karakterin negatifini de ayrıca dizayn etmek zahmetinden kurtuluyoruz. F8 ile negatif hale getirip, negatif karakterin olması gereken yere F2 ile göndermemiz yeterli. Normal ve negatif (reverse) karakterlerin kodları arasında 128 fark olduğunu unutmayın. Herhangi bir zamanda C tuşuna basarak, yeni karakter setinizi ekranda görebilirsiniz. Bu sırada SHIFT ve Commodore tuşlarına basarsanız diğer karakter setini de görebilirsiniz (0-255 ve 256-511 arası). Sakın bu sırada RUN/STOP'a basmayın. Herhangi bir tuşa basarak ana menüye dönebilirsiniz. Eğer 900. satıra bakarsanız, yazımızın başlarında söz ettiğimiz eski ve yeni model Commodore 64'ler arasındaki fark nedeniyle kullandığımız hileyi görebilirsiniz. Büyüktür ve küçüktür işaretlerine SHIFT ile veya SHIFT'siz basarak, karakter kodu bir önce veya bir sonra olan karakter tanımlarını çalışma alanına getirebilirsiniz. Eğer 0 numaradayken bir öncekini isterseniz 511 numara, 511'deyken de bir sonrakini isterseniz 0 numara gelecektir. A harfine basarak, yeni bir başlangıç adresi verebilir, böylece aynı anda iki değişik karakter seti düzenleyebilirsiniz. O harfi ise, o sırada çalıştığınız bellek üzerine ROM'daki orijinal karakter tanımlamalarını kopyalayacaktır. L ve S ile, karakter setinizi LOAD veya SAVE edebilirsiniz. Kayıt ve yükleme işlemi otomatik olarak, KARAKTER EDİTÖRÜ programını yüklemek için kullandığınız kayıt cihazı ile yapılacaktır. Bunun nasıl yapıldığını 1150-1250 arası satırlarda görebilirsiniz. 186 numaralı adreste, en son kullanılan kayıt cihazının numarası saklanır. Buradaki sayıyı POKE ile değiştirip başka bir kayıt aracı da kullanabilirsiniz. LOAD işlemi bitince program kendiliğinden yeniden başlayıp, başlangıç adresini soracaktır. Yüklediğiniz karakter setinin başlangıç adresini verip işlemlerinize devam edebilirsiniz. 1220-1240 arasına bakarak, belli bir hafıza blokunun nasıl SAVE edildiğini görebilirsiniz. 1240'daki SYS'nin biçimi sizi şaşırtmasın. Bir sistem rutinini kullanmak gibi bir hile yapınca, böyle gariplikler oluşabiliyor. Gördüğünüz gibi 1220-1230 arasında karakter setimizin başlangıç ve bitiş adreslerini büyük/küçük byte'larına ayırıp bazı adreslere yerleştirip, iki SYS komutu ile o bölümü SAVE ediyoruz. Q tuşu ile programdan çıkmanız mümkün. RUN/STOP'dan daha estetik bir yöntem... Son olarak da, karakter tanımlamalarını dört yöne nasıl kaydırdığımıza bakalım. Tıpkı CRSR tuşları ile cursor'u oynatır gibi, gene CRSR tuşlarını oynatarak çalışma alanındaki karakter tanımını değişik yönlere kaydırmanız mümkün. Ancak karakterin bir kısmı bir kenardan dışarı taşarsa, tekrar geri çektiğinizde kaybolmuş olacaktır. Dikkatli olun!.. Tüm program boyunca, klavyedeki her tuş, otomatik kendini tekrarlama fonksiyonuna sahiptir. Örneğin çarpı tuşuna devamlı basınca, kendiliğinden tekrarlanmaya başlayacaktır. Programımız menü tekniği ile yazıldığı ve tuş kontrolleri düz bir çizgi şeklinde aşağı inen IF komutları ile kontrol edildiği için, kendi rutinlerinizi programa eklemeniz pek zor olmasa gerek. Ayrıca programda, işlemleri hızlandırmak için, sayılar yerine sayılarla tanımlanmış değişkenler kullanıldığına dikkatinizi çekeriz. Gene bu nedenle, sıfır yerine nokta kullanılmıştır. İşte bu kadar... Artık VIC'in içini dışını öğrendiniz. Bundan önce yayınlanmış ve bundan sonra da yayınlanacak grafik ve oyun programlarını inceleyerek, VIC üzerindeki hâkimiyetinizi çok daha profesyonel bir seviyeye çıkartabilirsiniz. Hepinize bu yolda başarılar dileriz.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 58
10: Bu programımızda, bilgisayarın 3 numaralı BANK'ını kullanmak istiyoruz. Eğer dizimizin dördüncü bölümünü hatırlarsanız, videoram'ı bu 16K içinde 16 değişik yere koyabiliyor ve bunları 0-15 arası numaralandırabiliyorduk. Biz, üçüncü BANK için de 3 numaralı bölgeyi ekran (videoram) olarak seçiyoruz. Aynı şekilde grafik sayfası olarak da, 16K'nın ikinci yarısını seçiyoruz. Ancak bunu programın içinde kullanmadık. Çünkü, bunun kullanılması, karakter setinin gösteriminde zorluklara yol açardı. Biliyorsunuz, VIC'in 24. yazmaçının üçüncü bit'i, hem grafik, hem de karakter üreteci için önem taşıyor. Biz bu programda karakter setinin kaymasını göstermenin daha önemli olduğunu düşünüyoruz. Karakter setini de, 2K'lık adımlarla kaydırabildiğimizi göz önüne alarak, 2 numaralı bölgeyi karakter üretecinin başlangıç adresi olarak saptıyoruz. Tüm bu değerleri hesaplarsak, başlangıç adresleri şu şekilde olacaktır:
BANK: 3 ($C000) EKRAN: BANK * 3*1024 = 52224 KARAKTER: ($CC00)
3*16*1024 = 49152
BANK 2*2048 = 53248 ($D000) 20: Önce, CIA2'nin (56576 $DD00) alt iki bit'i ile oynayarak, belirtilen BANK'ı seçiyoruz. Asıl BANK SWITCHING işlemi budur. Bundan sonra yaptıklarımız, Commodore 64'ü kendisine getirmek için yapılmaktadır.
30: Şimdi de, VIC'in 24 numaralı yazmaçının üst dört bit'ini değiştirerek ekran adresini saptıyoruz.
40: Ve en son olarak da, gene 24. yazmaçın bu sefer 1-3 arası bit'lerini değiştirerek, karakter setinin yerini VIC'e bildiriyoruz. Son üç satır boyunca yaptığımız işlemler, daha önce 12. sayımızda formül olarak verdiğimiz işlemlerdi.
50: Ancak, bu işlemi ilk kez görüyorsunuz. Gerçi daha önce de ekran editörünün öneminden bahsetmiştik, ama sadece bir iki kelimeyle. Bu editör, bizim tüm ekranı bir çalışma sahası olarak kullanmamızı sağlayan (full screen editor), COMMODORE 64'ü diğer bilgisayarlardan (çoğunda line editor var) ayıran en önemli özelliklerden biridir. Ancak, çalışmalarını sürdürebilmek için, ekran hafızasının (videoram) nerede olduğunu bilmesi gerekir. Bu nedenle, videoram'ın yeni adresini 256'ya bölerek elde ettiğimiz sonucu, editörümüzün bu bilgiyi almak için kullandığı 648 adresine yerleştiriyoruz. Normalde burada 4 vardır (1024/256=4). Eğer BANK SWITCH programını çalıştırdıktan sonra RUN-STOP/RESTORE yaparsanız, ekrana yazı yazamaz duruma gelirsiniz. Ancak, ekranda görmeden de olsa, POKE 648,4 yaparsanız, çalışmanıza devam edebilirsiniz. Bunun nedeni, bu tuş kombinasyonu ile VIC'in açılış durumuna gelmesi ve BANK 0'ı kullanmaya başlaması, ama editörün olduğu gibi kalması. 55: Ekran hafızasını değiştirdiğimize göre, 1024-2047 arasındaki ekranda kalan bilgileri yeni ekrana taşımakta fayda var. Bu satırdaki döngü, tamamen bu işlemi yapıyor. VİDEO içinde, yeni videoram başlangıç adresi hesaplanıyor. Ancak bu sırada ekranda saçma sapan karakterler göreceksiniz. Çünkü daha karakter setini tanımlamadık. Gerçi başlangıç adresini VIC'e bildirdik ama, bu adresten sonra gelen 4K boyunca tamamen tesadüfi değerlere sahip byte'lar duruyor. Zavallı VIC de bunları karakter tanımlaması olarak görüp, bize bu byte'ları seyrettiriyor. Öyleyse, hemen ROM'daki tanımlamaların bir kopyasını da 53248'den sonraya çıkartmalıyız! Sakın karakter ROM'unun da 53248'den başlaması sizi şaşırtmasın. BANK değiştirdiğimiz için COMMODORE 64, karakter tanımlamalarını bizim belirttiğimiz adresteki RAM'dan okumak isteyecektir. Yani aynı adreslerdeki ROM'un bilgilerini RAM'a aktarmalıyız. 60: Ancak bildiğiniz gibi, $D000-$DFFF arası, bir ROM ve iki RAM taşımaktadır. Normal koşullarda yapılan PEEK ve POKE'lar, giriş/çıkış (Input/Output) adını verdiğimiz