[title = Commodore 64 Grafik Modlar (Koala, Advanced Art Studio)]

Merhaba Plazma okuyucular. Bu dkman tr-demoscene forumunda sorulmu bir soruya karlk olarak ok hzl yazlm bir dkmandr. Ancak Plazma disk dergisinin k tarihine ok yakn yazlm olduu iin bunu forum yerine dergiye gndermeye karar verdim. Bu dkmanda hzl bir ekilde Koala ve Advanced Art Studio grafik modlarn inceleyeceiz. Ayrca dergiyle birlikte gerekli kaynak kod ve rnekler de yaynlanacaktr.

Koala ve Advanced Art Studio grafik modlar arasnda temelde hibir fark yoktur. Tek fark kaydedilen dosyalarn hafza yerleimleri arasndaki ufak tefek farkllklardr. Her ikisi de Commodore 64'n standart ok renkli grafik moduna tekabl eder.

ok renkli grafik modunda 3 temel e vardr.
[b]
* Bitmap (bit haritas) verileri (8000 byte = $1f40 byte)
* Video ekran (1000 byte = $03e8 byte)
* Renk ekran (1000 byte = $03e8 byte)
[/b]
Bunlardan birtek renk ekran sabittir ve hafzada $d800-$dbe7 adresleri arasnda yer alr. Dier video ekran ve bitmap ekrannn yerleri ise deikendir ve birazdan aklanacak olan VIC hafza adresleriyle kontrol edilirler.

Biz rnek olarak grafii
[b]
Bitmap = $2000
Video  = $0400
Renk   = $d800 (deimez)
[/b]
adreslerine yerletirerek gstereceiz.

Commodore 64'de grafik modlarn incelerken bizim iin nemli olan 3 temel hafza adresi mevcuttur.
[b]
$d011: 1. Kontrol Register'
$d016: 2. Kontrol Register'
$d018: Hafza Kontrol Register'
[/b]
[b]$d011
-----[/b]
Bit yaps:

Bit 7   : $D012'nin 9.biti (Bit 8)
Bit 6   : Geniletilmi Renkli Text Modu: 1 = Ak, 0 = Kapal
Bit 5   : Bitmap Modu: 1 = Ak, 0 = Kapal
Bit 4   : Kapal Ekran: 1 = Ak, 0 = Kapal
Bit 3   : 24/25 Satr Text Gsterimi: 1 = 25 Satr, 0 = 24 Satr
Bit 2-0 : Yumuak Kayma iin Y Nokta Pozisyonu: 0-7

Bu bitlerden bizi imdilik "Bit 5" ilgilendiriyor. Bu biti set edersek grafik modunu am oluruz. Yani;
[b]
lda $d011
ora #%00100000
sta $d011
[/b]
ya da hexadecimal karlyla
[b]
lda $d011
ora #$20
sta $d011
[/b]
diyebiliriz. Bilgisayarn altaki ekran deeri "Bit 7"i hesaba katmazsak (tarama srasnda tarama pozisyonuna gre deiir) $d011'in deeri $1b'dir. Bu durumda dorudan;
[b]
lda #$3b
sta $d011
[/b]
Diyerek $1b->text moddan $3b->grafik moduna gei yapm oluruz.

[b]$d016
-----[/b]
Bit yaps:

Bit 7-6 : Kullanlmyor
Bit 5   : Reset Biti: 1 = Dur (VIC), 0 = Devam Et (VIC)
Bit 4   : oklu Renk Modu: 1 = Ak, 0 = Kapal
Bit 3   : 38/40 Kolun Text Grntleme: 1 = 40 Kolon, 0: 38 Kolon
Bit 2-0 : Yumuak Kayma iin X Nokta Pozisyonu 0-7

Burada da bizi imdilik ilgilendiren "Bit 4" yani oklu renk modu. Koala ve Advanced Art Studio gibi grafik modlar ok renkli olduklar iin bu bitin ak olmas lazm. Yani;
[b]
lda $d016
ora #%00010000
sta $d016
[/b]
ya da hexadecimal karlyla
[b]
lda $d016
ora #$10
sta $d016
[/b]
diyebiliriz. Ayn $d011 rneinde olduu gibi altaki varsaylan deerini $c8 kabul edersek.
[b]
lda #$d8
sta $d016
[/b]
ile oklu renk moduna gei yapabiliriz.

[b]$d018
-----[/b]
Bit yaps:

Bit 7-4 : Video Ekran Taban Adresi
Bit 3-1 : Karakter Ekran Verisi Taban Adresi (Eer Bitmap Modu aksa yalnzca Bit 3'e baklr)
Bit 0   : Kullanlmyor

Not: Hafza 4 paraya blnmtr. Burada anlatlanlar $0000-$3fff aralndaki ilk paray kapsar. Dier paralara da bu benzer ekilde uygulanabilir ancak u anda bu konuya girmeyeceiz.

Video ekran hafzada 1024'lk ($0400) alanlarla ilerledii iin Bit 7-4'n ald deerleri 1024 ile arparak hafzada hangi ekran adresine karlk geldii bulunabilir. 7-4 arasnda (7,6,5,4) toplam 4 bit olduuna gre 16 farkl deere sahip olabilir bu bitler.
[b]
 0 -> %0000 ->  0*$0400 = $0000
 1 -> %0001 ->  1*$0400 = $0400 (Commodore'un varsaylan ekran adresi)
 2 -> %0010 ->  2*$0400 = $0800
 3 -> %0011 ->  3*$0400 = $0c00
 4 -> %0100 ->  4*$0400 = $1000
 5 -> %0101 ->  5*$0400 = $1400
 6 -> %0110 ->  6*$0400 = $1800
 7 -> %0111 ->  7*$0400 = $1c00
 8 -> %1000 ->  8*$0400 = $2000
 9 -> %1001 ->  9*$0400 = $2400
10 -> %1010 -> 10*$0400 = $2800
11 -> %1011 -> 11*$0400 = $2c00
12 -> %1100 -> 12*$0400 = $3000
13 -> %1101 -> 13*$0400 = $3400
14 -> %1110 -> 14*$0400 = $3800
15 -> %1111 -> 15*$0400 = $3c00
[/b]
Biz $0400' kullanmak istediimiz durumda yukardaki tabloya gre 7-4 arasndaki bitlerin "1" deerine sahip olmas lazm.

Bit 3-1 ise text modda karakter setinin yerini belirler. Her karakter seti 2048 byte yani $0800'lk bir alan kaplar. Dolaysyla yerleebilecei 8 farkl konum vardr.
[b]
 0 -> %000 ->  0*$0800 = $0000
 1 -> %001 ->  1*$0800 = $0800
 2 -> %010 ->  2*$0800 = $1000 (Commodore'un varsaylan karakter seti adresi)
 3 -> %011 ->  3*$0800 = $1800
 4 -> %100 ->  4*$0800 = $2000
 5 -> %101 ->  5*$0800 = $2800
 6 -> %110 ->  6*$0800 = $3000
 7 -> %111 ->  7*$0800 = $3800
[/b]
Ancak biz karakter ekran kullanmadmz ve grafik ekranlar 8000 byte kaplad ve 8192'lik ($2000) alanlara yerletii iin, bizim iin yalnzca "Bit 3" nemli. Bit 3'n set olup olmamasna gre bitmap verileri;
[b]
 0 -> 0*$2000 = $0000
 1 -> 1*$2000 = $2000
[/b]
adreslerine denk gelir.

imdi bu durumda biz "Bit 3" 1 olarak kullanacaz nk bitmap'i $2000 adresinde istiyoruz. Bit 7-4 araln ise %0001 eklinde kullanacaz nk video ekranmz $0400'de olacak.

Aadaki toplama ilemi saysal deil bitleri yan yana ekleme anlamnda kullanlmtr.

[b]Bit 7-4 + Bit 3 + Bit 2-1 = %0001 + %1 + %000 = %00011000 = $18 = 24[/b]

Bu durumda $d018'in almas gereken deerin $18 olduunu da burdan hesaplam bulunmaktayz. Yani grafik modumuzu amak iin yazmamz gereken kod.
[b]
lda #$3b
sta $d011
lda #$d8
sta $d016
lda #$18
sta $d018
[/b]
bu hale gelmi oluyor.

Peki iimiz bitti mi? Hayr. te bu noktada grafik modlarnn aralarndaki farkllklar nem kazanyor. nk Koala modu da Advanced Art Studio modu da hafzaya yklendii yerden itibaren ilk 8000 byte ($1f40) bitmap verisi olacak ekilde yerlemitir. Hatta hatta video verileri de an ekilde bitmap verilerinin hemen ardna yani 8000 byte ilerden yerlemitir. Ancak renk ekranlar ve arkaplan renklerinin tutulduu yerler farkldr.

Ayn zamanda her iki grafik modu da varsaylan deerleriyle farkl adreslerden ykleyebilir (Koala $6000, Adv.Art Studio $2000) ancak bunun fazla bir nemi yoktur. Sonu olarak biz istediimiz yerden ykletmekte serbestiz. Her iki modu da balang adreslerinden itibaren inceleyecek olursak.
[b]
Koala Grafik Modu in Deerler
Bitmap   = $0000-$1f3f = 0-7999
Video    = $1f40-$2327 = 8000-8999
Renk     = $2328-$270f = 9000-9999
Arkaplan = $2710       = 10000

Advanced Art Studio Grafik Modu in Deerler
Bitmap   = $0000-$1f3f = 0-7999
Video    = $1f40-$2327 = 8000-8999
Renk     = $2338-$271f = 9016-10015
Arkaplan = $2329       = 9001
[/b]
Bu durumda $d011,$d016,$d018 deerlerini ayarlamann haricinde bir de Video ve Renk ekranlarn olmas gereken yerlere transfer edip, arkaplan rengini de $d021'e vermemiz lazm. Yani bizim rneimizde;
[b]
Video    -> $0400-$07e7
Renk     -> $d800-$dbe7
Arkaplan -> $d021
[/b]
Verileri bu ekilde transfer ettiimizde grafiimizi ekranda dzgn bir ekilde grntleyebiliriz. Verilerin nasl transfer edilceini dergiyle birlikte yaynlanan kaynak kod rneklerinden inceleyebilirsiniz.

Kaynak kodlardan "resim_gosterici.a" dosyas her iki modu da kapsayacak biimde hazrlanmtr. En banda tanmlanan _GRAFIK_TIPI_ deikeni 0 deerini aldnda kod "resim.kla" dosyasn okuyarak "koala.prg" ktsn verecektir. Eer _GRAFIK_TIPI_ 1 deerini alrsa bu durumda "resim.aas" dosyasn okuyup "adv_art_studio.prg" ktsn verir.

Eer her iki modun birlikte yer ald ve koula bal olarak derlenen dosya yaps kafanz kartracak olursa "bonus" klasr iersinde ayr ayr "koala.a" ve "adv_art_studio.a" kaynak kodlarn bulabilirsiniz.

Programlarn derlenmi halleri ise "prg" klasr iersinde yer almaktadr.

Bu "forumda sorulan bir soru zerine hazrlanm dkman"n burada sonuna geldik. Baka yazlarla sizlerle bulumak dileiyle.

Benimle irtibata gemek isteyenler iin e-mail adresim;
[url = mailto:skate@glance.ws]skate <at> glance <dot> ws[/url]
[b]
Emir Akaydn
Skate / Glance
[/b]