...
;sprite datalari
*=$0C00 ;a harfi
*=$0c40 ;d harfi
*=$0c80 ;r harfi
*=$0cc0 ;e harfi
*=$0d00 ;m harfi
skate wrote:@gnostic: bence de nedir o? benim laflarımda öyle birşey mi geçmiş?
53 replies · 30,506 views
...
;sprite datalari
*=$0C00 ;a harfi
*=$0c40 ;d harfi
*=$0c80 ;r harfi
*=$0cc0 ;e harfi
*=$0d00 ;m harfi
skate wrote:@gnostic: bence de nedir o? benim laflarımda öyle birşey mi geçmiş?
!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
; Sprite 0
lda #$00
adc sinus,x
sta $d000
bcc +
lda $d010
ora #%00000001
sta $d010
jmp ++
+
lda $d010
and #%11111110
sta $d010
++
; Sprite 1
lda #$20
adc sinus,x
sta $d002
bcc +
lda $d010
ora #%00000010
sta $d010
jmp ++
+
lda $d010
and #%11111101
sta $d010
++
; Sprite 2
lda #$40
adc sinus,x
sta $d004
bcc +
lda $d010
ora #%00000100
sta $d010
jmp ++
+
lda $d010
and #%11111011
sta $d010
++
; Sprite 3
lda #$60
adc sinus,x
sta $d006
bcc +
lda $d010
ora #%00001000
sta $d010
jmp ++
+
lda $d010
and #%11110111
sta $d010
++
; Sprite 4
lda #$80
adc sinus,x
sta $d008
bcc +
lda $d010
ora #%00010000
sta $d010
jmp ++
+
lda $d010
and #%11101111
sta $d010
++
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
; Sprite 0
lda #$00
adc sinus,x
sta $d000
bcc +
lda $d010
ora #%00000001
sta $d010
jmp ++
+
lda $d010
and #%11111110
sta $d010
++
; Sprite 1lda $d000
cmp #$50
bcc +
inc counter1
+ lda $d001
cmp #$60
bcs +
inc counter2
+ jsr +
rts
+ lda #$02
sta $d020
rts-- lda $d000
clc
adc #$18
sta $d002
- lda $dc00
cmp #%00000111
beq +
cmp #%00001011
beq ++
jmp -
+ inc $d000
jmp --
++ dec $d000
jmp --skate wrote: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.
;==============================
;=
;= 32 bytes sinus table generator
;= for a 16.16 fixedpoint sinus table with 1024 entries
;=
;= by ray//.tSCc. 2001
;==============================
section text
lea.l sinus(pc),a0 ; 4
move.w #512-1,d0 ; 4
.gen_loop move.w d0,d1 ; Approximate the sinus curve using a ; 2
subi.w #256,d1 ; parabolic graph ; 4
muls.w d1,d1 ; 2
subi.l #$10000,d1 ; -sin d0 ~ (d0 - 1) ^ 2 - 1 ; 6
move.l d1,512*4(a0) ; 3rd & 4th quadrant ; 4
sub.l d1,(a0)+ ; 1st & 2nd " ; 2
dbra d0,.gen_loop ; 4
;--
;32 bytes
section bss
sinus ds.l 1024