Bu sayfadaki yazılar
Sayfanın metni
Sayfa 11
lda #$08 ; VIC’in scroll registerine sta $d016 ; normal değerini yaz. wait lda $d012 ; Raster registerini oku. bne wait ; “0” oluncaya kadar bekle. jsr scroll ; Scroll rutinini git. jmp $febc ; İnterrupt rutininden çık.
scroll dec xpos ; Kayma miktarını 1 azalt bpl exit ; Sonuç pozitif ise (0-127 arasındaysa) çık. lda #$07 ; Negatif ise (128-255 arasındaysa) sta xpos ; kayma miktarını 7 yap ldx #$00 ; Karakter sayacı=0 scr lda $0451,x ; Ekrandaki karakterleri sta $0450,x ; sola kaydır inx ; sayacı 1 arttır. cpx #$27 ; 39 oldumu? bne scr ; olmadıysa tekrarla tbase lda text0 ; hafızadan yeni karakter değerini oku bne nextchar ; Okunan değer 0 (yazı sonu) değilse git lda #<text0 ; Hafızadaki yazının ldx #>text0 ; başlangıç adresini sta tbase+1 ; programdaki karakter okuma stx tbase+2 ; kısmına yaz rts ; ana rutine geri dön
nextchar sta $0477 ; yeni karakteri 39. Sütuna yaz. inc tbase+1 ; karakter okuma adresinin LO byte’ını 1 arttır. bne exit ; 0 olmadıysa çık. inc tbase+2 ; olduysa HI byte’ı 1 arttır. exit rts ; Ana rutine geri dön.
text0 .scrl "iste karsinizda 1x1 scroll rutini 2003 hades.. " .byte 0 ; Bu sayı yazı sonunu gösterir ve mutlaka olmalıdır.
colortab .byte 0,2,10,7,1,7,10,2,0,006,0,2,10,7,1,7,10,2,0 ;renk tablosu delaytab .byte 6,8,08,1,7,8,8,8,9,117,8,8,8,8,9,8,7,1,9,1 ;gecikme tablosu xpos .byte 7 ; kayma miktarı
.end
Ve işte karşınızda 1x1 “text scroll” ve “color raster” programının ekran görüntüsü.....
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 10
1x1 SCROLL VE RENKLİ RASTER ŞERİTLERİ
Bu sayıdan itibaren intro programcısı olmak için çalışmalara başlıyoruz. İlk konumuz öncelikle neredeyse her introda karşımıza çıkan “text scroll” ve “color raster” efektleri. Bir intro yapabilmek için en başta iyi bir assembler bilgisi, C64’ün donanım adreslerini iyi bilmek ve biraz da dizayn yeteneği gereklidir. Bunun yanında elinizin altında çeşitli karakter setleri, müzikler, sprite’lar, logolar ile çeşitli editörler (karakter, sprite, logo, grafik editörleri vs...) bulunmalıdır.
Programımız standart C64 karakter setini kullanmaktadır ve müzik yoktur.
(C64ASM V1.1 ile compile edilecek şekilde yazılmıştır.)
*=$0801 .word nextline .word 2003 ; 2003 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0 start sei ; interruptları engelle lda #$01 ; Yazı rengi beyaz olacak şekilde jsr $e536 ; ekranı sil. lda #$07 ; kayma miktarının ilk değerini sta xpos ; “xpos” adresine yaz lda #<text0 ; Scroll için text’in hafıza adresini ldx #>text0 ; LO HI şeklinde sta tbase+1 ; programdaki karakter stx tbase+2 ; okuma kısmına yaz. lda #<int0 ; kendi interrupt rutinimizin ldx #>int0 ; başlangıç adresini sta $0314 ; interrupt vektörlerine stx $0315 ; kopyala lda #$00 ; Bu komutlar mutlaka ldx #$01 ; olmalıdır ve ldy #$7f ; standarttır. sta $dc0e ; CIA1 zamanlayıcılarını sıfırla stx $d01a ; Raster interrupt enable olacak sty $dc0d ; CIA1 interrupt kontrol registeri cli ; interruptları serbest bırak jmp * ; normal kod sonsuz döngü olsun int0 inc $d019 ; Bir sonraki interrupta izin ver lda xpos ; Kayma miktarını sta $d016 ; VIC kontrol (scroll) registerine ver. lda #$38 ; interrupt yapılacak raster değerini raster0 cmp $d012 ; VIC’in raster registeriyle karşılaştır. bne raster0 ; eşit değilse tekrar karşılaştır. ldx #$00 ; Eşit olmuş ve sayıcıyı sıfırlayalım. loop0 lda colortab,x ; Renk tablosundan o anki renk değerini al sta $d020 ; VIC’in ekran dış renk registerine yaz. sta $d021 ; VIC’in ekran iç renk registerine yaz. ldy delaytab,x ; Gecikme tablosundan o anki değeri al delay0 dey ; değeri 1 azalt bne delay0 ; “0” olmadıysa tekrar azaltma yap. inx ; Sayacı 1 arttır. cpx #$13 ; $13 (19) olmuşmu? bne loop0 ; olmadıysa işlemleri tekrarla.