Bu sayfadaki yazılar
Sayfanın metni
Sayfa 22
ldx #$00 ;sayacı sıfırlayalım loop1 lda temp0,x ;kopyaladığımız değerleri ekranın sta $07c0,x ;en alt satırına yazalım. lda temp1,x ;Aynı işi renk belleği sta $dbc0,x ;için de yapalım. inx ;sayacı 1 arttır cpx #$28 ;40 oldu mu? bne loop1 ;olmadıysa tekrarla son rts ;evet oldu. Öyleyse çıkalım. temp0 =son+1 temp1 =temp0+40 .end Eğer bu efekti $EA8A adresini kullanmadan yapsaydık oldukça uzun bir program yazmak zorunda kalacaktık. ADRES : $FFF0 (65520) GÖREVİ : Kursör pozisyonunu ayarlama / okuma Romda öyle rutinler vardır ki sizleri birçok işten kurtarır. Birazdan anlatacağımız bu rutinde bunlardan biridir. Bir program yazmaya başladınız ve ekranın 12. Satır 10. Sütun pozisyonundan başlayan 10 harflik bir yazı yazmanız gerekiyor. Bu işlemi normalde iki şekilde yapabilirsiniz. Birinci olarak ekranın ilgili pozisyonunun ekran belleği adresini öğrenip yazınızı ekran kodu olarak yazdırırsınız. İkincisi kursörü önce en üst köşeye alırsınız. Daha sonra “return” tuşunun kodunu kullanarak kursörü istediğiniz satıra getirirsiniz. Yazacağınız yazıya biraz “boşluk” karakteri ekleyerek istediğiniz pozisyona yazmış olusunuz. İkisinden birini tercih edin. Birinci seçenekte ekran belleğinin adresleriyle uğraşırsınız. İkinci seçenekte ise fazladan byte kullanarak programınızı uzatırsınız. Aranızda “Başka bir alternatif yok mu ?” diye soranlar olabilir. Evet var. KERNAL ROM’da, işletim sistemi rutinleri için sıçrama tablosu denilen ve Rom’un son 128 byte’ında yer alan, direct ve indirect jump komutlarından oluşan bir bölge vardır. Bu bölgenin $FFF0 adresi tam bize göredir. Ekranın istediğiniz yerine bir yazı yazmak için yapmanız gereken işlemler şunlardır. Önce “carry” bitini sıfırlayın. Sonra X registerine satır numarasını, Y registerine süttun değerini yükleyin. En son olarak bir JSR komutuyla rutini çağırın. Böylece kursörün pozisyonunu ayarlamış olduk. Daha sonra ise geçen sayıda tanıtmış olduğumuz $AB1E adresini kullanarak yazıyı ekrana yazdırın. İsterseniz buraya kadar yazdıklarımızla ilgili örnekler verelim. Yazımız 10. Satır 5. Sütunda olsun. İlk önce doğrudan ekran adresi vererek bu yazıyı yazdıralım. Bu arada ufak bir not düşelim. Vereceğimiz örneklerde satır ve sütun numaraları “0” dan başlamaktadır. Program yazarken buna dikkat edin. POZİSYON = EKRAN BELLEĞİ BAŞLANGIÇ + SATIR * 40 + SÜTUN formülüne göre adresi hesaplayalım. EKRAN BELLEĞİ BAŞLANGIÇ ADRESİ = 1024 POZİSYON = 1024 + 10*40 + 5 = 1024 + 400 + 5 = 1429 ($0595) Şimdi yazıyı yazdıralım. ldx #$00 loop0 lda text,x sta $0595,x inx cpx #$0b bne loop0 rts text .scrl “c64 turkiye”
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 23
İşin hesaplama kısmı olmasa her şey çok güzel olacak. Şimdi de ikinci şıkkı deneyelim. jsr $e544 ldx #$00 loop0 lda text,x jsr $ffd2 inx cpx #$1a bne loop0 rts text .byte $0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d,$0d .byte $20,$20,$20,$20,$20 .text “c64 turkiye” $0d sayısı return tuşunun, $20 sayısı ise “boşluk” karakterinin kodudur. Şimdi de $FFF0 adresini kullanarak yazıyı yazdıralım. clc ;”carry” bitini sıfırla ldx #$0a ;satır değeri ldy #$05 ;sütun değeri jsr $fff0 ;kursörü ayarla lda #<text ldy #>text jsr $ab1e rts text .text “c64 turkiye” .byte 0 Örnekleri karşılaştırarak hangisi daha kolayınıza geliyorsa onu kullanın. Şimdi de kursörün pozisyonunu okuyalım. sec ;”carry” bitini “1” yap jsr $fff0 ;rutini çağır. ... ... rts
Rutinden geri dönüşte kursörün satır değeri X registerinde, sütun değeri ise Y registerinde bulunur.
Bildiğiniz gibi C64’ün BASIC komutlarında kursörle ilgili bir komut yoktur. $FFF0 adresini kullanarak, kursörü istediğiniz pozisyona getirmek için “CURSOR” komutu ekleyebilirsiniz. CURSOR 10,10 : PRINT “C64 TURKIYE” vs. kullanmak ne güzel olurdu değil mi? (Bu yazıyı yazdıktan sonra “HADES’BASIC” bölümüne “CURSOR” komutunu ekledim.)