Ulan madem public ortama atacaktın, bir de niye özelden sordun bana
Al buraya da paste ediim cevabımı...
-------------------------
merhaba skate,
ya party report yaziyorum c64'te fakat bir derdim var. Sen bilirsin kesin. Arkada wisdom'un hard return'unu caldiriyim dedim ama adam masallah bir muzik yazmis $1000'den $4000'e kadar.
character set koyacak yer kalmadi tabi boyle olunca. $0800'e koymayi denedim karakter seti (tabi orda basic start var bi de program calistiktan sonra kopyaliyorum) ama yemiyor, garbage gorunuyor sadece.
nasil hallederim bu isi?
-------------------------
$4000'den sonrasını kullan. Bunun için $dd00 adresiyle bank değiştirmen lazım. $dd00'ın alt iki biti bank belirler.
%00000011 -> $0000-$3fff arası
%00000010 -> $4000-$7fff arası
%00000001 -> $8000-$bfff arası
%00000000 -> $c000-$ffff arası
olacak şekilde. Kısacası $4000-$7fff arasını kullanmak istersen;
lda #$02
sta $dd00
demen lazım. Peki ekran adresi ve karakter set noolacak o durumda? Bunlar için de $d018'le oynaşman lazım. $d018 hem karakter setinin bulunduğu alanı, hem de ekranın (default olarak $0400) bulunduğu alanın yerini belirler. şöyle ki;
%xxxxyyyy
diyecek olursak;
xxxx: ekranın bulunacağı alan. Her $0400'lük alan için birer birer artar. Örnek olarak ekran $0400'de ise değeri 1'dir yani:
xxxx = 0001
bu şu şekilde ilerler
0000 -> 0 -> $0000
0001 -> 1 -> $0400
0010 -> 2 -> $0800
0011 -> 3 -> $0c00
0100 -> 4 -> $1000
0101 -> 5 -> $1400
0110 -> 6 -> $1800
0111 -> 7 -> $1c00
1000 -> 8 -> $2000
1001 -> 9 -> $2400
1010 -> 10 -> $2800
1011 -> 11 -> $2c00
1100 -> 12 -> $3000
1101 -> 13 -> $3400
1110 -> 14 -> $3800
1111 -> 15 -> $3c00
Tabii ki bu değerler bankın başlangıç adresiyle toplanır. Örnek olarak sen ekranını $5c00 adresine koymak istiyorsan;
0111 -> 7 -> $1c00
Bu değeri kullanacaksın.
Gelelim alt bitlere. en alt bitin hiçbir anlamı yoktur, kullanılmaz. Yani yyyy aslında yyy? şeklinde ifade edilebilir. Diğer bitler karakter setinin yer alacağı adresleri belirler.
yyyy'nin alabileceği değerler:
0000 -> 0 -> $0000
0010 -> 2 -> $0800
0100 -> 4 -> $1000
0110 -> 6 -> $1800
1000 -> 8 -> $2000
1010 -> 10 -> $2800
1100 -> 12 -> $3000
1110 -> 14 -> $3800
Mesela karakter setini de $6800'e koymak istediğini varsayalım, bu durumda bank $4000'den başladığı için;
1010 -> 10 -> $2800
Bu değeri kullanman gerekir. Kısacası özetlemek gerekirse;
Ekran adresi $5c00-$5cff arasında ve karakter seti $6800-$6fff arasında olacaksa yapman gereken yalnızca ikişer lda sta'dan ibaret.
lda #$02
sta $dd00
lda #$7a
sta $d018
$7a nerden mi geldi?
xxxx = 0111 -> 7 -> $1c00
yyyy = 1010 -> 10 -> $2800
olduğuna göre
%xxxxyyyy = %01111010 = $7a
ok?
Örnek olarak sana güzel bir hafıza düzen yapiim. Karakter seti $4000'de ve ekran $4800'de olursa;
lda #$02
sta $dd00
lda #$20
sta $d018
demen yeterli olacaktır. Anlamadığın yeri sor, detaylandıriim.