Bu sayfadaki yazılar
Sayfanın metni
Sayfa 46
rutinini kullanırsak elektron alt satırda, bu işlemi yaptığımız koordinatın hemen altında bulunacaktır. Tabii ki bu kadar kolayca bu işin içinden çıkamayız. Çünkü belli satırlarda (her karakter satırının başlangıcında) sizin programınızla olan bağlarını keser ve ekrana gidecek olan görüntüyü ayarlamak için yeni satırı almak, yüksek çözünürlük modunda iseniz bu satırdaki harfleri renklere çevirmek gibi işlemlerle uğraşır. Tabii ki bu işlem sizin ayarladığınız zamanlamayı da altüst eder. Bu olayları yapmak için program kullanılmadığı için (tamamen elektronik olarak başa çıkılır bu işlerle) çok gelişmiş sistemler kullanmak dışında bu satır yenileme olayını engellemek elimizde değildir. Bu yüzden, yazacağınız program bu satırlarla uğraşacağı zaman renk değiştirme işini elinden geldiğince çabuk halletmek zorundadır. Tabii ki bu ayarlamayı yapmak kolay olmadığından renk şeritleri yapmak çoğu programcının korkulu rüyası olmuştur. Bu programlar o kadar hassastır ki içlerinden çıkarılacak tek bir komut bile tüm zamanlamayı altüst edebilir. Daha da ilginci, $D011 adresinde bulunan Y pozisyonunu değiştirmenizin programın çalışmasını engellemesidir. Eğer $D011 kullanarak ekranı bir piksel aşağı alırsanız, bu özel satırlar da bir satır aşağı kayacak ve sizin programınızda belirlenen yerlere denk gelmeyecektir. Bunun sonucu olarak da programınız işe yaramayacaktır. Bu konuda sizi uyarmam gereken bir nokta daha var. Eğer bir satır üzerinde bir sprite bulunursa o C64'ünüz o sprite'ı gösterebilmek için o satırda sizin programınızdan biraz zaman çalmaktadır. Bu kadar uyarı ve açıklamadan sonra gelelim programın açıklamasına: $C000-$C032 arasında bildiğiniz sistemlerle interrupt'lar ayarlanır. Bu arada $C0F7 adresi sıfırlanır ve ekranın X pozisyonunu tutan adrese $C7 değeri verilir. Modu için bu değeri $D7 yapın rutininiz $31. rasterda başlar ve $C035 adresinde bulunur.
IRA Lda #$41D Sta $L018 Komutlarıyla karakter setinin yeri değiştirilir. adresine alınır.) Eğer 1D yerine $15 değerini kullanır- sanız normal karakter setine geçersiniz. Ldx #$1D Dex Bne Loop Rutinini kullanarak elektron ışınının istediğimiz yere
gelmesini sağlıyoruz.
Lda $COF8 Sta $DO16 ile x piksel-koordinatını ayarlıyoruz. Ldy # Jmp Başla komutuyla ilk satırın rengini ayarlanmasını sağlıyo- ruz. (ilk satırda bazı ayarlamalar yapılır unutmayın.)
Loop
Ldx # $00 Kısaltılır Ldy #$08 Başla Lda $COE2, X Renkver Sta $DO20 Sta $DO21
gördüğünüz gibi ilk olarak satırın rengini hiç vakit kaybetmeden veriyoruz. Inx Dey Bea Kısasatır Programın can alıcı noktası burası. Her sekiz satırda bir birazdan gireceğimiz bekleme rutinine uğramadan yeni renk verilir. Cpx #$11 Bes renkson tam $11-1 (= 16) satıra $C0E2 adresinden başlayan renkler verilecek. Eğer yeni datalar yazarsanız ve bu sayıyı bu datalara göre artırırsanız son sayının ekran rengini de ayarlayacağını unutmayın. Jsr Bekle sekiz tane NOP ve bir RTS'den oluşan zaman harcama rutinine gidiyoruz.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 47
Lda $C0E2, X Lda $C0E2, X Bit $D021 Clc Renkver Burada iki kez renk okumamız herhangi bir hatadan dolayı değil. Yalnızca zaman harcıyoruz. Bit komutu da burada yalnızca biraz zaman harcatmaya yarıyor. JMP komutu yerine de CLC ve BCC komutları ardışık olarak kullanılıyor. Bu hem zamanlamayı ayarlıyor hem de size değişik bir sistem göstermeye yarıyor. Renkson Lda #$C8 Sta $D016 Lda #$15 Sta $D018 renk şeritleri koyduğumuz ve yazı kaydırdığımız 16 satır bittiğine göre X pozisyonunu sıfırlayıp karakter setini normale çevirmenin zamanı geldi demektir.
Lda $COF8 And # $07 Tay Dey
$C0F8 adresinde saklanan X pozisyonunu bir sola alıyoruz. Hızlı kayan yazılar isteyenler buraya bir-iki DEY koyabilirler. Bmi Satırsonu Eğer X pozisyonu 0'dan küçükse yeni harfleri X koordinatını ayarlamak gerekiyor. Bu komutla da bu işleri yaptırıyoruz. Ora #$C0 Sta $C0F8 Jmp Bitir eğer X pozisyonu 0-7 aralığındaysa bunu $D016'ya yazılabilecek hale getirip, gerektiği zaman kullanmak üzere $C0F8 adresine yazıyoruz. Multicolor kullanıcıları, buradaki ORA $C0 komutunu ORA yapmayı unutmayın. Satırsonu Lda Sta $C0F8 eğer X pozisyonunu 0'dan küçükse öncelikle X pozisyonunu en sağa alıyoruz. Ldy lda $0401, y Sta $0400, y $0429, y Sta $0428, y Bne ve ekranın ilk iki satırını bir sağa kaydırdık. Harfal Lda $C100 Cmp #$FF Bne yaz Lda #$00 Sta Harfal+1 Lda #$C1 Sta Harfal+2
Bne Harfal burada tanıdığımız bir harf alma rutini var. Zaten yazacağınız tüm yazı kaydırma rutinlerinde bu sistemi kullanmanız kaçınılmaz. Bu yüzden bu satırlara alışmaya bakın. "| Yaz
Kaydır
Ora $COF7 Sta $0428
Clc Ade Sta $0429
yazdığımız mesajın her harfi dört karakterden oluştuğundan harfleri yazma sistemini incelemeniz gerekiyor. Kullandığımız sistemde harfin ilk kolonu harfin kendisi ve reverse'ünden oluşuyor. Yani harf ilk kez okunmuşsa harfin kodu ve $80 fazlasını ekrana yazmalıyız. Eğer harf ikinci kez okunduysa $40 fazlasını (Shift-harf) ve bunun $80 fazlasını (yani reverse'ünü)
basıyor. Lda $COF7
Eor #$40 Sta $C0F7 Bne Bitir her harfin okunuşundan sonra harfin kendisinin mi yoksa shift'inin mi basılacağına $C0F7 adresi karar veriyor. Buraya her gelişinde $C0F7 adresinin değeri $40 veya $80 arasında değiştiriliyor. Eğer değer $00 olduysa gelecek harfin okunması gerektiği için harfi okuyan komutun adresini bir artırıyoruz. Inc Harfal-1 Bne Bitir Inc Harfal-2 Inc $D019 Jmp $EA81 Ve kontrolü Kernal'a veriyoruz. Unutmayın, programda ekran rengini ayarlamanız gerekiyor. Bir uyarı daha: Eğer programın RASTER giriş satırını $31'den farklı bir yere alacaksanız bu satırın ($31+N*8) formülüne uymasına dikkat edin. Hepinize programcılık hayatınızda başarılar dilerim.
Bitir