@skate: yine cok hizlisin... :)Elbette ki kardeşim. Seve seve yaparım. Ama mesaim bitiyor birazdan, eve gidiim, boş bir vaktimde sözüm olsun.
Peki cok yararli olacagini dusundugum baska bir sey var...
Multicolor bitmap ekranI actik. Burada en cok kullanilan programlardan grafikler gosterelim mi? Bir tutorial seklinde.
Ornegin:
Art studio'nun bitmap,renk vb. datalari suraya yuklenir. Art studio resmi bu yuzden soyle gosterilir gibi.
Ayni sey en cok kullanilan koala painter ve amica paint icinde yapilirsa super bir tutorial a imza atilmis olur.
SPRRENK:
LDX$D027
CPX#$F1
BEQ KIRMIZIYAP
LDX$D027
CPX#$F2
BEQ BEYAZYAP
JMP IRQSON
KIRMIZIYAP:
LDX#$02
STX$D027
JMP IRQSON
BEYAZYAP:
LDX#$01
STX$D027
JMP IRQSON
IRQSON:
RTS
SPRRENK:
LDX$D027
CPX#$F1
BEQ KIRMIZIYAP
;LDX$D027
CPX#$F2
BEQ BEYAZYAP
JMP IRQSON
KIRMIZIYAP:
LDX#$02
STX$D027
JMP IRQSON
BEYAZYAP:
LDX#$01
STX$D027
;JMP IRQSON
IRQSON:
RTS
SPRRENK:
lda $d027
eor #3
sta $d027
rts
!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
lda #$80
adc sinus,x
sta $d008
bcc +
lda $d010
ora #%00010000
sta $d010
jmp ++
+
lda $d010
and #%11101111
sta $d010
++
rts
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
!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
...
;sprite datalari
*=$0C00 ;a harfi
*=$0c40 ;d harfi
*=$0c80 ;r harfi
*=$0cc0 ;e harfi
*=$0d00 ;m harfi
@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 1
lda $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 --
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