Bu sayfadaki yazılar
Sayfanın metni
Sayfa 21
Piyasada bulabileceğiniz bazı kartuşları kullanıyorsanız (EXPERT gibi), ekrana yazdığınız scroll text'leri veya ekranda bulunan datalarını belleğin bir köşesine zahmetsizce atabilirsiniz. Ama diyelim ki bu kartuşlardan edinmek istemiyorsunuz veya kartuşunuz bozuldu. Ekrana yazılanları belleğe nasıl transfer edersiniz? Ekranı doldurmadan önce, bu transferi yapacak bir makine dili programı yazarsınız, sonra yazılarınızla ekranı doldurursunuz, yazılar bitince de, ekranı yukarı kaydırmayacak bir yerden SYS komutuyla, ekranı transfer edersiniz. Bu her zaman yapabileceğiniz kolay bir işlem. Peki, tam yirmi beş satırlık bir ekranı transfer etmek isterseniz ne yaparsınız? Ekranın herhangi bir yerine SYS yazamayacağınız (kayan yazıların ortasından SYS'nizin geçmesini istemezsiniz değil mi?) için, değişik yöntemler aramanız gerekecektir. İlk bakışta benim aklıma tek yol gelmişti, fakat bu yazıyı yazarken, daha az teknik olan, fakat yine de işe yarayabilecek bir yöntem geldi aklıma. Önce bir yöntemi anlatayım, sonra ötekini anlatırım. Birinci sistemde, her zaman yaptığınız gibi, transfer işlemini yapacak bir makine dili programı yazın. Sonra BASIC'e dönüp şu satırı girin:
1 INPUT A$:SYS programbaşı
RUN dedikten sonra ekranı temizleyip yazacaklarınızı yazın ve ekran dolunca da RETURN'e basın. Makine dili programınız otomatik olarak çalışacaktır. Ama bu sistemi denemediğim için, bazı hatalar çıkabilir. En iyisi, kısa bir örnekle deneyin bu sistemi. İşe yararsa ve sizin de kolayınıza gelirse bu sistemle ekran transfer edersiniz. Eğer BASIC kullanmak istemiyorsanız (Ekrandaki yazıları BASIC alanına transfer edeceksiniz özellikle) bilgisayarınızın değişik bir özelliğinden yararlanmanız gerekir: NMI'lar. Bildiğiniz gibi NMI, Non Maskable Interrupt, yani engellenmez interrupt'lardır. Diğer bilgisayarlarda, bu interrupt'ı kullanmak için, mutlaka donanım kullanmanız gerekmektedir, fakat C64'te RESTORE tuşuna basmanız bir NMI oluşmasını sağlar. Eğer Programcının El Kitabı'nı dikkatlice okuduysanız, $0318-$0319 adreslerinde NMI vektörlerinin bulunduğunu fark etmişsinizdir. Yani, bu vektörleri programınızı gösterecek şekilde ayarlarsanız, RESTORE'a basıldığında istediğiniz işi yapabilirsiniz. Tabii bu arada programınızdan sağ salim çıkmayı da başarmak da sizi oldukça zorlayacaktır. Her şeyden önce, programı RTS değil, RTI ile terk etmeniz gereklidir. NMI, herhangi bir anda bilgisayarın işini baktırıp kendi işini göreceği için, programınızda kullandığınız tüm register'ların ilk durumlarını saklamanız gereklidir. Bu işin tam olarak nasıl yapıldığını aşağıdaki programda görebilirsiniz.
Programdan da gördüğünüz gibi, ilk olarak $0318-$0319 adreslerine programımızın adresini alçak-yüksek bayt (low-high byte) formatında veriyoruz ($02ab için $AB, $02 gibi) ve BASIC'e dönüyoruz. Herhangi bir anda RESTORE'a basıldığında, $800B'de bulunan programımıza sıçranıyor. İlk olarak, programda kullanılan Y, A register'larını yığına kaydediyoruz, sonra $0400-$07FE arasını $4000'e transfer ediyoruz ve yığında bulunan değerleri register'lara aktarıp, BASIC'e dönüyoruz. Basit, değil mi? Bu ayın asıl konusu, C64'e ekran başlangıç satırını unutturmak. Aslında çok zeki gibi görünen C64'ünüz bir miktar aptaldır. Ufak bazı hileler kullanarak, border sınırına geldiğini unutturup ekranın alt ve üst kısımlarını açtırabilir (Gelecek sayılardan birinde bunu da açıklayacağım, sabırsızlanmayın.), ekranın başlangıç yerini unutturabilir, ilk satırı 12. satırda, ikinci satırı 20. satırda gösterebiliriz. Ufak birer tasarım hatası olan bu tür boşlukları bulursanız, azıcık da yaratıcılığınızı kullanırsanız, dehşet demo teknikleri üretebilirsiniz. Bu sayıda açıklayacağım rutinin neden çalıştığını anlayabilmeniz için; rutini anlatmadan önce, C64'ün karakterleri ekrana nasıl bastığı hakkında bir miktar ön bilgi vermem gerekiyor. Bildiğiniz gibi, C64'ün karakter ekranı, her biri 40 karakterden oluşan 25 satırdan meydana gelir ve normal olarak $0400 (1024) adresinden başlayarak 1000 bayt işgal eder.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 20
Vedat Hallaç
Hepinize merhaba. Uzun bir süredir devam eden ve şimdilik bitmeye hiç de niyeti olmayan bir Püf Noktaları bölümünde birlikteyiz yine. Bu sayıda, her zaman olduğu gibi, normal olarak bir C64'ün yapamayacağı işlerden birini seçtim. Ama hatırlatmakta fayda var: Benim burada anlattığım programlar, yaptıkları işi en hızlı ve en etkili şekilde yapan programlar olmayabilirler. Bu köşede asıl yapmaya çalıştığım, C64'ün, belli bazı gruplar dışında kimsenin bilmesine izin verilmeyen yeteneklerinden sizleri haberdar etmek ve bu yetenekleri kullanmak için ne gibi bir mantık izleyebileceğinizi anlatmak. Neyse çenem düştü gene. Biz en iyisi asıl konumuza dönelim. Aslında bu ay seçtiğim iki konu var. Bunlardan birincisi, ABUR-CUBUR köşesine girmesi gereken bir program ve size bir teknik açıklamaya değil, hayatınızı kolaylaştırmaya yönelik.