C 128 için Püf Noktaları (2)
Retro bilgisayarPÜFNOKTASI
MEHMET ULUSEL Püf Noktaları (2)
Bu yazımızda C128'in yanında C-64 ile de ilgili bilgiler vermeye çalışacağız, bundan başka ara sıra bazı oyunlarda size kolaylık sağlayabilecek veya size bir oyunda sonsuz hak verdirecek POKE'lar öğreteceğiz. C128 ile ilgili bir adresin mümkünse C-64'teki karşılığı da gösterilecektir. İlk yazımızda C-128'de VIC'ten yani 40-kolon modundan bahsetmiştik, şimdi sıra 80-kolon moduna geldi, bu yazımızda VDC 8563 (VIDEO DISPLAY CONTROLLER) işlemcisinin özelliklerini tanıyacağız. Bu işlemciye nasıl girebiliriz, normal karakterleri nasıl iki kat büyütebiliriz gibi ilginç şeyler göreceğiz. Bildiğiniz gibi C128'i bir iş bilgisayarı olarak kullanabilmemiz mümkün, makineye bir profesyonel özelliği kazandıran 80-kolon'luk gösterim yeteneğidir. Bu arada şunu hatırlatalım ki bu işlemci sadece RGB monitörlerde görüntü sağlamaktadır. Bu yüzden bu modda görüntü elde edebilmek için C1901 tipinde olduğu gibi RGB çıkışı olan bir monitör kullanmanız gerekmektedir. Şimdi alışmış olduğumuz ortamın dışına çıkıyoruz, bildiğimiz gibi 40-kolon modda ekran ve renk RAM'i normal RAM'de idi ve normal PEEK ve POKE komutunu kullanarak bu işlemciyi istediğimiz şekilde kullanabiliyorduk. Fakat 80-kolonda bu rahata sahip değiliz; çünkü 80-kolonun RAM'i normal RAM'de değildir ve normal PEEK ve POKE komutunu kullanamazsınız. Tak üzülmenize gerek yok, çünkü size 80-kolonda kullanılan işlemciyi nasıl kullanacağınızı göstereceğiz. Aşağıda işlemcinin yazmaçlarının bir listesi yer almaktadır.
00 Okuma: Durum, LP, VBlank... Yazma: İstenilen yazmacın 0-5 Biti 01 Satır başına karakter sayısı 02 Ekran penceresini kaydırma (yatay/karakter olarak) 03 Ekran penceresini kaydırma (dikey/satır olarak) 04 Dikey senkronize 05 Dikey toplam 06 Ekran sayfasında yer alan satır sayısı 07 Ekran penceresini kaydırma (dikey/satır olarak) 08 Interface modu 09 Matriks yazmacı - dikey 10 Kursor modu - taramaya başlama 11 Taramayı durdurma 12 Ekran hafızasının başlama adresi - yüksek byte 13 Ekran hafızasının başlama adresi - alçak byte 14 Kursor'un yeri - yüksek byte 15 Kursor'un yeri - alçak byte 16 Light Pen dikey 17 Light Pen yatay 18 Kanal adresi - yüksek byte 19 Kanal adresi - alçak byte 20 RAM başlangıç adresi - yüksek byte 21 RAM başlangıç adresi - alçak byte 22 Matriks yazmacı/yatay görüntü 23 Matriks dikey görüntü 24 Dikey düzgün akış 25 Yatay düzgün akış 26 Renk 27 Adres kaydırma 28 Karakter üretme basic adresi - yüksek byte 29 Alt çizim - Kursor - tarama - satır 30 Yazmaç tekrarı 34 Kanal, video RAM'indeki byte'ı okuma/yazma
32 Blok başlangıç adresi - yüksek byte 33 Blok başlangıç adresi - alçak byte 34 Ekran gösteriminin başlangıcı 35 Ekran gösteriminin sonu 36 Tazeleme oranı Şimdi listesini verdiğimiz yazmaçları bireysel olarak örnekler vererek işlevlerini açıklayacağız. Bu yazmaçlar dolaylı olarak adreslenirler. Bunun anlamı sadece sıfırıncı ve birinci yazmaçlara giriş yapabildiğimizdir. Bunu şu örnekle açıklayalım, eğer 26 numaralı yazmacın içeriğini görmek istiyorsanız şu satırları yazmanız gerekir
POKE 53760,26:PRINT PEEK(53761) $D600 ve $D601 yazmaçlarına yazılan yazmaç numarası istenilen yazmaçtan okuma ve yazmak için bir kanal açmamızı sağlar. Bunu aşağıda vereceğimiz küçük bir program yapabilir.
40 INPUT “YAZMAC";Y
20 INPUT “DEGER";D
30 POKE DEC(“D600”),Y
40 POKE DEC(“D601*) .D
Yazımızın başında da belirttiğimiz gibi VDC işlemcisinin normal adreslenemeyen 16K'lık RAM'i bulunmaktadır. VDC video RAM'ine girebilmek için aşağıdaki programı kullanın.
(Program Döküm Eki/PROGRAM 1)
Satır Açıklama 100 BA değişkenine VDC'nin temel adresini yüklenir. 110 V değişkenine istediğiniz video RAM adresini yükleme.
120 W değişkenine video RAM'ine yazmak istediğiniz değer yüklenir. 130 V değişkenindeki değer yüksek ve alçak byte'lara ayrılır. 140 18'inci yazmaca istenilen adresin yüksek byte'ı konulur. 150 19'uncu yazmaca alçak byte konulur. 160 34'üncü yazmaca byte değeri konulur. 170 BA değişkeninin hafıza adresine ulaşana kadar komut bekle. 180 30'uncu yazmaç * ile doldurulur (karakter çıkışı).
Bilgisayar ilk açıldığında video RAM'in durumu şu şekildedir:
$0000-$07FF Ekran tazeleme hafızası (SCR-RAM) (0-2047) $0800-$0FFF RAM (mesela ekran hafızası) (2048-4095) Serbest (4096-8191) $2000-$3FFF Karakter üretimi (8192-16385)
Yukarıda verilen Basic programı çalıştırın ve adres olarak '0' girin. Değer olarak '0 ve 255' arası bir değer giriniz. 80-kolon gösterimde üst sol köşede verdiğiniz değere bağlı olarak bir karakter yazılacaktır.
Video RAM'e pratik olarak giriş
80-kolonda işletim sistemi bir tuşa basıldığında ne yapar? Bu işletim sisteminin bir karakteri ne yaptığını inceleyelim. İşletim sisteminde bu işle ROM'da bulunan bir yordam görevlidir. Bu yordamı BASIC'ten şu şekilde çağırabilirsiniz:
MEHMET ULSEL.
SYS 49155, karakter, renk Karakter: Karakter numarası (0-255) Renk: Karakter rengi (0-16)
Bu yordam hem 40-kolon hem de 80-kolon için çalışır, bunun anlamı bir komutla her iki ekranı da aynı anda programlayabilirsiniz demektir. Şimdi karakterleri ekranın çeşitli satırlarına nasıl koyacağımızı öğrenelim. Karakterin yeri hafızadaki 224 ve 225 numaralı (o anki Kursor'un yeri) adreslerden okunabilir. Eğer bir karakterin belirli bir yerde olmasını istiyorsanız, bu adreslerle biraz oynamak yeterli olacaktır.
Aşağıda bunu yapabilecek küçük bir program veriyoruz.
(Program Döküm Eki/PROGRAM 2)
KOL değişkeni: 0-79 (0-39) SR değişkeni: 0-24
Programda kullanılan bazı adresler şunlardır:
238 Ekranın maksimum uzunluğu 224 Kursor'un yeri - alçak 225 Kursor'un yeri - yüksek 49155 Başlangıç adresi - ROM yordamı
Taklit edilmiş POKE
Aşağıda vereceğimiz program sayesinde normalde POKE yapamadığımız video RAM bölgesine bizim yaptığımız POKE komutu ile POKE yapmak mümkün olacaktır.
(Program Döküm Eki/PROGRAM 3)
Hazırlamış olduğumuz POKE komutunun formatı şu şekildedir:
SYS karakter, LO, HI Karakter byte değeri (0-255) İstenilen adresin alçak byte'ı İstenilen adresin yüksek byte'ı
Şu ufak programı deneyin:
40 İNPUT“ADRES”;AD
20 — AD-(256* HI)
30 SYS
Video RAM'deki herhangi bir byte'ın içeriği şu şekildedir: BİT 0: Parlaklık BİT 1: Mavi BİT 2: Yeşil BİT 3: Kırmızı BİT 4: Yanıp sönme BİT 5: Altı çizilmiş BİT 6: Reverse video BİT 7: İkinci karakter seti
İlk dört bit'in kullanımı oldukça açıktır, bu bitleri birleştirerek mümkün olan 16 rengi elde edebilirsiniz. Dördüncü bit'i 1 yaparak karakterinizin yanıp sönmesini sağlayabilirsiniz. Biraz eğlenmek için üstte verdiğimiz programın 30'uncu satırını şöyle değiştirin:
30 SYS 042 342 4.L0.HI
Programı çalıştırarak adrese 2048 değerini verin, şimdi ekranda açık kırmızı renkte olarak karakter yanıp sönmeye başlayacaktır. BİT 7 ile karakter setini değiştirebilirsiniz. Normalde bunu SHIFT/C= tuşu ile yapıyoruz. 40-kolon ekranın aksine 80-kolon ekranda aynı anda her iki karakter setinin de bulunması mümkündür. Bunun anlamı da çalışabileceğiniz karakter sayısının 512 adet olduğudur.
Karakter üretimi
Aşağıda vereceğimiz program karakter üreticiyi video RAM'den okuyacaktır.
(Program Döküm Eki/PROGRAM 4) Programımızda kullanılan değişkenler:
BA: Karakter üreticinin başlangıcı A: VDC'nin başlangıcı AD: Karakter üreticide o anda bulunan adres HI: AD değişkenindeki adresin yüksek byte'ı LD: AD değişkenindeki adresin alçak byte'ı CH: Karakter satırının okunuş değeri W: Sayaç Programı çalıştırdığınızda bütün karakterler ekrana genişletilmiş matrisler halinde basılacaktır. Her karakteri sekiz boşluğun izlediğine dikkat edeceksiniz. Bundan başka 80-kolon karakter üreticinin VIC-20 veya C-64'ünkilerden farklı olduğuna dikkat edin. Her karakter 18 byte'dan meydana gelmektedir. Bu fazladan olan sekiz byte normalde kullanılmamaktadır, bunlar bazı özel durumlarda kullanılacaktır, VDC 8563 hem 8 matrislik hem de 16*8 matrislik karakterler üretebilmektedir.
Büyütülmüş karakterler
Aşağıda yer alan program ile genişletilmiş karakterler elde edeceksiniz. (Program Döküm Eki / PROGRAM 5) Bir sonraki yazımızda biraz daha 80-kolon gösterimden bahsedeceğiz, şimdi C-64'te oynayabileceğiniz bazı oyunları kolaylaştıracak yararlı POKE komutlarına geçiyoruz. Oyunumuzun adı PSYCASTRIA, başlık ekranında iken, yani bilgisayara RUN komutunu verdikten sonra ilk çıkan ekranda L, T, D, N tuşlarına aynı anda basıp bırakın. Bu tuşlar İngilizce olarak şu kelimelere karşılık gelmektedir: Love Tracey Dianne Nicolson. Bu tuşlara aynı anda bastığınızda size sorulacak olan şifre yerine THEVOICE kelimesini yazdığınızda CHEATING MODE'a girmiş olacaksınız, böylece de gemimiz görünmez olacaktır.