Renkli List
Retro bilgisayarBASIC programlarınızın dökümlerini renklendirmek ister misiniz?
BASIC'in en kötü yanlarından biri, PASCAL gibi modüler programlamaya kolaylık sağlamamasıdır. Siz gene de altprogramları kullanma yoluyla bayağı modüler bir program yazabilirsiniz. Ama sağolsun BASIC'in LIST komutu, hiçbir modülü görüntü olarak belli edemeyecektir. Görüntüyü de modüler yapabilmek için, REM'lerle, boşluklarla dolu bir program yaratmanız gerekecektir. Boşuna hafıza kaybı...
Peki, programınızın her modülü LIST sırasında farklı renklerde görünse nasıl olur?
Yapacağınız şey, her modülünüzün (altprogramınızın) başına bir REM satırı koymak ve REM komutunun arkasına en az bir karakterden oluşan bir yazı yazmak. BASIC programınızı böylece hazırladıktan sonra SAVE edin.
Sonra da, RENKLİ LIST programını yazıp çalıştırın. Şimdi de, demin hazırlıklarını yaptığınız modüler programınızı LOAD edin ve LIST komutunu verin. Her REM komutundan sonra gelen kısmın farklı bir renk ile LIST edildiğini göreceksiniz.
İşte bu rengi, REM komutundan sonra gelen ilk karakter belirleyecektir. Eğer arka arkaya gelen iki modülün aynı renge sahip olmasını istiyorsanız, REM'den sonra aynı harfi koyun. Eğer ayrı harfler koyarsanız, renkler de farklı olacaktır. Hoşunuza giden renkleri deneme yanılma metodu ile bulabilirsiniz. Örneğin A harfi beyaz, B harfi kırmızı döküm yaratacaktır.
Şimdi işin biraz teknik ayrıntısına girelim. Eğer bir REM komutunun o ana kadar geçerli olan rengi değiştirmesini istiyorsanız, REM ile yazacağınız harf arasında boşluk OLMAMALIDIR. Dolayısıyla, o ana kadar kullanılan rengin herhangi bir REM satırından sonra da korunmasını istiyorsanız, REM ile arkasından gelen yazı arasına en az bir boşluk koymalısınız. Bu arada dikkat edin, bir satırda sadece REM varsa, dökümün geri kalan kısmı siyah olacaktır.
Eğer RUN/STOP/RESTORE yaparsanız, renkli döküm işlemi bitecektir. Tekrar başlatmak için POKE 774,0: POKE 775,192 vermeniz gerekiyor.
Peki bu renkli döküm işi nasıl oluyor? Gördüğünüz gibi, programımız kısa bir makine dili rutinini 49152 ($C000) adresinden sonraya yerleştiriyor. Bir sonraki POKE komutları ile de, normalde sistemdeki BASIC komutlarını ekranda yazıya çeviren rutinin adresini saklayan 774/775 adreslerine, 49152'de başlayan yeni rutinin adresi yerleştiriliyor. Bir anlamda, LIST komutu önce bizim yazdığımız minik rutini işletecek, sonra kendi işini görecek hale getiriliyor. Bu makine dili rutinini bir parça inceleyelim:
Önce akümülatördeki değer yığın içine (stack) atılıyor. Sonra da, o sırada ekrana LIST edilen komutun REM olup olmadığı kontrol ediliyor. REM'in kodu $8F'dir. Eğer öyle değilse, $C010'a atlanıp akümülatörün değeri yenileniyor ve gerçek LIST rutinine atlanıyor.
Ancak REM'e rastlanmışsa, hemen arkasından gelen karakter okunup, eğer boşluk değilse, $0286 (646) numaralı adrese yazılıyor. Bu adres, ekrandaki yazının rengini kontrol eder. Eğer karakter boşlukla veya renk kodu 646'a yerleştirilmişse, Y indeksi başlangıç durumuna getirilip akümülatör yeniden orijinal değeri ile yüklenliyor ve sistemdeki gerçek LIST rutinine atlanıyor. Bu atlama sırasında, gerek Y yazmacı gerekse akümülatör başlangıçtaki değerlerine sahip oldukları için, esas LIST rutininin bu olaylardan haberi olmuyor.
İşte bu kadar. İşinize yaramasını dileriz...