Commodore sayı 64, sayfa 21

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ı.