Gönderen Konu: kurs sonrasI ornekLer II  (Okunma sayısı 21686 defa)

kurs sonrasI ornekLer II

« : 17.01.2007 15:52:12 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
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
« Son Düzenleme: 17.01.2007 17:45:26 Gönderen: stranger »

kurs sonrasI ornekLer II

« Yanıtla #1 : 17.01.2007 16:18:00 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Ö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.

kurs sonrasI ornekLer II

« Yanıtla #2 : 17.01.2007 17:55:58 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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.

kurs sonrasI ornekLer II

« Yanıtla #3 : 17.01.2007 17:56:20 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
@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.

kurs sonrasI ornekLer II

« Yanıtla #4 : 17.01.2007 18:04:58 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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.

kurs sonrasI ornekLer II

« Yanıtla #5 : 17.01.2007 18:08:00 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
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 :)

kurs sonrasI ornekLer II

« Yanıtla #6 : 17.01.2007 18:08:09 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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/
bkz: vic+mem_example

kurs sonrasI ornekLer II

« Yanıtla #7 : 17.01.2007 18:15:32 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
@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  :)

kurs sonrasI ornekLer II

« Yanıtla #8 : 17.01.2007 18:39:48 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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.

kurs sonrasI ornekLer II

« Yanıtla #9 : 18.01.2007 11:15:07 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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ı :)

kurs sonrasI ornekLer II

« Yanıtla #10 : 23.01.2007 15:54:25 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
ı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

kurs sonrasI ornekLer II

« Yanıtla #11 : 23.01.2007 16:14:59 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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.

kurs sonrasI ornekLer II

« Yanıtla #12 : 23.01.2007 18:54:51 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
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
« Son Düzenleme: 23.01.2007 19:02:30 Gönderen: stranger »

kurs sonrasI ornekLer II

« Yanıtla #13 : 23.01.2007 22:27:25 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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.

kurs sonrasI ornekLer II

« Yanıtla #14 : 23.01.2007 22:47:10 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
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 ,)