Bu sayfadaki yazılar
Sayfanın metni
Sayfa 20
BİT ÇİFTİ AÇIKLAMA 0 0 Saydam, ekran rengi 0 1 0 numaralı çok renkli mod sprite registeri ($D025-53285) 1 0 Sprite renk registeri 1 1 1 numaralı çok renkli mod sprite registeri ($D026-53286)
SPRİTE’LARIN GENİŞLEMESİ
Sprite’ların X ve Y eksenlerinde 2 kat büyüme özelliği vardır. Bir sprite’ı X ekseninde 2 kat büyütmek için $D01D (53277), Y ekseninde 2 kat büyütmek için ise $D017 (53271) adresleri kullanılır. Her sprite için bir bit ayrılmıştır. Eğer bit “1” ise o sprite geniş olarak görüntülenir.
lda $d01d eor #$değer sta $d01d
lda $d017 eor #$değer sta $d017
SPRITE KOORDİNATLARI
Sprite’ları ekranda göstermek için iki koordinata ihtiyacımız vardır: X ve Y koordinatları. VIC’in ilk 16 registeri X, Y sırasında olmak üzere 8 sprite’ın X ve Y koordinat değerlerini tutar. X koordinatlarıyla ilgili olarak bir registerimiz daha vardır. Bu registerin her biti bir sprite için ayrılmıştır ve “EXB” (Extra X Bit) olarak bilinir.
C64’ün ekran çözünürlüğü 320x200 olup, bir sprite’ın X koordinat değeri 255’ten büyük olabilir. Oysa X ve Y koordinatlarını tutan registerler en fazla 255 olabilir. 255’ten büyük X koordinat değerleri için $D010 adresinde her sprite için bir bit ayrılmıştır. Böylece X koordinat değeri 0-511 arasında olabilir. Y koordinat değeri ise 0-255 arasında olabilir. Aslında genişletilmemiş sprite’lar için ekranda tam olarak görüntülenebildiği koordinatlar minimum X,Y ($18-24, $32-50), maksimum X,Y ($140-320, $E5-229)’dur. Genişletilmiş sprite’lar için minimum X,Y ($18, $32) maksimum X,Y ($128-296, $D0-208)’dir.
$D000 – 0. Sprite için X koordinatı $D001 – 0. Sprite için Y koordinatı $D002 – 1. Sprite için X koordinatı $D003 – 1. Sprite için Y koordinatı $D004 – 2. Sprite için X koordinatı $D005 – 2. Sprite için Y koordinatı $D006 – 3. Sprite için X koordinatı $D007 – 3. Sprite için Y koordinatı $D008 – 4. Sprite için X koordinatı $D009 – 4. Sprite için Y koordinatı $D00A – 5. Sprite için X koordinatı $D00B – 5. Sprite için Y koordinatı $D00C – 6. Sprite için X koordinatı $D00D – 6. Sprite için Y koordinatı $D00E – 7. Sprite için X koordinatı $D00F – 7. Sprite için Y koordinatı
$D010 – Sprite’lar için EXB adresi
SPRITE ÖNCELİKLERİ
Sprite’ların birbirlerine göre öncelikleri vardır. Aynı koordinatlarda bulunan iki sprite’dan numarası küçük olan önde gözükecektir. Yani mesela 0 ve 4 numaralı sprite’lar aynı koordinatlarda bulunuyorsa 0 numaralı sprite önde gözükecektir.
Aynı şekilde sprite’ların arka plandaki karakterlerle, grafiklerle olan önceliği $D01B adresindeki sprite-background öncelik registeri tarafından belirlenir. Adresin her biti bir sprite için ayrılmıştır. Eğer bir bitin değeri “0” ise sprite arka plandaki karakterlerin, grafiklerin önünde gözükecektir. Eğer “1” ise sprite karakterlerin, grafiklerin arkasında gözükecektir.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 21
SPRITE’LARIN ÇARPIŞMASI
VIC’in en ilginç özelliklerinden birisi de sprite-sprite ve sprite-background çarpışmalarını kontrol edebilmesidir. Bir çarpışmanın olabilmesi için bir sprite’ın “1” olan kısmı ile başka bir sprite’ın veya karakterin “1” olan kısmının çakışması gerekir.
VIC’in $D01E adresi sprite-sprite çarpışmasını, $D01F adresi sprite-background çarpışmasını kontrol eder. Eğer bir bit “1” ise çarpışma olmuş demektir.
SPRITE DEMO PROGRAM
Buraya kadar teorik olarak sprite’lar hakkında bilgi sahibi olduk. Şimdi bir program ile bu öğrendiklerimizi pratik olarak gerçekleştireceğiz. Fakat bu programda çarpışma kontrolünü ve çok renkli sprite’lar için renk değiştirme işlemlerini yapmayacağız. Sprite’larımız içi kapalı kare şeklinde olacaktır. Ekrandaki sprite’lar 1’den 8’e kadar numaralandırılmıştır. Önce seçmek istediğiniz sprite’ın numarasına basın. Sonra sprite özelliklerini değiştirin. Sprite background önceliğini sprite’ı hareket ettirmeden değiştirin. “D” tuşu ile sprite eski yerine yerleştirilir. Özellikler eski değerlerine gelir.
TUŞ ÖZELLİK
X X yönünde genişletir/normale döndürür. Y Y yönünde genişletir/normale döndürür. C Sprite rengini değiştirir. P Sprite-background önceliğini belirler. D Default değerleri geri yükler. O Sprite on/off kontrolü. E EXB’yi açar/kapatır. CURSOR SAĞ X ekseninde koordinat değerini 1 arttırır. Sprite sağa hareket eder. CURSOR SOL X ekseninde koordinat değerini 1 azaltır. Sprite sola hareket eder. CURSOR AŞAĞI Y ekseninde koordinat değerini 1 arttırır. Sprite aşağı hareket eder. CURSOR YUKARI Y ekseninde koordinat değerini 1 azaltır. Sprite yukarı hareket eder.
*=$0801
.word nextline .word 2004 ; 2004 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0
lda #$0c jsr $e536 ldx #$00 stx $d020 stx $d021 lda #$ff ldata sta sdata,x inx cpx #$3f bne ldata ldx #$00 lkoor lda koor,x sta $d000,x inx cpx #$10 bne lkoor ldx #$00 ldy #$01 lcolor lda select,x sta $d027,x sta $0400,y