C-128 İçin Püf Noktaları (4)

Yazımıza ilginç bir bilgi ile başlayalım: C128 modunda çalışırken C64 moduna geçmek istediğinizde GO64 komutu vermeniz yeterli olur ama o anda bilgisayarınızda bulunan programınızı da kaybedersiniz. Kaybettiğiniz program bilgisayarın RAM bölgesinde bulunduğundan ve hem C64 modunda iken hem de C128 modunda iken (RAM BANK 0) bilgisayar aslında aynı RAM bölgesini kullandığından geçiş sırasında kaybettiğiniz programı tekrar geri getirmeniz mümkündür. Bu nasıl oluyor? GO64 komutunu verdiğinizde bilgisayar sanki yeni açılmış gibi kendisini C64 modu için ayarlıyor ama C128'de iken çalıştığınız program aslında hafızada kalıyor. Bu programı C64'te nasıl çalışır hale getirebiliriz? Aşağıdaki komutları yazıp LIST komutunu verirseniz C128'deki

& ©, programınızın geri geldiğini görürsünüz.

POKE 43, 1 : POKE 44, 28

Geri getirdiğiniz programı çalıştırmanız bile mümkün fakat sadece C128'e ait komutların çalışması mümkün değil. Bu metodla C128'e özgü komutları değiştirmek şartı ile programlarınızı C64'e geçirmeniz MÜMKÜN olur. Biraz evvel C128'in RAM BANK 0 ile C64'ün aynı RAM bölgelerini kullandığını söylemiştik. Bunun gerçek olduğunu görmek için aşağıdakileri yazın:

modunda iken:

POKE, 8192, 170 :POKE 8193, 85
GOĞ4 (Cevap olarak Y tuşuna basmayı unutmayın)
PRİNT PEEK(8 192):PEEK(8 193)

Bu komutları yazdığınızda C128 modunda POKE ettiğiniz değerlerin C64 modunda değişmediğini görebilirsiniz.

Grafik Çizimleri:

Bildiğimiz gibi C128'de grafik çizimler yapabilmemizi sağlayacak yeni komutlar bulunmakta. Halbuki C64'te herhangi bir grafik çizim gerçekleştirebilmek için ya uzun uzun karmaşık POKE komutları ile uğraşmamız gerekecek ya da SIMONS BASIC gibi bünyesine grafik çizmeyi sağlayacak komutlar katmış yardımcı bir program kullanmamız gerekecekti. Şimdi C128'in kendi BASIC'inde bulunan grafik komutları kullanarak çabuk grafik gösterim sağlayacak bir program görelim. Programın kendisini Program Döküm Eki'nde bulabilirsiniz. Şimdi programımızın açıklamasına geçelim. Programınızı çalıştırdığınızda ilk olarak sizden grafiğin ismi sorulacak. Sıra kaç değer gireceğinize geliyor. Maksimum sekiz değer seçebilirsiniz, yani ekrana en fazla sekiz çubuk sığdırabiliyoruz. Hemen belirtelim programımızı enteresan hale sokan şey çubukların üç boyutlu olarak çizilmesi. Bu bilgileri girdikten sonra seçtiğiniz sayı kadar her bir çubuk için değer ve çubuğun boyanmasını istediğiniz rengin kodunu giriyorsunuz. Son olarak çubuğa verilmesi gereken ismi yazmanız gerekiyor. Bu isimler en çok üç karakter olmak zorunda ama eğer daha uzun bir isim girerseniz de programımız girdiğiniz ismi üç karaktere indiriyor. Tüm veri girişleri bittiğinde girilen verilerin doğru olup olmadığı soruluyor, E cevabı halinde çizime geçiliyor, aksi takdirde veriler yeni baştan alınıyor. Değer için girebileceğiniz en yüksek rakam diye bir sınır yok. Girilen değerlerin en büyüğü yüz kabul edilip diğer değerler buna göre ayarlanıyor, çizimler de buna göre yapılıyor. Şimdi satır grupları halinde programımızın bazı önemli yerlerini görelim. 100-160: Grafik ekranının renkleri, çubuk isimlerinin yazılması için kolon ve diziler tanımlanıyor. 170-360: Veriler isteniyor. 370-400: Grafik ekranı hazırlanıp grafiğin başlığı yazılıyor. 410-490: Gerekli hesaplamalar yapılarak çubuklar çizilip renklendiriliyor. 500-600: Herhangi bir tuşa bastığınızda karşınıza menü çıkıyor.

Seçeneğinize göre gerekli işlem basamağına atlanıyor.

Dataset:

Sanırım her Commodore kullanıcısı Commodore'unu ilk aldığında veri saklama amacı ile Dataset kullanmıştır. Eğer sabırlı iseniz programlarınızı yükleme ve saklama açısından Dataset bir Disk Drive'a alternatif olabilir. Yazımızın bu bölümünde Dataset için bazı enteresan bilgiler vereceğiz. Dataset'i devamlı olarak kullanan kullanıcılar bile genelde teyp motorunun SAVE veya LOAD işlemi sonunda kendiliğinden durduğuna dikkat etmezler. Datasetinizin motoru bilgisayarınızın işletim sistemi tarafından kontrol edilmekte. Bundan başka datasetin motorunu yazacağımız programlarla da kontrol etmek mümkün. Bizim için önemli olan adresler 1 (prosesör portu) ve 192 (teyp motor göstergeci). Şimdi ufak bir deneme yapalım. Önce datasetinizin PLAY tuşuna basın. Motor çalışır ve dönmeye başlar. Direkt modda aşağıdaki POKE komutlarını yazın.

POKE 192,1:POKE1,PEEK(1) OR 32

Dikkat ettiniz mi? Siz datasetinize dokunmadan motor durdu. Datasetinize dokunmadan motoru tekrar çalıştırmak isterseniz aşağıdaki POKE komutunu yazın.

POKE 1, PEEK(1) AND 39:POKE 192,0

Bize datasetimizin motoruna uzaktan kumanda etme fırsatı veren adres 1 numaralı adres. Bu adresin içeriğini BİT seviyesinde inceleyelim:

BİT3: Bu BİT yanıksa dataset yazma durumundadır. BİT4: Datasetin tuşlarının durumu. BİT5: Dataset motorunun durumunu gösterir.

Motoru çalıştırabilmek için BİT5'i yakmamız yani bu BİT'in değerinin 1 olması gerekiyor.

Dataset Tuşlarını Okuma:

1 numaralı adresin yaptıkları bununla bitmiyor. BİT4 datasetinizdeki tuşlardan herhangi birinin basılı olup olmadığını kontrol eder. Dataseti kullanırken karşınıza çıkan PRESS PLAY (&RECORD) ON TAPE mesajları işletim sisteminde bu bitin durumuna göre karşımıza çıkar. Ne yazık ki bilgisayarımız datasetin hangi tuşuna bastığımızı fark edemiyor. Mesela bir programı SAVE edeceksiniz. Normalde PLAY ve RECORD tuşlarını aynı anda basmanız gerekiyor diyelim ki kazara sadece PLAY tuşuna bastınız. Bu durumda işletim sistemi hangi tuşlara basıldığını anlamadığından hatanın farkına varamayacaktır. BİT4'ün dataset tuşlarını kontrolünü şu şekilde sağlayabiliriz:

WAİT 1,16 (Datasetteki STOP tuşu basılana kadar
bekle.)
WAİT 1,32,32 (Datasetteki herhangi bir tuşa basıla-
na kadar bekle.)

İşletim sisteminin RUN-STOP tuşunu kontrol etmesini şöyle sağlayabiliriz:

IF PEEK(4)—99 THEN PRİNT “BASILDI”

DDR ile İlginç İşler:

DDR nedir ve ne tür ilginç işler yapar? Birçok iş yapabilir. Prosesör portu esas olarak CIA'lar tarafından kontrol edilen Giriş/Çıkış Portlarıdır. Bu portun altı hattı vardır. Bunlardan üçü Dataset için ayrılmıştır. Bu hatlar hem giriş hem de çıkış olarak kullanılır. Hatların hangi yönde kullanıldıkları prosesör portu için DDR (DATA REGISTER “Veri Yönlendirme Sicili”) tarafından belirlenir: Adres 0. Adresin içeriğini BİT düzeyinde inceleyelim:

BIT3: Veri yönü dataset yazma BIT4: Veri yönü dataset tuşlarının durumu BIT5: Veri yönü dataset motor durumu Bit değeri 0=GİRİŞ 1=ÇIKIŞ Dataset yazma ve dataset motor durumu ÇIKIŞ'tır. Bunlar kasete yazma durumunda iken dataseti etkilerler. BIT4 ise daha evvel de belirttiğimiz gibi Datasette bir tuşa basılıp basılmadığını kontrol eder.

Dataset'te Program

Kilitleme Teknikleri:

Eğer DDR'deki bitleri değiştirirsek ne olur? Aşağıdaki POKE komutu BIT4'ü bir ÇIKIŞ hattı haline getirir: POKE 0,PEEK(0) OR 16 Bu komut sayesinde ne elde edeceğiz? Üstteki komutu girmemizle birlikte artık BIT4 datasetteki tuşların durumunu anlayamaz hale gelecek. İşletim sistemi PRESS PLAY ON TAPE mesajı verecek. İstenileni yapsanız bile işletim size OK veya LOAD veya SAVE mesajı göndererek memnuniyetini bildirmeyecek. Aşağıdaki POKE komutunu girerseniz bilgisayarınızı bu ümitsiz durumdan kurtarabilirsiniz.

POKE O, PEEK(0) AND NOT 2 4

Başka bir kilitleme yöntemi de BIT3'ü değiştirerek olur:

POKE 0, PEEK(0) AND NOT 2 3

Bu komuttan sonra her şey normal gidecek çıkmasını beklediğiniz mesajlar çıkacak, datasetteki tuşların durumu kontrol edilecek, SAVE komutu çalışır gözükecek, ama çalışmayacak. Normale dönmek isterseniz:

POKE 0, PEEK(0) AND NOT 8

Bu soruna çare aşağıdaki POKE komutudur. POKE 0, PEEK(0) OR 16

Müzikseti Olarak Dataset:

Evet yanlış okumadınız, datasetinizi müzik seti olarak kullanabilirsiniz. Nasıl mı? Program döküm ekinde bulacağınız programı yazıp çalıştırın. Datasetinize de sevdiğiniz bir müzik kaseti koyup PLAY tuşuna basın, televizyon veya monitörünüzün sesini açıp keyifle kasedinizi dinleyin. Ama bizden söylemesi: Datasetten elde edeceğiniz müziğin kalitesi için hiç de iyi şeyler söyleyemeyeceğiz, hayal kırıklığına uğramayın. Verdiğimiz programın yaptığı, prosesör portundaki üç GİRİŞ/ÇIKIŞ hattını kontrol etmekten ibaret. Dataset ile bilgisayarımız arasında kullanılmayan bir hat daha var: Dataset okuma (bu hat Dataset yazma hattına eşdeğerdir). Datasetten gelen bütün veri bu hattan gider. Fakat ufak bir problemimiz var: Bu hat diğer hatlar gibi prosesörde son bulmaz -CIA1'e kadar devam eder (böylece Seri Port'u bizim kullanımımıza açar). Bu yüzden 13. sicilini kurmamız gerekiyor: Aşağıdaki Makine Dili ile uğraşanlar için aynı programın Makine Dili'nde yazılmış şeklini bulabilirsiniz. 1A00 A0 00 LDY #$00 1A02 AD LDA $DC0D : CIA1'deki FLAG'ının kontrolü

C9 00 CMP # : Sinyal yok mu?
FO 02 BEO : Evet-devam et
14A09 A0 OF : Hayir-Sesi kapat
8C 18D4A : ve 24 numaralı SID
yazmacı
A5 DS LDASDS  : Klavyeyi oku
1A10 C9 58 CMP # 858 : 88-hiçbir tuşa
basılmadı
1A12 FO EC BE© : Hiçbir tuş-devam et
1A14 60 RTS : BASIC'e geri dön

Bu ufak programımızı SYS 6656 komutu ile başlatın. Programımızın çalışma prensibi gayet basit: Sinyal kontrolü yapılır. Eğer sinyal varsa ses açılır, yoksa kapatılır. Sesi açıp kapama Makine Dili'nde mümkün olan en ufak döngü içinde yapılmaya çalışılıyor ama sonuçta korkunç bir ses ortaya çıkıyor.