tr-demoscene

the scene => coding => c64 => Konuyu başlatan: stranger - 17.01.2007 15:52:12

Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 17.01.2007 15:52:12
edit:skate haklisin foruma yazarken yanlis gecirmisim.duzeltildi.
Ekleme:Monitorle F 3000 4000 FF ile kare spritelari
olu$turabilirsiniz.
Nightlord'un tutorial'ini beklerken
Yine ufak bir ornegi geli$tirelim diyorum.
A$agidaki code ile ekranda 16 sprite gostermek mumkun.
lda#$01
sta$d015 ile tek sprite 'i acip ekrani 2 ye bolerek ayni sprite i 2 ekrana da
basiyoruz. Kodu devam ettirerek ayni yolla alt ve ust teki ekranlara 8'er sprite dizebilirsiniz.
lda#$ff (8 sprite i de ac)
sta$d015 yapmak kosuluyla..
Buraya kadar tamam. Peki ekranI 2'ye bolerek alt bir tarafinda bitmap diger tarafta da normal karakter seti gosterme durumu sormak istiyorum.
Art studio, Koala Painter veya amica paintle cizdigimiz grafigi ust ekrana koyarak alt tarafıda normal karakter setine birakmak istiyorum. Genelde sorun renk datalarında cikiyor. Grafiker olarak benden bu kadar :) Ornegin geli$imini artIk gercek coderlardan.....
 
Not: (sys8192 ile calistirabilirsiniz) TASM kullanIyorum code u birebir buraya gecirdim umarim hata olmamistir.
 
 
*=$2000
; Sprite 0 i ac
lda #$01
sta $d015
lda #$c0 ; $3000 'den sprite datasi al
sta $07f8
; Interrupt
sei
lda #$7f
sta $dc0d
lda #$01
sta $d01a
lda #$1b
sta $d011
lda #$00
sta $d012
lda #sta $0314
lda #>int
sta $0315
cli
rts
 
int
inc$d019
jsr ekranbol
jsr karakter
jmp$ea81
 
ekranbol ; ekrani bolup $d020 ve $d021 leri nin renk degerleri ver
lda#$30 ; $30 dan ekrani bol
ldx#$00 ;Siyah ekran siyah border
 
ekran1 cmp$d012
bne ekran1
stx$d020
stx$d021
jsr spr0ust
 
lda#$90 ; Alt ekran buradan baslasin
ldx#$02 ; Kirmizi ekran kirmizi border
 
ekran2 cmp$d012
bne ekran2
 
stx$d020
stx$d021
 
jsr spr0alt
rts
 
sprite
 
spr0ust ; Ust ekrandaki 0. sprite
ldx#$30
ldy#$60
stx$d000
sty$d001
rts
 
spr0alt ; Alt ekrandaki 0. sprite
ldx#$30
ldy#$a0
stx$d000
sty$d001
rts
 
karakter ; Kar.ileri-geri madem irq kullandik burada muzik vs.de olabilir
inc$0400
dec$0748
rts
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 17.01.2007 16:18:00
Örnekteki
stx#$d020
stx#$d021
 
satırları
stx $d020
stx $d021
 
olarak değiştirildiğinde ve $3000'den itibaren bir sprite datası oluşturulduğunda düzgün bir şekilde çalıştı, eline sağlık Stranger.
 
Üst tarafı grafik ekranı alt tarafı karakter seti yapmak aslında bundan pek de farklı sayılmaz.
 
spr0ust ve spr0alt şeklindeki alt rutinlerinde $d000 ve $d001'i değiştirmek yerine $d011, $d016 ve $d018'i değiştirerek bunu elde edebilirsin. örnek.
 
spr0ust yerine;
 
MultiColorBitmap
lda #$3b
sta $d011
lda #$d8
sta $d016
lda #$18
sta $d018
rts
 
spr0alt yerine;
 
TextMode
lda #$1b
sta $d011
lda #$c8
sta $d016
lda #$14
sta $d018
rts
 
Bunu deneyecek olursan üst taraf $2000'deki bitmap ekranı multicolor modeda gösterirken alt taraf normal c64 karakter ekranını gösterecektir.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 17.01.2007 17:55:58
Bakın ufak bir multiplexer örneği yaptım. Koddaki açıklamalar yeterli değil belki ancak macro kullanımından kaçındım ve tüm rutini açık yazdım. En azında bu açıdan kafa karıştırıcı olmayacaktır. Bir taramada birden fazla raster pozisyonunda interrupt çalıştırmakla ilgili de iyi bir örnek bu. Yine Nightlord'un yazacağı tutorialları bekleyebilirsiniz gerekli açıklamalar için. Ayrıca örnekte alt üst borderları da açtım. Böylece spriteların nasıl borderlara basıldığıyla ilgili bir source code örneği bulunmuş olur elinizde. Mantığını da "yeri gelince" anlatırız. Ama şimdilik erken.
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 17.01.2007 17:56:20
@skate: yine cok hizlisin... :)
 
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.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 17.01.2007 18:04:58
Söylemeyi unuttum. Bu örnekte interruptlar basici kilitlemiyor. Yani basic ekranında istediğiniz gibi takılabiliyorsunuz. Ancak cursor posizyonu değiştikçe titremeler olduğunu göreceksiniz. Bu oldukça normal ve beklenen birşeydir.
 
Gelelim niçin basici kilitlemediğime... Bunu test amaçlı kullanabilirsiniz. Örneğin spriteların aynı spriteların tekrarı olup olmadığını görmek istiyorsanız
 
poke 53248,40
 
gibi komutlar çalıştırarak (53248=$d000 <- 0.sprite x koordinatı) sonuçları anında görebilirsiniz.
 
size ilginizi çekebilecek bir adres daha vereyim. $d01b = 53275
 
poke 53275,255
 
yazarak tüm spriteları karakterlerin arkasına atabilirsiniz.
 
poke 53275,0
 
ile de tam tersini yapabilir yani spriteları ön plana alabilirsiniz. Eğer yalnızca birkaç spriteın arkaplanda olmasını istiyorsanız, örneğin 0. 4. ve 7. spritelar arkaplanda olsun diyorsanız.
 
0. sprite = 2^0 = 1
1. sprite = 2^1 = 2
2. sprite = 2^2 = 4
3. sprite = 2^3 = 8
4. sprite = 2^4 = 16
5. sprite = 2^5 = 32
6. sprite = 2^6 = 64
7. sprite = 2^7 = 128
 
Yukardaki bit tablosundaki değerlerine göre 1+16+128 = 145
 
poke 53275,145
 
diyebilirsiniz.
 
Bunun gibi aklınıza gelen spritelarla ilgili herşeyle (renkler, x koordinatları, çoklu renk modeu, hafızada bulundukları yer, genişletilmiş spritelar v.s.) "poke" komutlarıyla oynaşabilirsiniz.
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 17.01.2007 18:08:00
evet. bu da multiplexer ornegi cok hos olmus.
 
1. coklu interrupt kullanmak
2. code icerisinden sprite yaratmak
3. borderlarin acilmasi
 
konulari icin guzel bir adim...
 
3 u bir arada derler ya :)
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 17.01.2007 18:08:09
Alıntı yapılan: stranger
@skate: yine cok hizlisin... :)
 
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.
Elbette ki kardeşim. Seve seve yaparım. Ama mesaim bitiyor birazdan, eve gidiim, boş bir vaktimde sözüm olsun.
 
Bu arada sk8lib'i hatırlatırım. Onun içinde koalapainter resim gösterimi örneği var. sk8lib kullanarak kolayca yapabilirsin bu işi. sk8lib'in bu işi nasıl yaptığını ise ben yazarım mini tutorial şeklinde.
 
http://www.akaydin.com/sk8lib/ (http://www.akaydin.com/sk8lib/)
bkz: vic+mem_example
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 17.01.2007 18:15:32
@skate: ok kardesim. acelesi yok zaten. uygun oldugunda yaparsin. Ama
bekliyorum bilesin :)
skatelib cok kullanisli ama olayin ozunu bildikten sonra kullanilmasi daha iyidir herhalde. biz senden normalini ogrenelim sonra lib'inide kullaniriz. (hem etinden hem sutunden moduna mi gectim acaba  :)
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 17.01.2007 18:39:48
yok kesinlikle haklısın. olayın özünü bilmek çok önemli. ama inanın şu anda ben ekrana grafik basmak için sıfırdan uğraşmıyorum her defasında. çünkü hafızada koyacağınız bölgeye göre bir sürü bit hesabı yapmanız gerekiyor. her defasında bir kaşımı havaya dikip hesaplamaktansa bu işi yapan library yazdım işte :) öğrendikten sonra librarynin tam olarak ne yaptığını daha iyi anlayacaksınız.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 18.01.2007 11:15:07
Koala ve Advanced Art Studio grafik modlarıyla ilgili güzel bir tutorial ve kaynak kod örnekleri hazırladım. Vee... Tabii ki buraya koyup mundar etmiyorum.
 
(int)abs((rs * sin(sin((x + u) * PI / p1) + (u / 8)) * cos(sin((y + v) * PI / p2) + (v / 7)))) + 1 #3'ü bekleyin. Bakalım anlayan çıkacak mı :)
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 23.01.2007 15:54:25
ılk ornegi birazcIk geli$tirdim.
(SYS2064 ile caLI$tIrILabilir)
 
Ekran 2'ye bolunmu$, hareketli sprite, muzik ve sprite zemin rengine gore renk degi$tiriyor. Eger ust ekrana bir logo yerle$tirirseniz ilk pre intro olabilir :)
 
Hydrogen'den aLdIgImIz izin uzerine Magnify'i orneklerde kuLLanIyoruz Rar 'LI dosyada... :)
 
Bu arada tablo ornekleri icin mecbur Acme 'ye gectim.( her ne kadar bu ornekte oLmasada Vic tutoriallarIndaki align komutu vb. icin )
 
 
!TO "split+sprite",CBM
 
*=$1000
!bin"MAGNIFY.BIN",,2 ;MUZIGI $1000'E YUKLUYORUZ
 
*=$0810  ;SYS2064
JSR$E544 ;EKRANI SIL
;SPRITE RUTINI
LDA#$01 ; 1 SPRITE
STA$D015 ;SPRITE AC
LDA#$02 ;KIRMIZI
STA$D027 ;RENGI VER
LDX#$A7 ;0.SPRITE'IN X KOORDINATI
LDY#$35  ;0.SPRITE'IN Y KOORDINATI
STX$D000 ;X KOORDINATINA YERLE$TIR
STY$D001 ; Y KOORDINATINA YERLE$TIR
;STANDART INTERRUPT RUTINIMIZ
SEI
LDA#$7F
STA$DC0D
LDA#$01
STA$D01A
LDA#$1B
STA$D011
LDA#$00 ;0.TRACK
JSR$1000 ;MUZIGI AYARLA
LDA#$00
STA$D012
LDA#STA$0314
LDA#>INT
STA$0315
CLI
RTS
;IRQLAR
INT
INC$D019
JSR EKRANBOL  
JSR SPRITEHAREKET
JSR MUZIK
JMP $EA81

EKRANBOL:
;BURADA $20 DEN BASLAYAN EKRANIMIZ
;CERCEVE VE EKRAN RENGI BEYAZ
LDA#$20
LDX#$01
EKRANUST CMP$D012
BNE EKRANUST
STX$D020
STX$D021
; ORTA NOKTA $9A EKRAN VE CERCEVE KIRMIZI
LDA#$9A
LDX#$02
EKRANALT CMP$D012
BNE EKRANALT
STX$D020
STX$D021
RTS
SPRITEHAREKET:
INC$D001 ;SPRITE 'I Y KOOR. KAYDIR
LDA$D001 ;$D001'IN DEGERINI OKU
CMP#$90 ;$D001 #$90 ISE
BEQ SPRITEBEYAZ ;SPRITE'I BEYAZ YAPAN RUTINE DALLAN
CMP#$00 ;$D011'IN DEGERI 0 OLDUGUNDA
BEQ SPRITEKIRMIZI ; SPRITE'I KIRMIZI YAPAN RUTINE DALLAN
RTS
MUZIK: ;MUZIGI CAL
JSR$1003
RTS
SPRITEBEYAZ:
LDA#$01
STA$D027
JMP IRQSON
SPRITEKIRMIZI:
LDA#$02
STA$D027
JMP IRQSON
IRQSON: ;RUTINE DON
RTS
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 23.01.2007 16:14:59
Vaaaaayy :) ılk demo efektini yapmışsın işte kardeş. Süper.
 
Sana ufak bir yardım. $d012 ile taramayı yakalattığın yerlerde $d020 ve $d021 gibi $d027'i de değiştirirsen spriteın renk değişimi daha güzel olur hem de alttaki rutine ihtiyaç kalmaz. Ben yapmıyorum, sen yapıp yolla bakalım bu dediğimi :) Bunu yapabilirsen ardından sana daha güzel bir soru geliyor bu ilk örnekle ilgili.
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 23.01.2007 18:54:51
Vayyy... Guzel fikirmi$ karde$im sagoL... InanILmaz yumu$ak renk degi$imi...
ayrica code kIsaLIyor..
Bende 8 sprite ustuste bindirip gecisi yumusatmayI pLanLIyordum..
 
----------------------------------------------------------
!TO "split+sprite2",CBM
*=$1000
!bin"MAGNIFY.BIN",,2 ;MUZIGI $1000'E YUKLUYORUZ
*=$0810 ;SYS2064
JSR$E544 ;EKRANI SIL
;SPRITE RUTINI
LDA#$01 ; 1 SPRITE
STA$D015 ;SPRITE AC
LDA#$02 ;KIRMIZI
STA$D027 ;RENGI VER
LDX#$A7 ;0.SPRITE'IN X KOORDINATI
LDY#$35 ;0.SPRITE'IN Y KOORDINATI
STX$D000 ;X KOORDINATINA YERLE$TIR
STY$D001 ; Y KOORDINATINA YERLE$TIR
;STANDART INTERRUPT RUTINIMIZ
SEI
LDA#$7F
STA$DC0D
LDA#$01
STA$D01A
LDA#$1B
STA$D011
LDA#$00 ;0.TRACK
JSR$1000 ;MUZIGI AYARLA
LDA#$00
STA$D012
LDA#STA$0314
LDA#>INT
STA$0315
CLI
RTS
;IRQLAR
INT
INC$D019
JSR EKRANBOL
JSR SPRITEHAREKET
JSR MUZIK
JMP $EA81
EKRANBOL:
;BURADA $20 DEN BASLAYAN EKRANIMIZ
;CERCEVE VE EKRAN RENGI BEYAZ
LDA#$20
LDX#$01
LDY#$02
EKRANUST CMP$D012
BNE EKRANUST
STX$D020
STX$D021
STY$D027
; ORTA NOKTA $9A EKRAN VE CERCEVE KIRMIZI
LDA#$9A
LDX#$02
LDY#$01
EKRANALT CMP$D012
BNE EKRANALT
STX$D020
STX$D021
STY$D027
RTS
SPRITEHAREKET:
INC$D001 ;SPRITE 'I Y KOOR. KAYDIR
RTS
MUZIK: ;MUZIGI CAL
JSR$1003
RTS
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 23.01.2007 22:27:25
Süpersin abicim işte budur ya! Aslında benim açıklamamdan sonra yapmış olduğun şey sana basit gelmiş olabilir ancak aslında bu senin artık işi çözdüğünü gösteriyor. Madem gazı almışız şimdi sana daha güzel ve öğretici bir ödev veriim.
 
Ödev 1:
ılk örneğe geri dönelim. SPRITEBEYAZ ve SPRITEKIRMIZI diye iki alt rutin var. Sen diyorsun ki taramada x'e gelince SPRITEBEYAZ'a git, y'ye gelince SPRITEKIRMIZI'ya git. Ben şimdi sana siyorum ki SPRITEBEYAZ ve SPRITEKIRMIZI'yı tek bir rutin yap. Örneğin SPRITERENKDEGISTIR gibi birşey olsun ve her iki yerden de yani hem x'e gelince hem y'ye gelince aynı rutin çağrılsın. Ama efekt hiç değişmesin. Kısacası aynı rutin bir çağırılışta kırmızıysa beyaz yapsın, beyazsa kırmızı.
 
Ödev2:
şimdi aynı şeyi hiçbir şekilde "koşul" kullanmaksızın bitler üzerinden düşünerek yapmayı dene. Yani cmp, bne, beq v.s. yasak.
 
Bu iki ödevden ilkini yapabileceğini tahmin ediyorum. ıkinci konusunda ise lütfen yeni c64 coding ile ilgilenen arkadaşlar harici kimse yardımcı olmasın. Çözemezseniz ben cevabı yayınlayacağım.
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 23.01.2007 22:47:10
eheheh.. Karde$im bu odev oLayIna bayILdIm... BakaLIm becerebilecek miyim? ....
Bu arada Plazma  cIksa da bitmap'le ilgili tutorial ve orneklere ba$Lasak... Arada karaLadIgIm cizimleri de kuLLanmak istiyorum arTIk ,)
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 24.01.2007 20:43:02
Skatecim 2.si de aynI rutine daLLanIyor. Yani SPRRENK rutinine gidiyor. Ama pek iyi olmadI zannedersem :) Senin yakLa$ImLarInI merak ediyorum.
 
Bir sure $d021'in rengini okutup tersini basmaya caLI$TIm ama yemedi. eheheh
 
 
 
(Interrupt rutinine kadar ust ornekle aynI code)
 
 
............
EKRANBOL:
LDA#$20
LDX#$01
EKRANUST CMP$D012
BNE EKRANUST
STX$D020
STX$D021
LDA#$9A
LDX#$02
EKRANALT CMP$D012
BNE EKRANALT
STX$D020
STX$D021
RTS
SPRITEHAREKET:
INC$D001
LDA$D001
CMP#$90
 
BEQ SPRRENK
 
CMP#$00
 
BEQ SPRRENK
 
RTS
MUZIK:
JSR$1003
RTS
 
 
SPRRENK:
LDX$D001
CPX#$90
BEQ ARTI
LDX$D001
CPX#$00
BEQ EKSI
JMP IRQSON
ARTI:
LDX#$01
STX$D027
JMP IRQSON
EKSI:
LDX#$02
STX$D027
JMP IRQSON
 
IRQSON:
RTS
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 24.01.2007 23:30:05
Aslında beklediğim cevap değil ama ilk beklediğim cevaba yakın. Bu soruyu kodların ne derece optimize edebileceğini göstermek için sormuştum. şimdi senin rutini kısalta kısalta kuşa çeviricez :)
 
Öncelikle çıkış noktanı değiştirerek başlıyorum. Sen tek rutine de inse hala $d001'e bağlı olarak kod yazmaya kararlısın. Halbuki $d001'e bağlı olarak bu rutine doğru yerlerde dallanıyor. şimdi bırakalım programı ve Türkçe cümle kuralım.
 
$d001 $90'a gelince SPRRENK'e dallan
$d001 $00'a gelince SPRRENK'e dallan
 
SPRRENK:
Eğer sprite rengi kırmızıysa beyaz yap, beyaz ise kırmızı.
 
Aha! ışte bu son cümle işi değiştirdi. Bu durumda $d001'e hiç bakmayacağız ve işi doğrudan $d027 ile bitireceğiz.
 
Kod: [Seç]
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

Eee, ne değişti ki? şimdi gereksiz satırları atalım (başlarına noktalıvirgül koyacağım)
 
Kod: [Seç]
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

Eh hemen hemen bu kadar diyebiliriz.
 
Bu 1.sorumun cevabıydı. Gelelim 2. yönteme. cmp, cpx, cpy, beq, bne, bcc, bcs, bpl, bmi v.s. yok. Peki ne var? Olayı bit bazlı düşünmek var.
 
Beyaz = 1 = %00000001
Kırmızı = 2 = %00000010
 
Öyle bir bit işlemi bulalım ki beyazsa kırmızı kırmızıysa beyaz yapsın. Ben öyle bir bit işlemi biliyorum. EOR (ya da PC'deki yaygın ismiyle XOR). Bu nasıl bir işlemdir?
 
Bit 1 EOR Bit 2 Tablosu şu şekildedir.
 
Bit 1 Bit 2 EOR
----- ----- -----
0 0 0
0 1 1
1 0 1
1 1 0
 
Yani olaya şöyle bakabiliriz Bit 1 bizim orjinal bitimiz olsun. Hem sıfır hem de bir olma durumunda (1. ve 3. satırlar) 0 ile EORlandığında değeri aynen kalıyor, değişmiyor. Yani 0 ile EORlamak bit değerini aynen korumak demek. Peki 2. ve 4. satırlarda ne oluyor. 1 ile EORlandığında değer tersine dönüşüyor. Yani 0 EOR 1 dediğimizde 0'ı 1 yapmış oluyoruz 1 EOR 1 dediğimizde 1'i 0 yapmış oluyoruz. Kısaca yazmak gerekirse;
 
0 ile EORlamak değeri değiştirmez:
0 EOR 0 = 0
1 EOR 0 = 1
 
1 ile EORlamak değeri tersine çevirir:
0 EOR 1 = 1
1 EOR 1 = 0
 
Öyleyse biz nasıl bir değerle EORlamalayız ki beyaz ise kırmızı, kırmızı ise beyaz olsun? Önce cevabını vereyim. Cevap 3. Peki bunu nasıl elde ettim? Önce sağlamasını yapalım.
 
Beyaz EOR 3 = Kırmızı
 
%00000001 <- Beyaz (1)
%00000011 <- EOR (3)
-----------
%00000010 <- Kırmızı (2)
 
 
Kırmızı EOR 3 = Beyaz
 
%00000010 <- Kırmızı (2)
%00000011 <- EOR (3)
-----------
%00000001 <- Beyaz (1)
 
 
şimdi iş eğlenceli olmaya başladı işte di mi? :)
 
Peki 3'ü nerden bulduk. ışlemin değişme özelliğini kullandık. Yani;
 
a eor b = c
ise
a eor c = b'dir.
 
Biz
Beyaz EOR x = Kırmızı
dediğimize göre
Beyaz EOR Kırmızı = x
yani EORlayacağımız değerdir.
 
%00000001 <- Beyaz (1)
%00000010 <- Kırmızı (2)
-----------
%00000011 <- x = 3
 
ışte böyle. şimdi gelelim rutinimizin son haline :)
 
Kod: [Seç]
SPRRENK:
lda $d027
eor #3
sta $d027
rts

ışte if...then...else programcılığının sona erdiği nokta. Bit tabanlı hesaplama gücü.
 
Edit: Bir noktayı atlamışım. Sprite renklerine siz $01, $02 gibi değerler de verseniz okurken üst 4 biti set olarak okursunuz yani $f1, $f2 gibi. Bunun için cpx'leri değiştirdim. Aslında yapılması gereken şey;
 
lda $d027
and #%00001111
cmp #$01
 
gibi bir işlem. Yani yalnızca alt 4 biti karşılaştırmamız lazım.
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 25.01.2007 10:39:03
AsLInda $u kodu(alttaki) yazMI$tIm. Hemde ilk akLIma gelendi. Fakat $F1 ve $F2 yerine $01, $02 yazmI$tIm. Hatta bu kodun caLI$mamasIna mana da verememi$tim. Bu yuzden zaten $d001 in pe$inden ko$tum.
-----------------------
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
-------------------------

EOR komutunu acIKLamasI icinde ekstra te$ekkur.
 
YanLIz
lda $d027
and #%00001111
cmp #$01
 
'In oLayInI tam anLamadIm. . %00001111 = #15 =#$0F ???
Buradaki (AND) 'in kuLLanIm $eklini biraz acabilir misin?
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 25.01.2007 10:46:25
Bu arada diger arkada$Larda muhabbete katILsaLar ya... Belki yeni fikirler tartI$maLar vs.. dimi ama? Galiba herkes Plasma'dan sonra cIkacak tutorial bombardImanInI bekliyor....
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 25.01.2007 11:38:48
haklısın orasını sonradan hızlı bir editle eklediğim için eksik kaldı. and komutu şu şekilde işler.
 
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
 
Yani yalnızca her iki bit de 1 ise sonuç 1 olur. Bu bize nasıl fayda sağlıyor? Örneğin $d027 örneğinde olduğu gibi biz sadece alt 4 bit ile ilgileniyorsak, bu durumda üst 4 biti yok etmek için o bitler 0 geri kalan bitler 1 olan bir sayıyla ANDliyoruz. Sonucu görelim.
 
%11011010 <- $da
%00001111 <- AND $0f
---------
%00000110 <- $0a
 
Aslında bu olayı daha güzel açıklamak için nibble kavramını açıklamak gerekiyor. Normalde bit ve byte arasında bir birim pek telaffuz edilmez ancak aslında bytelar 4'er bitlik 2 nibbledan oluşmuştur. şu şekilde:
 
%11011010 => üst nibble %1101, alt nibble %1010
 
Her bir nibble byteların hexadecimal gösteriminin bir basamağına denk gelir. Yani
 
%1101 = 13 = $d
%1010 = 10 = $a
%1101 %1010 = %11011010 = $da
 
Her bir nibble 0-15 arası 16 farklı değer alabilir. Byteların toplam alabileceği değerin sağlamasını da bu şekilde yapmamız mümkün.
 
16*16 = 256 farklı değer.
 
şimdi Commodore 64 16 renk olduğu için bize alt nibble yetiyor. Yani $00-$0f arası değerler. Bu durumda biz soladaki basamağa aldırış etmiyoruz. Yalnızca byte'ın hexadecimal gösterimizdeki sağdaki basamak yetiyor. Bu durumda $0f ile AND'leyerek byte değeri ne olursa olsun $00-$0f arası değerler elde ediyoruz. Örnekler:
 
$3c AND $0f = $0c
$7e AND $0f = $0e
$d3 AND $0f = $03
$a8 AND $0f = $08
v.s. v.s.
 
Hadi konuyu bitirmeden OR'u da kısaca geçelip. OR'lamak ise şu şekilde oluyor
 
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
 
Yani AND'in tam tersi. Yalnızca her iki bit de 0 ise sonuç sıfır, en az biri 1 ise sonuç 1.
 
Bunu da şöyle kullanıyoruz. Örnek olarak biz soldaki nibble'ın değerinin kesinlikle 2'ye eşit olmasını istiyoruz. Ama sağdaki nibbleı da bozmak istemiyoruz. Yani:
 
$9c gibi bir değerimiz varsa bizim elde etmek istediğimiz sonuç $2c olacak. Bu durumda doğrudan $20 (üst nibble 2) ile OR'larsak sorun yaşayabiliriz. Görelim.
 
%10011100 <- $9c
%00100000 <- OR $20
--------------------
%10111100 <- $bc
 
ıstediğimiz sonucu elde edemedik. Bu durumda önce 9'u yok edip sonra orlamamız gerekiyor. Bunun için deminki gibi $0f ile ANDleyip sonra orlayarak istediğimiz sonucu elde edeceğiz.
 
%10011100 <- $9c
%00001111 <- AND $0f
--------------------
%00001100 <- $0c
%00100000 <- OR $20
-------------------
%00101100 <- $2c
 
ışte AND ve OR bir arada bu şekilde kullanılır. ASM kodu olarak yazarsak;
 
lda #$9c
and #$0f
ora #$20
 
dediğimizde accumulatordeki değer $2c olur. Bu değeri sta ile istediğimiz yere yazabiliriz.
 
şimdilik bu kadar. Sorulara göre detaylara ineriz. Ağaşıdaki tabloları ezberleyin.
 
AND Tablosu
-----------
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
 
OR Tablosu
----------
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
 
EOR(XOR) Tablosu
----------------
0 EOR 0 = 0
0 EOR 1 = 1
1 EOR 0 = 1
1 EOR 1 = 0
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 25.01.2007 22:34:23
Oh oh.. aradan OR 'u da cIkarmI$sIn... Helal valla...
$imdi bana biraz musade. Hem bunLara bakaYIm hemde sana ku$a cevriLecek bir ornek daha hazIrLayayIm. :)
 
Bu arada bunLar gercekten onemli bilgiLer; gerek Skate gerekse Nightlord'un yazdIgI tutoriallarI en son birle$tirerek bir ASM kitabI oLu$turuLabilinir. Veya mega bir tutorial... BakaLIm nereye kadar gidecek bu i$...
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 25.01.2007 23:00:09
AkLIma taKILan bi$ey daha...
 
*=$1000
jsr$e544
ldx#$f1
stx$d021

spc:lda$dc01
cmp#$ef
bne spc

ldx#$01
stx$d020
hold jmp hold
 
Burda $01 de ekranI beyaz yapIyor $f1 de...
 
Fakat ilk ornekte
 
SPRRENK rutininde
LDX$d027 ile x'e $d027 in degerini okuduktan sonra
CPX#$01 neden caLI$madI?
 
Yani renklerle oynarken asLInda ldx#$01 stx$d020 yazmak yerine
ldx#$f1 stx$d020 yazarsak daha dogru bir$ey mi yapmI$ oLacagIz..
 
Direk renk vereceksek ust nibble.... and or yada eor la i$Leme sokup rengi vereceksek alt nibble la ilgileniyoruz. Eger dogru anLadIysam.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 25.01.2007 23:14:13
Stranger, aslında bu tür işlerin teknik açıklamasını Nightlord benden çok daha iyi yapar. Ben yalnızca VIC'in sprite renk değerlerini okurken sana her zaman üst 4 biti set olarak yani %1111xxxx şeklinde verdiğini biliyorum. Ancak sen yazarken üst bitlere hangi değeri verirsen ver, farketmez. Aslında olayı şöyle düşünebilirsin. Üst 4 bit işe yaramaz bitler. 0 dönmeleri ne kadar doğalsa 1 ya da random dönmeleri de aslında o kadar doğal. Sonuçta benim gözümde "açıkta kalmış bacaklar" onlar. Karı kız olayı değil, çip bazında :)
 
Bu arada nibbleları anlatarak biraz kafanı karıştırmış olabilirim. Renkler her zaman alt 4 bitte duruyor. Yani alt nibble ya da diğer bir deyişle sağdaki 4 bit. Soldaki 4 bit ise hiçbir işe yaramıyor. Söz konusu sprite renkleri olduğunda...
Başlık: kurs sonrasI ornekLer II
Gönderen: hades - 25.01.2007 23:20:21
c64 te 16 renk olduğu için genel bir ifade ile #$01 ile #$x1 arasında bir fark yoktur. (x=0,1,......e,f) Bu nedenle renklerle ilgili herhangi bir OR, AND, EOR, CMP,  CPX ve  CPY  işlemlerinde sadece alt nibble değerleri sonucu belirler.
Bu arada küçük bir bilgi vereyim.  JSR $E544 rutininden geri dönüşte X registerinde 1 değeri bulunur. senin örneğine uyarlarsak
JSR $E544
STX $D021
haline gelir ve 2 byte tasarruf etmiş oluruz.
Başlık: kurs sonrasI ornekLer II
Gönderen: hades - 25.01.2007 23:22:47
yaw skate neredeyse aynı anda yazmışız. ben yazmaya başladığımda senin mesajın henüz yoktu. Benden hızlısın :)
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 25.01.2007 23:23:16
@Skate: Tamam $imdi anLadIm. oh beee :)
@hades: Ok. Bu da guzel bir bilgi oldu. Thx..
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 25.01.2007 23:26:55
@hades: Bana da oluyor kardeşim aldırma. Geçen gün bitfellas'a bir post atıyordum, gönder dedim, bir baktım uyarı çıktı "siz postu gönderene kadar başka biri bu topic'e post attı" diye. Hastası oldum. Onun postunu da okuduktan sonra mesajımı editleyip yolladım. Güzel bir özellik di mi?
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 26.01.2007 19:17:02
Skate'in verdigi bilgileri inceledikten sonra komutLarI tam anLamIyLa anLamak icin benim kuLLandIgIm yontem ve bir ornek. Gecen ornekte spriteLar $d012'ler vb. OLdugu icin belkide bu ornek oLayI kavramak icin daha yararLI oLacak.
 
Border rengini okuyarak, EOR komutunu kuLLanIp ekran rengiyle aynI renge ceviriyoruz. (POKE 53280,6'daki renk)
 
ılk değeri en uste yazarak, araya bir bosluk bIrakIp uLa$mak istedigimiz değeri en alta yazIyoruz. Ortaya EOR komutunda kuLLanacagImIz degeri yazarak sagLamasInI yapabiLiyoruz. (Binary,Hex ve 10'lu düzendeki cevirmelerde problem ya$ayan arkada$Lar windows'un hesap makinesinin bilimsel modunu kuLLanabilir)
 
 
\ 0000 1110 /  Border renginin default degeri #14   #$0E
------------------------------------------------------------
\ 0000 1000 /  EOR'da kullanacagimiz deger  #8     #$08
------------------------------------------------------------
\ 0000 0110 /  Border'a vermek istedigimiz renk(KoyuMavi) #6  #$06
 
Code:
----------------------
!TO "eor.prg",CBM
*=$1000 ;SYS4096
LDA$D020
EOR#8
STA$D020
RTS
----------------------
 
\ 0000 1110 /  Border renginin default degeri #14   #$0E
------------------------------------------------------------
\ 0000 0110 /  AND'de kullanacagimiz deger  #6    #$06
------------------------------------------------------------
\ 0000 0110 /  Border'a vermek istedigimiz renk(KoyuMavi) #6  #$06
 
Code:
------------------------------------
!TO "and.prg",CBM
*=$1000 ;SYS4096
LDA$D020
AND#6
STA$D020
RTS
Başlık: kurs sonrasI ornekLer II
Gönderen: nightlord - 26.01.2007 20:05:52
EOR icin kucuk bir ipucu

A EOR B = C

ise

A EOR C = B

yani B yi (ortadakini) bulmak icin usttekini ve alttakini direk eor islemine de sokabiliriz
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 05.02.2007 15:48:37
arada denemelerimi atayIm. Gerci bu biraz eski ama... 2.bar'I araya siyah bo$Luk koymak yerine Skate'in multiplexer'da gosterdigi yontemle koyuyor.
Ba$ka bi oLayI yok...
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 08.02.2007 11:10:29
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.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 08.02.2007 17:43:52
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.
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 09.02.2007 00:26:55
@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.
Başlık: Basit sinus ornegi...
Gönderen: stranger - 10.02.2007 16:01:48
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 (http://noname.c64.org/csdb/release/?id=26944)
 
Acme icin Sinus Tablosu Uretici:
http://noname.c64.org/csdb/release/?id=38353 (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# 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
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 10.02.2007 19:38:08
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 (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.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 10.02.2007 20:07:00
Aklıma gelmişken sprite generator olarak
 
Wixbouncer v1.0 (Win32)
http://noname.c64.org/csdb/release/?id=12618 (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 (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.
Başlık: kurs sonrasI ornekLer II
Gönderen: joker_ - 21.09.2008 16:17:34
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 :o 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 :D kodlar aşağıda nerde hata yapıyorum?
Kod: [Seç]
 
!to&quot;sprite.prg&quot;,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
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 22.09.2008 12:35:50
@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.
 
Kod: [Seç]
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).
Başlık: kurs sonrasI ornekLer II
Gönderen: joker_ - 22.09.2008 12:57:00
:D 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:
Başlık: kurs sonrasI ornekLer II
Gönderen: joker_ - 23.09.2008 12:16:12
@skate;
abi bu seferde son iki sprite en sona geliyor orada öölece kalıyor geri gelmiyor,şimdi nerede hata yapıyorum acep :confused:
 
 
 
Kod: [Seç]

       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
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 24.09.2008 10:00:28
Artık makroların gücünü öğrenme zamanı :)
 
Kod: [Seç]
       !to&quot;sprite.prg&quot;,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
Başlık: kurs sonrasI ornekLer II
Gönderen: GnoStiC - 24.09.2008 10:37:02
@skate:
adrem nedir?
Başlık: kurs sonrasI ornekLer II
Gönderen: joker_ - 24.09.2008 11:32:21
:D 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.:o
yalnız acme de derlerken 11 ve 15 nci satırlarda hata mesajı veriyor,
Label already defined.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 24.09.2008 13:23:00
@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.
Başlık: kurs sonrasI ornekLer II
Gönderen: joker_ - 24.09.2008 13:33:48
.label etiketlerini yazarak denedim,bendeki 0.86 versiyonu muhtemelen versiyondan kaynaklanıyor.hemen yeni versiyonu edineyim :D
 
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?
Başlık: kurs sonrasI ornekLer II
Gönderen: GnoStiC - 24.09.2008 13:38:37
yanlis anlamista olabilirim :}

Alıntı
...
;sprite datalari
        *=$0C00 ;a harfi
        *=$0c40 ;d harfi
        *=$0c80 ;r harfi          
        *=$0cc0 ;e harfi
        *=$0d00 ;m harfi

Alıntı yapılan: skate;19054
@gnostic: bence de nedir o? benim laflarımda öyle birşey mi geçmiş?
Başlık: kurs sonrasI ornekLer II
Gönderen: joker_ - 24.09.2008 14:36:23
:) abi ben cevaplayayım,haklısın aslında; 'dream' yazısının harflerini karışık şekilde hafızaya atınca 'adrem' çıkıyor ortaya gerçeği 'dream' :p tamamen benim acemiliğim.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 24.09.2008 15:27:52
@gnos: joker'in de belirttiği gibi code bana ait olmadığı için "adrem"i anlamamışım :)
 
@joker: aslında macro dediğin şey sürekli tekrarlanan kod parçalarını alt rutin kullanmadan parametrelerle pratik bir biçimde oluşturmaktan ibaret. sonuç olarak elle defalarca aynı şeyi yazarak ya da copy & paste ederek de aynı sonuç elde edilebilir.
 
Makro kullanmadan açık yazacak olursak kod aslında şuna denk geliyor. Makrolar ile bu kodu oluşturuyorduk anlayacağın.
 
Kod: [Seç]
       !to&quot;sprite.prg&quot;,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
Başlık: kurs sonrasI ornekLer II
Gönderen: joker_ - 24.09.2008 16:36:54
anladım çok saol,makro olunca hatamın tam olarak ne olduğunu çözememiştim şimdi nerde hata yaptığımı daha net anladım
Kod: [Seç]
; 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

ben burada jmp ++ 'ı bir sonra ki sprite yerine sonlandırmaya göndermiştim,niye göndermişim bilmiyorum :p sorun çözüldü teşekkürler.takıldığım yerlerde ara ara canını sıkmaya devam edicem.
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 24.09.2008 17:17:13
+ ++ +++ - -- --- gibi labellar hakkında da kısa bir açıklama yapayım. Bunlara anonymous forward/backward label deniyor. kodun içersinde sizin için özel bir anlam taşımayan bir bölüme atlamanız gerekiyorsa saçma bir label ismi düşünmek yerine bu sembolleri kullanabilirsiniz.
 
Örneğin bir yere sıçrama yaparken + yani anonymous forward label kullandığımız zaman kendinden sonraki ilk + sembolüne sıçrayacaktır. kodun içersinde sınırsız sayıda + kullanabilirsiniz. Örnek:
 
Kod: [Seç]
     lda $d000
      cmp #$50
      bcc +
      inc counter1
+     lda $d001
      cmp #$60
      bcs +
      inc counter2
+     jsr +
      rts
+     lda #$02
      sta $d020
      rts

Bu örnekte ilk "bcc +" kendinden sonraki ilk + ile etiketlenmiş "lda $d001" satırına sıçrar. Sonraki "bcs +" ise "jsr +" satırına sıçrayacaktır. "jsr +" ise "lda #$02" satırına gider.
 
şimdi gelelim şu tür bir örneğe:
 
Kod: [Seç]
--    lda $d000
      clc
      adc #$18
      sta $d002
-     lda $dc00
      cmp #%00000111
      beq +
      cmp #%00001011
      beq ++
      jmp -
+     inc $d000
      jmp --
++    dec $d000
      jmp --

Bu örnekte ise her şeyi bir arada kullanıyoruz. "beq +" kendinden sonraki ilk "+"a yani "inc $d000"a gidecektir. bir sonraki kontrolde yine "beq +" kullansak yine aynı adrese gider çünkü henüz ilk "+"a ulaşmadı kod. Bu durumda "++" kullanarak sıçrama noktalarını yine anonymous bir biçimde ayırt edebiliyoruz.
 
Benzer bir biçimde "jmp -" satırı "lda $dc00"a giderken eğer bir pozisyon değişikliği olduysa bunu ikinci bir sprite'a daha uygulamak için kodda daha öncelerdeki bir bölgeye gitmek için "--" kullanıyoruz.
 
Yeri gelmişken açıklamak istedim. Bunu ACME'nin son versiyonu ve daha birçok diğer assembler destekliyor. Kolay gelsin.
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 18.09.2009 23:37:43
Skate senin bu post aylar önce dikkatimden kaçmış. Parti sonrasıda askere gittiğim için maalesef iyice unutup gitmişim. Cruzer'in code'unu inceledim gerçekten (tabloyu yarattığı bölüm) 256 byte için çok uzun, uzunluğu bir yana karışık geldi.
 
Benim esas merak ettiğim senin aşağıda belirttiğin; kodu fazla uzatmadan basic rom ile sinus tablosunun nasıl yaratıldığı. Böyle bir şey varsa bende yararlanmak isterim.
 
Esas bomba sorumu da daha sonraya saklıyorum ;)
 
Alıntı yapılan: skate;12305
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.
Başlık: kurs sonrasI ornekLer II
Gönderen: stranger - 19.09.2009 00:04:11
Bide bu vardı tabii. Herzaman hoşuma giderdi. Kısa öz...
Hem Pc 'ci hem 64'cü coderlar belki c64 portunu nasıl yapabileceğimizi anlatır. Sonuçta pixel'i zıplatmak istiyoruz. Cebren ve hile ile de olsa olabilir, yeterki kısa olsun...  Kendisi yakınım olmasına rağmen 64 kodlamadığı için yapana soramıyorum tabii ki :)
 
Bomba sorumuda soruyorum bu arada... Rom içerisinde sinus tablosu olarak okutabileceğimiz(biraz müdahale ile de olsa) herhangi bir adres aralığı var mıdır? Biraz şark kurnazlığı gibi olacak ama aklım böyle kötü şeylere çalışıyor napayım ;)
 
 
;
; code : GOD of AnaLoG
;
; Sabit nokta aritmetigi ile ivmeli hareket eden cisimden ba$ka bi$i degil. :)
; ama sadece 87 byte. 7 bit fixed point... :)
.model tiny
.data
hiz = 15 ;hiz ( fazla abartmayin tabi )
xs = 160 ;apsis
ys = 20 ;ordinat
renk = 15 ;renk
.386
.code
org 100h
.startup
push 0a000h
pop es
mov al, 13h
int 10h
xor cx, cx
mov bl, ys ;ordinat ayari
shl bx, 7
forsin: add cx, hiz ;hiz ayari
add bx, cx
mov ax, bx
shr ax, 7
mov dx, ax
cmp dl, 199 ;kontrol y<=199 ?
jbe short kucuk
neg cx
mov bl, 198
shl bx, 7
kucuk: mov ax, dx
shl ax, 6
mov di, ax
shl ax, 2
add di, ax
add di, xs
mov al, renk
stosb ;[ 0A000h : y*320+x ] = renk
dec di
vretrace: mov dx, 3dah ;dusey tarama kontrol
fw1: in al, dx
and al, 8
jne short fw1
fw2: in al, dx
and al, 8
je short fw2
xor ax, ax
stosb ;[ 0A000h : y*320+x ] = 0
in al, 60h
dec al
jne short forsin ;yaw bu bizim esc dimi?
mov al, 03h ;80x25x16
int 10h
int 20h ;The End. . .
end
?
Başlık: kurs sonrasI ornekLer II
Gönderen: GnoStiC - 19.09.2009 01:12:04
bu da ray'in meshur 32 byte generator'u;

Kod: [Seç]
;==============================
;=
;=  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    &quot;            ; 2
 
        dbra    d0,.gen_loop                        ; 4
                                        ;--
                                        ;32 bytes
        section    bss
sinus        ds.l    1024
Başlık: kurs sonrasI ornekLer II
Gönderen: skate - 19.09.2009 02:34:20
@stranger: acilen codebase64'ü hatmetmeni öneriyorum :) ne bulursan oku, satır atlama.
 
doynax'ın 28 bytelık basic romunu kullanarak sinus tablosu oluşturan rutini:
http://www.codebase64.com/doku.php?id=base:generating_sines_with_basic