kurs sonrasI ornekLer II

53 replies · 30,506 views

kurs sonrasI ornekLer II
Abi ben bu topici atlamışım ya. Hatırlıyorum şirkette tam bu topic'e tıkladım, o sırada içeri birileri girdi, araya iş karıştı, kapattım browserı. Daha sonra da yeni topic olarak görmeyince unuttum gitti.
Stranger, kardeşim sen olayı çözmüşsün. Bu kadarını söyleyebilirim. Sonuç olarak ekranın üstüne ve altına iki raster bloğu çekmem gerekse hemen hemen aynı kodu yazardım. Smooth scrollü de öğrendiysen eğer senden bir intro bekliyorum artık. Üst tarafta koala logo, alttan geçen bir scroll, raster barlar ve müzik. Bence hepsini de yapmaya hazırsın ve elinde yeterli örnek var bunlar için. Olmadı ben birebir böyle bir örnek yapar gönderirim buraya incelersiniz.
kurs sonrasI ornekLer II
Hadi yine iyisiniz. Sizi uğraştırmadan yazdım birkaç intro örneği 🙂
Az sonra açacağım "Dummy Intro" başlığı altında bulabilirsiniz.
kurs sonrasI ornekLer II
@Skate: Karde$im cok mutevazisin ve guzel sozlerin icin te$ekkurler.Fakat sizin code tecrubesinin %20 sine uLa$mak icin daha 1 kac sene caLI$mak LazIm.Hemen gaza getirme beni 🙂))) I$in gercegi, Nightlord ve senin anlattIkLarInIz o kadar detayLI ve degerLi biLgiler ki bu bilgilere bu kadar koLay uLa$Ip kayItsIz kalmak imkansIz.
Bende foruma c64 coding ile ilgili tum topicleri toplayIp bir cep kitabI hazIrLadIm. Her yerde elimin aLtInda, caLI$ma fIrsatI buLuyorum. Malum God,Gnostic(MS!) ve Lord gibi 3 iyi coderla aynI grupta 10 sene gecirince insan tembelle$ip nasolsa yazan var diye code dan uzak duruyor. $imdi bir anda i$e girince cok caLI$mak gerekiyor 🙂
Sonuc olarak Glance gurubunun bu egitim seferberligiyle scene' e c64 icin yeni 2-3 coder ve belkide 1-2 grup katILabiLir. Bu vesileyle tekrar emeklerinize sagLIk demek istiyorum.
Basit sinus ornegi...
Cok basit ama mantIgI kapmak icin yazmayI denedigim bir sinus caLI$masI... HatIrlarsInIz Nightlord VIC tutoriaLInIn icerisinde raster barLarI hareket ettirmek icin kuLLanmI$tI. Oradaki raster zamanlamalarInIn arasInda kafam karI$masIn diye ayrI caLI$mI$tIm.Belki yararI oLur payLa$ayIm. $u 2 editorde ho$uma gitti dataLarI acme'ye txt oLarak aLabiLiyorsunuz. Sprite editorde import yok yanLIz, direkt ciziyorsunuz...
Acme icin Sprite Editor:
http://noname.c64.org/csdb/release/?id=26944
Acme icin Sinus Tablosu Uretici:
http://noname.c64.org/csdb/release/?id=38353
SYS8192---$2000
!to"sindeneme.prg",cbm
*=$2000 ;sys8192
jsr$e544
lda#$00
sta$d020
sta$d021
sta$0286
;spr yarat
lda#$01
sta$d015
lda #$c0 ; $3000 'den sprite datasi al
sta $07f8
lda#$a0
;sacede x koordinati($d000) onemli
;y koordinati($d001) sinus tablosundan okunacak
sta$d000
;interrupt
sei
lda#$7f
sta$dc0d
lda$d01a
ora#$01
sta$d01a
lda$d011
and#$7f
sta$d011
lda#$80
sta$d012
lda#<int
sta$0314
lda#>int
sta$0315
cli
rts
int:
inc$d019
jsr sprite
jmp$ea81
sprite:
ldx indeks
ldy sintablo,x
sty$d001
inc indeks
rts
indeks:
!byte $00 ;sinus tablosunda kacinci degerde oldugumuz
;bu byte ta saklaniyor
!align 255,0
sintablo:
; ($d001)'e her seferinde # olarak sirayla veriliyor
!byte 80,80,80,80,80,80,80,80,80,80,80,80,80,81,81,81
!byte 81,81,81,82,82,82,82,83,83,83,83,84,84,84,85,85
!byte 85,86,86,86,87,87,88,88,88,89,89,90,90,91,91,91
!byte 92,92,93,93,94,94,95,95,96,96,97,97,98,98,99,99
!byte 100,100,101,101,102,102,103,103,104,104,104,105
!byte 105,106,106,107
!byte 107,108,108,109,109,110,110,110,111,111,112,112
!byte 112,113,113,113
!byte 114,114,114,115,115,115,116,116,116,117,117,117
!byte 117,117,118,118
!byte 118,118,118,119,119,119,119,119,119,119,119,119
!byte 119,119,119,119
!byte 119,119,119,119,119,119,119,119,119,119,119,119
!byte 119,118,118,118
!byte 118,118,117,117,117,117,117,116,116,116,115,115
!byte 115,114,114,114
!byte 113,113,113,112,112,112,111,111,110,110,110
!byte 109,109,108,108,107
!byte 107,106,106,105,105,104,104,104,103,103,102,102
!byte 101,101,100,100
!byte 99,99,98,98,97,97,96,96,95,95,94,94,93,93,92,92
!byte 91,91,91,90,90,89,89,88,88,88,87,87,86,86,86,85
!byte 85,85,84,84,84,83,83,83,83,82,82,82,82,81,81,81
!byte 81,81,81,80,80,80,80,80,80,80,80,80,80,80,80,80
*=$3000
spritedata:
!byte 0,0,0,0,0,0,0,120,0,0,204,0,0,207,0,0,192,0,0,207
!byte 0,0,204,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
!byte 120,12,204,204,28,216,192,60,240,248,204,224
!byte 196,254,240,196,12,216,120,12,204
kurs sonrasI ornekLer II
Gayet güzel çalışıyor, eline sağlık Stranger.
Bu arada haberiniz olsun, ACME'ye sinüs ve benzeri trigonometrik fonksiyonlar 0.92 versiyonunda eklendi. Hatta hatta şu anki versiyon 0.93. Ama henüz yayınlanmadı bu versiyonlar tam anlamıyla. Yalnızca linux üzerinde test amaçlı source codeları yayınlandı 0.93'ün. Eklenen yeni özellikleri aşağıdaki linkten görebilirsiniz.
http://www.esw-heim.tu-clausthal.de/~marco/smorbrod/acme/docs/Changes.txt
Kısacası çok yakında ACME'de sinus tablosu yaratma işlemini compiler komutlarıyla halledebileceğiz.
kurs sonrasI ornekLer II
Aklıma gelmişken sprite generator olarak
Wixbouncer v1.0 (Win32)
http://noname.c64.org/csdb/release/?id=12618
bunu tavsiye ederim. Bir de kimse sormuyor "ulan illa da böyle mi kullanmak lazım, asm kodlarıyla sinüs tablosu yaratılamazmı?!" diye. Yaratılabilir. Cruzer/Camelot'un Too(C)o(M)p(L)ex 256 byte'ında var bir örneği. Kodları da paketin içinde yer alıyor.
http://noname.c64.org/csdb/release/?id=11730
Ancak ne var ki ASM'den sinüs tablosu yaratma Basic ROM'u kullanılmadığı sürece (Cruzer kullanmamış) çok kısa olmuyor. Basic ROM'u, hatta hatta doğrudan Basic kullanarak sinüs tablosu üretmek her zaman en kısa yoldur. En azından 256 bytelar için en ideal yoldur. Yine de sizin 256 byte kasmayacağınızı varsayarak cruzer'ın kodunu incelemenizi tavsiye ediyorum.

Last edited: 2007-02-10 18:10

kurs sonrasI ornekLer II
yeniden konu açmamak için buraya yazayım .🙂
biraz spritelarla uğraşayım ve öğrenmek için ufak bir şey yazmaya çalıştım 😮 sorun şu ki,ekranda sağa-sola kayan 5 ad sprite var fakat nasıl oluyor bilmiyorum,5 nci sprite ekran sonuna gelmeden ekranın solunda görünüyor,tam olarak yapmaya çalıştığım 1 nci sprite gibi ekranın arkasında kalıp sonra geri gelmesi,malesef başaramadım,aklıma $d010 geldi oda yemedi yada ben yediremedim 😃 kodlar aşağıda nerde hata yapıyorum?
!to"sprite.prg",cbm
 
    *=$0907   ;sys 2311
     ldx #$01
     jsr $e544
     lda #$00
     sta $d020
 
     lda #$ff
     sta $d015    ;sprite lar açık
     sta $d01c    ;çok renkli
     sta $d017    ;y ekseninde iki kat büyük
     sta $d01b    ;karakterlerin arkasında
 
 
     ldx #$30     ;sprite datalarını 0c00 a yerleştir.
     stx $07fb
     inx
     stx $07f8
     inx
     stx $07f9
     inx
     stx $07fa
     inx
     stx $07fc
 
     lda #$80   ; sprite y ekseni
     sta $d001
     sta $d003
     sta $d005
     sta $d007
     sta $d009
 
     lda #$01    ;sprite renklerini ayarla
     sta $d025
 
     ldx #$00
     lda #$03
sprenk sta $d027,x
      inx
      cpx #$05
      bne sprenk
 
      sei
 
      lda #$7f
      sta $dc0d
 
      lda #$01
      sta $d01a
      lda #$1b
      sta $d011
 
      lda #$7e
      sta $d012
      lda #<irq
      sta $0314
      lda #>irq
      sta $0315
      cli
      jmp * 
irq
     inc $d019
     jsr sprite
     jmp $ea81 
sprite  
      jsr sayac
 
 
loop1  clc
       lda #$00
       adc sinus,x
       sta $d000
       lda #$20
       adc sinus,x
       sta $d002
       lda #$40
       adc sinus,x
       sta $d004
       lda #$60
       adc sinus,x
       sta $d006
       lda #$80
       adc sinus,x
       sta $d008
       rts
sayac 
       ldx count
       inc count
       lda count
       cmp #$ff
       bne loop1 
       lda #$00
       sta count
       rts
count  !by 0
 
sinus
!by 0,1,2,3,4,5,7,8,10,12,14,17,19,22,25,27
!by 30,33,37,40,43,47,50,54,58,61,65,69,73,76,80,84
!by 87,91,95,98,102,105,109,112,115,118,121,124,127,130,132,134
!by 137,139,141,142,144,145,146,147,148,149,149,149,149,149,149,149
!by 148,147,146,145,143,142,140,138,136,134,131,129,126,123,120,117
!by 114,111,108,104,101,97,94,90,86,83,79,75,71,68,64,60
!by 56,53,49,46,42,39,36,33,29,27,24,21,18,16,14,12
!by 10,8,6,5,3,2,1,1,0,0,0,0,0,0,1,1
!by 2,3,5,6,8,10,12,14,16,19,21,24,27,30,33,36
!by 39,42,46,49,53,57,60,64,68,72,75,79,83,87,90,94
!by 97,101,105,108,111,114,118,121,124,126,129,131,134,136,138,140
!by 142,143,145,146,147,148,149,149,149,149,149,149,149,148,147,146
!by 145,144,142,140,139,137,134,132,130,127,124,121,118,115,112,109
!by 105,102,98,95,91,87,84,80,76,72,69,65,61,57,54,50
!by 47,43,40,37,33,30,27,24,22,19,17,14,12,10,8,7
!by 5,4,3,2,1,0,0,0,0,0,0,1,1,2,3
;sprite datalari
           *=$0C00 ;a harfi
         !by 2,170,128,10,170,160,37,85,88,165,85,90,149,105,86,149,130,86,149,130,86,149,130,86,149,130,86,149,130,86,149,130,86,149,162,86,149,170,86,149,138,86,149,130,86,149,130,86,149,130,86,149,130,86,165,130,90,170,130,170,170,130,170
          *=$0c40   ;d harfi
         !by 85,85,64,85,85,80,90,170,148,106,170,165,106,150,165,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,150,165,106,170,165,90,170,148,85,85,80,85,85,64
          *=$0c80   ;r harfi           
          !by 170,170,128,170,170,160,165,85,104,149,85,90,149,105,90,149,130,86,149,130,86,149,130,90,149,130,88,149,130,104,149,130,160,149,138,128,149,170,168,149,162,90,149,130,86,149,130,86,149,130,86,149,130,86,165,130,90,170,130,170,170,130,170
          *=$0cc0   ;e harfi
          !by 170,170,170,170,170,170,165,85,86,149,170,170,149,128,10,149,128,0,149,128,0,149,128,0,149,128,128,149,170,128,149,85,128,149,170,128,149,128,128,149,128,0,149,128,0,149,128,0,149,128,10,149,170,170,165,85,86,170,170,170,170,170,170
          *=$0d00   ;m harfi
          !by 170,0,170,170,130,170,149,170,86,149,105,86,149,85,86,149,85,86,150,150,150,150,170,150,150,40,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,170,0,170,170,0,170

Last edited: 2008-09-22 05:20

kurs sonrasI ornekLer II
@joker: hatan şurada;
lda #$80
adc sinus,x
sta $d008
burada sinus tablosunun değerlerinin 127'yi geçememesi lazım. Ancak senin sinus tablon 149'a kadar gidiyor.
$80 = 128
128 + 149 = 277 > 255
Sorun burada. Bunu şu şekilde halledebilirsin. Ben tek sprite için göstericem, sen genelleştirirsin.
lda #$80
adc sinus,x
sta $d008
bcc +
lda $d010
ora #%00010000
sta $d010
jmp ++
+
lda $d010
and #%11101111
sta $d010
++
rts

Yani eğer toplamdan çıkan değer 255'den büyükse $d010'un 4. bitini set et (diğerlerine dokunma). Benzer şekilde 255 ya da altında bir toplam değeriyse $d010'un 4.bitini sıfırla (yine diğer bitlerle elleşme).
kurs sonrasI ornekLer II
😃 ahaaa çok sağol skate hiç dikkat etmemiştim oraya,hemen uygulamaya geçiyorum,tabii sonuçları hemen değil yine bir ara bir intro ile izleyeceksiniz :rolleyes:
kurs sonrasI ornekLer II
@skate;
abi bu seferde son iki sprite en sona geliyor orada öölece kalıyor geri gelmiyor,şimdi nerede hata yapıyorum acep 😕
lda #$40
       adc sinus,x
       sta $d004
       
       bcc reset
       lda $d010             
       ora #$04
       sta $d010
    
      
       lda #$60
       adc sinus,x
       sta $d006
       bcc reset0
       lda $d010
       ora #$08      
       sta $d010
    
       lda #$80
       adc sinus,x
       sta $d008
       bcc reset1
       lda $d010
       ora #$10
       sta $d010
       rts
sayac 
       ldx count
       inc count
       lda count
       cmp #$d7
       bne loop1 
       lda #$00
       sta count
       rts
reset
      lda $d010
      and #$fb
      sta $d010
      rts
reset0
      lda $d010
      and #$f7
      sta $d010
      rts
reset1
      lda $d010
      and #$ef
      sta $d010
      rts
kurs sonrasI ornekLer II
Artık makroların gücünü öğrenme zamanı 🙂
!to"sprite.prg",cbm
!macro MoveSprite .spr, .pos {
        lda #.pos
        adc sinus,x
        sta $d000+(.spr*2)
        bcc +
        lda $d010
        ora #(2^.spr)
        sta $d010
        jmp ++
+
        lda $d010
        and #((2^.spr) EOR 255)
        sta $d010
++
}
        *=$0907   ;sys 2311
        ldx #$01
        jsr $e544
        lda #$00
        sta $d020
        lda #$ff
        sta $d015    ;sprite lar açık
        sta $d01c    ;çok renkli
        sta $d017    ;y ekseninde iki kat büyük
        sta $d01b    ;karakterlerin arkasında

        ldx #$30     ;sprite datalarını 0c00 a yerleştir.
        stx $07fb
        inx
        stx $07f8
        inx
        stx $07f9
        inx
        stx $07fa
        inx
        stx $07fc
        lda #$80   ; sprite y ekseni
        sta $d001
        sta $d003
        sta $d005
        sta $d007
        sta $d009
 
        lda #$01    ;sprite renklerini ayarla
        sta $d025
 
        ldx #$00
        lda #$03
sprenk
        sta $d027,x
        inx
        cpx #$05
        bne sprenk
        sei
        lda #$7f
        sta $dc0d
        lda #$01
        sta $d01a
        lda #$1b
        sta $d011
        lda #$7e
        sta $d012
        lda #<irq
        sta $0314
        lda #>irq
        sta $0315
        cli
        jmp * 
irq
        inc $d019
        jsr sprite
        jmp $ea81 
sprite  
        jsr sayac
 
loop1   
        clc
        +MoveSprite 0, $00
        +MoveSprite 1, $20
        +MoveSprite 2, $40
        +MoveSprite 3, $60
        +MoveSprite 4, $80
        rts
sayac 
        ldx count
        inc count
        lda count
        cmp #$ff
        beq +
        jmp loop1 
+
        lda #$00
        sta count
        rts
count
        !by 0
 
sinus
        !by 0,1,2,3,4,5,7,8,10,12,14,17,19,22,25,27
        !by 30,33,37,40,43,47,50,54,58,61,65,69,73,76,80,84
        !by 87,91,95,98,102,105,109,112,115,118,121,124,127,130,132,134
        !by 137,139,141,142,144,145,146,147,148,149,149,149,149,149,149,149
        !by 148,147,146,145,143,142,140,138,136,134,131,129,126,123,120,117
        !by 114,111,108,104,101,97,94,90,86,83,79,75,71,68,64,60
        !by 56,53,49,46,42,39,36,33,29,27,24,21,18,16,14,12
        !by 10,8,6,5,3,2,1,1,0,0,0,0,0,0,1,1
        !by 2,3,5,6,8,10,12,14,16,19,21,24,27,30,33,36
        !by 39,42,46,49,53,57,60,64,68,72,75,79,83,87,90,94
        !by 97,101,105,108,111,114,118,121,124,126,129,131,134,136,138,140
        !by 142,143,145,146,147,148,149,149,149,149,149,149,149,148,147,146
        !by 145,144,142,140,139,137,134,132,130,127,124,121,118,115,112,109
        !by 105,102,98,95,91,87,84,80,76,72,69,65,61,57,54,50
        !by 47,43,40,37,33,30,27,24,22,19,17,14,12,10,8,7
        !by 5,4,3,2,1,0,0,0,0,0,0,1,1,2,3
;sprite datalari
        *=$0C00 ;a harfi
        !by 2,170,128,10,170,160,37,85,88,165,85,90,149,105,86,149,130,86,149,130,86,149,130,86,149,130,86,149,130,86,149,130,86,149,162,86,149,170,86,149,138,86,149,130,86,149,130,86,149,130,86,149,130,86,165,130,90,170,130,170,170,130,170
        *=$0c40 ;d harfi
        !by 85,85,64,85,85,80,90,170,148,106,170,165,106,150,165,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,150,165,106,170,165,90,170,148,85,85,80,85,85,64
        *=$0c80 ;r harfi           
        !by 170,170,128,170,170,160,165,85,104,149,85,90,149,105,90,149,130,86,149,130,86,149,130,90,149,130,88,149,130,104,149,130,160,149,138,128,149,170,168,149,162,90,149,130,86,149,130,86,149,130,86,149,130,86,165,130,90,170,130,170,170,130,170
        *=$0cc0 ;e harfi
        !by 170,170,170,170,170,170,165,85,86,149,170,170,149,128,10,149,128,0,149,128,0,149,128,0,149,128,128,149,170,128,149,85,128,149,170,128,149,128,128,149,128,0,149,128,0,149,128,0,149,128,10,149,170,170,165,85,86,170,170,170,170,170,170
        *=$0d00 ;m harfi
        !by 170,0,170,170,130,170,149,170,86,149,105,86,149,85,86,149,85,86,150,150,150,150,170,150,150,40,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,170,0,170,170,0,170
kurs sonrasI ornekLer II
@skate:
adrem nedir?
kurs sonrasI ornekLer II
😃 makroların gücü adına.artık party de peşindeyim gölge gibi şu makro olayının Türkçe meali için.😮
yalnız acme de derlerken 11 ve 15 nci satırlarda hata mesajı veriyor,
Label already defined.
kurs sonrasI ornekLer II
@gnostic: bence de nedir o? benim laflarımda öyle birşey mi geçmiş?
@joker: eski versiyon kullanıyor olabilir misin? v0.91 ve üstünde düzgün compile eder. Aksi taktirde + ve ++ gördüğün yerlere .label1 .label2 yazarak derleyebilirsin. Başındaki "." karakterini unutma etiketlerin, yoksa global etiket olarak algılanırlar ve yine aynı hata mesajını alırsın aynı makroyu ikinci kez kullandığın zaman.
kurs sonrasI ornekLer II
.label etiketlerini yazarak denedim,bendeki 0.86 versiyonu muhtemelen versiyondan kaynaklanıyor.hemen yeni versiyonu edineyim 😃
peki macro kullanmasaydık eğer,nasıl düzeltebilirdik son iki harfin ileride kalmasını ? yani hatam nerde ?
gnostic adres nedir? demiş olabilir mi?

Last edited: 2008-09-24 11:38