Originally posted by PE&OAS@Mar 10 2006, 02:55 PM
Selamlar, uzun bir aradan sonra yeniden 6510 ASM ile ilgili bir mesaj atabildim...
1. Elimizdeki sidleri nasıl introlarımıza ekleyebiliriz? Hangi adreslere koyup, nereden çaldıracaz?
2. Ekrana logo, resim nasıl basacaz? Aynı şekilde nereye koyup nasıl çalıştıracaz?
şimdiden teşekkürler...
[post=5812]Quoted post[/post]
[/b]
Müzikler genellikle kendi playerlarını içerdikleri için işin kolay. Diyelim ki müziğin başlangıç adresi $1000 olsun ki bu çok sık kullanılan bir adrestir introlarda. Öncelikla accumulator'e çalmak istediğin trackin numarasını verir ve müziğin başlangıç adresine JSR ile gidersin. SIDler birden fazla track yani farklı müzik içerebilirler. Eğer tek müzik varsa sıfır vermen yeterlidir acuye. Örnek
lda #$00
jsr $1000
Bunu yaptığın zaman müziği initalize etmiş olursun, yani müzik başa alınmış ve 0. track çalınmaya hazır demektir.
daha sonra genellikle $1003 ve bazen de $1006 adreslerine JSRlemen gerekir müziği çalmak için. Bunu saniyede 50 defa yani her taramada yapman lazım. Örnek:
jsr $1003
Ama bunu;
muzikCal:
jsr $1003
jmp muzikCal
Bu şekilde yaparsan çok hızlı çalar. Bunun için tarama bekletmen lazım. Örnek:
muzikCal:
lda #$80
taramaBeklet:
cmp $d012
bne taramaBeklet
jsr $1003
jmp muzikCal
gibisinden. Ama asıl yöntem Interrupt rutini kullanmaktır. Bu konuyu da yazsam diyordum ancak iyiden iyiye kafan karışır ve ezbere yapmaya başlarsın. Bunun için bu güne kadar yayınlanmış dökümanlarda "interrupt" ya da "kesme" rutinleri konusunu bir araştırıver. $0314, $0315, $0318, $0319, $fffe, $ffff ve $dc0d, $dc0e, $d01a gibi adreslerin nasıl kullanıldığını araştır, "sei", "cli", "rti" op kodlarını da incele.
Logo basmanın çok çeşitli yolları var. Hangi modda çiziyorsun önce onu söyle.
Originally posted by nightlord@Mar 10 2006, 03:37 PM
@ragnor bu arada nightlord.dr2.net'e de bi bakabilirsin orda da bi kac tutorial var. site yeni haliyle daha deneme yayininda.
@peandoas: muzikler genelde $1000 $2000 arasini kaplar. once bi
jsr $1000
cekilerek sarki baslangic durumuna getirilir. akabinde
$jsr$1003
her interruptta yani ekranin her cizilisinde (saniyede 50 defa) bir kere cagirilir.
logo olayi icin daha uzun aciklama lazim. anlasildi bu hafta sonu nicedir soz verip de yazamadigim (bakkada pardon abi) VIC tutoriallerine baslamak gerekiyor.
[post=5817]Quoted post[/post]
[/b]
aynı anda cevap vermişiz kardeşim, sen önce post etmişsin :)
Originally posted by nightlord@Mar 10 2006, 03:37 PM
logo olayi icin daha uzun aciklama lazim. anlasildi bu hafta sonu nicedir soz verip de yazamadigim (bakkada pardon abi) VIC tutoriallerine baslamak gerekiyor.
[post=5817]Quoted post[/post]
[/b]
Estafullah....
Originally posted by PE&OAS@Mar 10 2006, 06:42 PM
@skate: aslında elimde hiç logo yok, ancak diyelim ki WDPaint gibi bir program ile çiz(dir)iyorum. (şu aralar en çok o kullanılıyor ya o bakımdan.)
[post=5842]Quoted post[/post]
[/b]
O zaman işin basit. Yanlış hatırlamıyorsam WDPaint ile PRG kaydettiğinde;
$5800-$5be8 -> Renk Datası
$5c00-$5fe8 -> Ekran Datası
$6000-$7f40 -> Bitmap Datası
olarak kaydediliyor. Ekrana resmi basmak için;
lda #$02
sta $dd00
lda #$3b
sta $d011
lda #$d8
sta $d016
lda #$78
sta $d018
ldx #$00
renkDongusu:
lda $5800,x
sta $d800,x
lda $5900,x
sta $d900,x
lda $5a00,x
sta $da00,x
lda $5ae8,x
sta $dae8,x
inx
bne renkDongusu
demen yeterli olacaktır. Açıklamasına gelince;
$dd00'a $02 vererek $4000-$7fff arasındaki banka geçiyoruz.
$d011'e $3b vererek bitmap ekranı açıyoruz.
$d016'ya $d8 vererek (dilerseniz $18 de verebilirsiniz, benim alışkanlığım bu) multicolor yani çok renkli 160x200 grafik moduna geçiyoruz.
$d018'e $78 verdiğimizde "7" $5c00'ı işaret ediyor (daha önceki bir postumda detayları var bunun), "8" ise $6000'deki datalara denk geliyor.
Daha sonraki döngü ise $5800'den $5be8'e kadar olan renk datalarını $d800'e kopyalayarak renklerin ekranda gözükmesini sağlıyor.
Hepsi bu. Elbetteki bir de iç ekranın arkaplan rengi vardır. Onu da $d021 ile set edebilirsiniz. Örneğin WDPaint'de Koyu Gri kullandıysanız arkaplan rengi olarak;
lda #$0b
sta $d021
demeniz gerekli. Çerçeve rengi ise $d020 ile değiştirilebilir.
Son olarak orjinal koala modeundan bahsediim. Tek farkı renk ve ekran datalarının yerleşimidir.
$6000-$7f40 -> Bitmap Datası
$7f40-$8328 -> Ekran Datası
$8328-$8710 -> Renk Datası
şeklindedir. Çok da bir farkı yok anlayacağınız ancak ekran datası tam $400'lük bir alana oturmadığı için onu da transfer etmek gerekir bir yere, farkı budur.
Umarım yardımcı olabilmişimdir.
Originally posted by PE&OAS@Mar 10 2006, 08:47 PM
çok sağolun skate, nightlord... bide diyelim resmi basacağımız zaman hafızaya ne olarak atacaz? mesela müzikler $1000,$2000 arasıda, o araya ne zaman, ne formatta koyduk? bunuda bi açıklarsanız :) ...
[post=5845]Quoted post[/post]
[/b]
Yazdık ya olm adresleri yukarda işte. Ama istersen transfer de edebilirsin başka yerlere. Örnek olarak BITMAP dataları için;
$2000-$3f40
$4000-$5f40
$6000-$7f40
$8000-$9f40 (*)
$a000-$bf40
$c000-$df40 (*)
$e000-$ff40
gibi aralıkları kullanabilirsin. Ancak (*) olan aralıkların yalnızca bir bölümünü kullanabilirsin, ROM'da özel yerlere denk geldiği için bu aralıklarda RAM'ı görüntüleyemediğin yerler var çünkü.
Hangi bankta olduğuna göre boş alanlara ekran datalarını transfer edip $d800'e de renk datalarını transfer etmek ve $d018'i hafıza düzenine göre ayarlamak gerekir.
Müziklerin genellikle $1000 adresinde yer alma nedeni ise bu adreslere grafik ve karakter set datası konulamamasıdır. Aslında siz grafik datası koyabilirsiniz elbetteki bu alana ancak her zaman ROM okunur bu alanda. Aynısı yanlış hatırlamıyorsam kartuş ROM'u için de geçerliydi. $9000 adresinde de benzer bir sorun yaşarsınız. Yıllar içersinde refleks olarak hiç kullanmamaya başlıyor insan bu alanları zaten.
Originally posted by PE&OAS@Mar 10 2006, 08:50 PM
bir soru daha soracağım hazır sid konusu açılmışken:
sidplayer'da şöyle bir ibare oluyor ya 50 hz VBI filan diye, bazen VBI yerine CIA yazıyor... bu neden, VBI nedir, CIA ile ne alakası var müziğin? 50 hzyi anladım yukardaki mesajlardanda...
[post=5846]Quoted post[/post]
[/b]
Bu olay biraz karışık aslında. Bildiğim kadarıyla VBI tarama hızı yani PAL'da 50 Hz, NTSC'de (Amerika'nın formatı) 60 Hz'e denk geliyor. CIA ise default olarak 60 Hz. Ancak bu da NTSC'de az daha hızlı. Dolayısıyla NTSC makineler VBI kullanıldığında müzikleri %20 daha hızlı çalıyorlar ancak CIA kullanıldığında %3-4 gibi daha düşük bir hız farkı oluyor. Ama hepsini atıyor da olabilirim, emin değilim tam. :) Nightlord beni düzelt lütfen.