C 128 İçin Ekran Basım Programları
Retro bilgisayarHer ne kadar bu programlar kısa olsalar da çok iş yapıyorlar. Bu programlarla yüksek çözünürlüklü ekranları tek tek veya ikişer printer ile basabilir ayrıca ekranın belli bölgelerini ve sprite'ları printerdan çıkarabilirsiniz. Ancak bunun için C 128 ile 7 iğneli bir Commodore printer'ine (1525, MPS801 veya MPS803; ya da Commodore modunda MPS 1000, MPS1200 veya MPS1250) ihtiyacınız var.
C 128'in üstün BASIC 7.0'ının sağladığı CIRCLE, BOX, DRAW gibi grafik komutlarıyla detaylı, yüksek çözünürlükte eserler yaratmak son derece kolay. Ama gelgelelim bunları kâğıt üzerine döknenin kolay bir yolu yok. Diğer pek çok bilgisayar bunu bir tek komut veya tuşla halledebiliyorken 128'in üstün BASIC'i bu noktada yetersiz kalıyor. Yani şekilleri ve resimleri ekrana çizebiliyorsunuz ancak kâğıda geçirmeniz mümkün olmuyor.
İşte size bu problemleri halledecek bir kaç kısa program. Birinci program yüksek çözünürlüklü ekranı printer ile basmanızı, ikinci program aynı anda iki ekran basmanızı, üçüncü program önce bir pencere açmanızı ve bu pencerenin içinde kalan bölgeyi basmanızı ve dördüncü program da sekiz sprite'ın o andaki şekillerini printerdan çıkartmanızı sağlıyor.
PROGRAMLARIN YAZILMASI VE ÇALIŞTIRILMASI
Beş programın hepsi de BASIC 7.0 ile yazılmıştır. Program 1 diskette EKRAN BASIM.MD adında makine dilinde bir program yaratıyor. Diğer programları çalıştırabilmek için bu program dosyasının diskette yeralması gerekiyor. 2-5'inci programlar ise ekran basımını gerçekleştiriyorlar.
Program 1'i yazdıktan ve kaydettikten sonra çalıştırmadan önce disketinizin korumasının açık olduğundan emin olmalısınız. Bundan sonra program önce data satırlarını kontrol edecek ve eğer bir hata yoksa diskete EKRAN BASIM.MD adında bir dosya kaydedecektir. F3 tuşuna basarak bir directory alın ve dosyanın yaratıldığını kontrol edin. Şimdi diğer dört programı da kullanabilirsiniz. Dikkat edin, bütün programlar 128 modunda çalıştırılmalı ve dört program da aynı diskette yeralmalı.
Program 2'yi çalıştırdığınızda size ilk başta bir dosya ismi sorulacaktır. Burada $1C00 veya $2000 bölgelerinden başlayan ve BSAVE ettiğiniz yüksek çözünürlükte bir resmin adını vermelisiniz. Daha sonra bilgisayar bu resmi yükleyecek ve printer'a gönderecektir.
Eğer bir dosya adı veremezseniz bilgisayar o anda grafik hafızasında da ne varsa printer'a onu bastırır. GRAPHIC1 ile yaratılan ekranlar printer'dan mükemmel çıkarken GRAPHIC3 ile yapılan çok renkli grafikler de printer'dan basıldığında iyi sonuçlar vermektedir. Burada hatırlanması gereken şey çizim rengini mümkün olduğu kadar koyu ve arka plan rengi de açık yapmanın en iyi sonuçları vereceğidir. Eğer arka planı koyu yapar (mesela siyah) ve ön plan içinde açık renk kullanırsanız (sarı) ekran reverse modunda imiş gibi basılacaktır.
Program 3, Program 1'e oldukça benzemektedir. Ancak yanyana iki aynı ekran basabilmeye olanak tanımaktadır. Program önce size iki resim adı girmenizi isteyecektir. Birinci programın tersine bu program hafızadaki resmi kullanmanıza izin
vermeyecektir; her iki resim de ayrı dosyalar halinde diskette olmalıdır. Bundan sonraki soru ekranların bitişik veya arada boşluk olacak şekilde basılmasıyla ilgilidir. Bunu B veya A ile cevaplayın. Program bundan sonra resmi yüklemeye geçer ve printer'a gönderir.
Program 4 ekran pencerelerini basmaya yaramaktadır ve bu da en başta bir dosya ismi isteyecektir. Herhangi bir şey yazmadan direk olarak RETURN'e basarsanız program hafızadaki resmi basacaktır. Baskıdan önce basmak istediğiniz bölgenin koordinatlarını vermeniz gerekmektedir. Bu amaçla keypad'in tuşlarına basarak sprite pointer'ı (kursor'a benzer imleç) hareket ettirin. 5 tuşu en ortadadır ve diğer tuşlarda pusula yönlerine göre almaktadırlar. Deneme olarak 7 tuşuna basın ve sol üst köşeye gidin. ENTER tuşuna basarak bulunduğunuz noktayı tesbit edin sonra da 3 tuşuyla aşağılarda bir yere gidin ve pencerenin sağ alt köşesini ENTER ile tesbit edin. Bu belirtilen bölgenin kapsamı printerdan çıkacaktır. Ancak 64 modunda bazı grafikler kullandıysanız bu grafiklerde bazı karışıklıklar olabilir. Bu durumda 180'inci satırdan sonra şu komutu vermelisiniz.
POKE 8184,56: POKE 8185,57
Son program ise C 128'in sahip olduğu 8 sprite'ın o sıradaki şekillerini basacaktır. Diğer programlarda olduğu gibi başta dosya ismi sorulduğunda sadece RETURN'e basacak olursanız sprite hafızadaki sprite desenlerini printer'a yollayacaktır. Spritelar hafızada 3584-4096 adreslerinde saklanmalıdırlar ve sprite definition modundan (SPDEF) tanımlanabilirler. Programı kullanırken dikkatli olun çünkü hafızadaki yüksek çözünürlükteki resmi bozabilir.
Her ne kadar bu programlar tek amaçlı olarak düşünülmüşlerse de bunları kendi programlarınızın içine koymak hiç de sorun olmayacaktır. Ayrıca bu programın daha önceki sayılarda verdiğimiz ARTİST 128 grafik programı ile uyumlu olduğunu ve o programla kaydettiğiniz yüksek çözünürlüklü grafiklerin bu programlar tarafından printer'a basılabileceğini hatırlatmakta yarar görüyoruz.
PROGRAMIN ÇALIŞMA PRENSİBİ
Bu tür basım programlarını yazmanın zorluğu ekranın hafızada saklanmasından doğmaktadır. 8000 byte'lık bitmap haritası herbiri 320 byte'lık 250li gruplardan meydana gelmektedir. Bu 320 byte'lık her satır da ayrıca 8'erli olmak üzere 40 gruba bölünmüştür. Bu 64 bit'lik yani 8 byte'lık bölge bir ekran karakterini belirten 8 x 8'lik karakter matrisine eşdeğerdir.
İşte bizim problemimiz de burada yatıyor. Eğer elimizde 8 yazı noktalı bir kafaya sahip printer olsa işimiz kolay ancak Commodore printer'larının çoğunda 8 yerine 7 yazı iğnesi bulunuyor ve ekrandan doğru bitleri seçip kâğıda yazmak bir dert halini almakta.
Ancak C 128'in SSHAPE komutu bu problemi ortadan kaldırıyor. SSHAPE komutu dörtgensel bir şekli yüksek çözünürlükten alarak bir diziye (string) çevirir. Eğer bu diziyi ASC veya MID$ ile incelerseniz karakterlerin ekran şekli ve buna ek olarak her bir bilgisayar byte'ının bir kopyası olduğunu görürsünüz. Böylece ekranın printer'a basımı en sağ kenardan başlar ve bilgisayar 7 pixel sütunu SSHAPE yapar. Makine dili rutini byte değerlerini ikiye bölüp 128 ekler çünkü printer karakter değerlerini 128-255 arasında kabul etmektedir.