[title = C64 Demolarn Anlamak]

"Eee... Ne ki imdi bu. Topu topu kp dnyor bir tane". Herhangi bir platformdaki herhangi bir demoyu deerlendirebilmeniz ve takdir edebilmeniz iin, O platformdaki teknik yetenekler hakknda bir miktar bilgiye sahip olmanz gerekir. 

Demo izleyen bir insann o demoyu beenip beenmemesini basit bir ekilde modellemeye alalm. Bir demoyu deerlendirirken, genel olarak insann beenisi iki farkl kaynaktan beslenir. Bunlardan birincisi, kiinin teknik bilgisi dahilinde, grd eylerin zorluu ve baars hakknda llebilir (hatta nmerik) ve objektif bir beeni trdr. kincisi ise daha sbjektif olarak, grlenlerin kiinin ne kadar houna gitmesi ile ilgilidir. Kii bu iki kaynaktan hissettii beeninin toplam kadar demoyu beenir diyebiliriz.

Sbjektif beeni, zaman iinde kiinin kendi kendine gelitirecei ve pek ok baka faktre bal bir olaydr ve sizlere burada yaklak ayn zorluktaki iki efektten hangisini daha ok sevmeniz gerektiini sylemek bize dmez. Fakat Objektif ltler hakkndaki bilgileri size verebiliriz. Bu yazdaki genel amacmz bu. Bu bilgileri size sunarken yle bir yaklam izleyeceiz:
- Platformun donanm zellikleri.
- Donanmn srasyla programclk, grafik ve mzik ynnden avantaj ve dezavantajlar.
- Efekt trendlerinin ksa tarihsel zeti.

[b]C64[/b]

C64 scene'i dnyada en uzun sredir yaayan demoscene. eitli ekollerin gelip getii, bugn bile baka platformlarla ok ynl etki alverii yapabilen bir retkenlik ortam. Bugn yaayan demoscene platformlar arasnda belki de en kstlayc donanma sahip.

nce C64 donanm hakknda ksa bir zet yapalm. Pek ounuzun bildii zere C64, 1 MHz, 8 bitlik bir ilemciye ve 64 K RAM bellee sahip. Bellek adreslerine direk olarak eriebilen (DMA ile) VIC-II adl grafik ipine sahip. Ayn zamanda dnyann gelmi gemi en baarl dijital kontroll analog ses ipi SID ile de 20 yldan fazladr kulaklarnz enlendiriyor.

Bu donanmn, demo yapmn nasl etkilediini  blmde inceleyelim: Programclk, grafik ve ses ynnden...

[b]Programclk[/b]

C64 donanmnda demo programcln ekillendiren baz ok nemli zellikler var:
- 8 bit olmak. Bazen insanlar farkl CPU'lar karlatrrken sadece MHz'leri karlatrmak gibi bir hata yapar. Oysa ki, mimarinin ka bit olduu genelde cycle bana (yani MHz ile saydnz, CPU'nun alma hzn belirleyen her bir tick) yapabildii ii ok etkiler. rnein 8 bitlik bir makinede 8 bitlik bir say zerinde ilem yapmak 16 bitlik bir say zerinde ayn ilemleri yapmaktan 2 ila 10 defa daha yava olabilir. 
- Komut setinde ARPMA ve BLME komutlar olmamas. te C64teki en nemli kstlardan biri budur. Bunun anlam toplama karma gibi ilemler genelde birka cycle'da yaplabilirken, arpma ve blme ilemleri kimi algoritmalarla 50 kat yava olabilir. Dnyada neredeyse arpma ilemi gerektirmeyen demo efekti olmad dnlrse, bu sorunun her C64 efektinde akllca zlmesi gereken bir problem olduu anlalr. Bir dier problem de 8 bitlik iki saynn arpmnn 16 bit olabilmesi, yani 8bitlik mimarinin kolay ileyebildii saylar aralndan tamasdr. Blme ise C64'te ok ok ok yava bir ilemdir. 
- Grafik blitter olmamas: Maalesef bellekte iki boyutlu pixel gruplarn bir yerden baka bir yere hzl kopyalamaya yarayan herhangi bir donanm yoktur. CPUnun da yle aman aman hzl olmamas yznden genelde iki boyutlu hareket eden ok fazla ve byk grafik bloklar yapmak zordur.
- Raster interruptlar. C64'de demo programcln balatan zellik budur. VIC cipi ekrana grnty gnderirken, bellekteki eitli blgeleri tarayp onlardaki grafik datasn yorumlayarak, ekrana gnderecei bilgileri satr satr hazrlar(*1) Ve herhangi bir zamanda taramakta olduu satr tutar. Buna raster satr denir. Kritik nokta VIC ipinin taramas esnasnda raster istenilen bir satra geldiinde kesinti(*2) yaratacak ekilde programlanabilmesidir. Bu sayede ekrann izimi srasnda ok kritik zamanlarda bellekte veya VIC yazmalarnda(*3) nemli deiiklikler yaparak ok ilgin efektler yaratabilir. Bu efektler arasnda eitli donanm kaynaklarn ekranda tekrar tekrar deiik satrlarda yeniden kullanarak artrmaktan tutun da bellekte tek bayt kopyalamadan, tm ekran x y ynlerinde kaydrmak, dalgalandrmak, esnetmek ve sktrmak, normal grafik modlarnn desteklediinden daha fazla renk veya znrlk elde etmek gibi baz donanm hack'leri bulunur.
- Floating point ilemcisi olmamas. Bunu ihtimalen tahmin etmisinizdir. Fakat Floating point ilemlerinin baka ekillerde (genellikle fixed point) yaplmas, zellikle 3 Boyutlu efektleri yapmay zorlatrr.

[b]Grafikler[/b]

- Toplam renk says: C64'te normalde 16 sabit renk vardr. 
- Grafik modlar: C64'de eitli znrlk ve renk kullanm kstlamalarna sahip grafik modlar vardr. Btn grafik modlarnda genellikle renk kullanmn kstlayan kurallar anlatabilmek iin cursor karesinden ksaca bahsetmek lazm. C64 ekran 8x8 piksellik kare bloklar halinde organize edilmitir. Bu karelerin bir tanesini ifade etmek iin Cursor karesi deyimi kullanlr. Ekran text modundayken cursor karelerine harfler oturur. Bitmap modundayken ise bir cursor karesindeki pikseller renk bilgilerini paylarlar. lk bata donanmn destekledii modlar: 
  - 320x200 Hires: Bir cursor karesindeki her piksel bir bit ile ifade edilir. Kare iindeki 1 olan pikseller ayn rengi alr (paylar). 0 olan pikseller de ikinci bir rengi paylar.
  - 160x200 MultiColor: Bir cursor karesinde yan yana gelen iki piksel yine birer bit ile temsil edilir. Fakat bu defa 2 bitlik ifade gc sayesinde cursor karesindeki her piksel 4 farkl renkten birini seebilir. Yan yana gelen 2 piksel birletii iin yatay znrlk yarya der(pikseller kalnlar). Bu modda bir cursor karesinde 4x8 piksel olmu olur. kullanlabilen 4 renkten biri ekrann arka plan rengidir. dier  renk her cursor karesinde deitirilebilir.
  - Karakter grafikleri: C64n text yazmak iin kulland fontlarn bitmapleri bellekte bir blgeden yklenebilir. Bu blgedeki bitmapler deitirilerek ok eitli fontlar yaratlabildii gibi, bu fontlara bir grafiin paralar yklenip, daha sonra harfler yan yana dizilerek byk grafik paralar oluturulabilir. Bu C64de ok kullanlr. nk 8x8 piksellik bloklar tek bayt ile ifade edildii iin ekran da grafik animasyonlar kolaylar. Karakter grafikleri genelde tek renkli veya 3 renkli olacak ekilde yaplr.
  - Super Hires ve Super MultiColor: Bu modlarda Bitmap grafiklerin nne veya arkasna sprite katmanlar konularak fazladan bir veya birka renk kullanma ans elde edilir.
  - FLI, AFLI: Bu modlar yazlm yoluyla her raster satrnda VIC ipinin yazmalarnn hassas bir zamanlama ile deitirilmesi sonucu bir cursor karesinde kullanlan renk saysn artran modlardr. rnein FLI, Mult color modunda bu trii uygulayarak cursor karesinin her satrnda kullanlan 3 rengin 2'sinin deitirilebilmesine izin verir. AFLI ayn eyi Hires iin yapar(kullanlan arka plan ve n plan renkleri, cursor karesi iinde her satrda deitirilebilir.)
  - Interlace Modlar: MCI, IFLI, I-AFLI: Ekrandaki bir piksel saniyede 50 kere taranr. Eer pikselin rengi bir taramada koyu mavi, bir sonrakinde siyah olmak zere srekli deitirilerek 50 taramada 25 kere siyah 25 kere koyu mavi gsterilirse, ekranda mavi ile siyah aras (lacivert) olarak grnr. Bu methodla C64'n gsterebildii renk says olan 16, 136'ya karlabilir. Fakat pratikte 136 rengin hepsi iyi gzkmez. imdiye kadar bahsettiimiz modlarda iki grafik izilir ve bu grafikler saniyede 50 defa deitirilirse Interlace modlar elde edilir. Ayn zamanda bu switchleme esnasnda resimlerden biri 1 piksel saa kaydrlarak kaln pikselli modlarda piksel kalnl azaltlabilir.
  - UFLI, SHFLI, SHIFLI, XFLI vs: bunlar daha da u noktalardaki modlardr. Ama henz kullanan insan says az.
- Border: C64te text ve Bitmap gsterilebilen alan ekrann ortasndadr. stten, alttan, sadan, ve soldan bir ereve ile evrilidir.
- Spritelar: Bitmap veya karakter grafiklerin nnde gsterilebilen donanm destekli 8 grafik blou vardr. Bunlar 24x21(Tek renkli - 12x21 3 Renkli) bloklardr. Yazlm hackleri kullanlmadan 8 tanesi ayn anda ekrann herhangi bir yerinde gsterilebilir. Spritelarn bir dier nemli zellii de yine baz yazlm hackleri ile borderlar ald zaman o blgede gsterilebilmeleridir.

[b]Mzik[/b]

C64'n SID ipi bugn bile zaman zaman ticari albmlerde kullanlan ok zgn bir sese sahiptir. Tabii onun da sahip olduu kstlamalar belirleyicidir.
- 3 Kanal ses. Herhalde bunu bilmeyen yoktur. Ayn anda  ses kullanlabilmesi genelde C64 mziklerinde sklkla kullanlan baz trickleri beraberinde getirmitir. rnein ayn kanaldan bas ile baterinin aldrlmas, veya tek kanaldan akor sesi verebilmek iin hzl arpej sesleri kullanlmas gibi.
- 3 kanaldan bir veya birkann kna uygulanabilen filtre. Bu filtreler seslerin ekillendirilmesinde ok etkin olabilmelerine karn SID ipinin iki versiyonu arasndaki farklar yznden mzisyenler genelde filtre deerlerini belli aralkta tutarlar.
- Sample kullanm. Uzun yllar sampler donanmlarnn pahall olmas, fazla bellek olmamas gibi sebeplerden sample kullanm demolarda sevilen ama kstl bir seviyede kald. Fakat yllar iinde sample sesler ve SID seslerini beraber kullanan mzikler ve ilerleyen tekniklerle, artan bit derinlikleri elde eden aldrma rutinleri grld.


[b]Efektler Tarihi (zeti)[/b]

[b]1. Dnem(1985-1992): VIC Sihirbazlar [/b]

Herkesin bildii logo + scroll dnemlerini bu yazda atlayp dorudan efektlerden bahsetmek gerekiyor. C64 scene'de 91-92lere kadar yaplan demolarda kullanlan efektler ounlukla VIC ipinin raster interrupt triklerini kullanan efektlerdi. Bu efektleri izlerken hatrlanmas gereken ey bunlarn genelde ok ok hassas zamanlamal (cycle-exact (*4)) kodlanmas gerektii. Bunlardan bir ka tanesine deinelim.
- Raster Bars: Ekran rengi her satrda deitirilerek renkli yatay izgiler elde edilir. Bunlar anime edilebilir. En ilkel demo efektidir.
- Raster Splits: Ekran rengi satr iinde birden fazla kere deitirilerek raster barlar bir satr iinde farkl renkler alr.
- Tech Tech: Ekran saa sola piksel piksel kaydrmaya yarayan yazmalar, her satrda deitirildiinde dalgalanma efekti oluur.
- FLD: VIC ipi kandrlarak ekran iziminin balamas geciktirilir. Bylece ekran komple aa kayar.
- Border ama:
  - Alt st borderlar: Her taramada ekrann en altna gelindiinde border ebad deitirilir. Bylece VIC ipi border zaten kapattn sanr oysa kapatmadan devam eder. Alt ve st borderlar yok olur. Bu blgede sprite gsterilebilir.
  - Yan borderlar: Her satr taranrken ekrann en sana gelindiinde border ebad deitirilir. Bylece VIC ipi border zaten kapattn sanr oysa kapatmadan devam eder. O satrda yan border yok olur. Yan bordern ak olduu her satrda bu ilem tekrarlanr. O yzden daha zor bir efekttir.
- VSP: FLD yaplrken ayn zamanda ok hassas bir zamanlamayla satr balangc da geciktirilebilir. bylece ekran hem x hem y ynnde hi bayt kopyalamadan kaydrlabilir.
- Sprite stretch: Spritelar normalde iki kat bytlebilir. Bu durumda sprite her satrn iki kere tekrar eder. te bu tekrar etme devresinin davran hacklenerek, bir sprite'n istenilen strlar istenildii kadar tekrar ettirilebilir. Bylece spritelar y ynnde istenildii gibi elastik esnemeler yapabilir
- Raster efektleri nnde spritelar: Spritelar ile ilgili en nemli problemlerden biri bir sprite'n bulunduu satrlarda kod zamanlamasnda deilklik gerektirmesidir(*5). Bu yzden hassas zamanlamal bir efektin nnde uuan spritelar grrseniz (zellikle y deiiyorsa) bilin ki efekt bir ka kat zorlam demektir.
- Multiplex: Ekranda 8 sprite izildikten sonra kesinti yaratp 8 spriten yeri deitirilerek. VIC'in onlarca sprite izmesi salanabilir.
- DYSP: Multiplex ile artrlm spritelar eer srekli birbirlerine gre y sralamas deitirecek ekilde hareket ederse iler zorlar. nk bu sefer her taramada spritelern yeni srasnn tespit edilip multiplex kodunun farkl srayla almas gerekir. Bu efekt zamannn en prestijli efektlerindendi.
- DYCP: Bir kayan yaznn her harfi y ynnde salnd zaman o efekt DYCP oluyor. DYCP yapan birden fazla kayan yaz ayn anda kaydrlarak dnya rekorlar elde ediliyor.
- FLI: Bu bir grafik modu olduu kadar bir efekt de saylr ayn zamanda. Ekranda ok detayl baz tricklerle VIC ipinin normalde 8 raster satrnda bir yapt renk belleine eriimi her satrda yapmas salanyor. Bu sayede grafiklerin renk bilgileri daha zgrce deiebiliyor.

Btn bu efektlerin birden fazlasnn da kombinasyonlar halinde kullanldi pek ok efekt vardr.

[b]2. Dnem (1990-1996): Matematikilerin douu[/b]

zellikle Amiga demolarndan gelen matematik arlkl, 2 ve 3 boyutlu efektler C64 scene'ini igal etmeye balar. ok temel bir drt artk Amiga'da yaplan bir efekti ok daha dk donanml C64 zerinde de yapabilmektir.

- Sinus noktalar: Binbir trl sins fonksiyonunun birbirinin iinden geirilmesi ile elde edilen sinus erilerine gre zplayan hareket eden noktacklar. Sinsleri C64te gerek zamanl hesaplamak mmkn olmadndan tablolar kullanlr (*6)

- Plazma: sinsleri iki boyutta stste bindirdiinizde elde ettiiniz deerlerin herbirine karlk gzel gei yapan renkleri koyduunuz zaman plazma efektlerini elde edersiniz.

- Vector: boyutlu dnen yaklaan uzaklaan objeler izdiren rutinlerdir. Bol miktarda matematik ilem gerektirirler. Bu ilemlerin ou arpma ve blmedir. Saylarn ou noktal saylardr (FPU yok hatrlayn). Genel olarak objelerin ke, kenar veya yzey saylarnn artmas ileri daha da zorlatrr. Ayrca ekranda izim yaplan blgenin byk olmas da ileri zorlatrr. eitli detay seviyeleri vardr. Artan zorluk srasna koyarsak:
  - 3D Dots: objeler noktalardan oluur
  - Bobs: noktalar yerine biraz daha byk grafik paracklar (mesela toplar) kullanlr.
  - Line: Wireframe diye de bilinen tel erevelerden oluan cisimler dndrlr. Sadece kenarlar izilir.
  - Hidden line: Arkada olduu iin grnmemesi gereken kenarlar izilmez.
  - Light line: Her kenarn bir klandrma deerine gre farkl renkte izilmesidir.
  - Filled vector: Yzeyler tek renkle ii dolu izilir. C64'teki en zor ilerden biri hzl bir poligon rutini yazabilmektir.
  - Flat shading: Yzeyler aldklar a gre tek renkle izilir. 
  - Goraud Shading: Her bir ke noktas ald a gre renk alr. Yzeyler sahip olduklar kelerin renkleri arasnda yumuak geile izilir.
  - Texture Mapping: Yzeylerin Bitmap grafiklerle kaplanmas. Henz C64'te 2-3 fps'den daha hzls yaplamad.

- Dk znrlkler(4x4,8x8): Baz efektler genelde ilk olarak daha dk znrlklerde (byk pikseller) yaplr. Sonraki yllarda daha yksek znrlklere klmaya allr.

- Landscape: Genelde bir fonksiyona bal olarak geni alanlarda yeryz ekilleri yaratan ve bunlarn zerinde uu yaplan efektlerdir.

- Raycaster(Doom): Doom'un ne olduunu bilmeyeniniz yoktur herhalde. Bu efektin duvarlar tek renk olan veya texture kapl deiik versiyonlar var.

- eitli 2 boyutlu rotasyon stretch: ounlukla 4x4 veya 8x8 modlarnda yaplan efektler


[b]3. dnem(1997-2000): Matematiin Krl[/b]

Bu dnemde ilgin bir krlma yaand. 4x4, 8x8 modlarnn ok fazla kullanlmas ve matematik efektler zorlandka fps'lerin dmesi scene'de negatif bir tepkiyi biriktirdi. Sonunda bu tepki yeni trend oldu. Kahrolsun byk pikseller diye baran scenerlar, "oldschool" efektlerin yine poplerlemesini salad. te yandan bu dnemde pek ok tekno mzikli byk pikselli demo da kt. Bu dnemde ok fazla yeni efektten bahsetmek zor.

- Bump mapping: Ik vurunca kabartma olarak gzken grafikler.

- X - Rotator: Bunlar genelde texture kapl ve x ekseni etrafnda dnen objeler.

[b]4. Dnem(2000 - 2006): Matematikilerle VIC Sihirbazlarnn bar ve yeni Asiler[/b]

2000'lerde baz newschool efektleri yapabilmek iin oldschool raster tricklerin kullanlmas bir bakma iki ekol yaklatrrken, daha nce byk piksel olduu iin eletirilen efektlerin yksek znrlk ve fps'lerde de yaplabildii ortaya kt. Bu srada 90 ortalarnda birka rnei grlen demolarda kavramsal btnlk, ak, senaryo gibi zellikleri ile farkl araylara giren demolar daha ok yaplmaya baland. Bu demolardaki odan teknikten artistik yne kaymas kimi scenerlarca eletirildi. Bu da onlar aslnda bu yaznn kapsam dna karp bata bahsettiimiz Sbjektif beeni kapsamna alyor.

Bu dnemde genel olarak eski efektlerin mkemmelletirilmesi dnda dikkat eken bir efekt tr daha var. Aslnda efekt tr olmaktan te bir metod:

- Drive coding: C64 demolarnn tamamnn kulland disket src 1541, kendi bnyesinde bir 6502 ilemcisi(1 MHz 8 bit) ve 2K RAM bellek bulundurur. Bu bellee c64 zerinden bir kod gnderilip oradaki CPUnun o kodu altrmas salanabilir. Bu sayede baz zel hzl ykleme rutinleri zaten uzun yllardr gelitiriliyordu. Fakat son birka ylda, baz zor efektlerde hesaplamalarn bir ksm drve CPUsuna gnderilip ordan sonular alnarak multprocessor alma prensibi kullanlyor. Bu demolarda ayn zamanda ok paral olup ykleme yapmas ileri iyice zorlatryor.

[b]Sonu:[/b]

imdi C64 efektlerinin en nemlilerini deerlendirebilecek kadar tanyorsunuz. Demo yapm, stiller, seimler srekli evrim geiriyor. Bu srekli deiimin iinde bir takm llebilir teknik kriterleriniz olmas c64 demolarndan alacanz zevki artracaktr. Hele hele daha ok demo izledike demolarda birbirine yaplan gndermeler ve rekabeti de farketmeye balarsnz. Buna bir de disk dergilerindeki yorumlar eklerseniz C64 scene'in o etkileyici toplam ambiyansn yakalarsnz ki bu demo yapmasanz bile her zaman iinde kalmak isteyeceiniz bir ortamdr.

 
-------
[b]Dipnotlar:[/b]
1- Zaten video kts reten hemen hemen btn cihazlar bu ekilde k retir. Ekrandaki pixellerin renk bilgilerini, satr satr ve her satrda soldan saa olmak zere video sinyaline dizerler ve ekrana gnderirler. CRT teknolojisine sahip btn ekranlar video bilgisindeki sinyalleri kullanarak ekran ayn srada tarayan bir na sahiptir. (aslnda : red, gree, blue)
2- CPU bir program altrmaktayken, IRQ bacana gelen bir istekle yapt ii durdurup yeni bir para program altrr. O program bitirdikten sonra kald yere geri dner. VIC ipinin interrupt isteme baca CPUnun IRQ pinine baldr.
3- Yazma register'n Trkesi. Kullanmaktan holandm birka Trke bilgisayar teriminden biri...
4- C64'n her raster satrnda harcyaca zaman bellidir (PAL makinelerde 63 cycle). Baz efektlerin almas iin mesela bir deerin bir yazmaca tam olarak satrn 58. cycle'nda yazlmas gerekebilir. Bir cycle ge kalmak efektin almamasna sebep olur. Bu yzden bu ii yapan kodu yazarken yazdnz assembly komutlarnn herbirinin ka cycle sreceini bilmeniz ve planlamanz gerekir.
5- Sprite olan satrlarda VIC, CPUnun o satrda kullanabilecei cyclelardan birka tanesini bloklar. Bu yzden CPU kodunun alma zamanlamas deiir.
6- Tablo kullanm C64 matematik demo programclndaki akln yatt yerdir. Hangi fonksiyonlar tablolara dntrmek ve o tablolarn bellekteki yerleimi ok kritik zaman kazanlar salayabilir.